[
  {
    "path": ".gitattributes",
    "content": "*.js linguist-language=Java\n*.css linguist-language=Java\n*.html linguist-language=Java\n\n\n"
  },
  {
    "path": ".gitignore",
    "content": "target/\nlogs/\nout/\n!.mvn/wrapper/maven-wrapper.jar\n### STS ###\n.apt_generated\n.classpath\n.factorypath\n.project\n.settings\n.springBeans\n.sts4-cache\n### IntelliJ IDEA ###\n.idea\n*.iws\n*.iml\n*.ipr\nlog/\n### NetBeans ###\nnbproject/private/\nbuild/\nnbbuild/\ndist/\nnbdist/\n.nb-gradle/\n### Mac\n.DS_Store\n*/.DS_Store\n### VS Code ###\n*.project\n*.factorypath\n\n### 屏蔽，需要完整代码联系博主：微信847064370\n*.html\ntemplates/\nwebapp/\n*.sql\n\n"
  },
  {
    "path": "README.md",
    "content": "最新消息，博主已开通B站账号：[Java刘哥](https://space.bilibili.com/160340478)\n<hr/> \n\n\n\n# 租房系统\n基于SpringBoot实现的租房系统，包括三种角色：管理员、房东、租客。\n- 详细介绍：[https://liuyanzhao.com/shop/manland.html](https://liuyanzhao.com/shop/manland.html) <br/>\n- 预览地址：[http://manland.liuyanzhao.com](http://manland.liuyanzhao.com)  <br/> <br/>\n\n\n## 博主开发的其他租房或房屋交易项目全部在这里 <br/>\n[https://liuyanzhao.com/shop.html?k=房屋](https://liuyanzhao.com/shop.html?k=房屋)\n- [基于SpringBoot+Vue房屋租赁系统 租房 Verio的Vue版本](https://liuyanzhao.com/shop/verio-vue.html)\n- [基于SpringBoot的房屋租赁平台 房屋展示平台 留学生房屋租赁平台](https://liuyanzhao.com/shop/housekey.html)\n- [基于SpringBoot/SSM的最新最轻量级最漂亮的的二手房屋交易系统RentUP](https://liuyanzhao.com/shop/rentup.html)\n- [基于SpringBoot/SSM的房屋租赁系统租房系统Rello](https://liuyanzhao.com/shop/rello.html)\n- [基于SpringBoot/SSM房屋租赁系统 verio3.0/协同过滤，房屋合租系统 租房系统](https://liuyanzhao.com/shop/verio.html)\n- [基于SpringBoot房屋租赁系统manland4.0](https://liuyanzhao.com/shop/manland.html)\n\n  \n# 功能介绍\n#### 管理员功能：\n- 房屋管理\n- 租房类型管理(合租/整租)\n- 房屋管理\n- 订单管理\n- 新闻公告管理\n- 收支明细\n- 用户管理\n- 角色管理、权限管理\n\n#### 房东功能\n- 房屋管理\n- 订单管理：取消订单、审核退租、查看合同、下载打印合同\n- 收支明细\n- 个人信息修改、账号密码修改\n\n## 租客功能\n订单管理：创建订单、确认合同、支付订单、取消订单、退租、电子合同查看、下载打印合同\n收支明细\n个人信息修改、账号密码修改\n\n\n\n## 技术组成\n- SpringBoot\n- MyBatis\n- Shiro\n- Thymeleaf\n- Bootstrap + jQuery\n- MySQL\n- Maven\n\n\n## 预览\n1-首页1.png\n![1-首页1.png](img/1-首页1.png)\n2-首页2.png\n![2-首页2.png](img/2-首页2.png)\n3-房屋列表1.png\n![3-房屋列表1.png](img/3-房屋列表1.png)\n4-房屋列表2.png\n![4-房屋列表2.png](img/4-房屋列表2.png)\n5-房屋详情1.png\n![5-房屋详情1.png](img/5-房屋详情1.png)\n6-房屋详情2.png\n![6-房屋详情2.png](img/6-房屋详情2.png)\n7-新闻公告列表.png\n![7-新闻公告列表.png](img/7-新闻公告列表.png)\n8-新闻公告详情.png\n![8-新闻公告详情.png](img/8-新闻公告详情.png)\n10-注册页面.png\n![10-注册页面.png](img/10-注册页面.png)\n10-登录页面.png\n![10-登录页面.png](img/10-登录页面.png)\n11-点击预定.png\n![11-点击预定.png](img/11-点击预定.png)\n12-签订合同页面.png\n![12-签订合同页面.png](img/12-签订合同页面.png)\n13-支付订单页面.png\n![13-支付订单页面.png](img/13-支付订单页面.png)\n14-租客订单列表.png\n![14-租客订单列表.png](img/14-租客订单列表.png)\n15-租客的房屋信息.png\n![15-租客的房屋信息.png](img/15-租客的房屋信息.png)\n16-充值管理.png\n![16-充值管理.png](img/16-充值管理.png)\n17-个人信息.png\n![17-个人信息.png](img/17-个人信息.png)\n18-出租者的房屋信息列表.png\n![18-出租者的房屋信息列表.png](img/18-出租者的房屋信息列表.png)\n19-出租者的订单管理.png\n![19-出租者的订单管理.png](img/19-出租者的订单管理.png)\n20-管理员房屋管理.png\n![20-管理员房屋管理.png](img/20-管理员房屋管理.png)\n21-出租分类.png\n![21-出租分类.png](img/21-出租分类.png)\n22-财务统计.png\n![22-财务统计.png](img/22-财务统计.png)\n23-公告管理.png\n![23-公告管理.png](img/23-公告管理.png)\n24-编辑发布新闻公告.png\n![24-编辑发布新闻公告.png](img/24-编辑发布新闻公告.png)\n25-用户管理.png\n![25-用户管理.png](img/25-用户管理.png)\n26-房屋信息发布.png\n![26-房屋信息发布.png](img/26-房屋信息发布.png)\n27-房屋信息编辑.png\n![27-房屋信息编辑.png](img/27-房屋信息编辑.png)\n\n\n\n其他页面，请直接通过演示网站访问 <br/>\n管理员账号admin/123456，房东mayun/123456，租客zhangsan/123456\n\n\n## 联系方式\n目前只开源后端代码，需要前端和sql等完整代码请联系博主 <br/>\n同时也提供部署或讲解服务  <br/>\n微信/QQ：847064370 <br/>\n[博主博客主页](https://liuyanzhao.com) <br/>\n\n## 日志\n\n- 2021/11/13 4.0版本\n    - 新增中介角色，功能跟房东类似，需要填写房东信息\n    - 注册登录增加验证码，不区分大小写\n\n- 2021/3/17  3.0版本\n    - 大改\n    - 角色改成 管理员、房东和租客三种，将原来用户角色拆分成房东和租客\n    - 租房时间单位由月改成日，租房时可以选择租到具体哪一天\n    - 新增退租功能\n    - 取消充值，用户余额字段，新增收支明细\n    - 管理员可以对订单做任何操作操作\n\n- 2020/12/14 2.0版本\n    - 根据部分同学要求，重构代码\n    — 修改导航菜单，加入图标\n    - 固定顶部导航\n    - 添加城市切换切换卡\n    - 添加合租室友信息\n    \n- 2020/12/06\n    - 根据部分同学要求，重构代码\n    - 把房东和租客两种角色合二为一，用户既可以租房也可以发布出租信息。 \n    - 把租房分类改成了整租和合租。\n    - 新增余额充值和收支明细，以及付款后租客余额减少，出租人越增加，定时返回押金\n    - 修改了合同内容，新增合同下载和打印\n    - 新增新闻公告\n    - 新增联系我们页面\n    - 新增押金字段\n    - 新增支持租金和面积检索\n<hr/>\n\n- 2020/10/18 1.0 版本\n- 完成初步开发\n- 管理员功能：登录，房屋管理、房屋类型管理、订单管理、房东管理，租客管理、财务统计，个人信息等。还要角色管理和权限管理，这里隐藏了。\n- 房东功能：注册，登录，房屋管理(房屋添加修改删除上架等)、订单管理、查看电子合同。\n- 租客功能：注册，登录，房屋检索，房屋租赁，查看订单，查看电子合同。\n\n"
  },
  {
    "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    <groupId>com.example</groupId>\n    <artifactId>Manland</artifactId>\n    <version>4.0.0</version>\n    <name>Manland</name>\n\n\n    <description>\n        基于SpringBoot的房租租赁系统\n    </description>\n\n    <developers>\n        <developer>\n            <id>saysky</id>\n            <name>言曌</name>\n            <email>admin@example.com</email>\n            <url>https://example.com</url>\n        </developer>\n    </developers>\n\n    <parent>\n        <groupId>org.springframework.boot</groupId>\n        <artifactId>spring-boot-starter-parent</artifactId>\n        <version>2.1.7.RELEASE</version>\n        <relativePath/>\n    </parent>\n\n    <properties>\n        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>\n        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>\n        <java.version>1.8</java.version>\n        <druid.version>1.1.10</druid.version>\n        <lombok.version>1.18.2</lombok.version>\n        <commons-lang3.version>3.8</commons-lang3.version>\n        <hutool-all.version>4.1.13</hutool-all.version>\n        <docker.image.prefix>saysky</docker.image.prefix>\n    </properties>\n\n    <dependencies>\n\n        <dependency>\n            <groupId>org.springframework.boot</groupId>\n            <artifactId>spring-boot-starter-web</artifactId>\n            <exclusions>\n                <exclusion>\n                    <groupId>org.springframework.boot</groupId>\n                    <artifactId>spring-boot-starter-tomcat</artifactId>\n                </exclusion>\n            </exclusions>\n        </dependency>\n\n        <dependency>\n            <groupId>org.springframework.boot</groupId>\n            <artifactId>spring-boot-starter-test</artifactId>\n            <scope>test</scope>\n        </dependency>\n\n        <dependency>\n            <groupId>org.springframework.boot</groupId>\n            <artifactId>spring-boot-starter-aop</artifactId>\n        </dependency>\n\n        <!-- undertow -->\n        <dependency>\n            <groupId>org.springframework.boot</groupId>\n            <artifactId>spring-boot-starter-undertow</artifactId>\n        </dependency>\n\n        <!-- mybatis-plus begin -->\n        <dependency>\n            <groupId>com.baomidou</groupId>\n            <artifactId>mybatis-plus-boot-starter</artifactId>\n            <version>3.1.2</version>\n        </dependency>\n        <dependency>\n            <groupId>org.springframework.boot</groupId>\n            <artifactId>spring-boot-starter-jdbc</artifactId>\n        </dependency>\n        <!--mybatis-plus end-->\n\n        <!-- mysql-->\n        <dependency>\n            <groupId>mysql</groupId>\n            <artifactId>mysql-connector-java</artifactId>\n            <scope>runtime</scope>\n        </dependency>\n\n\n        <!-- druid数据源 -->\n        <dependency>\n            <groupId>com.alibaba</groupId>\n            <artifactId>druid-spring-boot-starter</artifactId>\n            <version>${druid.version}</version>\n        </dependency>\n\n        <!--   thymeleaf     -->\n        <dependency>\n            <groupId>org.springframework.boot</groupId>\n            <artifactId>spring-boot-starter-thymeleaf</artifactId>\n        </dependency>\n\n\n        <!-- Lombok -->\n        <dependency>\n            <groupId>org.projectlombok</groupId>\n            <artifactId>lombok</artifactId>\n            <version>${lombok.version}</version>\n            <scope>provided</scope>\n        </dependency>\n\n\n        <!-- commons-lang3工具包 -->\n        <dependency>\n            <groupId>org.apache.commons</groupId>\n            <artifactId>commons-lang3</artifactId>\n            <version>${commons-lang3.version}</version>\n        </dependency>\n\n        <!-- hutool工具包 -->\n        <dependency>\n            <groupId>cn.hutool</groupId>\n            <artifactId>hutool-all</artifactId>\n            <version>${hutool-all.version}</version>\n        </dependency>\n\n        <dependency>\n            <groupId>org.springframework.boot</groupId>\n            <artifactId>spring-boot-devtools</artifactId>\n            <optional>true</optional>\n        </dependency>\n\n        <!--序列化-->\n        <dependency>\n            <groupId>com.alibaba</groupId>\n            <artifactId>fastjson</artifactId>\n            <version>1.2.72</version>\n        </dependency>\n\n        <dependency>\n            <groupId>com.google.guava</groupId>\n            <artifactId>guava</artifactId>\n            <version>26.0-jre</version>\n        </dependency>\n\n        <!--Shiro-->\n        <dependency>\n            <groupId>org.apache.shiro</groupId>\n            <artifactId>shiro-spring</artifactId>\n            <version>1.4.0</version>\n        </dependency>\n\n        <!--thymeleaf-shiro-extras-->\n        <dependency>\n            <groupId>com.github.theborakompanioni</groupId>\n            <artifactId>thymeleaf-extras-shiro</artifactId>\n            <version>2.0.0</version>\n        </dependency>\n        <dependency>\n            <groupId>com.google.code.gson</groupId>\n            <artifactId>gson</artifactId>\n            <version>2.8.5</version>\n        </dependency>\n\n        <!-- 邮件 -->\n        <dependency>\n            <groupId>io.github.biezhi</groupId>\n            <artifactId>oh-my-email</artifactId>\n            <version>0.0.3</version>\n        </dependency>\n\n        <dependency>\n            <groupId>junit</groupId>\n            <artifactId>junit</artifactId>\n            <version>4.12</version>\n        </dependency>\n\n        <!--        验证码-->\n        <dependency>\n            <groupId>com.github.penggle</groupId>\n            <artifactId>kaptcha</artifactId>\n            <version>2.3.2</version>\n        </dependency>\n\n    </dependencies>\n    <repositories>\n        <repository>\n            <id>aliyun</id>\n            <url>http://maven.aliyun.com/nexus/content/groups/public</url>\n        </repository>\n    </repositories>\n\n    <pluginRepositories>\n        <pluginRepository>\n            <id>aliyun</id>\n            <url>http://maven.aliyun.com/nexus/content/groups/public</url>\n        </pluginRepository>\n    </pluginRepositories>\n\n    <build>\n        <finalName>manland</finalName>\n        <plugins>\n            <plugin>\n                <groupId>org.springframework.boot</groupId>\n                <artifactId>spring-boot-maven-plugin</artifactId>\n                <configuration>\n                    <fork>true</fork>\n                </configuration>\n            </plugin>\n        </plugins>\n    </build>\n</project>\n\n\n"
  },
  {
    "path": "src/main/java/com/example/sens/Application.java",
    "content": "package com.example.sens;\n\nimport lombok.extern.slf4j.Slf4j;\nimport org.mybatis.spring.annotation.MapperScan;\nimport org.springframework.boot.SpringApplication;\nimport org.springframework.boot.autoconfigure.SpringBootApplication;\nimport org.springframework.cache.annotation.EnableCaching;\nimport org.springframework.context.ApplicationContext;\nimport org.springframework.scheduling.annotation.EnableScheduling;\n\n/**\n * <pre>\n *     SENS run!\n * </pre>\n *\n * @author : saysky\n * @date : 2019/11/14\n */\n@Slf4j\n@SpringBootApplication\n@EnableCaching\n@EnableScheduling\n@MapperScan(\"com.example.sens.mapper*\")\npublic class Application {\n    public static void main(String[] args) {\n        ApplicationContext context = SpringApplication.run(Application.class, args);\n        String serverPort = context.getEnvironment().getProperty(\"server.port\");\n        log.info(\"SENS started at http://localhost:\" + serverPort);\n    }\n\n}\n"
  },
  {
    "path": "src/main/java/com/example/sens/common/base/BaseEntity.java",
    "content": "package com.example.sens.common.base;\n\nimport com.baomidou.mybatisplus.annotation.IdType;\nimport com.baomidou.mybatisplus.annotation.TableField;\nimport com.baomidou.mybatisplus.annotation.TableId;\nimport com.baomidou.mybatisplus.annotation.TableLogic;\nimport com.example.sens.common.constant.CommonConstant;\nimport lombok.Data;\n\nimport java.io.Serializable;\nimport java.util.Date;\n\n/**\n * @author 言曌\n * @date 2019-08-07 00:28\n */\n@Data\npublic class BaseEntity implements Serializable {\n\n    /**\n     * ID，自动生成\n     */\n    @TableId(type = IdType.AUTO)\n    private Long id;\n\n    /**\n     * 删除状态：1删除，0未删除\n     */\n    @TableField(value = \"del_flag\")\n    @TableLogic\n    private Integer delFlag = CommonConstant.STATUS_NORMAL;\n\n    /**\n     * 创建人账号\n     */\n    private String createBy;\n\n    /**\n     * 创建时间\n     */\n    private Date createTime;\n\n    /**\n     * 更新人\n     */\n    private String updateBy;\n\n    /**\n     * 更新时间\n     */\n    private Date updateTime;\n}\n"
  },
  {
    "path": "src/main/java/com/example/sens/common/base/BaseService.java",
    "content": "package com.example.sens.common.base;\n\nimport cn.hutool.core.date.DateUtil;\nimport cn.hutool.core.util.StrUtil;\nimport com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;\nimport com.baomidou.mybatisplus.core.mapper.BaseMapper;\nimport com.baomidou.mybatisplus.extension.plugins.pagination.Page;\nimport com.example.sens.vo.SearchVo;\nimport com.example.sens.dto.QueryCondition;\n\nimport java.io.Serializable;\nimport java.lang.reflect.InvocationTargetException;\nimport java.util.Date;\nimport java.util.List;\n\n/**\n * @author 言曌\n * @date 2019-09-04 22:47\n */\n// JDK8函数式接口注解 仅能包含一个抽象方法\npublic interface BaseService<E, ID extends Serializable> {\n\n    /**\n     * @return\n     */\n    BaseMapper<E> getRepository();\n\n    /**\n     * 根据ID获取\n     *\n     * @param id\n     * @return\n     */\n    default E get(ID id) {\n        return getRepository().selectById(id);\n    }\n\n    /**\n     * 获取所有列表\n     *\n     * @return\n     */\n    default List<E> getAll() {\n        return getRepository().selectList(null);\n    }\n\n    /**\n     * 获取总数\n     *\n     * @return\n     */\n    default Integer getTotalCount() {\n        return getRepository().selectCount(null);\n    }\n\n    /**\n     * 添加\n     *\n     * @param entity\n     * @return\n     */\n    default E insert(E entity) {\n        getRepository().insert(entity);\n        return entity;\n    }\n\n    /**\n     * 修改\n     *\n     * @param entity\n     * @return\n     */\n    default E update(E entity) {\n        getRepository().updateById(entity);\n        return entity;\n    }\n\n    /**\n     * 保存或者更新\n     * @param entity\n     * @return\n     */\n    default E insertOrUpdate(E entity) {\n        try {\n            Object id = entity.getClass().getMethod(\"getId\").invoke(entity);\n            if (id != null) {\n                update(entity);\n            } else {\n                insert(entity);\n            }\n        } catch (IllegalAccessException e) {\n            e.printStackTrace();\n        } catch (InvocationTargetException e) {\n            e.printStackTrace();\n        } catch (NoSuchMethodException e) {\n            e.printStackTrace();\n        }\n        return entity;\n    }\n\n    /**\n     * 批量保存与修改\n     *\n     * @param list\n     * @return\n     */\n    default List<E> batchInsert(List<E> list) {\n        for (E e : list) {\n            getRepository().insert(e);\n        }\n        return list;\n    }\n\n\n    /**\n     * 根据Id删除\n     *\n     * @param id\n     */\n    default void delete(ID id) {\n        getRepository().deleteById(id);\n    }\n\n    /**\n     * 批量删除\n     *\n     * @param ids\n     */\n    default void batchDelete(List<ID> ids) {\n        getRepository().deleteBatchIds(ids);\n    }\n\n\n    /**\n     * 根据id批量查询\n     * @param ids\n     * @return\n     */\n    default List<E> findByBatchIds(List<ID> ids) {\n        return getRepository().selectBatchIds(ids);\n    }\n\n    /**\n     * 获取所有\n     *\n     * @return\n     */\n    default List<E> findAll() {\n        return getRepository().selectList(null);\n    }\n\n    /**\n     * 根据条件查询获取\n     *\n     * @param queryWrapper\n     * @return\n     */\n    default List<E> findAll(QueryWrapper<E> queryWrapper) {\n        return getRepository().selectList(queryWrapper);\n    }\n\n    /**\n     * 根据查询条件不分页获取\n     *\n     * @param condition\n     * @return\n     */\n    default List<E> findAll(QueryCondition<E> condition) {\n        E e = condition.getData();\n\n        //对指定字段查询\n        QueryWrapper<E> queryWrapper = getQueryWrapper(e);\n\n        return getRepository().selectList(queryWrapper);\n    }\n\n    /**\n     * 分页获取\n     *\n     * @param page\n     * @return\n     */\n    default Page<E> findAll(Page<E> page) {\n        return (Page<E>) getRepository().selectPage(page, null);\n    }\n\n    /**\n     * 获得查询器\n     *\n     * @param e\n     * @return\n     */\n    QueryWrapper<E> getQueryWrapper(E e);\n\n    /**\n     * 根据查询条件分页获取\n     *\n     * @param page\n     * @param condition\n     * @return\n     */\n    default Page<E> findAll(Page<E> page, QueryCondition<E> condition) {\n        E e = condition.getData();\n        SearchVo searchVo = condition.getSearchVo();\n\n        //对指定字段查询\n        QueryWrapper<E> queryWrapper = getQueryWrapper(e);\n\n        //查询日期范围\n        if (searchVo != null) {\n            String startDate = searchVo.getStartDate();\n            String endDate = searchVo.getEndDate();\n            if (StrUtil.isNotBlank(startDate) && StrUtil.isNotBlank(endDate)) {\n                Date start = DateUtil.parse(startDate);\n                Date end = DateUtil.parse(endDate);\n                queryWrapper.between(\"create_time\", start, end);\n            }\n        }\n        return (Page<E>) getRepository().selectPage(page, queryWrapper);\n    }\n\n    /**\n     * 获取查询条件的结果数\n     *\n     * @param queryWrapper\n     * @return\n     */\n    default long count(QueryWrapper<E> queryWrapper) {\n        return getRepository().selectCount(queryWrapper);\n    }\n\n}\n\n"
  },
  {
    "path": "src/main/java/com/example/sens/common/constant/CommonConstant.java",
    "content": "package com.example.sens.common.constant;\n\n/**\n * 常量\n * @author 言曌\n */\npublic interface CommonConstant {\n\n    /**\n     * 正常状态\n     */\n    Integer STATUS_NORMAL = 0;\n\n    /**\n     * 用户密码加盐的盐\n     */\n    String PASSWORD_SALT = \"sens\";\n\n    /**\n     * none\n     */\n    String NONE = \"none\";\n\n    String CONDITION = \"condition\";\n}\n"
  },
  {
    "path": "src/main/java/com/example/sens/config/MvcConfig.java",
    "content": "package com.example.sens.config;\n\nimport lombok.extern.slf4j.Slf4j;\nimport org.springframework.context.annotation.Bean;\nimport org.springframework.context.annotation.ComponentScan;\nimport org.springframework.context.annotation.Configuration;\nimport org.springframework.context.annotation.PropertySource;\nimport org.springframework.web.servlet.LocaleResolver;\nimport org.springframework.web.servlet.config.annotation.*;\nimport org.springframework.web.servlet.i18n.SessionLocaleResolver;\n\nimport java.util.Locale;\n\n/**\n * 拦截器，资源路径配置\n */\n@Slf4j\n@Configuration\n@EnableWebMvc\n@ComponentScan(basePackages = \"com.example.sens.controller\")\n@PropertySource(value = \"classpath:application.yaml\", ignoreResourceNotFound = true, encoding = \"UTF-8\")\npublic class MvcConfig implements WebMvcConfigurer {\n\n\n    /**\n     * 配置静态资源路径\n     *\n     * @param registry registry\n     */\n    @Override\n    public void addResourceHandlers(ResourceHandlerRegistry registry) {\n        registry.addResourceHandler(\"/static/**\")\n                .addResourceLocations(\"classpath:/static/\");\n        registry.addResourceHandler(\"/**\")\n                .addResourceLocations(\"classpath:/templates/themes/\")\n                .addResourceLocations(\"classpath:/robots.txt\");\n        registry.addResourceHandler(\"/upload/**\")\n                .addResourceLocations(\"file:///\" + System.getProperties().getProperty(\"user.home\") + \"/sens/upload/\");\n        registry.addResourceHandler(\"/favicon.png\")\n                .addResourceLocations(\"classpath:/static/images/favicon.png\");\n    }\n\n    @Override\n    public void addCorsMappings(CorsRegistry registry) {\n        registry.addMapping(\"/**\")\n                .allowCredentials(true)\n                .allowedHeaders(\"*\")\n                .allowedOrigins(\"*\")\n                .allowedMethods(\"*\");\n    }\n\n    @Bean\n    public LocaleResolver localeResolver() {\n        SessionLocaleResolver slr = new SessionLocaleResolver();\n        slr.setDefaultLocale(Locale.CHINA);\n        return slr;\n    }\n}\n"
  },
  {
    "path": "src/main/java/com/example/sens/config/mybatisplus/MybatisPlusConfig.java",
    "content": "package com.example.sens.config.mybatisplus;\n\nimport com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;\nimport com.baomidou.mybatisplus.extension.plugins.PerformanceInterceptor;\nimport org.springframework.context.annotation.Bean;\nimport org.springframework.context.annotation.Configuration;\n\n\n/**\n * @author 言曌\n * @date 2018/12/22 下午1:49\n */\n\n@Configuration\npublic class MybatisPlusConfig {\n\n    /***\n     * plus 的性能优化\n     * @return\n     */\n    @Bean\n    public PerformanceInterceptor performanceInterceptor() {\n        PerformanceInterceptor performanceInterceptor = new PerformanceInterceptor();\n        /*<!-- SQL 执行性能分析，开发环境使用，线上不推荐。 maxTime 指的是 sql 最大执行时长 -->*/\n        performanceInterceptor.setMaxTime(1000);\n        /*<!--SQL是否格式化 默认false-->*/\n        performanceInterceptor.setFormat(false);\n        return performanceInterceptor;\n    }\n\n    /**\n     * mybatis-plus分页插件\n     */\n    @Bean\n    public PaginationInterceptor paginationInterceptor() {\n        return new PaginationInterceptor();\n    }\n\n\n\n}\n"
  },
  {
    "path": "src/main/java/com/example/sens/config/properties/IgnoredUrlsProperties.java",
    "content": "package com.example.sens.config.properties;\n\nimport lombok.Data;\nimport org.springframework.boot.context.properties.ConfigurationProperties;\nimport org.springframework.context.annotation.Configuration;\n\nimport java.util.ArrayList;\nimport java.util.List;\n\n/**\n * @author example\n */\n@Data\n@Configuration\n@ConfigurationProperties(prefix = \"ignored\")\npublic class IgnoredUrlsProperties {\n\n    private List<String> urls = new ArrayList<>();\n}\n"
  },
  {
    "path": "src/main/java/com/example/sens/config/schedule/SystemSchedule.java",
    "content": "package com.example.sens.config.schedule;\n\nimport com.example.sens.entity.Order;\nimport com.example.sens.entity.Post;\nimport com.example.sens.entity.User;\nimport com.example.sens.enums.OrderStatusEnum;\nimport com.example.sens.enums.PostStatusEnum;\nimport com.example.sens.mapper.OrderMapper;\nimport com.example.sens.mapper.PostMapper;\nimport com.example.sens.mapper.UserMapper;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.scheduling.annotation.Scheduled;\nimport org.springframework.stereotype.Component;\nimport org.springframework.transaction.annotation.Transactional;\n\nimport java.util.List;\n\n/**\n * 定时器\n *\n * @author 言曌\n * @date 2020/3/21 7:18 下午\n */\n@Component\npublic class SystemSchedule {\n\n    @Autowired\n    private PostMapper postMapper;\n\n    @Autowired\n    private OrderMapper orderMapper;\n\n    @Autowired\n    private UserMapper userMapper;\n\n    /**\n     * 更新到期的订单\n     */\n    @Scheduled(fixedRate = 10000)\n    @Transactional(rollbackFor = Exception.class)\n    public void updatePostStatus() {\n        List<Order> orderList = orderMapper.findOverDueOrder();\n        for (Order order : orderList) {\n\n\n            // 更新房屋状态\n            Post post = postMapper.selectById(order.getPostId());\n            if (post == null) {\n                return;\n            }\n\n            // 退还押金\n            User user = userMapper.selectById(order.getUserId());\n            if (user == null) {\n                return;\n            }\n\n\n            User ownerUser = userMapper.selectById(post.getId());\n            if (ownerUser == null) {\n                return;\n            }\n\n            if (ownerUser.getMoney() < post.getDeposit()) {\n                // 业主余额不足，无法退回押金\n                // 结束订单\n                order.setStatus(OrderStatusEnum.DEPOSIT_RETURN_FAIL.getCode());\n                orderMapper.updateById(order);\n                return;\n            }\n\n\n            //  以下代码暂不考虑并发问题，暂不用乐观锁实现\n            // 业主余额减少\n            ownerUser.setMoney(ownerUser.getMoney() - post.getDeposit());\n            userMapper.updateById(ownerUser);\n\n            // 租客余额增加\n            user.setMoney(user.getMoney() + post.getDeposit());\n            userMapper.updateById(user);\n\n            // 结束订单\n            order.setStatus(OrderStatusEnum.FINISHED.getCode());\n            orderMapper.updateById(order);\n\n            post.setPostStatus(PostStatusEnum.ON_SALE.getCode());\n            postMapper.updateById(post);\n\n        }\n\n\n    }\n\n}\n"
  },
  {
    "path": "src/main/java/com/example/sens/config/shiro/MyRealm.java",
    "content": "package com.example.sens.config.shiro;\n\nimport com.example.sens.common.constant.CommonConstant;\nimport com.example.sens.entity.Permission;\nimport com.example.sens.entity.Role;\nimport com.example.sens.service.PermissionService;\nimport com.example.sens.service.RoleService;\nimport com.example.sens.service.UserService;\nimport com.example.sens.entity.User;\nimport com.example.sens.enums.UserStatusEnum;\nimport com.example.sens.util.RegexUtil;\nimport lombok.extern.slf4j.Slf4j;\nimport org.apache.shiro.authc.*;\nimport org.apache.shiro.authz.AuthorizationInfo;\nimport org.apache.shiro.authz.SimpleAuthorizationInfo;\nimport org.apache.shiro.realm.AuthorizingRealm;\nimport org.apache.shiro.subject.PrincipalCollection;\nimport org.apache.shiro.util.ByteSource;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.context.annotation.Lazy;\n\nimport java.util.List;\nimport java.util.Objects;\nimport java.util.Set;\nimport java.util.stream.Collectors;\n\n@Slf4j\npublic class MyRealm extends AuthorizingRealm {\n\n    @Autowired\n    @Lazy\n    private UserService userService;\n\n    @Autowired\n    @Lazy\n    private RoleService roleService;\n\n    @Autowired\n    @Lazy\n    private PermissionService permissionService;\n\n\n    /**\n     * 认证信息(身份验证) Authentication 是用来验证用户身份\n     */\n    @Override\n    protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {\n        log.info(\"认证-->MyShiroRealm.doGetAuthenticationInfo()\");\n        //1.验证账号\n        User user;\n        String account = (String) token.getPrincipal();\n        if (RegexUtil.isIdCard(account)) {\n            user = userService.findByIdCard(account);\n        } else {\n            user = userService.findByUserName(account);\n        }\n        if (user == null) {\n            //用户不存在\n            log.info(\"用户不存在! 登录名:{}, 密码:{}\", account, token.getCredentials());\n            return null;\n        }\n        Role role = roleService.findByUserId(user.getId());\n        if (role != null) {\n            user.setRole(role);\n        }\n\n\n        //2.判断账号是否被封号\n        if (!Objects.equals(user.getStatus(), UserStatusEnum.NORMAL.getCode())) {\n            throw new LockedAccountException(\"账号被封禁\");\n        }\n\n        //3.封装authenticationInfo，准备验证密码\n        SimpleAuthenticationInfo authenticationInfo = new SimpleAuthenticationInfo(\n                user, // 账号\n                user.getUserPass(), // 密码\n                ByteSource.Util.bytes(CommonConstant.PASSWORD_SALT), // 盐\n                getName() // realm name\n        );\n        System.out.println(\"realName:\" + getName());\n        return authenticationInfo;\n    }\n\n\n    @Override\n    protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {\n\n        SimpleAuthorizationInfo authorizationInfo = new SimpleAuthorizationInfo();\n        User user = (User) principals.getPrimaryPrincipal();\n\n        Role role = roleService.findByUserId(user.getId());\n\n        authorizationInfo.addRole(role.getRole());\n        List<Permission> permissions = permissionService.listPermissionsByRoleId(role.getId());\n        //把权限的URL全部放到authorizationInfo中去\n        Set<String> urls = permissions.stream().map(p -> p.getUrl()).collect(Collectors.toSet());\n        authorizationInfo.addStringPermissions(urls);\n\n        return authorizationInfo;\n    }\n}\n"
  },
  {
    "path": "src/main/java/com/example/sens/config/shiro/ShiroConfig.java",
    "content": "package com.example.sens.config.shiro;\n\nimport at.pollux.thymeleaf.shiro.dialect.ShiroDialect;\nimport com.example.sens.config.properties.IgnoredUrlsProperties;\nimport org.apache.shiro.authc.credential.AllowAllCredentialsMatcher;\nimport org.apache.shiro.authc.credential.HashedCredentialsMatcher;\nimport org.apache.shiro.mgt.SecurityManager;\nimport org.apache.shiro.spring.web.ShiroFilterFactoryBean;\nimport org.apache.shiro.web.mgt.DefaultWebSecurityManager;\nimport org.springframework.context.annotation.Bean;\nimport org.springframework.context.annotation.Configuration;\n\nimport javax.servlet.Filter;\nimport java.util.LinkedHashMap;\nimport java.util.List;\nimport java.util.Map;\n\n\n@Configuration\npublic class ShiroConfig {\n\n    @Bean\n    public ShiroDialect shiroDialect() {\n        return new ShiroDialect();\n    }\n\n    @Bean\n    IgnoredUrlsProperties getIgnoredUrlsProperties() {\n        return new IgnoredUrlsProperties();\n    }\n\n    @Bean\n    public ShiroFilterFactoryBean shiroFilter(SecurityManager securityManager) {\n        ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean();\n        shiroFilterFactoryBean.setSecurityManager(securityManager);\n        //自定义拦截器\n        Map<String, Filter> filtersMap = new LinkedHashMap<String, Filter>();\n        //访问权限配置\n        filtersMap.put(\"requestURL\", getURLPathMatchingFilter());\n        shiroFilterFactoryBean.setFilters(filtersMap);\n\n        //拦截器.\n        Map<String, String> filterChainDefinitionMap = new LinkedHashMap<String, String>();\n        // 配置不会被拦截的链接 顺序判断\n        List<String> urls = getIgnoredUrlsProperties().getUrls();\n        for (String url : urls) {\n            filterChainDefinitionMap.put(url, \"anon\");\n        }\n        filterChainDefinitionMap.put(\"/admin\", \"authc\");\n        filterChainDefinitionMap.put(\"/admin/**\", \"requestURL\");\n        filterChainDefinitionMap.put(\"/**\", \"anon\");\n\n        shiroFilterFactoryBean.setFilterChainDefinitionMap(filterChainDefinitionMap);\n\n\n        // 如果不设置默认会自动寻找Web工程根目录下的\"/login\"页面\n        shiroFilterFactoryBean.setLoginUrl(\"/\");\n        // 登录成功后要跳转的链接\n        shiroFilterFactoryBean.setSuccessUrl(\"/\");\n        //未授权界面;\n        shiroFilterFactoryBean.setUnauthorizedUrl(\"/403\");\n\n        return shiroFilterFactoryBean;\n\n    }\n\n    @Bean\n    public SecurityManager securityManager() {\n        DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();\n        securityManager.setRealm(myRealm());\n        return securityManager;\n    }\n\n\n    @Bean\n    public MyRealm myRealm() {\n        MyRealm normalRealm = new MyRealm();\n        normalRealm.setCredentialsMatcher(hashedCredentialsMatcher());\n        return normalRealm;\n    }\n\n    /**\n     * 访问 权限 拦截器\n     *\n     * @return\n     */\n    public URLPathMatchingFilter getURLPathMatchingFilter() {\n        return new URLPathMatchingFilter();\n    }\n\n    /**\n     * MD5加盐加密十次\n     *\n     * @return\n     */\n    @Bean\n    public HashedCredentialsMatcher hashedCredentialsMatcher() {\n        HashedCredentialsMatcher hashedCredentialsMatcher = new HashedCredentialsMatcher();\n        //散列算法:这里使用MD5算法;\n        hashedCredentialsMatcher.setHashAlgorithmName(\"md5\");\n        //散列的次数，md5(\"\")\n        hashedCredentialsMatcher.setHashIterations(10);\n        return hashedCredentialsMatcher;\n    }\n\n    @Bean\n    public AllowAllCredentialsMatcher allowAllCredentialsMatcher() {\n        return new AllowAllCredentialsMatcher();\n    }\n\n"
  },
  {
    "path": "src/main/java/com/example/sens/config/shiro/URLPathMatchingFilter.java",
    "content": "package com.example.sens.config.shiro;\n\nimport com.alibaba.fastjson.JSONObject;\nimport com.example.sens.service.PermissionService;\nimport com.example.sens.util.SpringUtil;\nimport org.apache.shiro.SecurityUtils;\nimport org.apache.shiro.subject.Subject;\nimport org.apache.shiro.web.filter.PathMatchingFilter;\nimport org.apache.shiro.web.util.WebUtils;\n\nimport javax.servlet.ServletRequest;\nimport javax.servlet.ServletResponse;\nimport javax.servlet.http.HttpServletRequest;\nimport java.io.PrintWriter;\nimport java.util.HashMap;\nimport java.util.Map;\nimport java.util.Set;\n\n/**\n * URL拦截器\n */\npublic class URLPathMatchingFilter extends PathMatchingFilter {\n\n\n    PermissionService permissionService = null;\n    private PermissionService permissionService() {\n        if (permissionService == null) {\n            permissionService = (PermissionService) SpringUtil.getBean(\"permissionServiceImpl\");\n        }\n        return permissionService;\n    }\n\n    @Override\n    protected boolean onPreHandle(ServletRequest request, ServletResponse response, Object mappedValue) throws Exception {\n        //请求的url\n        String requestURL = getPathWithinApplication(request);\n        System.out.println(\"请求的url :\" + requestURL);\n        Subject subject = SecurityUtils.getSubject();\n        if (!subject.isAuthenticated()) {\n            // 如果没有登录, 进入登录流程\n            WebUtils.issueRedirect(request, response, \"/login\");\n            return false;\n        }\n\n        //从session里读取当前用户的权限URL列表\n        Set<String> urls = (Set<String>) subject.getSession().getAttribute(\"permissionUrls\");\n        if (urls.contains(requestURL)) {\n            return true;\n        }\n\n        //没有权限\n        if (isAjax((HttpServletRequest) request)) {\n            response.setCharacterEncoding(\"utf-8\");\n            response.setContentType(\"application/json; charset=utf-8\");\n            PrintWriter writer = response.getWriter();\n            Map<String, Object> map = new HashMap<>();\n            map.put(\"code\", 0);\n            map.put(\"msg\", \"没有权限访问\");\n            writer.write(JSONObject.toJSONString(map));\n        } else {\n            WebUtils.issueRedirect(request, response, \"/403\");\n        }\n\n        return false;\n    }\n\n\n    public static boolean isAjax(HttpServletRequest httpRequest) {\n        return (httpRequest.getHeader(\"X-Requested-With\") != null\n                && \"XMLHttpRequest\"\n                .equals(httpRequest.getHeader(\"X-Requested-With\").toString()));\n    }\n\n"
  },
  {
    "path": "src/main/java/com/example/sens/controller/admin/AdminController.java",
    "content": "package com.example.sens.controller.admin;\n\nimport com.example.sens.entity.Permission;\nimport com.example.sens.entity.Role;\nimport com.example.sens.entity.User;\nimport com.example.sens.service.PermissionService;\nimport com.example.sens.controller.common.BaseController;\nimport com.example.sens.dto.JsonResult;\nimport com.example.sens.service.RoleService;\nimport lombok.extern.slf4j.Slf4j;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.stereotype.Controller;\nimport org.springframework.ui.Model;\nimport org.springframework.web.bind.annotation.*;\n\nimport java.util.*;\n\n/**\n * <pre>\n *     后台首页控制器\n * </pre>\n */\n@Slf4j\n@Controller\n@RequestMapping(value = \"/admin\")\npublic class AdminController extends BaseController {\n\n    @Autowired\n    private PermissionService permissionService;\n\n    @Autowired\n    private RoleService roleService;\n\n    /**\n     * 请求后台页面\n     *\n     * @param model model\n     * @return 模板路径admin/admin_index\n     */\n    @GetMapping\n    public String index(Model model) {\n        return \"admin/admin_index\";\n    }\n\n\n    /**\n     * 获得当前用户的菜单\n     *\n     * @return\n     */\n    @GetMapping(value = \"/currentMenus\")\n    @ResponseBody\n    public JsonResult getMenu() {\n        Long userId = getLoginUserId();\n        List<Permission> permissions = permissionService.findPermissionTreeByUserIdAndResourceType(userId, \"menu\");\n        return JsonResult.success(\"\", permissions);\n    }\n\n    /**\n     * 获得当前登录用户\n     */\n    @GetMapping(value = \"/currentUser\")\n    @ResponseBody\n    public JsonResult currentUser() {\n        User user = getLoginUser();\n        if (user != null) {\n            return JsonResult.success(\"\", user);\n        }\n        return JsonResult.error(\"用户未登录\");\n    }\n\n    /**\n     * 获得当前用户角色编码\n     */\n    @GetMapping(value = \"/currentRole\")\n    @ResponseBody\n    public JsonResult currentRole() {\n        Role role = roleService.findByUserId(getLoginUserId());\n        if (role == null) {\n            return JsonResult.error(\"用户未登录或无角色\");\n        }\n        return JsonResult.success(\"\", role.getRole());\n    }\n\n\n    @GetMapping(\"/pay\")\n    public String pay(@RequestParam(\"money\") Integer money, Model model) {\n        model.addAttribute(\"money\", money);\n        return \"admin/alipay\";\n    }\n\n}\n"
  },
  {
    "path": "src/main/java/com/example/sens/controller/admin/AttachmentController.java",
    "content": "package com.example.sens.controller.admin;\n\nimport com.example.sens.controller.common.BaseController;\nimport com.example.sens.util.FileUtil;\nimport lombok.extern.slf4j.Slf4j;\nimport org.springframework.stereotype.Controller;\nimport org.springframework.web.bind.annotation.*;\nimport org.springframework.web.multipart.MultipartFile;\n\nimport java.util.HashMap;\nimport java.util.Map;\n\n\n/**\n * <pre>\n *     后台附件控制器\n * </pre>\n *\n * @author : saysky\n * @date : 2019/12/19\n */\n@Slf4j\n@Controller\n@RequestMapping(value = \"/admin/file\")\npublic class AttachmentController extends BaseController {\n\n\n    /**\n     * 上传文件\n     *\n     * @param file file\n     * @return Map\n     */\n    @PostMapping(value = \"/upload\", produces = {\"application/json;charset=UTF-8\"})\n    @ResponseBody\n    public Map<String, Object> uploadFile(@RequestParam(\"file\") MultipartFile file) {\n        Map<String, Object> map = new HashMap<>(1);\n        String path = FileUtil.upload(file);\n        map.put(\"link\", path);\n        return map;\n    }\n\n\n}\n"
  },
  {
    "path": "src/main/java/com/example/sens/controller/admin/CategoryController.java",
    "content": "package com.example.sens.controller.admin;\n\nimport com.baomidou.mybatisplus.extension.plugins.pagination.Page;\nimport com.example.sens.controller.common.BaseController;\nimport com.example.sens.entity.Category;\nimport com.example.sens.dto.JsonResult;\nimport com.example.sens.service.CategoryService;\nimport com.example.sens.util.PageUtil;\nimport lombok.extern.slf4j.Slf4j;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.stereotype.Controller;\nimport org.springframework.ui.Model;\nimport org.springframework.web.bind.annotation.*;\n\n/**\n * <pre>\n *     后台分类管理控制器\n * </pre>\n *\n */\n@Slf4j\n@Controller\n@RequestMapping(value = \"/admin/category\")\npublic class CategoryController extends BaseController {\n\n    @Autowired\n    private CategoryService categoryService;\n\n\n    /**\n     * 查询所有分类并渲染category页面\n     *\n     * @return 模板路径admin/admin_category\n     */\n    @GetMapping\n    public String categories(@RequestParam(value = \"page\", defaultValue = \"0\") Integer pageNumber,\n                             @RequestParam(value = \"size\", defaultValue = \"10\") Integer pageSize,\n                             @RequestParam(value = \"sort\", defaultValue = \"cateSort\") String sort,\n                             @RequestParam(value = \"order\", defaultValue = \"desc\") String order, Model model) {\n        Page page = PageUtil.initMpPage(pageNumber, pageSize, sort, order);\n        Page<Category> categoryPage = categoryService.findAll(page);\n        model.addAttribute(\"categories\", categoryPage.getRecords());\n        model.addAttribute(\"pageInfo\", PageUtil.convertPageVo(page));\n        return \"admin/admin_category\";\n    }\n\n    /**\n     * 新增/修改分类目录\n     *\n     * @param category category对象\n     * @return 重定向到/admin/category\n     */\n    @PostMapping(value = \"/save\")\n    @ResponseBody\n    public JsonResult saveCategory(@ModelAttribute Category category) {\n        categoryService.insertOrUpdate(category);\n        return JsonResult.success(\"保存成功\");\n    }\n\n    /**\n     * 删除分类\n     *\n     * @param cateId 分类Id\n     * @return JsonResult\n     */\n    @DeleteMapping(value = \"/delete\")\n    @ResponseBody\n    public JsonResult checkDelete(@RequestParam(\"id\") Long cateId) {\n        //1.判断这个分类有房屋\n        Integer count = categoryService.countPostByCateId(cateId);\n        if (count != 0) {\n            return JsonResult.error(\"该分类已经有了房屋，无法删除\");\n        }\n        categoryService.delete(cateId);\n        return JsonResult.success(\"删除成功\");\n    }\n\n\n    /**\n     * 跳转到修改页面\n     *\n     * @param cateId cateId\n     * @param model  model\n     * @return 模板路径admin/admin_category\n     */\n    @GetMapping(value = \"/edit\")\n    public String toEditCategory(Model model,\n                                 @RequestParam(value = \"page\", defaultValue = \"0\") Integer pageNumber,\n                                 @RequestParam(value = \"size\", defaultValue = \"10\") Integer pageSize,\n                                 @RequestParam(value = \"sort\", defaultValue = \"cateSort\") String sort,\n                                 @RequestParam(value = \"order\", defaultValue = \"desc\") String order,\n                                 @RequestParam(\"id\") Long cateId) {\n        Page page = PageUtil.initMpPage(pageNumber, pageSize, sort, order);\n\n        //更新的分类\n        Category category = categoryService.get(cateId);\n        if (category == null) {\n            return this.renderNotFound();\n        }\n        model.addAttribute(\"updateCategory\", category);\n\n        // 所有分类\n        Page<Category> categoryPage = categoryService.findAll(page);\n        model.addAttribute(\"categories\", categoryPage.getRecords());\n        model.addAttribute(\"pageInfo\", PageUtil.convertPageVo(page));\n        return \"admin/admin_category\";\n    }\n}\n"
  },
  {
    "path": "src/main/java/com/example/sens/controller/admin/NoticeController.java",
    "content": "package com.example.sens.controller.admin;\n\nimport cn.hutool.http.HtmlUtil;\nimport com.baomidou.mybatisplus.extension.plugins.pagination.Page;\nimport com.example.sens.controller.common.BaseController;\nimport com.example.sens.dto.JsonResult;\nimport com.example.sens.entity.Notice;\nimport com.example.sens.exception.MyBusinessException;\nimport com.example.sens.service.NoticeService;\nimport com.example.sens.util.PageUtil;\nimport com.example.sens.vo.SearchVo;\nimport lombok.extern.slf4j.Slf4j;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.stereotype.Controller;\nimport org.springframework.ui.Model;\nimport org.springframework.web.bind.annotation.*;\n\nimport java.util.List;\n\n/**\n * <pre>\n *     后台公告管理控制器\n * </pre>\n *\n * @author : saysky\n * @date : 2020/12/6\n */\n@Slf4j\n@Controller\n@RequestMapping(value = \"/admin/notice\")\npublic class NoticeController extends BaseController {\n\n    @Autowired\n    private NoticeService noticeService;\n\n    /**\n     * 处理后台获取公告列表的请求\n     *\n     * @param model model\n     * @return 模板路径admin/admin_notice\n     */\n    @GetMapping\n    public String notices(Model model,\n                          @RequestParam(value = \"page\", defaultValue = \"1\") Integer pageNumber,\n                          @RequestParam(value = \"size\", defaultValue = \"10\") Integer pageSize,\n                          @RequestParam(value = \"sort\", defaultValue = \"createTime\") String sort,\n                          @RequestParam(value = \"order\", defaultValue = \"desc\") String order,\n                          @ModelAttribute SearchVo searchVo) {\n\n\n        Page page = PageUtil.initMpPage(pageNumber, pageSize, sort, order);\n        Page<Notice> noticePage = noticeService.findAll(page);\n        List<Notice> noticeList = noticePage.getRecords();\n\n        model.addAttribute(\"notices\", noticeList);\n        model.addAttribute(\"pageInfo\", PageUtil.convertPageVo(page));\n        model.addAttribute(\"order\", order);\n        model.addAttribute(\"sort\", sort);\n\n        return \"admin/admin_notice\";\n    }\n\n\n    /**\n     * 处理跳转到新建公告页面\n     *\n     * @return 模板路径admin/admin_editor\n     */\n    @GetMapping(value = \"/new\")\n    public String newNotice(Model model) {\n        return \"admin/admin_notice_new\";\n    }\n\n\n    /**\n     * 添加/更新公告\n     *\n     * @param notice Notice实体\n     */\n    @PostMapping(value = \"/save\")\n    @ResponseBody\n    public JsonResult pushNotice(@ModelAttribute Notice notice) {\n        // 1、提取摘要\n        int postSummary = 100;\n        //房屋摘要\n        String summaryText = HtmlUtil.cleanHtmlTag(notice.getContent());\n        if (summaryText.length() > postSummary) {\n            String summary = summaryText.substring(0, postSummary);\n            notice.setSummary(summary);\n        } else {\n            notice.setSummary(summaryText);\n        }\n        noticeService.insertOrUpdate(notice);\n        return JsonResult.success(\"发布成功\");\n    }\n\n\n    /**\n     * 处理删除公告的请求\n     *\n     * @param noticeId 公告编号\n     * @return 重定向到/admin/notice\n     */\n    @DeleteMapping(value = \"/delete\")\n    @ResponseBody\n    public JsonResult removeNotice(@RequestParam(\"id\") Long noticeId) {\n        noticeService.delete(noticeId);\n        return JsonResult.success(\"删除成功\");\n    }\n\n\n    /**\n     * 跳转到编辑公告页面\n     *\n     * @param noticeId 公告编号\n     * @param model    model\n     * @return 模板路径admin/admin_editor\n     */\n    @GetMapping(value = \"/edit\")\n    public String editNotice(@RequestParam(\"id\") Long noticeId, Model model) {\n        Notice notice = noticeService.get(noticeId);\n        if (notice == null) {\n            throw new MyBusinessException(\"公告不存在\");\n        }\n\n        model.addAttribute(\"notice\", notice);\n\n        return \"admin/admin_notice_edit\";\n    }\n\n\n}\n"
  },
  {
    "path": "src/main/java/com/example/sens/controller/admin/OrderController.java",
    "content": "package com.example.sens.controller.admin;\n\nimport com.baomidou.mybatisplus.extension.plugins.pagination.Page;\nimport com.example.sens.controller.common.BaseController;\nimport com.example.sens.dto.JsonResult;\nimport com.example.sens.entity.Order;\nimport com.example.sens.enums.OrderStatusEnum;\nimport com.example.sens.service.OrderService;\nimport com.example.sens.util.PageUtil;\nimport lombok.extern.slf4j.Slf4j;\nimport org.apache.commons.lang3.StringUtils;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.stereotype.Controller;\nimport org.springframework.transaction.annotation.Transactional;\nimport org.springframework.ui.Model;\nimport org.springframework.web.bind.annotation.*;\n\nimport java.text.DateFormat;\nimport java.text.ParseException;\nimport java.text.SimpleDateFormat;\n\n/**\n * <pre>\n *     订单管理控制器\n * </pre>\n */\n@Slf4j\n@Controller\n@RequestMapping(value = \"/admin/order\")\npublic class OrderController extends BaseController {\n\n    @Autowired\n    private OrderService orderService;\n\n    /**\n     * 查询所有订单并渲染order页面\n     *\n     * @return 模板路径admin/admin_order\n     */\n    @GetMapping\n    public String orders(@RequestParam(value = \"page\", defaultValue = \"0\") Integer pageNumber,\n                         @RequestParam(value = \"size\", defaultValue = \"10\") Integer pageSize,\n                         @RequestParam(value = \"sort\", defaultValue = \"id\") String sort,\n                         @RequestParam(value = \"order\", defaultValue = \"desc\") String order, Model model) {\n        Page page = PageUtil.initMpPage(pageNumber, pageSize, sort, order);\n        Page<Order> orderPage = null;\n\n        Order orderCondition = new Order();\n        orderPage = orderService.findAll(orderCondition, page);\n        model.addAttribute(\"orders\", orderPage.getRecords());\n        model.addAttribute(\"pageInfo\", PageUtil.convertPageVo(page));\n        return \"admin/admin_order\";\n    }\n\n    /**\n     * 我出租的房屋订单\n     *\n     * @return 模板路径admin/admin_order\n     */\n    @GetMapping(\"/lease\")\n    public String lease(@RequestParam(value = \"page\", defaultValue = \"0\") Integer pageNumber,\n                        @RequestParam(value = \"size\", defaultValue = \"10\") Integer pageSize,\n                        @RequestParam(value = \"sort\", defaultValue = \"id\") String sort,\n                        @RequestParam(value = \"order\", defaultValue = \"desc\") String order, Model model) {\n        Page page = PageUtil.initMpPage(pageNumber, pageSize, sort, order);\n        Order orderCondition = new Order();\n        orderCondition.setOwnerUserId(getLoginUserId());\n        Page<Order> orderPage = orderService.findAll(orderCondition, page);\n        model.addAttribute(\"orders\", orderPage.getRecords());\n        model.addAttribute(\"pageInfo\", PageUtil.convertPageVo(page));\n\n        model.addAttribute(\"type\", \"lease\");\n        return \"admin/admin_order\";\n    }\n\n\n    /**\n     * 我的租房订单\n     *\n     * @return 模板路径admin/admin_order\n     */\n    @GetMapping(\"/rent\")\n    public String rent(@RequestParam(value = \"page\", defaultValue = \"0\") Integer pageNumber,\n                       @RequestParam(value = \"size\", defaultValue = \"10\") Integer pageSize,\n                       @RequestParam(value = \"sort\", defaultValue = \"id\") String sort,\n                       @RequestParam(value = \"order\", defaultValue = \"desc\") String order, Model model) {\n        Page page = PageUtil.initMpPage(pageNumber, pageSize, sort, order);\n        Order orderCondition = new Order();\n        orderCondition.setUserId(getLoginUserId());\n        Page<Order> orderPage  = orderService.findAll(orderCondition, page);\n        model.addAttribute(\"orders\", orderPage.getRecords());\n        model.addAttribute(\"pageInfo\", PageUtil.convertPageVo(page));\n\n        model.addAttribute(\"type\", \"rent\");\n        return \"admin/admin_order\";\n    }\n\n\n    /**\n     * 删除订单\n     *\n     * @param id 订单Id\n     * @return JsonResult\n     */\n    @DeleteMapping(value = \"/delete\")\n    @ResponseBody\n    public JsonResult delete(@RequestParam(\"id\") Long id) {\n        Order order = orderService.get(id);\n        if (order == null) {\n            return JsonResult.error(\"订单不存在\");\n        }\n        if (OrderStatusEnum.HAS_PAY.getCode().equals(order.getStatus())) {\n            return JsonResult.error(\"订单生效中，不能删除\");\n        }\n\n        orderService.delete(id);\n        return JsonResult.success(\"删除成功\");\n    }\n\n    /**\n     * 完结订单\n     *\n     * @param id 订单Id\n     * @return JsonResult\n     */\n    @PostMapping(value = \"/finish\")\n    @ResponseBody\n    public JsonResult finish(@RequestParam(\"id\") Long id) {\n        Order order = orderService.get(id);\n        if (order == null) {\n            return JsonResult.error(\"订单不存在\");\n        }\n\n        order.setStatus(OrderStatusEnum.FINISHED.getCode());\n        orderService.update(order);\n        return JsonResult.success(\"完结成功\");\n    }\n\n    /**\n     * 关闭订单\n     *\n     * @param id 订单Id\n     * @return JsonResult\n     */\n    @PostMapping(value = \"/close\")\n    @ResponseBody\n    @Transactional\n    public JsonResult close(@RequestParam(\"id\") Long id) {\n        // 修改订单状态\n        Order order = orderService.get(id);\n        if (order == null) {\n            return JsonResult.error(\"订单不存在\");\n        }\n\n        order.setStatus(OrderStatusEnum.CLOSED.getCode());\n        orderService.update(order);\n\n        return JsonResult.success(\"取消订单成功\");\n    }\n\n    /**\n     * 财务页面\n     *\n     * @param model\n     * @return\n     */\n    @GetMapping(\"/finance\")\n    public String finance(@RequestParam(value = \"startDate\", required = false) String startDate,\n                          @RequestParam(value = \"endDate\", required = false) String endDate,\n                          @RequestParam(value = \"page\", defaultValue = \"0\") Integer pageNumber,\n                          @RequestParam(value = \"size\", defaultValue = \"10\") Integer pageSize,\n                          @RequestParam(value = \"sort\", defaultValue = \"id\") String sort,\n                          @RequestParam(value = \"order\", defaultValue = \"desc\") String order,\n                          Model model) throws ParseException {\n\n        Page page = PageUtil.initMpPage(pageNumber, pageSize, sort, order);\n        Order condition = new Order();\n        Page<Order> orderPage = null;\n        Order orderCondition = new Order();\n        DateFormat dateFormat = new SimpleDateFormat(\"yyyy-MM-dd\");\n        if (StringUtils.isNotEmpty(startDate)) {\n            orderCondition.setStartDate(dateFormat.parse(startDate));\n        }\n        if (StringUtils.isNotEmpty(endDate)) {\n            orderCondition.setEndDate(dateFormat.parse(endDate));\n        }\n        if (loginUserIsUser()) {\n            // 用户\n            orderCondition.setUserId(getLoginUserId());\n        }\n        orderPage = orderService.findAll(orderCondition, page);\n\n        model.addAttribute(\"orders\", orderPage.getRecords());\n        model.addAttribute(\"pageInfo\", PageUtil.convertPageVo(page));\n\n        Integer totalPrice = orderService.getTotalPriceSum(condition);\n        model.addAttribute(\"totalPrice\", totalPrice == null ? 0 : totalPrice);\n        model.addAttribute(\"startDate\", startDate);\n        model.addAttribute(\"endDate\", endDate);\n        return \"admin/admin_finance\";\n    }\n\n\n}\n"
  },
  {
    "path": "src/main/java/com/example/sens/controller/admin/PermissionController.java",
    "content": "package com.example.sens.controller.admin;\n\nimport com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;\nimport com.baomidou.mybatisplus.extension.plugins.pagination.Page;\nimport com.example.sens.entity.Permission;\nimport com.example.sens.dto.JsonResult;\nimport com.example.sens.enums.ResourceTypeEnum;\nimport com.example.sens.service.PermissionService;\nimport com.example.sens.util.PageUtil;\nimport lombok.extern.slf4j.Slf4j;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.stereotype.Controller;\nimport org.springframework.ui.Model;\nimport org.springframework.web.bind.annotation.*;\n\nimport java.util.List;\n\n/**\n * 后台权限管理控制器\n */\n@Slf4j\n@Controller\n@RequestMapping(value = \"/admin/permission\")\npublic class PermissionController {\n\n\n    @Autowired\n    private PermissionService permissionService;\n\n    /**\n     * 查询所有权限并渲染permission页面\n     *\n     * @return 模板路径admin/admin_permission\n     */\n    @GetMapping\n    public String permissions(@RequestParam(value = \"page\", defaultValue = \"1\") Integer pageNumber,\n                              @RequestParam(value = \"size\", defaultValue = \"10\") Integer pageSize,\n                              @RequestParam(value = \"sort\", defaultValue = \"id\") String sort,\n                              @RequestParam(value = \"order\", defaultValue = \"asc\") String order, Model model) {\n        //权限列表\n        Page page = PageUtil.initMpPage(pageNumber, pageSize, sort, order);\n\n        Page<Permission> permissions = permissionService.findAll(page);\n        model.addAttribute(\"permissionList\", permissions.getRecords());\n        model.addAttribute(\"pageInfo\", PageUtil.convertPageVo(page));\n\n        // 所有权限\n        model.addAttribute(\"permissions\", getPermissionList());\n        return \"admin/admin_permission\";\n    }\n\n    /**\n     * 新增/修改权限\n     *\n     * @param permission permission对象\n     * @return 重定向到/admin/permission\n     */\n    @PostMapping(value = \"/save\")\n    public String savePermission(@ModelAttribute Permission permission) {\n        permissionService.insertOrUpdate(permission);\n        return \"redirect:/admin/permission\";\n    }\n\n    /**\n     * 删除权限\n     *\n     * @param permissionId 权限Id\n     * @return JsonResult\n     */\n    @DeleteMapping(value = \"/delete\")\n    @ResponseBody\n    public JsonResult checkDelete(@RequestParam(\"id\") Long permissionId) {\n//        // 请先删除子权限\n        Integer childCount = permissionService.countChildPermission(permissionId);\n        if (childCount > 0) {\n            return JsonResult.error(\"请先删除子节点\");\n        }\n        permissionService.delete(permissionId);\n        return JsonResult.success();\n    }\n\n    /**\n     * 跳转到新增页面\n     *\n     * @param model model\n     * @return 模板路径admin/admin_permission\n     */\n    @GetMapping(value = \"/new\")\n    public String toAddPermission(Model model) {\n        // 带有等级的权限列表\n        model.addAttribute(\"permissionList\", permissionService.findPermissionListWithLevel());\n        // 权限列表\n        model.addAttribute(\"permissions\", getPermissionList());\n        return \"admin/admin_permission_new\";\n    }\n\n    /**\n     * 跳转到修改页面\n     *\n     * @param permissionId permissionId\n     * @param model        model\n     * @return 模板路径admin/admin_permission\n     */\n    @GetMapping(value = \"/edit\")\n    public String toEditPermission(Model model, @RequestParam(\"id\") Long permissionId) {\n        //更新的权限\n        Permission permission = permissionService.get(permissionId);\n        model.addAttribute(\"updatePermission\", permission);\n\n        // 带有等级的权限列表\n        model.addAttribute(\"permissionList\", permissionService.findPermissionListWithLevel());\n        // 权限列表\n        model.addAttribute(\"permissions\", getPermissionList());\n        // 设置URL为编辑的URL\n        return \"admin/admin_permission_edit\";\n    }\n\n\n    /**\n     * 所有权限\n     * @return\n     */\n    public List<Permission> getPermissionList() {\n        //权限列表\n        QueryWrapper queryWrapper = new QueryWrapper();\n        queryWrapper.orderByAsc(\"sort\");\n        List<Permission> permissions = permissionService.findAll(queryWrapper);\n        // 设置URL为编辑的URL\n        for (Permission permission : permissions) {\n            permission.setUrl(\"/admin/permission/edit?id=\" + permission.getId());\n            if (ResourceTypeEnum.MENU.getCode().equals(permission.getResourceType())) {\n                permission.setName(permission.getName() + \"[\" + ResourceTypeEnum.MENU.getDescription() + \"]\");\n            } else if (ResourceTypeEnum.BUTTON.getCode().equals(permission.getResourceType())) {\n                permission.setName(permission.getName() + \"[\" + ResourceTypeEnum.BUTTON.getDescription() + \"]\");\n            } else if (ResourceTypeEnum.PAGE.getCode().equals(permission.getResourceType())) {\n                permission.setName(permission.getName() + \"[\" + ResourceTypeEnum.PAGE.getDescription() + \"]\");\n            }\n        }\n        return permissions;\n    }\n}\n"
  },
  {
    "path": "src/main/java/com/example/sens/controller/admin/PostController.java",
    "content": "package com.example.sens.controller.admin;\n\nimport cn.hutool.http.HtmlUtil;\nimport com.baomidou.mybatisplus.extension.plugins.pagination.Page;\nimport com.example.sens.controller.common.BaseController;\nimport com.example.sens.dto.JsonResult;\nimport com.example.sens.exception.MyBusinessException;\nimport com.example.sens.entity.*;\nimport com.example.sens.enums.*;\nimport com.example.sens.service.*;\nimport com.example.sens.util.PageUtil;\nimport com.example.sens.util.RegexUtil;\nimport com.example.sens.util.SensUtils;\nimport com.example.sens.vo.SearchVo;\nimport lombok.extern.slf4j.Slf4j;\nimport org.apache.commons.lang3.StringUtils;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.stereotype.Controller;\nimport org.springframework.ui.Model;\nimport org.springframework.web.bind.annotation.*;\n\nimport java.util.List;\nimport java.util.Objects;\n\n/**\n * <pre>\n *     后台房屋管理控制器\n * </pre>\n *\n * @author : saysky\n * @date : 2019/12/10\n */\n@Slf4j\n@Controller\n@RequestMapping(value = \"/admin/post\")\npublic class PostController extends BaseController {\n\n    @Autowired\n    private PostService postService;\n\n    @Autowired\n    private CityService cityService;\n\n    @Autowired\n    private CategoryService categoryService;\n\n    @Autowired\n    private OrderService orderService;\n\n    public static final String TITLE = \"title\";\n\n    public static final String CONTENT = \"content\";\n\n\n    /**\n     * 处理后台获取房屋列表的请求\n     *\n     * @param model model\n     * @return 模板路径admin/admin_post\n     */\n    @GetMapping\n    public String posts(Model model,\n                        @RequestParam(value = \"status\", defaultValue = \"-1\") Integer status,\n                        @RequestParam(value = \"page\", defaultValue = \"1\") Integer pageNumber,\n                        @RequestParam(value = \"size\", defaultValue = \"10\") Integer pageSize,\n                        @RequestParam(value = \"sort\", defaultValue = \"createTime\") String sort,\n                        @RequestParam(value = \"order\", defaultValue = \"desc\") String order,\n                        @ModelAttribute SearchVo searchVo) {\n\n        Post condition = new Post();\n        condition.setPostStatus(status);\n\n        Page page = PageUtil.initMpPage(pageNumber, pageSize, sort, order);\n        Post postCondition = new Post();\n        Page<Post> postPage = postService.findPostByCondition(postCondition, page);\n        List<Post> postList = postPage.getRecords();\n\n        //封装分类和标签\n        model.addAttribute(\"posts\", postList);\n        model.addAttribute(\"pageInfo\", PageUtil.convertPageVo(page));\n        model.addAttribute(\"status\", status);\n        model.addAttribute(\"order\", order);\n        model.addAttribute(\"sort\", sort);\n\n        model.addAttribute(\"type\", \"all\");\n        return \"admin/admin_post\";\n    }\n\n    /**\n     * 我的出租\n     *\n     * @param model model\n     * @return 模板路径admin/admin_post\n     */\n    @GetMapping(\"/lease\")\n    public String lease(Model model,\n                        @RequestParam(value = \"status\", defaultValue = \"-1\") Integer status,\n                        @RequestParam(value = \"page\", defaultValue = \"1\") Integer pageNumber,\n                        @RequestParam(value = \"size\", defaultValue = \"10\") Integer pageSize,\n                        @RequestParam(value = \"sort\", defaultValue = \"createTime\") String sort,\n                        @RequestParam(value = \"order\", defaultValue = \"desc\") String order,\n                        @ModelAttribute SearchVo searchVo) {\n\n        Post condition = new Post();\n        condition.setPostStatus(status);\n        condition.setUserId(getLoginUserId());\n\n        Page page = PageUtil.initMpPage(pageNumber, pageSize, sort, order);\n        Page<Post> postPage = postService.findPostByCondition(condition, page);\n        List<Post> postList = postPage.getRecords();\n\n        //封装分类和标签\n        model.addAttribute(\"posts\", postList);\n        model.addAttribute(\"pageInfo\", PageUtil.convertPageVo(page));\n        model.addAttribute(\"status\", status);\n        model.addAttribute(\"order\", order);\n        model.addAttribute(\"sort\", sort);\n\n        model.addAttribute(\"type\", \"lease\");\n        return \"admin/admin_post\";\n    }\n\n    /**\n     * 我的租赁\n     *\n     * @param model model\n     * @return 模板路径admin/admin_post\n     */\n    @GetMapping(\"/rent\")\n    public String rent(Model model,\n                       @RequestParam(value = \"status\", defaultValue = \"-1\") Integer status,\n                       @RequestParam(value = \"page\", defaultValue = \"1\") Integer pageNumber,\n                       @RequestParam(value = \"size\", defaultValue = \"10\") Integer pageSize,\n                       @RequestParam(value = \"sort\", defaultValue = \"createTime\") String sort,\n                       @RequestParam(value = \"order\", defaultValue = \"desc\") String order,\n                       @ModelAttribute SearchVo searchVo) {\n\n        Page page = PageUtil.initMpPage(pageNumber, pageSize, sort, order);\n        Page<Post> postPage = postService.findByRentUserId(getLoginUserId(), page);\n        List<Post> postList = postPage.getRecords();\n\n        //封装分类和标签\n        model.addAttribute(\"posts\", postList);\n        model.addAttribute(\"pageInfo\", PageUtil.convertPageVo(page));\n        model.addAttribute(\"status\", status);\n        model.addAttribute(\"order\", order);\n        model.addAttribute(\"sort\", sort);\n\n        model.addAttribute(\"type\", \"rent\");\n        return \"admin/admin_post\";\n    }\n\n\n    /**\n     * 处理跳转到新建房屋页面\n     *\n     * @return 模板路径admin/admin_editor\n     */\n    @GetMapping(value = \"/new\")\n    public String newPost(Model model) {\n        //所有分类\n        List<Category> allCategories = categoryService.findAll();\n        model.addAttribute(\"categories\", allCategories);\n        //所有城市\n        List<City> cities = cityService.findAll();\n        model.addAttribute(\"cities\", cities);\n        return \"admin/admin_post_new\";\n    }\n\n\n    /**\n     * 添加/更新房屋\n     *\n     * @param post Post实体\n     */\n    @PostMapping(value = \"/save\")\n    @ResponseBody\n    public JsonResult pushPost(@ModelAttribute Post post) {\n        if (post.getId() != null) {\n            // 只允许更新部分字段\n            Post temp = new Post();\n            temp.setId(post.getId());\n            temp.setPostContent(post.getPostContent());\n            temp.setPostSummary(post.getPostSummary());\n            temp.setPostEditor(post.getPostEditor());\n            post = temp;\n        }\n        // 1、提取摘要\n        int postSummary = 100;\n        //房屋摘要\n        String summaryText = HtmlUtil.cleanHtmlTag(post.getPostContent());\n        if (summaryText.length() > postSummary) {\n            String summary = summaryText.substring(0, postSummary);\n            post.setPostSummary(summary);\n        } else {\n            post.setPostSummary(summaryText);\n        }\n\n        // 2.处理imgUrl\n        String postEditor = post.getPostEditor();\n        if (StringUtils.isNotEmpty(postEditor)) {\n            List<String> urlList = RegexUtil.getImgSrc(postEditor);\n            String imgUrl = SensUtils.listToStr(urlList);\n            post.setImgUrl(imgUrl);\n        }\n\n        // 2.添加/更新入库\n        if (post.getId() == null) {\n            post.setUserId(getLoginUserId());\n        }\n        postService.insertOrUpdate(post);\n        return JsonResult.success(\"发布成功\");\n    }\n\n\n    /**\n     * 处理房屋为发布的状态\n     *\n     * @param postId 房屋编号\n     * @return 重定向到/admin/post\n     */\n    @PostMapping(value = \"/revert\")\n    @ResponseBody\n    public JsonResult moveToPublish(@RequestParam(\"id\") Long postId) {\n        Post post = postService.get(postId);\n        if (post == null) {\n            throw new MyBusinessException(\"房屋不存在\");\n        }\n        post.setPostStatus(PostStatusEnum.ON_SALE.getCode());\n        postService.update(post);\n        return JsonResult.success(\"操作成功\");\n    }\n\n\n    /**\n     * 处理删除房屋的请求\n     *\n     * @param postId 房屋编号\n     * @return 重定向到/admin/post\n     */\n    @DeleteMapping(value = \"/delete\")\n    @ResponseBody\n    public JsonResult removePost(@RequestParam(\"id\") Long postId) {\n        Post post = postService.get(postId);\n        if (post == null) {\n            throw new MyBusinessException(\"房屋不存在\");\n        }\n        if (PostStatusEnum.OFF_SALE.getCode().equals(post.getPostStatus())) {\n            throw new MyBusinessException(\"该房屋已出租，不能删除\");\n        }\n        // 判断是否有有效订单\n        // 如果有有效订单，不能删除\n        Order order = orderService.findByPostId(postId);\n        if (order != null) {\n            throw new MyBusinessException(\"该房屋已出租，不能删除\");\n        }\n\n        // 判断权限\n        if(!Objects.equals(post.getUserId(), getLoginUserId()) && !loginUserIsAdmin()) {\n            throw new MyBusinessException(\"没有权限操作\");\n        }\n\n        postService.delete(postId);\n        return JsonResult.success(\"删除成功\");\n    }\n\n\n    /**\n     * 跳转到编辑房屋页面\n     *\n     * @param postId 房屋编号\n     * @param model  model\n     * @return 模板路径admin/admin_editor\n     */\n    @GetMapping(value = \"/edit\")\n    public String editPost(@RequestParam(\"id\") Long postId, Model model) {\n        Post post = postService.get(postId);\n        if (post == null) {\n            throw new MyBusinessException(\"房屋不存在\");\n        }\n\n        //当前房屋分类\n        Category category = categoryService.get(post.getCateId());\n        post.setCategory(category);\n        model.addAttribute(\"post\", post);\n\n\n        //所有分类\n        List<Category> allCategories = categoryService.findAll();\n        model.addAttribute(\"categories\", allCategories);\n\n        //所有城市\n        List<City> cities = cityService.findAll();\n        model.addAttribute(\"cities\", cities);\n        return \"admin/admin_post_edit\";\n    }\n\n\n}\n"
  },
  {
    "path": "src/main/java/com/example/sens/controller/admin/ProfileController.java",
    "content": "package com.example.sens.controller.admin;\n\nimport com.example.sens.common.constant.CommonConstant;\nimport com.example.sens.controller.common.BaseController;\nimport com.example.sens.entity.User;\nimport com.example.sens.dto.JsonResult;\nimport com.example.sens.service.UserService;\nimport com.example.sens.util.Md5Util;\nimport lombok.extern.slf4j.Slf4j;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.stereotype.Controller;\nimport org.springframework.ui.Model;\nimport org.springframework.web.bind.annotation.*;\n\nimport java.util.Objects;\n\n/**\n * 后台用户管理控制器\n */\n@Slf4j\n@Controller\n@RequestMapping(value = \"/admin/user\")\npublic class ProfileController extends BaseController {\n\n    @Autowired\n    private UserService userService;\n\n    /**\n     * 获取用户信息并跳转\n     *\n     * @return 模板路径admin/admin_profile\n     */\n    @GetMapping(\"/profile\")\n    public String profile(Model model) {\n        User user = userService.get(getLoginUserId());\n        model.addAttribute(\"user\", user);\n        return \"admin/admin_profile\";\n    }\n\n    /**\n     * 获取用户信息并跳转\n     *\n     * @return 模板路径admin/admin_info\n     */\n    @GetMapping(\"/info\")\n    public String info(@RequestParam(\"userId\") Long userId,  Model model) {\n        //1.用户信息\n        User user = userService.get(userId);\n        if(user == null) {\n            return this.renderNotFound();\n        }\n        model.addAttribute(\"user\", user);\n        return \"admin/admin_user_info\";\n    }\n\n\n    /**\n     * 处理修改用户资料的请求\n     *\n     * @param user user\n     * @return JsonResult\n     */\n    @PostMapping(value = \"/profile/save\")\n    @ResponseBody\n    public JsonResult saveProfile(@ModelAttribute User user) {\n        User loginUser = getLoginUser();\n\n        User saveUser = userService.get(loginUser.getId());\n        saveUser.setId(loginUser.getId());\n        saveUser.setUserName(user.getUserName());\n        saveUser.setUserDisplayName(user.getUserDisplayName());\n        saveUser.setUserAvatar(user.getUserAvatar());\n        saveUser.setUserDesc(user.getUserDesc());\n        saveUser.setIdCard(user.getIdCard());\n        saveUser.setEmail(user.getEmail());\n        saveUser.setPhone(user.getPhone());\n        userService.insertOrUpdate(saveUser);\n        return JsonResult.success(\"资料修改成功，请重新登录\");\n    }\n\n\n    /**\n     * 处理修改密码的请求\n     *\n     * @param beforePass 旧密码\n     * @param newPass    新密码\n     * @return JsonResult\n     */\n    @RequestMapping(method = RequestMethod.POST, value = \"/changePass\")\n    @ResponseBody\n    public JsonResult changePass(@RequestParam(value = \"id\", required = false) Long id,\n                                 @RequestParam(value = \"beforePass\", required = false) String beforePass,\n                                 @RequestParam(\"newPass\") String newPass) {\n        User loginUser = getLoginUser();\n        if (id == null) {\n            // 用户修改密码\n            User user = userService.get(loginUser.getId());\n            if (user != null && Objects.equals(user.getUserPass(), Md5Util.toMd5(beforePass, CommonConstant.PASSWORD_SALT, 10))) {\n                userService.updatePassword(user.getId(), newPass);\n            } else {\n                return JsonResult.error(\"旧密码错误\");\n            }\n        } else {\n            // 管理员修改用户密码\n            if (!loginUserIsAdmin()) {\n                return JsonResult.error(\"无权操作\");\n            }\n            userService.updatePassword(id, newPass);\n        }\n\n        return JsonResult.success(\"密码重置成功\");\n    }\n\n\n}\n"
  },
  {
    "path": "src/main/java/com/example/sens/controller/admin/RechargeRecordController.java",
    "content": "package com.example.sens.controller.admin;\n\nimport com.baomidou.mybatisplus.extension.plugins.pagination.Page;\nimport com.example.sens.controller.common.BaseController;\nimport com.example.sens.dto.JsonResult;\nimport com.example.sens.entity.RechargeRecord;\nimport com.example.sens.entity.User;\nimport com.example.sens.service.RechargeRecordService;\nimport com.example.sens.service.UserService;\nimport com.example.sens.util.PageUtil;\nimport lombok.extern.slf4j.Slf4j;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.stereotype.Controller;\nimport org.springframework.ui.Model;\nimport org.springframework.web.bind.annotation.*;\n\nimport java.util.Date;\n\n/**\n * @author 言曌\n * @date 2020/3/17 11:39 下午\n */\n@Slf4j\n@Controller\n@RequestMapping(value = \"/admin/rechargeRecord\")\npublic class RechargeRecordController extends BaseController {\n\n    @Autowired\n    private RechargeRecordService rechargeRecordService;\n\n    @Autowired\n    private UserService userService;\n\n    /**\n     * 查询所有充值记录并渲染rechargeRecord页面\n     *\n     * @return 模板路径admin/admin_rechargeRecord\n     */\n    @GetMapping\n    public String rechargeRecords(@RequestParam(value = \"startDate\", defaultValue = \"\") String startDate,\n                                  @RequestParam(value = \"endDate\", defaultValue = \"\") String endDate,\n                                  @RequestParam(value = \"page\", defaultValue = \"1\") Integer pageNumber,\n                                  @RequestParam(value = \"size\", defaultValue = \"10\") Integer pageSize,\n                                  @RequestParam(value = \"sort\", defaultValue = \"createTime\") String sort,\n                                  @RequestParam(value = \"order\", defaultValue = \"desc\") String order, Model model) {\n        Page page = PageUtil.initMpPage(pageNumber, pageSize, sort, order);\n        Page<RechargeRecord> rechargeRecords = null;\n\n        if (loginUserIsAdmin()) {\n            rechargeRecords = rechargeRecordService.findAll(startDate, endDate, page);\n        } else {\n            rechargeRecords = rechargeRecordService.findByUserId(startDate, endDate, getLoginUserId(), page);\n        }\n\n        model.addAttribute(\"rechargeRecords\", rechargeRecords.getRecords());\n        model.addAttribute(\"pageInfo\", PageUtil.convertPageVo(page));\n        model.addAttribute(\"startDate\", startDate);\n        model.addAttribute(\"endDate\", endDate);\n        return \"admin/admin_rechargeRecord\";\n    }\n\n\n    /**\n     * 删除充值记录\n     *\n     * @param rechargeRecordId 充值记录Id\n     * @return JsonResult\n     */\n    @DeleteMapping(value = \"/delete\")\n    @ResponseBody\n    public JsonResult checkDelete(@RequestParam(\"id\") Long rechargeRecordId) {\n        rechargeRecordService.delete(rechargeRecordId);\n        return JsonResult.success(\"删除充值记录成功\");\n    }\n\n\n    /**\n     * 充值界面\n     *\n     * @return JsonResult\n     */\n    @GetMapping(value = \"/new\")\n    public String rechargePage(Model model) {\n        User user = userService.get(getLoginUserId());\n        model.addAttribute(\"currentMoney\", user.getMoney());\n        return \"admin/admin_rechargeRecord_new\";\n    }\n\n    /**\n     * 充值保存\n     *\n     * @param money\n     * @return\n     */\n    @PostMapping(value = \"/save\")\n    @ResponseBody\n    public JsonResult recharge(@RequestParam(\"money\") Long money) {\n        if (money > 10000 || money < 10) {\n            return JsonResult.error(\"充值金额不合法(最少10元，最多1万元)\");\n        }\n        // 充值操作\n        // 忽略，假设直接充值成功\n        // 修改余额\n        User loginUser = getLoginUser();\n        User user = userService.get(loginUser.getId());\n        user.setMoney(user.getMoney() + money);\n        userService.insertOrUpdate(user);\n\n        // 添加充值记录\n        RechargeRecord rechargeRecord = new RechargeRecord();\n        rechargeRecord.setUserId(loginUser.getId());\n        rechargeRecord.setMoney(money);\n        rechargeRecord.setCreateTime(new Date());\n        rechargeRecordService.insert(rechargeRecord);\n        return JsonResult.success(\"充值成功\", user.getMoney());\n    }\n}\n"
  },
  {
    "path": "src/main/java/com/example/sens/controller/admin/RoleController.java",
    "content": "package com.example.sens.controller.admin;\n\nimport com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;\nimport com.baomidou.mybatisplus.extension.plugins.pagination.Page;\nimport com.example.sens.entity.Permission;\nimport com.example.sens.entity.Role;\nimport com.example.sens.dto.JsonResult;\nimport com.example.sens.enums.ResourceTypeEnum;\nimport com.example.sens.service.PermissionService;\nimport com.example.sens.service.RoleService;\nimport com.example.sens.util.PageUtil;\nimport lombok.extern.slf4j.Slf4j;\nimport org.apache.logging.log4j.util.Strings;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.stereotype.Controller;\nimport org.springframework.ui.Model;\nimport org.springframework.web.bind.annotation.*;\n\nimport java.util.ArrayList;\nimport java.util.List;\nimport java.util.stream.Collectors;\n\n/**\n * 后台角色管理控制器\n */\n@Slf4j\n@Controller\n@RequestMapping(value = \"/admin/role\")\npublic class RoleController {\n\n    @Autowired\n    private RoleService roleService;\n\n    @Autowired\n    private PermissionService permissionService;\n\n    /**\n     * 查询所有角色并渲染role页面\n     *\n     * @return 模板路径admin/admin_role\n     */\n    @GetMapping\n    public String roles(@RequestParam(value = \"page\", defaultValue = \"1\") Integer pageNumber,\n                        @RequestParam(value = \"size\", defaultValue = \"10\") Integer pageSize,\n                        @RequestParam(value = \"sort\", defaultValue = \"level\") String sort,\n                        @RequestParam(value = \"order\", defaultValue = \"desc\") String order, Model model) {\n        //角色列表\n        Page page = PageUtil.initMpPage(pageNumber, pageSize, sort, order);\n\n        Page<Role> roles = roleService.findAll(page);\n        model.addAttribute(\"roles\", roles.getRecords());\n        model.addAttribute(\"pageInfo\", PageUtil.convertPageVo(page));\n\n        return \"admin/admin_role\";\n    }\n\n    /**\n     * 新增/修改角色\n     *\n     * @param role role对象\n     * @return 重定向到/admin/role\n     */\n    @PostMapping(value = \"/save\")\n    @ResponseBody\n    public JsonResult saveRole(@ModelAttribute Role role,\n                               @RequestParam(value = \"permissionIds\") String permissionIds) {\n\n        if (Strings.isNotEmpty(permissionIds)) {\n            String[] arr = permissionIds.split(\",\");\n            List<Permission> permissions = new ArrayList<>();\n            for (String permissionId : arr) {\n                Permission permission = new Permission();\n                permission.setId(Long.valueOf(permissionId));\n                permissions.add(permission);\n            }\n            role.setPermissions(permissions);\n        }\n        roleService.insertOrUpdate(role);\n        return JsonResult.success();\n    }\n\n    /**\n     * 删除角色\n     *\n     * @param roleId 角色Id\n     * @return JsonResult\n     */\n    @DeleteMapping(value = \"/delete\")\n    @ResponseBody\n    public JsonResult checkDelete(@RequestParam(\"id\") Long roleId) {\n        //判断这个角色有没有用户\n        Integer userCount = roleService.countUserByRoleId(roleId);\n        if (userCount != 0) {\n            return JsonResult.error(\"当前角色已关联用户，无法删除\");\n        }\n        roleService.delete(roleId);\n        return JsonResult.success(\"删除角色成功\");\n    }\n\n\n    /**\n     * 添加用户页面\n     *\n     * @return 模板路径admin/admin_edit\n     */\n    @GetMapping(\"/new\")\n    public String addRole(Model model) {\n        // 所有权限\n        model.addAttribute(\"permissions\", getPermissionList());\n        return \"admin/admin_role_add\";\n    }\n\n    /**\n     * 跳转到修改页面\n     *\n     * @param roleId roleId\n     * @param model  model\n     * @return 模板路径admin/admin_role\n     */\n    @GetMapping(value = \"/edit\")\n    public String toEditRole(Model model, @RequestParam(\"id\") Long roleId) {\n        //更新的角色\n        Role role = roleService.findByRoleId(roleId);\n        //当前角色的权限列表\n        role.setPermissions(permissionService.listPermissionsByRoleId(roleId));\n        model.addAttribute(\"updateRole\", role);\n\n        // 所有权限\n        model.addAttribute(\"permissions\", getPermissionList());\n\n        // 当前角色的权限列表\n        List<Long> currentPermissionIds = permissionService.findPermissionByRoleId(roleId).stream().map(p -> p.getId()).collect(Collectors.toList());\n        model.addAttribute(\"currentPermissionIds\", currentPermissionIds);\n        return \"admin/admin_role_edit\";\n    }\n\n    /**\n     * 所有权限\n     * @return\n     */\n    public List<Permission> getPermissionList() {\n        //权限列表\n        QueryWrapper queryWrapper = new QueryWrapper();\n        queryWrapper.orderByAsc(\"sort\");\n        List<Permission> permissions = permissionService.findAll(queryWrapper);\n        // 设置URL为编辑的URL\n        for (Permission permission : permissions) {\n            permission.setUrl(\"/admin/permission/edit?id=\" + permission.getId());\n            if (ResourceTypeEnum.MENU.getCode().equals(permission.getResourceType())) {\n                permission.setName(permission.getName() + \"[\" + ResourceTypeEnum.MENU.getDescription() + \"]\");\n            } else if (ResourceTypeEnum.BUTTON.getCode().equals(permission.getResourceType())) {\n                permission.setName(permission.getName() + \"[\" + ResourceTypeEnum.BUTTON.getDescription() + \"]\");\n            } else if (ResourceTypeEnum.PAGE.getCode().equals(permission.getResourceType())) {\n                permission.setName(permission.getName() + \"[\" + ResourceTypeEnum.PAGE.getDescription() + \"]\");\n            }\n        }\n        return permissions;\n    }\n}\n"
  },
  {
    "path": "src/main/java/com/example/sens/controller/admin/UserController.java",
    "content": "package com.example.sens.controller.admin;\n\nimport com.baomidou.mybatisplus.extension.plugins.pagination.Page;\nimport com.example.sens.common.constant.CommonConstant;\nimport com.example.sens.entity.*;\nimport com.example.sens.enums.RoleEnum;\nimport com.example.sens.service.*;\nimport com.example.sens.controller.common.BaseController;\nimport com.example.sens.dto.JsonResult;\nimport com.example.sens.util.Md5Util;\nimport com.example.sens.util.PageUtil;\nimport lombok.extern.slf4j.Slf4j;\nimport org.apache.commons.lang3.StringUtils;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.stereotype.Controller;\nimport org.springframework.transaction.annotation.Transactional;\nimport org.springframework.ui.Model;\nimport org.springframework.web.bind.annotation.*;\n\nimport java.util.List;\n\n/**\n * 后台用户管理控制器\n */\n@Slf4j\n@Controller\n@RequestMapping(value = \"/admin/user\")\npublic class UserController extends BaseController {\n\n    @Autowired\n    private UserService userService;\n\n    @Autowired\n    private RoleService roleService;\n\n\n    @Autowired\n    private UserRoleRefService userRoleRefService;\n\n\n    public static final String USER_NAME = \"userName\";\n    public static final String USER_DISPLAY_NAME = \"userDisplayName\";\n    public static final String EMAIL = \"email\";\n\n    /**\n     * 查询所有分类并渲染user页面\n     *\n     * @return 模板路径admin/admin_user\n     */\n    @GetMapping\n    public String users(\n            @RequestParam(value = \"status\", defaultValue = \"0\") Integer status,\n            @RequestParam(value = \"keywords\", defaultValue = \"\") String keywords,\n            @RequestParam(value = \"searchType\", defaultValue = \"\") String searchType,\n            @RequestParam(value = \"page\", defaultValue = \"1\") Integer pageNumber,\n            @RequestParam(value = \"size\", defaultValue = \"10\") Integer pageSize,\n            @RequestParam(value = \"sort\", defaultValue = \"createTime\") String sort,\n            @RequestParam(value = \"order\", defaultValue = \"desc\") String order, Model model) {\n        //用户列表\n        Page page = PageUtil.initMpPage(pageNumber, pageSize, sort, order);\n        User condition = new User();\n        condition.setStatus(status);\n        if (!StringUtils.isBlank(keywords)) {\n            if (USER_NAME.equals(searchType)) {\n                condition.setUserName(keywords);\n            } else if (USER_DISPLAY_NAME.equals(searchType)) {\n                condition.setUserDisplayName(keywords);\n            } else if (EMAIL.equals(searchType)) {\n                condition.setIdCard(keywords);\n            }\n        }\n        Page<User> users = userService.findByRoleAndCondition(CommonConstant.NONE, condition, page);\n        for(User user : users.getRecords()) {\n            user.setRole(roleService.findByUserId(user.getId()));\n        }\n\n        model.addAttribute(\"users\", users.getRecords());\n        model.addAttribute(\"pageInfo\", PageUtil.convertPageVo(page));\n        model.addAttribute(\"status\", status);\n        model.addAttribute(\"keywords\", keywords);\n        model.addAttribute(\"searchType\", searchType);\n        model.addAttribute(\"sort\", sort);\n        model.addAttribute(\"order\", order);\n        return \"admin/admin_user\";\n    }\n\n\n\n    /**\n     * 删除用户\n     *\n     * @param userId 用户Id\n     * @return JsonResult\n     */\n    @DeleteMapping(value = \"/delete\")\n    @ResponseBody\n    public JsonResult removeUser(@RequestParam(\"id\") Long userId) {\n        userService.delete(userId);\n        return JsonResult.success(\"删除成功\");\n    }\n\n    /**\n     * 添加用户页面\n     *\n     * @return 模板路径admin/admin_edit\n     */\n    @GetMapping(\"/new\")\n    public String addUser(Model model) {\n\n        //角色列表\n        List<Role> roles = roleService.findAll();\n        model.addAttribute(\"roles\", roles);\n\n        return \"admin/admin_user_add\";\n    }\n\n    /**\n     * 编辑用户页面\n     *\n     * @return 模板路径admin/admin_edit\n     */\n    @GetMapping(\"/edit\")\n    public String edit(@RequestParam(\"id\") Long userId, Model model) {\n        User user = userService.get(userId);\n        if (user != null) {\n            model.addAttribute(\"user\", user);\n            //该用户的角色\n            Role currentRole = roleService.findByUserId(userId);\n            model.addAttribute(\"currentRole\", currentRole);\n\n            //角色列表\n            List<Role> roles = roleService.findAll();\n            model.addAttribute(\"roles\", roles);\n\n\n            return \"admin/admin_user_edit\";\n        }\n        return this.renderNotFound();\n    }\n\n    /**\n     * 批量删除\n     *\n     * @param ids 用户ID列表\n     * @return\n     */\n    @DeleteMapping(value = \"/batchDelete\")\n    @ResponseBody\n    public JsonResult batchDelete(@RequestParam(\"ids\") List<Long> ids) {\n        //批量操作\n        if (ids == null || ids.size() == 0 || ids.size() >= 100) {\n            return JsonResult.error(\"参数不合法!\");\n        }\n        List<User> userList = userService.findByBatchIds(ids);\n        for (User user : userList) {\n            userService.delete(user.getId());\n        }\n        return JsonResult.success(\"删除成功\");\n    }\n\n    /**\n     * 新增/修改用户\n     *\n     * @param user user\n     * @return 重定向到/admin/user\n     */\n    @PostMapping(value = \"/save\")\n    @ResponseBody\n    @Transactional(rollbackFor = Exception.class)\n    public JsonResult saveUser(@ModelAttribute User user,\n                               @RequestParam(value = \"roleId\", required = false) Long roleId) {\n        // 1.添加用户\n        if(user.getId() == null) {\n            user.setUserPass(Md5Util.toMd5(user.getUserPass(), CommonConstant.PASSWORD_SALT, 10));\n        }\n        userService.insertOrUpdate(user);\n        if(roleId != null) {\n            // 2.先删除该用户的角色关联\n            userRoleRefService.deleteByUserId(user.getId());\n            // 3.添加角色关联\n            userRoleRefService.insert(new UserRoleRef(user.getId(), roleId));\n        }\n        return JsonResult.success(\"保存成功\");\n    }\n\n}\n"
  },
  {
    "path": "src/main/java/com/example/sens/controller/common/BaseController.java",
    "content": "package com.example.sens.controller.common;\n\nimport com.example.sens.entity.User;\nimport com.example.sens.enums.RoleEnum;\nimport org.apache.shiro.SecurityUtils;\nimport org.apache.shiro.subject.Subject;\n\n/**\n * Controller抽象类\n */\npublic abstract class BaseController {\n\n    /**\n     * 渲染404页面\n     *\n     * @return redirect:/404\n     */\n    public String renderNotFound() {\n        return \"forward:/404\";\n    }\n\n\n    /**\n     * 渲染404页面\n     *\n     * @return redirect:/404\n     */\n    public String renderNotAllowAccess() {\n        return \"redirect:/403\";\n    }\n\n    /**\n     * 当前登录用户\n     *\n     * @return\n     */\n    public User getLoginUser() {\n        Subject subject = SecurityUtils.getSubject();\n        if (subject.isAuthenticated()) {\n            return (User) subject.getPrincipal();\n        }\n        return null;\n    }\n\n    /**\n     * 当前用户ID\n     *\n     * @return\n     */\n    public Long getLoginUserId() {\n        return getLoginUser().getId();\n    }\n\n    /**\n     * 当前用户是管理员\n     *\n     * @return\n     */\n    public Boolean loginUserIsAdmin() {\n        User loginUser = getLoginUser();\n        if (loginUser != null) {\n            return  RoleEnum.ADMIN.getValue().equalsIgnoreCase(loginUser.getRole().getRole());\n        }\n        return false;\n    }\n\n    /**\n     * 当前用户是消费者\n     *\n     * @return\n     */\n    public Boolean loginUserIsUser() {\n        User loginUser = getLoginUser();\n        if (loginUser != null) {\n            return RoleEnum.USER.getValue().equalsIgnoreCase(loginUser.getRole().getRole());\n        }\n        return false;\n    }\n\n\n}\n"
  },
  {
    "path": "src/main/java/com/example/sens/controller/common/CommonController.java",
    "content": "package com.example.sens.controller.common;\n\nimport com.example.sens.enums.CommonParamsEnum;\nimport lombok.extern.slf4j.Slf4j;\nimport org.springframework.boot.web.servlet.error.ErrorController;\nimport org.springframework.stereotype.Controller;\nimport org.springframework.web.bind.annotation.GetMapping;\n\nimport javax.servlet.http.HttpServletRequest;\n\n/**\n * 错误页面控制器\n */\n@Slf4j\n@Controller\npublic class CommonController implements ErrorController {\n\n\n    /**\n     * 渲染404，500\n     *\n     * @param request request\n     * @return String\n     */\n    @GetMapping(value = \"/error\")\n    public String handleError(HttpServletRequest request) {\n        Integer statusCode = (Integer) request.getAttribute(\"javax.servlet.error.status_code\");\n        if (statusCode.equals(CommonParamsEnum.NOT_FOUND.getValue())) {\n            return \"redirect:/404\";\n        } else {\n            return \"redirect:/500\";\n        }\n    }\n\n    /**\n     * 渲染403页面\n     *\n     * @return String\n     */\n    @GetMapping(value = \"/403\")\n    public String fourZeroThree() {\n        return \"common/error/403\";\n    }\n\n\n    /**\n     * 渲染404页面\n     *\n     * @return String\n     */\n    @GetMapping(value = \"/404\")\n    public String fourZeroFour() {\n        return \"common/error/404\";\n    }\n\n\n    /**\n     * 渲染500页面\n     *\n     * @return String\n     */\n    @GetMapping(value = \"/500\")\n    public String fiveZeroZero() {\n        return \"common/error/500\";\n    }\n\n    /**\n     * Returns the path of the error page.\n     *\n     * @return the error path\n     */\n    @Override\n    public String getErrorPath() {\n        return \"/error\";\n    }\n}\n"
  },
  {
    "path": "src/main/java/com/example/sens/controller/home/FrontPostController.java",
    "content": "package com.example.sens.controller.home;\n\nimport com.baomidou.mybatisplus.extension.plugins.pagination.Page;\nimport com.example.sens.controller.common.BaseController;\nimport com.example.sens.dto.JsonResult;\nimport com.example.sens.entity.*;\nimport com.example.sens.enums.OrderStatusEnum;\nimport com.example.sens.enums.PostStatusEnum;\nimport com.example.sens.service.*;\nimport com.example.sens.util.DateUtil;\nimport com.example.sens.util.FileUtil;\nimport com.example.sens.util.PageUtil;\nimport org.apache.commons.lang3.StringUtils;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.stereotype.Controller;\nimport org.springframework.transaction.annotation.Transactional;\nimport org.springframework.ui.Model;\nimport org.springframework.web.bind.annotation.*;\n\nimport javax.servlet.ServletInputStream;\nimport javax.servlet.ServletOutputStream;\nimport javax.servlet.http.HttpServletRequest;\nimport javax.servlet.http.HttpServletResponse;\nimport javax.servlet.http.HttpSession;\nimport java.io.InputStream;\nimport java.net.HttpURLConnection;\nimport java.net.URL;\nimport java.net.URLEncoder;\nimport java.text.DateFormat;\nimport java.text.ParseException;\nimport java.text.SimpleDateFormat;\nimport java.util.*;\n\n/**\n * @author 言曌\n * @date 2020/3/11 4:59 下午\n */\n@Controller\npublic class FrontPostController extends BaseController {\n\n    @Autowired\n    private CategoryService categoryService;\n\n    @Autowired\n    private PostService postService;\n\n    @Autowired\n    private CityService cityService;\n\n    @Autowired\n    private OrderService orderService;\n\n    @Autowired\n    private UserService userService;\n\n    /**\n     * 房屋列表\n     *\n     * @param model\n     * @return\n     */\n    @GetMapping(\"/post\")\n    public String postList(@RequestParam(value = \"page\", defaultValue = \"1\") Integer pageNumber,\n                           @RequestParam(value = \"size\", defaultValue = \"6\") Integer pageSize,\n                           @RequestParam(value = \"sort\", defaultValue = \"createTime\") String sort,\n                           @RequestParam(value = \"order\", defaultValue = \"desc\") String order,\n                           @RequestParam(value = \"postTitle\", defaultValue = \"\") String postTitle,\n                           @RequestParam(value = \"cityId\", defaultValue = \"-1\") Long cityId,\n                           @RequestParam(value = \"cateId\", defaultValue = \"-1\") Long cateId,\n                           @RequestParam(value = \"area\", defaultValue = \"\") String area,\n                           @RequestParam(value = \"price\", defaultValue = \"\") String price,\n                           @RequestParam(value = \"status\", defaultValue = \"-1\") Integer status,\n                           HttpSession session,\n                           Model model) {\n        Post condition = new Post();\n\n        List<Category> categoryList = categoryService.findAll();\n        model.addAttribute(\"categoryList\", categoryList);\n\n\n        List<City> cityList = cityService.findAll();\n        model.addAttribute(\"cityList\", cityList);\n\n        model.addAttribute(\"postCount\", postService.count(null));\n\n        try {\n            if (StringUtils.isNotEmpty(price)) {\n                String[] priceArr = price.split(\"-\");\n                if (priceArr.length == 2) {\n                    condition.setMinPrice(Integer.valueOf(priceArr[0]));\n                    condition.setMaxPrice(Integer.valueOf(priceArr[1]));\n                }\n            }\n            if (StringUtils.isNotEmpty(area)) {\n                String[] areaArr = price.split(\"-\");\n                if (areaArr.length == 2) {\n                    condition.setMinArea(Integer.valueOf(areaArr[0]));\n                    condition.setMaxArea(Integer.valueOf(areaArr[1]));\n                }\n            }\n        } catch (Exception e) {\n            e.printStackTrace();\n        }\n\n        // 查询日期列表\n        Page page = PageUtil.initMpPage(pageNumber, pageSize, sort, order);\n        condition.setPostTitle(postTitle);\n        condition.setPostStatus(status);\n        condition.setCateId(cateId);\n        condition.setCityId(cityId);\n\n        Page<Post> postPage = postService.findPostByCondition(condition, page);\n        model.addAttribute(\"page\", postPage);\n        model.addAttribute(\"postTitle\", postTitle);\n        model.addAttribute(\"cityId\", cityId);\n        model.addAttribute(\"cateId\", cateId);\n        model.addAttribute(\"status\", status);\n        model.addAttribute(\"area\", area);\n        model.addAttribute(\"price\", price);\n\n        // 侧边栏\n        model.addAttribute(\"onCount\", postService.countByStatus(PostStatusEnum.ON_SALE.getCode()));\n        model.addAttribute(\"offCount\", postService.countByStatus(PostStatusEnum.OFF_SALE.getCode()));\n\n        if (cityId != null && cityId != -1) {\n            City city = cityService.get(cityId);\n            if (city != null) {\n                session.setAttribute(\"city\", city);\n            }\n        } else {\n            session.removeAttribute(\"city\");\n        }\n        return \"home/postList\";\n    }\n\n\n    /**\n     * 房屋详情\n     *\n     * @param id\n     * @param model\n     * @return\n     */\n    @GetMapping(\"/post/{id}\")\n    public String postDetails(@PathVariable(\"id\") Long id,\n                              @RequestParam(value = \"startDate\", required = false) String start,\n                              @RequestParam(value = \"quantity\", defaultValue = \"1\") Integer quantity,\n                              HttpSession session,\n                              Model model) {\n\n        // 房屋\n        Post post = postService.get(id);\n        if (post == null) {\n            return renderNotFound();\n        }\n        // 分类和城市\n        Category category = categoryService.get(post.getCateId());\n        City city = cityService.get(post.getCityId());\n        User user = userService.get(post.getUserId());\n\n        post.setCategory(category);\n        post.setCity(city);\n        post.setUser(user);\n        model.addAttribute(\"post\", post);\n\n        boolean allowEdit = getLoginUser() != null && (loginUserIsAdmin() || Objects.equals(post.getUserId(), getLoginUserId()));\n        model.addAttribute(\"allowEdit\", allowEdit);\n\n        String[] imgUrlList = post.getImgUrl().split(\",\");\n        model.addAttribute(\"imgUrlList\", imgUrlList);\n\n        List<Category> categoryList = categoryService.findAll();\n        model.addAttribute(\"categoryList\", categoryList);\n        List<City> cityList = cityService.findAll();\n        model.addAttribute(\"cityList\", cityList);\n\n        City citySession = (City) session.getAttribute(\"city\");\n        Long cityId = citySession == null ? null : citySession.getId();\n        List<Post> latestPostList = postService.getLatestPost(cityId, 6);\n        model.addAttribute(\"latestPostList\", latestPostList);\n\n        // 可以考虑优化下，暂时没有时间优化\n        List<Post> unionRentPost = postService.getUnionRentPost(post);\n        List<Order> orderList = new ArrayList<>();\n        for (Post temp : unionRentPost) {\n            Order order = orderService.findByPostId(temp.getId());\n            if (order == null) {\n                order = new Order();\n            } else {\n                order.setUser(userService.get(order.getUserId()));\n            }\n            order.setPost(temp);\n            orderList.add(order);\n        }\n        model.addAttribute(\"orderList\", orderList);\n        return \"home/post\";\n    }\n\n\n    /**\n     * 结算页面\n     *\n     * @param postId\n     * @param start\n     * @param quantity\n     * @param model\n     * @return\n     */\n    @GetMapping(\"/checkout\")\n    public String checkout(@RequestParam(\"postId\") Long postId,\n                           @RequestParam(value = \"startDate\", required = false) String start,\n                           @RequestParam(value = \"quantity\", defaultValue = \"1\") Integer quantity,\n                           Model model) {\n        DateFormat dateFormat = new SimpleDateFormat(DateUtil.FORMAT);\n\n        if (quantity == null || quantity < 1) {\n            quantity = 1;\n        }\n\n        Date today = new Date();\n\n        // 判断入住日期是否合法\n        if (StringUtils.isEmpty(start)) {\n            start = dateFormat.format(today);\n        } else {\n            try {\n                Date startDate = dateFormat.parse(start);\n                if (startDate.before(today)) {\n                    start = dateFormat.format(today);\n                }\n            } catch (ParseException e) {\n                start = dateFormat.format(today);\n                e.printStackTrace();\n            }\n        }\n\n        Post post = postService.get(postId);\n        if (post == null) {\n            return this.renderNotFound();\n        }\n\n        User user = getLoginUser();\n        if (user == null) {\n            return \"redirect:/\";\n        }\n\n        // 分类列表\n        List<Category> categoryList = categoryService.findAll();\n        model.addAttribute(\"categoryList\", categoryList);\n        List<City> cityList = cityService.findAll();\n        model.addAttribute(\"cityList\", cityList);\n        model.addAttribute(\"post\", post);\n        model.addAttribute(\"startDate\", start);\n        model.addAttribute(\"quantity\", quantity);\n        model.addAttribute(\"user\", user);\n        return \"home/checkout\";\n    }\n\n\n    /**\n     * 创建订单\n     *\n     * @param postId\n     * @param quantity\n     * @return\n     */\n    @PostMapping(\"/order\")\n    @Transactional\n    @ResponseBody\n    public JsonResult addOrder(@RequestParam(value = \"postId\") Long postId,\n                               @RequestParam(value = \"quantity\") Integer quantity) {\n        User user = getLoginUser();\n        if (user == null) {\n            return JsonResult.error(\"请先登录\");\n        }\n\n        if (quantity == null || quantity < 1 || quantity > 12) {\n            return JsonResult.error(\"月数不合法\");\n        }\n\n        Post post = postService.get(postId);\n        if (post == null) {\n            return JsonResult.error(\"房屋不存在\");\n        }\n\n        if (Objects.equals(post.getUserId(), user.getId())) {\n            return JsonResult.error(\"不能租赁自己的房子哦\");\n        }\n\n        if (!PostStatusEnum.ON_SALE.getCode().equals(post.getPostStatus())) {\n            return JsonResult.error(\"房屋已租出，暂时无法预定\");\n        }\n\n        Date today = new Date();\n        Calendar cal = Calendar.getInstance();\n        cal.setTime(today);\n        cal.add(Calendar.MONTH, quantity);\n\n        // 添加订单\n        Order order = new Order();\n        order.setPostId(postId);\n        order.setQuantity(quantity);\n        order.setStartDate(today);\n        order.setEndDate(cal.getTime());\n        order.setUserId(user.getId());\n        order.setOwnerUserId(post.getUserId());\n        order.setStatus(OrderStatusEnum.NOT_PAY.getCode());\n        order.setPrice(post.getPrice() * quantity + post.getDeposit());\n        order.setCreateTime(new Date());\n        order.setUpdateTime(new Date());\n        orderService.insert(order);\n\n        return JsonResult.success(\"订单创建成功\", order.getId());\n    }\n\n    @GetMapping(\"/order/{id}\")\n    public String order(@PathVariable(\"id\") Long id, Model model) {\n        Order order = orderService.get(id);\n        if (order == null) {\n            return this.renderNotFound();\n        }\n\n        User user = getLoginUser();\n        if (user == null) {\n            return \"redirect:/login\";\n        }\n\n        if (!Objects.equals(user.getId(), order.getUserId()) && !Objects.equals(user.getId(), order.getOwnerUserId()) && !loginUserIsAdmin()) {\n            return this.renderNotAllowAccess();\n        }\n        model.addAttribute(\"order\", order);\n\n\n        // 分类列表\n        List<Category> categoryList = categoryService.findAll();\n        model.addAttribute(\"categoryList\", categoryList);\n        List<City> cityList = cityService.findAll();\n        model.addAttribute(\"cityList\", cityList);\n        model.addAttribute(\"user\", userService.get(order.getUserId()));\n        return \"home/order\";\n    }\n\n    /**\n     * 电子合同\n     *\n     * @param orderId\n     * @return\n     */\n    @GetMapping(\"/agreement\")\n    public String agreement(@RequestParam(\"orderId\") Long orderId, Model model) {\n        Order order = orderService.get(orderId);\n\n        if (order == null) {\n            return this.renderNotFound();\n        }\n\n        Post post = postService.get(order.getPostId());\n        order.setPost(post);\n\n        order.setUser(userService.get(order.getUserId()));\n        order.setOwnerUser(userService.get(order.getOwnerUserId()));\n//        User user = getLoginUser();\n//        if (user == null) {\n//            return \"redirect:/login\";\n//        }\n//\n//        if (!Objects.equals(user.getId(), order.getUserId()) && !Objects.equals(user.getId(), order.getOwnerUserId()) && !loginUserIsAdmin()) {\n//            return this.renderNotAllowAccess();\n//        }\n\n        model.addAttribute(\"order\", order);\n        List<City> cityList = cityService.findAll();\n        model.addAttribute(\"cityList\", cityList);\n        List<Category> categoryList = categoryService.findAll();\n        model.addAttribute(\"categoryList\", categoryList);\n        return \"home/agreement\";\n    }\n\n\n    /**\n     * 下载合同\n     *\n     * @param orderId\n     * @param response\n     */\n    @GetMapping(\"/agreement/download\")\n    public void agreementDownload(@RequestParam(\"orderId\") Long orderId,\n                                  HttpServletRequest request,\n                                  HttpServletResponse response) {\n\n\n        StringBuffer requestURL = request.getRequestURL();\n        String tempContextUrl = requestURL.delete(requestURL.length() - request.getRequestURI().length(), requestURL.length()).append(\"/\").toString();\n        ServletOutputStream out = null;\n        InputStream inputStream = null;\n        try {\n            Order order = orderService.get(orderId);\n\n            User user = userService.get(order.getUserId());\n            User ownerUser = userService.get(order.getOwnerUserId());\n            String pdfName = ownerUser.getUserDisplayName() + \"&\" + user.getUserDisplayName() + \"租房合同.html\";\n            // 获取外部文件流\n            URL url = new URL(tempContextUrl + \"agreement?orderId=\" + orderId);\n\n            HttpURLConnection conn = (HttpURLConnection) url.openConnection();\n            conn.setConnectTimeout(3 * 1000);\n            //防止屏蔽程序抓取而返回403错误\n            conn.setRequestProperty(\"User-Agent\", \"Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)\");\n            inputStream = conn.getInputStream();\n            int len = 0;\n            // 输出 下载的响应头，如果下载的文件是中文名，文件名需要经过url编码\n            response.setContentType(\"text/html;charset=utf-8\");\n            response.setHeader(\"Content-Disposition\", \"attachment;filename=\" + URLEncoder.encode(pdfName, \"UTF-8\"));\n            response.setHeader(\"Cache-Control\", \"no-cache\");\n            out = response.getOutputStream();\n            byte[] buffer = new byte[1024];\n            while ((len = inputStream.read(buffer)) > 0) {\n                out.write(buffer, 0, len);\n            }\n            out.flush();\n        } catch (Exception e) {\n            e.printStackTrace();\n        } finally {\n            if (out != null) {\n                try {\n                    out.close();\n                } catch (Exception e) {\n                }\n            }\n        }\n    }\n\n    /**\n     * 支付页面\n     *\n     * @param orderId\n     * @param model\n     * @return\n     */\n    @GetMapping(\"/pay\")\n    public String pay(@RequestParam(\"orderId\") Long orderId, Model model) {\n        Order order = orderService.get(orderId);\n\n        if (order == null) {\n            return this.renderNotFound();\n        }\n\n        Post post = postService.get(order.getPostId());\n        order.setPost(post);\n\n        User user = getLoginUser();\n        if (user == null) {\n            return \"redirect:/login\";\n        }\n\n        if (!Objects.equals(user.getId(), order.getUserId()) && !Objects.equals(user.getId(), order.getOwnerUserId()) && !loginUserIsAdmin()) {\n            return this.renderNotAllowAccess();\n        }\n\n\n        if (!Objects.equals(OrderStatusEnum.NOT_PAY.getCode(), order.getStatus())) {\n            return this.renderNotAllowAccess();\n        }\n\n        model.addAttribute(\"order\", order);\n\n        List<City> cityList = cityService.findAll();\n        model.addAttribute(\"cityList\", cityList);\n        List<Category> categoryList = categoryService.findAll();\n        model.addAttribute(\"categoryList\", categoryList);\n        return \"home/pay\";\n    }\n\n\n    /**\n     * 支付\n     *\n     * @return orderId\n     */\n    @PostMapping(\"/pay\")\n    @Transactional\n    @ResponseBody\n    public JsonResult paySuccess(@RequestParam(value = \"orderId\") Long orderId) {\n        User user = userService.get(getLoginUserId());\n        if (user == null) {\n            return JsonResult.error(\"请先登录\");\n        }\n\n        Order order = orderService.get(orderId);\n        if (order == null) {\n            return JsonResult.error(\"订单不存在\");\n        }\n\n        if (user.getMoney() < order.getPrice()) {\n            return JsonResult.error(\"余额不足，请充值\");\n        }\n\n        if (!Objects.equals(user.getId(), order.getUserId())) {\n            return JsonResult.error(\"没有权限\");\n        }\n\n        Post post = postService.get(order.getPostId());\n        if (post == null || !Objects.equals(post.getPostStatus(), PostStatusEnum.ON_SALE.getCode())) {\n            return JsonResult.error(\"房屋已租出，暂时无法预定\");\n        }\n\n        order.setStatus(OrderStatusEnum.HAS_PAY.getCode());\n        orderService.update(order);\n\n        post.setPostStatus(PostStatusEnum.OFF_SALE.getCode());\n        postService.update(post);\n\n        // 这里暂不用乐观锁实现，忽略并发问题\n        // 我的余额减少\n        user.setMoney(user.getMoney() - order.getPrice());\n        userService.update(user);\n\n        // 对方的余额增加\n        User ownerUser = userService.get(order.getOwnerUserId());\n        ownerUser.setMoney(ownerUser.getMoney() + order.getPrice());\n        userService.update(ownerUser);\n\n\n        return JsonResult.success(\"支付成功\", order.getId());\n    }\n\n\n    @GetMapping(\"/login\")\n    public String login() {\n        return \"home/login\";\n    }\n\n\n    @GetMapping(\"/register\")\n    public String register() {\n        return \"home/register\";\n    }\n\n\n}\n"
  },
  {
    "path": "src/main/java/com/example/sens/controller/home/IndexController.java",
    "content": "package com.example.sens.controller.home;\n\nimport com.baomidou.mybatisplus.extension.plugins.pagination.Page;\nimport com.example.sens.controller.common.BaseController;\nimport com.example.sens.entity.*;\nimport com.example.sens.enums.PostStatusEnum;\nimport com.example.sens.service.*;\nimport com.example.sens.util.PageUtil;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.stereotype.Controller;\nimport org.springframework.ui.Model;\nimport org.springframework.web.bind.annotation.*;\n\nimport javax.servlet.http.HttpSession;\nimport java.util.List;\nimport java.util.Objects;\n\n/**\n * @author 言曌\n * @date 2020/3/9 11:00 上午\n */\n\n@Controller\npublic class IndexController extends BaseController {\n\n    @Autowired\n    private PostService postService;\n\n    @Autowired\n    private CategoryService categoryService;\n\n    @Autowired\n    private CityService cityService;\n\n    @Autowired\n    private NoticeService noticeService;\n\n    @GetMapping(\"/\")\n    public String index(Model model, HttpSession session) {\n\n        List<Category> categoryList = categoryService.findAll();\n        model.addAttribute(\"categoryList\", categoryList);\n\n        List<City> cityList = cityService.findAll();\n        model.addAttribute(\"cityList\", cityList);\n\n\n        City city = (City) session.getAttribute(\"city\");\n        Long cityId = city == null ? null : city.getId();\n        List<Post> latestPostList = postService.getLatestPost(cityId, 6);\n        model.addAttribute(\"latestPostList\", latestPostList);\n\n        return \"home/index\";\n    }\n\n    @GetMapping(\"/contact\")\n    public String contact(Model model) {\n        List<Category> categoryList = categoryService.findAll();\n        model.addAttribute(\"categoryList\", categoryList);\n\n        List<City> cityList = cityService.findAll();\n        model.addAttribute(\"cityList\", cityList);\n\n        return \"home/contact\";\n    }\n\n\n    /**\n     * 新闻列表\n     *\n     * @param model\n     * @return\n     */\n    @GetMapping(\"/notice\")\n    public String noticeList(@RequestParam(value = \"page\", defaultValue = \"1\") Integer pageNumber,\n                             @RequestParam(value = \"size\", defaultValue = \"10\") Integer pageSize,\n                             @RequestParam(value = \"sort\", defaultValue = \"createTime\") String sort,\n                             @RequestParam(value = \"order\", defaultValue = \"desc\") String order,\n                             Model model) {\n        List<Category> categoryList = categoryService.findAll();\n        model.addAttribute(\"categoryList\", categoryList);\n\n        List<City> cityList = cityService.findAll();\n        model.addAttribute(\"cityList\", cityList);\n\n        Page page = PageUtil.initMpPage(pageNumber, pageSize, sort, order);\n        Page<Notice> postPage = noticeService.findAll(page);\n        model.addAttribute(\"page\", postPage);\n        model.addAttribute(\"noticeList\", postPage.getRecords());\n\n        return \"home/noticeList\";\n    }\n\n\n    /**\n     * 新闻详情\n     *\n     * @param id\n     * @param model\n     * @return\n     */\n    @GetMapping(\"/notice/{id}\")\n    public String noticeDetails(@PathVariable(\"id\") Long id,\n                                @RequestParam(value = \"startDate\", required = false) String start,\n                                @RequestParam(value = \"quantity\", defaultValue = \"1\") Integer quantity,\n                                Model model) {\n\n        // 新闻\n        Notice notice = noticeService.get(id);\n        if (notice == null) {\n            return renderNotFound();\n        }\n\n        model.addAttribute(\"notice\", notice);\n\n        List<Category> categoryList = categoryService.findAll();\n        model.addAttribute(\"categoryList\", categoryList);\n\n        List<City> cityList = cityService.findAll();\n        model.addAttribute(\"cityList\", cityList);\n        return \"home/notice\";\n    }\n\n\n}\n"
  },
  {
    "path": "src/main/java/com/example/sens/controller/home/LoginController.java",
    "content": "package com.example.sens.controller.home;\n\nimport com.example.sens.common.constant.CommonConstant;\nimport com.example.sens.controller.common.BaseController;\nimport com.example.sens.entity.Role;\nimport com.example.sens.entity.User;\nimport com.example.sens.entity.UserRoleRef;\nimport com.example.sens.dto.JsonResult;\nimport com.example.sens.enums.RoleEnum;\nimport com.example.sens.enums.UserStatusEnum;\nimport com.example.sens.service.*;\nimport com.example.sens.util.Md5Util;\nimport lombok.extern.slf4j.Slf4j;\nimport org.apache.commons.lang3.RandomUtils;\nimport org.apache.commons.lang3.StringUtils;\nimport org.apache.shiro.SecurityUtils;\nimport org.apache.shiro.authc.IncorrectCredentialsException;\nimport org.apache.shiro.authc.LockedAccountException;\nimport org.apache.shiro.authc.UnknownAccountException;\nimport org.apache.shiro.authc.UsernamePasswordToken;\nimport org.apache.shiro.subject.Subject;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.stereotype.Controller;\nimport org.springframework.transaction.annotation.Transactional;\nimport org.springframework.web.bind.annotation.*;\n\nimport java.util.Set;\n\n@Controller\n@Slf4j\npublic class LoginController extends BaseController {\n\n    @Autowired\n    private PermissionService permissionService;\n\n    @Autowired\n    private UserService userService;\n\n    @Autowired\n    private RoleService roleService;\n\n    @Autowired\n    private UserRoleRefService userRoleRefService;\n\n    /**\n     * 验证登录信息\n     *\n     * @param userName 登录名：身份证号码／账号\n     * @param userPass password 密码\n     * @return JsonResult JsonResult\n     */\n    @PostMapping(value = \"/login\")\n    @ResponseBody\n    public JsonResult getLogin(@RequestParam(\"userName\") String userName,\n                               @RequestParam(\"userPass\") String userPass) {\n        Subject subject = SecurityUtils.getSubject();\n        UsernamePasswordToken token = new UsernamePasswordToken(userName, userPass);\n        try {\n            subject.login(token);\n            if (subject.isAuthenticated()) {\n                //登录成功，修改登录错误次数为0\n                User user = (User) subject.getPrincipal();\n                Set<String> permissionUrls = permissionService.findPermissionUrlsByUserId(user.getId());\n                subject.getSession().setAttribute(\"permissionUrls\", permissionUrls);\n                return JsonResult.success(\"登录成功\");\n            }\n        } catch (UnknownAccountException e) {\n            return JsonResult.error(\"账号不存在\");\n        } catch (IncorrectCredentialsException e) {\n            e.printStackTrace();\n            return JsonResult.error(\"账号或密码错误\");\n        } catch (LockedAccountException e) {\n            return JsonResult.error(e.getMessage());\n        } catch (Exception e) {\n            e.printStackTrace();\n            log.info(e.getMessage());\n        }\n        return JsonResult.error(\"服务器内部错误\");\n    }\n\n\n    /**\n     * 退出登录\n     *\n     * @return 重定向到/login\n     */\n    @GetMapping(value = \"/logout\")\n    public String logOut() {\n        Subject subject = SecurityUtils.getSubject();\n        subject.logout();\n        return \"redirect:/\";\n    }\n\n    /**\n     * 退出登录\n     *\n     * @return 重定向到/login\n     */\n    @PostMapping(value = \"/logout\")\n    @ResponseBody\n    public JsonResult ajaxLogOut() {\n        Subject subject = SecurityUtils.getSubject();\n        subject.logout();\n        return JsonResult.success();\n    }\n\n    /**\n     * 验证注册信息\n     *\n     * @param userName 账号\n     * @param idCard   身份证号码\n     * @return JsonResult JsonResult\n     */\n    @PostMapping(value = \"/register\")\n    @ResponseBody\n    @Transactional\n    public JsonResult getRegister(@RequestParam(\"userName\") String userName,\n                                  @RequestParam(\"userPass\") String userPass,\n                                  @RequestParam(\"idCard\") String idCard,\n                                  @RequestParam(\"userDisplayName\") String userDisplayName) {\n        // 1.校验是否输入完整\n        if (StringUtils.isEmpty(userName) || StringUtils.isEmpty(userPass) || StringUtils.isEmpty(idCard)) {\n            return JsonResult.error(\"请填写完整信息\");\n        }\n\n        // 2.密码长度是否合法\n        if (userPass.length() > 20 || userPass.length() < 6) {\n            return JsonResult.error(\"用户密码长度为6-20位!\");\n        }\n\n        // 3.密码长度是否合法\n        Role role = roleService.findByRoleName(RoleEnum.USER.getValue());\n\n\n        //3.创建用户\n        User user = new User();\n        user.setUserName(userName);\n        user.setUserDisplayName(userDisplayName);\n        user.setIdCard(idCard);\n        user.setUserPass(Md5Util.toMd5(userPass, CommonConstant.PASSWORD_SALT, 10));\n        user.setUserAvatar(\"/static/images/avatar/\" + RandomUtils.nextInt(1, 41) + \".jpeg\");\n        user.setStatus(UserStatusEnum.NORMAL.getCode());\n        userService.insert(user);\n\n        //4.关联角色\n        userRoleRefService.insert(new UserRoleRef(user.getId(), role.getId()));\n        return JsonResult.success(\"注册成功\");\n    }\n\n\n    /**\n     * 检查用户是否登录\n     *\n     * @return JsonResult\n     */\n    @GetMapping(value = \"/checkLogin\")\n    @ResponseBody\n    public JsonResult checkLogin() {\n        User user = getLoginUser();\n        if (user == null) {\n            return JsonResult.error(\"请先登录\");\n        } else {\n            return JsonResult.success();\n        }\n    }\n\n\n}\n"
  },
  {
    "path": "src/main/java/com/example/sens/dto/JsonResult.java",
    "content": "package com.example.sens.dto;\n\nimport lombok.Data;\n\n/**\n * <pre>\n *     Json格式\n * </pre>\n *\n * @author : saysky\n * @date : 2018/5/24\n */\n@Data\npublic class JsonResult {\n\n    /**\n     * 返回的状态码，0：失败，1：成功\n     */\n    private Integer code;\n\n    /**\n     * 返回信息\n     */\n    private String msg;\n\n    /**\n     * 返回的数据\n     */\n    private Object result;\n\n    /**\n     * 不返回数据的构造方法\n     *\n     * @param code 状态码\n     * @param msg  信息\n     */\n    public JsonResult(Integer code, String msg) {\n        this.code = code;\n        this.msg = msg;\n    }\n\n    /**\n     * 返回数据的构造方法\n     *\n     * @param code   状态码\n     * @param msg    信息\n     * @param result 数据\n     */\n    public JsonResult(Integer code, String msg, Object result) {\n        this.code = code;\n        this.msg = msg;\n        this.result = result;\n    }\n\n    /**\n     * 返回状态码和数据\n     *\n     * @param code   状态码\n     * @param result 数据\n     */\n    public JsonResult(Integer code, Object result) {\n        this.code = code;\n        this.result = result;\n    }\n\n    public static JsonResult error(String msg) {\n        return new JsonResult(0, msg);\n    }\n    public static JsonResult error(String msg, Object data) {\n        return new JsonResult(0, msg, data);\n    }\n    public static JsonResult success() {\n        return new JsonResult(1, \"操作成功\");\n    }\n\n    public static JsonResult success(String msg) {\n        return new JsonResult(1, msg);\n    }\n\n    public static JsonResult success(String msg, Object result) {\n        return new JsonResult(1, msg, result);\n    }\n}\n"
  },
  {
    "path": "src/main/java/com/example/sens/dto/PostQueryCondition.java",
    "content": "package com.example.sens.dto;\n\nimport lombok.Data;\n\nimport java.util.List;\n\n/**\n * @author 言曌\n * @date 2020/3/12 4:53 下午\n */\n@Data\npublic class PostQueryCondition {\n\n    /**\n     * 用户ID\n     */\n    private Long userId;\n\n\n    /**\n     * 分类ID\n     */\n    private Long cateId;\n\n    /**\n     * 预订的日期集合\n     */\n    private List<String> dateList;\n}\n"
  },
  {
    "path": "src/main/java/com/example/sens/dto/QueryCondition.java",
    "content": "package com.example.sens.dto;\n\nimport com.example.sens.vo.SearchVo;\nimport lombok.Data;\n\nimport java.io.Serializable;\n\n/**\n * 查询封装类\n * @author 言曌\n * @date 2019-08-16 13:45\n */\n@Data\npublic class QueryCondition<T> implements Serializable {\n\n    /**\n     * 根据字段筛选\n     */\n    private T data;\n\n    /**\n     * 一般筛选\n     */\n    private SearchVo searchVo;\n\n\n    public QueryCondition() {\n    }\n\n    public QueryCondition(T data) {\n        this.data = data;\n    }\n\n    public QueryCondition(T data, SearchVo searchVo) {\n        this.data = data;\n        this.searchVo = searchVo;\n    }\n}\n"
  },
  {
    "path": "src/main/java/com/example/sens/entity/Category.java",
    "content": "package com.example.sens.entity;\n\nimport com.baomidou.mybatisplus.annotation.TableField;\nimport com.baomidou.mybatisplus.annotation.TableName;\nimport com.example.sens.common.base.BaseEntity;\nimport lombok.Data;\n\n/**\n * <pre>\n *     房屋分类\n * </pre>\n *\n * @author : saysky\n * @date : 2019/11/30\n */\n@Data\n@TableName(\"category\")\npublic class Category extends BaseEntity {\n\n    /**\n     * 分类名称\n     */\n    private String cateName;\n\n    /**\n     * 分类排序号\n     */\n    private Integer cateSort;\n\n    /**\n     * 分类描述\n     */\n    private String cateDesc;\n\n    /**\n     * 房屋数量\n     */\n    @TableField(exist = false)\n    private Integer count;\n}\n"
  },
  {
    "path": "src/main/java/com/example/sens/entity/City.java",
    "content": "package com.example.sens.entity;\n\nimport com.baomidou.mybatisplus.annotation.TableField;\nimport com.baomidou.mybatisplus.annotation.TableName;\nimport com.example.sens.common.base.BaseEntity;\nimport lombok.Data;\n\n/**\n * <pre>\n *     城市\n * </pre>\n *\n * @author : saysky\n * @date : 2019/11/30\n */\n@Data\n@TableName(\"city\")\npublic class City extends BaseEntity {\n\n    /**\n     * 分类名称\n     */\n    private String cityName;\n\n    /**\n     * 房屋数\n     */\n    @TableField(exist = false)\n    private Integer count;\n}\n"
  },
  {
    "path": "src/main/java/com/example/sens/entity/Notice.java",
    "content": "package com.example.sens.entity;\n\nimport com.baomidou.mybatisplus.annotation.TableName;\nimport com.example.sens.common.base.BaseEntity;\nimport lombok.Data;\n\n\n/**\n * <pre>\n *     新闻公告\n * </pre>\n */\n@Data\n@TableName(\"notice\")\npublic class Notice extends BaseEntity {\n\n    /**\n     * 标题\n     */\n    private String title;\n\n    /**\n     * 内容\n     */\n    private String content;\n\n    /**\n     * 摘要\n     */\n    private String summary;\n\n}\n"
  },
  {
    "path": "src/main/java/com/example/sens/entity/Order.java",
    "content": "package com.example.sens.entity;\n\nimport com.baomidou.mybatisplus.annotation.TableField;\nimport com.baomidou.mybatisplus.annotation.TableName;\nimport com.example.sens.common.base.BaseEntity;\nimport lombok.Data;\n\nimport java.util.Date;\n\n/**\n * 订单\n * @author 言曌\n * @date 2020/4/5 3:25 下午\n */\n@Data\n@TableName(\"t_order\")\npublic class Order extends BaseEntity {\n\n    /**\n     * 下单用户ID\n     */\n    private Long userId;\n\n    /**\n     * 业主用户ID\n     */\n    private Long ownerUserId;\n\n    /**\n     * 房间ID\n     */\n    private Long postId;\n\n    /**\n     * 数量\n     */\n    private Integer quantity;\n\n    /**\n     * 开始日期\n     */\n    private Date startDate;\n\n\n    /**\n     * 结束日期\n     */\n    private Date endDate;\n\n\n    /**\n     * 订单状态：0待支付，1已支付生效中，2已完结\n     */\n    private Integer status;\n\n    /**\n     * 总价\n     */\n    private Long price;\n\n\n    /**\n     * 房屋\n     */\n    @TableField(exist = false)\n    private Post post;\n\n    /**\n     * 下单用户\n     */\n    @TableField(exist = false)\n    private User user;\n\n    /**\n     * 业主用户\n     */\n    @TableField(exist = false)\n    private User ownerUser;\n\n}\n"
  },
  {
    "path": "src/main/java/com/example/sens/entity/Permission.java",
    "content": "package com.example.sens.entity;\n\nimport com.baomidou.mybatisplus.annotation.TableField;\nimport com.baomidou.mybatisplus.annotation.TableName;\nimport com.example.sens.common.base.BaseEntity;\nimport lombok.Data;\n\nimport java.util.List;\n\n\n/**\n *\n * 权限，后台的菜单\n * @author example\n */\n@Data\n@TableName(\"permission\")\npublic class Permission  extends BaseEntity {\n\n    /**\n     * 权限名称\n     */\n    private String name;\n\n    /**\n     * pid\n     */\n    private Long pid;\n\n    /**\n     * 资源类型\n     */\n    private String resourceType;\n\n    /**\n     * 请求URL\n     */\n    private String url;\n\n    /**\n     * 图标\n     */\n    private String icon;\n\n    /**\n     * 序号(越小越靠前)\n     */\n    private Double sort;\n\n    /**\n     * 级别\n     */\n    @TableField(exist = false)\n    private Integer level;\n\n    /**\n     * 子权限列表\n     */\n    @TableField(exist = false)\n    private List<Permission> childPermissions;\n\n"
  },
  {
    "path": "src/main/java/com/example/sens/entity/Post.java",
    "content": "package com.example.sens.entity;\n\nimport com.baomidou.mybatisplus.annotation.TableField;\nimport com.baomidou.mybatisplus.annotation.TableName;\nimport com.example.sens.common.base.BaseEntity;\nimport lombok.Data;\n\n\n/**\n * @author example\n */\n@Data\n@TableName(\"post\")\npublic class Post extends BaseEntity {\n\n    /**\n     * 用户ID\n     */\n    private Long userId;\n    /**\n     * 房屋标题\n     */\n    private String postTitle;\n\n    /**\n     * 房屋描述\n     */\n    private String postContent;\n\n    /**\n     * 房屋摘要\n     */\n    private String postSummary;\n\n    /**\n     * 缩略图\n     */\n    private String postThumbnail;\n\n    /**\n     * 0 正在出租\n     * 1 已经租出去\n     * 2 已删除\n     */\n    private Integer postStatus;\n\n    /**\n     * 月付价格\n     */\n    private Integer price;\n\n    /**\n     * 房间编号\n     */\n    private String number;\n\n    /**\n     * 分类ID\n     */\n    private Long cateId;\n\n    /**\n     * 城市ID\n     */\n    private Long cityId;\n\n    /**\n     * 图片URL\n     */\n    private String imgUrl;\n\n    /**\n     * 富文本\n     */\n    private String postEditor;\n\n    /**\n     * 面积\n     */\n    private Double area;\n\n\n    /**\n     * 卧室数量\n     */\n    private Integer roomCount;\n\n\n    /**\n     * 洗手间数量\n     */\n    private Integer toiletCount;\n\n    /**\n     * 押金\n     */\n    private Long deposit;\n\n    /**\n     * 房屋所属分类\n     */\n    @TableField(exist = false)\n    private Category category;\n\n\n    /**\n     * 房屋所属城市\n     */\n    @TableField(exist = false)\n    private City city;\n\n    /**\n     * 房屋业主\n     */\n    @TableField(exist = false)\n    private User user;\n\n    /**\n     * 用于搜索\n     */\n    @TableField(exist = false)\n    private Integer minArea;\n\n    /**\n     * 用于搜索\n     */\n    @TableField(exist = false)\n    private Integer maxArea;\n\n    /**\n     * 用于搜索\n     */\n    @TableField(exist = false)\n    private Integer minPrice;\n\n    /**\n     * 用于搜索\n     */\n    @TableField(exist = false)\n    private Integer maxPrice;\n\n"
  },
  {
    "path": "src/main/java/com/example/sens/entity/RechargeRecord.java",
    "content": "package com.example.sens.entity;\n\nimport com.baomidou.mybatisplus.annotation.TableField;\nimport com.baomidou.mybatisplus.annotation.TableName;\nimport com.example.sens.common.base.BaseEntity;\nimport lombok.Data;\n\n/**\n * @author 言曌\n * @date 2020/3/22 3:15 下午\n */\n@TableName(\"recharge_record\")\n@Data\npublic class RechargeRecord extends BaseEntity {\n\n    /**\n     * 用户ID\n     */\n    private Long userId;\n\n    /**\n     * 金额\n     */\n    private Long money;\n\n    /**\n     * 用户\n     */\n    @TableField(exist = false)\n    private User user;\n}\n"
  },
  {
    "path": "src/main/java/com/example/sens/entity/Role.java",
    "content": "package com.example.sens.entity;\n\nimport com.baomidou.mybatisplus.annotation.TableField;\nimport com.baomidou.mybatisplus.annotation.TableName;\nimport com.example.sens.common.base.BaseEntity;\nimport lombok.Data;\n\nimport java.util.List;\n\n/**\n * @author example\n */\n@Data\n@TableName(\"role\")\npublic class Role  extends BaseEntity {\n\n    /**\n     * 角色名称：admin，author，subscriber\n     */\n    private String role;\n\n    /**\n     * 描述：管理员，作者，订阅者\n     */\n    private String description;\n\n    /**\n     * 级别\n     */\n    private Integer level;\n\n    /**\n     * 用户注册默认角色\n     */\n    private Integer isRegisterDefault;\n\n    /**\n     * 该角色对应的用户数量，非数据库字段\n     */\n    @TableField(exist = false)\n    private Integer count;\n\n    /**\n     * 当前角色的权限列表\n     */\n    @TableField(exist = false)\n    private List<Permission> permissions;\n\n"
  },
  {
    "path": "src/main/java/com/example/sens/entity/RolePermissionRef.java",
    "content": "package com.example.sens.entity;\n\nimport com.baomidou.mybatisplus.annotation.TableName;\nimport com.example.sens.common.base.BaseEntity;\nimport lombok.Data;\n\n@Data\n@TableName(\"role_permission_ref\")\npublic class RolePermissionRef  extends BaseEntity {\n\n    /**\n     * 角色Id\n     */\n    private Long roleId;\n\n    /**\n     * 权限Id\n     */\n    private Long permissionId;\n\n    public RolePermissionRef() {\n    }\n\n    public RolePermissionRef(Long roleId, Long permissionId) {\n        this.roleId = roleId;\n        this.permissionId = permissionId;\n    }\n"
  },
  {
    "path": "src/main/java/com/example/sens/entity/User.java",
    "content": "package com.example.sens.entity;\n\nimport com.baomidou.mybatisplus.annotation.TableField;\nimport com.baomidou.mybatisplus.annotation.TableName;\nimport com.example.sens.common.base.BaseEntity;\nimport com.fasterxml.jackson.annotation.JsonIgnore;\nimport lombok.Data;\n\nimport java.util.Date;\n\n/**\n * 用户信息\n */\n@Data\n@TableName(\"user\")\npublic class User extends BaseEntity {\n\n    /**\n     * 账号\n     */\n    private String userName;\n\n    /**\n     * 姓名称\n     */\n    private String userDisplayName;\n\n    /**\n     * 密码\n     */\n    @JsonIgnore\n    private String userPass;\n\n    /**\n     * 身份证号码\n     */\n    private String idCard;\n\n    /**\n     * 头像\n     */\n    private String userAvatar;\n\n    /**\n     * 说明\n     */\n    private String userDesc;\n\n    /**\n     * 0 正常\n     * 1 禁用\n     * 2 已删除\n     */\n    private Integer status = 0;\n\n    /**\n     * 创建时间\n     */\n    private Date createTime;\n\n    /**\n     * 电子邮箱\n     */\n    private String email;\n\n    /**\n     * 手机号\n     */\n    private String phone;\n\n    /**\n     * 余额\n     */\n    private Long money;\n\n    /**\n     * 角色名称\n     */\n    @TableField(exist = false)\n    private Role role;\n\n}\n"
  },
  {
    "path": "src/main/java/com/example/sens/entity/UserRoleRef.java",
    "content": "package com.example.sens.entity;\n\nimport com.baomidou.mybatisplus.annotation.TableName;\nimport com.example.sens.common.base.BaseEntity;\nimport lombok.Data;\n\n\n/**\n * 用户和角色关联\n * @author example\n */\n@Data\n@TableName(\"user_role_ref\")\npublic class UserRoleRef  extends BaseEntity {\n\n\n    /**\n     * 用户Id\n     */\n    private Long userId;\n\n    /**\n     * 角色Id\n     */\n    private Long roleId;\n\n    public UserRoleRef(Long userId, Long roleId) {\n        this.userId = userId;\n        this.roleId = roleId;\n    }\n\n    public UserRoleRef() {\n    }\n"
  },
  {
    "path": "src/main/java/com/example/sens/enums/CommonParamsEnum.java",
    "content": "package com.example.sens.enums;\n\n/**\n * 常用数字\n */\npublic enum CommonParamsEnum {\n\n    /**\n     * 数字10\n     */\n    TEN(10),\n\n    /**\n     * 数字5\n     */\n    FIVE(5),\n\n    /**\n     * 数字404\n     */\n    NOT_FOUND(404),\n\n    /**\n     * 数字1024\n     */\n    BYTE(1024);\n\n    private Integer value;\n\n    CommonParamsEnum(Integer value) {\n        this.value = value;\n    }\n\n    public Integer getValue() {\n        return value;\n    }\n}\n"
  },
  {
    "path": "src/main/java/com/example/sens/enums/OrderStatusEnum.java",
    "content": "package com.example.sens.enums;\n\n/**\n * <pre>\n *     订单状态enum\n * </pre>\n */\npublic enum OrderStatusEnum {\n\n    /**\n     * 待支付\n     */\n    NOT_PAY(0),\n\n    /**\n     * 已支付\n     */\n    HAS_PAY(1),\n\n    /**\n     * 已完结\n     */\n    FINISHED(2),\n\n    /**\n     * 已关闭,已取消\n     */\n    CLOSED(3),\n\n    /**\n     * 押金退回失败\n     */\n    DEPOSIT_RETURN_FAIL(4)\n\n    ;\n\n\n\n    private Integer code;\n\n    OrderStatusEnum(Integer code) {\n        this.code = code;\n    }\n\n    public Integer getCode() {\n        return code;\n    }\n\n}\n"
  },
  {
    "path": "src/main/java/com/example/sens/enums/PostIsRecommendEnum.java",
    "content": "package com.example.sens.enums;\n\n/**\n * 房屋推荐枚举\n */\npublic enum PostIsRecommendEnum {\n\n    /**\n     * 真\n     */\n    TRUE(1),\n\n    /**\n     * 假\n     */\n    FALSE(0);\n\n    private Integer value;\n\n    PostIsRecommendEnum(Integer value) {\n        this.value = value;\n    }\n\n    public Integer getValue() {\n        return value;\n    }\n}\n"
  },
  {
    "path": "src/main/java/com/example/sens/enums/PostIsStickyEnum.java",
    "content": "package com.example.sens.enums;\n\n/**\n * 房屋置顶枚举\n */\npublic enum PostIsStickyEnum {\n\n    /**\n     * 真\n     */\n    TRUE(1),\n\n    /**\n     * 假\n     */\n    FALSE(0);\n\n    private Integer value;\n\n    PostIsStickyEnum(Integer value) {\n        this.value = value;\n    }\n\n    public Integer getValue() {\n        return value;\n    }\n}\n"
  },
  {
    "path": "src/main/java/com/example/sens/enums/PostStatusEnum.java",
    "content": "package com.example.sens.enums;\n\n/**\n * <pre>\n *     房屋状态enum\n * </pre>\n *\n * @author : saysky\n * @date : 2018/7/1\n */\npublic enum PostStatusEnum {\n\n    /**\n     * 正在出租\n     */\n    ON_SALE(0),\n\n    /**\n     * 已出租\n     */\n    OFF_SALE(1),\n\n    /**\n     * 已删除\n     */\n    RECYCLE(2);\n\n    private Integer code;\n\n    PostStatusEnum(Integer code) {\n        this.code = code;\n    }\n\n    public Integer getCode() {\n        return code;\n    }\n\n}\n"
  },
  {
    "path": "src/main/java/com/example/sens/enums/PostTypeEnum.java",
    "content": "package com.example.sens.enums;\n\n/**\n * <pre>\n *     房屋类型enum\n * </pre>\n *\n * @author : saysky\n * @date : 2018/7/1\n */\npublic enum PostTypeEnum {\n\n    /**\n     * 房屋\n     */\n    POST_TYPE_POST(\"post\"),\n\n    /**\n     * 页面\n     */\n    POST_TYPE_PAGE(\"page\"),\n\n    /**\n     * 公告\n     */\n    POST_TYPE_NOTICE(\"notice\");\n\n    private String value;\n\n    PostTypeEnum(String value) {\n        this.value = value;\n    }\n\n    public String getValue() {\n        return value;\n    }\n}\n"
  },
  {
    "path": "src/main/java/com/example/sens/enums/ResourceTypeEnum.java",
    "content": "package com.example.sens.enums;\n\n/**\n * 资源类型\n */\npublic enum ResourceTypeEnum {\n\n    /**\n     * 菜单\n     */\n    MENU(\"menu\", \"菜单\"),\n\n    /**\n     * 接口\n     */\n    BUTTON(\"button\", \"接口\"),\n\n    /**\n     * 菜单\n     */\n    PAGE(\"page\", \"页面\");\n\n\n    private String code;\n\n    private String description;\n\n    ResourceTypeEnum(String code, String description) {\n        this.code = code;\n        this.description = description;\n    }\n\n    public String getCode() {\n        return code;\n    }\n\n    public void setCode(String code) {\n        this.code = code;\n    }\n\n    public String getDescription() {\n        return description;\n    }\n\n    public void setDescription(String description) {\n        this.description = description;\n    }\n}\n"
  },
  {
    "path": "src/main/java/com/example/sens/enums/ResultCodeEnum.java",
    "content": "package com.example.sens.enums;\n\n/**\n * 返回结果enum\n */\npublic enum ResultCodeEnum {\n\n    /**\n     * 成功\n     */\n    SUCCESS(1),\n\n    /**\n     * 失败\n     */\n    FAIL(0);\n\n    Integer code;\n\n    ResultCodeEnum(Integer code) {\n        this.code = code;\n    }\n\n    public Integer getCode() {\n        return code;\n    }\n}\n"
  },
  {
    "path": "src/main/java/com/example/sens/enums/RoleEnum.java",
    "content": "package com.example.sens.enums;\n\n/**\n * <pre>\n *     角色枚举\n * </pre>\n *\n */\npublic enum RoleEnum {\n\n    /**\n     * 管理员\n     */\n    ADMIN(\"admin\"),\n\n    /**\n     * 用户\n     */\n    USER(\"user\");\n\n    private String value;\n\n    RoleEnum(String value) {\n        this.value = value;\n    }\n\n    public String getValue() {\n        return value;\n    }\n}\n"
  },
  {
    "path": "src/main/java/com/example/sens/enums/TrueFalseEnum.java",
    "content": "package com.example.sens.enums;\n\n/**\n * true or false enum\n */\npublic enum TrueFalseEnum {\n\n    /**\n     * 真\n     */\n    TRUE(\"true\"),\n\n    /**\n     * 假\n     */\n    FALSE(\"false\");\n\n    private String value;\n\n    TrueFalseEnum(String value) {\n        this.value = value;\n    }\n\n    public String getValue() {\n        return value;\n    }\n}\n"
  },
  {
    "path": "src/main/java/com/example/sens/enums/UserStatusEnum.java",
    "content": "package com.example.sens.enums;\n\n/**\n * 用户状态enum\n */\npublic enum UserStatusEnum {\n\n    /**\n     * 正常\n     */\n    NORMAL(0),\n\n    /**\n     * 禁止登录\n     */\n    BAN(1);\n\n\n    private Integer code;\n\n    UserStatusEnum(Integer code) {\n        this.code = code;\n    }\n\n    public Integer getCode() {\n        return code;\n    }\n}\n"
  },
  {
    "path": "src/main/java/com/example/sens/exception/GlobalExceptionHandler.java",
    "content": "package com.example.sens.exception;\n\nimport com.example.sens.dto.JsonResult;\nimport lombok.extern.slf4j.Slf4j;\nimport org.apache.shiro.authz.UnauthorizedException;\nimport org.springframework.http.HttpStatus;\nimport org.springframework.http.converter.HttpMessageNotReadableException;\nimport org.springframework.ui.Model;\nimport org.springframework.validation.BindException;\nimport org.springframework.validation.BindingResult;\nimport org.springframework.validation.FieldError;\nimport org.springframework.web.HttpMediaTypeNotSupportedException;\nimport org.springframework.web.HttpRequestMethodNotSupportedException;\nimport org.springframework.web.bind.MethodArgumentNotValidException;\nimport org.springframework.web.bind.MissingServletRequestParameterException;\nimport org.springframework.web.bind.annotation.ControllerAdvice;\nimport org.springframework.web.bind.annotation.ExceptionHandler;\nimport org.springframework.web.bind.annotation.ResponseBody;\nimport org.springframework.web.bind.annotation.ResponseStatus;\nimport org.springframework.web.servlet.ModelAndView;\nimport org.springframework.web.servlet.NoHandlerFoundException;\nimport org.springframework.web.servlet.view.json.MappingJackson2JsonView;\n\nimport javax.servlet.http.HttpServletRequest;\nimport javax.servlet.http.HttpServletResponse;\nimport javax.validation.ConstraintViolation;\nimport javax.validation.ConstraintViolationException;\nimport javax.validation.ValidationException;\nimport java.io.IOException;\nimport java.util.HashMap;\nimport java.util.Map;\nimport java.util.Set;\n\n/**\n * 全局异常捕获\n */\n\n@ControllerAdvice\n@Slf4j\npublic class GlobalExceptionHandler {\n\n    //错误显示页面\n    public static final String viewName = \"common/error/error\";\n\n    /**\n     * 是否是ajax请求\n     */\n    public static boolean isAjax(HttpServletRequest httpRequest) {\n        return (httpRequest.getHeader(\"X-Requested-With\") != null\n                && \"XMLHttpRequest\"\n                .equals(httpRequest.getHeader(\"X-Requested-With\").toString()));\n    }\n\n\n    /**\n     * 400 - Bad Request\n     */\n    @ResponseStatus(HttpStatus.BAD_REQUEST)\n    @ExceptionHandler(MissingServletRequestParameterException.class)\n    public String handleMissingServletRequestParameterException(MissingServletRequestParameterException e, Model model) {\n        log.error(\"缺少请求参数\", e);\n        String message = \"【缺少请求参数】\" + e.getMessage();\n        model.addAttribute(\"message\", message);\n        model.addAttribute(\"code\", 400);\n        return viewName;\n    }\n\n    /**\n     * 400 - Bad Request\n     */\n    @ResponseStatus(HttpStatus.BAD_REQUEST)\n    @ExceptionHandler(HttpMessageNotReadableException.class)\n    public String handleHttpMessageNotReadableException(HttpMessageNotReadableException e, Model model) {\n        log.error(\"参数解析失败\", e);\n        String message = \"【参数解析失败】\" + e.getMessage();\n        model.addAttribute(\"message\", message);\n        model.addAttribute(\"code\", 400);\n        return viewName;\n    }\n\n    /**\n     * 400 - Bad Request\n     */\n    @ResponseStatus(HttpStatus.BAD_REQUEST)\n    @ExceptionHandler(MethodArgumentNotValidException.class)\n    public String handleMethodArgumentNotValidException(MethodArgumentNotValidException e, Model model) {\n        log.error(\"参数验证失败\", e);\n        BindingResult result = e.getBindingResult();\n        FieldError error = result.getFieldError();\n        String field = error.getField();\n        String code = error.getDefaultMessage();\n        String message = \"【参数验证失败】\" + String.format(\"%s:%s\", field, code);\n        model.addAttribute(\"message\", message);\n        model.addAttribute(\"code\", 400);\n        return viewName;\n    }\n\n    /**\n     * 400 - Bad Request\n     */\n    @ResponseStatus(HttpStatus.BAD_REQUEST)\n    @ExceptionHandler(BindException.class)\n    public String handleBindException(BindException e, Model model) {\n        log.error(\"参数绑定失败\", e);\n        BindingResult result = e.getBindingResult();\n        FieldError error = result.getFieldError();\n        String field = error.getField();\n        String code = error.getDefaultMessage();\n        String message = \"【参数绑定失败】\" + String.format(\"%s:%s\", field, code);\n\n        model.addAttribute(\"message\", message);\n        model.addAttribute(\"code\", 400);\n        return viewName;\n    }\n\n\n    /**\n     * 400 - Bad Request\n     */\n    @ResponseStatus(HttpStatus.BAD_REQUEST)\n    @ExceptionHandler(ConstraintViolationException.class)\n    public String handleServiceException(ConstraintViolationException e, Model model) {\n        log.error(\"参数验证失败\", e);\n        Set<ConstraintViolation<?>> violations = e.getConstraintViolations();\n        ConstraintViolation<?> violation = violations.iterator().next();\n        String message = \"【参数验证失败】\" + violation.getMessage();\n        model.addAttribute(\"message\", message);\n        model.addAttribute(\"code\", 400);\n        return viewName;\n    }\n\n    /**\n     * 400 - Bad Request\n     */\n    @ResponseStatus(HttpStatus.BAD_REQUEST)\n    @ExceptionHandler(ValidationException.class)\n    public String handleValidationException(ValidationException e, Model model) {\n        log.error(\"参数验证失败\", e);\n        String message = \"【参数验证失败】\" + e.getMessage();\n        model.addAttribute(\"message\", message);\n        model.addAttribute(\"code\", 400);\n        return viewName;\n    }\n\n    /**\n     * 404 - Not Found\n     */\n    @ResponseStatus(HttpStatus.NOT_FOUND)\n    @ExceptionHandler(NoHandlerFoundException.class)\n    public String noHandlerFoundException(NoHandlerFoundException e, Model model) {\n        log.error(\"Not Found\", e);\n        String message = \"【页面不存在】\" + e.getMessage();\n        model.addAttribute(\"message\", message);\n        model.addAttribute(\"code\", 404);\n        return viewName;\n    }\n\n\n    /**\n     * 405 - Method Not Allowed\n     */\n    @ResponseStatus(HttpStatus.METHOD_NOT_ALLOWED)\n    @ExceptionHandler(HttpRequestMethodNotSupportedException.class)\n    public String handleHttpRequestMethodNotSupportedException(HttpRequestMethodNotSupportedException e, Model model) {\n        log.error(\"不支持当前请求方法\", e);\n        String message = \"【不支持当前请求方法】\" + e.getMessage();\n        model.addAttribute(\"message\", message);\n        model.addAttribute(\"code\", 405);\n        return viewName;\n    }\n\n    /**\n     * 415 - Unsupported Media Type\n     */\n    @ResponseStatus(HttpStatus.UNSUPPORTED_MEDIA_TYPE)\n    @ExceptionHandler(HttpMediaTypeNotSupportedException.class)\n    public String handleHttpMediaTypeNotSupportedException(HttpMediaTypeNotSupportedException e, Model model) {\n        log.error(\"不支持当前媒体类型\", e);\n        String message = \"【不支持当前媒体类型】\" + e.getMessage();\n        model.addAttribute(\"message\", message);\n        model.addAttribute(\"code\", 415);\n        return viewName;\n    }\n\n    /**\n     * 统一异常处理\n     *\n     * @param response\n     * @param e\n     * @return\n     */\n    @ExceptionHandler(MyBusinessException.class)\n    @ResponseBody\n    public JsonResult processApiException(HttpServletResponse response,\n                                          MyBusinessException e) {\n        JsonResult result = new JsonResult(0, e.getMessage());\n        response.setStatus(200);\n        response.setContentType(\"application/json;charset=UTF-8\");\n        log.error(\"业务异常，提示前端操作不合法\", e.getMessage(), e);\n        return result;\n    }\n\n    /**\n     * 获取其它异常。包括500\n     *\n     * @param e\n     * @return\n     * @throws Exception\n     */\n    @ExceptionHandler(value = Exception.class)\n    public ModelAndView defaultErrorHandler(HttpServletRequest request,\n                                            HttpServletResponse response,\n                                            Exception e, Model model) throws IOException {\n        e.printStackTrace();\n\n        if (isAjax(request)) {\n            ModelAndView mav = new ModelAndView();\n            MappingJackson2JsonView view = new MappingJackson2JsonView();\n            Map<String, Object> attributes = new HashMap<String, Object>();\n            if (e instanceof UnauthorizedException) {\n                attributes.put(\"msg\", \"没有权限\");\n            } else {\n                attributes.put(\"msg\", e.getMessage());\n            }\n            attributes.put(\"code\", \"0\");\n            view.setAttributesMap(attributes);\n            mav.setView(view);\n            return mav;\n        }\n\n        if (e instanceof UnauthorizedException) {\n            //请登录\n            log.error(\"无权访问\", e);\n            return new ModelAndView(\"common/error/403\");\n        }\n        //其他异常\n        String message = e.getMessage();\n        model.addAttribute(\"code\", 500);\n        model.addAttribute(\"message\", message);\n        return new ModelAndView(\"common/error/500\");\n    }\n}\n"
  },
  {
    "path": "src/main/java/com/example/sens/exception/MyBusinessException.java",
    "content": "package com.example.sens.exception;\n\n/**\n * @author 言曌\n * @date 2019-08-09 16:47\n */\n\npublic class MyBusinessException extends RuntimeException {\n\n    private Integer code;\n\n    private String message;\n\n\n    public MyBusinessException() {\n        super();\n    }\n\n    public MyBusinessException(String message) {\n        this.code = 500;\n        this.message = message;\n    }\n\n    public MyBusinessException(Integer code, String message) {\n        this.code = code;\n        this.message = message;\n    }\n\n    public Integer getCode() {\n        return code;\n    }\n\n    public void setCode(Integer code) {\n        this.code = code;\n    }\n\n    @Override\n    public String getMessage() {\n        return message;\n    }\n\n    public void setMessage(String message) {\n        this.message = message;\n    }\n}\n"
  },
  {
    "path": "src/main/java/com/example/sens/mapper/CategoryMapper.java",
    "content": "package com.example.sens.mapper;\n\nimport com.baomidou.mybatisplus.core.mapper.BaseMapper;\nimport com.example.sens.entity.Category;\nimport org.apache.ibatis.annotations.Mapper;\nimport org.apache.ibatis.annotations.Param;\n\nimport java.util.List;\n\n/**\n * @author liuyanzhao\n */\n@Mapper\npublic interface CategoryMapper extends BaseMapper<Category> {\n\n    /**\n     * 获得子分类Id列表\n     *\n     * @param  pathTrace /138/ 这种格式\n     * @return 子分类Id列表\n     */\n    List<Long> selectChildCateIds(@Param(\"pathTrace\") String pathTrace);\n\n    /**\n     * 根据用户ID删除\n     * @param userId\n     * @return\n     */\n    Integer deleteByUserId(Long userId);\n\n    /**\n     * 获取所有分类\n     * @return\n     */\n    List<Category> findAllWithCount();\n}\n\n"
  },
  {
    "path": "src/main/java/com/example/sens/mapper/CityMapper.java",
    "content": "package com.example.sens.mapper;\n\nimport com.baomidou.mybatisplus.core.mapper.BaseMapper;\nimport com.example.sens.entity.City;\nimport org.apache.ibatis.annotations.Mapper;\n\nimport java.util.List;\n\n/**\n * @author liuyanzhao\n */\n@Mapper\npublic interface CityMapper extends BaseMapper<City> {\n\n    /**\n     * 获取所有城市\n     * @return\n     */\n    List<City> findAllWithCount();\n}\n\n"
  },
  {
    "path": "src/main/java/com/example/sens/mapper/NoticeMapper.java",
    "content": "package com.example.sens.mapper;\n\nimport com.baomidou.mybatisplus.core.mapper.BaseMapper;\nimport com.example.sens.entity.Notice;\nimport org.apache.ibatis.annotations.Mapper;\n\n\n/**\n * @author liuyanzhao\n */\n@Mapper\npublic interface NoticeMapper extends BaseMapper<Notice> {\n}\n\n"
  },
  {
    "path": "src/main/java/com/example/sens/mapper/OrderMapper.java",
    "content": "package com.example.sens.mapper;\n\nimport com.baomidou.mybatisplus.core.mapper.BaseMapper;\nimport com.baomidou.mybatisplus.extension.plugins.pagination.Page;\nimport com.example.sens.entity.Order;\nimport org.apache.ibatis.annotations.Mapper;\nimport org.apache.ibatis.annotations.Param;\n\nimport java.util.List;\n\n/**\n * @author liuyanzhao\n */\n@Mapper\npublic interface OrderMapper extends BaseMapper<Order> {\n\n    /**\n     * 根据条件查询订单\n     *\n     * @param condition\n     * @return\n     */\n    List<Order> findAll(@Param(\"condition\") Order condition, Page page);\n\n    /**\n     * 根据条件查询总金额\n     *\n     * @param condition\n     * @return\n     */\n    Integer getTotalPriceSum(@Param(\"condition\") Order condition);\n\n    /**\n     * 更新超时订单状态为超时\n     *\n     * @return\n     */\n    Integer updateOverDueOrder();\n\n    /**\n     * 根据房屋ID删除\n     * @param postId\n     * @return\n     */\n    Integer deleteByPostId(Long postId);\n\n    /**\n     * 获得到期的订单\n     * @return\n     */\n    List<Order> findOverDueOrder();\n\n    /**\n     * 查询有效订单\n     * @param postId\n     * @return\n     */\n    Order findByPostId(Long postId);\n}\n\n"
  },
  {
    "path": "src/main/java/com/example/sens/mapper/PermissionMapper.java",
    "content": "package com.example.sens.mapper;\n\nimport com.baomidou.mybatisplus.core.mapper.BaseMapper;\nimport com.example.sens.entity.Permission;\nimport org.apache.ibatis.annotations.Mapper;\nimport org.apache.ibatis.annotations.Param;\n\nimport java.util.List;\n\n\n/**\n * @author example\n */\n@Mapper\npublic interface PermissionMapper extends BaseMapper<Permission> {\n\n    /**\n     * 根据角色Id获得权限列表\n     *\n     * @param roleId 角色Id\n     * @return 权限列表\n     */\n    List<Permission> findByRoleId(Long roleId);\n\n    /**\n     * 获得某个用户的权限列表\n     *\n     * @param userId\n     * @return\n     */\n    List<Permission> findPermissionByUserId(Long userId);\n\n    /**\n     * 获得某个用户的权限列表\n     *\n     * @param userId\n     * @param resourceType\n     * @return\n     */\n    List<Permission> findPermissionByUserIdAndResourceType(@Param(\"userId\") Long userId,\n                                                           @Param(\"resourceType\") String resourceType);\n\n\n    /**\n     * 获得权限列表\n     *\n     * @param resourceType\n     * @return\n     */\n    List<Permission> findPermissionByResourceType(Integer resourceType);\n\n    /**\n     * 根据角色ID获得权限列表\n     * @param roleId\n     * @return\n     */\n    List<Permission> findPermissionByRoleId(Long roleId);\n\n    /**\n     * 统计子节点数量\n     * @param id\n     * @return\n     */\n    Integer countChildPermission(Long id);\n\n    /**\n     * 根据URL获得权限\n     * @param url\n     * @return\n     */\n    Permission findByUrl(String url);\n}\n\n"
  },
  {
    "path": "src/main/java/com/example/sens/mapper/PostMapper.java",
    "content": "package com.example.sens.mapper;\n\nimport com.baomidou.mybatisplus.core.mapper.BaseMapper;\nimport com.baomidou.mybatisplus.extension.plugins.pagination.Page;\nimport com.example.sens.common.constant.CommonConstant;\nimport com.example.sens.entity.Post;\nimport org.apache.ibatis.annotations.Mapper;\nimport org.apache.ibatis.annotations.Param;\n\nimport java.util.List;\n\n/**\n * @author liuyanzhao\n */\n@Mapper\npublic interface PostMapper extends BaseMapper<Post> {\n\n    /**\n     * 根据条件查询房屋\n     *\n     * @param condition\n     * @param page\n     * @return\n     */\n    List<Post> findPostByCondition(@Param(CommonConstant.CONDITION) Post condition, Page page);\n\n    /**\n     * 根据租客用户ID查询\n     *\n     * @param userId\n     * @param page\n     * @return\n     */\n    List<Post> findByRentUserId(@Param(\"userId\") Long userId, Page page);\n\n    /**\n     * 统计该分类的房屋\n     *\n     * @param cateId\n     * @return\n     */\n    Integer countPostByCateId(Long cateId);\n\n\n    /**\n     * 获得最新房屋\n     *\n     * @param cityId\n     * @param limit\n     * @return\n     */\n    List<Post> getLatestPost(@Param(\"cityId\") Long cityId, @Param(\"limit\") Integer limit);\n\n    /**\n     * 根据状态统计\n     *\n     * @param postStatus 状态\n     * @return\n     */\n    Integer countByStatus(Integer postStatus);\n\n    /**\n     * 获得合租房屋\n     *\n     * @return\n     */\n    List<Post> getUnionRentPost(Post post);\n\n}\n\n"
  },
  {
    "path": "src/main/java/com/example/sens/mapper/RechargeRecordMapper.java",
    "content": "package com.example.sens.mapper;\n\n\nimport com.baomidou.mybatisplus.core.mapper.BaseMapper;\nimport com.baomidou.mybatisplus.extension.plugins.pagination.Page;\nimport com.example.sens.entity.RechargeRecord;\nimport org.apache.ibatis.annotations.Mapper;\nimport org.apache.ibatis.annotations.Param;\n\nimport java.util.List;\n\n/**\n * @author example\n */\n@Mapper\npublic interface RechargeRecordMapper extends BaseMapper<RechargeRecord> {\n\n    /**\n     * 删除用户和预定关联\n     *\n     * @param userId 用户ID\n     * @return 影响行数\n     */\n    Integer deleteByUserId(Long userId);\n\n    /**\n     * 查询所有充值记录\n     *\n     * @return\n     */\n    List<RechargeRecord> findAll(@Param(\"startDate\") String startDate,\n                                 @Param(\"endDate\") String endDate,\n                                 Page page);\n\n\n    /**\n     * 获得该用户的充值记录\n     *\n     * @return\n     */\n    List<RechargeRecord> findByUserId(@Param(\"startDate\") String startDate,\n                                      @Param(\"endDate\") String endDate,\n                                      @Param(\"userId\") Long userId, Page page);\n\n    /**\n     * 根据时间范围查询总金额\n     *\n     * @param startDate\n     * @param endDate\n     * @return\n     */\n    Integer getTotalMoneySum(@Param(\"startDate\") String startDate,\n                             @Param(\"endDate\") String endDate);\n}\n\n"
  },
  {
    "path": "src/main/java/com/example/sens/mapper/RoleMapper.java",
    "content": "package com.example.sens.mapper;\n\nimport com.baomidou.mybatisplus.core.mapper.BaseMapper;\nimport com.example.sens.entity.Role;\nimport org.apache.ibatis.annotations.Mapper;\n\nimport java.util.List;\n\n\n/**\n * @author example\n */\n@Mapper\npublic interface RoleMapper extends BaseMapper<Role> {\n\n\n    /**\n     * 根据用户Id获得角色\n     *\n     * @param userId 用户Id\n     * @return 角色列表\n     */\n    Role findByUserId(Long userId);\n\n\n    /**\n     * 删除用户和角色管理\n     *\n     * @param userId 用户ID\n     * @return 影响行数\n     */\n    Integer deleteByUserId(Long userId);\n\n    /**\n     * 统计某个角色的用户数\n     *\n     * @param roleId 角色Id\n     * @return 用户数\n     */\n    Integer countUserByRoleId(Long roleId);\n\n\n    /**\n     * 获得所有角色和对应用户数量\n     * @return\n     */\n    List<Role> findAllWithCount();\n\n    /**\n     * 查询小于等于该等级的角色\n     * @param level\n     * @return\n     */\n    List<Role> findByLessThanLevel(Integer level);\n\n    /**\n     * 查询某个用户最大的角色等级\n     * @param userId\n     * @return\n     */\n    Integer findMaxLevelByUserId(Long userId);\n\n    /**\n     * 获得用户注册默认角色\n     * @return\n     */\n    Role findDefaultRole();\n}\n\n"
  },
  {
    "path": "src/main/java/com/example/sens/mapper/RolePermissionRefMapper.java",
    "content": "package com.example.sens.mapper;\n\nimport com.baomidou.mybatisplus.core.mapper.BaseMapper;\nimport com.example.sens.entity.RolePermissionRef;\nimport org.apache.ibatis.annotations.Mapper;\n\nimport java.util.List;\n\n\n/**\n * @author example\n */\n@Mapper\npublic interface RolePermissionRefMapper extends BaseMapper<RolePermissionRef> {\n\n\n    /**\n     * 根据角色Id删除\n     *\n     * @param roleId 角色Id\n     * @return 影响行数\n     */\n   Integer deleteByRoleId(Long roleId);\n\n    /**\n     * 根据权限Id删除\n     *\n     * @param permissionId 权限Id\n     * @return 影响行数\n     */\n    Integer deleteByPermissionId(Long permissionId);\n    /**\n     * 批量添加\n     *\n     * @param rolePermissionRefList 列表\n     * @return 影响喊你高数\n     */\n   Integer batchInsert(List<RolePermissionRef> rolePermissionRefList);\n}\n\n"
  },
  {
    "path": "src/main/java/com/example/sens/mapper/UserMapper.java",
    "content": "package com.example.sens.mapper;\n\nimport com.baomidou.mybatisplus.core.mapper.BaseMapper;\nimport com.baomidou.mybatisplus.extension.plugins.pagination.Page;\nimport com.example.sens.entity.User;\nimport org.apache.ibatis.annotations.Mapper;\nimport org.apache.ibatis.annotations.Param;\n\nimport java.util.List;\n\n/**\n * @author example\n */\n@Mapper\npublic interface UserMapper extends BaseMapper<User> {\n\n    /**\n     * 根据角色Id获得用户\n     *\n     * @param roleId 角色Id\n     * @param page 分页信息\n     * @return 用户列表\n     */\n    List<User> findByRoleId(@Param(\"roleId\") Long roleId, Page page);\n\n    /**\n     * 根据角色Id和条件获得用户\n     *\n     * @param roleId 角色Id\n     * @param user 条件\n     * @param page 分页信息\n     * @return 用户列表\n     */\n    List<User> findByRoleIdAndCondition(@Param(\"roleId\") Long roleId,\n                                        @Param(\"user\") User user, Page page);\n\n    /**\n     * 根据条件查询\n     *\n     * @param user 用户\n     * @param page 分页\n     * @return 用户列表\n     */\n    List<User> findByCondition( @Param(\"user\") User user, Page page);\n\n    /**\n     * 获得今日新增数量\n     * @return\n     */\n    Integer getTodayCount();\n\n    /**\n     * 获得用户房屋数排名\n     * @param limit 查询数量\n     * @return\n     */\n    List<User> getUserPostRanking(Integer limit);\n\n    /**\n     * 获得最新注册用户\n     * @param limit\n     * @return\n     */\n    List<User> getLatestUser(Integer limit);\n\n    /**\n     * 获得热门用户\n     * @param limit 用户数量\n     * @return\n     */\n    List<User> getHotUsers(Integer limit);\n\n}\n\n"
  },
  {
    "path": "src/main/java/com/example/sens/mapper/UserRoleRefMapper.java",
    "content": "package com.example.sens.mapper;\n\nimport com.baomidou.mybatisplus.core.mapper.BaseMapper;\nimport com.example.sens.entity.UserRoleRef;\nimport org.apache.ibatis.annotations.Mapper;\n\n/**\n * @author example\n */\n@Mapper\npublic interface UserRoleRefMapper extends BaseMapper<UserRoleRef> {\n\n    /**\n     * 根据用户Id删除\n     *\n     * @param userId 用户Id\n     * @return 影响行数\n     */\n    Integer deleteByUserId(Long userId);\n}\n\n"
  },
  {
    "path": "src/main/java/com/example/sens/service/CategoryService.java",
    "content": "package com.example.sens.service;\n\n\nimport com.example.sens.common.base.BaseService;\nimport com.example.sens.entity.Category;\n\nimport java.util.List;\n\n/**\n * <pre>\n *     分类业务逻辑接口\n * </pre>\n *\n * @author : saysky\n * @date : 2019/11/30\n */\npublic interface CategoryService extends BaseService<Category, Long> {\n\n    /**\n     * 查询所有分类目录,带count和根据level封装name\n     *\n     * @return 返回List集合\n     */\n    List<Category> findByUserId(Long userId);\n\n    /**\n     * 获得某个分类的所有房屋数\n     *\n     * @param cateId 分类Id\n     * @return 房屋数\n     */\n    Integer countPostByCateId(Long cateId);\n\n    /**\n     * 根据用户ID删除\n     *\n     * @param userId\n     * @return\n     */\n    Integer deleteByUserId(Long userId);\n\n    /**\n     * 将分类ID列表转成分类\n     *\n     * @param cateIds\n     * @param userId\n     * @return\n     */\n    List<Category> cateIdsToCateList(List<Long> cateIds, Long userId);\n\n}\n"
  },
  {
    "path": "src/main/java/com/example/sens/service/CityService.java",
    "content": "package com.example.sens.service;\n\n\nimport com.example.sens.common.base.BaseService;\nimport com.example.sens.entity.City;\n\npublic interface CityService extends BaseService<City, Long> {\n\n\n}\n"
  },
  {
    "path": "src/main/java/com/example/sens/service/MailService.java",
    "content": "package com.example.sens.service;\n\n\nimport javax.mail.MessagingException;\n\n/**\n * <pre>\n *     邮件发送业务逻辑接口\n * </pre>\n */\npublic interface MailService {\n\n    /**\n     * 发送邮件\n     *\n     * @param to      接收者\n     * @param title   标题\n     * @param content 内容\n     */\n    void sendMail(String to, String title, String content) throws MessagingException;\n\n}\n"
  },
  {
    "path": "src/main/java/com/example/sens/service/NoticeService.java",
    "content": "package com.example.sens.service;\n\n\nimport com.example.sens.common.base.BaseService;\nimport com.example.sens.entity.Notice;\n\npublic interface NoticeService extends BaseService<Notice, Long> {\n\n\n}\n"
  },
  {
    "path": "src/main/java/com/example/sens/service/OrderService.java",
    "content": "package com.example.sens.service;\n\nimport com.baomidou.mybatisplus.extension.plugins.pagination.Page;\nimport com.example.sens.common.base.BaseService;\nimport com.example.sens.entity.Order;\n\n/**\n * 订单\n *\n * @author 言曌\n * @date 2020/4/6 2:00 下午\n */\npublic interface OrderService extends BaseService<Order, Long> {\n\n    /**\n     * 查询总金额\n     *\n     * @return\n     */\n    Integer getTotalPriceSum(Order condition);\n\n    /**\n     * 根据条件查询\n     *\n     * @param condition\n     * @param page\n     * @return\n     */\n    Page<Order> findAll(Order condition, Page<Order> page);\n\n    /**\n     * 查询有效订单\n     * @param postId\n     * @return\n     */\n    Order findByPostId(Long postId);\n\n}\n"
  },
  {
    "path": "src/main/java/com/example/sens/service/PermissionService.java",
    "content": "package com.example.sens.service;\n\nimport com.example.sens.entity.Permission;\nimport com.example.sens.common.base.BaseService;\n\nimport java.util.List;\nimport java.util.Set;\n\n/**\n * 权限逻辑接口\n */\npublic interface PermissionService extends BaseService<Permission, Long> {\n\n    /**\n     * 根据角色Id获得权限列表\n     *\n     * @param roleId 角色Id\n     * @return 权限列表\n     */\n    List<Permission> listPermissionsByRoleId(Long roleId);\n\n    /**\n     * 获得某个用户的权限URL列表\n     *\n     * @param userId\n     * @return\n     */\n    Set<String> findPermissionUrlsByUserId(Long userId);\n\n    /**\n     * 获得某个用户的用户ID和资源类型\n     *\n     * @param userId\n     * @param resourceType\n     * @return\n     */\n    List<Permission> findPermissionTreeByUserIdAndResourceType(Long userId, String resourceType);\n\n    /**\n     * 根据角色ID获得权限列表\n     * @param roleId\n     * @return\n     */\n    List<Permission> findPermissionByRoleId(Long roleId);\n\n    /**\n     * 获得所有权限，带有等级\n     * @return\n     */\n    List<Permission> findPermissionListWithLevel();\n\n    /**\n     * 统计子节点数量\n     * @param id\n     * @return\n     */\n    Integer countChildPermission(Long id);\n\n    /**\n     * 根据URL获得权限\n     * @param url\n     * @return\n     */\n    Permission findByUrl(String url);\n}\n"
  },
  {
    "path": "src/main/java/com/example/sens/service/PostService.java",
    "content": "package com.example.sens.service;\n\nimport com.baomidou.mybatisplus.extension.plugins.pagination.Page;\nimport com.example.sens.common.base.BaseService;\nimport com.example.sens.entity.Post;\n\nimport java.util.List;\n\n/**\n * <pre>\n *     记录/页面业务逻辑接口\n * </pre>\n */\npublic interface PostService extends BaseService<Post, Long> {\n\n    /**\n     * 根据条件获得列表\n     *\n     * @param condition\n     * @return\n     */\n    Page<Post> findPostByCondition(Post condition, Page<Post> page);\n\n\n    /**\n     * 根据租客userId查询\n     *\n     * @param userId\n     * @return\n     */\n    Page<Post> findByRentUserId(Long userId, Page<Post> page);\n\n\n    /**\n     * 获得最新房屋\n     *\n     * @param cityId\n     * @param limit\n     * @return\n     */\n    List<Post> getLatestPost(Long cityId, int limit);\n\n    /**\n     * 根据状态统计\n     *\n     * @param postStatus 状态\n     * @return\n     */\n    Integer countByStatus(Integer postStatus);\n\n    /**\n     * 获得合租房屋\n     *\n     * @return\n     */\n    List<Post> getUnionRentPost(Post post);\n}\n"
  },
  {
    "path": "src/main/java/com/example/sens/service/RechargeRecordService.java",
    "content": "package com.example.sens.service;\n\n\nimport com.baomidou.mybatisplus.extension.plugins.pagination.Page;\nimport com.example.sens.common.base.BaseService;\nimport com.example.sens.entity.RechargeRecord;\n\n/**\n * @author 言曌\n * @date 2020/3/22 3:18 下午\n */\n\npublic interface RechargeRecordService extends BaseService<RechargeRecord, Long> {\n\n\n    Page<RechargeRecord> findAll(String startDate, String endDate, Page<RechargeRecord> page);\n\n    /**\n     * 根据用户ID获得预定列表\n     *\n     * @param userId\n     * @param page\n     * @return\n     */\n    Page<RechargeRecord> findByUserId(String startDate, String endDate, Long userId, Page<RechargeRecord> page);\n\n\n    /**\n     * 根据时间范围查询总金额\n     *\n     * @param startDate\n     * @param endDate\n     * @return\n     */\n    Integer getTotalMoneySum(String startDate, String endDate);\n}\n"
  },
  {
    "path": "src/main/java/com/example/sens/service/RolePermissionRefService.java",
    "content": "package com.example.sens.service;\n\nimport com.example.sens.entity.RolePermissionRef;\n\nimport java.util.List;\n\n\npublic interface RolePermissionRefService {\n\n    /**\n     * 删除某个角色的所有关联\n     *\n     * @param roleId 角色Id\n     */\n    void deleteRefByRoleId(Long roleId);\n\n    /**\n     * 添加角色和权限关联\n     *\n     * @param rolePermissionRef RolePermissionRef\n     * @return UserRoleRef\n     */\n    void saveByRolePermissionRef(RolePermissionRef rolePermissionRef);\n\n    /**\n     * 批量添加\n     *\n     * @param rolePermissionRefs 列表\n     */\n    void batchSaveByRolePermissionRef(List<RolePermissionRef> rolePermissionRefs);\n\n}\n"
  },
  {
    "path": "src/main/java/com/example/sens/service/RoleService.java",
    "content": "package com.example.sens.service;\n\nimport com.example.sens.entity.Role;\nimport com.example.sens.common.base.BaseService;\n\nimport java.util.List;\n\n/**\n * 角色逻辑接口\n */\npublic interface RoleService extends BaseService<Role, Long> {\n\n    /**\n     * 删除某个用户的所有关联\n     *\n     * @param userId 用户Id\n     */\n    void deleteByUserId(Long userId);\n\n    /**\n     * 根据编号查询单个权限\n     *\n     * @param roleId roleId\n     * @return Role\n     */\n    Role findByRoleId(Long roleId);\n\n    /**\n     * 根据编号查询单个权限\n     *\n     * @param roleName roleName\n     * @return Role\n     */\n    Role findByRoleName(String roleName);\n\n    /**\n     * 根据用户Id获得角色\n     *\n     * @param userId 用户Id\n     * @return 角色列表\n     */\n    Role findByUserId(Long userId);\n\n    /**\n     * 统计这个角色的用户数\n     *\n     * @param roleId 角色Id\n     */\n    Integer countUserByRoleId(Long roleId);\n\n    /**\n     * 查询某个用户最大的角色等级\n     * @param userId\n     * @return\n     */\n    Integer findMaxLevelByUserId(Long userId);\n\n    /**\n     * 查询小于等于该等级的角色\n     * @param level\n     * @return\n     */\n    List<Role> findByLessThanLevel(Integer level);\n\n    /**\n     * 获得用户注册默认角色\n     * @return\n     */\n    Role findDefaultRole();\n\n    /**\n     * 获得用户注册默认角色\n     * @return\n     */\n    Role getMaxRoleByUserId(Long userId);\n\n}\n"
  },
  {
    "path": "src/main/java/com/example/sens/service/UserRoleRefService.java",
    "content": "package com.example.sens.service;\n\nimport com.example.sens.entity.UserRoleRef;\nimport com.example.sens.common.base.BaseService;\n\n\npublic interface UserRoleRefService extends BaseService<UserRoleRef, Long> {\n\n    /**\n     * 根据用户Id删除\n     *\n     * @param userId 用户Id\n     */\n    void deleteByUserId(Long userId);\n\n\n}\n"
  },
  {
    "path": "src/main/java/com/example/sens/service/UserService.java",
    "content": "package com.example.sens.service;\n\nimport com.baomidou.mybatisplus.extension.plugins.pagination.Page;\nimport com.example.sens.common.base.BaseService;\nimport com.example.sens.entity.User;\n\n/**\n * 用户业务逻辑接口\n */\npublic interface UserService extends BaseService<User, Long> {\n\n    /**\n     * 根据账号获得用户\n     *\n     * @param userName 账号\n     * @return 用户\n     */\n    User findByUserName(String userName);\n\n\n    /**\n     * 根据身份证号码查找用户\n     *\n     * @param idCard 身份证号码\n     * @return User\n     */\n    User findByIdCard(String idCard);\n\n    /**\n     * 更新密码\n     *\n     * @param userId   用户Id\n     * @param password 密码\n     */\n    void updatePassword(Long userId, String password);\n\n    /**\n     * 分页获取所有用户\n     *\n     * @param roleName  角色名称\n     * @param condition 查询条件\n     * @param page      分页信息\n     * @return 用户列表\n     */\n    Page<User> findByRoleAndCondition(String roleName, User condition, Page<User> page);\n\n}\n"
  },
  {
    "path": "src/main/java/com/example/sens/service/impl/CategoryServiceImpl.java",
    "content": "package com.example.sens.service.impl;\n\nimport cn.hutool.core.util.StrUtil;\nimport com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;\nimport com.baomidou.mybatisplus.core.mapper.BaseMapper;\nimport com.example.sens.entity.Category;\nimport com.example.sens.mapper.CategoryMapper;\nimport com.example.sens.mapper.PostMapper;\nimport com.example.sens.service.CategoryService;\nimport com.example.sens.service.PostService;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.stereotype.Service;\n\nimport java.util.ArrayList;\nimport java.util.List;\nimport java.util.stream.Collectors;\n\n/**\n * <pre>\n *     分类业务逻辑实现类\n * </pre>\n *\n */\n@Service\npublic class CategoryServiceImpl implements CategoryService {\n\n    @Autowired\n    private CategoryMapper categoryMapper;\n\n    @Autowired\n    private PostMapper postMapper;\n\n    @Autowired\n    private PostService postService;\n\n    @Override\n    public BaseMapper<Category> getRepository() {\n        return categoryMapper;\n    }\n\n    @Override\n    public QueryWrapper<Category> getQueryWrapper(Category category) {\n        //对指定字段查询\n        QueryWrapper<Category> queryWrapper = new QueryWrapper<>();\n        if (category != null) {\n            if (StrUtil.isNotBlank(category.getCateName())) {\n                queryWrapper.like(\"cate_name\", category.getCateName());\n            }\n        }\n        return queryWrapper;\n    }\n\n    @Override\n    public Category insert(Category category) {\n        categoryMapper.insert(category);\n        return category;\n    }\n\n    @Override\n    public Category update(Category category) {\n        categoryMapper.updateById(category);\n        return category;\n    }\n\n    @Override\n    public void delete(Long id) {\n        // 删除分类\n        categoryMapper.deleteById(id);\n    }\n\n\n    @Override\n    public List<Category> findByUserId(Long userId) {\n        QueryWrapper queryWrapper = new QueryWrapper();\n        queryWrapper.eq(\"user_id\", userId);\n        return categoryMapper.selectList(queryWrapper);\n    }\n\n\n    @Override\n    public Integer countPostByCateId(Long cateId) {\n        return postMapper.countPostByCateId(cateId);\n    }\n\n    @Override\n    public Category insertOrUpdate(Category entity) {\n        if (entity.getId() == null) {\n            insert(entity);\n        } else {\n            update(entity);\n        }\n        return entity;\n    }\n\n    @Override\n    public Integer deleteByUserId(Long userId) {\n        return categoryMapper.deleteByUserId(userId);\n    }\n\n    @Override\n    public List<Category> cateIdsToCateList(List<Long> cateIds, Long userId) {\n        List<Category> categoryList = this.findByUserId(userId);\n        List<Long> allCateIds = categoryList.stream().map(Category::getId).collect(Collectors.toList());\n        List<Category> result = new ArrayList<>();\n        for(Long id : cateIds) {\n            if(allCateIds.contains(id)) {\n                Category category = new Category();\n                category.setId(id);\n                result.add(category);\n            }\n        }\n        return result;\n    }\n\n\n    @Override\n    public List<Category> findAll() {\n        return categoryMapper.findAllWithCount();\n    }\n}\n"
  },
  {
    "path": "src/main/java/com/example/sens/service/impl/CityServiceImpl.java",
    "content": "package com.example.sens.service.impl;\n\nimport cn.hutool.core.util.StrUtil;\nimport com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;\nimport com.baomidou.mybatisplus.core.mapper.BaseMapper;\nimport com.example.sens.entity.City;\nimport com.example.sens.mapper.CityMapper;\nimport com.example.sens.service.CityService;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.stereotype.Service;\n\nimport java.util.List;\n\n/**\n * <pre>\n *     城市业务服务实现类\n * </pre>\n */\n@Service\npublic class CityServiceImpl implements CityService {\n\n    @Autowired\n    private CityMapper cityMapper;\n\n\n    @Override\n    public BaseMapper<City> getRepository() {\n        return cityMapper;\n    }\n\n    @Override\n    public QueryWrapper<City> getQueryWrapper(City city) {\n        //对指定字段查询\n        QueryWrapper<City> queryWrapper = new QueryWrapper<>();\n        if (city != null) {\n            if (StrUtil.isNotBlank(city.getCityName())) {\n                queryWrapper.like(\"city_name\", city.getCityName());\n            }\n        }\n        return queryWrapper;\n    }\n\n    @Override\n    public List<City> findAll() {\n        return cityMapper.findAllWithCount();\n    }\n}\n"
  },
  {
    "path": "src/main/java/com/example/sens/service/impl/MailServiceImpl.java",
    "content": "package com.example.sens.service.impl;\n\nimport com.example.sens.service.MailService;\nimport com.example.sens.util.SensUtils;\nimport io.github.biezhi.ome.OhMyEmail;\nimport org.springframework.beans.factory.annotation.Value;\nimport org.springframework.stereotype.Service;\n\nimport javax.mail.MessagingException;\n\n/**\n * <pre>\n *     邮件发送业务逻辑实现类\n * </pre>\n *\n * @author : saysky\n * @date : 2018/1/23\n */\n@Service\npublic class MailServiceImpl implements MailService {\n\n    @Value(\"${mail.smtp.host}\")\n    private String host;\n\n    @Value(\"${mail.smtp.username}\")\n    private String username;\n\n    @Value(\"${mail.smtp.password}\")\n    private String password;\n\n    @Value(\"${mail.from.name}\")\n    private String fromName;\n\n    /**\n     * 发送邮件\n     *\n     * @param to      to 接收者\n     * @param title   subject 标题\n     * @param content content 内容\n     */\n    @Override\n    public void sendMail(String to, String title, String content) throws MessagingException {\n        //配置邮件服务器\n        SensUtils.configMail(host, username, password);\n        OhMyEmail.subject(title)\n                .from(fromName)\n                .to(to)\n                .text(content)\n                .send();\n    }\n}\n"
  },
  {
    "path": "src/main/java/com/example/sens/service/impl/NoticeServiceImpl.java",
    "content": "package com.example.sens.service.impl;\n\nimport com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;\nimport com.baomidou.mybatisplus.core.mapper.BaseMapper;\nimport com.example.sens.entity.Notice;\nimport com.example.sens.mapper.NoticeMapper;\nimport com.example.sens.service.NoticeService;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.stereotype.Service;\n\n\n/**\n * <pre>\n *     城市业务服务实现类\n * </pre>\n */\n@Service\npublic class NoticeServiceImpl implements NoticeService {\n\n    @Autowired\n    private NoticeMapper noticeMapper;\n\n\n    @Override\n    public BaseMapper<Notice> getRepository() {\n        return noticeMapper;\n    }\n\n    @Override\n    public QueryWrapper<Notice> getQueryWrapper(Notice notice) {\n        //对指定字段查询\n        QueryWrapper<Notice> queryWrapper = new QueryWrapper<>();\n        return queryWrapper;\n    }\n\n}\n"
  },
  {
    "path": "src/main/java/com/example/sens/service/impl/OrderServiceImpl.java",
    "content": "package com.example.sens.service.impl;\n\nimport com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;\nimport com.baomidou.mybatisplus.core.mapper.BaseMapper;\nimport com.baomidou.mybatisplus.extension.plugins.pagination.Page;\nimport com.example.sens.entity.Order;\nimport com.example.sens.mapper.OrderMapper;\nimport com.example.sens.service.OrderService;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.stereotype.Service;\n\n/**\n * @author 言曌\n * @date 2020/4/6 2:01 下午\n */\n@Service\npublic class OrderServiceImpl implements OrderService {\n\n    @Autowired\n    private OrderMapper orderMapper;\n\n    @Override\n    public BaseMapper<Order> getRepository() {\n        return orderMapper;\n    }\n\n    @Override\n    public QueryWrapper<Order> getQueryWrapper(Order order) {\n        //对指定字段查询\n        QueryWrapper<Order> queryWrapper = new QueryWrapper<>();\n        if (order != null) {\n            if (order.getUserId() != null) {\n                queryWrapper.eq(\"user_id\", order.getUserId());\n            }\n            if (order.getOwnerUserId() != null) {\n                queryWrapper.eq(\"owner_user_id\", order.getOwnerUserId());\n            }\n            if (order.getPostId() != null) {\n                queryWrapper.eq(\"post_id\", order.getPostId());\n            }\n            if (order.getStatus() != null) {\n                queryWrapper.eq(\"status\", order.getStatus());\n            }\n            if (order.getStartDate() != null) {\n                queryWrapper.eq(\"start_date\", order.getStartDate());\n            }\n            if (order.getEndDate() != null) {\n                queryWrapper.eq(\"end_date\", order.getEndDate());\n            }\n        }\n        return queryWrapper;\n    }\n\n    @Override\n    public Integer getTotalPriceSum(Order condition) {\n        return orderMapper.getTotalPriceSum(condition);\n    }\n\n    @Override\n    public Page<Order> findAll(Order condition, Page<Order> page) {\n        return page.setRecords(orderMapper.findAll(condition, page));\n    }\n\n    @Override\n    public Order findByPostId(Long postId) {\n        return orderMapper.findByPostId(postId);\n    }\n}\n"
  },
  {
    "path": "src/main/java/com/example/sens/service/impl/PermissionServiceImpl.java",
    "content": "package com.example.sens.service.impl;\n\nimport cn.hutool.core.util.StrUtil;\nimport com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;\nimport com.baomidou.mybatisplus.core.mapper.BaseMapper;\nimport com.example.sens.entity.Permission;\nimport com.example.sens.mapper.PermissionMapper;\nimport com.example.sens.mapper.RolePermissionRefMapper;\nimport com.example.sens.service.PermissionService;\nimport com.example.sens.util.PermissionUtil;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.stereotype.Service;\nimport org.springframework.transaction.annotation.Transactional;\n\nimport java.util.List;\nimport java.util.Set;\nimport java.util.stream.Collectors;\n\n/**\n * 角色业务逻辑实现类\n */\n@Service\npublic class PermissionServiceImpl implements PermissionService {\n\n    @Autowired\n    private PermissionMapper permissionMapper;\n\n    @Autowired\n    private RolePermissionRefMapper rolePermissionRefMapper;\n\n\n    @Override\n    public List<Permission> listPermissionsByRoleId(Long roleId) {\n        return permissionMapper.findByRoleId(roleId);\n    }\n\n    @Override\n    public Set<String> findPermissionUrlsByUserId(Long userId) {\n        List<Permission> permissions = permissionMapper.findPermissionByUserId(userId);\n        Set<String> urls = permissions.stream().map(p -> p.getUrl()).collect(Collectors.toSet());\n        return urls;\n    }\n\n    @Override\n    public List<Permission> findPermissionTreeByUserIdAndResourceType(Long userId, String resourceType) {\n        List<Permission> permissions = permissionMapper.findPermissionByUserIdAndResourceType(userId, resourceType);\n        return PermissionUtil.getPermissionTree(permissions);\n    }\n\n    @Override\n    public List<Permission> findPermissionByRoleId(Long roleId) {\n        return permissionMapper.findPermissionByRoleId(roleId);\n    }\n\n\n    @Override\n    public BaseMapper<Permission> getRepository() {\n        return permissionMapper;\n    }\n\n    @Override\n    public QueryWrapper<Permission> getQueryWrapper(Permission permission) {\n        //对指定字段查询\n        QueryWrapper<Permission> queryWrapper = new QueryWrapper<>();\n        if (permission != null) {\n            if (StrUtil.isNotBlank(permission.getResourceType())) {\n                queryWrapper.eq(\"resource_type\", permission.getResourceType());\n            }\n            if (StrUtil.isNotBlank(permission.getResourceType())) {\n                queryWrapper.eq(\"resource_type\", permission.getResourceType());\n            }\n            if (StrUtil.isNotBlank(permission.getUrl())) {\n                queryWrapper.eq(\"url\", permission.getUrl());\n            }\n            if (StrUtil.isNotBlank(permission.getName())) {\n                queryWrapper.eq(\"name\", permission.getName());\n            }\n        }\n        return queryWrapper;\n    }\n\n    @Override\n    public Permission insertOrUpdate(Permission entity) {\n        if (entity.getId() == null) {\n            insert(entity);\n        } else {\n            update(entity);\n        }\n        return entity;\n    }\n\n    @Override\n    @Transactional(rollbackFor = Exception.class)\n    public void delete(Long id) {\n        permissionMapper.deleteById(id);\n        rolePermissionRefMapper.deleteByPermissionId(id);\n    }\n\n    @Override\n    public List<Permission> findPermissionListWithLevel() {\n        List<Permission> permissionList = permissionMapper.selectList(null);\n        permissionList = PermissionUtil.getPermissionList(permissionList);\n\n        // 加空格以展示等级\n        for (Permission permission : permissionList) {\n            for (int i = 1; i < permission.getLevel(); i++) {\n                permission.setName(\"&nbsp;&nbsp;&nbsp;&nbsp;\"+permission.getName());\n            }\n        }\n        return permissionList;\n\n    }\n\n    @Override\n    public Integer countChildPermission(Long id) {\n        return permissionMapper.countChildPermission(id);\n    }\n\n    @Override\n    public Permission findByUrl(String url) {\n        return permissionMapper.findByUrl(url);\n    }\n\n}\n"
  },
  {
    "path": "src/main/java/com/example/sens/service/impl/PostServiceImpl.java",
    "content": "package com.example.sens.service.impl;\n\nimport cn.hutool.core.util.StrUtil;\nimport com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;\nimport com.baomidou.mybatisplus.core.mapper.BaseMapper;\nimport com.baomidou.mybatisplus.extension.plugins.pagination.Page;\nimport com.example.sens.entity.*;\nimport com.example.sens.mapper.*;\nimport com.example.sens.service.*;\nimport lombok.extern.slf4j.Slf4j;\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/**\n * <pre>\n *     房屋业务逻辑实现类\n * </pre>\n */\n@Service\n@Slf4j\npublic class PostServiceImpl implements PostService {\n\n\n    @Autowired\n    private PostMapper postMapper;\n\n    @Override\n    public Page<Post> findPostByCondition(Post condition, Page<Post> page) {\n        List<Post> postList = postMapper.findPostByCondition(condition, page);\n        return page.setRecords(postList);\n    }\n\n    @Override\n    public Page<Post> findByRentUserId(Long userId, Page<Post> page) {\n        List<Post> postList = postMapper.findByRentUserId(userId, page);\n        return page.setRecords(postList);\n    }\n\n\n    @Override\n    public BaseMapper<Post> getRepository() {\n        return postMapper;\n    }\n\n    @Override\n    public Post insert(Post post) {\n        postMapper.insert(post);\n        return post;\n    }\n\n    @Override\n    public Post update(Post post) {\n        postMapper.updateById(post);\n        return post;\n    }\n\n    @Override\n    @Transactional(rollbackFor = Exception.class)\n    public void delete(Long postId) {\n        postMapper.deleteById(postId);\n    }\n\n    @Override\n    public QueryWrapper<Post> getQueryWrapper(Post post) {\n        //对指定字段查询\n        QueryWrapper<Post> queryWrapper = new QueryWrapper<>();\n        if (post != null) {\n            if (StrUtil.isNotBlank(post.getPostTitle())) {\n                queryWrapper.like(\"post_title\", post.getPostTitle());\n            }\n            if (StrUtil.isNotBlank(post.getPostContent())) {\n                queryWrapper.like(\"post_content\", post.getPostContent());\n            }\n            if (post.getPostStatus() != null && post.getPostStatus() != -1) {\n                queryWrapper.eq(\"post_status\", post.getPostStatus());\n            }\n        }\n        return queryWrapper;\n    }\n\n    @Override\n    public Post insertOrUpdate(Post post) {\n        if (post.getId() == null) {\n            insert(post);\n        } else {\n            update(post);\n        }\n        return post;\n    }\n\n\n    @Override\n    public List<Post> getLatestPost(Long cityId, int limit) {\n        return postMapper.getLatestPost(cityId, limit);\n    }\n\n    @Override\n    public Integer countByStatus(Integer postStatus) {\n        return postMapper.countByStatus(postStatus);\n    }\n\n    @Override\n    public List<Post> getUnionRentPost(Post post) {\n\n        Post temp = new Post();\n        temp.setNumber(post.getNumber());\n        temp.setUserId(post.getUserId());\n        temp.setPostTitle(post.getPostTitle());\n        temp.setCityId(post.getCityId());\n        if (temp.getNumber() != null && temp.getNumber().length() > 2) {\n            if (temp.getNumber().indexOf(\"室\") != -1) {\n                temp.setNumber(temp.getNumber().substring(0, temp.getNumber().indexOf(\"室\") + 1));\n            }\n        }\n        return postMapper.getUnionRentPost(temp);\n    }\n\n}\n\n"
  },
  {
    "path": "src/main/java/com/example/sens/service/impl/RechargeRecordServiceImpl.java",
    "content": "package com.example.sens.service.impl;\n\nimport com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;\nimport com.baomidou.mybatisplus.core.mapper.BaseMapper;\nimport com.baomidou.mybatisplus.extension.plugins.pagination.Page;\nimport com.example.sens.entity.RechargeRecord;\nimport com.example.sens.mapper.RechargeRecordMapper;\nimport com.example.sens.service.RechargeRecordService;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.stereotype.Service;\n\n/**\n * @author 言曌\n * @date 2020/3/22 3:19 下午\n */\n@Service\npublic class RechargeRecordServiceImpl implements RechargeRecordService {\n\n    @Autowired\n    private RechargeRecordMapper rechargeRecordMapper;\n\n    @Override\n    public BaseMapper<RechargeRecord> getRepository() {\n        return rechargeRecordMapper;\n    }\n\n    @Override\n    public QueryWrapper<RechargeRecord> getQueryWrapper(RechargeRecord rechargeRecord) {\n        //对指定字段查询\n        QueryWrapper<RechargeRecord> queryWrapper = new QueryWrapper<>();\n        if (rechargeRecord != null) {\n            if (rechargeRecord.getUserId() != null) {\n                queryWrapper.eq(\"user_id\", rechargeRecord.getUserId());\n            }\n        }\n        return queryWrapper;\n    }\n\n    @Override\n    public Page<RechargeRecord> findAll(String startDate, String endDate, Page<RechargeRecord> page) {\n        return page.setRecords(rechargeRecordMapper.findAll(startDate, endDate, page));\n    }\n\n    @Override\n    public Page<RechargeRecord> findByUserId(String startDate, String endDate, Long userId, Page<RechargeRecord> page) {\n        return page.setRecords(rechargeRecordMapper.findByUserId(startDate, endDate, userId, page));\n    }\n\n    @Override\n    public Integer getTotalMoneySum(String startDate, String endDate) {\n        return rechargeRecordMapper.getTotalMoneySum(startDate, endDate);\n    }\n}\n"
  },
  {
    "path": "src/main/java/com/example/sens/service/impl/RolePermissionRefServiceImpl.java",
    "content": "package com.example.sens.service.impl;\n\nimport com.example.sens.entity.RolePermissionRef;\nimport com.example.sens.mapper.RolePermissionRefMapper;\nimport com.example.sens.service.RolePermissionRefService;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.stereotype.Service;\n\nimport java.util.List;\n\n@Service\npublic class RolePermissionRefServiceImpl implements RolePermissionRefService {\n\n    @Autowired\n    private RolePermissionRefMapper rolePermissionRefMapper;\n\n    @Override\n    public void deleteRefByRoleId(Long roleId) {\n        rolePermissionRefMapper.deleteByRoleId(roleId);\n    }\n\n    @Override\n    public void saveByRolePermissionRef(RolePermissionRef rolePermissionRef) {\n        rolePermissionRefMapper.insert(rolePermissionRef);\n    }\n\n    @Override\n    public void batchSaveByRolePermissionRef(List<RolePermissionRef> rolePermissionRefs) {\n        rolePermissionRefMapper.batchInsert(rolePermissionRefs);\n    }\n"
  },
  {
    "path": "src/main/java/com/example/sens/service/impl/RoleServiceImpl.java",
    "content": "package com.example.sens.service.impl;\n\nimport cn.hutool.core.util.StrUtil;\nimport com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;\nimport com.baomidou.mybatisplus.core.mapper.BaseMapper;\nimport com.example.sens.entity.Permission;\nimport com.example.sens.entity.Role;\nimport com.example.sens.entity.RolePermissionRef;\nimport com.example.sens.mapper.RoleMapper;\nimport com.example.sens.service.RolePermissionRefService;\nimport com.example.sens.service.RoleService;\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 * 角色业务逻辑实现类\n */\n@Service\npublic class RoleServiceImpl implements RoleService {\n\n    @Autowired\n    private RoleMapper roleMapper;\n\n    @Autowired\n    private RolePermissionRefService rolePermissionRefService;\n\n    @Override\n    public BaseMapper<Role> getRepository() {\n        return roleMapper;\n    }\n\n    @Override\n    public QueryWrapper<Role> getQueryWrapper(Role role) {\n        //对指定字段查询\n        QueryWrapper<Role> queryWrapper = new QueryWrapper<>();\n        if (role != null) {\n            if (StrUtil.isNotBlank(role.getRole())) {\n                queryWrapper.eq(\"role\", role.getRole());\n            }\n            if (StrUtil.isNotBlank(role.getDescription())) {\n                queryWrapper.eq(\"description\", role.getDescription());\n            }\n        }\n        return queryWrapper;\n    }\n\n    @Override\n    public void deleteByUserId(Long userId) {\n        roleMapper.deleteByUserId(userId);\n    }\n\n    @Override\n    public Role findByRoleId(Long roleId) {\n        return roleMapper.selectById(roleId);\n    }\n\n    @Override\n    public Role findByRoleName(String roleName) {\n        QueryWrapper queryWrapper = new QueryWrapper();\n        queryWrapper.eq(\"role\", roleName);\n        return roleMapper.selectOne(queryWrapper);\n    }\n\n    @Override\n    public Role findByUserId(Long userId) {\n        return roleMapper.findByUserId(userId);\n    }\n\n    @Override\n    public Integer countUserByRoleId(Long roleId) {\n        return roleMapper.countUserByRoleId(roleId);\n    }\n\n    @Override\n    public Integer findMaxLevelByUserId(Long userId) {\n        return roleMapper.findMaxLevelByUserId(userId);\n    }\n\n    @Override\n    public List<Role> findByLessThanLevel(Integer level) {\n        return roleMapper.findByLessThanLevel(level);\n    }\n\n    @Override\n    public Role findDefaultRole() {\n        return roleMapper.findDefaultRole();\n    }\n\n    @Override\n    public Role getMaxRoleByUserId(Long userId) {\n        return null;\n    }\n\n    @Override\n    @Transactional(rollbackFor = Exception.class)\n    public Role insert(Role role) {\n        roleMapper.insert(role);\n        if (role.getPermissions() != null && role.getPermissions().size() > 0) {\n            List<RolePermissionRef> rolePermissionRefs = new ArrayList<>(role.getPermissions().size());\n            for (Permission permission : role.getPermissions()) {\n                rolePermissionRefs.add(new RolePermissionRef(role.getId(), permission.getId()));\n            }\n            rolePermissionRefService.batchSaveByRolePermissionRef(rolePermissionRefs);\n        }\n        return role;\n    }\n\n    @Override\n    @Transactional(rollbackFor = Exception.class)\n    public Role update(Role role) {\n        roleMapper.updateById(role);\n        if (role.getPermissions() != null && role.getPermissions().size() > 0) {\n            // 删除关联\n            rolePermissionRefService.deleteRefByRoleId(role.getId());\n            // 添加关联\n            List<RolePermissionRef> rolePermissionRefs = new ArrayList<>(role.getPermissions().size());\n            for (Permission permission : role.getPermissions()) {\n                rolePermissionRefs.add(new RolePermissionRef(role.getId(), permission.getId()));\n            }\n            rolePermissionRefService.batchSaveByRolePermissionRef(rolePermissionRefs);\n        }\n        return role;\n    }\n\n    @Override\n    public Role insertOrUpdate(Role entity) {\n        if (entity.getId() == null) {\n            insert(entity);\n        } else {\n            update(entity);\n        }\n        return entity;\n    }\n\n}\n"
  },
  {
    "path": "src/main/java/com/example/sens/service/impl/UserRoleRefServiceImpl.java",
    "content": "package com.example.sens.service.impl;\n\nimport com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;\nimport com.baomidou.mybatisplus.core.mapper.BaseMapper;\nimport com.example.sens.entity.UserRoleRef;\nimport com.example.sens.mapper.UserRoleRefMapper;\nimport com.example.sens.service.UserRoleRefService;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.stereotype.Service;\n\n\n@Service\npublic class UserRoleRefServiceImpl implements UserRoleRefService {\n\n    @Autowired\n    private UserRoleRefMapper roleRefMapper;\n\n\n    @Override\n    public void deleteByUserId(Long userId) {\n        roleRefMapper.deleteByUserId(userId);\n    }\n\n    @Override\n    public BaseMapper<UserRoleRef> getRepository() {\n        return roleRefMapper;\n    }\n\n    @Override\n    public QueryWrapper<UserRoleRef> getQueryWrapper(UserRoleRef userRoleRef) {\n        //对指定字段查询\n        QueryWrapper<UserRoleRef> queryWrapper = new QueryWrapper<>();\n        if (userRoleRef != null) {\n            if (userRoleRef.getUserId() != null) {\n                queryWrapper.eq(\"user_id\", userRoleRef.getUserId());\n            }\n            if (userRoleRef.getRoleId() != null) {\n                queryWrapper.eq(\"role_id\", userRoleRef.getRoleId());\n            }\n        }\n        return queryWrapper;\n    }\n\n}\n"
  },
  {
    "path": "src/main/java/com/example/sens/service/impl/UserServiceImpl.java",
    "content": "package com.example.sens.service.impl;\n\nimport cn.hutool.core.util.StrUtil;\nimport com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;\nimport com.baomidou.mybatisplus.core.mapper.BaseMapper;\nimport com.baomidou.mybatisplus.extension.plugins.pagination.Page;\nimport com.example.sens.exception.MyBusinessException;\nimport com.example.sens.common.constant.CommonConstant;\nimport com.example.sens.entity.Role;\nimport com.example.sens.mapper.OrderMapper;\nimport com.example.sens.mapper.RechargeRecordMapper;\nimport com.example.sens.mapper.UserMapper;\nimport com.example.sens.entity.User;\nimport com.example.sens.service.RoleService;\nimport com.example.sens.service.UserService;\nimport com.example.sens.util.Md5Util;\nimport com.example.sens.util.RegexUtil;\nimport org.apache.commons.lang3.RandomUtils;\nimport org.apache.commons.lang3.StringUtils;\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 * 用户业务逻辑实现类\n */\n@Service\npublic class UserServiceImpl implements UserService {\n\n    @Autowired\n    private UserMapper userMapper;\n\n    @Autowired\n    private RoleService roleService;\n\n    @Autowired\n    private OrderMapper orderMapper;\n\n    @Autowired\n    private RechargeRecordMapper rechargeRecordMapper;\n\n    @Override\n    public User findByUserName(String userName) {\n        QueryWrapper queryWrapper = new QueryWrapper();\n        queryWrapper.eq(\"user_name\", userName);\n        return userMapper.selectOne(queryWrapper);\n    }\n\n    @Override\n    public User findByIdCard(String idCard) {\n        QueryWrapper queryWrapper = new QueryWrapper();\n        queryWrapper.eq(\"id_card\", idCard);\n        return userMapper.selectOne(queryWrapper);\n    }\n\n    @Override\n    public void updatePassword(Long userId, String password) {\n        User user = new User();\n        user.setId(userId);\n        user.setUserPass(Md5Util.toMd5(password, CommonConstant.PASSWORD_SALT, 10));\n        userMapper.updateById(user);\n    }\n\n    @Override\n    public Page<User> findByRoleAndCondition(String roleName, User condition, Page<User> page) {\n        List<User> users = new ArrayList<>();\n        if (Objects.equals(roleName, CommonConstant.NONE)) {\n            users = userMapper.findByCondition(condition, page);\n        } else {\n            Role role = roleService.findByRoleName(roleName);\n            if (role != null) {\n                users = userMapper.findByRoleIdAndCondition(role.getId(), condition, page);\n            }\n        }\n        return page.setRecords(users);\n    }\n\n    @Override\n    public BaseMapper<User> getRepository() {\n        return userMapper;\n    }\n\n    @Override\n    public QueryWrapper<User> getQueryWrapper(User user) {\n        //对指定字段查询\n        QueryWrapper<User> queryWrapper = new QueryWrapper<>();\n        if (user != null) {\n            if (StrUtil.isNotBlank(user.getUserName())) {\n                queryWrapper.eq(\"user_name\", user.getUserName());\n            }\n            if (StrUtil.isNotBlank(user.getIdCard())) {\n                queryWrapper.eq(\"id_card\", user.getIdCard());\n            }\n        }\n        return queryWrapper;\n    }\n\n    @Override\n    public User insert(User user) {\n        // 1.检查长度\n        basicCheck(user);\n        // 2.验证账号和身份证号码是否存在\n        checkUserNameAndIdCard(user);\n        // 3.添加\n        userMapper.insert(user);\n        return user;\n    }\n\n    @Override\n    public User update(User user) {\n        // 1.检查长度\n        basicCheck(user);\n        // 2.验证账号和身份证号码是否存在\n        checkUserNameAndIdCard(user);\n        // 3.更新\n        userMapper.updateById(user);\n        return user;\n    }\n\n    private void checkUserNameAndIdCard(User user) {\n        //验证账号和身份证号码是否存在\n        if (user.getUserName() != null) {\n            User nameCheck = findByUserName(user.getUserName());\n            Boolean isExist = (user.getId() == null && nameCheck != null) ||\n                    (user.getId() != null && nameCheck != null && !Objects.equals(nameCheck.getId(), user.getId()));\n            if (isExist) {\n                throw new MyBusinessException(\"账号已经存在\");\n            }\n        }\n        if (user.getIdCard() != null) {\n            User idCardCheck = findByIdCard(user.getIdCard());\n            Boolean isExist = (user.getId() == null && idCardCheck != null) ||\n                    (user.getId() != null && idCardCheck != null && !Objects.equals(idCardCheck.getId(), user.getId()));\n            if (isExist) {\n                throw new MyBusinessException(\"身份证号码已经存在\");\n            }\n        }\n    }\n\n    @Override\n    @Transactional(rollbackFor = Exception.class)\n    public void delete(Long userId) {\n        //删除用户\n        User user = get(userId);\n        if (user != null) {\n            // 1.修改用户状态为已删除\n            userMapper.deleteById(userId);\n            // 2.修改用户和角色关联\n            roleService.deleteByUserId(userId);\n            // 3.删除订单\n            Map<String, Object> map = new HashMap<>();\n            map.put(\"user_id\", userId);\n            orderMapper.deleteByMap(map);\n\n            Map<String, Object> map2 = new HashMap<>();\n            map.put(\"owner_user_id\", userId);\n            orderMapper.deleteByMap(map2);\n\n            // 4.删除充值记录\n            rechargeRecordMapper.deleteByUserId(userId);\n        }\n    }\n\n    @Override\n    public User insertOrUpdate(User user) {\n        if (user.getId() == null) {\n            user.setUserAvatar(\"/static/images/avatar/\" + RandomUtils.nextInt(1, 41) + \".jpeg\");\n            insert(user);\n        } else {\n            update(user);\n        }\n        return user;\n    }\n\n    private void basicCheck(User user) {\n        String userName = user.getUserName();\n        String idCard = user.getIdCard();\n        String userDisplayName = user.getUserDisplayName();\n        // 1.身份证号码是否合法\n        if (StringUtils.isNotEmpty(idCard) && !RegexUtil.isIdCard(idCard)) {\n            throw new MyBusinessException(\"身份证号码不合法，请输入15或18位\");\n        }\n        // 2.账号码长度是否合法\n        if (StringUtils.isNotEmpty(userName) && userName.length() > 20 || userName.length() < 2) {\n            throw new MyBusinessException(\"账号不合法，请输入2-20位\");\n        }\n        // 3.姓名长度是否合法\n        if (StringUtils.isNotEmpty(userDisplayName) && userDisplayName.length() > 20 || userDisplayName.length() < 2) {\n            throw new MyBusinessException(\"姓名长度不合法，请输入2-20位\");\n        }\n    }\n\n    @Override\n    public User get(Long id) {\n        User user = userMapper.selectById(id);\n        return user;\n    }\n}\n"
  },
  {
    "path": "src/main/java/com/example/sens/util/DateUtil.java",
    "content": "package com.example.sens.util;\n\nimport java.text.ParseException;\nimport java.text.SimpleDateFormat;\nimport java.util.*;\n\n/**\n * @author 言曌\n * @date 2020/4/5 4:36 下午\n */\n\npublic class DateUtil {\n\n    public static final String FORMAT = \"yyyy-MM-dd\";\n    public static final ThreadLocal<SimpleDateFormat> THREAD_LOCAL = new ThreadLocal<>();\n\n\n    public static List<String> getBetweenDates(String start, int count) {\n        Date startDate = null;\n        SimpleDateFormat sdf = THREAD_LOCAL.get();\n        if (sdf == null) {\n            sdf = new SimpleDateFormat(FORMAT);\n        }\n        try {\n            startDate = sdf.parse(start);\n        } catch (ParseException e) {\n            e.printStackTrace();\n            return Collections.emptyList();\n        }\n        Calendar c = Calendar.getInstance();\n        c.setTime(startDate);\n        c.add(Calendar.DAY_OF_MONTH, count);\n        Date endDate = c.getTime();\n        String end = sdf.format(endDate);\n        return getBetweenDates(start, end);\n    }\n\n    public static List<String> getBetweenDates(String start, String end) {\n\n        List<String> result = new ArrayList<>();\n        try {\n            SimpleDateFormat sdf = THREAD_LOCAL.get();\n            if (sdf == null) {\n                sdf = new SimpleDateFormat(FORMAT);\n            }\n            Date start_date = sdf.parse(start);\n            Date end_date = sdf.parse(end);\n            Calendar tempStart = Calendar.getInstance();\n            tempStart.setTime(start_date);\n            Calendar tempEnd = Calendar.getInstance();\n            tempEnd.setTime(end_date);\n            while (tempStart.before(tempEnd)) {\n                result.add(sdf.format(tempStart.getTime()));\n                tempStart.add(Calendar.DAY_OF_YEAR, 1);\n            }\n        } catch (ParseException e) {\n            e.printStackTrace();\n        }\n        return result;\n    }\n\n    public static void main(String[] args) {\n        System.out.println(getBetweenDates(\"2020-04-05\", 1));\n    }\n\n"
  },
  {
    "path": "src/main/java/com/example/sens/util/FileUtil.java",
    "content": "package com.example.sens.util;\n\nimport cn.hutool.core.date.DateUtil;\nimport cn.hutool.core.text.StrBuilder;\nimport com.alibaba.fastjson.JSONException;\nimport com.example.sens.exception.MyBusinessException;\nimport org.springframework.web.multipart.MultipartFile;\n\nimport java.io.*;\nimport java.net.URL;\nimport java.nio.charset.Charset;\n\n/**\n * @author 言曌\n * @date 2020/3/8 5:45 下午\n */\npublic class FileUtil {\n\n    /**\n     * 上传文件返回URL\n     *\n     * @param file\n     * @return\n     */\n    public static String upload(MultipartFile file) {\n        String path = \"\";\n        try {\n            //用户目录\n            final StrBuilder uploadPath = new StrBuilder(System.getProperties().getProperty(\"user.home\"));\n            uploadPath.append(\"/sens/upload/\" + DateUtil.thisYear()).append(\"/\").append(DateUtil.thisMonth() + 1).append(\"/\");\n            final File mediaPath = new File(uploadPath.toString());\n            if (!mediaPath.exists()) {\n                if (!mediaPath.mkdirs()) {\n                    throw new MyBusinessException(\"上传失败\");\n                }\n            }\n\n            //不带后缀\n            String nameWithOutSuffix = file.getOriginalFilename().substring(0, file.getOriginalFilename().lastIndexOf('.')).replaceAll(\" \", \"_\").replaceAll(\",\", \"\");\n\n            //文件后缀\n            final String fileSuffix = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf('.') + 1);\n\n            //带后缀\n            String fileName = nameWithOutSuffix + \".\" + fileSuffix;\n\n            //判断文件名是否已存在\n            File descFile = new File(mediaPath.getAbsoluteFile(), fileName);\n            int i = 1;\n            while (descFile.exists()) {\n                String newNameWithOutSuffix = nameWithOutSuffix + \"(\" + i + \")\";\n                descFile = new File(mediaPath.getAbsoluteFile(), newNameWithOutSuffix + \".\" + fileSuffix);\n                i++;\n            }\n            file.transferTo(descFile);\n\n            //文件原路径\n            final StrBuilder fullPath = new StrBuilder(mediaPath.getAbsolutePath());\n            fullPath.append(\"/\");\n            fullPath.append(nameWithOutSuffix + \".\" + fileSuffix);\n\n            //压缩文件路径\n            final StrBuilder fullSmallPath = new StrBuilder(mediaPath.getAbsolutePath());\n            fullSmallPath.append(\"/\");\n            fullSmallPath.append(nameWithOutSuffix);\n            fullSmallPath.append(\"_small.\");\n            fullSmallPath.append(fileSuffix);\n\n            //映射路径\n            final StrBuilder filePath = new StrBuilder(\"/upload/\");\n            filePath.append(DateUtil.thisYear());\n            filePath.append(\"/\");\n            filePath.append(DateUtil.thisMonth() + 1);\n            filePath.append(\"/\");\n            filePath.append(nameWithOutSuffix + \".\" + fileSuffix);\n            path = filePath.toString();\n\n        } catch (IOException e) {\n            e.printStackTrace();\n        }\n        return path;\n    }\n\n    public static String readStringFromUrl(String url) throws IOException, JSONException {\n        InputStream is = new URL(url).openStream();\n        try {\n            BufferedReader rd = new BufferedReader(new InputStreamReader(is, Charset.forName(\"UTF-8\")));\n            String jsonText = readAll(rd);\n            return jsonText;\n        } finally {\n            is.close();\n        }\n    }\n\n\n    private static String readAll(Reader rd) throws IOException {\n        StringBuilder sb = new StringBuilder();\n        int cp;\n        while ((cp = rd.read()) != -1) {\n            sb.append((char) cp);\n        }\n        return sb.toString();\n    }\n}\n"
  },
  {
    "path": "src/main/java/com/example/sens/util/IpInfoUtil.java",
    "content": "package com.example.sens.util;\n\n\nimport lombok.extern.slf4j.Slf4j;\n\nimport javax.servlet.http.HttpServletRequest;\nimport java.net.InetAddress;\nimport java.net.UnknownHostException;\n\n\n/**\n * @author example\n */\n@Slf4j\npublic class IpInfoUtil {\n    \n    /**\n     * 获取客户端IP地址\n     * @param request 请求\n     * @return\n     */\n    public static String  getIpAddr(HttpServletRequest request) {\n\n        String ip = request.getHeader(\"x-forwarded-for\");\n        if (ip == null || ip.length() == 0 || \"unknown\".equalsIgnoreCase(ip)) {\n            ip = request.getHeader(\"Proxy-Client-IP\");\n        }\n        if (ip == null || ip.length() == 0 || \"unknown\".equalsIgnoreCase(ip)) {\n            ip = request.getHeader(\"WL-Proxy-Client-IP\");\n        }\n        if (ip == null || ip.length() == 0 || \"unknown\".equalsIgnoreCase(ip)) {\n            ip = request.getRemoteAddr();\n            if (\"127.0.0.1\".equals(ip)) {\n                //根据网卡取本机配置的IP\n                InetAddress inet = null;\n                try {\n                    inet = InetAddress.getLocalHost();\n                } catch (UnknownHostException e) {\n                    e.printStackTrace();\n                }\n                ip = inet.getHostAddress();\n            }\n        }\n        // 对于通过多个代理的情况，第一个IP为客户端真实IP,多个IP按照','分割\n        if (ip != null && ip.length() > 15) {\n            if (ip.indexOf(\",\") > 0) {\n                ip = ip.substring(0, ip.indexOf(\",\"));\n            }\n        }\n        if(\"0:0:0:0:0:0:0:1\".equals(ip)){\n            ip = \"127.0.0.1\";\n        }\n        return ip;\n    }\n    \n\n}\n"
  },
  {
    "path": "src/main/java/com/example/sens/util/Md5Util.java",
    "content": "package com.example.sens.util;\n\nimport cn.hutool.core.text.StrBuilder;\nimport org.apache.shiro.crypto.hash.Md5Hash;\nimport org.springframework.web.multipart.MultipartFile;\n\nimport java.io.InputStream;\nimport java.security.MessageDigest;\n\n/**\n * 获取文件hash\n */\npublic class Md5Util {\n\n\n    /**\n     * shiro的md5加密\n     *\n     * @param pwd  密码\n     * @param salt 盐\n     * @param i    加密次数\n     * @return 加密后字符串\n     */\n    public static String toMd5(String pwd, String salt, int i) {\n        Md5Hash toMd5 = new Md5Hash(pwd, salt, i);\n        return toMd5.toString();\n    }\n\n    /**\n     * 计算文件MD5编码\n     *\n     * @param file file\n     * @return byte\n     * @throws Exception Exception\n     */\n    private static byte[] createChecksum(MultipartFile file) throws Exception {\n        final InputStream fis = file.getInputStream();\n\n        final byte[] buffer = new byte[1024];\n        final MessageDigest complete = MessageDigest.getInstance(\"MD5\");\n        int numRead;\n\n        do {\n            numRead = fis.read(buffer);\n            if (numRead > 0) {\n                complete.update(buffer, 0, numRead);\n            }\n        } while (numRead != -1);\n\n        fis.close();\n        return complete.digest();\n    }\n\n    /**\n     * 生成文件hash值\n     *\n     * @param file file\n     * @return String\n     * @throws Exception Exception\n     */\n    public static String getMD5Checksum(MultipartFile file) throws Exception {\n        final byte[] b = createChecksum(file);\n        StrBuilder result = new StrBuilder();\n\n        for (int i = 0; i < b.length; i++) {\n            result.append(Integer.toString((b[i] & 0xff) + 0x100, 16).substring(1));\n        }\n        return result.toString();\n    }\n\n    public static void main(String args[]) {\n\n    }\n}\n"
  },
  {
    "path": "src/main/java/com/example/sens/util/ObjectUtil.java",
    "content": "package com.example.sens.util;\n\nimport cn.hutool.core.util.StrUtil;\nimport com.google.common.collect.Maps;\nimport com.google.gson.Gson;\nimport org.springframework.cglib.beans.BeanMap;\n\nimport java.util.HashMap;\nimport java.util.Map;\n\n/**\n * @author example\n */\npublic class ObjectUtil {\n\n    public static String mapToString(Map<String, String[]> paramMap){\n\n        if (paramMap == null) {\n            return \"\";\n        }\n        Map<String, Object> params = new HashMap<>(16);\n        for (Map.Entry<String, String[]> param : paramMap.entrySet()) {\n\n            String key = param.getKey();\n            String paramValue = (param.getValue() != null && param.getValue().length > 0 ? param.getValue()[0] : \"\");\n            String obj = StrUtil.endWithIgnoreCase(param.getKey(), \"password\") ? \"密码隐藏\" : paramValue;\n            params.put(key,obj);\n        }\n        return new Gson().toJson(params);\n    }\n\n    public static String mapToStringAll(Map<String, String[]> paramMap){\n\n        if (paramMap == null) {\n            return \"\";\n        }\n        Map<String, Object> params = new HashMap<>(16);\n        for (Map.Entry<String, String[]> param : paramMap.entrySet()) {\n\n            String key = param.getKey();\n            String paramValue = (param.getValue() != null && param.getValue().length > 0 ? param.getValue()[0] : \"\");\n            params.put(key, paramValue);\n        }\n        return new Gson().toJson(params);\n    }\n\n    public static <T> Map<String, Object> beanToMap(T bean) {\n        Map<String, Object> map = Maps.newHashMap();\n        if (bean != null) {\n            BeanMap beanMap = BeanMap.create(bean);\n            for (Object key : beanMap.keySet()) {\n                map.put(key+\"\", beanMap.get(key));\n            }\n        }\n        return map;\n    }\n}\n"
  },
  {
    "path": "src/main/java/com/example/sens/util/PageUtil.java",
    "content": "package com.example.sens.util;\n\nimport cn.hutool.core.util.StrUtil;\nimport com.baomidou.mybatisplus.core.metadata.OrderItem;\nimport com.baomidou.mybatisplus.extension.plugins.pagination.Page;\nimport com.example.sens.vo.PageVo;\n\nimport java.util.ArrayList;\nimport java.util.List;\n\n\n/**\n * @author example\n */\npublic class PageUtil {\n\n    /**\n     * 最大分页大小\n     */\n    public static final int MAX_PAGE_SIZE = 100;\n\n    /**\n     * mybatis分页封装\n     *\n     * @param pageNumber 页码\n     * @param pageSize   页大小\n     * @param sort       排序字段\n     * @param order      倒序/升序\n     * @return\n     */\n    public static Page initMpPage(long pageNumber, long pageSize, String sort, String order) {\n\n        Page p = null;\n        if (StrUtil.isNotBlank(sort)) {\n            //驼峰法转下划线, createTime -> create_time\n            sort = camelToUnderline(sort);\n        }\n\n        if (pageNumber < 1) {\n            pageNumber = 1;\n        }\n        if (pageSize < 1) {\n            pageSize = 10;\n        }\n        if (pageSize > MAX_PAGE_SIZE) {\n            pageSize = MAX_PAGE_SIZE;\n        }\n        if (StrUtil.isNotBlank(sort)) {\n            Boolean isAsc = false;\n            if (StrUtil.isBlank(order)) {\n                isAsc = false;\n            } else {\n                if (\"desc\".equals(order.toLowerCase())) {\n                    isAsc = false;\n                } else if (\"asc\".equals(order.toLowerCase())) {\n                    isAsc = true;\n                }\n            }\n            p = new Page(pageNumber, pageSize);\n            if (isAsc) {\n                p.setAsc(sort);\n            } else {\n                p.setDesc(sort);\n            }\n        } else {\n            p = new Page(pageNumber, pageSize);\n        }\n        return p;\n    }\n\n    /**\n     * List 手动分页\n     *\n     * @param page\n     * @param list\n     * @return\n     */\n    public static List listToPage(PageVo page, List list) {\n\n        long pageNumber = page.getPage() - 1;\n        long pageSize = page.getSize();\n\n        if (pageNumber < 0) {\n            pageNumber = 0;\n        }\n        if (pageSize < 1) {\n            pageSize = 10;\n        }\n\n        long fromIndex = pageNumber * pageSize;\n        long toIndex = pageNumber * pageSize + pageSize;\n\n        if (fromIndex > list.size()) {\n            return new ArrayList();\n        } else if (toIndex >= list.size()) {\n            return list.subList((int) fromIndex, list.size());\n        } else {\n            return list.subList((int) fromIndex, (int) toIndex);\n        }\n    }\n\n    /**\n     * 驼峰转下划线\n     *\n     * @param str\n     * @return\n     */\n    private static String camelToUnderline(String str) {\n        if (str == null || str.trim().isEmpty()) {\n            return \"\";\n        }\n        int len = str.length();\n        StringBuilder sb = new StringBuilder(len);\n        sb.append(str.substring(0, 1).toLowerCase());\n        for (int i = 1; i < len; i++) {\n            char c = str.charAt(i);\n            if (Character.isUpperCase(c)) {\n                sb.append(\"_\");\n                sb.append(Character.toLowerCase(c));\n            } else {\n                sb.append(c);\n            }\n        }\n        return sb.toString();\n    }\n\n    /**\n     * 设计缺陷，前端无法获取mybatis-plus的分页page中的pages，所以自己封装一个PageVO\n     * 同时将分页信息塞到PageVo中\n     *\n     * @param page mybatis-plus分页类\n     * @return\n     */\n    public static PageVo convertPageVo(Page page) {\n        PageVo pageVo = new PageVo();\n        pageVo.setSize(page.getSize());\n        pageVo.setTotal(page.getTotal());\n        pageVo.setCurrent(page.getCurrent());\n        pageVo.setPages(page.getPages());\n        List<OrderItem> orderItems = page.getOrders();\n        if (orderItems != null && orderItems.size() > 0) {\n            pageVo.setSort(orderItems.get(0).getColumn());\n            pageVo.setOrder(orderItems.get(0).isAsc() ? \"asc\" : \"desc\");\n        }\n        return pageVo;\n    }\n\n}\n"
  },
  {
    "path": "src/main/java/com/example/sens/util/PermissionUtil.java",
    "content": "package com.example.sens.util;\n\nimport com.example.sens.entity.Permission;\n\nimport java.util.ArrayList;\nimport java.util.Collections;\nimport java.util.List;\n\n/**\n * 拼装菜单\n */\npublic class PermissionUtil {\n\n    /**\n     * 获取组装好的菜单\n     * 以树的形式显示\n     *\n     * @param permissionsRoot permissionsRoot\n     * @return List\n     */\n    public static List<Permission> getPermissionTree(List<Permission> permissionsRoot) {\n        List<Permission> permissionsResult = new ArrayList<>();\n\n        for (Permission permission : permissionsRoot) {\n            if (permission.getPid() == 0) {\n                permissionsResult.add(permission);\n            }\n        }\n\n        for (Permission permission : permissionsResult) {\n            permission.setChildPermissions(getChildTree(permission.getId(), permissionsRoot));\n        }\n        return permissionsResult;\n    }\n\n    /**\n     * 获取菜单的子菜单\n     *\n     * @param id              菜单编号\n     * @param permissionsRoot permissionsRoot\n     * @return List\n     */\n    private static List<Permission> getChildTree(Long id, List<Permission> permissionsRoot) {\n        List<Permission> permissionsChild = new ArrayList<>();\n        for (Permission permission : permissionsRoot) {\n            if (permission.getPid() != 0) {\n                if (permission.getPid().equals(id)) {\n                    permissionsChild.add(permission);\n                }\n            }\n        }\n        for (Permission permission : permissionsChild) {\n            if (permission.getPid() != 0) {\n                permission.setChildPermissions(getChildTree(permission.getId(), permissionsRoot));\n            }\n        }\n        if (permissionsChild.size() == 0) {\n            return null;\n        }\n        return permissionsChild;\n    }\n\n    /**\n     * 获取组装好的菜单,\n     *\n     * @param permissionsRoot permissionsRoot\n     * @return List\n     */\n    public static List<Permission> getPermissionList(List<Permission> permissionsRoot) {\n        List<Permission> permissionsResult = new ArrayList<>();\n\n        for (Permission permission : permissionsRoot) {\n            if (permission.getPid() == 0) {\n                permission.setLevel(1);\n                permissionsResult.add(permission);\n                permissionsResult.addAll(getChildList(permission, permissionsRoot));\n            }\n        }\n        return permissionsResult;\n    }\n\n    /**\n     * 获取菜单的子菜单\n     *\n     * @param parentPermission 菜单编号\n     * @param permissionsRoot  permissionsRoot\n     * @return List\n     */\n    private static List<Permission> getChildList(Permission parentPermission, List<Permission> permissionsRoot) {\n        List<Permission> permissionsChild = new ArrayList<>();\n        for (Permission permission : permissionsRoot) {\n            if (permission.getPid() != 0) {\n                if (permission.getPid().equals(parentPermission.getId())) {\n                    permission.setLevel(parentPermission.getLevel() + 1);\n                    permissionsChild.add(permission);\n                    List<Permission> tempList = getChildList(permission, permissionsRoot);\n                    tempList.sort((a, b) -> (int) (b.getSort() - a.getSort()));\n                    permissionsChild.addAll(tempList);\n                }\n            }\n        }\n        if (permissionsChild.size() == 0) {\n            return Collections.emptyList();\n        }\n        return permissionsChild;\n    }\n\n}\n"
  },
  {
    "path": "src/main/java/com/example/sens/util/RegexUtil.java",
    "content": "package com.example.sens.util;\n\nimport java.util.ArrayList;\nimport java.util.List;\nimport java.util.regex.Matcher;\nimport java.util.regex.Pattern;\n\n/**\n * @author 言曌\n * @date 2020/3/8 1:55 下午\n */\n\npublic class RegexUtil {\n\n    /**\n     * 判断Email合法性\n     *\n     * @param email\n     * @return\n     */\n    public static boolean isEmail(String email) {\n        if (email == null) {\n            return false;\n        }\n        String rule = \"[\\\\w!#$%&'*+/=?^_`{|}~-]+(?:\\\\.[\\\\w!#$%&'*+/=?^_`{|}~-]+)*@(?:[\\\\w](?:[\\\\w-]*[\\\\w])?\\\\.)+[\\\\w](?:[\\\\w-]*[\\\\w])?\";\n        Pattern pattern = Pattern.compile(rule);\n        Matcher matcher = pattern.matcher(email);\n        return matcher.matches();\n    }\n\n    /**\n     * 是否为合法身份证号码\n     * @param idCard\n     * @return\n     */\n    public static boolean isIdCard(String idCard) {\n        if(idCard == null) {\n            return false;\n        }\n        return idCard.length() == 15 || idCard.length() == 18;\n    }\n\n    public static List<String> getImgSrc(String htmlStr) {\n        String img = \"\";\n        Pattern imgPattern;\n        Matcher imgMatcher;\n        List<String> pics = new ArrayList<>();\n        String imgReg = \"<img.*src\\\\s*=\\\\s*(.*?)[^>]*?>\";\n        imgPattern = Pattern.compile(imgReg, Pattern.CASE_INSENSITIVE);\n        imgMatcher = imgPattern.matcher(htmlStr);\n        while (imgMatcher.find()) {\n            img = img + \",\" + imgMatcher.group();\n            Matcher m = Pattern.compile(\"src\\\\s*=\\\\s*\\\"?(.*?)(\\\"|>|\\\\s+)\").matcher(img);\n            while (m.find()) {\n                pics.add(m.group(1));\n            }\n        }\n        return pics;\n    }\n\n\n}\n"
  },
  {
    "path": "src/main/java/com/example/sens/util/RelativeDateFormat.java",
    "content": "package com.example.sens.util;\n\n\nimport java.util.Date;\n\n/**\n * @author 言曌\n * @date 2020/3/10 9:48 下午\n */\n\npublic class RelativeDateFormat {\n\n    private static final long ONE_MINUTE = 60000L;\n    private static final long ONE_HOUR = 3600000L;\n    private static final long ONE_DAY = 86400000L;\n    private static final long ONE_WEEK = 604800000L;\n\n    private static final String ONE_SECOND_AGO = \"秒前\";\n    private static final String ONE_MINUTE_AGO = \"分钟前\";\n    private static final String ONE_HOUR_AGO = \"小时前\";\n    private static final String ONE_DAY_AGO = \"天前\";\n    private static final String ONE_MONTH_AGO = \"月前\";\n    private static final String ONE_YEAR_AGO = \"年前\";\n\n    public static String format(Date date) {\n        long delta = System.currentTimeMillis() - date.getTime();\n        if (delta < 1L * ONE_MINUTE) {\n            long seconds = toSeconds(delta);\n            return (seconds <= 0 ? 1 : seconds) + ONE_SECOND_AGO;\n        }\n        if (delta < 45L * ONE_MINUTE) {\n            long minutes = toMinutes(delta);\n            return (minutes <= 0 ? 1 : minutes) + ONE_MINUTE_AGO;\n        }\n        if (delta < 24L * ONE_HOUR) {\n            long hours = toHours(delta);\n            return (hours <= 0 ? 1 : hours) + ONE_HOUR_AGO;\n        }\n        if (delta < 48L * ONE_HOUR) {\n            return \"昨天\";\n        }\n        if (delta < 30L * ONE_DAY) {\n            long days = toDays(delta);\n            return (days <= 0 ? 1 : days) + ONE_DAY_AGO;\n        }\n        if (delta < 12L * 4L * ONE_WEEK) {\n            long months = toMonths(delta);\n            return (months <= 0 ? 1 : months) + ONE_MONTH_AGO;\n        } else {\n            long years = toYears(delta);\n            return (years <= 0 ? 1 : years) + ONE_YEAR_AGO;\n        }\n    }\n\n    private static long toSeconds(long date) {\n        return date / 1000L;\n    }\n\n    private static long toMinutes(long date) {\n        return toSeconds(date) / 60L;\n    }\n\n    private static long toHours(long date) {\n        return toMinutes(date) / 60L;\n    }\n\n    private static long toDays(long date) {\n        return toHours(date) / 24L;\n    }\n\n    private static long toMonths(long date) {\n        return toDays(date) / 30L;\n    }\n\n    private static long toYears(long date) {\n        return toMonths(date) / 365L;\n    }\n}\n"
  },
  {
    "path": "src/main/java/com/example/sens/util/Response.java",
    "content": "package com.example.sens.util;\n\npublic class Response<T> {\n\n    private Boolean success;\n\n    private String message;\n\n    private T data;\n\n    /**\n     * 状态码\n     */\n    private Integer status = 200;\n\n    public Response() {\n    }\n\n    public Response(Boolean success) {\n        this.success = success;\n    }\n\n    public Response(Boolean success, String message) {\n        this.success = success;\n        this.message = message;\n    }\n\n    public Response(Boolean success, String message, T data) {\n        this.success = success;\n        this.message = message;\n        this.data = data;\n    }\n\n    public Response(Boolean success, Integer status, String message, T data) {\n        this.success = success;\n        this.message = message;\n        this.data = data;\n        this.status = status;\n    }\n\n\n    public static <T> Response<T> yes() {\n        return new Response(true, 200, \"成功\", null);\n    }\n\n    public static <T> Response<T> yes(T data) {\n        return new Response(true, 200, \"成功\", data);\n    }\n\n    public static <T> Response<T> yes(String message, T data) {\n        return new Response(true, 200, message, data);\n    }\n\n    public static <T> Response<T> no() {\n        return new Response(false, 500, \"失败\", null);\n    }\n\n    public static <T> Response<T> no(String message) {\n        return new Response(false, 500, message, null);\n    }\n\n    public static <T> Response<T> no(Integer status, String message) {\n        return new Response(false, status, message, null);\n    }\n\n    public Boolean isSuccess() {\n        return success;\n    }\n\n    public void setSuccess(Boolean success) {\n        this.success = success;\n    }\n\n    public String getMessage() {\n        return message;\n    }\n\n    public void setMessage(String message) {\n        this.message = message;\n    }\n\n    public T getData() {\n        return data;\n    }\n\n    public void setData(T data) {\n        this.data = data;\n    }\n\n    public Boolean getSuccess() {\n        return success;\n    }\n\n    public Integer getStatus() {\n        return status;\n    }\n\n    public void setStatus(Integer status) {\n        this.status = status;\n    }\n}\n"
  },
  {
    "path": "src/main/java/com/example/sens/util/SensUtils.java",
    "content": "package com.example.sens.util;\n\nimport io.github.biezhi.ome.OhMyEmail;\nimport lombok.extern.slf4j.Slf4j;\n\nimport java.util.*;\n\n/**\n * <pre>\n *     常用工具\n * </pre>\n */\n@Slf4j\npublic class SensUtils {\n\n    /**\n     * 配置邮件\n     *\n     * @param smtpHost smtpHost\n     * @param userName 邮件地址\n     * @param password password\n     */\n    public static void configMail(String smtpHost, String userName, String password) {\n        Properties properties = OhMyEmail.defaultConfig(false);\n        properties.setProperty(\"mail.smtp.host\", smtpHost);\n        OhMyEmail.config(properties, userName, password);\n    }\n\n\n    public static String listToStr(List<String> list) {\n        StringBuilder stringBuilder = new StringBuilder();\n        for (String str : list) {\n            stringBuilder.append(str).append(\",\");\n        }\n        String temp = stringBuilder.toString();\n        if (temp.length() > 0) {\n            return temp.substring(0, temp.length() - 1);\n        }\n        return temp;\n    }\n\n    public static void main(String[] args) {\n        List<String> list = new ArrayList<>();\n        list.add(\"11\");\n        list.add(\"22\");\n        list.add(\"13\");\n        System.out.println(listToStr(list));\n    }\n\n}\n"
  },
  {
    "path": "src/main/java/com/example/sens/util/SpringUtil.java",
    "content": "package com.example.sens.util;\n\nimport org.springframework.beans.BeansException;\nimport org.springframework.context.ApplicationContext;\nimport org.springframework.context.ApplicationContextAware;\nimport org.springframework.stereotype.Component;\n\n@Component\npublic class SpringUtil implements ApplicationContextAware {\n\n    private static ApplicationContext applicationContext;\n\n    /**\n     * 获取applicationContext\n     *\n     * @return ApplicationContext\n     */\n    public static ApplicationContext getApplicationContext() {\n        return applicationContext;\n    }\n\n    @Override\n    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {\n        if (SpringUtil.applicationContext == null) {\n            SpringUtil.applicationContext = applicationContext;\n        }\n    }\n\n    /**\n     * 通过name获取 Bean.\n     *\n     * @param name name\n     * @return Object\n     */\n    public static Object getBean(String name) {\n        return getApplicationContext().getBean(name);\n    }\n\n    /**\n     * 通过class获取Bean\n     *\n     * @param clazz clazz\n     * @param <T>   <T>\n     * @return T\n     */\n    public static <T> T getBean(Class<T> clazz) {\n        return getApplicationContext().getBean(clazz);\n    }\n}\n"
  },
  {
    "path": "src/main/java/com/example/sens/util/ThreadPoolUtil.java",
    "content": "package com.example.sens.util;\n\nimport java.util.concurrent.ArrayBlockingQueue;\nimport java.util.concurrent.BlockingQueue;\nimport java.util.concurrent.ThreadPoolExecutor;\nimport java.util.concurrent.TimeUnit;\n\n/**\n * @author example\n */\npublic class ThreadPoolUtil {\n\n    /**\n     * 线程缓冲队列\n     */\n    private static BlockingQueue<Runnable> bqueue = new ArrayBlockingQueue<Runnable>(100);\n    /**\n     * 核心线程数，会一直存活，即使没有任务，线程池也会维护线程的最少数量\n     */\n    private static final int SIZE_CORE_POOL = 5;\n    /**\n     * 线程池维护线程的最大数量\n     */\n    private static final int SIZE_MAX_POOL = 10;\n    /**\n     * 线程池维护线程所允许的空闲时间\n     */\n    private static final long ALIVE_TIME = 2000;\n\n    private static ThreadPoolExecutor pool = new ThreadPoolExecutor(SIZE_CORE_POOL, SIZE_MAX_POOL, ALIVE_TIME, TimeUnit.MILLISECONDS, bqueue, new ThreadPoolExecutor.CallerRunsPolicy());\n\n    static {\n\n        pool.prestartAllCoreThreads();\n    }\n\n    public static ThreadPoolExecutor getPool() {\n        return pool;\n    }\n\n    public static void main(String[] args) {\n        System.out.println(pool.getPoolSize());\n    }\n}\n"
  },
  {
    "path": "src/main/java/com/example/sens/vo/PageVo.java",
    "content": "package com.example.sens.vo;\n\nimport lombok.Data;\n\nimport java.io.Serializable;\n\n\n/**\n * @author example\n */\n@Data\npublic class PageVo implements Serializable {\n\n    private static final long serialVersionUID = 1L;\n\n    /**\n     * 页号\n     */\n    private long page = 1;\n\n    /**\n     * 页大小\n     */\n    private long size = 10;\n\n    /**\n     * 排序字段\n     */\n    private String sort = \"create_time\";\n\n    /**\n     * 排序方式 asc/desc\n     */\n    private String order = \"desc\";\n\n    /**\n     * 当前页码\n     */\n    private long current;\n\n    /**\n     * 总数\n     */\n    private long total;\n\n    /**\n     * 页数\n     */\n    private long pages;\n\n\n    public PageVo() {\n    }\n\n    public PageVo(int page, int size) {\n        this.page = page;\n        this.size = size;\n    }\n\n    public PageVo(int page, int size, String sort, String order) {\n        this.page = page;\n        this.size = size;\n        this.sort = sort;\n        this.order = order;\n    }\n\n\n}\n"
  },
  {
    "path": "src/main/java/com/example/sens/vo/SearchVo.java",
    "content": "package com.example.sens.vo;\n\nimport lombok.Data;\n\nimport java.io.Serializable;\n\n/**\n * @author example\n */\n@Data\npublic class SearchVo implements Serializable {\n\n    /**\n     * 起始日期\n     */\n    private String startDate;\n\n    /**\n     * 结束日期\n     */\n    private String endDate;\n}\n"
  },
  {
    "path": "src/main/resources/application.yaml",
    "content": "server:\n  port: 8080\n  forward-headers-strategy: true\n  undertow:\n    io-threads: 2\n    worker-threads: 36\n    buffer-size: 1024\n    directBuffers: true\n  servlet:\n    session:\n      timeout: 86400\n\nspring:\n  transaction:\n    rollback-on-commit-failure: true\n  datasource:\n    type: com.alibaba.druid.pool.DruidDataSource\n    #MySql配置\n    driver-class-name: com.mysql.cj.jdbc.Driver\n    url: jdbc:mysql://127.0.0.1:3306/manland?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&allowMultiQueries=true\n    username: root\n    password: 123456\n  thymeleaf:\n    mode: HTML5\n    cache: false\n    prefix: classpath:/templates/\n    encoding: UTF-8\n    suffix: .html\n    check-template-location: false\n  servlet:\n    multipart:\n      max-file-size: 2000MB\n      max-request-size: 2000MB\n  devtools:\n    restart:\n      enabled: true\n      additional-paths: src/main/java\n\nmybatis-plus:\n  mapper-locations: classpath*:/mapper/**Mapper.xml\n  #实体扫描，多个package用逗号或者分号分隔\n  typeAliasesPackage: com.example.sens.entity\n  global-config:\n    #主键类型  0:\"数据库ID自增\", 1:\"用户输入ID\",2:\"全局唯一ID (数字类型唯一ID)\", 3:\"全局唯一ID UUID\";\n    id-type: 0\n    #字段策略 0:\"忽略判断\",1:\"非 NULL 判断\"),2:\"非空判断\"\n    field-strategy: 2\n    #驼峰下划线转换\n    db-column-underline: true\n    #刷新mapper 调试神器\n    refresh-mapper: true\n    #逻辑删除配置（下面3个配置）\n    logic-delete-value: 1\n    logic-not-delete-value: 0\n  configuration:\n    map-underscore-to-camel-case: true\n    cache-enabled: true\n\nlogging:\n  file: ./logs/log.log\n  level:\n    org:\n      springframework:\n        boot:\n          autoconfigure: error\n#        web:\n#          trace\n\napplication:\n  formatted-version: 1.0.0\n\nshiro:\n  userNativeSessionManager: true\n\nmail:\n  smtp:\n    host: smtp.qq.com\n    username: 847064370@qq.com\n    password: xxx\n  from:\n"
  },
  {
    "path": "src/main/resources/mapper/CategoryMapper.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE mapper PUBLIC \"-//mybatis.org//DTD Mapper 3.0//EN\" \"http://mybatis.org/dtd/mybatis-3-mapper.dtd\">\n<mapper namespace=\"com.example.sens.mapper.CategoryMapper\">\n\n    <delete id=\"deleteByUserId\">\n       DELETE\n       FROM\n           category\n       WHERE\n           user_id = #{value}\n    </delete>\n\n    <select id=\"selectChildCateIds\" resultType=\"java.lang.Long\">\n        SELECT\n            id\n        FROM\n            category\n        WHERE\n            path_trace LIKE CONCAT('%', #{pathTrace}, '%')\n            AND del_flag = 0\n    </select>\n\n    <select id=\"findAllWithCount\" resultType=\"com.example.sens.entity.Category\">\n        SELECT\n\t\tc.id,\n\t\tc.cate_name cateName,\n            (  select count(*) FROM post p where p.cate_id = c.id ) as count\n        FROM category c\n        WHERE c.del_flag = 0\n    </select>\n\n"
  },
  {
    "path": "src/main/resources/mapper/CityMapper.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE mapper PUBLIC \"-//mybatis.org//DTD Mapper 3.0//EN\" \"http://mybatis.org/dtd/mybatis-3-mapper.dtd\">\n<mapper namespace=\"com.example.sens.mapper.CityMapper\">\n\n\n    <select id=\"findAllWithCount\" resultType=\"com.example.sens.entity.City\">\n        SELECT\n            c.id,\n            c.city_name cityName,\n            (select count(*) FROM post p where p.city_id = c.id AND p.del_flag = 0 ) as count\n        FROM city c\n        WHERE c.del_flag = 0\n    </select>\n"
  },
  {
    "path": "src/main/resources/mapper/OrderMapper.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE mapper PUBLIC \"-//mybatis.org//DTD Mapper 3.0//EN\" \"http://mybatis.org/dtd/mybatis-3-mapper.dtd\">\n<mapper namespace=\"com.example.sens.mapper.OrderMapper\">\n\n    <resultMap id=\"BaseResultMap\" type=\"com.example.sens.entity.Order\">\n        <id column=\"id\" property=\"id\"></id>\n        <result column=\"post_id\" property=\"postId\"></result>\n        <result column=\"user_id\" property=\"userId\"></result>\n        <result column=\"owner_user_id\" property=\"ownerUserId\"></result>\n        <result column=\"quantity\" property=\"quantity\"></result>\n        <result column=\"status\" property=\"status\"></result>\n        <result column=\"price\" property=\"price\"></result>\n        <result column=\"start_date\" property=\"startDate\"></result>\n        <result column=\"end_date\" property=\"endDate\"></result>\n        <result column=\"create_time\" property=\"createTime\"></result>\n        <association property=\"post\" javaType=\"com.example.sens.entity.Post\">\n            <id property=\"id\" column=\"post_id\"/>\n            <result property=\"postTitle\" column=\"post_title\"/>\n            <result property=\"price\" column=\"post_price\"/>\n            <result property=\"deposit\" column=\"deposit\"/>\n        </association>\n        <association property=\"user\" javaType=\"com.example.sens.entity.User\">\n            <id property=\"id\" column=\"user_id\"/>\n            <result property=\"userDisplayName\" column=\"user_display_name\"/>\n        </association>\n        <association property=\"ownerUser\" javaType=\"com.example.sens.entity.User\">\n            <id property=\"id\" column=\"owner_user_id\"/>\n            <result property=\"userDisplayName\" column=\"owner_user_display_name\"/>\n        </association>\n    </resultMap>\n\n    <delete id=\"deleteByPostId\">\n        DELETE FROM t_order WHERE post_id = #{value}\n    </delete>\n\n    <select id=\"findAll\" resultMap=\"BaseResultMap\">\n        SELECT\n        t.id,\n        t.post_id,\n        t.user_id,\n        t.owner_user_id,\n        t.quantity,\n        t.status,\n        t.price,\n        t.start_date,\n        t.end_date,\n        t.create_time,\n        p.post_title,\n        p.price post_price,\n        p.deposit,\n        u.user_display_name,\n        u2.user_display_name owner_user_display_name\n        FROM\n        t_order t\n        LEFT JOIN user u ON t.user_id = u.id\n        LEFT JOIN user u2 ON t.owner_user_id = u2.id\n        LEFT JOIN post p ON t.post_id = p.id\n        WHERE\n        <if test=\"condition.userId != null and condition.userId != ''\">\n            t.user_id = #{condition.userId} AND\n        </if>\n        <if test=\"condition.ownerUserId != null and condition.ownerUserId != ''\">\n            t.owner_user_id = #{condition.ownerUserId} AND\n        </if>\n        <if test=\"condition.startDate != null\">\n            t.create_time >= STR_TO_DATE( #{condition.startDate}, \"%Y-%m-%d\" ) AND\n        </if>\n        <if test=\"condition.endDate != null\">\n            t.create_time &lt;= STR_TO_DATE( #{condition.endDate}, \"%Y-%m-%d\" )+1 AND\n        </if>\n        t.del_flag = 0\n    </select>\n\n    <select id=\"getTotalPriceSum\" resultType=\"java.lang.Integer\">\n        SELECT\n        sum(price)\n        FROM\n        t_order\n        <where>\n            <if test=\"condition.userId != null and condition.userId != ''\">\n                user_id = #{condition.userId} AND\n            </if>\n            <if test=\"condition.startDate != null\">\n                create_time >= STR_TO_DATE( #{condition.startDate}, \"%Y-%m-%d\" ) AND\n            </if>\n            <if test=\"condition.endDate != null\">\n                create_time &lt;= STR_TO_DATE( #{condition.endDate}, \"%Y-%m-%d\" )+1 AND\n            </if>\n            status = 1  AND\n            del_flag = 0\n        </where>\n    </select>\n\n    <select id=\"findOverDueOrder\" resultType=\"com.example.sens.entity.Order\">\n        SELECT\n            t.id,\n            t.post_id,\n            t.user_id,\n            t.owner_user_id,\n            t.quantity,\n            t.status,\n            t.price,\n            t.start_date,\n            t.end_date,\n            t.create_time\n        FROM t_order t WHERE status = 1 AND end_date &lt; now()\n    </select>\n\n    <select id=\"findByPostId\" resultMap=\"BaseResultMap\">\n         SELECT\n            t.id,\n            t.post_id,\n            t.user_id,\n            t.owner_user_id,\n            t.quantity,\n            t.status,\n            t.price,\n            t.start_date,\n            t.end_date,\n            t.create_time\n        FROM t_order t WHERE status = 1 AND post_id = #{postId} AND end_date > now()\n        LIMIT 1\n    </select>\n\n    <update id=\"updateOverDueOrder\">\n        UPDATE t_order\n        SET status = 3\n        WHERE\n        create_time &lt; SUBDATE( now( ), INTERVAL + 10 MINUTE ) AND status = 0 AND del_flag = 0\n    </update>\n\n\n"
  },
  {
    "path": "src/main/resources/mapper/PermissionMapper.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE mapper PUBLIC \"-//mybatis.org//DTD Mapper 3.0//EN\" \"http://mybatis.org/dtd/mybatis-3-mapper.dtd\">\n<mapper namespace=\"com.example.sens.mapper.PermissionMapper\">\n\n    <select id=\"findByRoleId\" resultType=\"com.example.sens.entity.Permission\">\n      SELECT\n          DISTINCT t.id,\n          t.`name`,\n          t.pid,\n          t.resource_type,\n          t.url,\n          t.icon,\n          t.sort\n      FROM\n          permission t,\n          role_permission_ref r\n      WHERE\n          r.role_id = #{value} AND\n          t.id = r.permission_id\n          AND t.del_flag = 0\n          AND r.del_flag = 0\n      ORDER BY t.sort ASC\n  </select>\n\n    <select id=\"findPermissionByUserId\" resultType=\"com.example.sens.entity.Permission\">\n        SELECT\n            DISTINCT p.id,\n            p.`name`,\n            p.pid,\n            p.resource_type,\n            p.url,\n            p.icon,\n            p.sort\n        FROM\n            user u,\n            role r,\n            user_role_ref ur,\n            permission p,\n            role_permission_ref rp\n        WHERE\n            u.id = #{userId}\n            AND ur.user_id = u.id\n            AND ur.role_id = r.id\n            AND rp.permission_id = p.id\n            AND rp.role_id = r.id\n            AND u.del_flag = 0\n            AND r.del_flag = 0\n            AND ur.del_flag = 0\n            AND p.del_flag = 0\n            AND rp.del_flag = 0\n        ORDER BY p.sort ASC\n    </select>\n\n\n    <select id=\"findPermissionByUserIdAndResourceType\" resultType=\"com.example.sens.entity.Permission\">\n        SELECT\n            DISTINCT p.id,\n            p.`name`,\n            p.pid,\n            p.resource_type,\n            p.url,\n            p.icon,\n            p.sort\n        FROM\n            user u,\n            role r,\n            user_role_ref ur,\n            permission p,\n            role_permission_ref rp\n        WHERE\n            u.id = #{userId}\n            AND ur.user_id = u.id\n            AND ur.role_id = r.id\n            AND rp.permission_id = p.id\n            AND rp.role_id = r.id\n            AND p.resource_type = #{resourceType}\n            AND u.del_flag = 0\n            AND r.del_flag = 0\n            AND ur.del_flag = 0\n            AND p.del_flag = 0\n            AND rp.del_flag = 0\n        ORDER BY p.sort ASC\n    </select>\n\n    <select id=\"findPermissionByResourceType\" resultType=\"com.example.sens.entity.Permission\">\n        SELECT\n            DISTINCT p.id,\n            p.`name`,\n            p.pid,\n            p.resource_type,\n            p.url,\n            p.icon,\n            p.sort\n        FROM\n            permission p\n        <where>\n\n            <if test=\"resourceType != null\">\n                p.resource_type = #{resourceType} AND\n            </if>\n            p.del_flag = 0\n        </where>\n        ORDER BY p.sort ASC\n    </select>\n\n    <select id=\"findPermissionByRoleId\" resultType=\"com.example.sens.entity.Permission\">\n        SELECT\n            p.id,\n            p.pid,\n            p.name,\n            p.sort,\n            p.resource_type\n        FROM\n            permission p,\n            role_permission_ref r\n        WHERE\n            p.id = r.permission_id\n            AND p.del_flag = 0\n            AND r.del_flag = 0\n            AND r.role_id = #{roleId}\n    </select>\n\n    <select id=\"countChildPermission\" resultType=\"java.lang.Integer\">\n        SELECT\n            COUNT(*)\n        FROM\n            permission\n        WHERE\n            pid = #{id}\n            AND del_flag = 0\n    </select>\n\n    <select id=\"findByUrl\" resultType=\"com.example.sens.entity.Permission\">\n        SELECT\n            id, name, pid, resource_type, url\n        FROM\n            permission\n        WHERE\n            url = #{url} AND del_flag = 0\n        LIMIT 1\n    </select>\n"
  },
  {
    "path": "src/main/resources/mapper/PostMapper.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE mapper PUBLIC \"-//mybatis.org//DTD Mapper 3.0//EN\" \"http://mybatis.org/dtd/mybatis-3-mapper.dtd\">\n<mapper namespace=\"com.example.sens.mapper.PostMapper\">\n\n    <resultMap id=\"BaseResultMap\" type=\"com.example.sens.entity.Post\">\n        <id column=\"id\" property=\"id\"></id>\n        <result column=\"user_id\" property=\"userId\"></result>\n        <result column=\"city_id\" property=\"cityId\"></result>\n        <result column=\"cate_id\" property=\"cateId\"></result>\n        <result column=\"post_title\" property=\"postTitle\"></result>\n        <result column=\"post_summary\" property=\"postSummary\"></result>\n        <result column=\"post_thumbnail\" property=\"postThumbnail\"></result>\n        <result column=\"create_time\" property=\"createTime\"></result>\n        <result column=\"post_status\" property=\"postStatus\"></result>\n        <result column=\"price\" property=\"price\"></result>\n        <result column=\"number\" property=\"number\"></result>\n        <result column=\"img_url\" property=\"imgUrl\"></result>\n        <result column=\"area\" property=\"area\"></result>\n        <result column=\"room_count\" property=\"roomCount\"></result>\n        <result column=\"toilet_count\" property=\"toiletCount\"></result>\n        <result column=\"deposit\" property=\"deposit\"></result>\n        <association property=\"category\" javaType=\"com.example.sens.entity.Category\">\n            <id property=\"id\" column=\"cate_id\"/>\n            <result property=\"cateName\" column=\"cate_name\"/>\n        </association>\n        <association property=\"city\" javaType=\"com.example.sens.entity.City\">\n            <id property=\"id\" column=\"city_id\"/>\n            <result property=\"cityName\" column=\"city_name\"/>\n        </association>\n        <association property=\"user\" javaType=\"com.example.sens.entity.User\">\n            <id property=\"id\" column=\"user_id\"/>\n            <result property=\"userDisplayName\" column=\"user_display_name\"/>\n        </association>\n    </resultMap>\n\n    <select id=\"findPostByCondition\" resultMap=\"BaseResultMap\">\n        SELECT\n        p.id,\n        p.user_id,\n        p.post_title,\n        p.cate_id,\n        p.city_id,\n        p.post_summary,\n        p.post_thumbnail,\n        p.create_time,\n        p.post_status,\n        p.price,\n        p.number,\n        p.img_url,\n        p.area,\n        p.deposit,\n        p.room_count,\n        p.toilet_count,\n        c.cate_name,\n        y.city_name,\n        u.user_display_name\n        FROM\n        post p\n        LEFT JOIN category c ON p.cate_id = c.id\n        LEFT JOIN city y ON p.city_id = y.id\n        LEFT JOIN user u ON p.user_id = u.id\n        <where>\n            <if test=\"condition.userId != null and condition.userId != -1\">\n                p.user_id = #{condition.userId} AND\n            </if>\n            <if test=\"condition.cateId != null and condition.cateId != -1\">\n                p.cate_id = #{condition.cateId} AND\n            </if>\n            <if test=\"condition.cityId != null and condition.cityId != -1\">\n                p.city_id = #{condition.cityId} AND\n            </if>\n            <if test=\"condition.postStatus != null and condition.postStatus != -1\">\n                p.post_status = #{condition.postStatus} AND\n            </if>\n            <if test=\"condition.postTitle != null and condition.postTitle != ''\">\n                p.post_title LIKE CONCAT('%', #{condition.postTitle}, '%') AND\n            </if>\n            <if test=\"condition.minPrice != null and condition.maxPrice != null\">\n                p.price >= #{condition.minPrice} and p.price &lt; #{condition.maxPrice} and\n            </if>\n            <if test=\"condition.minArea != null and condition.minArea != null\">\n                p.area >= #{condition.minArea} and p.area &lt; #{condition.maxArea} and\n            </if>\n            p.del_flag = 0 AND\n            c.del_flag = 0 AND\n            u.del_flag = 0 AND\n            y.del_flag = 0\n        </where>\n    </select>\n\n    <select id=\"findByRentUserId\" resultMap=\"BaseResultMap\">\n        SELECT\n        p.id,\n        p.user_id,\n        p.post_title,\n        p.cate_id,\n        p.city_id,\n        p.post_summary,\n        p.post_thumbnail,\n        p.create_time,\n        p.post_status,\n        p.price,\n        p.number,\n        p.img_url,\n        p.area,\n        p.deposit,\n        p.room_count,\n        p.toilet_count,\n        c.cate_name,\n        y.city_name,\n        u.user_display_name\n        FROM\n        t_order o, post p\n        LEFT JOIN category c ON p.cate_id = c.id\n        LEFT JOIN city y ON p.city_id = y.id\n        LEFT JOIN user u ON p.user_id = u.id\n        <where>\n            p.id = o.post_id AND\n            o.user_id = #{userId} AND\n            o.status = 1 AND\n            o.end_date > now() AND\n            p.del_flag = 0 AND\n            c.del_flag = 0 AND\n            u.del_flag = 0 AND\n            y.del_flag = 0\n        </where>\n    </select>\n\n    <select id=\"countPostByCateId\" resultType=\"java.lang.Integer\">\n        SELECT COUNT(*) FROM post\n        WHERE cate_id = #{value} AND del_flag = 0\n    </select>\n\n    <select id=\"getLatestPost\" resultMap=\"BaseResultMap\">\n        SELECT\n        p.id,\n        p.user_id,\n        p.post_title,\n        p.post_summary,\n        p.post_thumbnail,\n        p.create_time,\n        p.post_status,\n        p.price,\n        p.number,\n        p.img_url,\n        p.area,\n        p.deposit,\n        p.room_count,\n        p.toilet_count,\n        c.id cate_id,\n        c.cate_name,\n        c.cate_sort,\n        y.city_name,\n        y.id city_id\n        FROM\n        post p,\n        category c,\n        city y\n        <where>\n            <if test=\"cityId != null and cityId != -1\">\n                p.city_id = #{cityId} AND\n            </if>\n            p.post_status = 0 AND\n            p.cate_id = c.id AND\n            p.city_id = y.id AND\n            p.del_flag = 0 AND\n            c.del_flag = 0 AND\n            y.del_flag = 0\n        </where>\n        limit #{limit}\n    </select>\n\n    <select id=\"countByStatus\" resultType=\"java.lang.Integer\">\n        SELECT count(*) FROM post WHERE post_status = #{postStatus} AND del_flag = 0\n    </select>\n\n    <select id=\"getUnionRentPost\" resultMap=\"BaseResultMap\">\n        SELECT * FROM post p\n        <where>\n            p.user_id = #{userId} AND\n            p.city_id = #{cityId} AND\n            p.post_title LIKE #{postTitle} AND\n            p.number LIKE '%${number}%' AND\n            p.cate_id = 2 AND\n            p.del_flag = 0\n        </where>\n        order by p.number asc\n    </select>\n\n\n"
  },
  {
    "path": "src/main/resources/mapper/RechargeRecordMapper.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE mapper PUBLIC \"-//mybatis.org//DTD Mapper 3.0//EN\" \"http://mybatis.org/dtd/mybatis-3-mapper.dtd\">\n<mapper namespace=\"com.example.sens.mapper.RechargeRecordMapper\">\n\n    <resultMap id=\"BaseResultMap\" type=\"com.example.sens.entity.RechargeRecord\">\n        <id column=\"id\" property=\"id\"/>\n        <result column=\"user_id\" property=\"userId\"/>\n        <result column=\"money\" property=\"money\"/>\n        <result column=\"create_time\" property=\"createTime\"/>\n        <association property=\"user\" javaType=\"com.example.sens.entity.User\">\n            <id property=\"id\" column=\"user_id\"/>\n            <result property=\"userDisplayName\" column=\"user_display_name\"/>\n        </association>\n    </resultMap>\n\n\n    <delete id=\"deleteByUserId\">\n        DELETE\n        FROM\n        recharge_record\n        WHERE\n            user_id = #{value} AND del_flag = 0\n    </delete>\n\n    <select id=\"findAll\" resultMap=\"BaseResultMap\">\n        SELECT\n            t.id, t.user_id, t.money, t.create_time,\n            u.user_display_name\n        FROM recharge_record t\n        LEFT JOIN user u ON t.user_id = u.id AND u.del_flag = 0\n        <where>\n            <if test=\"startDate != null and startDate != '' and startDate != 'null'\">\n                t.create_time >= STR_TO_DATE( #{startDate}, \"%Y-%m-%d\" ) AND\n            </if>\n            <if test=\"endDate != null and endDate != '' and endDate != 'null'\">\n                t.create_time &lt;= STR_TO_DATE( #{endDate}, \"%Y-%m-%d\" )+1 AND\n            </if>\n            t.del_flag = 0\n        </where>\n    </select>\n\n    <select id=\"findByUserId\" resultMap=\"BaseResultMap\">\n         SELECT\n            t.id, t.user_id, t.money, t.create_time,\n            u.user_display_name\n        FROM recharge_record t\n        LEFT JOIN user u ON t.user_id = u.id AND u.del_flag = 0\n        <where>\n            <if test=\"startDate != null and startDate != '' and startDate != 'null'\">\n                t.create_time >= STR_TO_DATE( #{startDate}, \"%Y-%m-%d\" ) AND\n            </if>\n            <if test=\"endDate != null and endDate != '' and endDate != ''\">\n                t.create_time &lt;= STR_TO_DATE( #{endDate}, \"%Y-%m-%d\" )+1 AND\n            </if>\n            <if test=\"userId != null\">\n                t.user_id = #{userId} AND\n            </if>\n            t.del_flag = 0\n        </where>\n    </select>\n\n    <select id=\"getTotalMoneySum\" resultType=\"java.lang.Integer\">\n        SELECT\n        sum(money)\n        FROM\n        recharge_record\n        <where>\n            <if test=\"startDate != null and startDate != '' and startDate != 'null'\">\n                create_time >= STR_TO_DATE( #{startDate}, \"%Y-%m-%d\" ) AND\n            </if>\n            <if test=\"endDate != null and endDate != '' and endDate != 'null'\">\n                create_time &lt;= STR_TO_DATE( #{endDate}, \"%Y-%m-%d\" )+1 AND\n            </if>\n            del_flag = 0\n        </where>\n    </select>\n"
  },
  {
    "path": "src/main/resources/mapper/RoleMapper.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE mapper PUBLIC \"-//mybatis.org//DTD Mapper 3.0//EN\" \"http://mybatis.org/dtd/mybatis-3-mapper.dtd\">\n<mapper namespace=\"com.example.sens.mapper.RoleMapper\">\n\n    <select id=\"findByUserId\" resultType=\"com.example.sens.entity.Role\">\n      SELECT\n          t.id,\n          t.role,\n          t.description,\n          t.level,\n          t.is_register_default,\n          t.create_time\n      FROM\n          role t,\n          user_role_ref r\n      WHERE\n          r.user_id = #{value} AND\n          t.id = r.role_id\n          AND t.del_flag = 0\n          AND r.del_flag = 0\n          ORDER BY t.level DESC\n          LIMIT 1\n  </select>\n\n    <delete id=\"deleteByUserId\">\n      DELETE\n      FROM\n          user_role_ref\n      WHERE\n          user_id = #{value}\n          AND del_flag = 0\n  </delete>\n\n    <select id=\"countUserByRoleId\" resultType=\"java.lang.Integer\">\n      SELECT\n          count( * )\n      FROM\n          user_role_ref r,\n          user t\n      WHERE\n          r.role_id = #{value} AND\n          r.user_id = t.id\n          AND t.del_flag = 0\n          AND r.del_flag = 0\n  </select>\n\n    <select id=\"findAllWithCount\" resultType=\"com.example.sens.entity.Role\">\n        SELECT\n            t.id,\n            t.role,\n            t.description,\n            t.is_register_default,\n            t.level,\n            count( * ) AS count\n        FROM\n            user_role_ref r,\n            role t\n        WHERE\n            t.id = r.role_id\n            AND t.del_flag = 0\n            AND r.del_flag = 0\n        GROUP BY\n            r.role_id\n            order by t.level ASC\n    </select>\n\n    <select id=\"findByLessThanLevel\" resultType=\"com.example.sens.entity.Role\">\n          SELECT\n              t.id,\n              t.role,\n              t.description,\n              t.is_register_default,\n              t.level\n          FROM\n              role t\n          WHERE\n              t.level &lt;= #{level} AND t.del_flag = 0\n              ORDER BY t.level DESC\n    </select>\n\n    <select id=\"findMaxLevelByUserId\" resultType=\"java.lang.Integer\">\n        SELECT\n            MAX(t.level)\n        FROM\n            user_role_ref r,\n            role t\n        WHERE\n            r.user_id = #{userId}\n            AND r.role_id = t.id\n    </select>\n\n    <select id=\"findDefaultRole\" resultType=\"com.example.sens.entity.Role\">\n        SELECT\n          t.id,\n          t.role,\n          t.description,\n          t.level,\n          t.is_register_default,\n          t.create_time\n        FROM\n          role t\n        WHERE\n           t.is_register_default = 1\n        ORDER BY t.level ASC\n        LIMIT 1\n    </select>\n\n    <select id=\"getMaxRoleByUserId\" resultType=\"com.example.sens.entity.Role\">\n\n    </select>\n\n\n"
  },
  {
    "path": "src/main/resources/mapper/RolePermissionRefMapper.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE mapper PUBLIC \"-//mybatis.org//DTD Mapper 3.0//EN\" \"http://mybatis.org/dtd/mybatis-3-mapper.dtd\">\n<mapper namespace=\"com.example.sens.mapper.RolePermissionRefMapper\">\n\n  <delete id=\"deleteByRoleId\">\n      DELETE\n      FROM\n          role_permission_ref\n      WHERE\n          role_id = #{value}\n          AND del_flag = 0\n  </delete>\n\n    <delete id=\"deleteByPermissionId\">\n      DELETE\n      FROM\n          role_permission_ref\n      WHERE\n          permission_id = #{value}\n          AND del_flag = 0\n  </delete>\n\n\n    <insert id=\"batchInsert\">\n        INSERT INTO\n        role_permission_ref\n        ( role_id, permission_id )\n        VALUES\n        <foreach collection=\"list\" item=\"item\" separator=\",\">\n            (\n            #{item.roleId}, #{item.permissionId}\n            )\n        </foreach>\n    </insert>\n\n"
  },
  {
    "path": "src/main/resources/mapper/UserMapper.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE mapper PUBLIC \"-//mybatis.org//DTD Mapper 3.0//EN\" \"http://mybatis.org/dtd/mybatis-3-mapper.dtd\">\n<mapper namespace=\"com.example.sens.mapper.UserMapper\">\n\n    <sql id=\"normal\">0</sql>\n    <sql id=\"ban\">1</sql>\n    <sql id=\"deleted\">2</sql>\n\n    <select id=\"findByRoleId\" resultType=\"com.example.sens.entity.User\">\n      SELECT\n          t.id,\n          t.email,\n          t.phone,\n          t.user_name,\n          t.user_display_name,\n          t.user_pass,\n          t.id_card,\n          t.user_avatar,\n          t.user_desc,\n          t.status,\n          t.money,\n          t.create_time\n      FROM\n          user_role_ref r,\n          user t\n      WHERE\n          r.role_id = #{roleId} AND\n          r.user_id = t.id\n          AND t.del_flag = 0\n          AND r.del_flag = 0\n      ORDER BY\n          t.id DESC\n  </select>\n\n    <select id=\"findByRoleIdAndCondition\" resultType=\"com.example.sens.entity.User\">\n        SELECT\n        t.id,\n        t.email,\n        t.phone,\n        t.user_name,\n        t.user_display_name,\n        t.user_pass,\n        t.id_card,\n        t.user_avatar,\n        t.user_desc,\n        t.status,\n        t.money,\n        t.create_time\n        FROM\n        user_role_ref r,\n        user t\n        WHERE\n        t.del_flag = 0 AND\n        r.del_flag = 0 AND\n        r.role_id = #{roleId} AND\n        r.user_id = t.id\n        <if test=\"user.status != null and user.status != ''\">\n            AND t.status = #{user.status}\n        </if>\n        <if test=\"user.userName != null and user.userName != ''\">\n            AND t.user_name LIKE CONCAT('%', #{user.userName}, '%')\n        </if>\n        <if test=\"user.userDisplayName != null and user.userDisplayName != ''\">\n            AND t.user_display_name LIKE CONCAT('%', #{user.userDisplayName}, '%')\n        </if>\n        <if test=\"user.idCard != null and user.idCard != ''\">\n            AND t.id_card LIKE CONCAT('%', #{user.idCard}, '%')\n        </if>\n        ORDER BY\n        t.id DESC\n    </select>\n\n\n    <select id=\"findByCondition\" resultType=\"com.example.sens.entity.User\">\n        SELECT\n        t.id,\n        t.user_name,\n        t.email,\n        t.phone,\n        t.user_display_name,\n        t.user_pass,\n        t.id_card,\n        t.user_avatar,\n        t.user_desc,\n        t.status,\n        t.money,\n        t.create_time\n        FROM\n        user t\n        WHERE\n        t.del_flag = 0\n        <if test=\"user.status != null and user.status != ''\">\n            AND t.status = #{user.status}\n        </if>\n        <if test=\"user.userName != null and user.userName != ''\">\n            AND t.user_name LIKE CONCAT('%', #{user.userName}, '%')\n        </if>\n        <if test=\"user.userDisplayName != null and user.userDisplayName != ''\">\n            AND t.user_display_name LIKE CONCAT('%', #{user.userDisplayName}, '%')\n        </if>\n        <if test=\"user.idCard != null and user.idCard != ''\">\n            AND t.id_card LIKE CONCAT('%', #{user.idCard}, '%')\n        </if>\n        ORDER BY\n        t.id DESC\n    </select>\n\n\n    <select id=\"getTodayCount\" resultType=\"java.lang.Integer\">\n        SELECT\n            count( * )\n        FROM\n            post\n        WHERE\n            to_days( create_time ) = to_days( now( ) )\n            AND del_flag = 0\n    </select>\n\n    <select id=\"getUserPostRanking\" resultType=\"com.example.sens.entity.User\">\n        SELECT\n            count( * ) postCount,\n            u.id,\n            u.user_name,\n            u.user_avatar,\n            u.user_display_name,\n            u.create_time\n        FROM\n            post p,\n            user u\n        WHERE\n            p.user_id = u.id\n            AND p.del_flag = 0\n            AND u.del_flag = 0\n        GROUP BY\n            p.user_id\n        ORDER BY\n            postCount DESC\n            LIMIT #{value}\n    </select>\n\n    <select id=\"getLatestUser\" resultType=\"com.example.sens.entity.User\">\n        SELECT\n            id,\n            user_name,\n            user_avatar,\n            user_display_name,\n            create_time\n        FROM\n            user\n        WHERE\n            del_flag = 0\n        ORDER BY\n            create_time DESC\n            LIMIT #{value}\n    </select>\n\n    <select id=\"getHotUsers\" resultType=\"com.example.sens.entity.User\">\n        SELECT\n            u.id,\n            u.user_name,\n            u.user_avatar,\n            u.user_display_name,\n            ( SELECT count( * ) FROM post p WHERE p.user_id = u.id ) postCount\n        FROM\n            USER u\n        ORDER BY\n            postCount DESC\n    </select>\n"
  },
  {
    "path": "src/main/resources/mapper/UserRoleRefMapper.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE mapper PUBLIC \"-//mybatis.org//DTD Mapper 3.0//EN\" \"http://mybatis.org/dtd/mybatis-3-mapper.dtd\">\n<mapper namespace=\"com.example.sens.mapper.UserRoleRefMapper\">\n    <resultMap id=\"BaseResultMap\" type=\"com.example.sens.entity.UserRoleRef\">\n        <result column=\"user_id\" jdbcType=\"INTEGER\" property=\"userId\"/>\n        <result column=\"role_id\" jdbcType=\"INTEGER\" property=\"roleId\"/>\n    </resultMap>\n\n    <delete id=\"deleteByUserId\">\n        DELETE\n            FROM  `user_role_ref`\n        WHERE user_id = #{value}\n            AND del_flag = 0\n  </delete>\n"
  },
  {
    "path": "src/main/resources/static/css/AdminLTE.css",
    "content": "/*!\n *   AdminLTE v2.4.5\n *   Author: Almsaeed Studio\n *\t Website: Almsaeed Studio <https://adminlte.io>\n *   License: Open source - MIT\n *           Please visit http://opensource.org/licenses/MIT for more information\n */\n/*\n * Core: General Layout Style\n * -------------------------\n */\nhtml,\nbody {\n  height: 100%;\n}\n.layout-boxed html,\n.layout-boxed body {\n  height: 100%;\n}\nbody {\n  font-family: 'Source Sans Pro', 'Helvetica Neue', Helvetica, Arial, sans-serif;\n  font-weight: 400;\n  overflow-x: hidden;\n  overflow-y: auto;\n}\n/* Layout */\n.wrapper {\n  height: 100%;\n  position: relative;\n  overflow-x: hidden;\n  overflow-y: auto;\n}\n.wrapper:before,\n.wrapper:after {\n  content: \" \";\n  display: table;\n}\n.wrapper:after {\n  clear: both;\n}\n.layout-boxed .wrapper {\n  max-width: 1250px;\n  margin: 0 auto;\n  min-height: 100%;\n  box-shadow: 0 0 8px rgba(0, 0, 0, 0.5);\n  position: relative;\n}\n.layout-boxed {\n  background-color: #f9fafc;\n}\n/*\n * Content Wrapper - contains the main content\n */\n.content-wrapper,\n.main-footer {\n  -webkit-transition: -webkit-transform 0.3s ease-in-out, margin 0.3s ease-in-out;\n  -moz-transition: -moz-transform 0.3s ease-in-out, margin 0.3s ease-in-out;\n  -o-transition: -o-transform 0.3s ease-in-out, margin 0.3s ease-in-out;\n  transition: transform 0.3s ease-in-out, margin 0.3s ease-in-out;\n  margin-left: 230px;\n  z-index: 820;\n}\n.layout-top-nav .content-wrapper,\n.layout-top-nav .main-footer {\n  margin-left: 0;\n}\n@media (max-width: 767px) {\n  .content-wrapper,\n  .main-footer {\n    margin-left: 0;\n  }\n}\n@media (min-width: 768px) {\n  .sidebar-collapse .content-wrapper,\n  .sidebar-collapse .main-footer {\n    margin-left: 0;\n  }\n}\n@media (max-width: 767px) {\n  .sidebar-open .content-wrapper,\n  .sidebar-open .main-footer {\n    -webkit-transform: translate(230px, 0);\n    -ms-transform: translate(230px, 0);\n    -o-transform: translate(230px, 0);\n    transform: translate(230px, 0);\n  }\n}\n.content-wrapper {\n  min-height: 100%;\n  background-color: #ecf0f5;\n  z-index: 800;\n}\n.main-footer {\n  background: #fff;\n  padding: 15px;\n  color: #444;\n  border-top: 1px solid #d2d6de;\n}\n/* Fixed layout */\n.fixed .main-header,\n.fixed .main-sidebar,\n.fixed .left-side {\n  position: fixed;\n}\n.fixed .main-header {\n  top: 0;\n  right: 0;\n  left: 0;\n}\n.fixed .content-wrapper,\n.fixed .right-side {\n  padding-top: 50px;\n}\n@media (max-width: 767px) {\n  .fixed .content-wrapper,\n  .fixed .right-side {\n    padding-top: 100px;\n  }\n}\n.fixed.layout-boxed .wrapper {\n  max-width: 100%;\n}\n.fixed .wrapper {\n  overflow: hidden;\n}\n.hold-transition .content-wrapper,\n.hold-transition .right-side,\n.hold-transition .main-footer,\n.hold-transition .main-sidebar,\n.hold-transition .left-side,\n.hold-transition .main-header .navbar,\n.hold-transition .main-header .logo,\n.hold-transition .menu-open .fa-angle-left {\n  /* Fix for IE */\n  -webkit-transition: none;\n  -o-transition: none;\n  transition: none;\n}\n/* Content */\n.content {\n  min-height: 250px;\n  padding: 15px;\n  margin-right: auto;\n  margin-left: auto;\n  padding-left: 15px;\n  padding-right: 15px;\n}\n/* H1 - H6 font */\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\n.h1,\n.h2,\n.h3,\n.h4,\n.h5,\n.h6 {\n  font-family: 'Source Sans Pro', sans-serif;\n}\n/* General Links */\na {\n  color: #3c8dbc;\n}\na:hover,\na:active,\na:focus {\n  outline: none;\n  text-decoration: none;\n  color: #72afd2;\n}\n/* Page Header */\n.page-header {\n  margin: 10px 0 20px 0;\n  font-size: 22px;\n}\n.page-header > small {\n  color: #666;\n  display: block;\n  margin-top: 5px;\n}\n/*\n * Component: Main Header\n * ----------------------\n */\n.main-header {\n  position: relative;\n  max-height: 100px;\n  z-index: 1030;\n}\n.main-header .navbar {\n  -webkit-transition: margin-left 0.3s ease-in-out;\n  -o-transition: margin-left 0.3s ease-in-out;\n  transition: margin-left 0.3s ease-in-out;\n  margin-bottom: 0;\n  margin-left: 230px;\n  border: none;\n  min-height: 50px;\n  border-radius: 0;\n}\n.layout-top-nav .main-header .navbar {\n  margin-left: 0;\n}\n.main-header #navbar-search-input.form-control {\n  background: rgba(255, 255, 255, 0.2);\n  border-color: transparent;\n}\n.main-header #navbar-search-input.form-control:focus,\n.main-header #navbar-search-input.form-control:active {\n  border-color: rgba(0, 0, 0, 0.1);\n  background: rgba(255, 255, 255, 0.9);\n}\n.main-header #navbar-search-input.form-control::-moz-placeholder {\n  color: #ccc;\n  opacity: 1;\n}\n.main-header #navbar-search-input.form-control:-ms-input-placeholder {\n  color: #ccc;\n}\n.main-header #navbar-search-input.form-control::-webkit-input-placeholder {\n  color: #ccc;\n}\n.main-header .navbar-custom-menu,\n.main-header .navbar-right {\n  float: right;\n}\n@media (max-width: 991px) {\n  .main-header .navbar-custom-menu a,\n  .main-header .navbar-right a {\n    color: inherit;\n    background: transparent;\n  }\n}\n@media (max-width: 767px) {\n  .main-header .navbar-right {\n    float: none;\n  }\n  .navbar-collapse .main-header .navbar-right {\n    margin: 7.5px -15px;\n  }\n  .main-header .navbar-right > li {\n    color: inherit;\n    border: 0;\n  }\n}\n.main-header .sidebar-toggle {\n  float: left;\n  background-color: transparent;\n  background-image: none;\n  padding: 15px 15px;\n  font-family: fontAwesome;\n}\n.main-header .sidebar-toggle:before {\n  content: \"\\f0c9\";\n}\n.main-header .sidebar-toggle:hover {\n  color: #fff;\n}\n.main-header .sidebar-toggle:focus,\n.main-header .sidebar-toggle:active {\n  background: transparent;\n}\n.main-header .sidebar-toggle .icon-bar {\n  display: none;\n}\n.main-header .navbar .nav > li.user > a > .fa,\n.main-header .navbar .nav > li.user > a > .glyphicon,\n.main-header .navbar .nav > li.user > a > .ion {\n  margin-right: 5px;\n}\n.main-header .navbar .nav > li > a > .label {\n  position: absolute;\n  top: 9px;\n  right: 7px;\n  text-align: center;\n  font-size: 9px;\n  padding: 2px 3px;\n  line-height: .9;\n}\n.main-header .logo {\n  -webkit-transition: width 0.3s ease-in-out;\n  -o-transition: width 0.3s ease-in-out;\n  transition: width 0.3s ease-in-out;\n  display: block;\n  float: left;\n  height: 50px;\n  font-size: 20px;\n  line-height: 50px;\n  text-align: center;\n  width: 230px;\n  font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n  padding: 0 15px;\n  font-weight: 300;\n  overflow: hidden;\n}\n.main-header .logo .logo-lg {\n  display: block;\n}\n.main-header .logo .logo-mini {\n  display: none;\n}\n.main-header .navbar-brand {\n  color: #fff;\n}\n.content-header {\n  position: relative;\n  padding: 15px 15px 0 15px;\n}\n.content-header > h1 {\n  margin: 0;\n  font-size: 24px;\n}\n.content-header > h1 > small {\n  font-size: 15px;\n  display: inline-block;\n  padding-left: 4px;\n  font-weight: 300;\n}\n.content-header > .breadcrumb {\n  float: right;\n  background: transparent;\n  margin-top: 0;\n  margin-bottom: 0;\n  font-size: 12px;\n  padding: 7px 5px;\n  position: absolute;\n  top: 15px;\n  right: 10px;\n  border-radius: 2px;\n}\n.content-header > .breadcrumb > li > a {\n  color: #444;\n  text-decoration: none;\n  display: inline-block;\n}\n.content-header > .breadcrumb > li > a > .fa,\n.content-header > .breadcrumb > li > a > .glyphicon,\n.content-header > .breadcrumb > li > a > .ion {\n  margin-right: 5px;\n}\n.content-header > .breadcrumb > li + li:before {\n  content: '>\\00a0';\n}\n@media (max-width: 991px) {\n  .content-header > .breadcrumb {\n    position: relative;\n    margin-top: 5px;\n    top: 0;\n    right: 0;\n    float: none;\n    background: #d2d6de;\n    padding-left: 10px;\n  }\n  .content-header > .breadcrumb li:before {\n    color: #97a0b3;\n  }\n}\n.navbar-toggle {\n  color: #fff;\n  border: 0;\n  margin: 0;\n  padding: 15px 15px;\n}\n@media (max-width: 991px) {\n  .navbar-custom-menu .navbar-nav > li {\n    float: left;\n  }\n  .navbar-custom-menu .navbar-nav {\n    margin: 0;\n    float: left;\n  }\n  .navbar-custom-menu .navbar-nav > li > a {\n    padding-top: 15px;\n    padding-bottom: 15px;\n    line-height: 20px;\n  }\n}\n@media (max-width: 767px) {\n  .main-header {\n    position: relative;\n  }\n  .main-header .logo,\n  .main-header .navbar {\n    width: 100%;\n    float: none;\n  }\n  .main-header .navbar {\n    margin: 0;\n  }\n  .main-header .navbar-custom-menu {\n    float: right;\n  }\n}\n@media (max-width: 991px) {\n  .navbar-collapse.pull-left {\n    float: none !important;\n  }\n  .navbar-collapse.pull-left + .navbar-custom-menu {\n    display: block;\n    position: absolute;\n    top: 0;\n    right: 40px;\n  }\n}\n/*\n * Component: Sidebar\n * ------------------\n */\n.main-sidebar {\n  position: absolute;\n  top: 0;\n  left: 0;\n  padding-top: 50px;\n  min-height: 100%;\n  width: 230px;\n  z-index: 810;\n  -webkit-transition: -webkit-transform 0.3s ease-in-out, width 0.3s ease-in-out;\n  -moz-transition: -moz-transform 0.3s ease-in-out, width 0.3s ease-in-out;\n  -o-transition: -o-transform 0.3s ease-in-out, width 0.3s ease-in-out;\n  transition: transform 0.3s ease-in-out, width 0.3s ease-in-out;\n}\n@media (max-width: 767px) {\n  .main-sidebar {\n    padding-top: 100px;\n  }\n}\n@media (max-width: 767px) {\n  .main-sidebar {\n    -webkit-transform: translate(-230px, 0);\n    -ms-transform: translate(-230px, 0);\n    -o-transform: translate(-230px, 0);\n    transform: translate(-230px, 0);\n  }\n}\n@media (min-width: 768px) {\n  .sidebar-collapse .main-sidebar {\n    -webkit-transform: translate(-230px, 0);\n    -ms-transform: translate(-230px, 0);\n    -o-transform: translate(-230px, 0);\n    transform: translate(-230px, 0);\n  }\n}\n@media (max-width: 767px) {\n  .sidebar-open .main-sidebar {\n    -webkit-transform: translate(0, 0);\n    -ms-transform: translate(0, 0);\n    -o-transform: translate(0, 0);\n    transform: translate(0, 0);\n  }\n}\n.sidebar {\n  padding-bottom: 10px;\n}\n.sidebar-form input:focus {\n  border-color: transparent;\n}\n.user-panel {\n  position: relative;\n  width: 100%;\n  padding: 10px;\n  overflow: hidden;\n}\n.user-panel:before,\n.user-panel:after {\n  content: \" \";\n  display: table;\n}\n.user-panel:after {\n  clear: both;\n}\n.user-panel > .image > img {\n  width: 100%;\n  max-width: 45px;\n  height: auto;\n}\n.user-panel > .info {\n  padding: 5px 5px 5px 15px;\n  line-height: 1;\n  position: absolute;\n  left: 55px;\n}\n.user-panel > .info > p {\n  font-weight: 600;\n  margin-bottom: 9px;\n}\n.user-panel > .info > a {\n  text-decoration: none;\n  padding-right: 5px;\n  margin-top: 3px;\n  font-size: 11px;\n}\n.user-panel > .info > a > .fa,\n.user-panel > .info > a > .ion,\n.user-panel > .info > a > .glyphicon {\n  margin-right: 3px;\n}\n.sidebar-menu {\n  list-style: none;\n  margin: 0;\n  padding: 0;\n}\n.sidebar-menu > li {\n  position: relative;\n  margin: 0;\n  padding: 0;\n}\n.sidebar-menu > li > a {\n  padding: 12px 5px 12px 15px;\n  display: block;\n}\n.sidebar-menu > li > a > .fa,\n.sidebar-menu > li > a > .glyphicon,\n.sidebar-menu > li > a > .ion {\n  width: 20px;\n}\n.sidebar-menu > li .label,\n.sidebar-menu > li .badge {\n  margin-right: 5px;\n}\n.sidebar-menu > li .badge {\n  margin-top: 3px;\n}\n.sidebar-menu li.header {\n  padding: 10px 25px 10px 15px;\n  font-size: 12px;\n}\n.sidebar-menu li > a > .fa-angle-left,\n.sidebar-menu li > a > .pull-right-container > .fa-angle-left {\n  width: auto;\n  height: auto;\n  padding: 0;\n  margin-right: 10px;\n  -webkit-transition: transform 0.5s ease;\n  -o-transition: transform 0.5s ease;\n  transition: transform 0.5s ease;\n}\n.sidebar-menu li > a > .fa-angle-left {\n  position: absolute;\n  top: 50%;\n  right: 10px;\n  margin-top: -8px;\n}\n.sidebar-menu .menu-open > a > .fa-angle-left,\n.sidebar-menu .menu-open > a > .pull-right-container > .fa-angle-left {\n  -webkit-transform: rotate(-90deg);\n  -ms-transform: rotate(-90deg);\n  -o-transform: rotate(-90deg);\n  transform: rotate(-90deg);\n}\n.sidebar-menu .active > .treeview-menu {\n  display: block;\n}\n/*\n * Component: Sidebar Mini\n */\n@media (min-width: 768px) {\n  .sidebar-mini.sidebar-collapse .content-wrapper,\n  .sidebar-mini.sidebar-collapse .right-side,\n  .sidebar-mini.sidebar-collapse .main-footer {\n    margin-left: 50px !important;\n    z-index: 840;\n  }\n  .sidebar-mini.sidebar-collapse .main-sidebar {\n    -webkit-transform: translate(0, 0);\n    -ms-transform: translate(0, 0);\n    -o-transform: translate(0, 0);\n    transform: translate(0, 0);\n    width: 50px !important;\n    z-index: 850;\n  }\n  .sidebar-mini.sidebar-collapse .sidebar-menu > li {\n    position: relative;\n  }\n  .sidebar-mini.sidebar-collapse .sidebar-menu > li > a {\n    margin-right: 0;\n  }\n  .sidebar-mini.sidebar-collapse .sidebar-menu > li > a > span {\n    border-top-right-radius: 4px;\n  }\n  .sidebar-mini.sidebar-collapse .sidebar-menu > li:not(.treeview) > a > span {\n    border-bottom-right-radius: 4px;\n  }\n  .sidebar-mini.sidebar-collapse .sidebar-menu > li > .treeview-menu {\n    padding-top: 5px;\n    padding-bottom: 5px;\n    border-bottom-right-radius: 4px;\n  }\n  .sidebar-mini.sidebar-collapse .main-sidebar .user-panel > .info,\n  .sidebar-mini.sidebar-collapse .sidebar-form,\n  .sidebar-mini.sidebar-collapse .sidebar-menu > li > a > span,\n  .sidebar-mini.sidebar-collapse .sidebar-menu > li > .treeview-menu,\n  .sidebar-mini.sidebar-collapse .sidebar-menu > li > a > .pull-right,\n  .sidebar-mini.sidebar-collapse .sidebar-menu li.header {\n    display: none !important;\n    -webkit-transform: translateZ(0);\n  }\n  .sidebar-mini.sidebar-collapse .main-header .logo {\n    width: 50px;\n  }\n  .sidebar-mini.sidebar-collapse .main-header .logo > .logo-mini {\n    display: block;\n    margin-left: -15px;\n    margin-right: -15px;\n    font-size: 18px;\n  }\n  .sidebar-mini.sidebar-collapse .main-header .logo > .logo-lg {\n    display: none;\n  }\n  .sidebar-mini.sidebar-collapse .main-header .navbar {\n    margin-left: 50px;\n  }\n}\n.sidebar-mini:not(.sidebar-mini-expand-feature).sidebar-collapse .sidebar-menu > li:hover > a > span:not(.pull-right),\n.sidebar-mini:not(.sidebar-mini-expand-feature).sidebar-collapse .sidebar-menu > li:hover > .treeview-menu {\n  display: block !important;\n  position: absolute;\n  width: 180px;\n  left: 50px;\n}\n.sidebar-mini:not(.sidebar-mini-expand-feature).sidebar-collapse .sidebar-menu > li:hover > a > span {\n  top: 0;\n  margin-left: -3px;\n  padding: 12px 5px 12px 20px;\n  background-color: inherit;\n}\n.sidebar-mini:not(.sidebar-mini-expand-feature).sidebar-collapse .sidebar-menu > li:hover > a > .pull-right-container {\n  position: relative !important;\n  float: right;\n  width: auto !important;\n  left: 180px !important;\n  top: -22px !important;\n  z-index: 900;\n}\n.sidebar-mini:not(.sidebar-mini-expand-feature).sidebar-collapse .sidebar-menu > li:hover > a > .pull-right-container > .label:not(:first-of-type) {\n  display: none;\n}\n.sidebar-mini:not(.sidebar-mini-expand-feature).sidebar-collapse .sidebar-menu > li:hover > .treeview-menu {\n  top: 44px;\n  margin-left: 0;\n}\n.sidebar-expanded-on-hover .main-footer,\n.sidebar-expanded-on-hover .content-wrapper {\n  margin-left: 50px;\n}\n.sidebar-expanded-on-hover .main-sidebar {\n  box-shadow: 3px 0 8px rgba(0, 0, 0, 0.125);\n}\n.sidebar-menu,\n.main-sidebar .user-panel,\n.sidebar-menu > li.header {\n  white-space: nowrap;\n  overflow: hidden;\n}\n.sidebar-menu:hover {\n  overflow: visible;\n}\n.sidebar-form,\n.sidebar-menu > li.header {\n  overflow: hidden;\n  text-overflow: clip;\n}\n.sidebar-menu li > a {\n  position: relative;\n}\n.sidebar-menu li > a > .pull-right-container {\n  position: absolute;\n  right: 10px;\n  top: 50%;\n  margin-top: -7px;\n}\n/*\n * Component: Control sidebar. By default, this is the right sidebar.\n */\n.control-sidebar-bg {\n  position: fixed;\n  z-index: 1000;\n  bottom: 0;\n}\n.control-sidebar-bg,\n.control-sidebar {\n  top: 0;\n  right: -230px;\n  width: 230px;\n  -webkit-transition: right 0.3s ease-in-out;\n  -o-transition: right 0.3s ease-in-out;\n  transition: right 0.3s ease-in-out;\n}\n.control-sidebar {\n  position: absolute;\n  padding-top: 50px;\n  z-index: 1010;\n}\n@media (max-width: 767px) {\n  .control-sidebar {\n    padding-top: 100px;\n  }\n}\n.control-sidebar > .tab-content {\n  padding: 10px 15px;\n}\n.control-sidebar.control-sidebar-open,\n.control-sidebar.control-sidebar-open + .control-sidebar-bg {\n  right: 0;\n}\n.control-sidebar-open .control-sidebar-bg,\n.control-sidebar-open .control-sidebar {\n  right: 0;\n}\n@media (min-width: 768px) {\n  .control-sidebar-open .content-wrapper,\n  .control-sidebar-open .right-side,\n  .control-sidebar-open .main-footer {\n    margin-right: 230px;\n  }\n}\n.fixed .control-sidebar {\n  position: fixed;\n  height: 100%;\n  overflow-y: auto;\n  padding-bottom: 50px;\n}\n.nav-tabs.control-sidebar-tabs > li:first-of-type > a,\n.nav-tabs.control-sidebar-tabs > li:first-of-type > a:hover,\n.nav-tabs.control-sidebar-tabs > li:first-of-type > a:focus {\n  border-left-width: 0;\n}\n.nav-tabs.control-sidebar-tabs > li > a {\n  border-radius: 0;\n}\n.nav-tabs.control-sidebar-tabs > li > a,\n.nav-tabs.control-sidebar-tabs > li > a:hover {\n  border-top: none;\n  border-right: none;\n  border-left: 1px solid transparent;\n  border-bottom: 1px solid transparent;\n}\n.nav-tabs.control-sidebar-tabs > li > a .icon {\n  font-size: 16px;\n}\n.nav-tabs.control-sidebar-tabs > li.active > a,\n.nav-tabs.control-sidebar-tabs > li.active > a:hover,\n.nav-tabs.control-sidebar-tabs > li.active > a:focus,\n.nav-tabs.control-sidebar-tabs > li.active > a:active {\n  border-top: none;\n  border-right: none;\n  border-bottom: none;\n}\n@media (max-width: 768px) {\n  .nav-tabs.control-sidebar-tabs {\n    display: table;\n  }\n  .nav-tabs.control-sidebar-tabs > li {\n    display: table-cell;\n  }\n}\n.control-sidebar-heading {\n  font-weight: 400;\n  font-size: 16px;\n  padding: 10px 0;\n  margin-bottom: 10px;\n}\n.control-sidebar-subheading {\n  display: block;\n  font-weight: 400;\n  font-size: 14px;\n}\n.control-sidebar-menu {\n  list-style: none;\n  padding: 0;\n  margin: 0 -15px;\n}\n.control-sidebar-menu > li > a {\n  display: block;\n  padding: 10px 15px;\n}\n.control-sidebar-menu > li > a:before,\n.control-sidebar-menu > li > a:after {\n  content: \" \";\n  display: table;\n}\n.control-sidebar-menu > li > a:after {\n  clear: both;\n}\n.control-sidebar-menu > li > a > .control-sidebar-subheading {\n  margin-top: 0;\n}\n.control-sidebar-menu .menu-icon {\n  float: left;\n  width: 35px;\n  height: 35px;\n  border-radius: 50%;\n  text-align: center;\n  line-height: 35px;\n}\n.control-sidebar-menu .menu-info {\n  margin-left: 45px;\n  margin-top: 3px;\n}\n.control-sidebar-menu .menu-info > .control-sidebar-subheading {\n  margin: 0;\n}\n.control-sidebar-menu .menu-info > p {\n  margin: 0;\n  font-size: 11px;\n}\n.control-sidebar-menu .progress {\n  margin: 0;\n}\n.control-sidebar-dark {\n  color: #b8c7ce;\n}\n.control-sidebar-dark,\n.control-sidebar-dark + .control-sidebar-bg {\n  background: #222d32;\n}\n.control-sidebar-dark .nav-tabs.control-sidebar-tabs {\n  border-bottom: #1c2529;\n}\n.control-sidebar-dark .nav-tabs.control-sidebar-tabs > li > a {\n  background: #181f23;\n  color: #b8c7ce;\n}\n.control-sidebar-dark .nav-tabs.control-sidebar-tabs > li > a,\n.control-sidebar-dark .nav-tabs.control-sidebar-tabs > li > a:hover,\n.control-sidebar-dark .nav-tabs.control-sidebar-tabs > li > a:focus {\n  border-left-color: #141a1d;\n  border-bottom-color: #141a1d;\n}\n.control-sidebar-dark .nav-tabs.control-sidebar-tabs > li > a:hover,\n.control-sidebar-dark .nav-tabs.control-sidebar-tabs > li > a:focus,\n.control-sidebar-dark .nav-tabs.control-sidebar-tabs > li > a:active {\n  background: #1c2529;\n}\n.control-sidebar-dark .nav-tabs.control-sidebar-tabs > li > a:hover {\n  color: #fff;\n}\n.control-sidebar-dark .nav-tabs.control-sidebar-tabs > li.active > a,\n.control-sidebar-dark .nav-tabs.control-sidebar-tabs > li.active > a:hover,\n.control-sidebar-dark .nav-tabs.control-sidebar-tabs > li.active > a:focus,\n.control-sidebar-dark .nav-tabs.control-sidebar-tabs > li.active > a:active {\n  background: #222d32;\n  color: #fff;\n}\n.control-sidebar-dark .control-sidebar-heading,\n.control-sidebar-dark .control-sidebar-subheading {\n  color: #fff;\n}\n.control-sidebar-dark .control-sidebar-menu > li > a:hover {\n  background: #1e282c;\n}\n.control-sidebar-dark .control-sidebar-menu > li > a .menu-info > p {\n  color: #b8c7ce;\n}\n.control-sidebar-light {\n  color: #5e5e5e;\n}\n.control-sidebar-light,\n.control-sidebar-light + .control-sidebar-bg {\n  background: #f9fafc;\n  border-left: 1px solid #d2d6de;\n}\n.control-sidebar-light .nav-tabs.control-sidebar-tabs {\n  border-bottom: #d2d6de;\n}\n.control-sidebar-light .nav-tabs.control-sidebar-tabs > li > a {\n  background: #e8ecf4;\n  color: #444444;\n}\n.control-sidebar-light .nav-tabs.control-sidebar-tabs > li > a,\n.control-sidebar-light .nav-tabs.control-sidebar-tabs > li > a:hover,\n.control-sidebar-light .nav-tabs.control-sidebar-tabs > li > a:focus {\n  border-left-color: #d2d6de;\n  border-bottom-color: #d2d6de;\n}\n.control-sidebar-light .nav-tabs.control-sidebar-tabs > li > a:hover,\n.control-sidebar-light .nav-tabs.control-sidebar-tabs > li > a:focus,\n.control-sidebar-light .nav-tabs.control-sidebar-tabs > li > a:active {\n  background: #eff1f7;\n}\n.control-sidebar-light .nav-tabs.control-sidebar-tabs > li.active > a,\n.control-sidebar-light .nav-tabs.control-sidebar-tabs > li.active > a:hover,\n.control-sidebar-light .nav-tabs.control-sidebar-tabs > li.active > a:focus,\n.control-sidebar-light .nav-tabs.control-sidebar-tabs > li.active > a:active {\n  background: #f9fafc;\n  color: #111;\n}\n.control-sidebar-light .control-sidebar-heading,\n.control-sidebar-light .control-sidebar-subheading {\n  color: #111;\n}\n.control-sidebar-light .control-sidebar-menu {\n  margin-left: -14px;\n}\n.control-sidebar-light .control-sidebar-menu > li > a:hover {\n  background: #f4f4f5;\n}\n.control-sidebar-light .control-sidebar-menu > li > a .menu-info > p {\n  color: #5e5e5e;\n}\n/*\n * Component: Dropdown menus\n * -------------------------\n */\n/*Dropdowns in general*/\n.dropdown-menu {\n  box-shadow: none;\n  border-color: #eee;\n}\n.dropdown-menu > li > a {\n  color: #777;\n}\n.dropdown-menu > li > a > .glyphicon,\n.dropdown-menu > li > a > .fa,\n.dropdown-menu > li > a > .ion {\n  margin-right: 10px;\n}\n.dropdown-menu > li > a:hover {\n  background-color: #e1e3e9;\n  color: #333;\n}\n.dropdown-menu > .divider {\n  background-color: #eee;\n}\n.navbar-nav > .notifications-menu > .dropdown-menu,\n.navbar-nav > .messages-menu > .dropdown-menu,\n.navbar-nav > .tasks-menu > .dropdown-menu {\n  width: 280px;\n  padding: 0 0 0 0;\n  margin: 0;\n  top: 100%;\n}\n.navbar-nav > .notifications-menu > .dropdown-menu > li,\n.navbar-nav > .messages-menu > .dropdown-menu > li,\n.navbar-nav > .tasks-menu > .dropdown-menu > li {\n  position: relative;\n}\n.navbar-nav > .notifications-menu > .dropdown-menu > li.header,\n.navbar-nav > .messages-menu > .dropdown-menu > li.header,\n.navbar-nav > .tasks-menu > .dropdown-menu > li.header {\n  border-top-left-radius: 4px;\n  border-top-right-radius: 4px;\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 0;\n  background-color: #ffffff;\n  padding: 7px 10px;\n  border-bottom: 1px solid #f4f4f4;\n  color: #444444;\n  font-size: 14px;\n}\n.navbar-nav > .notifications-menu > .dropdown-menu > li.footer > a,\n.navbar-nav > .messages-menu > .dropdown-menu > li.footer > a,\n.navbar-nav > .tasks-menu > .dropdown-menu > li.footer > a {\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 4px;\n  border-bottom-left-radius: 4px;\n  font-size: 12px;\n  background-color: #fff;\n  padding: 7px 10px;\n  border-bottom: 1px solid #eeeeee;\n  color: #444 !important;\n  text-align: center;\n}\n@media (max-width: 991px) {\n  .navbar-nav > .notifications-menu > .dropdown-menu > li.footer > a,\n  .navbar-nav > .messages-menu > .dropdown-menu > li.footer > a,\n  .navbar-nav > .tasks-menu > .dropdown-menu > li.footer > a {\n    background: #fff !important;\n    color: #444 !important;\n  }\n}\n.navbar-nav > .notifications-menu > .dropdown-menu > li.footer > a:hover,\n.navbar-nav > .messages-menu > .dropdown-menu > li.footer > a:hover,\n.navbar-nav > .tasks-menu > .dropdown-menu > li.footer > a:hover {\n  text-decoration: none;\n  font-weight: normal;\n}\n.navbar-nav > .notifications-menu > .dropdown-menu > li .menu,\n.navbar-nav > .messages-menu > .dropdown-menu > li .menu,\n.navbar-nav > .tasks-menu > .dropdown-menu > li .menu {\n  max-height: 200px;\n  margin: 0;\n  padding: 0;\n  list-style: none;\n  overflow-x: hidden;\n}\n.navbar-nav > .notifications-menu > .dropdown-menu > li .menu > li > a,\n.navbar-nav > .messages-menu > .dropdown-menu > li .menu > li > a,\n.navbar-nav > .tasks-menu > .dropdown-menu > li .menu > li > a {\n  display: block;\n  white-space: nowrap;\n  /* Prevent text from breaking */\n  border-bottom: 1px solid #f4f4f4;\n}\n.navbar-nav > .notifications-menu > .dropdown-menu > li .menu > li > a:hover,\n.navbar-nav > .messages-menu > .dropdown-menu > li .menu > li > a:hover,\n.navbar-nav > .tasks-menu > .dropdown-menu > li .menu > li > a:hover {\n  background: #f4f4f4;\n  text-decoration: none;\n}\n.navbar-nav > .notifications-menu > .dropdown-menu > li .menu > li > a {\n  color: #444444;\n  overflow: hidden;\n  text-overflow: ellipsis;\n  padding: 10px;\n}\n.navbar-nav > .notifications-menu > .dropdown-menu > li .menu > li > a > .glyphicon,\n.navbar-nav > .notifications-menu > .dropdown-menu > li .menu > li > a > .fa,\n.navbar-nav > .notifications-menu > .dropdown-menu > li .menu > li > a > .ion {\n  width: 20px;\n}\n.navbar-nav > .messages-menu > .dropdown-menu > li .menu > li > a {\n  margin: 0;\n  padding: 10px 10px;\n}\n.navbar-nav > .messages-menu > .dropdown-menu > li .menu > li > a > div > img {\n  margin: auto 10px auto auto;\n  width: 40px;\n  height: 40px;\n}\n.navbar-nav > .messages-menu > .dropdown-menu > li .menu > li > a > h4 {\n  padding: 0;\n  margin: 0 0 0 45px;\n  color: #444444;\n  font-size: 15px;\n  position: relative;\n}\n.navbar-nav > .messages-menu > .dropdown-menu > li .menu > li > a > h4 > small {\n  color: #999999;\n  font-size: 10px;\n  position: absolute;\n  top: 0;\n  right: 0;\n}\n.navbar-nav > .messages-menu > .dropdown-menu > li .menu > li > a > p {\n  margin: 0 0 0 45px;\n  font-size: 12px;\n  color: #888888;\n}\n.navbar-nav > .messages-menu > .dropdown-menu > li .menu > li > a:before,\n.navbar-nav > .messages-menu > .dropdown-menu > li .menu > li > a:after {\n  content: \" \";\n  display: table;\n}\n.navbar-nav > .messages-menu > .dropdown-menu > li .menu > li > a:after {\n  clear: both;\n}\n.navbar-nav > .tasks-menu > .dropdown-menu > li .menu > li > a {\n  padding: 10px;\n}\n.navbar-nav > .tasks-menu > .dropdown-menu > li .menu > li > a > h3 {\n  font-size: 14px;\n  padding: 0;\n  margin: 0 0 10px 0;\n  color: #666666;\n}\n.navbar-nav > .tasks-menu > .dropdown-menu > li .menu > li > a > .progress {\n  padding: 0;\n  margin: 0;\n}\n.navbar-nav > .user-menu > .dropdown-menu {\n  border-top-right-radius: 0;\n  border-top-left-radius: 0;\n  padding: 1px 0 0 0;\n  border-top-width: 0;\n  width: 280px;\n}\n.navbar-nav > .user-menu > .dropdown-menu,\n.navbar-nav > .user-menu > .dropdown-menu > .user-body {\n  border-bottom-right-radius: 4px;\n  border-bottom-left-radius: 4px;\n}\n.navbar-nav > .user-menu > .dropdown-menu > li.user-header {\n  height: 175px;\n  padding: 10px;\n  text-align: center;\n}\n.navbar-nav > .user-menu > .dropdown-menu > li.user-header > img {\n  z-index: 5;\n  height: 90px;\n  width: 90px;\n  border: 3px solid;\n  border-color: transparent;\n  border-color: rgba(255, 255, 255, 0.2);\n}\n.navbar-nav > .user-menu > .dropdown-menu > li.user-header > p {\n  z-index: 5;\n  color: #fff;\n  color: rgba(255, 255, 255, 0.8);\n  font-size: 17px;\n  margin-top: 10px;\n}\n.navbar-nav > .user-menu > .dropdown-menu > li.user-header > p > small {\n  display: block;\n  font-size: 12px;\n}\n.navbar-nav > .user-menu > .dropdown-menu > .user-body {\n  padding: 15px;\n  border-bottom: 1px solid #f4f4f4;\n  border-top: 1px solid #dddddd;\n}\n.navbar-nav > .user-menu > .dropdown-menu > .user-body:before,\n.navbar-nav > .user-menu > .dropdown-menu > .user-body:after {\n  content: \" \";\n  display: table;\n}\n.navbar-nav > .user-menu > .dropdown-menu > .user-body:after {\n  clear: both;\n}\n.navbar-nav > .user-menu > .dropdown-menu > .user-body a {\n  color: #444 !important;\n}\n@media (max-width: 991px) {\n  .navbar-nav > .user-menu > .dropdown-menu > .user-body a {\n    background: #fff !important;\n    color: #444 !important;\n  }\n}\n.navbar-nav > .user-menu > .dropdown-menu > .user-footer {\n  background-color: #f9f9f9;\n  padding: 10px;\n}\n.navbar-nav > .user-menu > .dropdown-menu > .user-footer:before,\n.navbar-nav > .user-menu > .dropdown-menu > .user-footer:after {\n  content: \" \";\n  display: table;\n}\n.navbar-nav > .user-menu > .dropdown-menu > .user-footer:after {\n  clear: both;\n}\n.navbar-nav > .user-menu > .dropdown-menu > .user-footer .btn-default {\n  color: #666666;\n}\n@media (max-width: 991px) {\n  .navbar-nav > .user-menu > .dropdown-menu > .user-footer .btn-default:hover {\n    background-color: #f9f9f9;\n  }\n}\n.navbar-nav > .user-menu .user-image {\n  float: left;\n  width: 25px;\n  height: 25px;\n  border-radius: 50%;\n  margin-right: 10px;\n  margin-top: -2px;\n}\n@media (max-width: 767px) {\n  .navbar-nav > .user-menu .user-image {\n    float: none;\n    margin-right: 0;\n    margin-top: -8px;\n    line-height: 10px;\n  }\n}\n/* Add fade animation to dropdown menus by appending\n the class .animated-dropdown-menu to the .dropdown-menu ul (or ol)*/\n.open:not(.dropup) > .animated-dropdown-menu {\n  backface-visibility: visible !important;\n  -webkit-animation: flipInX 0.7s both;\n  -o-animation: flipInX 0.7s both;\n  animation: flipInX 0.7s both;\n}\n@keyframes flipInX {\n  0% {\n    transform: perspective(400px) rotate3d(1, 0, 0, 90deg);\n    transition-timing-function: ease-in;\n    opacity: 0;\n  }\n  40% {\n    transform: perspective(400px) rotate3d(1, 0, 0, -20deg);\n    transition-timing-function: ease-in;\n  }\n  60% {\n    transform: perspective(400px) rotate3d(1, 0, 0, 10deg);\n    opacity: 1;\n  }\n  80% {\n    transform: perspective(400px) rotate3d(1, 0, 0, -5deg);\n  }\n  100% {\n    transform: perspective(400px);\n  }\n}\n@-webkit-keyframes flipInX {\n  0% {\n    -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg);\n    -webkit-transition-timing-function: ease-in;\n    opacity: 0;\n  }\n  40% {\n    -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg);\n    -webkit-transition-timing-function: ease-in;\n  }\n  60% {\n    -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 10deg);\n    opacity: 1;\n  }\n  80% {\n    -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -5deg);\n  }\n  100% {\n    -webkit-transform: perspective(400px);\n  }\n}\n/* Fix dropdown menu in navbars */\n.navbar-custom-menu > .navbar-nav > li {\n  position: relative;\n}\n.navbar-custom-menu > .navbar-nav > li > .dropdown-menu {\n  position: absolute;\n  right: 0;\n  left: auto;\n}\n@media (max-width: 991px) {\n  .navbar-custom-menu > .navbar-nav {\n    float: right;\n  }\n  .navbar-custom-menu > .navbar-nav > li {\n    position: static;\n  }\n  .navbar-custom-menu > .navbar-nav > li > .dropdown-menu {\n    position: absolute;\n    right: 5%;\n    left: auto;\n    border: 1px solid #ddd;\n    background: #fff;\n  }\n}\n/*\n * Component: Form\n * ---------------\n */\n.form-control {\n  /*border-radius: 0;*/\n  /*box-shadow: none;*/\n  /*border-color: #d2d6de;*/\n}\n.form-control:focus {\n  border-color: #3c8dbc;\n  box-shadow: none;\n}\n.form-control::-moz-placeholder,\n.form-control:-ms-input-placeholder,\n.form-control::-webkit-input-placeholder {\n  color: #bbb;\n  opacity: 1;\n}\n.form-control:not(select) {\n  -webkit-appearance: none;\n  -moz-appearance: none;\n  appearance: none;\n}\n.form-group.has-success label {\n  color: #00a65a;\n}\n.form-group.has-success .form-control,\n.form-group.has-success .input-group-addon {\n  border-color: #00a65a;\n  box-shadow: none;\n}\n.form-group.has-success .help-block {\n  color: #00a65a;\n}\n.form-group.has-warning label {\n  color: #f39c12;\n}\n.form-group.has-warning .form-control,\n.form-group.has-warning .input-group-addon {\n  border-color: #f39c12;\n  box-shadow: none;\n}\n.form-group.has-warning .help-block {\n  color: #f39c12;\n}\n.form-group.has-error label {\n  color: #dd4b39;\n}\n.form-group.has-error .form-control,\n.form-group.has-error .input-group-addon {\n  border-color: #dd4b39;\n  box-shadow: none;\n}\n.form-group.has-error .help-block {\n  color: #dd4b39;\n}\n/* Input group */\n.input-group .input-group-addon {\n  border-radius: 0;\n  border-color: #d2d6de;\n  background-color: #fff;\n}\n/* button groups */\n.btn-group-vertical .btn.btn-flat:first-of-type,\n.btn-group-vertical .btn.btn-flat:last-of-type {\n  border-radius: 0;\n}\n.icheck > label {\n  padding-left: 0;\n}\n/* support Font Awesome icons in form-control */\n.form-control-feedback.fa {\n  line-height: 34px;\n}\n.input-lg + .form-control-feedback.fa,\n.input-group-lg + .form-control-feedback.fa,\n.form-group-lg .form-control + .form-control-feedback.fa {\n  line-height: 46px;\n}\n.input-sm + .form-control-feedback.fa,\n.input-group-sm + .form-control-feedback.fa,\n.form-group-sm .form-control + .form-control-feedback.fa {\n  line-height: 30px;\n}\n/*\n * Component: Progress Bar\n * -----------------------\n */\n.progress,\n.progress > .progress-bar {\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n.progress,\n.progress > .progress-bar,\n.progress .progress-bar,\n.progress > .progress-bar .progress-bar {\n  border-radius: 1px;\n}\n/* size variation */\n.progress.sm,\n.progress-sm {\n  height: 10px;\n}\n.progress.sm,\n.progress-sm,\n.progress.sm .progress-bar,\n.progress-sm .progress-bar {\n  border-radius: 1px;\n}\n.progress.xs,\n.progress-xs {\n  height: 7px;\n}\n.progress.xs,\n.progress-xs,\n.progress.xs .progress-bar,\n.progress-xs .progress-bar {\n  border-radius: 1px;\n}\n.progress.xxs,\n.progress-xxs {\n  height: 3px;\n}\n.progress.xxs,\n.progress-xxs,\n.progress.xxs .progress-bar,\n.progress-xxs .progress-bar {\n  border-radius: 1px;\n}\n/* Vertical bars */\n.progress.vertical {\n  position: relative;\n  width: 30px;\n  height: 200px;\n  display: inline-block;\n  margin-right: 10px;\n}\n.progress.vertical > .progress-bar {\n  width: 100%;\n  position: absolute;\n  bottom: 0;\n}\n.progress.vertical.sm,\n.progress.vertical.progress-sm {\n  width: 20px;\n}\n.progress.vertical.xs,\n.progress.vertical.progress-xs {\n  width: 10px;\n}\n.progress.vertical.xxs,\n.progress.vertical.progress-xxs {\n  width: 3px;\n}\n.progress-group .progress-text {\n  font-weight: 600;\n}\n.progress-group .progress-number {\n  float: right;\n}\n/* Remove margins from progress bars when put in a table */\n.table tr > td .progress {\n  margin: 0;\n}\n.progress-bar-light-blue,\n.progress-bar-primary {\n  background-color: #3c8dbc;\n}\n.progress-striped .progress-bar-light-blue,\n.progress-striped .progress-bar-primary {\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.progress-bar-green,\n.progress-bar-success {\n  background-color: #00a65a;\n}\n.progress-striped .progress-bar-green,\n.progress-striped .progress-bar-success {\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.progress-bar-aqua,\n.progress-bar-info {\n  background-color: #00c0ef;\n}\n.progress-striped .progress-bar-aqua,\n.progress-striped .progress-bar-info {\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.progress-bar-yellow,\n.progress-bar-warning {\n  background-color: #f39c12;\n}\n.progress-striped .progress-bar-yellow,\n.progress-striped .progress-bar-warning {\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.progress-bar-red,\n.progress-bar-danger {\n  background-color: #dd4b39;\n}\n.progress-striped .progress-bar-red,\n.progress-striped .progress-bar-danger {\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n/*\n * Component: Small Box\n * --------------------\n */\n.small-box {\n  border-radius: 2px;\n  position: relative;\n  display: block;\n  margin-bottom: 20px;\n  box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1);\n}\n.small-box > .inner {\n  padding: 10px;\n}\n.small-box > .small-box-footer {\n  position: relative;\n  text-align: center;\n  padding: 3px 0;\n  color: #fff;\n  color: rgba(255, 255, 255, 0.8);\n  display: block;\n  z-index: 10;\n  background: rgba(0, 0, 0, 0.1);\n  text-decoration: none;\n}\n.small-box > .small-box-footer:hover {\n  color: #fff;\n  background: rgba(0, 0, 0, 0.15);\n}\n.small-box h3 {\n  font-size: 38px;\n  font-weight: bold;\n  margin: 0 0 10px 0;\n  white-space: nowrap;\n  padding: 0;\n}\n.small-box p {\n  font-size: 15px;\n}\n.small-box p > small {\n  display: block;\n  color: #f9f9f9;\n  font-size: 13px;\n  margin-top: 5px;\n}\n.small-box h3,\n.small-box p {\n  z-index: 5;\n}\n.small-box .icon {\n  -webkit-transition: all 0.3s linear;\n  -o-transition: all 0.3s linear;\n  transition: all 0.3s linear;\n  position: absolute;\n  top: -10px;\n  right: 10px;\n  z-index: 0;\n  font-size: 90px;\n  color: rgba(0, 0, 0, 0.15);\n}\n.small-box:hover {\n  text-decoration: none;\n  color: #f9f9f9;\n}\n.small-box:hover .icon {\n  font-size: 95px;\n}\n@media (max-width: 767px) {\n  .small-box {\n    text-align: center;\n  }\n  .small-box .icon {\n    display: none;\n  }\n  .small-box p {\n    font-size: 12px;\n  }\n}\n/*\n * Component: Box\n * --------------\n */\n.box {\n  position: relative;\n  border-radius: 3px;\n  background: #ffffff;\n  border-top: 3px solid #d2d6de;\n  margin-bottom: 20px;\n  width: 100%;\n  box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1);\n}\n.box.box-primary {\n  border-top-color: #3c8dbc;\n}\n.box.box-info {\n  border-top-color: #00c0ef;\n}\n.box.box-danger {\n  border-top-color: #dd4b39;\n}\n.box.box-warning {\n  border-top-color: #f39c12;\n}\n.box.box-success {\n  border-top-color: #00a65a;\n}\n.box.box-default {\n  border-top-color: #d2d6de;\n}\n.box.collapsed-box .box-body,\n.box.collapsed-box .box-footer {\n  display: none;\n}\n.box .nav-stacked > li {\n  border-bottom: 1px solid #f4f4f4;\n  margin: 0;\n}\n.box .nav-stacked > li:last-of-type {\n  border-bottom: none;\n}\n.box.height-control .box-body {\n  max-height: 300px;\n  overflow: auto;\n}\n.box .border-right {\n  border-right: 1px solid #f4f4f4;\n}\n.box .border-left {\n  border-left: 1px solid #f4f4f4;\n}\n.box.box-solid {\n  border-top: 0;\n}\n.box.box-solid > .box-header .btn.btn-default {\n  background: transparent;\n}\n.box.box-solid > .box-header .btn:hover,\n.box.box-solid > .box-header a:hover {\n  background: rgba(0, 0, 0, 0.1);\n}\n.box.box-solid.box-default {\n  border: 1px solid #d2d6de;\n}\n.box.box-solid.box-default > .box-header {\n  color: #444444;\n  background: #d2d6de;\n  background-color: #d2d6de;\n}\n.box.box-solid.box-default > .box-header a,\n.box.box-solid.box-default > .box-header .btn {\n  color: #444444;\n}\n.box.box-solid.box-primary {\n  border: 1px solid #3c8dbc;\n}\n.box.box-solid.box-primary > .box-header {\n  color: #ffffff;\n  background: #3c8dbc;\n  background-color: #3c8dbc;\n}\n.box.box-solid.box-primary > .box-header a,\n.box.box-solid.box-primary > .box-header .btn {\n  color: #ffffff;\n}\n.box.box-solid.box-info {\n  border: 1px solid #00c0ef;\n}\n.box.box-solid.box-info > .box-header {\n  color: #ffffff;\n  background: #00c0ef;\n  background-color: #00c0ef;\n}\n.box.box-solid.box-info > .box-header a,\n.box.box-solid.box-info > .box-header .btn {\n  color: #ffffff;\n}\n.box.box-solid.box-danger {\n  border: 1px solid #dd4b39;\n}\n.box.box-solid.box-danger > .box-header {\n  color: #ffffff;\n  background: #dd4b39;\n  background-color: #dd4b39;\n}\n.box.box-solid.box-danger > .box-header a,\n.box.box-solid.box-danger > .box-header .btn {\n  color: #ffffff;\n}\n.box.box-solid.box-warning {\n  border: 1px solid #f39c12;\n}\n.box.box-solid.box-warning > .box-header {\n  color: #ffffff;\n  background: #f39c12;\n  background-color: #f39c12;\n}\n.box.box-solid.box-warning > .box-header a,\n.box.box-solid.box-warning > .box-header .btn {\n  color: #ffffff;\n}\n.box.box-solid.box-success {\n  border: 1px solid #00a65a;\n}\n.box.box-solid.box-success > .box-header {\n  color: #ffffff;\n  background: #00a65a;\n  background-color: #00a65a;\n}\n.box.box-solid.box-success > .box-header a,\n.box.box-solid.box-success > .box-header .btn {\n  color: #ffffff;\n}\n.box.box-solid > .box-header > .box-tools .btn {\n  border: 0;\n  box-shadow: none;\n}\n.box.box-solid[class*='bg'] > .box-header {\n  color: #fff;\n}\n.box .box-group > .box {\n  margin-bottom: 5px;\n}\n.box .knob-label {\n  text-align: center;\n  color: #333;\n  font-weight: 100;\n  font-size: 12px;\n  margin-bottom: 0.3em;\n}\n.box > .overlay,\n.overlay-wrapper > .overlay,\n.box > .loading-img,\n.overlay-wrapper > .loading-img {\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n}\n.box .overlay,\n.overlay-wrapper .overlay {\n  z-index: 50;\n  background: rgba(255, 255, 255, 0.7);\n  border-radius: 3px;\n}\n.box .overlay > .fa,\n.overlay-wrapper .overlay > .fa {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n  margin-left: -15px;\n  margin-top: -15px;\n  color: #000;\n  font-size: 30px;\n}\n.box .overlay.dark,\n.overlay-wrapper .overlay.dark {\n  background: rgba(0, 0, 0, 0.5);\n}\n.box-header:before,\n.box-body:before,\n.box-footer:before,\n.box-header:after,\n.box-body:after,\n.box-footer:after {\n  content: \" \";\n  display: table;\n}\n.box-header:after,\n.box-body:after,\n.box-footer:after {\n  clear: both;\n}\n.box-header {\n  color: #444;\n  display: block;\n  padding: 10px;\n  position: relative;\n}\n.box-header.with-border {\n  border-bottom: 1px solid #f4f4f4;\n}\n.collapsed-box .box-header.with-border {\n  border-bottom: none;\n}\n.box-header > .fa,\n.box-header > .glyphicon,\n.box-header > .ion,\n.box-header .box-title {\n  display: inline-block;\n  font-size: 18px;\n  margin: 0;\n  line-height: 1;\n}\n.box-header > .fa,\n.box-header > .glyphicon,\n.box-header > .ion {\n  margin-right: 5px;\n}\n.box-header > .box-tools {\n  position: absolute;\n  right: 10px;\n  top: 5px;\n}\n.box-header > .box-tools [data-toggle=\"tooltip\"] {\n  position: relative;\n}\n.box-header > .box-tools.pull-right .dropdown-menu {\n  right: 0;\n  left: auto;\n}\n.box-header > .box-tools .dropdown-menu > li > a {\n  color: #444!important;\n}\n.btn-box-tool {\n  padding: 5px;\n  font-size: 12px;\n  background: transparent;\n  color: #97a0b3;\n}\n.open .btn-box-tool,\n.btn-box-tool:hover {\n  color: #606c84;\n}\n.btn-box-tool.btn:active {\n  box-shadow: none;\n}\n.box-body {\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 3px;\n  border-bottom-left-radius: 3px;\n  padding: 10px;\n}\n.no-header .box-body {\n  border-top-right-radius: 3px;\n  border-top-left-radius: 3px;\n}\n.box-body > .table {\n  margin-bottom: 0;\n}\n.box-body .fc {\n  margin-top: 5px;\n}\n.box-body .full-width-chart {\n  margin: -19px;\n}\n.box-body.no-padding .full-width-chart {\n  margin: -9px;\n}\n.box-body .box-pane {\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 3px;\n}\n.box-body .box-pane-right {\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 3px;\n  border-bottom-left-radius: 0;\n}\n.box-footer {\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 3px;\n  border-bottom-left-radius: 3px;\n  border-top: 1px solid #f4f4f4;\n  padding: 10px;\n  background-color: #ffffff;\n}\n.chart-legend {\n  margin: 10px 0;\n}\n@media (max-width: 991px) {\n  .chart-legend > li {\n    float: left;\n    margin-right: 10px;\n  }\n}\n.box-comments {\n  background: #f7f7f7;\n}\n.box-comments .box-comment {\n  padding: 8px 0;\n  border-bottom: 1px solid #eee;\n}\n.box-comments .box-comment:before,\n.box-comments .box-comment:after {\n  content: \" \";\n  display: table;\n}\n.box-comments .box-comment:after {\n  clear: both;\n}\n.box-comments .box-comment:last-of-type {\n  border-bottom: 0;\n}\n.box-comments .box-comment:first-of-type {\n  padding-top: 0;\n}\n.box-comments .box-comment img {\n  float: left;\n}\n.box-comments .comment-text {\n  margin-left: 40px;\n  color: #555;\n}\n.box-comments .username {\n  color: #444;\n  display: block;\n  font-weight: 600;\n}\n.box-comments .text-muted {\n  font-weight: 400;\n  font-size: 12px;\n}\n/* Widget: TODO LIST */\n.todo-list {\n  margin: 0;\n  padding: 0;\n  list-style: none;\n  overflow: auto;\n}\n.todo-list > li {\n  border-radius: 2px;\n  padding: 10px;\n  background: #f4f4f4;\n  margin-bottom: 2px;\n  border-left: 2px solid #e6e7e8;\n  color: #444;\n}\n.todo-list > li:last-of-type {\n  margin-bottom: 0;\n}\n.todo-list > li > input[type='checkbox'] {\n  margin: 0 10px 0 5px;\n}\n.todo-list > li .text {\n  display: inline-block;\n  margin-left: 5px;\n  font-weight: 600;\n}\n.todo-list > li .label {\n  margin-left: 10px;\n  font-size: 9px;\n}\n.todo-list > li .tools {\n  display: none;\n  float: right;\n  color: #dd4b39;\n}\n.todo-list > li .tools > .fa,\n.todo-list > li .tools > .glyphicon,\n.todo-list > li .tools > .ion {\n  margin-right: 5px;\n  cursor: pointer;\n}\n.todo-list > li:hover .tools {\n  display: inline-block;\n}\n.todo-list > li.done {\n  color: #999;\n}\n.todo-list > li.done .text {\n  text-decoration: line-through;\n  font-weight: 500;\n}\n.todo-list > li.done .label {\n  background: #d2d6de !important;\n}\n.todo-list .danger {\n  border-left-color: #dd4b39;\n}\n.todo-list .warning {\n  border-left-color: #f39c12;\n}\n.todo-list .info {\n  border-left-color: #00c0ef;\n}\n.todo-list .success {\n  border-left-color: #00a65a;\n}\n.todo-list .primary {\n  border-left-color: #3c8dbc;\n}\n.todo-list .handle {\n  display: inline-block;\n  cursor: move;\n  margin: 0 5px;\n}\n/* Chat widget (DEPRECATED - this will be removed in the next major release. Use Direct Chat instead)*/\n.chat {\n  padding: 5px 20px 5px 10px;\n}\n.chat .item {\n  margin-bottom: 10px;\n}\n.chat .item:before,\n.chat .item:after {\n  content: \" \";\n  display: table;\n}\n.chat .item:after {\n  clear: both;\n}\n.chat .item > img {\n  width: 40px;\n  height: 40px;\n  border: 2px solid transparent;\n  border-radius: 50%;\n}\n.chat .item > .online {\n  border: 2px solid #00a65a;\n}\n.chat .item > .offline {\n  border: 2px solid #dd4b39;\n}\n.chat .item > .message {\n  margin-left: 55px;\n  margin-top: -40px;\n}\n.chat .item > .message > .name {\n  display: block;\n  font-weight: 600;\n}\n.chat .item > .attachment {\n  border-radius: 3px;\n  background: #f4f4f4;\n  margin-left: 65px;\n  margin-right: 15px;\n  padding: 10px;\n}\n.chat .item > .attachment > h4 {\n  margin: 0 0 5px 0;\n  font-weight: 600;\n  font-size: 14px;\n}\n.chat .item > .attachment > p,\n.chat .item > .attachment > .filename {\n  font-weight: 600;\n  font-size: 13px;\n  font-style: italic;\n  margin: 0;\n}\n.chat .item > .attachment:before,\n.chat .item > .attachment:after {\n  content: \" \";\n  display: table;\n}\n.chat .item > .attachment:after {\n  clear: both;\n}\n.box-input {\n  max-width: 200px;\n}\n.modal .panel-body {\n  color: #444;\n}\n/*\n * Component: Info Box\n * -------------------\n */\n.info-box {\n  display: block;\n  min-height: 90px;\n  background: #fff;\n  width: 100%;\n  box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1);\n  border-radius: 2px;\n  margin-bottom: 15px;\n}\n.info-box small {\n  font-size: 14px;\n}\n.info-box .progress {\n  background: rgba(0, 0, 0, 0.2);\n  margin: 5px -10px 5px -10px;\n  height: 2px;\n}\n.info-box .progress,\n.info-box .progress .progress-bar {\n  border-radius: 0;\n}\n.info-box .progress .progress-bar {\n  background: #fff;\n}\n.info-box-icon {\n  border-top-left-radius: 2px;\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 2px;\n  display: block;\n  float: left;\n  height: 90px;\n  width: 90px;\n  text-align: center;\n  font-size: 45px;\n  line-height: 90px;\n  background: rgba(0, 0, 0, 0.2);\n}\n.info-box-icon > img {\n  max-width: 100%;\n}\n.info-box-content {\n  padding: 5px 10px;\n  margin-left: 90px;\n}\n.info-box-number {\n  display: block;\n  font-weight: bold;\n  font-size: 18px;\n}\n.progress-description,\n.info-box-text {\n  display: block;\n  font-size: 14px;\n  white-space: nowrap;\n  overflow: hidden;\n  text-overflow: ellipsis;\n}\n.info-box-text {\n  text-transform: uppercase;\n}\n.info-box-more {\n  display: block;\n}\n.progress-description {\n  margin: 0;\n}\n/*\n * Component: Timeline\n * -------------------\n */\n.timeline {\n  position: relative;\n  margin: 0 0 30px 0;\n  padding: 0;\n  list-style: none;\n}\n.timeline:before {\n  content: '';\n  position: absolute;\n  top: 0;\n  bottom: 0;\n  width: 4px;\n  background: #ddd;\n  left: 31px;\n  margin: 0;\n  border-radius: 2px;\n}\n.timeline > li {\n  position: relative;\n  margin-right: 10px;\n  margin-bottom: 15px;\n}\n.timeline > li:before,\n.timeline > li:after {\n  content: \" \";\n  display: table;\n}\n.timeline > li:after {\n  clear: both;\n}\n.timeline > li > .timeline-item {\n  -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1);\n  box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1);\n  border-radius: 3px;\n  margin-top: 0;\n  background: #fff;\n  color: #444;\n  margin-left: 60px;\n  margin-right: 15px;\n  padding: 0;\n  position: relative;\n}\n.timeline > li > .timeline-item > .time {\n  color: #999;\n  float: right;\n  padding: 10px;\n  font-size: 12px;\n}\n.timeline > li > .timeline-item > .timeline-header {\n  margin: 0;\n  color: #555;\n  border-bottom: 1px solid #f4f4f4;\n  padding: 10px;\n  font-size: 16px;\n  line-height: 1.1;\n}\n.timeline > li > .timeline-item > .timeline-header > a {\n  font-weight: 600;\n}\n.timeline > li > .timeline-item > .timeline-body,\n.timeline > li > .timeline-item > .timeline-footer {\n  padding: 10px;\n}\n.timeline > li > .fa,\n.timeline > li > .glyphicon,\n.timeline > li > .ion {\n  width: 30px;\n  height: 30px;\n  font-size: 15px;\n  line-height: 30px;\n  position: absolute;\n  color: #666;\n  background: #d2d6de;\n  border-radius: 50%;\n  text-align: center;\n  left: 18px;\n  top: 0;\n}\n.timeline > .time-label > span {\n  font-weight: 600;\n  padding: 5px;\n  display: inline-block;\n  background-color: #fff;\n  border-radius: 4px;\n}\n.timeline-inverse > li > .timeline-item {\n  background: #f0f0f0;\n  border: 1px solid #ddd;\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n.timeline-inverse > li > .timeline-item > .timeline-header {\n  border-bottom-color: #ddd;\n}\n/*\n * Component: Button\n * -----------------\n */\n.btn {\n  border-radius: 3px;\n  -webkit-box-shadow: none;\n  box-shadow: none;\n  border: 1px solid transparent;\n}\n.btn.uppercase {\n  text-transform: uppercase;\n}\n.btn.btn-flat {\n  border-radius: 0;\n  -webkit-box-shadow: none;\n  -moz-box-shadow: none;\n  box-shadow: none;\n  border-width: 1px;\n}\n.btn:active {\n  -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n  -moz-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n  box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n}\n.btn:focus {\n  outline: none;\n}\n.btn.btn-file {\n  position: relative;\n  overflow: hidden;\n}\n.btn.btn-file > input[type='file'] {\n  position: absolute;\n  top: 0;\n  right: 0;\n  min-width: 100%;\n  min-height: 100%;\n  font-size: 100px;\n  text-align: right;\n  opacity: 0;\n  filter: alpha(opacity=0);\n  outline: none;\n  background: white;\n  cursor: inherit;\n  display: block;\n}\n.btn-default {\n  background-color: #f4f4f4;\n  color: #444;\n  border-color: #ddd;\n}\n.btn-default:hover,\n.btn-default:active,\n.btn-default.hover {\n  background-color: #e7e7e7;\n}\n.btn-primary {\n  background-color: #3c8dbc;\n  border-color: #367fa9;\n}\n.btn-primary:hover,\n.btn-primary:active,\n.btn-primary.hover {\n  background-color: #367fa9;\n}\n.btn-success {\n  background-color: #00a65a;\n  border-color: #008d4c;\n}\n.btn-success:hover,\n.btn-success:active,\n.btn-success.hover {\n  background-color: #008d4c;\n}\n.btn-info {\n  background-color: #00c0ef;\n  border-color: #00acd6;\n}\n.btn-info:hover,\n.btn-info:active,\n.btn-info.hover {\n  background-color: #00acd6;\n}\n.btn-danger {\n  background-color: #dd4b39;\n  border-color: #d73925;\n}\n.btn-danger:hover,\n.btn-danger:active,\n.btn-danger.hover {\n  background-color: #d73925;\n}\n.btn-warning {\n  background-color: #f39c12;\n  border-color: #e08e0b;\n}\n.btn-warning:hover,\n.btn-warning:active,\n.btn-warning.hover {\n  background-color: #e08e0b;\n}\n.btn-outline {\n  border: 1px solid #fff;\n  background: transparent;\n  color: #fff;\n}\n.btn-outline:hover,\n.btn-outline:focus,\n.btn-outline:active {\n  color: rgba(255, 255, 255, 0.7);\n  border-color: rgba(255, 255, 255, 0.7);\n}\n.btn-link {\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n.btn[class*='bg-']:hover {\n  -webkit-box-shadow: inset 0 0 100px rgba(0, 0, 0, 0.2);\n  box-shadow: inset 0 0 100px rgba(0, 0, 0, 0.2);\n}\n.btn-app {\n  border-radius: 3px;\n  position: relative;\n  padding: 15px 5px;\n  margin: 0 0 10px 10px;\n  min-width: 80px;\n  height: 60px;\n  text-align: center;\n  color: #666;\n  border: 1px solid #ddd;\n  background-color: #f4f4f4;\n  font-size: 12px;\n}\n.btn-app > .fa,\n.btn-app > .glyphicon,\n.btn-app > .ion {\n  font-size: 20px;\n  display: block;\n}\n.btn-app:hover {\n  background: #f4f4f4;\n  color: #444;\n  border-color: #aaa;\n}\n.btn-app:active,\n.btn-app:focus {\n  -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n  -moz-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n  box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n}\n.btn-app > .badge {\n  position: absolute;\n  top: -3px;\n  right: -10px;\n  font-size: 10px;\n  font-weight: 400;\n}\n/*\n * Component: Callout\n * ------------------\n */\n.callout {\n  border-radius: 3px;\n  margin: 0 0 20px 0;\n  padding: 15px 30px 15px 15px;\n  border-left: 5px solid #eee;\n}\n.callout a {\n  color: #fff;\n  text-decoration: underline;\n}\n.callout a:hover {\n  color: #eee;\n}\n.callout h4 {\n  margin-top: 0;\n  font-weight: 600;\n}\n.callout p:last-child {\n  margin-bottom: 0;\n}\n.callout code,\n.callout .highlight {\n  background-color: #fff;\n}\n.callout.callout-danger {\n  border-color: #c23321;\n}\n.callout.callout-warning {\n  border-color: #c87f0a;\n}\n.callout.callout-info {\n  border-color: #0097bc;\n}\n.callout.callout-success {\n  border-color: #00733e;\n}\n/*\n * Component: alert\n * ----------------\n */\n.alert {\n  border-radius: 3px;\n}\n.alert h4 {\n  font-weight: 600;\n}\n.alert .icon {\n  margin-right: 10px;\n}\n.alert .close {\n  color: #000;\n  opacity: 0.2;\n  filter: alpha(opacity=20);\n}\n.alert .close:hover {\n  opacity: 0.5;\n  filter: alpha(opacity=50);\n}\n.alert a {\n  color: #fff;\n  text-decoration: underline;\n}\n.alert-success {\n  border-color: #008d4c;\n}\n.alert-danger,\n.alert-error {\n  border-color: #d73925;\n}\n.alert-warning {\n  border-color: #e08e0b;\n}\n.alert-info {\n  border-color: #00acd6;\n}\n/*\n * Component: Nav\n * --------------\n */\n.nav > li > a:hover,\n.nav > li > a:active,\n.nav > li > a:focus {\n  color: #444;\n  background: #f7f7f7;\n}\n/* NAV PILLS */\n.nav-pills > li > a {\n  border-radius: 0;\n  border-top: 3px solid transparent;\n  color: #444;\n}\n.nav-pills > li > a > .fa,\n.nav-pills > li > a > .glyphicon,\n.nav-pills > li > a > .ion {\n  margin-right: 5px;\n}\n.nav-pills > li.active > a,\n.nav-pills > li.active > a:hover,\n.nav-pills > li.active > a:focus {\n  border-top-color: #3c8dbc;\n}\n.nav-pills > li.active > a {\n  font-weight: 600;\n}\n/* NAV STACKED */\n.nav-stacked > li > a {\n  border-radius: 0;\n  border-top: 0;\n  border-left: 3px solid transparent;\n  color: #444;\n}\n.nav-stacked > li.active > a,\n.nav-stacked > li.active > a:hover {\n  background: transparent;\n  color: #444;\n  border-top: 0;\n  border-left-color: #3c8dbc;\n}\n.nav-stacked > li.header {\n  border-bottom: 1px solid #ddd;\n  color: #777;\n  margin-bottom: 10px;\n  padding: 5px 10px;\n  text-transform: uppercase;\n}\n/* NAV TABS */\n.nav-tabs-custom {\n  margin-bottom: 20px;\n  background: #fff;\n  box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1);\n  border-radius: 3px;\n}\n.nav-tabs-custom > .nav-tabs {\n  margin: 0;\n  border-bottom-color: #f4f4f4;\n  border-top-right-radius: 3px;\n  border-top-left-radius: 3px;\n}\n.nav-tabs-custom > .nav-tabs > li {\n  border-top: 3px solid transparent;\n  margin-bottom: -2px;\n  margin-right: 5px;\n}\n.nav-tabs-custom > .nav-tabs > li.disabled > a {\n  color: #777;\n}\n.nav-tabs-custom > .nav-tabs > li > a {\n  color: #444;\n  border-radius: 0;\n}\n.nav-tabs-custom > .nav-tabs > li > a.text-muted {\n  color: #999;\n}\n.nav-tabs-custom > .nav-tabs > li > a,\n.nav-tabs-custom > .nav-tabs > li > a:hover {\n  background: transparent;\n  margin: 0;\n}\n.nav-tabs-custom > .nav-tabs > li > a:hover {\n  color: #999;\n}\n.nav-tabs-custom > .nav-tabs > li:not(.active) > a:hover,\n.nav-tabs-custom > .nav-tabs > li:not(.active) > a:focus,\n.nav-tabs-custom > .nav-tabs > li:not(.active) > a:active {\n  border-color: transparent;\n}\n.nav-tabs-custom > .nav-tabs > li.active {\n  border-top-color: #3c8dbc;\n}\n.nav-tabs-custom > .nav-tabs > li.active > a,\n.nav-tabs-custom > .nav-tabs > li.active:hover > a {\n  background-color: #fff;\n  color: #444;\n}\n.nav-tabs-custom > .nav-tabs > li.active > a {\n  border-top-color: transparent;\n  border-left-color: #f4f4f4;\n  border-right-color: #f4f4f4;\n}\n.nav-tabs-custom > .nav-tabs > li:first-of-type {\n  margin-left: 0;\n}\n.nav-tabs-custom > .nav-tabs > li:first-of-type.active > a {\n  border-left-color: transparent;\n}\n.nav-tabs-custom > .nav-tabs.pull-right {\n  float: none !important;\n}\n.nav-tabs-custom > .nav-tabs.pull-right > li {\n  float: right;\n}\n.nav-tabs-custom > .nav-tabs.pull-right > li:first-of-type {\n  margin-right: 0;\n}\n.nav-tabs-custom > .nav-tabs.pull-right > li:first-of-type > a {\n  border-left-width: 1px;\n}\n.nav-tabs-custom > .nav-tabs.pull-right > li:first-of-type.active > a {\n  border-left-color: #f4f4f4;\n  border-right-color: transparent;\n}\n.nav-tabs-custom > .nav-tabs > li.header {\n  line-height: 35px;\n  padding: 0 10px;\n  font-size: 20px;\n  color: #444;\n}\n.nav-tabs-custom > .nav-tabs > li.header > .fa,\n.nav-tabs-custom > .nav-tabs > li.header > .glyphicon,\n.nav-tabs-custom > .nav-tabs > li.header > .ion {\n  margin-right: 5px;\n}\n.nav-tabs-custom > .tab-content {\n  background: #fff;\n  padding: 10px;\n  border-bottom-right-radius: 3px;\n  border-bottom-left-radius: 3px;\n}\n.nav-tabs-custom .dropdown.open > a:active,\n.nav-tabs-custom .dropdown.open > a:focus {\n  background: transparent;\n  color: #999;\n}\n.nav-tabs-custom.tab-primary > .nav-tabs > li.active {\n  border-top-color: #3c8dbc;\n}\n.nav-tabs-custom.tab-info > .nav-tabs > li.active {\n  border-top-color: #00c0ef;\n}\n.nav-tabs-custom.tab-danger > .nav-tabs > li.active {\n  border-top-color: #dd4b39;\n}\n.nav-tabs-custom.tab-warning > .nav-tabs > li.active {\n  border-top-color: #f39c12;\n}\n.nav-tabs-custom.tab-success > .nav-tabs > li.active {\n  border-top-color: #00a65a;\n}\n.nav-tabs-custom.tab-default > .nav-tabs > li.active {\n  border-top-color: #d2d6de;\n}\n/* PAGINATION */\n.pagination > li > a {\n  background: #fafafa;\n  color: #666;\n}\n.pagination.pagination-flat > li > a {\n  border-radius: 0 !important;\n}\n/*\n * Component: Products List\n * ------------------------\n */\n.products-list {\n  list-style: none;\n  margin: 0;\n  padding: 0;\n}\n.products-list > .item {\n  border-radius: 3px;\n  -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1);\n  box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1);\n  padding: 10px 0;\n  background: #fff;\n}\n.products-list > .item:before,\n.products-list > .item:after {\n  content: \" \";\n  display: table;\n}\n.products-list > .item:after {\n  clear: both;\n}\n.products-list .product-img {\n  float: left;\n}\n.products-list .product-img img {\n  width: 50px;\n  height: 50px;\n}\n.products-list .product-info {\n  margin-left: 60px;\n}\n.products-list .product-title {\n  font-weight: 600;\n}\n.products-list .product-description {\n  display: block;\n  color: #999;\n  overflow: hidden;\n  white-space: nowrap;\n  text-overflow: ellipsis;\n}\n.product-list-in-box > .item {\n  -webkit-box-shadow: none;\n  box-shadow: none;\n  border-radius: 0;\n  border-bottom: 1px solid #f4f4f4;\n}\n.product-list-in-box > .item:last-of-type {\n  border-bottom-width: 0;\n}\n/*\n * Component: Table\n * ----------------\n */\n.table > thead > tr > th,\n.table > tbody > tr > th,\n.table > tfoot > tr > th,\n.table > thead > tr > td,\n.table > tbody > tr > td,\n.table > tfoot > tr > td {\n  border-top: 1px solid #f4f4f4;\n}\n.table > thead > tr > th {\n  border-bottom: 2px solid #f4f4f4;\n}\n.table tr td .progress {\n  margin-top: 5px;\n}\n.table-bordered {\n  border: 1px solid #f4f4f4;\n}\n.table-bordered > thead > tr > th,\n.table-bordered > tbody > tr > th,\n.table-bordered > tfoot > tr > th,\n.table-bordered > thead > tr > td,\n.table-bordered > tbody > tr > td,\n.table-bordered > tfoot > tr > td {\n  border: 1px solid #f4f4f4;\n}\n.table-bordered > thead > tr > th,\n.table-bordered > thead > tr > td {\n  border-bottom-width: 2px;\n}\n.table.no-border,\n.table.no-border td,\n.table.no-border th {\n  border: 0;\n}\n/* .text-center in tables */\ntable.text-center,\ntable.text-center td,\ntable.text-center th {\n  text-align: center;\n}\n.table.align th {\n  text-align: left;\n}\n.table.align td {\n  text-align: right;\n}\n/*\n * Component: Label\n * ----------------\n */\n.label-default {\n  background-color: #d2d6de;\n  color: #444;\n}\n/*\n * Component: Direct Chat\n * ----------------------\n */\n.direct-chat .box-body {\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 0;\n  position: relative;\n  overflow-x: hidden;\n  padding: 0;\n}\n.direct-chat.chat-pane-open .direct-chat-contacts {\n  -webkit-transform: translate(0, 0);\n  -ms-transform: translate(0, 0);\n  -o-transform: translate(0, 0);\n  transform: translate(0, 0);\n}\n.direct-chat-messages {\n  -webkit-transform: translate(0, 0);\n  -ms-transform: translate(0, 0);\n  -o-transform: translate(0, 0);\n  transform: translate(0, 0);\n  padding: 10px;\n  height: 250px;\n  overflow: auto;\n}\n.direct-chat-msg,\n.direct-chat-text {\n  display: block;\n}\n.direct-chat-msg {\n  margin-bottom: 10px;\n}\n.direct-chat-msg:before,\n.direct-chat-msg:after {\n  content: \" \";\n  display: table;\n}\n.direct-chat-msg:after {\n  clear: both;\n}\n.direct-chat-messages,\n.direct-chat-contacts {\n  -webkit-transition: -webkit-transform 0.5s ease-in-out;\n  -moz-transition: -moz-transform 0.5s ease-in-out;\n  -o-transition: -o-transform 0.5s ease-in-out;\n  transition: transform 0.5s ease-in-out;\n}\n.direct-chat-text {\n  border-radius: 5px;\n  position: relative;\n  padding: 5px 10px;\n  background: #d2d6de;\n  border: 1px solid #d2d6de;\n  margin: 5px 0 0 50px;\n  color: #444444;\n}\n.direct-chat-text:after,\n.direct-chat-text:before {\n  position: absolute;\n  right: 100%;\n  top: 15px;\n  border: solid transparent;\n  border-right-color: #d2d6de;\n  content: ' ';\n  height: 0;\n  width: 0;\n  pointer-events: none;\n}\n.direct-chat-text:after {\n  border-width: 5px;\n  margin-top: -5px;\n}\n.direct-chat-text:before {\n  border-width: 6px;\n  margin-top: -6px;\n}\n.right .direct-chat-text {\n  margin-right: 50px;\n  margin-left: 0;\n}\n.right .direct-chat-text:after,\n.right .direct-chat-text:before {\n  right: auto;\n  left: 100%;\n  border-right-color: transparent;\n  border-left-color: #d2d6de;\n}\n.direct-chat-img {\n  border-radius: 50%;\n  float: left;\n  width: 40px;\n  height: 40px;\n}\n.right .direct-chat-img {\n  float: right;\n}\n.direct-chat-info {\n  display: block;\n  margin-bottom: 2px;\n  font-size: 12px;\n}\n.direct-chat-name {\n  font-weight: 600;\n}\n.direct-chat-timestamp {\n  color: #999;\n}\n.direct-chat-contacts-open .direct-chat-contacts {\n  -webkit-transform: translate(0, 0);\n  -ms-transform: translate(0, 0);\n  -o-transform: translate(0, 0);\n  transform: translate(0, 0);\n}\n.direct-chat-contacts {\n  -webkit-transform: translate(101%, 0);\n  -ms-transform: translate(101%, 0);\n  -o-transform: translate(101%, 0);\n  transform: translate(101%, 0);\n  position: absolute;\n  top: 0;\n  bottom: 0;\n  height: 250px;\n  width: 100%;\n  background: #222d32;\n  color: #fff;\n  overflow: auto;\n}\n.contacts-list > li {\n  border-bottom: 1px solid rgba(0, 0, 0, 0.2);\n  padding: 10px;\n  margin: 0;\n}\n.contacts-list > li:before,\n.contacts-list > li:after {\n  content: \" \";\n  display: table;\n}\n.contacts-list > li:after {\n  clear: both;\n}\n.contacts-list > li:last-of-type {\n  border-bottom: none;\n}\n.contacts-list-img {\n  border-radius: 50%;\n  width: 40px;\n  float: left;\n}\n.contacts-list-info {\n  margin-left: 45px;\n  color: #fff;\n}\n.contacts-list-name,\n.contacts-list-status {\n  display: block;\n}\n.contacts-list-name {\n  font-weight: 600;\n}\n.contacts-list-status {\n  font-size: 12px;\n}\n.contacts-list-date {\n  color: #aaa;\n  font-weight: normal;\n}\n.contacts-list-msg {\n  color: #999;\n}\n.direct-chat-danger .right > .direct-chat-text {\n  background: #dd4b39;\n  border-color: #dd4b39;\n  color: #ffffff;\n}\n.direct-chat-danger .right > .direct-chat-text:after,\n.direct-chat-danger .right > .direct-chat-text:before {\n  border-left-color: #dd4b39;\n}\n.direct-chat-primary .right > .direct-chat-text {\n  background: #3c8dbc;\n  border-color: #3c8dbc;\n  color: #ffffff;\n}\n.direct-chat-primary .right > .direct-chat-text:after,\n.direct-chat-primary .right > .direct-chat-text:before {\n  border-left-color: #3c8dbc;\n}\n.direct-chat-warning .right > .direct-chat-text {\n  background: #f39c12;\n  border-color: #f39c12;\n  color: #ffffff;\n}\n.direct-chat-warning .right > .direct-chat-text:after,\n.direct-chat-warning .right > .direct-chat-text:before {\n  border-left-color: #f39c12;\n}\n.direct-chat-info .right > .direct-chat-text {\n  background: #00c0ef;\n  border-color: #00c0ef;\n  color: #ffffff;\n}\n.direct-chat-info .right > .direct-chat-text:after,\n.direct-chat-info .right > .direct-chat-text:before {\n  border-left-color: #00c0ef;\n}\n.direct-chat-success .right > .direct-chat-text {\n  background: #00a65a;\n  border-color: #00a65a;\n  color: #ffffff;\n}\n.direct-chat-success .right > .direct-chat-text:after,\n.direct-chat-success .right > .direct-chat-text:before {\n  border-left-color: #00a65a;\n}\n/*\n * Component: Users List\n * ---------------------\n */\n.users-list > li {\n  width: 25%;\n  float: left;\n  padding: 10px;\n  text-align: center;\n}\n.users-list > li img {\n  border-radius: 50%;\n  max-width: 100%;\n  height: auto;\n}\n.users-list > li > a:hover,\n.users-list > li > a:hover .users-list-name {\n  color: #999;\n}\n.users-list-name,\n.users-list-date {\n  display: block;\n}\n.users-list-name {\n  font-weight: 600;\n  color: #444;\n  overflow: hidden;\n  white-space: nowrap;\n  text-overflow: ellipsis;\n}\n.users-list-date {\n  color: #999;\n  font-size: 12px;\n}\n/*\n * Component: Carousel\n * -------------------\n */\n.carousel-control.left,\n.carousel-control.right {\n  background-image: none;\n}\n.carousel-control > .fa {\n  font-size: 40px;\n  position: absolute;\n  top: 50%;\n  z-index: 5;\n  display: inline-block;\n  margin-top: -20px;\n}\n/*\n * Component: modal\n * ----------------\n */\n.modal {\n  background: rgba(0, 0, 0, 0.3);\n}\n.modal-content {\n  border-radius: 0;\n  -webkit-box-shadow: 0 2px 3px rgba(0, 0, 0, 0.125);\n  box-shadow: 0 2px 3px rgba(0, 0, 0, 0.125);\n  border: 0;\n}\n@media (min-width: 768px) {\n  .modal-content {\n    -webkit-box-shadow: 0 2px 3px rgba(0, 0, 0, 0.125);\n    box-shadow: 0 2px 3px rgba(0, 0, 0, 0.125);\n  }\n}\n.modal-header {\n  border-bottom-color: #f4f4f4;\n}\n.modal-footer {\n  border-top-color: #f4f4f4;\n}\n.modal-primary .modal-header,\n.modal-primary .modal-footer {\n  border-color: #307095;\n}\n.modal-warning .modal-header,\n.modal-warning .modal-footer {\n  border-color: #c87f0a;\n}\n.modal-info .modal-header,\n.modal-info .modal-footer {\n  border-color: #0097bc;\n}\n.modal-success .modal-header,\n.modal-success .modal-footer {\n  border-color: #00733e;\n}\n.modal-danger .modal-header,\n.modal-danger .modal-footer {\n  border-color: #c23321;\n}\n/*\n * Component: Social Widgets\n * -------------------------\n */\n.box-widget {\n  border: none;\n  position: relative;\n}\n.widget-user .widget-user-header {\n  padding: 20px;\n  height: 120px;\n  border-top-right-radius: 3px;\n  border-top-left-radius: 3px;\n}\n.widget-user .widget-user-username {\n  margin-top: 0;\n  margin-bottom: 5px;\n  font-size: 25px;\n  font-weight: 300;\n  text-shadow: 0 1px 1px rgba(0, 0, 0, 0.2);\n}\n.widget-user .widget-user-desc {\n  margin-top: 0;\n}\n.widget-user .widget-user-image {\n  position: absolute;\n  top: 65px;\n  left: 50%;\n  margin-left: -45px;\n}\n.widget-user .widget-user-image > img {\n  width: 90px;\n  height: auto;\n  border: 3px solid #fff;\n}\n.widget-user .box-footer {\n  padding-top: 30px;\n}\n.widget-user-2 .widget-user-header {\n  padding: 20px;\n  border-top-right-radius: 3px;\n  border-top-left-radius: 3px;\n}\n.widget-user-2 .widget-user-username {\n  margin-top: 5px;\n  margin-bottom: 5px;\n  font-size: 25px;\n  font-weight: 300;\n}\n.widget-user-2 .widget-user-desc {\n  margin-top: 0;\n}\n.widget-user-2 .widget-user-username,\n.widget-user-2 .widget-user-desc {\n  margin-left: 75px;\n}\n.widget-user-2 .widget-user-image > img {\n  width: 65px;\n  height: auto;\n  float: left;\n}\n.treeview-menu {\n  display: none;\n  list-style: none;\n  padding: 0;\n  margin: 0;\n  padding-left: 5px;\n}\n.treeview-menu .treeview-menu {\n  padding-left: 20px;\n}\n.treeview-menu > li {\n  margin: 0;\n}\n.treeview-menu > li > a {\n  padding: 5px 5px 5px 15px;\n  display: block;\n  font-size: 14px;\n}\n.treeview-menu > li > a > .fa,\n.treeview-menu > li > a > .glyphicon,\n.treeview-menu > li > a > .ion {\n  width: 20px;\n}\n.treeview-menu > li > a > .pull-right-container > .fa-angle-left,\n.treeview-menu > li > a > .pull-right-container > .fa-angle-down,\n.treeview-menu > li > a > .fa-angle-left,\n.treeview-menu > li > a > .fa-angle-down {\n  width: auto;\n}\n/*\n * Page: Mailbox\n * -------------\n */\n.mailbox-messages > .table {\n  margin: 0;\n}\n.mailbox-controls {\n  padding: 5px;\n}\n.mailbox-controls.with-border {\n  border-bottom: 1px solid #f4f4f4;\n}\n.mailbox-read-info {\n  border-bottom: 1px solid #f4f4f4;\n  padding: 10px;\n}\n.mailbox-read-info h3 {\n  font-size: 20px;\n  margin: 0;\n}\n.mailbox-read-info h5 {\n  margin: 0;\n  padding: 5px 0 0 0;\n}\n.mailbox-read-time {\n  color: #999;\n  font-size: 13px;\n}\n.mailbox-read-message {\n  padding: 10px;\n}\n.mailbox-attachments li {\n  float: left;\n  width: 200px;\n  border: 1px solid #eee;\n  margin-bottom: 10px;\n  margin-right: 10px;\n}\n.mailbox-attachment-name {\n  font-weight: bold;\n  color: #666;\n}\n.mailbox-attachment-icon,\n.mailbox-attachment-info,\n.mailbox-attachment-size {\n  display: block;\n}\n.mailbox-attachment-info {\n  padding: 10px;\n  background: #f4f4f4;\n}\n.mailbox-attachment-size {\n  color: #999;\n  font-size: 12px;\n}\n.mailbox-attachment-icon {\n  text-align: center;\n  font-size: 65px;\n  color: #666;\n  padding: 20px 10px;\n}\n.mailbox-attachment-icon.has-img {\n  padding: 0;\n}\n.mailbox-attachment-icon.has-img > img {\n  max-width: 100%;\n  height: auto;\n}\n/*\n * Page: Lock Screen\n * -----------------\n */\n/* ADD THIS CLASS TO THE <BODY> TAG */\n.lockscreen {\n  background: #d2d6de;\n}\n.lockscreen-logo {\n  font-size: 35px;\n  text-align: center;\n  margin-bottom: 25px;\n  font-weight: 300;\n}\n.lockscreen-logo a {\n  color: #444;\n}\n.lockscreen-wrapper {\n  max-width: 400px;\n  margin: 0 auto;\n  margin-top: 10%;\n}\n/* User name [optional] */\n.lockscreen .lockscreen-name {\n  text-align: center;\n  font-weight: 600;\n}\n/* Will contain the image and the sign in form */\n.lockscreen-item {\n  border-radius: 4px;\n  padding: 0;\n  background: #fff;\n  position: relative;\n  margin: 10px auto 30px auto;\n  width: 290px;\n}\n/* User image */\n.lockscreen-image {\n  border-radius: 50%;\n  position: absolute;\n  left: -10px;\n  top: -25px;\n  background: #fff;\n  padding: 5px;\n  z-index: 10;\n}\n.lockscreen-image > img {\n  border-radius: 50%;\n  width: 70px;\n  height: 70px;\n}\n/* Contains the password input and the login button */\n.lockscreen-credentials {\n  margin-left: 70px;\n}\n.lockscreen-credentials .form-control {\n  border: 0;\n}\n.lockscreen-credentials .btn {\n  background-color: #fff;\n  border: 0;\n  padding: 0 10px;\n}\n.lockscreen-footer {\n  margin-top: 10px;\n}\n/*\n * Page: Login & Register\n * ----------------------\n */\n.login-logo,\n.register-logo {\n  font-size: 35px;\n  text-align: center;\n  margin-bottom: 25px;\n  font-weight: 300;\n}\n.login-logo a,\n.register-logo a {\n  color: #444;\n}\n.login-page,\n.register-page {\n  background: #d2d6de;\n}\n.login-box,\n.register-box {\n  width: 360px;\n  margin: 7% auto;\n}\n@media (max-width: 768px) {\n  .login-box,\n  .register-box {\n    width: 90%;\n    margin-top: 20px;\n  }\n}\n.login-box-body,\n.register-box-body {\n  background: #fff;\n  padding: 20px;\n  border-top: 0;\n  color: #666;\n}\n.login-box-body .form-control-feedback,\n.register-box-body .form-control-feedback {\n  color: #777;\n}\n.login-box-msg,\n.register-box-msg {\n  margin: 0;\n  text-align: center;\n  padding: 0 20px 20px 20px;\n}\n.social-auth-links {\n  margin: 10px 0;\n}\n/*\n * Page: 400 and 500 error pages\n * ------------------------------\n */\n.error-page {\n  width: 600px;\n  margin: 20px auto 0 auto;\n}\n@media (max-width: 991px) {\n  .error-page {\n    width: 100%;\n  }\n}\n.error-page > .headline {\n  float: left;\n  font-size: 100px;\n  font-weight: 300;\n}\n@media (max-width: 991px) {\n  .error-page > .headline {\n    float: none;\n    text-align: center;\n  }\n}\n.error-page > .error-content {\n  margin-left: 190px;\n  display: block;\n}\n@media (max-width: 991px) {\n  .error-page > .error-content {\n    margin-left: 0;\n  }\n}\n.error-page > .error-content > h3 {\n  font-weight: 300;\n  font-size: 25px;\n}\n@media (max-width: 991px) {\n  .error-page > .error-content > h3 {\n    text-align: center;\n  }\n}\n/*\n * Page: Invoice\n * -------------\n */\n.invoice {\n  position: relative;\n  background: #fff;\n  border: 1px solid #f4f4f4;\n  padding: 20px;\n  margin: 10px 25px;\n}\n.invoice-title {\n  margin-top: 0;\n}\n/*\n * Page: Profile\n * -------------\n */\n.profile-user-img {\n  margin: 0 auto;\n  width: 100px;\n  padding: 3px;\n  border: 3px solid #d2d6de;\n}\n.profile-username {\n  font-size: 21px;\n  margin-top: 5px;\n}\n.post {\n  border-bottom: 1px solid #d2d6de;\n  margin-bottom: 15px;\n  padding-bottom: 15px;\n  color: #666;\n}\n.post:last-of-type {\n  border-bottom: 0;\n  margin-bottom: 0;\n  padding-bottom: 0;\n}\n.post .user-block {\n  margin-bottom: 15px;\n}\n/*\n * Social Buttons for Bootstrap\n *\n * Copyright 2013-2015 Panayiotis Lipiridis\n * Licensed under the MIT License\n *\n * https://github.com/lipis/bootstrap-social\n */\n.btn-social {\n  position: relative;\n  padding-left: 44px;\n  text-align: left;\n  white-space: nowrap;\n  overflow: hidden;\n  text-overflow: ellipsis;\n}\n.btn-social > :first-child {\n  position: absolute;\n  left: 0;\n  top: 0;\n  bottom: 0;\n  width: 32px;\n  line-height: 34px;\n  font-size: 1.6em;\n  text-align: center;\n  border-right: 1px solid rgba(0, 0, 0, 0.2);\n}\n.btn-social.btn-lg {\n  padding-left: 61px;\n}\n.btn-social.btn-lg > :first-child {\n  line-height: 45px;\n  width: 45px;\n  font-size: 1.8em;\n}\n.btn-social.btn-sm {\n  padding-left: 38px;\n}\n.btn-social.btn-sm > :first-child {\n  line-height: 28px;\n  width: 28px;\n  font-size: 1.4em;\n}\n.btn-social.btn-xs {\n  padding-left: 30px;\n}\n.btn-social.btn-xs > :first-child {\n  line-height: 20px;\n  width: 20px;\n  font-size: 1.2em;\n}\n.btn-social-icon {\n  position: relative;\n  padding-left: 44px;\n  text-align: left;\n  white-space: nowrap;\n  overflow: hidden;\n  text-overflow: ellipsis;\n  height: 34px;\n  width: 34px;\n  padding: 0;\n}\n.btn-social-icon > :first-child {\n  position: absolute;\n  left: 0;\n  top: 0;\n  bottom: 0;\n  width: 32px;\n  line-height: 34px;\n  font-size: 1.6em;\n  text-align: center;\n  border-right: 1px solid rgba(0, 0, 0, 0.2);\n}\n.btn-social-icon.btn-lg {\n  padding-left: 61px;\n}\n.btn-social-icon.btn-lg > :first-child {\n  line-height: 45px;\n  width: 45px;\n  font-size: 1.8em;\n}\n.btn-social-icon.btn-sm {\n  padding-left: 38px;\n}\n.btn-social-icon.btn-sm > :first-child {\n  line-height: 28px;\n  width: 28px;\n  font-size: 1.4em;\n}\n.btn-social-icon.btn-xs {\n  padding-left: 30px;\n}\n.btn-social-icon.btn-xs > :first-child {\n  line-height: 20px;\n  width: 20px;\n  font-size: 1.2em;\n}\n.btn-social-icon > :first-child {\n  border: none;\n  text-align: center;\n  width: 100%;\n}\n.btn-social-icon.btn-lg {\n  height: 45px;\n  width: 45px;\n  padding-left: 0;\n  padding-right: 0;\n}\n.btn-social-icon.btn-sm {\n  height: 30px;\n  width: 30px;\n  padding-left: 0;\n  padding-right: 0;\n}\n.btn-social-icon.btn-xs {\n  height: 22px;\n  width: 22px;\n  padding-left: 0;\n  padding-right: 0;\n}\n.btn-adn {\n  color: #ffffff;\n  background-color: #d87a68;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-adn:focus,\n.btn-adn.focus {\n  color: #ffffff;\n  background-color: #ce563f;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-adn:hover {\n  color: #ffffff;\n  background-color: #ce563f;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-adn:active,\n.btn-adn.active,\n.open > .dropdown-toggle.btn-adn {\n  color: #ffffff;\n  background-color: #ce563f;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-adn:active,\n.btn-adn.active,\n.open > .dropdown-toggle.btn-adn {\n  background-image: none;\n}\n.btn-adn .badge {\n  color: #d87a68;\n  background-color: #ffffff;\n}\n.btn-bitbucket {\n  color: #ffffff;\n  background-color: #205081;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-bitbucket:focus,\n.btn-bitbucket.focus {\n  color: #ffffff;\n  background-color: #163758;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-bitbucket:hover {\n  color: #ffffff;\n  background-color: #163758;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-bitbucket:active,\n.btn-bitbucket.active,\n.open > .dropdown-toggle.btn-bitbucket {\n  color: #ffffff;\n  background-color: #163758;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-bitbucket:active,\n.btn-bitbucket.active,\n.open > .dropdown-toggle.btn-bitbucket {\n  background-image: none;\n}\n.btn-bitbucket .badge {\n  color: #205081;\n  background-color: #ffffff;\n}\n.btn-dropbox {\n  color: #ffffff;\n  background-color: #1087dd;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-dropbox:focus,\n.btn-dropbox.focus {\n  color: #ffffff;\n  background-color: #0d6aad;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-dropbox:hover {\n  color: #ffffff;\n  background-color: #0d6aad;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-dropbox:active,\n.btn-dropbox.active,\n.open > .dropdown-toggle.btn-dropbox {\n  color: #ffffff;\n  background-color: #0d6aad;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-dropbox:active,\n.btn-dropbox.active,\n.open > .dropdown-toggle.btn-dropbox {\n  background-image: none;\n}\n.btn-dropbox .badge {\n  color: #1087dd;\n  background-color: #ffffff;\n}\n.btn-facebook {\n  color: #ffffff;\n  background-color: #3b5998;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-facebook:focus,\n.btn-facebook.focus {\n  color: #ffffff;\n  background-color: #2d4373;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-facebook:hover {\n  color: #ffffff;\n  background-color: #2d4373;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-facebook:active,\n.btn-facebook.active,\n.open > .dropdown-toggle.btn-facebook {\n  color: #ffffff;\n  background-color: #2d4373;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-facebook:active,\n.btn-facebook.active,\n.open > .dropdown-toggle.btn-facebook {\n  background-image: none;\n}\n.btn-facebook .badge {\n  color: #3b5998;\n  background-color: #ffffff;\n}\n.btn-flickr {\n  color: #ffffff;\n  background-color: #ff0084;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-flickr:focus,\n.btn-flickr.focus {\n  color: #ffffff;\n  background-color: #cc006a;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-flickr:hover {\n  color: #ffffff;\n  background-color: #cc006a;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-flickr:active,\n.btn-flickr.active,\n.open > .dropdown-toggle.btn-flickr {\n  color: #ffffff;\n  background-color: #cc006a;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-flickr:active,\n.btn-flickr.active,\n.open > .dropdown-toggle.btn-flickr {\n  background-image: none;\n}\n.btn-flickr .badge {\n  color: #ff0084;\n  background-color: #ffffff;\n}\n.btn-foursquare {\n  color: #ffffff;\n  background-color: #f94877;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-foursquare:focus,\n.btn-foursquare.focus {\n  color: #ffffff;\n  background-color: #f71752;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-foursquare:hover {\n  color: #ffffff;\n  background-color: #f71752;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-foursquare:active,\n.btn-foursquare.active,\n.open > .dropdown-toggle.btn-foursquare {\n  color: #ffffff;\n  background-color: #f71752;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-foursquare:active,\n.btn-foursquare.active,\n.open > .dropdown-toggle.btn-foursquare {\n  background-image: none;\n}\n.btn-foursquare .badge {\n  color: #f94877;\n  background-color: #ffffff;\n}\n.btn-github {\n  color: #ffffff;\n  background-color: #444444;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-github:focus,\n.btn-github.focus {\n  color: #ffffff;\n  background-color: #2b2b2b;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-github:hover {\n  color: #ffffff;\n  background-color: #2b2b2b;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-github:active,\n.btn-github.active,\n.open > .dropdown-toggle.btn-github {\n  color: #ffffff;\n  background-color: #2b2b2b;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-github:active,\n.btn-github.active,\n.open > .dropdown-toggle.btn-github {\n  background-image: none;\n}\n.btn-github .badge {\n  color: #444444;\n  background-color: #ffffff;\n}\n.btn-google {\n  color: #ffffff;\n  background-color: #dd4b39;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-google:focus,\n.btn-google.focus {\n  color: #ffffff;\n  background-color: #c23321;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-google:hover {\n  color: #ffffff;\n  background-color: #c23321;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-google:active,\n.btn-google.active,\n.open > .dropdown-toggle.btn-google {\n  color: #ffffff;\n  background-color: #c23321;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-google:active,\n.btn-google.active,\n.open > .dropdown-toggle.btn-google {\n  background-image: none;\n}\n.btn-google .badge {\n  color: #dd4b39;\n  background-color: #ffffff;\n}\n.btn-instagram {\n  color: #ffffff;\n  background-color: #3f729b;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-instagram:focus,\n.btn-instagram.focus {\n  color: #ffffff;\n  background-color: #305777;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-instagram:hover {\n  color: #ffffff;\n  background-color: #305777;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-instagram:active,\n.btn-instagram.active,\n.open > .dropdown-toggle.btn-instagram {\n  color: #ffffff;\n  background-color: #305777;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-instagram:active,\n.btn-instagram.active,\n.open > .dropdown-toggle.btn-instagram {\n  background-image: none;\n}\n.btn-instagram .badge {\n  color: #3f729b;\n  background-color: #ffffff;\n}\n.btn-linkedin {\n  color: #ffffff;\n  background-color: #007bb6;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-linkedin:focus,\n.btn-linkedin.focus {\n  color: #ffffff;\n  background-color: #005983;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-linkedin:hover {\n  color: #ffffff;\n  background-color: #005983;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-linkedin:active,\n.btn-linkedin.active,\n.open > .dropdown-toggle.btn-linkedin {\n  color: #ffffff;\n  background-color: #005983;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-linkedin:active,\n.btn-linkedin.active,\n.open > .dropdown-toggle.btn-linkedin {\n  background-image: none;\n}\n.btn-linkedin .badge {\n  color: #007bb6;\n  background-color: #ffffff;\n}\n.btn-microsoft {\n  color: #ffffff;\n  background-color: #2672ec;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-microsoft:focus,\n.btn-microsoft.focus {\n  color: #ffffff;\n  background-color: #125acd;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-microsoft:hover {\n  color: #ffffff;\n  background-color: #125acd;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-microsoft:active,\n.btn-microsoft.active,\n.open > .dropdown-toggle.btn-microsoft {\n  color: #ffffff;\n  background-color: #125acd;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-microsoft:active,\n.btn-microsoft.active,\n.open > .dropdown-toggle.btn-microsoft {\n  background-image: none;\n}\n.btn-microsoft .badge {\n  color: #2672ec;\n  background-color: #ffffff;\n}\n.btn-openid {\n  color: #ffffff;\n  background-color: #f7931e;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-openid:focus,\n.btn-openid.focus {\n  color: #ffffff;\n  background-color: #da7908;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-openid:hover {\n  color: #ffffff;\n  background-color: #da7908;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-openid:active,\n.btn-openid.active,\n.open > .dropdown-toggle.btn-openid {\n  color: #ffffff;\n  background-color: #da7908;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-openid:active,\n.btn-openid.active,\n.open > .dropdown-toggle.btn-openid {\n  background-image: none;\n}\n.btn-openid .badge {\n  color: #f7931e;\n  background-color: #ffffff;\n}\n.btn-pinterest {\n  color: #ffffff;\n  background-color: #cb2027;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-pinterest:focus,\n.btn-pinterest.focus {\n  color: #ffffff;\n  background-color: #9f191f;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-pinterest:hover {\n  color: #ffffff;\n  background-color: #9f191f;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-pinterest:active,\n.btn-pinterest.active,\n.open > .dropdown-toggle.btn-pinterest {\n  color: #ffffff;\n  background-color: #9f191f;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-pinterest:active,\n.btn-pinterest.active,\n.open > .dropdown-toggle.btn-pinterest {\n  background-image: none;\n}\n.btn-pinterest .badge {\n  color: #cb2027;\n  background-color: #ffffff;\n}\n.btn-reddit {\n  color: #000000;\n  background-color: #eff7ff;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-reddit:focus,\n.btn-reddit.focus {\n  color: #000000;\n  background-color: #bcddff;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-reddit:hover {\n  color: #000000;\n  background-color: #bcddff;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-reddit:active,\n.btn-reddit.active,\n.open > .dropdown-toggle.btn-reddit {\n  color: #000000;\n  background-color: #bcddff;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-reddit:active,\n.btn-reddit.active,\n.open > .dropdown-toggle.btn-reddit {\n  background-image: none;\n}\n.btn-reddit .badge {\n  color: #eff7ff;\n  background-color: #000000;\n}\n.btn-soundcloud {\n  color: #ffffff;\n  background-color: #ff5500;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-soundcloud:focus,\n.btn-soundcloud.focus {\n  color: #ffffff;\n  background-color: #cc4400;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-soundcloud:hover {\n  color: #ffffff;\n  background-color: #cc4400;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-soundcloud:active,\n.btn-soundcloud.active,\n.open > .dropdown-toggle.btn-soundcloud {\n  color: #ffffff;\n  background-color: #cc4400;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-soundcloud:active,\n.btn-soundcloud.active,\n.open > .dropdown-toggle.btn-soundcloud {\n  background-image: none;\n}\n.btn-soundcloud .badge {\n  color: #ff5500;\n  background-color: #ffffff;\n}\n.btn-tumblr {\n  color: #ffffff;\n  background-color: #2c4762;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-tumblr:focus,\n.btn-tumblr.focus {\n  color: #ffffff;\n  background-color: #1c2d3f;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-tumblr:hover {\n  color: #ffffff;\n  background-color: #1c2d3f;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-tumblr:active,\n.btn-tumblr.active,\n.open > .dropdown-toggle.btn-tumblr {\n  color: #ffffff;\n  background-color: #1c2d3f;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-tumblr:active,\n.btn-tumblr.active,\n.open > .dropdown-toggle.btn-tumblr {\n  background-image: none;\n}\n.btn-tumblr .badge {\n  color: #2c4762;\n  background-color: #ffffff;\n}\n.btn-twitter {\n  color: #ffffff;\n  background-color: #55acee;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-twitter:focus,\n.btn-twitter.focus {\n  color: #ffffff;\n  background-color: #2795e9;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-twitter:hover {\n  color: #ffffff;\n  background-color: #2795e9;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-twitter:active,\n.btn-twitter.active,\n.open > .dropdown-toggle.btn-twitter {\n  color: #ffffff;\n  background-color: #2795e9;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-twitter:active,\n.btn-twitter.active,\n.open > .dropdown-toggle.btn-twitter {\n  background-image: none;\n}\n.btn-twitter .badge {\n  color: #55acee;\n  background-color: #ffffff;\n}\n.btn-vimeo {\n  color: #ffffff;\n  background-color: #1ab7ea;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-vimeo:focus,\n.btn-vimeo.focus {\n  color: #ffffff;\n  background-color: #1295bf;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-vimeo:hover {\n  color: #ffffff;\n  background-color: #1295bf;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-vimeo:active,\n.btn-vimeo.active,\n.open > .dropdown-toggle.btn-vimeo {\n  color: #ffffff;\n  background-color: #1295bf;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-vimeo:active,\n.btn-vimeo.active,\n.open > .dropdown-toggle.btn-vimeo {\n  background-image: none;\n}\n.btn-vimeo .badge {\n  color: #1ab7ea;\n  background-color: #ffffff;\n}\n.btn-vk {\n  color: #ffffff;\n  background-color: #587ea3;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-vk:focus,\n.btn-vk.focus {\n  color: #ffffff;\n  background-color: #466482;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-vk:hover {\n  color: #ffffff;\n  background-color: #466482;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-vk:active,\n.btn-vk.active,\n.open > .dropdown-toggle.btn-vk {\n  color: #ffffff;\n  background-color: #466482;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-vk:active,\n.btn-vk.active,\n.open > .dropdown-toggle.btn-vk {\n  background-image: none;\n}\n.btn-vk .badge {\n  color: #587ea3;\n  background-color: #ffffff;\n}\n.btn-yahoo {\n  color: #ffffff;\n  background-color: #720e9e;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-yahoo:focus,\n.btn-yahoo.focus {\n  color: #ffffff;\n  background-color: #500a6f;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-yahoo:hover {\n  color: #ffffff;\n  background-color: #500a6f;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-yahoo:active,\n.btn-yahoo.active,\n.open > .dropdown-toggle.btn-yahoo {\n  color: #ffffff;\n  background-color: #500a6f;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-yahoo:active,\n.btn-yahoo.active,\n.open > .dropdown-toggle.btn-yahoo {\n  background-image: none;\n}\n.btn-yahoo .badge {\n  color: #720e9e;\n  background-color: #ffffff;\n}\n/*\n * Plugin: Full Calendar\n * ---------------------\n */\n.fc-button {\n  background: #f4f4f4;\n  background-image: none;\n  color: #444;\n  border-color: #ddd;\n  border-bottom-color: #ddd;\n}\n.fc-button:hover,\n.fc-button:active,\n.fc-button.hover {\n  background-color: #e9e9e9;\n}\n.fc-header-title h2 {\n  font-size: 15px;\n  line-height: 1.6em;\n  color: #666;\n  margin-left: 10px;\n}\n.fc-header-right {\n  padding-right: 10px;\n}\n.fc-header-left {\n  padding-left: 10px;\n}\n.fc-widget-header {\n  background: #fafafa;\n}\n.fc-grid {\n  width: 100%;\n  border: 0;\n}\n.fc-widget-header:first-of-type,\n.fc-widget-content:first-of-type {\n  border-left: 0;\n  border-right: 0;\n}\n.fc-widget-header:last-of-type,\n.fc-widget-content:last-of-type {\n  border-right: 0;\n}\n.fc-toolbar {\n  padding: 10px;\n  margin: 0;\n}\n.fc-day-number {\n  font-size: 20px;\n  font-weight: 300;\n  padding-right: 10px;\n}\n.fc-color-picker {\n  list-style: none;\n  margin: 0;\n  padding: 0;\n}\n.fc-color-picker > li {\n  float: left;\n  font-size: 30px;\n  margin-right: 5px;\n  line-height: 30px;\n}\n.fc-color-picker > li .fa {\n  -webkit-transition: -webkit-transform linear 0.3s;\n  -moz-transition: -moz-transform linear 0.3s;\n  -o-transition: -o-transform linear 0.3s;\n  transition: transform linear 0.3s;\n}\n.fc-color-picker > li .fa:hover {\n  -webkit-transform: rotate(30deg);\n  -ms-transform: rotate(30deg);\n  -o-transform: rotate(30deg);\n  transform: rotate(30deg);\n}\n#add-new-event {\n  -webkit-transition: all linear 0.3s;\n  -o-transition: all linear 0.3s;\n  transition: all linear 0.3s;\n}\n.external-event {\n  padding: 5px 10px;\n  font-weight: bold;\n  margin-bottom: 4px;\n  box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1);\n  text-shadow: 0 1px 1px rgba(0, 0, 0, 0.1);\n  border-radius: 3px;\n  cursor: move;\n}\n.external-event:hover {\n  box-shadow: inset 0 0 90px rgba(0, 0, 0, 0.2);\n}\n/*\n * Plugin: Select2\n * ---------------\n */\n.select2-container--default.select2-container--focus,\n.select2-selection.select2-container--focus,\n.select2-container--default:focus,\n.select2-selection:focus,\n.select2-container--default:active,\n.select2-selection:active {\n  outline: none;\n}\n.select2-container--default .select2-selection--single,\n.select2-selection .select2-selection--single {\n  border: 1px solid #d2d6de;\n  border-radius: 0;\n  padding: 6px 12px;\n  height: 34px;\n}\n.select2-container--default.select2-container--open {\n  border-color: #3c8dbc;\n}\n.select2-dropdown {\n  border: 1px solid #d2d6de;\n  border-radius: 0;\n}\n.select2-container--default .select2-results__option--highlighted[aria-selected] {\n  background-color: #3c8dbc;\n  color: white;\n}\n.select2-results__option {\n  padding: 6px 12px;\n  user-select: none;\n  -webkit-user-select: none;\n}\n.select2-container .select2-selection--single .select2-selection__rendered {\n  padding-left: 0;\n  padding-right: 0;\n  height: auto;\n  margin-top: -4px;\n}\n.select2-container[dir=\"rtl\"] .select2-selection--single .select2-selection__rendered {\n  padding-right: 6px;\n  padding-left: 20px;\n}\n.select2-container--default .select2-selection--single .select2-selection__arrow {\n  height: 28px;\n  right: 3px;\n}\n.select2-container--default .select2-selection--single .select2-selection__arrow b {\n  margin-top: 0;\n}\n.select2-dropdown .select2-search__field,\n.select2-search--inline .select2-search__field {\n  border: 1px solid #d2d6de;\n}\n.select2-dropdown .select2-search__field:focus,\n.select2-search--inline .select2-search__field:focus {\n  outline: none;\n}\n.select2-container--default.select2-container--focus .select2-selection--multiple,\n.select2-container--default .select2-search--dropdown .select2-search__field {\n  border-color: #3c8dbc !important;\n}\n.select2-container--default .select2-results__option[aria-disabled=true] {\n  color: #999;\n}\n.select2-container--default .select2-results__option[aria-selected=true] {\n  background-color: #ddd;\n}\n.select2-container--default .select2-results__option[aria-selected=true],\n.select2-container--default .select2-results__option[aria-selected=true]:hover {\n  color: #444;\n}\n.select2-container--default .select2-selection--multiple {\n  border: 1px solid #d2d6de;\n  border-radius: 0;\n}\n.select2-container--default .select2-selection--multiple:focus {\n  border-color: #3c8dbc;\n}\n.select2-container--default.select2-container--focus .select2-selection--multiple {\n  border-color: #d2d6de;\n}\n.select2-container--default .select2-selection--multiple .select2-selection__choice {\n  background-color: #3c8dbc;\n  border-color: #367fa9;\n  padding: 1px 10px;\n  color: #fff;\n}\n.select2-container--default .select2-selection--multiple .select2-selection__choice__remove {\n  margin-right: 5px;\n  color: rgba(255, 255, 255, 0.7);\n}\n.select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover {\n  color: #fff;\n}\n.select2-container .select2-selection--single .select2-selection__rendered {\n  padding-right: 10px;\n}\n.box .datepicker-inline,\n.box .datepicker-inline .datepicker-days,\n.box .datepicker-inline > table,\n.box .datepicker-inline .datepicker-days > table {\n  width: 100%;\n}\n.box .datepicker-inline td:hover,\n.box .datepicker-inline .datepicker-days td:hover,\n.box .datepicker-inline > table td:hover,\n.box .datepicker-inline .datepicker-days > table td:hover {\n  background-color: rgba(255, 255, 255, 0.3);\n}\n.box .datepicker-inline td.day.old,\n.box .datepicker-inline .datepicker-days td.day.old,\n.box .datepicker-inline > table td.day.old,\n.box .datepicker-inline .datepicker-days > table td.day.old,\n.box .datepicker-inline td.day.new,\n.box .datepicker-inline .datepicker-days td.day.new,\n.box .datepicker-inline > table td.day.new,\n.box .datepicker-inline .datepicker-days > table td.day.new {\n  color: #777;\n}\n/*\n * General: Miscellaneous\n * ----------------------\n */\n.pad {\n  padding: 10px;\n}\n.margin {\n  margin: 10px;\n}\n.margin-bottom {\n  margin-bottom: 20px;\n}\n.margin-bottom-none {\n  margin-bottom: 0;\n}\n.margin-r-5 {\n  margin-right: 5px;\n}\n.inline {\n  display: inline;\n}\n.description-block {\n  display: block;\n  margin: 10px 0;\n  text-align: center;\n}\n.description-block.margin-bottom {\n  margin-bottom: 25px;\n}\n.description-block > .description-header {\n  margin: 0;\n  padding: 0;\n  font-weight: 600;\n  font-size: 16px;\n}\n.description-block > .description-text {\n  text-transform: uppercase;\n}\n.bg-red,\n.bg-yellow,\n.bg-aqua,\n.bg-blue,\n.bg-light-blue,\n.bg-green,\n.bg-navy,\n.bg-teal,\n.bg-olive,\n.bg-lime,\n.bg-orange,\n.bg-fuchsia,\n.bg-purple,\n.bg-maroon,\n.bg-black,\n.bg-red-active,\n.bg-yellow-active,\n.bg-aqua-active,\n.bg-blue-active,\n.bg-light-blue-active,\n.bg-green-active,\n.bg-navy-active,\n.bg-teal-active,\n.bg-olive-active,\n.bg-lime-active,\n.bg-orange-active,\n.bg-fuchsia-active,\n.bg-purple-active,\n.bg-maroon-active,\n.bg-black-active,\n.callout.callout-danger,\n.callout.callout-warning,\n.callout.callout-info,\n.callout.callout-success,\n.alert-success,\n.alert-danger,\n.alert-error,\n.alert-warning,\n.alert-info,\n.label-danger,\n.label-info,\n.label-warning,\n.label-primary,\n.label-success,\n.modal-primary .modal-body,\n.modal-primary .modal-header,\n.modal-primary .modal-footer,\n.modal-warning .modal-body,\n.modal-warning .modal-header,\n.modal-warning .modal-footer,\n.modal-info .modal-body,\n.modal-info .modal-header,\n.modal-info .modal-footer,\n.modal-success .modal-body,\n.modal-success .modal-header,\n.modal-success .modal-footer,\n.modal-danger .modal-body,\n.modal-danger .modal-header,\n.modal-danger .modal-footer {\n  color: #fff !important;\n}\n.bg-gray {\n  color: #000;\n  background-color: #d2d6de !important;\n}\n.bg-gray-light {\n  background-color: #f7f7f7;\n}\n.bg-black {\n  background-color: #111111 !important;\n}\n.bg-red,\n.callout.callout-danger,\n.alert-danger,\n.alert-error,\n.label-danger,\n.modal-danger .modal-body {\n  background-color: #dd4b39 !important;\n}\n.bg-yellow,\n.callout.callout-warning,\n.alert-warning,\n.label-warning,\n.modal-warning .modal-body {\n  background-color: #f39c12 !important;\n}\n.bg-aqua,\n.callout.callout-info,\n.alert-info,\n.label-info,\n.modal-info .modal-body {\n  background-color: #00c0ef !important;\n}\n.bg-blue {\n  background-color: #0073b7 !important;\n}\n.bg-light-blue,\n.label-primary,\n.modal-primary .modal-body {\n  background-color: #3c8dbc !important;\n}\n.bg-green,\n.callout.callout-success,\n.alert-success,\n.label-success,\n.modal-success .modal-body {\n  background-color: #00a65a !important;\n}\n.bg-navy {\n  background-color: #001f3f !important;\n}\n.bg-teal {\n  background-color: #39cccc !important;\n}\n.bg-olive {\n  background-color: #3d9970 !important;\n}\n.bg-lime {\n  background-color: #01ff70 !important;\n}\n.bg-orange {\n  background-color: #ff851b !important;\n}\n.bg-fuchsia {\n  background-color: #f012be !important;\n}\n.bg-purple {\n  background-color: #605ca8 !important;\n}\n.bg-maroon {\n  background-color: #d81b60 !important;\n}\n.bg-gray-active {\n  color: #000;\n  background-color: #b5bbc8 !important;\n}\n.bg-black-active {\n  background-color: #000000 !important;\n}\n.bg-red-active,\n.modal-danger .modal-header,\n.modal-danger .modal-footer {\n  background-color: #d33724 !important;\n}\n.bg-yellow-active,\n.modal-warning .modal-header,\n.modal-warning .modal-footer {\n  background-color: #db8b0b !important;\n}\n.bg-aqua-active,\n.modal-info .modal-header,\n.modal-info .modal-footer {\n  background-color: #00a7d0 !important;\n}\n.bg-blue-active {\n  background-color: #005384 !important;\n}\n.bg-light-blue-active,\n.modal-primary .modal-header,\n.modal-primary .modal-footer {\n  background-color: #357ca5 !important;\n}\n.bg-green-active,\n.modal-success .modal-header,\n.modal-success .modal-footer {\n  background-color: #008d4c !important;\n}\n.bg-navy-active {\n  background-color: #001a35 !important;\n}\n.bg-teal-active {\n  background-color: #30bbbb !important;\n}\n.bg-olive-active {\n  background-color: #368763 !important;\n}\n.bg-lime-active {\n  background-color: #00e765 !important;\n}\n.bg-orange-active {\n  background-color: #ff7701 !important;\n}\n.bg-fuchsia-active {\n  background-color: #db0ead !important;\n}\n.bg-purple-active {\n  background-color: #555299 !important;\n}\n.bg-maroon-active {\n  background-color: #ca195a !important;\n}\n[class^=\"bg-\"].disabled {\n  opacity: 0.65;\n  filter: alpha(opacity=65);\n}\n.text-red {\n  color: #dd4b39 !important;\n}\n.text-yellow {\n  color: #f39c12 !important;\n}\n.text-aqua {\n  color: #00c0ef !important;\n}\n.text-blue {\n  color: #0073b7 !important;\n}\n.text-black {\n  color: #111111 !important;\n}\n.text-light-blue {\n  color: #3c8dbc !important;\n}\n.text-green {\n  color: #00a65a !important;\n}\n.text-gray {\n  color: #d2d6de !important;\n}\n.text-navy {\n  color: #001f3f !important;\n}\n.text-teal {\n  color: #39cccc !important;\n}\n.text-olive {\n  color: #3d9970 !important;\n}\n.text-lime {\n  color: #01ff70 !important;\n}\n.text-orange {\n  color: #ff851b !important;\n}\n.text-fuchsia {\n  color: #f012be !important;\n}\n.text-purple {\n  color: #605ca8 !important;\n}\n.text-maroon {\n  color: #d81b60 !important;\n}\n.link-muted {\n  color: #7a869d;\n}\n.link-muted:hover,\n.link-muted:focus {\n  color: #606c84;\n}\n.link-black {\n  color: #666;\n}\n.link-black:hover,\n.link-black:focus {\n  color: #999;\n}\n.hide {\n  display: none !important;\n}\n.no-border {\n  border: 0 !important;\n}\n.no-padding {\n  padding: 0 !important;\n}\n.no-margin {\n  margin: 0 !important;\n}\n.no-shadow {\n  box-shadow: none !important;\n}\n.list-unstyled,\n.chart-legend,\n.contacts-list,\n.users-list,\n.mailbox-attachments {\n  list-style: none;\n  margin: 0;\n  padding: 0;\n}\n.list-group-unbordered > .list-group-item {\n  border-left: 0;\n  border-right: 0;\n  border-radius: 0;\n  padding-left: 0;\n  padding-right: 0;\n}\n.flat {\n  border-radius: 0 !important;\n}\n.text-bold,\n.text-bold.table td,\n.text-bold.table th {\n  font-weight: 700;\n}\n.text-sm {\n  font-size: 12px;\n}\n.jqstooltip {\n  padding: 5px !important;\n  width: auto !important;\n  height: auto !important;\n}\n.bg-teal-gradient {\n  background: #39cccc !important;\n  background: -webkit-gradient(linear, left bottom, left top, color-stop(0, #39cccc), color-stop(1, #7adddd)) !important;\n  background: -ms-linear-gradient(bottom, #39cccc, #7adddd) !important;\n  background: -moz-linear-gradient(center bottom, #39cccc 0%, #7adddd 100%) !important;\n  background: -o-linear-gradient(#7adddd, #39cccc) !important;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#7adddd', endColorstr='#39cccc', GradientType=0) !important;\n  color: #fff;\n}\n.bg-light-blue-gradient {\n  background: #3c8dbc !important;\n  background: -webkit-gradient(linear, left bottom, left top, color-stop(0, #3c8dbc), color-stop(1, #67a8ce)) !important;\n  background: -ms-linear-gradient(bottom, #3c8dbc, #67a8ce) !important;\n  background: -moz-linear-gradient(center bottom, #3c8dbc 0%, #67a8ce 100%) !important;\n  background: -o-linear-gradient(#67a8ce, #3c8dbc) !important;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#67a8ce', endColorstr='#3c8dbc', GradientType=0) !important;\n  color: #fff;\n}\n.bg-blue-gradient {\n  background: #0073b7 !important;\n  background: -webkit-gradient(linear, left bottom, left top, color-stop(0, #0073b7), color-stop(1, #0089db)) !important;\n  background: -ms-linear-gradient(bottom, #0073b7, #0089db) !important;\n  background: -moz-linear-gradient(center bottom, #0073b7 0%, #0089db 100%) !important;\n  background: -o-linear-gradient(#0089db, #0073b7) !important;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#0089db', endColorstr='#0073b7', GradientType=0) !important;\n  color: #fff;\n}\n.bg-aqua-gradient {\n  background: #00c0ef !important;\n  background: -webkit-gradient(linear, left bottom, left top, color-stop(0, #00c0ef), color-stop(1, #14d1ff)) !important;\n  background: -ms-linear-gradient(bottom, #00c0ef, #14d1ff) !important;\n  background: -moz-linear-gradient(center bottom, #00c0ef 0%, #14d1ff 100%) !important;\n  background: -o-linear-gradient(#14d1ff, #00c0ef) !important;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#14d1ff', endColorstr='#00c0ef', GradientType=0) !important;\n  color: #fff;\n}\n.bg-yellow-gradient {\n  background: #f39c12 !important;\n  background: -webkit-gradient(linear, left bottom, left top, color-stop(0, #f39c12), color-stop(1, #f7bc60)) !important;\n  background: -ms-linear-gradient(bottom, #f39c12, #f7bc60) !important;\n  background: -moz-linear-gradient(center bottom, #f39c12 0%, #f7bc60 100%) !important;\n  background: -o-linear-gradient(#f7bc60, #f39c12) !important;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#f7bc60', endColorstr='#f39c12', GradientType=0) !important;\n  color: #fff;\n}\n.bg-purple-gradient {\n  background: #605ca8 !important;\n  background: -webkit-gradient(linear, left bottom, left top, color-stop(0, #605ca8), color-stop(1, #9491c4)) !important;\n  background: -ms-linear-gradient(bottom, #605ca8, #9491c4) !important;\n  background: -moz-linear-gradient(center bottom, #605ca8 0%, #9491c4 100%) !important;\n  background: -o-linear-gradient(#9491c4, #605ca8) !important;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#9491c4', endColorstr='#605ca8', GradientType=0) !important;\n  color: #fff;\n}\n.bg-green-gradient {\n  background: #00a65a !important;\n  background: -webkit-gradient(linear, left bottom, left top, color-stop(0, #00a65a), color-stop(1, #00ca6d)) !important;\n  background: -ms-linear-gradient(bottom, #00a65a, #00ca6d) !important;\n  background: -moz-linear-gradient(center bottom, #00a65a 0%, #00ca6d 100%) !important;\n  background: -o-linear-gradient(#00ca6d, #00a65a) !important;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00ca6d', endColorstr='#00a65a', GradientType=0) !important;\n  color: #fff;\n}\n.bg-red-gradient {\n  background: #dd4b39 !important;\n  background: -webkit-gradient(linear, left bottom, left top, color-stop(0, #dd4b39), color-stop(1, #e47365)) !important;\n  background: -ms-linear-gradient(bottom, #dd4b39, #e47365) !important;\n  background: -moz-linear-gradient(center bottom, #dd4b39 0%, #e47365 100%) !important;\n  background: -o-linear-gradient(#e47365, #dd4b39) !important;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#e47365', endColorstr='#dd4b39', GradientType=0) !important;\n  color: #fff;\n}\n.bg-black-gradient {\n  background: #111111 !important;\n  background: -webkit-gradient(linear, left bottom, left top, color-stop(0, #111111), color-stop(1, #2b2b2b)) !important;\n  background: -ms-linear-gradient(bottom, #111111, #2b2b2b) !important;\n  background: -moz-linear-gradient(center bottom, #111111 0%, #2b2b2b 100%) !important;\n  background: -o-linear-gradient(#2b2b2b, #111111) !important;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#2b2b2b', endColorstr='#111111', GradientType=0) !important;\n  color: #fff;\n}\n.bg-maroon-gradient {\n  background: #d81b60 !important;\n  background: -webkit-gradient(linear, left bottom, left top, color-stop(0, #d81b60), color-stop(1, #e73f7c)) !important;\n  background: -ms-linear-gradient(bottom, #d81b60, #e73f7c) !important;\n  background: -moz-linear-gradient(center bottom, #d81b60 0%, #e73f7c 100%) !important;\n  background: -o-linear-gradient(#e73f7c, #d81b60) !important;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#e73f7c', endColorstr='#d81b60', GradientType=0) !important;\n  color: #fff;\n}\n.description-block .description-icon {\n  font-size: 16px;\n}\n.no-pad-top {\n  padding-top: 0;\n}\n.position-static {\n  position: static !important;\n}\n.list-header {\n  font-size: 15px;\n  padding: 10px 4px;\n  font-weight: bold;\n  color: #666;\n}\n.list-seperator {\n  height: 1px;\n  background: #f4f4f4;\n  margin: 15px 0 9px 0;\n}\n.list-link > a {\n  padding: 4px;\n  color: #777;\n}\n.list-link > a:hover {\n  color: #222;\n}\n.font-light {\n  font-weight: 300;\n}\n.user-block:before,\n.user-block:after {\n  content: \" \";\n  display: table;\n}\n.user-block:after {\n  clear: both;\n}\n.user-block img {\n  width: 40px;\n  height: 40px;\n  float: left;\n}\n.user-block .username,\n.user-block .description,\n.user-block .comment {\n  display: block;\n  margin-left: 50px;\n}\n.user-block .username {\n  font-size: 16px;\n  font-weight: 600;\n}\n.user-block .description {\n  color: #999;\n  font-size: 13px;\n}\n.user-block.user-block-sm .username,\n.user-block.user-block-sm .description,\n.user-block.user-block-sm .comment {\n  margin-left: 40px;\n}\n.user-block.user-block-sm .username {\n  font-size: 14px;\n}\n.img-sm,\n.img-md,\n.img-lg,\n.box-comments .box-comment img,\n.user-block.user-block-sm img {\n  float: left;\n}\n.img-sm,\n.box-comments .box-comment img,\n.user-block.user-block-sm img {\n  width: 30px !important;\n  height: 30px !important;\n}\n.img-sm + .img-push {\n  margin-left: 40px;\n}\n.img-md {\n  width: 60px;\n  height: 60px;\n}\n.img-md + .img-push {\n  margin-left: 70px;\n}\n.img-lg {\n  width: 100px;\n  height: 100px;\n}\n.img-lg + .img-push {\n  margin-left: 110px;\n}\n.img-bordered {\n  border: 3px solid #d2d6de;\n  padding: 3px;\n}\n.img-bordered-sm {\n  border: 2px solid #d2d6de;\n  padding: 2px;\n}\n.attachment-block {\n  border: 1px solid #f4f4f4;\n  padding: 5px;\n  margin-bottom: 10px;\n  background: #f7f7f7;\n}\n.attachment-block .attachment-img {\n  max-width: 100px;\n  max-height: 100px;\n  height: auto;\n  float: left;\n}\n.attachment-block .attachment-pushed {\n  margin-left: 110px;\n}\n.attachment-block .attachment-heading {\n  margin: 0;\n}\n.attachment-block .attachment-text {\n  color: #555;\n}\n.connectedSortable {\n  min-height: 100px;\n}\n.ui-helper-hidden-accessible {\n  border: 0;\n  clip: rect(0 0 0 0);\n  height: 1px;\n  margin: -1px;\n  overflow: hidden;\n  padding: 0;\n  position: absolute;\n  width: 1px;\n}\n.sort-highlight {\n  background: #f4f4f4;\n  border: 1px dashed #ddd;\n  margin-bottom: 10px;\n}\n.full-opacity-hover {\n  opacity: 0.65;\n  filter: alpha(opacity=65);\n}\n.full-opacity-hover:hover {\n  opacity: 1;\n  filter: alpha(opacity=100);\n}\n.chart {\n  position: relative;\n  overflow: hidden;\n  width: 100%;\n}\n.chart svg,\n.chart canvas {\n  width: 100% !important;\n}\n/*\n * Misc: print\n * -----------\n */\n@media print {\n  .no-print,\n  .main-sidebar,\n  .left-side,\n  .main-header,\n  .content-header {\n    display: none !important;\n  }\n  .content-wrapper,\n  .right-side,\n  .main-footer {\n    margin-left: 0 !important;\n    min-height: 0 !important;\n    -webkit-transform: translate(0, 0) !important;\n    -ms-transform: translate(0, 0) !important;\n    -o-transform: translate(0, 0) !important;\n    transform: translate(0, 0) !important;\n  }\n  .fixed .content-wrapper,\n  .fixed .right-side {\n    padding-top: 0 !important;\n  }\n  .invoice {\n    width: 100%;\n    border: 0;\n    margin: 0;\n    padding: 0;\n  }\n  .invoice-col {\n    float: left;\n    width: 33.3333333%;\n  }\n  .table-responsive {\n    overflow: auto;\n  }\n  .table-responsive > .table tr th,\n  .table-responsive > .table tr td {\n    white-space: normal !important;\n  }\n}\n"
  },
  {
    "path": "src/main/resources/static/css/alt/AdminLTE-bootstrap-social.css",
    "content": "/*\n * Social Buttons for Bootstrap\n *\n * Copyright 2013-2015 Panayiotis Lipiridis\n * Licensed under the MIT License\n *\n * https://github.com/lipis/bootstrap-social\n */\n.btn-social {\n  position: relative;\n  padding-left: 44px;\n  text-align: left;\n  white-space: nowrap;\n  overflow: hidden;\n  text-overflow: ellipsis;\n}\n.btn-social > :first-child {\n  position: absolute;\n  left: 0;\n  top: 0;\n  bottom: 0;\n  width: 32px;\n  line-height: 34px;\n  font-size: 1.6em;\n  text-align: center;\n  border-right: 1px solid rgba(0, 0, 0, 0.2);\n}\n.btn-social.btn-lg {\n  padding-left: 61px;\n}\n.btn-social.btn-lg > :first-child {\n  line-height: 45px;\n  width: 45px;\n  font-size: 1.8em;\n}\n.btn-social.btn-sm {\n  padding-left: 38px;\n}\n.btn-social.btn-sm > :first-child {\n  line-height: 28px;\n  width: 28px;\n  font-size: 1.4em;\n}\n.btn-social.btn-xs {\n  padding-left: 30px;\n}\n.btn-social.btn-xs > :first-child {\n  line-height: 20px;\n  width: 20px;\n  font-size: 1.2em;\n}\n.btn-social-icon {\n  position: relative;\n  padding-left: 44px;\n  text-align: left;\n  white-space: nowrap;\n  overflow: hidden;\n  text-overflow: ellipsis;\n  height: 34px;\n  width: 34px;\n  padding: 0;\n}\n.btn-social-icon > :first-child {\n  position: absolute;\n  left: 0;\n  top: 0;\n  bottom: 0;\n  width: 32px;\n  line-height: 34px;\n  font-size: 1.6em;\n  text-align: center;\n  border-right: 1px solid rgba(0, 0, 0, 0.2);\n}\n.btn-social-icon.btn-lg {\n  padding-left: 61px;\n}\n.btn-social-icon.btn-lg > :first-child {\n  line-height: 45px;\n  width: 45px;\n  font-size: 1.8em;\n}\n.btn-social-icon.btn-sm {\n  padding-left: 38px;\n}\n.btn-social-icon.btn-sm > :first-child {\n  line-height: 28px;\n  width: 28px;\n  font-size: 1.4em;\n}\n.btn-social-icon.btn-xs {\n  padding-left: 30px;\n}\n.btn-social-icon.btn-xs > :first-child {\n  line-height: 20px;\n  width: 20px;\n  font-size: 1.2em;\n}\n.btn-social-icon > :first-child {\n  border: none;\n  text-align: center;\n  width: 100%;\n}\n.btn-social-icon.btn-lg {\n  height: 45px;\n  width: 45px;\n  padding-left: 0;\n  padding-right: 0;\n}\n.btn-social-icon.btn-sm {\n  height: 30px;\n  width: 30px;\n  padding-left: 0;\n  padding-right: 0;\n}\n.btn-social-icon.btn-xs {\n  height: 22px;\n  width: 22px;\n  padding-left: 0;\n  padding-right: 0;\n}\n.btn-adn {\n  color: #ffffff;\n  background-color: #d87a68;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-adn:focus,\n.btn-adn.focus {\n  color: #ffffff;\n  background-color: #ce563f;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-adn:hover {\n  color: #ffffff;\n  background-color: #ce563f;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-adn:active,\n.btn-adn.active,\n.open > .dropdown-toggle.btn-adn {\n  color: #ffffff;\n  background-color: #ce563f;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-adn:active,\n.btn-adn.active,\n.open > .dropdown-toggle.btn-adn {\n  background-image: none;\n}\n.btn-adn .badge {\n  color: #d87a68;\n  background-color: #ffffff;\n}\n.btn-bitbucket {\n  color: #ffffff;\n  background-color: #205081;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-bitbucket:focus,\n.btn-bitbucket.focus {\n  color: #ffffff;\n  background-color: #163758;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-bitbucket:hover {\n  color: #ffffff;\n  background-color: #163758;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-bitbucket:active,\n.btn-bitbucket.active,\n.open > .dropdown-toggle.btn-bitbucket {\n  color: #ffffff;\n  background-color: #163758;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-bitbucket:active,\n.btn-bitbucket.active,\n.open > .dropdown-toggle.btn-bitbucket {\n  background-image: none;\n}\n.btn-bitbucket .badge {\n  color: #205081;\n  background-color: #ffffff;\n}\n.btn-dropbox {\n  color: #ffffff;\n  background-color: #1087dd;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-dropbox:focus,\n.btn-dropbox.focus {\n  color: #ffffff;\n  background-color: #0d6aad;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-dropbox:hover {\n  color: #ffffff;\n  background-color: #0d6aad;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-dropbox:active,\n.btn-dropbox.active,\n.open > .dropdown-toggle.btn-dropbox {\n  color: #ffffff;\n  background-color: #0d6aad;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-dropbox:active,\n.btn-dropbox.active,\n.open > .dropdown-toggle.btn-dropbox {\n  background-image: none;\n}\n.btn-dropbox .badge {\n  color: #1087dd;\n  background-color: #ffffff;\n}\n.btn-facebook {\n  color: #ffffff;\n  background-color: #3b5998;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-facebook:focus,\n.btn-facebook.focus {\n  color: #ffffff;\n  background-color: #2d4373;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-facebook:hover {\n  color: #ffffff;\n  background-color: #2d4373;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-facebook:active,\n.btn-facebook.active,\n.open > .dropdown-toggle.btn-facebook {\n  color: #ffffff;\n  background-color: #2d4373;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-facebook:active,\n.btn-facebook.active,\n.open > .dropdown-toggle.btn-facebook {\n  background-image: none;\n}\n.btn-facebook .badge {\n  color: #3b5998;\n  background-color: #ffffff;\n}\n.btn-flickr {\n  color: #ffffff;\n  background-color: #ff0084;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-flickr:focus,\n.btn-flickr.focus {\n  color: #ffffff;\n  background-color: #cc006a;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-flickr:hover {\n  color: #ffffff;\n  background-color: #cc006a;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-flickr:active,\n.btn-flickr.active,\n.open > .dropdown-toggle.btn-flickr {\n  color: #ffffff;\n  background-color: #cc006a;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-flickr:active,\n.btn-flickr.active,\n.open > .dropdown-toggle.btn-flickr {\n  background-image: none;\n}\n.btn-flickr .badge {\n  color: #ff0084;\n  background-color: #ffffff;\n}\n.btn-foursquare {\n  color: #ffffff;\n  background-color: #f94877;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-foursquare:focus,\n.btn-foursquare.focus {\n  color: #ffffff;\n  background-color: #f71752;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-foursquare:hover {\n  color: #ffffff;\n  background-color: #f71752;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-foursquare:active,\n.btn-foursquare.active,\n.open > .dropdown-toggle.btn-foursquare {\n  color: #ffffff;\n  background-color: #f71752;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-foursquare:active,\n.btn-foursquare.active,\n.open > .dropdown-toggle.btn-foursquare {\n  background-image: none;\n}\n.btn-foursquare .badge {\n  color: #f94877;\n  background-color: #ffffff;\n}\n.btn-github {\n  color: #ffffff;\n  background-color: #444444;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-github:focus,\n.btn-github.focus {\n  color: #ffffff;\n  background-color: #2b2b2b;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-github:hover {\n  color: #ffffff;\n  background-color: #2b2b2b;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-github:active,\n.btn-github.active,\n.open > .dropdown-toggle.btn-github {\n  color: #ffffff;\n  background-color: #2b2b2b;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-github:active,\n.btn-github.active,\n.open > .dropdown-toggle.btn-github {\n  background-image: none;\n}\n.btn-github .badge {\n  color: #444444;\n  background-color: #ffffff;\n}\n.btn-google {\n  color: #ffffff;\n  background-color: #dd4b39;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-google:focus,\n.btn-google.focus {\n  color: #ffffff;\n  background-color: #c23321;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-google:hover {\n  color: #ffffff;\n  background-color: #c23321;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-google:active,\n.btn-google.active,\n.open > .dropdown-toggle.btn-google {\n  color: #ffffff;\n  background-color: #c23321;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-google:active,\n.btn-google.active,\n.open > .dropdown-toggle.btn-google {\n  background-image: none;\n}\n.btn-google .badge {\n  color: #dd4b39;\n  background-color: #ffffff;\n}\n.btn-instagram {\n  color: #ffffff;\n  background-color: #3f729b;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-instagram:focus,\n.btn-instagram.focus {\n  color: #ffffff;\n  background-color: #305777;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-instagram:hover {\n  color: #ffffff;\n  background-color: #305777;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-instagram:active,\n.btn-instagram.active,\n.open > .dropdown-toggle.btn-instagram {\n  color: #ffffff;\n  background-color: #305777;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-instagram:active,\n.btn-instagram.active,\n.open > .dropdown-toggle.btn-instagram {\n  background-image: none;\n}\n.btn-instagram .badge {\n  color: #3f729b;\n  background-color: #ffffff;\n}\n.btn-linkedin {\n  color: #ffffff;\n  background-color: #007bb6;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-linkedin:focus,\n.btn-linkedin.focus {\n  color: #ffffff;\n  background-color: #005983;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-linkedin:hover {\n  color: #ffffff;\n  background-color: #005983;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-linkedin:active,\n.btn-linkedin.active,\n.open > .dropdown-toggle.btn-linkedin {\n  color: #ffffff;\n  background-color: #005983;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-linkedin:active,\n.btn-linkedin.active,\n.open > .dropdown-toggle.btn-linkedin {\n  background-image: none;\n}\n.btn-linkedin .badge {\n  color: #007bb6;\n  background-color: #ffffff;\n}\n.btn-microsoft {\n  color: #ffffff;\n  background-color: #2672ec;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-microsoft:focus,\n.btn-microsoft.focus {\n  color: #ffffff;\n  background-color: #125acd;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-microsoft:hover {\n  color: #ffffff;\n  background-color: #125acd;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-microsoft:active,\n.btn-microsoft.active,\n.open > .dropdown-toggle.btn-microsoft {\n  color: #ffffff;\n  background-color: #125acd;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-microsoft:active,\n.btn-microsoft.active,\n.open > .dropdown-toggle.btn-microsoft {\n  background-image: none;\n}\n.btn-microsoft .badge {\n  color: #2672ec;\n  background-color: #ffffff;\n}\n.btn-openid {\n  color: #ffffff;\n  background-color: #f7931e;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-openid:focus,\n.btn-openid.focus {\n  color: #ffffff;\n  background-color: #da7908;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-openid:hover {\n  color: #ffffff;\n  background-color: #da7908;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-openid:active,\n.btn-openid.active,\n.open > .dropdown-toggle.btn-openid {\n  color: #ffffff;\n  background-color: #da7908;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-openid:active,\n.btn-openid.active,\n.open > .dropdown-toggle.btn-openid {\n  background-image: none;\n}\n.btn-openid .badge {\n  color: #f7931e;\n  background-color: #ffffff;\n}\n.btn-pinterest {\n  color: #ffffff;\n  background-color: #cb2027;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-pinterest:focus,\n.btn-pinterest.focus {\n  color: #ffffff;\n  background-color: #9f191f;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-pinterest:hover {\n  color: #ffffff;\n  background-color: #9f191f;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-pinterest:active,\n.btn-pinterest.active,\n.open > .dropdown-toggle.btn-pinterest {\n  color: #ffffff;\n  background-color: #9f191f;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-pinterest:active,\n.btn-pinterest.active,\n.open > .dropdown-toggle.btn-pinterest {\n  background-image: none;\n}\n.btn-pinterest .badge {\n  color: #cb2027;\n  background-color: #ffffff;\n}\n.btn-reddit {\n  color: #000000;\n  background-color: #eff7ff;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-reddit:focus,\n.btn-reddit.focus {\n  color: #000000;\n  background-color: #bcddff;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-reddit:hover {\n  color: #000000;\n  background-color: #bcddff;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-reddit:active,\n.btn-reddit.active,\n.open > .dropdown-toggle.btn-reddit {\n  color: #000000;\n  background-color: #bcddff;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-reddit:active,\n.btn-reddit.active,\n.open > .dropdown-toggle.btn-reddit {\n  background-image: none;\n}\n.btn-reddit .badge {\n  color: #eff7ff;\n  background-color: #000000;\n}\n.btn-soundcloud {\n  color: #ffffff;\n  background-color: #ff5500;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-soundcloud:focus,\n.btn-soundcloud.focus {\n  color: #ffffff;\n  background-color: #cc4400;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-soundcloud:hover {\n  color: #ffffff;\n  background-color: #cc4400;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-soundcloud:active,\n.btn-soundcloud.active,\n.open > .dropdown-toggle.btn-soundcloud {\n  color: #ffffff;\n  background-color: #cc4400;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-soundcloud:active,\n.btn-soundcloud.active,\n.open > .dropdown-toggle.btn-soundcloud {\n  background-image: none;\n}\n.btn-soundcloud .badge {\n  color: #ff5500;\n  background-color: #ffffff;\n}\n.btn-tumblr {\n  color: #ffffff;\n  background-color: #2c4762;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-tumblr:focus,\n.btn-tumblr.focus {\n  color: #ffffff;\n  background-color: #1c2d3f;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-tumblr:hover {\n  color: #ffffff;\n  background-color: #1c2d3f;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-tumblr:active,\n.btn-tumblr.active,\n.open > .dropdown-toggle.btn-tumblr {\n  color: #ffffff;\n  background-color: #1c2d3f;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-tumblr:active,\n.btn-tumblr.active,\n.open > .dropdown-toggle.btn-tumblr {\n  background-image: none;\n}\n.btn-tumblr .badge {\n  color: #2c4762;\n  background-color: #ffffff;\n}\n.btn-twitter {\n  color: #ffffff;\n  background-color: #55acee;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-twitter:focus,\n.btn-twitter.focus {\n  color: #ffffff;\n  background-color: #2795e9;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-twitter:hover {\n  color: #ffffff;\n  background-color: #2795e9;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-twitter:active,\n.btn-twitter.active,\n.open > .dropdown-toggle.btn-twitter {\n  color: #ffffff;\n  background-color: #2795e9;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-twitter:active,\n.btn-twitter.active,\n.open > .dropdown-toggle.btn-twitter {\n  background-image: none;\n}\n.btn-twitter .badge {\n  color: #55acee;\n  background-color: #ffffff;\n}\n.btn-vimeo {\n  color: #ffffff;\n  background-color: #1ab7ea;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-vimeo:focus,\n.btn-vimeo.focus {\n  color: #ffffff;\n  background-color: #1295bf;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-vimeo:hover {\n  color: #ffffff;\n  background-color: #1295bf;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-vimeo:active,\n.btn-vimeo.active,\n.open > .dropdown-toggle.btn-vimeo {\n  color: #ffffff;\n  background-color: #1295bf;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-vimeo:active,\n.btn-vimeo.active,\n.open > .dropdown-toggle.btn-vimeo {\n  background-image: none;\n}\n.btn-vimeo .badge {\n  color: #1ab7ea;\n  background-color: #ffffff;\n}\n.btn-vk {\n  color: #ffffff;\n  background-color: #587ea3;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-vk:focus,\n.btn-vk.focus {\n  color: #ffffff;\n  background-color: #466482;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-vk:hover {\n  color: #ffffff;\n  background-color: #466482;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-vk:active,\n.btn-vk.active,\n.open > .dropdown-toggle.btn-vk {\n  color: #ffffff;\n  background-color: #466482;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-vk:active,\n.btn-vk.active,\n.open > .dropdown-toggle.btn-vk {\n  background-image: none;\n}\n.btn-vk .badge {\n  color: #587ea3;\n  background-color: #ffffff;\n}\n.btn-yahoo {\n  color: #ffffff;\n  background-color: #720e9e;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-yahoo:focus,\n.btn-yahoo.focus {\n  color: #ffffff;\n  background-color: #500a6f;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-yahoo:hover {\n  color: #ffffff;\n  background-color: #500a6f;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-yahoo:active,\n.btn-yahoo.active,\n.open > .dropdown-toggle.btn-yahoo {\n  color: #ffffff;\n  background-color: #500a6f;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-yahoo:active,\n.btn-yahoo.active,\n.open > .dropdown-toggle.btn-yahoo {\n  background-image: none;\n}\n.btn-yahoo .badge {\n  color: #720e9e;\n  background-color: #ffffff;\n}\n"
  },
  {
    "path": "src/main/resources/static/css/alt/AdminLTE-select2.css",
    "content": "/*\n * Plugin: Select2\n * ---------------\n */\n.select2-container--default.select2-container--focus,\n.select2-selection.select2-container--focus,\n.select2-container--default:focus,\n.select2-selection:focus,\n.select2-container--default:active,\n.select2-selection:active {\n  outline: none;\n}\n.select2-container--default .select2-selection--single,\n.select2-selection .select2-selection--single {\n  border: 1px solid #d2d6de;\n  border-radius: 0;\n  padding: 6px 12px;\n  height: 34px;\n}\n.select2-container--default.select2-container--open {\n  border-color: #3c8dbc;\n}\n.select2-dropdown {\n  border: 1px solid #d2d6de;\n  border-radius: 0;\n}\n.select2-container--default .select2-results__option--highlighted[aria-selected] {\n  background-color: #3c8dbc;\n  color: white;\n}\n.select2-results__option {\n  padding: 6px 12px;\n  user-select: none;\n  -webkit-user-select: none;\n}\n.select2-container .select2-selection--single .select2-selection__rendered {\n  padding-left: 0;\n  padding-right: 0;\n  height: auto;\n  margin-top: -4px;\n}\n.select2-container[dir=\"rtl\"] .select2-selection--single .select2-selection__rendered {\n  padding-right: 6px;\n  padding-left: 20px;\n}\n.select2-container--default .select2-selection--single .select2-selection__arrow {\n  height: 28px;\n  right: 3px;\n}\n.select2-container--default .select2-selection--single .select2-selection__arrow b {\n  margin-top: 0;\n}\n.select2-dropdown .select2-search__field,\n.select2-search--inline .select2-search__field {\n  border: 1px solid #d2d6de;\n}\n.select2-dropdown .select2-search__field:focus,\n.select2-search--inline .select2-search__field:focus {\n  outline: none;\n}\n.select2-container--default.select2-container--focus .select2-selection--multiple,\n.select2-container--default .select2-search--dropdown .select2-search__field {\n  border-color: #3c8dbc !important;\n}\n.select2-container--default .select2-results__option[aria-disabled=true] {\n  color: #999;\n}\n.select2-container--default .select2-results__option[aria-selected=true] {\n  background-color: #ddd;\n}\n.select2-container--default .select2-results__option[aria-selected=true],\n.select2-container--default .select2-results__option[aria-selected=true]:hover {\n  color: #444;\n}\n.select2-container--default .select2-selection--multiple {\n  border: 1px solid #d2d6de;\n  border-radius: 0;\n}\n.select2-container--default .select2-selection--multiple:focus {\n  border-color: #3c8dbc;\n}\n.select2-container--default.select2-container--focus .select2-selection--multiple {\n  border-color: #d2d6de;\n}\n.select2-container--default .select2-selection--multiple .select2-selection__choice {\n  background-color: #3c8dbc;\n  border-color: #367fa9;\n  padding: 1px 10px;\n  color: #fff;\n}\n.select2-container--default .select2-selection--multiple .select2-selection__choice__remove {\n  margin-right: 5px;\n  color: rgba(255, 255, 255, 0.7);\n}\n.select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover {\n  color: #fff;\n}\n.select2-container .select2-selection--single .select2-selection__rendered {\n  padding-right: 10px;\n}\n"
  },
  {
    "path": "src/main/resources/static/css/alt/AdminLTE-without-plugins.css",
    "content": "/*!\n *   AdminLTE v2.4.0 Without Third-Party Plugins\n *   Author: Almsaeed Studio\n *\t Website: Almsaeed Studio <https://adminlte.io>\n *   License: Open source - MIT\n *           Please visit http://opensource.org/licenses/MIT for more information\n!*/\n/*\n * Core: General Layout Style\n * -------------------------\n */\nhtml,\nbody {\n  height: 100%;\n}\n.layout-boxed html,\n.layout-boxed body {\n  height: 100%;\n}\nbody {\n  font-family: 'Source Sans Pro', 'Helvetica Neue', Helvetica, Arial, sans-serif;\n  font-weight: 400;\n  overflow-x: hidden;\n  overflow-y: auto;\n}\n/* Layout */\n.wrapper {\n  height: 100%;\n  position: relative;\n  overflow-x: hidden;\n  overflow-y: auto;\n}\n.wrapper:before,\n.wrapper:after {\n  content: \" \";\n  display: table;\n}\n.wrapper:after {\n  clear: both;\n}\n.layout-boxed .wrapper {\n  max-width: 1250px;\n  margin: 0 auto;\n  min-height: 100%;\n  box-shadow: 0 0 8px rgba(0, 0, 0, 0.5);\n  position: relative;\n}\n.layout-boxed {\n  background-color: #f9fafc;\n}\n/*\n * Content Wrapper - contains the main content\n */\n.content-wrapper,\n.main-footer {\n  -webkit-transition: -webkit-transform 0.3s ease-in-out, margin 0.3s ease-in-out;\n  -moz-transition: -moz-transform 0.3s ease-in-out, margin 0.3s ease-in-out;\n  -o-transition: -o-transform 0.3s ease-in-out, margin 0.3s ease-in-out;\n  transition: transform 0.3s ease-in-out, margin 0.3s ease-in-out;\n  margin-left: 230px;\n  z-index: 820;\n}\n.layout-top-nav .content-wrapper,\n.layout-top-nav .main-footer {\n  margin-left: 0;\n}\n@media (max-width: 767px) {\n  .content-wrapper,\n  .main-footer {\n    margin-left: 0;\n  }\n}\n@media (min-width: 768px) {\n  .sidebar-collapse .content-wrapper,\n  .sidebar-collapse .main-footer {\n    margin-left: 0;\n  }\n}\n@media (max-width: 767px) {\n  .sidebar-open .content-wrapper,\n  .sidebar-open .main-footer {\n    -webkit-transform: translate(230px, 0);\n    -ms-transform: translate(230px, 0);\n    -o-transform: translate(230px, 0);\n    transform: translate(230px, 0);\n  }\n}\n.content-wrapper {\n  min-height: 100%;\n  background-color: #ecf0f5;\n  z-index: 800;\n}\n.main-footer {\n  background: #fff;\n  padding: 15px;\n  color: #444;\n  border-top: 1px solid #d2d6de;\n}\n/* Fixed layout */\n.fixed .main-header,\n.fixed .main-sidebar,\n.fixed .left-side {\n  position: fixed;\n}\n.fixed .main-header {\n  top: 0;\n  right: 0;\n  left: 0;\n}\n.fixed .content-wrapper,\n.fixed .right-side {\n  padding-top: 50px;\n}\n@media (max-width: 767px) {\n  .fixed .content-wrapper,\n  .fixed .right-side {\n    padding-top: 100px;\n  }\n}\n.fixed.layout-boxed .wrapper {\n  max-width: 100%;\n}\n.fixed .wrapper {\n  overflow: hidden;\n}\n.hold-transition .content-wrapper,\n.hold-transition .right-side,\n.hold-transition .main-footer,\n.hold-transition .main-sidebar,\n.hold-transition .left-side,\n.hold-transition .main-header .navbar,\n.hold-transition .main-header .logo,\n.hold-transition .menu-open .fa-angle-left {\n  /* Fix for IE */\n  -webkit-transition: none;\n  -o-transition: none;\n  transition: none;\n}\n/* Content */\n.content {\n  min-height: 250px;\n  padding: 15px;\n  margin-right: auto;\n  margin-left: auto;\n  padding-left: 15px;\n  padding-right: 15px;\n}\n/* H1 - H6 font */\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\n.h1,\n.h2,\n.h3,\n.h4,\n.h5,\n.h6 {\n  font-family: 'Source Sans Pro', sans-serif;\n}\n/* General Links */\na {\n  color: #3c8dbc;\n}\na:hover,\na:active,\na:focus {\n  outline: none;\n  text-decoration: none;\n  color: #72afd2;\n}\n/* Page Header */\n.page-header {\n  margin: 10px 0 20px 0;\n  font-size: 22px;\n}\n.page-header > small {\n  color: #666;\n  display: block;\n  margin-top: 5px;\n}\n/*\n * Component: Main Header\n * ----------------------\n */\n.main-header {\n  position: relative;\n  max-height: 100px;\n  z-index: 1030;\n}\n.main-header .navbar {\n  -webkit-transition: margin-left 0.3s ease-in-out;\n  -o-transition: margin-left 0.3s ease-in-out;\n  transition: margin-left 0.3s ease-in-out;\n  margin-bottom: 0;\n  margin-left: 230px;\n  border: none;\n  min-height: 50px;\n  border-radius: 0;\n}\n.layout-top-nav .main-header .navbar {\n  margin-left: 0;\n}\n.main-header #navbar-search-input.form-control {\n  background: rgba(255, 255, 255, 0.2);\n  border-color: transparent;\n}\n.main-header #navbar-search-input.form-control:focus,\n.main-header #navbar-search-input.form-control:active {\n  border-color: rgba(0, 0, 0, 0.1);\n  background: rgba(255, 255, 255, 0.9);\n}\n.main-header #navbar-search-input.form-control::-moz-placeholder {\n  color: #ccc;\n  opacity: 1;\n}\n.main-header #navbar-search-input.form-control:-ms-input-placeholder {\n  color: #ccc;\n}\n.main-header #navbar-search-input.form-control::-webkit-input-placeholder {\n  color: #ccc;\n}\n.main-header .navbar-custom-menu,\n.main-header .navbar-right {\n  float: right;\n}\n@media (max-width: 991px) {\n  .main-header .navbar-custom-menu a,\n  .main-header .navbar-right a {\n    color: inherit;\n    background: transparent;\n  }\n}\n@media (max-width: 767px) {\n  .main-header .navbar-right {\n    float: none;\n  }\n  .navbar-collapse .main-header .navbar-right {\n    margin: 7.5px -15px;\n  }\n  .main-header .navbar-right > li {\n    color: inherit;\n    border: 0;\n  }\n}\n.main-header .sidebar-toggle {\n  float: left;\n  background-color: transparent;\n  background-image: none;\n  padding: 15px 15px;\n  font-family: fontAwesome;\n}\n.main-header .sidebar-toggle:before {\n  content: \"\\f0c9\";\n}\n.main-header .sidebar-toggle:hover {\n  color: #fff;\n}\n.main-header .sidebar-toggle:focus,\n.main-header .sidebar-toggle:active {\n  background: transparent;\n}\n.main-header .sidebar-toggle .icon-bar {\n  display: none;\n}\n.main-header .navbar .nav > li.user > a > .fa,\n.main-header .navbar .nav > li.user > a > .glyphicon,\n.main-header .navbar .nav > li.user > a > .ion {\n  margin-right: 5px;\n}\n.main-header .navbar .nav > li > a > .label {\n  position: absolute;\n  top: 9px;\n  right: 7px;\n  text-align: center;\n  font-size: 9px;\n  padding: 2px 3px;\n  line-height: .9;\n}\n.main-header .logo {\n  -webkit-transition: width 0.3s ease-in-out;\n  -o-transition: width 0.3s ease-in-out;\n  transition: width 0.3s ease-in-out;\n  display: block;\n  float: left;\n  height: 50px;\n  font-size: 20px;\n  line-height: 50px;\n  text-align: center;\n  width: 230px;\n  font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n  padding: 0 15px;\n  font-weight: 300;\n  overflow: hidden;\n}\n.main-header .logo .logo-lg {\n  display: block;\n}\n.main-header .logo .logo-mini {\n  display: none;\n}\n.main-header .navbar-brand {\n  color: #fff;\n}\n.content-header {\n  position: relative;\n  padding: 15px 15px 0 15px;\n}\n.content-header > h1 {\n  margin: 0;\n  font-size: 24px;\n}\n.content-header > h1 > small {\n  font-size: 15px;\n  display: inline-block;\n  padding-left: 4px;\n  font-weight: 300;\n}\n.content-header > .breadcrumb {\n  float: right;\n  background: transparent;\n  margin-top: 0;\n  margin-bottom: 0;\n  font-size: 12px;\n  padding: 7px 5px;\n  position: absolute;\n  top: 15px;\n  right: 10px;\n  border-radius: 2px;\n}\n.content-header > .breadcrumb > li > a {\n  color: #444;\n  text-decoration: none;\n  display: inline-block;\n}\n.content-header > .breadcrumb > li > a > .fa,\n.content-header > .breadcrumb > li > a > .glyphicon,\n.content-header > .breadcrumb > li > a > .ion {\n  margin-right: 5px;\n}\n.content-header > .breadcrumb > li + li:before {\n  content: '>\\00a0';\n}\n@media (max-width: 991px) {\n  .content-header > .breadcrumb {\n    position: relative;\n    margin-top: 5px;\n    top: 0;\n    right: 0;\n    float: none;\n    background: #d2d6de;\n    padding-left: 10px;\n  }\n  .content-header > .breadcrumb li:before {\n    color: #97a0b3;\n  }\n}\n.navbar-toggle {\n  color: #fff;\n  border: 0;\n  margin: 0;\n  padding: 15px 15px;\n}\n@media (max-width: 991px) {\n  .navbar-custom-menu .navbar-nav > li {\n    float: left;\n  }\n  .navbar-custom-menu .navbar-nav {\n    margin: 0;\n    float: left;\n  }\n  .navbar-custom-menu .navbar-nav > li > a {\n    padding-top: 15px;\n    padding-bottom: 15px;\n    line-height: 20px;\n  }\n}\n@media (max-width: 767px) {\n  .main-header {\n    position: relative;\n  }\n  .main-header .logo,\n  .main-header .navbar {\n    width: 100%;\n    float: none;\n  }\n  .main-header .navbar {\n    margin: 0;\n  }\n  .main-header .navbar-custom-menu {\n    float: right;\n  }\n}\n@media (max-width: 991px) {\n  .navbar-collapse.pull-left {\n    float: none !important;\n  }\n  .navbar-collapse.pull-left + .navbar-custom-menu {\n    display: block;\n    position: absolute;\n    top: 0;\n    right: 40px;\n  }\n}\n/*\n * Component: Sidebar\n * ------------------\n */\n.main-sidebar {\n  position: absolute;\n  top: 0;\n  left: 0;\n  padding-top: 50px;\n  min-height: 100%;\n  width: 230px;\n  z-index: 810;\n  -webkit-transition: -webkit-transform 0.3s ease-in-out, width 0.3s ease-in-out;\n  -moz-transition: -moz-transform 0.3s ease-in-out, width 0.3s ease-in-out;\n  -o-transition: -o-transform 0.3s ease-in-out, width 0.3s ease-in-out;\n  transition: transform 0.3s ease-in-out, width 0.3s ease-in-out;\n}\n@media (max-width: 767px) {\n  .main-sidebar {\n    padding-top: 100px;\n  }\n}\n@media (max-width: 767px) {\n  .main-sidebar {\n    -webkit-transform: translate(-230px, 0);\n    -ms-transform: translate(-230px, 0);\n    -o-transform: translate(-230px, 0);\n    transform: translate(-230px, 0);\n  }\n}\n@media (min-width: 768px) {\n  .sidebar-collapse .main-sidebar {\n    -webkit-transform: translate(-230px, 0);\n    -ms-transform: translate(-230px, 0);\n    -o-transform: translate(-230px, 0);\n    transform: translate(-230px, 0);\n  }\n}\n@media (max-width: 767px) {\n  .sidebar-open .main-sidebar {\n    -webkit-transform: translate(0, 0);\n    -ms-transform: translate(0, 0);\n    -o-transform: translate(0, 0);\n    transform: translate(0, 0);\n  }\n}\n.sidebar {\n  padding-bottom: 10px;\n}\n.sidebar-form input:focus {\n  border-color: transparent;\n}\n.user-panel {\n  position: relative;\n  width: 100%;\n  padding: 10px;\n  overflow: hidden;\n}\n.user-panel:before,\n.user-panel:after {\n  content: \" \";\n  display: table;\n}\n.user-panel:after {\n  clear: both;\n}\n.user-panel > .image > img {\n  width: 100%;\n  max-width: 45px;\n  height: auto;\n}\n.user-panel > .info {\n  padding: 5px 5px 5px 15px;\n  line-height: 1;\n  position: absolute;\n  left: 55px;\n}\n.user-panel > .info > p {\n  font-weight: 600;\n  margin-bottom: 9px;\n}\n.user-panel > .info > a {\n  text-decoration: none;\n  padding-right: 5px;\n  margin-top: 3px;\n  font-size: 11px;\n}\n.user-panel > .info > a > .fa,\n.user-panel > .info > a > .ion,\n.user-panel > .info > a > .glyphicon {\n  margin-right: 3px;\n}\n.sidebar-menu {\n  list-style: none;\n  margin: 0;\n  padding: 0;\n}\n.sidebar-menu > li {\n  position: relative;\n  margin: 0;\n  padding: 0;\n}\n.sidebar-menu > li > a {\n  padding: 12px 5px 12px 15px;\n  display: block;\n}\n.sidebar-menu > li > a > .fa,\n.sidebar-menu > li > a > .glyphicon,\n.sidebar-menu > li > a > .ion {\n  width: 20px;\n}\n.sidebar-menu > li .label,\n.sidebar-menu > li .badge {\n  margin-right: 5px;\n}\n.sidebar-menu > li .badge {\n  margin-top: 3px;\n}\n.sidebar-menu li.header {\n  padding: 10px 25px 10px 15px;\n  font-size: 12px;\n}\n.sidebar-menu li > a > .fa-angle-left,\n.sidebar-menu li > a > .pull-right-container > .fa-angle-left {\n  width: auto;\n  height: auto;\n  padding: 0;\n  margin-right: 10px;\n  -webkit-transition: transform 0.5s ease;\n  -o-transition: transform 0.5s ease;\n  transition: transform 0.5s ease;\n}\n.sidebar-menu li > a > .fa-angle-left {\n  position: absolute;\n  top: 50%;\n  right: 10px;\n  margin-top: -8px;\n}\n.sidebar-menu .menu-open > a > .fa-angle-left,\n.sidebar-menu .menu-open > a > .pull-right-container > .fa-angle-left {\n  -webkit-transform: rotate(-90deg);\n  -ms-transform: rotate(-90deg);\n  -o-transform: rotate(-90deg);\n  transform: rotate(-90deg);\n}\n.sidebar-menu .active > .treeview-menu {\n  display: block;\n}\n/*\n * Component: Sidebar Mini\n */\n@media (min-width: 768px) {\n  .sidebar-mini.sidebar-collapse .content-wrapper,\n  .sidebar-mini.sidebar-collapse .right-side,\n  .sidebar-mini.sidebar-collapse .main-footer {\n    margin-left: 50px !important;\n    z-index: 840;\n  }\n  .sidebar-mini.sidebar-collapse .main-sidebar {\n    -webkit-transform: translate(0, 0);\n    -ms-transform: translate(0, 0);\n    -o-transform: translate(0, 0);\n    transform: translate(0, 0);\n    width: 50px !important;\n    z-index: 850;\n  }\n  .sidebar-mini.sidebar-collapse .sidebar-menu > li {\n    position: relative;\n  }\n  .sidebar-mini.sidebar-collapse .sidebar-menu > li > a {\n    margin-right: 0;\n  }\n  .sidebar-mini.sidebar-collapse .sidebar-menu > li > a > span {\n    border-top-right-radius: 4px;\n  }\n  .sidebar-mini.sidebar-collapse .sidebar-menu > li:not(.treeview) > a > span {\n    border-bottom-right-radius: 4px;\n  }\n  .sidebar-mini.sidebar-collapse .sidebar-menu > li > .treeview-menu {\n    padding-top: 5px;\n    padding-bottom: 5px;\n    border-bottom-right-radius: 4px;\n  }\n  .sidebar-mini.sidebar-collapse .main-sidebar .user-panel > .info,\n  .sidebar-mini.sidebar-collapse .sidebar-form,\n  .sidebar-mini.sidebar-collapse .sidebar-menu > li > a > span,\n  .sidebar-mini.sidebar-collapse .sidebar-menu > li > .treeview-menu,\n  .sidebar-mini.sidebar-collapse .sidebar-menu > li > a > .pull-right,\n  .sidebar-mini.sidebar-collapse .sidebar-menu li.header {\n    display: none !important;\n    -webkit-transform: translateZ(0);\n  }\n  .sidebar-mini.sidebar-collapse .main-header .logo {\n    width: 50px;\n  }\n  .sidebar-mini.sidebar-collapse .main-header .logo > .logo-mini {\n    display: block;\n    margin-left: -15px;\n    margin-right: -15px;\n    font-size: 18px;\n  }\n  .sidebar-mini.sidebar-collapse .main-header .logo > .logo-lg {\n    display: none;\n  }\n  .sidebar-mini.sidebar-collapse .main-header .navbar {\n    margin-left: 50px;\n  }\n}\n.sidebar-mini:not(.sidebar-mini-expand-feature).sidebar-collapse .sidebar-menu > li:hover > a > span:not(.pull-right),\n.sidebar-mini:not(.sidebar-mini-expand-feature).sidebar-collapse .sidebar-menu > li:hover > .treeview-menu {\n  display: block !important;\n  position: absolute;\n  width: 180px;\n  left: 50px;\n}\n.sidebar-mini:not(.sidebar-mini-expand-feature).sidebar-collapse .sidebar-menu > li:hover > a > span {\n  top: 0;\n  margin-left: -3px;\n  padding: 12px 5px 12px 20px;\n  background-color: inherit;\n}\n.sidebar-mini:not(.sidebar-mini-expand-feature).sidebar-collapse .sidebar-menu > li:hover > a > .pull-right-container {\n  position: relative !important;\n  float: right;\n  width: auto !important;\n  left: 180px !important;\n  top: -22px !important;\n  z-index: 900;\n}\n.sidebar-mini:not(.sidebar-mini-expand-feature).sidebar-collapse .sidebar-menu > li:hover > a > .pull-right-container > .label:not(:first-of-type) {\n  display: none;\n}\n.sidebar-mini:not(.sidebar-mini-expand-feature).sidebar-collapse .sidebar-menu > li:hover > .treeview-menu {\n  top: 44px;\n  margin-left: 0;\n}\n.sidebar-expanded-on-hover .main-footer,\n.sidebar-expanded-on-hover .content-wrapper {\n  margin-left: 50px;\n}\n.sidebar-expanded-on-hover .main-sidebar {\n  box-shadow: 3px 0 8px rgba(0, 0, 0, 0.125);\n}\n.sidebar-menu,\n.main-sidebar .user-panel,\n.sidebar-menu > li.header {\n  white-space: nowrap;\n  overflow: hidden;\n}\n.sidebar-menu:hover {\n  overflow: visible;\n}\n.sidebar-form,\n.sidebar-menu > li.header {\n  overflow: hidden;\n  text-overflow: clip;\n}\n.sidebar-menu li > a {\n  position: relative;\n}\n.sidebar-menu li > a > .pull-right-container {\n  position: absolute;\n  right: 10px;\n  top: 50%;\n  margin-top: -7px;\n}\n/*\n * Component: Control sidebar. By default, this is the right sidebar.\n */\n.control-sidebar-bg {\n  position: fixed;\n  z-index: 1000;\n  bottom: 0;\n}\n.control-sidebar-bg,\n.control-sidebar {\n  top: 0;\n  right: -230px;\n  width: 230px;\n  -webkit-transition: right 0.3s ease-in-out;\n  -o-transition: right 0.3s ease-in-out;\n  transition: right 0.3s ease-in-out;\n}\n.control-sidebar {\n  position: absolute;\n  padding-top: 50px;\n  z-index: 1010;\n}\n@media (max-width: 767px) {\n  .control-sidebar {\n    padding-top: 100px;\n  }\n}\n.control-sidebar > .tab-content {\n  padding: 10px 15px;\n}\n.control-sidebar.control-sidebar-open,\n.control-sidebar.control-sidebar-open + .control-sidebar-bg {\n  right: 0;\n}\n.control-sidebar-open .control-sidebar-bg,\n.control-sidebar-open .control-sidebar {\n  right: 0;\n}\n@media (min-width: 768px) {\n  .control-sidebar-open .content-wrapper,\n  .control-sidebar-open .right-side,\n  .control-sidebar-open .main-footer {\n    margin-right: 230px;\n  }\n}\n.fixed .control-sidebar {\n  position: fixed;\n  height: 100%;\n  overflow-y: auto;\n  padding-bottom: 50px;\n}\n.nav-tabs.control-sidebar-tabs > li:first-of-type > a,\n.nav-tabs.control-sidebar-tabs > li:first-of-type > a:hover,\n.nav-tabs.control-sidebar-tabs > li:first-of-type > a:focus {\n  border-left-width: 0;\n}\n.nav-tabs.control-sidebar-tabs > li > a {\n  border-radius: 0;\n}\n.nav-tabs.control-sidebar-tabs > li > a,\n.nav-tabs.control-sidebar-tabs > li > a:hover {\n  border-top: none;\n  border-right: none;\n  border-left: 1px solid transparent;\n  border-bottom: 1px solid transparent;\n}\n.nav-tabs.control-sidebar-tabs > li > a .icon {\n  font-size: 16px;\n}\n.nav-tabs.control-sidebar-tabs > li.active > a,\n.nav-tabs.control-sidebar-tabs > li.active > a:hover,\n.nav-tabs.control-sidebar-tabs > li.active > a:focus,\n.nav-tabs.control-sidebar-tabs > li.active > a:active {\n  border-top: none;\n  border-right: none;\n  border-bottom: none;\n}\n@media (max-width: 768px) {\n  .nav-tabs.control-sidebar-tabs {\n    display: table;\n  }\n  .nav-tabs.control-sidebar-tabs > li {\n    display: table-cell;\n  }\n}\n.control-sidebar-heading {\n  font-weight: 400;\n  font-size: 16px;\n  padding: 10px 0;\n  margin-bottom: 10px;\n}\n.control-sidebar-subheading {\n  display: block;\n  font-weight: 400;\n  font-size: 14px;\n}\n.control-sidebar-menu {\n  list-style: none;\n  padding: 0;\n  margin: 0 -15px;\n}\n.control-sidebar-menu > li > a {\n  display: block;\n  padding: 10px 15px;\n}\n.control-sidebar-menu > li > a:before,\n.control-sidebar-menu > li > a:after {\n  content: \" \";\n  display: table;\n}\n.control-sidebar-menu > li > a:after {\n  clear: both;\n}\n.control-sidebar-menu > li > a > .control-sidebar-subheading {\n  margin-top: 0;\n}\n.control-sidebar-menu .menu-icon {\n  float: left;\n  width: 35px;\n  height: 35px;\n  border-radius: 50%;\n  text-align: center;\n  line-height: 35px;\n}\n.control-sidebar-menu .menu-info {\n  margin-left: 45px;\n  margin-top: 3px;\n}\n.control-sidebar-menu .menu-info > .control-sidebar-subheading {\n  margin: 0;\n}\n.control-sidebar-menu .menu-info > p {\n  margin: 0;\n  font-size: 11px;\n}\n.control-sidebar-menu .progress {\n  margin: 0;\n}\n.control-sidebar-dark {\n  color: #b8c7ce;\n}\n.control-sidebar-dark,\n.control-sidebar-dark + .control-sidebar-bg {\n  background: #222d32;\n}\n.control-sidebar-dark .nav-tabs.control-sidebar-tabs {\n  border-bottom: #1c2529;\n}\n.control-sidebar-dark .nav-tabs.control-sidebar-tabs > li > a {\n  background: #181f23;\n  color: #b8c7ce;\n}\n.control-sidebar-dark .nav-tabs.control-sidebar-tabs > li > a,\n.control-sidebar-dark .nav-tabs.control-sidebar-tabs > li > a:hover,\n.control-sidebar-dark .nav-tabs.control-sidebar-tabs > li > a:focus {\n  border-left-color: #141a1d;\n  border-bottom-color: #141a1d;\n}\n.control-sidebar-dark .nav-tabs.control-sidebar-tabs > li > a:hover,\n.control-sidebar-dark .nav-tabs.control-sidebar-tabs > li > a:focus,\n.control-sidebar-dark .nav-tabs.control-sidebar-tabs > li > a:active {\n  background: #1c2529;\n}\n.control-sidebar-dark .nav-tabs.control-sidebar-tabs > li > a:hover {\n  color: #fff;\n}\n.control-sidebar-dark .nav-tabs.control-sidebar-tabs > li.active > a,\n.control-sidebar-dark .nav-tabs.control-sidebar-tabs > li.active > a:hover,\n.control-sidebar-dark .nav-tabs.control-sidebar-tabs > li.active > a:focus,\n.control-sidebar-dark .nav-tabs.control-sidebar-tabs > li.active > a:active {\n  background: #222d32;\n  color: #fff;\n}\n.control-sidebar-dark .control-sidebar-heading,\n.control-sidebar-dark .control-sidebar-subheading {\n  color: #fff;\n}\n.control-sidebar-dark .control-sidebar-menu > li > a:hover {\n  background: #1e282c;\n}\n.control-sidebar-dark .control-sidebar-menu > li > a .menu-info > p {\n  color: #b8c7ce;\n}\n.control-sidebar-light {\n  color: #5e5e5e;\n}\n.control-sidebar-light,\n.control-sidebar-light + .control-sidebar-bg {\n  background: #f9fafc;\n  border-left: 1px solid #d2d6de;\n}\n.control-sidebar-light .nav-tabs.control-sidebar-tabs {\n  border-bottom: #d2d6de;\n}\n.control-sidebar-light .nav-tabs.control-sidebar-tabs > li > a {\n  background: #e8ecf4;\n  color: #444444;\n}\n.control-sidebar-light .nav-tabs.control-sidebar-tabs > li > a,\n.control-sidebar-light .nav-tabs.control-sidebar-tabs > li > a:hover,\n.control-sidebar-light .nav-tabs.control-sidebar-tabs > li > a:focus {\n  border-left-color: #d2d6de;\n  border-bottom-color: #d2d6de;\n}\n.control-sidebar-light .nav-tabs.control-sidebar-tabs > li > a:hover,\n.control-sidebar-light .nav-tabs.control-sidebar-tabs > li > a:focus,\n.control-sidebar-light .nav-tabs.control-sidebar-tabs > li > a:active {\n  background: #eff1f7;\n}\n.control-sidebar-light .nav-tabs.control-sidebar-tabs > li.active > a,\n.control-sidebar-light .nav-tabs.control-sidebar-tabs > li.active > a:hover,\n.control-sidebar-light .nav-tabs.control-sidebar-tabs > li.active > a:focus,\n.control-sidebar-light .nav-tabs.control-sidebar-tabs > li.active > a:active {\n  background: #f9fafc;\n  color: #111;\n}\n.control-sidebar-light .control-sidebar-heading,\n.control-sidebar-light .control-sidebar-subheading {\n  color: #111;\n}\n.control-sidebar-light .control-sidebar-menu {\n  margin-left: -14px;\n}\n.control-sidebar-light .control-sidebar-menu > li > a:hover {\n  background: #f4f4f5;\n}\n.control-sidebar-light .control-sidebar-menu > li > a .menu-info > p {\n  color: #5e5e5e;\n}\n/*\n * Component: Dropdown menus\n * -------------------------\n */\n/*Dropdowns in general*/\n.dropdown-menu {\n  box-shadow: none;\n  border-color: #eee;\n}\n.dropdown-menu > li > a {\n  color: #777;\n}\n.dropdown-menu > li > a > .glyphicon,\n.dropdown-menu > li > a > .fa,\n.dropdown-menu > li > a > .ion {\n  margin-right: 10px;\n}\n.dropdown-menu > li > a:hover {\n  background-color: #e1e3e9;\n  color: #333;\n}\n.dropdown-menu > .divider {\n  background-color: #eee;\n}\n.navbar-nav > .notifications-menu > .dropdown-menu,\n.navbar-nav > .messages-menu > .dropdown-menu,\n.navbar-nav > .tasks-menu > .dropdown-menu {\n  width: 280px;\n  padding: 0 0 0 0;\n  margin: 0;\n  top: 100%;\n}\n.navbar-nav > .notifications-menu > .dropdown-menu > li,\n.navbar-nav > .messages-menu > .dropdown-menu > li,\n.navbar-nav > .tasks-menu > .dropdown-menu > li {\n  position: relative;\n}\n.navbar-nav > .notifications-menu > .dropdown-menu > li.header,\n.navbar-nav > .messages-menu > .dropdown-menu > li.header,\n.navbar-nav > .tasks-menu > .dropdown-menu > li.header {\n  border-top-left-radius: 4px;\n  border-top-right-radius: 4px;\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 0;\n  background-color: #ffffff;\n  padding: 7px 10px;\n  border-bottom: 1px solid #f4f4f4;\n  color: #444444;\n  font-size: 14px;\n}\n.navbar-nav > .notifications-menu > .dropdown-menu > li.footer > a,\n.navbar-nav > .messages-menu > .dropdown-menu > li.footer > a,\n.navbar-nav > .tasks-menu > .dropdown-menu > li.footer > a {\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 4px;\n  border-bottom-left-radius: 4px;\n  font-size: 12px;\n  background-color: #fff;\n  padding: 7px 10px;\n  border-bottom: 1px solid #eeeeee;\n  color: #444 !important;\n  text-align: center;\n}\n@media (max-width: 991px) {\n  .navbar-nav > .notifications-menu > .dropdown-menu > li.footer > a,\n  .navbar-nav > .messages-menu > .dropdown-menu > li.footer > a,\n  .navbar-nav > .tasks-menu > .dropdown-menu > li.footer > a {\n    background: #fff !important;\n    color: #444 !important;\n  }\n}\n.navbar-nav > .notifications-menu > .dropdown-menu > li.footer > a:hover,\n.navbar-nav > .messages-menu > .dropdown-menu > li.footer > a:hover,\n.navbar-nav > .tasks-menu > .dropdown-menu > li.footer > a:hover {\n  text-decoration: none;\n  font-weight: normal;\n}\n.navbar-nav > .notifications-menu > .dropdown-menu > li .menu,\n.navbar-nav > .messages-menu > .dropdown-menu > li .menu,\n.navbar-nav > .tasks-menu > .dropdown-menu > li .menu {\n  max-height: 200px;\n  margin: 0;\n  padding: 0;\n  list-style: none;\n  overflow-x: hidden;\n}\n.navbar-nav > .notifications-menu > .dropdown-menu > li .menu > li > a,\n.navbar-nav > .messages-menu > .dropdown-menu > li .menu > li > a,\n.navbar-nav > .tasks-menu > .dropdown-menu > li .menu > li > a {\n  display: block;\n  white-space: nowrap;\n  /* Prevent text from breaking */\n  border-bottom: 1px solid #f4f4f4;\n}\n.navbar-nav > .notifications-menu > .dropdown-menu > li .menu > li > a:hover,\n.navbar-nav > .messages-menu > .dropdown-menu > li .menu > li > a:hover,\n.navbar-nav > .tasks-menu > .dropdown-menu > li .menu > li > a:hover {\n  background: #f4f4f4;\n  text-decoration: none;\n}\n.navbar-nav > .notifications-menu > .dropdown-menu > li .menu > li > a {\n  color: #444444;\n  overflow: hidden;\n  text-overflow: ellipsis;\n  padding: 10px;\n}\n.navbar-nav > .notifications-menu > .dropdown-menu > li .menu > li > a > .glyphicon,\n.navbar-nav > .notifications-menu > .dropdown-menu > li .menu > li > a > .fa,\n.navbar-nav > .notifications-menu > .dropdown-menu > li .menu > li > a > .ion {\n  width: 20px;\n}\n.navbar-nav > .messages-menu > .dropdown-menu > li .menu > li > a {\n  margin: 0;\n  padding: 10px 10px;\n}\n.navbar-nav > .messages-menu > .dropdown-menu > li .menu > li > a > div > img {\n  margin: auto 10px auto auto;\n  width: 40px;\n  height: 40px;\n}\n.navbar-nav > .messages-menu > .dropdown-menu > li .menu > li > a > h4 {\n  padding: 0;\n  margin: 0 0 0 45px;\n  color: #444444;\n  font-size: 15px;\n  position: relative;\n}\n.navbar-nav > .messages-menu > .dropdown-menu > li .menu > li > a > h4 > small {\n  color: #999999;\n  font-size: 10px;\n  position: absolute;\n  top: 0;\n  right: 0;\n}\n.navbar-nav > .messages-menu > .dropdown-menu > li .menu > li > a > p {\n  margin: 0 0 0 45px;\n  font-size: 12px;\n  color: #888888;\n}\n.navbar-nav > .messages-menu > .dropdown-menu > li .menu > li > a:before,\n.navbar-nav > .messages-menu > .dropdown-menu > li .menu > li > a:after {\n  content: \" \";\n  display: table;\n}\n.navbar-nav > .messages-menu > .dropdown-menu > li .menu > li > a:after {\n  clear: both;\n}\n.navbar-nav > .tasks-menu > .dropdown-menu > li .menu > li > a {\n  padding: 10px;\n}\n.navbar-nav > .tasks-menu > .dropdown-menu > li .menu > li > a > h3 {\n  font-size: 14px;\n  padding: 0;\n  margin: 0 0 10px 0;\n  color: #666666;\n}\n.navbar-nav > .tasks-menu > .dropdown-menu > li .menu > li > a > .progress {\n  padding: 0;\n  margin: 0;\n}\n.navbar-nav > .user-menu > .dropdown-menu {\n  border-top-right-radius: 0;\n  border-top-left-radius: 0;\n  padding: 1px 0 0 0;\n  border-top-width: 0;\n  width: 280px;\n}\n.navbar-nav > .user-menu > .dropdown-menu,\n.navbar-nav > .user-menu > .dropdown-menu > .user-body {\n  border-bottom-right-radius: 4px;\n  border-bottom-left-radius: 4px;\n}\n.navbar-nav > .user-menu > .dropdown-menu > li.user-header {\n  height: 175px;\n  padding: 10px;\n  text-align: center;\n}\n.navbar-nav > .user-menu > .dropdown-menu > li.user-header > img {\n  z-index: 5;\n  height: 90px;\n  width: 90px;\n  border: 3px solid;\n  border-color: transparent;\n  border-color: rgba(255, 255, 255, 0.2);\n}\n.navbar-nav > .user-menu > .dropdown-menu > li.user-header > p {\n  z-index: 5;\n  color: #fff;\n  color: rgba(255, 255, 255, 0.8);\n  font-size: 17px;\n  margin-top: 10px;\n}\n.navbar-nav > .user-menu > .dropdown-menu > li.user-header > p > small {\n  display: block;\n  font-size: 12px;\n}\n.navbar-nav > .user-menu > .dropdown-menu > .user-body {\n  padding: 15px;\n  border-bottom: 1px solid #f4f4f4;\n  border-top: 1px solid #dddddd;\n}\n.navbar-nav > .user-menu > .dropdown-menu > .user-body:before,\n.navbar-nav > .user-menu > .dropdown-menu > .user-body:after {\n  content: \" \";\n  display: table;\n}\n.navbar-nav > .user-menu > .dropdown-menu > .user-body:after {\n  clear: both;\n}\n.navbar-nav > .user-menu > .dropdown-menu > .user-body a {\n  color: #444 !important;\n}\n@media (max-width: 991px) {\n  .navbar-nav > .user-menu > .dropdown-menu > .user-body a {\n    background: #fff !important;\n    color: #444 !important;\n  }\n}\n.navbar-nav > .user-menu > .dropdown-menu > .user-footer {\n  background-color: #f9f9f9;\n  padding: 10px;\n}\n.navbar-nav > .user-menu > .dropdown-menu > .user-footer:before,\n.navbar-nav > .user-menu > .dropdown-menu > .user-footer:after {\n  content: \" \";\n  display: table;\n}\n.navbar-nav > .user-menu > .dropdown-menu > .user-footer:after {\n  clear: both;\n}\n.navbar-nav > .user-menu > .dropdown-menu > .user-footer .btn-default {\n  color: #666666;\n}\n@media (max-width: 991px) {\n  .navbar-nav > .user-menu > .dropdown-menu > .user-footer .btn-default:hover {\n    background-color: #f9f9f9;\n  }\n}\n.navbar-nav > .user-menu .user-image {\n  float: left;\n  width: 25px;\n  height: 25px;\n  border-radius: 50%;\n  margin-right: 10px;\n  margin-top: -2px;\n}\n@media (max-width: 767px) {\n  .navbar-nav > .user-menu .user-image {\n    float: none;\n    margin-right: 0;\n    margin-top: -8px;\n    line-height: 10px;\n  }\n}\n/* Add fade animation to dropdown menus by appending\n the class .animated-dropdown-menu to the .dropdown-menu ul (or ol)*/\n.open:not(.dropup) > .animated-dropdown-menu {\n  backface-visibility: visible !important;\n  -webkit-animation: flipInX 0.7s both;\n  -o-animation: flipInX 0.7s both;\n  animation: flipInX 0.7s both;\n}\n@keyframes flipInX {\n  0% {\n    transform: perspective(400px) rotate3d(1, 0, 0, 90deg);\n    transition-timing-function: ease-in;\n    opacity: 0;\n  }\n  40% {\n    transform: perspective(400px) rotate3d(1, 0, 0, -20deg);\n    transition-timing-function: ease-in;\n  }\n  60% {\n    transform: perspective(400px) rotate3d(1, 0, 0, 10deg);\n    opacity: 1;\n  }\n  80% {\n    transform: perspective(400px) rotate3d(1, 0, 0, -5deg);\n  }\n  100% {\n    transform: perspective(400px);\n  }\n}\n@-webkit-keyframes flipInX {\n  0% {\n    -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg);\n    -webkit-transition-timing-function: ease-in;\n    opacity: 0;\n  }\n  40% {\n    -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg);\n    -webkit-transition-timing-function: ease-in;\n  }\n  60% {\n    -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 10deg);\n    opacity: 1;\n  }\n  80% {\n    -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -5deg);\n  }\n  100% {\n    -webkit-transform: perspective(400px);\n  }\n}\n/* Fix dropdown menu in navbars */\n.navbar-custom-menu > .navbar-nav > li {\n  position: relative;\n}\n.navbar-custom-menu > .navbar-nav > li > .dropdown-menu {\n  position: absolute;\n  right: 0;\n  left: auto;\n}\n@media (max-width: 991px) {\n  .navbar-custom-menu > .navbar-nav {\n    float: right;\n  }\n  .navbar-custom-menu > .navbar-nav > li {\n    position: static;\n  }\n  .navbar-custom-menu > .navbar-nav > li > .dropdown-menu {\n    position: absolute;\n    right: 5%;\n    left: auto;\n    border: 1px solid #ddd;\n    background: #fff;\n  }\n}\n/*\n * Component: Form\n * ---------------\n */\n.form-control {\n  border-radius: 0;\n  box-shadow: none;\n  border-color: #d2d6de;\n}\n.form-control:focus {\n  border-color: #3c8dbc;\n  box-shadow: none;\n}\n.form-control::-moz-placeholder,\n.form-control:-ms-input-placeholder,\n.form-control::-webkit-input-placeholder {\n  color: #bbb;\n  opacity: 1;\n}\n.form-control:not(select) {\n  -webkit-appearance: none;\n  -moz-appearance: none;\n  appearance: none;\n}\n.form-group.has-success label {\n  color: #00a65a;\n}\n.form-group.has-success .form-control,\n.form-group.has-success .input-group-addon {\n  border-color: #00a65a;\n  box-shadow: none;\n}\n.form-group.has-success .help-block {\n  color: #00a65a;\n}\n.form-group.has-warning label {\n  color: #f39c12;\n}\n.form-group.has-warning .form-control,\n.form-group.has-warning .input-group-addon {\n  border-color: #f39c12;\n  box-shadow: none;\n}\n.form-group.has-warning .help-block {\n  color: #f39c12;\n}\n.form-group.has-error label {\n  color: #dd4b39;\n}\n.form-group.has-error .form-control,\n.form-group.has-error .input-group-addon {\n  border-color: #dd4b39;\n  box-shadow: none;\n}\n.form-group.has-error .help-block {\n  color: #dd4b39;\n}\n/* Input group */\n.input-group .input-group-addon {\n  border-radius: 0;\n  border-color: #d2d6de;\n  background-color: #fff;\n}\n/* button groups */\n.btn-group-vertical .btn.btn-flat:first-of-type,\n.btn-group-vertical .btn.btn-flat:last-of-type {\n  border-radius: 0;\n}\n.icheck > label {\n  padding-left: 0;\n}\n/* support Font Awesome icons in form-control */\n.form-control-feedback.fa {\n  line-height: 34px;\n}\n.input-lg + .form-control-feedback.fa,\n.input-group-lg + .form-control-feedback.fa,\n.form-group-lg .form-control + .form-control-feedback.fa {\n  line-height: 46px;\n}\n.input-sm + .form-control-feedback.fa,\n.input-group-sm + .form-control-feedback.fa,\n.form-group-sm .form-control + .form-control-feedback.fa {\n  line-height: 30px;\n}\n/*\n * Component: Progress Bar\n * -----------------------\n */\n.progress,\n.progress > .progress-bar {\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n.progress,\n.progress > .progress-bar,\n.progress .progress-bar,\n.progress > .progress-bar .progress-bar {\n  border-radius: 1px;\n}\n/* size variation */\n.progress.sm,\n.progress-sm {\n  height: 10px;\n}\n.progress.sm,\n.progress-sm,\n.progress.sm .progress-bar,\n.progress-sm .progress-bar {\n  border-radius: 1px;\n}\n.progress.xs,\n.progress-xs {\n  height: 7px;\n}\n.progress.xs,\n.progress-xs,\n.progress.xs .progress-bar,\n.progress-xs .progress-bar {\n  border-radius: 1px;\n}\n.progress.xxs,\n.progress-xxs {\n  height: 3px;\n}\n.progress.xxs,\n.progress-xxs,\n.progress.xxs .progress-bar,\n.progress-xxs .progress-bar {\n  border-radius: 1px;\n}\n/* Vertical bars */\n.progress.vertical {\n  position: relative;\n  width: 30px;\n  height: 200px;\n  display: inline-block;\n  margin-right: 10px;\n}\n.progress.vertical > .progress-bar {\n  width: 100%;\n  position: absolute;\n  bottom: 0;\n}\n.progress.vertical.sm,\n.progress.vertical.progress-sm {\n  width: 20px;\n}\n.progress.vertical.xs,\n.progress.vertical.progress-xs {\n  width: 10px;\n}\n.progress.vertical.xxs,\n.progress.vertical.progress-xxs {\n  width: 3px;\n}\n.progress-group .progress-text {\n  font-weight: 600;\n}\n.progress-group .progress-number {\n  float: right;\n}\n/* Remove margins from progress bars when put in a table */\n.table tr > td .progress {\n  margin: 0;\n}\n.progress-bar-light-blue,\n.progress-bar-primary {\n  background-color: #3c8dbc;\n}\n.progress-striped .progress-bar-light-blue,\n.progress-striped .progress-bar-primary {\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.progress-bar-green,\n.progress-bar-success {\n  background-color: #00a65a;\n}\n.progress-striped .progress-bar-green,\n.progress-striped .progress-bar-success {\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.progress-bar-aqua,\n.progress-bar-info {\n  background-color: #00c0ef;\n}\n.progress-striped .progress-bar-aqua,\n.progress-striped .progress-bar-info {\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.progress-bar-yellow,\n.progress-bar-warning {\n  background-color: #f39c12;\n}\n.progress-striped .progress-bar-yellow,\n.progress-striped .progress-bar-warning {\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.progress-bar-red,\n.progress-bar-danger {\n  background-color: #dd4b39;\n}\n.progress-striped .progress-bar-red,\n.progress-striped .progress-bar-danger {\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n/*\n * Component: Small Box\n * --------------------\n */\n.small-box {\n  border-radius: 2px;\n  position: relative;\n  display: block;\n  margin-bottom: 20px;\n  box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1);\n}\n.small-box > .inner {\n  padding: 10px;\n}\n.small-box > .small-box-footer {\n  position: relative;\n  text-align: center;\n  padding: 3px 0;\n  color: #fff;\n  color: rgba(255, 255, 255, 0.8);\n  display: block;\n  z-index: 10;\n  background: rgba(0, 0, 0, 0.1);\n  text-decoration: none;\n}\n.small-box > .small-box-footer:hover {\n  color: #fff;\n  background: rgba(0, 0, 0, 0.15);\n}\n.small-box h3 {\n  font-size: 38px;\n  font-weight: bold;\n  margin: 0 0 10px 0;\n  white-space: nowrap;\n  padding: 0;\n}\n.small-box p {\n  font-size: 15px;\n}\n.small-box p > small {\n  display: block;\n  color: #f9f9f9;\n  font-size: 13px;\n  margin-top: 5px;\n}\n.small-box h3,\n.small-box p {\n  z-index: 5;\n}\n.small-box .icon {\n  -webkit-transition: all 0.3s linear;\n  -o-transition: all 0.3s linear;\n  transition: all 0.3s linear;\n  position: absolute;\n  top: -10px;\n  right: 10px;\n  z-index: 0;\n  font-size: 90px;\n  color: rgba(0, 0, 0, 0.15);\n}\n.small-box:hover {\n  text-decoration: none;\n  color: #f9f9f9;\n}\n.small-box:hover .icon {\n  font-size: 95px;\n}\n@media (max-width: 767px) {\n  .small-box {\n    text-align: center;\n  }\n  .small-box .icon {\n    display: none;\n  }\n  .small-box p {\n    font-size: 12px;\n  }\n}\n/*\n * Component: Box\n * --------------\n */\n.box {\n  position: relative;\n  border-radius: 3px;\n  background: #ffffff;\n  border-top: 3px solid #d2d6de;\n  margin-bottom: 20px;\n  width: 100%;\n  box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1);\n}\n.box.box-primary {\n  border-top-color: #3c8dbc;\n}\n.box.box-info {\n  border-top-color: #00c0ef;\n}\n.box.box-danger {\n  border-top-color: #dd4b39;\n}\n.box.box-warning {\n  border-top-color: #f39c12;\n}\n.box.box-success {\n  border-top-color: #00a65a;\n}\n.box.box-default {\n  border-top-color: #d2d6de;\n}\n.box.collapsed-box .box-body,\n.box.collapsed-box .box-footer {\n  display: none;\n}\n.box .nav-stacked > li {\n  border-bottom: 1px solid #f4f4f4;\n  margin: 0;\n}\n.box .nav-stacked > li:last-of-type {\n  border-bottom: none;\n}\n.box.height-control .box-body {\n  max-height: 300px;\n  overflow: auto;\n}\n.box .border-right {\n  border-right: 1px solid #f4f4f4;\n}\n.box .border-left {\n  border-left: 1px solid #f4f4f4;\n}\n.box.box-solid {\n  border-top: 0;\n}\n.box.box-solid > .box-header .btn.btn-default {\n  background: transparent;\n}\n.box.box-solid > .box-header .btn:hover,\n.box.box-solid > .box-header a:hover {\n  background: rgba(0, 0, 0, 0.1);\n}\n.box.box-solid.box-default {\n  border: 1px solid #d2d6de;\n}\n.box.box-solid.box-default > .box-header {\n  color: #444444;\n  background: #d2d6de;\n  background-color: #d2d6de;\n}\n.box.box-solid.box-default > .box-header a,\n.box.box-solid.box-default > .box-header .btn {\n  color: #444444;\n}\n.box.box-solid.box-primary {\n  border: 1px solid #3c8dbc;\n}\n.box.box-solid.box-primary > .box-header {\n  color: #ffffff;\n  background: #3c8dbc;\n  background-color: #3c8dbc;\n}\n.box.box-solid.box-primary > .box-header a,\n.box.box-solid.box-primary > .box-header .btn {\n  color: #ffffff;\n}\n.box.box-solid.box-info {\n  border: 1px solid #00c0ef;\n}\n.box.box-solid.box-info > .box-header {\n  color: #ffffff;\n  background: #00c0ef;\n  background-color: #00c0ef;\n}\n.box.box-solid.box-info > .box-header a,\n.box.box-solid.box-info > .box-header .btn {\n  color: #ffffff;\n}\n.box.box-solid.box-danger {\n  border: 1px solid #dd4b39;\n}\n.box.box-solid.box-danger > .box-header {\n  color: #ffffff;\n  background: #dd4b39;\n  background-color: #dd4b39;\n}\n.box.box-solid.box-danger > .box-header a,\n.box.box-solid.box-danger > .box-header .btn {\n  color: #ffffff;\n}\n.box.box-solid.box-warning {\n  border: 1px solid #f39c12;\n}\n.box.box-solid.box-warning > .box-header {\n  color: #ffffff;\n  background: #f39c12;\n  background-color: #f39c12;\n}\n.box.box-solid.box-warning > .box-header a,\n.box.box-solid.box-warning > .box-header .btn {\n  color: #ffffff;\n}\n.box.box-solid.box-success {\n  border: 1px solid #00a65a;\n}\n.box.box-solid.box-success > .box-header {\n  color: #ffffff;\n  background: #00a65a;\n  background-color: #00a65a;\n}\n.box.box-solid.box-success > .box-header a,\n.box.box-solid.box-success > .box-header .btn {\n  color: #ffffff;\n}\n.box.box-solid > .box-header > .box-tools .btn {\n  border: 0;\n  box-shadow: none;\n}\n.box.box-solid[class*='bg'] > .box-header {\n  color: #fff;\n}\n.box .box-group > .box {\n  margin-bottom: 5px;\n}\n.box .knob-label {\n  text-align: center;\n  color: #333;\n  font-weight: 100;\n  font-size: 12px;\n  margin-bottom: 0.3em;\n}\n.box > .overlay,\n.overlay-wrapper > .overlay,\n.box > .loading-img,\n.overlay-wrapper > .loading-img {\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n}\n.box .overlay,\n.overlay-wrapper .overlay {\n  z-index: 50;\n  background: rgba(255, 255, 255, 0.7);\n  border-radius: 3px;\n}\n.box .overlay > .fa,\n.overlay-wrapper .overlay > .fa {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n  margin-left: -15px;\n  margin-top: -15px;\n  color: #000;\n  font-size: 30px;\n}\n.box .overlay.dark,\n.overlay-wrapper .overlay.dark {\n  background: rgba(0, 0, 0, 0.5);\n}\n.box-header:before,\n.box-body:before,\n.box-footer:before,\n.box-header:after,\n.box-body:after,\n.box-footer:after {\n  content: \" \";\n  display: table;\n}\n.box-header:after,\n.box-body:after,\n.box-footer:after {\n  clear: both;\n}\n.box-header {\n  color: #444;\n  display: block;\n  padding: 10px;\n  position: relative;\n}\n.box-header.with-border {\n  border-bottom: 1px solid #f4f4f4;\n}\n.collapsed-box .box-header.with-border {\n  border-bottom: none;\n}\n.box-header > .fa,\n.box-header > .glyphicon,\n.box-header > .ion,\n.box-header .box-title {\n  display: inline-block;\n  font-size: 18px;\n  margin: 0;\n  line-height: 1;\n}\n.box-header > .fa,\n.box-header > .glyphicon,\n.box-header > .ion {\n  margin-right: 5px;\n}\n.box-header > .box-tools {\n  position: absolute;\n  right: 10px;\n  top: 5px;\n}\n.box-header > .box-tools [data-toggle=\"tooltip\"] {\n  position: relative;\n}\n.box-header > .box-tools.pull-right .dropdown-menu {\n  right: 0;\n  left: auto;\n}\n.box-header > .box-tools .dropdown-menu > li > a {\n  color: #444!important;\n}\n.btn-box-tool {\n  padding: 5px;\n  font-size: 12px;\n  background: transparent;\n  color: #97a0b3;\n}\n.open .btn-box-tool,\n.btn-box-tool:hover {\n  color: #606c84;\n}\n.btn-box-tool.btn:active {\n  box-shadow: none;\n}\n.box-body {\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 3px;\n  border-bottom-left-radius: 3px;\n  padding: 10px;\n}\n.no-header .box-body {\n  border-top-right-radius: 3px;\n  border-top-left-radius: 3px;\n}\n.box-body > .table {\n  margin-bottom: 0;\n}\n.box-body .fc {\n  margin-top: 5px;\n}\n.box-body .full-width-chart {\n  margin: -19px;\n}\n.box-body.no-padding .full-width-chart {\n  margin: -9px;\n}\n.box-body .box-pane {\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 3px;\n}\n.box-body .box-pane-right {\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 3px;\n  border-bottom-left-radius: 0;\n}\n.box-footer {\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 3px;\n  border-bottom-left-radius: 3px;\n  border-top: 1px solid #f4f4f4;\n  padding: 10px;\n  background-color: #ffffff;\n}\n.chart-legend {\n  margin: 10px 0;\n}\n@media (max-width: 991px) {\n  .chart-legend > li {\n    float: left;\n    margin-right: 10px;\n  }\n}\n.box-comments {\n  background: #f7f7f7;\n}\n.box-comments .box-comment {\n  padding: 8px 0;\n  border-bottom: 1px solid #eee;\n}\n.box-comments .box-comment:before,\n.box-comments .box-comment:after {\n  content: \" \";\n  display: table;\n}\n.box-comments .box-comment:after {\n  clear: both;\n}\n.box-comments .box-comment:last-of-type {\n  border-bottom: 0;\n}\n.box-comments .box-comment:first-of-type {\n  padding-top: 0;\n}\n.box-comments .box-comment img {\n  float: left;\n}\n.box-comments .comment-text {\n  margin-left: 40px;\n  color: #555;\n}\n.box-comments .username {\n  color: #444;\n  display: block;\n  font-weight: 600;\n}\n.box-comments .text-muted {\n  font-weight: 400;\n  font-size: 12px;\n}\n/* Widget: TODO LIST */\n.todo-list {\n  margin: 0;\n  padding: 0;\n  list-style: none;\n  overflow: auto;\n}\n.todo-list > li {\n  border-radius: 2px;\n  padding: 10px;\n  background: #f4f4f4;\n  margin-bottom: 2px;\n  border-left: 2px solid #e6e7e8;\n  color: #444;\n}\n.todo-list > li:last-of-type {\n  margin-bottom: 0;\n}\n.todo-list > li > input[type='checkbox'] {\n  margin: 0 10px 0 5px;\n}\n.todo-list > li .text {\n  display: inline-block;\n  margin-left: 5px;\n  font-weight: 600;\n}\n.todo-list > li .label {\n  margin-left: 10px;\n  font-size: 9px;\n}\n.todo-list > li .tools {\n  display: none;\n  float: right;\n  color: #dd4b39;\n}\n.todo-list > li .tools > .fa,\n.todo-list > li .tools > .glyphicon,\n.todo-list > li .tools > .ion {\n  margin-right: 5px;\n  cursor: pointer;\n}\n.todo-list > li:hover .tools {\n  display: inline-block;\n}\n.todo-list > li.done {\n  color: #999;\n}\n.todo-list > li.done .text {\n  text-decoration: line-through;\n  font-weight: 500;\n}\n.todo-list > li.done .label {\n  background: #d2d6de !important;\n}\n.todo-list .danger {\n  border-left-color: #dd4b39;\n}\n.todo-list .warning {\n  border-left-color: #f39c12;\n}\n.todo-list .info {\n  border-left-color: #00c0ef;\n}\n.todo-list .success {\n  border-left-color: #00a65a;\n}\n.todo-list .primary {\n  border-left-color: #3c8dbc;\n}\n.todo-list .handle {\n  display: inline-block;\n  cursor: move;\n  margin: 0 5px;\n}\n/* Chat widget (DEPRECATED - this will be removed in the next major release. Use Direct Chat instead)*/\n.chat {\n  padding: 5px 20px 5px 10px;\n}\n.chat .item {\n  margin-bottom: 10px;\n}\n.chat .item:before,\n.chat .item:after {\n  content: \" \";\n  display: table;\n}\n.chat .item:after {\n  clear: both;\n}\n.chat .item > img {\n  width: 40px;\n  height: 40px;\n  border: 2px solid transparent;\n  border-radius: 50%;\n}\n.chat .item > .online {\n  border: 2px solid #00a65a;\n}\n.chat .item > .offline {\n  border: 2px solid #dd4b39;\n}\n.chat .item > .message {\n  margin-left: 55px;\n  margin-top: -40px;\n}\n.chat .item > .message > .name {\n  display: block;\n  font-weight: 600;\n}\n.chat .item > .attachment {\n  border-radius: 3px;\n  background: #f4f4f4;\n  margin-left: 65px;\n  margin-right: 15px;\n  padding: 10px;\n}\n.chat .item > .attachment > h4 {\n  margin: 0 0 5px 0;\n  font-weight: 600;\n  font-size: 14px;\n}\n.chat .item > .attachment > p,\n.chat .item > .attachment > .filename {\n  font-weight: 600;\n  font-size: 13px;\n  font-style: italic;\n  margin: 0;\n}\n.chat .item > .attachment:before,\n.chat .item > .attachment:after {\n  content: \" \";\n  display: table;\n}\n.chat .item > .attachment:after {\n  clear: both;\n}\n.box-input {\n  max-width: 200px;\n}\n.modal .panel-body {\n  color: #444;\n}\n/*\n * Component: Info Box\n * -------------------\n */\n.info-box {\n  display: block;\n  min-height: 90px;\n  background: #fff;\n  width: 100%;\n  box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1);\n  border-radius: 2px;\n  margin-bottom: 15px;\n}\n.info-box small {\n  font-size: 14px;\n}\n.info-box .progress {\n  background: rgba(0, 0, 0, 0.2);\n  margin: 5px -10px 5px -10px;\n  height: 2px;\n}\n.info-box .progress,\n.info-box .progress .progress-bar {\n  border-radius: 0;\n}\n.info-box .progress .progress-bar {\n  background: #fff;\n}\n.info-box-icon {\n  border-top-left-radius: 2px;\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 2px;\n  display: block;\n  float: left;\n  height: 90px;\n  width: 90px;\n  text-align: center;\n  font-size: 45px;\n  line-height: 90px;\n  background: rgba(0, 0, 0, 0.2);\n}\n.info-box-icon > img {\n  max-width: 100%;\n}\n.info-box-content {\n  padding: 5px 10px;\n  margin-left: 90px;\n}\n.info-box-number {\n  display: block;\n  font-weight: bold;\n  font-size: 18px;\n}\n.progress-description,\n.info-box-text {\n  display: block;\n  font-size: 14px;\n  white-space: nowrap;\n  overflow: hidden;\n  text-overflow: ellipsis;\n}\n.info-box-text {\n  text-transform: uppercase;\n}\n.info-box-more {\n  display: block;\n}\n.progress-description {\n  margin: 0;\n}\n/*\n * Component: Timeline\n * -------------------\n */\n.timeline {\n  position: relative;\n  margin: 0 0 30px 0;\n  padding: 0;\n  list-style: none;\n}\n.timeline:before {\n  content: '';\n  position: absolute;\n  top: 0;\n  bottom: 0;\n  width: 4px;\n  background: #ddd;\n  left: 31px;\n  margin: 0;\n  border-radius: 2px;\n}\n.timeline > li {\n  position: relative;\n  margin-right: 10px;\n  margin-bottom: 15px;\n}\n.timeline > li:before,\n.timeline > li:after {\n  content: \" \";\n  display: table;\n}\n.timeline > li:after {\n  clear: both;\n}\n.timeline > li > .timeline-item {\n  -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1);\n  box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1);\n  border-radius: 3px;\n  margin-top: 0;\n  background: #fff;\n  color: #444;\n  margin-left: 60px;\n  margin-right: 15px;\n  padding: 0;\n  position: relative;\n}\n.timeline > li > .timeline-item > .time {\n  color: #999;\n  float: right;\n  padding: 10px;\n  font-size: 12px;\n}\n.timeline > li > .timeline-item > .timeline-header {\n  margin: 0;\n  color: #555;\n  border-bottom: 1px solid #f4f4f4;\n  padding: 10px;\n  font-size: 16px;\n  line-height: 1.1;\n}\n.timeline > li > .timeline-item > .timeline-header > a {\n  font-weight: 600;\n}\n.timeline > li > .timeline-item > .timeline-body,\n.timeline > li > .timeline-item > .timeline-footer {\n  padding: 10px;\n}\n.timeline > li > .fa,\n.timeline > li > .glyphicon,\n.timeline > li > .ion {\n  width: 30px;\n  height: 30px;\n  font-size: 15px;\n  line-height: 30px;\n  position: absolute;\n  color: #666;\n  background: #d2d6de;\n  border-radius: 50%;\n  text-align: center;\n  left: 18px;\n  top: 0;\n}\n.timeline > .time-label > span {\n  font-weight: 600;\n  padding: 5px;\n  display: inline-block;\n  background-color: #fff;\n  border-radius: 4px;\n}\n.timeline-inverse > li > .timeline-item {\n  background: #f0f0f0;\n  border: 1px solid #ddd;\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n.timeline-inverse > li > .timeline-item > .timeline-header {\n  border-bottom-color: #ddd;\n}\n/*\n * Component: Button\n * -----------------\n */\n.btn {\n  border-radius: 3px;\n  -webkit-box-shadow: none;\n  box-shadow: none;\n  border: 1px solid transparent;\n}\n.btn.uppercase {\n  text-transform: uppercase;\n}\n.btn.btn-flat {\n  border-radius: 0;\n  -webkit-box-shadow: none;\n  -moz-box-shadow: none;\n  box-shadow: none;\n  border-width: 1px;\n}\n.btn:active {\n  -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n  -moz-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n  box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n}\n.btn:focus {\n  outline: none;\n}\n.btn.btn-file {\n  position: relative;\n  overflow: hidden;\n}\n.btn.btn-file > input[type='file'] {\n  position: absolute;\n  top: 0;\n  right: 0;\n  min-width: 100%;\n  min-height: 100%;\n  font-size: 100px;\n  text-align: right;\n  opacity: 0;\n  filter: alpha(opacity=0);\n  outline: none;\n  background: white;\n  cursor: inherit;\n  display: block;\n}\n.btn-default {\n  background-color: #f4f4f4;\n  color: #444;\n  border-color: #ddd;\n}\n.btn-default:hover,\n.btn-default:active,\n.btn-default.hover {\n  background-color: #e7e7e7;\n}\n.btn-primary {\n  background-color: #3c8dbc;\n  border-color: #367fa9;\n}\n.btn-primary:hover,\n.btn-primary:active,\n.btn-primary.hover {\n  background-color: #367fa9;\n}\n.btn-success {\n  background-color: #00a65a;\n  border-color: #008d4c;\n}\n.btn-success:hover,\n.btn-success:active,\n.btn-success.hover {\n  background-color: #008d4c;\n}\n.btn-info {\n  background-color: #00c0ef;\n  border-color: #00acd6;\n}\n.btn-info:hover,\n.btn-info:active,\n.btn-info.hover {\n  background-color: #00acd6;\n}\n.btn-danger {\n  background-color: #dd4b39;\n  border-color: #d73925;\n}\n.btn-danger:hover,\n.btn-danger:active,\n.btn-danger.hover {\n  background-color: #d73925;\n}\n.btn-warning {\n  background-color: #f39c12;\n  border-color: #e08e0b;\n}\n.btn-warning:hover,\n.btn-warning:active,\n.btn-warning.hover {\n  background-color: #e08e0b;\n}\n.btn-outline {\n  border: 1px solid #fff;\n  background: transparent;\n  color: #fff;\n}\n.btn-outline:hover,\n.btn-outline:focus,\n.btn-outline:active {\n  color: rgba(255, 255, 255, 0.7);\n  border-color: rgba(255, 255, 255, 0.7);\n}\n.btn-link {\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n.btn[class*='bg-']:hover {\n  -webkit-box-shadow: inset 0 0 100px rgba(0, 0, 0, 0.2);\n  box-shadow: inset 0 0 100px rgba(0, 0, 0, 0.2);\n}\n.btn-app {\n  border-radius: 3px;\n  position: relative;\n  padding: 15px 5px;\n  margin: 0 0 10px 10px;\n  min-width: 80px;\n  height: 60px;\n  text-align: center;\n  color: #666;\n  border: 1px solid #ddd;\n  background-color: #f4f4f4;\n  font-size: 12px;\n}\n.btn-app > .fa,\n.btn-app > .glyphicon,\n.btn-app > .ion {\n  font-size: 20px;\n  display: block;\n}\n.btn-app:hover {\n  background: #f4f4f4;\n  color: #444;\n  border-color: #aaa;\n}\n.btn-app:active,\n.btn-app:focus {\n  -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n  -moz-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n  box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n}\n.btn-app > .badge {\n  position: absolute;\n  top: -3px;\n  right: -10px;\n  font-size: 10px;\n  font-weight: 400;\n}\n/*\n * Component: Callout\n * ------------------\n */\n.callout {\n  border-radius: 3px;\n  margin: 0 0 20px 0;\n  padding: 15px 30px 15px 15px;\n  border-left: 5px solid #eee;\n}\n.callout a {\n  color: #fff;\n  text-decoration: underline;\n}\n.callout a:hover {\n  color: #eee;\n}\n.callout h4 {\n  margin-top: 0;\n  font-weight: 600;\n}\n.callout p:last-child {\n  margin-bottom: 0;\n}\n.callout code,\n.callout .highlight {\n  background-color: #fff;\n}\n.callout.callout-danger {\n  border-color: #c23321;\n}\n.callout.callout-warning {\n  border-color: #c87f0a;\n}\n.callout.callout-info {\n  border-color: #0097bc;\n}\n.callout.callout-success {\n  border-color: #00733e;\n}\n/*\n * Component: alert\n * ----------------\n */\n.alert {\n  border-radius: 3px;\n}\n.alert h4 {\n  font-weight: 600;\n}\n.alert .icon {\n  margin-right: 10px;\n}\n.alert .close {\n  color: #000;\n  opacity: 0.2;\n  filter: alpha(opacity=20);\n}\n.alert .close:hover {\n  opacity: 0.5;\n  filter: alpha(opacity=50);\n}\n.alert a {\n  color: #fff;\n  text-decoration: underline;\n}\n.alert-success {\n  border-color: #008d4c;\n}\n.alert-danger,\n.alert-error {\n  border-color: #d73925;\n}\n.alert-warning {\n  border-color: #e08e0b;\n}\n.alert-info {\n  border-color: #00acd6;\n}\n/*\n * Component: Nav\n * --------------\n */\n.nav > li > a:hover,\n.nav > li > a:active,\n.nav > li > a:focus {\n  color: #444;\n  background: #f7f7f7;\n}\n/* NAV PILLS */\n.nav-pills > li > a {\n  border-radius: 0;\n  border-top: 3px solid transparent;\n  color: #444;\n}\n.nav-pills > li > a > .fa,\n.nav-pills > li > a > .glyphicon,\n.nav-pills > li > a > .ion {\n  margin-right: 5px;\n}\n.nav-pills > li.active > a,\n.nav-pills > li.active > a:hover,\n.nav-pills > li.active > a:focus {\n  border-top-color: #3c8dbc;\n}\n.nav-pills > li.active > a {\n  font-weight: 600;\n}\n/* NAV STACKED */\n.nav-stacked > li > a {\n  border-radius: 0;\n  border-top: 0;\n  border-left: 3px solid transparent;\n  color: #444;\n}\n.nav-stacked > li.active > a,\n.nav-stacked > li.active > a:hover {\n  background: transparent;\n  color: #444;\n  border-top: 0;\n  border-left-color: #3c8dbc;\n}\n.nav-stacked > li.header {\n  border-bottom: 1px solid #ddd;\n  color: #777;\n  margin-bottom: 10px;\n  padding: 5px 10px;\n  text-transform: uppercase;\n}\n/* NAV TABS */\n.nav-tabs-custom {\n  margin-bottom: 20px;\n  background: #fff;\n  box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1);\n  border-radius: 3px;\n}\n.nav-tabs-custom > .nav-tabs {\n  margin: 0;\n  border-bottom-color: #f4f4f4;\n  border-top-right-radius: 3px;\n  border-top-left-radius: 3px;\n}\n.nav-tabs-custom > .nav-tabs > li {\n  border-top: 3px solid transparent;\n  margin-bottom: -2px;\n  margin-right: 5px;\n}\n.nav-tabs-custom > .nav-tabs > li.disabled > a {\n  color: #777;\n}\n.nav-tabs-custom > .nav-tabs > li > a {\n  color: #444;\n  border-radius: 0;\n}\n.nav-tabs-custom > .nav-tabs > li > a.text-muted {\n  color: #999;\n}\n.nav-tabs-custom > .nav-tabs > li > a,\n.nav-tabs-custom > .nav-tabs > li > a:hover {\n  background: transparent;\n  margin: 0;\n}\n.nav-tabs-custom > .nav-tabs > li > a:hover {\n  color: #999;\n}\n.nav-tabs-custom > .nav-tabs > li:not(.active) > a:hover,\n.nav-tabs-custom > .nav-tabs > li:not(.active) > a:focus,\n.nav-tabs-custom > .nav-tabs > li:not(.active) > a:active {\n  border-color: transparent;\n}\n.nav-tabs-custom > .nav-tabs > li.active {\n  border-top-color: #3c8dbc;\n}\n.nav-tabs-custom > .nav-tabs > li.active > a,\n.nav-tabs-custom > .nav-tabs > li.active:hover > a {\n  background-color: #fff;\n  color: #444;\n}\n.nav-tabs-custom > .nav-tabs > li.active > a {\n  border-top-color: transparent;\n  border-left-color: #f4f4f4;\n  border-right-color: #f4f4f4;\n}\n.nav-tabs-custom > .nav-tabs > li:first-of-type {\n  margin-left: 0;\n}\n.nav-tabs-custom > .nav-tabs > li:first-of-type.active > a {\n  border-left-color: transparent;\n}\n.nav-tabs-custom > .nav-tabs.pull-right {\n  float: none !important;\n}\n.nav-tabs-custom > .nav-tabs.pull-right > li {\n  float: right;\n}\n.nav-tabs-custom > .nav-tabs.pull-right > li:first-of-type {\n  margin-right: 0;\n}\n.nav-tabs-custom > .nav-tabs.pull-right > li:first-of-type > a {\n  border-left-width: 1px;\n}\n.nav-tabs-custom > .nav-tabs.pull-right > li:first-of-type.active > a {\n  border-left-color: #f4f4f4;\n  border-right-color: transparent;\n}\n.nav-tabs-custom > .nav-tabs > li.header {\n  line-height: 35px;\n  padding: 0 10px;\n  font-size: 20px;\n  color: #444;\n}\n.nav-tabs-custom > .nav-tabs > li.header > .fa,\n.nav-tabs-custom > .nav-tabs > li.header > .glyphicon,\n.nav-tabs-custom > .nav-tabs > li.header > .ion {\n  margin-right: 5px;\n}\n.nav-tabs-custom > .tab-content {\n  background: #fff;\n  padding: 10px;\n  border-bottom-right-radius: 3px;\n  border-bottom-left-radius: 3px;\n}\n.nav-tabs-custom .dropdown.open > a:active,\n.nav-tabs-custom .dropdown.open > a:focus {\n  background: transparent;\n  color: #999;\n}\n.nav-tabs-custom.tab-primary > .nav-tabs > li.active {\n  border-top-color: #3c8dbc;\n}\n.nav-tabs-custom.tab-info > .nav-tabs > li.active {\n  border-top-color: #00c0ef;\n}\n.nav-tabs-custom.tab-danger > .nav-tabs > li.active {\n  border-top-color: #dd4b39;\n}\n.nav-tabs-custom.tab-warning > .nav-tabs > li.active {\n  border-top-color: #f39c12;\n}\n.nav-tabs-custom.tab-success > .nav-tabs > li.active {\n  border-top-color: #00a65a;\n}\n.nav-tabs-custom.tab-default > .nav-tabs > li.active {\n  border-top-color: #d2d6de;\n}\n/* PAGINATION */\n.pagination > li > a {\n  background: #fafafa;\n  color: #666;\n}\n.pagination.pagination-flat > li > a {\n  border-radius: 0 !important;\n}\n/*\n * Component: Products List\n * ------------------------\n */\n.products-list {\n  list-style: none;\n  margin: 0;\n  padding: 0;\n}\n.products-list > .item {\n  border-radius: 3px;\n  -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1);\n  box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1);\n  padding: 10px 0;\n  background: #fff;\n}\n.products-list > .item:before,\n.products-list > .item:after {\n  content: \" \";\n  display: table;\n}\n.products-list > .item:after {\n  clear: both;\n}\n.products-list .product-img {\n  float: left;\n}\n.products-list .product-img img {\n  width: 50px;\n  height: 50px;\n}\n.products-list .product-info {\n  margin-left: 60px;\n}\n.products-list .product-title {\n  font-weight: 600;\n}\n.products-list .product-description {\n  display: block;\n  color: #999;\n  overflow: hidden;\n  white-space: nowrap;\n  text-overflow: ellipsis;\n}\n.product-list-in-box > .item {\n  -webkit-box-shadow: none;\n  box-shadow: none;\n  border-radius: 0;\n  border-bottom: 1px solid #f4f4f4;\n}\n.product-list-in-box > .item:last-of-type {\n  border-bottom-width: 0;\n}\n/*\n * Component: Table\n * ----------------\n */\n.table > thead > tr > th,\n.table > tbody > tr > th,\n.table > tfoot > tr > th,\n.table > thead > tr > td,\n.table > tbody > tr > td,\n.table > tfoot > tr > td {\n  border-top: 1px solid #f4f4f4;\n}\n.table > thead > tr > th {\n  border-bottom: 2px solid #f4f4f4;\n}\n.table tr td .progress {\n  margin-top: 5px;\n}\n.table-bordered {\n  border: 1px solid #f4f4f4;\n}\n.table-bordered > thead > tr > th,\n.table-bordered > tbody > tr > th,\n.table-bordered > tfoot > tr > th,\n.table-bordered > thead > tr > td,\n.table-bordered > tbody > tr > td,\n.table-bordered > tfoot > tr > td {\n  border: 1px solid #f4f4f4;\n}\n.table-bordered > thead > tr > th,\n.table-bordered > thead > tr > td {\n  border-bottom-width: 2px;\n}\n.table.no-border,\n.table.no-border td,\n.table.no-border th {\n  border: 0;\n}\n/* .text-center in tables */\ntable.text-center,\ntable.text-center td,\ntable.text-center th {\n  text-align: center;\n}\n.table.align th {\n  text-align: left;\n}\n.table.align td {\n  text-align: right;\n}\n/*\n * Component: Label\n * ----------------\n */\n.label-default {\n  background-color: #d2d6de;\n  color: #444;\n}\n/*\n * Component: Direct Chat\n * ----------------------\n */\n.direct-chat .box-body {\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 0;\n  position: relative;\n  overflow-x: hidden;\n  padding: 0;\n}\n.direct-chat.chat-pane-open .direct-chat-contacts {\n  -webkit-transform: translate(0, 0);\n  -ms-transform: translate(0, 0);\n  -o-transform: translate(0, 0);\n  transform: translate(0, 0);\n}\n.direct-chat-messages {\n  -webkit-transform: translate(0, 0);\n  -ms-transform: translate(0, 0);\n  -o-transform: translate(0, 0);\n  transform: translate(0, 0);\n  padding: 10px;\n  height: 250px;\n  overflow: auto;\n}\n.direct-chat-msg,\n.direct-chat-text {\n  display: block;\n}\n.direct-chat-msg {\n  margin-bottom: 10px;\n}\n.direct-chat-msg:before,\n.direct-chat-msg:after {\n  content: \" \";\n  display: table;\n}\n.direct-chat-msg:after {\n  clear: both;\n}\n.direct-chat-messages,\n.direct-chat-contacts {\n  -webkit-transition: -webkit-transform 0.5s ease-in-out;\n  -moz-transition: -moz-transform 0.5s ease-in-out;\n  -o-transition: -o-transform 0.5s ease-in-out;\n  transition: transform 0.5s ease-in-out;\n}\n.direct-chat-text {\n  border-radius: 5px;\n  position: relative;\n  padding: 5px 10px;\n  background: #d2d6de;\n  border: 1px solid #d2d6de;\n  margin: 5px 0 0 50px;\n  color: #444444;\n}\n.direct-chat-text:after,\n.direct-chat-text:before {\n  position: absolute;\n  right: 100%;\n  top: 15px;\n  border: solid transparent;\n  border-right-color: #d2d6de;\n  content: ' ';\n  height: 0;\n  width: 0;\n  pointer-events: none;\n}\n.direct-chat-text:after {\n  border-width: 5px;\n  margin-top: -5px;\n}\n.direct-chat-text:before {\n  border-width: 6px;\n  margin-top: -6px;\n}\n.right .direct-chat-text {\n  margin-right: 50px;\n  margin-left: 0;\n}\n.right .direct-chat-text:after,\n.right .direct-chat-text:before {\n  right: auto;\n  left: 100%;\n  border-right-color: transparent;\n  border-left-color: #d2d6de;\n}\n.direct-chat-img {\n  border-radius: 50%;\n  float: left;\n  width: 40px;\n  height: 40px;\n}\n.right .direct-chat-img {\n  float: right;\n}\n.direct-chat-info {\n  display: block;\n  margin-bottom: 2px;\n  font-size: 12px;\n}\n.direct-chat-name {\n  font-weight: 600;\n}\n.direct-chat-timestamp {\n  color: #999;\n}\n.direct-chat-contacts-open .direct-chat-contacts {\n  -webkit-transform: translate(0, 0);\n  -ms-transform: translate(0, 0);\n  -o-transform: translate(0, 0);\n  transform: translate(0, 0);\n}\n.direct-chat-contacts {\n  -webkit-transform: translate(101%, 0);\n  -ms-transform: translate(101%, 0);\n  -o-transform: translate(101%, 0);\n  transform: translate(101%, 0);\n  position: absolute;\n  top: 0;\n  bottom: 0;\n  height: 250px;\n  width: 100%;\n  background: #222d32;\n  color: #fff;\n  overflow: auto;\n}\n.contacts-list > li {\n  border-bottom: 1px solid rgba(0, 0, 0, 0.2);\n  padding: 10px;\n  margin: 0;\n}\n.contacts-list > li:before,\n.contacts-list > li:after {\n  content: \" \";\n  display: table;\n}\n.contacts-list > li:after {\n  clear: both;\n}\n.contacts-list > li:last-of-type {\n  border-bottom: none;\n}\n.contacts-list-img {\n  border-radius: 50%;\n  width: 40px;\n  float: left;\n}\n.contacts-list-info {\n  margin-left: 45px;\n  color: #fff;\n}\n.contacts-list-name,\n.contacts-list-status {\n  display: block;\n}\n.contacts-list-name {\n  font-weight: 600;\n}\n.contacts-list-status {\n  font-size: 12px;\n}\n.contacts-list-date {\n  color: #aaa;\n  font-weight: normal;\n}\n.contacts-list-msg {\n  color: #999;\n}\n.direct-chat-danger .right > .direct-chat-text {\n  background: #dd4b39;\n  border-color: #dd4b39;\n  color: #ffffff;\n}\n.direct-chat-danger .right > .direct-chat-text:after,\n.direct-chat-danger .right > .direct-chat-text:before {\n  border-left-color: #dd4b39;\n}\n.direct-chat-primary .right > .direct-chat-text {\n  background: #3c8dbc;\n  border-color: #3c8dbc;\n  color: #ffffff;\n}\n.direct-chat-primary .right > .direct-chat-text:after,\n.direct-chat-primary .right > .direct-chat-text:before {\n  border-left-color: #3c8dbc;\n}\n.direct-chat-warning .right > .direct-chat-text {\n  background: #f39c12;\n  border-color: #f39c12;\n  color: #ffffff;\n}\n.direct-chat-warning .right > .direct-chat-text:after,\n.direct-chat-warning .right > .direct-chat-text:before {\n  border-left-color: #f39c12;\n}\n.direct-chat-info .right > .direct-chat-text {\n  background: #00c0ef;\n  border-color: #00c0ef;\n  color: #ffffff;\n}\n.direct-chat-info .right > .direct-chat-text:after,\n.direct-chat-info .right > .direct-chat-text:before {\n  border-left-color: #00c0ef;\n}\n.direct-chat-success .right > .direct-chat-text {\n  background: #00a65a;\n  border-color: #00a65a;\n  color: #ffffff;\n}\n.direct-chat-success .right > .direct-chat-text:after,\n.direct-chat-success .right > .direct-chat-text:before {\n  border-left-color: #00a65a;\n}\n/*\n * Component: Users List\n * ---------------------\n */\n.users-list > li {\n  width: 25%;\n  float: left;\n  padding: 10px;\n  text-align: center;\n}\n.users-list > li img {\n  border-radius: 50%;\n  max-width: 100%;\n  height: auto;\n}\n.users-list > li > a:hover,\n.users-list > li > a:hover .users-list-name {\n  color: #999;\n}\n.users-list-name,\n.users-list-date {\n  display: block;\n}\n.users-list-name {\n  font-weight: 600;\n  color: #444;\n  overflow: hidden;\n  white-space: nowrap;\n  text-overflow: ellipsis;\n}\n.users-list-date {\n  color: #999;\n  font-size: 12px;\n}\n/*\n * Component: Carousel\n * -------------------\n */\n.carousel-control.left,\n.carousel-control.right {\n  background-image: none;\n}\n.carousel-control > .fa {\n  font-size: 40px;\n  position: absolute;\n  top: 50%;\n  z-index: 5;\n  display: inline-block;\n  margin-top: -20px;\n}\n/*\n * Component: modal\n * ----------------\n */\n.modal {\n  background: rgba(0, 0, 0, 0.3);\n}\n.modal-content {\n  border-radius: 0;\n  -webkit-box-shadow: 0 2px 3px rgba(0, 0, 0, 0.125);\n  box-shadow: 0 2px 3px rgba(0, 0, 0, 0.125);\n  border: 0;\n}\n@media (min-width: 768px) {\n  .modal-content {\n    -webkit-box-shadow: 0 2px 3px rgba(0, 0, 0, 0.125);\n    box-shadow: 0 2px 3px rgba(0, 0, 0, 0.125);\n  }\n}\n.modal-header {\n  border-bottom-color: #f4f4f4;\n}\n.modal-footer {\n  border-top-color: #f4f4f4;\n}\n.modal-primary .modal-header,\n.modal-primary .modal-footer {\n  border-color: #307095;\n}\n.modal-warning .modal-header,\n.modal-warning .modal-footer {\n  border-color: #c87f0a;\n}\n.modal-info .modal-header,\n.modal-info .modal-footer {\n  border-color: #0097bc;\n}\n.modal-success .modal-header,\n.modal-success .modal-footer {\n  border-color: #00733e;\n}\n.modal-danger .modal-header,\n.modal-danger .modal-footer {\n  border-color: #c23321;\n}\n/*\n * Component: Social Widgets\n * -------------------------\n */\n.box-widget {\n  border: none;\n  position: relative;\n}\n.widget-user .widget-user-header {\n  padding: 20px;\n  height: 120px;\n  border-top-right-radius: 3px;\n  border-top-left-radius: 3px;\n}\n.widget-user .widget-user-username {\n  margin-top: 0;\n  margin-bottom: 5px;\n  font-size: 25px;\n  font-weight: 300;\n  text-shadow: 0 1px 1px rgba(0, 0, 0, 0.2);\n}\n.widget-user .widget-user-desc {\n  margin-top: 0;\n}\n.widget-user .widget-user-image {\n  position: absolute;\n  top: 65px;\n  left: 50%;\n  margin-left: -45px;\n}\n.widget-user .widget-user-image > img {\n  width: 90px;\n  height: auto;\n  border: 3px solid #fff;\n}\n.widget-user .box-footer {\n  padding-top: 30px;\n}\n.widget-user-2 .widget-user-header {\n  padding: 20px;\n  border-top-right-radius: 3px;\n  border-top-left-radius: 3px;\n}\n.widget-user-2 .widget-user-username {\n  margin-top: 5px;\n  margin-bottom: 5px;\n  font-size: 25px;\n  font-weight: 300;\n}\n.widget-user-2 .widget-user-desc {\n  margin-top: 0;\n}\n.widget-user-2 .widget-user-username,\n.widget-user-2 .widget-user-desc {\n  margin-left: 75px;\n}\n.widget-user-2 .widget-user-image > img {\n  width: 65px;\n  height: auto;\n  float: left;\n}\n.treeview-menu {\n  display: none;\n  list-style: none;\n  padding: 0;\n  margin: 0;\n  padding-left: 5px;\n}\n.treeview-menu .treeview-menu {\n  padding-left: 20px;\n}\n.treeview-menu > li {\n  margin: 0;\n}\n.treeview-menu > li > a {\n  padding: 5px 5px 5px 15px;\n  display: block;\n  font-size: 14px;\n}\n.treeview-menu > li > a > .fa,\n.treeview-menu > li > a > .glyphicon,\n.treeview-menu > li > a > .ion {\n  width: 20px;\n}\n.treeview-menu > li > a > .pull-right-container > .fa-angle-left,\n.treeview-menu > li > a > .pull-right-container > .fa-angle-down,\n.treeview-menu > li > a > .fa-angle-left,\n.treeview-menu > li > a > .fa-angle-down {\n  width: auto;\n}\n/*\n * Page: Mailbox\n * -------------\n */\n.mailbox-messages > .table {\n  margin: 0;\n}\n.mailbox-controls {\n  padding: 5px;\n}\n.mailbox-controls.with-border {\n  border-bottom: 1px solid #f4f4f4;\n}\n.mailbox-read-info {\n  border-bottom: 1px solid #f4f4f4;\n  padding: 10px;\n}\n.mailbox-read-info h3 {\n  font-size: 20px;\n  margin: 0;\n}\n.mailbox-read-info h5 {\n  margin: 0;\n  padding: 5px 0 0 0;\n}\n.mailbox-read-time {\n  color: #999;\n  font-size: 13px;\n}\n.mailbox-read-message {\n  padding: 10px;\n}\n.mailbox-attachments li {\n  float: left;\n  width: 200px;\n  border: 1px solid #eee;\n  margin-bottom: 10px;\n  margin-right: 10px;\n}\n.mailbox-attachment-name {\n  font-weight: bold;\n  color: #666;\n}\n.mailbox-attachment-icon,\n.mailbox-attachment-info,\n.mailbox-attachment-size {\n  display: block;\n}\n.mailbox-attachment-info {\n  padding: 10px;\n  background: #f4f4f4;\n}\n.mailbox-attachment-size {\n  color: #999;\n  font-size: 12px;\n}\n.mailbox-attachment-icon {\n  text-align: center;\n  font-size: 65px;\n  color: #666;\n  padding: 20px 10px;\n}\n.mailbox-attachment-icon.has-img {\n  padding: 0;\n}\n.mailbox-attachment-icon.has-img > img {\n  max-width: 100%;\n  height: auto;\n}\n/*\n * Page: Lock Screen\n * -----------------\n */\n/* ADD THIS CLASS TO THE <BODY> TAG */\n.lockscreen {\n  background: #d2d6de;\n}\n.lockscreen-logo {\n  font-size: 35px;\n  text-align: center;\n  margin-bottom: 25px;\n  font-weight: 300;\n}\n.lockscreen-logo a {\n  color: #444;\n}\n.lockscreen-wrapper {\n  max-width: 400px;\n  margin: 0 auto;\n  margin-top: 10%;\n}\n/* User name [optional] */\n.lockscreen .lockscreen-name {\n  text-align: center;\n  font-weight: 600;\n}\n/* Will contain the image and the sign in form */\n.lockscreen-item {\n  border-radius: 4px;\n  padding: 0;\n  background: #fff;\n  position: relative;\n  margin: 10px auto 30px auto;\n  width: 290px;\n}\n/* User image */\n.lockscreen-image {\n  border-radius: 50%;\n  position: absolute;\n  left: -10px;\n  top: -25px;\n  background: #fff;\n  padding: 5px;\n  z-index: 10;\n}\n.lockscreen-image > img {\n  border-radius: 50%;\n  width: 70px;\n  height: 70px;\n}\n/* Contains the password input and the login button */\n.lockscreen-credentials {\n  margin-left: 70px;\n}\n.lockscreen-credentials .form-control {\n  border: 0;\n}\n.lockscreen-credentials .btn {\n  background-color: #fff;\n  border: 0;\n  padding: 0 10px;\n}\n.lockscreen-footer {\n  margin-top: 10px;\n}\n/*\n * Page: Login & Register\n * ----------------------\n */\n.login-logo,\n.register-logo {\n  font-size: 35px;\n  text-align: center;\n  margin-bottom: 25px;\n  font-weight: 300;\n}\n.login-logo a,\n.register-logo a {\n  color: #444;\n}\n.login-page,\n.register-page {\n  background: #d2d6de;\n}\n.login-box,\n.register-box {\n  width: 360px;\n  margin: 7% auto;\n}\n@media (max-width: 768px) {\n  .login-box,\n  .register-box {\n    width: 90%;\n    margin-top: 20px;\n  }\n}\n.login-box-body,\n.register-box-body {\n  background: #fff;\n  padding: 20px;\n  border-top: 0;\n  color: #666;\n}\n.login-box-body .form-control-feedback,\n.register-box-body .form-control-feedback {\n  color: #777;\n}\n.login-box-msg,\n.register-box-msg {\n  margin: 0;\n  text-align: center;\n  padding: 0 20px 20px 20px;\n}\n.social-auth-links {\n  margin: 10px 0;\n}\n/*\n * Page: 400 and 500 error pages\n * ------------------------------\n */\n.error-page {\n  width: 600px;\n  margin: 20px auto 0 auto;\n}\n@media (max-width: 991px) {\n  .error-page {\n    width: 100%;\n  }\n}\n.error-page > .headline {\n  float: left;\n  font-size: 100px;\n  font-weight: 300;\n}\n@media (max-width: 991px) {\n  .error-page > .headline {\n    float: none;\n    text-align: center;\n  }\n}\n.error-page > .error-content {\n  margin-left: 190px;\n  display: block;\n}\n@media (max-width: 991px) {\n  .error-page > .error-content {\n    margin-left: 0;\n  }\n}\n.error-page > .error-content > h3 {\n  font-weight: 300;\n  font-size: 25px;\n}\n@media (max-width: 991px) {\n  .error-page > .error-content > h3 {\n    text-align: center;\n  }\n}\n/*\n * Page: Invoice\n * -------------\n */\n.invoice {\n  position: relative;\n  background: #fff;\n  border: 1px solid #f4f4f4;\n  padding: 20px;\n  margin: 10px 25px;\n}\n.invoice-title {\n  margin-top: 0;\n}\n/*\n * Page: Profile\n * -------------\n */\n.profile-user-img {\n  margin: 0 auto;\n  width: 100px;\n  padding: 3px;\n  border: 3px solid #d2d6de;\n}\n.profile-username {\n  font-size: 21px;\n  margin-top: 5px;\n}\n.post {\n  border-bottom: 1px solid #d2d6de;\n  margin-bottom: 15px;\n  padding-bottom: 15px;\n  color: #666;\n}\n.post:last-of-type {\n  border-bottom: 0;\n  margin-bottom: 0;\n  padding-bottom: 0;\n}\n.post .user-block {\n  margin-bottom: 15px;\n}\n/*\n * General: Miscellaneous\n * ----------------------\n */\n.pad {\n  padding: 10px;\n}\n.margin {\n  margin: 10px;\n}\n.margin-bottom {\n  margin-bottom: 20px;\n}\n.margin-bottom-none {\n  margin-bottom: 0;\n}\n.margin-r-5 {\n  margin-right: 5px;\n}\n.inline {\n  display: inline;\n}\n.description-block {\n  display: block;\n  margin: 10px 0;\n  text-align: center;\n}\n.description-block.margin-bottom {\n  margin-bottom: 25px;\n}\n.description-block > .description-header {\n  margin: 0;\n  padding: 0;\n  font-weight: 600;\n  font-size: 16px;\n}\n.description-block > .description-text {\n  text-transform: uppercase;\n}\n.bg-red,\n.bg-yellow,\n.bg-aqua,\n.bg-blue,\n.bg-light-blue,\n.bg-green,\n.bg-navy,\n.bg-teal,\n.bg-olive,\n.bg-lime,\n.bg-orange,\n.bg-fuchsia,\n.bg-purple,\n.bg-maroon,\n.bg-black,\n.bg-red-active,\n.bg-yellow-active,\n.bg-aqua-active,\n.bg-blue-active,\n.bg-light-blue-active,\n.bg-green-active,\n.bg-navy-active,\n.bg-teal-active,\n.bg-olive-active,\n.bg-lime-active,\n.bg-orange-active,\n.bg-fuchsia-active,\n.bg-purple-active,\n.bg-maroon-active,\n.bg-black-active,\n.callout.callout-danger,\n.callout.callout-warning,\n.callout.callout-info,\n.callout.callout-success,\n.alert-success,\n.alert-danger,\n.alert-error,\n.alert-warning,\n.alert-info,\n.label-danger,\n.label-info,\n.label-warning,\n.label-primary,\n.label-success,\n.modal-primary .modal-body,\n.modal-primary .modal-header,\n.modal-primary .modal-footer,\n.modal-warning .modal-body,\n.modal-warning .modal-header,\n.modal-warning .modal-footer,\n.modal-info .modal-body,\n.modal-info .modal-header,\n.modal-info .modal-footer,\n.modal-success .modal-body,\n.modal-success .modal-header,\n.modal-success .modal-footer,\n.modal-danger .modal-body,\n.modal-danger .modal-header,\n.modal-danger .modal-footer {\n  color: #fff !important;\n}\n.bg-gray {\n  color: #000;\n  background-color: #d2d6de !important;\n}\n.bg-gray-light {\n  background-color: #f7f7f7;\n}\n.bg-black {\n  background-color: #111111 !important;\n}\n.bg-red,\n.callout.callout-danger,\n.alert-danger,\n.alert-error,\n.label-danger,\n.modal-danger .modal-body {\n  background-color: #dd4b39 !important;\n}\n.bg-yellow,\n.callout.callout-warning,\n.alert-warning,\n.label-warning,\n.modal-warning .modal-body {\n  background-color: #f39c12 !important;\n}\n.bg-aqua,\n.callout.callout-info,\n.alert-info,\n.label-info,\n.modal-info .modal-body {\n  background-color: #00c0ef !important;\n}\n.bg-blue {\n  background-color: #0073b7 !important;\n}\n.bg-light-blue,\n.label-primary,\n.modal-primary .modal-body {\n  background-color: #3c8dbc !important;\n}\n.bg-green,\n.callout.callout-success,\n.alert-success,\n.label-success,\n.modal-success .modal-body {\n  background-color: #00a65a !important;\n}\n.bg-navy {\n  background-color: #001f3f !important;\n}\n.bg-teal {\n  background-color: #39cccc !important;\n}\n.bg-olive {\n  background-color: #3d9970 !important;\n}\n.bg-lime {\n  background-color: #01ff70 !important;\n}\n.bg-orange {\n  background-color: #ff851b !important;\n}\n.bg-fuchsia {\n  background-color: #f012be !important;\n}\n.bg-purple {\n  background-color: #605ca8 !important;\n}\n.bg-maroon {\n  background-color: #d81b60 !important;\n}\n.bg-gray-active {\n  color: #000;\n  background-color: #b5bbc8 !important;\n}\n.bg-black-active {\n  background-color: #000000 !important;\n}\n.bg-red-active,\n.modal-danger .modal-header,\n.modal-danger .modal-footer {\n  background-color: #d33724 !important;\n}\n.bg-yellow-active,\n.modal-warning .modal-header,\n.modal-warning .modal-footer {\n  background-color: #db8b0b !important;\n}\n.bg-aqua-active,\n.modal-info .modal-header,\n.modal-info .modal-footer {\n  background-color: #00a7d0 !important;\n}\n.bg-blue-active {\n  background-color: #005384 !important;\n}\n.bg-light-blue-active,\n.modal-primary .modal-header,\n.modal-primary .modal-footer {\n  background-color: #357ca5 !important;\n}\n.bg-green-active,\n.modal-success .modal-header,\n.modal-success .modal-footer {\n  background-color: #008d4c !important;\n}\n.bg-navy-active {\n  background-color: #001a35 !important;\n}\n.bg-teal-active {\n  background-color: #30bbbb !important;\n}\n.bg-olive-active {\n  background-color: #368763 !important;\n}\n.bg-lime-active {\n  background-color: #00e765 !important;\n}\n.bg-orange-active {\n  background-color: #ff7701 !important;\n}\n.bg-fuchsia-active {\n  background-color: #db0ead !important;\n}\n.bg-purple-active {\n  background-color: #555299 !important;\n}\n.bg-maroon-active {\n  background-color: #ca195a !important;\n}\n[class^=\"bg-\"].disabled {\n  opacity: 0.65;\n  filter: alpha(opacity=65);\n}\n.text-red {\n  color: #dd4b39 !important;\n}\n.text-yellow {\n  color: #f39c12 !important;\n}\n.text-aqua {\n  color: #00c0ef !important;\n}\n.text-blue {\n  color: #0073b7 !important;\n}\n.text-black {\n  color: #111111 !important;\n}\n.text-light-blue {\n  color: #3c8dbc !important;\n}\n.text-green {\n  color: #00a65a !important;\n}\n.text-gray {\n  color: #d2d6de !important;\n}\n.text-navy {\n  color: #001f3f !important;\n}\n.text-teal {\n  color: #39cccc !important;\n}\n.text-olive {\n  color: #3d9970 !important;\n}\n.text-lime {\n  color: #01ff70 !important;\n}\n.text-orange {\n  color: #ff851b !important;\n}\n.text-fuchsia {\n  color: #f012be !important;\n}\n.text-purple {\n  color: #605ca8 !important;\n}\n.text-maroon {\n  color: #d81b60 !important;\n}\n.link-muted {\n  color: #7a869d;\n}\n.link-muted:hover,\n.link-muted:focus {\n  color: #606c84;\n}\n.link-black {\n  color: #666;\n}\n.link-black:hover,\n.link-black:focus {\n  color: #999;\n}\n.hide {\n  display: none !important;\n}\n.no-border {\n  border: 0 !important;\n}\n.no-padding {\n  padding: 0 !important;\n}\n.no-margin {\n  margin: 0 !important;\n}\n.no-shadow {\n  box-shadow: none !important;\n}\n.list-unstyled,\n.chart-legend,\n.contacts-list,\n.users-list,\n.mailbox-attachments {\n  list-style: none;\n  margin: 0;\n  padding: 0;\n}\n.list-group-unbordered > .list-group-item {\n  border-left: 0;\n  border-right: 0;\n  border-radius: 0;\n  padding-left: 0;\n  padding-right: 0;\n}\n.flat {\n  border-radius: 0 !important;\n}\n.text-bold,\n.text-bold.table td,\n.text-bold.table th {\n  font-weight: 700;\n}\n.text-sm {\n  font-size: 12px;\n}\n.jqstooltip {\n  padding: 5px !important;\n  width: auto !important;\n  height: auto !important;\n}\n.bg-teal-gradient {\n  background: #39cccc !important;\n  background: -webkit-gradient(linear, left bottom, left top, color-stop(0, #39cccc), color-stop(1, #7adddd)) !important;\n  background: -ms-linear-gradient(bottom, #39cccc, #7adddd) !important;\n  background: -moz-linear-gradient(center bottom, #39cccc 0%, #7adddd 100%) !important;\n  background: -o-linear-gradient(#7adddd, #39cccc) !important;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#7adddd', endColorstr='#39cccc', GradientType=0) !important;\n  color: #fff;\n}\n.bg-light-blue-gradient {\n  background: #3c8dbc !important;\n  background: -webkit-gradient(linear, left bottom, left top, color-stop(0, #3c8dbc), color-stop(1, #67a8ce)) !important;\n  background: -ms-linear-gradient(bottom, #3c8dbc, #67a8ce) !important;\n  background: -moz-linear-gradient(center bottom, #3c8dbc 0%, #67a8ce 100%) !important;\n  background: -o-linear-gradient(#67a8ce, #3c8dbc) !important;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#67a8ce', endColorstr='#3c8dbc', GradientType=0) !important;\n  color: #fff;\n}\n.bg-blue-gradient {\n  background: #0073b7 !important;\n  background: -webkit-gradient(linear, left bottom, left top, color-stop(0, #0073b7), color-stop(1, #0089db)) !important;\n  background: -ms-linear-gradient(bottom, #0073b7, #0089db) !important;\n  background: -moz-linear-gradient(center bottom, #0073b7 0%, #0089db 100%) !important;\n  background: -o-linear-gradient(#0089db, #0073b7) !important;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#0089db', endColorstr='#0073b7', GradientType=0) !important;\n  color: #fff;\n}\n.bg-aqua-gradient {\n  background: #00c0ef !important;\n  background: -webkit-gradient(linear, left bottom, left top, color-stop(0, #00c0ef), color-stop(1, #14d1ff)) !important;\n  background: -ms-linear-gradient(bottom, #00c0ef, #14d1ff) !important;\n  background: -moz-linear-gradient(center bottom, #00c0ef 0%, #14d1ff 100%) !important;\n  background: -o-linear-gradient(#14d1ff, #00c0ef) !important;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#14d1ff', endColorstr='#00c0ef', GradientType=0) !important;\n  color: #fff;\n}\n.bg-yellow-gradient {\n  background: #f39c12 !important;\n  background: -webkit-gradient(linear, left bottom, left top, color-stop(0, #f39c12), color-stop(1, #f7bc60)) !important;\n  background: -ms-linear-gradient(bottom, #f39c12, #f7bc60) !important;\n  background: -moz-linear-gradient(center bottom, #f39c12 0%, #f7bc60 100%) !important;\n  background: -o-linear-gradient(#f7bc60, #f39c12) !important;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#f7bc60', endColorstr='#f39c12', GradientType=0) !important;\n  color: #fff;\n}\n.bg-purple-gradient {\n  background: #605ca8 !important;\n  background: -webkit-gradient(linear, left bottom, left top, color-stop(0, #605ca8), color-stop(1, #9491c4)) !important;\n  background: -ms-linear-gradient(bottom, #605ca8, #9491c4) !important;\n  background: -moz-linear-gradient(center bottom, #605ca8 0%, #9491c4 100%) !important;\n  background: -o-linear-gradient(#9491c4, #605ca8) !important;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#9491c4', endColorstr='#605ca8', GradientType=0) !important;\n  color: #fff;\n}\n.bg-green-gradient {\n  background: #00a65a !important;\n  background: -webkit-gradient(linear, left bottom, left top, color-stop(0, #00a65a), color-stop(1, #00ca6d)) !important;\n  background: -ms-linear-gradient(bottom, #00a65a, #00ca6d) !important;\n  background: -moz-linear-gradient(center bottom, #00a65a 0%, #00ca6d 100%) !important;\n  background: -o-linear-gradient(#00ca6d, #00a65a) !important;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00ca6d', endColorstr='#00a65a', GradientType=0) !important;\n  color: #fff;\n}\n.bg-red-gradient {\n  background: #dd4b39 !important;\n  background: -webkit-gradient(linear, left bottom, left top, color-stop(0, #dd4b39), color-stop(1, #e47365)) !important;\n  background: -ms-linear-gradient(bottom, #dd4b39, #e47365) !important;\n  background: -moz-linear-gradient(center bottom, #dd4b39 0%, #e47365 100%) !important;\n  background: -o-linear-gradient(#e47365, #dd4b39) !important;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#e47365', endColorstr='#dd4b39', GradientType=0) !important;\n  color: #fff;\n}\n.bg-black-gradient {\n  background: #111111 !important;\n  background: -webkit-gradient(linear, left bottom, left top, color-stop(0, #111111), color-stop(1, #2b2b2b)) !important;\n  background: -ms-linear-gradient(bottom, #111111, #2b2b2b) !important;\n  background: -moz-linear-gradient(center bottom, #111111 0%, #2b2b2b 100%) !important;\n  background: -o-linear-gradient(#2b2b2b, #111111) !important;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#2b2b2b', endColorstr='#111111', GradientType=0) !important;\n  color: #fff;\n}\n.bg-maroon-gradient {\n  background: #d81b60 !important;\n  background: -webkit-gradient(linear, left bottom, left top, color-stop(0, #d81b60), color-stop(1, #e73f7c)) !important;\n  background: -ms-linear-gradient(bottom, #d81b60, #e73f7c) !important;\n  background: -moz-linear-gradient(center bottom, #d81b60 0%, #e73f7c 100%) !important;\n  background: -o-linear-gradient(#e73f7c, #d81b60) !important;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#e73f7c', endColorstr='#d81b60', GradientType=0) !important;\n  color: #fff;\n}\n.description-block .description-icon {\n  font-size: 16px;\n}\n.no-pad-top {\n  padding-top: 0;\n}\n.position-static {\n  position: static !important;\n}\n.list-header {\n  font-size: 15px;\n  padding: 10px 4px;\n  font-weight: bold;\n  color: #666;\n}\n.list-seperator {\n  height: 1px;\n  background: #f4f4f4;\n  margin: 15px 0 9px 0;\n}\n.list-link > a {\n  padding: 4px;\n  color: #777;\n}\n.list-link > a:hover {\n  color: #222;\n}\n.font-light {\n  font-weight: 300;\n}\n.user-block:before,\n.user-block:after {\n  content: \" \";\n  display: table;\n}\n.user-block:after {\n  clear: both;\n}\n.user-block img {\n  width: 40px;\n  height: 40px;\n  float: left;\n}\n.user-block .username,\n.user-block .description,\n.user-block .comment {\n  display: block;\n  margin-left: 50px;\n}\n.user-block .username {\n  font-size: 16px;\n  font-weight: 600;\n}\n.user-block .description {\n  color: #999;\n  font-size: 13px;\n}\n.user-block.user-block-sm .username,\n.user-block.user-block-sm .description,\n.user-block.user-block-sm .comment {\n  margin-left: 40px;\n}\n.user-block.user-block-sm .username {\n  font-size: 14px;\n}\n.img-sm,\n.img-md,\n.img-lg,\n.box-comments .box-comment img,\n.user-block.user-block-sm img {\n  float: left;\n}\n.img-sm,\n.box-comments .box-comment img,\n.user-block.user-block-sm img {\n  width: 30px !important;\n  height: 30px !important;\n}\n.img-sm + .img-push {\n  margin-left: 40px;\n}\n.img-md {\n  width: 60px;\n  height: 60px;\n}\n.img-md + .img-push {\n  margin-left: 70px;\n}\n.img-lg {\n  width: 100px;\n  height: 100px;\n}\n.img-lg + .img-push {\n  margin-left: 110px;\n}\n.img-bordered {\n  border: 3px solid #d2d6de;\n  padding: 3px;\n}\n.img-bordered-sm {\n  border: 2px solid #d2d6de;\n  padding: 2px;\n}\n.attachment-block {\n  border: 1px solid #f4f4f4;\n  padding: 5px;\n  margin-bottom: 10px;\n  background: #f7f7f7;\n}\n.attachment-block .attachment-img {\n  max-width: 100px;\n  max-height: 100px;\n  height: auto;\n  float: left;\n}\n.attachment-block .attachment-pushed {\n  margin-left: 110px;\n}\n.attachment-block .attachment-heading {\n  margin: 0;\n}\n.attachment-block .attachment-text {\n  color: #555;\n}\n.connectedSortable {\n  min-height: 100px;\n}\n.ui-helper-hidden-accessible {\n  border: 0;\n  clip: rect(0 0 0 0);\n  height: 1px;\n  margin: -1px;\n  overflow: hidden;\n  padding: 0;\n  position: absolute;\n  width: 1px;\n}\n.sort-highlight {\n  background: #f4f4f4;\n  border: 1px dashed #ddd;\n  margin-bottom: 10px;\n}\n.full-opacity-hover {\n  opacity: 0.65;\n  filter: alpha(opacity=65);\n}\n.full-opacity-hover:hover {\n  opacity: 1;\n  filter: alpha(opacity=100);\n}\n.chart {\n  position: relative;\n  overflow: hidden;\n  width: 100%;\n}\n.chart svg,\n.chart canvas {\n  width: 100% !important;\n}\n/*\n * Misc: print\n * -----------\n */\n@media print {\n  .no-print,\n  .main-sidebar,\n  .left-side,\n  .main-header,\n  .content-header {\n    display: none !important;\n  }\n  .content-wrapper,\n  .right-side,\n  .main-footer {\n    margin-left: 0 !important;\n    min-height: 0 !important;\n    -webkit-transform: translate(0, 0) !important;\n    -ms-transform: translate(0, 0) !important;\n    -o-transform: translate(0, 0) !important;\n    transform: translate(0, 0) !important;\n  }\n  .fixed .content-wrapper,\n  .fixed .right-side {\n    padding-top: 0 !important;\n  }\n  .invoice {\n    width: 100%;\n    border: 0;\n    margin: 0;\n    padding: 0;\n  }\n  .invoice-col {\n    float: left;\n    width: 33.3333333%;\n  }\n  .table-responsive {\n    overflow: auto;\n  }\n  .table-responsive > .table tr th,\n  .table-responsive > .table tr td {\n    white-space: normal !important;\n  }\n}\n"
  },
  {
    "path": "src/main/resources/static/css/loader.css",
    "content": "#loading{\n    background-color: #fff;\n    height: 100%;\n    width: 100%;\n    position: fixed;\n    z-index: 9999;\n    margin-top: 0px;\n    top: 0px;\n}\n#loading-center{\n    width: 100%;\n    height: 100%;\n    position: relative;\n}\n#loading-center-absolute {\n    position: absolute;\n    left: 50%;\n    top: 50%;\n    height: 60px;\n    width: 60px;\n    margin-top: -30px;\n    margin-left: -30px;\n    -webkit-animation: loading-center-absolute 1s infinite;\n    animation: loading-center-absolute 1s infinite;\n\n}\n.object{\n    width: 20px;\n    height: 20px;\n    background-color: skyblue;\n    float: left;\n    -moz-border-radius: 50% 50% 50% 50%;\n    -webkit-border-radius: 50% 50% 50% 50%;\n    border-radius: 50% 50% 50% 50%;\n    margin-right: 20px;\n    margin-bottom: 20px;\n}\n.object:nth-child(2n+0) {\n    margin-right: 0px;\n\n}\n#object_one{\n    -webkit-animation: object_one 1s infinite;\n    animation: object_one 1s infinite;\n}\n#object_two{\n    -webkit-animation: object_two 1s infinite;\n    animation: object_two 1s infinite;\n}\n#object_three{\n    -webkit-animation: object_three 1s infinite;\n    animation: object_three 1s infinite;\n}\n#object_four{\n    -webkit-animation: object_four 1s infinite;\n    animation: object_four 1s infinite;\n}\n\n@-webkit-keyframes loading-center-absolute{\n    100% {\n        -ms-transform: rotate(360deg);\n        -webkit-transform: rotate(360deg);\n        transform: rotate(360deg);\n    }\n\n}\n@keyframes loading-center-absolute{\n    100% {\n        -ms-transform: rotate(360deg);\n        -webkit-transform: rotate(360deg);\n        transform: rotate(360deg);\n    }\n}\n@-webkit-keyframes object_one{\n    50% {\n        -ms-transform: translate(20px,20px);\n        -webkit-transform: translate(20px,20px);\n        transform: translate(20px,20px);\n    }\n}\n@keyframes object_one{\n    50% {\n        -ms-transform: translate(20px,20px);\n        -webkit-transform: translate(20px,20px);\n        transform: translate(20px,20px);\n    }\n}\n@-webkit-keyframes object_two{\n    50% {\n        -ms-transform: translate(-20px,20px);\n        -webkit-transform: translate(-20px,20px);\n        transform: translate(-20px,20px);\n    }\n}\n@keyframes object_two{\n    50% {\n        -ms-transform: translate(-20px,20px);\n        -webkit-transform: translate(-20px,20px);\n        transform: translate(-20px,20px);\n    }\n}\n@-webkit-keyframes object_three{\n    50% {\n        -ms-transform: translate(20px,-20px);\n        -webkit-transform: translate(20px,-20px);\n        transform: translate(20px,-20px);\n    }\n}\n@keyframes object_three{\n    50% {\n        -ms-transform: translate(20px,-20px);\n        -webkit-transform: translate(20px,-20px);\n        transform: translate(20px,-20px);\n    }\n}\n@-webkit-keyframes object_four{\n    50% {\n        -ms-transform: translate(-20px,-20px);\n        -webkit-transform: translate(-20px,-20px);\n        transform: translate(-20px,-20px);\n    }\n}\n@keyframes object_four{\n    50% {\n        -ms-transform: translate(-20px,-20px);\n        -webkit-transform: translate(-20px,-20px);\n        transform: translate(-20px,-20px);\n    }\n}\n"
  },
  {
    "path": "src/main/resources/static/css/pay.css",
    "content": "html {\n    font-size: 62.5%;\n    font-family: \"Microsoft YaHei\";\n}\n\nbody, div, dl, dt, dd, ul, ol, li, h1, h2, h3, h4, h5, h6, pre, code, form, fieldset, legend, input, button, textarea, p, blockquote, th, td, hr {\n    margin: 0;\n    padding: 0px 2px;\n}\n\nbody {\n    line-height: 1.333;\n    font-size: 12px\n}\n\nh1, h2, h3, h4, h5, h6 {\n    font-size: 100%;\n    font-family: \"Microsoft YaHei\";\n}\n\ninput, textarea, select, button {\n    font-size: 12px;\n    font-weight: normal\n}\n\n.btn-small {\n    width: 118px;\n    height: 28px;\n    font-size: 12px;\n    line-height: 28px;\n}\n.btn {\n    display: inline-block;\n    *zoom: 1;\n    *display: inline;\n    width: 158px;\n    height: 38px;\n    padding: 0;\n    margin: 0;\n    border: 1px solid #b0b0b0;\n    font-size: 14px;\n    line-height: 38px;\n    text-align: center;\n    color: #b0b0b0;\n    cursor: pointer;\n    -webkit-transition: all .4s;\n    transition: all .4s;\n}\n\n.btn-success {\n    background: green;\n    border-color: green;\n    color: #fff;\n}\n\ntable {\n    border-collapse: collapse;\n    border-spacing: 0\n}\n\naddress, caption, cite, code, dfn, em, th, var {\n    font-style: normal;\n    font-weight: normal\n}\n\nli {\n    list-style: none\n}\n\ncaption, th {\n    text-align: left\n}\n\nq:before, q:after {\n    content: ''\n}\n\nabbr, acronym {\n    border: 0;\n    font-variant: normal\n}\n\nsup {\n    vertical-align: text-top\n}\n\nsub {\n    vertical-align: text-bottom\n}\n\nfieldset, img, a img, iframe {\n    border-width: 0;\n    border-style: none\n}\n\nimg {\n    -ms-interpolation-mode: bicubic\n}\n\ntextarea {\n    overflow-y: auto\n}\n\nlegend {\n    color: #000\n}\n\na:link, a:visited {\n    text-decoration: none\n}\n\nhr {\n    height: 0\n}\n\nlabel {\n    cursor: pointer\n}\n\na {\n    color: #1baeae\n}\n\na:hover {\n    color: #1baeae;\n    text-decoration: none\n}\n\na:focus {\n    outline: none\n}\n\nbody, .body {\n    background: #f7f7f7;\n    height: 100%;\n    max-width: 640px;\n    min-width: 300px;\n    min-height: 100%;\n\n    margin: 0 auto;\n}\n\n.mod-title {\n    height: 60px;\n    line-height: 60px;\n    text-align: center;\n    border-bottom: 1px solid #ddd;\n    background: #fff\n}\n\n.ico_log {\n    display: inline-block;\n    width: 130px;\n    height: 38px;\n    vertical-align: middle;\n    margin-right: 7px\n}\n\n.icon-ali-pay {\n    background: url(\"../image/pay/alipay_logo.jpg\") no-repeat;\n    background-size: cover;\n}\n\n.icon-wx-pay {\n    background: url(\"../image/pay/wx_logo.jpg\") no-repeat;\n    background-size: cover;\n}\n\n.mod-title .text {\n    font-size: 20px;\n    color: #333;\n    font-weight: normal;\n    vertical-align: middle\n}\n\n.mod-ct {\n    min-width: 300px;\n    max-width: 640px;\n    margin: 0 auto;\n    margin-top: 15px;\n    margin-bottom: 15px;\n    padding-bottom: 10px;\n    background: #fff url(\"../image/pay/wave-repeat.png\") top center repeat-x;\n    text-align: center;\n    color: #333;\n    border: 1px solid #e5e5e5;\n    border-top: none\n}\n\n.mod-ct .order {\n    font-size: 20px;\n    padding-top: 10px\n}\n\n.mod-ct .amount {\n    font-size: 42px;\n    margin-top: 10px\n}\n\n.mod-ct .qr-image {\n    margin-top: 30px\n}\n\n.mod-ct .qr-image img {\n    width: 230px;\n    height: 230px\n}\n\n.mod-ct .detail {\n    margin-top: 10px;\n    padding-top: 0px;\n    padding-bottom: 10px;\n\n}\n\n.mod-ct .detail .detail-ct {\n    display: none;\n    font-size: 12px;\n    text-align: right;\n    line-height: 28px\n}\n\n.mod-ct .detail .detail-ct dt {\n    float: left\n}\n\n.mod-ct .detail-open {\n    border-top: 1px solid #e5e5e5\n}\n\n.mod-ct .detail .arrow {\n    padding: 6px 34px;\n    border: 1px solid #e5e5e5\n}\n\n.mod-ct .detail-open .detail-ct {\n    display: block\n}\n\n.mod-ct .tip {\n    margin-top: 20px;\n    border-top: 1px dashed #e5e5e5;\n    padding: 10px 0;\n    position: relative\n}\n\n.mod-ct .tip .ico-scan-wx {\n    display: inline-block;\n    width: 56px;\n    height: 55px;\n    background: url(\"../image/pay/scan-wx.png\") no-repeat;\n    vertical-align: middle;\n    *display: inline;\n    *zoom: 1\n}\n\n.mod-ct .tip .ico-scan-ali {\n    display: inline-block;\n    width: 56px;\n    height: 55px;\n    background: url(\"../image/pay/scan-alipay.png\") no-repeat;\n    vertical-align: middle;\n    *display: inline;\n    *zoom: 1\n}\n\n.mod-ct .tip .tip-text {\n    display: inline-block;\n    vertical-align: middle;\n    text-align: left;\n    margin-left: 23px;\n    font-size: 16px;\n    line-height: 28px;\n    *display: inline;\n    *zoom: 1\n}\n\n.mod-ct .tip .dec-left {\n    background-position: 0 -55px;\n    left: -136px\n}\n\n.mod-ct .tip .dec-right {\n    background-position: -25px -55px;\n    right: -136px\n}\n\n.foot {\n    text-align: center;\n    margin: 30px auto;\n    color: #888888;\n    font-size: 12px;\n    line-height: 20px;\n    font-family: \"Microsoft YaHei\";\n}\n\n.copyRight {\n    text-align: center;\n    color: #888888;\n    margin-bottom: 1px;\n}\n\n.copyRight a {\n    color: #888888;\n}\n\nh1 {\n    font-family: \"Microsoft YaHei\";\n    font-size: 15px;\n    margin: 5px 0;\n    padding-bottom: 2px;\n    letter-spacing: 2px;\n}\n\n.time-item strong {\n    background: #1baeae;\n    color: #fff;\n    line-height: 25px;\n    font-size: 15px;\n    font-family: \"Microsoft YaHei\";\n    padding: 0 10px;\n    margin-right: 10px;\n    border-radius: 5px;\n    box-shadow: 1px 1px 3px rgba(0, 0, 0, 0.2);\n}\n\n.item-title {\n    background: none;\n    line-height: 25px;\n    font-size: 24px;\n    padding: 0 10px;\n    float: left;\n"
  },
  {
    "path": "src/main/resources/static/css/skins/_all-skins.css",
    "content": "/*\n * Skin: Blue\n * ----------\n */\n.skin-blue .main-header .navbar {\n  background-color: #3c8dbc;\n}\n.skin-blue .main-header .navbar .nav > li > a {\n  color: #ffffff;\n}\n.skin-blue .main-header .navbar .nav > li > a:hover,\n.skin-blue .main-header .navbar .nav > li > a:active,\n.skin-blue .main-header .navbar .nav > li > a:focus,\n.skin-blue .main-header .navbar .nav .open > a,\n.skin-blue .main-header .navbar .nav .open > a:hover,\n.skin-blue .main-header .navbar .nav .open > a:focus,\n.skin-blue .main-header .navbar .nav > .active > a {\n  background: rgba(0, 0, 0, 0.1);\n  color: #f6f6f6;\n}\n.skin-blue .main-header .navbar .sidebar-toggle {\n  color: #ffffff;\n}\n.skin-blue .main-header .navbar .sidebar-toggle:hover {\n  color: #f6f6f6;\n  background: rgba(0, 0, 0, 0.1);\n}\n.skin-blue .main-header .navbar .sidebar-toggle {\n  color: #fff;\n}\n.skin-blue .main-header .navbar .sidebar-toggle:hover {\n  background-color: #367fa9;\n}\n@media (max-width: 767px) {\n  .skin-blue .main-header .navbar .dropdown-menu li.divider {\n    background-color: rgba(255, 255, 255, 0.1);\n  }\n  .skin-blue .main-header .navbar .dropdown-menu li a {\n    color: #fff;\n  }\n  .skin-blue .main-header .navbar .dropdown-menu li a:hover {\n    background: #367fa9;\n  }\n}\n.skin-blue .main-header .logo {\n  background-color: #367fa9;\n  color: #ffffff;\n  border-bottom: 0 solid transparent;\n}\n.skin-blue .main-header .logo:hover {\n  background-color: #357ca5;\n}\n.skin-blue .main-header li.user-header {\n  background-color: #3c8dbc;\n}\n.skin-blue .content-header {\n  background: transparent;\n}\n.skin-blue .wrapper,\n.skin-blue .main-sidebar,\n.skin-blue .left-side {\n  background-color: #222d32;\n}\n.skin-blue .user-panel > .info,\n.skin-blue .user-panel > .info > a {\n  color: #fff;\n}\n.skin-blue .sidebar-menu > li.header {\n  color: #4b646f;\n  background: #1a2226;\n}\n.skin-blue .sidebar-menu > li > a {\n  border-left: 3px solid transparent;\n}\n.skin-blue .sidebar-menu > li:hover > a,\n.skin-blue .sidebar-menu > li.active > a,\n.skin-blue .sidebar-menu > li.menu-open > a {\n  color: #ffffff;\n  background: #1e282c;\n}\n.skin-blue .sidebar-menu > li.active > a {\n  border-left-color: #3c8dbc;\n}\n.skin-blue .sidebar-menu > li > .treeview-menu {\n  margin: 0 1px;\n  background: #2c3b41;\n}\n.skin-blue .sidebar a {\n  color: #b8c7ce;\n}\n.skin-blue .sidebar a:hover {\n  text-decoration: none;\n}\n.skin-blue .sidebar-menu .treeview-menu > li > a {\n  color: #8aa4af;\n}\n.skin-blue .sidebar-menu .treeview-menu > li.active > a,\n.skin-blue .sidebar-menu .treeview-menu > li > a:hover {\n  color: #ffffff;\n}\n.skin-blue .sidebar-form {\n  border-radius: 3px;\n  border: 1px solid #374850;\n  margin: 10px 10px;\n}\n.skin-blue .sidebar-form input[type=\"text\"],\n.skin-blue .sidebar-form .btn {\n  box-shadow: none;\n  background-color: #374850;\n  border: 1px solid transparent;\n  height: 35px;\n}\n.skin-blue .sidebar-form input[type=\"text\"] {\n  color: #666;\n  border-top-left-radius: 2px;\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 2px;\n}\n.skin-blue .sidebar-form input[type=\"text\"]:focus,\n.skin-blue .sidebar-form input[type=\"text\"]:focus + .input-group-btn .btn {\n  background-color: #fff;\n  color: #666;\n}\n.skin-blue .sidebar-form input[type=\"text\"]:focus + .input-group-btn .btn {\n  border-left-color: #fff;\n}\n.skin-blue .sidebar-form .btn {\n  color: #999;\n  border-top-left-radius: 0;\n  border-top-right-radius: 2px;\n  border-bottom-right-radius: 2px;\n  border-bottom-left-radius: 0;\n}\n.skin-blue.layout-top-nav .main-header > .logo {\n  background-color: #3c8dbc;\n  color: #ffffff;\n  border-bottom: 0 solid transparent;\n}\n.skin-blue.layout-top-nav .main-header > .logo:hover {\n  background-color: #3b8ab8;\n}\n/*\n * Skin: Blue\n * ----------\n */\n.skin-blue-light .main-header .navbar {\n  background-color: #3c8dbc;\n}\n.skin-blue-light .main-header .navbar .nav > li > a {\n  color: #ffffff;\n}\n.skin-blue-light .main-header .navbar .nav > li > a:hover,\n.skin-blue-light .main-header .navbar .nav > li > a:active,\n.skin-blue-light .main-header .navbar .nav > li > a:focus,\n.skin-blue-light .main-header .navbar .nav .open > a,\n.skin-blue-light .main-header .navbar .nav .open > a:hover,\n.skin-blue-light .main-header .navbar .nav .open > a:focus,\n.skin-blue-light .main-header .navbar .nav > .active > a {\n  background: rgba(0, 0, 0, 0.1);\n  color: #f6f6f6;\n}\n.skin-blue-light .main-header .navbar .sidebar-toggle {\n  color: #ffffff;\n}\n.skin-blue-light .main-header .navbar .sidebar-toggle:hover {\n  color: #f6f6f6;\n  background: rgba(0, 0, 0, 0.1);\n}\n.skin-blue-light .main-header .navbar .sidebar-toggle {\n  color: #fff;\n}\n.skin-blue-light .main-header .navbar .sidebar-toggle:hover {\n  background-color: #367fa9;\n}\n@media (max-width: 767px) {\n  .skin-blue-light .main-header .navbar .dropdown-menu li.divider {\n    background-color: rgba(255, 255, 255, 0.1);\n  }\n  .skin-blue-light .main-header .navbar .dropdown-menu li a {\n    color: #fff;\n  }\n  .skin-blue-light .main-header .navbar .dropdown-menu li a:hover {\n    background: #367fa9;\n  }\n}\n.skin-blue-light .main-header .logo {\n  background-color: #3c8dbc;\n  color: #ffffff;\n  border-bottom: 0 solid transparent;\n}\n.skin-blue-light .main-header .logo:hover {\n  background-color: #3b8ab8;\n}\n.skin-blue-light .main-header li.user-header {\n  background-color: #3c8dbc;\n}\n.skin-blue-light .content-header {\n  background: transparent;\n}\n.skin-blue-light .wrapper,\n.skin-blue-light .main-sidebar,\n.skin-blue-light .left-side {\n  background-color: #f9fafc;\n}\n.skin-blue-light .main-sidebar {\n  border-right: 1px solid #d2d6de;\n}\n.skin-blue-light .user-panel > .info,\n.skin-blue-light .user-panel > .info > a {\n  color: #444444;\n}\n.skin-blue-light .sidebar-menu > li {\n  -webkit-transition: border-left-color 0.3s ease;\n  -o-transition: border-left-color 0.3s ease;\n  transition: border-left-color 0.3s ease;\n}\n.skin-blue-light .sidebar-menu > li.header {\n  color: #848484;\n  background: #f9fafc;\n}\n.skin-blue-light .sidebar-menu > li > a {\n  border-left: 3px solid transparent;\n  font-weight: 600;\n}\n.skin-blue-light .sidebar-menu > li:hover > a,\n.skin-blue-light .sidebar-menu > li.active > a {\n  color: #000000;\n  background: #f4f4f5;\n}\n.skin-blue-light .sidebar-menu > li.active {\n  border-left-color: #3c8dbc;\n}\n.skin-blue-light .sidebar-menu > li.active > a {\n  font-weight: 600;\n}\n.skin-blue-light .sidebar-menu > li > .treeview-menu {\n  background: #f4f4f5;\n}\n.skin-blue-light .sidebar a {\n  color: #444444;\n}\n.skin-blue-light .sidebar a:hover {\n  text-decoration: none;\n}\n.skin-blue-light .sidebar-menu .treeview-menu > li > a {\n  color: #777777;\n}\n.skin-blue-light .sidebar-menu .treeview-menu > li.active > a,\n.skin-blue-light .sidebar-menu .treeview-menu > li > a:hover {\n  color: #000000;\n}\n.skin-blue-light .sidebar-menu .treeview-menu > li.active > a {\n  font-weight: 600;\n}\n.skin-blue-light .sidebar-form {\n  border-radius: 3px;\n  border: 1px solid #d2d6de;\n  margin: 10px 10px;\n}\n.skin-blue-light .sidebar-form input[type=\"text\"],\n.skin-blue-light .sidebar-form .btn {\n  box-shadow: none;\n  background-color: #fff;\n  border: 1px solid transparent;\n  height: 35px;\n}\n.skin-blue-light .sidebar-form input[type=\"text\"] {\n  color: #666;\n  border-top-left-radius: 2px;\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 2px;\n}\n.skin-blue-light .sidebar-form input[type=\"text\"]:focus,\n.skin-blue-light .sidebar-form input[type=\"text\"]:focus + .input-group-btn .btn {\n  background-color: #fff;\n  color: #666;\n}\n.skin-blue-light .sidebar-form input[type=\"text\"]:focus + .input-group-btn .btn {\n  border-left-color: #fff;\n}\n.skin-blue-light .sidebar-form .btn {\n  color: #999;\n  border-top-left-radius: 0;\n  border-top-right-radius: 2px;\n  border-bottom-right-radius: 2px;\n  border-bottom-left-radius: 0;\n}\n@media (min-width: 768px) {\n  .skin-blue-light.sidebar-mini.sidebar-collapse .sidebar-menu > li > .treeview-menu {\n    border-left: 1px solid #d2d6de;\n  }\n}\n.skin-blue-light .main-footer {\n  border-top-color: #d2d6de;\n}\n.skin-blue.layout-top-nav .main-header > .logo {\n  background-color: #3c8dbc;\n  color: #ffffff;\n  border-bottom: 0 solid transparent;\n}\n.skin-blue.layout-top-nav .main-header > .logo:hover {\n  background-color: #3b8ab8;\n}\n/*\n * Skin: Black\n * -----------\n */\n/* skin-black navbar */\n.skin-black .main-header {\n  -webkit-box-shadow: 0px 1px 1px rgba(0, 0, 0, 0.05);\n  box-shadow: 0px 1px 1px rgba(0, 0, 0, 0.05);\n}\n.skin-black .main-header .navbar-toggle {\n  color: #333;\n}\n.skin-black .main-header .navbar-brand {\n  color: #333;\n  border-right: 1px solid #eee;\n}\n.skin-black .main-header .navbar {\n  background-color: #ffffff;\n}\n.skin-black .main-header .navbar .nav > li > a {\n  color: #333333;\n}\n.skin-black .main-header .navbar .nav > li > a:hover,\n.skin-black .main-header .navbar .nav > li > a:active,\n.skin-black .main-header .navbar .nav > li > a:focus,\n.skin-black .main-header .navbar .nav .open > a,\n.skin-black .main-header .navbar .nav .open > a:hover,\n.skin-black .main-header .navbar .nav .open > a:focus,\n.skin-black .main-header .navbar .nav > .active > a {\n  background: #ffffff;\n  color: #999999;\n}\n.skin-black .main-header .navbar .sidebar-toggle {\n  color: #333333;\n}\n.skin-black .main-header .navbar .sidebar-toggle:hover {\n  color: #999999;\n  background: #ffffff;\n}\n.skin-black .main-header .navbar > .sidebar-toggle {\n  color: #333;\n  border-right: 1px solid #eee;\n}\n.skin-black .main-header .navbar .navbar-nav > li > a {\n  border-right: 1px solid #eee;\n}\n.skin-black .main-header .navbar .navbar-custom-menu .navbar-nav > li > a,\n.skin-black .main-header .navbar .navbar-right > li > a {\n  border-left: 1px solid #eee;\n  border-right-width: 0;\n}\n.skin-black .main-header > .logo {\n  background-color: #ffffff;\n  color: #333333;\n  border-bottom: 0 solid transparent;\n  border-right: 1px solid #eee;\n}\n.skin-black .main-header > .logo:hover {\n  background-color: #fcfcfc;\n}\n@media (max-width: 767px) {\n  .skin-black .main-header > .logo {\n    background-color: #222222;\n    color: #ffffff;\n    border-bottom: 0 solid transparent;\n    border-right: none;\n  }\n  .skin-black .main-header > .logo:hover {\n    background-color: #1f1f1f;\n  }\n}\n.skin-black .main-header li.user-header {\n  background-color: #222;\n}\n.skin-black .content-header {\n  background: transparent;\n  box-shadow: none;\n}\n.skin-black .wrapper,\n.skin-black .main-sidebar,\n.skin-black .left-side {\n  background-color: #222d32;\n}\n.skin-black .user-panel > .info,\n.skin-black .user-panel > .info > a {\n  color: #fff;\n}\n.skin-black .sidebar-menu > li.header {\n  color: #4b646f;\n  background: #1a2226;\n}\n.skin-black .sidebar-menu > li > a {\n  border-left: 3px solid transparent;\n}\n.skin-black .sidebar-menu > li:hover > a,\n.skin-black .sidebar-menu > li.active > a,\n.skin-black .sidebar-menu > li.menu-open > a {\n  color: #ffffff;\n  background: #1e282c;\n}\n.skin-black .sidebar-menu > li.active > a {\n  border-left-color: #ffffff;\n}\n.skin-black .sidebar-menu > li > .treeview-menu {\n  margin: 0 1px;\n  background: #2c3b41;\n}\n.skin-black .sidebar a {\n  color: #b8c7ce;\n}\n.skin-black .sidebar a:hover {\n  text-decoration: none;\n}\n.skin-black .sidebar-menu .treeview-menu > li > a {\n  color: #8aa4af;\n}\n.skin-black .sidebar-menu .treeview-menu > li.active > a,\n.skin-black .sidebar-menu .treeview-menu > li > a:hover {\n  color: #ffffff;\n}\n.skin-black .sidebar-form {\n  border-radius: 3px;\n  border: 1px solid #374850;\n  margin: 10px 10px;\n}\n.skin-black .sidebar-form input[type=\"text\"],\n.skin-black .sidebar-form .btn {\n  box-shadow: none;\n  background-color: #374850;\n  border: 1px solid transparent;\n  height: 35px;\n}\n.skin-black .sidebar-form input[type=\"text\"] {\n  color: #666;\n  border-top-left-radius: 2px;\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 2px;\n}\n.skin-black .sidebar-form input[type=\"text\"]:focus,\n.skin-black .sidebar-form input[type=\"text\"]:focus + .input-group-btn .btn {\n  background-color: #fff;\n  color: #666;\n}\n.skin-black .sidebar-form input[type=\"text\"]:focus + .input-group-btn .btn {\n  border-left-color: #fff;\n}\n.skin-black .sidebar-form .btn {\n  color: #999;\n  border-top-left-radius: 0;\n  border-top-right-radius: 2px;\n  border-bottom-right-radius: 2px;\n  border-bottom-left-radius: 0;\n}\n.skin-black .pace .pace-progress {\n  background: #222;\n}\n.skin-black .pace .pace-activity {\n  border-top-color: #222;\n  border-left-color: #222;\n}\n/*\n * Skin: Black\n * -----------\n */\n/* skin-black navbar */\n.skin-black-light .main-header {\n  border-bottom: 1px solid #d2d6de;\n}\n.skin-black-light .main-header .navbar-toggle {\n  color: #333;\n}\n.skin-black-light .main-header .navbar-brand {\n  color: #333;\n  border-right: 1px solid #d2d6de;\n}\n.skin-black-light .main-header .navbar {\n  background-color: #ffffff;\n}\n.skin-black-light .main-header .navbar .nav > li > a {\n  color: #333333;\n}\n.skin-black-light .main-header .navbar .nav > li > a:hover,\n.skin-black-light .main-header .navbar .nav > li > a:active,\n.skin-black-light .main-header .navbar .nav > li > a:focus,\n.skin-black-light .main-header .navbar .nav .open > a,\n.skin-black-light .main-header .navbar .nav .open > a:hover,\n.skin-black-light .main-header .navbar .nav .open > a:focus,\n.skin-black-light .main-header .navbar .nav > .active > a {\n  background: #ffffff;\n  color: #999999;\n}\n.skin-black-light .main-header .navbar .sidebar-toggle {\n  color: #333333;\n}\n.skin-black-light .main-header .navbar .sidebar-toggle:hover {\n  color: #999999;\n  background: #ffffff;\n}\n.skin-black-light .main-header .navbar > .sidebar-toggle {\n  color: #333;\n  border-right: 1px solid #d2d6de;\n}\n.skin-black-light .main-header .navbar .navbar-nav > li > a {\n  border-right: 1px solid #d2d6de;\n}\n.skin-black-light .main-header .navbar .navbar-custom-menu .navbar-nav > li > a,\n.skin-black-light .main-header .navbar .navbar-right > li > a {\n  border-left: 1px solid #d2d6de;\n  border-right-width: 0;\n}\n.skin-black-light .main-header > .logo {\n  background-color: #ffffff;\n  color: #333333;\n  border-bottom: 0 solid transparent;\n  border-right: 1px solid #d2d6de;\n}\n.skin-black-light .main-header > .logo:hover {\n  background-color: #fcfcfc;\n}\n@media (max-width: 767px) {\n  .skin-black-light .main-header > .logo {\n    background-color: #222222;\n    color: #ffffff;\n    border-bottom: 0 solid transparent;\n    border-right: none;\n  }\n  .skin-black-light .main-header > .logo:hover {\n    background-color: #1f1f1f;\n  }\n}\n.skin-black-light .main-header li.user-header {\n  background-color: #222;\n}\n.skin-black-light .content-header {\n  background: transparent;\n  box-shadow: none;\n}\n.skin-black-light .wrapper,\n.skin-black-light .main-sidebar,\n.skin-black-light .left-side {\n  background-color: #f9fafc;\n}\n.skin-black-light .main-sidebar {\n  border-right: 1px solid #d2d6de;\n}\n.skin-black-light .user-panel > .info,\n.skin-black-light .user-panel > .info > a {\n  color: #444444;\n}\n.skin-black-light .sidebar-menu > li {\n  -webkit-transition: border-left-color 0.3s ease;\n  -o-transition: border-left-color 0.3s ease;\n  transition: border-left-color 0.3s ease;\n}\n.skin-black-light .sidebar-menu > li.header {\n  color: #848484;\n  background: #f9fafc;\n}\n.skin-black-light .sidebar-menu > li > a {\n  border-left: 3px solid transparent;\n  font-weight: 600;\n}\n.skin-black-light .sidebar-menu > li:hover > a,\n.skin-black-light .sidebar-menu > li.active > a {\n  color: #000000;\n  background: #f4f4f5;\n}\n.skin-black-light .sidebar-menu > li.active {\n  border-left-color: #ffffff;\n}\n.skin-black-light .sidebar-menu > li.active > a {\n  font-weight: 600;\n}\n.skin-black-light .sidebar-menu > li > .treeview-menu {\n  background: #f4f4f5;\n}\n.skin-black-light .sidebar a {\n  color: #444444;\n}\n.skin-black-light .sidebar a:hover {\n  text-decoration: none;\n}\n.skin-black-light .sidebar-menu .treeview-menu > li > a {\n  color: #777777;\n}\n.skin-black-light .sidebar-menu .treeview-menu > li.active > a,\n.skin-black-light .sidebar-menu .treeview-menu > li > a:hover {\n  color: #000000;\n}\n.skin-black-light .sidebar-menu .treeview-menu > li.active > a {\n  font-weight: 600;\n}\n.skin-black-light .sidebar-form {\n  border-radius: 3px;\n  border: 1px solid #d2d6de;\n  margin: 10px 10px;\n}\n.skin-black-light .sidebar-form input[type=\"text\"],\n.skin-black-light .sidebar-form .btn {\n  box-shadow: none;\n  background-color: #fff;\n  border: 1px solid transparent;\n  height: 35px;\n}\n.skin-black-light .sidebar-form input[type=\"text\"] {\n  color: #666;\n  border-top-left-radius: 2px;\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 2px;\n}\n.skin-black-light .sidebar-form input[type=\"text\"]:focus,\n.skin-black-light .sidebar-form input[type=\"text\"]:focus + .input-group-btn .btn {\n  background-color: #fff;\n  color: #666;\n}\n.skin-black-light .sidebar-form input[type=\"text\"]:focus + .input-group-btn .btn {\n  border-left-color: #fff;\n}\n.skin-black-light .sidebar-form .btn {\n  color: #999;\n  border-top-left-radius: 0;\n  border-top-right-radius: 2px;\n  border-bottom-right-radius: 2px;\n  border-bottom-left-radius: 0;\n}\n@media (min-width: 768px) {\n  .skin-black-light.sidebar-mini.sidebar-collapse .sidebar-menu > li > .treeview-menu {\n    border-left: 1px solid #d2d6de;\n  }\n}\n/*\n * Skin: Green\n * -----------\n */\n.skin-green .main-header .navbar {\n  background-color: #00a65a;\n}\n.skin-green .main-header .navbar .nav > li > a {\n  color: #ffffff;\n}\n.skin-green .main-header .navbar .nav > li > a:hover,\n.skin-green .main-header .navbar .nav > li > a:active,\n.skin-green .main-header .navbar .nav > li > a:focus,\n.skin-green .main-header .navbar .nav .open > a,\n.skin-green .main-header .navbar .nav .open > a:hover,\n.skin-green .main-header .navbar .nav .open > a:focus,\n.skin-green .main-header .navbar .nav > .active > a {\n  background: rgba(0, 0, 0, 0.1);\n  color: #f6f6f6;\n}\n.skin-green .main-header .navbar .sidebar-toggle {\n  color: #ffffff;\n}\n.skin-green .main-header .navbar .sidebar-toggle:hover {\n  color: #f6f6f6;\n  background: rgba(0, 0, 0, 0.1);\n}\n.skin-green .main-header .navbar .sidebar-toggle {\n  color: #fff;\n}\n.skin-green .main-header .navbar .sidebar-toggle:hover {\n  background-color: #008d4c;\n}\n@media (max-width: 767px) {\n  .skin-green .main-header .navbar .dropdown-menu li.divider {\n    background-color: rgba(255, 255, 255, 0.1);\n  }\n  .skin-green .main-header .navbar .dropdown-menu li a {\n    color: #fff;\n  }\n  .skin-green .main-header .navbar .dropdown-menu li a:hover {\n    background: #008d4c;\n  }\n}\n.skin-green .main-header .logo {\n  background-color: #008d4c;\n  color: #ffffff;\n  border-bottom: 0 solid transparent;\n}\n.skin-green .main-header .logo:hover {\n  background-color: #008749;\n}\n.skin-green .main-header li.user-header {\n  background-color: #00a65a;\n}\n.skin-green .content-header {\n  background: transparent;\n}\n.skin-green .wrapper,\n.skin-green .main-sidebar,\n.skin-green .left-side {\n  background-color: #222d32;\n}\n.skin-green .user-panel > .info,\n.skin-green .user-panel > .info > a {\n  color: #fff;\n}\n.skin-green .sidebar-menu > li.header {\n  color: #4b646f;\n  background: #1a2226;\n}\n.skin-green .sidebar-menu > li > a {\n  border-left: 3px solid transparent;\n}\n.skin-green .sidebar-menu > li:hover > a,\n.skin-green .sidebar-menu > li.active > a,\n.skin-green .sidebar-menu > li.menu-open > a {\n  color: #ffffff;\n  background: #1e282c;\n}\n.skin-green .sidebar-menu > li.active > a {\n  border-left-color: #00a65a;\n}\n.skin-green .sidebar-menu > li > .treeview-menu {\n  margin: 0 1px;\n  background: #2c3b41;\n}\n.skin-green .sidebar a {\n  color: #b8c7ce;\n}\n.skin-green .sidebar a:hover {\n  text-decoration: none;\n}\n.skin-green .sidebar-menu .treeview-menu > li > a {\n  color: #8aa4af;\n}\n.skin-green .sidebar-menu .treeview-menu > li.active > a,\n.skin-green .sidebar-menu .treeview-menu > li > a:hover {\n  color: #ffffff;\n}\n.skin-green .sidebar-form {\n  border-radius: 3px;\n  border: 1px solid #374850;\n  margin: 10px 10px;\n}\n.skin-green .sidebar-form input[type=\"text\"],\n.skin-green .sidebar-form .btn {\n  box-shadow: none;\n  background-color: #374850;\n  border: 1px solid transparent;\n  height: 35px;\n}\n.skin-green .sidebar-form input[type=\"text\"] {\n  color: #666;\n  border-top-left-radius: 2px;\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 2px;\n}\n.skin-green .sidebar-form input[type=\"text\"]:focus,\n.skin-green .sidebar-form input[type=\"text\"]:focus + .input-group-btn .btn {\n  background-color: #fff;\n  color: #666;\n}\n.skin-green .sidebar-form input[type=\"text\"]:focus + .input-group-btn .btn {\n  border-left-color: #fff;\n}\n.skin-green .sidebar-form .btn {\n  color: #999;\n  border-top-left-radius: 0;\n  border-top-right-radius: 2px;\n  border-bottom-right-radius: 2px;\n  border-bottom-left-radius: 0;\n}\n/*\n * Skin: Green\n * -----------\n */\n.skin-green-light .main-header .navbar {\n  background-color: #00a65a;\n}\n.skin-green-light .main-header .navbar .nav > li > a {\n  color: #ffffff;\n}\n.skin-green-light .main-header .navbar .nav > li > a:hover,\n.skin-green-light .main-header .navbar .nav > li > a:active,\n.skin-green-light .main-header .navbar .nav > li > a:focus,\n.skin-green-light .main-header .navbar .nav .open > a,\n.skin-green-light .main-header .navbar .nav .open > a:hover,\n.skin-green-light .main-header .navbar .nav .open > a:focus,\n.skin-green-light .main-header .navbar .nav > .active > a {\n  background: rgba(0, 0, 0, 0.1);\n  color: #f6f6f6;\n}\n.skin-green-light .main-header .navbar .sidebar-toggle {\n  color: #ffffff;\n}\n.skin-green-light .main-header .navbar .sidebar-toggle:hover {\n  color: #f6f6f6;\n  background: rgba(0, 0, 0, 0.1);\n}\n.skin-green-light .main-header .navbar .sidebar-toggle {\n  color: #fff;\n}\n.skin-green-light .main-header .navbar .sidebar-toggle:hover {\n  background-color: #008d4c;\n}\n@media (max-width: 767px) {\n  .skin-green-light .main-header .navbar .dropdown-menu li.divider {\n    background-color: rgba(255, 255, 255, 0.1);\n  }\n  .skin-green-light .main-header .navbar .dropdown-menu li a {\n    color: #fff;\n  }\n  .skin-green-light .main-header .navbar .dropdown-menu li a:hover {\n    background: #008d4c;\n  }\n}\n.skin-green-light .main-header .logo {\n  background-color: #00a65a;\n  color: #ffffff;\n  border-bottom: 0 solid transparent;\n}\n.skin-green-light .main-header .logo:hover {\n  background-color: #00a157;\n}\n.skin-green-light .main-header li.user-header {\n  background-color: #00a65a;\n}\n.skin-green-light .content-header {\n  background: transparent;\n}\n.skin-green-light .wrapper,\n.skin-green-light .main-sidebar,\n.skin-green-light .left-side {\n  background-color: #f9fafc;\n}\n.skin-green-light .main-sidebar {\n  border-right: 1px solid #d2d6de;\n}\n.skin-green-light .user-panel > .info,\n.skin-green-light .user-panel > .info > a {\n  color: #444444;\n}\n.skin-green-light .sidebar-menu > li {\n  -webkit-transition: border-left-color 0.3s ease;\n  -o-transition: border-left-color 0.3s ease;\n  transition: border-left-color 0.3s ease;\n}\n.skin-green-light .sidebar-menu > li.header {\n  color: #848484;\n  background: #f9fafc;\n}\n.skin-green-light .sidebar-menu > li > a {\n  border-left: 3px solid transparent;\n  font-weight: 600;\n}\n.skin-green-light .sidebar-menu > li:hover > a,\n.skin-green-light .sidebar-menu > li.active > a {\n  color: #000000;\n  background: #f4f4f5;\n}\n.skin-green-light .sidebar-menu > li.active {\n  border-left-color: #00a65a;\n}\n.skin-green-light .sidebar-menu > li.active > a {\n  font-weight: 600;\n}\n.skin-green-light .sidebar-menu > li > .treeview-menu {\n  background: #f4f4f5;\n}\n.skin-green-light .sidebar a {\n  color: #444444;\n}\n.skin-green-light .sidebar a:hover {\n  text-decoration: none;\n}\n.skin-green-light .sidebar-menu .treeview-menu > li > a {\n  color: #777777;\n}\n.skin-green-light .sidebar-menu .treeview-menu > li.active > a,\n.skin-green-light .sidebar-menu .treeview-menu > li > a:hover {\n  color: #000000;\n}\n.skin-green-light .sidebar-menu .treeview-menu > li.active > a {\n  font-weight: 600;\n}\n.skin-green-light .sidebar-form {\n  border-radius: 3px;\n  border: 1px solid #d2d6de;\n  margin: 10px 10px;\n}\n.skin-green-light .sidebar-form input[type=\"text\"],\n.skin-green-light .sidebar-form .btn {\n  box-shadow: none;\n  background-color: #fff;\n  border: 1px solid transparent;\n  height: 35px;\n}\n.skin-green-light .sidebar-form input[type=\"text\"] {\n  color: #666;\n  border-top-left-radius: 2px;\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 2px;\n}\n.skin-green-light .sidebar-form input[type=\"text\"]:focus,\n.skin-green-light .sidebar-form input[type=\"text\"]:focus + .input-group-btn .btn {\n  background-color: #fff;\n  color: #666;\n}\n.skin-green-light .sidebar-form input[type=\"text\"]:focus + .input-group-btn .btn {\n  border-left-color: #fff;\n}\n.skin-green-light .sidebar-form .btn {\n  color: #999;\n  border-top-left-radius: 0;\n  border-top-right-radius: 2px;\n  border-bottom-right-radius: 2px;\n  border-bottom-left-radius: 0;\n}\n@media (min-width: 768px) {\n  .skin-green-light.sidebar-mini.sidebar-collapse .sidebar-menu > li > .treeview-menu {\n    border-left: 1px solid #d2d6de;\n  }\n}\n/*\n * Skin: Red\n * ---------\n */\n.skin-red .main-header .navbar {\n  background-color: #dd4b39;\n}\n.skin-red .main-header .navbar .nav > li > a {\n  color: #ffffff;\n}\n.skin-red .main-header .navbar .nav > li > a:hover,\n.skin-red .main-header .navbar .nav > li > a:active,\n.skin-red .main-header .navbar .nav > li > a:focus,\n.skin-red .main-header .navbar .nav .open > a,\n.skin-red .main-header .navbar .nav .open > a:hover,\n.skin-red .main-header .navbar .nav .open > a:focus,\n.skin-red .main-header .navbar .nav > .active > a {\n  background: rgba(0, 0, 0, 0.1);\n  color: #f6f6f6;\n}\n.skin-red .main-header .navbar .sidebar-toggle {\n  color: #ffffff;\n}\n.skin-red .main-header .navbar .sidebar-toggle:hover {\n  color: #f6f6f6;\n  background: rgba(0, 0, 0, 0.1);\n}\n.skin-red .main-header .navbar .sidebar-toggle {\n  color: #fff;\n}\n.skin-red .main-header .navbar .sidebar-toggle:hover {\n  background-color: #d73925;\n}\n@media (max-width: 767px) {\n  .skin-red .main-header .navbar .dropdown-menu li.divider {\n    background-color: rgba(255, 255, 255, 0.1);\n  }\n  .skin-red .main-header .navbar .dropdown-menu li a {\n    color: #fff;\n  }\n  .skin-red .main-header .navbar .dropdown-menu li a:hover {\n    background: #d73925;\n  }\n}\n.skin-red .main-header .logo {\n  background-color: #d73925;\n  color: #ffffff;\n  border-bottom: 0 solid transparent;\n}\n.skin-red .main-header .logo:hover {\n  background-color: #d33724;\n}\n.skin-red .main-header li.user-header {\n  background-color: #dd4b39;\n}\n.skin-red .content-header {\n  background: transparent;\n}\n.skin-red .wrapper,\n.skin-red .main-sidebar,\n.skin-red .left-side {\n  background-color: #222d32;\n}\n.skin-red .user-panel > .info,\n.skin-red .user-panel > .info > a {\n  color: #fff;\n}\n.skin-red .sidebar-menu > li.header {\n  color: #4b646f;\n  background: #1a2226;\n}\n.skin-red .sidebar-menu > li > a {\n  border-left: 3px solid transparent;\n}\n.skin-red .sidebar-menu > li:hover > a,\n.skin-red .sidebar-menu > li.active > a,\n.skin-red .sidebar-menu > li.menu-open > a {\n  color: #ffffff;\n  background: #1e282c;\n}\n.skin-red .sidebar-menu > li.active > a {\n  border-left-color: #dd4b39;\n}\n.skin-red .sidebar-menu > li > .treeview-menu {\n  margin: 0 1px;\n  background: #2c3b41;\n}\n.skin-red .sidebar a {\n  color: #b8c7ce;\n}\n.skin-red .sidebar a:hover {\n  text-decoration: none;\n}\n.skin-red .sidebar-menu .treeview-menu > li > a {\n  color: #8aa4af;\n}\n.skin-red .sidebar-menu .treeview-menu > li.active > a,\n.skin-red .sidebar-menu .treeview-menu > li > a:hover {\n  color: #ffffff;\n}\n.skin-red .sidebar-form {\n  border-radius: 3px;\n  border: 1px solid #374850;\n  margin: 10px 10px;\n}\n.skin-red .sidebar-form input[type=\"text\"],\n.skin-red .sidebar-form .btn {\n  box-shadow: none;\n  background-color: #374850;\n  border: 1px solid transparent;\n  height: 35px;\n}\n.skin-red .sidebar-form input[type=\"text\"] {\n  color: #666;\n  border-top-left-radius: 2px;\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 2px;\n}\n.skin-red .sidebar-form input[type=\"text\"]:focus,\n.skin-red .sidebar-form input[type=\"text\"]:focus + .input-group-btn .btn {\n  background-color: #fff;\n  color: #666;\n}\n.skin-red .sidebar-form input[type=\"text\"]:focus + .input-group-btn .btn {\n  border-left-color: #fff;\n}\n.skin-red .sidebar-form .btn {\n  color: #999;\n  border-top-left-radius: 0;\n  border-top-right-radius: 2px;\n  border-bottom-right-radius: 2px;\n  border-bottom-left-radius: 0;\n}\n/*\n * Skin: Red\n * ---------\n */\n.skin-red-light .main-header .navbar {\n  background-color: #dd4b39;\n}\n.skin-red-light .main-header .navbar .nav > li > a {\n  color: #ffffff;\n}\n.skin-red-light .main-header .navbar .nav > li > a:hover,\n.skin-red-light .main-header .navbar .nav > li > a:active,\n.skin-red-light .main-header .navbar .nav > li > a:focus,\n.skin-red-light .main-header .navbar .nav .open > a,\n.skin-red-light .main-header .navbar .nav .open > a:hover,\n.skin-red-light .main-header .navbar .nav .open > a:focus,\n.skin-red-light .main-header .navbar .nav > .active > a {\n  background: rgba(0, 0, 0, 0.1);\n  color: #f6f6f6;\n}\n.skin-red-light .main-header .navbar .sidebar-toggle {\n  color: #ffffff;\n}\n.skin-red-light .main-header .navbar .sidebar-toggle:hover {\n  color: #f6f6f6;\n  background: rgba(0, 0, 0, 0.1);\n}\n.skin-red-light .main-header .navbar .sidebar-toggle {\n  color: #fff;\n}\n.skin-red-light .main-header .navbar .sidebar-toggle:hover {\n  background-color: #d73925;\n}\n@media (max-width: 767px) {\n  .skin-red-light .main-header .navbar .dropdown-menu li.divider {\n    background-color: rgba(255, 255, 255, 0.1);\n  }\n  .skin-red-light .main-header .navbar .dropdown-menu li a {\n    color: #fff;\n  }\n  .skin-red-light .main-header .navbar .dropdown-menu li a:hover {\n    background: #d73925;\n  }\n}\n.skin-red-light .main-header .logo {\n  background-color: #dd4b39;\n  color: #ffffff;\n  border-bottom: 0 solid transparent;\n}\n.skin-red-light .main-header .logo:hover {\n  background-color: #dc4735;\n}\n.skin-red-light .main-header li.user-header {\n  background-color: #dd4b39;\n}\n.skin-red-light .content-header {\n  background: transparent;\n}\n.skin-red-light .wrapper,\n.skin-red-light .main-sidebar,\n.skin-red-light .left-side {\n  background-color: #f9fafc;\n}\n.skin-red-light .main-sidebar {\n  border-right: 1px solid #d2d6de;\n}\n.skin-red-light .user-panel > .info,\n.skin-red-light .user-panel > .info > a {\n  color: #444444;\n}\n.skin-red-light .sidebar-menu > li {\n  -webkit-transition: border-left-color 0.3s ease;\n  -o-transition: border-left-color 0.3s ease;\n  transition: border-left-color 0.3s ease;\n}\n.skin-red-light .sidebar-menu > li.header {\n  color: #848484;\n  background: #f9fafc;\n}\n.skin-red-light .sidebar-menu > li > a {\n  border-left: 3px solid transparent;\n  font-weight: 600;\n}\n.skin-red-light .sidebar-menu > li:hover > a,\n.skin-red-light .sidebar-menu > li.active > a {\n  color: #000000;\n  background: #f4f4f5;\n}\n.skin-red-light .sidebar-menu > li.active {\n  border-left-color: #dd4b39;\n}\n.skin-red-light .sidebar-menu > li.active > a {\n  font-weight: 600;\n}\n.skin-red-light .sidebar-menu > li > .treeview-menu {\n  background: #f4f4f5;\n}\n.skin-red-light .sidebar a {\n  color: #444444;\n}\n.skin-red-light .sidebar a:hover {\n  text-decoration: none;\n}\n.skin-red-light .sidebar-menu .treeview-menu > li > a {\n  color: #777777;\n}\n.skin-red-light .sidebar-menu .treeview-menu > li.active > a,\n.skin-red-light .sidebar-menu .treeview-menu > li > a:hover {\n  color: #000000;\n}\n.skin-red-light .sidebar-menu .treeview-menu > li.active > a {\n  font-weight: 600;\n}\n.skin-red-light .sidebar-form {\n  border-radius: 3px;\n  border: 1px solid #d2d6de;\n  margin: 10px 10px;\n}\n.skin-red-light .sidebar-form input[type=\"text\"],\n.skin-red-light .sidebar-form .btn {\n  box-shadow: none;\n  background-color: #fff;\n  border: 1px solid transparent;\n  height: 35px;\n}\n.skin-red-light .sidebar-form input[type=\"text\"] {\n  color: #666;\n  border-top-left-radius: 2px;\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 2px;\n}\n.skin-red-light .sidebar-form input[type=\"text\"]:focus,\n.skin-red-light .sidebar-form input[type=\"text\"]:focus + .input-group-btn .btn {\n  background-color: #fff;\n  color: #666;\n}\n.skin-red-light .sidebar-form input[type=\"text\"]:focus + .input-group-btn .btn {\n  border-left-color: #fff;\n}\n.skin-red-light .sidebar-form .btn {\n  color: #999;\n  border-top-left-radius: 0;\n  border-top-right-radius: 2px;\n  border-bottom-right-radius: 2px;\n  border-bottom-left-radius: 0;\n}\n@media (min-width: 768px) {\n  .skin-red-light.sidebar-mini.sidebar-collapse .sidebar-menu > li > .treeview-menu {\n    border-left: 1px solid #d2d6de;\n  }\n}\n/*\n * Skin: Yellow\n * ------------\n */\n.skin-yellow .main-header .navbar {\n  background-color: #f39c12;\n}\n.skin-yellow .main-header .navbar .nav > li > a {\n  color: #ffffff;\n}\n.skin-yellow .main-header .navbar .nav > li > a:hover,\n.skin-yellow .main-header .navbar .nav > li > a:active,\n.skin-yellow .main-header .navbar .nav > li > a:focus,\n.skin-yellow .main-header .navbar .nav .open > a,\n.skin-yellow .main-header .navbar .nav .open > a:hover,\n.skin-yellow .main-header .navbar .nav .open > a:focus,\n.skin-yellow .main-header .navbar .nav > .active > a {\n  background: rgba(0, 0, 0, 0.1);\n  color: #f6f6f6;\n}\n.skin-yellow .main-header .navbar .sidebar-toggle {\n  color: #ffffff;\n}\n.skin-yellow .main-header .navbar .sidebar-toggle:hover {\n  color: #f6f6f6;\n  background: rgba(0, 0, 0, 0.1);\n}\n.skin-yellow .main-header .navbar .sidebar-toggle {\n  color: #fff;\n}\n.skin-yellow .main-header .navbar .sidebar-toggle:hover {\n  background-color: #e08e0b;\n}\n@media (max-width: 767px) {\n  .skin-yellow .main-header .navbar .dropdown-menu li.divider {\n    background-color: rgba(255, 255, 255, 0.1);\n  }\n  .skin-yellow .main-header .navbar .dropdown-menu li a {\n    color: #fff;\n  }\n  .skin-yellow .main-header .navbar .dropdown-menu li a:hover {\n    background: #e08e0b;\n  }\n}\n.skin-yellow .main-header .logo {\n  background-color: #e08e0b;\n  color: #ffffff;\n  border-bottom: 0 solid transparent;\n}\n.skin-yellow .main-header .logo:hover {\n  background-color: #db8b0b;\n}\n.skin-yellow .main-header li.user-header {\n  background-color: #f39c12;\n}\n.skin-yellow .content-header {\n  background: transparent;\n}\n.skin-yellow .wrapper,\n.skin-yellow .main-sidebar,\n.skin-yellow .left-side {\n  background-color: #222d32;\n}\n.skin-yellow .user-panel > .info,\n.skin-yellow .user-panel > .info > a {\n  color: #fff;\n}\n.skin-yellow .sidebar-menu > li.header {\n  color: #4b646f;\n  background: #1a2226;\n}\n.skin-yellow .sidebar-menu > li > a {\n  border-left: 3px solid transparent;\n}\n.skin-yellow .sidebar-menu > li:hover > a,\n.skin-yellow .sidebar-menu > li.active > a,\n.skin-yellow .sidebar-menu > li.menu-open > a {\n  color: #ffffff;\n  background: #1e282c;\n}\n.skin-yellow .sidebar-menu > li.active > a {\n  border-left-color: #f39c12;\n}\n.skin-yellow .sidebar-menu > li > .treeview-menu {\n  margin: 0 1px;\n  background: #2c3b41;\n}\n.skin-yellow .sidebar a {\n  color: #b8c7ce;\n}\n.skin-yellow .sidebar a:hover {\n  text-decoration: none;\n}\n.skin-yellow .sidebar-menu .treeview-menu > li > a {\n  color: #8aa4af;\n}\n.skin-yellow .sidebar-menu .treeview-menu > li.active > a,\n.skin-yellow .sidebar-menu .treeview-menu > li > a:hover {\n  color: #ffffff;\n}\n.skin-yellow .sidebar-form {\n  border-radius: 3px;\n  border: 1px solid #374850;\n  margin: 10px 10px;\n}\n.skin-yellow .sidebar-form input[type=\"text\"],\n.skin-yellow .sidebar-form .btn {\n  box-shadow: none;\n  background-color: #374850;\n  border: 1px solid transparent;\n  height: 35px;\n}\n.skin-yellow .sidebar-form input[type=\"text\"] {\n  color: #666;\n  border-top-left-radius: 2px;\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 2px;\n}\n.skin-yellow .sidebar-form input[type=\"text\"]:focus,\n.skin-yellow .sidebar-form input[type=\"text\"]:focus + .input-group-btn .btn {\n  background-color: #fff;\n  color: #666;\n}\n.skin-yellow .sidebar-form input[type=\"text\"]:focus + .input-group-btn .btn {\n  border-left-color: #fff;\n}\n.skin-yellow .sidebar-form .btn {\n  color: #999;\n  border-top-left-radius: 0;\n  border-top-right-radius: 2px;\n  border-bottom-right-radius: 2px;\n  border-bottom-left-radius: 0;\n}\n/*\n * Skin: Yellow\n * ------------\n */\n.skin-yellow-light .main-header .navbar {\n  background-color: #f39c12;\n}\n.skin-yellow-light .main-header .navbar .nav > li > a {\n  color: #ffffff;\n}\n.skin-yellow-light .main-header .navbar .nav > li > a:hover,\n.skin-yellow-light .main-header .navbar .nav > li > a:active,\n.skin-yellow-light .main-header .navbar .nav > li > a:focus,\n.skin-yellow-light .main-header .navbar .nav .open > a,\n.skin-yellow-light .main-header .navbar .nav .open > a:hover,\n.skin-yellow-light .main-header .navbar .nav .open > a:focus,\n.skin-yellow-light .main-header .navbar .nav > .active > a {\n  background: rgba(0, 0, 0, 0.1);\n  color: #f6f6f6;\n}\n.skin-yellow-light .main-header .navbar .sidebar-toggle {\n  color: #ffffff;\n}\n.skin-yellow-light .main-header .navbar .sidebar-toggle:hover {\n  color: #f6f6f6;\n  background: rgba(0, 0, 0, 0.1);\n}\n.skin-yellow-light .main-header .navbar .sidebar-toggle {\n  color: #fff;\n}\n.skin-yellow-light .main-header .navbar .sidebar-toggle:hover {\n  background-color: #e08e0b;\n}\n@media (max-width: 767px) {\n  .skin-yellow-light .main-header .navbar .dropdown-menu li.divider {\n    background-color: rgba(255, 255, 255, 0.1);\n  }\n  .skin-yellow-light .main-header .navbar .dropdown-menu li a {\n    color: #fff;\n  }\n  .skin-yellow-light .main-header .navbar .dropdown-menu li a:hover {\n    background: #e08e0b;\n  }\n}\n.skin-yellow-light .main-header .logo {\n  background-color: #f39c12;\n  color: #ffffff;\n  border-bottom: 0 solid transparent;\n}\n.skin-yellow-light .main-header .logo:hover {\n  background-color: #f39a0d;\n}\n.skin-yellow-light .main-header li.user-header {\n  background-color: #f39c12;\n}\n.skin-yellow-light .content-header {\n  background: transparent;\n}\n.skin-yellow-light .wrapper,\n.skin-yellow-light .main-sidebar,\n.skin-yellow-light .left-side {\n  background-color: #f9fafc;\n}\n.skin-yellow-light .main-sidebar {\n  border-right: 1px solid #d2d6de;\n}\n.skin-yellow-light .user-panel > .info,\n.skin-yellow-light .user-panel > .info > a {\n  color: #444444;\n}\n.skin-yellow-light .sidebar-menu > li {\n  -webkit-transition: border-left-color 0.3s ease;\n  -o-transition: border-left-color 0.3s ease;\n  transition: border-left-color 0.3s ease;\n}\n.skin-yellow-light .sidebar-menu > li.header {\n  color: #848484;\n  background: #f9fafc;\n}\n.skin-yellow-light .sidebar-menu > li > a {\n  border-left: 3px solid transparent;\n  font-weight: 600;\n}\n.skin-yellow-light .sidebar-menu > li:hover > a,\n.skin-yellow-light .sidebar-menu > li.active > a {\n  color: #000000;\n  background: #f4f4f5;\n}\n.skin-yellow-light .sidebar-menu > li.active {\n  border-left-color: #f39c12;\n}\n.skin-yellow-light .sidebar-menu > li.active > a {\n  font-weight: 600;\n}\n.skin-yellow-light .sidebar-menu > li > .treeview-menu {\n  background: #f4f4f5;\n}\n.skin-yellow-light .sidebar a {\n  color: #444444;\n}\n.skin-yellow-light .sidebar a:hover {\n  text-decoration: none;\n}\n.skin-yellow-light .sidebar-menu .treeview-menu > li > a {\n  color: #777777;\n}\n.skin-yellow-light .sidebar-menu .treeview-menu > li.active > a,\n.skin-yellow-light .sidebar-menu .treeview-menu > li > a:hover {\n  color: #000000;\n}\n.skin-yellow-light .sidebar-menu .treeview-menu > li.active > a {\n  font-weight: 600;\n}\n.skin-yellow-light .sidebar-form {\n  border-radius: 3px;\n  border: 1px solid #d2d6de;\n  margin: 10px 10px;\n}\n.skin-yellow-light .sidebar-form input[type=\"text\"],\n.skin-yellow-light .sidebar-form .btn {\n  box-shadow: none;\n  background-color: #fff;\n  border: 1px solid transparent;\n  height: 35px;\n}\n.skin-yellow-light .sidebar-form input[type=\"text\"] {\n  color: #666;\n  border-top-left-radius: 2px;\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 2px;\n}\n.skin-yellow-light .sidebar-form input[type=\"text\"]:focus,\n.skin-yellow-light .sidebar-form input[type=\"text\"]:focus + .input-group-btn .btn {\n  background-color: #fff;\n  color: #666;\n}\n.skin-yellow-light .sidebar-form input[type=\"text\"]:focus + .input-group-btn .btn {\n  border-left-color: #fff;\n}\n.skin-yellow-light .sidebar-form .btn {\n  color: #999;\n  border-top-left-radius: 0;\n  border-top-right-radius: 2px;\n  border-bottom-right-radius: 2px;\n  border-bottom-left-radius: 0;\n}\n@media (min-width: 768px) {\n  .skin-yellow-light.sidebar-mini.sidebar-collapse .sidebar-menu > li > .treeview-menu {\n    border-left: 1px solid #d2d6de;\n  }\n}\n/*\n * Skin: Purple\n * ------------\n */\n.skin-purple .main-header .navbar {\n  background-color: #605ca8;\n}\n.skin-purple .main-header .navbar .nav > li > a {\n  color: #ffffff;\n}\n.skin-purple .main-header .navbar .nav > li > a:hover,\n.skin-purple .main-header .navbar .nav > li > a:active,\n.skin-purple .main-header .navbar .nav > li > a:focus,\n.skin-purple .main-header .navbar .nav .open > a,\n.skin-purple .main-header .navbar .nav .open > a:hover,\n.skin-purple .main-header .navbar .nav .open > a:focus,\n.skin-purple .main-header .navbar .nav > .active > a {\n  background: rgba(0, 0, 0, 0.1);\n  color: #f6f6f6;\n}\n.skin-purple .main-header .navbar .sidebar-toggle {\n  color: #ffffff;\n}\n.skin-purple .main-header .navbar .sidebar-toggle:hover {\n  color: #f6f6f6;\n  background: rgba(0, 0, 0, 0.1);\n}\n.skin-purple .main-header .navbar .sidebar-toggle {\n  color: #fff;\n}\n.skin-purple .main-header .navbar .sidebar-toggle:hover {\n  background-color: #555299;\n}\n@media (max-width: 767px) {\n  .skin-purple .main-header .navbar .dropdown-menu li.divider {\n    background-color: rgba(255, 255, 255, 0.1);\n  }\n  .skin-purple .main-header .navbar .dropdown-menu li a {\n    color: #fff;\n  }\n  .skin-purple .main-header .navbar .dropdown-menu li a:hover {\n    background: #555299;\n  }\n}\n.skin-purple .main-header .logo {\n  background-color: #555299;\n  color: #ffffff;\n  border-bottom: 0 solid transparent;\n}\n.skin-purple .main-header .logo:hover {\n  background-color: #545096;\n}\n.skin-purple .main-header li.user-header {\n  background-color: #605ca8;\n}\n.skin-purple .content-header {\n  background: transparent;\n}\n.skin-purple .wrapper,\n.skin-purple .main-sidebar,\n.skin-purple .left-side {\n  background-color: #222d32;\n}\n.skin-purple .user-panel > .info,\n.skin-purple .user-panel > .info > a {\n  color: #fff;\n}\n.skin-purple .sidebar-menu > li.header {\n  color: #4b646f;\n  background: #1a2226;\n}\n.skin-purple .sidebar-menu > li > a {\n  border-left: 3px solid transparent;\n}\n.skin-purple .sidebar-menu > li:hover > a,\n.skin-purple .sidebar-menu > li.active > a,\n.skin-purple .sidebar-menu > li.menu-open > a {\n  color: #ffffff;\n  background: #1e282c;\n}\n.skin-purple .sidebar-menu > li.active > a {\n  border-left-color: #605ca8;\n}\n.skin-purple .sidebar-menu > li > .treeview-menu {\n  margin: 0 1px;\n  background: #2c3b41;\n}\n.skin-purple .sidebar a {\n  color: #b8c7ce;\n}\n.skin-purple .sidebar a:hover {\n  text-decoration: none;\n}\n.skin-purple .sidebar-menu .treeview-menu > li > a {\n  color: #8aa4af;\n}\n.skin-purple .sidebar-menu .treeview-menu > li.active > a,\n.skin-purple .sidebar-menu .treeview-menu > li > a:hover {\n  color: #ffffff;\n}\n.skin-purple .sidebar-form {\n  border-radius: 3px;\n  border: 1px solid #374850;\n  margin: 10px 10px;\n}\n.skin-purple .sidebar-form input[type=\"text\"],\n.skin-purple .sidebar-form .btn {\n  box-shadow: none;\n  background-color: #374850;\n  border: 1px solid transparent;\n  height: 35px;\n}\n.skin-purple .sidebar-form input[type=\"text\"] {\n  color: #666;\n  border-top-left-radius: 2px;\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 2px;\n}\n.skin-purple .sidebar-form input[type=\"text\"]:focus,\n.skin-purple .sidebar-form input[type=\"text\"]:focus + .input-group-btn .btn {\n  background-color: #fff;\n  color: #666;\n}\n.skin-purple .sidebar-form input[type=\"text\"]:focus + .input-group-btn .btn {\n  border-left-color: #fff;\n}\n.skin-purple .sidebar-form .btn {\n  color: #999;\n  border-top-left-radius: 0;\n  border-top-right-radius: 2px;\n  border-bottom-right-radius: 2px;\n  border-bottom-left-radius: 0;\n}\n/*\n * Skin: Purple\n * ------------\n */\n.skin-purple-light .main-header .navbar {\n  background-color: #605ca8;\n}\n.skin-purple-light .main-header .navbar .nav > li > a {\n  color: #ffffff;\n}\n.skin-purple-light .main-header .navbar .nav > li > a:hover,\n.skin-purple-light .main-header .navbar .nav > li > a:active,\n.skin-purple-light .main-header .navbar .nav > li > a:focus,\n.skin-purple-light .main-header .navbar .nav .open > a,\n.skin-purple-light .main-header .navbar .nav .open > a:hover,\n.skin-purple-light .main-header .navbar .nav .open > a:focus,\n.skin-purple-light .main-header .navbar .nav > .active > a {\n  background: rgba(0, 0, 0, 0.1);\n  color: #f6f6f6;\n}\n.skin-purple-light .main-header .navbar .sidebar-toggle {\n  color: #ffffff;\n}\n.skin-purple-light .main-header .navbar .sidebar-toggle:hover {\n  color: #f6f6f6;\n  background: rgba(0, 0, 0, 0.1);\n}\n.skin-purple-light .main-header .navbar .sidebar-toggle {\n  color: #fff;\n}\n.skin-purple-light .main-header .navbar .sidebar-toggle:hover {\n  background-color: #555299;\n}\n@media (max-width: 767px) {\n  .skin-purple-light .main-header .navbar .dropdown-menu li.divider {\n    background-color: rgba(255, 255, 255, 0.1);\n  }\n  .skin-purple-light .main-header .navbar .dropdown-menu li a {\n    color: #fff;\n  }\n  .skin-purple-light .main-header .navbar .dropdown-menu li a:hover {\n    background: #555299;\n  }\n}\n.skin-purple-light .main-header .logo {\n  background-color: #605ca8;\n  color: #ffffff;\n  border-bottom: 0 solid transparent;\n}\n.skin-purple-light .main-header .logo:hover {\n  background-color: #5d59a6;\n}\n.skin-purple-light .main-header li.user-header {\n  background-color: #605ca8;\n}\n.skin-purple-light .content-header {\n  background: transparent;\n}\n.skin-purple-light .wrapper,\n.skin-purple-light .main-sidebar,\n.skin-purple-light .left-side {\n  background-color: #f9fafc;\n}\n.skin-purple-light .main-sidebar {\n  border-right: 1px solid #d2d6de;\n}\n.skin-purple-light .user-panel > .info,\n.skin-purple-light .user-panel > .info > a {\n  color: #444444;\n}\n.skin-purple-light .sidebar-menu > li {\n  -webkit-transition: border-left-color 0.3s ease;\n  -o-transition: border-left-color 0.3s ease;\n  transition: border-left-color 0.3s ease;\n}\n.skin-purple-light .sidebar-menu > li.header {\n  color: #848484;\n  background: #f9fafc;\n}\n.skin-purple-light .sidebar-menu > li > a {\n  border-left: 3px solid transparent;\n  font-weight: 600;\n}\n.skin-purple-light .sidebar-menu > li:hover > a,\n.skin-purple-light .sidebar-menu > li.active > a {\n  color: #000000;\n  background: #f4f4f5;\n}\n.skin-purple-light .sidebar-menu > li.active {\n  border-left-color: #605ca8;\n}\n.skin-purple-light .sidebar-menu > li.active > a {\n  font-weight: 600;\n}\n.skin-purple-light .sidebar-menu > li > .treeview-menu {\n  background: #f4f4f5;\n}\n.skin-purple-light .sidebar a {\n  color: #444444;\n}\n.skin-purple-light .sidebar a:hover {\n  text-decoration: none;\n}\n.skin-purple-light .sidebar-menu .treeview-menu > li > a {\n  color: #777777;\n}\n.skin-purple-light .sidebar-menu .treeview-menu > li.active > a,\n.skin-purple-light .sidebar-menu .treeview-menu > li > a:hover {\n  color: #000000;\n}\n.skin-purple-light .sidebar-menu .treeview-menu > li.active > a {\n  font-weight: 600;\n}\n.skin-purple-light .sidebar-form {\n  border-radius: 3px;\n  border: 1px solid #d2d6de;\n  margin: 10px 10px;\n}\n.skin-purple-light .sidebar-form input[type=\"text\"],\n.skin-purple-light .sidebar-form .btn {\n  box-shadow: none;\n  background-color: #fff;\n  border: 1px solid transparent;\n  height: 35px;\n}\n.skin-purple-light .sidebar-form input[type=\"text\"] {\n  color: #666;\n  border-top-left-radius: 2px;\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 2px;\n}\n.skin-purple-light .sidebar-form input[type=\"text\"]:focus,\n.skin-purple-light .sidebar-form input[type=\"text\"]:focus + .input-group-btn .btn {\n  background-color: #fff;\n  color: #666;\n}\n.skin-purple-light .sidebar-form input[type=\"text\"]:focus + .input-group-btn .btn {\n  border-left-color: #fff;\n}\n.skin-purple-light .sidebar-form .btn {\n  color: #999;\n  border-top-left-radius: 0;\n  border-top-right-radius: 2px;\n  border-bottom-right-radius: 2px;\n  border-bottom-left-radius: 0;\n}\n@media (min-width: 768px) {\n  .skin-purple-light.sidebar-mini.sidebar-collapse .sidebar-menu > li > .treeview-menu {\n    border-left: 1px solid #d2d6de;\n  }\n}\n"
  },
  {
    "path": "src/main/resources/static/css/style.css",
    "content": "/**\n    皮肤颜色附加\n */\n.skin-blue .box.box-primary {\n    border-top-color: #fff;\n}\n\n.skin-blue .nav-tabs-custom > .nav-tabs > li.active {\n    border-top-color: #fff;\n}\n\n.skin-blue-light .box.box-primary {\n    border-top-color: #fff;\n}\n\n.skin-blue-light .nav-tabs-custom > .nav-tabs > li.active {\n    border-top-color: #fff;\n}\n\n.skin-black .box.box-primary {\n    border-top-color: #fff;\n}\n\n.skin-black .nav-tabs-custom > .nav-tabs > li.active {\n    border-top-color: #fff;\n}\n\n.skin-black-light .box.box-primary {\n    border-top-color: #fff;\n}\n\n.skin-black-light .nav-tabs-custom > .nav-tabs > li.active {\n    border-top-color: #fff;\n}\n\n.skin-green .box.box-primary {\n    border-top-color: #fff;\n}\n\n.skin-green .nav-tabs-custom > .nav-tabs > li.active {\n    border-top-color: #fff;\n}\n\n.skin-green-light .box.box-primary {\n    border-top-color: #fff;\n}\n\n.skin-green-light .nav-tabs-custom > .nav-tabs > li.active {\n    border-top-color: #fff;\n}\n\n.skin-purple .box.box-primary {\n    border-top-color: #fff;\n}\n\n.skin-purple .nav-tabs-custom > .nav-tabs > li.active {\n    border-top-color: #fff;\n}\n\n.skin-purple-light .box.box-primary {\n    border-top-color: #fff;\n}\n\n.skin-purple-light .nav-tabs-custom > .nav-tabs > li.active {\n    border-top-color: #fff;\n}\n\n.skin-red .box.box-primary {\n    border-top-color: #fff;\n}\n\n.skin-red .nav-tabs-custom > .nav-tabs > li.active {\n    border-top-color: #fff;\n}\n\n.skin-red-light .box.box-primary {\n    border-top-color: #fff;\n}\n\n.skin-red-light .nav-tabs-custom > .nav-tabs > li.active {\n    border-top-color: #fff;\n}\n\n.skin-yellow .box.box-primary {\n    border-top-color: #fff;\n}\n\n.skin-yellow .nav-tabs-custom > .nav-tabs > li.active {\n    border-top-color: #fff;\n}\n\n.skin-yellow-light .box.box-primary {\n    border-top-color: #fff;\n}\n\n.skin-yellow-light .nav-tabs-custom > .nav-tabs > li.active {\n    border-top-color: #fff;\n}\n\n.layout-boxed {\n    background: url('../images/boxed-bg.jpg') repeat fixed;\n}\n\n::-webkit-scrollbar {\n    width: 2px;\n    height: 2px;\n    background-color: #eee;\n}\n\n::-webkit-scrollbar-thumb {\n    background-color: #d0afaf;\n}\n\n::-webkit-scrollbar-track {\n    background-color: #eee;\n}\n.post-cate-ul {\n    padding: 0;margin: 0px;list-style: none\n}\n.post-cate-li {\n    padding: 0;margin: 2px 0px;list-style: none\n}\n.clear {\n    clear: both;\n    display: block;\n}\n.level2 {\n    margin-left: 18px;\n}\n.level3 {\n    margin-left: 36px;\n}\n.level4 {\n     margin-left: 54px;\n}\n.level4 {\n    margin-left: 54px;\n}\n.disabled-input {\n    border: 0; background: none;\n}\n.img-circle {\n    background-color: #fff;\n}\n.user-image {\n    background-color: #fff;\n}\n.permission-level-2 {\n    padding-left: 30px !important;\n}\n\n.permission-level-3 {\n    padding-left: 60px !important;\n}\n\n.permission-level-4 {\n    padding-left: 90px !important;\n}\n\n.permission-level-4 {\n    padding-left: 120px !important;\n}\n.menu-level-2 {\n    padding-left: 30px !important;\n}\n\n.menu-level-3 {\n    padding-left: 60px !important;\n}\n\n.menu-level-4 {\n    padding-left: 90px !important;\n}\n\n.menu-level-4 {\n    padding-left: 120px !important;\n}\n#btnNew {\n    margin-left: 4px;\n    padding: 3px 6px;\n    position: relative;\n    top: -4px;\n    border: 1px solid #ccc;\n    border-radius: 2px;\n    background: #fff;\n    text-shadow: none;\n    font-weight: 600;\n    font-size: 12px;\n    line-height: normal;\n    color: #3c8dbc;\n    cursor: pointer;\n    transition: all .2s ease-in-out\n}\n\n#btnNew:hover {\n    background: #3c8dbc;\n    color: #fff\n}\n.font-success {\n    color: #087623;\n}\n.font-warning {\n    color: #8a3a12;\n"
  },
  {
    "path": "src/main/resources/static/front/css/pay.css",
    "content": "html {\n    font-size: 62.5%;\n    font-family: \"Microsoft YaHei\";\n}\n\nbody, div, dl, dt, dd, ul, ol, li, h1, h2, h3, h4, h5, h6, pre, code, form, fieldset, legend, input, button, textarea, p, blockquote, th, td, hr {\n    margin: 0;\n    padding: 0px 2px;\n}\n\nbody {\n    line-height: 1.333;\n    font-size: 12px\n}\n\nh1, h2, h3, h4, h5, h6 {\n    font-size: 100%;\n    font-family: \"Microsoft YaHei\";\n}\n\ninput, textarea, select, button {\n    font-size: 12px;\n    font-weight: normal\n}\n\n.btn-small {\n    width: 118px;\n    height: 28px;\n    font-size: 12px;\n    line-height: 28px;\n}\n.btn {\n    display: inline-block;\n    *zoom: 1;\n    *display: inline;\n    width: 158px;\n    height: 38px;\n    padding: 0;\n    margin: 0;\n    border: 1px solid #b0b0b0;\n    font-size: 14px;\n    line-height: 38px;\n    text-align: center;\n    color: #b0b0b0;\n    cursor: pointer;\n    -webkit-transition: all .4s;\n    transition: all .4s;\n}\n\n.btn-success {\n    background: green;\n    border-color: green;\n    color: #fff;\n}\n\ntable {\n    border-collapse: collapse;\n    border-spacing: 0\n}\n\naddress, caption, cite, code, dfn, em, th, var {\n    font-style: normal;\n    font-weight: normal\n}\n\nli {\n    list-style: none\n}\n\ncaption, th {\n    text-align: left\n}\n\nq:before, q:after {\n    content: ''\n}\n\nabbr, acronym {\n    border: 0;\n    font-variant: normal\n}\n\nsup {\n    vertical-align: text-top\n}\n\nsub {\n    vertical-align: text-bottom\n}\n\nfieldset, img, a img, iframe {\n    border-width: 0;\n    border-style: none\n}\n\nimg {\n    -ms-interpolation-mode: bicubic\n}\n\ntextarea {\n    overflow-y: auto\n}\n\nlegend {\n    color: #000\n}\n\na:link, a:visited {\n    text-decoration: none\n}\n\nhr {\n    height: 0\n}\n\nlabel {\n    cursor: pointer\n}\n\na {\n    color: #1baeae\n}\n\na:hover {\n    color: #1baeae;\n    text-decoration: none\n}\n\na:focus {\n    outline: none\n}\n\n.mod-title {\n    height: 60px;\n    line-height: 60px;\n    text-align: center;\n    border-bottom: 1px solid #ddd;\n    background: #fff\n}\n\n.ico_log {\n    display: inline-block;\n    width: 130px;\n    height: 38px;\n    vertical-align: middle;\n    margin-right: 7px\n}\n\n.icon-ali-pay {\n    background: url(\"../image/pay/alipay_logo.jpg\") no-repeat;\n    background-size: cover;\n}\n\n.icon-wx-pay {\n    background: url(\"../image/pay/wx_logo.jpg\") no-repeat;\n    background-size: cover;\n}\n\n.mod-title .text {\n    font-size: 20px;\n    color: #333;\n    font-weight: normal;\n    vertical-align: middle\n}\n\n.mod-ct {\n    min-width: 300px;\n    max-width: 640px;\n    margin: 0 auto;\n    margin-top: 15px;\n    margin-bottom: 15px;\n    padding-bottom: 10px;\n    background: #fff url(\"../image/pay/wave-repeat.png\") top center repeat-x;\n    text-align: center;\n    color: #333;\n    border: 1px solid #e5e5e5;\n    border-top: none\n}\n\n.mod-ct .order {\n    font-size: 20px;\n    padding-top: 10px\n}\n\n.mod-ct .amount {\n    font-size: 42px;\n    margin-top: 10px\n}\n\n.mod-ct .qr-image {\n    margin-top: 30px\n}\n\n.mod-ct .qr-image img {\n    width: 230px;\n    height: 230px\n}\n\n.mod-ct .detail {\n    margin-top: 10px;\n    padding-top: 0px;\n    padding-bottom: 10px;\n\n}\n\n.mod-ct .detail .detail-ct {\n    display: none;\n    font-size: 12px;\n    text-align: right;\n    line-height: 28px\n}\n\n.mod-ct .detail .detail-ct dt {\n    float: left\n}\n\n.mod-ct .detail-open {\n    border-top: 1px solid #e5e5e5\n}\n\n.mod-ct .detail .arrow {\n    padding: 6px 34px;\n    border: 1px solid #e5e5e5\n}\n\n.mod-ct .detail-open .detail-ct {\n    display: block\n}\n\n.mod-ct .tip {\n    margin-top: 20px;\n    border-top: 1px dashed #e5e5e5;\n    padding: 10px 0;\n    position: relative\n}\n\n.mod-ct .tip .ico-scan-wx {\n    display: inline-block;\n    width: 56px;\n    height: 55px;\n    background: url(\"../image/pay/scan-wx.png\") no-repeat;\n    vertical-align: middle;\n    *display: inline;\n    *zoom: 1\n}\n\n.mod-ct .tip .ico-scan-ali {\n    display: inline-block;\n    width: 56px;\n    height: 55px;\n    background: url(\"../image/pay/scan-alipay.png\") no-repeat;\n    vertical-align: middle;\n    *display: inline;\n    *zoom: 1\n}\n\n.mod-ct .tip .tip-text {\n    display: inline-block;\n    vertical-align: middle;\n    text-align: left;\n    margin-left: 23px;\n    font-size: 16px;\n    line-height: 28px;\n    *display: inline;\n    *zoom: 1\n}\n\n.mod-ct .tip .dec-left {\n    background-position: 0 -55px;\n    left: -136px\n}\n\n.mod-ct .tip .dec-right {\n    background-position: -25px -55px;\n    right: -136px\n}\n\n.foot {\n    text-align: center;\n    margin: 30px auto;\n    color: #888888;\n    font-size: 12px;\n    line-height: 20px;\n    font-family: \"Microsoft YaHei\";\n}\n\n.copyRight {\n    text-align: center;\n    color: #888888;\n    margin-bottom: 1px;\n}\n\n.copyRight a {\n    color: #888888;\n}\n\nh1 {\n    font-family: \"Microsoft YaHei\";\n    font-size: 15px;\n    margin: 5px 0;\n    padding-bottom: 2px;\n    letter-spacing: 2px;\n}\n\n.time-item strong {\n    background: #1baeae;\n    color: #fff;\n    line-height: 25px;\n    font-size: 15px;\n    font-family: \"Microsoft YaHei\";\n    padding: 0 10px;\n    margin-right: 10px;\n    border-radius: 5px;\n    box-shadow: 1px 1px 3px rgba(0, 0, 0, 0.2);\n}\n\n.item-title {\n    background: none;\n    line-height: 25px;\n    font-size: 24px;\n    padding: 0 10px;\n    float: left;\n"
  },
  {
    "path": "src/main/resources/static/front/css/style.css",
    "content": "/*\nTemplate Name: Manland - Bootstrap Light Real Estate HTML Template\nVersion: 1.0\n*/\n/*\n\t-- body\n\t-- Extra\n\t-- Navbar\n\t-- Slider\n\t-- Slider Form\n\t-- Card\n\t-- Agents Card\n\t-- Sidebar Card\n\t-- Grid/list Filters\n\t-- Properties List\n\t-- Blog\n\t-- Property Single\n\t-- Add Property\n\t-- My Account\n\t-- Property Single Gallery\n\t-- Footer\n\t-- Mobile Media\n*/\n\n@import url('https://fonts.googleapis.com/css2?family=Poppins:wght@100;200;300;400;500;600;700;800;900&display=swap');\n/* Body */\nbody {\n    background-color: #f0f2f5;\n    font-size: 13px;\n\tfont-family: 'Poppins', sans-serif;\n    line-height: 25px;\n\tcolor: #34495e;\n}\nh1, h2, h3, h4, h5, h6 {\n\tcolor: #000000;\n}\np {\n    font-size: 13px;\n    line-height: 22px;\n\tcolor:#34495e;\n}\nimg {\n    height: auto;\n    max-width: 100%;\n}\nul, ol {\n    list-style: outside none none;\n}\nul {\n    margin: 0;\n    padding: 0;\n}\nimg {\n    transform-style: preserve-3d;\n}\na {\n   transition: color 300ms ease 0s, background-color 300ms ease 0s;\n   text-decoration:none !important;\n   color:#34495e;\n}\na:hover {\n   transition: color 300ms ease 0s, background-color 300ms ease 0s;\n   color:#34495e;\n}\na, a:hover {\n    text-decoration: none;\n}\na:focus {\n    outline: medium none;\n    outline-offset: 0;\n}\n.hv-100{\n    height: 100vh;\n}\n/* Extra */\n.map {\n    border-radius: 8px;\n    overflow: hidden;\n    box-shadow: 0 1px 2px rgba(0, 0, 0, 0.2);\n}\n.badge {\n    border-radius: 8px;\n    font-size: 12px;\n    font-weight: 400;\n    box-shadow: 0 1px 2px rgba(0, 0, 0, 0.2);\n}\n.dropdown-item.active, .dropdown-item:active {\n    background-color: #2946f7;\n}\n.page-item.active .page-link {\n    background-color: #516af0;\n    border-color: #516af0;\n    color: #fff;\n    z-index: 1;\n}\n.page-link {\n    color: #516af0;\n    border: none !important;\n    box-shadow: 0 1px 2px rgba(0, 0, 0, 0.2);\n}\n.bg-dark {\n    background-color: #1b2a4e!important;\n}\n.box-shadow-none {\n    border: 7px solid #fff !important;\n    box-shadow: none !important;\n}\n\n.overlay{\n\tbackground: #ffffff none repeat scroll 0 0;\n    bottom: 0;\n    left: 0;\n    opacity: 0.8;\n    position: absolute;\n    right: 0;\n    top: 0;\n}\n\n\n.login-with-social .btn {\n    color: #fff;\n    font-size: 13px;\n    padding: 12px 0;\n    position: relative;\n\tfont-weight: 400;\n    text-transform: uppercase;\n}\n.btn-twitter {\n    background: #64ccf1 none repeat scroll 0 0;\n}\n.btn-google {\n    background: #df4930 none repeat scroll 0 0;\n}\n.btn-facebook {\n    background: #507cc0 none repeat scroll 0 0;\n}\n.login-with-social .btn .mdi {\n    font-size: 19px;\n    left: 18px;\n    position: absolute;\n    top: 8px;\n}\n.btn {\n    font-size: 13px;\n    padding: 12px 39px;\n    font-weight: bold;\n    border-radius: 8px;\n}\nb, strong {\n    font-weight: 500;\n}\n\n#content .card {\n    box-shadow: none;\n    margin: 0;\n    padding: 26px 0px 26px 26px;\n}\n#content .card-body, #content .card-footer {\n    padding: 16px 0;\n}\n#content .card-footer span {\n    font-size: 12px;\n}\n#content .card-footer {\n    padding-bottom:0px;\n}\n.map-slider-form {\n    background: #efefef none repeat scroll 0 0;\n    left: auto !important;\n    padding: 20px 0;\n    position: relative !important;\n    right: auto !important;\n}\n.slider-h-auto .carousel-item {\n    height: auto !important;\n}\n.padding-card .card-body {\n    padding: 35px;\n}\n.margin-auto {\n    margin: auto;\n}\n.no-radius {\n    border-radius: 0 !important;\n}\nlabel {\n    font-size: 12px;\n    font-weight: 500;\n    margin-bottom: 2px;\n}\n.form-control {\n    background-color: #f8f8f8;\n    border-color: #eeeeee;\n    font-size: 13px;\n}\n.select2-container--open .select2-dropdown--below {\n    border: medium none;\n    border-radius: 0;\n}\n.section-padding {\n    padding: 100px 0;\n}\n.text-success {\n    color: #516af0 !important;\n}\na.text-success:focus, a.text-success:hover {\n    color: #2946f7 !important;\n}\n.bg-primary{\n    background-color: #516af0 !important;\n}\n.btn-success, .btn-primary, .btn-outline-primary:hover {\n    background-color: #516af0;\n    border-color: #516af0;\n    color: #fff;\n}\n.btn-outline-primary {\n    color: #516af0;\n    border-color: #516af0;\n}\n.btn-success:hover, .btn-success:focus {\n    background-color: #2946f7;\n    border-color: #2946f7;\n    color: #fff;\n}\n.btn-success.disabled, .btn-success:disabled {\n    background-color: #2946f7;\n    border-color: #2946f7;\n    color: #fff;\n}\n.btn-outline-success {\n    background-color: transparent;\n    background-image: none;\n    border-color: #516af0;\n    color: #516af0;\n}\n.btn-outline-success:hover {\n    background-color: #2946f7;\n    border-color: #2946f7;\n    color: #fff;\n}\n.btn-outline-success.focus, .btn-outline-success:focus {\n    box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.5);\n}\n.btn-outline-success.disabled, .btn-outline-success:disabled {\n    background-color: transparent;\n    color: #2946f7;\n}\n.btn-link {\n    background-color: transparent;\n    color: #516af0;\n    font-weight: 400;\n}\n.demo-page .card.padding-card .card-body {\n    padding: 0;\n}\n.demo-page .card.padding-card .card-body h5 {\n    font-size: 15px;\n    padding: 4px 10px;\n}\n/* Navbar */\nnav.navbar {\n    background: #fff none repeat scroll 0 0 !important;\n    padding: 0;\n}\nnav.navbar .navbar-nav .nav-link {\n    padding: 28px 14px;\n    color: rgba(0,0,0,.8);\n}\n.logo img {\n    height: 33px;\n}\n.dropdown-menu {\n    border: medium none;\n    box-shadow: 0 1px 2px rgba(0, 0, 0, 0.2);\n    padding: 6px;\n    border-radius: 8px;\n}\n.dropdown-menu .dropdown-item {\n    font-size: 13px;\n    padding: 7px 20px;\n    border-radius: 8px;\n}\n.dropdown-item:focus, .dropdown-item:hover {\n    color: #ffffff;\n    text-decoration: none;\n    background-color: #5169f0;\n}\n.main-nav-right .btn {\n    padding: 7px 16px;\n    border: none;\n    border-radius: 50px;\n}\n.main-nav-right .list-inline-item {\n    margin: 0;\n}\n\n/* Slider */\n.site-slider {\n    position: relative;\n}\n.site-slider .carousel-item {\n  height: 500px;\n  min-height: 500px;\n  background: no-repeat center center scroll;\n  -webkit-background-size: cover;\n  -moz-background-size: cover;\n  -o-background-size: cover;\n  background-size: cover;\n}\n\n/* Slider Form */\n.slider-form {\n    left: 15%;\n    position: absolute;\n    right: 15%;\n    top: 35%;\n}\n.slider-form form {\n    border-radius: 5px;\n    overflow: hidden;\n    background: #fff;\n    box-shadow: 0 1px 2px rgba(0, 0, 0, 0.2);\n}\n.slider-form .input-group-addon {\n    line-height: 58px;\n    position: absolute;\n    text-align: center;\n    width: 41px;\n    z-index: 9;\n}\n.slider-form .input-group-addon .mdi {\n    font-size: 18px;\n}\n\n.slider-form .select2-selection {\n    border: medium none !important;\n    border-radius: 0  !important;\n    height: auto  !important;\n    padding: 15px 15px 15px 33px;\n}\n.slider-form .form-control {\n    border: medium none !important;\n    border-radius: 0  !important;\n    height: auto  !important;\n    padding: 19px 15px 19px 43px;\n}\n.slider-form  .select2-selection__arrow {\n    margin: 15px 12px 0;\n}\n.slider-form .btn {\n    font-size: 13px;\n    padding: 14px 8px;\n    border-radius: 8px !important;\n    border: 5px solid;\n}\n.inner-page-form .input-group{\n    padding: 1px;\n}\n\n/* Card */\n.card {\n    border: medium none;\n    box-shadow: 0 1px 2px rgba(0, 0, 0, 0.2);\n    margin-bottom: 32px;\n    border-radius: 8px;\n    overflow: hidden;\n}\n.card-list .badge {\n    right: 20px;\n    padding: 7px 10px;\n    position: absolute;\n    top: 20px;\n    z-index: 9;\n}\n\n.card-list .card-body .card-title {\n    font-size: 18px;\n}\n.card-list .card-body .card-subtitle {\n    font-size: 14px;\n    font-size: 13px;\n    font-weight: 400;\n    color: #929cab;\n}\n.card-list .card-body h2 small {\n    font-size: 19px;\n}\n.card-list .card-footer span {\n    margin: 0 16px 0 0;\n}\n\n.card-footer {\n    background: #fff none repeat scroll 0 0;\n    border-color: #eeeeee;\n}\n\n.card-overlay {\n    height: 380px;\n    overflow: hidden;\n    position: relative;\n}\n.card-overlay .card-img {\n    height: 380px;\n    object-fit: cover;\n    width: 100%;\n}\n.card-overlay .card-img-overlay {\n    left: 0;\n    margin: auto;\n    right: 0;\n    text-align: center;\n    top: auto;\n}\n.review-block-rate .mdi {\n    color: #ffc107;\n    font-size: 19px;\n    letter-spacing: -3px;\n}\n\n.review-block-rate {\n    margin: 15px 0px;\n}\n\n.review-block-rate .badge-pill {\n    vertical-align: text-bottom;\n}\n\n/* Agents Card */\n.agents-card {\n    padding-bottom: 15px;\n}\n.agents-card img {\n    background: #fff none repeat scroll 0 0;\n    border-radius: 90px;\n    box-shadow: 0 0 24px rgba(11, 123, 255, 0.12);\n    height: 107px;\n}\n/* Sidebar Card */\n.sidebar-card .card-body {\n    padding: 35px;\n}\n.sidebar-card-list li a {\n    display: inline-block;\n    width: 100%;\n}\n.sidebar-card-list > li {\n    line-height: 32px;\n}\n.sidebar-card-list li a .sidebar-badge {\n    float: right;\n    font-weight: 500;\n    margin: 0;\n}\n\n#featured-properties .card-body {\n    padding: 30px 0;\n}\n\n#featured-properties .card {\n    box-shadow: none;\n    margin: 0;\n}\n#featured-properties img {\n    border-radius: 3px;\n}\n#featured-properties  .carousel-indicators .active {\n    background-color: #818080;\n}\n#featured-properties  .carousel-indicators li {\n    background-color: rgba(166, 166, 166, 0.5);\n}\n#featured-properties .carousel-indicators {\n    margin: 0;\n}\n\n\n/* Grid/list Filters */\n.tags-action span {\n    background: #fff none repeat scroll 0 0;\n    border-radius: 8px;\n    box-shadow: 0 1px 2px rgba(0, 0, 0, 0.2);\n    display: inline-block;\n    padding: 3px 10px;\n}\n.tags-action span i {\n    margin: 0 0 0 3px;\n}\n.site_top_filter {\n    margin-bottom: 18px;\n}\n.view-mode {\n    margin: 0 0 0 9px;\n}\n.view-mode a {\n    background: #fff none repeat scroll 0 0;\n    border-radius: 8px;\n    box-shadow: 0 1px 2px rgba(0, 0, 0, 0.2);\n\tdisplay: inline-block;\n\tmargin: 0 0 0 4px;\n    padding: 3px 10px;\n}\n.view-mode a.active {\n    color: #34495e;\n}\n.sort-by-btn .btn {\n    min-width: 160px;\n    padding: 6px 9px;\n    text-align: left;\n    border: none;\n}\n.sort-by-btn .dropdown-toggle::after {\n    position: absolute;\n    right: 11px;\n    text-align: right;\n    top: 15px;\n    vertical-align: top;\n}\n\n/* Properties List */\n.card-list-view .card-body, .card-list-view .card-footer {\n    padding: 20px 30px;\n}\n/* Blog */\n.blog-card .card-footer img {\n   margin: 0 11px 0 0;\n    width: 33px;\n}\n.blog-card .badge {\n    font-size: 12px;\n    font-stretch: normal;\n    font-style: normal;\n    font-weight: 500;\n    letter-spacing: 1px;\n    line-height: normal;\n    margin: 0 0 12px;\n    padding: 6px 10px;\n    text-transform: uppercase;\n}\n.blog-card .badge-primary {\n    background-color: rgba(92, 93, 232, 0.1);\n    color: #5c5de8;\n}\n.blog-card .badge-danger {\n    background-color: rgba(250, 100, 35, 0.1);\n    color: #fa6423;\n}\n.blog-card .badge-success {\n    background-color: rgba(0, 216, 200, 0.09);\n    color: #00d8c8;\n}\n.blog-card .badge-dark {\n    background-color: rgba(52, 58, 64, 0.19);\n    color: #343a40;\n}\n.blog-card .badge-info {\n    background-color: rgba(23, 160, 184, 0.17);\n    color: #17a2b8;\n}\n.blog-card .badge-white {\n    background-color: rgba(255, 255, 255, 0.81);\n    color: #5c5de8;\n}\n\n/* Property Single */\n\n.reviews-card .d-flex {\n    height: 50px;\n    width: 50px;\n}\n.reviews-card h5 small {\n    color: #848484;\n    font-size: 12px;\n    margin: 0 0 0 8px;\n}\n.star-rating i {\n    font-size: 15px;\n    letter-spacing: -6px;\n}\n\n.list-icon i {\n    float: left;\n    font-size: 36px;\n    line-height: 47px;\n    width: 52px;\n}\n.list-icon {\n    box-shadow: 0 1px 2px rgba(0, 0, 0, 0.2);\n    margin-bottom: 32px;\n    border-radius: 8px;\n    overflow: hidden;\n    background-color: #ffffff;\n    padding: 15px 21px;\n\n}\n.list-icon strong {\n    text-transform: uppercase;\n    vertical-align: text-top;\n    font-weight: 600;\n    color: #000;\n}\n.list-icon p {\n    line-height: 11px;\n}\n\n.property-single-title {\n    bottom: 0;\n    left: 0;\n    padding: 37px 0;\n    position: absolute;\n    right: 0;\n}\n\n/* Add Property */\n.property-features-add .custom-control {\n    margin: 7px 0;\n}\n.fuzone {\n    background: #f9f9f9 none repeat scroll 0 0;\n    border: 3px dashed #eeeeee;\n    border-radius: 8px;\n    cursor: pointer;\n    display: inline-block;\n    min-height: 150px;\n    position: relative;\n    text-align: center;\n    transition: all 0.3s linear 0s;\n    width: 100%;\n}\n.fuzone .fu-text {\n    color: #98aab8;\n    font-size: 12px;\n    margin: 50px 40px;\n    position: relative;\n    text-align: center;\n}\n.fuzone .fu-text i {\n     display: inline-block;\n    font-size: 54px;\n    padding-bottom: 10px;\n    transition: all 0.3s linear 0s;\n    width: 100%;\n}\n\n.fuzone input {\n    cursor: pointer;\n    height: 100%;\n    left: 0;\n    opacity: 0;\n    position: absolute;\n    top: 0;\n    width: 100%;\n    z-index: 100;\n}\n/* My Account */\n.user-pages-sidebar .nav-link {\n    padding: 8px 0;\n    position: relative;\n}\n.user-pages-sidebar .nav-link:hover {\n    color: #007bff;\n}\n.user-pages-sidebar .nav-item {\n    display: inline-block;\n    width: 100%;\n}\n.user-pages-sidebar .nav-link.active:after {\n    content: \"\";\n    position: absolute;\n    left: -35px;\n    background: #007bff;\n    top: 9px;\n    bottom: 9px;\n    width: 3px;\n}\n.user-pages-sidebar .nav-link:hover:after {\n    content: \"\";\n    position: absolute;\n    left: -35px;\n    background: #007bff;\n    top: 9px;\n    bottom: 9px;\n    width: 3px;\n}\n.user-pages-main {\n    margin: -66px 0 0 0;\n}\n\n/* Property Single Gallery */\n\n.property-single-title-gallery {\n    background: #fff none repeat scroll 0 0;\n    padding: 50px 0;\n    position: relative;\n\tbox-shadow: 0 1px 2px rgba(0, 0, 0, 0.2);\n}\n\n\n\n/* Footer */\n.footer li {\n    line-height: 34px;\n}\n.footer-social a {\n    background: #516af0 none repeat scroll 0 0;\n    border-radius: 50px;\n    display: inline-block;\n    height: 35px;\n    line-height: 35px;\n    font-size: 16px;\n    text-align: center;\n    width: 35px;\n    color: #fff;\n}\n.footer-social a:hover {\n    background: #000 none repeat scroll 0 0;\n    color: #f5f5f5;\n}\n.footer-logo {\n    width: 200px;\n}\n/* Mobile Media */\n@media (min-width: 0px) and (max-width: 767px) {\n\t.container {\n         max-width: 100%;\n    }\n\t.section-padding {\n    padding: 50px 0;\n}\nnav.navbar {\n    padding: 10px 15px;\n}\n.navbar-toggler {\n    padding: 2px 5px;\n}\nnav.navbar .navbar-nav .nav-link {\n    border-bottom: 1px solid #ececec;\n    padding: 10px 12px;\n    text-align: center;\n}\n.main-nav-right {\n    text-align: center;\n}\nnav.navbar .dropdown-menu .dropdown-item {\n    font-size: 13px;\n    padding: 7px 20px;\n    text-align: center;\n}\n\t.carousel-indicators {\n    bottom: auto;\n    left: auto;\n    margin: 0;\n    position: absolute;\n    right: 12px;\n    top: 16px;\n}\n.banner-list {\n    padding:0px 15px !important;\n}\n.banner-list h6 {\n    font-size: 13px;\n    font-weight: 100;\n    line-height: 21px;\n    margin: 0 0 27px !important;\n}\n.banner-list .card {\n    margin-top: 30px;\n}\n.inner-page-form, .slider-form {\n    bottom: 1px  !important;\n    left: 1px;\n    right: 1px;\n    top: auto !important;\n}\n.inner-page-form .container, .slider-form .container{\n    padding: 0;\n}\n.carousel-control-prev, .carousel-control-next {\n    display: none;\n}\n\n.property-single-title {\n    text-align: center;\n}\n.property-single-title .text-right {\n    text-align: center !important;\n}\n.property-single-title .footer-social {\n    margin: 20px 0 0;\n}\n.btn {\n    font-size: 13px;\n    font-weight: bold;\n    padding: 9px 27px;\n}\n\n\nh1 {\n    font-size: 34px;\n}\nh2 br {\n    display: none;\n}\n.padding-card .card-body, .sidebar-card .card-body {\n    padding: 18px;\n}\n.card-list-view .card-body, .card-list-view .card-footer {\n    padding: 18px;\n}\n.footer h4 {\n    margin: 0 0 10px !important;\n}\n.footer h6 {\n    margin: 30px 0 8px  !important;\n}\n.site_top_filter{\n\ttext-align:center;\n}\n.site_top_filter .float-right {\n     float: none  !important;\n    margin: 3px 1px  !important;\n}\n\n\n}\n@media (min-width: 768px) and (max-width: 1023px) {\n\t\t.container {\n         max-width: 100%;\n    }\n\tnav.navbar {\n    padding: 10px 15px;\n}\n.navbar-toggler {\n    padding: 2px 5px;\n}\nnav.navbar .navbar-nav .nav-link {\n    border-bottom: 1px solid #ececec;\n    padding: 10px 12px;\n    text-align: center;\n}\n.main-nav-right {\n    text-align: center;\n}\nnav.navbar .dropdown-menu .dropdown-item {\n    font-size: 13px;\n    padding: 7px 20px;\n    text-align: center;\n}\n.carousel-indicators {\n    bottom: auto;\n    left: auto;\n    margin: 0;\n    position: absolute;\n    right: 12px;\n    top: 16px;\n}\n.padding-card .card-body, .sidebar-card .card-body {\n    padding: 18px;\n}\n.card-list-view .card-body, .card-list-view .card-footer {\n    padding: 18px;\n}\n.section-padding {\n    padding: 60px 0;\n}\n\n}\n@media (min-width: 1024px) and (max-width: 1200px) {\n     .container {\n         max-width: 100%;\n    }\n}\n/* End Mobile Media */\n\n\n.profile-sidebar img {\n    margin-bottom: 15px;\n}\n\n.profile-sidebar .card-title {\n    margin-bottom: 5px;\n}\n\n.profile-sidebar .card-subtitle {\n    font-size: 12px;\n    font-weight: 600;\n}\n\n.card-info p {\n    margin-bottom: 5px;\n}\n.active > a {\n    color: #516af0;\n    font-weight: bold;\n"
  },
  {
    "path": "src/main/resources/static/front/js/contact_me.js",
    "content": "$(function() {\n\n  $(\"#contactForm input,#contactForm textarea\").jqBootstrapValidation({\n    preventSubmit: true,\n    submitError: function($form, event, errors) {\n      // additional error messages or events\n    },\n    submitSuccess: function($form, event) {\n      event.preventDefault(); // prevent default submit behaviour\n      // get values from FORM\n      var name = $(\"input#name\").val();\n      var email = $(\"input#email\").val();\n      var phone = $(\"input#phone\").val();\n      var message = $(\"textarea#message\").val();\n      var firstName = name; // For Success/Failure Message\n      // Check for white space in name for Success/Fail message\n      if (firstName.indexOf(' ') >= 0) {\n        firstName = name.split(' ').slice(0, -1).join(' ');\n      }\n      $this = $(\"#sendMessageButton\");\n      $this.prop(\"disabled\", true); // Disable submit button until AJAX call is complete to prevent duplicate messages\n      $.ajax({\n        url: \"././mail/contact_me.php\",\n        type: \"POST\",\n        data: {\n          name: name,\n          phone: phone,\n          email: email,\n          message: message\n        },\n        cache: false,\n        success: function() {\n          // Success message\n          $('#success').html(\"<div class='alert alert-success'>\");\n          $('#success > .alert-success').html(\"<button type='button' class='close' data-dismiss='alert' aria-hidden='true'>&times;\")\n            .append(\"</button>\");\n          $('#success > .alert-success')\n            .append(\"<strong>Your message has been sent. </strong>\");\n          $('#success > .alert-success')\n            .append('</div>');\n          //clear all fields\n          $('#contactForm').trigger(\"reset\");\n        },\n        error: function() {\n          // Fail message\n          $('#success').html(\"<div class='alert alert-danger'>\");\n          $('#success > .alert-danger').html(\"<button type='button' class='close' data-dismiss='alert' aria-hidden='true'>&times;\")\n            .append(\"</button>\");\n          $('#success > .alert-danger').append($(\"<strong>\").text(\"Sorry \" + firstName + \", it seems that my mail server is not responding. Please try again later!\"));\n          $('#success > .alert-danger').append('</div>');\n          //clear all fields\n          $('#contactForm').trigger(\"reset\");\n        },\n        complete: function() {\n          setTimeout(function() {\n            $this.prop(\"disabled\", false); // Re-enable submit button when AJAX call is complete\n          }, 1000);\n        }\n      });\n    },\n    filter: function() {\n      return $(this).is(\":visible\");\n    },\n  });\n\n  $(\"a[data-toggle=\\\"tab\\\"]\").click(function(e) {\n    e.preventDefault();\n    $(this).tab(\"show\");\n  });\n});\n\n/*When clicking on Full hide fail/success boxes */\n$('#name').focus(function() {\n  $('#success').html('');\n});\n"
  },
  {
    "path": "src/main/resources/static/front/js/custom.js",
    "content": "/*\nTemplate Name: Manland - Bootstrap Light Real Estate HTML Template\nAuthor: Webartinfo\nAuthor URI: https://themeforest.net/user/webartinfothems\nVersion: 1.0\n*/\n/*\n\t-- Hover Nav\n\t-- Select2\n*/\n$(document).ready(function () {\n    \"use strict\";\n\n    // ===========Hover Nav============\t\n    $('.navbar-nav li.dropdown').hover(function () {\n        $(this).find('.dropdown-menu').stop(true, true).delay(100).fadeIn(500);\n    }, function () {\n        $(this).find('.dropdown-menu').stop(true, true).delay(100).fadeOut(500);\n    });\n\n    // ===========Select2============\n    $(document).ready(function () {\n        $('.select2').select2();\n    });\n\n});\n\n$('#toLogin').click(function () {\n    localStorage.setItem('lastUrl', window.location.href);\n    window.location.href = '/login';\n});\n$('#toRegister').click(function () {\n    localStorage.setItem('lastUrl', window.location.href);\n    window.location.href = '/register';\n});\n\n\n$('#btn-login').click(function () {\n    const name = $(\"#userName\").val();\n    const pwd = $(\"#userPass\").val();\n    if (name == \"\" || pwd == \"\") {\n        alert(\"请输入完整信息！\");\n    } else {\n        $.ajax({\n            type: 'POST',\n            url: '/login',\n            async: false,\n            data: {\n                'userName': name,\n                'userPass': pwd\n            },\n            success: function (data) {\n                if (data.code == 1) {\n                    alert('登录成功')\n                    let lastUrl = localStorage.getItem('lastUrl');\n                    if (lastUrl == null || lastUrl == '') {\n                        window.location.href = '/admin';\n                    } else {\n                        localStorage.setItem('lastUrl', '');\n                        window.location.href = lastUrl;\n                    }\n                } else {\n                    alert(data.msg);\n                }\n            }\n        });\n    }\n})\n\n\n$('#btn-register').click(function () {\n    const userName = $(\"#userName\").val();\n    const userPass = $(\"#userPass\").val();\n    const idCard = $(\"#idCard\").val();\n    const userType = $(\"input[name='userType']:checked\").val();\n    const userDisplayName = $(\"#userDisplayName\").val();\n    if (userName == \"\" || userPass == \"\" || idCard == \"\" || userDisplayName == \"\" || userType == \"\") {\n        alert(\"请输入完整信息！\");\n    } else {\n        $.ajax({\n            type: 'POST',\n            url: '/register',\n            async: false,\n            data: {\n                'userName': userName,\n                'userPass': userPass,\n                'idCard': idCard,\n                'userDisplayName': userDisplayName,\n                'userType': userType\n            },\n            success: function (data) {\n                if (data.code == 1) {\n                    alert('注册成功');\n                    window.location.href = '/login';\n                } else {\n                    alert(data.msg);\n                }\n            }\n        });\n    }\n});\n\n\n$('#btn-logout').click(function () {\n    $.ajax({\n        type: 'POST',\n        url: '/logout',\n        async: false,\n        success: function () {\n            window.location.reload();\n        }\n    });\n});\n\n$('#btn-addOrder').click(function () {\n    if (confirm('您确定是否租赁该房子吗？')) {\n        const postId = $(\"#postId\").val();\n        const quantity = $(\"#quantity\").val();\n        if (postId == \"\" || quantity == \"\") {\n            alert(\"请输入完整信息！\");\n        } else {\n            $.ajax({\n                type: 'POST',\n                url: '/order',\n                async: false,\n                data: {\n                    'postId': postId,\n                    'quantity': quantity\n                },\n                success: function (data) {\n                    if (data.code == 1) {\n                        alert('订单生成成功，请签订合同');\n                        window  .open('/agreement?orderId=' + data.result);\n                    } else {\n                        alert(data.msg);\n                    }\n                }\n            });\n        }\n    }\n\n});\n\n$('#btn-agreement').click(function () {\n    let orderId = $(this).attr('data-id');\n    if (confirm('您确定已阅读并同意上述合同内容？')) {\n        window.location.href = '/pay?orderId=' + orderId;\n    }\n});\n\n$('#btn-pay').click(function () {\n    $.ajax({\n        type: 'post',\n        url: '/pay',\n        data: {\n            'orderId': $('#orderId').val()\n        },\n        success: function (data) {\n            if (data.code == 1) {\n                alert('支付成功');\n                window.location.href = '/admin/order/rent'\n            } else {\n                alert(data.msg);\n            }\n        }\n    });\n});\n"
  },
  {
    "path": "src/main/resources/static/front/js/jqBootstrapValidation.js",
    "content": "/* jqBootstrapValidation\n * A plugin for automating validation on Twitter Bootstrap formatted forms.\n *\n * v1.3.6\n *\n * License: MIT <http://opensource.org/licenses/mit-license.php> - see LICENSE file\n *\n * http://ReactiveRaven.github.com/jqBootstrapValidation/\n */\n\n(function( $ ){\n\n\tvar createdElements = [];\n\n\tvar defaults = {\n\t\toptions: {\n\t\t\tprependExistingHelpBlock: false,\n\t\t\tsniffHtml: true, // sniff for 'required', 'maxlength', etc\n\t\t\tpreventSubmit: true, // stop the form submit event from firing if validation fails\n\t\t\tsubmitError: false, // function called if there is an error when trying to submit\n\t\t\tsubmitSuccess: false, // function called just before a successful submit event is sent to the server\n            semanticallyStrict: false, // set to true to tidy up generated HTML output\n\t\t\tautoAdd: {\n\t\t\t\thelpBlocks: true\n\t\t\t},\n            filter: function () {\n                // return $(this).is(\":visible\"); // only validate elements you can see\n                return true; // validate everything\n            }\n\t\t},\n    methods: {\n      init : function( options ) {\n\n        var settings = $.extend(true, {}, defaults);\n\n        settings.options = $.extend(true, settings.options, options);\n\n        var $siblingElements = this;\n\n        var uniqueForms = $.unique(\n          $siblingElements.map( function () {\n            return $(this).parents(\"form\")[0];\n          }).toArray()\n        );\n\n        $(uniqueForms).bind(\"submit\", function (e) {\n          var $form = $(this);\n          var warningsFound = 0;\n          var $inputs = $form.find(\"input,textarea,select\").not(\"[type=submit],[type=image]\").filter(settings.options.filter);\n          $inputs.trigger(\"submit.validation\").trigger(\"validationLostFocus.validation\");\n\n          $inputs.each(function (i, el) {\n            var $this = $(el),\n              $controlGroup = $this.parents(\".control-group\").first();\n            if (\n              $controlGroup.hasClass(\"has-warning\")\n            ) {\n              $controlGroup.removeClass(\"has-warning\").addClass(\"has-error\");\n              warningsFound++;\n            }\n          });\n\n          $inputs.trigger(\"validationLostFocus.validation\");\n\n          if (warningsFound) {\n            if (settings.options.preventSubmit) {\n              e.preventDefault();\n            }\n            $form.addClass(\"has-error\");\n            if ($.isFunction(settings.options.submitError)) {\n              settings.options.submitError($form, e, $inputs.jqBootstrapValidation(\"collectErrors\", true));\n            }\n          } else {\n            $form.removeClass(\"has-error\");\n            if ($.isFunction(settings.options.submitSuccess)) {\n              settings.options.submitSuccess($form, e);\n            }\n          }\n        });\n\n        return this.each(function(){\n\n          // Get references to everything we're interested in\n          var $this = $(this),\n            $controlGroup = $this.parents(\".control-group\").first(),\n            $helpBlock = $controlGroup.find(\".help-block\").first(),\n            $form = $this.parents(\"form\").first(),\n            validatorNames = [];\n\n          // create message container if not exists\n          if (!$helpBlock.length && settings.options.autoAdd && settings.options.autoAdd.helpBlocks) {\n              $helpBlock = $('<div class=\"help-block\" />');\n              $controlGroup.find('.controls').append($helpBlock);\n\t\t\t\t\t\t\tcreatedElements.push($helpBlock[0]);\n          }\n\n          // =============================================================\n          //                                     SNIFF HTML FOR VALIDATORS\n          // =============================================================\n\n          // *snort sniff snuffle*\n\n          if (settings.options.sniffHtml) {\n            var message = \"\";\n            // ---------------------------------------------------------\n            //                                                   PATTERN\n            // ---------------------------------------------------------\n            if ($this.attr(\"pattern\") !== undefined) {\n              message = \"Not in the expected format<!-- data-validation-pattern-message to override -->\";\n              if ($this.data(\"validationPatternMessage\")) {\n                message = $this.data(\"validationPatternMessage\");\n              }\n              $this.data(\"validationPatternMessage\", message);\n              $this.data(\"validationPatternRegex\", $this.attr(\"pattern\"));\n            }\n            // ---------------------------------------------------------\n            //                                                       MAX\n            // ---------------------------------------------------------\n            if ($this.attr(\"max\") !== undefined || $this.attr(\"aria-valuemax\") !== undefined) {\n              var max = ($this.attr(\"max\") !== undefined ? $this.attr(\"max\") : $this.attr(\"aria-valuemax\"));\n              message = \"Too high: Maximum of '\" + max + \"'<!-- data-validation-max-message to override -->\";\n              if ($this.data(\"validationMaxMessage\")) {\n                message = $this.data(\"validationMaxMessage\");\n              }\n              $this.data(\"validationMaxMessage\", message);\n              $this.data(\"validationMaxMax\", max);\n            }\n            // ---------------------------------------------------------\n            //                                                       MIN\n            // ---------------------------------------------------------\n            if ($this.attr(\"min\") !== undefined || $this.attr(\"aria-valuemin\") !== undefined) {\n              var min = ($this.attr(\"min\") !== undefined ? $this.attr(\"min\") : $this.attr(\"aria-valuemin\"));\n              message = \"Too low: Minimum of '\" + min + \"'<!-- data-validation-min-message to override -->\";\n              if ($this.data(\"validationMinMessage\")) {\n                message = $this.data(\"validationMinMessage\");\n              }\n              $this.data(\"validationMinMessage\", message);\n              $this.data(\"validationMinMin\", min);\n            }\n            // ---------------------------------------------------------\n            //                                                 MAXLENGTH\n            // ---------------------------------------------------------\n            if ($this.attr(\"maxlength\") !== undefined) {\n              message = \"Too long: Maximum of '\" + $this.attr(\"maxlength\") + \"' characters<!-- data-validation-maxlength-message to override -->\";\n              if ($this.data(\"validationMaxlengthMessage\")) {\n                message = $this.data(\"validationMaxlengthMessage\");\n              }\n              $this.data(\"validationMaxlengthMessage\", message);\n              $this.data(\"validationMaxlengthMaxlength\", $this.attr(\"maxlength\"));\n            }\n            // ---------------------------------------------------------\n            //                                                 MINLENGTH\n            // ---------------------------------------------------------\n            if ($this.attr(\"minlength\") !== undefined) {\n              message = \"Too short: Minimum of '\" + $this.attr(\"minlength\") + \"' characters<!-- data-validation-minlength-message to override -->\";\n              if ($this.data(\"validationMinlengthMessage\")) {\n                message = $this.data(\"validationMinlengthMessage\");\n              }\n              $this.data(\"validationMinlengthMessage\", message);\n              $this.data(\"validationMinlengthMinlength\", $this.attr(\"minlength\"));\n            }\n            // ---------------------------------------------------------\n            //                                                  REQUIRED\n            // ---------------------------------------------------------\n            if ($this.attr(\"required\") !== undefined || $this.attr(\"aria-required\") !== undefined) {\n              message = settings.builtInValidators.required.message;\n              if ($this.data(\"validationRequiredMessage\")) {\n                message = $this.data(\"validationRequiredMessage\");\n              }\n              $this.data(\"validationRequiredMessage\", message);\n            }\n            // ---------------------------------------------------------\n            //                                                    NUMBER\n            // ---------------------------------------------------------\n            if ($this.attr(\"type\") !== undefined && $this.attr(\"type\").toLowerCase() === \"number\") {\n              message = settings.builtInValidators.number.message;\n              if ($this.data(\"validationNumberMessage\")) {\n                message = $this.data(\"validationNumberMessage\");\n              }\n              $this.data(\"validationNumberMessage\", message);\n            }\n            // ---------------------------------------------------------\n            //                                                     EMAIL\n            // ---------------------------------------------------------\n            if ($this.attr(\"type\") !== undefined && $this.attr(\"type\").toLowerCase() === \"email\") {\n              message = \"Not a valid email address<!-- data-validator-validemail-message to override -->\";\n              if ($this.data(\"validationValidemailMessage\")) {\n                message = $this.data(\"validationValidemailMessage\");\n              } else if ($this.data(\"validationEmailMessage\")) {\n                message = $this.data(\"validationEmailMessage\");\n              }\n              $this.data(\"validationValidemailMessage\", message);\n            }\n            // ---------------------------------------------------------\n            //                                                MINCHECKED\n            // ---------------------------------------------------------\n            if ($this.attr(\"minchecked\") !== undefined) {\n              message = \"Not enough options checked; Minimum of '\" + $this.attr(\"minchecked\") + \"' required<!-- data-validation-minchecked-message to override -->\";\n              if ($this.data(\"validationMincheckedMessage\")) {\n                message = $this.data(\"validationMincheckedMessage\");\n              }\n              $this.data(\"validationMincheckedMessage\", message);\n              $this.data(\"validationMincheckedMinchecked\", $this.attr(\"minchecked\"));\n            }\n            // ---------------------------------------------------------\n            //                                                MAXCHECKED\n            // ---------------------------------------------------------\n            if ($this.attr(\"maxchecked\") !== undefined) {\n              message = \"Too many options checked; Maximum of '\" + $this.attr(\"maxchecked\") + \"' required<!-- data-validation-maxchecked-message to override -->\";\n              if ($this.data(\"validationMaxcheckedMessage\")) {\n                message = $this.data(\"validationMaxcheckedMessage\");\n              }\n              $this.data(\"validationMaxcheckedMessage\", message);\n              $this.data(\"validationMaxcheckedMaxchecked\", $this.attr(\"maxchecked\"));\n            }\n          }\n\n          // =============================================================\n          //                                       COLLECT VALIDATOR NAMES\n          // =============================================================\n\n          // Get named validators\n          if ($this.data(\"validation\") !== undefined) {\n            validatorNames = $this.data(\"validation\").split(\",\");\n          }\n\n          // Get extra ones defined on the element's data attributes\n          $.each($this.data(), function (i, el) {\n            var parts = i.replace(/([A-Z])/g, \",$1\").split(\",\");\n            if (parts[0] === \"validation\" && parts[1]) {\n              validatorNames.push(parts[1]);\n            }\n          });\n\n          // =============================================================\n          //                                     NORMALISE VALIDATOR NAMES\n          // =============================================================\n\n          var validatorNamesToInspect = validatorNames;\n          var newValidatorNamesToInspect = [];\n\n          do // repeatedly expand 'shortcut' validators into their real validators\n          {\n            // Uppercase only the first letter of each name\n            $.each(validatorNames, function (i, el) {\n              validatorNames[i] = formatValidatorName(el);\n            });\n\n            // Remove duplicate validator names\n            validatorNames = $.unique(validatorNames);\n\n            // Pull out the new validator names from each shortcut\n            newValidatorNamesToInspect = [];\n            $.each(validatorNamesToInspect, function(i, el) {\n              if ($this.data(\"validation\" + el + \"Shortcut\") !== undefined) {\n                // Are these custom validators?\n                // Pull them out!\n                $.each($this.data(\"validation\" + el + \"Shortcut\").split(\",\"), function(i2, el2) {\n                  newValidatorNamesToInspect.push(el2);\n                });\n              } else if (settings.builtInValidators[el.toLowerCase()]) {\n                // Is this a recognised built-in?\n                // Pull it out!\n                var validator = settings.builtInValidators[el.toLowerCase()];\n                if (validator.type.toLowerCase() === \"shortcut\") {\n                  $.each(validator.shortcut.split(\",\"), function (i, el) {\n                    el = formatValidatorName(el);\n                    newValidatorNamesToInspect.push(el);\n                    validatorNames.push(el);\n                  });\n                }\n              }\n            });\n\n            validatorNamesToInspect = newValidatorNamesToInspect;\n\n          } while (validatorNamesToInspect.length > 0)\n\n          // =============================================================\n          //                                       SET UP VALIDATOR ARRAYS\n          // =============================================================\n\n          var validators = {};\n\n          $.each(validatorNames, function (i, el) {\n            // Set up the 'override' message\n            var message = $this.data(\"validation\" + el + \"Message\");\n            var hasOverrideMessage = (message !== undefined);\n            var foundValidator = false;\n            message =\n              (\n                message\n                  ? message\n                  : \"'\" + el + \"' validation failed <!-- Add attribute 'data-validation-\" + el.toLowerCase() + \"-message' to input to change this message -->\"\n              )\n            ;\n\n            $.each(\n              settings.validatorTypes,\n              function (validatorType, validatorTemplate) {\n                if (validators[validatorType] === undefined) {\n                  validators[validatorType] = [];\n                }\n                if (!foundValidator && $this.data(\"validation\" + el + formatValidatorName(validatorTemplate.name)) !== undefined) {\n                  validators[validatorType].push(\n                    $.extend(\n                      true,\n                      {\n                        name: formatValidatorName(validatorTemplate.name),\n                        message: message\n                      },\n                      validatorTemplate.init($this, el)\n                    )\n                  );\n                  foundValidator = true;\n                }\n              }\n            );\n\n            if (!foundValidator && settings.builtInValidators[el.toLowerCase()]) {\n\n              var validator = $.extend(true, {}, settings.builtInValidators[el.toLowerCase()]);\n              if (hasOverrideMessage) {\n                validator.message = message;\n              }\n              var validatorType = validator.type.toLowerCase();\n\n              if (validatorType === \"shortcut\") {\n                foundValidator = true;\n              } else {\n                $.each(\n                  settings.validatorTypes,\n                  function (validatorTemplateType, validatorTemplate) {\n                    if (validators[validatorTemplateType] === undefined) {\n                      validators[validatorTemplateType] = [];\n                    }\n                    if (!foundValidator && validatorType === validatorTemplateType.toLowerCase()) {\n                      $this.data(\"validation\" + el + formatValidatorName(validatorTemplate.name), validator[validatorTemplate.name.toLowerCase()]);\n                      validators[validatorType].push(\n                        $.extend(\n                          validator,\n                          validatorTemplate.init($this, el)\n                        )\n                      );\n                      foundValidator = true;\n                    }\n                  }\n                );\n              }\n            }\n\n            if (! foundValidator) {\n              $.error(\"Cannot find validation info for '\" + el + \"'\");\n            }\n          });\n\n          // =============================================================\n          //                                         STORE FALLBACK VALUES\n          // =============================================================\n\n          $helpBlock.data(\n            \"original-contents\",\n            (\n              $helpBlock.data(\"original-contents\")\n                ? $helpBlock.data(\"original-contents\")\n                : $helpBlock.html()\n            )\n          );\n\n          $helpBlock.data(\n            \"original-role\",\n            (\n              $helpBlock.data(\"original-role\")\n                ? $helpBlock.data(\"original-role\")\n                : $helpBlock.attr(\"role\")\n            )\n          );\n\n          $controlGroup.data(\n            \"original-classes\",\n            (\n              $controlGroup.data(\"original-clases\")\n                ? $controlGroup.data(\"original-classes\")\n                : $controlGroup.attr(\"class\")\n            )\n          );\n\n          $this.data(\n            \"original-aria-invalid\",\n            (\n              $this.data(\"original-aria-invalid\")\n                ? $this.data(\"original-aria-invalid\")\n                : $this.attr(\"aria-invalid\")\n            )\n          );\n\n          // =============================================================\n          //                                                    VALIDATION\n          // =============================================================\n\n          $this.bind(\n            \"validation.validation\",\n            function (event, params) {\n\n              var value = getValue($this);\n\n              // Get a list of the errors to apply\n              var errorsFound = [];\n\n              $.each(validators, function (validatorType, validatorTypeArray) {\n                if (value || value.length || (params && params.includeEmpty) || (!!settings.validatorTypes[validatorType].blockSubmit && params && !!params.submitting)) {\n                  $.each(validatorTypeArray, function (i, validator) {\n                    if (settings.validatorTypes[validatorType].validate($this, value, validator)) {\n                      errorsFound.push(validator.message);\n                    }\n                  });\n                }\n              });\n\n              return errorsFound;\n            }\n          );\n\n          $this.bind(\n            \"getValidators.validation\",\n            function () {\n              return validators;\n            }\n          );\n\n          // =============================================================\n          //                                             WATCH FOR CHANGES\n          // =============================================================\n          $this.bind(\n            \"submit.validation\",\n            function () {\n              return $this.triggerHandler(\"change.validation\", {submitting: true});\n            }\n          );\n          $this.bind(\n            [\n              \"keyup\",\n              \"focus\",\n              \"blur\",\n              \"click\",\n              \"keydown\",\n              \"keypress\",\n              \"change\"\n            ].join(\".validation \") + \".validation\",\n            function (e, params) {\n\n              var value = getValue($this);\n\n              var errorsFound = [];\n\n              $controlGroup.find(\"input,textarea,select\").each(function (i, el) {\n                var oldCount = errorsFound.length;\n                $.each($(el).triggerHandler(\"validation.validation\", params), function (j, message) {\n                  errorsFound.push(message);\n                });\n                if (errorsFound.length > oldCount) {\n                  $(el).attr(\"aria-invalid\", \"true\");\n                } else {\n                  var original = $this.data(\"original-aria-invalid\");\n                  $(el).attr(\"aria-invalid\", (original !== undefined ? original : false));\n                }\n              });\n\n              $form.find(\"input,select,textarea\").not($this).not(\"[name=\\\"\" + $this.attr(\"name\") + \"\\\"]\").trigger(\"validationLostFocus.validation\");\n\n              errorsFound = $.unique(errorsFound.sort());\n\n              // Were there any errors?\n              if (errorsFound.length) {\n                // Better flag it up as a warning.\n                $controlGroup.removeClass(\"has-success has-error\").addClass(\"has-warning\");\n\n                // How many errors did we find?\n                if (settings.options.semanticallyStrict && errorsFound.length === 1) {\n                  // Only one? Being strict? Just output it.\n                  $helpBlock.html(errorsFound[0] + \n                    ( settings.options.prependExistingHelpBlock ? $helpBlock.data(\"original-contents\") : \"\" ));\n                } else {\n                  // Multiple? Being sloppy? Glue them together into an UL.\n                  $helpBlock.html(\"<ul role=\\\"alert\\\"><li>\" + errorsFound.join(\"</li><li>\") + \"</li></ul>\" +\n                    ( settings.options.prependExistingHelpBlock ? $helpBlock.data(\"original-contents\") : \"\" ));\n                }\n              } else {\n                $controlGroup.removeClass(\"has-warning has-error has-success\");\n                if (value.length > 0) {\n                  $controlGroup.addClass(\"has-success\");\n                }\n                $helpBlock.html($helpBlock.data(\"original-contents\"));\n              }\n\n              if (e.type === \"blur\") {\n                $controlGroup.removeClass(\"has-success\");\n              }\n            }\n          );\n          $this.bind(\"validationLostFocus.validation\", function () {\n            $controlGroup.removeClass(\"has-success\");\n          });\n        });\n      },\n      destroy : function( ) {\n\n        return this.each(\n          function() {\n\n            var\n              $this = $(this),\n              $controlGroup = $this.parents(\".control-group\").first(),\n              $helpBlock = $controlGroup.find(\".help-block\").first();\n\n            // remove our events\n            $this.unbind('.validation'); // events are namespaced.\n            // reset help text\n            $helpBlock.html($helpBlock.data(\"original-contents\"));\n            // reset classes\n            $controlGroup.attr(\"class\", $controlGroup.data(\"original-classes\"));\n            // reset aria\n            $this.attr(\"aria-invalid\", $this.data(\"original-aria-invalid\"));\n            // reset role\n            $helpBlock.attr(\"role\", $this.data(\"original-role\"));\n\t\t\t\t\t\t// remove all elements we created\n\t\t\t\t\t\tif (createdElements.indexOf($helpBlock[0]) > -1) {\n\t\t\t\t\t\t\t$helpBlock.remove();\n\t\t\t\t\t\t}\n\n          }\n        );\n\n      },\n      collectErrors : function(includeEmpty) {\n\n        var errorMessages = {};\n        this.each(function (i, el) {\n          var $el = $(el);\n          var name = $el.attr(\"name\");\n          var errors = $el.triggerHandler(\"validation.validation\", {includeEmpty: true});\n          errorMessages[name] = $.extend(true, errors, errorMessages[name]);\n        });\n\n        $.each(errorMessages, function (i, el) {\n          if (el.length === 0) {\n            delete errorMessages[i];\n          }\n        });\n\n        return errorMessages;\n\n      },\n      hasErrors: function() {\n\n        var errorMessages = [];\n\n        this.each(function (i, el) {\n          errorMessages = errorMessages.concat(\n            $(el).triggerHandler(\"getValidators.validation\") ? $(el).triggerHandler(\"validation.validation\", {submitting: true}) : []\n          );\n        });\n\n        return (errorMessages.length > 0);\n      },\n      override : function (newDefaults) {\n        defaults = $.extend(true, defaults, newDefaults);\n      }\n    },\n\t\tvalidatorTypes: {\n      callback: {\n        name: \"callback\",\n        init: function ($this, name) {\n          return {\n            validatorName: name,\n            callback: $this.data(\"validation\" + name + \"Callback\"),\n            lastValue: $this.val(),\n            lastValid: true,\n            lastFinished: true\n          };\n        },\n        validate: function ($this, value, validator) {\n          if (validator.lastValue === value && validator.lastFinished) {\n            return !validator.lastValid;\n          }\n\n          if (validator.lastFinished === true)\n          {\n            validator.lastValue = value;\n            validator.lastValid = true;\n            validator.lastFinished = false;\n\n            var rrjqbvValidator = validator;\n            var rrjqbvThis = $this;\n            executeFunctionByName(\n              validator.callback,\n              window,\n              $this,\n              value,\n              function (data) {\n                if (rrjqbvValidator.lastValue === data.value) {\n                  rrjqbvValidator.lastValid = data.valid;\n                  if (data.message) {\n                    rrjqbvValidator.message = data.message;\n                  }\n                  rrjqbvValidator.lastFinished = true;\n                  rrjqbvThis.data(\"validation\" + rrjqbvValidator.validatorName + \"Message\", rrjqbvValidator.message);\n                  // Timeout is set to avoid problems with the events being considered 'already fired'\n                  setTimeout(function () {\n                    rrjqbvThis.trigger(\"change.validation\");\n                  }, 1); // doesn't need a long timeout, just long enough for the event bubble to burst\n                }\n              }\n            );\n          }\n\n          return false;\n\n        }\n      },\n      ajax: {\n        name: \"ajax\",\n        init: function ($this, name) {\n          return {\n            validatorName: name,\n            url: $this.data(\"validation\" + name + \"Ajax\"),\n            lastValue: $this.val(),\n            lastValid: true,\n            lastFinished: true\n          };\n        },\n        validate: function ($this, value, validator) {\n          if (\"\"+validator.lastValue === \"\"+value && validator.lastFinished === true) {\n            return validator.lastValid === false;\n          }\n\n          if (validator.lastFinished === true)\n          {\n            validator.lastValue = value;\n            validator.lastValid = true;\n            validator.lastFinished = false;\n            $.ajax({\n              url: validator.url,\n              data: \"value=\" + value + \"&field=\" + $this.attr(\"name\"),\n              dataType: \"json\",\n              success: function (data) {\n                if (\"\"+validator.lastValue === \"\"+data.value) {\n                  validator.lastValid = !!(data.valid);\n                  if (data.message) {\n                    validator.message = data.message;\n                  }\n                  validator.lastFinished = true;\n                  $this.data(\"validation\" + validator.validatorName + \"Message\", validator.message);\n                  // Timeout is set to avoid problems with the events being considered 'already fired'\n                  setTimeout(function () {\n                    $this.trigger(\"change.validation\");\n                  }, 1); // doesn't need a long timeout, just long enough for the event bubble to burst\n                }\n              },\n              failure: function () {\n                validator.lastValid = true;\n                validator.message = \"ajax call failed\";\n                validator.lastFinished = true;\n                $this.data(\"validation\" + validator.validatorName + \"Message\", validator.message);\n                // Timeout is set to avoid problems with the events being considered 'already fired'\n                setTimeout(function () {\n                  $this.trigger(\"change.validation\");\n                }, 1); // doesn't need a long timeout, just long enough for the event bubble to burst\n              }\n            });\n          }\n\n          return false;\n\n        }\n      },\n\t\t\tregex: {\n\t\t\t\tname: \"regex\",\n\t\t\t\tinit: function ($this, name) {\n\t\t\t\t\treturn {regex: regexFromString($this.data(\"validation\" + name + \"Regex\"))};\n\t\t\t\t},\n\t\t\t\tvalidate: function ($this, value, validator) {\n\t\t\t\t\treturn (!validator.regex.test(value) && ! validator.negative)\n\t\t\t\t\t\t|| (validator.regex.test(value) && validator.negative);\n\t\t\t\t}\n\t\t\t},\n\t\t\trequired: {\n\t\t\t\tname: \"required\",\n\t\t\t\tinit: function ($this, name) {\n\t\t\t\t\treturn {};\n\t\t\t\t},\n\t\t\t\tvalidate: function ($this, value, validator) {\n\t\t\t\t\treturn !!(value.length === 0  && ! validator.negative)\n\t\t\t\t\t\t|| !!(value.length > 0 && validator.negative);\n\t\t\t\t},\n        blockSubmit: true\n\t\t\t},\n\t\t\tmatch: {\n\t\t\t\tname: \"match\",\n\t\t\t\tinit: function ($this, name) {\n\t\t\t\t\tvar element = $this.parents(\"form\").first().find(\"[name=\\\"\" + $this.data(\"validation\" + name + \"Match\") + \"\\\"]\").first();\n\t\t\t\t\telement.bind(\"validation.validation\", function () {\n\t\t\t\t\t\t$this.trigger(\"change.validation\", {submitting: true});\n\t\t\t\t\t});\n\t\t\t\t\treturn {\"element\": element};\n\t\t\t\t},\n\t\t\t\tvalidate: function ($this, value, validator) {\n\t\t\t\t\treturn (value !== validator.element.val() && ! validator.negative)\n\t\t\t\t\t\t|| (value === validator.element.val() && validator.negative);\n\t\t\t\t},\n        blockSubmit: true\n\t\t\t},\n\t\t\tmax: {\n\t\t\t\tname: \"max\",\n\t\t\t\tinit: function ($this, name) {\n\t\t\t\t\treturn {max: $this.data(\"validation\" + name + \"Max\")};\n\t\t\t\t},\n\t\t\t\tvalidate: function ($this, value, validator) {\n\t\t\t\t\treturn (parseFloat(value, 10) > parseFloat(validator.max, 10) && ! validator.negative)\n\t\t\t\t\t\t|| (parseFloat(value, 10) <= parseFloat(validator.max, 10) && validator.negative);\n\t\t\t\t}\n\t\t\t},\n\t\t\tmin: {\n\t\t\t\tname: \"min\",\n\t\t\t\tinit: function ($this, name) {\n\t\t\t\t\treturn {min: $this.data(\"validation\" + name + \"Min\")};\n\t\t\t\t},\n\t\t\t\tvalidate: function ($this, value, validator) {\n\t\t\t\t\treturn (parseFloat(value) < parseFloat(validator.min) && ! validator.negative)\n\t\t\t\t\t\t|| (parseFloat(value) >= parseFloat(validator.min) && validator.negative);\n\t\t\t\t}\n\t\t\t},\n\t\t\tmaxlength: {\n\t\t\t\tname: \"maxlength\",\n\t\t\t\tinit: function ($this, name) {\n\t\t\t\t\treturn {maxlength: $this.data(\"validation\" + name + \"Maxlength\")};\n\t\t\t\t},\n\t\t\t\tvalidate: function ($this, value, validator) {\n\t\t\t\t\treturn ((value.length > validator.maxlength) && ! validator.negative)\n\t\t\t\t\t\t|| ((value.length <= validator.maxlength) && validator.negative);\n\t\t\t\t}\n\t\t\t},\n\t\t\tminlength: {\n\t\t\t\tname: \"minlength\",\n\t\t\t\tinit: function ($this, name) {\n\t\t\t\t\treturn {minlength: $this.data(\"validation\" + name + \"Minlength\")};\n\t\t\t\t},\n\t\t\t\tvalidate: function ($this, value, validator) {\n\t\t\t\t\treturn ((value.length < validator.minlength) && ! validator.negative)\n\t\t\t\t\t\t|| ((value.length >= validator.minlength) && validator.negative);\n\t\t\t\t}\n\t\t\t},\n\t\t\tmaxchecked: {\n\t\t\t\tname: \"maxchecked\",\n\t\t\t\tinit: function ($this, name) {\n\t\t\t\t\tvar elements = $this.parents(\"form\").first().find(\"[name=\\\"\" + $this.attr(\"name\") + \"\\\"]\");\n\t\t\t\t\telements.bind(\"click.validation\", function () {\n\t\t\t\t\t\t$this.trigger(\"change.validation\", {includeEmpty: true});\n\t\t\t\t\t});\n\t\t\t\t\treturn {maxchecked: $this.data(\"validation\" + name + \"Maxchecked\"), elements: elements};\n\t\t\t\t},\n\t\t\t\tvalidate: function ($this, value, validator) {\n\t\t\t\t\treturn (validator.elements.filter(\":checked\").length > validator.maxchecked && ! validator.negative)\n\t\t\t\t\t\t|| (validator.elements.filter(\":checked\").length <= validator.maxchecked && validator.negative);\n\t\t\t\t},\n        blockSubmit: true\n\t\t\t},\n\t\t\tminchecked: {\n\t\t\t\tname: \"minchecked\",\n\t\t\t\tinit: function ($this, name) {\n\t\t\t\t\tvar elements = $this.parents(\"form\").first().find(\"[name=\\\"\" + $this.attr(\"name\") + \"\\\"]\");\n\t\t\t\t\telements.bind(\"click.validation\", function () {\n\t\t\t\t\t\t$this.trigger(\"change.validation\", {includeEmpty: true});\n\t\t\t\t\t});\n\t\t\t\t\treturn {minchecked: $this.data(\"validation\" + name + \"Minchecked\"), elements: elements};\n\t\t\t\t},\n\t\t\t\tvalidate: function ($this, value, validator) {\n\t\t\t\t\treturn (validator.elements.filter(\":checked\").length < validator.minchecked && ! validator.negative)\n\t\t\t\t\t\t|| (validator.elements.filter(\":checked\").length >= validator.minchecked && validator.negative);\n\t\t\t\t},\n        blockSubmit: true\n\t\t\t}\n\t\t},\n\t\tbuiltInValidators: {\n\t\t\temail: {\n\t\t\t\tname: \"Email\",\n\t\t\t\ttype: \"shortcut\",\n\t\t\t\tshortcut: \"validemail\"\n\t\t\t},\n\t\t\tvalidemail: {\n\t\t\t\tname: \"Validemail\",\n\t\t\t\ttype: \"regex\",\n\t\t\t\tregex: \"[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\\\\\.[A-Za-z]{2,4}\",\n\t\t\t\tmessage: \"Not a valid email address<!-- data-validator-validemail-message to override -->\"\n\t\t\t},\n\t\t\tpasswordagain: {\n\t\t\t\tname: \"Passwordagain\",\n\t\t\t\ttype: \"match\",\n\t\t\t\tmatch: \"password\",\n\t\t\t\tmessage: \"Does not match the given password<!-- data-validator-paswordagain-message to override -->\"\n\t\t\t},\n\t\t\tpositive: {\n\t\t\t\tname: \"Positive\",\n\t\t\t\ttype: \"shortcut\",\n\t\t\t\tshortcut: \"number,positivenumber\"\n\t\t\t},\n\t\t\tnegative: {\n\t\t\t\tname: \"Negative\",\n\t\t\t\ttype: \"shortcut\",\n\t\t\t\tshortcut: \"number,negativenumber\"\n\t\t\t},\n\t\t\tnumber: {\n\t\t\t\tname: \"Number\",\n\t\t\t\ttype: \"regex\",\n\t\t\t\tregex: \"([+-]?\\\\\\d+(\\\\\\.\\\\\\d*)?([eE][+-]?[0-9]+)?)?\",\n\t\t\t\tmessage: \"Must be a number<!-- data-validator-number-message to override -->\"\n\t\t\t},\n\t\t\tinteger: {\n\t\t\t\tname: \"Integer\",\n\t\t\t\ttype: \"regex\",\n\t\t\t\tregex: \"[+-]?\\\\\\d+\",\n\t\t\t\tmessage: \"No decimal places allowed<!-- data-validator-integer-message to override -->\"\n\t\t\t},\n\t\t\tpositivenumber: {\n\t\t\t\tname: \"Positivenumber\",\n\t\t\t\ttype: \"min\",\n\t\t\t\tmin: 0,\n\t\t\t\tmessage: \"Must be a positive number<!-- data-validator-positivenumber-message to override -->\"\n\t\t\t},\n\t\t\tnegativenumber: {\n\t\t\t\tname: \"Negativenumber\",\n\t\t\t\ttype: \"max\",\n\t\t\t\tmax: 0,\n\t\t\t\tmessage: \"Must be a negative number<!-- data-validator-negativenumber-message to override -->\"\n\t\t\t},\n\t\t\trequired: {\n\t\t\t\tname: \"Required\",\n\t\t\t\ttype: \"required\",\n\t\t\t\tmessage: \"This is required<!-- data-validator-required-message to override -->\"\n\t\t\t},\n\t\t\tcheckone: {\n\t\t\t\tname: \"Checkone\",\n\t\t\t\ttype: \"minchecked\",\n\t\t\t\tminchecked: 1,\n\t\t\t\tmessage: \"Check at least one option<!-- data-validation-checkone-message to override -->\"\n\t\t\t}\n\t\t}\n\t};\n\n\tvar formatValidatorName = function (name) {\n\t\treturn name\n\t\t\t.toLowerCase()\n\t\t\t.replace(\n\t\t\t\t/(^|\\s)([a-z])/g ,\n\t\t\t\tfunction(m,p1,p2) {\n\t\t\t\t\treturn p1+p2.toUpperCase();\n\t\t\t\t}\n\t\t\t)\n\t\t;\n\t};\n\n\tvar getValue = function ($this) {\n\t\t// Extract the value we're talking about\n\t\tvar value = $this.val();\n\t\tvar type = $this.attr(\"type\");\n\t\tif (type === \"checkbox\") {\n\t\t\tvalue = ($this.is(\":checked\") ? value : \"\");\n\t\t}\n\t\tif (type === \"radio\") {\n\t\t\tvalue = ($('input[name=\"' + $this.attr(\"name\") + '\"]:checked').length > 0 ? value : \"\");\n\t\t}\n\t\treturn value;\n\t};\n\n  function regexFromString(inputstring) {\n\t\treturn new RegExp(\"^\" + inputstring + \"$\");\n\t}\n\n  /**\n   * Thanks to Jason Bunting via StackOverflow.com\n   *\n   * http://stackoverflow.com/questions/359788/how-to-execute-a-javascript-function-when-i-have-its-name-as-a-string#answer-359910\n   * Short link: http://tinyurl.com/executeFunctionByName\n  **/\n  function executeFunctionByName(functionName, context /*, args*/) {\n    var args = Array.prototype.slice.call(arguments).splice(2);\n    var namespaces = functionName.split(\".\");\n    var func = namespaces.pop();\n    for(var i = 0; i < namespaces.length; i++) {\n      context = context[namespaces[i]];\n    }\n    return context[func].apply(this, args);\n  }\n\n\t$.fn.jqBootstrapValidation = function( method ) {\n\n\t\tif ( defaults.methods[method] ) {\n\t\t\treturn defaults.methods[method].apply( this, Array.prototype.slice.call( arguments, 1 ));\n\t\t} else if ( typeof method === 'object' || ! method ) {\n\t\t\treturn defaults.methods.init.apply( this, arguments );\n\t\t} else {\n\t\t$.error( 'Method ' +  method + ' does not exist on jQuery.jqBootstrapValidation' );\n\t\t\treturn null;\n\t\t}\n\n\t};\n\n  $.jqBootstrapValidation = function (options) {\n    $(\":input\").not(\"[type=image],[type=submit]\").jqBootstrapValidation.apply(this,arguments);\n  };\n\n})( jQuery );\n"
  },
  {
    "path": "src/main/resources/static/front/vendor/select2/css/select2-bootstrap.css",
    "content": "/*! Select2 Bootstrap 3 CSS v1.4.6 | MIT License | github.com/t0m/select2-bootstrap-css */\n/**\n * Reset Bootstrap 3 .form-control styles which - if applied to the\n * original <select>-element the Select2-plugin may be run against -\n * are copied to the .select2-container.\n *\n * 1. Overwrite .select2-container's original display:inline-block\n *    with Bootstrap 3's default for .form-control, display:block;\n *    courtesy of @juristr (@see https://github.com/fk/select2-bootstrap-css/pull/1)\n */\n.select2-container.form-control {\n  background: transparent;\n  box-shadow: none;\n  border: none;\n  display: block;\n  /* 1 */\n  margin: 0;\n  padding: 0;\n}\n\n/**\n * Adjust Select2 inputs to fit Bootstrap 3 default .form-control appearance.\n */\n.select2-container .select2-choices .select2-search-field input,\n.select2-container .select2-choice,\n.select2-container .select2-choices {\n  background: none;\n  padding: 0;\n  border-color: #cccccc;\n  border-radius: 4px;\n  color: #555555;\n  font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n  background-color: white;\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n}\n\n.select2-search input {\n  border-color: #cccccc;\n  border-radius: 4px;\n  color: #555555;\n  font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n  background-color: white;\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n}\n\n.select2-container .select2-choices .select2-search-field input {\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n\n/**\n * Adjust Select2 input heights to match the Bootstrap default.\n */\n.select2-container .select2-choice {\n  height: 34px;\n  line-height: 1.42857;\n}\n\n/**\n * Address Multi Select2's height which - depending on how many elements have been selected -\n * may grown higher than their initial size.\n */\n.select2-container.select2-container-multi.form-control {\n  height: auto;\n}\n\n/**\n * Address Bootstrap 3 control sizing classes\n * @see http://getbootstrap.com/css/#forms-control-sizes\n */\n.select2-container.input-sm .select2-choice,\n.input-group-sm .select2-container .select2-choice {\n  height: 30px;\n  line-height: 1.5;\n  border-radius: 3px;\n}\n\n.select2-container.input-lg .select2-choice,\n.input-group-lg .select2-container .select2-choice {\n  height: 46px;\n  line-height: 1.33333;\n  border-radius: 6px;\n}\n\n.select2-container-multi .select2-choices .select2-search-field input {\n  height: 32px;\n}\n\n.select2-container-multi.input-sm .select2-choices .select2-search-field input,\n.input-group-sm .select2-container-multi .select2-choices .select2-search-field input {\n  height: 28px;\n}\n\n.select2-container-multi.input-lg .select2-choices .select2-search-field input,\n.input-group-lg .select2-container-multi .select2-choices .select2-search-field input {\n  height: 44px;\n}\n\n/**\n * Adjust height and line-height for .select2-search-field amd multi-select Select2 widgets.\n *\n * 1. Class repetition to address missing .select2-chosen in Select2 < 3.3.2.\n */\n.select2-container-multi .select2-choices .select2-search-field input {\n  margin: 0;\n}\n\n.select2-chosen,\n.select2-choice > span:first-child,\n.select2-container .select2-choices .select2-search-field input {\n  padding: 6px 12px;\n}\n\n.input-sm .select2-chosen,\n.input-group-sm .select2-chosen,\n.input-sm .select2-choice > span:first-child,\n.input-group-sm .select2-choice > span:first-child,\n.input-sm .select2-choices .select2-search-field input,\n.input-group-sm .select2-choices .select2-search-field input {\n  padding: 5px 10px;\n}\n\n.input-lg .select2-chosen,\n.input-group-lg .select2-chosen,\n.input-lg .select2-choice > span:first-child,\n.input-group-lg .select2-choice > span:first-child,\n.input-lg .select2-choices .select2-search-field input,\n.input-group-lg .select2-choices .select2-search-field input {\n  padding: 10px 16px;\n}\n\n.select2-container-multi .select2-choices .select2-search-choice {\n  margin-top: 5px;\n  margin-bottom: 3px;\n}\n\n.select2-container-multi.input-sm .select2-choices .select2-search-choice,\n.input-group-sm .select2-container-multi .select2-choices .select2-search-choice {\n  margin-top: 3px;\n  margin-bottom: 2px;\n}\n\n.select2-container-multi.input-lg .select2-choices .select2-search-choice,\n.input-group-lg .select2-container-multi .select2-choices .select2-search-choice {\n  line-height: 24px;\n}\n\n/**\n * Adjust the single Select2's dropdown arrow button appearance.\n *\n * 1. For Select2 v.3.3.2.\n */\n.select2-container .select2-choice .select2-arrow,\n.select2-container .select2-choice div {\n  border-left: none;\n  background: none;\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n}\n\n.select2-dropdown-open .select2-choice .select2-arrow,\n.select2-dropdown-open .select2-choice div {\n  border-left-color: transparent;\n  background: none;\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n}\n\n/**\n * Adjust the dropdown arrow button icon position for the single-select Select2 elements\n * to make it line up vertically now that we increased the height of .select2-container.\n *\n * 1. Class repetition to address missing .select2-chosen in Select2 v.3.3.2.\n */\n.select2-container .select2-choice .select2-arrow b,\n.select2-container .select2-choice div b {\n  background-position: 0 3px;\n}\n\n.select2-dropdown-open .select2-choice .select2-arrow b,\n.select2-dropdown-open .select2-choice div b {\n  background-position: -18px 3px;\n}\n\n.select2-container.input-sm .select2-choice .select2-arrow b,\n.input-group-sm .select2-container .select2-choice .select2-arrow b,\n.select2-container.input-sm .select2-choice div b,\n.input-group-sm .select2-container .select2-choice div b {\n  background-position: 0 1px;\n}\n\n.select2-dropdown-open.input-sm .select2-choice .select2-arrow b,\n.input-group-sm .select2-dropdown-open .select2-choice .select2-arrow b,\n.select2-dropdown-open.input-sm .select2-choice div b,\n.input-group-sm .select2-dropdown-open .select2-choice div b {\n  background-position: -18px 1px;\n}\n\n.select2-container.input-lg .select2-choice .select2-arrow b,\n.input-group-lg .select2-container .select2-choice .select2-arrow b,\n.select2-container.input-lg .select2-choice div b,\n.input-group-lg .select2-container .select2-choice div b {\n  background-position: 0 9px;\n}\n\n.select2-dropdown-open.input-lg .select2-choice .select2-arrow b,\n.input-group-lg .select2-dropdown-open .select2-choice .select2-arrow b,\n.select2-dropdown-open.input-lg .select2-choice div b,\n.input-group-lg .select2-dropdown-open .select2-choice div b {\n  background-position: -18px 9px;\n}\n\n/**\n * Address Bootstrap's validation states and change Select2's border colors and focus states.\n * Apply .has-warning, .has-danger or .has-succes to #select2-drop to match Bootstraps' colors.\n */\n.has-warning .select2-choice,\n.has-warning .select2-choices {\n  border-color: #8a6d3b;\n}\n.has-warning .select2-container-active .select2-choice,\n.has-warning .select2-container-multi.select2-container-active .select2-choices {\n  border-color: #66512c;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b;\n  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b;\n}\n.has-warning.select2-drop-active {\n  border-color: #66512c;\n}\n.has-warning.select2-drop-active.select2-drop.select2-drop-above {\n  border-top-color: #66512c;\n}\n\n.has-error .select2-choice,\n.has-error .select2-choices {\n  border-color: #a94442;\n}\n.has-error .select2-container-active .select2-choice,\n.has-error .select2-container-multi.select2-container-active .select2-choices {\n  border-color: #843534;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483;\n  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483;\n}\n.has-error.select2-drop-active {\n  border-color: #843534;\n}\n.has-error.select2-drop-active.select2-drop.select2-drop-above {\n  border-top-color: #843534;\n}\n\n.has-success .select2-choice,\n.has-success .select2-choices {\n  border-color: #3c763d;\n}\n.has-success .select2-container-active .select2-choice,\n.has-success .select2-container-multi.select2-container-active .select2-choices {\n  border-color: #2b542c;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168;\n  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168;\n}\n.has-success.select2-drop-active {\n  border-color: #2b542c;\n}\n.has-success.select2-drop-active.select2-drop.select2-drop-above {\n  border-top-color: #2b542c;\n}\n\n/**\n * Make Select2's active-styles - applied to .select2-container when the widget receives focus -\n * fit Bootstrap 3's .form-element:focus appearance.\n */\n.select2-container-active .select2-choice,\n.select2-container-multi.select2-container-active .select2-choices {\n  border-color: #66afe9;\n  outline: none;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(102, 175, 233, 0.6);\n  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(102, 175, 233, 0.6);\n  -webkit-transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s;\n  -o-transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s;\n  transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s;\n}\n\n.select2-drop-active {\n  border-color: #66afe9;\n}\n\n.select2-drop-auto-width,\n.select2-drop.select2-drop-above.select2-drop-active {\n  border-top-color: #66afe9;\n}\n\n/**\n * Select2 widgets in Bootstrap Input Groups\n *\n * When Select2 widgets are combined with other elements using Bootstrap 3's\n * \"Input Group\" component, we don't want specific edges of the Select2 container\n * to have a border-radius.\n *\n * In Bootstrap 2, input groups required a markup where these style adjustments\n * could be bound to a CSS-class identifying if the additional elements are appended,\n * prepended or both.\n *\n * Bootstrap 3 doesn't rely on these classes anymore, so we have to use our own.\n * Use .select2-bootstrap-prepend and .select2-bootstrap-append on a Bootstrap 3 .input-group\n * to let the contained Select2 widget know which edges should not be rounded as they are\n * directly followed by another element.\n *\n * @see http://getbootstrap.com/components/#input-groups\n */\n.input-group.select2-bootstrap-prepend [class^=\"select2-choice\"] {\n  border-bottom-left-radius: 0 !important;\n  border-top-left-radius: 0 !important;\n}\n\n.input-group.select2-bootstrap-append [class^=\"select2-choice\"] {\n  border-bottom-right-radius: 0 !important;\n  border-top-right-radius: 0 !important;\n}\n\n.select2-dropdown-open [class^=\"select2-choice\"] {\n  border-bottom-right-radius: 0 !important;\n  border-bottom-left-radius: 0 !important;\n}\n\n.select2-dropdown-open.select2-drop-above [class^=\"select2-choice\"] {\n  border-top-right-radius: 0 !important;\n  border-top-left-radius: 0 !important;\n  border-bottom-right-radius: 4px !important;\n  border-bottom-left-radius: 4px !important;\n  background: white;\n  filter: none;\n}\n.input-group.select2-bootstrap-prepend .select2-dropdown-open.select2-drop-above [class^=\"select2-choice\"] {\n  border-bottom-left-radius: 0 !important;\n  border-top-left-radius: 0 !important;\n}\n.input-group.select2-bootstrap-append .select2-dropdown-open.select2-drop-above [class^=\"select2-choice\"] {\n  border-bottom-right-radius: 0 !important;\n  border-top-right-radius: 0 !important;\n}\n.input-group.input-group-sm.select2-bootstrap-prepend .select2-dropdown-open.select2-drop-above [class^=\"select2-choice\"] {\n  border-bottom-right-radius: 3px !important;\n}\n.input-group.input-group-lg.select2-bootstrap-prepend .select2-dropdown-open.select2-drop-above [class^=\"select2-choice\"] {\n  border-bottom-right-radius: 6px !important;\n}\n.input-group.input-group-sm.select2-bootstrap-append .select2-dropdown-open.select2-drop-above [class^=\"select2-choice\"] {\n  border-bottom-left-radius: 3px !important;\n}\n.input-group.input-group-lg.select2-bootstrap-append .select2-dropdown-open.select2-drop-above [class^=\"select2-choice\"] {\n  border-bottom-left-radius: 6px !important;\n}\n\n/**\n * Adjust Select2's choices hover and selected styles to match Bootstrap 3's default dropdown styles.\n */\n.select2-results .select2-highlighted {\n  color: white;\n  background-color: #337ab7;\n}\n\n/**\n * Adjust alignment of Bootstrap 3 buttons in Bootstrap 3 Input Groups to address\n * Multi Select2's height which - depending on how many elements have been selected -\n * may grown higher than their initial size.\n */\n.select2-bootstrap-append .select2-container-multiple,\n.select2-bootstrap-append .input-group-btn,\n.select2-bootstrap-append .input-group-btn .btn,\n.select2-bootstrap-prepend .select2-container-multiple,\n.select2-bootstrap-prepend .input-group-btn,\n.select2-bootstrap-prepend .input-group-btn .btn {\n  vertical-align: top;\n}\n\n/**\n * Make Multi Select2's choices match Bootstrap 3's default button styles.\n */\n.select2-container-multi .select2-choices .select2-search-choice {\n  color: #555555;\n  background: white;\n  border-color: #cccccc;\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n\n.select2-container-multi .select2-choices .select2-search-choice-focus {\n  background: #ebebeb;\n  border-color: #adadad;\n  color: #333333;\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n\n/**\n * Address Multi Select2's choice close-button vertical alignment.\n */\n.select2-search-choice-close {\n  margin-top: -7px;\n  top: 50%;\n}\n\n/**\n * Adjust the single Select2's clear button position (used to reset the select box\n * back to the placeholder value and visible once a selection is made\n * activated by Select2's \"allowClear\" option).\n */\n.select2-container .select2-choice abbr {\n  top: 50%;\n}\n\n/**\n * Adjust \"no results\" and \"selection limit\" messages to make use\n * of Bootstrap 3's default \"Alert\" style.\n *\n * @see http://getbootstrap.com/components/#alerts-default\n */\n.select2-results .select2-no-results,\n.select2-results .select2-searching,\n.select2-results .select2-selection-limit {\n  background-color: #fcf8e3;\n  color: #8a6d3b;\n}\n\n/**\n * Address disabled Select2 styles.\n *\n * 1. For Select2 v.3.3.2.\n * 2. Revert border-left:0 inherited from Select2's CSS to prevent the arrow\n *    from jumping when switching from disabled to enabled state and vice versa.\n */\n.select2-container.select2-container-disabled .select2-choice,\n.select2-container.select2-container-disabled .select2-choices {\n  cursor: not-allowed;\n  background-color: #eeeeee;\n  border-color: #cccccc;\n}\n.select2-container.select2-container-disabled .select2-choice .select2-arrow,\n.select2-container.select2-container-disabled .select2-choice div,\n.select2-container.select2-container-disabled .select2-choices .select2-arrow,\n.select2-container.select2-container-disabled .select2-choices div {\n  background-color: transparent;\n  border-left: 1px solid transparent;\n  /* 2 */\n}\n\n/**\n * Address Select2's loading indicator position - which should not stick\n * to the right edge of Select2's search input.\n *\n * 1. in .select2-search input\n * 2. in Multi Select2's .select2-search-field input\n * 3. in the status-message of infinite-scroll with remote data (@see http://ivaynberg.github.io/select2/#infinite)\n *\n * These styles alter Select2's default background-position of 100%\n * and supply the new background-position syntax to browsers which support it:\n *\n * 1. Android, Safari < 6/Mobile, IE<9: change to a relative background-position of 99%\n * 2. Chrome 25+, Firefox 13+, IE 9+, Opera 10.5+: use the new CSS3-background-position syntax\n *\n * @see http://www.w3.org/TR/css3-background/#background-position\n *\n * @todo Since both Select2 and Bootstrap 3 only support IE8 and above,\n * we could use the :after-pseudo-element to display the loading indicator.\n * Alternatively, we could supply an altered loading indicator image which already\n * contains an offset to the right.\n */\n.select2-search input.select2-active,\n.select2-container-multi .select2-choices .select2-search-field input.select2-active,\n.select2-more-results.select2-active {\n  background-position: 99%;\n  /* 4 */\n  background-position: right 4px center;\n  /* 5 */\n}\n\n/**\n * To support Select2 pre v3.4.2 in combination with Bootstrap v3.2.0,\n * ensure that .select2-offscreen width, height and position can not be overwritten.\n *\n * This adresses changes in Bootstrap somewhere after the initial v3.0.0 which -\n * in combination with Select2's pre-v3.4.2 CSS missing the \"!important\" after\n * the following rules - allow Bootstrap to overwrite the latter, which results in\n * the original <select> element Select2 is replacing not be properly being hidden\n * when used in a \"Bootstrap Input Group with Addon\".\n **/\n.select2-offscreen,\n.select2-offscreen:focus {\n  width: 1px !important;\n  height: 1px !important;\n  position: absolute !important;\n}\n"
  },
  {
    "path": "src/main/resources/static/js/adminlte.js",
    "content": "/*! AdminLTE app.js\n* ================\n* Main JS application file for AdminLTE v2. This file\n* should be included in all pages. It controls some layout\n* options and implements exclusive AdminLTE plugins.\n*\n* @Author  Almsaeed Studio\n* @Support <https://www.almsaeedstudio.com>\n* @Email   <abdullah@almsaeedstudio.com>\n* @version 2.4.5\n* @repository git://github.com/almasaeed2010/AdminLTE.git\n* @license MIT <http://opensource.org/licenses/MIT>\n*/\n\n// Make sure jQuery has been loaded\nif (typeof jQuery === 'undefined') {\nthrow new Error('AdminLTE requires jQuery')\n}\n\n/* BoxRefresh()\n * =========\n * Adds AJAX content control to a box.\n *\n * @Usage: $('#my-box').boxRefresh(options)\n *         or add [data-widget=\"box-refresh\"] to the box element\n *         Pass any option as data-option=\"value\"\n */\n+function ($) {\n  'use strict';\n\n  var DataKey = 'lte.boxrefresh';\n\n  var Default = {\n    source         : '',\n    params         : {},\n    trigger        : '.refresh-btn',\n    content        : '.box-body',\n    loadInContent  : true,\n    responseType   : '',\n    overlayTemplate: '<div class=\"overlay\"><div class=\"fa fa-refresh fa-spin\"></div></div>',\n    onLoadStart    : function () {\n    },\n    onLoadDone     : function (response) {\n      return response;\n    }\n  };\n\n  var Selector = {\n    data: '[data-widget=\"box-refresh\"]'\n  };\n\n  // BoxRefresh Class Definition\n  // =========================\n  var BoxRefresh = function (element, options) {\n    this.element  = element;\n    this.options  = options;\n    this.$overlay = $(options.overlay);\n\n    if (options.source === '') {\n      throw new Error('Source url was not defined. Please specify a url in your BoxRefresh source option.');\n    }\n\n    this._setUpListeners();\n    this.load();\n  };\n\n  BoxRefresh.prototype.load = function () {\n    this._addOverlay();\n    this.options.onLoadStart.call($(this));\n\n    $.get(this.options.source, this.options.params, function (response) {\n      if (this.options.loadInContent) {\n        $(this.options.content).html(response);\n      }\n      this.options.onLoadDone.call($(this), response);\n      this._removeOverlay();\n    }.bind(this), this.options.responseType !== '' && this.options.responseType);\n  };\n\n  // Private\n\n  BoxRefresh.prototype._setUpListeners = function () {\n    $(this.element).on('click', Selector.trigger, function (event) {\n      if (event) event.preventDefault();\n      this.load();\n    }.bind(this));\n  };\n\n  BoxRefresh.prototype._addOverlay = function () {\n    $(this.element).append(this.$overlay);\n  };\n\n  BoxRefresh.prototype._removeOverlay = function () {\n    $(this.element).remove(this.$overlay);\n  };\n\n  // Plugin Definition\n  // =================\n  function Plugin(option) {\n    return this.each(function () {\n      var $this = $(this);\n      var data  = $this.data(DataKey);\n\n      if (!data) {\n        var options = $.extend({}, Default, $this.data(), typeof option == 'object' && option);\n        $this.data(DataKey, (data = new BoxRefresh($this, options)));\n      }\n\n      if (typeof data == 'string') {\n        if (typeof data[option] == 'undefined') {\n          throw new Error('No method named ' + option);\n        }\n        data[option]();\n      }\n    });\n  }\n\n  var old = $.fn.boxRefresh;\n\n  $.fn.boxRefresh             = Plugin;\n  $.fn.boxRefresh.Constructor = BoxRefresh;\n\n  // No Conflict Mode\n  // ================\n  $.fn.boxRefresh.noConflict = function () {\n    $.fn.boxRefresh = old;\n    return this;\n  };\n\n  // BoxRefresh Data API\n  // =================\n  $(window).on('load', function () {\n    $(Selector.data).each(function () {\n      Plugin.call($(this));\n    });\n  });\n\n}(jQuery);\n\n\n/* BoxWidget()\n * ======\n * Adds box widget functions to boxes.\n *\n * @Usage: $('.my-box').boxWidget(options)\n *         This plugin auto activates on any element using the `.box` class\n *         Pass any option as data-option=\"value\"\n */\n+function ($) {\n  'use strict';\n\n  var DataKey = 'lte.boxwidget';\n\n  var Default = {\n    animationSpeed : 500,\n    collapseTrigger: '[data-widget=\"collapse\"]',\n    removeTrigger  : '[data-widget=\"remove\"]',\n    collapseIcon   : 'fa-minus',\n    expandIcon     : 'fa-plus',\n    removeIcon     : 'fa-times'\n  };\n\n  var Selector = {\n    data     : '.box',\n    collapsed: '.collapsed-box',\n    header   : '.box-header',\n    body     : '.box-body',\n    footer   : '.box-footer',\n    tools    : '.box-tools'\n  };\n\n  var ClassName = {\n    collapsed: 'collapsed-box'\n  };\n\n  var Event = {\n    collapsed: 'collapsed.boxwidget',\n    expanded : 'expanded.boxwidget',\n    removed  : 'removed.boxwidget'\n  };\n\n  // BoxWidget Class Definition\n  // =====================\n  var BoxWidget = function (element, options) {\n    this.element = element;\n    this.options = options;\n\n    this._setUpListeners();\n  };\n\n  BoxWidget.prototype.toggle = function () {\n    var isOpen = !$(this.element).is(Selector.collapsed);\n\n    if (isOpen) {\n      this.collapse();\n    } else {\n      this.expand();\n    }\n  };\n\n  BoxWidget.prototype.expand = function () {\n    var expandedEvent = $.Event(Event.expanded);\n    var collapseIcon  = this.options.collapseIcon;\n    var expandIcon    = this.options.expandIcon;\n\n    $(this.element).removeClass(ClassName.collapsed);\n\n    $(this.element)\n      .children(Selector.header + ', ' + Selector.body + ', ' + Selector.footer)\n      .children(Selector.tools)\n      .find('.' + expandIcon)\n      .removeClass(expandIcon)\n      .addClass(collapseIcon);\n\n    $(this.element).children(Selector.body + ', ' + Selector.footer)\n      .slideDown(this.options.animationSpeed, function () {\n        $(this.element).trigger(expandedEvent);\n      }.bind(this));\n  };\n\n  BoxWidget.prototype.collapse = function () {\n    var collapsedEvent = $.Event(Event.collapsed);\n    var collapseIcon   = this.options.collapseIcon;\n    var expandIcon     = this.options.expandIcon;\n\n    $(this.element)\n      .children(Selector.header + ', ' + Selector.body + ', ' + Selector.footer)\n      .children(Selector.tools)\n      .find('.' + collapseIcon)\n      .removeClass(collapseIcon)\n      .addClass(expandIcon);\n\n    $(this.element).children(Selector.body + ', ' + Selector.footer)\n      .slideUp(this.options.animationSpeed, function () {\n        $(this.element).addClass(ClassName.collapsed);\n        $(this.element).trigger(collapsedEvent);\n      }.bind(this));\n  };\n\n  BoxWidget.prototype.remove = function () {\n    var removedEvent = $.Event(Event.removed);\n\n    $(this.element).slideUp(this.options.animationSpeed, function () {\n      $(this.element).trigger(removedEvent);\n      $(this.element).remove();\n    }.bind(this));\n  };\n\n  // Private\n\n  BoxWidget.prototype._setUpListeners = function () {\n    var that = this;\n\n    $(this.element).on('click', this.options.collapseTrigger, function (event) {\n      if (event) event.preventDefault();\n      that.toggle($(this));\n      return false;\n    });\n\n    $(this.element).on('click', this.options.removeTrigger, function (event) {\n      if (event) event.preventDefault();\n      that.remove($(this));\n      return false;\n    });\n  };\n\n  // Plugin Definition\n  // =================\n  function Plugin(option) {\n    return this.each(function () {\n      var $this = $(this);\n      var data  = $this.data(DataKey);\n\n      if (!data) {\n        var options = $.extend({}, Default, $this.data(), typeof option == 'object' && option);\n        $this.data(DataKey, (data = new BoxWidget($this, options)));\n      }\n\n      if (typeof option == 'string') {\n        if (typeof data[option] == 'undefined') {\n          throw new Error('No method named ' + option);\n        }\n        data[option]();\n      }\n    });\n  }\n\n  var old = $.fn.boxWidget;\n\n  $.fn.boxWidget             = Plugin;\n  $.fn.boxWidget.Constructor = BoxWidget;\n\n  // No Conflict Mode\n  // ================\n  $.fn.boxWidget.noConflict = function () {\n    $.fn.boxWidget = old;\n    return this;\n  };\n\n  // BoxWidget Data API\n  // ==================\n  $(window).on('load', function () {\n    $(Selector.data).each(function () {\n      Plugin.call($(this));\n    });\n  });\n}(jQuery);\n\n\n/* ControlSidebar()\n * ===============\n * Toggles the state of the control sidebar\n *\n * @Usage: $('#control-sidebar-trigger').controlSidebar(options)\n *         or add [data-toggle=\"control-sidebar\"] to the trigger\n *         Pass any option as data-option=\"value\"\n */\n+function ($) {\n  'use strict';\n\n  var DataKey = 'lte.controlsidebar';\n\n  var Default = {\n    slide: true\n  };\n\n  var Selector = {\n    sidebar: '.control-sidebar',\n    data   : '[data-toggle=\"control-sidebar\"]',\n    open   : '.control-sidebar-open',\n    bg     : '.control-sidebar-bg',\n    wrapper: '.wrapper',\n    content: '.content-wrapper',\n    boxed  : '.layout-boxed'\n  };\n\n  var ClassName = {\n    open : 'control-sidebar-open',\n    fixed: 'fixed'\n  };\n\n  var Event = {\n    collapsed: 'collapsed.controlsidebar',\n    expanded : 'expanded.controlsidebar'\n  };\n\n  // ControlSidebar Class Definition\n  // ===============================\n  var ControlSidebar = function (element, options) {\n    this.element         = element;\n    this.options         = options;\n    this.hasBindedResize = false;\n\n    this.init();\n  };\n\n  ControlSidebar.prototype.init = function () {\n    // Add click listener if the element hasn't been\n    // initialized using the data API\n    if (!$(this.element).is(Selector.data)) {\n      $(this).on('click', this.toggle);\n    }\n\n    this.fix();\n    $(window).resize(function () {\n      this.fix();\n    }.bind(this));\n  };\n\n  ControlSidebar.prototype.toggle = function (event) {\n    if (event) event.preventDefault();\n\n    this.fix();\n\n    if (!$(Selector.sidebar).is(Selector.open) && !$('body').is(Selector.open)) {\n      this.expand();\n    } else {\n      this.collapse();\n    }\n  };\n\n  ControlSidebar.prototype.expand = function () {\n    if (!this.options.slide) {\n      $('body').addClass(ClassName.open);\n    } else {\n      $(Selector.sidebar).addClass(ClassName.open);\n    }\n\n    $(this.element).trigger($.Event(Event.expanded));\n  };\n\n  ControlSidebar.prototype.collapse = function () {\n    $('body, ' + Selector.sidebar).removeClass(ClassName.open);\n    $(this.element).trigger($.Event(Event.collapsed));\n  };\n\n  ControlSidebar.prototype.fix = function () {\n    if ($('body').is(Selector.boxed)) {\n      this._fixForBoxed($(Selector.bg));\n    }\n  };\n\n  // Private\n\n  ControlSidebar.prototype._fixForBoxed = function (bg) {\n    bg.css({\n      position: 'absolute',\n      height  : $(Selector.wrapper).height()\n    });\n  };\n\n  // Plugin Definition\n  // =================\n  function Plugin(option) {\n    return this.each(function () {\n      var $this = $(this);\n      var data  = $this.data(DataKey);\n\n      if (!data) {\n        var options = $.extend({}, Default, $this.data(), typeof option == 'object' && option);\n        $this.data(DataKey, (data = new ControlSidebar($this, options)));\n      }\n\n      if (typeof option == 'string') data.toggle();\n    });\n  }\n\n  var old = $.fn.controlSidebar;\n\n  $.fn.controlSidebar             = Plugin;\n  $.fn.controlSidebar.Constructor = ControlSidebar;\n\n  // No Conflict Mode\n  // ================\n  $.fn.controlSidebar.noConflict = function () {\n    $.fn.controlSidebar = old;\n    return this;\n  };\n\n  // ControlSidebar Data API\n  // =======================\n  $(document).on('click', Selector.data, function (event) {\n    if (event) event.preventDefault();\n    Plugin.call($(this), 'toggle');\n  });\n\n}(jQuery);\n\n\n/* DirectChat()\n * ===============\n * Toggles the state of the control sidebar\n *\n * @Usage: $('#my-chat-box').directChat()\n *         or add [data-widget=\"direct-chat\"] to the trigger\n */\n+function ($) {\n  'use strict';\n\n  var DataKey = 'lte.directchat';\n\n  var Selector = {\n    data: '[data-widget=\"chat-pane-toggle\"]',\n    box : '.direct-chat'\n  };\n\n  var ClassName = {\n    open: 'direct-chat-contacts-open'\n  };\n\n  // DirectChat Class Definition\n  // ===========================\n  var DirectChat = function (element) {\n    this.element = element;\n  };\n\n  DirectChat.prototype.toggle = function ($trigger) {\n    $trigger.parents(Selector.box).first().toggleClass(ClassName.open);\n  };\n\n  // Plugin Definition\n  // =================\n  function Plugin(option) {\n    return this.each(function () {\n      var $this = $(this);\n      var data  = $this.data(DataKey);\n\n      if (!data) {\n        $this.data(DataKey, (data = new DirectChat($this)));\n      }\n\n      if (typeof option == 'string') data.toggle($this);\n    });\n  }\n\n  var old = $.fn.directChat;\n\n  $.fn.directChat             = Plugin;\n  $.fn.directChat.Constructor = DirectChat;\n\n  // No Conflict Mode\n  // ================\n  $.fn.directChat.noConflict = function () {\n    $.fn.directChat = old;\n    return this;\n  };\n\n  // DirectChat Data API\n  // ===================\n  $(document).on('click', Selector.data, function (event) {\n    if (event) event.preventDefault();\n    Plugin.call($(this), 'toggle');\n  });\n\n}(jQuery);\n\n\n/* Layout()\n * ========\n * Implements AdminLTE layout.\n * Fixes the layout height in case min-height fails.\n *\n * @usage activated automatically upon window load.\n *        Configure any options by passing data-option=\"value\"\n *        to the body tag.\n */\n+function ($) {\n  'use strict';\n\n  var DataKey = 'lte.layout';\n\n  var Default = {\n    slimscroll : true,\n    resetHeight: true\n  };\n\n  var Selector = {\n    wrapper       : '.wrapper',\n    contentWrapper: '.content-wrapper',\n    layoutBoxed   : '.layout-boxed',\n    mainFooter    : '.main-footer',\n    mainHeader    : '.main-header',\n    sidebar       : '.sidebar',\n    controlSidebar: '.control-sidebar',\n    fixed         : '.fixed',\n    sidebarMenu   : '.sidebar-menu',\n    logo          : '.main-header .logo'\n  };\n\n  var ClassName = {\n    fixed         : 'fixed',\n    holdTransition: 'hold-transition'\n  };\n\n  var Layout = function (options) {\n    this.options      = options;\n    this.bindedResize = false;\n    this.activate();\n  };\n\n  Layout.prototype.activate = function () {\n    this.fix();\n    this.fixSidebar();\n\n    $('body').removeClass(ClassName.holdTransition);\n\n    if (this.options.resetHeight) {\n      $('body, html, ' + Selector.wrapper).css({\n        'height'    : 'auto',\n        'min-height': '100%'\n      });\n    }\n\n    if (!this.bindedResize) {\n      $(window).resize(function () {\n        this.fix();\n        this.fixSidebar();\n\n        $(Selector.logo + ', ' + Selector.sidebar).one('webkitTransitionEnd otransitionend oTransitionEnd msTransitionEnd transitionend', function () {\n          this.fix();\n          this.fixSidebar();\n        }.bind(this));\n      }.bind(this));\n\n      this.bindedResize = true;\n    }\n\n    $(Selector.sidebarMenu).on('expanded.tree', function () {\n      this.fix();\n      this.fixSidebar();\n    }.bind(this));\n\n    $(Selector.sidebarMenu).on('collapsed.tree', function () {\n      this.fix();\n      this.fixSidebar();\n    }.bind(this));\n  };\n\n  Layout.prototype.fix = function () {\n    // Remove overflow from .wrapper if layout-boxed exists\n    $(Selector.layoutBoxed + ' > ' + Selector.wrapper).css('overflow', 'hidden');\n\n    // Get window height and the wrapper height\n    var footerHeight = $(Selector.mainFooter).outerHeight() || 0;\n    var headerHeight  = $(Selector.mainHeader).outerHeight() || 0;\n    var neg           = headerHeight + footerHeight;\n    var windowHeight  = $(window).height();\n    var sidebarHeight = $(Selector.sidebar).height() || 0;\n\n    // Set the min-height of the content and sidebar based on\n    // the height of the document.\n    if ($('body').hasClass(ClassName.fixed)) {\n      $(Selector.contentWrapper).css('min-height', windowHeight - footerHeight);\n    } else {\n      var postSetHeight;\n\n      if (windowHeight >= sidebarHeight) {\n        $(Selector.contentWrapper).css('min-height', windowHeight - neg);\n        postSetHeight = windowHeight - neg;\n      } else {\n        $(Selector.contentWrapper).css('min-height', sidebarHeight);\n        postSetHeight = sidebarHeight;\n      }\n\n      // Fix for the control sidebar height\n      var $controlSidebar = $(Selector.controlSidebar);\n      if (typeof $controlSidebar !== 'undefined') {\n        if ($controlSidebar.height() > postSetHeight)\n          $(Selector.contentWrapper).css('min-height', $controlSidebar.height());\n      }\n    }\n  };\n\n  Layout.prototype.fixSidebar = function () {\n    // Make sure the body tag has the .fixed class\n    if (!$('body').hasClass(ClassName.fixed)) {\n      if (typeof $.fn.slimScroll !== 'undefined') {\n        $(Selector.sidebar).slimScroll({ destroy: true }).height('auto');\n      }\n      return;\n    }\n\n    // Enable slimscroll for fixed layout\n    if (this.options.slimscroll) {\n      if (typeof $.fn.slimScroll !== 'undefined') {\n        // Destroy if it exists\n        // $(Selector.sidebar).slimScroll({ destroy: true }).height('auto')\n\n        // Add slimscroll\n        $(Selector.sidebar).slimScroll({\n          height: ($(window).height() - $(Selector.mainHeader).height()) + 'px'\n        });\n      }\n    }\n  };\n\n  // Plugin Definition\n  // =================\n  function Plugin(option) {\n    return this.each(function () {\n      var $this = $(this);\n      var data  = $this.data(DataKey);\n\n      if (!data) {\n        var options = $.extend({}, Default, $this.data(), typeof option === 'object' && option);\n        $this.data(DataKey, (data = new Layout(options)));\n      }\n\n      if (typeof option === 'string') {\n        if (typeof data[option] === 'undefined') {\n          throw new Error('No method named ' + option);\n        }\n        data[option]();\n      }\n    });\n  }\n\n  var old = $.fn.layout;\n\n  $.fn.layout            = Plugin;\n  $.fn.layout.Constuctor = Layout;\n\n  // No conflict mode\n  // ================\n  $.fn.layout.noConflict = function () {\n    $.fn.layout = old;\n    return this;\n  };\n\n  // Layout DATA-API\n  // ===============\n  $(window).on('load', function () {\n    Plugin.call($('body'));\n  });\n}(jQuery);\n\n\n/* PushMenu()\n * ==========\n * Adds the push menu functionality to the sidebar.\n *\n * @usage: $('.btn').pushMenu(options)\n *          or add [data-toggle=\"push-menu\"] to any button\n *          Pass any option as data-option=\"value\"\n */\n+function ($) {\n  'use strict';\n\n  var DataKey = 'lte.pushmenu';\n\n  var Default = {\n    collapseScreenSize   : 767,\n    expandOnHover        : false,\n    expandTransitionDelay: 200\n  };\n\n  var Selector = {\n    collapsed     : '.sidebar-collapse',\n    open          : '.sidebar-open',\n    mainSidebar   : '.main-sidebar',\n    contentWrapper: '.content-wrapper',\n    searchInput   : '.sidebar-form .form-control',\n    button        : '[data-toggle=\"push-menu\"]',\n    mini          : '.sidebar-mini',\n    expanded      : '.sidebar-expanded-on-hover',\n    layoutFixed   : '.fixed'\n  };\n\n  var ClassName = {\n    collapsed    : 'sidebar-collapse',\n    open         : 'sidebar-open',\n    mini         : 'sidebar-mini',\n    expanded     : 'sidebar-expanded-on-hover',\n    expandFeature: 'sidebar-mini-expand-feature',\n    layoutFixed  : 'fixed'\n  };\n\n  var Event = {\n    expanded : 'expanded.pushMenu',\n    collapsed: 'collapsed.pushMenu'\n  };\n\n  // PushMenu Class Definition\n  // =========================\n  var PushMenu = function (options) {\n    this.options = options;\n    this.init();\n  };\n\n  PushMenu.prototype.init = function () {\n    if (this.options.expandOnHover\n      || ($('body').is(Selector.mini + Selector.layoutFixed))) {\n      this.expandOnHover();\n      $('body').addClass(ClassName.expandFeature);\n    }\n\n    $(Selector.contentWrapper).click(function () {\n      // Enable hide menu when clicking on the content-wrapper on small screens\n      if ($(window).width() <= this.options.collapseScreenSize && $('body').hasClass(ClassName.open)) {\n        this.close();\n      }\n    }.bind(this));\n\n    // __Fix for android devices\n    $(Selector.searchInput).click(function (e) {\n      e.stopPropagation();\n    });\n  };\n\n  PushMenu.prototype.toggle = function () {\n    var windowWidth = $(window).width();\n    var isOpen      = !$('body').hasClass(ClassName.collapsed);\n\n    if (windowWidth <= this.options.collapseScreenSize) {\n      isOpen = $('body').hasClass(ClassName.open);\n    }\n\n    if (!isOpen) {\n      this.open();\n    } else {\n      this.close();\n    }\n  };\n\n  PushMenu.prototype.open = function () {\n    var windowWidth = $(window).width();\n\n    if (windowWidth > this.options.collapseScreenSize) {\n      $('body').removeClass(ClassName.collapsed)\n        .trigger($.Event(Event.expanded));\n    }\n    else {\n      $('body').addClass(ClassName.open)\n        .trigger($.Event(Event.expanded));\n    }\n  };\n\n  PushMenu.prototype.close = function () {\n    var windowWidth = $(window).width();\n    if (windowWidth > this.options.collapseScreenSize) {\n      $('body').addClass(ClassName.collapsed)\n        .trigger($.Event(Event.collapsed));\n    } else {\n      $('body').removeClass(ClassName.open + ' ' + ClassName.collapsed)\n        .trigger($.Event(Event.collapsed));\n    }\n  };\n\n  PushMenu.prototype.expandOnHover = function () {\n    $(Selector.mainSidebar).hover(function () {\n      if ($('body').is(Selector.mini + Selector.collapsed)\n        && $(window).width() > this.options.collapseScreenSize) {\n        this.expand();\n      }\n    }.bind(this), function () {\n      if ($('body').is(Selector.expanded)) {\n        this.collapse();\n      }\n    }.bind(this));\n  };\n\n  PushMenu.prototype.expand = function () {\n    setTimeout(function () {\n      $('body').removeClass(ClassName.collapsed)\n        .addClass(ClassName.expanded);\n    }, this.options.expandTransitionDelay);\n  };\n\n  PushMenu.prototype.collapse = function () {\n    setTimeout(function () {\n      $('body').removeClass(ClassName.expanded)\n        .addClass(ClassName.collapsed);\n    }, this.options.expandTransitionDelay);\n  };\n\n  // PushMenu Plugin Definition\n  // ==========================\n  function Plugin(option) {\n    return this.each(function () {\n      var $this = $(this);\n      var data  = $this.data(DataKey);\n\n      if (!data) {\n        var options = $.extend({}, Default, $this.data(), typeof option == 'object' && option);\n        $this.data(DataKey, (data = new PushMenu(options)));\n      }\n\n      if (option === 'toggle') data.toggle();\n    });\n  }\n\n  var old = $.fn.pushMenu;\n\n  $.fn.pushMenu             = Plugin;\n  $.fn.pushMenu.Constructor = PushMenu;\n\n  // No Conflict Mode\n  // ================\n  $.fn.pushMenu.noConflict = function () {\n    $.fn.pushMenu = old;\n    return this;\n  };\n\n  // Data API\n  // ========\n  $(document).on('click', Selector.button, function (e) {\n    e.preventDefault();\n    Plugin.call($(this), 'toggle');\n  });\n  $(window).on('load', function () {\n    Plugin.call($(Selector.button));\n  });\n}(jQuery);\n\n\n/* TodoList()\n * =========\n * Converts a list into a todoList.\n *\n * @Usage: $('.my-list').todoList(options)\n *         or add [data-widget=\"todo-list\"] to the ul element\n *         Pass any option as data-option=\"value\"\n */\n+function ($) {\n  'use strict';\n\n  var DataKey = 'lte.todolist';\n\n  var Default = {\n    onCheck  : function (item) {\n      return item;\n    },\n    onUnCheck: function (item) {\n      return item;\n    }\n  };\n\n  var Selector = {\n    data: '[data-widget=\"todo-list\"]'\n  };\n\n  var ClassName = {\n    done: 'done'\n  };\n\n  // TodoList Class Definition\n  // =========================\n  var TodoList = function (element, options) {\n    this.element = element;\n    this.options = options;\n\n    this._setUpListeners();\n  };\n\n  TodoList.prototype.toggle = function (item) {\n    item.parents(Selector.li).first().toggleClass(ClassName.done);\n    if (!item.prop('checked')) {\n      this.unCheck(item);\n      return;\n    }\n\n    this.check(item);\n  };\n\n  TodoList.prototype.check = function (item) {\n    this.options.onCheck.call(item);\n  };\n\n  TodoList.prototype.unCheck = function (item) {\n    this.options.onUnCheck.call(item);\n  };\n\n  // Private\n\n  TodoList.prototype._setUpListeners = function () {\n    var that = this;\n    $(this.element).on('change ifChanged', 'input:checkbox', function () {\n      that.toggle($(this));\n    });\n  };\n\n  // Plugin Definition\n  // =================\n  function Plugin(option) {\n    return this.each(function () {\n      var $this = $(this);\n      var data  = $this.data(DataKey);\n\n      if (!data) {\n        var options = $.extend({}, Default, $this.data(), typeof option == 'object' && option);\n        $this.data(DataKey, (data = new TodoList($this, options)));\n      }\n\n      if (typeof data == 'string') {\n        if (typeof data[option] == 'undefined') {\n          throw new Error('No method named ' + option);\n        }\n        data[option]();\n      }\n    });\n  }\n\n  var old = $.fn.todoList;\n\n  $.fn.todoList             = Plugin;\n  $.fn.todoList.Constructor = TodoList;\n\n  // No Conflict Mode\n  // ================\n  $.fn.todoList.noConflict = function () {\n    $.fn.todoList = old;\n    return this;\n  };\n\n  // TodoList Data API\n  // =================\n  $(window).on('load', function () {\n    $(Selector.data).each(function () {\n      Plugin.call($(this));\n    });\n  });\n\n}(jQuery);\n\n\n/* Tree()\n * ======\n * Converts a nested list into a multilevel\n * tree view menu.\n *\n * @Usage: $('.my-menu').tree(options)\n *         or add [data-widget=\"tree\"] to the ul element\n *         Pass any option as data-option=\"value\"\n */\n+function ($) {\n  'use strict';\n\n  var DataKey = 'lte.tree';\n\n  var Default = {\n    animationSpeed: 500,\n    accordion     : true,\n    followLink    : false,\n    trigger       : '.treeview a'\n  };\n\n  var Selector = {\n    tree        : '.tree',\n    treeview    : '.treeview',\n    treeviewMenu: '.treeview-menu',\n    open        : '.menu-open, .active',\n    li          : 'li',\n    data        : '[data-widget=\"tree\"]',\n    active      : '.active'\n  };\n\n  var ClassName = {\n    open: 'menu-open',\n    tree: 'tree'\n  };\n\n  var Event = {\n    collapsed: 'collapsed.tree',\n    expanded : 'expanded.tree'\n  };\n\n  // Tree Class Definition\n  // =====================\n  var Tree = function (element, options) {\n    this.element = element;\n    this.options = options;\n\n    $(this.element).addClass(ClassName.tree);\n\n    $(Selector.treeview + Selector.active, this.element).addClass(ClassName.open);\n\n    this._setUpListeners();\n  };\n\n  Tree.prototype.toggle = function (link, event) {\n    var treeviewMenu = link.next(Selector.treeviewMenu);\n    var parentLi     = link.parent();\n    var isOpen       = parentLi.hasClass(ClassName.open);\n\n    if (!parentLi.is(Selector.treeview)) {\n      return;\n    }\n\n    if (!this.options.followLink || link.attr('href') === '#') {\n      event.preventDefault();\n    }\n\n    if (isOpen) {\n      this.collapse(treeviewMenu, parentLi);\n    } else {\n      this.expand(treeviewMenu, parentLi);\n    }\n  };\n\n  Tree.prototype.expand = function (tree, parent) {\n    var expandedEvent = $.Event(Event.expanded);\n\n    if (this.options.accordion) {\n      var openMenuLi = parent.siblings(Selector.open);\n      var openTree   = openMenuLi.children(Selector.treeviewMenu);\n      this.collapse(openTree, openMenuLi);\n    }\n\n    parent.addClass(ClassName.open);\n    tree.slideDown(this.options.animationSpeed, function () {\n      $(this.element).trigger(expandedEvent);\n    }.bind(this));\n  };\n\n  Tree.prototype.collapse = function (tree, parentLi) {\n    var collapsedEvent = $.Event(Event.collapsed);\n\n    //tree.find(Selector.open).removeClass(ClassName.open);\n    parentLi.removeClass(ClassName.open);\n    tree.slideUp(this.options.animationSpeed, function () {\n      //tree.find(Selector.open + ' > ' + Selector.treeview).slideUp();\n      $(this.element).trigger(collapsedEvent);\n    }.bind(this));\n  };\n\n  // Private\n\n  Tree.prototype._setUpListeners = function () {\n    var that = this;\n\n    $(this.element).on('click', this.options.trigger, function (event) {\n      that.toggle($(this), event);\n    });\n  };\n\n  // Plugin Definition\n  // =================\n  function Plugin(option) {\n    return this.each(function () {\n      var $this = $(this);\n      var data  = $this.data(DataKey);\n\n      if (!data) {\n        var options = $.extend({}, Default, $this.data(), typeof option == 'object' && option);\n        $this.data(DataKey, new Tree($this, options));\n      }\n    });\n  }\n\n  var old = $.fn.tree;\n\n  $.fn.tree             = Plugin;\n  $.fn.tree.Constructor = Tree;\n\n  // No Conflict Mode\n  // ================\n  $.fn.tree.noConflict = function () {\n    $.fn.tree = old;\n    return this;\n  };\n\n  // Tree Data API\n  // =============\n  $(window).on('load', function () {\n    $(Selector.data).each(function () {\n      Plugin.call($(this));\n    });\n  });\n\n}(jQuery);\n"
  },
  {
    "path": "src/main/resources/static/js/app.js",
    "content": "function initMenus() {\n    $.ajax({\n        type: 'GET',\n        url: '/admin/currentMenus',\n        async: false,\n        success: function (data) {\n            if (data.code == 0) {\n                showMsg(data.msg, \"error\", 1000);\n            } else {\n                var content = ' <li class=\"header\">HEADER</li>';\n                $.each(data.result, function (index, value) {\n                    if (value.childPermissions != null) {\n                        content += '<li class=\"treeview\">' +\n                            '   <a data-pjax=\"true\" href=\"' + value.url + '\">' +\n                            '   <i class=\"' + value.icon + '\"></i>' +\n                            '   <span>' + value.name + '</span>' +\n                            '   <span class=\"pull-right-container\"><i class=\"fa fa-angle-left pull-right\"></i></span>' +\n                            '   </a>';\n                        content += '<ul class=\"treeview-menu\">';\n                        $.each(value.childPermissions, function (index2, value2) {\n                            content +=\n                                '    <li>' +\n                                '        <a data-pjax=\"true\" href=\"' + value2.url + '\">' +\n                                '            <i class=\"' + value2.icon + '\"></i>' + value2.name +\n                                '        </a>' +\n                                '     </li>';\n                        });\n                        content += '</ul></li>';\n\n                    } else {\n                        content += '<li>' +\n                            '   <a data-pjax=\"true\" href=\"' + value.url + '\">' +\n                            '   <i class=\"' + value.icon + '\"></i>' +\n                            '   <span>' + value.name + '</span>' +\n                            '   </a>' +\n                            '</li>';\n                    }\n                    ;\n                })\n                $('.sidebar-menu').html(content);\n            }\n\n        }\n    });\n}\n\nfunction getLoginUser() {\n    $.ajax({\n        type: 'GET',\n        url: '/admin/currentUser',\n        async: false,\n        success: function (data) {\n            if (data.code == 0) {\n                showMsg(data.msg, \"error\", 1000);\n            } else {\n                var user = data.result;\n                $(\".loginUserAvatar\").attr(\"src\", user.userAvatar);\n                $(\".loginUserDisplayName\").html(user.userDisplayName);\n            }\n\n        }\n    });\n};\n\ninitMenus();\ngetLoginUser();\n\n$(document).ready(function () {\n    if ($(window).width() < 1024) {\n        if ($('body').hasClass('layout-boxed')) {\n            $('body').removeClass('layout-boxed');\n        }\n        if ($('body').hasClass('sidebar-collapse')) {\n            $('body').removeClass('sidebar-collapse');\n        }\n    }\n    initMenu();\n});\n\n/**\n * https://github.com/JpressProjects/jpress/blob/master/jpress-web/src/main/resources/static/admin/js/jpressadmin.js\n */\nfunction initMenu() {\n    var pathName = location.pathname;\n    $(\".sidebar-menu\").children().each(function () {\n        var li = $(this);\n        li.find('a').each(function () {\n            var href = $(this).attr(\"href\");\n            if (pathName == href) {\n                li.addClass(\"active\");\n                $(this).parent().addClass(\"active\");\n            } else {\n                //li.removeClass(\"active\");\n                $(this).parent().removeClass(\"active\");\n            }\n        });\n    });\n}\n\n\n$(document).on('pjax:clicked', function () {\n    $('.content-wrapper').html(\"\");\n});\n\n$(document).on('pjax:complete', function () {\n    initMenu();\n});\n\n/**\n * 提示框\n * @param text\n * @param icon\n * @param hideAfter\n */\nfunction showMsg(text, icon, hideAfter) {\n    if (heading == undefined) {\n        var heading = \"提示\";\n    }\n    $.toast({\n        text: text,\n        heading: heading,\n        icon: icon,\n        showHideTransition: 'fade',\n        allowToastClose: true,\n        hideAfter: hideAfter,\n        stack: 1,\n        position: 'top-center',\n        textAlign: 'left',\n        loader: true,\n        loaderBg: '#ffffff'\n    });\n}\n\nfunction showMsgAndReload(text, icon, hideAfter) {\n    if (heading == undefined) {\n        var heading = \"提示\";\n    }\n    $.toast({\n        text: text,\n        heading: heading,\n        icon: icon,\n        showHideTransition: 'fade',\n        allowToastClose: true,\n        hideAfter: hideAfter,\n        stack: 1,\n        position: 'top-center',\n        textAlign: 'left',\n        loader: true,\n        loaderBg: '#ffffff',\n        afterHidden: function () {\n            window.location.reload();\n        }\n    });\n}\n\nfunction showMsgAndRedirect(text, icon, hideAfter, redirectUrl) {\n    if (heading == undefined) {\n        var heading = \"提示\";\n    }\n    $.toast({\n        text: text,\n        heading: heading,\n        icon: icon,\n        showHideTransition: 'fade',\n        allowToastClose: true,\n        hideAfter: hideAfter,\n        stack: 1,\n        position: 'top-center',\n        textAlign: 'left',\n        loader: true,\n        loaderBg: '#ffffff',\n        afterHidden: function () {\n            window.location.href = redirectUrl;\n        }\n    });\n}\n\n\n/**\n * 全选和反选\n * @constructor\n */\nfunction doCheck() {\n    var ch = document.getElementsByName(\"ids\");\n    if (document.getElementById(\"allSelect\").checked == true) {\n        for (var i = 0; i < ch.length; i++) {\n            ch[i].checked = true;\n        }\n    } else {\n        for (var i = 0; i < ch.length; i++) {\n            ch[i].checked = false;\n        }\n    }\n}\n\n/**\n * 提交房屋\n * @param status 房屋状态\n */\nfunction push(status) {\n    const id = $('#postId').val();\n    const postTitle = $('#postTitle').val();\n    const cateId = $('#cateId').val();\n    const postThumbnail = $('#postThumbnail').val();\n    const price = $('#price').val();\n    const postEditor = $(\"#edit\").froalaEditor('html.get');\n    const postContent = $(\"#postContent\").froalaEditor('html.get');\n    const number = $('#number').val();\n    const cityId = $('#cityId').val();\n    const roomCount = $('#roomCount').val();\n    const toiletCount = $('#toiletCount').val();\n    const deposit = $('#deposit').val();\n    const area = $('#area').val();\n    if (postTitle == null || cateId == null || cateId == null ||\n        postThumbnail == null || price == null || postContent == null ||\n        number == null || postEditor == null || cityId == null ||\n        roomCount == null || toiletCount == null || area == null || deposit == null) {\n        showMsg(\"请输入完整信息\", \"info\", 2000);\n        return;\n    }\n\n    $.ajax({\n        type: 'POST',\n        url: '/admin/post/save',\n        async: false,\n        data: {\n            'id': id,\n            'postStatus': status,\n            'postTitle': postTitle,\n            'postContent': postContent,\n            'cateId': cateId,\n            'postThumbnail': postThumbnail,\n            'price': price,\n            'number': number,\n            'cityId': cityId,\n            'roomCount': roomCount,\n            'toiletCount': toiletCount,\n            'area': area,\n            'deposit': deposit,\n            'postEditor': postEditor\n        },\n        success: function (data) {\n            if (data.code == 1) {\n                showMsgAndRedirect(\"发布成功\", \"success\", 1000, \"/admin/post/lease\");\n            } else {\n                showMsg(data.msg, \"error\", 2000);\n            }\n        }\n    });\n}\n\n\n/**\n * 发布公告\n */\nfunction saveNotice() {\n    const id = $('#noticeId').val();\n    const title = $('#title').val();\n    const content = $(\"#content\").froalaEditor('html.get');\n    if (title == null || content == null) {\n        showMsg(\"请输入完整信息\", \"info\", 2000);\n        return;\n    }\n\n    $.ajax({\n        type: 'POST',\n        url: '/admin/notice/save',\n        async: false,\n        data: {\n            'id': id,\n            'title': title,\n            'content': content\n        },\n        success: function (data) {\n            if (data.code == 1) {\n                showMsgAndRedirect(\"发布成功\", \"success\", 1000, \"/admin/notice\");\n            } else {\n                showMsg(data.msg, \"error\", 2000);\n            }\n        }\n    });\n}\n"
  },
  {
    "path": "src/main/resources/static/plugins/bootstrap/css/bootstrap-theme.css",
    "content": "/*!\n * Bootstrap v3.3.7 (http://getbootstrap.com)\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n.btn-default,\n.btn-primary,\n.btn-success,\n.btn-info,\n.btn-warning,\n.btn-danger {\n  text-shadow: 0 -1px 0 rgba(0, 0, 0, .2);\n  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075);\n          box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075);\n}\n.btn-default:active,\n.btn-primary:active,\n.btn-success:active,\n.btn-info:active,\n.btn-warning:active,\n.btn-danger:active,\n.btn-default.active,\n.btn-primary.active,\n.btn-success.active,\n.btn-info.active,\n.btn-warning.active,\n.btn-danger.active {\n  -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);\n          box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);\n}\n.btn-default.disabled,\n.btn-primary.disabled,\n.btn-success.disabled,\n.btn-info.disabled,\n.btn-warning.disabled,\n.btn-danger.disabled,\n.btn-default[disabled],\n.btn-primary[disabled],\n.btn-success[disabled],\n.btn-info[disabled],\n.btn-warning[disabled],\n.btn-danger[disabled],\nfieldset[disabled] .btn-default,\nfieldset[disabled] .btn-primary,\nfieldset[disabled] .btn-success,\nfieldset[disabled] .btn-info,\nfieldset[disabled] .btn-warning,\nfieldset[disabled] .btn-danger {\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\n.btn-default .badge,\n.btn-primary .badge,\n.btn-success .badge,\n.btn-info .badge,\n.btn-warning .badge,\n.btn-danger .badge {\n  text-shadow: none;\n}\n.btn:active,\n.btn.active {\n  background-image: none;\n}\n.btn-default {\n  text-shadow: 0 1px 0 #fff;\n  background-image: -webkit-linear-gradient(top, #fff 0%, #e0e0e0 100%);\n  background-image:      -o-linear-gradient(top, #fff 0%, #e0e0e0 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#e0e0e0));\n  background-image:         linear-gradient(to bottom, #fff 0%, #e0e0e0 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0);\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n  background-repeat: repeat-x;\n  border-color: #dbdbdb;\n  border-color: #ccc;\n}\n.btn-default:hover,\n.btn-default:focus {\n  background-color: #e0e0e0;\n  background-position: 0 -15px;\n}\n.btn-default:active,\n.btn-default.active {\n  background-color: #e0e0e0;\n  border-color: #dbdbdb;\n}\n.btn-default.disabled,\n.btn-default[disabled],\nfieldset[disabled] .btn-default,\n.btn-default.disabled:hover,\n.btn-default[disabled]:hover,\nfieldset[disabled] .btn-default:hover,\n.btn-default.disabled:focus,\n.btn-default[disabled]:focus,\nfieldset[disabled] .btn-default:focus,\n.btn-default.disabled.focus,\n.btn-default[disabled].focus,\nfieldset[disabled] .btn-default.focus,\n.btn-default.disabled:active,\n.btn-default[disabled]:active,\nfieldset[disabled] .btn-default:active,\n.btn-default.disabled.active,\n.btn-default[disabled].active,\nfieldset[disabled] .btn-default.active {\n  background-color: #e0e0e0;\n  background-image: none;\n}\n.btn-primary {\n  background-image: -webkit-linear-gradient(top, #337ab7 0%, #265a88 100%);\n  background-image:      -o-linear-gradient(top, #337ab7 0%, #265a88 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#265a88));\n  background-image:         linear-gradient(to bottom, #337ab7 0%, #265a88 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff265a88', GradientType=0);\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n  background-repeat: repeat-x;\n  border-color: #245580;\n}\n.btn-primary:hover,\n.btn-primary:focus {\n  background-color: #265a88;\n  background-position: 0 -15px;\n}\n.btn-primary:active,\n.btn-primary.active {\n  background-color: #265a88;\n  border-color: #245580;\n}\n.btn-primary.disabled,\n.btn-primary[disabled],\nfieldset[disabled] .btn-primary,\n.btn-primary.disabled:hover,\n.btn-primary[disabled]:hover,\nfieldset[disabled] .btn-primary:hover,\n.btn-primary.disabled:focus,\n.btn-primary[disabled]:focus,\nfieldset[disabled] .btn-primary:focus,\n.btn-primary.disabled.focus,\n.btn-primary[disabled].focus,\nfieldset[disabled] .btn-primary.focus,\n.btn-primary.disabled:active,\n.btn-primary[disabled]:active,\nfieldset[disabled] .btn-primary:active,\n.btn-primary.disabled.active,\n.btn-primary[disabled].active,\nfieldset[disabled] .btn-primary.active {\n  background-color: #265a88;\n  background-image: none;\n}\n.btn-success {\n  background-image: -webkit-linear-gradient(top, #5cb85c 0%, #419641 100%);\n  background-image:      -o-linear-gradient(top, #5cb85c 0%, #419641 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#419641));\n  background-image:         linear-gradient(to bottom, #5cb85c 0%, #419641 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0);\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n  background-repeat: repeat-x;\n  border-color: #3e8f3e;\n}\n.btn-success:hover,\n.btn-success:focus {\n  background-color: #419641;\n  background-position: 0 -15px;\n}\n.btn-success:active,\n.btn-success.active {\n  background-color: #419641;\n  border-color: #3e8f3e;\n}\n.btn-success.disabled,\n.btn-success[disabled],\nfieldset[disabled] .btn-success,\n.btn-success.disabled:hover,\n.btn-success[disabled]:hover,\nfieldset[disabled] .btn-success:hover,\n.btn-success.disabled:focus,\n.btn-success[disabled]:focus,\nfieldset[disabled] .btn-success:focus,\n.btn-success.disabled.focus,\n.btn-success[disabled].focus,\nfieldset[disabled] .btn-success.focus,\n.btn-success.disabled:active,\n.btn-success[disabled]:active,\nfieldset[disabled] .btn-success:active,\n.btn-success.disabled.active,\n.btn-success[disabled].active,\nfieldset[disabled] .btn-success.active {\n  background-color: #419641;\n  background-image: none;\n}\n.btn-info {\n  background-image: -webkit-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);\n  background-image:      -o-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#2aabd2));\n  background-image:         linear-gradient(to bottom, #5bc0de 0%, #2aabd2 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0);\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n  background-repeat: repeat-x;\n  border-color: #28a4c9;\n}\n.btn-info:hover,\n.btn-info:focus {\n  background-color: #2aabd2;\n  background-position: 0 -15px;\n}\n.btn-info:active,\n.btn-info.active {\n  background-color: #2aabd2;\n  border-color: #28a4c9;\n}\n.btn-info.disabled,\n.btn-info[disabled],\nfieldset[disabled] .btn-info,\n.btn-info.disabled:hover,\n.btn-info[disabled]:hover,\nfieldset[disabled] .btn-info:hover,\n.btn-info.disabled:focus,\n.btn-info[disabled]:focus,\nfieldset[disabled] .btn-info:focus,\n.btn-info.disabled.focus,\n.btn-info[disabled].focus,\nfieldset[disabled] .btn-info.focus,\n.btn-info.disabled:active,\n.btn-info[disabled]:active,\nfieldset[disabled] .btn-info:active,\n.btn-info.disabled.active,\n.btn-info[disabled].active,\nfieldset[disabled] .btn-info.active {\n  background-color: #2aabd2;\n  background-image: none;\n}\n.btn-warning {\n  background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);\n  background-image:      -o-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#eb9316));\n  background-image:         linear-gradient(to bottom, #f0ad4e 0%, #eb9316 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0);\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n  background-repeat: repeat-x;\n  border-color: #e38d13;\n}\n.btn-warning:hover,\n.btn-warning:focus {\n  background-color: #eb9316;\n  background-position: 0 -15px;\n}\n.btn-warning:active,\n.btn-warning.active {\n  background-color: #eb9316;\n  border-color: #e38d13;\n}\n.btn-warning.disabled,\n.btn-warning[disabled],\nfieldset[disabled] .btn-warning,\n.btn-warning.disabled:hover,\n.btn-warning[disabled]:hover,\nfieldset[disabled] .btn-warning:hover,\n.btn-warning.disabled:focus,\n.btn-warning[disabled]:focus,\nfieldset[disabled] .btn-warning:focus,\n.btn-warning.disabled.focus,\n.btn-warning[disabled].focus,\nfieldset[disabled] .btn-warning.focus,\n.btn-warning.disabled:active,\n.btn-warning[disabled]:active,\nfieldset[disabled] .btn-warning:active,\n.btn-warning.disabled.active,\n.btn-warning[disabled].active,\nfieldset[disabled] .btn-warning.active {\n  background-color: #eb9316;\n  background-image: none;\n}\n.btn-danger {\n  background-image: -webkit-linear-gradient(top, #d9534f 0%, #c12e2a 100%);\n  background-image:      -o-linear-gradient(top, #d9534f 0%, #c12e2a 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c12e2a));\n  background-image:         linear-gradient(to bottom, #d9534f 0%, #c12e2a 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0);\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n  background-repeat: repeat-x;\n  border-color: #b92c28;\n}\n.btn-danger:hover,\n.btn-danger:focus {\n  background-color: #c12e2a;\n  background-position: 0 -15px;\n}\n.btn-danger:active,\n.btn-danger.active {\n  background-color: #c12e2a;\n  border-color: #b92c28;\n}\n.btn-danger.disabled,\n.btn-danger[disabled],\nfieldset[disabled] .btn-danger,\n.btn-danger.disabled:hover,\n.btn-danger[disabled]:hover,\nfieldset[disabled] .btn-danger:hover,\n.btn-danger.disabled:focus,\n.btn-danger[disabled]:focus,\nfieldset[disabled] .btn-danger:focus,\n.btn-danger.disabled.focus,\n.btn-danger[disabled].focus,\nfieldset[disabled] .btn-danger.focus,\n.btn-danger.disabled:active,\n.btn-danger[disabled]:active,\nfieldset[disabled] .btn-danger:active,\n.btn-danger.disabled.active,\n.btn-danger[disabled].active,\nfieldset[disabled] .btn-danger.active {\n  background-color: #c12e2a;\n  background-image: none;\n}\n.thumbnail,\n.img-thumbnail {\n  -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075);\n          box-shadow: 0 1px 2px rgba(0, 0, 0, .075);\n}\n.dropdown-menu > li > a:hover,\n.dropdown-menu > li > a:focus {\n  background-color: #e8e8e8;\n  background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n  background-image:      -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8));\n  background-image:         linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);\n  background-repeat: repeat-x;\n}\n.dropdown-menu > .active > a,\n.dropdown-menu > .active > a:hover,\n.dropdown-menu > .active > a:focus {\n  background-color: #2e6da4;\n  background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n  background-image:      -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4));\n  background-image:         linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);\n  background-repeat: repeat-x;\n}\n.navbar-default {\n  background-image: -webkit-linear-gradient(top, #fff 0%, #f8f8f8 100%);\n  background-image:      -o-linear-gradient(top, #fff 0%, #f8f8f8 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#f8f8f8));\n  background-image:         linear-gradient(to bottom, #fff 0%, #f8f8f8 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n  background-repeat: repeat-x;\n  border-radius: 4px;\n  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075);\n          box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075);\n}\n.navbar-default .navbar-nav > .open > a,\n.navbar-default .navbar-nav > .active > a {\n  background-image: -webkit-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%);\n  background-image:      -o-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#dbdbdb), to(#e2e2e2));\n  background-image:         linear-gradient(to bottom, #dbdbdb 0%, #e2e2e2 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdbdbdb', endColorstr='#ffe2e2e2', GradientType=0);\n  background-repeat: repeat-x;\n  -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075);\n          box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075);\n}\n.navbar-brand,\n.navbar-nav > li > a {\n  text-shadow: 0 1px 0 rgba(255, 255, 255, .25);\n}\n.navbar-inverse {\n  background-image: -webkit-linear-gradient(top, #3c3c3c 0%, #222 100%);\n  background-image:      -o-linear-gradient(top, #3c3c3c 0%, #222 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#3c3c3c), to(#222));\n  background-image:         linear-gradient(to bottom, #3c3c3c 0%, #222 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n  background-repeat: repeat-x;\n  border-radius: 4px;\n}\n.navbar-inverse .navbar-nav > .open > a,\n.navbar-inverse .navbar-nav > .active > a {\n  background-image: -webkit-linear-gradient(top, #080808 0%, #0f0f0f 100%);\n  background-image:      -o-linear-gradient(top, #080808 0%, #0f0f0f 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#080808), to(#0f0f0f));\n  background-image:         linear-gradient(to bottom, #080808 0%, #0f0f0f 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff080808', endColorstr='#ff0f0f0f', GradientType=0);\n  background-repeat: repeat-x;\n  -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25);\n          box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25);\n}\n.navbar-inverse .navbar-brand,\n.navbar-inverse .navbar-nav > li > a {\n  text-shadow: 0 -1px 0 rgba(0, 0, 0, .25);\n}\n.navbar-static-top,\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n  border-radius: 0;\n}\n@media (max-width: 767px) {\n  .navbar .navbar-nav .open .dropdown-menu > .active > a,\n  .navbar .navbar-nav .open .dropdown-menu > .active > a:hover,\n  .navbar .navbar-nav .open .dropdown-menu > .active > a:focus {\n    color: #fff;\n    background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n    background-image:      -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n    background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4));\n    background-image:         linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);\n    filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);\n    background-repeat: repeat-x;\n  }\n}\n.alert {\n  text-shadow: 0 1px 0 rgba(255, 255, 255, .2);\n  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05);\n          box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05);\n}\n.alert-success {\n  background-image: -webkit-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);\n  background-image:      -o-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#c8e5bc));\n  background-image:         linear-gradient(to bottom, #dff0d8 0%, #c8e5bc 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0);\n  background-repeat: repeat-x;\n  border-color: #b2dba1;\n}\n.alert-info {\n  background-image: -webkit-linear-gradient(top, #d9edf7 0%, #b9def0 100%);\n  background-image:      -o-linear-gradient(top, #d9edf7 0%, #b9def0 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#b9def0));\n  background-image:         linear-gradient(to bottom, #d9edf7 0%, #b9def0 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0);\n  background-repeat: repeat-x;\n  border-color: #9acfea;\n}\n.alert-warning {\n  background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);\n  background-image:      -o-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#f8efc0));\n  background-image:         linear-gradient(to bottom, #fcf8e3 0%, #f8efc0 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0);\n  background-repeat: repeat-x;\n  border-color: #f5e79e;\n}\n.alert-danger {\n  background-image: -webkit-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);\n  background-image:      -o-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#e7c3c3));\n  background-image:         linear-gradient(to bottom, #f2dede 0%, #e7c3c3 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0);\n  background-repeat: repeat-x;\n  border-color: #dca7a7;\n}\n.progress {\n  background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);\n  background-image:      -o-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#ebebeb), to(#f5f5f5));\n  background-image:         linear-gradient(to bottom, #ebebeb 0%, #f5f5f5 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0);\n  background-repeat: repeat-x;\n}\n.progress-bar {\n  background-image: -webkit-linear-gradient(top, #337ab7 0%, #286090 100%);\n  background-image:      -o-linear-gradient(top, #337ab7 0%, #286090 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#286090));\n  background-image:         linear-gradient(to bottom, #337ab7 0%, #286090 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff286090', GradientType=0);\n  background-repeat: repeat-x;\n}\n.progress-bar-success {\n  background-image: -webkit-linear-gradient(top, #5cb85c 0%, #449d44 100%);\n  background-image:      -o-linear-gradient(top, #5cb85c 0%, #449d44 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#449d44));\n  background-image:         linear-gradient(to bottom, #5cb85c 0%, #449d44 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0);\n  background-repeat: repeat-x;\n}\n.progress-bar-info {\n  background-image: -webkit-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);\n  background-image:      -o-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#31b0d5));\n  background-image:         linear-gradient(to bottom, #5bc0de 0%, #31b0d5 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0);\n  background-repeat: repeat-x;\n}\n.progress-bar-warning {\n  background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);\n  background-image:      -o-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#ec971f));\n  background-image:         linear-gradient(to bottom, #f0ad4e 0%, #ec971f 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0);\n  background-repeat: repeat-x;\n}\n.progress-bar-danger {\n  background-image: -webkit-linear-gradient(top, #d9534f 0%, #c9302c 100%);\n  background-image:      -o-linear-gradient(top, #d9534f 0%, #c9302c 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c9302c));\n  background-image:         linear-gradient(to bottom, #d9534f 0%, #c9302c 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0);\n  background-repeat: repeat-x;\n}\n.progress-bar-striped {\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:      -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:         linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n}\n.list-group {\n  border-radius: 4px;\n  -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075);\n          box-shadow: 0 1px 2px rgba(0, 0, 0, .075);\n}\n.list-group-item.active,\n.list-group-item.active:hover,\n.list-group-item.active:focus {\n  text-shadow: 0 -1px 0 #286090;\n  background-image: -webkit-linear-gradient(top, #337ab7 0%, #2b669a 100%);\n  background-image:      -o-linear-gradient(top, #337ab7 0%, #2b669a 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2b669a));\n  background-image:         linear-gradient(to bottom, #337ab7 0%, #2b669a 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2b669a', GradientType=0);\n  background-repeat: repeat-x;\n  border-color: #2b669a;\n}\n.list-group-item.active .badge,\n.list-group-item.active:hover .badge,\n.list-group-item.active:focus .badge {\n  text-shadow: none;\n}\n.panel {\n  -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .05);\n          box-shadow: 0 1px 2px rgba(0, 0, 0, .05);\n}\n.panel-default > .panel-heading {\n  background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n  background-image:      -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8));\n  background-image:         linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);\n  background-repeat: repeat-x;\n}\n.panel-primary > .panel-heading {\n  background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n  background-image:      -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4));\n  background-image:         linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);\n  background-repeat: repeat-x;\n}\n.panel-success > .panel-heading {\n  background-image: -webkit-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);\n  background-image:      -o-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#d0e9c6));\n  background-image:         linear-gradient(to bottom, #dff0d8 0%, #d0e9c6 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0);\n  background-repeat: repeat-x;\n}\n.panel-info > .panel-heading {\n  background-image: -webkit-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);\n  background-image:      -o-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#c4e3f3));\n  background-image:         linear-gradient(to bottom, #d9edf7 0%, #c4e3f3 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0);\n  background-repeat: repeat-x;\n}\n.panel-warning > .panel-heading {\n  background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);\n  background-image:      -o-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#faf2cc));\n  background-image:         linear-gradient(to bottom, #fcf8e3 0%, #faf2cc 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0);\n  background-repeat: repeat-x;\n}\n.panel-danger > .panel-heading {\n  background-image: -webkit-linear-gradient(top, #f2dede 0%, #ebcccc 100%);\n  background-image:      -o-linear-gradient(top, #f2dede 0%, #ebcccc 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#ebcccc));\n  background-image:         linear-gradient(to bottom, #f2dede 0%, #ebcccc 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0);\n  background-repeat: repeat-x;\n}\n.well {\n  background-image: -webkit-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);\n  background-image:      -o-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#e8e8e8), to(#f5f5f5));\n  background-image:         linear-gradient(to bottom, #e8e8e8 0%, #f5f5f5 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);\n  background-repeat: repeat-x;\n  border-color: #dcdcdc;\n  -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1);\n          box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1);\n}\n/*# sourceMappingURL=bootstrap-theme.css.map */\n"
  },
  {
    "path": "src/main/resources/static/plugins/bootstrap/css/bootstrap.css",
    "content": "/*!\n * Bootstrap v3.3.7 (http://getbootstrap.com)\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */\nhtml {\n  font-family: sans-serif;\n  -webkit-text-size-adjust: 100%;\n      -ms-text-size-adjust: 100%;\n}\nbody {\n  margin: 0;\n}\narticle,\naside,\ndetails,\nfigcaption,\nfigure,\nfooter,\nheader,\nhgroup,\nmain,\nmenu,\nnav,\nsection,\nsummary {\n  display: block;\n}\naudio,\ncanvas,\nprogress,\nvideo {\n  display: inline-block;\n  vertical-align: baseline;\n}\naudio:not([controls]) {\n  display: none;\n  height: 0;\n}\n[hidden],\ntemplate {\n  display: none;\n}\na {\n  background-color: transparent;\n}\na:active,\na:hover {\n  outline: 0;\n}\nabbr[title] {\n  border-bottom: 1px dotted;\n}\nb,\nstrong {\n  font-weight: bold;\n}\ndfn {\n  font-style: italic;\n}\nh1 {\n  margin: .67em 0;\n  font-size: 2em;\n}\nmark {\n  color: #000;\n  background: #ff0;\n}\nsmall {\n  font-size: 80%;\n}\nsub,\nsup {\n  position: relative;\n  font-size: 75%;\n  line-height: 0;\n  vertical-align: baseline;\n}\nsup {\n  top: -.5em;\n}\nsub {\n  bottom: -.25em;\n}\nimg {\n  border: 0;\n}\nsvg:not(:root) {\n  overflow: hidden;\n}\nfigure {\n  margin: 1em 40px;\n}\nhr {\n  height: 0;\n  -webkit-box-sizing: content-box;\n     -moz-box-sizing: content-box;\n          box-sizing: content-box;\n}\npre {\n  overflow: auto;\n}\ncode,\nkbd,\npre,\nsamp {\n  font-family: monospace, monospace;\n  font-size: 1em;\n}\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n  margin: 0;\n  font: inherit;\n  color: inherit;\n}\nbutton {\n  overflow: visible;\n}\nbutton,\nselect {\n  text-transform: none;\n}\nbutton,\nhtml input[type=\"button\"],\ninput[type=\"reset\"],\ninput[type=\"submit\"] {\n  -webkit-appearance: button;\n  cursor: pointer;\n}\nbutton[disabled],\nhtml input[disabled] {\n  cursor: default;\n}\nbutton::-moz-focus-inner,\ninput::-moz-focus-inner {\n  padding: 0;\n  border: 0;\n}\ninput {\n  line-height: normal;\n}\ninput[type=\"checkbox\"],\ninput[type=\"radio\"] {\n  -webkit-box-sizing: border-box;\n     -moz-box-sizing: border-box;\n          box-sizing: border-box;\n  padding: 0;\n}\ninput[type=\"number\"]::-webkit-inner-spin-button,\ninput[type=\"number\"]::-webkit-outer-spin-button {\n  height: auto;\n}\ninput[type=\"search\"] {\n  -webkit-box-sizing: content-box;\n     -moz-box-sizing: content-box;\n          box-sizing: content-box;\n  -webkit-appearance: textfield;\n}\ninput[type=\"search\"]::-webkit-search-cancel-button,\ninput[type=\"search\"]::-webkit-search-decoration {\n  -webkit-appearance: none;\n}\nfieldset {\n  padding: .35em .625em .75em;\n  margin: 0 2px;\n  border: 1px solid #c0c0c0;\n}\nlegend {\n  padding: 0;\n  border: 0;\n}\ntextarea {\n  overflow: auto;\n}\noptgroup {\n  font-weight: bold;\n}\ntable {\n  border-spacing: 0;\n  border-collapse: collapse;\n}\ntd,\nth {\n  padding: 0;\n}\n/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */\n@media print {\n  *,\n  *:before,\n  *:after {\n    color: #000 !important;\n    text-shadow: none !important;\n    background: transparent !important;\n    -webkit-box-shadow: none !important;\n            box-shadow: none !important;\n  }\n  a,\n  a:visited {\n    text-decoration: underline;\n  }\n  a[href]:after {\n    content: \" (\" attr(href) \")\";\n  }\n  abbr[title]:after {\n    content: \" (\" attr(title) \")\";\n  }\n  a[href^=\"#\"]:after,\n  a[href^=\"javascript:\"]:after {\n    content: \"\";\n  }\n  pre,\n  blockquote {\n    border: 1px solid #999;\n\n    page-break-inside: avoid;\n  }\n  thead {\n    display: table-header-group;\n  }\n  tr,\n  img {\n    page-break-inside: avoid;\n  }\n  img {\n    max-width: 100% !important;\n  }\n  p,\n  h2,\n  h3 {\n    orphans: 3;\n    widows: 3;\n  }\n  h2,\n  h3 {\n    page-break-after: avoid;\n  }\n  .navbar {\n    display: none;\n  }\n  .btn > .caret,\n  .dropup > .btn > .caret {\n    border-top-color: #000 !important;\n  }\n  .label {\n    border: 1px solid #000;\n  }\n  .table {\n    border-collapse: collapse !important;\n  }\n  .table td,\n  .table th {\n    background-color: #fff !important;\n  }\n  .table-bordered th,\n  .table-bordered td {\n    border: 1px solid #ddd !important;\n  }\n}\n@font-face {\n  font-family: 'Glyphicons Halflings';\n\n  src: url('../fonts/glyphicons-halflings-regular.eot');\n  src: url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('../fonts/glyphicons-halflings-regular.woff2') format('woff2'), url('../fonts/glyphicons-halflings-regular.woff') format('woff'), url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg');\n}\n.glyphicon {\n  position: relative;\n  top: 1px;\n  display: inline-block;\n  font-family: 'Glyphicons Halflings';\n  font-style: normal;\n  font-weight: normal;\n  line-height: 1;\n\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n}\n.glyphicon-asterisk:before {\n  content: \"\\002a\";\n}\n.glyphicon-plus:before {\n  content: \"\\002b\";\n}\n.glyphicon-euro:before,\n.glyphicon-eur:before {\n  content: \"\\20ac\";\n}\n.glyphicon-minus:before {\n  content: \"\\2212\";\n}\n.glyphicon-cloud:before {\n  content: \"\\2601\";\n}\n.glyphicon-envelope:before {\n  content: \"\\2709\";\n}\n.glyphicon-pencil:before {\n  content: \"\\270f\";\n}\n.glyphicon-glass:before {\n  content: \"\\e001\";\n}\n.glyphicon-music:before {\n  content: \"\\e002\";\n}\n.glyphicon-search:before {\n  content: \"\\e003\";\n}\n.glyphicon-heart:before {\n  content: \"\\e005\";\n}\n.glyphicon-star:before {\n  content: \"\\e006\";\n}\n.glyphicon-star-empty:before {\n  content: \"\\e007\";\n}\n.glyphicon-user:before {\n  content: \"\\e008\";\n}\n.glyphicon-film:before {\n  content: \"\\e009\";\n}\n.glyphicon-th-large:before {\n  content: \"\\e010\";\n}\n.glyphicon-th:before {\n  content: \"\\e011\";\n}\n.glyphicon-th-list:before {\n  content: \"\\e012\";\n}\n.glyphicon-ok:before {\n  content: \"\\e013\";\n}\n.glyphicon-remove:before {\n  content: \"\\e014\";\n}\n.glyphicon-zoom-in:before {\n  content: \"\\e015\";\n}\n.glyphicon-zoom-out:before {\n  content: \"\\e016\";\n}\n.glyphicon-off:before {\n  content: \"\\e017\";\n}\n.glyphicon-signal:before {\n  content: \"\\e018\";\n}\n.glyphicon-cog:before {\n  content: \"\\e019\";\n}\n.glyphicon-trash:before {\n  content: \"\\e020\";\n}\n.glyphicon-home:before {\n  content: \"\\e021\";\n}\n.glyphicon-file:before {\n  content: \"\\e022\";\n}\n.glyphicon-time:before {\n  content: \"\\e023\";\n}\n.glyphicon-road:before {\n  content: \"\\e024\";\n}\n.glyphicon-download-alt:before {\n  content: \"\\e025\";\n}\n.glyphicon-download:before {\n  content: \"\\e026\";\n}\n.glyphicon-upload:before {\n  content: \"\\e027\";\n}\n.glyphicon-inbox:before {\n  content: \"\\e028\";\n}\n.glyphicon-play-circle:before {\n  content: \"\\e029\";\n}\n.glyphicon-repeat:before {\n  content: \"\\e030\";\n}\n.glyphicon-refresh:before {\n  content: \"\\e031\";\n}\n.glyphicon-list-alt:before {\n  content: \"\\e032\";\n}\n.glyphicon-lock:before {\n  content: \"\\e033\";\n}\n.glyphicon-flag:before {\n  content: \"\\e034\";\n}\n.glyphicon-headphones:before {\n  content: \"\\e035\";\n}\n.glyphicon-volume-off:before {\n  content: \"\\e036\";\n}\n.glyphicon-volume-down:before {\n  content: \"\\e037\";\n}\n.glyphicon-volume-up:before {\n  content: \"\\e038\";\n}\n.glyphicon-qrcode:before {\n  content: \"\\e039\";\n}\n.glyphicon-barcode:before {\n  content: \"\\e040\";\n}\n.glyphicon-tag:before {\n  content: \"\\e041\";\n}\n.glyphicon-tags:before {\n  content: \"\\e042\";\n}\n.glyphicon-book:before {\n  content: \"\\e043\";\n}\n.glyphicon-bookmark:before {\n  content: \"\\e044\";\n}\n.glyphicon-print:before {\n  content: \"\\e045\";\n}\n.glyphicon-camera:before {\n  content: \"\\e046\";\n}\n.glyphicon-font:before {\n  content: \"\\e047\";\n}\n.glyphicon-bold:before {\n  content: \"\\e048\";\n}\n.glyphicon-italic:before {\n  content: \"\\e049\";\n}\n.glyphicon-text-height:before {\n  content: \"\\e050\";\n}\n.glyphicon-text-width:before {\n  content: \"\\e051\";\n}\n.glyphicon-align-left:before {\n  content: \"\\e052\";\n}\n.glyphicon-align-center:before {\n  content: \"\\e053\";\n}\n.glyphicon-align-right:before {\n  content: \"\\e054\";\n}\n.glyphicon-align-justify:before {\n  content: \"\\e055\";\n}\n.glyphicon-list:before {\n  content: \"\\e056\";\n}\n.glyphicon-indent-left:before {\n  content: \"\\e057\";\n}\n.glyphicon-indent-right:before {\n  content: \"\\e058\";\n}\n.glyphicon-facetime-video:before {\n  content: \"\\e059\";\n}\n.glyphicon-picture:before {\n  content: \"\\e060\";\n}\n.glyphicon-map-marker:before {\n  content: \"\\e062\";\n}\n.glyphicon-adjust:before {\n  content: \"\\e063\";\n}\n.glyphicon-tint:before {\n  content: \"\\e064\";\n}\n.glyphicon-edit:before {\n  content: \"\\e065\";\n}\n.glyphicon-share:before {\n  content: \"\\e066\";\n}\n.glyphicon-check:before {\n  content: \"\\e067\";\n}\n.glyphicon-move:before {\n  content: \"\\e068\";\n}\n.glyphicon-step-backward:before {\n  content: \"\\e069\";\n}\n.glyphicon-fast-backward:before {\n  content: \"\\e070\";\n}\n.glyphicon-backward:before {\n  content: \"\\e071\";\n}\n.glyphicon-play:before {\n  content: \"\\e072\";\n}\n.glyphicon-pause:before {\n  content: \"\\e073\";\n}\n.glyphicon-stop:before {\n  content: \"\\e074\";\n}\n.glyphicon-forward:before {\n  content: \"\\e075\";\n}\n.glyphicon-fast-forward:before {\n  content: \"\\e076\";\n}\n.glyphicon-step-forward:before {\n  content: \"\\e077\";\n}\n.glyphicon-eject:before {\n  content: \"\\e078\";\n}\n.glyphicon-chevron-left:before {\n  content: \"\\e079\";\n}\n.glyphicon-chevron-right:before {\n  content: \"\\e080\";\n}\n.glyphicon-plus-sign:before {\n  content: \"\\e081\";\n}\n.glyphicon-minus-sign:before {\n  content: \"\\e082\";\n}\n.glyphicon-remove-sign:before {\n  content: \"\\e083\";\n}\n.glyphicon-ok-sign:before {\n  content: \"\\e084\";\n}\n.glyphicon-question-sign:before {\n  content: \"\\e085\";\n}\n.glyphicon-info-sign:before {\n  content: \"\\e086\";\n}\n.glyphicon-screenshot:before {\n  content: \"\\e087\";\n}\n.glyphicon-remove-circle:before {\n  content: \"\\e088\";\n}\n.glyphicon-ok-circle:before {\n  content: \"\\e089\";\n}\n.glyphicon-ban-circle:before {\n  content: \"\\e090\";\n}\n.glyphicon-arrow-left:before {\n  content: \"\\e091\";\n}\n.glyphicon-arrow-right:before {\n  content: \"\\e092\";\n}\n.glyphicon-arrow-up:before {\n  content: \"\\e093\";\n}\n.glyphicon-arrow-down:before {\n  content: \"\\e094\";\n}\n.glyphicon-share-alt:before {\n  content: \"\\e095\";\n}\n.glyphicon-resize-full:before {\n  content: \"\\e096\";\n}\n.glyphicon-resize-small:before {\n  content: \"\\e097\";\n}\n.glyphicon-exclamation-sign:before {\n  content: \"\\e101\";\n}\n.glyphicon-gift:before {\n  content: \"\\e102\";\n}\n.glyphicon-leaf:before {\n  content: \"\\e103\";\n}\n.glyphicon-fire:before {\n  content: \"\\e104\";\n}\n.glyphicon-eye-open:before {\n  content: \"\\e105\";\n}\n.glyphicon-eye-close:before {\n  content: \"\\e106\";\n}\n.glyphicon-warning-sign:before {\n  content: \"\\e107\";\n}\n.glyphicon-plane:before {\n  content: \"\\e108\";\n}\n.glyphicon-calendar:before {\n  content: \"\\e109\";\n}\n.glyphicon-random:before {\n  content: \"\\e110\";\n}\n.glyphicon-comment:before {\n  content: \"\\e111\";\n}\n.glyphicon-magnet:before {\n  content: \"\\e112\";\n}\n.glyphicon-chevron-up:before {\n  content: \"\\e113\";\n}\n.glyphicon-chevron-down:before {\n  content: \"\\e114\";\n}\n.glyphicon-retweet:before {\n  content: \"\\e115\";\n}\n.glyphicon-shopping-cart:before {\n  content: \"\\e116\";\n}\n.glyphicon-folder-close:before {\n  content: \"\\e117\";\n}\n.glyphicon-folder-open:before {\n  content: \"\\e118\";\n}\n.glyphicon-resize-vertical:before {\n  content: \"\\e119\";\n}\n.glyphicon-resize-horizontal:before {\n  content: \"\\e120\";\n}\n.glyphicon-hdd:before {\n  content: \"\\e121\";\n}\n.glyphicon-bullhorn:before {\n  content: \"\\e122\";\n}\n.glyphicon-bell:before {\n  content: \"\\e123\";\n}\n.glyphicon-certificate:before {\n  content: \"\\e124\";\n}\n.glyphicon-thumbs-up:before {\n  content: \"\\e125\";\n}\n.glyphicon-thumbs-down:before {\n  content: \"\\e126\";\n}\n.glyphicon-hand-right:before {\n  content: \"\\e127\";\n}\n.glyphicon-hand-left:before {\n  content: \"\\e128\";\n}\n.glyphicon-hand-up:before {\n  content: \"\\e129\";\n}\n.glyphicon-hand-down:before {\n  content: \"\\e130\";\n}\n.glyphicon-circle-arrow-right:before {\n  content: \"\\e131\";\n}\n.glyphicon-circle-arrow-left:before {\n  content: \"\\e132\";\n}\n.glyphicon-circle-arrow-up:before {\n  content: \"\\e133\";\n}\n.glyphicon-circle-arrow-down:before {\n  content: \"\\e134\";\n}\n.glyphicon-globe:before {\n  content: \"\\e135\";\n}\n.glyphicon-wrench:before {\n  content: \"\\e136\";\n}\n.glyphicon-tasks:before {\n  content: \"\\e137\";\n}\n.glyphicon-filter:before {\n  content: \"\\e138\";\n}\n.glyphicon-briefcase:before {\n  content: \"\\e139\";\n}\n.glyphicon-fullscreen:before {\n  content: \"\\e140\";\n}\n.glyphicon-dashboard:before {\n  content: \"\\e141\";\n}\n.glyphicon-paperclip:before {\n  content: \"\\e142\";\n}\n.glyphicon-heart-empty:before {\n  content: \"\\e143\";\n}\n.glyphicon-link:before {\n  content: \"\\e144\";\n}\n.glyphicon-phone:before {\n  content: \"\\e145\";\n}\n.glyphicon-pushpin:before {\n  content: \"\\e146\";\n}\n.glyphicon-usd:before {\n  content: \"\\e148\";\n}\n.glyphicon-gbp:before {\n  content: \"\\e149\";\n}\n.glyphicon-sort:before {\n  content: \"\\e150\";\n}\n.glyphicon-sort-by-alphabet:before {\n  content: \"\\e151\";\n}\n.glyphicon-sort-by-alphabet-alt:before {\n  content: \"\\e152\";\n}\n.glyphicon-sort-by-order:before {\n  content: \"\\e153\";\n}\n.glyphicon-sort-by-order-alt:before {\n  content: \"\\e154\";\n}\n.glyphicon-sort-by-attributes:before {\n  content: \"\\e155\";\n}\n.glyphicon-sort-by-attributes-alt:before {\n  content: \"\\e156\";\n}\n.glyphicon-unchecked:before {\n  content: \"\\e157\";\n}\n.glyphicon-expand:before {\n  content: \"\\e158\";\n}\n.glyphicon-collapse-down:before {\n  content: \"\\e159\";\n}\n.glyphicon-collapse-up:before {\n  content: \"\\e160\";\n}\n.glyphicon-log-in:before {\n  content: \"\\e161\";\n}\n.glyphicon-flash:before {\n  content: \"\\e162\";\n}\n.glyphicon-log-out:before {\n  content: \"\\e163\";\n}\n.glyphicon-new-window:before {\n  content: \"\\e164\";\n}\n.glyphicon-record:before {\n  content: \"\\e165\";\n}\n.glyphicon-save:before {\n  content: \"\\e166\";\n}\n.glyphicon-open:before {\n  content: \"\\e167\";\n}\n.glyphicon-saved:before {\n  content: \"\\e168\";\n}\n.glyphicon-import:before {\n  content: \"\\e169\";\n}\n.glyphicon-export:before {\n  content: \"\\e170\";\n}\n.glyphicon-send:before {\n  content: \"\\e171\";\n}\n.glyphicon-floppy-disk:before {\n  content: \"\\e172\";\n}\n.glyphicon-floppy-saved:before {\n  content: \"\\e173\";\n}\n.glyphicon-floppy-remove:before {\n  content: \"\\e174\";\n}\n.glyphicon-floppy-save:before {\n  content: \"\\e175\";\n}\n.glyphicon-floppy-open:before {\n  content: \"\\e176\";\n}\n.glyphicon-credit-card:before {\n  content: \"\\e177\";\n}\n.glyphicon-transfer:before {\n  content: \"\\e178\";\n}\n.glyphicon-cutlery:before {\n  content: \"\\e179\";\n}\n.glyphicon-header:before {\n  content: \"\\e180\";\n}\n.glyphicon-compressed:before {\n  content: \"\\e181\";\n}\n.glyphicon-earphone:before {\n  content: \"\\e182\";\n}\n.glyphicon-phone-alt:before {\n  content: \"\\e183\";\n}\n.glyphicon-tower:before {\n  content: \"\\e184\";\n}\n.glyphicon-stats:before {\n  content: \"\\e185\";\n}\n.glyphicon-sd-video:before {\n  content: \"\\e186\";\n}\n.glyphicon-hd-video:before {\n  content: \"\\e187\";\n}\n.glyphicon-subtitles:before {\n  content: \"\\e188\";\n}\n.glyphicon-sound-stereo:before {\n  content: \"\\e189\";\n}\n.glyphicon-sound-dolby:before {\n  content: \"\\e190\";\n}\n.glyphicon-sound-5-1:before {\n  content: \"\\e191\";\n}\n.glyphicon-sound-6-1:before {\n  content: \"\\e192\";\n}\n.glyphicon-sound-7-1:before {\n  content: \"\\e193\";\n}\n.glyphicon-copyright-mark:before {\n  content: \"\\e194\";\n}\n.glyphicon-registration-mark:before {\n  content: \"\\e195\";\n}\n.glyphicon-cloud-download:before {\n  content: \"\\e197\";\n}\n.glyphicon-cloud-upload:before {\n  content: \"\\e198\";\n}\n.glyphicon-tree-conifer:before {\n  content: \"\\e199\";\n}\n.glyphicon-tree-deciduous:before {\n  content: \"\\e200\";\n}\n.glyphicon-cd:before {\n  content: \"\\e201\";\n}\n.glyphicon-save-file:before {\n  content: \"\\e202\";\n}\n.glyphicon-open-file:before {\n  content: \"\\e203\";\n}\n.glyphicon-level-up:before {\n  content: \"\\e204\";\n}\n.glyphicon-copy:before {\n  content: \"\\e205\";\n}\n.glyphicon-paste:before {\n  content: \"\\e206\";\n}\n.glyphicon-alert:before {\n  content: \"\\e209\";\n}\n.glyphicon-equalizer:before {\n  content: \"\\e210\";\n}\n.glyphicon-king:before {\n  content: \"\\e211\";\n}\n.glyphicon-queen:before {\n  content: \"\\e212\";\n}\n.glyphicon-pawn:before {\n  content: \"\\e213\";\n}\n.glyphicon-bishop:before {\n  content: \"\\e214\";\n}\n.glyphicon-knight:before {\n  content: \"\\e215\";\n}\n.glyphicon-baby-formula:before {\n  content: \"\\e216\";\n}\n.glyphicon-tent:before {\n  content: \"\\26fa\";\n}\n.glyphicon-blackboard:before {\n  content: \"\\e218\";\n}\n.glyphicon-bed:before {\n  content: \"\\e219\";\n}\n.glyphicon-apple:before {\n  content: \"\\f8ff\";\n}\n.glyphicon-erase:before {\n  content: \"\\e221\";\n}\n.glyphicon-hourglass:before {\n  content: \"\\231b\";\n}\n.glyphicon-lamp:before {\n  content: \"\\e223\";\n}\n.glyphicon-duplicate:before {\n  content: \"\\e224\";\n}\n.glyphicon-piggy-bank:before {\n  content: \"\\e225\";\n}\n.glyphicon-scissors:before {\n  content: \"\\e226\";\n}\n.glyphicon-bitcoin:before {\n  content: \"\\e227\";\n}\n.glyphicon-btc:before {\n  content: \"\\e227\";\n}\n.glyphicon-xbt:before {\n  content: \"\\e227\";\n}\n.glyphicon-yen:before {\n  content: \"\\00a5\";\n}\n.glyphicon-jpy:before {\n  content: \"\\00a5\";\n}\n.glyphicon-ruble:before {\n  content: \"\\20bd\";\n}\n.glyphicon-rub:before {\n  content: \"\\20bd\";\n}\n.glyphicon-scale:before {\n  content: \"\\e230\";\n}\n.glyphicon-ice-lolly:before {\n  content: \"\\e231\";\n}\n.glyphicon-ice-lolly-tasted:before {\n  content: \"\\e232\";\n}\n.glyphicon-education:before {\n  content: \"\\e233\";\n}\n.glyphicon-option-horizontal:before {\n  content: \"\\e234\";\n}\n.glyphicon-option-vertical:before {\n  content: \"\\e235\";\n}\n.glyphicon-menu-hamburger:before {\n  content: \"\\e236\";\n}\n.glyphicon-modal-window:before {\n  content: \"\\e237\";\n}\n.glyphicon-oil:before {\n  content: \"\\e238\";\n}\n.glyphicon-grain:before {\n  content: \"\\e239\";\n}\n.glyphicon-sunglasses:before {\n  content: \"\\e240\";\n}\n.glyphicon-text-size:before {\n  content: \"\\e241\";\n}\n.glyphicon-text-color:before {\n  content: \"\\e242\";\n}\n.glyphicon-text-background:before {\n  content: \"\\e243\";\n}\n.glyphicon-object-align-top:before {\n  content: \"\\e244\";\n}\n.glyphicon-object-align-bottom:before {\n  content: \"\\e245\";\n}\n.glyphicon-object-align-horizontal:before {\n  content: \"\\e246\";\n}\n.glyphicon-object-align-left:before {\n  content: \"\\e247\";\n}\n.glyphicon-object-align-vertical:before {\n  content: \"\\e248\";\n}\n.glyphicon-object-align-right:before {\n  content: \"\\e249\";\n}\n.glyphicon-triangle-right:before {\n  content: \"\\e250\";\n}\n.glyphicon-triangle-left:before {\n  content: \"\\e251\";\n}\n.glyphicon-triangle-bottom:before {\n  content: \"\\e252\";\n}\n.glyphicon-triangle-top:before {\n  content: \"\\e253\";\n}\n.glyphicon-console:before {\n  content: \"\\e254\";\n}\n.glyphicon-superscript:before {\n  content: \"\\e255\";\n}\n.glyphicon-subscript:before {\n  content: \"\\e256\";\n}\n.glyphicon-menu-left:before {\n  content: \"\\e257\";\n}\n.glyphicon-menu-right:before {\n  content: \"\\e258\";\n}\n.glyphicon-menu-down:before {\n  content: \"\\e259\";\n}\n.glyphicon-menu-up:before {\n  content: \"\\e260\";\n}\n* {\n  -webkit-box-sizing: border-box;\n     -moz-box-sizing: border-box;\n          box-sizing: border-box;\n}\n*:before,\n*:after {\n  -webkit-box-sizing: border-box;\n     -moz-box-sizing: border-box;\n          box-sizing: border-box;\n}\nhtml {\n  font-size: 10px;\n\n  -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\nbody {\n  font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n  font-size: 14px;\n  line-height: 1.42857143;\n  color: #333;\n  background-color: #fff;\n}\ninput,\nbutton,\nselect,\ntextarea {\n  font-family: inherit;\n  font-size: inherit;\n  line-height: inherit;\n}\na {\n  color: #337ab7;\n  text-decoration: none;\n}\na:hover,\na:focus {\n  color: #23527c;\n  text-decoration: underline;\n}\na:focus {\n  outline: 5px auto -webkit-focus-ring-color;\n  outline-offset: -2px;\n}\nfigure {\n  margin: 0;\n}\nimg {\n  vertical-align: middle;\n}\n.img-responsive,\n.thumbnail > img,\n.thumbnail a > img,\n.carousel-inner > .item > img,\n.carousel-inner > .item > a > img {\n  display: block;\n  max-width: 100%;\n  height: auto;\n}\n.img-rounded {\n  border-radius: 6px;\n}\n.img-thumbnail {\n  display: inline-block;\n  max-width: 100%;\n  height: auto;\n  padding: 4px;\n  line-height: 1.42857143;\n  background-color: #fff;\n  border: 1px solid #ddd;\n  border-radius: 4px;\n  -webkit-transition: all .2s ease-in-out;\n       -o-transition: all .2s ease-in-out;\n          transition: all .2s ease-in-out;\n}\n.img-circle {\n  border-radius: 50%;\n}\nhr {\n  margin-top: 20px;\n  margin-bottom: 20px;\n  border: 0;\n  border-top: 1px solid #eee;\n}\n.sr-only {\n  position: absolute;\n  width: 1px;\n  height: 1px;\n  padding: 0;\n  margin: -1px;\n  overflow: hidden;\n  clip: rect(0, 0, 0, 0);\n  border: 0;\n}\n.sr-only-focusable:active,\n.sr-only-focusable:focus {\n  position: static;\n  width: auto;\n  height: auto;\n  margin: 0;\n  overflow: visible;\n  clip: auto;\n}\n[role=\"button\"] {\n  cursor: pointer;\n}\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\n.h1,\n.h2,\n.h3,\n.h4,\n.h5,\n.h6 {\n  font-family: inherit;\n  font-weight: 500;\n  line-height: 1.1;\n  color: inherit;\n}\nh1 small,\nh2 small,\nh3 small,\nh4 small,\nh5 small,\nh6 small,\n.h1 small,\n.h2 small,\n.h3 small,\n.h4 small,\n.h5 small,\n.h6 small,\nh1 .small,\nh2 .small,\nh3 .small,\nh4 .small,\nh5 .small,\nh6 .small,\n.h1 .small,\n.h2 .small,\n.h3 .small,\n.h4 .small,\n.h5 .small,\n.h6 .small {\n  font-weight: normal;\n  line-height: 1;\n  color: #777;\n}\nh1,\n.h1,\nh2,\n.h2,\nh3,\n.h3 {\n  margin-top: 20px;\n  margin-bottom: 10px;\n}\nh1 small,\n.h1 small,\nh2 small,\n.h2 small,\nh3 small,\n.h3 small,\nh1 .small,\n.h1 .small,\nh2 .small,\n.h2 .small,\nh3 .small,\n.h3 .small {\n  font-size: 65%;\n}\nh4,\n.h4,\nh5,\n.h5,\nh6,\n.h6 {\n  margin-top: 10px;\n  margin-bottom: 10px;\n}\nh4 small,\n.h4 small,\nh5 small,\n.h5 small,\nh6 small,\n.h6 small,\nh4 .small,\n.h4 .small,\nh5 .small,\n.h5 .small,\nh6 .small,\n.h6 .small {\n  font-size: 75%;\n}\nh1,\n.h1 {\n  font-size: 36px;\n}\nh2,\n.h2 {\n  font-size: 30px;\n}\nh3,\n.h3 {\n  font-size: 24px;\n}\nh4,\n.h4 {\n  font-size: 18px;\n}\nh5,\n.h5 {\n  font-size: 14px;\n}\nh6,\n.h6 {\n  font-size: 12px;\n}\np {\n  margin: 0 0 10px;\n}\n.lead {\n  margin-bottom: 20px;\n  font-size: 16px;\n  font-weight: 300;\n  line-height: 1.4;\n}\n@media (min-width: 768px) {\n  .lead {\n    font-size: 21px;\n  }\n}\nsmall,\n.small {\n  font-size: 85%;\n}\nmark,\n.mark {\n  padding: .2em;\n  background-color: #fcf8e3;\n}\n.text-left {\n  text-align: left;\n}\n.text-right {\n  text-align: right;\n}\n.text-center {\n  text-align: center;\n}\n.text-justify {\n  text-align: justify;\n}\n.text-nowrap {\n  white-space: nowrap;\n}\n.text-lowercase {\n  text-transform: lowercase;\n}\n.text-uppercase {\n  text-transform: uppercase;\n}\n.text-capitalize {\n  text-transform: capitalize;\n}\n.text-muted {\n  color: #777;\n}\n.text-primary {\n  color: #337ab7;\n}\na.text-primary:hover,\na.text-primary:focus {\n  color: #286090;\n}\n.text-success {\n  color: #3c763d;\n}\na.text-success:hover,\na.text-success:focus {\n  color: #2b542c;\n}\n.text-info {\n  color: #31708f;\n}\na.text-info:hover,\na.text-info:focus {\n  color: #245269;\n}\n.text-warning {\n  color: #8a6d3b;\n}\na.text-warning:hover,\na.text-warning:focus {\n  color: #66512c;\n}\n.text-danger {\n  color: #a94442;\n}\na.text-danger:hover,\na.text-danger:focus {\n  color: #843534;\n}\n.bg-primary {\n  color: #fff;\n  background-color: #337ab7;\n}\na.bg-primary:hover,\na.bg-primary:focus {\n  background-color: #286090;\n}\n.bg-success {\n  background-color: #dff0d8;\n}\na.bg-success:hover,\na.bg-success:focus {\n  background-color: #c1e2b3;\n}\n.bg-info {\n  background-color: #d9edf7;\n}\na.bg-info:hover,\na.bg-info:focus {\n  background-color: #afd9ee;\n}\n.bg-warning {\n  background-color: #fcf8e3;\n}\na.bg-warning:hover,\na.bg-warning:focus {\n  background-color: #f7ecb5;\n}\n.bg-danger {\n  background-color: #f2dede;\n}\na.bg-danger:hover,\na.bg-danger:focus {\n  background-color: #e4b9b9;\n}\n.page-header {\n  padding-bottom: 9px;\n  margin: 40px 0 20px;\n  border-bottom: 1px solid #eee;\n}\nul,\nol {\n  margin-top: 0;\n  margin-bottom: 10px;\n}\nul ul,\nol ul,\nul ol,\nol ol {\n  margin-bottom: 0;\n}\n.list-unstyled {\n  padding-left: 0;\n  list-style: none;\n}\n.list-inline {\n  padding-left: 0;\n  margin-left: -5px;\n  list-style: none;\n}\n.list-inline > li {\n  display: inline-block;\n  padding-right: 5px;\n  padding-left: 5px;\n}\ndl {\n  margin-top: 0;\n  margin-bottom: 20px;\n}\ndt,\ndd {\n  line-height: 1.42857143;\n}\ndt {\n  font-weight: bold;\n}\ndd {\n  margin-left: 0;\n}\n@media (min-width: 768px) {\n  .dl-horizontal dt {\n    float: left;\n    width: 160px;\n    overflow: hidden;\n    clear: left;\n    text-align: right;\n    text-overflow: ellipsis;\n    white-space: nowrap;\n  }\n  .dl-horizontal dd {\n    margin-left: 180px;\n  }\n}\nabbr[title],\nabbr[data-original-title] {\n  cursor: help;\n  border-bottom: 1px dotted #777;\n}\n.initialism {\n  font-size: 90%;\n  text-transform: uppercase;\n}\nblockquote {\n  padding: 10px 20px;\n  margin: 0 0 20px;\n  font-size: 17.5px;\n  border-left: 5px solid #eee;\n}\nblockquote p:last-child,\nblockquote ul:last-child,\nblockquote ol:last-child {\n  margin-bottom: 0;\n}\nblockquote footer,\nblockquote small,\nblockquote .small {\n  display: block;\n  font-size: 80%;\n  line-height: 1.42857143;\n  color: #777;\n}\nblockquote footer:before,\nblockquote small:before,\nblockquote .small:before {\n  content: '\\2014 \\00A0';\n}\n.blockquote-reverse,\nblockquote.pull-right {\n  padding-right: 15px;\n  padding-left: 0;\n  text-align: right;\n  border-right: 5px solid #eee;\n  border-left: 0;\n}\n.blockquote-reverse footer:before,\nblockquote.pull-right footer:before,\n.blockquote-reverse small:before,\nblockquote.pull-right small:before,\n.blockquote-reverse .small:before,\nblockquote.pull-right .small:before {\n  content: '';\n}\n.blockquote-reverse footer:after,\nblockquote.pull-right footer:after,\n.blockquote-reverse small:after,\nblockquote.pull-right small:after,\n.blockquote-reverse .small:after,\nblockquote.pull-right .small:after {\n  content: '\\00A0 \\2014';\n}\naddress {\n  margin-bottom: 20px;\n  font-style: normal;\n  line-height: 1.42857143;\n}\ncode,\nkbd,\npre,\nsamp {\n  font-family: Menlo, Monaco, Consolas, \"Courier New\", monospace;\n}\ncode {\n  padding: 2px 4px;\n  font-size: 90%;\n  color: #c7254e;\n  background-color: #f9f2f4;\n  border-radius: 4px;\n}\nkbd {\n  padding: 2px 4px;\n  font-size: 90%;\n  color: #fff;\n  background-color: #333;\n  border-radius: 3px;\n  -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .25);\n          box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .25);\n}\nkbd kbd {\n  padding: 0;\n  font-size: 100%;\n  font-weight: bold;\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\npre {\n  display: block;\n  padding: 9.5px;\n  margin: 0 0 10px;\n  font-size: 13px;\n  line-height: 1.42857143;\n  color: #333;\n  word-break: break-all;\n  word-wrap: break-word;\n  background-color: #f5f5f5;\n  border: 1px solid #ccc;\n  border-radius: 4px;\n}\npre code {\n  padding: 0;\n  font-size: inherit;\n  color: inherit;\n  white-space: pre-wrap;\n  background-color: transparent;\n  border-radius: 0;\n}\n.pre-scrollable {\n  max-height: 340px;\n  overflow-y: scroll;\n}\n.container {\n  padding-right: 15px;\n  padding-left: 15px;\n  margin-right: auto;\n  margin-left: auto;\n}\n@media (min-width: 768px) {\n  .container {\n    width: 750px;\n  }\n}\n@media (min-width: 992px) {\n  .container {\n    width: 970px;\n  }\n}\n@media (min-width: 1200px) {\n  .container {\n    width: 1170px;\n  }\n}\n.container-fluid {\n  padding-right: 15px;\n  padding-left: 15px;\n  margin-right: auto;\n  margin-left: auto;\n}\n.row {\n  margin-right: -15px;\n  margin-left: -15px;\n}\n.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 {\n  position: relative;\n  min-height: 1px;\n  padding-right: 15px;\n  padding-left: 15px;\n}\n.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 {\n  float: left;\n}\n.col-xs-12 {\n  width: 100%;\n}\n.col-xs-11 {\n  width: 91.66666667%;\n}\n.col-xs-10 {\n  width: 83.33333333%;\n}\n.col-xs-9 {\n  width: 75%;\n}\n.col-xs-8 {\n  width: 66.66666667%;\n}\n.col-xs-7 {\n  width: 58.33333333%;\n}\n.col-xs-6 {\n  width: 50%;\n}\n.col-xs-5 {\n  width: 41.66666667%;\n}\n.col-xs-4 {\n  width: 33.33333333%;\n}\n.col-xs-3 {\n  width: 25%;\n}\n.col-xs-2 {\n  width: 16.66666667%;\n}\n.col-xs-1 {\n  width: 8.33333333%;\n}\n.col-xs-pull-12 {\n  right: 100%;\n}\n.col-xs-pull-11 {\n  right: 91.66666667%;\n}\n.col-xs-pull-10 {\n  right: 83.33333333%;\n}\n.col-xs-pull-9 {\n  right: 75%;\n}\n.col-xs-pull-8 {\n  right: 66.66666667%;\n}\n.col-xs-pull-7 {\n  right: 58.33333333%;\n}\n.col-xs-pull-6 {\n  right: 50%;\n}\n.col-xs-pull-5 {\n  right: 41.66666667%;\n}\n.col-xs-pull-4 {\n  right: 33.33333333%;\n}\n.col-xs-pull-3 {\n  right: 25%;\n}\n.col-xs-pull-2 {\n  right: 16.66666667%;\n}\n.col-xs-pull-1 {\n  right: 8.33333333%;\n}\n.col-xs-pull-0 {\n  right: auto;\n}\n.col-xs-push-12 {\n  left: 100%;\n}\n.col-xs-push-11 {\n  left: 91.66666667%;\n}\n.col-xs-push-10 {\n  left: 83.33333333%;\n}\n.col-xs-push-9 {\n  left: 75%;\n}\n.col-xs-push-8 {\n  left: 66.66666667%;\n}\n.col-xs-push-7 {\n  left: 58.33333333%;\n}\n.col-xs-push-6 {\n  left: 50%;\n}\n.col-xs-push-5 {\n  left: 41.66666667%;\n}\n.col-xs-push-4 {\n  left: 33.33333333%;\n}\n.col-xs-push-3 {\n  left: 25%;\n}\n.col-xs-push-2 {\n  left: 16.66666667%;\n}\n.col-xs-push-1 {\n  left: 8.33333333%;\n}\n.col-xs-push-0 {\n  left: auto;\n}\n.col-xs-offset-12 {\n  margin-left: 100%;\n}\n.col-xs-offset-11 {\n  margin-left: 91.66666667%;\n}\n.col-xs-offset-10 {\n  margin-left: 83.33333333%;\n}\n.col-xs-offset-9 {\n  margin-left: 75%;\n}\n.col-xs-offset-8 {\n  margin-left: 66.66666667%;\n}\n.col-xs-offset-7 {\n  margin-left: 58.33333333%;\n}\n.col-xs-offset-6 {\n  margin-left: 50%;\n}\n.col-xs-offset-5 {\n  margin-left: 41.66666667%;\n}\n.col-xs-offset-4 {\n  margin-left: 33.33333333%;\n}\n.col-xs-offset-3 {\n  margin-left: 25%;\n}\n.col-xs-offset-2 {\n  margin-left: 16.66666667%;\n}\n.col-xs-offset-1 {\n  margin-left: 8.33333333%;\n}\n.col-xs-offset-0 {\n  margin-left: 0;\n}\n@media (min-width: 768px) {\n  .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12 {\n    float: left;\n  }\n  .col-sm-12 {\n    width: 100%;\n  }\n  .col-sm-11 {\n    width: 91.66666667%;\n  }\n  .col-sm-10 {\n    width: 83.33333333%;\n  }\n  .col-sm-9 {\n    width: 75%;\n  }\n  .col-sm-8 {\n    width: 66.66666667%;\n  }\n  .col-sm-7 {\n    width: 58.33333333%;\n  }\n  .col-sm-6 {\n    width: 50%;\n  }\n  .col-sm-5 {\n    width: 41.66666667%;\n  }\n  .col-sm-4 {\n    width: 33.33333333%;\n  }\n  .col-sm-3 {\n    width: 25%;\n  }\n  .col-sm-2 {\n    width: 16.66666667%;\n  }\n  .col-sm-1 {\n    width: 8.33333333%;\n  }\n  .col-sm-pull-12 {\n    right: 100%;\n  }\n  .col-sm-pull-11 {\n    right: 91.66666667%;\n  }\n  .col-sm-pull-10 {\n    right: 83.33333333%;\n  }\n  .col-sm-pull-9 {\n    right: 75%;\n  }\n  .col-sm-pull-8 {\n    right: 66.66666667%;\n  }\n  .col-sm-pull-7 {\n    right: 58.33333333%;\n  }\n  .col-sm-pull-6 {\n    right: 50%;\n  }\n  .col-sm-pull-5 {\n    right: 41.66666667%;\n  }\n  .col-sm-pull-4 {\n    right: 33.33333333%;\n  }\n  .col-sm-pull-3 {\n    right: 25%;\n  }\n  .col-sm-pull-2 {\n    right: 16.66666667%;\n  }\n  .col-sm-pull-1 {\n    right: 8.33333333%;\n  }\n  .col-sm-pull-0 {\n    right: auto;\n  }\n  .col-sm-push-12 {\n    left: 100%;\n  }\n  .col-sm-push-11 {\n    left: 91.66666667%;\n  }\n  .col-sm-push-10 {\n    left: 83.33333333%;\n  }\n  .col-sm-push-9 {\n    left: 75%;\n  }\n  .col-sm-push-8 {\n    left: 66.66666667%;\n  }\n  .col-sm-push-7 {\n    left: 58.33333333%;\n  }\n  .col-sm-push-6 {\n    left: 50%;\n  }\n  .col-sm-push-5 {\n    left: 41.66666667%;\n  }\n  .col-sm-push-4 {\n    left: 33.33333333%;\n  }\n  .col-sm-push-3 {\n    left: 25%;\n  }\n  .col-sm-push-2 {\n    left: 16.66666667%;\n  }\n  .col-sm-push-1 {\n    left: 8.33333333%;\n  }\n  .col-sm-push-0 {\n    left: auto;\n  }\n  .col-sm-offset-12 {\n    margin-left: 100%;\n  }\n  .col-sm-offset-11 {\n    margin-left: 91.66666667%;\n  }\n  .col-sm-offset-10 {\n    margin-left: 83.33333333%;\n  }\n  .col-sm-offset-9 {\n    margin-left: 75%;\n  }\n  .col-sm-offset-8 {\n    margin-left: 66.66666667%;\n  }\n  .col-sm-offset-7 {\n    margin-left: 58.33333333%;\n  }\n  .col-sm-offset-6 {\n    margin-left: 50%;\n  }\n  .col-sm-offset-5 {\n    margin-left: 41.66666667%;\n  }\n  .col-sm-offset-4 {\n    margin-left: 33.33333333%;\n  }\n  .col-sm-offset-3 {\n    margin-left: 25%;\n  }\n  .col-sm-offset-2 {\n    margin-left: 16.66666667%;\n  }\n  .col-sm-offset-1 {\n    margin-left: 8.33333333%;\n  }\n  .col-sm-offset-0 {\n    margin-left: 0;\n  }\n}\n@media (min-width: 992px) {\n  .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12 {\n    float: left;\n  }\n  .col-md-12 {\n    width: 100%;\n  }\n  .col-md-11 {\n    width: 91.66666667%;\n  }\n  .col-md-10 {\n    width: 83.33333333%;\n  }\n  .col-md-9 {\n    width: 75%;\n  }\n  .col-md-8 {\n    width: 66.66666667%;\n  }\n  .col-md-7 {\n    width: 58.33333333%;\n  }\n  .col-md-6 {\n    width: 50%;\n  }\n  .col-md-5 {\n    width: 41.66666667%;\n  }\n  .col-md-4 {\n    width: 33.33333333%;\n  }\n  .col-md-3 {\n    width: 25%;\n  }\n  .col-md-2 {\n    width: 16.66666667%;\n  }\n  .col-md-1 {\n    width: 8.33333333%;\n  }\n  .col-md-pull-12 {\n    right: 100%;\n  }\n  .col-md-pull-11 {\n    right: 91.66666667%;\n  }\n  .col-md-pull-10 {\n    right: 83.33333333%;\n  }\n  .col-md-pull-9 {\n    right: 75%;\n  }\n  .col-md-pull-8 {\n    right: 66.66666667%;\n  }\n  .col-md-pull-7 {\n    right: 58.33333333%;\n  }\n  .col-md-pull-6 {\n    right: 50%;\n  }\n  .col-md-pull-5 {\n    right: 41.66666667%;\n  }\n  .col-md-pull-4 {\n    right: 33.33333333%;\n  }\n  .col-md-pull-3 {\n    right: 25%;\n  }\n  .col-md-pull-2 {\n    right: 16.66666667%;\n  }\n  .col-md-pull-1 {\n    right: 8.33333333%;\n  }\n  .col-md-pull-0 {\n    right: auto;\n  }\n  .col-md-push-12 {\n    left: 100%;\n  }\n  .col-md-push-11 {\n    left: 91.66666667%;\n  }\n  .col-md-push-10 {\n    left: 83.33333333%;\n  }\n  .col-md-push-9 {\n    left: 75%;\n  }\n  .col-md-push-8 {\n    left: 66.66666667%;\n  }\n  .col-md-push-7 {\n    left: 58.33333333%;\n  }\n  .col-md-push-6 {\n    left: 50%;\n  }\n  .col-md-push-5 {\n    left: 41.66666667%;\n  }\n  .col-md-push-4 {\n    left: 33.33333333%;\n  }\n  .col-md-push-3 {\n    left: 25%;\n  }\n  .col-md-push-2 {\n    left: 16.66666667%;\n  }\n  .col-md-push-1 {\n    left: 8.33333333%;\n  }\n  .col-md-push-0 {\n    left: auto;\n  }\n  .col-md-offset-12 {\n    margin-left: 100%;\n  }\n  .col-md-offset-11 {\n    margin-left: 91.66666667%;\n  }\n  .col-md-offset-10 {\n    margin-left: 83.33333333%;\n  }\n  .col-md-offset-9 {\n    margin-left: 75%;\n  }\n  .col-md-offset-8 {\n    margin-left: 66.66666667%;\n  }\n  .col-md-offset-7 {\n    margin-left: 58.33333333%;\n  }\n  .col-md-offset-6 {\n    margin-left: 50%;\n  }\n  .col-md-offset-5 {\n    margin-left: 41.66666667%;\n  }\n  .col-md-offset-4 {\n    margin-left: 33.33333333%;\n  }\n  .col-md-offset-3 {\n    margin-left: 25%;\n  }\n  .col-md-offset-2 {\n    margin-left: 16.66666667%;\n  }\n  .col-md-offset-1 {\n    margin-left: 8.33333333%;\n  }\n  .col-md-offset-0 {\n    margin-left: 0;\n  }\n}\n@media (min-width: 1200px) {\n  .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12 {\n    float: left;\n  }\n  .col-lg-12 {\n    width: 100%;\n  }\n  .col-lg-11 {\n    width: 91.66666667%;\n  }\n  .col-lg-10 {\n    width: 83.33333333%;\n  }\n  .col-lg-9 {\n    width: 75%;\n  }\n  .col-lg-8 {\n    width: 66.66666667%;\n  }\n  .col-lg-7 {\n    width: 58.33333333%;\n  }\n  .col-lg-6 {\n    width: 50%;\n  }\n  .col-lg-5 {\n    width: 41.66666667%;\n  }\n  .col-lg-4 {\n    width: 33.33333333%;\n  }\n  .col-lg-3 {\n    width: 25%;\n  }\n  .col-lg-2 {\n    width: 16.66666667%;\n  }\n  .col-lg-1 {\n    width: 8.33333333%;\n  }\n  .col-lg-pull-12 {\n    right: 100%;\n  }\n  .col-lg-pull-11 {\n    right: 91.66666667%;\n  }\n  .col-lg-pull-10 {\n    right: 83.33333333%;\n  }\n  .col-lg-pull-9 {\n    right: 75%;\n  }\n  .col-lg-pull-8 {\n    right: 66.66666667%;\n  }\n  .col-lg-pull-7 {\n    right: 58.33333333%;\n  }\n  .col-lg-pull-6 {\n    right: 50%;\n  }\n  .col-lg-pull-5 {\n    right: 41.66666667%;\n  }\n  .col-lg-pull-4 {\n    right: 33.33333333%;\n  }\n  .col-lg-pull-3 {\n    right: 25%;\n  }\n  .col-lg-pull-2 {\n    right: 16.66666667%;\n  }\n  .col-lg-pull-1 {\n    right: 8.33333333%;\n  }\n  .col-lg-pull-0 {\n    right: auto;\n  }\n  .col-lg-push-12 {\n    left: 100%;\n  }\n  .col-lg-push-11 {\n    left: 91.66666667%;\n  }\n  .col-lg-push-10 {\n    left: 83.33333333%;\n  }\n  .col-lg-push-9 {\n    left: 75%;\n  }\n  .col-lg-push-8 {\n    left: 66.66666667%;\n  }\n  .col-lg-push-7 {\n    left: 58.33333333%;\n  }\n  .col-lg-push-6 {\n    left: 50%;\n  }\n  .col-lg-push-5 {\n    left: 41.66666667%;\n  }\n  .col-lg-push-4 {\n    left: 33.33333333%;\n  }\n  .col-lg-push-3 {\n    left: 25%;\n  }\n  .col-lg-push-2 {\n    left: 16.66666667%;\n  }\n  .col-lg-push-1 {\n    left: 8.33333333%;\n  }\n  .col-lg-push-0 {\n    left: auto;\n  }\n  .col-lg-offset-12 {\n    margin-left: 100%;\n  }\n  .col-lg-offset-11 {\n    margin-left: 91.66666667%;\n  }\n  .col-lg-offset-10 {\n    margin-left: 83.33333333%;\n  }\n  .col-lg-offset-9 {\n    margin-left: 75%;\n  }\n  .col-lg-offset-8 {\n    margin-left: 66.66666667%;\n  }\n  .col-lg-offset-7 {\n    margin-left: 58.33333333%;\n  }\n  .col-lg-offset-6 {\n    margin-left: 50%;\n  }\n  .col-lg-offset-5 {\n    margin-left: 41.66666667%;\n  }\n  .col-lg-offset-4 {\n    margin-left: 33.33333333%;\n  }\n  .col-lg-offset-3 {\n    margin-left: 25%;\n  }\n  .col-lg-offset-2 {\n    margin-left: 16.66666667%;\n  }\n  .col-lg-offset-1 {\n    margin-left: 8.33333333%;\n  }\n  .col-lg-offset-0 {\n    margin-left: 0;\n  }\n}\ntable {\n  background-color: transparent;\n}\ncaption {\n  padding-top: 8px;\n  padding-bottom: 8px;\n  color: #777;\n  text-align: left;\n}\nth {\n  text-align: left;\n}\n.table {\n  width: 100%;\n  max-width: 100%;\n  margin-bottom: 20px;\n}\n.table > thead > tr > th,\n.table > tbody > tr > th,\n.table > tfoot > tr > th,\n.table > thead > tr > td,\n.table > tbody > tr > td,\n.table > tfoot > tr > td {\n  padding: 8px;\n  line-height: 1.42857143;\n  vertical-align: top;\n  border-top: 1px solid #ddd;\n}\n.table > thead > tr > th {\n  vertical-align: bottom;\n  border-bottom: 2px solid #ddd;\n}\n.table > caption + thead > tr:first-child > th,\n.table > colgroup + thead > tr:first-child > th,\n.table > thead:first-child > tr:first-child > th,\n.table > caption + thead > tr:first-child > td,\n.table > colgroup + thead > tr:first-child > td,\n.table > thead:first-child > tr:first-child > td {\n  border-top: 0;\n}\n.table > tbody + tbody {\n  border-top: 2px solid #ddd;\n}\n.table .table {\n  background-color: #fff;\n}\n.table-condensed > thead > tr > th,\n.table-condensed > tbody > tr > th,\n.table-condensed > tfoot > tr > th,\n.table-condensed > thead > tr > td,\n.table-condensed > tbody > tr > td,\n.table-condensed > tfoot > tr > td {\n  padding: 5px;\n}\n.table-bordered {\n  border: 1px solid #ddd;\n}\n.table-bordered > thead > tr > th,\n.table-bordered > tbody > tr > th,\n.table-bordered > tfoot > tr > th,\n.table-bordered > thead > tr > td,\n.table-bordered > tbody > tr > td,\n.table-bordered > tfoot > tr > td {\n  border: 1px solid #ddd;\n}\n.table-bordered > thead > tr > th,\n.table-bordered > thead > tr > td {\n  border-bottom-width: 2px;\n}\n.table-striped > tbody > tr:nth-of-type(odd) {\n  background-color: #f9f9f9;\n}\n.table-hover > tbody > tr:hover {\n  background-color: #f5f5f5;\n}\ntable col[class*=\"col-\"] {\n  position: static;\n  display: table-column;\n  float: none;\n}\ntable td[class*=\"col-\"],\ntable th[class*=\"col-\"] {\n  position: static;\n  display: table-cell;\n  float: none;\n}\n.table > thead > tr > td.active,\n.table > tbody > tr > td.active,\n.table > tfoot > tr > td.active,\n.table > thead > tr > th.active,\n.table > tbody > tr > th.active,\n.table > tfoot > tr > th.active,\n.table > thead > tr.active > td,\n.table > tbody > tr.active > td,\n.table > tfoot > tr.active > td,\n.table > thead > tr.active > th,\n.table > tbody > tr.active > th,\n.table > tfoot > tr.active > th {\n  background-color: #f5f5f5;\n}\n.table-hover > tbody > tr > td.active:hover,\n.table-hover > tbody > tr > th.active:hover,\n.table-hover > tbody > tr.active:hover > td,\n.table-hover > tbody > tr:hover > .active,\n.table-hover > tbody > tr.active:hover > th {\n  background-color: #e8e8e8;\n}\n.table > thead > tr > td.success,\n.table > tbody > tr > td.success,\n.table > tfoot > tr > td.success,\n.table > thead > tr > th.success,\n.table > tbody > tr > th.success,\n.table > tfoot > tr > th.success,\n.table > thead > tr.success > td,\n.table > tbody > tr.success > td,\n.table > tfoot > tr.success > td,\n.table > thead > tr.success > th,\n.table > tbody > tr.success > th,\n.table > tfoot > tr.success > th {\n  background-color: #dff0d8;\n}\n.table-hover > tbody > tr > td.success:hover,\n.table-hover > tbody > tr > th.success:hover,\n.table-hover > tbody > tr.success:hover > td,\n.table-hover > tbody > tr:hover > .success,\n.table-hover > tbody > tr.success:hover > th {\n  background-color: #d0e9c6;\n}\n.table > thead > tr > td.info,\n.table > tbody > tr > td.info,\n.table > tfoot > tr > td.info,\n.table > thead > tr > th.info,\n.table > tbody > tr > th.info,\n.table > tfoot > tr > th.info,\n.table > thead > tr.info > td,\n.table > tbody > tr.info > td,\n.table > tfoot > tr.info > td,\n.table > thead > tr.info > th,\n.table > tbody > tr.info > th,\n.table > tfoot > tr.info > th {\n  background-color: #d9edf7;\n}\n.table-hover > tbody > tr > td.info:hover,\n.table-hover > tbody > tr > th.info:hover,\n.table-hover > tbody > tr.info:hover > td,\n.table-hover > tbody > tr:hover > .info,\n.table-hover > tbody > tr.info:hover > th {\n  background-color: #c4e3f3;\n}\n.table > thead > tr > td.warning,\n.table > tbody > tr > td.warning,\n.table > tfoot > tr > td.warning,\n.table > thead > tr > th.warning,\n.table > tbody > tr > th.warning,\n.table > tfoot > tr > th.warning,\n.table > thead > tr.warning > td,\n.table > tbody > tr.warning > td,\n.table > tfoot > tr.warning > td,\n.table > thead > tr.warning > th,\n.table > tbody > tr.warning > th,\n.table > tfoot > tr.warning > th {\n  background-color: #fcf8e3;\n}\n.table-hover > tbody > tr > td.warning:hover,\n.table-hover > tbody > tr > th.warning:hover,\n.table-hover > tbody > tr.warning:hover > td,\n.table-hover > tbody > tr:hover > .warning,\n.table-hover > tbody > tr.warning:hover > th {\n  background-color: #faf2cc;\n}\n.table > thead > tr > td.danger,\n.table > tbody > tr > td.danger,\n.table > tfoot > tr > td.danger,\n.table > thead > tr > th.danger,\n.table > tbody > tr > th.danger,\n.table > tfoot > tr > th.danger,\n.table > thead > tr.danger > td,\n.table > tbody > tr.danger > td,\n.table > tfoot > tr.danger > td,\n.table > thead > tr.danger > th,\n.table > tbody > tr.danger > th,\n.table > tfoot > tr.danger > th {\n  background-color: #f2dede;\n}\n.table-hover > tbody > tr > td.danger:hover,\n.table-hover > tbody > tr > th.danger:hover,\n.table-hover > tbody > tr.danger:hover > td,\n.table-hover > tbody > tr:hover > .danger,\n.table-hover > tbody > tr.danger:hover > th {\n  background-color: #ebcccc;\n}\n.table-responsive {\n  min-height: .01%;\n  overflow-x: auto;\n}\n@media screen and (max-width: 767px) {\n  .table-responsive {\n    width: 100%;\n    margin-bottom: 15px;\n    overflow-y: hidden;\n    -ms-overflow-style: -ms-autohiding-scrollbar;\n    border: 1px solid #ddd;\n  }\n  .table-responsive > .table {\n    margin-bottom: 0;\n  }\n  .table-responsive > .table > thead > tr > th,\n  .table-responsive > .table > tbody > tr > th,\n  .table-responsive > .table > tfoot > tr > th,\n  .table-responsive > .table > thead > tr > td,\n  .table-responsive > .table > tbody > tr > td,\n  .table-responsive > .table > tfoot > tr > td {\n    white-space: nowrap;\n  }\n  .table-responsive > .table-bordered {\n    border: 0;\n  }\n  .table-responsive > .table-bordered > thead > tr > th:first-child,\n  .table-responsive > .table-bordered > tbody > tr > th:first-child,\n  .table-responsive > .table-bordered > tfoot > tr > th:first-child,\n  .table-responsive > .table-bordered > thead > tr > td:first-child,\n  .table-responsive > .table-bordered > tbody > tr > td:first-child,\n  .table-responsive > .table-bordered > tfoot > tr > td:first-child {\n    border-left: 0;\n  }\n  .table-responsive > .table-bordered > thead > tr > th:last-child,\n  .table-responsive > .table-bordered > tbody > tr > th:last-child,\n  .table-responsive > .table-bordered > tfoot > tr > th:last-child,\n  .table-responsive > .table-bordered > thead > tr > td:last-child,\n  .table-responsive > .table-bordered > tbody > tr > td:last-child,\n  .table-responsive > .table-bordered > tfoot > tr > td:last-child {\n    border-right: 0;\n  }\n  .table-responsive > .table-bordered > tbody > tr:last-child > th,\n  .table-responsive > .table-bordered > tfoot > tr:last-child > th,\n  .table-responsive > .table-bordered > tbody > tr:last-child > td,\n  .table-responsive > .table-bordered > tfoot > tr:last-child > td {\n    border-bottom: 0;\n  }\n}\nfieldset {\n  min-width: 0;\n  padding: 0;\n  margin: 0;\n  border: 0;\n}\nlegend {\n  display: block;\n  width: 100%;\n  padding: 0;\n  margin-bottom: 20px;\n  font-size: 21px;\n  line-height: inherit;\n  color: #333;\n  border: 0;\n  border-bottom: 1px solid #e5e5e5;\n}\nlabel {\n  display: inline-block;\n  max-width: 100%;\n  margin-bottom: 5px;\n  font-weight: bold;\n}\ninput[type=\"search\"] {\n  -webkit-box-sizing: border-box;\n     -moz-box-sizing: border-box;\n          box-sizing: border-box;\n}\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n  margin: 4px 0 0;\n  margin-top: 1px \\9;\n  line-height: normal;\n}\ninput[type=\"file\"] {\n  display: block;\n}\ninput[type=\"range\"] {\n  display: block;\n  width: 100%;\n}\nselect[multiple],\nselect[size] {\n  height: auto;\n}\ninput[type=\"file\"]:focus,\ninput[type=\"radio\"]:focus,\ninput[type=\"checkbox\"]:focus {\n  outline: 5px auto -webkit-focus-ring-color;\n  outline-offset: -2px;\n}\noutput {\n  display: block;\n  padding-top: 7px;\n  font-size: 14px;\n  line-height: 1.42857143;\n  color: #555;\n}\n.form-control {\n  display: block;\n  width: 100%;\n  height: 34px;\n  padding: 6px 12px;\n  font-size: 14px;\n  line-height: 1.42857143;\n  color: #555;\n  background-color: #fff;\n  background-image: none;\n  border: 1px solid #ccc;\n  border-radius: 4px;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);\n  -webkit-transition: border-color ease-in-out .15s, -webkit-box-shadow ease-in-out .15s;\n       -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n          transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n}\n.form-control:focus {\n  border-color: #66afe9;\n  outline: 0;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, .6);\n          box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, .6);\n}\n.form-control::-moz-placeholder {\n  color: #999;\n  opacity: 1;\n}\n.form-control:-ms-input-placeholder {\n  color: #999;\n}\n.form-control::-webkit-input-placeholder {\n  color: #999;\n}\n.form-control::-ms-expand {\n  background-color: transparent;\n  border: 0;\n}\n.form-control[disabled],\n.form-control[readonly],\nfieldset[disabled] .form-control {\n  background-color: #eee;\n  opacity: 1;\n}\n.form-control[disabled],\nfieldset[disabled] .form-control {\n  cursor: not-allowed;\n}\ntextarea.form-control {\n  height: auto;\n}\ninput[type=\"search\"] {\n  -webkit-appearance: none;\n}\n@media screen and (-webkit-min-device-pixel-ratio: 0) {\n  input[type=\"date\"].form-control,\n  input[type=\"time\"].form-control,\n  input[type=\"datetime-local\"].form-control,\n  input[type=\"month\"].form-control {\n    line-height: 34px;\n  }\n  input[type=\"date\"].input-sm,\n  input[type=\"time\"].input-sm,\n  input[type=\"datetime-local\"].input-sm,\n  input[type=\"month\"].input-sm,\n  .input-group-sm input[type=\"date\"],\n  .input-group-sm input[type=\"time\"],\n  .input-group-sm input[type=\"datetime-local\"],\n  .input-group-sm input[type=\"month\"] {\n    line-height: 30px;\n  }\n  input[type=\"date\"].input-lg,\n  input[type=\"time\"].input-lg,\n  input[type=\"datetime-local\"].input-lg,\n  input[type=\"month\"].input-lg,\n  .input-group-lg input[type=\"date\"],\n  .input-group-lg input[type=\"time\"],\n  .input-group-lg input[type=\"datetime-local\"],\n  .input-group-lg input[type=\"month\"] {\n    line-height: 46px;\n  }\n}\n.form-group {\n  margin-bottom: 15px;\n}\n.radio,\n.checkbox {\n  position: relative;\n  display: block;\n  margin-top: 10px;\n  margin-bottom: 10px;\n}\n.radio label,\n.checkbox label {\n  min-height: 20px;\n  padding-left: 20px;\n  margin-bottom: 0;\n  font-weight: normal;\n  cursor: pointer;\n}\n.radio input[type=\"radio\"],\n.radio-inline input[type=\"radio\"],\n.checkbox input[type=\"checkbox\"],\n.checkbox-inline input[type=\"checkbox\"] {\n  position: absolute;\n  margin-top: 4px \\9;\n  margin-left: -20px;\n}\n.radio + .radio,\n.checkbox + .checkbox {\n  margin-top: -5px;\n}\n.radio-inline,\n.checkbox-inline {\n  position: relative;\n  display: inline-block;\n  padding-left: 20px;\n  margin-bottom: 0;\n  font-weight: normal;\n  vertical-align: middle;\n  cursor: pointer;\n}\n.radio-inline + .radio-inline,\n.checkbox-inline + .checkbox-inline {\n  margin-top: 0;\n  margin-left: 10px;\n}\ninput[type=\"radio\"][disabled],\ninput[type=\"checkbox\"][disabled],\ninput[type=\"radio\"].disabled,\ninput[type=\"checkbox\"].disabled,\nfieldset[disabled] input[type=\"radio\"],\nfieldset[disabled] input[type=\"checkbox\"] {\n  cursor: not-allowed;\n}\n.radio-inline.disabled,\n.checkbox-inline.disabled,\nfieldset[disabled] .radio-inline,\nfieldset[disabled] .checkbox-inline {\n  cursor: not-allowed;\n}\n.radio.disabled label,\n.checkbox.disabled label,\nfieldset[disabled] .radio label,\nfieldset[disabled] .checkbox label {\n  cursor: not-allowed;\n}\n.form-control-static {\n  min-height: 34px;\n  padding-top: 7px;\n  padding-bottom: 7px;\n  margin-bottom: 0;\n}\n.form-control-static.input-lg,\n.form-control-static.input-sm {\n  padding-right: 0;\n  padding-left: 0;\n}\n.input-sm {\n  height: 30px;\n  padding: 5px 10px;\n  font-size: 12px;\n  line-height: 1.5;\n  border-radius: 3px;\n}\nselect.input-sm {\n  height: 30px;\n  line-height: 30px;\n}\ntextarea.input-sm,\nselect[multiple].input-sm {\n  height: auto;\n}\n.form-group-sm .form-control {\n  height: 30px;\n  padding: 5px 10px;\n  font-size: 12px;\n  line-height: 1.5;\n  border-radius: 3px;\n}\n.form-group-sm select.form-control {\n  height: 30px;\n  line-height: 30px;\n}\n.form-group-sm textarea.form-control,\n.form-group-sm select[multiple].form-control {\n  height: auto;\n}\n.form-group-sm .form-control-static {\n  height: 30px;\n  min-height: 32px;\n  padding: 6px 10px;\n  font-size: 12px;\n  line-height: 1.5;\n}\n.input-lg {\n  height: 46px;\n  padding: 10px 16px;\n  font-size: 18px;\n  line-height: 1.3333333;\n  border-radius: 6px;\n}\nselect.input-lg {\n  height: 46px;\n  line-height: 46px;\n}\ntextarea.input-lg,\nselect[multiple].input-lg {\n  height: auto;\n}\n.form-group-lg .form-control {\n  height: 46px;\n  padding: 10px 16px;\n  font-size: 18px;\n  line-height: 1.3333333;\n  border-radius: 6px;\n}\n.form-group-lg select.form-control {\n  height: 46px;\n  line-height: 46px;\n}\n.form-group-lg textarea.form-control,\n.form-group-lg select[multiple].form-control {\n  height: auto;\n}\n.form-group-lg .form-control-static {\n  height: 46px;\n  min-height: 38px;\n  padding: 11px 16px;\n  font-size: 18px;\n  line-height: 1.3333333;\n}\n.has-feedback {\n  position: relative;\n}\n.has-feedback .form-control {\n  padding-right: 42.5px;\n}\n.form-control-feedback {\n  position: absolute;\n  top: 0;\n  right: 0;\n  z-index: 2;\n  display: block;\n  width: 34px;\n  height: 34px;\n  line-height: 34px;\n  text-align: center;\n  pointer-events: none;\n}\n.input-lg + .form-control-feedback,\n.input-group-lg + .form-control-feedback,\n.form-group-lg .form-control + .form-control-feedback {\n  width: 46px;\n  height: 46px;\n  line-height: 46px;\n}\n.input-sm + .form-control-feedback,\n.input-group-sm + .form-control-feedback,\n.form-group-sm .form-control + .form-control-feedback {\n  width: 30px;\n  height: 30px;\n  line-height: 30px;\n}\n.has-success .help-block,\n.has-success .control-label,\n.has-success .radio,\n.has-success .checkbox,\n.has-success .radio-inline,\n.has-success .checkbox-inline,\n.has-success.radio label,\n.has-success.checkbox label,\n.has-success.radio-inline label,\n.has-success.checkbox-inline label {\n  color: #3c763d;\n}\n.has-success .form-control {\n  border-color: #3c763d;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);\n}\n.has-success .form-control:focus {\n  border-color: #2b542c;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #67b168;\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #67b168;\n}\n.has-success .input-group-addon {\n  color: #3c763d;\n  background-color: #dff0d8;\n  border-color: #3c763d;\n}\n.has-success .form-control-feedback {\n  color: #3c763d;\n}\n.has-warning .help-block,\n.has-warning .control-label,\n.has-warning .radio,\n.has-warning .checkbox,\n.has-warning .radio-inline,\n.has-warning .checkbox-inline,\n.has-warning.radio label,\n.has-warning.checkbox label,\n.has-warning.radio-inline label,\n.has-warning.checkbox-inline label {\n  color: #8a6d3b;\n}\n.has-warning .form-control {\n  border-color: #8a6d3b;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);\n}\n.has-warning .form-control:focus {\n  border-color: #66512c;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #c0a16b;\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #c0a16b;\n}\n.has-warning .input-group-addon {\n  color: #8a6d3b;\n  background-color: #fcf8e3;\n  border-color: #8a6d3b;\n}\n.has-warning .form-control-feedback {\n  color: #8a6d3b;\n}\n.has-error .help-block,\n.has-error .control-label,\n.has-error .radio,\n.has-error .checkbox,\n.has-error .radio-inline,\n.has-error .checkbox-inline,\n.has-error.radio label,\n.has-error.checkbox label,\n.has-error.radio-inline label,\n.has-error.checkbox-inline label {\n  color: #a94442;\n}\n.has-error .form-control {\n  border-color: #a94442;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);\n}\n.has-error .form-control:focus {\n  border-color: #843534;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #ce8483;\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #ce8483;\n}\n.has-error .input-group-addon {\n  color: #a94442;\n  background-color: #f2dede;\n  border-color: #a94442;\n}\n.has-error .form-control-feedback {\n  color: #a94442;\n}\n.has-feedback label ~ .form-control-feedback {\n  top: 25px;\n}\n.has-feedback label.sr-only ~ .form-control-feedback {\n  top: 0;\n}\n.help-block {\n  display: block;\n  margin-top: 5px;\n  margin-bottom: 10px;\n  color: #737373;\n}\n@media (min-width: 768px) {\n  .form-inline .form-group {\n    display: inline-block;\n    margin-bottom: 0;\n    vertical-align: middle;\n  }\n  .form-inline .form-control {\n    display: inline-block;\n    width: auto;\n    vertical-align: middle;\n  }\n  .form-inline .form-control-static {\n    display: inline-block;\n  }\n  .form-inline .input-group {\n    display: inline-table;\n    vertical-align: middle;\n  }\n  .form-inline .input-group .input-group-addon,\n  .form-inline .input-group .input-group-btn,\n  .form-inline .input-group .form-control {\n    width: auto;\n  }\n  .form-inline .input-group > .form-control {\n    width: 100%;\n  }\n  .form-inline .control-label {\n    margin-bottom: 0;\n    vertical-align: middle;\n  }\n  .form-inline .radio,\n  .form-inline .checkbox {\n    display: inline-block;\n    margin-top: 0;\n    margin-bottom: 0;\n    vertical-align: middle;\n  }\n  .form-inline .radio label,\n  .form-inline .checkbox label {\n    padding-left: 0;\n  }\n  .form-inline .radio input[type=\"radio\"],\n  .form-inline .checkbox input[type=\"checkbox\"] {\n    position: relative;\n    margin-left: 0;\n  }\n  .form-inline .has-feedback .form-control-feedback {\n    top: 0;\n  }\n}\n.form-horizontal .radio,\n.form-horizontal .checkbox,\n.form-horizontal .radio-inline,\n.form-horizontal .checkbox-inline {\n  padding-top: 7px;\n  margin-top: 0;\n  margin-bottom: 0;\n}\n.form-horizontal .radio,\n.form-horizontal .checkbox {\n  min-height: 27px;\n}\n.form-horizontal .form-group {\n  margin-right: -15px;\n  margin-left: -15px;\n}\n@media (min-width: 768px) {\n  .form-horizontal .control-label {\n    padding-top: 7px;\n    margin-bottom: 0;\n    text-align: right;\n  }\n}\n.form-horizontal .has-feedback .form-control-feedback {\n  right: 15px;\n}\n@media (min-width: 768px) {\n  .form-horizontal .form-group-lg .control-label {\n    padding-top: 11px;\n    font-size: 18px;\n  }\n}\n@media (min-width: 768px) {\n  .form-horizontal .form-group-sm .control-label {\n    padding-top: 6px;\n    font-size: 12px;\n  }\n}\n.btn {\n  display: inline-block;\n  padding: 6px 12px;\n  margin-bottom: 0;\n  font-size: 14px;\n  font-weight: normal;\n  line-height: 1.42857143;\n  text-align: center;\n  white-space: nowrap;\n  vertical-align: middle;\n  -ms-touch-action: manipulation;\n      touch-action: manipulation;\n  cursor: pointer;\n  -webkit-user-select: none;\n     -moz-user-select: none;\n      -ms-user-select: none;\n          user-select: none;\n  background-image: none;\n  border: 1px solid transparent;\n  border-radius: 4px;\n}\n.btn:focus,\n.btn:active:focus,\n.btn.active:focus,\n.btn.focus,\n.btn:active.focus,\n.btn.active.focus {\n  outline: 5px auto -webkit-focus-ring-color;\n  outline-offset: -2px;\n}\n.btn:hover,\n.btn:focus,\n.btn.focus {\n  color: #333;\n  text-decoration: none;\n}\n.btn:active,\n.btn.active {\n  background-image: none;\n  outline: 0;\n  -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);\n          box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);\n}\n.btn.disabled,\n.btn[disabled],\nfieldset[disabled] .btn {\n  cursor: not-allowed;\n  filter: alpha(opacity=65);\n  -webkit-box-shadow: none;\n          box-shadow: none;\n  opacity: .65;\n}\na.btn.disabled,\nfieldset[disabled] a.btn {\n  pointer-events: none;\n}\n.btn-default {\n  color: #333;\n  background-color: #fff;\n  border-color: #ccc;\n}\n.btn-default:focus,\n.btn-default.focus {\n  color: #333;\n  background-color: #e6e6e6;\n  border-color: #8c8c8c;\n}\n.btn-default:hover {\n  color: #333;\n  background-color: #e6e6e6;\n  border-color: #adadad;\n}\n.btn-default:active,\n.btn-default.active,\n.open > .dropdown-toggle.btn-default {\n  color: #333;\n  background-color: #e6e6e6;\n  border-color: #adadad;\n}\n.btn-default:active:hover,\n.btn-default.active:hover,\n.open > .dropdown-toggle.btn-default:hover,\n.btn-default:active:focus,\n.btn-default.active:focus,\n.open > .dropdown-toggle.btn-default:focus,\n.btn-default:active.focus,\n.btn-default.active.focus,\n.open > .dropdown-toggle.btn-default.focus {\n  color: #333;\n  background-color: #d4d4d4;\n  border-color: #8c8c8c;\n}\n.btn-default:active,\n.btn-default.active,\n.open > .dropdown-toggle.btn-default {\n  background-image: none;\n}\n.btn-default.disabled:hover,\n.btn-default[disabled]:hover,\nfieldset[disabled] .btn-default:hover,\n.btn-default.disabled:focus,\n.btn-default[disabled]:focus,\nfieldset[disabled] .btn-default:focus,\n.btn-default.disabled.focus,\n.btn-default[disabled].focus,\nfieldset[disabled] .btn-default.focus {\n  background-color: #fff;\n  border-color: #ccc;\n}\n.btn-default .badge {\n  color: #fff;\n  background-color: #333;\n}\n.btn-primary {\n  color: #fff;\n  background-color: #337ab7;\n  border-color: #2e6da4;\n}\n.btn-primary:focus,\n.btn-primary.focus {\n  color: #fff;\n  background-color: #286090;\n  border-color: #122b40;\n}\n.btn-primary:hover {\n  color: #fff;\n  background-color: #286090;\n  border-color: #204d74;\n}\n.btn-primary:active,\n.btn-primary.active,\n.open > .dropdown-toggle.btn-primary {\n  color: #fff;\n  background-color: #286090;\n  border-color: #204d74;\n}\n.btn-primary:active:hover,\n.btn-primary.active:hover,\n.open > .dropdown-toggle.btn-primary:hover,\n.btn-primary:active:focus,\n.btn-primary.active:focus,\n.open > .dropdown-toggle.btn-primary:focus,\n.btn-primary:active.focus,\n.btn-primary.active.focus,\n.open > .dropdown-toggle.btn-primary.focus {\n  color: #fff;\n  background-color: #204d74;\n  border-color: #122b40;\n}\n.btn-primary:active,\n.btn-primary.active,\n.open > .dropdown-toggle.btn-primary {\n  background-image: none;\n}\n.btn-primary.disabled:hover,\n.btn-primary[disabled]:hover,\nfieldset[disabled] .btn-primary:hover,\n.btn-primary.disabled:focus,\n.btn-primary[disabled]:focus,\nfieldset[disabled] .btn-primary:focus,\n.btn-primary.disabled.focus,\n.btn-primary[disabled].focus,\nfieldset[disabled] .btn-primary.focus {\n  background-color: #337ab7;\n  border-color: #2e6da4;\n}\n.btn-primary .badge {\n  color: #337ab7;\n  background-color: #fff;\n}\n.btn-success {\n  color: #fff;\n  background-color: #5cb85c;\n  border-color: #4cae4c;\n}\n.btn-success:focus,\n.btn-success.focus {\n  color: #fff;\n  background-color: #449d44;\n  border-color: #255625;\n}\n.btn-success:hover {\n  color: #fff;\n  background-color: #449d44;\n  border-color: #398439;\n}\n.btn-success:active,\n.btn-success.active,\n.open > .dropdown-toggle.btn-success {\n  color: #fff;\n  background-color: #449d44;\n  border-color: #398439;\n}\n.btn-success:active:hover,\n.btn-success.active:hover,\n.open > .dropdown-toggle.btn-success:hover,\n.btn-success:active:focus,\n.btn-success.active:focus,\n.open > .dropdown-toggle.btn-success:focus,\n.btn-success:active.focus,\n.btn-success.active.focus,\n.open > .dropdown-toggle.btn-success.focus {\n  color: #fff;\n  background-color: #398439;\n  border-color: #255625;\n}\n.btn-success:active,\n.btn-success.active,\n.open > .dropdown-toggle.btn-success {\n  background-image: none;\n}\n.btn-success.disabled:hover,\n.btn-success[disabled]:hover,\nfieldset[disabled] .btn-success:hover,\n.btn-success.disabled:focus,\n.btn-success[disabled]:focus,\nfieldset[disabled] .btn-success:focus,\n.btn-success.disabled.focus,\n.btn-success[disabled].focus,\nfieldset[disabled] .btn-success.focus {\n  background-color: #5cb85c;\n  border-color: #4cae4c;\n}\n.btn-success .badge {\n  color: #5cb85c;\n  background-color: #fff;\n}\n.btn-info {\n  color: #fff;\n  background-color: #5bc0de;\n  border-color: #46b8da;\n}\n.btn-info:focus,\n.btn-info.focus {\n  color: #fff;\n  background-color: #31b0d5;\n  border-color: #1b6d85;\n}\n.btn-info:hover {\n  color: #fff;\n  background-color: #31b0d5;\n  border-color: #269abc;\n}\n.btn-info:active,\n.btn-info.active,\n.open > .dropdown-toggle.btn-info {\n  color: #fff;\n  background-color: #31b0d5;\n  border-color: #269abc;\n}\n.btn-info:active:hover,\n.btn-info.active:hover,\n.open > .dropdown-toggle.btn-info:hover,\n.btn-info:active:focus,\n.btn-info.active:focus,\n.open > .dropdown-toggle.btn-info:focus,\n.btn-info:active.focus,\n.btn-info.active.focus,\n.open > .dropdown-toggle.btn-info.focus {\n  color: #fff;\n  background-color: #269abc;\n  border-color: #1b6d85;\n}\n.btn-info:active,\n.btn-info.active,\n.open > .dropdown-toggle.btn-info {\n  background-image: none;\n}\n.btn-info.disabled:hover,\n.btn-info[disabled]:hover,\nfieldset[disabled] .btn-info:hover,\n.btn-info.disabled:focus,\n.btn-info[disabled]:focus,\nfieldset[disabled] .btn-info:focus,\n.btn-info.disabled.focus,\n.btn-info[disabled].focus,\nfieldset[disabled] .btn-info.focus {\n  background-color: #5bc0de;\n  border-color: #46b8da;\n}\n.btn-info .badge {\n  color: #5bc0de;\n  background-color: #fff;\n}\n.btn-warning {\n  color: #fff;\n  background-color: #f0ad4e;\n  border-color: #eea236;\n}\n.btn-warning:focus,\n.btn-warning.focus {\n  color: #fff;\n  background-color: #ec971f;\n  border-color: #985f0d;\n}\n.btn-warning:hover {\n  color: #fff;\n  background-color: #ec971f;\n  border-color: #d58512;\n}\n.btn-warning:active,\n.btn-warning.active,\n.open > .dropdown-toggle.btn-warning {\n  color: #fff;\n  background-color: #ec971f;\n  border-color: #d58512;\n}\n.btn-warning:active:hover,\n.btn-warning.active:hover,\n.open > .dropdown-toggle.btn-warning:hover,\n.btn-warning:active:focus,\n.btn-warning.active:focus,\n.open > .dropdown-toggle.btn-warning:focus,\n.btn-warning:active.focus,\n.btn-warning.active.focus,\n.open > .dropdown-toggle.btn-warning.focus {\n  color: #fff;\n  background-color: #d58512;\n  border-color: #985f0d;\n}\n.btn-warning:active,\n.btn-warning.active,\n.open > .dropdown-toggle.btn-warning {\n  background-image: none;\n}\n.btn-warning.disabled:hover,\n.btn-warning[disabled]:hover,\nfieldset[disabled] .btn-warning:hover,\n.btn-warning.disabled:focus,\n.btn-warning[disabled]:focus,\nfieldset[disabled] .btn-warning:focus,\n.btn-warning.disabled.focus,\n.btn-warning[disabled].focus,\nfieldset[disabled] .btn-warning.focus {\n  background-color: #f0ad4e;\n  border-color: #eea236;\n}\n.btn-warning .badge {\n  color: #f0ad4e;\n  background-color: #fff;\n}\n.btn-danger {\n  color: #fff;\n  background-color: #d9534f;\n  border-color: #d43f3a;\n}\n.btn-danger:focus,\n.btn-danger.focus {\n  color: #fff;\n  background-color: #c9302c;\n  border-color: #761c19;\n}\n.btn-danger:hover {\n  color: #fff;\n  background-color: #c9302c;\n  border-color: #ac2925;\n}\n.btn-danger:active,\n.btn-danger.active,\n.open > .dropdown-toggle.btn-danger {\n  color: #fff;\n  background-color: #c9302c;\n  border-color: #ac2925;\n}\n.btn-danger:active:hover,\n.btn-danger.active:hover,\n.open > .dropdown-toggle.btn-danger:hover,\n.btn-danger:active:focus,\n.btn-danger.active:focus,\n.open > .dropdown-toggle.btn-danger:focus,\n.btn-danger:active.focus,\n.btn-danger.active.focus,\n.open > .dropdown-toggle.btn-danger.focus {\n  color: #fff;\n  background-color: #ac2925;\n  border-color: #761c19;\n}\n.btn-danger:active,\n.btn-danger.active,\n.open > .dropdown-toggle.btn-danger {\n  background-image: none;\n}\n.btn-danger.disabled:hover,\n.btn-danger[disabled]:hover,\nfieldset[disabled] .btn-danger:hover,\n.btn-danger.disabled:focus,\n.btn-danger[disabled]:focus,\nfieldset[disabled] .btn-danger:focus,\n.btn-danger.disabled.focus,\n.btn-danger[disabled].focus,\nfieldset[disabled] .btn-danger.focus {\n  background-color: #d9534f;\n  border-color: #d43f3a;\n}\n.btn-danger .badge {\n  color: #d9534f;\n  background-color: #fff;\n}\n.btn-link {\n  font-weight: normal;\n  color: #337ab7;\n  border-radius: 0;\n}\n.btn-link,\n.btn-link:active,\n.btn-link.active,\n.btn-link[disabled],\nfieldset[disabled] .btn-link {\n  background-color: transparent;\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\n.btn-link,\n.btn-link:hover,\n.btn-link:focus,\n.btn-link:active {\n  border-color: transparent;\n}\n.btn-link:hover,\n.btn-link:focus {\n  color: #23527c;\n  text-decoration: underline;\n  background-color: transparent;\n}\n.btn-link[disabled]:hover,\nfieldset[disabled] .btn-link:hover,\n.btn-link[disabled]:focus,\nfieldset[disabled] .btn-link:focus {\n  color: #777;\n  text-decoration: none;\n}\n.btn-lg,\n.btn-group-lg > .btn {\n  padding: 10px 16px;\n  font-size: 18px;\n  line-height: 1.3333333;\n  border-radius: 6px;\n}\n.btn-sm,\n.btn-group-sm > .btn {\n  padding: 5px 10px;\n  font-size: 12px;\n  line-height: 1.5;\n  border-radius: 3px;\n}\n.btn-xs,\n.btn-group-xs > .btn {\n  padding: 1px 5px;\n  font-size: 12px;\n  line-height: 1.5;\n  border-radius: 3px;\n}\n.btn-block {\n  display: block;\n  width: 100%;\n}\n.btn-block + .btn-block {\n  margin-top: 5px;\n}\ninput[type=\"submit\"].btn-block,\ninput[type=\"reset\"].btn-block,\ninput[type=\"button\"].btn-block {\n  width: 100%;\n}\n.fade {\n  opacity: 0;\n  -webkit-transition: opacity .15s linear;\n       -o-transition: opacity .15s linear;\n          transition: opacity .15s linear;\n}\n.fade.in {\n  opacity: 1;\n}\n.collapse {\n  display: none;\n}\n.collapse.in {\n  display: block;\n}\ntr.collapse.in {\n  display: table-row;\n}\ntbody.collapse.in {\n  display: table-row-group;\n}\n.collapsing {\n  position: relative;\n  height: 0;\n  overflow: hidden;\n  -webkit-transition-timing-function: ease;\n       -o-transition-timing-function: ease;\n          transition-timing-function: ease;\n  -webkit-transition-duration: .35s;\n       -o-transition-duration: .35s;\n          transition-duration: .35s;\n  -webkit-transition-property: height, visibility;\n       -o-transition-property: height, visibility;\n          transition-property: height, visibility;\n}\n.caret {\n  display: inline-block;\n  width: 0;\n  height: 0;\n  margin-left: 2px;\n  vertical-align: middle;\n  border-top: 4px dashed;\n  border-top: 4px solid \\9;\n  border-right: 4px solid transparent;\n  border-left: 4px solid transparent;\n}\n.dropup,\n.dropdown {\n  position: relative;\n}\n.dropdown-toggle:focus {\n  outline: 0;\n}\n.dropdown-menu {\n  position: absolute;\n  top: 100%;\n  left: 0;\n  z-index: 1000;\n  display: none;\n  float: left;\n  min-width: 160px;\n  padding: 5px 0;\n  margin: 2px 0 0;\n  font-size: 14px;\n  text-align: left;\n  list-style: none;\n  background-color: #fff;\n  -webkit-background-clip: padding-box;\n          background-clip: padding-box;\n  border: 1px solid #ccc;\n  border: 1px solid rgba(0, 0, 0, .15);\n  border-radius: 4px;\n  -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, .175);\n          box-shadow: 0 6px 12px rgba(0, 0, 0, .175);\n}\n.dropdown-menu.pull-right {\n  right: 0;\n  left: auto;\n}\n.dropdown-menu .divider {\n  height: 1px;\n  margin: 9px 0;\n  overflow: hidden;\n  background-color: #e5e5e5;\n}\n.dropdown-menu > li > a {\n  display: block;\n  padding: 3px 20px;\n  clear: both;\n  font-weight: normal;\n  line-height: 1.42857143;\n  color: #333;\n  white-space: nowrap;\n}\n.dropdown-menu > li > a:hover,\n.dropdown-menu > li > a:focus {\n  color: #262626;\n  text-decoration: none;\n  background-color: #f5f5f5;\n}\n.dropdown-menu > .active > a,\n.dropdown-menu > .active > a:hover,\n.dropdown-menu > .active > a:focus {\n  color: #fff;\n  text-decoration: none;\n  background-color: #337ab7;\n  outline: 0;\n}\n.dropdown-menu > .disabled > a,\n.dropdown-menu > .disabled > a:hover,\n.dropdown-menu > .disabled > a:focus {\n  color: #777;\n}\n.dropdown-menu > .disabled > a:hover,\n.dropdown-menu > .disabled > a:focus {\n  text-decoration: none;\n  cursor: not-allowed;\n  background-color: transparent;\n  background-image: none;\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n}\n.open > .dropdown-menu {\n  display: block;\n}\n.open > a {\n  outline: 0;\n}\n.dropdown-menu-right {\n  right: 0;\n  left: auto;\n}\n.dropdown-menu-left {\n  right: auto;\n  left: 0;\n}\n.dropdown-header {\n  display: block;\n  padding: 3px 20px;\n  font-size: 12px;\n  line-height: 1.42857143;\n  color: #777;\n  white-space: nowrap;\n}\n.dropdown-backdrop {\n  position: fixed;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 990;\n}\n.pull-right > .dropdown-menu {\n  right: 0;\n  left: auto;\n}\n.dropup .caret,\n.navbar-fixed-bottom .dropdown .caret {\n  content: \"\";\n  border-top: 0;\n  border-bottom: 4px dashed;\n  border-bottom: 4px solid \\9;\n}\n.dropup .dropdown-menu,\n.navbar-fixed-bottom .dropdown .dropdown-menu {\n  top: auto;\n  bottom: 100%;\n  margin-bottom: 2px;\n}\n@media (min-width: 768px) {\n  .navbar-right .dropdown-menu {\n    right: 0;\n    left: auto;\n  }\n  .navbar-right .dropdown-menu-left {\n    right: auto;\n    left: 0;\n  }\n}\n.btn-group,\n.btn-group-vertical {\n  position: relative;\n  display: inline-block;\n  vertical-align: middle;\n}\n.btn-group > .btn,\n.btn-group-vertical > .btn {\n  position: relative;\n  float: left;\n}\n.btn-group > .btn:hover,\n.btn-group-vertical > .btn:hover,\n.btn-group > .btn:focus,\n.btn-group-vertical > .btn:focus,\n.btn-group > .btn:active,\n.btn-group-vertical > .btn:active,\n.btn-group > .btn.active,\n.btn-group-vertical > .btn.active {\n  z-index: 2;\n}\n.btn-group .btn + .btn,\n.btn-group .btn + .btn-group,\n.btn-group .btn-group + .btn,\n.btn-group .btn-group + .btn-group {\n  margin-left: -1px;\n}\n.btn-toolbar {\n  margin-left: -5px;\n}\n.btn-toolbar .btn,\n.btn-toolbar .btn-group,\n.btn-toolbar .input-group {\n  float: left;\n}\n.btn-toolbar > .btn,\n.btn-toolbar > .btn-group,\n.btn-toolbar > .input-group {\n  margin-left: 5px;\n}\n.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {\n  border-radius: 0;\n}\n.btn-group > .btn:first-child {\n  margin-left: 0;\n}\n.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n.btn-group > .btn:last-child:not(:first-child),\n.btn-group > .dropdown-toggle:not(:first-child) {\n  border-top-left-radius: 0;\n  border-bottom-left-radius: 0;\n}\n.btn-group > .btn-group {\n  float: left;\n}\n.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {\n  border-radius: 0;\n}\n.btn-group > .btn-group:first-child:not(:last-child) > .btn:last-child,\n.btn-group > .btn-group:first-child:not(:last-child) > .dropdown-toggle {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n.btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child {\n  border-top-left-radius: 0;\n  border-bottom-left-radius: 0;\n}\n.btn-group .dropdown-toggle:active,\n.btn-group.open .dropdown-toggle {\n  outline: 0;\n}\n.btn-group > .btn + .dropdown-toggle {\n  padding-right: 8px;\n  padding-left: 8px;\n}\n.btn-group > .btn-lg + .dropdown-toggle {\n  padding-right: 12px;\n  padding-left: 12px;\n}\n.btn-group.open .dropdown-toggle {\n  -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);\n          box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);\n}\n.btn-group.open .dropdown-toggle.btn-link {\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\n.btn .caret {\n  margin-left: 0;\n}\n.btn-lg .caret {\n  border-width: 5px 5px 0;\n  border-bottom-width: 0;\n}\n.dropup .btn-lg .caret {\n  border-width: 0 5px 5px;\n}\n.btn-group-vertical > .btn,\n.btn-group-vertical > .btn-group,\n.btn-group-vertical > .btn-group > .btn {\n  display: block;\n  float: none;\n  width: 100%;\n  max-width: 100%;\n}\n.btn-group-vertical > .btn-group > .btn {\n  float: none;\n}\n.btn-group-vertical > .btn + .btn,\n.btn-group-vertical > .btn + .btn-group,\n.btn-group-vertical > .btn-group + .btn,\n.btn-group-vertical > .btn-group + .btn-group {\n  margin-top: -1px;\n  margin-left: 0;\n}\n.btn-group-vertical > .btn:not(:first-child):not(:last-child) {\n  border-radius: 0;\n}\n.btn-group-vertical > .btn:first-child:not(:last-child) {\n  border-top-left-radius: 4px;\n  border-top-right-radius: 4px;\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 0;\n}\n.btn-group-vertical > .btn:last-child:not(:first-child) {\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 4px;\n  border-bottom-left-radius: 4px;\n}\n.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {\n  border-radius: 0;\n}\n.btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child,\n.btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle {\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 0;\n}\n.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n.btn-group-justified {\n  display: table;\n  width: 100%;\n  table-layout: fixed;\n  border-collapse: separate;\n}\n.btn-group-justified > .btn,\n.btn-group-justified > .btn-group {\n  display: table-cell;\n  float: none;\n  width: 1%;\n}\n.btn-group-justified > .btn-group .btn {\n  width: 100%;\n}\n.btn-group-justified > .btn-group .dropdown-menu {\n  left: auto;\n}\n[data-toggle=\"buttons\"] > .btn input[type=\"radio\"],\n[data-toggle=\"buttons\"] > .btn-group > .btn input[type=\"radio\"],\n[data-toggle=\"buttons\"] > .btn input[type=\"checkbox\"],\n[data-toggle=\"buttons\"] > .btn-group > .btn input[type=\"checkbox\"] {\n  position: absolute;\n  clip: rect(0, 0, 0, 0);\n  pointer-events: none;\n}\n.input-group {\n  position: relative;\n  display: table;\n  border-collapse: separate;\n}\n.input-group[class*=\"col-\"] {\n  float: none;\n  padding-right: 0;\n  padding-left: 0;\n}\n.input-group .form-control {\n  position: relative;\n  z-index: 2;\n  float: left;\n  width: 100%;\n  margin-bottom: 0;\n}\n.input-group .form-control:focus {\n  z-index: 3;\n}\n.input-group-lg > .form-control,\n.input-group-lg > .input-group-addon,\n.input-group-lg > .input-group-btn > .btn {\n  height: 46px;\n  padding: 10px 16px;\n  font-size: 18px;\n  line-height: 1.3333333;\n  border-radius: 6px;\n}\nselect.input-group-lg > .form-control,\nselect.input-group-lg > .input-group-addon,\nselect.input-group-lg > .input-group-btn > .btn {\n  height: 46px;\n  line-height: 46px;\n}\ntextarea.input-group-lg > .form-control,\ntextarea.input-group-lg > .input-group-addon,\ntextarea.input-group-lg > .input-group-btn > .btn,\nselect[multiple].input-group-lg > .form-control,\nselect[multiple].input-group-lg > .input-group-addon,\nselect[multiple].input-group-lg > .input-group-btn > .btn {\n  height: auto;\n}\n.input-group-sm > .form-control,\n.input-group-sm > .input-group-addon,\n.input-group-sm > .input-group-btn > .btn {\n  height: 30px;\n  padding: 5px 10px;\n  font-size: 12px;\n  line-height: 1.5;\n  border-radius: 3px;\n}\nselect.input-group-sm > .form-control,\nselect.input-group-sm > .input-group-addon,\nselect.input-group-sm > .input-group-btn > .btn {\n  height: 30px;\n  line-height: 30px;\n}\ntextarea.input-group-sm > .form-control,\ntextarea.input-group-sm > .input-group-addon,\ntextarea.input-group-sm > .input-group-btn > .btn,\nselect[multiple].input-group-sm > .form-control,\nselect[multiple].input-group-sm > .input-group-addon,\nselect[multiple].input-group-sm > .input-group-btn > .btn {\n  height: auto;\n}\n.input-group-addon,\n.input-group-btn,\n.input-group .form-control {\n  display: table-cell;\n}\n.input-group-addon:not(:first-child):not(:last-child),\n.input-group-btn:not(:first-child):not(:last-child),\n.input-group .form-control:not(:first-child):not(:last-child) {\n  border-radius: 0;\n}\n.input-group-addon,\n.input-group-btn {\n  width: 1%;\n  white-space: nowrap;\n  vertical-align: middle;\n}\n.input-group-addon {\n  padding: 6px 12px;\n  font-size: 14px;\n  font-weight: normal;\n  line-height: 1;\n  color: #555;\n  text-align: center;\n  background-color: #eee;\n  border: 1px solid #ccc;\n  border-radius: 4px;\n}\n.input-group-addon.input-sm {\n  padding: 5px 10px;\n  font-size: 12px;\n  border-radius: 3px;\n}\n.input-group-addon.input-lg {\n  padding: 10px 16px;\n  font-size: 18px;\n  border-radius: 6px;\n}\n.input-group-addon input[type=\"radio\"],\n.input-group-addon input[type=\"checkbox\"] {\n  margin-top: 0;\n}\n.input-group .form-control:first-child,\n.input-group-addon:first-child,\n.input-group-btn:first-child > .btn,\n.input-group-btn:first-child > .btn-group > .btn,\n.input-group-btn:first-child > .dropdown-toggle,\n.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle),\n.input-group-btn:last-child > .btn-group:not(:last-child) > .btn {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n.input-group-addon:first-child {\n  border-right: 0;\n}\n.input-group .form-control:last-child,\n.input-group-addon:last-child,\n.input-group-btn:last-child > .btn,\n.input-group-btn:last-child > .btn-group > .btn,\n.input-group-btn:last-child > .dropdown-toggle,\n.input-group-btn:first-child > .btn:not(:first-child),\n.input-group-btn:first-child > .btn-group:not(:first-child) > .btn {\n  border-top-left-radius: 0;\n  border-bottom-left-radius: 0;\n}\n.input-group-addon:last-child {\n  border-left: 0;\n}\n.input-group-btn {\n  position: relative;\n  font-size: 0;\n  white-space: nowrap;\n}\n.input-group-btn > .btn {\n  position: relative;\n}\n.input-group-btn > .btn + .btn {\n  margin-left: -1px;\n}\n.input-group-btn > .btn:hover,\n.input-group-btn > .btn:focus,\n.input-group-btn > .btn:active {\n  z-index: 2;\n}\n.input-group-btn:first-child > .btn,\n.input-group-btn:first-child > .btn-group {\n  margin-right: -1px;\n}\n.input-group-btn:last-child > .btn,\n.input-group-btn:last-child > .btn-group {\n  z-index: 2;\n  margin-left: -1px;\n}\n.nav {\n  padding-left: 0;\n  margin-bottom: 0;\n  list-style: none;\n}\n.nav > li {\n  position: relative;\n  display: block;\n}\n.nav > li > a {\n  position: relative;\n  display: block;\n  padding: 10px 15px;\n}\n.nav > li > a:hover,\n.nav > li > a:focus {\n  text-decoration: none;\n  background-color: #eee;\n}\n.nav > li.disabled > a {\n  color: #777;\n}\n.nav > li.disabled > a:hover,\n.nav > li.disabled > a:focus {\n  color: #777;\n  text-decoration: none;\n  cursor: not-allowed;\n  background-color: transparent;\n}\n.nav .open > a,\n.nav .open > a:hover,\n.nav .open > a:focus {\n  background-color: #eee;\n  border-color: #337ab7;\n}\n.nav .nav-divider {\n  height: 1px;\n  margin: 9px 0;\n  overflow: hidden;\n  background-color: #e5e5e5;\n}\n.nav > li > a > img {\n  max-width: none;\n}\n.nav-tabs {\n  border-bottom: 1px solid #ddd;\n}\n.nav-tabs > li {\n  float: left;\n  margin-bottom: -1px;\n}\n.nav-tabs > li > a {\n  margin-right: 2px;\n  line-height: 1.42857143;\n  border: 1px solid transparent;\n  border-radius: 4px 4px 0 0;\n}\n.nav-tabs > li > a:hover {\n  border-color: #eee #eee #ddd;\n}\n.nav-tabs > li.active > a,\n.nav-tabs > li.active > a:hover,\n.nav-tabs > li.active > a:focus {\n  color: #555;\n  cursor: default;\n  background-color: #fff;\n  border: 1px solid #ddd;\n  border-bottom-color: transparent;\n}\n.nav-tabs.nav-justified {\n  width: 100%;\n  border-bottom: 0;\n}\n.nav-tabs.nav-justified > li {\n  float: none;\n}\n.nav-tabs.nav-justified > li > a {\n  margin-bottom: 5px;\n  text-align: center;\n}\n.nav-tabs.nav-justified > .dropdown .dropdown-menu {\n  top: auto;\n  left: auto;\n}\n@media (min-width: 768px) {\n  .nav-tabs.nav-justified > li {\n    display: table-cell;\n    width: 1%;\n  }\n  .nav-tabs.nav-justified > li > a {\n    margin-bottom: 0;\n  }\n}\n.nav-tabs.nav-justified > li > a {\n  margin-right: 0;\n  border-radius: 4px;\n}\n.nav-tabs.nav-justified > .active > a,\n.nav-tabs.nav-justified > .active > a:hover,\n.nav-tabs.nav-justified > .active > a:focus {\n  border: 1px solid #ddd;\n}\n@media (min-width: 768px) {\n  .nav-tabs.nav-justified > li > a {\n    border-bottom: 1px solid #ddd;\n    border-radius: 4px 4px 0 0;\n  }\n  .nav-tabs.nav-justified > .active > a,\n  .nav-tabs.nav-justified > .active > a:hover,\n  .nav-tabs.nav-justified > .active > a:focus {\n    border-bottom-color: #fff;\n  }\n}\n.nav-pills > li {\n  float: left;\n}\n.nav-pills > li > a {\n  border-radius: 4px;\n}\n.nav-pills > li + li {\n  margin-left: 2px;\n}\n.nav-pills > li.active > a,\n.nav-pills > li.active > a:hover,\n.nav-pills > li.active > a:focus {\n  color: #fff;\n  background-color: #337ab7;\n}\n.nav-stacked > li {\n  float: none;\n}\n.nav-stacked > li + li {\n  margin-top: 2px;\n  margin-left: 0;\n}\n.nav-justified {\n  width: 100%;\n}\n.nav-justified > li {\n  float: none;\n}\n.nav-justified > li > a {\n  margin-bottom: 5px;\n  text-align: center;\n}\n.nav-justified > .dropdown .dropdown-menu {\n  top: auto;\n  left: auto;\n}\n@media (min-width: 768px) {\n  .nav-justified > li {\n    display: table-cell;\n    width: 1%;\n  }\n  .nav-justified > li > a {\n    margin-bottom: 0;\n  }\n}\n.nav-tabs-justified {\n  border-bottom: 0;\n}\n.nav-tabs-justified > li > a {\n  margin-right: 0;\n  border-radius: 4px;\n}\n.nav-tabs-justified > .active > a,\n.nav-tabs-justified > .active > a:hover,\n.nav-tabs-justified > .active > a:focus {\n  border: 1px solid #ddd;\n}\n@media (min-width: 768px) {\n  .nav-tabs-justified > li > a {\n    border-bottom: 1px solid #ddd;\n    border-radius: 4px 4px 0 0;\n  }\n  .nav-tabs-justified > .active > a,\n  .nav-tabs-justified > .active > a:hover,\n  .nav-tabs-justified > .active > a:focus {\n    border-bottom-color: #fff;\n  }\n}\n.tab-content > .tab-pane {\n  display: none;\n}\n.tab-content > .active {\n  display: block;\n}\n.nav-tabs .dropdown-menu {\n  margin-top: -1px;\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n.navbar {\n  position: relative;\n  min-height: 50px;\n  margin-bottom: 20px;\n  border: 1px solid transparent;\n}\n@media (min-width: 768px) {\n  .navbar {\n    border-radius: 4px;\n  }\n}\n@media (min-width: 768px) {\n  .navbar-header {\n    float: left;\n  }\n}\n.navbar-collapse {\n  padding-right: 15px;\n  padding-left: 15px;\n  overflow-x: visible;\n  -webkit-overflow-scrolling: touch;\n  border-top: 1px solid transparent;\n  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1);\n          box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1);\n}\n.navbar-collapse.in {\n  overflow-y: auto;\n}\n@media (min-width: 768px) {\n  .navbar-collapse {\n    width: auto;\n    border-top: 0;\n    -webkit-box-shadow: none;\n            box-shadow: none;\n  }\n  .navbar-collapse.collapse {\n    display: block !important;\n    height: auto !important;\n    padding-bottom: 0;\n    overflow: visible !important;\n  }\n  .navbar-collapse.in {\n    overflow-y: visible;\n  }\n  .navbar-fixed-top .navbar-collapse,\n  .navbar-static-top .navbar-collapse,\n  .navbar-fixed-bottom .navbar-collapse {\n    padding-right: 0;\n    padding-left: 0;\n  }\n}\n.navbar-fixed-top .navbar-collapse,\n.navbar-fixed-bottom .navbar-collapse {\n  max-height: 340px;\n}\n@media (max-device-width: 480px) and (orientation: landscape) {\n  .navbar-fixed-top .navbar-collapse,\n  .navbar-fixed-bottom .navbar-collapse {\n    max-height: 200px;\n  }\n}\n.container > .navbar-header,\n.container-fluid > .navbar-header,\n.container > .navbar-collapse,\n.container-fluid > .navbar-collapse {\n  margin-right: -15px;\n  margin-left: -15px;\n}\n@media (min-width: 768px) {\n  .container > .navbar-header,\n  .container-fluid > .navbar-header,\n  .container > .navbar-collapse,\n  .container-fluid > .navbar-collapse {\n    margin-right: 0;\n    margin-left: 0;\n  }\n}\n.navbar-static-top {\n  z-index: 1000;\n  border-width: 0 0 1px;\n}\n@media (min-width: 768px) {\n  .navbar-static-top {\n    border-radius: 0;\n  }\n}\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n  position: fixed;\n  right: 0;\n  left: 0;\n  z-index: 1030;\n}\n@media (min-width: 768px) {\n  .navbar-fixed-top,\n  .navbar-fixed-bottom {\n    border-radius: 0;\n  }\n}\n.navbar-fixed-top {\n  top: 0;\n  border-width: 0 0 1px;\n}\n.navbar-fixed-bottom {\n  bottom: 0;\n  margin-bottom: 0;\n  border-width: 1px 0 0;\n}\n.navbar-brand {\n  float: left;\n  height: 50px;\n  padding: 15px 15px;\n  font-size: 18px;\n  line-height: 20px;\n}\n.navbar-brand:hover,\n.navbar-brand:focus {\n  text-decoration: none;\n}\n.navbar-brand > img {\n  display: block;\n}\n@media (min-width: 768px) {\n  .navbar > .container .navbar-brand,\n  .navbar > .container-fluid .navbar-brand {\n    margin-left: -15px;\n  }\n}\n.navbar-toggle {\n  position: relative;\n  float: right;\n  padding: 9px 10px;\n  margin-top: 8px;\n  margin-right: 15px;\n  margin-bottom: 8px;\n  background-color: transparent;\n  background-image: none;\n  border: 1px solid transparent;\n  border-radius: 4px;\n}\n.navbar-toggle:focus {\n  outline: 0;\n}\n.navbar-toggle .icon-bar {\n  display: block;\n  width: 22px;\n  height: 2px;\n  border-radius: 1px;\n}\n.navbar-toggle .icon-bar + .icon-bar {\n  margin-top: 4px;\n}\n@media (min-width: 768px) {\n  .navbar-toggle {\n    display: none;\n  }\n}\n.navbar-nav {\n  margin: 7.5px -15px;\n}\n.navbar-nav > li > a {\n  padding-top: 10px;\n  padding-bottom: 10px;\n  line-height: 20px;\n}\n@media (max-width: 767px) {\n  .navbar-nav .open .dropdown-menu {\n    position: static;\n    float: none;\n    width: auto;\n    margin-top: 0;\n    background-color: transparent;\n    border: 0;\n    -webkit-box-shadow: none;\n            box-shadow: none;\n  }\n  .navbar-nav .open .dropdown-menu > li > a,\n  .navbar-nav .open .dropdown-menu .dropdown-header {\n    padding: 5px 15px 5px 25px;\n  }\n  .navbar-nav .open .dropdown-menu > li > a {\n    line-height: 20px;\n  }\n  .navbar-nav .open .dropdown-menu > li > a:hover,\n  .navbar-nav .open .dropdown-menu > li > a:focus {\n    background-image: none;\n  }\n}\n@media (min-width: 768px) {\n  .navbar-nav {\n    float: left;\n    margin: 0;\n  }\n  .navbar-nav > li {\n    float: left;\n  }\n  .navbar-nav > li > a {\n    padding-top: 15px;\n    padding-bottom: 15px;\n  }\n}\n.navbar-form {\n  padding: 10px 15px;\n  margin-top: 8px;\n  margin-right: -15px;\n  margin-bottom: 8px;\n  margin-left: -15px;\n  border-top: 1px solid transparent;\n  border-bottom: 1px solid transparent;\n  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1), 0 1px 0 rgba(255, 255, 255, .1);\n          box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1), 0 1px 0 rgba(255, 255, 255, .1);\n}\n@media (min-width: 768px) {\n  .navbar-form .form-group {\n    display: inline-block;\n    margin-bottom: 0;\n    vertical-align: middle;\n  }\n  .navbar-form .form-control {\n    display: inline-block;\n    width: auto;\n    vertical-align: middle;\n  }\n  .navbar-form .form-control-static {\n    display: inline-block;\n  }\n  .navbar-form .input-group {\n    display: inline-table;\n    vertical-align: middle;\n  }\n  .navbar-form .input-group .input-group-addon,\n  .navbar-form .input-group .input-group-btn,\n  .navbar-form .input-group .form-control {\n    width: auto;\n  }\n  .navbar-form .input-group > .form-control {\n    width: 100%;\n  }\n  .navbar-form .control-label {\n    margin-bottom: 0;\n    vertical-align: middle;\n  }\n  .navbar-form .radio,\n  .navbar-form .checkbox {\n    display: inline-block;\n    margin-top: 0;\n    margin-bottom: 0;\n    vertical-align: middle;\n  }\n  .navbar-form .radio label,\n  .navbar-form .checkbox label {\n    padding-left: 0;\n  }\n  .navbar-form .radio input[type=\"radio\"],\n  .navbar-form .checkbox input[type=\"checkbox\"] {\n    position: relative;\n    margin-left: 0;\n  }\n  .navbar-form .has-feedback .form-control-feedback {\n    top: 0;\n  }\n}\n@media (max-width: 767px) {\n  .navbar-form .form-group {\n    margin-bottom: 5px;\n  }\n  .navbar-form .form-group:last-child {\n    margin-bottom: 0;\n  }\n}\n@media (min-width: 768px) {\n  .navbar-form {\n    width: auto;\n    padding-top: 0;\n    padding-bottom: 0;\n    margin-right: 0;\n    margin-left: 0;\n    border: 0;\n    -webkit-box-shadow: none;\n            box-shadow: none;\n  }\n}\n.navbar-nav > li > .dropdown-menu {\n  margin-top: 0;\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {\n  margin-bottom: 0;\n  border-top-left-radius: 4px;\n  border-top-right-radius: 4px;\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 0;\n}\n.navbar-btn {\n  margin-top: 8px;\n  margin-bottom: 8px;\n}\n.navbar-btn.btn-sm {\n  margin-top: 10px;\n  margin-bottom: 10px;\n}\n.navbar-btn.btn-xs {\n  margin-top: 14px;\n  margin-bottom: 14px;\n}\n.navbar-text {\n  margin-top: 15px;\n  margin-bottom: 15px;\n}\n@media (min-width: 768px) {\n  .navbar-text {\n    float: left;\n    margin-right: 15px;\n    margin-left: 15px;\n  }\n}\n@media (min-width: 768px) {\n  .navbar-left {\n    float: left !important;\n  }\n  .navbar-right {\n    float: right !important;\n    margin-right: -15px;\n  }\n  .navbar-right ~ .navbar-right {\n    margin-right: 0;\n  }\n}\n.navbar-default {\n  background-color: #f8f8f8;\n  border-color: #e7e7e7;\n}\n.navbar-default .navbar-brand {\n  color: #777;\n}\n.navbar-default .navbar-brand:hover,\n.navbar-default .navbar-brand:focus {\n  color: #5e5e5e;\n  background-color: transparent;\n}\n.navbar-default .navbar-text {\n  color: #777;\n}\n.navbar-default .navbar-nav > li > a {\n  color: #777;\n}\n.navbar-default .navbar-nav > li > a:hover,\n.navbar-default .navbar-nav > li > a:focus {\n  color: #333;\n  background-color: transparent;\n}\n.navbar-default .navbar-nav > .active > a,\n.navbar-default .navbar-nav > .active > a:hover,\n.navbar-default .navbar-nav > .active > a:focus {\n  color: #555;\n  background-color: #e7e7e7;\n}\n.navbar-default .navbar-nav > .disabled > a,\n.navbar-default .navbar-nav > .disabled > a:hover,\n.navbar-default .navbar-nav > .disabled > a:focus {\n  color: #ccc;\n  background-color: transparent;\n}\n.navbar-default .navbar-toggle {\n  border-color: #ddd;\n}\n.navbar-default .navbar-toggle:hover,\n.navbar-default .navbar-toggle:focus {\n  background-color: #ddd;\n}\n.navbar-default .navbar-toggle .icon-bar {\n  background-color: #888;\n}\n.navbar-default .navbar-collapse,\n.navbar-default .navbar-form {\n  border-color: #e7e7e7;\n}\n.navbar-default .navbar-nav > .open > a,\n.navbar-default .navbar-nav > .open > a:hover,\n.navbar-default .navbar-nav > .open > a:focus {\n  color: #555;\n  background-color: #e7e7e7;\n}\n@media (max-width: 767px) {\n  .navbar-default .navbar-nav .open .dropdown-menu > li > a {\n    color: #777;\n  }\n  .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover,\n  .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus {\n    color: #333;\n    background-color: transparent;\n  }\n  .navbar-default .navbar-nav .open .dropdown-menu > .active > a,\n  .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover,\n  .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus {\n    color: #555;\n    background-color: #e7e7e7;\n  }\n  .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a,\n  .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover,\n  .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus {\n    color: #ccc;\n    background-color: transparent;\n  }\n}\n.navbar-default .navbar-link {\n  color: #777;\n}\n.navbar-default .navbar-link:hover {\n  color: #333;\n}\n.navbar-default .btn-link {\n  color: #777;\n}\n.navbar-default .btn-link:hover,\n.navbar-default .btn-link:focus {\n  color: #333;\n}\n.navbar-default .btn-link[disabled]:hover,\nfieldset[disabled] .navbar-default .btn-link:hover,\n.navbar-default .btn-link[disabled]:focus,\nfieldset[disabled] .navbar-default .btn-link:focus {\n  color: #ccc;\n}\n.navbar-inverse {\n  background-color: #222;\n  border-color: #080808;\n}\n.navbar-inverse .navbar-brand {\n  color: #9d9d9d;\n}\n.navbar-inverse .navbar-brand:hover,\n.navbar-inverse .navbar-brand:focus {\n  color: #fff;\n  background-color: transparent;\n}\n.navbar-inverse .navbar-text {\n  color: #9d9d9d;\n}\n.navbar-inverse .navbar-nav > li > a {\n  color: #9d9d9d;\n}\n.navbar-inverse .navbar-nav > li > a:hover,\n.navbar-inverse .navbar-nav > li > a:focus {\n  color: #fff;\n  background-color: transparent;\n}\n.navbar-inverse .navbar-nav > .active > a,\n.navbar-inverse .navbar-nav > .active > a:hover,\n.navbar-inverse .navbar-nav > .active > a:focus {\n  color: #fff;\n  background-color: #080808;\n}\n.navbar-inverse .navbar-nav > .disabled > a,\n.navbar-inverse .navbar-nav > .disabled > a:hover,\n.navbar-inverse .navbar-nav > .disabled > a:focus {\n  color: #444;\n  background-color: transparent;\n}\n.navbar-inverse .navbar-toggle {\n  border-color: #333;\n}\n.navbar-inverse .navbar-toggle:hover,\n.navbar-inverse .navbar-toggle:focus {\n  background-color: #333;\n}\n.navbar-inverse .navbar-toggle .icon-bar {\n  background-color: #fff;\n}\n.navbar-inverse .navbar-collapse,\n.navbar-inverse .navbar-form {\n  border-color: #101010;\n}\n.navbar-inverse .navbar-nav > .open > a,\n.navbar-inverse .navbar-nav > .open > a:hover,\n.navbar-inverse .navbar-nav > .open > a:focus {\n  color: #fff;\n  background-color: #080808;\n}\n@media (max-width: 767px) {\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header {\n    border-color: #080808;\n  }\n  .navbar-inverse .navbar-nav .open .dropdown-menu .divider {\n    background-color: #080808;\n  }\n  .navbar-inverse .navbar-nav .open .dropdown-menu > li > a {\n    color: #9d9d9d;\n  }\n  .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover,\n  .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus {\n    color: #fff;\n    background-color: transparent;\n  }\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a,\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover,\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus {\n    color: #fff;\n    background-color: #080808;\n  }\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a,\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover,\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus {\n    color: #444;\n    background-color: transparent;\n  }\n}\n.navbar-inverse .navbar-link {\n  color: #9d9d9d;\n}\n.navbar-inverse .navbar-link:hover {\n  color: #fff;\n}\n.navbar-inverse .btn-link {\n  color: #9d9d9d;\n}\n.navbar-inverse .btn-link:hover,\n.navbar-inverse .btn-link:focus {\n  color: #fff;\n}\n.navbar-inverse .btn-link[disabled]:hover,\nfieldset[disabled] .navbar-inverse .btn-link:hover,\n.navbar-inverse .btn-link[disabled]:focus,\nfieldset[disabled] .navbar-inverse .btn-link:focus {\n  color: #444;\n}\n.breadcrumb {\n  padding: 8px 15px;\n  margin-bottom: 20px;\n  list-style: none;\n  background-color: #f5f5f5;\n  border-radius: 4px;\n}\n.breadcrumb > li {\n  display: inline-block;\n}\n.breadcrumb > li + li:before {\n  padding: 0 5px;\n  color: #ccc;\n  content: \"/\\00a0\";\n}\n.breadcrumb > .active {\n  color: #777;\n}\n.pagination {\n  display: inline-block;\n  padding-left: 0;\n  margin: 20px 0;\n  border-radius: 4px;\n}\n.pagination > li {\n  display: inline;\n}\n.pagination > li > a,\n.pagination > li > span {\n  position: relative;\n  float: left;\n  padding: 6px 12px;\n  margin-left: -1px;\n  line-height: 1.42857143;\n  color: #337ab7;\n  text-decoration: none;\n  background-color: #fff;\n  border: 1px solid #ddd;\n}\n.pagination > li:first-child > a,\n.pagination > li:first-child > span {\n  margin-left: 0;\n  border-top-left-radius: 4px;\n  border-bottom-left-radius: 4px;\n}\n.pagination > li:last-child > a,\n.pagination > li:last-child > span {\n  border-top-right-radius: 4px;\n  border-bottom-right-radius: 4px;\n}\n.pagination > li > a:hover,\n.pagination > li > span:hover,\n.pagination > li > a:focus,\n.pagination > li > span:focus {\n  z-index: 2;\n  color: #23527c;\n  background-color: #eee;\n  border-color: #ddd;\n}\n.pagination > .active > a,\n.pagination > .active > span,\n.pagination > .active > a:hover,\n.pagination > .active > span:hover,\n.pagination > .active > a:focus,\n.pagination > .active > span:focus {\n  z-index: 3;\n  color: #fff;\n  cursor: default;\n  background-color: #337ab7;\n  border-color: #337ab7;\n}\n.pagination > .disabled > span,\n.pagination > .disabled > span:hover,\n.pagination > .disabled > span:focus,\n.pagination > .disabled > a,\n.pagination > .disabled > a:hover,\n.pagination > .disabled > a:focus {\n  color: #777;\n  cursor: not-allowed;\n  background-color: #fff;\n  border-color: #ddd;\n}\n.pagination-lg > li > a,\n.pagination-lg > li > span {\n  padding: 10px 16px;\n  font-size: 18px;\n  line-height: 1.3333333;\n}\n.pagination-lg > li:first-child > a,\n.pagination-lg > li:first-child > span {\n  border-top-left-radius: 6px;\n  border-bottom-left-radius: 6px;\n}\n.pagination-lg > li:last-child > a,\n.pagination-lg > li:last-child > span {\n  border-top-right-radius: 6px;\n  border-bottom-right-radius: 6px;\n}\n.pagination-sm > li > a,\n.pagination-sm > li > span {\n  padding: 5px 10px;\n  font-size: 12px;\n  line-height: 1.5;\n}\n.pagination-sm > li:first-child > a,\n.pagination-sm > li:first-child > span {\n  border-top-left-radius: 3px;\n  border-bottom-left-radius: 3px;\n}\n.pagination-sm > li:last-child > a,\n.pagination-sm > li:last-child > span {\n  border-top-right-radius: 3px;\n  border-bottom-right-radius: 3px;\n}\n.pager {\n  padding-left: 0;\n  margin: 20px 0;\n  text-align: center;\n  list-style: none;\n}\n.pager li {\n  display: inline;\n}\n.pager li > a,\n.pager li > span {\n  display: inline-block;\n  padding: 5px 14px;\n  background-color: #fff;\n  border: 1px solid #ddd;\n  border-radius: 15px;\n}\n.pager li > a:hover,\n.pager li > a:focus {\n  text-decoration: none;\n  background-color: #eee;\n}\n.pager .next > a,\n.pager .next > span {\n  float: right;\n}\n.pager .previous > a,\n.pager .previous > span {\n  float: left;\n}\n.pager .disabled > a,\n.pager .disabled > a:hover,\n.pager .disabled > a:focus,\n.pager .disabled > span {\n  color: #777;\n  cursor: not-allowed;\n  background-color: #fff;\n}\n.label {\n  display: inline;\n  padding: .2em .6em .3em;\n  font-size: 75%;\n  font-weight: bold;\n  line-height: 1;\n  color: #fff;\n  text-align: center;\n  white-space: nowrap;\n  vertical-align: baseline;\n  border-radius: .25em;\n}\na.label:hover,\na.label:focus {\n  color: #fff;\n  text-decoration: none;\n  cursor: pointer;\n}\n.label:empty {\n  display: none;\n}\n.btn .label {\n  position: relative;\n  top: -1px;\n}\n.label-default {\n  background-color: #777;\n}\n.label-default[href]:hover,\n.label-default[href]:focus {\n  background-color: #5e5e5e;\n}\n.label-primary {\n  background-color: #337ab7;\n}\n.label-primary[href]:hover,\n.label-primary[href]:focus {\n  background-color: #286090;\n}\n.label-success {\n  background-color: #5cb85c;\n}\n.label-success[href]:hover,\n.label-success[href]:focus {\n  background-color: #449d44;\n}\n.label-info {\n  background-color: #5bc0de;\n}\n.label-info[href]:hover,\n.label-info[href]:focus {\n  background-color: #31b0d5;\n}\n.label-warning {\n  background-color: #f0ad4e;\n}\n.label-warning[href]:hover,\n.label-warning[href]:focus {\n  background-color: #ec971f;\n}\n.label-danger {\n  background-color: #d9534f;\n}\n.label-danger[href]:hover,\n.label-danger[href]:focus {\n  background-color: #c9302c;\n}\n.badge {\n  display: inline-block;\n  min-width: 10px;\n  padding: 3px 7px;\n  font-size: 12px;\n  font-weight: bold;\n  line-height: 1;\n  color: #fff;\n  text-align: center;\n  white-space: nowrap;\n  vertical-align: middle;\n  background-color: #777;\n  border-radius: 10px;\n}\n.badge:empty {\n  display: none;\n}\n.btn .badge {\n  position: relative;\n  top: -1px;\n}\n.btn-xs .badge,\n.btn-group-xs > .btn .badge {\n  top: 0;\n  padding: 1px 5px;\n}\na.badge:hover,\na.badge:focus {\n  color: #fff;\n  text-decoration: none;\n  cursor: pointer;\n}\n.list-group-item.active > .badge,\n.nav-pills > .active > a > .badge {\n  color: #337ab7;\n  background-color: #fff;\n}\n.list-group-item > .badge {\n  float: right;\n}\n.list-group-item > .badge + .badge {\n  margin-right: 5px;\n}\n.nav-pills > li > a > .badge {\n  margin-left: 3px;\n}\n.jumbotron {\n  padding-top: 30px;\n  padding-bottom: 30px;\n  margin-bottom: 30px;\n  color: inherit;\n  background-color: #eee;\n}\n.jumbotron h1,\n.jumbotron .h1 {\n  color: inherit;\n}\n.jumbotron p {\n  margin-bottom: 15px;\n  font-size: 21px;\n  font-weight: 200;\n}\n.jumbotron > hr {\n  border-top-color: #d5d5d5;\n}\n.container .jumbotron,\n.container-fluid .jumbotron {\n  padding-right: 15px;\n  padding-left: 15px;\n  border-radius: 6px;\n}\n.jumbotron .container {\n  max-width: 100%;\n}\n@media screen and (min-width: 768px) {\n  .jumbotron {\n    padding-top: 48px;\n    padding-bottom: 48px;\n  }\n  .container .jumbotron,\n  .container-fluid .jumbotron {\n    padding-right: 60px;\n    padding-left: 60px;\n  }\n  .jumbotron h1,\n  .jumbotron .h1 {\n    font-size: 63px;\n  }\n}\n.thumbnail {\n  display: block;\n  padding: 4px;\n  margin-bottom: 20px;\n  line-height: 1.42857143;\n  background-color: #fff;\n  border: 1px solid #ddd;\n  border-radius: 4px;\n  -webkit-transition: border .2s ease-in-out;\n       -o-transition: border .2s ease-in-out;\n          transition: border .2s ease-in-out;\n}\n.thumbnail > img,\n.thumbnail a > img {\n  margin-right: auto;\n  margin-left: auto;\n}\na.thumbnail:hover,\na.thumbnail:focus,\na.thumbnail.active {\n  border-color: #337ab7;\n}\n.thumbnail .caption {\n  padding: 9px;\n  color: #333;\n}\n.alert {\n  padding: 15px;\n  margin-bottom: 20px;\n  border: 1px solid transparent;\n  border-radius: 4px;\n}\n.alert h4 {\n  margin-top: 0;\n  color: inherit;\n}\n.alert .alert-link {\n  font-weight: bold;\n}\n.alert > p,\n.alert > ul {\n  margin-bottom: 0;\n}\n.alert > p + p {\n  margin-top: 5px;\n}\n.alert-dismissable,\n.alert-dismissible {\n  padding-right: 35px;\n}\n.alert-dismissable .close,\n.alert-dismissible .close {\n  position: relative;\n  top: -2px;\n  right: -21px;\n  color: inherit;\n}\n.alert-success {\n  color: #3c763d;\n  background-color: #dff0d8;\n  border-color: #d6e9c6;\n}\n.alert-success hr {\n  border-top-color: #c9e2b3;\n}\n.alert-success .alert-link {\n  color: #2b542c;\n}\n.alert-info {\n  color: #31708f;\n  background-color: #d9edf7;\n  border-color: #bce8f1;\n}\n.alert-info hr {\n  border-top-color: #a6e1ec;\n}\n.alert-info .alert-link {\n  color: #245269;\n}\n.alert-warning {\n  color: #8a6d3b;\n  background-color: #fcf8e3;\n  border-color: #faebcc;\n}\n.alert-warning hr {\n  border-top-color: #f7e1b5;\n}\n.alert-warning .alert-link {\n  color: #66512c;\n}\n.alert-danger {\n  color: #a94442;\n  background-color: #f2dede;\n  border-color: #ebccd1;\n}\n.alert-danger hr {\n  border-top-color: #e4b9c0;\n}\n.alert-danger .alert-link {\n  color: #843534;\n}\n@-webkit-keyframes progress-bar-stripes {\n  from {\n    background-position: 40px 0;\n  }\n  to {\n    background-position: 0 0;\n  }\n}\n@-o-keyframes progress-bar-stripes {\n  from {\n    background-position: 40px 0;\n  }\n  to {\n    background-position: 0 0;\n  }\n}\n@keyframes progress-bar-stripes {\n  from {\n    background-position: 40px 0;\n  }\n  to {\n    background-position: 0 0;\n  }\n}\n.progress {\n  height: 20px;\n  margin-bottom: 20px;\n  overflow: hidden;\n  background-color: #f5f5f5;\n  border-radius: 4px;\n  -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, .1);\n          box-shadow: inset 0 1px 2px rgba(0, 0, 0, .1);\n}\n.progress-bar {\n  float: left;\n  width: 0;\n  height: 100%;\n  font-size: 12px;\n  line-height: 20px;\n  color: #fff;\n  text-align: center;\n  background-color: #337ab7;\n  -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .15);\n          box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .15);\n  -webkit-transition: width .6s ease;\n       -o-transition: width .6s ease;\n          transition: width .6s ease;\n}\n.progress-striped .progress-bar,\n.progress-bar-striped {\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:      -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:         linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  -webkit-background-size: 40px 40px;\n          background-size: 40px 40px;\n}\n.progress.active .progress-bar,\n.progress-bar.active {\n  -webkit-animation: progress-bar-stripes 2s linear infinite;\n       -o-animation: progress-bar-stripes 2s linear infinite;\n          animation: progress-bar-stripes 2s linear infinite;\n}\n.progress-bar-success {\n  background-color: #5cb85c;\n}\n.progress-striped .progress-bar-success {\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:      -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:         linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n}\n.progress-bar-info {\n  background-color: #5bc0de;\n}\n.progress-striped .progress-bar-info {\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:      -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:         linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n}\n.progress-bar-warning {\n  background-color: #f0ad4e;\n}\n.progress-striped .progress-bar-warning {\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:      -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:         linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n}\n.progress-bar-danger {\n  background-color: #d9534f;\n}\n.progress-striped .progress-bar-danger {\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:      -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:         linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n}\n.media {\n  margin-top: 15px;\n}\n.media:first-child {\n  margin-top: 0;\n}\n.media,\n.media-body {\n  overflow: hidden;\n  zoom: 1;\n}\n.media-body {\n  width: 10000px;\n}\n.media-object {\n  display: block;\n}\n.media-object.img-thumbnail {\n  max-width: none;\n}\n.media-right,\n.media > .pull-right {\n  padding-left: 10px;\n}\n.media-left,\n.media > .pull-left {\n  padding-right: 10px;\n}\n.media-left,\n.media-right,\n.media-body {\n  display: table-cell;\n  vertical-align: top;\n}\n.media-middle {\n  vertical-align: middle;\n}\n.media-bottom {\n  vertical-align: bottom;\n}\n.media-heading {\n  margin-top: 0;\n  margin-bottom: 5px;\n}\n.media-list {\n  padding-left: 0;\n  list-style: none;\n}\n.list-group {\n  padding-left: 0;\n  margin-bottom: 20px;\n}\n.list-group-item {\n  position: relative;\n  display: block;\n  padding: 10px 15px;\n  margin-bottom: -1px;\n  background-color: #fff;\n  border: 1px solid #ddd;\n}\n.list-group-item:first-child {\n  border-top-left-radius: 4px;\n  border-top-right-radius: 4px;\n}\n.list-group-item:last-child {\n  margin-bottom: 0;\n  border-bottom-right-radius: 4px;\n  border-bottom-left-radius: 4px;\n}\na.list-group-item,\nbutton.list-group-item {\n  color: #555;\n}\na.list-group-item .list-group-item-heading,\nbutton.list-group-item .list-group-item-heading {\n  color: #333;\n}\na.list-group-item:hover,\nbutton.list-group-item:hover,\na.list-group-item:focus,\nbutton.list-group-item:focus {\n  color: #555;\n  text-decoration: none;\n  background-color: #f5f5f5;\n}\nbutton.list-group-item {\n  width: 100%;\n  text-align: left;\n}\n.list-group-item.disabled,\n.list-group-item.disabled:hover,\n.list-group-item.disabled:focus {\n  color: #777;\n  cursor: not-allowed;\n  background-color: #eee;\n}\n.list-group-item.disabled .list-group-item-heading,\n.list-group-item.disabled:hover .list-group-item-heading,\n.list-group-item.disabled:focus .list-group-item-heading {\n  color: inherit;\n}\n.list-group-item.disabled .list-group-item-text,\n.list-group-item.disabled:hover .list-group-item-text,\n.list-group-item.disabled:focus .list-group-item-text {\n  color: #777;\n}\n.list-group-item.active,\n.list-group-item.active:hover,\n.list-group-item.active:focus {\n  z-index: 2;\n  color: #fff;\n  background-color: #337ab7;\n  border-color: #337ab7;\n}\n.list-group-item.active .list-group-item-heading,\n.list-group-item.active:hover .list-group-item-heading,\n.list-group-item.active:focus .list-group-item-heading,\n.list-group-item.active .list-group-item-heading > small,\n.list-group-item.active:hover .list-group-item-heading > small,\n.list-group-item.active:focus .list-group-item-heading > small,\n.list-group-item.active .list-group-item-heading > .small,\n.list-group-item.active:hover .list-group-item-heading > .small,\n.list-group-item.active:focus .list-group-item-heading > .small {\n  color: inherit;\n}\n.list-group-item.active .list-group-item-text,\n.list-group-item.active:hover .list-group-item-text,\n.list-group-item.active:focus .list-group-item-text {\n  color: #c7ddef;\n}\n.list-group-item-success {\n  color: #3c763d;\n  background-color: #dff0d8;\n}\na.list-group-item-success,\nbutton.list-group-item-success {\n  color: #3c763d;\n}\na.list-group-item-success .list-group-item-heading,\nbutton.list-group-item-success .list-group-item-heading {\n  color: inherit;\n}\na.list-group-item-success:hover,\nbutton.list-group-item-success:hover,\na.list-group-item-success:focus,\nbutton.list-group-item-success:focus {\n  color: #3c763d;\n  background-color: #d0e9c6;\n}\na.list-group-item-success.active,\nbutton.list-group-item-success.active,\na.list-group-item-success.active:hover,\nbutton.list-group-item-success.active:hover,\na.list-group-item-success.active:focus,\nbutton.list-group-item-success.active:focus {\n  color: #fff;\n  background-color: #3c763d;\n  border-color: #3c763d;\n}\n.list-group-item-info {\n  color: #31708f;\n  background-color: #d9edf7;\n}\na.list-group-item-info,\nbutton.list-group-item-info {\n  color: #31708f;\n}\na.list-group-item-info .list-group-item-heading,\nbutton.list-group-item-info .list-group-item-heading {\n  color: inherit;\n}\na.list-group-item-info:hover,\nbutton.list-group-item-info:hover,\na.list-group-item-info:focus,\nbutton.list-group-item-info:focus {\n  color: #31708f;\n  background-color: #c4e3f3;\n}\na.list-group-item-info.active,\nbutton.list-group-item-info.active,\na.list-group-item-info.active:hover,\nbutton.list-group-item-info.active:hover,\na.list-group-item-info.active:focus,\nbutton.list-group-item-info.active:focus {\n  color: #fff;\n  background-color: #31708f;\n  border-color: #31708f;\n}\n.list-group-item-warning {\n  color: #8a6d3b;\n  background-color: #fcf8e3;\n}\na.list-group-item-warning,\nbutton.list-group-item-warning {\n  color: #8a6d3b;\n}\na.list-group-item-warning .list-group-item-heading,\nbutton.list-group-item-warning .list-group-item-heading {\n  color: inherit;\n}\na.list-group-item-warning:hover,\nbutton.list-group-item-warning:hover,\na.list-group-item-warning:focus,\nbutton.list-group-item-warning:focus {\n  color: #8a6d3b;\n  background-color: #faf2cc;\n}\na.list-group-item-warning.active,\nbutton.list-group-item-warning.active,\na.list-group-item-warning.active:hover,\nbutton.list-group-item-warning.active:hover,\na.list-group-item-warning.active:focus,\nbutton.list-group-item-warning.active:focus {\n  color: #fff;\n  background-color: #8a6d3b;\n  border-color: #8a6d3b;\n}\n.list-group-item-danger {\n  color: #a94442;\n  background-color: #f2dede;\n}\na.list-group-item-danger,\nbutton.list-group-item-danger {\n  color: #a94442;\n}\na.list-group-item-danger .list-group-item-heading,\nbutton.list-group-item-danger .list-group-item-heading {\n  color: inherit;\n}\na.list-group-item-danger:hover,\nbutton.list-group-item-danger:hover,\na.list-group-item-danger:focus,\nbutton.list-group-item-danger:focus {\n  color: #a94442;\n  background-color: #ebcccc;\n}\na.list-group-item-danger.active,\nbutton.list-group-item-danger.active,\na.list-group-item-danger.active:hover,\nbutton.list-group-item-danger.active:hover,\na.list-group-item-danger.active:focus,\nbutton.list-group-item-danger.active:focus {\n  color: #fff;\n  background-color: #a94442;\n  border-color: #a94442;\n}\n.list-group-item-heading {\n  margin-top: 0;\n  margin-bottom: 5px;\n}\n.list-group-item-text {\n  margin-bottom: 0;\n  line-height: 1.3;\n}\n.panel {\n  margin-bottom: 20px;\n  background-color: #fff;\n  border: 1px solid transparent;\n  border-radius: 4px;\n  -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, .05);\n          box-shadow: 0 1px 1px rgba(0, 0, 0, .05);\n}\n.panel-body {\n  padding: 15px;\n}\n.panel-heading {\n  padding: 10px 15px;\n  border-bottom: 1px solid transparent;\n  border-top-left-radius: 3px;\n  border-top-right-radius: 3px;\n}\n.panel-heading > .dropdown .dropdown-toggle {\n  color: inherit;\n}\n.panel-title {\n  margin-top: 0;\n  margin-bottom: 0;\n  font-size: 16px;\n  color: inherit;\n}\n.panel-title > a,\n.panel-title > small,\n.panel-title > .small,\n.panel-title > small > a,\n.panel-title > .small > a {\n  color: inherit;\n}\n.panel-footer {\n  padding: 10px 15px;\n  background-color: #f5f5f5;\n  border-top: 1px solid #ddd;\n  border-bottom-right-radius: 3px;\n  border-bottom-left-radius: 3px;\n}\n.panel > .list-group,\n.panel > .panel-collapse > .list-group {\n  margin-bottom: 0;\n}\n.panel > .list-group .list-group-item,\n.panel > .panel-collapse > .list-group .list-group-item {\n  border-width: 1px 0;\n  border-radius: 0;\n}\n.panel > .list-group:first-child .list-group-item:first-child,\n.panel > .panel-collapse > .list-group:first-child .list-group-item:first-child {\n  border-top: 0;\n  border-top-left-radius: 3px;\n  border-top-right-radius: 3px;\n}\n.panel > .list-group:last-child .list-group-item:last-child,\n.panel > .panel-collapse > .list-group:last-child .list-group-item:last-child {\n  border-bottom: 0;\n  border-bottom-right-radius: 3px;\n  border-bottom-left-radius: 3px;\n}\n.panel > .panel-heading + .panel-collapse > .list-group .list-group-item:first-child {\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n.panel-heading + .list-group .list-group-item:first-child {\n  border-top-width: 0;\n}\n.list-group + .panel-footer {\n  border-top-width: 0;\n}\n.panel > .table,\n.panel > .table-responsive > .table,\n.panel > .panel-collapse > .table {\n  margin-bottom: 0;\n}\n.panel > .table caption,\n.panel > .table-responsive > .table caption,\n.panel > .panel-collapse > .table caption {\n  padding-right: 15px;\n  padding-left: 15px;\n}\n.panel > .table:first-child,\n.panel > .table-responsive:first-child > .table:first-child {\n  border-top-left-radius: 3px;\n  border-top-right-radius: 3px;\n}\n.panel > .table:first-child > thead:first-child > tr:first-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child {\n  border-top-left-radius: 3px;\n  border-top-right-radius: 3px;\n}\n.panel > .table:first-child > thead:first-child > tr:first-child td:first-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child td:first-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child,\n.panel > .table:first-child > thead:first-child > tr:first-child th:first-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child th:first-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child {\n  border-top-left-radius: 3px;\n}\n.panel > .table:first-child > thead:first-child > tr:first-child td:last-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child td:last-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child,\n.panel > .table:first-child > thead:first-child > tr:first-child th:last-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child th:last-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child {\n  border-top-right-radius: 3px;\n}\n.panel > .table:last-child,\n.panel > .table-responsive:last-child > .table:last-child {\n  border-bottom-right-radius: 3px;\n  border-bottom-left-radius: 3px;\n}\n.panel > .table:last-child > tbody:last-child > tr:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child {\n  border-bottom-right-radius: 3px;\n  border-bottom-left-radius: 3px;\n}\n.panel > .table:last-child > tbody:last-child > tr:last-child td:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child,\n.panel > .table:last-child > tbody:last-child > tr:last-child th:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child {\n  border-bottom-left-radius: 3px;\n}\n.panel > .table:last-child > tbody:last-child > tr:last-child td:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child,\n.panel > .table:last-child > tbody:last-child > tr:last-child th:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child {\n  border-bottom-right-radius: 3px;\n}\n.panel > .panel-body + .table,\n.panel > .panel-body + .table-responsive,\n.panel > .table + .panel-body,\n.panel > .table-responsive + .panel-body {\n  border-top: 1px solid #ddd;\n}\n.panel > .table > tbody:first-child > tr:first-child th,\n.panel > .table > tbody:first-child > tr:first-child td {\n  border-top: 0;\n}\n.panel > .table-bordered,\n.panel > .table-responsive > .table-bordered {\n  border: 0;\n}\n.panel > .table-bordered > thead > tr > th:first-child,\n.panel > .table-responsive > .table-bordered > thead > tr > th:first-child,\n.panel > .table-bordered > tbody > tr > th:first-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > th:first-child,\n.panel > .table-bordered > tfoot > tr > th:first-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child,\n.panel > .table-bordered > thead > tr > td:first-child,\n.panel > .table-responsive > .table-bordered > thead > tr > td:first-child,\n.panel > .table-bordered > tbody > tr > td:first-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > td:first-child,\n.panel > .table-bordered > tfoot > tr > td:first-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child {\n  border-left: 0;\n}\n.panel > .table-bordered > thead > tr > th:last-child,\n.panel > .table-responsive > .table-bordered > thead > tr > th:last-child,\n.panel > .table-bordered > tbody > tr > th:last-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > th:last-child,\n.panel > .table-bordered > tfoot > tr > th:last-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child,\n.panel > .table-bordered > thead > tr > td:last-child,\n.panel > .table-responsive > .table-bordered > thead > tr > td:last-child,\n.panel > .table-bordered > tbody > tr > td:last-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > td:last-child,\n.panel > .table-bordered > tfoot > tr > td:last-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child {\n  border-right: 0;\n}\n.panel > .table-bordered > thead > tr:first-child > td,\n.panel > .table-responsive > .table-bordered > thead > tr:first-child > td,\n.panel > .table-bordered > tbody > tr:first-child > td,\n.panel > .table-responsive > .table-bordered > tbody > tr:first-child > td,\n.panel > .table-bordered > thead > tr:first-child > th,\n.panel > .table-responsive > .table-bordered > thead > tr:first-child > th,\n.panel > .table-bordered > tbody > tr:first-child > th,\n.panel > .table-responsive > .table-bordered > tbody > tr:first-child > th {\n  border-bottom: 0;\n}\n.panel > .table-bordered > tbody > tr:last-child > td,\n.panel > .table-responsive > .table-bordered > tbody > tr:last-child > td,\n.panel > .table-bordered > tfoot > tr:last-child > td,\n.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td,\n.panel > .table-bordered > tbody > tr:last-child > th,\n.panel > .table-responsive > .table-bordered > tbody > tr:last-child > th,\n.panel > .table-bordered > tfoot > tr:last-child > th,\n.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th {\n  border-bottom: 0;\n}\n.panel > .table-responsive {\n  margin-bottom: 0;\n  border: 0;\n}\n.panel-group {\n  margin-bottom: 20px;\n}\n.panel-group .panel {\n  margin-bottom: 0;\n  border-radius: 4px;\n}\n.panel-group .panel + .panel {\n  margin-top: 5px;\n}\n.panel-group .panel-heading {\n  border-bottom: 0;\n}\n.panel-group .panel-heading + .panel-collapse > .panel-body,\n.panel-group .panel-heading + .panel-collapse > .list-group {\n  border-top: 1px solid #ddd;\n}\n.panel-group .panel-footer {\n  border-top: 0;\n}\n.panel-group .panel-footer + .panel-collapse .panel-body {\n  border-bottom: 1px solid #ddd;\n}\n.panel-default {\n  border-color: #ddd;\n}\n.panel-default > .panel-heading {\n  color: #333;\n  background-color: #f5f5f5;\n  border-color: #ddd;\n}\n.panel-default > .panel-heading + .panel-collapse > .panel-body {\n  border-top-color: #ddd;\n}\n.panel-default > .panel-heading .badge {\n  color: #f5f5f5;\n  background-color: #333;\n}\n.panel-default > .panel-footer + .panel-collapse > .panel-body {\n  border-bottom-color: #ddd;\n}\n.panel-primary {\n  border-color: #337ab7;\n}\n.panel-primary > .panel-heading {\n  color: #fff;\n  background-color: #337ab7;\n  border-color: #337ab7;\n}\n.panel-primary > .panel-heading + .panel-collapse > .panel-body {\n  border-top-color: #337ab7;\n}\n.panel-primary > .panel-heading .badge {\n  color: #337ab7;\n  background-color: #fff;\n}\n.panel-primary > .panel-footer + .panel-collapse > .panel-body {\n  border-bottom-color: #337ab7;\n}\n.panel-success {\n  border-color: #d6e9c6;\n}\n.panel-success > .panel-heading {\n  color: #3c763d;\n  background-color: #dff0d8;\n  border-color: #d6e9c6;\n}\n.panel-success > .panel-heading + .panel-collapse > .panel-body {\n  border-top-color: #d6e9c6;\n}\n.panel-success > .panel-heading .badge {\n  color: #dff0d8;\n  background-color: #3c763d;\n}\n.panel-success > .panel-footer + .panel-collapse > .panel-body {\n  border-bottom-color: #d6e9c6;\n}\n.panel-info {\n  border-color: #bce8f1;\n}\n.panel-info > .panel-heading {\n  color: #31708f;\n  background-color: #d9edf7;\n  border-color: #bce8f1;\n}\n.panel-info > .panel-heading + .panel-collapse > .panel-body {\n  border-top-color: #bce8f1;\n}\n.panel-info > .panel-heading .badge {\n  color: #d9edf7;\n  background-color: #31708f;\n}\n.panel-info > .panel-footer + .panel-collapse > .panel-body {\n  border-bottom-color: #bce8f1;\n}\n.panel-warning {\n  border-color: #faebcc;\n}\n.panel-warning > .panel-heading {\n  color: #8a6d3b;\n  background-color: #fcf8e3;\n  border-color: #faebcc;\n}\n.panel-warning > .panel-heading + .panel-collapse > .panel-body {\n  border-top-color: #faebcc;\n}\n.panel-warning > .panel-heading .badge {\n  color: #fcf8e3;\n  background-color: #8a6d3b;\n}\n.panel-warning > .panel-footer + .panel-collapse > .panel-body {\n  border-bottom-color: #faebcc;\n}\n.panel-danger {\n  border-color: #ebccd1;\n}\n.panel-danger > .panel-heading {\n  color: #a94442;\n  background-color: #f2dede;\n  border-color: #ebccd1;\n}\n.panel-danger > .panel-heading + .panel-collapse > .panel-body {\n  border-top-color: #ebccd1;\n}\n.panel-danger > .panel-heading .badge {\n  color: #f2dede;\n  background-color: #a94442;\n}\n.panel-danger > .panel-footer + .panel-collapse > .panel-body {\n  border-bottom-color: #ebccd1;\n}\n.embed-responsive {\n  position: relative;\n  display: block;\n  height: 0;\n  padding: 0;\n  overflow: hidden;\n}\n.embed-responsive .embed-responsive-item,\n.embed-responsive iframe,\n.embed-responsive embed,\n.embed-responsive object,\n.embed-responsive video {\n  position: absolute;\n  top: 0;\n  bottom: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n  border: 0;\n}\n.embed-responsive-16by9 {\n  padding-bottom: 56.25%;\n}\n.embed-responsive-4by3 {\n  padding-bottom: 75%;\n}\n.well {\n  min-height: 20px;\n  padding: 19px;\n  margin-bottom: 20px;\n  background-color: #f5f5f5;\n  border: 1px solid #e3e3e3;\n  border-radius: 4px;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05);\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05);\n}\n.well blockquote {\n  border-color: #ddd;\n  border-color: rgba(0, 0, 0, .15);\n}\n.well-lg {\n  padding: 24px;\n  border-radius: 6px;\n}\n.well-sm {\n  padding: 9px;\n  border-radius: 3px;\n}\n.close {\n  float: right;\n  font-size: 21px;\n  font-weight: bold;\n  line-height: 1;\n  color: #000;\n  text-shadow: 0 1px 0 #fff;\n  filter: alpha(opacity=20);\n  opacity: .2;\n}\n.close:hover,\n.close:focus {\n  color: #000;\n  text-decoration: none;\n  cursor: pointer;\n  filter: alpha(opacity=50);\n  opacity: .5;\n}\nbutton.close {\n  -webkit-appearance: none;\n  padding: 0;\n  cursor: pointer;\n  background: transparent;\n  border: 0;\n}\n.modal-open {\n  overflow: hidden;\n}\n.modal {\n  position: fixed;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 1050;\n  display: none;\n  overflow: hidden;\n  -webkit-overflow-scrolling: touch;\n  outline: 0;\n}\n.modal.fade .modal-dialog {\n  -webkit-transition: -webkit-transform .3s ease-out;\n       -o-transition:      -o-transform .3s ease-out;\n          transition:         transform .3s ease-out;\n  -webkit-transform: translate(0, -25%);\n      -ms-transform: translate(0, -25%);\n       -o-transform: translate(0, -25%);\n          transform: translate(0, -25%);\n}\n.modal.in .modal-dialog {\n  -webkit-transform: translate(0, 0);\n      -ms-transform: translate(0, 0);\n       -o-transform: translate(0, 0);\n          transform: translate(0, 0);\n}\n.modal-open .modal {\n  overflow-x: hidden;\n  overflow-y: auto;\n}\n.modal-dialog {\n  position: relative;\n  width: auto;\n  margin: 10px;\n}\n.modal-content {\n  position: relative;\n  background-color: #fff;\n  -webkit-background-clip: padding-box;\n          background-clip: padding-box;\n  border: 1px solid #999;\n  border: 1px solid rgba(0, 0, 0, .2);\n  border-radius: 6px;\n  outline: 0;\n  -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, .5);\n          box-shadow: 0 3px 9px rgba(0, 0, 0, .5);\n}\n.modal-backdrop {\n  position: fixed;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 1040;\n  background-color: #000;\n}\n.modal-backdrop.fade {\n  filter: alpha(opacity=0);\n  opacity: 0;\n}\n.modal-backdrop.in {\n  filter: alpha(opacity=50);\n  opacity: .5;\n}\n.modal-header {\n  padding: 15px;\n  border-bottom: 1px solid #e5e5e5;\n}\n.modal-header .close {\n  margin-top: -2px;\n}\n.modal-title {\n  margin: 0;\n  line-height: 1.42857143;\n}\n.modal-body {\n  position: relative;\n  padding: 15px;\n}\n.modal-footer {\n  padding: 15px;\n  text-align: right;\n  border-top: 1px solid #e5e5e5;\n}\n.modal-footer .btn + .btn {\n  margin-bottom: 0;\n  margin-left: 5px;\n}\n.modal-footer .btn-group .btn + .btn {\n  margin-left: -1px;\n}\n.modal-footer .btn-block + .btn-block {\n  margin-left: 0;\n}\n.modal-scrollbar-measure {\n  position: absolute;\n  top: -9999px;\n  width: 50px;\n  height: 50px;\n  overflow: scroll;\n}\n@media (min-width: 768px) {\n  .modal-dialog {\n    width: 600px;\n    margin: 30px auto;\n  }\n  .modal-content {\n    -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, .5);\n            box-shadow: 0 5px 15px rgba(0, 0, 0, .5);\n  }\n  .modal-sm {\n    width: 300px;\n  }\n}\n@media (min-width: 992px) {\n  .modal-lg {\n    width: 900px;\n  }\n}\n.tooltip {\n  position: absolute;\n  z-index: 1070;\n  display: block;\n  font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n  font-size: 12px;\n  font-style: normal;\n  font-weight: normal;\n  line-height: 1.42857143;\n  text-align: left;\n  text-align: start;\n  text-decoration: none;\n  text-shadow: none;\n  text-transform: none;\n  letter-spacing: normal;\n  word-break: normal;\n  word-spacing: normal;\n  word-wrap: normal;\n  white-space: normal;\n  filter: alpha(opacity=0);\n  opacity: 0;\n\n  line-break: auto;\n}\n.tooltip.in {\n  filter: alpha(opacity=90);\n  opacity: .9;\n}\n.tooltip.top {\n  padding: 5px 0;\n  margin-top: -3px;\n}\n.tooltip.right {\n  padding: 0 5px;\n  margin-left: 3px;\n}\n.tooltip.bottom {\n  padding: 5px 0;\n  margin-top: 3px;\n}\n.tooltip.left {\n  padding: 0 5px;\n  margin-left: -3px;\n}\n.tooltip-inner {\n  max-width: 200px;\n  padding: 3px 8px;\n  color: #fff;\n  text-align: center;\n  background-color: #000;\n  border-radius: 4px;\n}\n.tooltip-arrow {\n  position: absolute;\n  width: 0;\n  height: 0;\n  border-color: transparent;\n  border-style: solid;\n}\n.tooltip.top .tooltip-arrow {\n  bottom: 0;\n  left: 50%;\n  margin-left: -5px;\n  border-width: 5px 5px 0;\n  border-top-color: #000;\n}\n.tooltip.top-left .tooltip-arrow {\n  right: 5px;\n  bottom: 0;\n  margin-bottom: -5px;\n  border-width: 5px 5px 0;\n  border-top-color: #000;\n}\n.tooltip.top-right .tooltip-arrow {\n  bottom: 0;\n  left: 5px;\n  margin-bottom: -5px;\n  border-width: 5px 5px 0;\n  border-top-color: #000;\n}\n.tooltip.right .tooltip-arrow {\n  top: 50%;\n  left: 0;\n  margin-top: -5px;\n  border-width: 5px 5px 5px 0;\n  border-right-color: #000;\n}\n.tooltip.left .tooltip-arrow {\n  top: 50%;\n  right: 0;\n  margin-top: -5px;\n  border-width: 5px 0 5px 5px;\n  border-left-color: #000;\n}\n.tooltip.bottom .tooltip-arrow {\n  top: 0;\n  left: 50%;\n  margin-left: -5px;\n  border-width: 0 5px 5px;\n  border-bottom-color: #000;\n}\n.tooltip.bottom-left .tooltip-arrow {\n  top: 0;\n  right: 5px;\n  margin-top: -5px;\n  border-width: 0 5px 5px;\n  border-bottom-color: #000;\n}\n.tooltip.bottom-right .tooltip-arrow {\n  top: 0;\n  left: 5px;\n  margin-top: -5px;\n  border-width: 0 5px 5px;\n  border-bottom-color: #000;\n}\n.popover {\n  position: absolute;\n  top: 0;\n  left: 0;\n  z-index: 1060;\n  display: none;\n  max-width: 276px;\n  padding: 1px;\n  font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n  font-size: 14px;\n  font-style: normal;\n  font-weight: normal;\n  line-height: 1.42857143;\n  text-align: left;\n  text-align: start;\n  text-decoration: none;\n  text-shadow: none;\n  text-transform: none;\n  letter-spacing: normal;\n  word-break: normal;\n  word-spacing: normal;\n  word-wrap: normal;\n  white-space: normal;\n  background-color: #fff;\n  -webkit-background-clip: padding-box;\n          background-clip: padding-box;\n  border: 1px solid #ccc;\n  border: 1px solid rgba(0, 0, 0, .2);\n  border-radius: 6px;\n  -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, .2);\n          box-shadow: 0 5px 10px rgba(0, 0, 0, .2);\n\n  line-break: auto;\n}\n.popover.top {\n  margin-top: -10px;\n}\n.popover.right {\n  margin-left: 10px;\n}\n.popover.bottom {\n  margin-top: 10px;\n}\n.popover.left {\n  margin-left: -10px;\n}\n.popover-title {\n  padding: 8px 14px;\n  margin: 0;\n  font-size: 14px;\n  background-color: #f7f7f7;\n  border-bottom: 1px solid #ebebeb;\n  border-radius: 5px 5px 0 0;\n}\n.popover-content {\n  padding: 9px 14px;\n}\n.popover > .arrow,\n.popover > .arrow:after {\n  position: absolute;\n  display: block;\n  width: 0;\n  height: 0;\n  border-color: transparent;\n  border-style: solid;\n}\n.popover > .arrow {\n  border-width: 11px;\n}\n.popover > .arrow:after {\n  content: \"\";\n  border-width: 10px;\n}\n.popover.top > .arrow {\n  bottom: -11px;\n  left: 50%;\n  margin-left: -11px;\n  border-top-color: #999;\n  border-top-color: rgba(0, 0, 0, .25);\n  border-bottom-width: 0;\n}\n.popover.top > .arrow:after {\n  bottom: 1px;\n  margin-left: -10px;\n  content: \" \";\n  border-top-color: #fff;\n  border-bottom-width: 0;\n}\n.popover.right > .arrow {\n  top: 50%;\n  left: -11px;\n  margin-top: -11px;\n  border-right-color: #999;\n  border-right-color: rgba(0, 0, 0, .25);\n  border-left-width: 0;\n}\n.popover.right > .arrow:after {\n  bottom: -10px;\n  left: 1px;\n  content: \" \";\n  border-right-color: #fff;\n  border-left-width: 0;\n}\n.popover.bottom > .arrow {\n  top: -11px;\n  left: 50%;\n  margin-left: -11px;\n  border-top-width: 0;\n  border-bottom-color: #999;\n  border-bottom-color: rgba(0, 0, 0, .25);\n}\n.popover.bottom > .arrow:after {\n  top: 1px;\n  margin-left: -10px;\n  content: \" \";\n  border-top-width: 0;\n  border-bottom-color: #fff;\n}\n.popover.left > .arrow {\n  top: 50%;\n  right: -11px;\n  margin-top: -11px;\n  border-right-width: 0;\n  border-left-color: #999;\n  border-left-color: rgba(0, 0, 0, .25);\n}\n.popover.left > .arrow:after {\n  right: 1px;\n  bottom: -10px;\n  content: \" \";\n  border-right-width: 0;\n  border-left-color: #fff;\n}\n.carousel {\n  position: relative;\n}\n.carousel-inner {\n  position: relative;\n  width: 100%;\n  overflow: hidden;\n}\n.carousel-inner > .item {\n  position: relative;\n  display: none;\n  -webkit-transition: .6s ease-in-out left;\n       -o-transition: .6s ease-in-out left;\n          transition: .6s ease-in-out left;\n}\n.carousel-inner > .item > img,\n.carousel-inner > .item > a > img {\n  line-height: 1;\n}\n@media all and (transform-3d), (-webkit-transform-3d) {\n  .carousel-inner > .item {\n    -webkit-transition: -webkit-transform .6s ease-in-out;\n         -o-transition:      -o-transform .6s ease-in-out;\n            transition:         transform .6s ease-in-out;\n\n    -webkit-backface-visibility: hidden;\n            backface-visibility: hidden;\n    -webkit-perspective: 1000px;\n            perspective: 1000px;\n  }\n  .carousel-inner > .item.next,\n  .carousel-inner > .item.active.right {\n    left: 0;\n    -webkit-transform: translate3d(100%, 0, 0);\n            transform: translate3d(100%, 0, 0);\n  }\n  .carousel-inner > .item.prev,\n  .carousel-inner > .item.active.left {\n    left: 0;\n    -webkit-transform: translate3d(-100%, 0, 0);\n            transform: translate3d(-100%, 0, 0);\n  }\n  .carousel-inner > .item.next.left,\n  .carousel-inner > .item.prev.right,\n  .carousel-inner > .item.active {\n    left: 0;\n    -webkit-transform: translate3d(0, 0, 0);\n            transform: translate3d(0, 0, 0);\n  }\n}\n.carousel-inner > .active,\n.carousel-inner > .next,\n.carousel-inner > .prev {\n  display: block;\n}\n.carousel-inner > .active {\n  left: 0;\n}\n.carousel-inner > .next,\n.carousel-inner > .prev {\n  position: absolute;\n  top: 0;\n  width: 100%;\n}\n.carousel-inner > .next {\n  left: 100%;\n}\n.carousel-inner > .prev {\n  left: -100%;\n}\n.carousel-inner > .next.left,\n.carousel-inner > .prev.right {\n  left: 0;\n}\n.carousel-inner > .active.left {\n  left: -100%;\n}\n.carousel-inner > .active.right {\n  left: 100%;\n}\n.carousel-control {\n  position: absolute;\n  top: 0;\n  bottom: 0;\n  left: 0;\n  width: 15%;\n  font-size: 20px;\n  color: #fff;\n  text-align: center;\n  text-shadow: 0 1px 2px rgba(0, 0, 0, .6);\n  background-color: rgba(0, 0, 0, 0);\n  filter: alpha(opacity=50);\n  opacity: .5;\n}\n.carousel-control.left {\n  background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%);\n  background-image:      -o-linear-gradient(left, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%);\n  background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, .5)), to(rgba(0, 0, 0, .0001)));\n  background-image:         linear-gradient(to right, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);\n  background-repeat: repeat-x;\n}\n.carousel-control.right {\n  right: 0;\n  left: auto;\n  background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%);\n  background-image:      -o-linear-gradient(left, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%);\n  background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, .0001)), to(rgba(0, 0, 0, .5)));\n  background-image:         linear-gradient(to right, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);\n  background-repeat: repeat-x;\n}\n.carousel-control:hover,\n.carousel-control:focus {\n  color: #fff;\n  text-decoration: none;\n  filter: alpha(opacity=90);\n  outline: 0;\n  opacity: .9;\n}\n.carousel-control .icon-prev,\n.carousel-control .icon-next,\n.carousel-control .glyphicon-chevron-left,\n.carousel-control .glyphicon-chevron-right {\n  position: absolute;\n  top: 50%;\n  z-index: 5;\n  display: inline-block;\n  margin-top: -10px;\n}\n.carousel-control .icon-prev,\n.carousel-control .glyphicon-chevron-left {\n  left: 50%;\n  margin-left: -10px;\n}\n.carousel-control .icon-next,\n.carousel-control .glyphicon-chevron-right {\n  right: 50%;\n  margin-right: -10px;\n}\n.carousel-control .icon-prev,\n.carousel-control .icon-next {\n  width: 20px;\n  height: 20px;\n  font-family: serif;\n  line-height: 1;\n}\n.carousel-control .icon-prev:before {\n  content: '\\2039';\n}\n.carousel-control .icon-next:before {\n  content: '\\203a';\n}\n.carousel-indicators {\n  position: absolute;\n  bottom: 10px;\n  left: 50%;\n  z-index: 15;\n  width: 60%;\n  padding-left: 0;\n  margin-left: -30%;\n  text-align: center;\n  list-style: none;\n}\n.carousel-indicators li {\n  display: inline-block;\n  width: 10px;\n  height: 10px;\n  margin: 1px;\n  text-indent: -999px;\n  cursor: pointer;\n  background-color: #000 \\9;\n  background-color: rgba(0, 0, 0, 0);\n  border: 1px solid #fff;\n  border-radius: 10px;\n}\n.carousel-indicators .active {\n  width: 12px;\n  height: 12px;\n  margin: 0;\n  background-color: #fff;\n}\n.carousel-caption {\n  position: absolute;\n  right: 15%;\n  bottom: 20px;\n  left: 15%;\n  z-index: 10;\n  padding-top: 20px;\n  padding-bottom: 20px;\n  color: #fff;\n  text-align: center;\n  text-shadow: 0 1px 2px rgba(0, 0, 0, .6);\n}\n.carousel-caption .btn {\n  text-shadow: none;\n}\n@media screen and (min-width: 768px) {\n  .carousel-control .glyphicon-chevron-left,\n  .carousel-control .glyphicon-chevron-right,\n  .carousel-control .icon-prev,\n  .carousel-control .icon-next {\n    width: 30px;\n    height: 30px;\n    margin-top: -10px;\n    font-size: 30px;\n  }\n  .carousel-control .glyphicon-chevron-left,\n  .carousel-control .icon-prev {\n    margin-left: -10px;\n  }\n  .carousel-control .glyphicon-chevron-right,\n  .carousel-control .icon-next {\n    margin-right: -10px;\n  }\n  .carousel-caption {\n    right: 20%;\n    left: 20%;\n    padding-bottom: 30px;\n  }\n  .carousel-indicators {\n    bottom: 20px;\n  }\n}\n.clearfix:before,\n.clearfix:after,\n.dl-horizontal dd:before,\n.dl-horizontal dd:after,\n.container:before,\n.container:after,\n.container-fluid:before,\n.container-fluid:after,\n.row:before,\n.row:after,\n.form-horizontal .form-group:before,\n.form-horizontal .form-group:after,\n.btn-toolbar:before,\n.btn-toolbar:after,\n.btn-group-vertical > .btn-group:before,\n.btn-group-vertical > .btn-group:after,\n.nav:before,\n.nav:after,\n.navbar:before,\n.navbar:after,\n.navbar-header:before,\n.navbar-header:after,\n.navbar-collapse:before,\n.navbar-collapse:after,\n.pager:before,\n.pager:after,\n.panel-body:before,\n.panel-body:after,\n.modal-header:before,\n.modal-header:after,\n.modal-footer:before,\n.modal-footer:after {\n  display: table;\n  content: \" \";\n}\n.clearfix:after,\n.dl-horizontal dd:after,\n.container:after,\n.container-fluid:after,\n.row:after,\n.form-horizontal .form-group:after,\n.btn-toolbar:after,\n.btn-group-vertical > .btn-group:after,\n.nav:after,\n.navbar:after,\n.navbar-header:after,\n.navbar-collapse:after,\n.pager:after,\n.panel-body:after,\n.modal-header:after,\n.modal-footer:after {\n  clear: both;\n}\n.center-block {\n  display: block;\n  margin-right: auto;\n  margin-left: auto;\n}\n.pull-right {\n  float: right !important;\n}\n.pull-left {\n  float: left !important;\n}\n.hide {\n  display: none !important;\n}\n.show {\n  display: block !important;\n}\n.invisible {\n  visibility: hidden;\n}\n.text-hide {\n  font: 0/0 a;\n  color: transparent;\n  text-shadow: none;\n  background-color: transparent;\n  border: 0;\n}\n.hidden {\n  display: none !important;\n}\n.affix {\n  position: fixed;\n}\n@-ms-viewport {\n  width: device-width;\n}\n.visible-xs,\n.visible-sm,\n.visible-md,\n.visible-lg {\n  display: none !important;\n}\n.visible-xs-block,\n.visible-xs-inline,\n.visible-xs-inline-block,\n.visible-sm-block,\n.visible-sm-inline,\n.visible-sm-inline-block,\n.visible-md-block,\n.visible-md-inline,\n.visible-md-inline-block,\n.visible-lg-block,\n.visible-lg-inline,\n.visible-lg-inline-block {\n  display: none !important;\n}\n@media (max-width: 767px) {\n  .visible-xs {\n    display: block !important;\n  }\n  table.visible-xs {\n    display: table !important;\n  }\n  tr.visible-xs {\n    display: table-row !important;\n  }\n  th.visible-xs,\n  td.visible-xs {\n    display: table-cell !important;\n  }\n}\n@media (max-width: 767px) {\n  .visible-xs-block {\n    display: block !important;\n  }\n}\n@media (max-width: 767px) {\n  .visible-xs-inline {\n    display: inline !important;\n  }\n}\n@media (max-width: 767px) {\n  .visible-xs-inline-block {\n    display: inline-block !important;\n  }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n  .visible-sm {\n    display: block !important;\n  }\n  table.visible-sm {\n    display: table !important;\n  }\n  tr.visible-sm {\n    display: table-row !important;\n  }\n  th.visible-sm,\n  td.visible-sm {\n    display: table-cell !important;\n  }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n  .visible-sm-block {\n    display: block !important;\n  }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n  .visible-sm-inline {\n    display: inline !important;\n  }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n  .visible-sm-inline-block {\n    display: inline-block !important;\n  }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n  .visible-md {\n    display: block !important;\n  }\n  table.visible-md {\n    display: table !important;\n  }\n  tr.visible-md {\n    display: table-row !important;\n  }\n  th.visible-md,\n  td.visible-md {\n    display: table-cell !important;\n  }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n  .visible-md-block {\n    display: block !important;\n  }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n  .visible-md-inline {\n    display: inline !important;\n  }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n  .visible-md-inline-block {\n    display: inline-block !important;\n  }\n}\n@media (min-width: 1200px) {\n  .visible-lg {\n    display: block !important;\n  }\n  table.visible-lg {\n    display: table !important;\n  }\n  tr.visible-lg {\n    display: table-row !important;\n  }\n  th.visible-lg,\n  td.visible-lg {\n    display: table-cell !important;\n  }\n}\n@media (min-width: 1200px) {\n  .visible-lg-block {\n    display: block !important;\n  }\n}\n@media (min-width: 1200px) {\n  .visible-lg-inline {\n    display: inline !important;\n  }\n}\n@media (min-width: 1200px) {\n  .visible-lg-inline-block {\n    display: inline-block !important;\n  }\n}\n@media (max-width: 767px) {\n  .hidden-xs {\n    display: none !important;\n  }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n  .hidden-sm {\n    display: none !important;\n  }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n  .hidden-md {\n    display: none !important;\n  }\n}\n@media (min-width: 1200px) {\n  .hidden-lg {\n    display: none !important;\n  }\n}\n.visible-print {\n  display: none !important;\n}\n@media print {\n  .visible-print {\n    display: block !important;\n  }\n  table.visible-print {\n    display: table !important;\n  }\n  tr.visible-print {\n    display: table-row !important;\n  }\n  th.visible-print,\n  td.visible-print {\n    display: table-cell !important;\n  }\n}\n.visible-print-block {\n  display: none !important;\n}\n@media print {\n  .visible-print-block {\n    display: block !important;\n  }\n}\n.visible-print-inline {\n  display: none !important;\n}\n@media print {\n  .visible-print-inline {\n    display: inline !important;\n  }\n}\n.visible-print-inline-block {\n  display: none !important;\n}\n@media print {\n  .visible-print-inline-block {\n    display: inline-block !important;\n  }\n}\n@media print {\n  .hidden-print {\n    display: none !important;\n  }\n}\n/*# sourceMappingURL=bootstrap.css.map */\n"
  },
  {
    "path": "src/main/resources/static/plugins/bootstrap/js/bootstrap.js",
    "content": "/*!\n * Bootstrap v3.3.7 (http://getbootstrap.com)\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under the MIT license\n */\n\nif (typeof jQuery === 'undefined') {\n  throw new Error('Bootstrap\\'s JavaScript requires jQuery')\n}\n\n+function ($) {\n  'use strict';\n  var version = $.fn.jquery.split(' ')[0].split('.')\n  if ((version[0] < 2 && version[1] < 9) || (version[0] == 1 && version[1] == 9 && version[2] < 1) || (version[0] > 3)) {\n    throw new Error('Bootstrap\\'s JavaScript requires jQuery version 1.9.1 or higher, but lower than version 4')\n  }\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: transition.js v3.3.7\n * http://getbootstrap.com/javascript/#transitions\n * ========================================================================\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // CSS TRANSITION SUPPORT (Shoutout: http://www.modernizr.com/)\n  // ============================================================\n\n  function transitionEnd() {\n    var el = document.createElement('bootstrap')\n\n    var transEndEventNames = {\n      WebkitTransition : 'webkitTransitionEnd',\n      MozTransition    : 'transitionend',\n      OTransition      : 'oTransitionEnd otransitionend',\n      transition       : 'transitionend'\n    }\n\n    for (var name in transEndEventNames) {\n      if (el.style[name] !== undefined) {\n        return { end: transEndEventNames[name] }\n      }\n    }\n\n    return false // explicit for ie8 (  ._.)\n  }\n\n  // http://blog.alexmaccaw.com/css-transitions\n  $.fn.emulateTransitionEnd = function (duration) {\n    var called = false\n    var $el = this\n    $(this).one('bsTransitionEnd', function () { called = true })\n    var callback = function () { if (!called) $($el).trigger($.support.transition.end) }\n    setTimeout(callback, duration)\n    return this\n  }\n\n  $(function () {\n    $.support.transition = transitionEnd()\n\n    if (!$.support.transition) return\n\n    $.event.special.bsTransitionEnd = {\n      bindType: $.support.transition.end,\n      delegateType: $.support.transition.end,\n      handle: function (e) {\n        if ($(e.target).is(this)) return e.handleObj.handler.apply(this, arguments)\n      }\n    }\n  })\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: alert.js v3.3.7\n * http://getbootstrap.com/javascript/#alerts\n * ========================================================================\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // ALERT CLASS DEFINITION\n  // ======================\n\n  var dismiss = '[data-dismiss=\"alert\"]'\n  var Alert   = function (el) {\n    $(el).on('click', dismiss, this.close)\n  }\n\n  Alert.VERSION = '3.3.7'\n\n  Alert.TRANSITION_DURATION = 150\n\n  Alert.prototype.close = function (e) {\n    var $this    = $(this)\n    var selector = $this.attr('data-target')\n\n    if (!selector) {\n      selector = $this.attr('href')\n      selector = selector && selector.replace(/.*(?=#[^\\s]*$)/, '') // strip for ie7\n    }\n\n    var $parent = $(selector === '#' ? [] : selector)\n\n    if (e) e.preventDefault()\n\n    if (!$parent.length) {\n      $parent = $this.closest('.alert')\n    }\n\n    $parent.trigger(e = $.Event('close.bs.alert'))\n\n    if (e.isDefaultPrevented()) return\n\n    $parent.removeClass('in')\n\n    function removeElement() {\n      // detach from parent, fire event then clean up data\n      $parent.detach().trigger('closed.bs.alert').remove()\n    }\n\n    $.support.transition && $parent.hasClass('fade') ?\n      $parent\n        .one('bsTransitionEnd', removeElement)\n        .emulateTransitionEnd(Alert.TRANSITION_DURATION) :\n      removeElement()\n  }\n\n\n  // ALERT PLUGIN DEFINITION\n  // =======================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this = $(this)\n      var data  = $this.data('bs.alert')\n\n      if (!data) $this.data('bs.alert', (data = new Alert(this)))\n      if (typeof option == 'string') data[option].call($this)\n    })\n  }\n\n  var old = $.fn.alert\n\n  $.fn.alert             = Plugin\n  $.fn.alert.Constructor = Alert\n\n\n  // ALERT NO CONFLICT\n  // =================\n\n  $.fn.alert.noConflict = function () {\n    $.fn.alert = old\n    return this\n  }\n\n\n  // ALERT DATA-API\n  // ==============\n\n  $(document).on('click.bs.alert.data-api', dismiss, Alert.prototype.close)\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: button.js v3.3.7\n * http://getbootstrap.com/javascript/#buttons\n * ========================================================================\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // BUTTON PUBLIC CLASS DEFINITION\n  // ==============================\n\n  var Button = function (element, options) {\n    this.$element  = $(element)\n    this.options   = $.extend({}, Button.DEFAULTS, options)\n    this.isLoading = false\n  }\n\n  Button.VERSION  = '3.3.7'\n\n  Button.DEFAULTS = {\n    loadingText: 'loading...'\n  }\n\n  Button.prototype.setState = function (state) {\n    var d    = 'disabled'\n    var $el  = this.$element\n    var val  = $el.is('input') ? 'val' : 'html'\n    var data = $el.data()\n\n    state += 'Text'\n\n    if (data.resetText == null) $el.data('resetText', $el[val]())\n\n    // push to event loop to allow forms to submit\n    setTimeout($.proxy(function () {\n      $el[val](data[state] == null ? this.options[state] : data[state])\n\n      if (state == 'loadingText') {\n        this.isLoading = true\n        $el.addClass(d).attr(d, d).prop(d, true)\n      } else if (this.isLoading) {\n        this.isLoading = false\n        $el.removeClass(d).removeAttr(d).prop(d, false)\n      }\n    }, this), 0)\n  }\n\n  Button.prototype.toggle = function () {\n    var changed = true\n    var $parent = this.$element.closest('[data-toggle=\"buttons\"]')\n\n    if ($parent.length) {\n      var $input = this.$element.find('input')\n      if ($input.prop('type') == 'radio') {\n        if ($input.prop('checked')) changed = false\n        $parent.find('.active').removeClass('active')\n        this.$element.addClass('active')\n      } else if ($input.prop('type') == 'checkbox') {\n        if (($input.prop('checked')) !== this.$element.hasClass('active')) changed = false\n        this.$element.toggleClass('active')\n      }\n      $input.prop('checked', this.$element.hasClass('active'))\n      if (changed) $input.trigger('change')\n    } else {\n      this.$element.attr('aria-pressed', !this.$element.hasClass('active'))\n      this.$element.toggleClass('active')\n    }\n  }\n\n\n  // BUTTON PLUGIN DEFINITION\n  // ========================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.button')\n      var options = typeof option == 'object' && option\n\n      if (!data) $this.data('bs.button', (data = new Button(this, options)))\n\n      if (option == 'toggle') data.toggle()\n      else if (option) data.setState(option)\n    })\n  }\n\n  var old = $.fn.button\n\n  $.fn.button             = Plugin\n  $.fn.button.Constructor = Button\n\n\n  // BUTTON NO CONFLICT\n  // ==================\n\n  $.fn.button.noConflict = function () {\n    $.fn.button = old\n    return this\n  }\n\n\n  // BUTTON DATA-API\n  // ===============\n\n  $(document)\n    .on('click.bs.button.data-api', '[data-toggle^=\"button\"]', function (e) {\n      var $btn = $(e.target).closest('.btn')\n      Plugin.call($btn, 'toggle')\n      if (!($(e.target).is('input[type=\"radio\"], input[type=\"checkbox\"]'))) {\n        // Prevent double click on radios, and the double selections (so cancellation) on checkboxes\n        e.preventDefault()\n        // The target component still receive the focus\n        if ($btn.is('input,button')) $btn.trigger('focus')\n        else $btn.find('input:visible,button:visible').first().trigger('focus')\n      }\n    })\n    .on('focus.bs.button.data-api blur.bs.button.data-api', '[data-toggle^=\"button\"]', function (e) {\n      $(e.target).closest('.btn').toggleClass('focus', /^focus(in)?$/.test(e.type))\n    })\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: carousel.js v3.3.7\n * http://getbootstrap.com/javascript/#carousel\n * ========================================================================\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // CAROUSEL CLASS DEFINITION\n  // =========================\n\n  var Carousel = function (element, options) {\n    this.$element    = $(element)\n    this.$indicators = this.$element.find('.carousel-indicators')\n    this.options     = options\n    this.paused      = null\n    this.sliding     = null\n    this.interval    = null\n    this.$active     = null\n    this.$items      = null\n\n    this.options.keyboard && this.$element.on('keydown.bs.carousel', $.proxy(this.keydown, this))\n\n    this.options.pause == 'hover' && !('ontouchstart' in document.documentElement) && this.$element\n      .on('mouseenter.bs.carousel', $.proxy(this.pause, this))\n      .on('mouseleave.bs.carousel', $.proxy(this.cycle, this))\n  }\n\n  Carousel.VERSION  = '3.3.7'\n\n  Carousel.TRANSITION_DURATION = 600\n\n  Carousel.DEFAULTS = {\n    interval: 5000,\n    pause: 'hover',\n    wrap: true,\n    keyboard: true\n  }\n\n  Carousel.prototype.keydown = function (e) {\n    if (/input|textarea/i.test(e.target.tagName)) return\n    switch (e.which) {\n      case 37: this.prev(); break\n      case 39: this.next(); break\n      default: return\n    }\n\n    e.preventDefault()\n  }\n\n  Carousel.prototype.cycle = function (e) {\n    e || (this.paused = false)\n\n    this.interval && clearInterval(this.interval)\n\n    this.options.interval\n      && !this.paused\n      && (this.interval = setInterval($.proxy(this.next, this), this.options.interval))\n\n    return this\n  }\n\n  Carousel.prototype.getItemIndex = function (item) {\n    this.$items = item.parent().children('.item')\n    return this.$items.index(item || this.$active)\n  }\n\n  Carousel.prototype.getItemForDirection = function (direction, active) {\n    var activeIndex = this.getItemIndex(active)\n    var willWrap = (direction == 'prev' && activeIndex === 0)\n                || (direction == 'next' && activeIndex == (this.$items.length - 1))\n    if (willWrap && !this.options.wrap) return active\n    var delta = direction == 'prev' ? -1 : 1\n    var itemIndex = (activeIndex + delta) % this.$items.length\n    return this.$items.eq(itemIndex)\n  }\n\n  Carousel.prototype.to = function (pos) {\n    var that        = this\n    var activeIndex = this.getItemIndex(this.$active = this.$element.find('.item.active'))\n\n    if (pos > (this.$items.length - 1) || pos < 0) return\n\n    if (this.sliding)       return this.$element.one('slid.bs.carousel', function () { that.to(pos) }) // yes, \"slid\"\n    if (activeIndex == pos) return this.pause().cycle()\n\n    return this.slide(pos > activeIndex ? 'next' : 'prev', this.$items.eq(pos))\n  }\n\n  Carousel.prototype.pause = function (e) {\n    e || (this.paused = true)\n\n    if (this.$element.find('.next, .prev').length && $.support.transition) {\n      this.$element.trigger($.support.transition.end)\n      this.cycle(true)\n    }\n\n    this.interval = clearInterval(this.interval)\n\n    return this\n  }\n\n  Carousel.prototype.next = function () {\n    if (this.sliding) return\n    return this.slide('next')\n  }\n\n  Carousel.prototype.prev = function () {\n    if (this.sliding) return\n    return this.slide('prev')\n  }\n\n  Carousel.prototype.slide = function (type, next) {\n    var $active   = this.$element.find('.item.active')\n    var $next     = next || this.getItemForDirection(type, $active)\n    var isCycling = this.interval\n    var direction = type == 'next' ? 'left' : 'right'\n    var that      = this\n\n    if ($next.hasClass('active')) return (this.sliding = false)\n\n    var relatedTarget = $next[0]\n    var slideEvent = $.Event('slide.bs.carousel', {\n      relatedTarget: relatedTarget,\n      direction: direction\n    })\n    this.$element.trigger(slideEvent)\n    if (slideEvent.isDefaultPrevented()) return\n\n    this.sliding = true\n\n    isCycling && this.pause()\n\n    if (this.$indicators.length) {\n      this.$indicators.find('.active').removeClass('active')\n      var $nextIndicator = $(this.$indicators.children()[this.getItemIndex($next)])\n      $nextIndicator && $nextIndicator.addClass('active')\n    }\n\n    var slidEvent = $.Event('slid.bs.carousel', { relatedTarget: relatedTarget, direction: direction }) // yes, \"slid\"\n    if ($.support.transition && this.$element.hasClass('slide')) {\n      $next.addClass(type)\n      $next[0].offsetWidth // force reflow\n      $active.addClass(direction)\n      $next.addClass(direction)\n      $active\n        .one('bsTransitionEnd', function () {\n          $next.removeClass([type, direction].join(' ')).addClass('active')\n          $active.removeClass(['active', direction].join(' '))\n          that.sliding = false\n          setTimeout(function () {\n            that.$element.trigger(slidEvent)\n          }, 0)\n        })\n        .emulateTransitionEnd(Carousel.TRANSITION_DURATION)\n    } else {\n      $active.removeClass('active')\n      $next.addClass('active')\n      this.sliding = false\n      this.$element.trigger(slidEvent)\n    }\n\n    isCycling && this.cycle()\n\n    return this\n  }\n\n\n  // CAROUSEL PLUGIN DEFINITION\n  // ==========================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.carousel')\n      var options = $.extend({}, Carousel.DEFAULTS, $this.data(), typeof option == 'object' && option)\n      var action  = typeof option == 'string' ? option : options.slide\n\n      if (!data) $this.data('bs.carousel', (data = new Carousel(this, options)))\n      if (typeof option == 'number') data.to(option)\n      else if (action) data[action]()\n      else if (options.interval) data.pause().cycle()\n    })\n  }\n\n  var old = $.fn.carousel\n\n  $.fn.carousel             = Plugin\n  $.fn.carousel.Constructor = Carousel\n\n\n  // CAROUSEL NO CONFLICT\n  // ====================\n\n  $.fn.carousel.noConflict = function () {\n    $.fn.carousel = old\n    return this\n  }\n\n\n  // CAROUSEL DATA-API\n  // =================\n\n  var clickHandler = function (e) {\n    var href\n    var $this   = $(this)\n    var $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\\s]+$)/, '')) // strip for ie7\n    if (!$target.hasClass('carousel')) return\n    var options = $.extend({}, $target.data(), $this.data())\n    var slideIndex = $this.attr('data-slide-to')\n    if (slideIndex) options.interval = false\n\n    Plugin.call($target, options)\n\n    if (slideIndex) {\n      $target.data('bs.carousel').to(slideIndex)\n    }\n\n    e.preventDefault()\n  }\n\n  $(document)\n    .on('click.bs.carousel.data-api', '[data-slide]', clickHandler)\n    .on('click.bs.carousel.data-api', '[data-slide-to]', clickHandler)\n\n  $(window).on('load', function () {\n    $('[data-ride=\"carousel\"]').each(function () {\n      var $carousel = $(this)\n      Plugin.call($carousel, $carousel.data())\n    })\n  })\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: collapse.js v3.3.7\n * http://getbootstrap.com/javascript/#collapse\n * ========================================================================\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n/* jshint latedef: false */\n\n+function ($) {\n  'use strict';\n\n  // COLLAPSE PUBLIC CLASS DEFINITION\n  // ================================\n\n  var Collapse = function (element, options) {\n    this.$element      = $(element)\n    this.options       = $.extend({}, Collapse.DEFAULTS, options)\n    this.$trigger      = $('[data-toggle=\"collapse\"][href=\"#' + element.id + '\"],' +\n                           '[data-toggle=\"collapse\"][data-target=\"#' + element.id + '\"]')\n    this.transitioning = null\n\n    if (this.options.parent) {\n      this.$parent = this.getParent()\n    } else {\n      this.addAriaAndCollapsedClass(this.$element, this.$trigger)\n    }\n\n    if (this.options.toggle) this.toggle()\n  }\n\n  Collapse.VERSION  = '3.3.7'\n\n  Collapse.TRANSITION_DURATION = 350\n\n  Collapse.DEFAULTS = {\n    toggle: true\n  }\n\n  Collapse.prototype.dimension = function () {\n    var hasWidth = this.$element.hasClass('width')\n    return hasWidth ? 'width' : 'height'\n  }\n\n  Collapse.prototype.show = function () {\n    if (this.transitioning || this.$element.hasClass('in')) return\n\n    var activesData\n    var actives = this.$parent && this.$parent.children('.panel').children('.in, .collapsing')\n\n    if (actives && actives.length) {\n      activesData = actives.data('bs.collapse')\n      if (activesData && activesData.transitioning) return\n    }\n\n    var startEvent = $.Event('show.bs.collapse')\n    this.$element.trigger(startEvent)\n    if (startEvent.isDefaultPrevented()) return\n\n    if (actives && actives.length) {\n      Plugin.call(actives, 'hide')\n      activesData || actives.data('bs.collapse', null)\n    }\n\n    var dimension = this.dimension()\n\n    this.$element\n      .removeClass('collapse')\n      .addClass('collapsing')[dimension](0)\n      .attr('aria-expanded', true)\n\n    this.$trigger\n      .removeClass('collapsed')\n      .attr('aria-expanded', true)\n\n    this.transitioning = 1\n\n    var complete = function () {\n      this.$element\n        .removeClass('collapsing')\n        .addClass('collapse in')[dimension]('')\n      this.transitioning = 0\n      this.$element\n        .trigger('shown.bs.collapse')\n    }\n\n    if (!$.support.transition) return complete.call(this)\n\n    var scrollSize = $.camelCase(['scroll', dimension].join('-'))\n\n    this.$element\n      .one('bsTransitionEnd', $.proxy(complete, this))\n      .emulateTransitionEnd(Collapse.TRANSITION_DURATION)[dimension](this.$element[0][scrollSize])\n  }\n\n  Collapse.prototype.hide = function () {\n    if (this.transitioning || !this.$element.hasClass('in')) return\n\n    var startEvent = $.Event('hide.bs.collapse')\n    this.$element.trigger(startEvent)\n    if (startEvent.isDefaultPrevented()) return\n\n    var dimension = this.dimension()\n\n    this.$element[dimension](this.$element[dimension]())[0].offsetHeight\n\n    this.$element\n      .addClass('collapsing')\n      .removeClass('collapse in')\n      .attr('aria-expanded', false)\n\n    this.$trigger\n      .addClass('collapsed')\n      .attr('aria-expanded', false)\n\n    this.transitioning = 1\n\n    var complete = function () {\n      this.transitioning = 0\n      this.$element\n        .removeClass('collapsing')\n        .addClass('collapse')\n        .trigger('hidden.bs.collapse')\n    }\n\n    if (!$.support.transition) return complete.call(this)\n\n    this.$element\n      [dimension](0)\n      .one('bsTransitionEnd', $.proxy(complete, this))\n      .emulateTransitionEnd(Collapse.TRANSITION_DURATION)\n  }\n\n  Collapse.prototype.toggle = function () {\n    this[this.$element.hasClass('in') ? 'hide' : 'show']()\n  }\n\n  Collapse.prototype.getParent = function () {\n    return $(this.options.parent)\n      .find('[data-toggle=\"collapse\"][data-parent=\"' + this.options.parent + '\"]')\n      .each($.proxy(function (i, element) {\n        var $element = $(element)\n        this.addAriaAndCollapsedClass(getTargetFromTrigger($element), $element)\n      }, this))\n      .end()\n  }\n\n  Collapse.prototype.addAriaAndCollapsedClass = function ($element, $trigger) {\n    var isOpen = $element.hasClass('in')\n\n    $element.attr('aria-expanded', isOpen)\n    $trigger\n      .toggleClass('collapsed', !isOpen)\n      .attr('aria-expanded', isOpen)\n  }\n\n  function getTargetFromTrigger($trigger) {\n    var href\n    var target = $trigger.attr('data-target')\n      || (href = $trigger.attr('href')) && href.replace(/.*(?=#[^\\s]+$)/, '') // strip for ie7\n\n    return $(target)\n  }\n\n\n  // COLLAPSE PLUGIN DEFINITION\n  // ==========================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.collapse')\n      var options = $.extend({}, Collapse.DEFAULTS, $this.data(), typeof option == 'object' && option)\n\n      if (!data && options.toggle && /show|hide/.test(option)) options.toggle = false\n      if (!data) $this.data('bs.collapse', (data = new Collapse(this, options)))\n      if (typeof option == 'string') data[option]()\n    })\n  }\n\n  var old = $.fn.collapse\n\n  $.fn.collapse             = Plugin\n  $.fn.collapse.Constructor = Collapse\n\n\n  // COLLAPSE NO CONFLICT\n  // ====================\n\n  $.fn.collapse.noConflict = function () {\n    $.fn.collapse = old\n    return this\n  }\n\n\n  // COLLAPSE DATA-API\n  // =================\n\n  $(document).on('click.bs.collapse.data-api', '[data-toggle=\"collapse\"]', function (e) {\n    var $this   = $(this)\n\n    if (!$this.attr('data-target')) e.preventDefault()\n\n    var $target = getTargetFromTrigger($this)\n    var data    = $target.data('bs.collapse')\n    var option  = data ? 'toggle' : $this.data()\n\n    Plugin.call($target, option)\n  })\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: dropdown.js v3.3.7\n * http://getbootstrap.com/javascript/#dropdowns\n * ========================================================================\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // DROPDOWN CLASS DEFINITION\n  // =========================\n\n  var backdrop = '.dropdown-backdrop'\n  var toggle   = '[data-toggle=\"dropdown\"]'\n  var Dropdown = function (element) {\n    $(element).on('click.bs.dropdown', this.toggle)\n  }\n\n  Dropdown.VERSION = '3.3.7'\n\n  function getParent($this) {\n    var selector = $this.attr('data-target')\n\n    if (!selector) {\n      selector = $this.attr('href')\n      selector = selector && /#[A-Za-z]/.test(selector) && selector.replace(/.*(?=#[^\\s]*$)/, '') // strip for ie7\n    }\n\n    var $parent = selector && $(selector)\n\n    return $parent && $parent.length ? $parent : $this.parent()\n  }\n\n  function clearMenus(e) {\n    if (e && e.which === 3) return\n    $(backdrop).remove()\n    $(toggle).each(function () {\n      var $this         = $(this)\n      var $parent       = getParent($this)\n      var relatedTarget = { relatedTarget: this }\n\n      if (!$parent.hasClass('open')) return\n\n      if (e && e.type == 'click' && /input|textarea/i.test(e.target.tagName) && $.contains($parent[0], e.target)) return\n\n      $parent.trigger(e = $.Event('hide.bs.dropdown', relatedTarget))\n\n      if (e.isDefaultPrevented()) return\n\n      $this.attr('aria-expanded', 'false')\n      $parent.removeClass('open').trigger($.Event('hidden.bs.dropdown', relatedTarget))\n    })\n  }\n\n  Dropdown.prototype.toggle = function (e) {\n    var $this = $(this)\n\n    if ($this.is('.disabled, :disabled')) return\n\n    var $parent  = getParent($this)\n    var isActive = $parent.hasClass('open')\n\n    clearMenus()\n\n    if (!isActive) {\n      if ('ontouchstart' in document.documentElement && !$parent.closest('.navbar-nav').length) {\n        // if mobile we use a backdrop because click events don't delegate\n        $(document.createElement('div'))\n          .addClass('dropdown-backdrop')\n          .insertAfter($(this))\n          .on('click', clearMenus)\n      }\n\n      var relatedTarget = { relatedTarget: this }\n      $parent.trigger(e = $.Event('show.bs.dropdown', relatedTarget))\n\n      if (e.isDefaultPrevented()) return\n\n      $this\n        .trigger('focus')\n        .attr('aria-expanded', 'true')\n\n      $parent\n        .toggleClass('open')\n        .trigger($.Event('shown.bs.dropdown', relatedTarget))\n    }\n\n    return false\n  }\n\n  Dropdown.prototype.keydown = function (e) {\n    if (!/(38|40|27|32)/.test(e.which) || /input|textarea/i.test(e.target.tagName)) return\n\n    var $this = $(this)\n\n    e.preventDefault()\n    e.stopPropagation()\n\n    if ($this.is('.disabled, :disabled')) return\n\n    var $parent  = getParent($this)\n    var isActive = $parent.hasClass('open')\n\n    if (!isActive && e.which != 27 || isActive && e.which == 27) {\n      if (e.which == 27) $parent.find(toggle).trigger('focus')\n      return $this.trigger('click')\n    }\n\n    var desc = ' li:not(.disabled):visible a'\n    var $items = $parent.find('.dropdown-menu' + desc)\n\n    if (!$items.length) return\n\n    var index = $items.index(e.target)\n\n    if (e.which == 38 && index > 0)                 index--         // up\n    if (e.which == 40 && index < $items.length - 1) index++         // down\n    if (!~index)                                    index = 0\n\n    $items.eq(index).trigger('focus')\n  }\n\n\n  // DROPDOWN PLUGIN DEFINITION\n  // ==========================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this = $(this)\n      var data  = $this.data('bs.dropdown')\n\n      if (!data) $this.data('bs.dropdown', (data = new Dropdown(this)))\n      if (typeof option == 'string') data[option].call($this)\n    })\n  }\n\n  var old = $.fn.dropdown\n\n  $.fn.dropdown             = Plugin\n  $.fn.dropdown.Constructor = Dropdown\n\n\n  // DROPDOWN NO CONFLICT\n  // ====================\n\n  $.fn.dropdown.noConflict = function () {\n    $.fn.dropdown = old\n    return this\n  }\n\n\n  // APPLY TO STANDARD DROPDOWN ELEMENTS\n  // ===================================\n\n  $(document)\n    .on('click.bs.dropdown.data-api', clearMenus)\n    .on('click.bs.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() })\n    .on('click.bs.dropdown.data-api', toggle, Dropdown.prototype.toggle)\n    .on('keydown.bs.dropdown.data-api', toggle, Dropdown.prototype.keydown)\n    .on('keydown.bs.dropdown.data-api', '.dropdown-menu', Dropdown.prototype.keydown)\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: modal.js v3.3.7\n * http://getbootstrap.com/javascript/#modals\n * ========================================================================\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // MODAL CLASS DEFINITION\n  // ======================\n\n  var Modal = function (element, options) {\n    this.options             = options\n    this.$body               = $(document.body)\n    this.$element            = $(element)\n    this.$dialog             = this.$element.find('.modal-dialog')\n    this.$backdrop           = null\n    this.isShown             = null\n    this.originalBodyPad     = null\n    this.scrollbarWidth      = 0\n    this.ignoreBackdropClick = false\n\n    if (this.options.remote) {\n      this.$element\n        .find('.modal-content')\n        .load(this.options.remote, $.proxy(function () {\n          this.$element.trigger('loaded.bs.modal')\n        }, this))\n    }\n  }\n\n  Modal.VERSION  = '3.3.7'\n\n  Modal.TRANSITION_DURATION = 300\n  Modal.BACKDROP_TRANSITION_DURATION = 150\n\n  Modal.DEFAULTS = {\n    backdrop: true,\n    keyboard: true,\n    show: true\n  }\n\n  Modal.prototype.toggle = function (_relatedTarget) {\n    return this.isShown ? this.hide() : this.show(_relatedTarget)\n  }\n\n  Modal.prototype.show = function (_relatedTarget) {\n    var that = this\n    var e    = $.Event('show.bs.modal', { relatedTarget: _relatedTarget })\n\n    this.$element.trigger(e)\n\n    if (this.isShown || e.isDefaultPrevented()) return\n\n    this.isShown = true\n\n    this.checkScrollbar()\n    this.setScrollbar()\n    this.$body.addClass('modal-open')\n\n    this.escape()\n    this.resize()\n\n    this.$element.on('click.dismiss.bs.modal', '[data-dismiss=\"modal\"]', $.proxy(this.hide, this))\n\n    this.$dialog.on('mousedown.dismiss.bs.modal', function () {\n      that.$element.one('mouseup.dismiss.bs.modal', function (e) {\n        if ($(e.target).is(that.$element)) that.ignoreBackdropClick = true\n      })\n    })\n\n    this.backdrop(function () {\n      var transition = $.support.transition && that.$element.hasClass('fade')\n\n      if (!that.$element.parent().length) {\n        that.$element.appendTo(that.$body) // don't move modals dom position\n      }\n\n      that.$element\n        .show()\n        .scrollTop(0)\n\n      that.adjustDialog()\n\n      if (transition) {\n        that.$element[0].offsetWidth // force reflow\n      }\n\n      that.$element.addClass('in')\n\n      that.enforceFocus()\n\n      var e = $.Event('shown.bs.modal', { relatedTarget: _relatedTarget })\n\n      transition ?\n        that.$dialog // wait for modal to slide in\n          .one('bsTransitionEnd', function () {\n            that.$element.trigger('focus').trigger(e)\n          })\n          .emulateTransitionEnd(Modal.TRANSITION_DURATION) :\n        that.$element.trigger('focus').trigger(e)\n    })\n  }\n\n  Modal.prototype.hide = function (e) {\n    if (e) e.preventDefault()\n\n    e = $.Event('hide.bs.modal')\n\n    this.$element.trigger(e)\n\n    if (!this.isShown || e.isDefaultPrevented()) return\n\n    this.isShown = false\n\n    this.escape()\n    this.resize()\n\n    $(document).off('focusin.bs.modal')\n\n    this.$element\n      .removeClass('in')\n      .off('click.dismiss.bs.modal')\n      .off('mouseup.dismiss.bs.modal')\n\n    this.$dialog.off('mousedown.dismiss.bs.modal')\n\n    $.support.transition && this.$element.hasClass('fade') ?\n      this.$element\n        .one('bsTransitionEnd', $.proxy(this.hideModal, this))\n        .emulateTransitionEnd(Modal.TRANSITION_DURATION) :\n      this.hideModal()\n  }\n\n  Modal.prototype.enforceFocus = function () {\n    $(document)\n      .off('focusin.bs.modal') // guard against infinite focus loop\n      .on('focusin.bs.modal', $.proxy(function (e) {\n        if (document !== e.target &&\n            this.$element[0] !== e.target &&\n            !this.$element.has(e.target).length) {\n          this.$element.trigger('focus')\n        }\n      }, this))\n  }\n\n  Modal.prototype.escape = function () {\n    if (this.isShown && this.options.keyboard) {\n      this.$element.on('keydown.dismiss.bs.modal', $.proxy(function (e) {\n        e.which == 27 && this.hide()\n      }, this))\n    } else if (!this.isShown) {\n      this.$element.off('keydown.dismiss.bs.modal')\n    }\n  }\n\n  Modal.prototype.resize = function () {\n    if (this.isShown) {\n      $(window).on('resize.bs.modal', $.proxy(this.handleUpdate, this))\n    } else {\n      $(window).off('resize.bs.modal')\n    }\n  }\n\n  Modal.prototype.hideModal = function () {\n    var that = this\n    this.$element.hide()\n    this.backdrop(function () {\n      that.$body.removeClass('modal-open')\n      that.resetAdjustments()\n      that.resetScrollbar()\n      that.$element.trigger('hidden.bs.modal')\n    })\n  }\n\n  Modal.prototype.removeBackdrop = function () {\n    this.$backdrop && this.$backdrop.remove()\n    this.$backdrop = null\n  }\n\n  Modal.prototype.backdrop = function (callback) {\n    var that = this\n    var animate = this.$element.hasClass('fade') ? 'fade' : ''\n\n    if (this.isShown && this.options.backdrop) {\n      var doAnimate = $.support.transition && animate\n\n      this.$backdrop = $(document.createElement('div'))\n        .addClass('modal-backdrop ' + animate)\n        .appendTo(this.$body)\n\n      this.$element.on('click.dismiss.bs.modal', $.proxy(function (e) {\n        if (this.ignoreBackdropClick) {\n          this.ignoreBackdropClick = false\n          return\n        }\n        if (e.target !== e.currentTarget) return\n        this.options.backdrop == 'static'\n          ? this.$element[0].focus()\n          : this.hide()\n      }, this))\n\n      if (doAnimate) this.$backdrop[0].offsetWidth // force reflow\n\n      this.$backdrop.addClass('in')\n\n      if (!callback) return\n\n      doAnimate ?\n        this.$backdrop\n          .one('bsTransitionEnd', callback)\n          .emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) :\n        callback()\n\n    } else if (!this.isShown && this.$backdrop) {\n      this.$backdrop.removeClass('in')\n\n      var callbackRemove = function () {\n        that.removeBackdrop()\n        callback && callback()\n      }\n      $.support.transition && this.$element.hasClass('fade') ?\n        this.$backdrop\n          .one('bsTransitionEnd', callbackRemove)\n          .emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) :\n        callbackRemove()\n\n    } else if (callback) {\n      callback()\n    }\n  }\n\n  // these following methods are used to handle overflowing modals\n\n  Modal.prototype.handleUpdate = function () {\n    this.adjustDialog()\n  }\n\n  Modal.prototype.adjustDialog = function () {\n    var modalIsOverflowing = this.$element[0].scrollHeight > document.documentElement.clientHeight\n\n    this.$element.css({\n      paddingLeft:  !this.bodyIsOverflowing && modalIsOverflowing ? this.scrollbarWidth : '',\n      paddingRight: this.bodyIsOverflowing && !modalIsOverflowing ? this.scrollbarWidth : ''\n    })\n  }\n\n  Modal.prototype.resetAdjustments = function () {\n    this.$element.css({\n      paddingLeft: '',\n      paddingRight: ''\n    })\n  }\n\n  Modal.prototype.checkScrollbar = function () {\n    var fullWindowWidth = window.innerWidth\n    if (!fullWindowWidth) { // workaround for missing window.innerWidth in IE8\n      var documentElementRect = document.documentElement.getBoundingClientRect()\n      fullWindowWidth = documentElementRect.right - Math.abs(documentElementRect.left)\n    }\n    this.bodyIsOverflowing = document.body.clientWidth < fullWindowWidth\n    this.scrollbarWidth = this.measureScrollbar()\n  }\n\n  Modal.prototype.setScrollbar = function () {\n    var bodyPad = parseInt((this.$body.css('padding-right') || 0), 10)\n    this.originalBodyPad = document.body.style.paddingRight || ''\n    if (this.bodyIsOverflowing) this.$body.css('padding-right', bodyPad + this.scrollbarWidth)\n  }\n\n  Modal.prototype.resetScrollbar = function () {\n    this.$body.css('padding-right', this.originalBodyPad)\n  }\n\n  Modal.prototype.measureScrollbar = function () { // thx walsh\n    var scrollDiv = document.createElement('div')\n    scrollDiv.className = 'modal-scrollbar-measure'\n    this.$body.append(scrollDiv)\n    var scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth\n    this.$body[0].removeChild(scrollDiv)\n    return scrollbarWidth\n  }\n\n\n  // MODAL PLUGIN DEFINITION\n  // =======================\n\n  function Plugin(option, _relatedTarget) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.modal')\n      var options = $.extend({}, Modal.DEFAULTS, $this.data(), typeof option == 'object' && option)\n\n      if (!data) $this.data('bs.modal', (data = new Modal(this, options)))\n      if (typeof option == 'string') data[option](_relatedTarget)\n      else if (options.show) data.show(_relatedTarget)\n    })\n  }\n\n  var old = $.fn.modal\n\n  $.fn.modal             = Plugin\n  $.fn.modal.Constructor = Modal\n\n\n  // MODAL NO CONFLICT\n  // =================\n\n  $.fn.modal.noConflict = function () {\n    $.fn.modal = old\n    return this\n  }\n\n\n  // MODAL DATA-API\n  // ==============\n\n  $(document).on('click.bs.modal.data-api', '[data-toggle=\"modal\"]', function (e) {\n    var $this   = $(this)\n    var href    = $this.attr('href')\n    var $target = $($this.attr('data-target') || (href && href.replace(/.*(?=#[^\\s]+$)/, ''))) // strip for ie7\n    var option  = $target.data('bs.modal') ? 'toggle' : $.extend({ remote: !/#/.test(href) && href }, $target.data(), $this.data())\n\n    if ($this.is('a')) e.preventDefault()\n\n    $target.one('show.bs.modal', function (showEvent) {\n      if (showEvent.isDefaultPrevented()) return // only register focus restorer if modal will actually get shown\n      $target.one('hidden.bs.modal', function () {\n        $this.is(':visible') && $this.trigger('focus')\n      })\n    })\n    Plugin.call($target, option, this)\n  })\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: tooltip.js v3.3.7\n * http://getbootstrap.com/javascript/#tooltip\n * Inspired by the original jQuery.tipsy by Jason Frame\n * ========================================================================\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // TOOLTIP PUBLIC CLASS DEFINITION\n  // ===============================\n\n  var Tooltip = function (element, options) {\n    this.type       = null\n    this.options    = null\n    this.enabled    = null\n    this.timeout    = null\n    this.hoverState = null\n    this.$element   = null\n    this.inState    = null\n\n    this.init('tooltip', element, options)\n  }\n\n  Tooltip.VERSION  = '3.3.7'\n\n  Tooltip.TRANSITION_DURATION = 150\n\n  Tooltip.DEFAULTS = {\n    animation: true,\n    placement: 'top',\n    selector: false,\n    template: '<div class=\"tooltip\" role=\"tooltip\"><div class=\"tooltip-arrow\"></div><div class=\"tooltip-inner\"></div></div>',\n    trigger: 'hover focus',\n    title: '',\n    delay: 0,\n    html: false,\n    container: false,\n    viewport: {\n      selector: 'body',\n      padding: 0\n    }\n  }\n\n  Tooltip.prototype.init = function (type, element, options) {\n    this.enabled   = true\n    this.type      = type\n    this.$element  = $(element)\n    this.options   = this.getOptions(options)\n    this.$viewport = this.options.viewport && $($.isFunction(this.options.viewport) ? this.options.viewport.call(this, this.$element) : (this.options.viewport.selector || this.options.viewport))\n    this.inState   = { click: false, hover: false, focus: false }\n\n    if (this.$element[0] instanceof document.constructor && !this.options.selector) {\n      throw new Error('`selector` option must be specified when initializing ' + this.type + ' on the window.document object!')\n    }\n\n    var triggers = this.options.trigger.split(' ')\n\n    for (var i = triggers.length; i--;) {\n      var trigger = triggers[i]\n\n      if (trigger == 'click') {\n        this.$element.on('click.' + this.type, this.options.selector, $.proxy(this.toggle, this))\n      } else if (trigger != 'manual') {\n        var eventIn  = trigger == 'hover' ? 'mouseenter' : 'focusin'\n        var eventOut = trigger == 'hover' ? 'mouseleave' : 'focusout'\n\n        this.$element.on(eventIn  + '.' + this.type, this.options.selector, $.proxy(this.enter, this))\n        this.$element.on(eventOut + '.' + this.type, this.options.selector, $.proxy(this.leave, this))\n      }\n    }\n\n    this.options.selector ?\n      (this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) :\n      this.fixTitle()\n  }\n\n  Tooltip.prototype.getDefaults = function () {\n    return Tooltip.DEFAULTS\n  }\n\n  Tooltip.prototype.getOptions = function (options) {\n    options = $.extend({}, this.getDefaults(), this.$element.data(), options)\n\n    if (options.delay && typeof options.delay == 'number') {\n      options.delay = {\n        show: options.delay,\n        hide: options.delay\n      }\n    }\n\n    return options\n  }\n\n  Tooltip.prototype.getDelegateOptions = function () {\n    var options  = {}\n    var defaults = this.getDefaults()\n\n    this._options && $.each(this._options, function (key, value) {\n      if (defaults[key] != value) options[key] = value\n    })\n\n    return options\n  }\n\n  Tooltip.prototype.enter = function (obj) {\n    var self = obj instanceof this.constructor ?\n      obj : $(obj.currentTarget).data('bs.' + this.type)\n\n    if (!self) {\n      self = new this.constructor(obj.currentTarget, this.getDelegateOptions())\n      $(obj.currentTarget).data('bs.' + this.type, self)\n    }\n\n    if (obj instanceof $.Event) {\n      self.inState[obj.type == 'focusin' ? 'focus' : 'hover'] = true\n    }\n\n    if (self.tip().hasClass('in') || self.hoverState == 'in') {\n      self.hoverState = 'in'\n      return\n    }\n\n    clearTimeout(self.timeout)\n\n    self.hoverState = 'in'\n\n    if (!self.options.delay || !self.options.delay.show) return self.show()\n\n    self.timeout = setTimeout(function () {\n      if (self.hoverState == 'in') self.show()\n    }, self.options.delay.show)\n  }\n\n  Tooltip.prototype.isInStateTrue = function () {\n    for (var key in this.inState) {\n      if (this.inState[key]) return true\n    }\n\n    return false\n  }\n\n  Tooltip.prototype.leave = function (obj) {\n    var self = obj instanceof this.constructor ?\n      obj : $(obj.currentTarget).data('bs.' + this.type)\n\n    if (!self) {\n      self = new this.constructor(obj.currentTarget, this.getDelegateOptions())\n      $(obj.currentTarget).data('bs.' + this.type, self)\n    }\n\n    if (obj instanceof $.Event) {\n      self.inState[obj.type == 'focusout' ? 'focus' : 'hover'] = false\n    }\n\n    if (self.isInStateTrue()) return\n\n    clearTimeout(self.timeout)\n\n    self.hoverState = 'out'\n\n    if (!self.options.delay || !self.options.delay.hide) return self.hide()\n\n    self.timeout = setTimeout(function () {\n      if (self.hoverState == 'out') self.hide()\n    }, self.options.delay.hide)\n  }\n\n  Tooltip.prototype.show = function () {\n    var e = $.Event('show.bs.' + this.type)\n\n    if (this.hasContent() && this.enabled) {\n      this.$element.trigger(e)\n\n      var inDom = $.contains(this.$element[0].ownerDocument.documentElement, this.$element[0])\n      if (e.isDefaultPrevented() || !inDom) return\n      var that = this\n\n      var $tip = this.tip()\n\n      var tipId = this.getUID(this.type)\n\n      this.setContent()\n      $tip.attr('id', tipId)\n      this.$element.attr('aria-describedby', tipId)\n\n      if (this.options.animation) $tip.addClass('fade')\n\n      var placement = typeof this.options.placement == 'function' ?\n        this.options.placement.call(this, $tip[0], this.$element[0]) :\n        this.options.placement\n\n      var autoToken = /\\s?auto?\\s?/i\n      var autoPlace = autoToken.test(placement)\n      if (autoPlace) placement = placement.replace(autoToken, '') || 'top'\n\n      $tip\n        .detach()\n        .css({ top: 0, left: 0, display: 'block' })\n        .addClass(placement)\n        .data('bs.' + this.type, this)\n\n      this.options.container ? $tip.appendTo(this.options.container) : $tip.insertAfter(this.$element)\n      this.$element.trigger('inserted.bs.' + this.type)\n\n      var pos          = this.getPosition()\n      var actualWidth  = $tip[0].offsetWidth\n      var actualHeight = $tip[0].offsetHeight\n\n      if (autoPlace) {\n        var orgPlacement = placement\n        var viewportDim = this.getPosition(this.$viewport)\n\n        placement = placement == 'bottom' && pos.bottom + actualHeight > viewportDim.bottom ? 'top'    :\n                    placement == 'top'    && pos.top    - actualHeight < viewportDim.top    ? 'bottom' :\n                    placement == 'right'  && pos.right  + actualWidth  > viewportDim.width  ? 'left'   :\n                    placement == 'left'   && pos.left   - actualWidth  < viewportDim.left   ? 'right'  :\n                    placement\n\n        $tip\n          .removeClass(orgPlacement)\n          .addClass(placement)\n      }\n\n      var calculatedOffset = this.getCalculatedOffset(placement, pos, actualWidth, actualHeight)\n\n      this.applyPlacement(calculatedOffset, placement)\n\n      var complete = function () {\n        var prevHoverState = that.hoverState\n        that.$element.trigger('shown.bs.' + that.type)\n        that.hoverState = null\n\n        if (prevHoverState == 'out') that.leave(that)\n      }\n\n      $.support.transition && this.$tip.hasClass('fade') ?\n        $tip\n          .one('bsTransitionEnd', complete)\n          .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) :\n        complete()\n    }\n  }\n\n  Tooltip.prototype.applyPlacement = function (offset, placement) {\n    var $tip   = this.tip()\n    var width  = $tip[0].offsetWidth\n    var height = $tip[0].offsetHeight\n\n    // manually read margins because getBoundingClientRect includes difference\n    var marginTop = parseInt($tip.css('margin-top'), 10)\n    var marginLeft = parseInt($tip.css('margin-left'), 10)\n\n    // we must check for NaN for ie 8/9\n    if (isNaN(marginTop))  marginTop  = 0\n    if (isNaN(marginLeft)) marginLeft = 0\n\n    offset.top  += marginTop\n    offset.left += marginLeft\n\n    // $.fn.offset doesn't round pixel values\n    // so we use setOffset directly with our own function B-0\n    $.offset.setOffset($tip[0], $.extend({\n      using: function (props) {\n        $tip.css({\n          top: Math.round(props.top),\n          left: Math.round(props.left)\n        })\n      }\n    }, offset), 0)\n\n    $tip.addClass('in')\n\n    // check to see if placing tip in new offset caused the tip to resize itself\n    var actualWidth  = $tip[0].offsetWidth\n    var actualHeight = $tip[0].offsetHeight\n\n    if (placement == 'top' && actualHeight != height) {\n      offset.top = offset.top + height - actualHeight\n    }\n\n    var delta = this.getViewportAdjustedDelta(placement, offset, actualWidth, actualHeight)\n\n    if (delta.left) offset.left += delta.left\n    else offset.top += delta.top\n\n    var isVertical          = /top|bottom/.test(placement)\n    var arrowDelta          = isVertical ? delta.left * 2 - width + actualWidth : delta.top * 2 - height + actualHeight\n    var arrowOffsetPosition = isVertical ? 'offsetWidth' : 'offsetHeight'\n\n    $tip.offset(offset)\n    this.replaceArrow(arrowDelta, $tip[0][arrowOffsetPosition], isVertical)\n  }\n\n  Tooltip.prototype.replaceArrow = function (delta, dimension, isVertical) {\n    this.arrow()\n      .css(isVertical ? 'left' : 'top', 50 * (1 - delta / dimension) + '%')\n      .css(isVertical ? 'top' : 'left', '')\n  }\n\n  Tooltip.prototype.setContent = function () {\n    var $tip  = this.tip()\n    var title = this.getTitle()\n\n    $tip.find('.tooltip-inner')[this.options.html ? 'html' : 'text'](title)\n    $tip.removeClass('fade in top bottom left right')\n  }\n\n  Tooltip.prototype.hide = function (callback) {\n    var that = this\n    var $tip = $(this.$tip)\n    var e    = $.Event('hide.bs.' + this.type)\n\n    function complete() {\n      if (that.hoverState != 'in') $tip.detach()\n      if (that.$element) { // TODO: Check whether guarding this code with this `if` is really necessary.\n        that.$element\n          .removeAttr('aria-describedby')\n          .trigger('hidden.bs.' + that.type)\n      }\n      callback && callback()\n    }\n\n    this.$element.trigger(e)\n\n    if (e.isDefaultPrevented()) return\n\n    $tip.removeClass('in')\n\n    $.support.transition && $tip.hasClass('fade') ?\n      $tip\n        .one('bsTransitionEnd', complete)\n        .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) :\n      complete()\n\n    this.hoverState = null\n\n    return this\n  }\n\n  Tooltip.prototype.fixTitle = function () {\n    var $e = this.$element\n    if ($e.attr('title') || typeof $e.attr('data-original-title') != 'string') {\n      $e.attr('data-original-title', $e.attr('title') || '').attr('title', '')\n    }\n  }\n\n  Tooltip.prototype.hasContent = function () {\n    return this.getTitle()\n  }\n\n  Tooltip.prototype.getPosition = function ($element) {\n    $element   = $element || this.$element\n\n    var el     = $element[0]\n    var isBody = el.tagName == 'BODY'\n\n    var elRect    = el.getBoundingClientRect()\n    if (elRect.width == null) {\n      // width and height are missing in IE8, so compute them manually; see https://github.com/twbs/bootstrap/issues/14093\n      elRect = $.extend({}, elRect, { width: elRect.right - elRect.left, height: elRect.bottom - elRect.top })\n    }\n    var isSvg = window.SVGElement && el instanceof window.SVGElement\n    // Avoid using $.offset() on SVGs since it gives incorrect results in jQuery 3.\n    // See https://github.com/twbs/bootstrap/issues/20280\n    var elOffset  = isBody ? { top: 0, left: 0 } : (isSvg ? null : $element.offset())\n    var scroll    = { scroll: isBody ? document.documentElement.scrollTop || document.body.scrollTop : $element.scrollTop() }\n    var outerDims = isBody ? { width: $(window).width(), height: $(window).height() } : null\n\n    return $.extend({}, elRect, scroll, outerDims, elOffset)\n  }\n\n  Tooltip.prototype.getCalculatedOffset = function (placement, pos, actualWidth, actualHeight) {\n    return placement == 'bottom' ? { top: pos.top + pos.height,   left: pos.left + pos.width / 2 - actualWidth / 2 } :\n           placement == 'top'    ? { top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2 } :\n           placement == 'left'   ? { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth } :\n        /* placement == 'right' */ { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width }\n\n  }\n\n  Tooltip.prototype.getViewportAdjustedDelta = function (placement, pos, actualWidth, actualHeight) {\n    var delta = { top: 0, left: 0 }\n    if (!this.$viewport) return delta\n\n    var viewportPadding = this.options.viewport && this.options.viewport.padding || 0\n    var viewportDimensions = this.getPosition(this.$viewport)\n\n    if (/right|left/.test(placement)) {\n      var topEdgeOffset    = pos.top - viewportPadding - viewportDimensions.scroll\n      var bottomEdgeOffset = pos.top + viewportPadding - viewportDimensions.scroll + actualHeight\n      if (topEdgeOffset < viewportDimensions.top) { // top overflow\n        delta.top = viewportDimensions.top - topEdgeOffset\n      } else if (bottomEdgeOffset > viewportDimensions.top + viewportDimensions.height) { // bottom overflow\n        delta.top = viewportDimensions.top + viewportDimensions.height - bottomEdgeOffset\n      }\n    } else {\n      var leftEdgeOffset  = pos.left - viewportPadding\n      var rightEdgeOffset = pos.left + viewportPadding + actualWidth\n      if (leftEdgeOffset < viewportDimensions.left) { // left overflow\n        delta.left = viewportDimensions.left - leftEdgeOffset\n      } else if (rightEdgeOffset > viewportDimensions.right) { // right overflow\n        delta.left = viewportDimensions.left + viewportDimensions.width - rightEdgeOffset\n      }\n    }\n\n    return delta\n  }\n\n  Tooltip.prototype.getTitle = function () {\n    var title\n    var $e = this.$element\n    var o  = this.options\n\n    title = $e.attr('data-original-title')\n      || (typeof o.title == 'function' ? o.title.call($e[0]) :  o.title)\n\n    return title\n  }\n\n  Tooltip.prototype.getUID = function (prefix) {\n    do prefix += ~~(Math.random() * 1000000)\n    while (document.getElementById(prefix))\n    return prefix\n  }\n\n  Tooltip.prototype.tip = function () {\n    if (!this.$tip) {\n      this.$tip = $(this.options.template)\n      if (this.$tip.length != 1) {\n        throw new Error(this.type + ' `template` option must consist of exactly 1 top-level element!')\n      }\n    }\n    return this.$tip\n  }\n\n  Tooltip.prototype.arrow = function () {\n    return (this.$arrow = this.$arrow || this.tip().find('.tooltip-arrow'))\n  }\n\n  Tooltip.prototype.enable = function () {\n    this.enabled = true\n  }\n\n  Tooltip.prototype.disable = function () {\n    this.enabled = false\n  }\n\n  Tooltip.prototype.toggleEnabled = function () {\n    this.enabled = !this.enabled\n  }\n\n  Tooltip.prototype.toggle = function (e) {\n    var self = this\n    if (e) {\n      self = $(e.currentTarget).data('bs.' + this.type)\n      if (!self) {\n        self = new this.constructor(e.currentTarget, this.getDelegateOptions())\n        $(e.currentTarget).data('bs.' + this.type, self)\n      }\n    }\n\n    if (e) {\n      self.inState.click = !self.inState.click\n      if (self.isInStateTrue()) self.enter(self)\n      else self.leave(self)\n    } else {\n      self.tip().hasClass('in') ? self.leave(self) : self.enter(self)\n    }\n  }\n\n  Tooltip.prototype.destroy = function () {\n    var that = this\n    clearTimeout(this.timeout)\n    this.hide(function () {\n      that.$element.off('.' + that.type).removeData('bs.' + that.type)\n      if (that.$tip) {\n        that.$tip.detach()\n      }\n      that.$tip = null\n      that.$arrow = null\n      that.$viewport = null\n      that.$element = null\n    })\n  }\n\n\n  // TOOLTIP PLUGIN DEFINITION\n  // =========================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.tooltip')\n      var options = typeof option == 'object' && option\n\n      if (!data && /destroy|hide/.test(option)) return\n      if (!data) $this.data('bs.tooltip', (data = new Tooltip(this, options)))\n      if (typeof option == 'string') data[option]()\n    })\n  }\n\n  var old = $.fn.tooltip\n\n  $.fn.tooltip             = Plugin\n  $.fn.tooltip.Constructor = Tooltip\n\n\n  // TOOLTIP NO CONFLICT\n  // ===================\n\n  $.fn.tooltip.noConflict = function () {\n    $.fn.tooltip = old\n    return this\n  }\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: popover.js v3.3.7\n * http://getbootstrap.com/javascript/#popovers\n * ========================================================================\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // POPOVER PUBLIC CLASS DEFINITION\n  // ===============================\n\n  var Popover = function (element, options) {\n    this.init('popover', element, options)\n  }\n\n  if (!$.fn.tooltip) throw new Error('Popover requires tooltip.js')\n\n  Popover.VERSION  = '3.3.7'\n\n  Popover.DEFAULTS = $.extend({}, $.fn.tooltip.Constructor.DEFAULTS, {\n    placement: 'right',\n    trigger: 'click',\n    content: '',\n    template: '<div class=\"popover\" role=\"tooltip\"><div class=\"arrow\"></div><h3 class=\"popover-title\"></h3><div class=\"popover-content\"></div></div>'\n  })\n\n\n  // NOTE: POPOVER EXTENDS tooltip.js\n  // ================================\n\n  Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype)\n\n  Popover.prototype.constructor = Popover\n\n  Popover.prototype.getDefaults = function () {\n    return Popover.DEFAULTS\n  }\n\n  Popover.prototype.setContent = function () {\n    var $tip    = this.tip()\n    var title   = this.getTitle()\n    var content = this.getContent()\n\n    $tip.find('.popover-title')[this.options.html ? 'html' : 'text'](title)\n    $tip.find('.popover-content').children().detach().end()[ // we use append for html objects to maintain js events\n      this.options.html ? (typeof content == 'string' ? 'html' : 'append') : 'text'\n    ](content)\n\n    $tip.removeClass('fade top bottom left right in')\n\n    // IE8 doesn't accept hiding via the `:empty` pseudo selector, we have to do\n    // this manually by checking the contents.\n    if (!$tip.find('.popover-title').html()) $tip.find('.popover-title').hide()\n  }\n\n  Popover.prototype.hasContent = function () {\n    return this.getTitle() || this.getContent()\n  }\n\n  Popover.prototype.getContent = function () {\n    var $e = this.$element\n    var o  = this.options\n\n    return $e.attr('data-content')\n      || (typeof o.content == 'function' ?\n            o.content.call($e[0]) :\n            o.content)\n  }\n\n  Popover.prototype.arrow = function () {\n    return (this.$arrow = this.$arrow || this.tip().find('.arrow'))\n  }\n\n\n  // POPOVER PLUGIN DEFINITION\n  // =========================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.popover')\n      var options = typeof option == 'object' && option\n\n      if (!data && /destroy|hide/.test(option)) return\n      if (!data) $this.data('bs.popover', (data = new Popover(this, options)))\n      if (typeof option == 'string') data[option]()\n    })\n  }\n\n  var old = $.fn.popover\n\n  $.fn.popover             = Plugin\n  $.fn.popover.Constructor = Popover\n\n\n  // POPOVER NO CONFLICT\n  // ===================\n\n  $.fn.popover.noConflict = function () {\n    $.fn.popover = old\n    return this\n  }\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: scrollspy.js v3.3.7\n * http://getbootstrap.com/javascript/#scrollspy\n * ========================================================================\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // SCROLLSPY CLASS DEFINITION\n  // ==========================\n\n  function ScrollSpy(element, options) {\n    this.$body          = $(document.body)\n    this.$scrollElement = $(element).is(document.body) ? $(window) : $(element)\n    this.options        = $.extend({}, ScrollSpy.DEFAULTS, options)\n    this.selector       = (this.options.target || '') + ' .nav li > a'\n    this.offsets        = []\n    this.targets        = []\n    this.activeTarget   = null\n    this.scrollHeight   = 0\n\n    this.$scrollElement.on('scroll.bs.scrollspy', $.proxy(this.process, this))\n    this.refresh()\n    this.process()\n  }\n\n  ScrollSpy.VERSION  = '3.3.7'\n\n  ScrollSpy.DEFAULTS = {\n    offset: 10\n  }\n\n  ScrollSpy.prototype.getScrollHeight = function () {\n    return this.$scrollElement[0].scrollHeight || Math.max(this.$body[0].scrollHeight, document.documentElement.scrollHeight)\n  }\n\n  ScrollSpy.prototype.refresh = function () {\n    var that          = this\n    var offsetMethod  = 'offset'\n    var offsetBase    = 0\n\n    this.offsets      = []\n    this.targets      = []\n    this.scrollHeight = this.getScrollHeight()\n\n    if (!$.isWindow(this.$scrollElement[0])) {\n      offsetMethod = 'position'\n      offsetBase   = this.$scrollElement.scrollTop()\n    }\n\n    this.$body\n      .find(this.selector)\n      .map(function () {\n        var $el   = $(this)\n        var href  = $el.data('target') || $el.attr('href')\n        var $href = /^#./.test(href) && $(href)\n\n        return ($href\n          && $href.length\n          && $href.is(':visible')\n          && [[$href[offsetMethod]().top + offsetBase, href]]) || null\n      })\n      .sort(function (a, b) { return a[0] - b[0] })\n      .each(function () {\n        that.offsets.push(this[0])\n        that.targets.push(this[1])\n      })\n  }\n\n  ScrollSpy.prototype.process = function () {\n    var scrollTop    = this.$scrollElement.scrollTop() + this.options.offset\n    var scrollHeight = this.getScrollHeight()\n    var maxScroll    = this.options.offset + scrollHeight - this.$scrollElement.height()\n    var offsets      = this.offsets\n    var targets      = this.targets\n    var activeTarget = this.activeTarget\n    var i\n\n    if (this.scrollHeight != scrollHeight) {\n      this.refresh()\n    }\n\n    if (scrollTop >= maxScroll) {\n      return activeTarget != (i = targets[targets.length - 1]) && this.activate(i)\n    }\n\n    if (activeTarget && scrollTop < offsets[0]) {\n      this.activeTarget = null\n      return this.clear()\n    }\n\n    for (i = offsets.length; i--;) {\n      activeTarget != targets[i]\n        && scrollTop >= offsets[i]\n        && (offsets[i + 1] === undefined || scrollTop < offsets[i + 1])\n        && this.activate(targets[i])\n    }\n  }\n\n  ScrollSpy.prototype.activate = function (target) {\n    this.activeTarget = target\n\n    this.clear()\n\n    var selector = this.selector +\n      '[data-target=\"' + target + '\"],' +\n      this.selector + '[href=\"' + target + '\"]'\n\n    var active = $(selector)\n      .parents('li')\n      .addClass('active')\n\n    if (active.parent('.dropdown-menu').length) {\n      active = active\n        .closest('li.dropdown')\n        .addClass('active')\n    }\n\n    active.trigger('activate.bs.scrollspy')\n  }\n\n  ScrollSpy.prototype.clear = function () {\n    $(this.selector)\n      .parentsUntil(this.options.target, '.active')\n      .removeClass('active')\n  }\n\n\n  // SCROLLSPY PLUGIN DEFINITION\n  // ===========================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.scrollspy')\n      var options = typeof option == 'object' && option\n\n      if (!data) $this.data('bs.scrollspy', (data = new ScrollSpy(this, options)))\n      if (typeof option == 'string') data[option]()\n    })\n  }\n\n  var old = $.fn.scrollspy\n\n  $.fn.scrollspy             = Plugin\n  $.fn.scrollspy.Constructor = ScrollSpy\n\n\n  // SCROLLSPY NO CONFLICT\n  // =====================\n\n  $.fn.scrollspy.noConflict = function () {\n    $.fn.scrollspy = old\n    return this\n  }\n\n\n  // SCROLLSPY DATA-API\n  // ==================\n\n  $(window).on('load.bs.scrollspy.data-api', function () {\n    $('[data-spy=\"scroll\"]').each(function () {\n      var $spy = $(this)\n      Plugin.call($spy, $spy.data())\n    })\n  })\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: tab.js v3.3.7\n * http://getbootstrap.com/javascript/#tabs\n * ========================================================================\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // TAB CLASS DEFINITION\n  // ====================\n\n  var Tab = function (element) {\n    // jscs:disable requireDollarBeforejQueryAssignment\n    this.element = $(element)\n    // jscs:enable requireDollarBeforejQueryAssignment\n  }\n\n  Tab.VERSION = '3.3.7'\n\n  Tab.TRANSITION_DURATION = 150\n\n  Tab.prototype.show = function () {\n    var $this    = this.element\n    var $ul      = $this.closest('ul:not(.dropdown-menu)')\n    var selector = $this.data('target')\n\n    if (!selector) {\n      selector = $this.attr('href')\n      selector = selector && selector.replace(/.*(?=#[^\\s]*$)/, '') // strip for ie7\n    }\n\n    if ($this.parent('li').hasClass('active')) return\n\n    var $previous = $ul.find('.active:last a')\n    var hideEvent = $.Event('hide.bs.tab', {\n      relatedTarget: $this[0]\n    })\n    var showEvent = $.Event('show.bs.tab', {\n      relatedTarget: $previous[0]\n    })\n\n    $previous.trigger(hideEvent)\n    $this.trigger(showEvent)\n\n    if (showEvent.isDefaultPrevented() || hideEvent.isDefaultPrevented()) return\n\n    var $target = $(selector)\n\n    this.activate($this.closest('li'), $ul)\n    this.activate($target, $target.parent(), function () {\n      $previous.trigger({\n        type: 'hidden.bs.tab',\n        relatedTarget: $this[0]\n      })\n      $this.trigger({\n        type: 'shown.bs.tab',\n        relatedTarget: $previous[0]\n      })\n    })\n  }\n\n  Tab.prototype.activate = function (element, container, callback) {\n    var $active    = container.find('> .active')\n    var transition = callback\n      && $.support.transition\n      && ($active.length && $active.hasClass('fade') || !!container.find('> .fade').length)\n\n    function next() {\n      $active\n        .removeClass('active')\n        .find('> .dropdown-menu > .active')\n          .removeClass('active')\n        .end()\n        .find('[data-toggle=\"tab\"]')\n          .attr('aria-expanded', false)\n\n      element\n        .addClass('active')\n        .find('[data-toggle=\"tab\"]')\n          .attr('aria-expanded', true)\n\n      if (transition) {\n        element[0].offsetWidth // reflow for transition\n        element.addClass('in')\n      } else {\n        element.removeClass('fade')\n      }\n\n      if (element.parent('.dropdown-menu').length) {\n        element\n          .closest('li.dropdown')\n            .addClass('active')\n          .end()\n          .find('[data-toggle=\"tab\"]')\n            .attr('aria-expanded', true)\n      }\n\n      callback && callback()\n    }\n\n    $active.length && transition ?\n      $active\n        .one('bsTransitionEnd', next)\n        .emulateTransitionEnd(Tab.TRANSITION_DURATION) :\n      next()\n\n    $active.removeClass('in')\n  }\n\n\n  // TAB PLUGIN DEFINITION\n  // =====================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this = $(this)\n      var data  = $this.data('bs.tab')\n\n      if (!data) $this.data('bs.tab', (data = new Tab(this)))\n      if (typeof option == 'string') data[option]()\n    })\n  }\n\n  var old = $.fn.tab\n\n  $.fn.tab             = Plugin\n  $.fn.tab.Constructor = Tab\n\n\n  // TAB NO CONFLICT\n  // ===============\n\n  $.fn.tab.noConflict = function () {\n    $.fn.tab = old\n    return this\n  }\n\n\n  // TAB DATA-API\n  // ============\n\n  var clickHandler = function (e) {\n    e.preventDefault()\n    Plugin.call($(this), 'show')\n  }\n\n  $(document)\n    .on('click.bs.tab.data-api', '[data-toggle=\"tab\"]', clickHandler)\n    .on('click.bs.tab.data-api', '[data-toggle=\"pill\"]', clickHandler)\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: affix.js v3.3.7\n * http://getbootstrap.com/javascript/#affix\n * ========================================================================\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // AFFIX CLASS DEFINITION\n  // ======================\n\n  var Affix = function (element, options) {\n    this.options = $.extend({}, Affix.DEFAULTS, options)\n\n    this.$target = $(this.options.target)\n      .on('scroll.bs.affix.data-api', $.proxy(this.checkPosition, this))\n      .on('click.bs.affix.data-api',  $.proxy(this.checkPositionWithEventLoop, this))\n\n    this.$element     = $(element)\n    this.affixed      = null\n    this.unpin        = null\n    this.pinnedOffset = null\n\n    this.checkPosition()\n  }\n\n  Affix.VERSION  = '3.3.7'\n\n  Affix.RESET    = 'affix affix-top affix-bottom'\n\n  Affix.DEFAULTS = {\n    offset: 0,\n    target: window\n  }\n\n  Affix.prototype.getState = function (scrollHeight, height, offsetTop, offsetBottom) {\n    var scrollTop    = this.$target.scrollTop()\n    var position     = this.$element.offset()\n    var targetHeight = this.$target.height()\n\n    if (offsetTop != null && this.affixed == 'top') return scrollTop < offsetTop ? 'top' : false\n\n    if (this.affixed == 'bottom') {\n      if (offsetTop != null) return (scrollTop + this.unpin <= position.top) ? false : 'bottom'\n      return (scrollTop + targetHeight <= scrollHeight - offsetBottom) ? false : 'bottom'\n    }\n\n    var initializing   = this.affixed == null\n    var colliderTop    = initializing ? scrollTop : position.top\n    var colliderHeight = initializing ? targetHeight : height\n\n    if (offsetTop != null && scrollTop <= offsetTop) return 'top'\n    if (offsetBottom != null && (colliderTop + colliderHeight >= scrollHeight - offsetBottom)) return 'bottom'\n\n    return false\n  }\n\n  Affix.prototype.getPinnedOffset = function () {\n    if (this.pinnedOffset) return this.pinnedOffset\n    this.$element.removeClass(Affix.RESET).addClass('affix')\n    var scrollTop = this.$target.scrollTop()\n    var position  = this.$element.offset()\n    return (this.pinnedOffset = position.top - scrollTop)\n  }\n\n  Affix.prototype.checkPositionWithEventLoop = function () {\n    setTimeout($.proxy(this.checkPosition, this), 1)\n  }\n\n  Affix.prototype.checkPosition = function () {\n    if (!this.$element.is(':visible')) return\n\n    var height       = this.$element.height()\n    var offset       = this.options.offset\n    var offsetTop    = offset.top\n    var offsetBottom = offset.bottom\n    var scrollHeight = Math.max($(document).height(), $(document.body).height())\n\n    if (typeof offset != 'object')         offsetBottom = offsetTop = offset\n    if (typeof offsetTop == 'function')    offsetTop    = offset.top(this.$element)\n    if (typeof offsetBottom == 'function') offsetBottom = offset.bottom(this.$element)\n\n    var affix = this.getState(scrollHeight, height, offsetTop, offsetBottom)\n\n    if (this.affixed != affix) {\n      if (this.unpin != null) this.$element.css('top', '')\n\n      var affixType = 'affix' + (affix ? '-' + affix : '')\n      var e         = $.Event(affixType + '.bs.affix')\n\n      this.$element.trigger(e)\n\n      if (e.isDefaultPrevented()) return\n\n      this.affixed = affix\n      this.unpin = affix == 'bottom' ? this.getPinnedOffset() : null\n\n      this.$element\n        .removeClass(Affix.RESET)\n        .addClass(affixType)\n        .trigger(affixType.replace('affix', 'affixed') + '.bs.affix')\n    }\n\n    if (affix == 'bottom') {\n      this.$element.offset({\n        top: scrollHeight - height - offsetBottom\n      })\n    }\n  }\n\n\n  // AFFIX PLUGIN DEFINITION\n  // =======================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.affix')\n      var options = typeof option == 'object' && option\n\n      if (!data) $this.data('bs.affix', (data = new Affix(this, options)))\n      if (typeof option == 'string') data[option]()\n    })\n  }\n\n  var old = $.fn.affix\n\n  $.fn.affix             = Plugin\n  $.fn.affix.Constructor = Affix\n\n\n  // AFFIX NO CONFLICT\n  // =================\n\n  $.fn.affix.noConflict = function () {\n    $.fn.affix = old\n    return this\n  }\n\n\n  // AFFIX DATA-API\n  // ==============\n\n  $(window).on('load', function () {\n    $('[data-spy=\"affix\"]').each(function () {\n      var $spy = $(this)\n      var data = $spy.data()\n\n      data.offset = data.offset || {}\n\n      if (data.offsetBottom != null) data.offset.bottom = data.offsetBottom\n      if (data.offsetTop    != null) data.offset.top    = data.offsetTop\n\n      Plugin.call($spy, data)\n    })\n  })\n\n}(jQuery);\n"
  },
  {
    "path": "src/main/resources/static/plugins/bootstrap/js/npm.js",
    "content": "// This file is autogenerated via the `commonjs` Grunt task. You can require() this file in a CommonJS environment.\nrequire('../../js/transition.js')\nrequire('../../js/alert.js')\nrequire('../../js/button.js')\nrequire('../../js/carousel.js')\nrequire('../../js/collapse.js')\nrequire('../../js/dropdown.js')\nrequire('../../js/modal.js')\nrequire('../../js/tooltip.js')\nrequire('../../js/popover.js')\nrequire('../../js/scrollspy.js')\nrequire('../../js/tab.js')\n"
  },
  {
    "path": "src/main/resources/static/plugins/bootstrapStyle/bootstrapStyle.css",
    "content": ""
  },
  {
    "path": "src/main/resources/static/plugins/bootstrapvalidator/css/bootstrapValidator.css",
    "content": "/**\n * BootstrapValidator (http://bootstrapvalidator.com)\n * The best jQuery plugin to validate form fields. Designed to use with Bootstrap 3\n *\n * @author      http://twitter.com/nghuuphuoc\n * @copyright   (c) 2013 - 2014 Nguyen Huu Phuoc\n * @license     Commercial: http://bootstrapvalidator.com/license/\n *              Non-commercial: http://creativecommons.org/licenses/by-nc-nd/3.0/\n */\n\n.bv-form .help-block {\n    margin-bottom: 0;\n}\n.bv-form .tooltip-inner {\n    text-align: left;\n}\n.nav-tabs li.bv-tab-success > a {\n    color: #3c763d;\n}\n.nav-tabs li.bv-tab-error > a {\n    color: #a94442;\n}\n\n.bv-form .bv-icon-no-label {\n\ttop: 0;\n}\n\n.bv-form .bv-icon-input-group {\n\ttop: 0;\n\tz-index: 100;\n"
  },
  {
    "path": "src/main/resources/static/plugins/bootstrapvalidator/js/bootstrapValidator.js",
    "content": "/*!\n * BootstrapValidator (http://bootstrapvalidator.com)\n * The best jQuery plugin to validate form fields. Designed to use with Bootstrap 3\n *\n * @version     v0.5.3, built on 2014-11-05 9:14:18 PM\n * @author      https://twitter.com/nghuuphuoc\n * @copyright   (c) 2013 - 2014 Nguyen Huu Phuoc\n * @license     Commercial: http://bootstrapvalidator.com/license/\n *              Non-commercial: http://creativecommons.org/licenses/by-nc-nd/3.0/\n */\nif (typeof jQuery === 'undefined') {\n    throw new Error('BootstrapValidator requires jQuery');\n}\n\n(function($) {\n    var version = $.fn.jquery.split(' ')[0].split('.');\n    if ((+version[0] < 2 && +version[1] < 9) || (+version[0] === 1 && +version[1] === 9 && +version[2] < 1)) {\n        throw new Error('BootstrapValidator requires jQuery version 1.9.1 or higher');\n    }\n}(window.jQuery));\n\n(function($) {\n    var BootstrapValidator = function(form, options) {\n        this.$form   = $(form);\n        this.options = $.extend({}, $.fn.bootstrapValidator.DEFAULT_OPTIONS, options);\n\n        this.$invalidFields = $([]);    // Array of invalid fields\n        this.$submitButton  = null;     // The submit button which is clicked to submit form\n        this.$hiddenButton  = null;\n\n        // Validating status\n        this.STATUS_NOT_VALIDATED = 'NOT_VALIDATED';\n        this.STATUS_VALIDATING    = 'VALIDATING';\n        this.STATUS_INVALID       = 'INVALID';\n        this.STATUS_VALID         = 'VALID';\n\n        // Determine the event that is fired when user change the field value\n        // Most modern browsers supports input event except IE 7, 8.\n        // IE 9 supports input event but the event is still not fired if I press the backspace key.\n        // Get IE version\n        // https://gist.github.com/padolsey/527683/#comment-7595\n        var ieVersion = (function() {\n            var v = 3, div = document.createElement('div'), a = div.all || [];\n            while (div.innerHTML = '<!--[if gt IE '+(++v)+']><br><![endif]-->', a[0]) {}\n            return v > 4 ? v : !v;\n        }());\n\n        var el = document.createElement('div');\n        this._changeEvent = (ieVersion === 9 || !('oninput' in el)) ? 'keyup' : 'input';\n\n        // The flag to indicate that the form is ready to submit when a remote/callback validator returns\n        this._submitIfValid = null;\n\n        // Field elements\n        this._cacheFields = {};\n\n        this._init();\n    };\n\n    BootstrapValidator.prototype = {\n        constructor: BootstrapValidator,\n\n        /**\n         * Init form\n         */\n        _init: function() {\n            var that    = this,\n                options = {\n                    autoFocus:      this.$form.attr('data-bv-autofocus'),\n                    container:      this.$form.attr('data-bv-container'),\n                    events: {\n                        formInit:         this.$form.attr('data-bv-events-form-init'),\n                        formError:        this.$form.attr('data-bv-events-form-error'),\n                        formSuccess:      this.$form.attr('data-bv-events-form-success'),\n                        fieldAdded:       this.$form.attr('data-bv-events-field-added'),\n                        fieldRemoved:     this.$form.attr('data-bv-events-field-removed'),\n                        fieldInit:        this.$form.attr('data-bv-events-field-init'),\n                        fieldError:       this.$form.attr('data-bv-events-field-error'),\n                        fieldSuccess:     this.$form.attr('data-bv-events-field-success'),\n                        fieldStatus:      this.$form.attr('data-bv-events-field-status'),\n                        validatorError:   this.$form.attr('data-bv-events-validator-error'),\n                        validatorSuccess: this.$form.attr('data-bv-events-validator-success')\n                    },\n                    excluded:       this.$form.attr('data-bv-excluded'),\n                    feedbackIcons: {\n                        valid:      this.$form.attr('data-bv-feedbackicons-valid'),\n                        invalid:    this.$form.attr('data-bv-feedbackicons-invalid'),\n                        validating: this.$form.attr('data-bv-feedbackicons-validating')\n                    },\n                    group:          this.$form.attr('data-bv-group'),\n                    live:           this.$form.attr('data-bv-live'),\n                    message:        this.$form.attr('data-bv-message'),\n                    onError:        this.$form.attr('data-bv-onerror'),\n                    onSuccess:      this.$form.attr('data-bv-onsuccess'),\n                    submitButtons:  this.$form.attr('data-bv-submitbuttons'),\n                    threshold:      this.$form.attr('data-bv-threshold'),\n                    trigger:        this.$form.attr('data-bv-trigger'),\n                    verbose:        this.$form.attr('data-bv-verbose'),\n                    fields:         {}\n                };\n\n            this.$form\n                // Disable client side validation in HTML 5\n                .attr('novalidate', 'novalidate')\n                .addClass(this.options.elementClass)\n                // Disable the default submission first\n                .on('submit.bv', function(e) {\n                    e.preventDefault();\n                    that.validate();\n                })\n                .on('click.bv', this.options.submitButtons, function() {\n                    that.$submitButton  = $(this);\n\t\t\t\t\t// The user just click the submit button\n\t\t\t\t\tthat._submitIfValid = true;\n                })\n                // Find all fields which have either \"name\" or \"data-bv-field\" attribute\n                .find('[name], [data-bv-field]')\n                    .each(function() {\n                        var $field = $(this),\n                            field  = $field.attr('name') || $field.attr('data-bv-field'),\n                            opts   = that._parseOptions($field);\n                        if (opts) {\n                            $field.attr('data-bv-field', field);\n                            options.fields[field] = $.extend({}, opts, options.fields[field]);\n                        }\n                    });\n\n            this.options = $.extend(true, this.options, options);\n\n            // When pressing Enter on any field in the form, the first submit button will do its job.\n            // The form then will be submitted.\n            // I create a first hidden submit button\n            this.$hiddenButton = $('<button/>')\n                                    .attr('type', 'submit')\n                                    .prependTo(this.$form)\n                                    .addClass('bv-hidden-submit')\n                                    .css({ display: 'none', width: 0, height: 0 });\n\n            this.$form\n                .on('click.bv', '[type=\"submit\"]', function(e) {\n                    // #746: Check if the button click handler returns false\n                    if (!e.isDefaultPrevented()) {\n                        var $target = $(e.target),\n                            // The button might contain HTML tag\n                            $button = $target.is('[type=\"submit\"]') ? $target.eq(0) : $target.parent('[type=\"submit\"]').eq(0);\n\n                        // Don't perform validation when clicking on the submit button/input\n                        // which aren't defined by the 'submitButtons' option\n                        if (that.options.submitButtons && !$button.is(that.options.submitButtons) && !$button.is(that.$hiddenButton)) {\n                            that.$form.off('submit.bv').submit();\n                        }\n                    }\n                });\n\n            for (var field in this.options.fields) {\n                this._initField(field);\n            }\n\n            this.$form.trigger($.Event(this.options.events.formInit), {\n                bv: this,\n                options: this.options\n            });\n\n            // Prepare the events\n            if (this.options.onSuccess) {\n                this.$form.on(this.options.events.formSuccess, function(e) {\n                    $.fn.bootstrapValidator.helpers.call(that.options.onSuccess, [e]);\n                });\n            }\n            if (this.options.onError) {\n                this.$form.on(this.options.events.formError, function(e) {\n                    $.fn.bootstrapValidator.helpers.call(that.options.onError, [e]);\n                });\n            }\n        },\n\n        /**\n         * Parse the validator options from HTML attributes\n         *\n         * @param {jQuery} $field The field element\n         * @returns {Object}\n         */\n        _parseOptions: function($field) {\n            var field      = $field.attr('name') || $field.attr('data-bv-field'),\n                validators = {},\n                validator,\n                v,          // Validator name\n                attrName,\n                enabled,\n                optionName,\n                optionAttrName,\n                optionValue,\n                html5AttrName,\n                html5AttrMap;\n\n            for (v in $.fn.bootstrapValidator.validators) {\n                validator    = $.fn.bootstrapValidator.validators[v];\n                attrName     = 'data-bv-' + v.toLowerCase(),\n                enabled      = $field.attr(attrName) + '';\n                html5AttrMap = ('function' === typeof validator.enableByHtml5) ? validator.enableByHtml5($field) : null;\n\n                if ((html5AttrMap && enabled !== 'false')\n                    || (html5AttrMap !== true && ('' === enabled || 'true' === enabled || attrName === enabled.toLowerCase())))\n                {\n                    // Try to parse the options via attributes\n                    validator.html5Attributes = $.extend({}, { message: 'message', onerror: 'onError', onsuccess: 'onSuccess' }, validator.html5Attributes);\n                    validators[v] = $.extend({}, html5AttrMap === true ? {} : html5AttrMap, validators[v]);\n\n                    for (html5AttrName in validator.html5Attributes) {\n                        optionName  = validator.html5Attributes[html5AttrName];\n                        optionAttrName = 'data-bv-' + v.toLowerCase() + '-' + html5AttrName,\n                        optionValue = $field.attr(optionAttrName);\n                        if (optionValue) {\n                            if ('true' === optionValue || optionAttrName === optionValue.toLowerCase()) {\n                                optionValue = true;\n                            } else if ('false' === optionValue) {\n                                optionValue = false;\n                            }\n                            validators[v][optionName] = optionValue;\n                        }\n                    }\n                }\n            }\n\n            var opts = {\n                    autoFocus:     $field.attr('data-bv-autofocus'),\n                    container:     $field.attr('data-bv-container'),\n                    excluded:      $field.attr('data-bv-excluded'),\n                    feedbackIcons: $field.attr('data-bv-feedbackicons'),\n                    group:         $field.attr('data-bv-group'),\n                    message:       $field.attr('data-bv-message'),\n                    onError:       $field.attr('data-bv-onerror'),\n                    onStatus:      $field.attr('data-bv-onstatus'),\n                    onSuccess:     $field.attr('data-bv-onsuccess'),\n                    selector:      $field.attr('data-bv-selector'),\n                    threshold:     $field.attr('data-bv-threshold'),\n                    trigger:       $field.attr('data-bv-trigger'),\n                    verbose:       $field.attr('data-bv-verbose'),\n                    validators:    validators\n                },\n                emptyOptions    = $.isEmptyObject(opts),        // Check if the field options are set using HTML attributes\n                emptyValidators = $.isEmptyObject(validators);  // Check if the field validators are set using HTML attributes\n\n            if (!emptyValidators || (!emptyOptions && this.options.fields && this.options.fields[field])) {\n                opts.validators = validators;\n                return opts;\n            } else {\n                return null;\n            }\n        },\n\n        /**\n         * Init field\n         *\n         * @param {String|jQuery} field The field name or field element\n         */\n        _initField: function(field) {\n            var fields = $([]);\n            switch (typeof field) {\n                case 'object':\n                    fields = field;\n                    field  = field.attr('data-bv-field');\n                    break;\n                case 'string':\n                    fields = this.getFieldElements(field);\n                    fields.attr('data-bv-field', field);\n                    break;\n                default:\n                    break;\n            }\n\n            // We don't need to validate non-existing fields\n            if (fields.length === 0) {\n                return;\n            }\n\n            if (this.options.fields[field] === null || this.options.fields[field].validators === null) {\n                return;\n            }\n\n            var validatorName;\n            for (validatorName in this.options.fields[field].validators) {\n                if (!$.fn.bootstrapValidator.validators[validatorName]) {\n                    delete this.options.fields[field].validators[validatorName];\n                }\n            }\n            if (this.options.fields[field].enabled === null) {\n                this.options.fields[field].enabled = true;\n            }\n\n            var that      = this,\n                total     = fields.length,\n                type      = fields.attr('type'),\n                updateAll = (total === 1) || ('radio' === type) || ('checkbox' === type),\n                event     = ('radio' === type || 'checkbox' === type || 'file' === type || 'SELECT' === fields.eq(0).get(0).tagName) ? 'change' : this._changeEvent,\n                trigger   = (this.options.fields[field].trigger || this.options.trigger || event).split(' '),\n                events    = $.map(trigger, function(item) {\n                    return item + '.update.bv';\n                }).join(' ');\n\n            for (var i = 0; i < total; i++) {\n                var $field    = fields.eq(i),\n                    group     = this.options.fields[field].group || this.options.group,\n                    $parent   = $field.parents(group),\n                    // Allow user to indicate where the error messages are shown\n                    container = ('function' === typeof (this.options.fields[field].container || this.options.container)) ? (this.options.fields[field].container || this.options.container).call(this, $field, this) : (this.options.fields[field].container || this.options.container),\n                    $message  = (container && container !== 'tooltip' && container !== 'popover') ? $(container) : this._getMessageContainer($field, group);\n\n                if (container && container !== 'tooltip' && container !== 'popover') {\n                    $message.addClass('has-error');\n                }\n\n                // Remove all error messages and feedback icons\n                $message.find('.help-block[data-bv-validator][data-bv-for=\"' + field + '\"]').remove();\n                $parent.find('i[data-bv-icon-for=\"' + field + '\"]').remove();\n\n                // Whenever the user change the field value, mark it as not validated yet\n                $field.off(events).on(events, function() {\n                    that.updateStatus($(this), that.STATUS_NOT_VALIDATED);\n                });\n                \n                // Create help block elements for showing the error messages\n                $field.data('bv.messages', $message);\n                for (validatorName in this.options.fields[field].validators) {\n                    $field.data('bv.result.' + validatorName, this.STATUS_NOT_VALIDATED);\n\n                    if (!updateAll || i === total - 1) {\n                        $('<small/>')\n                            .css('display', 'none')\n                            .addClass('help-block')\n                            .attr('data-bv-validator', validatorName)\n                            .attr('data-bv-for', field)\n                            .attr('data-bv-result', this.STATUS_NOT_VALIDATED)\n                            .html(this._getMessage(field, validatorName))\n                            .appendTo($message);\n                    }\n\n                    // Init the validator\n                    if ('function' === typeof $.fn.bootstrapValidator.validators[validatorName].init) {\n                        $.fn.bootstrapValidator.validators[validatorName].init(this, $field, this.options.fields[field].validators[validatorName]);\n                    }\n                }\n\n                // Prepare the feedback icons\n                // Available from Bootstrap 3.1 (http://getbootstrap.com/css/#forms-control-validation)\n                if (this.options.fields[field].feedbackIcons !== false && this.options.fields[field].feedbackIcons !== 'false'\n                    && this.options.feedbackIcons\n                    && this.options.feedbackIcons.validating && this.options.feedbackIcons.invalid && this.options.feedbackIcons.valid\n                    && (!updateAll || i === total - 1))\n                {\n                    // $parent.removeClass('has-success').removeClass('has-error').addClass('has-feedback');\n                    // Keep error messages which are populated from back-end\n                    $parent.addClass('has-feedback');\n                    var $icon = $('<i/>')\n                                    .css('display', 'none')\n                                    .addClass('form-control-feedback')\n                                    .attr('data-bv-icon-for', field)\n                                    .insertAfter($field);\n\n                    // Place it after the container of checkbox/radio\n                    // so when clicking the icon, it doesn't effect to the checkbox/radio element\n                    if ('checkbox' === type || 'radio' === type) {\n                        var $fieldParent = $field.parent();\n                        if ($fieldParent.hasClass(type)) {\n                            $icon.insertAfter($fieldParent);\n                        } else if ($fieldParent.parent().hasClass(type)) {\n                            $icon.insertAfter($fieldParent.parent());\n                        }\n                    }\n\n                    // The feedback icon does not render correctly if there is no label\n                    // https://github.com/twbs/bootstrap/issues/12873\n                    if ($parent.find('label').length === 0) {\n                        $icon.addClass('bv-no-label');\n                    }\n                    // Fix feedback icons in input-group\n                    if ($parent.find('.input-group').length !== 0) {\n                        $icon.addClass('bv-icon-input-group')\n                             .insertAfter($parent.find('.input-group').eq(0));\n                    }\n\n                    // Store the icon as a data of field element\n                    if (!updateAll) {\n                        $field.data('bv.icon', $icon);\n                    } else if (i === total - 1) {\n                        // All fields with the same name have the same icon\n                        fields.data('bv.icon', $icon);\n                    }\n                    \n                    if (container) {\n                        $field\n                            // Show tooltip/popover message when field gets focus\n                            .off('focus.container.bv')\n                            .on('focus.container.bv', function() {\n                                switch (container) {\n                                    case 'tooltip':\n                                        $(this).data('bv.icon').tooltip('show');\n                                        break;\n                                    case 'popover':\n                                        $(this).data('bv.icon').popover('show');\n                                        break;\n                                    default:\n                                        break;\n                                }\n                            })\n                            // and hide them when losing focus\n                            .off('blur.container.bv')\n                            .on('blur.container.bv', function() {\n                                switch (container) {\n                                    case 'tooltip':\n                                        $(this).data('bv.icon').tooltip('hide');\n                                        break;\n                                    case 'popover':\n                                        $(this).data('bv.icon').popover('hide');\n                                        break;\n                                    default:\n                                        break;\n                                }\n                            });\n                    }\n                }\n            }\n\n            // Prepare the events\n            fields\n                .on(this.options.events.fieldSuccess, function(e, data) {\n                    var onSuccess = that.getOptions(data.field, null, 'onSuccess');\n                    if (onSuccess) {\n                        $.fn.bootstrapValidator.helpers.call(onSuccess, [e, data]);\n                    }\n                })\n                .on(this.options.events.fieldError, function(e, data) {\n                    var onError = that.getOptions(data.field, null, 'onError');\n                    if (onError) {\n                        $.fn.bootstrapValidator.helpers.call(onError, [e, data]);\n                    }\n                })\n                .on(this.options.events.fieldStatus, function(e, data) {\n                    var onStatus = that.getOptions(data.field, null, 'onStatus');\n                    if (onStatus) {\n                        $.fn.bootstrapValidator.helpers.call(onStatus, [e, data]);\n                    }\n                })\n                .on(this.options.events.validatorError, function(e, data) {\n                    var onError = that.getOptions(data.field, data.validator, 'onError');\n                    if (onError) {\n                        $.fn.bootstrapValidator.helpers.call(onError, [e, data]);\n                    }\n                })\n                .on(this.options.events.validatorSuccess, function(e, data) {\n                    var onSuccess = that.getOptions(data.field, data.validator, 'onSuccess');\n                    if (onSuccess) {\n                        $.fn.bootstrapValidator.helpers.call(onSuccess, [e, data]);\n                    }\n                });\n\n            // Set live mode\n            events = $.map(trigger, function(item) {\n                return item + '.live.bv';\n            }).join(' ');\n            switch (this.options.live) {\n                case 'submitted':\n                    break;\n                case 'disabled':\n                    fields.off(events);\n                    break;\n                case 'enabled':\n                /* falls through */\n                default:\n                    fields.off(events).on(events, function() {\n                        if (that._exceedThreshold($(this))) {\n                            that.validateField($(this));\n                        }\n                    });\n                    break;\n            }\n\n            fields.trigger($.Event(this.options.events.fieldInit), {\n                bv: this,\n                field: field,\n                element: fields\n            });\n        },\n\n        /**\n         * Get the error message for given field and validator\n         *\n         * @param {String} field The field name\n         * @param {String} validatorName The validator name\n         * @returns {String}\n         */\n        _getMessage: function(field, validatorName) {\n            if (!this.options.fields[field] || !$.fn.bootstrapValidator.validators[validatorName]\n                || !this.options.fields[field].validators || !this.options.fields[field].validators[validatorName])\n            {\n                return '';\n            }\n\n            var options = this.options.fields[field].validators[validatorName];\n            switch (true) {\n                case (!!options.message):\n                    return options.message;\n                case (!!this.options.fields[field].message):\n                    return this.options.fields[field].message;\n                case (!!$.fn.bootstrapValidator.i18n[validatorName]):\n                    return $.fn.bootstrapValidator.i18n[validatorName]['default'];\n                default:\n                    return this.options.message;\n            }\n        },\n\n        /**\n         * Get the element to place the error messages\n         *\n         * @param {jQuery} $field The field element\n         * @param {String} group\n         * @returns {jQuery}\n         */\n        _getMessageContainer: function($field, group) {\n            var $parent = $field.parent();\n            if ($parent.is(group)) {\n                return $parent;\n            }\n\n            var cssClasses = $parent.attr('class');\n            if (!cssClasses) {\n                return this._getMessageContainer($parent, group);\n            }\n\n            cssClasses = cssClasses.split(' ');\n            var n = cssClasses.length;\n            for (var i = 0; i < n; i++) {\n                if (/^col-(xs|sm|md|lg)-\\d+$/.test(cssClasses[i]) || /^col-(xs|sm|md|lg)-offset-\\d+$/.test(cssClasses[i])) {\n                    return $parent;\n                }\n            }\n\n            return this._getMessageContainer($parent, group);\n        },\n\n        /**\n         * Called when all validations are completed\n         */\n        _submit: function() {\n            var isValid   = this.isValid(),\n                eventType = isValid ? this.options.events.formSuccess : this.options.events.formError,\n                e         = $.Event(eventType);\n\n            this.$form.trigger(e);\n\n            // Call default handler\n            // Check if whether the submit button is clicked\n            if (this.$submitButton) {\n                isValid ? this._onSuccess(e) : this._onError(e);\n            }\n        },\n\n        /**\n         * Check if the field is excluded.\n         * Returning true means that the field will not be validated\n         *\n         * @param {jQuery} $field The field element\n         * @returns {Boolean}\n         */\n        _isExcluded: function($field) {\n            var excludedAttr = $field.attr('data-bv-excluded'),\n                // I still need to check the 'name' attribute while initializing the field\n                field        = $field.attr('data-bv-field') || $field.attr('name');\n\n            switch (true) {\n                case (!!field && this.options.fields && this.options.fields[field] && (this.options.fields[field].excluded === 'true' || this.options.fields[field].excluded === true)):\n                case (excludedAttr === 'true'):\n                case (excludedAttr === ''):\n                    return true;\n\n                case (!!field && this.options.fields && this.options.fields[field] && (this.options.fields[field].excluded === 'false' || this.options.fields[field].excluded === false)):\n                case (excludedAttr === 'false'):\n                    return false;\n\n                default:\n                    if (this.options.excluded) {\n                        // Convert to array first\n                        if ('string' === typeof this.options.excluded) {\n                            this.options.excluded = $.map(this.options.excluded.split(','), function(item) {\n                                // Trim the spaces\n                                return $.trim(item);\n                            });\n                        }\n\n                        var length = this.options.excluded.length;\n                        for (var i = 0; i < length; i++) {\n                            if (('string' === typeof this.options.excluded[i] && $field.is(this.options.excluded[i]))\n                                || ('function' === typeof this.options.excluded[i] && this.options.excluded[i].call(this, $field, this) === true))\n                            {\n                                return true;\n                            }\n                        }\n                    }\n                    return false;\n            }\n        },\n\n        /**\n         * Check if the number of characters of field value exceed the threshold or not\n         *\n         * @param {jQuery} $field The field element\n         * @returns {Boolean}\n         */\n        _exceedThreshold: function($field) {\n            var field     = $field.attr('data-bv-field'),\n                threshold = this.options.fields[field].threshold || this.options.threshold;\n            if (!threshold) {\n                return true;\n            }\n            var cannotType = $.inArray($field.attr('type'), ['button', 'checkbox', 'file', 'hidden', 'image', 'radio', 'reset', 'submit']) !== -1;\n            return (cannotType || $field.val().length >= threshold);\n        },\n        \n        // ---\n        // Events\n        // ---\n\n        /**\n         * The default handler of error.form.bv event.\n         * It will be called when there is a invalid field\n         *\n         * @param {jQuery.Event} e The jQuery event object\n         */\n        _onError: function(e) {\n            if (e.isDefaultPrevented()) {\n                return;\n            }\n\n            if ('submitted' === this.options.live) {\n                // Enable live mode\n                this.options.live = 'enabled';\n                var that = this;\n                for (var field in this.options.fields) {\n                    (function(f) {\n                        var fields  = that.getFieldElements(f);\n                        if (fields.length) {\n                            var type    = $(fields[0]).attr('type'),\n                                event   = ('radio' === type || 'checkbox' === type || 'file' === type || 'SELECT' === $(fields[0]).get(0).tagName) ? 'change' : that._changeEvent,\n                                trigger = that.options.fields[field].trigger || that.options.trigger || event,\n                                events  = $.map(trigger.split(' '), function(item) {\n                                    return item + '.live.bv';\n                                }).join(' ');\n\n                            fields.off(events).on(events, function() {\n                                if (that._exceedThreshold($(this))) {\n                                    that.validateField($(this));\n                                }\n                            });\n                        }\n                    })(field);\n                }\n            }\n\n            // Determined the first invalid field which will be focused on automatically\n            for (var i = 0; i < this.$invalidFields.length; i++) {\n                var $field    = this.$invalidFields.eq(i),\n                    autoFocus = this._isOptionEnabled($field.attr('data-bv-field'), 'autoFocus');\n                if (autoFocus) {\n                    // Activate the tab containing the field if exists\n                    var $tabPane = $field.parents('.tab-pane'), tabId;\n                    if ($tabPane && (tabId = $tabPane.attr('id'))) {\n                        $('a[href=\"#' + tabId + '\"][data-toggle=\"tab\"]').tab('show');\n                    }\n\n                    // Focus the field\n                    $field.focus();\n                    break;\n                }\n            }\n        },\n\n        /**\n         * The default handler of success.form.bv event.\n         * It will be called when all the fields are valid\n         *\n         * @param {jQuery.Event} e The jQuery event object\n         */\n        _onSuccess: function(e) {\n            if (e.isDefaultPrevented()) {\n                return;\n            }\n\n            // Submit the form\n            this.disableSubmitButtons(true).defaultSubmit();\n        },\n\n        /**\n         * Called after validating a field element\n         *\n         * @param {jQuery} $field The field element\n         * @param {String} [validatorName] The validator name\n         */\n        _onFieldValidated: function($field, validatorName) {\n            var field         = $field.attr('data-bv-field'),\n                validators    = this.options.fields[field].validators,\n                counter       = {},\n                numValidators = 0,\n                data          = {\n                    bv: this,\n                    field: field,\n                    element: $field,\n                    validator: validatorName,\n                    result: $field.data('bv.response.' + validatorName)\n                };\n\n            // Trigger an event after given validator completes\n            if (validatorName) {\n                switch ($field.data('bv.result.' + validatorName)) {\n                    case this.STATUS_INVALID:\n                        $field.trigger($.Event(this.options.events.validatorError), data);\n                        break;\n                    case this.STATUS_VALID:\n                        $field.trigger($.Event(this.options.events.validatorSuccess), data);\n                        break;\n                    default:\n                        break;\n                }\n            }\n\n            counter[this.STATUS_NOT_VALIDATED] = 0;\n            counter[this.STATUS_VALIDATING]    = 0;\n            counter[this.STATUS_INVALID]       = 0;\n            counter[this.STATUS_VALID]         = 0;\n\n            for (var v in validators) {\n                if (validators[v].enabled === false) {\n                    continue;\n                }\n\n                numValidators++;\n                var result = $field.data('bv.result.' + v);\n                if (result) {\n                    counter[result]++;\n                }\n            }\n\n            if (counter[this.STATUS_VALID] === numValidators) {\n                // Remove from the list of invalid fields\n                this.$invalidFields = this.$invalidFields.not($field);\n\n                $field.trigger($.Event(this.options.events.fieldSuccess), data);\n            }\n            // If all validators are completed and there is at least one validator which doesn't pass\n            else if ((counter[this.STATUS_NOT_VALIDATED] === 0 || !this._isOptionEnabled(field, 'verbose')) && counter[this.STATUS_VALIDATING] === 0 && counter[this.STATUS_INVALID] > 0) {\n                // Add to the list of invalid fields\n                this.$invalidFields = this.$invalidFields.add($field);\n\n                $field.trigger($.Event(this.options.events.fieldError), data);\n            }\n        },\n\n        /**\n         * Check whether or not a field option is enabled\n         *\n         * @param {String} field The field name\n         * @param {String} option The option name, \"verbose\", \"autoFocus\", for example\n         * @returns {Boolean}\n         */\n        _isOptionEnabled: function(field, option) {\n            if (this.options.fields[field] && (this.options.fields[field][option] === 'true' || this.options.fields[field][option] === true)) {\n                return true;\n            }\n            if (this.options.fields[field] && (this.options.fields[field][option] === 'false' || this.options.fields[field][option] === false)) {\n                return false;\n            }\n            return this.options[option] === 'true' || this.options[option] === true;\n        },\n\n        // ---\n        // Public methods\n        // ---\n\n        /**\n         * Retrieve the field elements by given name\n         *\n         * @param {String} field The field name\n         * @returns {null|jQuery[]}\n         */\n        getFieldElements: function(field) {\n            if (!this._cacheFields[field]) {\n                this._cacheFields[field] = (this.options.fields[field] && this.options.fields[field].selector)\n                                         ? $(this.options.fields[field].selector)\n                                         : this.$form.find('[name=\"' + field + '\"]');\n            }\n\n            return this._cacheFields[field];\n        },\n\n        /**\n         * Get the field options\n         *\n         * @param {String|jQuery} [field] The field name or field element. If it is not set, the method returns the form options\n         * @param {String} [validator] The name of validator. It null, the method returns form options\n         * @param {String} [option] The option name\n         * @return {String|Object}\n         */\n        getOptions: function(field, validator, option) {\n            if (!field) {\n                return option ? this.options[option] : this.options;\n            }\n            if ('object' === typeof field) {\n                field = field.attr('data-bv-field');\n            }\n            if (!this.options.fields[field]) {\n                return null;\n            }\n\n            var options = this.options.fields[field];\n            if (!validator) {\n                return option ? options[option] : options;\n            }\n            if (!options.validators || !options.validators[validator]) {\n                return null;\n            }\n\n            return option ? options.validators[validator][option] : options.validators[validator];\n        },\n\n        /**\n         * Disable/enable submit buttons\n         *\n         * @param {Boolean} disabled Can be true or false\n         * @returns {BootstrapValidator}\n         */\n        disableSubmitButtons: function(disabled) {\n            if (!disabled) {\n                this.$form.find(this.options.submitButtons).removeAttr('disabled');\n            } else if (this.options.live !== 'disabled') {\n                // Don't disable if the live validating mode is disabled\n                this.$form.find(this.options.submitButtons).attr('disabled', 'disabled');\n            }\n\n            return this;\n        },\n\n        /**\n         * Validate the form\n         *\n         * @returns {BootstrapValidator}\n         */\n        validate: function() {\n            if (!this.options.fields) {\n                return this;\n            }\n            this.disableSubmitButtons(true);\n\n            this._submitIfValid = false;\n            for (var field in this.options.fields) {\n                this.validateField(field);\n            }\n\n            this._submit();\n            this._submitIfValid = true;\n\n            return this;\n        },\n\n        /**\n         * Validate given field\n         *\n         * @param {String|jQuery} field The field name or field element\n         * @returns {BootstrapValidator}\n         */\n        validateField: function(field) {\n            var fields = $([]);\n            switch (typeof field) {\n                case 'object':\n                    fields = field;\n                    field  = field.attr('data-bv-field');\n                    break;\n                case 'string':\n                    fields = this.getFieldElements(field);\n                    break;\n                default:\n                    break;\n            }\n\n            if (fields.length === 0 || !this.options.fields[field] || this.options.fields[field].enabled === false) {\n                return this;\n            }\n\n            var that       = this,\n                type       = fields.attr('type'),\n                total      = ('radio' === type || 'checkbox' === type) ? 1 : fields.length,\n                updateAll  = ('radio' === type || 'checkbox' === type),\n                validators = this.options.fields[field].validators,\n                verbose    = this._isOptionEnabled(field, 'verbose'),\n                validatorName,\n                validateResult;\n\n            for (var i = 0; i < total; i++) {\n                var $field = fields.eq(i);\n                if (this._isExcluded($field)) {\n                    continue;\n                }\n\n                var stop = false;\n                for (validatorName in validators) {\n                    if ($field.data('bv.dfs.' + validatorName)) {\n                        $field.data('bv.dfs.' + validatorName).reject();\n                    }\n                    if (stop) {\n                        break;\n                    }\n\n                    // Don't validate field if it is already done\n                    var result = $field.data('bv.result.' + validatorName);\n                    if (result === this.STATUS_VALID || result === this.STATUS_INVALID) {\n                        this._onFieldValidated($field, validatorName);\n                        continue;\n                    } else if (validators[validatorName].enabled === false) {\n                        this.updateStatus(updateAll ? field : $field, this.STATUS_VALID, validatorName);\n                        continue;\n                    }\n\n                    $field.data('bv.result.' + validatorName, this.STATUS_VALIDATING);\n                    validateResult = $.fn.bootstrapValidator.validators[validatorName].validate(this, $field, validators[validatorName]);\n\n                    // validateResult can be a $.Deferred object ...\n                    if ('object' === typeof validateResult && validateResult.resolve) {\n                        this.updateStatus(updateAll ? field : $field, this.STATUS_VALIDATING, validatorName);\n                        $field.data('bv.dfs.' + validatorName, validateResult);\n\n                        validateResult.done(function($f, v, response) {\n                            // v is validator name\n                            $f.removeData('bv.dfs.' + v).data('bv.response.' + v, response);\n                            if (response.message) {\n                                that.updateMessage($f, v, response.message);\n                            }\n\n                            that.updateStatus(updateAll ? $f.attr('data-bv-field') : $f, response.valid ? that.STATUS_VALID : that.STATUS_INVALID, v);\n\n                            if (response.valid && that._submitIfValid === true) {\n                                // If a remote validator returns true and the form is ready to submit, then do it\n                                that._submit();\n                            } else if (!response.valid && !verbose) {\n                                stop = true;\n                            }\n                        });\n                    }\n                    // ... or object { valid: true/false, message: 'dynamic message' }\n                    else if ('object' === typeof validateResult && validateResult.valid !== undefined && validateResult.message !== undefined) {\n                        $field.data('bv.response.' + validatorName, validateResult);\n                        this.updateMessage(updateAll ? field : $field, validatorName, validateResult.message);\n                        this.updateStatus(updateAll ? field : $field, validateResult.valid ? this.STATUS_VALID : this.STATUS_INVALID, validatorName);\n                        if (!validateResult.valid && !verbose) {\n                            break;\n                        }\n                    }\n                    // ... or a boolean value\n                    else if ('boolean' === typeof validateResult) {\n                        $field.data('bv.response.' + validatorName, validateResult);\n                        this.updateStatus(updateAll ? field : $field, validateResult ? this.STATUS_VALID : this.STATUS_INVALID, validatorName);\n                        if (!validateResult && !verbose) {\n                            break;\n                        }\n                    }\n                }\n            }\n\n            return this;\n        },\n\n        /**\n         * Update the error message\n         *\n         * @param {String|jQuery} field The field name or field element\n         * @param {String} validator The validator name\n         * @param {String} message The message\n         * @returns {BootstrapValidator}\n         */\n        updateMessage: function(field, validator, message) {\n            var $fields = $([]);\n            switch (typeof field) {\n                case 'object':\n                    $fields = field;\n                    field   = field.attr('data-bv-field');\n                    break;\n                case 'string':\n                    $fields = this.getFieldElements(field);\n                    break;\n                default:\n                    break;\n            }\n\n            $fields.each(function() {\n                $(this).data('bv.messages').find('.help-block[data-bv-validator=\"' + validator + '\"][data-bv-for=\"' + field + '\"]').html(message);\n            });\n        },\n        \n        /**\n         * Update all validating results of field\n         *\n         * @param {String|jQuery} field The field name or field element\n         * @param {String} status The status. Can be 'NOT_VALIDATED', 'VALIDATING', 'INVALID' or 'VALID'\n         * @param {String} [validatorName] The validator name. If null, the method updates validity result for all validators\n         * @returns {BootstrapValidator}\n         */\n        updateStatus: function(field, status, validatorName) {\n            var fields = $([]);\n            switch (typeof field) {\n                case 'object':\n                    fields = field;\n                    field  = field.attr('data-bv-field');\n                    break;\n                case 'string':\n                    fields = this.getFieldElements(field);\n                    break;\n                default:\n                    break;\n            }\n\n            if (status === this.STATUS_NOT_VALIDATED) {\n                // Reset the flag\n                // To prevent the form from doing submit when a deferred validator returns true while typing\n                this._submitIfValid = false;\n            }\n\n            var that  = this,\n                type  = fields.attr('type'),\n                group = this.options.fields[field].group || this.options.group,\n                total = ('radio' === type || 'checkbox' === type) ? 1 : fields.length;\n\n            for (var i = 0; i < total; i++) {\n                var $field       = fields.eq(i);\n                if (this._isExcluded($field)) {\n                    continue;\n                }\n\n                var $parent      = $field.parents(group),\n                    $message     = $field.data('bv.messages'),\n                    $allErrors   = $message.find('.help-block[data-bv-validator][data-bv-for=\"' + field + '\"]'),\n                    $errors      = validatorName ? $allErrors.filter('[data-bv-validator=\"' + validatorName + '\"]') : $allErrors,\n                    $icon        = $field.data('bv.icon'),\n                    container    = ('function' === typeof (this.options.fields[field].container || this.options.container)) ? (this.options.fields[field].container || this.options.container).call(this, $field, this) : (this.options.fields[field].container || this.options.container),\n                    isValidField = null;\n\n                // Update status\n                if (validatorName) {\n                    $field.data('bv.result.' + validatorName, status);\n                } else {\n                    for (var v in this.options.fields[field].validators) {\n                        $field.data('bv.result.' + v, status);\n                    }\n                }\n\n                // Show/hide error elements and feedback icons\n                $errors.attr('data-bv-result', status);\n\n                // Determine the tab containing the element\n                var $tabPane = $field.parents('.tab-pane'),\n                    tabId, $tab;\n                if ($tabPane && (tabId = $tabPane.attr('id'))) {\n                    $tab = $('a[href=\"#' + tabId + '\"][data-toggle=\"tab\"]').parent();\n                }\n\n                switch (status) {\n                    case this.STATUS_VALIDATING:\n                        isValidField = null;\n                        this.disableSubmitButtons(true);\n                        $parent.removeClass('has-success').removeClass('has-error');\n                        if ($icon) {\n                            $icon.removeClass(this.options.feedbackIcons.valid).removeClass(this.options.feedbackIcons.invalid).addClass(this.options.feedbackIcons.validating).show();\n                        }\n                        if ($tab) {\n                            $tab.removeClass('bv-tab-success').removeClass('bv-tab-error');\n                        }\n                        break;\n\n                    case this.STATUS_INVALID:\n                        isValidField = false;\n                        this.disableSubmitButtons(true);\n                        $parent.removeClass('has-success').addClass('has-error');\n                        if ($icon) {\n                            $icon.removeClass(this.options.feedbackIcons.valid).removeClass(this.options.feedbackIcons.validating).addClass(this.options.feedbackIcons.invalid).show();\n                        }\n                        if ($tab) {\n                            $tab.removeClass('bv-tab-success').addClass('bv-tab-error');\n                        }\n                        break;\n\n                    case this.STATUS_VALID:\n                        // If the field is valid (passes all validators)\n                        isValidField = ($allErrors.filter('[data-bv-result=\"' + this.STATUS_NOT_VALIDATED +'\"]').length === 0)\n                                     ? ($allErrors.filter('[data-bv-result=\"' + this.STATUS_VALID +'\"]').length === $allErrors.length)  // All validators are completed\n                                     : null;                                                                                            // There are some validators that have not done\n                        if (isValidField !== null) {\n                            this.disableSubmitButtons(this.$submitButton ? !this.isValid() : !isValidField);\n                            if ($icon) {\n                                $icon\n                                    .removeClass(this.options.feedbackIcons.invalid).removeClass(this.options.feedbackIcons.validating).removeClass(this.options.feedbackIcons.valid)\n                                    .addClass(isValidField ? this.options.feedbackIcons.valid : this.options.feedbackIcons.invalid)\n                                    .show();\n                            }\n                        }\n\n                        $parent.removeClass('has-error has-success').addClass(this.isValidContainer($parent) ? 'has-success' : 'has-error');\n                        if ($tab) {\n                            $tab.removeClass('bv-tab-success').removeClass('bv-tab-error').addClass(this.isValidContainer($tabPane) ? 'bv-tab-success' : 'bv-tab-error');\n                        }\n                        break;\n\n                    case this.STATUS_NOT_VALIDATED:\n                    /* falls through */\n                    default:\n                        isValidField = null;\n                        this.disableSubmitButtons(false);\n                        $parent.removeClass('has-success').removeClass('has-error');\n                        if ($icon) {\n                            $icon.removeClass(this.options.feedbackIcons.valid).removeClass(this.options.feedbackIcons.invalid).removeClass(this.options.feedbackIcons.validating).hide();\n                        }\n                        if ($tab) {\n                            $tab.removeClass('bv-tab-success').removeClass('bv-tab-error');\n                        }\n                        break;\n                }\n\n                switch (true) {\n                    // Only show the first error message if it is placed inside a tooltip ...\n                    case ($icon && 'tooltip' === container):\n                        (isValidField === false)\n                                ? $icon.css('cursor', 'pointer').tooltip('destroy').tooltip({\n                                    container: 'body',\n                                    html: true,\n                                    placement: 'auto top',\n                                    title: $allErrors.filter('[data-bv-result=\"' + that.STATUS_INVALID + '\"]').eq(0).html()\n                                })\n                                : $icon.css('cursor', '').tooltip('destroy');\n                        break;\n                    // ... or popover\n                    case ($icon && 'popover' === container):\n                        (isValidField === false)\n                                ? $icon.css('cursor', 'pointer').popover('destroy').popover({\n                                    container: 'body',\n                                    content: $allErrors.filter('[data-bv-result=\"' + that.STATUS_INVALID + '\"]').eq(0).html(),\n                                    html: true,\n                                    placement: 'auto top',\n                                    trigger: 'hover click'\n                                })\n                                : $icon.css('cursor', '').popover('destroy');\n                        break;\n                    default:\n                        (status === this.STATUS_INVALID) ? $errors.show() : $errors.hide();\n                        break;\n                }\n\n                // Trigger an event\n                $field.trigger($.Event(this.options.events.fieldStatus), {\n                    bv: this,\n                    field: field,\n                    element: $field,\n                    status: status\n                });\n                this._onFieldValidated($field, validatorName);\n            }\n\n            return this;\n        },\n\n        /**\n         * Check the form validity\n         *\n         * @returns {Boolean}\n         */\n        isValid: function() {\n            for (var field in this.options.fields) {\n                if (!this.isValidField(field)) {\n                    return false;\n                }\n            }\n\n            return true;\n        },\n\n        /**\n         * Check if the field is valid or not\n         *\n         * @param {String|jQuery} field The field name or field element\n         * @returns {Boolean}\n         */\n        isValidField: function(field) {\n            var fields = $([]);\n            switch (typeof field) {\n                case 'object':\n                    fields = field;\n                    field  = field.attr('data-bv-field');\n                    break;\n                case 'string':\n                    fields = this.getFieldElements(field);\n                    break;\n                default:\n                    break;\n            }\n            if (fields.length === 0 || !this.options.fields[field] || this.options.fields[field].enabled === false) {\n                return true;\n            }\n\n            var type  = fields.attr('type'),\n                total = ('radio' === type || 'checkbox' === type) ? 1 : fields.length,\n                $field, validatorName, status;\n            for (var i = 0; i < total; i++) {\n                $field = fields.eq(i);\n                if (this._isExcluded($field)) {\n                    continue;\n                }\n\n                for (validatorName in this.options.fields[field].validators) {\n                    if (this.options.fields[field].validators[validatorName].enabled === false) {\n                        continue;\n                    }\n\n                    status = $field.data('bv.result.' + validatorName);\n                    if (status !== this.STATUS_VALID) {\n                        return false;\n                    }\n                }\n            }\n\n            return true;\n        },\n\n        /**\n         * Check if all fields inside a given container are valid.\n         * It's useful when working with a wizard-like such as tab, collapse\n         *\n         * @param {String|jQuery} container The container selector or element\n         * @returns {Boolean}\n         */\n        isValidContainer: function(container) {\n            var that       = this,\n                map        = {},\n                $container = ('string' === typeof container) ? $(container) : container;\n            if ($container.length === 0) {\n                return true;\n            }\n\n            $container.find('[data-bv-field]').each(function() {\n                var $field = $(this),\n                    field  = $field.attr('data-bv-field');\n                if (!that._isExcluded($field) && !map[field]) {\n                    map[field] = $field;\n                }\n            });\n\n            for (var field in map) {\n                var $f = map[field];\n                if ($f.data('bv.messages')\n                      .find('.help-block[data-bv-validator][data-bv-for=\"' + field + '\"]')\n                      .filter('[data-bv-result=\"' + this.STATUS_INVALID +'\"]')\n                      .length > 0)\n                {\n                    return false;\n                }\n            }\n\n            return true;\n        },\n\n        /**\n         * Submit the form using default submission.\n         * It also does not perform any validations when submitting the form\n         */\n        defaultSubmit: function() {\n            if (this.$submitButton) {\n                // Create hidden input to send the submit buttons\n                $('<input/>')\n                    .attr('type', 'hidden')\n                    .attr('data-bv-submit-hidden', '')\n                    .attr('name', this.$submitButton.attr('name'))\n                    .val(this.$submitButton.val())\n                    .appendTo(this.$form);\n            }\n\n            // Submit form\n            this.$form.off('submit.bv').submit();\n        },\n\n        // ---\n        // Useful APIs which aren't used internally\n        // ---\n\n        /**\n         * Get the list of invalid fields\n         *\n         * @returns {jQuery[]}\n         */\n        getInvalidFields: function() {\n            return this.$invalidFields;\n        },\n\n        /**\n         * Returns the clicked submit button\n         *\n         * @returns {jQuery}\n         */\n        getSubmitButton: function() {\n            return this.$submitButton;\n        },\n\n        /**\n         * Get the error messages\n         *\n         * @param {String|jQuery} [field] The field name or field element\n         * If the field is not defined, the method returns all error messages of all fields\n         * @param {String} [validator] The name of validator\n         * If the validator is not defined, the method returns error messages of all validators\n         * @returns {String[]}\n         */\n        getMessages: function(field, validator) {\n            var that     = this,\n                messages = [],\n                $fields  = $([]);\n\n            switch (true) {\n                case (field && 'object' === typeof field):\n                    $fields = field;\n                    break;\n                case (field && 'string' === typeof field):\n                    var f = this.getFieldElements(field);\n                    if (f.length > 0) {\n                        var type = f.attr('type');\n                        $fields = ('radio' === type || 'checkbox' === type) ? f.eq(0) : f;\n                    }\n                    break;\n                default:\n                    $fields = this.$invalidFields;\n                    break;\n            }\n\n            var filter = validator ? '[data-bv-validator=\"' + validator + '\"]' : '';\n            $fields.each(function() {\n                messages = messages.concat(\n                    $(this)\n                        .data('bv.messages')\n                        .find('.help-block[data-bv-for=\"' + $(this).attr('data-bv-field') + '\"][data-bv-result=\"' + that.STATUS_INVALID + '\"]' + filter)\n                        .map(function() {\n                            var v = $(this).attr('data-bv-validator'),\n                                f = $(this).attr('data-bv-for');\n                            return (that.options.fields[f].validators[v].enabled === false) ? '' : $(this).html();\n                        })\n                        .get()\n                );\n            });\n\n            return messages;\n        },\n\n        /**\n         * Update the option of a specific validator\n         *\n         * @param {String|jQuery} field The field name or field element\n         * @param {String} validator The validator name\n         * @param {String} option The option name\n         * @param {String} value The value to set\n         * @returns {BootstrapValidator}\n         */\n        updateOption: function(field, validator, option, value) {\n            if ('object' === typeof field) {\n                field = field.attr('data-bv-field');\n            }\n            if (this.options.fields[field] && this.options.fields[field].validators[validator]) {\n                this.options.fields[field].validators[validator][option] = value;\n                this.updateStatus(field, this.STATUS_NOT_VALIDATED, validator);\n            }\n\n            return this;\n        },\n\n        /**\n         * Add a new field\n         *\n         * @param {String|jQuery} field The field name or field element\n         * @param {Object} [options] The validator rules\n         * @returns {BootstrapValidator}\n         */\n        addField: function(field, options) {\n            var fields = $([]);\n            switch (typeof field) {\n                case 'object':\n                    fields = field;\n                    field  = field.attr('data-bv-field') || field.attr('name');\n                    break;\n                case 'string':\n                    delete this._cacheFields[field];\n                    fields = this.getFieldElements(field);\n                    break;\n                default:\n                    break;\n            }\n\n            fields.attr('data-bv-field', field);\n\n            var type  = fields.attr('type'),\n                total = ('radio' === type || 'checkbox' === type) ? 1 : fields.length;\n\n            for (var i = 0; i < total; i++) {\n                var $field = fields.eq(i);\n\n                // Try to parse the options from HTML attributes\n                var opts = this._parseOptions($field);\n                opts = (opts === null) ? options : $.extend(true, options, opts);\n\n                this.options.fields[field] = $.extend(true, this.options.fields[field], opts);\n\n                // Update the cache\n                this._cacheFields[field] = this._cacheFields[field] ? this._cacheFields[field].add($field) : $field;\n\n                // Init the element\n                this._initField(('checkbox' === type || 'radio' === type) ? field : $field);\n            }\n\n            this.disableSubmitButtons(false);\n            // Trigger an event\n            this.$form.trigger($.Event(this.options.events.fieldAdded), {\n                field: field,\n                element: fields,\n                options: this.options.fields[field]\n            });\n\n            return this;\n        },\n\n        /**\n         * Remove a given field\n         *\n         * @param {String|jQuery} field The field name or field element\n         * @returns {BootstrapValidator}\n         */\n        removeField: function(field) {\n            var fields = $([]);\n            switch (typeof field) {\n                case 'object':\n                    fields = field;\n                    field  = field.attr('data-bv-field') || field.attr('name');\n                    fields.attr('data-bv-field', field);\n                    break;\n                case 'string':\n                    fields = this.getFieldElements(field);\n                    break;\n                default:\n                    break;\n            }\n\n            if (fields.length === 0) {\n                return this;\n            }\n\n            var type  = fields.attr('type'),\n                total = ('radio' === type || 'checkbox' === type) ? 1 : fields.length;\n\n            for (var i = 0; i < total; i++) {\n                var $field = fields.eq(i);\n\n                // Remove from the list of invalid fields\n                this.$invalidFields = this.$invalidFields.not($field);\n\n                // Update the cache\n                this._cacheFields[field] = this._cacheFields[field].not($field);\n            }\n\n            if (!this._cacheFields[field] || this._cacheFields[field].length === 0) {\n                delete this.options.fields[field];\n            }\n            if ('checkbox' === type || 'radio' === type) {\n                this._initField(field);\n            }\n\n            this.disableSubmitButtons(false);\n            // Trigger an event\n            this.$form.trigger($.Event(this.options.events.fieldRemoved), {\n                field: field,\n                element: fields\n            });\n\n            return this;\n        },\n\n        /**\n         * Reset given field\n         *\n         * @param {String|jQuery} field The field name or field element\n         * @param {Boolean} [resetValue] If true, the method resets field value to empty or remove checked/selected attribute (for radio/checkbox)\n         * @returns {BootstrapValidator}\n         */\n        resetField: function(field, resetValue) {\n            var $fields = $([]);\n            switch (typeof field) {\n                case 'object':\n                    $fields = field;\n                    field   = field.attr('data-bv-field');\n                    break;\n                case 'string':\n                    $fields = this.getFieldElements(field);\n                    break;\n                default:\n                    break;\n            }\n\n            var total = $fields.length;\n            if (this.options.fields[field]) {\n                for (var i = 0; i < total; i++) {\n                    for (var validator in this.options.fields[field].validators) {\n                        $fields.eq(i).removeData('bv.dfs.' + validator);\n                    }\n                }\n            }\n\n            // Mark field as not validated yet\n            this.updateStatus(field, this.STATUS_NOT_VALIDATED);\n\n            if (resetValue) {\n                var type = $fields.attr('type');\n                ('radio' === type || 'checkbox' === type) ? $fields.removeAttr('checked').removeAttr('selected') : $fields.val('');\n            }\n\n            return this;\n        },\n\n        /**\n         * Reset the form\n         *\n         * @param {Boolean} [resetValue] If true, the method resets field value to empty or remove checked/selected attribute (for radio/checkbox)\n         * @returns {BootstrapValidator}\n         */\n        resetForm: function(resetValue) {\n            for (var field in this.options.fields) {\n                this.resetField(field, resetValue);\n            }\n\n            this.$invalidFields = $([]);\n            this.$submitButton  = null;\n\n            // Enable submit buttons\n            this.disableSubmitButtons(false);\n\n            return this;\n        },\n\n        /**\n         * Revalidate given field\n         * It's used when you need to revalidate the field which its value is updated by other plugin\n         *\n         * @param {String|jQuery} field The field name of field element\n         * @returns {BootstrapValidator}\n         */\n        revalidateField: function(field) {\n            this.updateStatus(field, this.STATUS_NOT_VALIDATED)\n                .validateField(field);\n\n            return this;\n        },\n\n        /**\n         * Enable/Disable all validators to given field\n         *\n         * @param {String} field The field name\n         * @param {Boolean} enabled Enable/Disable field validators\n         * @param {String} [validatorName] The validator name. If null, all validators will be enabled/disabled\n         * @returns {BootstrapValidator}\n         */\n        enableFieldValidators: function(field, enabled, validatorName) {\n            var validators = this.options.fields[field].validators;\n\n            // Enable/disable particular validator\n            if (validatorName\n                && validators\n                && validators[validatorName] && validators[validatorName].enabled !== enabled)\n            {\n                this.options.fields[field].validators[validatorName].enabled = enabled;\n                this.updateStatus(field, this.STATUS_NOT_VALIDATED, validatorName);\n            }\n            // Enable/disable all validators\n            else if (!validatorName && this.options.fields[field].enabled !== enabled) {\n                this.options.fields[field].enabled = enabled;\n                for (var v in validators) {\n                    this.enableFieldValidators(field, enabled, v);\n                }\n            }\n\n            return this;\n        },\n\n        /**\n         * Some validators have option which its value is dynamic.\n         * For example, the zipCode validator has the country option which might be changed dynamically by a select element.\n         *\n         * @param {jQuery|String} field The field name or element\n         * @param {String|Function} option The option which can be determined by:\n         * - a string\n         * - name of field which defines the value\n         * - name of function which returns the value\n         * - a function returns the value\n         *\n         * The callback function has the format of\n         *      callback: function(value, validator, $field) {\n         *          // value is the value of field\n         *          // validator is the BootstrapValidator instance\n         *          // $field is the field element\n         *      }\n         *\n         * @returns {String}\n         */\n        getDynamicOption: function(field, option) {\n            var $field = ('string' === typeof field) ? this.getFieldElements(field) : field,\n                value  = $field.val();\n\n            // Option can be determined by\n            // ... a function\n            if ('function' === typeof option) {\n                return $.fn.bootstrapValidator.helpers.call(option, [value, this, $field]);\n            }\n            // ... value of other field\n            else if ('string' === typeof option) {\n                var $f = this.getFieldElements(option);\n                if ($f.length) {\n                    return $f.val();\n                }\n                // ... return value of callback\n                else {\n                    return $.fn.bootstrapValidator.helpers.call(option, [value, this, $field]) || option;\n                }\n            }\n\n            return null;\n        },\n\n        /**\n         * Destroy the plugin\n         * It will remove all error messages, feedback icons and turn off the events\n         */\n        destroy: function() {\n            var field, fields, $field, validator, $icon, group;\n            for (field in this.options.fields) {\n                fields    = this.getFieldElements(field);\n                group     = this.options.fields[field].group || this.options.group;\n                for (var i = 0; i < fields.length; i++) {\n                    $field = fields.eq(i);\n                    $field\n                        // Remove all error messages\n                        .data('bv.messages')\n                            .find('.help-block[data-bv-validator][data-bv-for=\"' + field + '\"]').remove().end()\n                            .end()\n                        .removeData('bv.messages')\n                        // Remove feedback classes\n                        .parents(group)\n                            .removeClass('has-feedback has-error has-success')\n                            .end()\n                        // Turn off events\n                        .off('.bv')\n                        .removeAttr('data-bv-field');\n\n                    // Remove feedback icons, tooltip/popover container\n                    $icon = $field.data('bv.icon');\n                    if ($icon) {\n                        var container = ('function' === typeof (this.options.fields[field].container || this.options.container)) ? (this.options.fields[field].container || this.options.container).call(this, $field, this) : (this.options.fields[field].container || this.options.container);\n                        switch (container) {\n                            case 'tooltip':\n                                $icon.tooltip('destroy').remove();\n                                break;\n                            case 'popover':\n                                $icon.popover('destroy').remove();\n                                break;\n                            default:\n                                $icon.remove();\n                                break;\n                        }\n                    }\n                    $field.removeData('bv.icon');\n\n                    for (validator in this.options.fields[field].validators) {\n                        if ($field.data('bv.dfs.' + validator)) {\n                            $field.data('bv.dfs.' + validator).reject();\n                        }\n                        $field.removeData('bv.result.' + validator)\n                              .removeData('bv.response.' + validator)\n                              .removeData('bv.dfs.' + validator);\n\n                        // Destroy the validator\n                        if ('function' === typeof $.fn.bootstrapValidator.validators[validator].destroy) {\n                            $.fn.bootstrapValidator.validators[validator].destroy(this, $field, this.options.fields[field].validators[validator]);\n                        }\n                    }\n                }\n            }\n\n            this.disableSubmitButtons(false);   // Enable submit buttons\n            this.$hiddenButton.remove();        // Remove the hidden button\n\n            this.$form\n                .removeClass(this.options.elementClass)\n                .off('.bv')\n                .removeData('bootstrapValidator')\n                // Remove generated hidden elements\n                .find('[data-bv-submit-hidden]').remove().end()\n                .find('[type=\"submit\"]').off('click.bv');\n        }\n    };\n\n    // Plugin definition\n    $.fn.bootstrapValidator = function(option) {\n        var params = arguments;\n        return this.each(function() {\n            var $this   = $(this),\n                data    = $this.data('bootstrapValidator'),\n                options = 'object' === typeof option && option;\n            if (!data) {\n                data = new BootstrapValidator(this, options);\n                $this.data('bootstrapValidator', data);\n            }\n\n            // Allow to call plugin method\n            if ('string' === typeof option) {\n                data[option].apply(data, Array.prototype.slice.call(params, 1));\n            }\n        });\n    };\n\n    // The default options\n    // Sorted in alphabetical order\n    $.fn.bootstrapValidator.DEFAULT_OPTIONS = {\n        // The first invalid field will be focused automatically\n        autoFocus: true,\n\n        //The error messages container. It can be:\n        // - 'tooltip' if you want to use Bootstrap tooltip to show error messages\n        // - 'popover' if you want to use Bootstrap popover to show error messages\n        // - a CSS selector indicating the container\n        // In the first two cases, since the tooltip/popover should be small enough, the plugin only shows only one error message\n        // You also can define the message container for particular field\n        container: null,\n\n        // The form CSS class\n        elementClass: 'bv-form',\n\n        // Use custom event name to avoid window.onerror being invoked by jQuery\n        // See https://github.com/nghuuphuoc/bootstrapvalidator/issues/630\n        events: {\n            formInit: 'init.form.bv',\n            formError: 'error.form.bv',\n            formSuccess: 'success.form.bv',\n            fieldAdded: 'added.field.bv',\n            fieldRemoved: 'removed.field.bv',\n            fieldInit: 'init.field.bv',\n            fieldError: 'error.field.bv',\n            fieldSuccess: 'success.field.bv',\n            fieldStatus: 'status.field.bv',\n            validatorError: 'error.validator.bv',\n            validatorSuccess: 'success.validator.bv'\n        },\n\n        // Indicate fields which won't be validated\n        // By default, the plugin will not validate the following kind of fields:\n        // - disabled\n        // - hidden\n        // - invisible\n        //\n        // The setting consists of jQuery filters. Accept 3 formats:\n        // - A string. Use a comma to separate filter\n        // - An array. Each element is a filter\n        // - An array. Each element can be a callback function\n        //      function($field, validator) {\n        //          $field is jQuery object representing the field element\n        //          validator is the BootstrapValidator instance\n        //          return true or false;\n        //      }\n        //\n        // The 3 following settings are equivalent:\n        //\n        // 1) ':disabled, :hidden, :not(:visible)'\n        // 2) [':disabled', ':hidden', ':not(:visible)']\n        // 3) [':disabled', ':hidden', function($field) {\n        //        return !$field.is(':visible');\n        //    }]\n        excluded: [':disabled', ':hidden', ':not(:visible)'],\n\n        // Shows ok/error/loading icons based on the field validity.\n        // This feature requires Bootstrap v3.1.0 or later (http://getbootstrap.com/css/#forms-control-validation).\n        // Since Bootstrap doesn't provide any methods to know its version, this option cannot be on/off automatically.\n        // In other word, to use this feature you have to upgrade your Bootstrap to v3.1.0 or later.\n        //\n        // Examples:\n        // - Use Glyphicons icons:\n        //  feedbackIcons: {\n        //      valid: 'glyphicon glyphicon-ok',\n        //      invalid: 'glyphicon glyphicon-remove',\n        //      validating: 'glyphicon glyphicon-refresh'\n        //  }\n        // - Use FontAwesome icons:\n        //  feedbackIcons: {\n        //      valid: 'fa fa-check',\n        //      invalid: 'fa fa-times',\n        //      validating: 'fa fa-refresh'\n        //  }\n        feedbackIcons: {\n            valid:      null,\n            invalid:    null,\n            validating: null\n        },\n\n        // Map the field name with validator rules\n        fields: null,\n\n        // The CSS selector for indicating the element consists the field\n        // By default, each field is placed inside the <div class=\"form-group\"></div>\n        // You should adjust this option if your form group consists of many fields which not all of them need to be validated\n        group: '.form-group',\n\n        // Live validating option\n        // Can be one of 3 values:\n        // - enabled: The plugin validates fields as soon as they are changed\n        // - disabled: Disable the live validating. The error messages are only shown after the form is submitted\n        // - submitted: The live validating is enabled after the form is submitted\n        live: 'enabled',\n\n        // Default invalid message\n        message: 'This value is not valid',\n\n        // The submit buttons selector\n        // These buttons will be disabled to prevent the valid form from multiple submissions\n        submitButtons: '[type=\"submit\"]',\n\n        // The field will not be live validated if its length is less than this number of characters\n        threshold: null,\n\n        // Whether to be verbose when validating a field or not.\n        // Possible values:\n        // - true:  when a field has multiple validators, all of them will be checked, and respectively - if errors occur in\n        //          multiple validators, all of them will be displayed to the user\n        // - false: when a field has multiple validators, validation for this field will be terminated upon the first encountered error.\n        //          Thus, only the very first error message related to this field will be displayed to the user\n        verbose: true\n    };\n\n    // Available validators\n    $.fn.bootstrapValidator.validators  = {};\n\n    // i18n\n    $.fn.bootstrapValidator.i18n        = {};\n\n    $.fn.bootstrapValidator.Constructor = BootstrapValidator;\n\n    // Helper methods, which can be used in validator class\n    $.fn.bootstrapValidator.helpers = {\n        /**\n         * Execute a callback function\n         *\n         * @param {String|Function} functionName Can be\n         * - name of global function\n         * - name of namespace function (such as A.B.C)\n         * - a function\n         * @param {Array} args The callback arguments\n         */\n        call: function(functionName, args) {\n            if ('function' === typeof functionName) {\n                return functionName.apply(this, args);\n            } else if ('string' === typeof functionName) {\n                if ('()' === functionName.substring(functionName.length - 2)) {\n                    functionName = functionName.substring(0, functionName.length - 2);\n                }\n                var ns      = functionName.split('.'),\n                    func    = ns.pop(),\n                    context = window;\n                for (var i = 0; i < ns.length; i++) {\n                    context = context[ns[i]];\n                }\n\n                return (typeof context[func] === 'undefined') ? null : context[func].apply(this, args);\n            }\n        },\n\n        /**\n         * Format a string\n         * It's used to format the error message\n         * format('The field must between %s and %s', [10, 20]) = 'The field must between 10 and 20'\n         *\n         * @param {String} message\n         * @param {Array} parameters\n         * @returns {String}\n         */\n        format: function(message, parameters) {\n            if (!$.isArray(parameters)) {\n                parameters = [parameters];\n            }\n\n            for (var i in parameters) {\n                message = message.replace('%s', parameters[i]);\n            }\n\n            return message;\n        },\n\n        /**\n         * Validate a date\n         *\n         * @param {Number} year The full year in 4 digits\n         * @param {Number} month The month number\n         * @param {Number} day The day number\n         * @param {Boolean} [notInFuture] If true, the date must not be in the future\n         * @returns {Boolean}\n         */\n        date: function(year, month, day, notInFuture) {\n            if (isNaN(year) || isNaN(month) || isNaN(day)) {\n                return false;\n            }\n            if (day.length > 2 || month.length > 2 || year.length > 4) {\n                return false;\n            }\n\n            day   = parseInt(day, 10);\n            month = parseInt(month, 10);\n            year  = parseInt(year, 10);\n\n            if (year < 1000 || year > 9999 || month <= 0 || month > 12) {\n                return false;\n            }\n            var numDays = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\n            // Update the number of days in Feb of leap year\n            if (year % 400 === 0 || (year % 100 !== 0 && year % 4 === 0)) {\n                numDays[1] = 29;\n            }\n\n            // Check the day\n            if (day <= 0 || day > numDays[month - 1]) {\n                return false;\n            }\n\n            if (notInFuture === true) {\n                var currentDate  = new Date(),\n                    currentYear  = currentDate.getFullYear(),\n                    currentMonth = currentDate.getMonth(),\n                    currentDay   = currentDate.getDate();\n                return (year < currentYear\n                        || (year === currentYear && month - 1 < currentMonth)\n                        || (year === currentYear && month - 1 === currentMonth && day < currentDay));\n            }\n\n            return true;\n        },\n\n        /**\n         * Implement Luhn validation algorithm\n         * Credit to https://gist.github.com/ShirtlessKirk/2134376\n         *\n         * @see http://en.wikipedia.org/wiki/Luhn\n         * @param {String} value\n         * @returns {Boolean}\n         */\n        luhn: function(value) {\n            var length  = value.length,\n                mul     = 0,\n                prodArr = [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 2, 4, 6, 8, 1, 3, 5, 7, 9]],\n                sum     = 0;\n\n            while (length--) {\n                sum += prodArr[mul][parseInt(value.charAt(length), 10)];\n                mul ^= 1;\n            }\n\n            return (sum % 10 === 0 && sum > 0);\n        },\n\n        /**\n         * Implement modulus 11, 10 (ISO 7064) algorithm\n         *\n         * @param {String} value\n         * @returns {Boolean}\n         */\n        mod11And10: function(value) {\n            var check  = 5,\n                length = value.length;\n            for (var i = 0; i < length; i++) {\n                check = (((check || 10) * 2) % 11 + parseInt(value.charAt(i), 10)) % 10;\n            }\n            return (check === 1);\n        },\n\n        /**\n         * Implements Mod 37, 36 (ISO 7064) algorithm\n         * Usages:\n         * mod37And36('A12425GABC1234002M')\n         * mod37And36('002006673085', '0123456789')\n         *\n         * @param {String} value\n         * @param {String} [alphabet]\n         * @returns {Boolean}\n         */\n        mod37And36: function(value, alphabet) {\n            alphabet = alphabet || '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';\n            var modulus = alphabet.length,\n                length  = value.length,\n                check   = Math.floor(modulus / 2);\n            for (var i = 0; i < length; i++) {\n                check = (((check || modulus) * 2) % (modulus + 1) + alphabet.indexOf(value.charAt(i))) % modulus;\n            }\n            return (check === 1);\n        }\n    };\n}(window.jQuery));\n;(function($) {\n    $.fn.bootstrapValidator.i18n.base64 = $.extend($.fn.bootstrapValidator.i18n.base64 || {}, {\n        'default': 'Please enter a valid base 64 encoded'\n    });\n\n    $.fn.bootstrapValidator.validators.base64 = {\n        /**\n         * Return true if the input value is a base 64 encoded string.\n         *\n         * @param {BootstrapValidator} validator The validator plugin instance\n         * @param {jQuery} $field Field element\n         * @param {Object} options Can consist of the following keys:\n         * - message: The invalid message\n         * @returns {Boolean}\n         */\n        validate: function(validator, $field, options) {\n            var value = $field.val();\n            if (value === '') {\n                return true;\n            }\n\n            return /^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=|[A-Za-z0-9+/]{4})$/.test(value);\n        }\n    };\n}(window.jQuery));\n;(function($) {\n    $.fn.bootstrapValidator.i18n.between = $.extend($.fn.bootstrapValidator.i18n.between || {}, {\n        'default': 'Please enter a value between %s and %s',\n        notInclusive: 'Please enter a value between %s and %s strictly'\n    });\n\n    $.fn.bootstrapValidator.validators.between = {\n        html5Attributes: {\n            message: 'message',\n            min: 'min',\n            max: 'max',\n            inclusive: 'inclusive'\n        },\n\n        enableByHtml5: function($field) {\n            if ('range' === $field.attr('type')) {\n                return {\n                    min: $field.attr('min'),\n                    max: $field.attr('max')\n                };\n            }\n\n            return false;\n        },\n\n        /**\n         * Return true if the input value is between (strictly or not) two given numbers\n         *\n         * @param {BootstrapValidator} validator The validator plugin instance\n         * @param {jQuery} $field Field element\n         * @param {Object} options Can consist of the following keys:\n         * - min\n         * - max\n         *\n         * The min, max keys define the number which the field value compares to. min, max can be\n         *      - A number\n         *      - Name of field which its value defines the number\n         *      - Name of callback function that returns the number\n         *      - A callback function that returns the number\n         *\n         * - inclusive [optional]: Can be true or false. Default is true\n         * - message: The invalid message\n         * @returns {Boolean|Object}\n         */\n        validate: function(validator, $field, options) {\n            var value = $field.val();\n            if (value === '') {\n                return true;\n            }\n\n\t\t\tvalue = this._format(value);\n            if (!$.isNumeric(value)) {\n                return false;\n            }\n\n            var min      = $.isNumeric(options.min) ? options.min : validator.getDynamicOption($field, options.min),\n                max      = $.isNumeric(options.max) ? options.max : validator.getDynamicOption($field, options.max),\n                minValue = this._format(min),\n                maxValue = this._format(max);\n\n            value = parseFloat(value);\n\t\t\treturn (options.inclusive === true || options.inclusive === undefined)\n                    ? {\n                        valid: value >= minValue && value <= maxValue,\n                        message: $.fn.bootstrapValidator.helpers.format(options.message || $.fn.bootstrapValidator.i18n.between['default'], [min, max])\n                    }\n                    : {\n                        valid: value > minValue  && value <  maxValue,\n                        message: $.fn.bootstrapValidator.helpers.format(options.message || $.fn.bootstrapValidator.i18n.between.notInclusive, [min, max])\n                    };\n        },\n\n        _format: function(value) {\n            return (value + '').replace(',', '.');\n        }\n    };\n}(window.jQuery));\n;(function($) {\n    $.fn.bootstrapValidator.validators.blank = {\n        /**\n         * Placeholder validator that can be used to display a custom validation message\n         * returned from the server\n         * Example:\n         *\n         * (1) a \"blank\" validator is applied to an input field.\n         * (2) data is entered via the UI that is unable to be validated client-side.\n         * (3) server returns a 400 with JSON data that contains the field that failed\n         *     validation and an associated message.\n         * (4) ajax 400 call handler does the following:\n         *\n         *      bv.updateMessage(field, 'blank', errorMessage);\n         *      bv.updateStatus(field, 'INVALID');\n         *\n         * @see https://github.com/nghuuphuoc/bootstrapvalidator/issues/542\n         * @see https://github.com/nghuuphuoc/bootstrapvalidator/pull/666\n         * @param {BootstrapValidator} validator The validator plugin instance\n         * @param {jQuery} $field Field element\n         * @param {Object} options Can consist of the following keys:\n         * - message: The invalid message\n         * @returns {Boolean}\n         */\n        validate: function(validator, $field, options) {\n            return true;\n        }\n    };\n}(window.jQuery));\n;(function($) {\n    $.fn.bootstrapValidator.i18n.callback = $.extend($.fn.bootstrapValidator.i18n.callback || {}, {\n        'default': 'Please enter a valid value'\n    });\n\n    $.fn.bootstrapValidator.validators.callback = {\n        html5Attributes: {\n            message: 'message',\n            callback: 'callback'\n        },\n\n        /**\n         * Return result from the callback method\n         *\n         * @param {BootstrapValidator} validator The validator plugin instance\n         * @param {jQuery} $field Field element\n         * @param {Object} options Can consist of the following keys:\n         * - callback: The callback method that passes 2 parameters:\n         *      callback: function(fieldValue, validator, $field) {\n         *          // fieldValue is the value of field\n         *          // validator is instance of BootstrapValidator\n         *          // $field is the field element\n         *      }\n         * - message: The invalid message\n         * @returns {Deferred}\n         */\n        validate: function(validator, $field, options) {\n            var value  = $field.val(),\n                dfd    = new $.Deferred(),\n                result = { valid: true };\n\n            if (options.callback) {\n                var response = $.fn.bootstrapValidator.helpers.call(options.callback, [value, validator, $field]);\n                result = ('boolean' === typeof response) ? { valid: response } :  response;\n            }\n\n            dfd.resolve($field, 'callback', result);\n            return dfd;\n        }\n    };\n}(window.jQuery));\n;(function($) {\n    $.fn.bootstrapValidator.i18n.choice = $.extend($.fn.bootstrapValidator.i18n.choice || {}, {\n        'default': 'Please enter a valid value',\n        less: 'Please choose %s options at minimum',\n        more: 'Please choose %s options at maximum',\n        between: 'Please choose %s - %s options'\n    });\n\n    $.fn.bootstrapValidator.validators.choice = {\n        html5Attributes: {\n            message: 'message',\n            min: 'min',\n            max: 'max'\n        },\n\n        /**\n         * Check if the number of checked boxes are less or more than a given number\n         *\n         * @param {BootstrapValidator} validator The validator plugin instance\n         * @param {jQuery} $field Field element\n         * @param {Object} options Consists of following keys:\n         * - min\n         * - max\n         *\n         * At least one of two keys is required\n         * The min, max keys define the number which the field value compares to. min, max can be\n         *      - A number\n         *      - Name of field which its value defines the number\n         *      - Name of callback function that returns the number\n         *      - A callback function that returns the number\n         *\n         * - message: The invalid message\n         * @returns {Object}\n         */\n        validate: function(validator, $field, options) {\n            var numChoices = $field.is('select')\n                            ? validator.getFieldElements($field.attr('data-bv-field')).find('option').filter(':selected').length\n                            : validator.getFieldElements($field.attr('data-bv-field')).filter(':checked').length,\n                min        = options.min ? ($.isNumeric(options.min) ? options.min : validator.getDynamicOption($field, options.min)) : null,\n                max        = options.max ? ($.isNumeric(options.max) ? options.max : validator.getDynamicOption($field, options.max)) : null,\n                isValid    = true,\n                message    = options.message || $.fn.bootstrapValidator.i18n.choice['default'];\n\n            if ((min && numChoices < parseInt(min, 10)) || (max && numChoices > parseInt(max, 10))) {\n                isValid = false;\n            }\n\n            switch (true) {\n                case (!!min && !!max):\n                    message = $.fn.bootstrapValidator.helpers.format(options.message || $.fn.bootstrapValidator.i18n.choice.between, [parseInt(min, 10), parseInt(max, 10)]);\n                    break;\n\n                case (!!min):\n                    message = $.fn.bootstrapValidator.helpers.format(options.message || $.fn.bootstrapValidator.i18n.choice.less, parseInt(min, 10));\n                    break;\n\n                case (!!max):\n                    message = $.fn.bootstrapValidator.helpers.format(options.message || $.fn.bootstrapValidator.i18n.choice.more, parseInt(max, 10));\n                    break;\n\n                default:\n                    break;\n            }\n\n            return { valid: isValid, message: message };\n        }\n    };\n}(window.jQuery));\n;(function($) {\n    $.fn.bootstrapValidator.i18n.color = $.extend($.fn.bootstrapValidator.i18n.color || {}, {\n        'default': 'Please enter a valid color'\n    });\n\n    $.fn.bootstrapValidator.validators.color = {\n        SUPPORTED_TYPES: [\n            'hex', 'rgb', 'rgba', 'hsl', 'hsla', 'keyword'\n        ],\n\n        KEYWORD_COLORS: [\n            // Colors start with A\n            'aliceblue', 'antiquewhite', 'aqua', 'aquamarine', 'azure',\n            // B\n            'beige', 'bisque', 'black', 'blanchedalmond', 'blue', 'blueviolet', 'brown', 'burlywood',\n            // C\n            'cadetblue', 'chartreuse', 'chocolate', 'coral', 'cornflowerblue', 'cornsilk', 'crimson', 'cyan',\n            // D\n            'darkblue', 'darkcyan', 'darkgoldenrod', 'darkgray', 'darkgreen', 'darkgrey', 'darkkhaki', 'darkmagenta',\n            'darkolivegreen', 'darkorange', 'darkorchid', 'darkred', 'darksalmon', 'darkseagreen', 'darkslateblue',\n            'darkslategray', 'darkslategrey', 'darkturquoise', 'darkviolet', 'deeppink', 'deepskyblue', 'dimgray',\n            'dimgrey', 'dodgerblue',\n            // F\n            'firebrick', 'floralwhite', 'forestgreen', 'fuchsia',\n            // G\n            'gainsboro', 'ghostwhite', 'gold', 'goldenrod', 'gray', 'green', 'greenyellow', 'grey',\n            // H\n            'honeydew', 'hotpink',\n            // I\n            'indianred', 'indigo', 'ivory',\n            // K\n            'khaki',\n            // L\n            'lavender', 'lavenderblush', 'lawngreen', 'lemonchiffon', 'lightblue', 'lightcoral', 'lightcyan',\n            'lightgoldenrodyellow', 'lightgray', 'lightgreen', 'lightgrey', 'lightpink', 'lightsalmon', 'lightseagreen',\n            'lightskyblue', 'lightslategray', 'lightslategrey', 'lightsteelblue', 'lightyellow', 'lime', 'limegreen',\n            'linen',\n            // M\n            'magenta', 'maroon', 'mediumaquamarine', 'mediumblue', 'mediumorchid', 'mediumpurple', 'mediumseagreen',\n            'mediumslateblue', 'mediumspringgreen', 'mediumturquoise', 'mediumvioletred', 'midnightblue', 'mintcream',\n            'mistyrose', 'moccasin',\n            // N\n            'navajowhite', 'navy',\n            // O\n            'oldlace', 'olive', 'olivedrab', 'orange', 'orangered', 'orchid',\n            // P\n            'palegoldenrod', 'palegreen', 'paleturquoise', 'palevioletred', 'papayawhip', 'peachpuff', 'peru', 'pink',\n            'plum', 'powderblue', 'purple',\n            // R\n            'red', 'rosybrown', 'royalblue',\n            // S\n            'saddlebrown', 'salmon', 'sandybrown', 'seagreen', 'seashell', 'sienna', 'silver', 'skyblue', 'slateblue',\n            'slategray', 'slategrey', 'snow', 'springgreen', 'steelblue',\n            // T\n            'tan', 'teal', 'thistle', 'tomato', 'transparent', 'turquoise',\n            // V\n            'violet',\n            // W\n            'wheat', 'white', 'whitesmoke',\n            // Y\n            'yellow', 'yellowgreen'\n        ],\n\n        /**\n         * Return true if the input value is a valid color\n         *\n         * @param {BootstrapValidator} validator The validator plugin instance\n         * @param {jQuery} $field Field element\n         * @param {Object} options Can consist of the following keys:\n         * - message: The invalid message\n         * - type: The array of valid color types\n         * @returns {Boolean}\n         */\n        validate: function(validator, $field, options) {\n            var value = $field.val();\n            if (value === '') {\n                return true;\n            }\n\n            var types = options.type || this.SUPPORTED_TYPES;\n            if (!$.isArray(types)) {\n                types = types.replace(/s/g, '').split(',');\n            }\n\n            var method,\n                type,\n                isValid = false;\n\n            for (var i = 0; i < types.length; i++) {\n                type    = types[i];\n                method  = '_' + type.toLowerCase();\n                isValid = isValid || this[method](value);\n                if (isValid) {\n                    return true;\n                }\n            }\n\n            return false;\n        },\n\n        _hex: function(value) {\n            return /(^#[0-9A-F]{6}$)|(^#[0-9A-F]{3}$)/i.test(value);\n        },\n\n        _hsl: function(value) {\n            return /^hsl\\((\\s*(-?\\d+)\\s*,)(\\s*(\\b(0?\\d{1,2}|100)\\b%)\\s*,)(\\s*(\\b(0?\\d{1,2}|100)\\b%)\\s*)\\)$/.test(value);\n        },\n\n        _hsla: function(value) {\n            return /^hsla\\((\\s*(-?\\d+)\\s*,)(\\s*(\\b(0?\\d{1,2}|100)\\b%)\\s*,){2}(\\s*(0?(\\.\\d+)?|1(\\.0+)?)\\s*)\\)$/.test(value);\n        },\n\n        _keyword: function(value) {\n            return $.inArray(value, this.KEYWORD_COLORS) >= 0;\n        },\n\n        _rgb: function(value) {\n            var regexInteger = /^rgb\\((\\s*(\\b([01]?\\d{1,2}|2[0-4]\\d|25[0-5])\\b)\\s*,){2}(\\s*(\\b([01]?\\d{1,2}|2[0-4]\\d|25[0-5])\\b)\\s*)\\)$/,\n                regexPercent = /^rgb\\((\\s*(\\b(0?\\d{1,2}|100)\\b%)\\s*,){2}(\\s*(\\b(0?\\d{1,2}|100)\\b%)\\s*)\\)$/;\n            return regexInteger.test(value) || regexPercent.test(value);\n        },\n\n        _rgba: function(value) {\n            var regexInteger = /^rgba\\((\\s*(\\b([01]?\\d{1,2}|2[0-4]\\d|25[0-5])\\b)\\s*,){3}(\\s*(0?(\\.\\d+)?|1(\\.0+)?)\\s*)\\)$/,\n                regexPercent = /^rgba\\((\\s*(\\b(0?\\d{1,2}|100)\\b%)\\s*,){3}(\\s*(0?(\\.\\d+)?|1(\\.0+)?)\\s*)\\)$/;\n            return regexInteger.test(value) || regexPercent.test(value);\n        }\n    };\n}(window.jQuery));\n;(function($) {\n    $.fn.bootstrapValidator.i18n.creditCard = $.extend($.fn.bootstrapValidator.i18n.creditCard || {}, {\n        'default': 'Please enter a valid credit card number'\n    });\n\n    $.fn.bootstrapValidator.validators.creditCard = {\n        /**\n         * Return true if the input value is valid credit card number\n         * Based on https://gist.github.com/DiegoSalazar/4075533\n         *\n         * @param {BootstrapValidator} validator The validator plugin instance\n         * @param {jQuery} $field Field element\n         * @param {Object} [options] Can consist of the following key:\n         * - message: The invalid message\n         * @returns {Boolean}\n         */\n        validate: function(validator, $field, options) {\n            var value = $field.val();\n            if (value === '') {\n                return true;\n            }\n\n            // Accept only digits, dashes or spaces\n            if (/[^0-9-\\s]+/.test(value)) {\n                return false;\n            }\n            value = value.replace(/\\D/g, '');\n\n            if (!$.fn.bootstrapValidator.helpers.luhn(value)) {\n                return false;\n            }\n\n            // Validate the card number based on prefix (IIN ranges) and length\n            var cards = {\n                AMERICAN_EXPRESS: {\n                    length: [15],\n                    prefix: ['34', '37']\n                },\n                DINERS_CLUB: {\n                    length: [14],\n                    prefix: ['300', '301', '302', '303', '304', '305', '36']\n                },\n                DINERS_CLUB_US: {\n                    length: [16],\n                    prefix: ['54', '55']\n                },\n                DISCOVER: {\n                    length: [16],\n                    prefix: ['6011', '622126', '622127', '622128', '622129', '62213',\n                             '62214', '62215', '62216', '62217', '62218', '62219',\n                             '6222', '6223', '6224', '6225', '6226', '6227', '6228',\n                             '62290', '62291', '622920', '622921', '622922', '622923',\n                             '622924', '622925', '644', '645', '646', '647', '648',\n                             '649', '65']\n                },\n                JCB: {\n                    length: [16],\n                    prefix: ['3528', '3529', '353', '354', '355', '356', '357', '358']\n                },\n                LASER: {\n                    length: [16, 17, 18, 19],\n                    prefix: ['6304', '6706', '6771', '6709']\n                },\n                MAESTRO: {\n                    length: [12, 13, 14, 15, 16, 17, 18, 19],\n                    prefix: ['5018', '5020', '5038', '6304', '6759', '6761', '6762', '6763', '6764', '6765', '6766']\n                },\n                MASTERCARD: {\n                    length: [16],\n                    prefix: ['51', '52', '53', '54', '55']\n                },\n                SOLO: {\n                    length: [16, 18, 19],\n                    prefix: ['6334', '6767']\n                },\n                UNIONPAY: {\n                    length: [16, 17, 18, 19],\n                    prefix: ['622126', '622127', '622128', '622129', '62213', '62214',\n                             '62215', '62216', '62217', '62218', '62219', '6222', '6223',\n                             '6224', '6225', '6226', '6227', '6228', '62290', '62291',\n                             '622920', '622921', '622922', '622923', '622924', '622925']\n                },\n                VISA: {\n                    length: [16],\n                    prefix: ['4']\n                }\n            };\n\n            var type, i;\n            for (type in cards) {\n                for (i in cards[type].prefix) {\n                    if (value.substr(0, cards[type].prefix[i].length) === cards[type].prefix[i]     // Check the prefix\n                        && $.inArray(value.length, cards[type].length) !== -1)                      // and length\n                    {\n                        return true;\n                    }\n                }\n            }\n\n            return false;\n        }\n    };\n}(window.jQuery));\n;(function($) {\n    $.fn.bootstrapValidator.i18n.cusip = $.extend($.fn.bootstrapValidator.i18n.cusip || {}, {\n        'default': 'Please enter a valid CUSIP number'\n    });\n\n    $.fn.bootstrapValidator.validators.cusip = {\n        /**\n         * Validate a CUSIP\n         * Examples:\n         * - Valid: 037833100, 931142103, 14149YAR8, 126650BG6\n         * - Invalid: 31430F200, 022615AC2\n         *\n         * @see http://en.wikipedia.org/wiki/CUSIP\n         * @param {BootstrapValidator} validator The validator plugin instance\n         * @param {jQuery} $field Field element\n         * @param {Object} [options] Can consist of the following keys:\n         * - message: The invalid message\n         * @returns {Boolean}\n         */\n        validate: function(validator, $field, options) {\n            var value = $field.val();\n            if (value === '') {\n                return true;\n            }\n\n            value = value.toUpperCase();\n            if (!/^[0-9A-Z]{9}$/.test(value)) {\n                return false;\n            }\n\n            var converted = $.map(value.split(''), function(item) {\n                                var code = item.charCodeAt(0);\n                                return (code >= 'A'.charCodeAt(0) && code <= 'Z'.charCodeAt(0))\n                                            // Replace A, B, C, ..., Z with 10, 11, ..., 35\n                                            ? (code - 'A'.charCodeAt(0) + 10)\n                                            : item;\n                            }),\n                length    = converted.length,\n                sum       = 0;\n            for (var i = 0; i < length - 1; i++) {\n                var num = parseInt(converted[i], 10);\n                if (i % 2 !== 0) {\n                    num *= 2;\n                }\n                if (num > 9) {\n                    num -= 9;\n                }\n                sum += num;\n            }\n\n            sum = (10 - (sum % 10)) % 10;\n            return sum === converted[length - 1];\n        }\n    };\n}(window.jQuery));\n;(function($) {\n    $.fn.bootstrapValidator.i18n.cvv = $.extend($.fn.bootstrapValidator.i18n.cvv || {}, {\n        'default': 'Please enter a valid CVV number'\n    });\n\n    $.fn.bootstrapValidator.validators.cvv = {\n        html5Attributes: {\n            message: 'message',\n            ccfield: 'creditCardField'\n        },\n\n        /**\n         * Return true if the input value is a valid CVV number.\n         *\n         * @param {BootstrapValidator} validator The validator plugin instance\n         * @param {jQuery} $field Field element\n         * @param {Object} options Can consist of the following keys:\n         * - creditCardField: The credit card number field. It can be null\n         * - message: The invalid message\n         * @returns {Boolean}\n         */\n        validate: function(validator, $field, options) {\n            var value = $field.val();\n            if (value === '') {\n                return true;\n            }\n\n            if (!/^[0-9]{3,4}$/.test(value)) {\n                return false;\n            }\n\n            if (!options.creditCardField) {\n                return true;\n            }\n\n            // Get the credit card number\n            var creditCard = validator.getFieldElements(options.creditCardField).val();\n            if (creditCard === '') {\n                return true;\n            }\n            \n            creditCard = creditCard.replace(/\\D/g, '');\n\n            // Supported credit card types\n            var cards = {\n                AMERICAN_EXPRESS: {\n                    length: [15],\n                    prefix: ['34', '37']\n                },\n                DINERS_CLUB: {\n                    length: [14],\n                    prefix: ['300', '301', '302', '303', '304', '305', '36']\n                },\n                DINERS_CLUB_US: {\n                    length: [16],\n                    prefix: ['54', '55']\n                },\n                DISCOVER: {\n                    length: [16],\n                    prefix: ['6011', '622126', '622127', '622128', '622129', '62213',\n                             '62214', '62215', '62216', '62217', '62218', '62219',\n                             '6222', '6223', '6224', '6225', '6226', '6227', '6228',\n                             '62290', '62291', '622920', '622921', '622922', '622923',\n                             '622924', '622925', '644', '645', '646', '647', '648',\n                             '649', '65']\n                },\n                JCB: {\n                    length: [16],\n                    prefix: ['3528', '3529', '353', '354', '355', '356', '357', '358']\n                },\n                LASER: {\n                    length: [16, 17, 18, 19],\n                    prefix: ['6304', '6706', '6771', '6709']\n                },\n                MAESTRO: {\n                    length: [12, 13, 14, 15, 16, 17, 18, 19],\n                    prefix: ['5018', '5020', '5038', '6304', '6759', '6761', '6762', '6763', '6764', '6765', '6766']\n                },\n                MASTERCARD: {\n                    length: [16],\n                    prefix: ['51', '52', '53', '54', '55']\n                },\n                SOLO: {\n                    length: [16, 18, 19],\n                    prefix: ['6334', '6767']\n                },\n                UNIONPAY: {\n                    length: [16, 17, 18, 19],\n                    prefix: ['622126', '622127', '622128', '622129', '62213', '62214',\n                             '62215', '62216', '62217', '62218', '62219', '6222', '6223',\n                             '6224', '6225', '6226', '6227', '6228', '62290', '62291',\n                             '622920', '622921', '622922', '622923', '622924', '622925']\n                },\n                VISA: {\n                    length: [16],\n                    prefix: ['4']\n                }\n            };\n            var type, i, creditCardType = null;\n            for (type in cards) {\n                for (i in cards[type].prefix) {\n                    if (creditCard.substr(0, cards[type].prefix[i].length) === cards[type].prefix[i]    // Check the prefix\n                        && $.inArray(creditCard.length, cards[type].length) !== -1)                     // and length\n                    {\n                        creditCardType = type;\n                        break;\n                    }\n                }\n            }\n\n            return (creditCardType === null)\n                        ? false\n                        : (('AMERICAN_EXPRESS' === creditCardType) ? (value.length === 4) : (value.length === 3));\n        }\n    };\n}(window.jQuery));\n;(function($) {\n    $.fn.bootstrapValidator.i18n.date = $.extend($.fn.bootstrapValidator.i18n.date || {}, {\n        'default': 'Please enter a valid date',\n        min: 'Please enter a date after %s',\n        max: 'Please enter a date before %s',\n        range: 'Please enter a date in the range %s - %s'\n    });\n\n    $.fn.bootstrapValidator.validators.date = {\n        html5Attributes: {\n            message: 'message',\n            format: 'format',\n            min: 'min',\n            max: 'max',\n            separator: 'separator'\n        },\n\n        /**\n         * Return true if the input value is valid date\n         *\n         * @param {BootstrapValidator} validator The validator plugin instance\n         * @param {jQuery} $field Field element\n         * @param {Object} options Can consist of the following keys:\n         * - message: The invalid message\n         * - min: the minimum date\n         * - max: the maximum date\n         * - separator: Use to separate the date, month, and year.\n         * By default, it is /\n         * - format: The date format. Default is MM/DD/YYYY\n         * The format can be:\n         *\n         * i) date: Consist of DD, MM, YYYY parts which are separated by the separator option\n         * ii) date and time:\n         * The time can consist of h, m, s parts which are separated by :\n         * ii) date, time and A (indicating AM or PM)\n         * @returns {Boolean|Object}\n         */\n        validate: function(validator, $field, options) {\n            var value = $field.val();\n            if (value === '') {\n                return true;\n            }\n\n            options.format = options.format || 'MM/DD/YYYY';\n\n            // #683: Force the format to YYYY-MM-DD as the default browser behaviour when using type=\"date\" attribute\n            if ($field.attr('type') === 'date') {\n                options.format = 'YYYY-MM-DD';\n            }\n\n            var formats    = options.format.split(' '),\n                dateFormat = formats[0],\n                timeFormat = (formats.length > 1) ? formats[1] : null,\n                amOrPm     = (formats.length > 2) ? formats[2] : null,\n                sections   = value.split(' '),\n                date       = sections[0],\n                time       = (sections.length > 1) ? sections[1] : null;\n\n            if (formats.length !== sections.length) {\n                return {\n                    valid: false,\n                    message: options.message || $.fn.bootstrapValidator.i18n.date['default']\n                };\n            }\n\n            // Determine the separator\n            var separator = options.separator;\n            if (!separator) {\n                separator = (date.indexOf('/') !== -1) ? '/' : ((date.indexOf('-') !== -1) ? '-' : null);\n            }\n            if (separator === null || date.indexOf(separator) === -1) {\n                return {\n                    valid: false,\n                    message: options.message || $.fn.bootstrapValidator.i18n.date['default']\n                };\n            }\n\n            // Determine the date\n            date       = date.split(separator);\n            dateFormat = dateFormat.split(separator);\n            if (date.length !== dateFormat.length) {\n                return {\n                    valid: false,\n                    message: options.message || $.fn.bootstrapValidator.i18n.date['default']\n                };\n            }\n\n            var year  = date[$.inArray('YYYY', dateFormat)],\n                month = date[$.inArray('MM', dateFormat)],\n                day   = date[$.inArray('DD', dateFormat)];\n\n            if (!year || !month || !day || year.length !== 4) {\n                return {\n                    valid: false,\n                    message: options.message || $.fn.bootstrapValidator.i18n.date['default']\n                };\n            }\n\n            // Determine the time\n            var minutes = null, hours = null, seconds = null;\n            if (timeFormat) {\n                timeFormat = timeFormat.split(':');\n                time       = time.split(':');\n\n                if (timeFormat.length !== time.length) {\n                    return {\n                        valid: false,\n                        message: options.message || $.fn.bootstrapValidator.i18n.date['default']\n                    };\n                }\n\n                hours   = time.length > 0 ? time[0] : null;\n                minutes = time.length > 1 ? time[1] : null;\n                seconds = time.length > 2 ? time[2] : null;\n\n                // Validate seconds\n                if (seconds) {\n                    if (isNaN(seconds) || seconds.length > 2) {\n                        return {\n                            valid: false,\n                            message: options.message || $.fn.bootstrapValidator.i18n.date['default']\n                        };\n                    }\n                    seconds = parseInt(seconds, 10);\n                    if (seconds < 0 || seconds > 60) {\n                        return {\n                            valid: false,\n                            message: options.message || $.fn.bootstrapValidator.i18n.date['default']\n                        };\n                    }\n                }\n\n                // Validate hours\n                if (hours) {\n                    if (isNaN(hours) || hours.length > 2) {\n                        return {\n                            valid: false,\n                            message: options.message || $.fn.bootstrapValidator.i18n.date['default']\n                        };\n                    }\n                    hours = parseInt(hours, 10);\n                    if (hours < 0 || hours >= 24 || (amOrPm && hours > 12)) {\n                        return {\n                            valid: false,\n                            message: options.message || $.fn.bootstrapValidator.i18n.date['default']\n                        };\n                    }\n                }\n\n                // Validate minutes\n                if (minutes) {\n                    if (isNaN(minutes) || minutes.length > 2) {\n                        return {\n                            valid: false,\n                            message: options.message || $.fn.bootstrapValidator.i18n.date['default']\n                        };\n                    }\n                    minutes = parseInt(minutes, 10);\n                    if (minutes < 0 || minutes > 59) {\n                        return {\n                            valid: false,\n                            message: options.message || $.fn.bootstrapValidator.i18n.date['default']\n                        };\n                    }\n                }\n            }\n\n            // Validate day, month, and year\n            var valid   = $.fn.bootstrapValidator.helpers.date(year, month, day),\n                message = options.message || $.fn.bootstrapValidator.i18n.date['default'];\n\n            // declare the date, min and max objects\n            var min       = null,\n                max       = null,\n                minOption = options.min,\n                maxOption = options.max;\n\n            if (minOption) {\n                if (isNaN(Date.parse(minOption))) {\n                    minOption = validator.getDynamicOption($field, minOption);\n                }\n                min = this._parseDate(minOption, dateFormat, separator);\n            }\n\n            if (maxOption) {\n                if (isNaN(Date.parse(maxOption))) {\n                    maxOption = validator.getDynamicOption($field, maxOption);\n                }\n                max = this._parseDate(maxOption, dateFormat, separator);\n            }\n\n            date = new Date(year, month, day, hours, minutes, seconds);\n\n            switch (true) {\n                case (minOption && !maxOption && valid):\n                    valid   = date.getTime() >= min.getTime();\n                    message = options.message || $.fn.bootstrapValidator.helpers.format($.fn.bootstrapValidator.i18n.date.min, minOption);\n                    break;\n\n                case (maxOption && !minOption && valid):\n                    valid   = date.getTime() <= max.getTime();\n                    message = options.message || $.fn.bootstrapValidator.helpers.format($.fn.bootstrapValidator.i18n.date.max, maxOption);\n                    break;\n\n                case (maxOption && minOption && valid):\n                    valid   = date.getTime() <= max.getTime() && date.getTime() >= min.getTime();\n                    message = options.message || $.fn.bootstrapValidator.helpers.format($.fn.bootstrapValidator.i18n.date.range, [minOption, maxOption]);\n                    break;\n\n                default:\n                    break;\n            }\n\n            return {\n                valid: valid,\n                message: message\n            };\n        },\n\n        /**\n         * Return a date object after parsing the date string\n         *\n         * @param {String} date   The date string to parse\n         * @param {String} format The date format\n         * The format can be:\n         *   - date: Consist of DD, MM, YYYY parts which are separated by the separator option\n         *   - date and time:\n         *     The time can consist of h, m, s parts which are separated by :\n         * @param {String} separator The separator used to separate the date, month, and year\n         * @returns {Date}\n         */\n        _parseDate: function(date, format, separator) {\n            var minutes     = 0, hours = 0, seconds = 0,\n                sections    = date.split(' '),\n                dateSection = sections[0],\n                timeSection = (sections.length > 1) ? sections[1] : null;\n\n            dateSection = dateSection.split(separator);\n            var year  = dateSection[$.inArray('YYYY', format)],\n                month = dateSection[$.inArray('MM', format)],\n                day   = dateSection[$.inArray('DD', format)];\n            if (timeSection) {\n                timeSection = timeSection.split(':');\n                hours       = timeSection.length > 0 ? timeSection[0] : null;\n                minutes     = timeSection.length > 1 ? timeSection[1] : null;\n                seconds     = timeSection.length > 2 ? timeSection[2] : null;\n            }\n\n            return new Date(year, month, day, hours, minutes, seconds);\n        }\n    };\n}(window.jQuery));\n;(function($) {\n    $.fn.bootstrapValidator.i18n.different = $.extend($.fn.bootstrapValidator.i18n.different || {}, {\n        'default': 'Please enter a different value'\n    });\n\n    $.fn.bootstrapValidator.validators.different = {\n        html5Attributes: {\n            message: 'message',\n            field: 'field'\n        },\n\n        /**\n         * Return true if the input value is different with given field's value\n         *\n         * @param {BootstrapValidator} validator The validator plugin instance\n         * @param {jQuery} $field Field element\n         * @param {Object} options Consists of the following key:\n         * - field: The name of field that will be used to compare with current one\n         * - message: The invalid message\n         * @returns {Boolean}\n         */\n        validate: function(validator, $field, options) {\n            var value = $field.val();\n            if (value === '') {\n                return true;\n            }\n\n            var fields  = options.field.split(','),\n                isValid = true;\n\n            for (var i = 0; i < fields.length; i++) {\n                var compareWith = validator.getFieldElements(fields[i]);\n                if (compareWith == null || compareWith.length === 0) {\n                    continue;\n                }\n\n                var compareValue = compareWith.val();\n                if (value === compareValue) {\n                    isValid = false;\n                } else if (compareValue !== '') {\n                    validator.updateStatus(compareWith, validator.STATUS_VALID, 'different');\n                }\n            }\n\n            return isValid;\n        }\n    };\n}(window.jQuery));\n;(function($) {\n    $.fn.bootstrapValidator.i18n.digits = $.extend($.fn.bootstrapValidator.i18n.digits || {}, {\n        'default': 'Please enter only digits'\n    });\n\n    $.fn.bootstrapValidator.validators.digits = {\n        /**\n         * Return true if the input value contains digits only\n         *\n         * @param {BootstrapValidator} validator Validate plugin instance\n         * @param {jQuery} $field Field element\n         * @param {Object} [options]\n         * @returns {Boolean}\n         */\n        validate: function(validator, $field, options) {\n            var value = $field.val();\n            if (value === '') {\n                return true;\n            }\n\n            return /^\\d+$/.test(value);\n        }\n    };\n}(window.jQuery));\n;(function($) {\n    $.fn.bootstrapValidator.i18n.ean = $.extend($.fn.bootstrapValidator.i18n.ean || {}, {\n        'default': 'Please enter a valid EAN number'\n    });\n\n    $.fn.bootstrapValidator.validators.ean = {\n        /**\n         * Validate EAN (International Article Number)\n         * Examples:\n         * - Valid: 73513537, 9780471117094, 4006381333931\n         * - Invalid: 73513536\n         *\n         * @see http://en.wikipedia.org/wiki/European_Article_Number\n         * @param {BootstrapValidator} validator The validator plugin instance\n         * @param {jQuery} $field Field element\n         * @param {Object} options Can consist of the following keys:\n         * - message: The invalid message\n         * @returns {Boolean}\n         */\n        validate: function(validator, $field, options) {\n            var value = $field.val();\n            if (value === '') {\n                return true;\n            }\n\n            if (!/^(\\d{8}|\\d{12}|\\d{13})$/.test(value)) {\n                return false;\n            }\n\n            var length = value.length,\n                sum    = 0,\n                weight = (length === 8) ? [3, 1] : [1, 3];\n            for (var i = 0; i < length - 1; i++) {\n                sum += parseInt(value.charAt(i), 10) * weight[i % 2];\n            }\n            sum = (10 - sum % 10) % 10;\n            return (sum + '' === value.charAt(length - 1));\n        }\n    };\n}(window.jQuery));\n;(function($) {\n    $.fn.bootstrapValidator.i18n.emailAddress = $.extend($.fn.bootstrapValidator.i18n.emailAddress || {}, {\n        'default': 'Please enter a valid email address'\n    });\n\n    $.fn.bootstrapValidator.validators.emailAddress = {\n        html5Attributes: {\n            message: 'message',\n            multiple: 'multiple',\n            separator: 'separator'\n        },\n\n        enableByHtml5: function($field) {\n            return ('email' === $field.attr('type'));\n        },\n\n        /**\n         * Return true if and only if the input value is a valid email address\n         *\n         * @param {BootstrapValidator} validator Validate plugin instance\n         * @param {jQuery} $field Field element\n         * @param {Object} [options]\n         * - multiple: Allow multiple email addresses, separated by a comma or semicolon; default is false.\n         * - separator: Regex for character or characters expected as separator between addresses; default is comma /[,;]/, i.e. comma or semicolon.\n         * @returns {Boolean}\n         */\n        validate: function(validator, $field, options) {\n            var value = $field.val();\n            if (value === '') {\n                return true;\n            }\n\n            // Email address regular expression\n            // http://stackoverflow.com/questions/46155/validate-email-address-in-javascript\n            var emailRegExp   = /^(([^<>()[\\]\\\\.,;:\\s@\\\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\\\"]+)*)|(\\\".+\\\"))@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/,\n                allowMultiple = options.multiple === true || options.multiple === 'true';\n\n            if (allowMultiple) {\n                var separator = options.separator || /[,;]/,\n                    addresses = this._splitEmailAddresses(value, separator);\n\n                for (var i = 0; i < addresses.length; i++) {\n                    if (!emailRegExp.test(addresses[i])) {\n                        return false;\n                    }\n                }\n\n                return true;\n            } else {\n                return emailRegExp.test(value);\n            }\n        },\n\n        _splitEmailAddresses: function(emailAddresses, separator) {\n            var quotedFragments     = emailAddresses.split(/\"/),\n                quotedFragmentCount = quotedFragments.length,\n                emailAddressArray   = [],\n                nextEmailAddress    = '';\n\n            for (var i = 0; i < quotedFragmentCount; i++) {\n                if (i % 2 === 0) {\n                    var splitEmailAddressFragments     = quotedFragments[i].split(separator),\n                        splitEmailAddressFragmentCount = splitEmailAddressFragments.length;\n\n                    if (splitEmailAddressFragmentCount === 1) {\n                        nextEmailAddress += splitEmailAddressFragments[0];\n                    } else {\n                        emailAddressArray.push(nextEmailAddress + splitEmailAddressFragments[0]);\n\n                        for (var j = 1; j < splitEmailAddressFragmentCount - 1; j++) {\n                            emailAddressArray.push(splitEmailAddressFragments[j]);\n                        }\n                        nextEmailAddress = splitEmailAddressFragments[splitEmailAddressFragmentCount - 1];\n                    }\n                } else {\n                    nextEmailAddress += '\"' + quotedFragments[i];\n                    if (i < quotedFragmentCount - 1) {\n                        nextEmailAddress += '\"';\n                    }\n                }\n            }\n\n            emailAddressArray.push(nextEmailAddress);\n            return emailAddressArray;\n        }\n    };\n}(window.jQuery));\n;(function($) {\n    $.fn.bootstrapValidator.i18n.file = $.extend($.fn.bootstrapValidator.i18n.file || {}, {\n        'default': 'Please choose a valid file'\n    });\n\n    $.fn.bootstrapValidator.validators.file = {\n        html5Attributes: {\n            extension: 'extension',\n            maxfiles: 'maxFiles',\n            minfiles: 'minFiles',\n            maxsize: 'maxSize',\n            minsize: 'minSize',\n            maxtotalsize: 'maxTotalSize',\n            mintotalsize: 'minTotalSize',\n            message: 'message',\n            type: 'type'\n        },\n\n        /**\n         * Validate upload file. Use HTML 5 API if the browser supports\n         *\n         * @param {BootstrapValidator} validator The validator plugin instance\n         * @param {jQuery} $field Field element\n         * @param {Object} options Can consist of the following keys:\n         * - extension: The allowed extensions, separated by a comma\n         * - maxFiles: The maximum number of files\n         * - minFiles: The minimum number of files\n         * - maxSize: The maximum size in bytes\n         * - minSize: The minimum size in bytes\n         * - maxTotalSize: The maximum size in bytes for all files\n         * - minTotalSize: The minimum size in bytes for all files\n         * - message: The invalid message\n         * - type: The allowed MIME type, separated by a comma\n         * @returns {Boolean}\n         */\n        validate: function(validator, $field, options) {\n            var value = $field.val();\n            if (value === '') {\n                return true;\n            }\n\n            var ext,\n                extensions = options.extension ? options.extension.toLowerCase().split(',') : null,\n                types      = options.type      ? options.type.toLowerCase().split(',')      : null,\n                html5      = (window.File && window.FileList && window.FileReader);\n\n            if (html5) {\n                // Get FileList instance\n                var files     = $field.get(0).files,\n                    total     = files.length,\n                    totalSize = 0;\n\n                if ((options.maxFiles && total > parseInt(options.maxFiles, 10))        // Check the maxFiles\n                    || (options.minFiles && total < parseInt(options.minFiles, 10)))    // Check the minFiles\n                {\n                    return false;\n                }\n\n                for (var i = 0; i < total; i++) {\n                    totalSize += files[i].size;\n                    ext        = files[i].name.substr(files[i].name.lastIndexOf('.') + 1);\n\n                    if ((options.minSize && files[i].size < parseInt(options.minSize, 10))                      // Check the minSize\n                        || (options.maxSize && files[i].size > parseInt(options.maxSize, 10))                   // Check the maxSize\n                        || (extensions && $.inArray(ext.toLowerCase(), extensions) === -1)                      // Check file extension\n                        || (files[i].type && types && $.inArray(files[i].type.toLowerCase(), types) === -1))    // Check file type\n                    {\n                        return false;\n                    }\n                }\n\n                if ((options.maxTotalSize && totalSize > parseInt(options.maxTotalSize, 10))        // Check the maxTotalSize\n                    || (options.minTotalSize && totalSize < parseInt(options.minTotalSize, 10)))    // Check the minTotalSize\n                {\n                    return false;\n                }\n            } else {\n                // Check file extension\n                ext = value.substr(value.lastIndexOf('.') + 1);\n                if (extensions && $.inArray(ext.toLowerCase(), extensions) === -1) {\n                    return false;\n                }\n            }\n\n            return true;\n        }\n    };\n}(window.jQuery));\n;(function($) {\n    $.fn.bootstrapValidator.i18n.greaterThan = $.extend($.fn.bootstrapValidator.i18n.greaterThan || {}, {\n        'default': 'Please enter a value greater than or equal to %s',\n        notInclusive: 'Please enter a value greater than %s'\n    });\n\n    $.fn.bootstrapValidator.validators.greaterThan = {\n        html5Attributes: {\n            message: 'message',\n            value: 'value',\n            inclusive: 'inclusive'\n        },\n\n        enableByHtml5: function($field) {\n            var type = $field.attr('type'),\n                min  = $field.attr('min');\n            if (min && type !== 'date') {\n                return {\n                    value: min\n                };\n            }\n\n            return false;\n        },\n\n        /**\n         * Return true if the input value is greater than or equals to given number\n         *\n         * @param {BootstrapValidator} validator Validate plugin instance\n         * @param {jQuery} $field Field element\n         * @param {Object} options Can consist of the following keys:\n         * - value: Define the number to compare with. It can be\n         *      - A number\n         *      - Name of field which its value defines the number\n         *      - Name of callback function that returns the number\n         *      - A callback function that returns the number\n         *\n         * - inclusive [optional]: Can be true or false. Default is true\n         * - message: The invalid message\n         * @returns {Boolean|Object}\n         */\n        validate: function(validator, $field, options) {\n            var value = $field.val();\n            if (value === '') {\n                return true;\n            }\n            \n            value = this._format(value);\n            if (!$.isNumeric(value)) {\n                return false;\n            }\n\n            var compareTo      = $.isNumeric(options.value) ? options.value : validator.getDynamicOption($field, options.value),\n                compareToValue = this._format(compareTo);\n\n            value = parseFloat(value);\n\t\t\treturn (options.inclusive === true || options.inclusive === undefined)\n                    ? {\n                        valid: value >= compareToValue,\n                        message: $.fn.bootstrapValidator.helpers.format(options.message || $.fn.bootstrapValidator.i18n.greaterThan['default'], compareTo)\n                    }\n                    : {\n                        valid: value > compareToValue,\n                        message: $.fn.bootstrapValidator.helpers.format(options.message || $.fn.bootstrapValidator.i18n.greaterThan.notInclusive, compareTo)\n                    };\n        },\n\n        _format: function(value) {\n            return (value + '').replace(',', '.');\n        }\n    };\n}(window.jQuery));\n;(function($) {\n    $.fn.bootstrapValidator.i18n.grid = $.extend($.fn.bootstrapValidator.i18n.grid || {}, {\n        'default': 'Please enter a valid GRId number'\n    });\n\n    $.fn.bootstrapValidator.validators.grid = {\n        /**\n         * Validate GRId (Global Release Identifier)\n         * Examples:\n         * - Valid: A12425GABC1234002M, A1-2425G-ABC1234002-M, A1 2425G ABC1234002 M, Grid:A1-2425G-ABC1234002-M\n         * - Invalid: A1-2425G-ABC1234002-Q\n         *\n         * @see http://en.wikipedia.org/wiki/Global_Release_Identifier\n         * @param {BootstrapValidator} validator The validator plugin instance\n         * @param {jQuery} $field Field element\n         * @param {Object} options Can consist of the following keys:\n         * - message: The invalid message\n         * @returns {Boolean}\n         */\n        validate: function(validator, $field, options) {\n            var value = $field.val();\n            if (value === '') {\n                return true;\n            }\n\n            value = value.toUpperCase();\n            if (!/^[GRID:]*([0-9A-Z]{2})[-\\s]*([0-9A-Z]{5})[-\\s]*([0-9A-Z]{10})[-\\s]*([0-9A-Z]{1})$/g.test(value)) {\n                return false;\n            }\n            value = value.replace(/\\s/g, '').replace(/-/g, '');\n            if ('GRID:' === value.substr(0, 5)) {\n                value = value.substr(5);\n            }\n            return $.fn.bootstrapValidator.helpers.mod37And36(value);\n        }\n    };\n}(window.jQuery));\n;(function($) {\n    $.fn.bootstrapValidator.i18n.hex = $.extend($.fn.bootstrapValidator.i18n.hex || {}, {\n        'default': 'Please enter a valid hexadecimal number'\n    });\n\n    $.fn.bootstrapValidator.validators.hex = {\n        /**\n         * Return true if and only if the input value is a valid hexadecimal number\n         *\n         * @param {BootstrapValidator} validator The validator plugin instance\n         * @param {jQuery} $field Field element\n         * @param {Object} options Consist of key:\n         * - message: The invalid message\n         * @returns {Boolean}\n         */\n        validate: function(validator, $field, options) {\n            var value = $field.val();\n            if (value === '') {\n                return true;\n            }\n\n            return /^[0-9a-fA-F]+$/.test(value);\n        }\n    };\n}(window.jQuery));\n;(function($) {\n    $.fn.bootstrapValidator.i18n.hexColor = $.extend($.fn.bootstrapValidator.i18n.hexColor || {}, {\n        'default': 'Please enter a valid hex color'\n    });\n\n    $.fn.bootstrapValidator.validators.hexColor = {\n        enableByHtml5: function($field) {\n            return ('color' === $field.attr('type'));\n        },\n\n        /**\n         * Return true if the input value is a valid hex color\n         *\n         * @param {BootstrapValidator} validator The validator plugin instance\n         * @param {jQuery} $field Field element\n         * @param {Object} options Can consist of the following keys:\n         * - message: The invalid message\n         * @returns {Boolean}\n         */\n        validate: function(validator, $field, options) {\n            var value = $field.val();\n            if (value === '') {\n                return true;\n            }\n\n            return ('color' === $field.attr('type'))\n                        // Only accept 6 hex character values due to the HTML 5 spec\n                        // See http://www.w3.org/TR/html-markup/input.color.html#input.color.attrs.value\n                        ? /^#[0-9A-F]{6}$/i.test(value)\n                        : /(^#[0-9A-F]{6}$)|(^#[0-9A-F]{3}$)/i.test(value);\n        }\n    };\n}(window.jQuery));\n;(function($) {\n    $.fn.bootstrapValidator.i18n.iban = $.extend($.fn.bootstrapValidator.i18n.iban || {}, {\n        'default': 'Please enter a valid IBAN number',\n        countryNotSupported: 'The country code %s is not supported',\n        country: 'Please enter a valid IBAN number in %s',\n        countries: {\n            AD: 'Andorra',\n            AE: 'United Arab Emirates',\n            AL: 'Albania',\n            AO: 'Angola',\n            AT: 'Austria',\n            AZ: 'Azerbaijan',\n            BA: 'Bosnia and Herzegovina',\n            BE: 'Belgium',\n            BF: 'Burkina Faso',\n            BG: 'Bulgaria',\n            BH: 'Bahrain',\n            BI: 'Burundi',\n            BJ: 'Benin',\n            BR: 'Brazil',\n            CH: 'Switzerland',\n            CI: 'Ivory Coast',\n            CM: 'Cameroon',\n            CR: 'Costa Rica',\n            CV: 'Cape Verde',\n            CY: 'Cyprus',\n            CZ: 'Czech Republic',\n            DE: 'Germany',\n            DK: 'Denmark',\n            DO: 'Dominican Republic',\n            DZ: 'Algeria',\n            EE: 'Estonia',\n            ES: 'Spain',\n            FI: 'Finland',\n            FO: 'Faroe Islands',\n            FR: 'France',\n            GB: 'United Kingdom',\n            GE: 'Georgia',\n            GI: 'Gibraltar',\n            GL: 'Greenland',\n            GR: 'Greece',\n            GT: 'Guatemala',\n            HR: 'Croatia',\n            HU: 'Hungary',\n            IE: 'Ireland',\n            IL: 'Israel',\n            IR: 'Iran',\n            IS: 'Iceland',\n            IT: 'Italy',\n            JO: 'Jordan',\n            KW: 'Kuwait',\n            KZ: 'Kazakhstan',\n            LB: 'Lebanon',\n            LI: 'Liechtenstein',\n            LT: 'Lithuania',\n            LU: 'Luxembourg',\n            LV: 'Latvia',\n            MC: 'Monaco',\n            MD: 'Moldova',\n            ME: 'Montenegro',\n            MG: 'Madagascar',\n            MK: 'Macedonia',\n            ML: 'Mali',\n            MR: 'Mauritania',\n            MT: 'Malta',\n            MU: 'Mauritius',\n            MZ: 'Mozambique',\n            NL: 'Netherlands',\n            NO: 'Norway',\n            PK: 'Pakistan',\n            PL: 'Poland',\n            PS: 'Palestine',\n            PT: 'Portugal',\n            QA: 'Qatar',\n            RO: 'Romania',\n            RS: 'Serbia',\n            SA: 'Saudi Arabia',\n            SE: 'Sweden',\n            SI: 'Slovenia',\n            SK: 'Slovakia',\n            SM: 'San Marino',\n            SN: 'Senegal',\n            TN: 'Tunisia',\n            TR: 'Turkey',\n            VG: 'Virgin Islands, British'\n        }\n    });\n\n    $.fn.bootstrapValidator.validators.iban = {\n        html5Attributes: {\n            message: 'message',\n            country: 'country'\n        },\n\n        // http://www.swift.com/dsp/resources/documents/IBAN_Registry.pdf\n        // http://en.wikipedia.org/wiki/International_Bank_Account_Number#IBAN_formats_by_country\n        REGEX: {\n            AD: 'AD[0-9]{2}[0-9]{4}[0-9]{4}[A-Z0-9]{12}',                       // Andorra\n            AE: 'AE[0-9]{2}[0-9]{3}[0-9]{16}',                                  // United Arab Emirates\n            AL: 'AL[0-9]{2}[0-9]{8}[A-Z0-9]{16}',                               // Albania\n            AO: 'AO[0-9]{2}[0-9]{21}',                                          // Angola\n            AT: 'AT[0-9]{2}[0-9]{5}[0-9]{11}',                                  // Austria\n            AZ: 'AZ[0-9]{2}[A-Z]{4}[A-Z0-9]{20}',                               // Azerbaijan\n            BA: 'BA[0-9]{2}[0-9]{3}[0-9]{3}[0-9]{8}[0-9]{2}',                   // Bosnia and Herzegovina\n            BE: 'BE[0-9]{2}[0-9]{3}[0-9]{7}[0-9]{2}',                           // Belgium\n            BF: 'BF[0-9]{2}[0-9]{23}',                                          // Burkina Faso\n            BG: 'BG[0-9]{2}[A-Z]{4}[0-9]{4}[0-9]{2}[A-Z0-9]{8}',                // Bulgaria\n            BH: 'BH[0-9]{2}[A-Z]{4}[A-Z0-9]{14}',                               // Bahrain\n            BI: 'BI[0-9]{2}[0-9]{12}',                                          // Burundi\n            BJ: 'BJ[0-9]{2}[A-Z]{1}[0-9]{23}',                                  // Benin\n            BR: 'BR[0-9]{2}[0-9]{8}[0-9]{5}[0-9]{10}[A-Z][A-Z0-9]',             // Brazil\n            CH: 'CH[0-9]{2}[0-9]{5}[A-Z0-9]{12}',                               // Switzerland\n            CI: 'CI[0-9]{2}[A-Z]{1}[0-9]{23}',                                  // Ivory Coast\n            CM: 'CM[0-9]{2}[0-9]{23}',                                          // Cameroon\n            CR: 'CR[0-9]{2}[0-9]{3}[0-9]{14}',                                  // Costa Rica\n            CV: 'CV[0-9]{2}[0-9]{21}',                                          // Cape Verde\n            CY: 'CY[0-9]{2}[0-9]{3}[0-9]{5}[A-Z0-9]{16}',                       // Cyprus\n            CZ: 'CZ[0-9]{2}[0-9]{20}',                                          // Czech Republic\n            DE: 'DE[0-9]{2}[0-9]{8}[0-9]{10}',                                  // Germany\n            DK: 'DK[0-9]{2}[0-9]{14}',                                          // Denmark\n            DO: 'DO[0-9]{2}[A-Z0-9]{4}[0-9]{20}',                               // Dominican Republic\n            DZ: 'DZ[0-9]{2}[0-9]{20}',                                          // Algeria\n            EE: 'EE[0-9]{2}[0-9]{2}[0-9]{2}[0-9]{11}[0-9]{1}',                  // Estonia\n            ES: 'ES[0-9]{2}[0-9]{4}[0-9]{4}[0-9]{1}[0-9]{1}[0-9]{10}',          // Spain\n            FI: 'FI[0-9]{2}[0-9]{6}[0-9]{7}[0-9]{1}',                           // Finland\n            FO: 'FO[0-9]{2}[0-9]{4}[0-9]{9}[0-9]{1}',                           // Faroe Islands\n            FR: 'FR[0-9]{2}[0-9]{5}[0-9]{5}[A-Z0-9]{11}[0-9]{2}',               // France\n            GB: 'GB[0-9]{2}[A-Z]{4}[0-9]{6}[0-9]{8}',                           // United Kingdom\n            GE: 'GE[0-9]{2}[A-Z]{2}[0-9]{16}',                                  // Georgia\n            GI: 'GI[0-9]{2}[A-Z]{4}[A-Z0-9]{15}',                               // Gibraltar\n            GL: 'GL[0-9]{2}[0-9]{4}[0-9]{9}[0-9]{1}',                           // Greenland\n            GR: 'GR[0-9]{2}[0-9]{3}[0-9]{4}[A-Z0-9]{16}',                       // Greece\n            GT: 'GT[0-9]{2}[A-Z0-9]{4}[A-Z0-9]{20}',                            // Guatemala\n            HR: 'HR[0-9]{2}[0-9]{7}[0-9]{10}',                                  // Croatia\n            HU: 'HU[0-9]{2}[0-9]{3}[0-9]{4}[0-9]{1}[0-9]{15}[0-9]{1}',          // Hungary\n            IE: 'IE[0-9]{2}[A-Z]{4}[0-9]{6}[0-9]{8}',                           // Ireland\n            IL: 'IL[0-9]{2}[0-9]{3}[0-9]{3}[0-9]{13}',                          // Israel\n            IR: 'IR[0-9]{2}[0-9]{22}',                                          // Iran\n            IS: 'IS[0-9]{2}[0-9]{4}[0-9]{2}[0-9]{6}[0-9]{10}',                  // Iceland\n            IT: 'IT[0-9]{2}[A-Z]{1}[0-9]{5}[0-9]{5}[A-Z0-9]{12}',               // Italy\n            JO: 'JO[0-9]{2}[A-Z]{4}[0-9]{4}[0]{8}[A-Z0-9]{10}',                 // Jordan\n            KW: 'KW[0-9]{2}[A-Z]{4}[0-9]{22}',                                  // Kuwait\n            KZ: 'KZ[0-9]{2}[0-9]{3}[A-Z0-9]{13}',                               // Kazakhstan\n            LB: 'LB[0-9]{2}[0-9]{4}[A-Z0-9]{20}',                               // Lebanon\n            LI: 'LI[0-9]{2}[0-9]{5}[A-Z0-9]{12}',                               // Liechtenstein\n            LT: 'LT[0-9]{2}[0-9]{5}[0-9]{11}',                                  // Lithuania\n            LU: 'LU[0-9]{2}[0-9]{3}[A-Z0-9]{13}',                               // Luxembourg\n            LV: 'LV[0-9]{2}[A-Z]{4}[A-Z0-9]{13}',                               // Latvia\n            MC: 'MC[0-9]{2}[0-9]{5}[0-9]{5}[A-Z0-9]{11}[0-9]{2}',               // Monaco\n            MD: 'MD[0-9]{2}[A-Z0-9]{20}',                                       // Moldova\n            ME: 'ME[0-9]{2}[0-9]{3}[0-9]{13}[0-9]{2}',                          // Montenegro\n            MG: 'MG[0-9]{2}[0-9]{23}',                                          // Madagascar\n            MK: 'MK[0-9]{2}[0-9]{3}[A-Z0-9]{10}[0-9]{2}',                       // Macedonia\n            ML: 'ML[0-9]{2}[A-Z]{1}[0-9]{23}',                                  // Mali\n            MR: 'MR13[0-9]{5}[0-9]{5}[0-9]{11}[0-9]{2}',                        // Mauritania\n            MT: 'MT[0-9]{2}[A-Z]{4}[0-9]{5}[A-Z0-9]{18}',                       // Malta\n            MU: 'MU[0-9]{2}[A-Z]{4}[0-9]{2}[0-9]{2}[0-9]{12}[0-9]{3}[A-Z]{3}',  // Mauritius\n            MZ: 'MZ[0-9]{2}[0-9]{21}',                                          // Mozambique\n            NL: 'NL[0-9]{2}[A-Z]{4}[0-9]{10}',                                  // Netherlands\n            NO: 'NO[0-9]{2}[0-9]{4}[0-9]{6}[0-9]{1}',                           // Norway\n            PK: 'PK[0-9]{2}[A-Z]{4}[A-Z0-9]{16}',                               // Pakistan\n            PL: 'PL[0-9]{2}[0-9]{8}[0-9]{16}',                                  // Poland\n            PS: 'PS[0-9]{2}[A-Z]{4}[A-Z0-9]{21}',                               // Palestinian\n            PT: 'PT[0-9]{2}[0-9]{4}[0-9]{4}[0-9]{11}[0-9]{2}',                  // Portugal\n            QA: 'QA[0-9]{2}[A-Z]{4}[A-Z0-9]{21}',                               // Qatar\n            RO: 'RO[0-9]{2}[A-Z]{4}[A-Z0-9]{16}',                               // Romania\n            RS: 'RS[0-9]{2}[0-9]{3}[0-9]{13}[0-9]{2}',                          // Serbia\n            SA: 'SA[0-9]{2}[0-9]{2}[A-Z0-9]{18}',                               // Saudi Arabia\n            SE: 'SE[0-9]{2}[0-9]{3}[0-9]{16}[0-9]{1}',                          // Sweden\n            SI: 'SI[0-9]{2}[0-9]{5}[0-9]{8}[0-9]{2}',                           // Slovenia\n            SK: 'SK[0-9]{2}[0-9]{4}[0-9]{6}[0-9]{10}',                          // Slovakia\n            SM: 'SM[0-9]{2}[A-Z]{1}[0-9]{5}[0-9]{5}[A-Z0-9]{12}',               // San Marino\n            SN: 'SN[0-9]{2}[A-Z]{1}[0-9]{23}',                                  // Senegal\n            TN: 'TN59[0-9]{2}[0-9]{3}[0-9]{13}[0-9]{2}',                        // Tunisia\n            TR: 'TR[0-9]{2}[0-9]{5}[A-Z0-9]{1}[A-Z0-9]{16}',                    // Turkey\n            VG: 'VG[0-9]{2}[A-Z]{4}[0-9]{16}'                                   // Virgin Islands, British\n        },\n\n        /**\n         * Validate an International Bank Account Number (IBAN)\n         * To test it, take the sample IBAN from\n         * http://www.nordea.com/Our+services/International+products+and+services/Cash+Management/IBAN+countries/908462.html\n         *\n         * @param {BootstrapValidator} validator The validator plugin instance\n         * @param {jQuery} $field Field element\n         * @param {Object} options Can consist of the following keys:\n         * - message: The invalid message\n         * - country: The ISO 3166-1 country code. It can be\n         *      - A country code\n         *      - Name of field which its value defines the country code\n         *      - Name of callback function that returns the country code\n         *      - A callback function that returns the country code\n         * @returns {Boolean|Object}\n         */\n        validate: function(validator, $field, options) {\n            var value = $field.val();\n            if (value === '') {\n                return true;\n            }\n\n            value = value.replace(/[^a-zA-Z0-9]/g, '').toUpperCase();\n            var country = options.country;\n            if (!country) {\n                country = value.substr(0, 2);\n            } else if (typeof country !== 'string' || !this.REGEX[country]) {\n                // Determine the country code\n                country = validator.getDynamicOption($field, country);\n            }\n\n            if (!this.REGEX[country]) {\n                return {\n                    valid: false,\n                    message: $.fn.bootstrapValidator.helpers.format($.fn.bootstrapValidator.i18n.iban.countryNotSupported, country)\n                };\n            }\n\n            if (!(new RegExp('^' + this.REGEX[country] + '$')).test(value)) {\n                return {\n                    valid: false,\n                    message: $.fn.bootstrapValidator.helpers.format(options.message || $.fn.bootstrapValidator.i18n.iban.country, $.fn.bootstrapValidator.i18n.iban.countries[country])\n                };\n            }\n\n            value = value.substr(4) + value.substr(0, 4);\n            value = $.map(value.split(''), function(n) {\n                var code = n.charCodeAt(0);\n                return (code >= 'A'.charCodeAt(0) && code <= 'Z'.charCodeAt(0))\n                        // Replace A, B, C, ..., Z with 10, 11, ..., 35\n                        ? (code - 'A'.charCodeAt(0) + 10)\n                        : n;\n            });\n            value = value.join('');\n\n            var temp   = parseInt(value.substr(0, 1), 10),\n                length = value.length;\n            for (var i = 1; i < length; ++i) {\n                temp = (temp * 10 + parseInt(value.substr(i, 1), 10)) % 97;\n            }\n\n            return {\n                valid: (temp === 1),\n                message: $.fn.bootstrapValidator.helpers.format(options.message || $.fn.bootstrapValidator.i18n.iban.country, $.fn.bootstrapValidator.i18n.iban.countries[country])\n            };\n        }\n    };\n}(window.jQuery));\n;(function($) {\n    $.fn.bootstrapValidator.i18n.id = $.extend($.fn.bootstrapValidator.i18n.id || {}, {\n        'default': 'Please enter a valid identification number',\n        countryNotSupported: 'The country code %s is not supported',\n        country: 'Please enter a valid identification number in %s',\n        countries: {\n            BA: 'Bosnia and Herzegovina',\n            BG: 'Bulgaria',\n            BR: 'Brazil',\n            CH: 'Switzerland',\n            CL: 'Chile',\n            CN: 'China',\n            CZ: 'Czech Republic',\n            DK: 'Denmark',\n            EE: 'Estonia',\n            ES: 'Spain',\n            FI: 'Finland',\n            HR: 'Croatia',\n            IE: 'Ireland',\n            IS: 'Iceland',\n            LT: 'Lithuania',\n            LV: 'Latvia',\n            ME: 'Montenegro',\n            MK: 'Macedonia',\n            NL: 'Netherlands',\n            RO: 'Romania',\n            RS: 'Serbia',\n            SE: 'Sweden',\n            SI: 'Slovenia',\n            SK: 'Slovakia',\n            SM: 'San Marino',\n            TH: 'Thailand',\n            ZA: 'South Africa'\n        }\n    });\n\n    $.fn.bootstrapValidator.validators.id = {\n        html5Attributes: {\n            message: 'message',\n            country: 'country'\n        },\n\n        // Supported country codes\n        COUNTRY_CODES: [\n            'BA', 'BG', 'BR', 'CH', 'CL', 'CN', 'CZ', 'DK', 'EE', 'ES', 'FI', 'HR', 'IE', 'IS', 'LT', 'LV', 'ME', 'MK', 'NL',\n            'RO', 'RS', 'SE', 'SI', 'SK', 'SM', 'TH', 'ZA'\n        ],\n\n        /**\n         * Validate identification number in different countries\n         *\n         * @see http://en.wikipedia.org/wiki/National_identification_number\n         * @param {BootstrapValidator} validator The validator plugin instance\n         * @param {jQuery} $field Field element\n         * @param {Object} options Consist of key:\n         * - message: The invalid message\n         * - country: The ISO 3166-1 country code. It can be\n         *      - One of country code defined in COUNTRY_CODES\n         *      - Name of field which its value defines the country code\n         *      - Name of callback function that returns the country code\n         *      - A callback function that returns the country code\n         * @returns {Boolean|Object}\n         */\n        validate: function(validator, $field, options) {\n            var value = $field.val();\n            if (value === '') {\n                return true;\n            }\n\n            var country = options.country;\n            if (!country) {\n                country = value.substr(0, 2);\n            } else if (typeof country !== 'string' || $.inArray(country.toUpperCase(), this.COUNTRY_CODES) === -1) {\n                // Determine the country code\n                country = validator.getDynamicOption($field, country);\n            }\n\n            if ($.inArray(country, this.COUNTRY_CODES) === -1) {\n                return { valid: false, message: $.fn.bootstrapValidator.helpers.format($.fn.bootstrapValidator.i18n.id.countryNotSupported, country) };\n            }\n\n            var method  = ['_', country.toLowerCase()].join('');\n            return this[method](value)\n                    ? true\n                    : {\n                        valid: false,\n                        message: $.fn.bootstrapValidator.helpers.format(options.message || $.fn.bootstrapValidator.i18n.id.country, $.fn.bootstrapValidator.i18n.id.countries[country.toUpperCase()])\n                    };\n        },\n\n        /**\n         * Validate Unique Master Citizen Number which uses in\n         * - Bosnia and Herzegovina (country code: BA)\n         * - Macedonia (MK)\n         * - Montenegro (ME)\n         * - Serbia (RS)\n         * - Slovenia (SI)\n         *\n         * @see http://en.wikipedia.org/wiki/Unique_Master_Citizen_Number\n         * @param {String} value The ID\n         * @param {String} countryCode The ISO country code, can be BA, MK, ME, RS, SI\n         * @returns {Boolean}\n         */\n        _validateJMBG: function(value, countryCode) {\n            if (!/^\\d{13}$/.test(value)) {\n                return false;\n            }\n            var day   = parseInt(value.substr(0, 2), 10),\n                month = parseInt(value.substr(2, 2), 10),\n                year  = parseInt(value.substr(4, 3), 10),\n                rr    = parseInt(value.substr(7, 2), 10),\n                k     = parseInt(value.substr(12, 1), 10);\n\n            // Validate date of birth\n            // FIXME: Validate the year of birth\n            if (day > 31 || month > 12) {\n                return false;\n            }\n\n            // Validate checksum\n            var sum = 0;\n            for (var i = 0; i < 6; i++) {\n                sum += (7 - i) * (parseInt(value.charAt(i), 10) + parseInt(value.charAt(i + 6), 10));\n            }\n            sum = 11 - sum % 11;\n            if (sum === 10 || sum === 11) {\n                sum = 0;\n            }\n            if (sum !== k) {\n                return false;\n            }\n\n            // Validate political region\n            // rr is the political region of birth, which can be in ranges:\n            // 10-19: Bosnia and Herzegovina\n            // 20-29: Montenegro\n            // 30-39: Croatia (not used anymore)\n            // 41-49: Macedonia\n            // 50-59: Slovenia (only 50 is used)\n            // 70-79: Central Serbia\n            // 80-89: Serbian province of Vojvodina\n            // 90-99: Kosovo\n            switch (countryCode.toUpperCase()) {\n                case 'BA':\n                    return (10 <= rr && rr <= 19);\n                case 'MK':\n                    return (41 <= rr && rr <= 49);\n                case 'ME':\n                    return (20 <= rr && rr <= 29);\n                case 'RS':\n                    return (70 <= rr && rr <= 99);\n                case 'SI':\n                    return (50 <= rr && rr <= 59);\n                default:\n                    return true;\n            }\n        },\n\n        _ba: function(value) {\n            return this._validateJMBG(value, 'BA');\n        },\n        _mk: function(value) {\n            return this._validateJMBG(value, 'MK');\n        },\n        _me: function(value) {\n            return this._validateJMBG(value, 'ME');\n        },\n        _rs: function(value) {\n            return this._validateJMBG(value, 'RS');\n        },\n\n        /**\n         * Examples: 0101006500006\n         */\n        _si: function(value) {\n            return this._validateJMBG(value, 'SI');\n        },\n\n        /**\n         * Validate Bulgarian national identification number (EGN)\n         * Examples:\n         * - Valid: 7523169263, 8032056031, 803205 603 1, 8001010008, 7501020018, 7552010005, 7542011030\n         * - Invalid: 8019010008\n         *\n         * @see http://en.wikipedia.org/wiki/Uniform_civil_number\n         * @param {String} value The ID\n         * @returns {Boolean}\n         */\n        _bg: function(value) {\n            if (!/^\\d{10}$/.test(value) && !/^\\d{6}\\s\\d{3}\\s\\d{1}$/.test(value)) {\n                return false;\n            }\n            value = value.replace(/\\s/g, '');\n            // Check the birth date\n            var year  = parseInt(value.substr(0, 2), 10) + 1900,\n                month = parseInt(value.substr(2, 2), 10),\n                day   = parseInt(value.substr(4, 2), 10);\n            if (month > 40) {\n                year += 100;\n                month -= 40;\n            } else if (month > 20) {\n                year -= 100;\n                month -= 20;\n            }\n\n            if (!$.fn.bootstrapValidator.helpers.date(year, month, day)) {\n                return false;\n            }\n\n            var sum    = 0,\n                weight = [2, 4, 8, 5, 10, 9, 7, 3, 6];\n            for (var i = 0; i < 9; i++) {\n                sum += parseInt(value.charAt(i), 10) * weight[i];\n            }\n            sum = (sum % 11) % 10;\n            return (sum + '' === value.substr(9, 1));\n        },\n\n        /**\n         * Validate Brazilian national identification number (CPF)\n         * Examples:\n         * - Valid: 39053344705, 390.533.447-05, 111.444.777-35\n         * - Invalid: 231.002.999-00\n         *\n         * @see http://en.wikipedia.org/wiki/Cadastro_de_Pessoas_F%C3%ADsicas\n         * @param {String} value The ID\n         * @returns {Boolean}\n         */\n        _br: function(value) {\n            if (/^1{11}|2{11}|3{11}|4{11}|5{11}|6{11}|7{11}|8{11}|9{11}|0{11}$/.test(value)) {\n                return false;\n            }\n            if (!/^\\d{11}$/.test(value) && !/^\\d{3}\\.\\d{3}\\.\\d{3}-\\d{2}$/.test(value)) {\n                return false;\n            }\n            value = value.replace(/\\./g, '').replace(/-/g, '');\n\n            var d1 = 0;\n            for (var i = 0; i < 9; i++) {\n                d1 += (10 - i) * parseInt(value.charAt(i), 10);\n            }\n            d1 = 11 - d1 % 11;\n            if (d1 === 10 || d1 === 11) {\n                d1 = 0;\n            }\n            if (d1 + '' !== value.charAt(9)) {\n                return false;\n            }\n\n            var d2 = 0;\n            for (i = 0; i < 10; i++) {\n                d2 += (11 - i) * parseInt(value.charAt(i), 10);\n            }\n            d2 = 11 - d2 % 11;\n            if (d2 === 10 || d2 === 11) {\n                d2 = 0;\n            }\n\n            return (d2 + '' === value.charAt(10));\n        },\n\n        /**\n         * Validate Swiss Social Security Number (AHV-Nr/No AVS)\n         * Examples:\n         * - Valid: 756.1234.5678.95, 7561234567895\n         *\n         * @see http://en.wikipedia.org/wiki/National_identification_number#Switzerland\n         * @see http://www.bsv.admin.ch/themen/ahv/00011/02185//?lang=de\n         * @param {String} value The ID\n         * @returns {Boolean}\n         */\n        _ch: function(value) {\n            if (!/^756[\\.]{0,1}[0-9]{4}[\\.]{0,1}[0-9]{4}[\\.]{0,1}[0-9]{2}$/.test(value)) {\n                return false;\n            }\n            value = value.replace(/\\D/g, '').substr(3);\n            var length = value.length,\n                sum    = 0,\n                weight = (length === 8) ? [3, 1] : [1, 3];\n            for (var i = 0; i < length - 1; i++) {\n                sum += parseInt(value.charAt(i), 10) * weight[i % 2];\n            }\n            sum = 10 - sum % 10;\n            return (sum + '' === value.charAt(length - 1));\n        },\n\n        /**\n         * Validate Chilean national identification number (RUN/RUT)\n         * Examples:\n         * - Valid: 76086428-5, 22060449-7, 12531909-2\n         *\n         * @see http://en.wikipedia.org/wiki/National_identification_number#Chile\n         * @see https://palena.sii.cl/cvc/dte/ee_empresas_emisoras.html for samples\n         * @param {String} value The ID\n         * @returns {Boolean}\n         */\n        _cl: function(value) {\n            if (!/^\\d{7,8}[-]{0,1}[0-9K]$/i.test(value)) {\n                return false;\n            }\n            value = value.replace(/\\-/g, '');\n            while (value.length < 9) {\n                value = '0' + value;\n            }\n            var sum    = 0,\n                weight = [3, 2, 7, 6, 5, 4, 3, 2];\n            for (var i = 0; i < 8; i++) {\n                sum += parseInt(value.charAt(i), 10) * weight[i];\n            }\n            sum = 11 - sum % 11;\n            if (sum === 11) {\n                sum = 0;\n            } else if (sum === 10) {\n                sum = 'K';\n            }\n            return sum + '' === value.charAt(8).toUpperCase();\n        },\n\n        /**\n         * Validate Chinese citizen identification number\n         *\n         * Rules:\n         * - For current 18-digit system (since 1st Oct 1999, defined by GB11643—1999 national standard):\n         *     - Digit 0-5: Must be a valid administrative division code of China PR.\n         *     - Digit 6-13: Must be a valid YYYYMMDD date of birth. A future date is tolerated.\n         *     - Digit 14-16: Order code, any integer.\n         *     - Digit 17: An ISO 7064:1983, MOD 11-2 checksum.\n         *       Both upper/lower case of X are tolerated.\n         * - For deprecated 15-digit system:\n         *     - Digit 0-5: Must be a valid administrative division code of China PR.\n         *     - Digit 6-11: Must be a valid YYMMDD date of birth, indicating the year of 19XX.\n         *     - Digit 12-14: Order code, any integer.\n         * Lists of valid administrative division codes of China PR can be seen here:\n         * <http://www.stats.gov.cn/tjsj/tjbz/xzqhdm/>\n         * Published and maintained by National Bureau of Statistics of China PR.\n         * NOTE: Current and deprecated codes MUST BOTH be considered valid.\n         * Many Chinese citizens born in once existed administrative divisions!\n         *\n         * @see http://en.wikipedia.org/wiki/Resident_Identity_Card#Identity_card_number\n         * @param {String} value The ID\n         * @returns {Boolean}\n         */\n        _cn: function(value) {\n            // Basic format check (18 or 15 digits, considering X in checksum)\n            value = value.trim();\n            if (!/^\\d{15}$/.test(value) && !/^\\d{17}[\\dXx]{1}$/.test(value)) {\n                return false;\n            }\n            \n            // Check China PR Administrative division code\n            var adminDivisionCodes = {\n                11: {\n                    0: [0],\n                    1: [[0, 9], [11, 17]],\n                    2: [0, 28, 29]\n                },\n                12: {\n                    0: [0],\n                    1: [[0, 16]],\n                    2: [0, 21, 23, 25]\n                },\n                13: {\n                    0: [0],\n                    1: [[0, 5], 7, 8, 21, [23, 33], [81, 85]],\n                    2: [[0, 5], [7, 9], [23, 25], 27, 29, 30, 81, 83],\n                    3: [[0, 4], [21, 24]],\n                    4: [[0, 4], 6, 21, [23, 35], 81],\n                    5: [[0, 3], [21, 35], 81, 82],\n                    6: [[0, 4], [21, 38], [81, 84]],\n                    7: [[0, 3], 5, 6, [21, 33]],\n                    8: [[0, 4], [21, 28]],\n                    9: [[0, 3], [21, 30], [81, 84]],\n                    10: [[0, 3], [22, 26], 28, 81, 82],\n                    11: [[0, 2], [21, 28], 81, 82]\n                },\n                14: {\n                    0: [0],\n                    1: [0, 1, [5, 10], [21, 23], 81],\n                    2: [[0, 3], 11, 12, [21, 27]],\n                    3: [[0, 3], 11, 21, 22],\n                    4: [[0, 2], 11, 21, [23, 31], 81],\n                    5: [[0, 2], 21, 22, 24, 25, 81],\n                    6: [[0, 3], [21, 24]],\n                    7: [[0, 2], [21, 29], 81],\n                    8: [[0, 2], [21, 30], 81, 82],\n                    9: [[0, 2], [21, 32], 81],\n                    10: [[0, 2], [21, 34], 81, 82],\n                    11: [[0, 2], [21, 30], 81, 82],\n                    23: [[0, 3], 22, 23, [25, 30], 32, 33]\n                },\n                15: {\n                    0: [0],\n                    1: [[0, 5], [21, 25]],\n                    2: [[0, 7], [21, 23]],\n                    3: [[0, 4]],\n                    4: [[0, 4], [21, 26], [28, 30]],\n                    5: [[0, 2], [21, 26], 81],\n                    6: [[0, 2], [21, 27]],\n                    7: [[0, 3], [21, 27], [81, 85]],\n                    8: [[0, 2], [21, 26]],\n                    9: [[0, 2], [21, 29], 81],\n                    22: [[0, 2], [21, 24]],\n                    25: [[0, 2], [22, 31]],\n                    26: [[0, 2], [24, 27], [29, 32], 34],\n                    28: [0, 1, [22, 27]],\n                    29: [0, [21, 23]]\n                },\n                21: {\n                    0: [0],\n                    1: [[0, 6], [11, 14], [22, 24], 81],\n                    2: [[0, 4], [11, 13], 24, [81, 83]],\n                    3: [[0, 4], 11, 21, 23, 81],\n                    4: [[0, 4], 11, [21, 23]],\n                    5: [[0, 5], 21, 22],\n                    6: [[0, 4], 24, 81, 82],\n                    7: [[0, 3], 11, 26, 27, 81, 82],\n                    8: [[0, 4], 11, 81, 82],\n                    9: [[0, 5], 11, 21, 22],\n                    10: [[0, 5], 11, 21, 81],\n                    11: [[0, 3], 21, 22],\n                    12: [[0, 2], 4, 21, 23, 24, 81, 82],\n                    13: [[0, 3], 21, 22, 24, 81, 82],\n                    14: [[0, 4], 21, 22, 81]\n                },\n                22: {\n                    0: [0],\n                    1: [[0, 6], 12, 22, [81, 83]],\n                    2: [[0, 4], 11, 21, [81, 84]],\n                    3: [[0, 3], 22, 23, 81, 82],\n                    4: [[0, 3], 21, 22],\n                    5: [[0, 3], 21, 23, 24, 81, 82],\n                    6: [[0, 2], 4, 5, [21, 23], 25, 81],\n                    7: [[0, 2], [21, 24], 81],\n                    8: [[0, 2], 21, 22, 81, 82],\n                    24: [[0, 6], 24, 26]\n                },\n                23: {\n                    0: [0],\n                    1: [[0, 12], 21, [23, 29], [81, 84]],\n                    2: [[0, 8], 21, [23, 25], 27, [29, 31], 81],\n                    3: [[0, 7], 21, 81, 82],\n                    4: [[0, 7], 21, 22],\n                    5: [[0, 3], 5, 6, [21, 24]],\n                    6: [[0, 6], [21, 24]],\n                    7: [[0, 16], 22, 81],\n                    8: [[0, 5], 11, 22, 26, 28, 33, 81, 82],\n                    9: [[0, 4], 21],\n                    10: [[0, 5], 24, 25, 81, [83, 85]],\n                    11: [[0, 2], 21, 23, 24, 81, 82],\n                    12: [[0, 2], [21, 26], [81, 83]],\n                    27: [[0, 4], [21, 23]]\n                },\n                31: {\n                    0: [0],\n                    1: [0, 1, [3, 10], [12, 20]],\n                    2: [0, 30]\n                },\n                32: {\n                    0: [0],\n                    1: [[0, 7], 11, [13, 18], 24, 25],\n                    2: [[0, 6], 11, 81, 82],\n                    3: [[0, 5], 11, 12, [21, 24], 81, 82],\n                    4: [[0, 2], 4, 5, 11, 12, 81, 82],\n                    5: [[0, 9], [81, 85]],\n                    6: [[0, 2], 11, 12, 21, 23, [81, 84]],\n                    7: [0, 1, 3, 5, 6, [21, 24]],\n                    8: [[0, 4], 11, 26, [29, 31]],\n                    9: [[0, 3], [21, 25], 28, 81, 82],\n                    10: [[0, 3], 11, 12, 23, 81, 84, 88],\n                    11: [[0, 2], 11, 12, [81, 83]],\n                    12: [[0, 4], [81, 84]],\n                    13: [[0, 2], 11, [21, 24]]\n                },\n                33: {\n                    0: [0],\n                    1: [[0, 6], [8, 10], 22, 27, 82, 83, 85],\n                    2: [0, 1, [3, 6], 11, 12, 25, 26, [81, 83]],\n                    3: [[0, 4], 22, 24, [26, 29], 81, 82],\n                    4: [[0, 2], 11, 21, 24, [81, 83]],\n                    5: [[0, 3], [21, 23]],\n                    6: [[0, 2], 21, 24, [81, 83]],\n                    7: [[0, 3], 23, 26, 27, [81, 84]],\n                    8: [[0, 3], 22, 24, 25, 81],\n                    9: [[0, 3], 21, 22],\n                    10: [[0, 4], [21, 24], 81, 82],\n                    11: [[0, 2], [21, 27], 81]\n                },\n                34: {\n                    0: [0],\n                    1: [[0, 4], 11, [21, 24], 81],\n                    2: [[0, 4], 7, 8, [21, 23], 25],\n                    3: [[0, 4], 11, [21, 23]],\n                    4: [[0, 6], 21],\n                    5: [[0, 4], 6, [21, 23]],\n                    6: [[0, 4], 21],\n                    7: [[0, 3], 11, 21],\n                    8: [[0, 3], 11, [22, 28], 81],\n                    10: [[0, 4], [21, 24]],\n                    11: [[0, 3], 22, [24, 26], 81, 82],\n                    12: [[0, 4], 21, 22, 25, 26, 82],\n                    13: [[0, 2], [21, 24]],\n                    14: [[0, 2], [21, 24]],\n                    15: [[0, 3], [21, 25]],\n                    16: [[0, 2], [21, 23]],\n                    17: [[0, 2], [21, 23]],\n                    18: [[0, 2], [21, 25], 81]\n                },\n                35: {\n                    0: [0],\n                    1: [[0, 5], 11, [21, 25], 28, 81, 82],\n                    2: [[0, 6], [11, 13]],\n                    3: [[0, 5], 22],\n                    4: [[0, 3], 21, [23, 30], 81],\n                    5: [[0, 5], 21, [24, 27], [81, 83]],\n                    6: [[0, 3], [22, 29], 81],\n                    7: [[0, 2], [21, 25], [81, 84]],\n                    8: [[0, 2], [21, 25], 81],\n                    9: [[0, 2], [21, 26], 81, 82]\n                },\n                36: {\n                    0: [0],\n                    1: [[0, 5], 11, [21, 24]],\n                    2: [[0, 3], 22, 81],\n                    3: [[0, 2], 13, [21, 23]],\n                    4: [[0, 3], 21, [23, 30], 81, 82],\n                    5: [[0, 2], 21],\n                    6: [[0, 2], 22, 81],\n                    7: [[0, 2], [21, 35], 81, 82],\n                    8: [[0, 3], [21, 30], 81],\n                    9: [[0, 2], [21, 26], [81, 83]],\n                    10: [[0, 2], [21, 30]],\n                    11: [[0, 2], [21, 30], 81]\n                },\n                37: {\n                    0: [0],\n                    1: [[0, 5], 12, 13, [24, 26], 81],\n                    2: [[0, 3], 5, [11, 14], [81, 85]],\n                    3: [[0, 6], [21, 23]],\n                    4: [[0, 6], 81],\n                    5: [[0, 3], [21, 23]],\n                    6: [[0, 2], [11, 13], 34, [81, 87]],\n                    7: [[0, 5], 24, 25, [81, 86]],\n                    8: [[0, 2], 11, [26, 32], [81, 83]],\n                    9: [[0, 3], 11, 21, 23, 82, 83],\n                    10: [[0, 2], [81, 83]],\n                    11: [[0, 3], 21, 22],\n                    12: [[0, 3]],\n                    13: [[0, 2], 11, 12, [21, 29]],\n                    14: [[0, 2], [21, 28], 81, 82],\n                    15: [[0, 2], [21, 26], 81],\n                    16: [[0, 2], [21, 26]],\n                    17: [[0, 2], [21, 28]]\n                },\n                41: {\n                    0: [0],\n                    1: [[0, 6], 8, 22, [81, 85]],\n                    2: [[0, 5], 11, [21, 25]],\n                    3: [[0, 7], 11, [22, 29], 81],\n                    4: [[0, 4], 11, [21, 23], 25, 81, 82],\n                    5: [[0, 3], 5, 6, 22, 23, 26, 27, 81],\n                    6: [[0, 3], 11, 21, 22],\n                    7: [[0, 4], 11, 21, [24, 28], 81, 82],\n                    8: [[0, 4], 11, [21, 23], 25, [81, 83]],\n                    9: [[0, 2], 22, 23, [26, 28]],\n                    10: [[0, 2], [23, 25], 81, 82],\n                    11: [[0, 4], [21, 23]],\n                    12: [[0, 2], 21, 22, 24, 81, 82],\n                    13: [[0, 3], [21, 30], 81],\n                    14: [[0, 3], [21, 26], 81],\n                    15: [[0, 3], [21, 28]],\n                    16: [[0, 2], [21, 28], 81],\n                    17: [[0, 2], [21, 29]],\n                    90: [0, 1]\n                },\n                42: {\n                    0: [0],\n                    1: [[0, 7], [11, 17]],\n                    2: [[0, 5], 22, 81],\n                    3: [[0, 3], [21, 25], 81],\n                    5: [[0, 6], [25, 29], [81, 83]],\n                    6: [[0, 2], 6, 7, [24, 26], [82, 84]],\n                    7: [[0, 4]],\n                    8: [[0, 2], 4, 21, 22, 81],\n                    9: [[0, 2], [21, 23], 81, 82, 84],\n                    10: [[0, 3], [22, 24], 81, 83, 87],\n                    11: [[0, 2], [21, 27], 81, 82],\n                    12: [[0, 2], [21, 24], 81],\n                    13: [[0, 3], 21, 81],\n                    28: [[0, 2], 22, 23, [25, 28]],\n                    90: [0, [4, 6], 21]\n                },\n                43: {\n                    0: [0],\n                    1: [[0, 5], 11, 12, 21, 22, 24, 81],\n                    2: [[0, 4], 11, 21, [23, 25], 81],\n                    3: [[0, 2], 4, 21, 81, 82],\n                    4: [0, 1, [5, 8], 12, [21, 24], 26, 81, 82],\n                    5: [[0, 3], 11, [21, 25], [27, 29], 81],\n                    6: [[0, 3], 11, 21, 23, 24, 26, 81, 82],\n                    7: [[0, 3], [21, 26], 81],\n                    8: [[0, 2], 11, 21, 22],\n                    9: [[0, 3], [21, 23], 81],\n                    10: [[0, 3], [21, 28], 81],\n                    11: [[0, 3], [21, 29]],\n                    12: [[0, 2], [21, 30], 81],\n                    13: [[0, 2], 21, 22, 81, 82],\n                    31: [0, 1, [22, 27], 30]\n                },\n                44: {\n                    0: [0],\n                    1: [[0, 7], [11, 16], 83, 84],\n                    2: [[0, 5], 21, 22, 24, 29, 32, 33, 81, 82],\n                    3: [0, 1, [3, 8]],\n                    4: [[0, 4]],\n                    5: [0, 1, [6, 15], 23, 82, 83],\n                    6: [0, 1, [4, 8]],\n                    7: [0, 1, [3, 5], 81, [83, 85]],\n                    8: [[0, 4], 11, 23, 25, [81, 83]],\n                    9: [[0, 3], 23, [81, 83]],\n                    12: [[0, 3], [23, 26], 83, 84],\n                    13: [[0, 3], [22, 24], 81],\n                    14: [[0, 2], [21, 24], 26, 27, 81],\n                    15: [[0, 2], 21, 23, 81],\n                    16: [[0, 2], [21, 25]],\n                    17: [[0, 2], 21, 23, 81],\n                    18: [[0, 3], 21, 23, [25, 27], 81, 82],\n                    19: [0],\n                    20: [0],\n                    51: [[0, 3], 21, 22],\n                    52: [[0, 3], 21, 22, 24, 81],\n                    53: [[0, 2], [21, 23], 81]\n                },\n                45: {\n                    0: [0],\n                    1: [[0, 9], [21, 27]],\n                    2: [[0, 5], [21, 26]],\n                    3: [[0, 5], 11, 12, [21, 32]],\n                    4: [0, 1, [3, 6], 11, [21, 23], 81],\n                    5: [[0, 3], 12, 21],\n                    6: [[0, 3], 21, 81],\n                    7: [[0, 3], 21, 22],\n                    8: [[0, 4], 21, 81],\n                    9: [[0, 3], [21, 24], 81],\n                    10: [[0, 2], [21, 31]],\n                    11: [[0, 2], [21, 23]],\n                    12: [[0, 2], [21, 29], 81],\n                    13: [[0, 2], [21, 24], 81],\n                    14: [[0, 2], [21, 25], 81]\n                },\n                46: {\n                    0: [0],\n                    1: [0, 1, [5, 8]],\n                    2: [0, 1],\n                    3: [0, [21, 23]],\n                    90: [[0, 3], [5, 7], [21, 39]]\n                },\n                50: {\n                    0: [0],\n                    1: [[0, 19]],\n                    2: [0, [22, 38], [40, 43]],\n                    3: [0, [81, 84]]\n                },\n                51: {\n                    0: [0],\n                    1: [0, 1, [4, 8], [12, 15], [21, 24], 29, 31, 32, [81, 84]],\n                    3: [[0, 4], 11, 21, 22],\n                    4: [[0, 3], 11, 21, 22],\n                    5: [[0, 4], 21, 22, 24, 25],\n                    6: [0, 1, 3, 23, 26, [81, 83]],\n                    7: [0, 1, 3, 4, [22, 27], 81],\n                    8: [[0, 2], 11, 12, [21, 24]],\n                    9: [[0, 4], [21, 23]],\n                    10: [[0, 2], 11, 24, 25, 28],\n                    11: [[0, 2], [11, 13], 23, 24, 26, 29, 32, 33, 81],\n                    13: [[0, 4], [21, 25], 81],\n                    14: [[0, 2], [21, 25]],\n                    15: [[0, 3], [21, 29]],\n                    16: [[0, 3], [21, 23], 81],\n                    17: [[0, 3], [21, 25], 81],\n                    18: [[0, 3], [21, 27]],\n                    19: [[0, 3], [21, 23]],\n                    20: [[0, 2], 21, 22, 81],\n                    32: [0, [21, 33]],\n                    33: [0, [21, 38]],\n                    34: [0, 1, [22, 37]]\n                },\n                52: {\n                    0: [0],\n                    1: [[0, 3], [11, 15], [21, 23], 81],\n                    2: [0, 1, 3, 21, 22],\n                    3: [[0, 3], [21, 30], 81, 82],\n                    4: [[0, 2], [21, 25]],\n                    5: [[0, 2], [21, 27]],\n                    6: [[0, 3], [21, 28]],\n                    22: [0, 1, [22, 30]],\n                    23: [0, 1, [22, 28]],\n                    24: [0, 1, [22, 28]],\n                    26: [0, 1, [22, 36]],\n                    27: [[0, 2], 22, 23, [25, 32]]\n                },\n                53: {\n                    0: [0],\n                    1: [[0, 3], [11, 14], 21, 22, [24, 29], 81],\n                    3: [[0, 2], [21, 26], 28, 81],\n                    4: [[0, 2], [21, 28]],\n                    5: [[0, 2], [21, 24]],\n                    6: [[0, 2], [21, 30]],\n                    7: [[0, 2], [21, 24]],\n                    8: [[0, 2], [21, 29]],\n                    9: [[0, 2], [21, 27]],\n                    23: [0, 1, [22, 29], 31],\n                    25: [[0, 4], [22, 32]],\n                    26: [0, 1, [21, 28]],\n                    27: [0, 1, [22, 30]], 28: [0, 1, 22, 23],\n                    29: [0, 1, [22, 32]],\n                    31: [0, 2, 3, [22, 24]],\n                    34: [0, [21, 23]],\n                    33: [0, 21, [23, 25]],\n                    35: [0, [21, 28]]\n                },\n                54: {\n                    0: [0],\n                    1: [[0, 2], [21, 27]],\n                    21: [0, [21, 29], 32, 33],\n                    22: [0, [21, 29], [31, 33]],\n                    23: [0, 1, [22, 38]],\n                    24: [0, [21, 31]],\n                    25: [0, [21, 27]],\n                    26: [0, [21, 27]]\n                },\n                61: {\n                    0: [0],\n                    1: [[0, 4], [11, 16], 22, [24, 26]],\n                    2: [[0, 4], 22],\n                    3: [[0, 4], [21, 24], [26, 31]],\n                    4: [[0, 4], [22, 31], 81],\n                    5: [[0, 2], [21, 28], 81, 82],\n                    6: [[0, 2], [21, 32]],\n                    7: [[0, 2], [21, 30]],\n                    8: [[0, 2], [21, 31]],\n                    9: [[0, 2], [21, 29]],\n                    10: [[0, 2], [21, 26]]\n                },\n                62: {\n                    0: [0],\n                    1: [[0, 5], 11, [21, 23]],\n                    2: [0, 1],\n                    3: [[0, 2], 21],\n                    4: [[0, 3], [21, 23]],\n                    5: [[0, 3], [21, 25]],\n                    6: [[0, 2], [21, 23]],\n                    7: [[0, 2], [21, 25]],\n                    8: [[0, 2], [21, 26]],\n                    9: [[0, 2], [21, 24], 81, 82],\n                    10: [[0, 2], [21, 27]],\n                    11: [[0, 2], [21, 26]],\n                    12: [[0, 2], [21, 28]],\n                    24: [0, 21, [24, 29]],\n                    26: [0, 21, [23, 30]],\n                    29: [0, 1, [21, 27]],\n                    30: [0, 1, [21, 27]]\n                },\n                63: {\n                    0: [0],\n                    1: [[0, 5], [21, 23]],\n                    2: [0, 2, [21, 25]],\n                    21: [0, [21, 23], [26, 28]],\n                    22: [0, [21, 24]],\n                    23: [0, [21, 24]],\n                    25: [0, [21, 25]],\n                    26: [0, [21, 26]],\n                    27: [0, 1, [21, 26]],\n                    28: [[0, 2], [21, 23]]\n                },\n                64: {\n                    0: [0],\n                    1: [0, 1, [4, 6], 21, 22, 81],\n                    2: [[0, 3], 5, [21, 23]],\n                    3: [[0, 3], [21, 24], 81],\n                    4: [[0, 2], [21, 25]],\n                    5: [[0, 2], 21, 22]\n                },\n                65: {\n                    0: [0],\n                    1: [[0, 9], 21],\n                    2: [[0, 5]],\n                    21: [0, 1, 22, 23],\n                    22: [0, 1, 22, 23],\n                    23: [[0, 3], [23, 25], 27, 28],\n                    28: [0, 1, [22, 29]],\n                    29: [0, 1, [22, 29]],\n                    30: [0, 1, [22, 24]], 31: [0, 1, [21, 31]],\n                    32: [0, 1, [21, 27]],\n                    40: [0, 2, 3, [21, 28]],\n                    42: [[0, 2], 21, [23, 26]],\n                    43: [0, 1, [21, 26]],\n                    90: [[0, 4]], 27: [[0, 2], 22, 23]\n                },\n                71: { 0: [0] },\n                81: { 0: [0] },\n                82: { 0: [0] }\n            };\n            \n            var provincial  = parseInt(value.substr(0, 2), 10),\n                prefectural = parseInt(value.substr(2, 2), 10),\n                county      = parseInt(value.substr(4, 2), 10);\n            \n            if (!adminDivisionCodes[provincial] || !adminDivisionCodes[provincial][prefectural]) {\n                return false;\n            }\n            var inRange  = false,\n                rangeDef = adminDivisionCodes[provincial][prefectural];\n            for (var i = 0; i < rangeDef.length; i++) {\n                if (($.isArray(rangeDef[i]) && rangeDef[i][0] <= county && county <= rangeDef[i][1])\n                    || (!$.isArray(rangeDef[i]) && county === rangeDef[i]))\n                {\n                    inRange = true;\n                    break;\n                }\n            }\n\n            if (!inRange) {\n                return false;\n            }\n            \n            // Check date of birth\n            var dob;\n            if (value.length === 18) {\n                dob = value.substr(6, 8);\n            } else /* length == 15 */ { \n                dob = '19' + value.substr(6, 6);\n            }\n            var year  = parseInt(dob.substr(0, 4), 10),\n                month = parseInt(dob.substr(4, 2), 10),\n                day   = parseInt(dob.substr(6, 2), 10);\n            if (!$.fn.bootstrapValidator.helpers.date(year, month, day)) {\n                return false;\n            }\n            \n            // Check checksum (18-digit system only)\n            if (value.length === 18) {\n                var sum    = 0,\n                    weight = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2];\n                for (i = 0; i < 17; i++) {\n                    sum += parseInt(value.charAt(i), 10) * weight[i];\n                }\n                sum = (12 - (sum % 11)) % 11;\n                var checksum = (value.charAt(17).toUpperCase() !== 'X') ? parseInt(value.charAt(17), 10) : 10;\n                return checksum === sum;\n            }\n            \n            return true;\n        },\n        \n        /**\n         * Validate Czech national identification number (RC)\n         * Examples:\n         * - Valid: 7103192745, 991231123\n         * - Invalid: 1103492745, 590312123\n         *\n         * @param {String} value The ID\n         * @returns {Boolean}\n         */\n        _cz: function(value) {\n            if (!/^\\d{9,10}$/.test(value)) {\n                return false;\n            }\n            var year  = 1900 + parseInt(value.substr(0, 2), 10),\n                month = parseInt(value.substr(2, 2), 10) % 50 % 20,\n                day   = parseInt(value.substr(4, 2), 10);\n            if (value.length === 9) {\n                if (year >= 1980) {\n                    year -= 100;\n                }\n                if (year > 1953) {\n                    return false;\n                }\n            } else if (year < 1954) {\n                year += 100;\n            }\n\n            if (!$.fn.bootstrapValidator.helpers.date(year, month, day)) {\n                return false;\n            }\n\n            // Check that the birth date is not in the future\n            if (value.length === 10) {\n                var check = parseInt(value.substr(0, 9), 10) % 11;\n                if (year < 1985) {\n                    check = check % 10;\n                }\n                return (check + '' === value.substr(9, 1));\n            }\n\n            return true;\n        },\n\n        /**\n         * Validate Danish Personal Identification number (CPR)\n         * Examples:\n         * - Valid: 2110625629, 211062-5629\n         * - Invalid: 511062-5629\n         *\n         * @see https://en.wikipedia.org/wiki/Personal_identification_number_(Denmark)\n         * @param {String} value The ID\n         * @returns {Boolean}\n         */\n        _dk: function(value) {\n            if (!/^[0-9]{6}[-]{0,1}[0-9]{4}$/.test(value)) {\n                return false;\n            }\n            value = value.replace(/-/g, '');\n            var day   = parseInt(value.substr(0, 2), 10),\n                month = parseInt(value.substr(2, 2), 10),\n                year  = parseInt(value.substr(4, 2), 10);\n\n            switch (true) {\n                case ('5678'.indexOf(value.charAt(6)) !== -1 && year >= 58):\n                    year += 1800;\n                    break;\n                case ('0123'.indexOf(value.charAt(6)) !== -1):\n                case ('49'.indexOf(value.charAt(6)) !== -1 && year >= 37):\n                    year += 1900;\n                    break;\n                default:\n                    year += 2000;\n                    break;\n            }\n\n            return $.fn.bootstrapValidator.helpers.date(year, month, day);\n        },\n\n        /**\n         * Validate Estonian Personal Identification Code (isikukood)\n         * Examples:\n         * - Valid: 37605030299\n         *\n         * @see http://et.wikipedia.org/wiki/Isikukood\n         * @param {String} value The ID\n         * @returns {Boolean}\n         */\n        _ee: function(value) {\n            // Use the same format as Lithuanian Personal Code\n            return this._lt(value);\n        },\n\n        /**\n         * Validate Spanish personal identity code (DNI)\n         * Support i) DNI (for Spanish citizens) and ii) NIE (for foreign people)\n         *\n         * Examples:\n         * - Valid: i) 54362315K, 54362315-K; ii) X2482300W, X-2482300W, X-2482300-W\n         * - Invalid: i) 54362315Z; ii) X-2482300A\n         *\n         * @see https://en.wikipedia.org/wiki/National_identification_number#Spain\n         * @param {String} value The ID\n         * @returns {Boolean}\n         */\n        _es: function(value) {\n            if (!/^[0-9A-Z]{8}[-]{0,1}[0-9A-Z]$/.test(value)                    // DNI\n                && !/^[XYZ][-]{0,1}[0-9]{7}[-]{0,1}[0-9A-Z]$/.test(value)) {    // NIE\n                return false;\n            }\n\n            value = value.replace(/-/g, '');\n            var index = 'XYZ'.indexOf(value.charAt(0));\n            if (index !== -1) {\n                // It is NIE number\n                value = index + value.substr(1) + '';\n            }\n\n            var check = parseInt(value.substr(0, 8), 10);\n            check = 'TRWAGMYFPDXBNJZSQVHLCKE'[check % 23];\n            return (check === value.substr(8, 1));\n        },\n\n        /**\n         * Validate Finnish Personal Identity Code (HETU)\n         * Examples:\n         * - Valid: 311280-888Y, 131052-308T\n         * - Invalid: 131052-308U, 310252-308Y\n         *\n         * @param {String} value The ID\n         * @returns {Boolean}\n         */\n        _fi: function(value) {\n            if (!/^[0-9]{6}[-+A][0-9]{3}[0-9ABCDEFHJKLMNPRSTUVWXY]$/.test(value)) {\n                return false;\n            }\n            var day       = parseInt(value.substr(0, 2), 10),\n                month     = parseInt(value.substr(2, 2), 10),\n                year      = parseInt(value.substr(4, 2), 10),\n                centuries = {\n                    '+': 1800,\n                    '-': 1900,\n                    'A': 2000\n                };\n            year = centuries[value.charAt(6)] + year;\n\n            if (!$.fn.bootstrapValidator.helpers.date(year, month, day)) {\n                return false;\n            }\n\n            var individual = parseInt(value.substr(7, 3), 10);\n            if (individual < 2) {\n                return false;\n            }\n            var n = value.substr(0, 6) + value.substr(7, 3) + '';\n            n = parseInt(n, 10);\n            return '0123456789ABCDEFHJKLMNPRSTUVWXY'.charAt(n % 31) === value.charAt(10);\n        },\n\n        /**\n         * Validate Croatian personal identification number (OIB)\n         * Examples:\n         * - Valid: 33392005961\n         * - Invalid: 33392005962\n         *\n         * @param {String} value The ID\n         * @returns {Boolean}\n         */\n        _hr: function(value) {\n            if (!/^[0-9]{11}$/.test(value)) {\n                return false;\n            }\n            return $.fn.bootstrapValidator.helpers.mod11And10(value);\n        },\n\n        /**\n         * Validate Irish Personal Public Service Number (PPS)\n         * Examples:\n         * - Valid: 6433435F, 6433435FT, 6433435FW, 6433435OA, 6433435IH, 1234567TW, 1234567FA\n         * - Invalid: 6433435E, 6433435VH\n         *\n         * @see https://en.wikipedia.org/wiki/Personal_Public_Service_Number\n         * @param {String} value The ID\n         * @returns {Boolean}\n         */\n        _ie: function(value) {\n            if (!/^\\d{7}[A-W][AHWTX]?$/.test(value)) {\n                return false;\n            }\n\n            var getCheckDigit = function(value) {\n                while (value.length < 7) {\n                    value = '0' + value;\n                }\n                var alphabet = 'WABCDEFGHIJKLMNOPQRSTUV',\n                    sum      = 0;\n                for (var i = 0; i < 7; i++) {\n                    sum += parseInt(value.charAt(i), 10) * (8 - i);\n                }\n                sum += 9 * alphabet.indexOf(value.substr(7));\n                return alphabet[sum % 23];\n            };\n\n            // 2013 format\n            if (value.length === 9 && ('A' === value.charAt(8) || 'H' === value.charAt(8))) {\n                return value.charAt(7) === getCheckDigit(value.substr(0, 7) + value.substr(8) + '');\n            }\n            // The old format\n            else {\n                return value.charAt(7) === getCheckDigit(value.substr(0, 7));\n            }\n        },\n\n        /**\n         * Validate Iceland national identification number (Kennitala)\n         * Examples:\n         * - Valid: 120174-3399, 1201743399, 0902862349\n         *\n         * @see http://en.wikipedia.org/wiki/Kennitala\n         * @param {String} value The ID\n         * @returns {Boolean}\n         */\n        _is: function(value) {\n            if (!/^[0-9]{6}[-]{0,1}[0-9]{4}$/.test(value)) {\n                return false;\n            }\n            value = value.replace(/-/g, '');\n            var day     = parseInt(value.substr(0, 2), 10),\n                month   = parseInt(value.substr(2, 2), 10),\n                year    = parseInt(value.substr(4, 2), 10),\n                century = parseInt(value.charAt(9), 10);\n\n            year = (century === 9) ? (1900 + year) : ((20 + century) * 100 + year);\n            if (!$.fn.bootstrapValidator.helpers.date(year, month, day, true)) {\n                return false;\n            }\n            // Validate the check digit\n            var sum    = 0,\n                weight = [3, 2, 7, 6, 5, 4, 3, 2];\n            for (var i = 0; i < 8; i++) {\n                sum += parseInt(value.charAt(i), 10) * weight[i];\n            }\n            sum = 11 - sum % 11;\n            return (sum + '' === value.charAt(8));\n        },\n\n        /**\n         * Validate Lithuanian Personal Code (Asmens kodas)\n         * Examples:\n         * - Valid: 38703181745\n         * - Invalid: 38703181746, 78703181745, 38703421745\n         *\n         * @see http://en.wikipedia.org/wiki/National_identification_number#Lithuania\n         * @see http://www.adomas.org/midi2007/pcode.html\n         * @param {String} value The ID\n         * @returns {Boolean}\n         */\n        _lt: function(value) {\n            if (!/^[0-9]{11}$/.test(value)) {\n                return false;\n            }\n            var gender  = parseInt(value.charAt(0), 10),\n                year    = parseInt(value.substr(1, 2), 10),\n                month   = parseInt(value.substr(3, 2), 10),\n                day     = parseInt(value.substr(5, 2), 10),\n                century = (gender % 2 === 0) ? (17 + gender / 2) : (17 + (gender + 1) / 2);\n            year = century * 100 + year;\n            if (!$.fn.bootstrapValidator.helpers.date(year, month, day, true)) {\n                return false;\n            }\n\n            // Validate the check digit\n            var sum    = 0,\n                weight = [1, 2, 3, 4, 5, 6, 7, 8, 9, 1];\n            for (var i = 0; i < 10; i++) {\n                sum += parseInt(value.charAt(i), 10) * weight[i];\n            }\n            sum = sum % 11;\n            if (sum !== 10) {\n                return sum + '' === value.charAt(10);\n            }\n\n            // Re-calculate the check digit\n            sum    = 0;\n            weight = [3, 4, 5, 6, 7, 8, 9, 1, 2, 3];\n            for (i = 0; i < 10; i++) {\n                sum += parseInt(value.charAt(i), 10) * weight[i];\n            }\n            sum = sum % 11;\n            if (sum === 10) {\n                sum = 0;\n            }\n            return (sum + '' === value.charAt(10));\n        },\n\n        /**\n         * Validate Latvian Personal Code (Personas kods)\n         * Examples:\n         * - Valid: 161175-19997, 16117519997\n         * - Invalid: 161375-19997\n         *\n         * @see http://laacz.lv/2006/11/25/pk-parbaudes-algoritms/\n         * @param {String} value The ID\n         * @returns {Boolean}\n         */\n        _lv: function(value) {\n            if (!/^[0-9]{6}[-]{0,1}[0-9]{5}$/.test(value)) {\n                return false;\n            }\n            value = value.replace(/\\D/g, '');\n            // Check birth date\n            var day   = parseInt(value.substr(0, 2), 10),\n                month = parseInt(value.substr(2, 2), 10),\n                year  = parseInt(value.substr(4, 2), 10);\n            year = year + 1800 + parseInt(value.charAt(6), 10) * 100;\n\n            if (!$.fn.bootstrapValidator.helpers.date(year, month, day, true)) {\n                return false;\n            }\n\n            // Check personal code\n            var sum    = 0,\n                weight = [10, 5, 8, 4, 2, 1, 6, 3, 7, 9];\n            for (var i = 0; i < 10; i++) {\n                sum += parseInt(value.charAt(i), 10) * weight[i];\n            }\n            sum = (sum + 1) % 11 % 10;\n            return (sum + '' === value.charAt(10));\n        },\n\n        /**\n         * Validate Dutch national identification number (BSN)\n         * Examples:\n         * - Valid: 111222333, 941331490, 9413.31.490\n         * - Invalid: 111252333\n         *\n         * @see https://nl.wikipedia.org/wiki/Burgerservicenummer\n         * @param {String} value The ID\n         * @returns {Boolean}\n         */\n        _nl: function(value) {\n            while (value.length < 9) {\n                value = '0' + value;\n            }\n            if (!/^[0-9]{4}[.]{0,1}[0-9]{2}[.]{0,1}[0-9]{3}$/.test(value)) {\n                return false;\n            }\n            value = value.replace(/\\./g, '');\n            if (parseInt(value, 10) === 0) {\n                return false;\n            }\n            var sum    = 0,\n                length = value.length;\n            for (var i = 0; i < length - 1; i++) {\n                sum += (9 - i) * parseInt(value.charAt(i), 10);\n            }\n            sum = sum % 11;\n            if (sum === 10) {\n                sum = 0;\n            }\n            return (sum + '' === value.charAt(length - 1));\n        },\n\n        /**\n         * Validate Romanian numerical personal code (CNP)\n         * Examples:\n         * - Valid: 1630615123457, 1800101221144\n         * - Invalid: 8800101221144, 1632215123457, 1630615123458\n         *\n         * @see http://en.wikipedia.org/wiki/National_identification_number#Romania\n         * @param {String} value The ID\n         * @returns {Boolean}\n         */\n        _ro: function(value) {\n            if (!/^[0-9]{13}$/.test(value)) {\n                return false;\n            }\n            var gender = parseInt(value.charAt(0), 10);\n            if (gender === 0 || gender === 7 || gender === 8) {\n                return false;\n            }\n\n            // Determine the date of birth\n            var year      = parseInt(value.substr(1, 2), 10),\n                month     = parseInt(value.substr(3, 2), 10),\n                day       = parseInt(value.substr(5, 2), 10),\n                // The year of date is determined base on the gender\n                centuries = {\n                    '1': 1900,  // Male born between 1900 and 1999\n                    '2': 1900,  // Female born between 1900 and 1999\n                    '3': 1800,  // Male born between 1800 and 1899\n                    '4': 1800,  // Female born between 1800 and 1899\n                    '5': 2000,  // Male born after 2000\n                    '6': 2000   // Female born after 2000\n                };\n            if (day > 31 && month > 12) {\n                return false;\n            }\n            if (gender !== 9) {\n                year = centuries[gender + ''] + year;\n                if (!$.fn.bootstrapValidator.helpers.date(year, month, day)) {\n                    return false;\n                }\n            }\n\n            // Validate the check digit\n            var sum    = 0,\n                weight = [2, 7, 9, 1, 4, 6, 3, 5, 8, 2, 7, 9],\n                length = value.length;\n            for (var i = 0; i < length - 1; i++) {\n                sum += parseInt(value.charAt(i), 10) * weight[i];\n            }\n            sum = sum % 11;\n            if (sum === 10) {\n                sum = 1;\n            }\n            return (sum + '' === value.charAt(length - 1));\n        },\n\n        /**\n         * Validate Swedish personal identity number (personnummer)\n         * Examples:\n         * - Valid: 8112289874, 811228-9874, 811228+9874\n         * - Invalid: 811228-9873\n         *\n         * @see http://en.wikipedia.org/wiki/Personal_identity_number_(Sweden)\n         * @param {String} value The ID\n         * @returns {Boolean}\n         */\n        _se: function(value) {\n            if (!/^[0-9]{10}$/.test(value) && !/^[0-9]{6}[-|+][0-9]{4}$/.test(value)) {\n                return false;\n            }\n            value = value.replace(/[^0-9]/g, '');\n\n            var year  = parseInt(value.substr(0, 2), 10) + 1900,\n                month = parseInt(value.substr(2, 2), 10),\n                day   = parseInt(value.substr(4, 2), 10);\n            if (!$.fn.bootstrapValidator.helpers.date(year, month, day)) {\n                return false;\n            }\n\n            // Validate the last check digit\n            return $.fn.bootstrapValidator.helpers.luhn(value);\n        },\n\n        /**\n         * Validate Slovak national identifier number (RC)\n         * Examples:\n         * - Valid: 7103192745, 991231123\n         * - Invalid: 7103192746, 1103492745\n         *\n         * @param {String} value The ID\n         * @returns {Boolean}\n         */\n        _sk: function(value) {\n            // Slovakia uses the same format as Czech Republic\n            return this._cz(value);\n        },\n\n        /**\n         * Validate San Marino citizen number\n         *\n         * @see http://en.wikipedia.org/wiki/National_identification_number#San_Marino\n         * @param {String} value The ID\n         * @returns {Boolean}\n         */\n        _sm: function(value) {\n            return /^\\d{5}$/.test(value);\n        },\n\n        /**\n         * Validate Thailand citizen number\n         * Examples:\n         * - Valid: 7145620509547, 3688699975685, 2368719339716\n         * - Invalid: 1100800092310\n         *\n         * @see http://en.wikipedia.org/wiki/National_identification_number#Thailand\n         * @param {String} value The ID\n         * @returns {Boolean}\n         */\n        _th: function(value) {\n            if (value.length !== 13) {\n                return false;\n            }\n\n            var sum = 0;\n            for (var i = 0; i < 12; i++) {\n                sum += parseInt(value.charAt(i), 10) * (13 - i);\n            }\n\n            return (11 - sum % 11) % 10 === parseInt(value.charAt(12), 10);\n        },\n\n        /**\n         * Validate South African ID\n         * Example:\n         * - Valid: 8001015009087\n         * - Invalid: 8001015009287, 8001015009086\n         *\n         * @see http://en.wikipedia.org/wiki/National_identification_number#South_Africa\n         * @param {String} value The ID\n         * @returns {Boolean}\n         */\n        _za: function(value) {\n            if (!/^[0-9]{10}[0|1][8|9][0-9]$/.test(value)) {\n                return false;\n            }\n            var year        = parseInt(value.substr(0, 2), 10),\n                currentYear = new Date().getFullYear() % 100,\n                month       = parseInt(value.substr(2, 2), 10),\n                day         = parseInt(value.substr(4, 2), 10);\n            year = (year >= currentYear) ? (year + 1900) : (year + 2000);\n\n            if (!$.fn.bootstrapValidator.helpers.date(year, month, day)) {\n                return false;\n            }\n\n            // Validate the last check digit\n            return $.fn.bootstrapValidator.helpers.luhn(value);\n        }\n    };\n}(window.jQuery));\n;(function($) {\n    $.fn.bootstrapValidator.i18n.identical = $.extend($.fn.bootstrapValidator.i18n.identical || {}, {\n        'default': 'Please enter the same value'\n    });\n\n    $.fn.bootstrapValidator.validators.identical = {\n        html5Attributes: {\n            message: 'message',\n            field: 'field'\n        },\n\n        /**\n         * Check if input value equals to value of particular one\n         *\n         * @param {BootstrapValidator} validator The validator plugin instance\n         * @param {jQuery} $field Field element\n         * @param {Object} options Consists of the following key:\n         * - field: The name of field that will be used to compare with current one\n         * @returns {Boolean}\n         */\n        validate: function(validator, $field, options) {\n            var value = $field.val();\n            if (value === '') {\n                return true;\n            }\n\n            var compareWith = validator.getFieldElements(options.field);\n            if (compareWith === null || compareWith.length === 0) {\n                return true;\n            }\n\n            if (value === compareWith.val()) {\n                validator.updateStatus(options.field, validator.STATUS_VALID, 'identical');\n                return true;\n            } else {\n                return false;\n            }\n        }\n    };\n}(window.jQuery));\n;(function($) {\n    $.fn.bootstrapValidator.i18n.imei = $.extend($.fn.bootstrapValidator.i18n.imei || {}, {\n        'default': 'Please enter a valid IMEI number'\n    });\n\n    $.fn.bootstrapValidator.validators.imei = {\n        /**\n         * Validate IMEI (International Mobile Station Equipment Identity)\n         * Examples:\n         * - Valid: 35-209900-176148-1, 35-209900-176148-23, 3568680000414120, 490154203237518\n         * - Invalid: 490154203237517\n         *\n         * @see http://en.wikipedia.org/wiki/International_Mobile_Station_Equipment_Identity\n         * @param {BootstrapValidator} validator The validator plugin instance\n         * @param {jQuery} $field Field element\n         * @param {Object} options Can consist of the following keys:\n         * - message: The invalid message\n         * @returns {Boolean}\n         */\n        validate: function(validator, $field, options) {\n            var value = $field.val();\n            if (value === '') {\n                return true;\n            }\n\n            switch (true) {\n                case /^\\d{15}$/.test(value):\n                case /^\\d{2}-\\d{6}-\\d{6}-\\d{1}$/.test(value):\n                case /^\\d{2}\\s\\d{6}\\s\\d{6}\\s\\d{1}$/.test(value):\n                    value = value.replace(/[^0-9]/g, '');\n                    return $.fn.bootstrapValidator.helpers.luhn(value);\n\n                case /^\\d{14}$/.test(value):\n                case /^\\d{16}$/.test(value):\n                case /^\\d{2}-\\d{6}-\\d{6}(|-\\d{2})$/.test(value):\n                case /^\\d{2}\\s\\d{6}\\s\\d{6}(|\\s\\d{2})$/.test(value):\n                    return true;\n\n                default:\n                    return false;\n            }\n        }\n    };\n}(window.jQuery));\n;(function($) {\n    $.fn.bootstrapValidator.i18n.imo = $.extend($.fn.bootstrapValidator.i18n.imo || {}, {\n        'default': 'Please enter a valid IMO number'\n    });\n\n    $.fn.bootstrapValidator.validators.imo = {\n        /**\n         * Validate IMO (International Maritime Organization)\n         * Examples:\n         * - Valid: IMO 8814275, IMO 9176187\n         * - Invalid: IMO 8814274\n         *\n         * @see http://en.wikipedia.org/wiki/IMO_Number\n         * @param {BootstrapValidator} validator The validator plugin instance\n         * @param {jQuery} $field Field element\n         * @param {Object} options Can consist of the following keys:\n         * - message: The invalid message\n         * @returns {Boolean}\n         */\n        validate: function(validator, $field, options) {\n            var value = $field.val();\n            if (value === '') {\n                return true;\n            }\n\n            if (!/^IMO \\d{7}$/i.test(value)) {\n                return false;\n            }\n            \n            // Grab just the digits\n            var sum    = 0,\n                digits = value.replace(/^.*(\\d{7})$/, '$1');\n            \n            // Go over each char, multiplying by the inverse of it's position\n            // IMO 9176187\n            // (9 * 7) + (1 * 6) + (7 * 5) + (6 * 4) + (1 * 3) + (8 * 2) = 147\n            // Take the last digit of that, that's the check digit (7)\n            for (var i = 6; i >= 1; i--) {\n                sum += (digits.slice((6 - i), -i) * (i + 1));\n            }\n\n            return sum % 10 === parseInt(digits.charAt(6), 10);\n        }\n    };\n}(window.jQuery));\n;(function($) {\n    $.fn.bootstrapValidator.i18n.integer = $.extend($.fn.bootstrapValidator.i18n.integer || {}, {\n        'default': 'Please enter a valid number'\n    });\n\n    $.fn.bootstrapValidator.validators.integer = {\n        enableByHtml5: function($field) {\n            return ('number' === $field.attr('type')) && ($field.attr('step') === undefined || $field.attr('step') % 1 === 0);\n        },\n\n        /**\n         * Return true if the input value is an integer\n         *\n         * @param {BootstrapValidator} validator The validator plugin instance\n         * @param {jQuery} $field Field element\n         * @param {Object} options Can consist of the following key:\n         * - message: The invalid message\n         * @returns {Boolean}\n         */\n        validate: function(validator, $field, options) {\n            if (this.enableByHtml5($field) && $field.get(0).validity && $field.get(0).validity.badInput === true) {\n                return false;\n            }\n\n            var value = $field.val();\n            if (value === '') {\n                return true;\n            }\n            return /^(?:-?(?:0|[1-9][0-9]*))$/.test(value);\n        }\n    };\n}(window.jQuery));\n;(function($) {\n    $.fn.bootstrapValidator.i18n.ip = $.extend($.fn.bootstrapValidator.i18n.ip || {}, {\n        'default': 'Please enter a valid IP address',\n        ipv4: 'Please enter a valid IPv4 address',\n        ipv6: 'Please enter a valid IPv6 address'\n    });\n\n    $.fn.bootstrapValidator.validators.ip = {\n        html5Attributes: {\n            message: 'message',\n            ipv4: 'ipv4',\n            ipv6: 'ipv6'\n        },\n\n        /**\n         * Return true if the input value is a IP address.\n         *\n         * @param {BootstrapValidator} validator The validator plugin instance\n         * @param {jQuery} $field Field element\n         * @param {Object} options Can consist of the following keys:\n         * - ipv4: Enable IPv4 validator, default to true\n         * - ipv6: Enable IPv6 validator, default to true\n         * - message: The invalid message\n         * @returns {Boolean|Object}\n         */\n        validate: function(validator, $field, options) {\n            var value = $field.val();\n            if (value === '') {\n                return true;\n            }\n            options = $.extend({}, { ipv4: true, ipv6: true }, options);\n\n            var ipv4Regex = /^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/,\n                ipv6Regex = /^\\s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:)))(%.+)?\\s*$/,\n                valid     = false,\n                message;\n\n            switch (true) {\n                case (options.ipv4 && !options.ipv6):\n                    valid   = ipv4Regex.test(value);\n                    message = options.message || $.fn.bootstrapValidator.i18n.ip.ipv4;\n                    break;\n\n                case (!options.ipv4 && options.ipv6):\n                    valid   = ipv6Regex.test(value);\n                    message = options.message || $.fn.bootstrapValidator.i18n.ip.ipv6;\n                    break;\n\n                case (options.ipv4 && options.ipv6):\n                /* falls through */\n                default:\n                    valid   = ipv4Regex.test(value) || ipv6Regex.test(value);\n                    message = options.message || $.fn.bootstrapValidator.i18n.ip['default'];\n                    break;\n            }\n\n            return {\n                valid: valid,\n                message: message\n            };\n        }\n    };\n}(window.jQuery));;(function($) {\n    $.fn.bootstrapValidator.i18n.isbn = $.extend($.fn.bootstrapValidator.i18n.isbn || {}, {\n        'default': 'Please enter a valid ISBN number'\n    });\n\n    $.fn.bootstrapValidator.validators.isbn = {\n        /**\n         * Return true if the input value is a valid ISBN 10 or ISBN 13 number\n         * Examples:\n         * - Valid:\n         * ISBN 10: 99921-58-10-7, 9971-5-0210-0, 960-425-059-0, 80-902734-1-6, 85-359-0277-5, 1-84356-028-3, 0-684-84328-5, 0-8044-2957-X, 0-85131-041-9, 0-943396-04-2, 0-9752298-0-X\n         * ISBN 13: 978-0-306-40615-7\n         * - Invalid:\n         * ISBN 10: 99921-58-10-6\n         * ISBN 13: 978-0-306-40615-6\n         *\n         * @see http://en.wikipedia.org/wiki/International_Standard_Book_Number\n         * @param {BootstrapValidator} validator The validator plugin instance\n         * @param {jQuery} $field Field element\n         * @param {Object} [options] Can consist of the following keys:\n         * - message: The invalid message\n         * @returns {Boolean}\n         */\n        validate: function(validator, $field, options) {\n            var value = $field.val();\n            if (value === '') {\n                return true;\n            }\n\n            // http://en.wikipedia.org/wiki/International_Standard_Book_Number#Overview\n            // Groups are separated by a hyphen or a space\n            var type;\n            switch (true) {\n                case /^\\d{9}[\\dX]$/.test(value):\n                case (value.length === 13 && /^(\\d+)-(\\d+)-(\\d+)-([\\dX])$/.test(value)):\n                case (value.length === 13 && /^(\\d+)\\s(\\d+)\\s(\\d+)\\s([\\dX])$/.test(value)):\n                    type = 'ISBN10';\n                    break;\n                case /^(978|979)\\d{9}[\\dX]$/.test(value):\n                case (value.length === 17 && /^(978|979)-(\\d+)-(\\d+)-(\\d+)-([\\dX])$/.test(value)):\n                case (value.length === 17 && /^(978|979)\\s(\\d+)\\s(\\d+)\\s(\\d+)\\s([\\dX])$/.test(value)):\n                    type = 'ISBN13';\n                    break;\n                default:\n                    return false;\n            }\n\n            // Replace all special characters except digits and X\n            value = value.replace(/[^0-9X]/gi, '');\n            var chars  = value.split(''),\n                length = chars.length,\n                sum    = 0,\n                i,\n                checksum;\n\n            switch (type) {\n                case 'ISBN10':\n                    sum = 0;\n                    for (i = 0; i < length - 1; i++) {\n                        sum += parseInt(chars[i], 10) * (10 - i);\n                    }\n                    checksum = 11 - (sum % 11);\n                    if (checksum === 11) {\n                        checksum = 0;\n                    } else if (checksum === 10) {\n                        checksum = 'X';\n                    }\n                    return (checksum + '' === chars[length - 1]);\n\n                case 'ISBN13':\n                    sum = 0;\n                    for (i = 0; i < length - 1; i++) {\n                        sum += ((i % 2 === 0) ? parseInt(chars[i], 10) : (parseInt(chars[i], 10) * 3));\n                    }\n                    checksum = 10 - (sum % 10);\n                    if (checksum === 10) {\n                        checksum = '0';\n                    }\n                    return (checksum + '' === chars[length - 1]);\n\n                default:\n                    return false;\n            }\n        }\n    };\n}(window.jQuery));\n;(function($) {\n    $.fn.bootstrapValidator.i18n.isin = $.extend($.fn.bootstrapValidator.i18n.isin || {}, {\n        'default': 'Please enter a valid ISIN number'\n    });\n\n    $.fn.bootstrapValidator.validators.isin = {\n        // Available country codes\n        // See http://isin.net/country-codes/\n        COUNTRY_CODES: 'AF|AX|AL|DZ|AS|AD|AO|AI|AQ|AG|AR|AM|AW|AU|AT|AZ|BS|BH|BD|BB|BY|BE|BZ|BJ|BM|BT|BO|BQ|BA|BW|BV|BR|IO|BN|BG|BF|BI|KH|CM|CA|CV|KY|CF|TD|CL|CN|CX|CC|CO|KM|CG|CD|CK|CR|CI|HR|CU|CW|CY|CZ|DK|DJ|DM|DO|EC|EG|SV|GQ|ER|EE|ET|FK|FO|FJ|FI|FR|GF|PF|TF|GA|GM|GE|DE|GH|GI|GR|GL|GD|GP|GU|GT|GG|GN|GW|GY|HT|HM|VA|HN|HK|HU|IS|IN|ID|IR|IQ|IE|IM|IL|IT|JM|JP|JE|JO|KZ|KE|KI|KP|KR|KW|KG|LA|LV|LB|LS|LR|LY|LI|LT|LU|MO|MK|MG|MW|MY|MV|ML|MT|MH|MQ|MR|MU|YT|MX|FM|MD|MC|MN|ME|MS|MA|MZ|MM|NA|NR|NP|NL|NC|NZ|NI|NE|NG|NU|NF|MP|NO|OM|PK|PW|PS|PA|PG|PY|PE|PH|PN|PL|PT|PR|QA|RE|RO|RU|RW|BL|SH|KN|LC|MF|PM|VC|WS|SM|ST|SA|SN|RS|SC|SL|SG|SX|SK|SI|SB|SO|ZA|GS|SS|ES|LK|SD|SR|SJ|SZ|SE|CH|SY|TW|TJ|TZ|TH|TL|TG|TK|TO|TT|TN|TR|TM|TC|TV|UG|UA|AE|GB|US|UM|UY|UZ|VU|VE|VN|VG|VI|WF|EH|YE|ZM|ZW',\n\n        /**\n         * Validate an ISIN (International Securities Identification Number)\n         * Examples:\n         * - Valid: US0378331005, AU0000XVGZA3, GB0002634946\n         * - Invalid: US0378331004, AA0000XVGZA3\n         *\n         * @see http://en.wikipedia.org/wiki/International_Securities_Identifying_Number\n         * @param {BootstrapValidator} validator The validator plugin instance\n         * @param {jQuery} $field Field element\n         * @param {Object} options Can consist of the following keys:\n         * - message: The invalid message\n         * @returns {Boolean}\n         */\n        validate: function(validator, $field, options) {\n            var value = $field.val();\n            if (value === '') {\n                return true;\n            }\n\n            value = value.toUpperCase();\n            var regex = new RegExp('^(' + this.COUNTRY_CODES + ')[0-9A-Z]{10}$');\n            if (!regex.test(value)) {\n                return false;\n            }\n\n            var converted = '',\n                length    = value.length;\n            // Convert letters to number\n            for (var i = 0; i < length - 1; i++) {\n                var c = value.charCodeAt(i);\n                converted += ((c > 57) ? (c - 55).toString() : value.charAt(i));\n            }\n\n            var digits = '',\n                n      = converted.length,\n                group  = (n % 2 !== 0) ? 0 : 1;\n            for (i = 0; i < n; i++) {\n                digits += (parseInt(converted[i], 10) * ((i % 2) === group ? 2 : 1) + '');\n            }\n\n            var sum = 0;\n            for (i = 0; i < digits.length; i++) {\n                sum += parseInt(digits.charAt(i), 10);\n            }\n            sum = (10 - (sum % 10)) % 10;\n            return sum + '' === value.charAt(length - 1);\n        }\n    };\n}(window.jQuery));\n;(function($) {\n    $.fn.bootstrapValidator.i18n.ismn = $.extend($.fn.bootstrapValidator.i18n.ismn || {}, {\n        'default': 'Please enter a valid ISMN number'\n    });\n\n    $.fn.bootstrapValidator.validators.ismn = {\n        /**\n         * Validate ISMN (International Standard Music Number)\n         * Examples:\n         * - Valid: M230671187, 979-0-0601-1561-5, 979 0 3452 4680 5, 9790060115615\n         * - Invalid: 9790060115614\n         *\n         * @see http://en.wikipedia.org/wiki/International_Standard_Music_Number\n         * @param {BootstrapValidator} validator The validator plugin instance\n         * @param {jQuery} $field Field element\n         * @param {Object} options Can consist of the following keys:\n         * - message: The invalid message\n         * @returns {Boolean}\n         */\n        validate: function(validator, $field, options) {\n            var value = $field.val();\n            if (value === '') {\n                return true;\n            }\n\n            // Groups are separated by a hyphen or a space\n            var type;\n            switch (true) {\n                case /^M\\d{9}$/.test(value):\n                case /^M-\\d{4}-\\d{4}-\\d{1}$/.test(value):\n                case /^M\\s\\d{4}\\s\\d{4}\\s\\d{1}$/.test(value):\n                    type = 'ISMN10';\n                    break;\n                case /^9790\\d{9}$/.test(value):\n                case /^979-0-\\d{4}-\\d{4}-\\d{1}$/.test(value):\n                case /^979\\s0\\s\\d{4}\\s\\d{4}\\s\\d{1}$/.test(value):\n                    type = 'ISMN13';\n                    break;\n                default:\n                    return false;\n            }\n\n            if ('ISMN10' === type) {\n                value = '9790' + value.substr(1);\n            }\n\n            // Replace all special characters except digits\n            value = value.replace(/[^0-9]/gi, '');\n            var length = value.length,\n                sum    = 0,\n                weight = [1, 3];\n            for (var i = 0; i < length - 1; i++) {\n                sum += parseInt(value.charAt(i), 10) * weight[i % 2];\n            }\n            sum = 10 - sum % 10;\n            return (sum + '' === value.charAt(length - 1));\n        }\n    };\n}(window.jQuery));\n;(function($) {\n    $.fn.bootstrapValidator.i18n.issn = $.extend($.fn.bootstrapValidator.i18n.issn || {}, {\n        'default': 'Please enter a valid ISSN number'\n    });\n\n    $.fn.bootstrapValidator.validators.issn = {\n        /**\n         * Validate ISSN (International Standard Serial Number)\n         * Examples:\n         * - Valid: 0378-5955, 0024-9319, 0032-1478\n         * - Invalid: 0032-147X\n         *\n         * @see http://en.wikipedia.org/wiki/International_Standard_Serial_Number\n         * @param {BootstrapValidator} validator The validator plugin instance\n         * @param {jQuery} $field Field element\n         * @param {Object} options Can consist of the following keys:\n         * - message: The invalid message\n         * @returns {Boolean}\n         */\n        validate: function(validator, $field, options) {\n            var value = $field.val();\n            if (value === '') {\n                return true;\n            }\n\n            // Groups are separated by a hyphen or a space\n            if (!/^\\d{4}\\-\\d{3}[\\dX]$/.test(value)) {\n                return false;\n            }\n\n            // Replace all special characters except digits and X\n            value = value.replace(/[^0-9X]/gi, '');\n            var chars  = value.split(''),\n                length = chars.length,\n                sum    = 0;\n\n            if (chars[7] === 'X') {\n                chars[7] = 10;\n            }\n            for (var i = 0; i < length; i++) {\n                sum += parseInt(chars[i], 10) * (8 - i);\n            }\n            return (sum % 11 === 0);\n        }\n    };\n}(window.jQuery));\n;(function($) {\n    $.fn.bootstrapValidator.i18n.lessThan = $.extend($.fn.bootstrapValidator.i18n.lessThan || {}, {\n        'default': 'Please enter a value less than or equal to %s',\n        notInclusive: 'Please enter a value less than %s'\n    });\n\n    $.fn.bootstrapValidator.validators.lessThan = {\n        html5Attributes: {\n            message: 'message',\n            value: 'value',\n            inclusive: 'inclusive'\n        },\n\n        enableByHtml5: function($field) {\n            var type = $field.attr('type'),\n                max  = $field.attr('max');\n            if (max && type !== 'date') {\n                return {\n                    value: max\n                };\n            }\n\n            return false;\n        },\n\n        /**\n         * Return true if the input value is less than or equal to given number\n         *\n         * @param {BootstrapValidator} validator The validator plugin instance\n         * @param {jQuery} $field Field element\n         * @param {Object} options Can consist of the following keys:\n         * - value: The number used to compare to. It can be\n         *      - A number\n         *      - Name of field which its value defines the number\n         *      - Name of callback function that returns the number\n         *      - A callback function that returns the number\n         *\n         * - inclusive [optional]: Can be true or false. Default is true\n         * - message: The invalid message\n         * @returns {Boolean|Object}\n         */\n        validate: function(validator, $field, options) {\n            var value = $field.val();\n            if (value === '') {\n                return true;\n            }\n            \n\t\t\tvalue = this._format(value);\n            if (!$.isNumeric(value)) {\n                return false;\n            }\n\n            var compareTo      = $.isNumeric(options.value) ? options.value : validator.getDynamicOption($field, options.value),\n                compareToValue = this._format(compareTo);\n\n            value = parseFloat(value);\n            return (options.inclusive === true || options.inclusive === undefined)\n                    ? {\n                        valid: value <= compareToValue,\n                        message: $.fn.bootstrapValidator.helpers.format(options.message || $.fn.bootstrapValidator.i18n.lessThan['default'], compareTo)\n                    }\n                    : {\n                        valid: value < compareToValue,\n                        message: $.fn.bootstrapValidator.helpers.format(options.message || $.fn.bootstrapValidator.i18n.lessThan.notInclusive, compareTo)\n                    };\n        },\n\n        _format: function(value) {\n            return (value + '').replace(',', '.');\n        }\n    };\n}(window.jQuery));\n;(function($) {\n    $.fn.bootstrapValidator.i18n.mac = $.extend($.fn.bootstrapValidator.i18n.mac || {}, {\n        'default': 'Please enter a valid MAC address'\n    });\n\n    $.fn.bootstrapValidator.validators.mac = {\n        /**\n         * Return true if the input value is a MAC address.\n         *\n         * @param {BootstrapValidator} validator The validator plugin instance\n         * @param {jQuery} $field Field element\n         * @param {Object} options Can consist of the following keys:\n         * - message: The invalid message\n         * @returns {Boolean}\n         */\n        validate: function(validator, $field, options) {\n            var value = $field.val();\n            if (value === '') {\n                return true;\n            }\n\n            return /^([0-9A-F]{2}[:-]){5}([0-9A-F]{2})$/.test(value);\n        }\n    };\n}(window.jQuery));\n;(function($) {\n    $.fn.bootstrapValidator.i18n.meid = $.extend($.fn.bootstrapValidator.i18n.meid || {}, {\n        'default': 'Please enter a valid MEID number'\n    });\n\n    $.fn.bootstrapValidator.validators.meid = {\n        /**\n         * Validate MEID (Mobile Equipment Identifier)\n         * Examples:\n         * - Valid: 293608736500703710, 29360-87365-0070-3710, AF0123450ABCDE, AF-012345-0ABCDE\n         * - Invalid: 2936087365007037101\n         *\n         * @see http://en.wikipedia.org/wiki/Mobile_equipment_identifier\n         * @param {BootstrapValidator} validator The validator plugin instance\n         * @param {jQuery} $field Field element\n         * @param {Object} options Can consist of the following keys:\n         * - message: The invalid message\n         * @returns {Boolean}\n         */\n        validate: function(validator, $field, options) {\n            var value = $field.val();\n            if (value === '') {\n                return true;\n            }\n\n            switch (true) {\n                // 14 digit hex representation (no check digit)\n                case /^[0-9A-F]{15}$/i.test(value):\n                // 14 digit hex representation + dashes or spaces (no check digit)\n                case /^[0-9A-F]{2}[- ][0-9A-F]{6}[- ][0-9A-F]{6}[- ][0-9A-F]$/i.test(value):\n                // 18 digit decimal representation (no check digit)\n                case /^\\d{19}$/.test(value):\n                // 18 digit decimal representation + dashes or spaces (no check digit)\n                case /^\\d{5}[- ]\\d{5}[- ]\\d{4}[- ]\\d{4}[- ]\\d$/.test(value):\n                    // Grab the check digit\n                    var cd = value.charAt(value.length - 1);\n\n                    // Strip any non-hex chars\n                    value = value.replace(/[- ]/g, '');\n\n                    // If it's all digits, luhn base 10 is used\n                    if (value.match(/^\\d*$/i)) {\n                        return $.fn.bootstrapValidator.helpers.luhn(value);\n                    }\n\n                    // Strip the check digit\n                    value = value.slice(0, -1);\n\n                    // Get every other char, and double it\n                    var cdCalc = '';\n                    for (var i = 1; i <= 13; i += 2) {\n                        cdCalc += (parseInt(value.charAt(i), 16) * 2).toString(16);\n                    }\n\n                    // Get the sum of each char in the string\n                    var sum = 0;\n                    for (i = 0; i < cdCalc.length; i++) {\n                        sum += parseInt(cdCalc.charAt(i), 16);\n                    }\n\n                    // If the last digit of the calc is 0, the check digit is 0\n                    return (sum % 10 === 0)\n                            ? (cd === '0')\n                            // Subtract it from the next highest 10s number (64 goes to 70) and subtract the sum\n                            // Double it and turn it into a hex char\n                            : (cd === ((Math.floor((sum + 10) / 10) * 10 - sum) * 2).toString(16));\n\n                // 14 digit hex representation (no check digit)\n                case /^[0-9A-F]{14}$/i.test(value):\n                // 14 digit hex representation + dashes or spaces (no check digit)\n                case /^[0-9A-F]{2}[- ][0-9A-F]{6}[- ][0-9A-F]{6}$/i.test(value):\n                // 18 digit decimal representation (no check digit)\n                case /^\\d{18}$/.test(value):\n                // 18 digit decimal representation + dashes or spaces (no check digit)\n                case /^\\d{5}[- ]\\d{5}[- ]\\d{4}[- ]\\d{4}$/.test(value):\n                    return true;\n\n                default:\n                    return false;\n            }\n        }\n    };\n}(window.jQuery));\n;(function($) {\n    $.fn.bootstrapValidator.i18n.notEmpty = $.extend($.fn.bootstrapValidator.i18n.notEmpty || {}, {\n        'default': 'Please enter a value'\n    });\n\n    $.fn.bootstrapValidator.validators.notEmpty = {\n        enableByHtml5: function($field) {\n            var required = $field.attr('required') + '';\n            return ('required' === required || 'true' === required);\n        },\n\n        /**\n         * Check if input value is empty or not\n         *\n         * @param {BootstrapValidator} validator The validator plugin instance\n         * @param {jQuery} $field Field element\n         * @param {Object} options\n         * @returns {Boolean}\n         */\n        validate: function(validator, $field, options) {\n            var type = $field.attr('type');\n            if ('radio' === type || 'checkbox' === type) {\n                return validator\n                            .getFieldElements($field.attr('data-bv-field'))\n                            .filter(':checked')\n                            .length > 0;\n            }\n\n            if ('number' === type && $field.get(0).validity && $field.get(0).validity.badInput === true) {\n                return true;\n            }\n\n            return $.trim($field.val()) !== '';\n        }\n    };\n}(window.jQuery));\n;(function($) {\n    $.fn.bootstrapValidator.i18n.numeric = $.extend($.fn.bootstrapValidator.i18n.numeric || {}, {\n        'default': 'Please enter a valid float number'\n    });\n\n    $.fn.bootstrapValidator.validators.numeric = {\n        html5Attributes: {\n            message: 'message',\n            separator: 'separator'\n        },\n\n        enableByHtml5: function($field) {\n            return ('number' === $field.attr('type')) && ($field.attr('step') !== undefined) && ($field.attr('step') % 1 !== 0);\n        },\n\n        /**\n         * Validate decimal number\n         *\n         * @param {BootstrapValidator} validator The validator plugin instance\n         * @param {jQuery} $field Field element\n         * @param {Object} options Consist of key:\n         * - message: The invalid message\n         * - separator: The decimal separator. Can be \".\" (default), \",\"\n         * @returns {Boolean}\n         */\n        validate: function(validator, $field, options) {\n            if (this.enableByHtml5($field) && $field.get(0).validity && $field.get(0).validity.badInput === true) {\n                return false;\n            }\n\n            var value = $field.val();\n            if (value === '') {\n                return true;\n            }\n            var separator = options.separator || '.';\n            if (separator !== '.') {\n                value = value.replace(separator, '.');\n            }\n\n            return !isNaN(parseFloat(value)) && isFinite(value);\n        }\n    };\n}(window.jQuery));\n;(function($) {\n    $.fn.bootstrapValidator.i18n.phone = $.extend($.fn.bootstrapValidator.i18n.phone || {}, {\n        'default': 'Please enter a valid phone number',\n        countryNotSupported: 'The country code %s is not supported',\n        country: 'Please enter a valid phone number in %s',\n        countries: {\n            BR: 'Brazil',\n            CN: 'China',\n            CZ: 'Czech Republic',\n            DE: 'Germany',\n            DK: 'Denmark',\n            ES: 'Spain',\n            FR: 'France',\n            GB: 'United Kingdom',\n            MA: 'Morocco',\n            PK: 'Pakistan',\n            RO: 'Romania',\n            RU: 'Russia',\n            SK: 'Slovakia',\n            TH: 'Thailand',\n            US: 'USA',\n            VE: 'Venezuela'\n        }\n    });\n\n    $.fn.bootstrapValidator.validators.phone = {\n        html5Attributes: {\n            message: 'message',\n            country: 'country'\n        },\n\n        // The supported countries\n        COUNTRY_CODES: ['BR', 'CN', 'CZ', 'DE', 'DK', 'ES', 'FR', 'GB', 'MA', 'PK', 'RO', 'RU', 'SK', 'TH', 'US', 'VE'],\n\n        /**\n         * Return true if the input value contains a valid phone number for the country\n         * selected in the options\n         *\n         * @param {BootstrapValidator} validator Validate plugin instance\n         * @param {jQuery} $field Field element\n         * @param {Object} options Consist of key:\n         * - message: The invalid message\n         * - country: The ISO-3166 country code. It can be\n         *      - A country code\n         *      - Name of field which its value defines the country code\n         *      - Name of callback function that returns the country code\n         *      - A callback function that returns the country code\n         *\n         * @returns {Boolean|Object}\n         */\n        validate: function(validator, $field, options) {\n            var value = $field.val();\n            if (value === '') {\n                return true;\n            }\n\n            var country = options.country;\n            if (typeof country !== 'string' || $.inArray(country, this.COUNTRY_CODES) === -1) {\n                // Try to determine the country\n                country = validator.getDynamicOption($field, country);\n            }\n\n            if (!country || $.inArray(country.toUpperCase(), this.COUNTRY_CODES) === -1) {\n                return {\n                    valid: false,\n                    message: $.fn.bootstrapValidator.helpers.format($.fn.bootstrapValidator.i18n.phone.countryNotSupported, country)\n                };\n            }\n\n            var isValid = true;\n            switch (country.toUpperCase()) {\n                case 'BR':\n                    // Test: http://regexr.com/399m1\n                    value   = $.trim(value);\n                    isValid = (/^(([\\d]{4}[-.\\s]{1}[\\d]{2,3}[-.\\s]{1}[\\d]{2}[-.\\s]{1}[\\d]{2})|([\\d]{4}[-.\\s]{1}[\\d]{3}[-.\\s]{1}[\\d]{4})|((\\(?\\+?[0-9]{2}\\)?\\s?)?(\\(?\\d{2}\\)?\\s?)?\\d{4,5}[-.\\s]?\\d{4}))$/).test(value);\n                    break;\n\n                case 'CN':\n                    // http://regexr.com/39dq4\n                    value   = $.trim(value);\n                    isValid = (/^((00|\\+)?(86(?:-| )))?((\\d{11})|(\\d{3}[- ]{1}\\d{4}[- ]{1}\\d{4})|((\\d{2,4}[- ]){1}(\\d{7,8}|(\\d{3,4}[- ]{1}\\d{4}))([- ]{1}\\d{1,4})?))$/).test(value);\n                    break;\n\n                case 'CZ':\n                    // Test: http://regexr.com/39hhl\n                    isValid = /^(((00)([- ]?)|\\+)(420)([- ]?))?((\\d{3})([- ]?)){2}(\\d{3})$/.test(value);\n                    break;\n\n                case 'DE':\n                    // Test: http://regexr.com/39pkg\n                    value   = $.trim(value);\n                    isValid = (/^(((((((00|\\+)49[ \\-/]?)|0)[1-9][0-9]{1,4})[ \\-/]?)|((((00|\\+)49\\()|\\(0)[1-9][0-9]{1,4}\\)[ \\-/]?))[0-9]{1,7}([ \\-/]?[0-9]{1,5})?)$/).test(value);\n                    break;\n\n                case 'DK':\n                    // Mathing DK phone numbers with country code in 1 of 3 formats and an\n                    // 8 digit phone number not starting with a 0 or 1. Can have 1 space\n                    // between each character except inside the country code.\n                    // Test: http://regex101.com/r/sS8fO4/1\n                    value   = $.trim(value);\n                    isValid = (/^(\\+45|0045|\\(45\\))?\\s?[2-9](\\s?\\d){7}$/).test(value);\n                    break;\n\n                case 'ES':\n                    // http://regex101.com/r/rB9mA9/1\n                    value   = $.trim(value);\n                    isValid = (/^(?:(?:(?:\\+|00)34\\D?))?(?:9|6)(?:\\d\\D?){8}$/).test(value);\n                    break;\n\n                case 'FR':\n                    // http://regexr.com/39a2p\n                    value   = $.trim(value);\n                    isValid = (/^(?:(?:(?:\\+|00)33[ ]?(?:\\(0\\)[ ]?)?)|0){1}[1-9]{1}([ .-]?)(?:\\d{2}\\1?){3}\\d{2}$/).test(value);\n                    break;\n\n            \tcase 'GB':\n            \t\t// http://aa-asterisk.org.uk/index.php/Regular_Expressions_for_Validating_and_Formatting_GB_Telephone_Numbers#Match_GB_telephone_number_in_any_format\n            \t\t// Test: http://regexr.com/38uhv\n            \t\tvalue   = $.trim(value);\n            \t\tisValid = (/^\\(?(?:(?:0(?:0|11)\\)?[\\s-]?\\(?|\\+)44\\)?[\\s-]?\\(?(?:0\\)?[\\s-]?\\(?)?|0)(?:\\d{2}\\)?[\\s-]?\\d{4}[\\s-]?\\d{4}|\\d{3}\\)?[\\s-]?\\d{3}[\\s-]?\\d{3,4}|\\d{4}\\)?[\\s-]?(?:\\d{5}|\\d{3}[\\s-]?\\d{3})|\\d{5}\\)?[\\s-]?\\d{4,5}|8(?:00[\\s-]?11[\\s-]?11|45[\\s-]?46[\\s-]?4\\d))(?:(?:[\\s-]?(?:x|ext\\.?\\s?|\\#)\\d+)?)$/).test(value);\n                    break;\n\n                case 'MA':\n                    // http://en.wikipedia.org/wiki/Telephone_numbers_in_Morocco\n                    // Test: http://regexr.com/399n8\n                    value   = $.trim(value);\n                    isValid = (/^(?:(?:(?:\\+|00)212[\\s]?(?:[\\s]?\\(0\\)[\\s]?)?)|0){1}(?:5[\\s.-]?[2-3]|6[\\s.-]?[13-9]){1}[0-9]{1}(?:[\\s.-]?\\d{2}){3}$/).test(value);\n                    break;\n\n                case 'PK':\n                    // http://regex101.com/r/yH8aV9/2\n                    value   = $.trim(value);\n                    isValid = (/^0?3[0-9]{2}[0-9]{7}$/).test(value);\n                    break;\n\n        \t\tcase 'RO':\n        \t\t    // All mobile network and land line\n                    // http://regexr.com/39fv1\n        \t\t    isValid = (/^(\\+4|)?(07[0-8]{1}[0-9]{1}|02[0-9]{2}|03[0-9]{2}){1}?(\\s|\\.|\\-)?([0-9]{3}(\\s|\\.|\\-|)){2}$/g).test(value);\n        \t\t    break;\n\n                case 'RU':\n                    // http://regex101.com/r/gW7yT5/5\n                    isValid = (/^((8|\\+7|007)[\\-\\.\\/ ]?)?([\\(\\/\\.]?\\d{3}[\\)\\/\\.]?[\\-\\.\\/ ]?)?[\\d\\-\\.\\/ ]{7,10}$/g).test(value);\n                    break;\n\n                case 'SK':\n                    // Test: http://regexr.com/39hhl\n                    isValid = /^(((00)([- ]?)|\\+)(420)([- ]?))?((\\d{3})([- ]?)){2}(\\d{3})$/.test(value);\n                    break;\n\n                case 'TH':\n        \t\t    // http://regex101.com/r/vM5mZ4/2\n        \t\t    isValid = (/^0\\(?([6|8-9]{2})*-([0-9]{3})*-([0-9]{4})$/).test(value);\n        \t\t    break;\n\n                case 'VE':\n                    // http://regex101.com/r/eM2yY0/6\n                    value   = $.trim(value);\n                    isValid = (/^0(?:2(?:12|4[0-9]|5[1-9]|6[0-9]|7[0-8]|8[1-35-8]|9[1-5]|3[45789])|4(?:1[246]|2[46]))\\d{7}$/).test(value);\n                    break;\n\n                case 'US':\n                /* falls through */\n                default:\n                    // Make sure US phone numbers have 10 digits\n                    // May start with 1, +1, or 1-; should discard\n                    // Area code may be delimited with (), & sections may be delimited with . or -\n                    // Test: http://regexr.com/38mqi\n                    value   = value.replace(/\\D/g, '');\n                    isValid = (/^(?:(1\\-?)|(\\+1 ?))?\\(?(\\d{3})[\\)\\-\\.]?(\\d{3})[\\-\\.]?(\\d{4})$/).test(value) && (value.length === 10);\n                    break;\n            }\n\n            return {\n                valid: isValid,\n                message: $.fn.bootstrapValidator.helpers.format(options.message || $.fn.bootstrapValidator.i18n.phone.country, $.fn.bootstrapValidator.i18n.phone.countries[country])\n            };\n        }\n    };\n}(window.jQuery));\n;(function($) {\n    $.fn.bootstrapValidator.i18n.regexp = $.extend($.fn.bootstrapValidator.i18n.regexp || {}, {\n        'default': 'Please enter a value matching the pattern'\n    });\n\n    $.fn.bootstrapValidator.validators.regexp = {\n        html5Attributes: {\n            message: 'message',\n            regexp: 'regexp'\n        },\n\n        enableByHtml5: function($field) {\n            var pattern = $field.attr('pattern');\n            if (pattern) {\n                return {\n                    regexp: pattern\n                };\n            }\n\n            return false;\n        },\n\n        /**\n         * Check if the element value matches given regular expression\n         *\n         * @param {BootstrapValidator} validator The validator plugin instance\n         * @param {jQuery} $field Field element\n         * @param {Object} options Consists of the following key:\n         * - regexp: The regular expression you need to check\n         * @returns {Boolean}\n         */\n        validate: function(validator, $field, options) {\n            var value = $field.val();\n            if (value === '') {\n                return true;\n            }\n\n            var regexp = ('string' === typeof options.regexp) ? new RegExp(options.regexp) : options.regexp;\n            return regexp.test(value);\n        }\n    };\n}(window.jQuery));\n;(function($) {\n    $.fn.bootstrapValidator.i18n.remote = $.extend($.fn.bootstrapValidator.i18n.remote || {}, {\n        'default': 'Please enter a valid value'\n    });\n\n    $.fn.bootstrapValidator.validators.remote = {\n        html5Attributes: {\n            message: 'message',\n            name: 'name',\n            type: 'type',\n            url: 'url',\n            data: 'data',\n            delay: 'delay'\n        },\n\n        /**\n         * Destroy the timer when destroying the bootstrapValidator (using validator.destroy() method)\n         */\n        destroy: function(validator, $field, options) {\n            if ($field.data('bv.remote.timer')) {\n                clearTimeout($field.data('bv.remote.timer'));\n                $field.removeData('bv.remote.timer');\n            }\n        },\n\n        /**\n         * Request a remote server to check the input value\n         *\n         * @param {BootstrapValidator} validator Plugin instance\n         * @param {jQuery} $field Field element\n         * @param {Object} options Can consist of the following keys:\n         * - url {String|Function}\n         * - type {String} [optional] Can be GET or POST (default)\n         * - data {Object|Function} [optional]: By default, it will take the value\n         *  {\n         *      <fieldName>: <fieldValue>\n         *  }\n         * - delay\n         * - name {String} [optional]: Override the field name for the request.\n         * - message: The invalid message\n         * - headers: Additional headers\n         * @returns {Deferred}\n         */\n        validate: function(validator, $field, options) {\n            var value = $field.val(),\n                dfd   = new $.Deferred();\n            if (value === '') {\n                dfd.resolve($field, 'remote', { valid: true });\n                return dfd;\n            }\n\n            var name    = $field.attr('data-bv-field'),\n                data    = options.data || {},\n                url     = options.url,\n                type    = options.type || 'GET',\n                headers = options.headers || {};\n\n            // Support dynamic data\n            if ('function' === typeof data) {\n                data = data.call(this, validator);\n            }\n\n            // Parse string data from HTML5 attribute\n            if ('string' === typeof data) {\n                data = JSON.parse(data);\n            }\n\n            // Support dynamic url\n            if ('function' === typeof url) {\n                url = url.call(this, validator);\n            }\n\n            data[options.name || name] = value;\n            function runCallback() {\n                var xhr = $.ajax({\n                    type: type,\n                    headers: headers,\n                    url: url,\n                    dataType: 'json',\n                    data: data\n                });\n                xhr.then(function(response) {\n                    response.valid = response.valid === true || response.valid === 'true';\n                    dfd.resolve($field, 'remote', response);\n                });\n\n                dfd.fail(function() {\n                    xhr.abort();\n                });\n\n                return dfd;\n            }\n            \n            if (options.delay) {\n                // Since the form might have multiple fields with the same name\n                // I have to attach the timer to the field element\n                if ($field.data('bv.remote.timer')) {\n                    clearTimeout($field.data('bv.remote.timer'));\n                }\n\n                $field.data('bv.remote.timer', setTimeout(runCallback, options.delay));\n                return dfd;\n            } else {\n                return runCallback();\n            }\n        }\n    };\n}(window.jQuery));\n;(function($) {\n    $.fn.bootstrapValidator.i18n.rtn = $.extend($.fn.bootstrapValidator.i18n.rtn || {}, {\n        'default': 'Please enter a valid RTN number'\n    });\n\n    $.fn.bootstrapValidator.validators.rtn = {\n        /**\n         * Validate a RTN (Routing transit number)\n         * Examples:\n         * - Valid: 021200025, 789456124\n         *\n         * @see http://en.wikipedia.org/wiki/Routing_transit_number\n         * @param {BootstrapValidator} validator The validator plugin instance\n         * @param {jQuery} $field Field element\n         * @param {Object} options Can consist of the following keys:\n         * - message: The invalid message\n         * @returns {Boolean}\n         */\n        validate: function(validator, $field, options) {\n            var value = $field.val();\n            if (value === '') {\n                return true;\n            }\n\n            if (!/^\\d{9}$/.test(value)) {\n                return false;\n            }\n\n            var sum = 0;\n            for (var i = 0; i < value.length; i += 3) {\n                sum += parseInt(value.charAt(i),     10) * 3\n                    +  parseInt(value.charAt(i + 1), 10) * 7\n                    +  parseInt(value.charAt(i + 2), 10);\n            }\n            return (sum !== 0 && sum % 10 === 0);\n        }\n    };\n}(window.jQuery));\n;(function($) {\n    $.fn.bootstrapValidator.i18n.sedol = $.extend($.fn.bootstrapValidator.i18n.sedol || {}, {\n        'default': 'Please enter a valid SEDOL number'\n    });\n\n    $.fn.bootstrapValidator.validators.sedol = {\n        /**\n         * Validate a SEDOL (Stock Exchange Daily Official List)\n         * Examples:\n         * - Valid: 0263494, B0WNLY7\n         *\n         * @see http://en.wikipedia.org/wiki/SEDOL\n         * @param {BootstrapValidator} validator The validator plugin instance\n         * @param {jQuery} $field Field element\n         * @param {Object} options Can consist of the following keys:\n         * - message: The invalid message\n         * @returns {Boolean}\n         */\n        validate: function(validator, $field, options) {\n            var value = $field.val();\n            if (value === '') {\n                return true;\n            }\n\n            value = value.toUpperCase();\n            if (!/^[0-9A-Z]{7}$/.test(value)) {\n                return false;\n            }\n\n            var sum    = 0,\n                weight = [1, 3, 1, 7, 3, 9, 1],\n                length = value.length;\n            for (var i = 0; i < length - 1; i++) {\n\t            sum += weight[i] * parseInt(value.charAt(i), 36);\n\t        }\n\t        sum = (10 - sum % 10) % 10;\n            return sum + '' === value.charAt(length - 1);\n        }\n    };\n}(window.jQuery));\n;(function($) {\n    $.fn.bootstrapValidator.i18n.siren = $.extend($.fn.bootstrapValidator.i18n.siren || {}, {\n        'default': 'Please enter a valid SIREN number'\n    });\n\n\t$.fn.bootstrapValidator.validators.siren = {\n\t\t/**\n\t\t * Check if a string is a siren number\n\t\t *\n\t\t * @param {BootstrapValidator} validator The validator plugin instance\n\t\t * @param {jQuery} $field Field element\n\t\t * @param {Object} options Consist of key:\n         * - message: The invalid message\n\t\t * @returns {Boolean}\n\t\t */\n\t\tvalidate: function(validator, $field, options) {\n\t\t\tvar value = $field.val();\n\t\t\tif (value === '') {\n\t\t\t\treturn true;\n\t\t\t}\n\n            if (!/^\\d{9}$/.test(value)) {\n                return false;\n            }\n            return $.fn.bootstrapValidator.helpers.luhn(value);\n\t\t}\n\t};\n}(window.jQuery));\n;(function($) {\n    $.fn.bootstrapValidator.i18n.siret = $.extend($.fn.bootstrapValidator.i18n.siret || {}, {\n        'default': 'Please enter a valid SIRET number'\n    });\n\n\t$.fn.bootstrapValidator.validators.siret = {\n        /**\n         * Check if a string is a siret number\n         *\n         * @param {BootstrapValidator} validator The validator plugin instance\n         * @param {jQuery} $field Field element\n         * @param {Object} options Consist of key:\n         * - message: The invalid message\n         * @returns {Boolean}\n         */\n\t\tvalidate: function(validator, $field, options) {\n\t\t\tvar value = $field.val();\n\t\t\tif (value === '') {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tvar sum    = 0,\n                length = value.length,\n                tmp;\n\t\t\tfor (var i = 0; i < length; i++) {\n                tmp = parseInt(value.charAt(i), 10);\n\t\t\t\tif ((i % 2) === 0) {\n\t\t\t\t\ttmp = tmp * 2;\n\t\t\t\t\tif (tmp > 9) {\n\t\t\t\t\t\ttmp -= 9;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tsum += tmp;\n\t\t\t}\n\t\t\treturn (sum % 10 === 0);\n\t\t}\n\t};\n}(window.jQuery));\n;(function($) {\n    $.fn.bootstrapValidator.i18n.step = $.extend($.fn.bootstrapValidator.i18n.step || {}, {\n        'default': 'Please enter a valid step of %s'\n    });\n\n    $.fn.bootstrapValidator.validators.step = {\n        html5Attributes: {\n            message: 'message',\n            base: 'baseValue',\n            step: 'step'\n        },\n\n        /**\n         * Return true if the input value is valid step one\n         *\n         * @param {BootstrapValidator} validator The validator plugin instance\n         * @param {jQuery} $field Field element\n         * @param {Object} options Can consist of the following keys:\n         * - baseValue: The base value\n         * - step: The step\n         * - message: The invalid message\n         * @returns {Boolean|Object}\n         */\n        validate: function(validator, $field, options) {\n            var value = $field.val();\n            if (value === '') {\n                return true;\n            }\n\n            options = $.extend({}, { baseValue: 0, step: 1 }, options);\n            value   = parseFloat(value);\n            if (!$.isNumeric(value)) {\n                return false;\n            }\n\n            var round = function(x, precision) {\n                    var m = Math.pow(10, precision);\n                    x = x * m;\n                    var sign   = (x > 0) | -(x < 0),\n                        isHalf = (x % 1 === 0.5 * sign);\n                    if (isHalf) {\n                        return (Math.floor(x) + (sign > 0)) / m;\n                    } else {\n                        return Math.round(x) / m;\n                    }\n                },\n                floatMod = function(x, y) {\n                    if (y === 0.0) {\n                        return 1.0;\n                    }\n                    var dotX      = (x + '').split('.'),\n                        dotY      = (y + '').split('.'),\n                        precision = ((dotX.length === 1) ? 0 : dotX[1].length) + ((dotY.length === 1) ? 0 : dotY[1].length);\n                    return round(x - y * Math.floor(x / y), precision);\n                };\n\n            var mod = floatMod(value - options.baseValue, options.step);\n            return {\n                valid: mod === 0.0 || mod === options.step,\n                message: $.fn.bootstrapValidator.helpers.format(options.message || $.fn.bootstrapValidator.i18n.step['default'], [options.step])\n            };\n        }\n    };\n}(window.jQuery));\n;(function($) {\n    $.fn.bootstrapValidator.i18n.stringCase = $.extend($.fn.bootstrapValidator.i18n.stringCase || {}, {\n        'default': 'Please enter only lowercase characters',\n        upper: 'Please enter only uppercase characters'\n    });\n\n    $.fn.bootstrapValidator.validators.stringCase = {\n        html5Attributes: {\n            message: 'message',\n            'case': 'case'\n        },\n\n        /**\n         * Check if a string is a lower or upper case one\n         *\n         * @param {BootstrapValidator} validator The validator plugin instance\n         * @param {jQuery} $field Field element\n         * @param {Object} options Consist of key:\n         * - message: The invalid message\n         * - case: Can be 'lower' (default) or 'upper'\n         * @returns {Object}\n         */\n        validate: function(validator, $field, options) {\n            var value = $field.val();\n            if (value === '') {\n                return true;\n            }\n\n            var stringCase = (options['case'] || 'lower').toLowerCase();\n            return {\n                valid: ('upper' === stringCase) ? value === value.toUpperCase() : value === value.toLowerCase(),\n                message: options.message || (('upper' === stringCase) ? $.fn.bootstrapValidator.i18n.stringCase.upper : $.fn.bootstrapValidator.i18n.stringCase['default'])\n            };\n        }\n    };\n}(window.jQuery));\n;(function($) {\n    $.fn.bootstrapValidator.i18n.stringLength = $.extend($.fn.bootstrapValidator.i18n.stringLength || {}, {\n        'default': 'Please enter a value with valid length',\n        less: 'Please enter less than %s characters',\n        more: 'Please enter more than %s characters',\n        between: 'Please enter value between %s and %s characters long'\n    });\n\n    $.fn.bootstrapValidator.validators.stringLength = {\n        html5Attributes: {\n            message: 'message',\n            min: 'min',\n            max: 'max',\n            trim: 'trim',\n            utf8bytes: 'utf8Bytes'\n        },\n\n        enableByHtml5: function($field) {\n            var options   = {},\n                maxLength = $field.attr('maxlength'),\n                minLength = $field.attr('minlength');\n            if (maxLength) {\n                options.max = parseInt(maxLength, 10);\n            }\n            if (minLength) {\n                options.min = parseInt(minLength, 10);\n            }\n\n            return $.isEmptyObject(options) ? false : options;\n        },\n\n        /**\n         * Check if the length of element value is less or more than given number\n         *\n         * @param {BootstrapValidator} validator The validator plugin instance\n         * @param {jQuery} $field Field element\n         * @param {Object} options Consists of following keys:\n         * - min\n         * - max\n         * At least one of two keys is required\n         * The min, max keys define the number which the field value compares to. min, max can be\n         *      - A number\n         *      - Name of field which its value defines the number\n         *      - Name of callback function that returns the number\n         *      - A callback function that returns the number\n         *\n         * - message: The invalid message\n         * - trim: Indicate the length will be calculated after trimming the value or not. It is false, by default\n         * - utf8bytes: Evaluate string length in UTF-8 bytes, default to false\n         * @returns {Object}\n         */\n        validate: function(validator, $field, options) {\n            var value = $field.val();\n            if (options.trim === true || options.trim === 'true') {\n                value = $.trim(value);\n            }\n\n            if (value === '') {\n                return true;\n            }\n\n            var min        = $.isNumeric(options.min) ? options.min : validator.getDynamicOption($field, options.min),\n                max        = $.isNumeric(options.max) ? options.max : validator.getDynamicOption($field, options.max),\n                // Credit to http://stackoverflow.com/a/23329386 (@lovasoa) for UTF-8 byte length code\n                utf8Length = function(str) {\n                                 var s = str.length;\n                                 for (var i = str.length - 1; i >= 0; i--) {\n                                     var code = str.charCodeAt(i);\n                                     if (code > 0x7f && code <= 0x7ff) {\n                                         s++;\n                                     } else if (code > 0x7ff && code <= 0xffff) {\n                                         s += 2;\n                                     }\n                                     if (code >= 0xDC00 && code <= 0xDFFF) {\n                                         i--;\n                                     }\n                                 }\n                                 return s;\n                             },\n                length     = options.utf8Bytes ? utf8Length(value) : value.length,\n                isValid    = true,\n                message    = options.message || $.fn.bootstrapValidator.i18n.stringLength['default'];\n\n            if ((min && length < parseInt(min, 10)) || (max && length > parseInt(max, 10))) {\n                isValid = false;\n            }\n\n            switch (true) {\n                case (!!min && !!max):\n                    message = $.fn.bootstrapValidator.helpers.format(options.message || $.fn.bootstrapValidator.i18n.stringLength.between, [parseInt(min, 10), parseInt(max, 10)]);\n                    break;\n\n                case (!!min):\n                    message = $.fn.bootstrapValidator.helpers.format(options.message || $.fn.bootstrapValidator.i18n.stringLength.more, parseInt(min, 10));\n                    break;\n\n                case (!!max):\n                    message = $.fn.bootstrapValidator.helpers.format(options.message || $.fn.bootstrapValidator.i18n.stringLength.less, parseInt(max, 10));\n                    break;\n\n                default:\n                    break;\n            }\n\n            return { valid: isValid, message: message };\n        }\n    };\n}(window.jQuery));\n;(function($) {\n    $.fn.bootstrapValidator.i18n.uri = $.extend($.fn.bootstrapValidator.i18n.uri || {}, {\n        'default': 'Please enter a valid URI'\n    });\n\n    $.fn.bootstrapValidator.validators.uri = {\n        html5Attributes: {\n            message: 'message',\n            allowlocal: 'allowLocal',\n            protocol: 'protocol'\n        },\n\n        enableByHtml5: function($field) {\n            return ('url' === $field.attr('type'));\n        },\n\n        /**\n         * Return true if the input value is a valid URL\n         *\n         * @param {BootstrapValidator} validator The validator plugin instance\n         * @param {jQuery} $field Field element\n         * @param {Object} options\n         * - message: The error message\n         * - allowLocal: Allow the private and local network IP. Default to false\n         * - protocol: The protocols, separated by a comma. Default to \"http, https, ftp\"\n         * @returns {Boolean}\n         */\n        validate: function(validator, $field, options) {\n            var value = $field.val();\n            if (value === '') {\n                return true;\n            }\n\n            // Credit to https://gist.github.com/dperini/729294\n            //\n            // Regular Expression for URL validation\n            //\n            // Author: Diego Perini\n            // Updated: 2010/12/05\n            //\n            // the regular expression composed & commented\n            // could be easily tweaked for RFC compliance,\n            // it was expressly modified to fit & satisfy\n            // these test for an URL shortener:\n            //\n            //   http://mathiasbynens.be/demo/url-regex\n            //\n            // Notes on possible differences from a standard/generic validation:\n            //\n            // - utf-8 char class take in consideration the full Unicode range\n            // - TLDs are mandatory unless `allowLocal` is true\n            // - protocols have been restricted to ftp, http and https only as requested\n            //\n            // Changes:\n            //\n            // - IP address dotted notation validation, range: 1.0.0.0 - 223.255.255.255\n            //   first and last IP address of each class is considered invalid\n            //   (since they are broadcast/network addresses)\n            //\n            // - Added exclusion of private, reserved and/or local networks ranges\n            //   unless `allowLocal` is true\n            //\n            // - Added possibility of choosing a custom protocol\n            //\n            var allowLocal = options.allowLocal === true || options.allowLocal === 'true',\n                protocol   = (options.protocol || 'http, https, ftp').split(',').join('|').replace(/\\s/g, ''),\n                urlExp     = new RegExp(\n                    \"^\" +\n                    // protocol identifier\n                    \"(?:(?:\" + protocol + \")://)\" +\n                    // user:pass authentication\n                    \"(?:\\\\S+(?::\\\\S*)?@)?\" +\n                    \"(?:\" +\n                    // IP address exclusion\n                    // private & local networks\n                    (allowLocal\n                        ? ''\n                        : (\"(?!(?:10|127)(?:\\\\.\\\\d{1,3}){3})\" +\n                           \"(?!(?:169\\\\.254|192\\\\.168)(?:\\\\.\\\\d{1,3}){2})\" +\n                           \"(?!172\\\\.(?:1[6-9]|2\\\\d|3[0-1])(?:\\\\.\\\\d{1,3}){2})\")) +\n                    // IP address dotted notation octets\n                    // excludes loopback network 0.0.0.0\n                    // excludes reserved space >= 224.0.0.0\n                    // excludes network & broadcast addresses\n                    // (first & last IP address of each class)\n                    \"(?:[1-9]\\\\d?|1\\\\d\\\\d|2[01]\\\\d|22[0-3])\" +\n                    \"(?:\\\\.(?:1?\\\\d{1,2}|2[0-4]\\\\d|25[0-5])){2}\" +\n                    \"(?:\\\\.(?:[1-9]\\\\d?|1\\\\d\\\\d|2[0-4]\\\\d|25[0-4]))\" +\n                    \"|\" +\n                    // host name\n                    \"(?:(?:[a-z\\\\u00a1-\\\\uffff0-9]+-?)*[a-z\\\\u00a1-\\\\uffff0-9]+)\" +\n                    // domain name\n                    \"(?:\\\\.(?:[a-z\\\\u00a1-\\\\uffff0-9]+-?)*[a-z\\\\u00a1-\\\\uffff0-9]+)*\" +\n                    // TLD identifier\n                    \"(?:\\\\.(?:[a-z\\\\u00a1-\\\\uffff]{2,}))\" +\n                    // Allow intranet sites (no TLD) if `allowLocal` is true\n                    (allowLocal ? '?' : '') +\n                    \")\" +\n                    // port number\n                    \"(?::\\\\d{2,5})?\" +\n                    // resource path\n                    \"(?:/[^\\\\s]*)?\" +\n                    \"$\", \"i\"\n            );\n\n            return urlExp.test(value);\n        }\n    };\n}(window.jQuery));\n;(function($) {\n    $.fn.bootstrapValidator.i18n.uuid = $.extend($.fn.bootstrapValidator.i18n.uuid || {}, {\n        'default': 'Please enter a valid UUID number',\n        version: 'Please enter a valid UUID version %s number'\n    });\n\n    $.fn.bootstrapValidator.validators.uuid = {\n        html5Attributes: {\n            message: 'message',\n            version: 'version'\n        },\n\n        /**\n         * Return true if and only if the input value is a valid UUID string\n         *\n         * @see http://en.wikipedia.org/wiki/Universally_unique_identifier\n         * @param {BootstrapValidator} validator The validator plugin instance\n         * @param {jQuery} $field Field element\n         * @param {Object} options Consist of key:\n         * - message: The invalid message\n         * - version: Can be 3, 4, 5, null\n         * @returns {Boolean|Object}\n         */\n        validate: function(validator, $field, options) {\n            var value = $field.val();\n            if (value === '') {\n                return true;\n            }\n\n            // See the format at http://en.wikipedia.org/wiki/Universally_unique_identifier#Variants_and_versions\n            var patterns = {\n                    '3': /^[0-9A-F]{8}-[0-9A-F]{4}-3[0-9A-F]{3}-[0-9A-F]{4}-[0-9A-F]{12}$/i,\n                    '4': /^[0-9A-F]{8}-[0-9A-F]{4}-4[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i,\n                    '5': /^[0-9A-F]{8}-[0-9A-F]{4}-5[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i,\n                    all: /^[0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{12}$/i\n                },\n                version = options.version ? (options.version + '') : 'all';\n            return {\n                valid: (null === patterns[version]) ? true : patterns[version].test(value),\n                message: options.version\n                            ? $.fn.bootstrapValidator.helpers.format(options.message || $.fn.bootstrapValidator.i18n.uuid.version, options.version)\n                            : (options.message || $.fn.bootstrapValidator.i18n.uuid['default'])\n            };\n        }\n    };\n}(window.jQuery));\n;(function($) {\n    $.fn.bootstrapValidator.i18n.vat = $.extend($.fn.bootstrapValidator.i18n.vat || {}, {\n        'default': 'Please enter a valid VAT number',\n        countryNotSupported: 'The country code %s is not supported',\n        country: 'Please enter a valid VAT number in %s',\n        countries: {\n            AT: 'Austria',\n            BE: 'Belgium',\n            BG: 'Bulgaria',\n            BR: 'Brazil',\n            CH: 'Switzerland',\n            CY: 'Cyprus',\n            CZ: 'Czech Republic',\n            DE: 'Germany',\n            DK: 'Denmark',\n            EE: 'Estonia',\n            ES: 'Spain',\n            FI: 'Finland',\n            FR: 'France',\n            GB: 'United Kingdom',\n            GR: 'Greek',\n            EL: 'Greek',\n            HU: 'Hungary',\n            HR: 'Croatia',\n            IE: 'Ireland',\n            IS: 'Iceland',\n            IT: 'Italy',\n            LT: 'Lithuania',\n            LU: 'Luxembourg',\n            LV: 'Latvia',\n            MT: 'Malta',\n            NL: 'Netherlands',\n            NO: 'Norway',\n            PL: 'Poland',\n            PT: 'Portugal',\n            RO: 'Romania',\n            RU: 'Russia',\n            RS: 'Serbia',\n            SE: 'Sweden',\n            SI: 'Slovenia',\n            SK: 'Slovakia',\n            VE: 'Venezuela',\n            ZA: 'South Africa'\n        }\n    });\n\n    $.fn.bootstrapValidator.validators.vat = {\n        html5Attributes: {\n            message: 'message',\n            country: 'country'\n        },\n\n        // Supported country codes\n        COUNTRY_CODES: [\n            'AT', 'BE', 'BG', 'BR', 'CH', 'CY', 'CZ', 'DE', 'DK', 'EE', 'EL', 'ES', 'FI', 'FR', 'GB', 'GR', 'HR', 'HU',\n            'IE', 'IS', 'IT', 'LT', 'LU', 'LV', 'MT', 'NL', 'NO', 'PL', 'PT', 'RO', 'RU', 'RS', 'SE', 'SK', 'SI', 'VE',\n            'ZA'\n        ],\n\n        /**\n         * Validate an European VAT number\n         *\n         * @param {BootstrapValidator} validator The validator plugin instance\n         * @param {jQuery} $field Field element\n         * @param {Object} options Consist of key:\n         * - message: The invalid message\n         * - country: The ISO 3166-1 country code. It can be\n         *      - One of country code defined in COUNTRY_CODES\n         *      - Name of field which its value defines the country code\n         *      - Name of callback function that returns the country code\n         *      - A callback function that returns the country code\n         * @returns {Boolean|Object}\n         */\n        validate: function(validator, $field, options) {\n            var value = $field.val();\n            if (value === '') {\n                return true;\n            }\n\n            var country = options.country;\n            if (!country) {\n                country = value.substr(0, 2);\n            } else if (typeof country !== 'string' || $.inArray(country.toUpperCase(), this.COUNTRY_CODES) === -1) {\n                // Determine the country code\n                country = validator.getDynamicOption($field, country);\n            }\n\n            if ($.inArray(country, this.COUNTRY_CODES) === -1) {\n                return {\n                    valid: false,\n                    message: $.fn.bootstrapValidator.helpers.format($.fn.bootstrapValidator.i18n.vat.countryNotSupported, country)\n                };\n            }\n\n            var method  = ['_', country.toLowerCase()].join('');\n            return this[method](value)\n                ? true\n                : {\n                    valid: false,\n                    message: $.fn.bootstrapValidator.helpers.format(options.message || $.fn.bootstrapValidator.i18n.vat.country, $.fn.bootstrapValidator.i18n.vat.countries[country.toUpperCase()])\n                };\n        },\n\n        // VAT validators\n\n        /**\n         * Validate Austrian VAT number\n         * Example:\n         * - Valid: ATU13585627\n         * - Invalid: ATU13585626\n         *\n         * @param {String} value VAT number\n         * @returns {Boolean}\n         */\n        _at: function(value) {\n            if (/^ATU[0-9]{8}$/.test(value)) {\n                value = value.substr(2);\n            }\n            if (!/^U[0-9]{8}$/.test(value)) {\n                return false;\n            }\n\n            value = value.substr(1);\n            var sum    = 0,\n                weight = [1, 2, 1, 2, 1, 2, 1],\n                temp   = 0;\n            for (var i = 0; i < 7; i++) {\n                temp = parseInt(value.charAt(i), 10) * weight[i];\n                if (temp > 9) {\n                    temp = Math.floor(temp / 10) + temp % 10;\n                }\n                sum += temp;\n            }\n\n            sum = 10 - (sum + 4) % 10;\n            if (sum === 10) {\n                sum = 0;\n            }\n\n            return (sum + '' === value.substr(7, 1));\n        },\n\n        /**\n         * Validate Belgian VAT number\n         * Example:\n         * - Valid: BE0428759497\n         * - Invalid: BE431150351\n         *\n         * @param {String} value VAT number\n         * @returns {Boolean}\n         */\n        _be: function(value) {\n            if (/^BE[0]{0,1}[0-9]{9}$/.test(value)) {\n                value = value.substr(2);\n            }\n            if (!/^[0]{0,1}[0-9]{9}$/.test(value)) {\n                return false;\n            }\n\n            if (value.length === 9) {\n                value = '0' + value;\n            }\n            if (value.substr(1, 1) === '0') {\n                return false;\n            }\n\n            var sum = parseInt(value.substr(0, 8), 10) + parseInt(value.substr(8, 2), 10);\n            return (sum % 97 === 0);\n        },\n\n        /**\n         * Validate Bulgarian VAT number\n         * Example:\n         * - Valid: BG175074752,\n         * BG7523169263, BG8032056031,\n         * BG7542011030,\n         * BG7111042925\n         * - Invalid: BG175074753, BG7552A10004, BG7111042922\n         *\n         * @param {String} value VAT number\n         * @returns {Boolean}\n         */\n        _bg: function(value) {\n            if (/^BG[0-9]{9,10}$/.test(value)) {\n                value = value.substr(2);\n            }\n            if (!/^[0-9]{9,10}$/.test(value)) {\n                return false;\n            }\n\n            var sum = 0, i = 0;\n\n            // Legal entities\n            if (value.length === 9) {\n                for (i = 0; i < 8; i++) {\n                    sum += parseInt(value.charAt(i), 10) * (i + 1);\n                }\n                sum = sum % 11;\n                if (sum === 10) {\n                    sum = 0;\n                    for (i = 0; i < 8; i++) {\n                        sum += parseInt(value.charAt(i), 10) * (i + 3);\n                    }\n                }\n                sum = sum % 10;\n                return (sum + '' === value.substr(8));\n            }\n            // Physical persons, foreigners and others\n            else if (value.length === 10) {\n                // Validate Bulgarian national identification numbers\n                var egn = function(value) {\n                        // Check the birth date\n                        var year  = parseInt(value.substr(0, 2), 10) + 1900,\n                            month = parseInt(value.substr(2, 2), 10),\n                            day   = parseInt(value.substr(4, 2), 10);\n                        if (month > 40) {\n                            year += 100;\n                            month -= 40;\n                        } else if (month > 20) {\n                            year -= 100;\n                            month -= 20;\n                        }\n\n                        if (!$.fn.bootstrapValidator.helpers.date(year, month, day)) {\n                            return false;\n                        }\n\n                        var sum    = 0,\n                            weight = [2, 4, 8, 5, 10, 9, 7, 3, 6];\n                        for (var i = 0; i < 9; i++) {\n                            sum += parseInt(value.charAt(i), 10) * weight[i];\n                        }\n                        sum = (sum % 11) % 10;\n                        return (sum + '' === value.substr(9, 1));\n                    },\n                    // Validate Bulgarian personal number of a foreigner\n                    pnf = function(value) {\n                        var sum    = 0,\n                            weight = [21, 19, 17, 13, 11, 9, 7, 3, 1];\n                        for (var i = 0; i < 9; i++) {\n                            sum += parseInt(value.charAt(i), 10) * weight[i];\n                        }\n                        sum = sum % 10;\n                        return (sum + '' === value.substr(9, 1));\n                    },\n                    // Finally, consider it as a VAT number\n                    vat = function(value) {\n                        var sum    = 0,\n                            weight = [4, 3, 2, 7, 6, 5, 4, 3, 2];\n                        for (var i = 0; i < 9; i++) {\n                            sum += parseInt(value.charAt(i), 10) * weight[i];\n                        }\n                        sum = 11 - sum % 11;\n                        if (sum === 10) {\n                            return false;\n                        }\n                        if (sum === 11) {\n                            sum = 0;\n                        }\n                        return (sum + '' === value.substr(9, 1));\n                    };\n                return (egn(value) || pnf(value) || vat(value));\n            }\n\n            return false;\n        },\n        \n        /**\n         * Validate Brazilian VAT number (CNPJ)\n         *\n         * @param {String} value VAT number\n         * @returns {Boolean}\n         */\n        _br: function(value) {\n            if (value === '') {\n                return true;\n            }\n            var cnpj = value.replace(/[^\\d]+/g, '');\n            if (cnpj === '' || cnpj.length !== 14) {\n                return false;\n            }\n\n            // Remove invalids CNPJs\n            if (cnpj === '00000000000000' || cnpj === '11111111111111' || cnpj === '22222222222222' ||\n                cnpj === '33333333333333' || cnpj === '44444444444444' || cnpj === '55555555555555' ||\n                cnpj === '66666666666666' || cnpj === '77777777777777' || cnpj === '88888888888888' ||\n                cnpj === '99999999999999')\n            {\n                return false;\n            }\n\n            // Validate verification digits\n            var length  = cnpj.length - 2,\n                numbers = cnpj.substring(0, length),\n                digits  = cnpj.substring(length),\n                sum     = 0,\n                pos     = length - 7;\n\n            for (var i = length; i >= 1; i--) {\n                sum += parseInt(numbers.charAt(length - i), 10) * pos--;\n                if (pos < 2) {\n                    pos = 9;\n                }\n            }\n\n            var result = sum % 11 < 2 ? 0 : 11 - sum % 11;\n            if (result !== parseInt(digits.charAt(0), 10)) {\n                return false;\n            }\n\n            length  = length + 1;\n            numbers = cnpj.substring(0, length);\n            sum     = 0;\n            pos     = length - 7;\n            for (i = length; i >= 1; i--) {\n                sum += parseInt(numbers.charAt(length - i), 10) * pos--;\n                if (pos < 2) {\n                    pos = 9;\n                }\n            }\n\n            result = sum % 11 < 2 ? 0 : 11 - sum % 11;\n            return (result === parseInt(digits.charAt(1), 10));\n        },\n\n        /**\n         * Validate Swiss VAT number\n         *\n         * @param {String} value VAT number\n         * @returns {Boolean}\n         */\n        _ch: function(value) {\n            if (/^CHE[0-9]{9}(MWST)?$/.test(value)) {\n                value = value.substr(2);\n            }\n            if (!/^E[0-9]{9}(MWST)?$/.test(value)) {\n                return false;\n            }\n\n            value = value.substr(1);\n            var sum    = 0,\n                weight = [5, 4, 3, 2, 7, 6, 5, 4];\n            for (var i = 0; i < 8; i++) {\n                sum += parseInt(value.charAt(i), 10) * weight[i];\n            }\n\n            sum = 11 - sum % 11;\n            if (sum === 10) {\n                return false;\n            }\n            if (sum === 11) {\n                sum = 0;\n            }\n\n            return (sum + '' === value.substr(8, 1));\n        },\n\n        /**\n         * Validate Cypriot VAT number\n         * Examples:\n         * - Valid: CY10259033P\n         * - Invalid: CY10259033Z\n         *\n         * @param {String} value VAT number\n         * @returns {Boolean}\n         */\n        _cy: function(value) {\n            if (/^CY[0-5|9]{1}[0-9]{7}[A-Z]{1}$/.test(value)) {\n                value = value.substr(2);\n            }\n            if (!/^[0-5|9]{1}[0-9]{7}[A-Z]{1}$/.test(value)) {\n                return false;\n            }\n\n            // Do not allow to start with \"12\"\n            if (value.substr(0, 2) === '12') {\n                return false;\n            }\n\n            // Extract the next digit and multiply by the counter.\n            var sum         = 0,\n                translation = {\n                    '0': 1,  '1': 0,  '2': 5,  '3': 7,  '4': 9,\n                    '5': 13, '6': 15, '7': 17, '8': 19, '9': 21\n                };\n            for (var i = 0; i < 8; i++) {\n                var temp = parseInt(value.charAt(i), 10);\n                if (i % 2 === 0) {\n                    temp = translation[temp + ''];\n                }\n                sum += temp;\n            }\n\n            sum = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'[sum % 26];\n            return (sum + '' === value.substr(8, 1));\n        },\n\n        /**\n         * Validate Czech Republic VAT number\n         * Can be:\n         * i) Legal entities (8 digit numbers)\n         * ii) Individuals with a RC (the 9 or 10 digit Czech birth number)\n         * iii) Individuals without a RC (9 digit numbers beginning with 6)\n         *\n         * Examples:\n         * - Valid: i) CZ25123891; ii) CZ7103192745, CZ991231123; iii) CZ640903926\n         * - Invalid: i) CZ25123890; ii) CZ1103492745, CZ590312123\n         *\n         * @param {String} value VAT number\n         * @returns {Boolean}\n         */\n        _cz: function(value) {\n            if (/^CZ[0-9]{8,10}$/.test(value)) {\n                value = value.substr(2);\n            }\n            if (!/^[0-9]{8,10}$/.test(value)) {\n                return false;\n            }\n\n            var sum = 0,\n                i   = 0;\n            if (value.length === 8) {\n                // Do not allow to start with '9'\n                if (value.charAt(0) + '' === '9') {\n                    return false;\n                }\n\n                sum = 0;\n                for (i = 0; i < 7; i++) {\n                    sum += parseInt(value.charAt(i), 10) * (8 - i);\n                }\n                sum = 11 - sum % 11;\n                if (sum === 10) {\n                    sum = 0;\n                }\n                if (sum === 11) {\n                    sum = 1;\n                }\n\n                return (sum + '' === value.substr(7, 1));\n            } else if (value.length === 9 && (value.charAt(0) + '' === '6')) {\n                sum = 0;\n                // Skip the first (which is 6)\n                for (i = 0; i < 7; i++) {\n                    sum += parseInt(value.charAt(i + 1), 10) * (8 - i);\n                }\n                sum = 11 - sum % 11;\n                if (sum === 10) {\n                    sum = 0;\n                }\n                if (sum === 11) {\n                    sum = 1;\n                }\n                sum = [8, 7, 6, 5, 4, 3, 2, 1, 0, 9, 10][sum - 1];\n                return (sum + '' === value.substr(8, 1));\n            } else if (value.length === 9 || value.length === 10) {\n                // Validate Czech birth number (Rodné číslo), which is also national identifier\n                var year  = 1900 + parseInt(value.substr(0, 2), 10),\n                    month = parseInt(value.substr(2, 2), 10) % 50 % 20,\n                    day   = parseInt(value.substr(4, 2), 10);\n                if (value.length === 9) {\n                    if (year >= 1980) {\n                        year -= 100;\n                    }\n                    if (year > 1953) {\n                        return false;\n                    }\n                } else if (year < 1954) {\n                    year += 100;\n                }\n\n                if (!$.fn.bootstrapValidator.helpers.date(year, month, day)) {\n                    return false;\n                }\n\n                // Check that the birth date is not in the future\n                if (value.length === 10) {\n                    var check = parseInt(value.substr(0, 9), 10) % 11;\n                    if (year < 1985) {\n                        check = check % 10;\n                    }\n                    return (check + '' === value.substr(9, 1));\n                }\n\n                return true;\n            }\n\n            return false;\n        },\n\n        /**\n         * Validate German VAT number\n         * Examples:\n         * - Valid: DE136695976\n         * - Invalid: DE136695978\n         *\n         * @param {String} value VAT number\n         * @returns {Boolean}\n         */\n        _de: function(value) {\n            if (/^DE[0-9]{9}$/.test(value)) {\n                value = value.substr(2);\n            }\n            if (!/^[0-9]{9}$/.test(value)) {\n                return false;\n            }\n\n            return $.fn.bootstrapValidator.helpers.mod11And10(value);\n        },\n\n        /**\n         * Validate Danish VAT number\n         * Example:\n         * - Valid: DK13585628\n         * - Invalid: DK13585627\n         *\n         * @param {String} value VAT number\n         * @returns {Boolean}\n         */\n        _dk: function(value) {\n            if (/^DK[0-9]{8}$/.test(value)) {\n                value = value.substr(2);\n            }\n            if (!/^[0-9]{8}$/.test(value)) {\n                return false;\n            }\n\n            var sum    = 0,\n                weight = [2, 7, 6, 5, 4, 3, 2, 1];\n            for (var i = 0; i < 8; i++) {\n                sum += parseInt(value.charAt(i), 10) * weight[i];\n            }\n\n            return (sum % 11 === 0);\n        },\n\n        /**\n         * Validate Estonian VAT number\n         * Examples:\n         * - Valid: EE100931558, EE100594102\n         * - Invalid: EE100594103\n         *\n         * @param {String} value VAT number\n         * @returns {Boolean}\n         */\n        _ee: function(value) {\n            if (/^EE[0-9]{9}$/.test(value)) {\n                value = value.substr(2);\n            }\n            if (!/^[0-9]{9}$/.test(value)) {\n                return false;\n            }\n\n            var sum    = 0,\n                weight = [3, 7, 1, 3, 7, 1, 3, 7, 1];\n            for (var i = 0; i < 9; i++) {\n                sum += parseInt(value.charAt(i), 10) * weight[i];\n            }\n\n            return (sum % 10 === 0);\n        },\n\n        /**\n         * Validate Spanish VAT number (NIF - Número de Identificación Fiscal)\n         * Can be:\n         * i) DNI (Documento nacional de identidad), for Spaniards\n         * ii) NIE (Número de Identificación de Extranjeros), for foreigners\n         * iii) CIF (Certificado de Identificación Fiscal), for legal entities and others\n         *\n         * Examples:\n         * - Valid: i) ES54362315K; ii) ESX2482300W, ESX5253868R; iii) ESM1234567L, ESJ99216582, ESB58378431, ESB64717838\n         * - Invalid: i) ES54362315Z; ii) ESX2482300A; iii) ESJ99216583\n         *\n         * @param {String} value VAT number\n         * @returns {Boolean}\n         */\n        _es: function(value) {\n            if (/^ES[0-9A-Z][0-9]{7}[0-9A-Z]$/.test(value)) {\n                value = value.substr(2);\n            }\n            if (!/^[0-9A-Z][0-9]{7}[0-9A-Z]$/.test(value)) {\n                return false;\n            }\n\n            var dni = function(value) {\n                    var check = parseInt(value.substr(0, 8), 10);\n                    check = 'TRWAGMYFPDXBNJZSQVHLCKE'[check % 23];\n                    return (check + '' === value.substr(8, 1));\n                },\n                nie = function(value) {\n                    var check = ['XYZ'.indexOf(value.charAt(0)), value.substr(1)].join('');\n                    check = parseInt(check, 10);\n                    check = 'TRWAGMYFPDXBNJZSQVHLCKE'[check % 23];\n                    return (check + '' === value.substr(8, 1));\n                },\n                cif = function(value) {\n                    var first = value.charAt(0), check;\n                    if ('KLM'.indexOf(first) !== -1) {\n                        // K: Spanish younger than 14 year old\n                        // L: Spanish living outside Spain without DNI\n                        // M: Granted the tax to foreigners who have no NIE\n                        check = parseInt(value.substr(1, 8), 10);\n                        check = 'TRWAGMYFPDXBNJZSQVHLCKE'[check % 23];\n                        return (check + '' === value.substr(8, 1));\n                    } else if ('ABCDEFGHJNPQRSUVW'.indexOf(first) !== -1) {\n                        var sum    = 0,\n                            weight = [2, 1, 2, 1, 2, 1, 2],\n                            temp   = 0;\n\n                        for (var i = 0; i < 7; i++) {\n                            temp = parseInt(value.charAt(i + 1), 10) * weight[i];\n                            if (temp > 9) {\n                                temp = Math.floor(temp / 10) + temp % 10;\n                            }\n                            sum += temp;\n                        }\n                        sum = 10 - sum % 10;\n                        return (sum + '' === value.substr(8, 1) || 'JABCDEFGHI'[sum] === value.substr(8, 1));\n                    }\n\n                    return false;\n                };\n\n            var first = value.charAt(0);\n            if (/^[0-9]$/.test(first)) {\n                return dni(value);\n            } else if (/^[XYZ]$/.test(first)) {\n                return nie(value);\n            } else {\n                return cif(value);\n            }\n        },\n\n        /**\n         * Validate Finnish VAT number\n         * Examples:\n         * - Valid: FI20774740\n         * - Invalid: FI20774741\n         *\n         * @param {String} value VAT number\n         * @returns {Boolean}\n         */\n        _fi: function(value) {\n            if (/^FI[0-9]{8}$/.test(value)) {\n                value = value.substr(2);\n            }\n            if (!/^[0-9]{8}$/.test(value)) {\n                return false;\n            }\n\n            var sum    = 0,\n                weight = [7, 9, 10, 5, 8, 4, 2, 1];\n            for (var i = 0; i < 8; i++) {\n                sum += parseInt(value.charAt(i), 10) * weight[i];\n            }\n\n            return (sum % 11 === 0);\n        },\n\n        /**\n         * Validate French VAT number (TVA - taxe sur la valeur ajoutée)\n         * It's constructed by a SIREN number, prefixed by two characters.\n         *\n         * Examples:\n         * - Valid: FR40303265045, FR23334175221, FRK7399859412, FR4Z123456782\n         * - Invalid: FR84323140391\n         *\n         * @param {String} value VAT number\n         * @returns {Boolean}\n         */\n        _fr: function(value) {\n            if (/^FR[0-9A-Z]{2}[0-9]{9}$/.test(value)) {\n                value = value.substr(2);\n            }\n            if (!/^[0-9A-Z]{2}[0-9]{9}$/.test(value)) {\n                return false;\n            }\n\n            if (!$.fn.bootstrapValidator.helpers.luhn(value.substr(2))) {\n                return false;\n            }\n\n            if (/^[0-9]{2}$/.test(value.substr(0, 2))) {\n                // First two characters are digits\n                return value.substr(0, 2) === (parseInt(value.substr(2) + '12', 10) % 97 + '');\n            } else {\n                // The first characters cann't be O and I\n                var alphabet = '0123456789ABCDEFGHJKLMNPQRSTUVWXYZ',\n                    check;\n                // First one is digit\n                if (/^[0-9]{1}$/.test(value.charAt(0))) {\n                    check = alphabet.indexOf(value.charAt(0)) * 24 + alphabet.indexOf(value.charAt(1)) - 10;\n                } else {\n                    check = alphabet.indexOf(value.charAt(0)) * 34 + alphabet.indexOf(value.charAt(1)) - 100;\n                }\n                return ((parseInt(value.substr(2), 10) + 1 + Math.floor(check / 11)) % 11) === (check % 11);\n            }\n        },\n\n        /**\n         * Validate United Kingdom VAT number\n         * Example:\n         * - Valid: GB980780684\n         * - Invalid: GB802311781\n         *\n         * @param {String} value VAT number\n         * @returns {Boolean}\n         */\n        _gb: function(value) {\n            if (/^GB[0-9]{9}$/.test(value)             /* Standard */\n                || /^GB[0-9]{12}$/.test(value)         /* Branches */\n                || /^GBGD[0-9]{3}$/.test(value)        /* Government department */\n                || /^GBHA[0-9]{3}$/.test(value)        /* Health authority */\n                || /^GB(GD|HA)8888[0-9]{5}$/.test(value))\n            {\n                value = value.substr(2);\n            }\n            if (!/^[0-9]{9}$/.test(value)\n                && !/^[0-9]{12}$/.test(value)\n                && !/^GD[0-9]{3}$/.test(value)\n                && !/^HA[0-9]{3}$/.test(value)\n                && !/^(GD|HA)8888[0-9]{5}$/.test(value))\n            {\n                return false;\n            }\n\n            var length = value.length;\n            if (length === 5) {\n                var firstTwo  = value.substr(0, 2),\n                    lastThree = parseInt(value.substr(2), 10);\n                return ('GD' === firstTwo && lastThree < 500) || ('HA' === firstTwo && lastThree >= 500);\n            } else if (length === 11 && ('GD8888' === value.substr(0, 6) || 'HA8888' === value.substr(0, 6))) {\n                if (('GD' === value.substr(0, 2) && parseInt(value.substr(6, 3), 10) >= 500)\n                    || ('HA' === value.substr(0, 2) && parseInt(value.substr(6, 3), 10) < 500))\n                {\n                    return false;\n                }\n                return (parseInt(value.substr(6, 3), 10) % 97 === parseInt(value.substr(9, 2), 10));\n            } else if (length === 9 || length === 12) {\n                var sum    = 0,\n                    weight = [8, 7, 6, 5, 4, 3, 2, 10, 1];\n                for (var i = 0; i < 9; i++) {\n                    sum += parseInt(value.charAt(i), 10) * weight[i];\n                }\n                sum = sum % 97;\n\n                if (parseInt(value.substr(0, 3), 10) >= 100) {\n                    return (sum === 0 || sum === 42 || sum === 55);\n                } else {\n                    return (sum === 0);\n                }\n            }\n\n            return true;\n        },\n\n        /**\n         * Validate Greek VAT number\n         * Examples:\n         * - Valid: GR023456780, EL094259216\n         * - Invalid: EL123456781\n         *\n         * @param {String} value VAT number\n         * @returns {Boolean}\n         */\n        _gr: function(value) {\n            if (/^(GR|EL)[0-9]{9}$/.test(value)) {\n                value = value.substr(2);\n            }\n            if (!/^[0-9]{9}$/.test(value)) {\n                return false;\n            }\n\n            if (value.length === 8) {\n                value = '0' + value;\n            }\n\n            var sum    = 0,\n                weight = [256, 128, 64, 32, 16, 8, 4, 2];\n            for (var i = 0; i < 8; i++) {\n                sum += parseInt(value.charAt(i), 10) * weight[i];\n            }\n            sum = (sum % 11) % 10;\n\n            return (sum + '' === value.substr(8, 1));\n        },\n\n        // EL is traditionally prefix of Greek VAT numbers\n        _el: function(value) {\n            return this._gr(value);\n        },\n\n        /**\n         * Validate Hungarian VAT number\n         * Examples:\n         * - Valid: HU12892312\n         * - Invalid: HU12892313\n         *\n         * @param {String} value VAT number\n         * @returns {Boolean}\n         */\n        _hu: function(value) {\n            if (/^HU[0-9]{8}$/.test(value)) {\n                value = value.substr(2);\n            }\n            if (!/^[0-9]{8}$/.test(value)) {\n                return false;\n            }\n\n            var sum    = 0,\n                weight = [9, 7, 3, 1, 9, 7, 3, 1];\n\n            for (var i = 0; i < 8; i++) {\n                sum += parseInt(value.charAt(i), 10) * weight[i];\n            }\n\n            return (sum % 10 === 0);\n        },\n\n        /**\n         * Validate Croatian VAT number\n         * Examples:\n         * - Valid: HR33392005961\n         * - Invalid: HR33392005962\n         *\n         * @param {String} value VAT number\n         * @returns {Boolean}\n         */\n        _hr: function(value) {\n            if (/^HR[0-9]{11}$/.test(value)) {\n                value = value.substr(2);\n            }\n            if (!/^[0-9]{11}$/.test(value)) {\n                return false;\n            }\n\n            return $.fn.bootstrapValidator.helpers.mod11And10(value);\n        },\n\n        /**\n         * Validate Irish VAT number\n         * Examples:\n         * - Valid: IE6433435F, IE6433435OA, IE8D79739I\n         * - Invalid: IE8D79738J\n         *\n         * @param {String} value VAT number\n         * @returns {Boolean}\n         */\n        _ie: function(value) {\n            if (/^IE[0-9]{1}[0-9A-Z\\*\\+]{1}[0-9]{5}[A-Z]{1,2}$/.test(value)) {\n                value = value.substr(2);\n            }\n            if (!/^[0-9]{1}[0-9A-Z\\*\\+]{1}[0-9]{5}[A-Z]{1,2}$/.test(value)) {\n                return false;\n            }\n\n            var getCheckDigit = function(value) {\n                while (value.length < 7) {\n                    value = '0' + value;\n                }\n                var alphabet = 'WABCDEFGHIJKLMNOPQRSTUV',\n                    sum      = 0;\n                for (var i = 0; i < 7; i++) {\n                    sum += parseInt(value.charAt(i), 10) * (8 - i);\n                }\n                sum += 9 * alphabet.indexOf(value.substr(7));\n                return alphabet[sum % 23];\n            };\n\n            // The first 7 characters are digits\n            if (/^[0-9]+$/.test(value.substr(0, 7))) {\n                // New system\n                return value.charAt(7) === getCheckDigit(value.substr(0, 7) + value.substr(8) + '');\n            } else if ('ABCDEFGHIJKLMNOPQRSTUVWXYZ+*'.indexOf(value.charAt(1)) !== -1) {\n                // Old system\n                return value.charAt(7) === getCheckDigit(value.substr(2, 5) + value.substr(0, 1) + '');\n            }\n\n            return true;\n        },\n\n        /**\n         * Validate Icelandic VAT (VSK) number\n         * Examples:\n         * - Valid: 12345, 123456\n         * - Invalid: 1234567\n         *\n         * @params {String} value VAT number\n         * @returns {Boolean}\n         */\n        _is: function(value) {\n            if (/^IS[0-9]{5,6}$/.test(value)) {\n                value = value.substr(2);\n            }\n            return /^[0-9]{5,6}$/.test(value);\n        },\n\n        /**\n         * Validate Italian VAT number, which consists of 11 digits.\n         * - First 7 digits are a company identifier\n         * - Next 3 are the province of residence\n         * - The last one is a check digit\n         *\n         * Examples:\n         * - Valid: IT00743110157\n         * - Invalid: IT00743110158\n         *\n         * @param {String} value VAT number\n         * @returns {Boolean}\n         */\n        _it: function(value) {\n            if (/^IT[0-9]{11}$/.test(value)) {\n                value = value.substr(2);\n            }\n            if (!/^[0-9]{11}$/.test(value)) {\n                return false;\n            }\n\n            if (parseInt(value.substr(0, 7), 10) === 0) {\n                return false;\n            }\n\n            var lastThree = parseInt(value.substr(7, 3), 10);\n            if ((lastThree < 1) || (lastThree > 201) && lastThree !== 999 && lastThree !== 888) {\n                return false;\n            }\n\n            return $.fn.bootstrapValidator.helpers.luhn(value);\n        },\n\n        /**\n         * Validate Lithuanian VAT number\n         * It can be:\n         * - 9 digits, for legal entities\n         * - 12 digits, for temporarily registered taxpayers\n         *\n         * Examples:\n         * - Valid: LT119511515, LT100001919017, LT100004801610\n         * - Invalid: LT100001919018\n         *\n         * @param {String} value VAT number\n         * @returns {Boolean}\n         */\n        _lt: function(value) {\n            if (/^LT([0-9]{7}1[0-9]{1}|[0-9]{10}1[0-9]{1})$/.test(value)) {\n                value = value.substr(2);\n            }\n            if (!/^([0-9]{7}1[0-9]{1}|[0-9]{10}1[0-9]{1})$/.test(value)) {\n                return false;\n            }\n\n            var length = value.length,\n                sum    = 0,\n                i;\n            for (i = 0; i < length - 1; i++) {\n                sum += parseInt(value.charAt(i), 10) * (1 + i % 9);\n            }\n            var check = sum % 11;\n            if (check === 10) {\n                sum = 0;\n                for (i = 0; i < length - 1; i++) {\n                    sum += parseInt(value.charAt(i), 10) * (1 + (i + 2) % 9);\n                }\n            }\n            check = check % 11 % 10;\n            return (check + '' === value.charAt(length - 1));\n        },\n\n        /**\n         * Validate Luxembourg VAT number\n         * Examples:\n         * - Valid: LU15027442\n         * - Invalid: LU15027443\n         *\n         * @param {String} value VAT number\n         * @returns {Boolean}\n         */\n        _lu: function(value) {\n            if (/^LU[0-9]{8}$/.test(value)) {\n                value = value.substr(2);\n            }\n            if (!/^[0-9]{8}$/.test(value)) {\n                return false;\n            }\n\n            return ((parseInt(value.substr(0, 6), 10) % 89) + '' === value.substr(6, 2));\n        },\n\n        /**\n         * Validate Latvian VAT number\n         * Examples:\n         * - Valid: LV40003521600, LV16117519997\n         * - Invalid: LV40003521601, LV16137519997\n         *\n         * @param {String} value VAT number\n         * @returns {Boolean}\n         */\n        _lv: function(value) {\n            if (/^LV[0-9]{11}$/.test(value)) {\n                value = value.substr(2);\n            }\n            if (!/^[0-9]{11}$/.test(value)) {\n                return false;\n            }\n\n            var first  = parseInt(value.charAt(0), 10),\n                sum    = 0,\n                weight = [],\n                i,\n                length = value.length;\n            if (first > 3) {\n                // Legal entity\n                sum    = 0;\n                weight = [9, 1, 4, 8, 3, 10, 2, 5, 7, 6, 1];\n                for (i = 0; i < length; i++) {\n                    sum += parseInt(value.charAt(i), 10) * weight[i];\n                }\n                sum = sum % 11;\n                return (sum === 3);\n            } else {\n                // Check birth date\n                var day   = parseInt(value.substr(0, 2), 10),\n                    month = parseInt(value.substr(2, 2), 10),\n                    year  = parseInt(value.substr(4, 2), 10);\n                year = year + 1800 + parseInt(value.charAt(6), 10) * 100;\n\n                if (!$.fn.bootstrapValidator.helpers.date(year, month, day)) {\n                    return false;\n                }\n\n                // Check personal code\n                sum    = 0;\n                weight = [10, 5, 8, 4, 2, 1, 6, 3, 7, 9];\n                for (i = 0; i < length - 1; i++) {\n                    sum += parseInt(value.charAt(i), 10) * weight[i];\n                }\n                sum = (sum + 1) % 11 % 10;\n                return (sum + '' === value.charAt(length - 1));\n            }\n        },\n\n        /**\n         * Validate Maltese VAT number\n         * Examples:\n         * - Valid: MT11679112\n         * - Invalid: MT11679113\n         *\n         * @param {String} value VAT number\n         * @returns {Boolean}\n         */\n        _mt: function(value) {\n            if (/^MT[0-9]{8}$/.test(value)) {\n                value = value.substr(2);\n            }\n            if (!/^[0-9]{8}$/.test(value)) {\n                return false;\n            }\n\n            var sum    = 0,\n                weight = [3, 4, 6, 7, 8, 9, 10, 1];\n\n            for (var i = 0; i < 8; i++) {\n                sum += parseInt(value.charAt(i), 10) * weight[i];\n            }\n\n            return (sum % 37 === 0);\n        },\n\n        /**\n         * Validate Dutch VAT number\n         * Examples:\n         * - Valid: NL004495445B01\n         * - Invalid: NL123456789B90\n         *\n         * @param {String} value VAT number\n         * @returns {Boolean}\n         */\n        _nl: function(value) {\n            if (/^NL[0-9]{9}B[0-9]{2}$/.test(value)) {\n               value = value.substr(2);\n            }\n            if (!/^[0-9]{9}B[0-9]{2}$/.test(value)) {\n               return false;\n            }\n\n            var sum    = 0,\n                weight = [9, 8, 7, 6, 5, 4, 3, 2];\n            for (var i = 0; i < 8; i++) {\n                sum += parseInt(value.charAt(i), 10) * weight[i];\n            }\n\n            sum = sum % 11;\n            if (sum > 9) {\n                sum = 0;\n            }\n            return (sum + '' === value.substr(8, 1));\n        },\n\n        /**\n         * Validate Norwegian VAT number\n         *\n         * @see http://www.brreg.no/english/coordination/number.html\n         * @param {String} value VAT number\n         * @returns {Boolean}\n         */\n        _no: function(value) {\n            if (/^NO[0-9]{9}$/.test(value)) {\n               value = value.substr(2);\n            }\n            if (!/^[0-9]{9}$/.test(value)) {\n               return false;\n            }\n\n            var sum    = 0,\n                weight = [3, 2, 7, 6, 5, 4, 3, 2];\n            for (var i = 0; i < 8; i++) {\n                sum += parseInt(value.charAt(i), 10) * weight[i];\n            }\n\n            sum = 11 - sum % 11;\n            if (sum === 11) {\n                sum = 0;\n            }\n            return (sum + '' === value.substr(8, 1));\n        },\n\n        /**\n         * Validate Polish VAT number\n         * Examples:\n         * - Valid: PL8567346215\n         * - Invalid: PL8567346216\n         *\n         * @param {String} value VAT number\n         * @returns {Boolean}\n         */\n        _pl: function(value) {\n            if (/^PL[0-9]{10}$/.test(value)) {\n                value = value.substr(2);\n            }\n            if (!/^[0-9]{10}$/.test(value)) {\n                return false;\n            }\n\n            var sum    = 0,\n                weight = [6, 5, 7, 2, 3, 4, 5, 6, 7, -1];\n\n            for (var i = 0; i < 10; i++) {\n                sum += parseInt(value.charAt(i), 10) * weight[i];\n            }\n\n            return (sum % 11 === 0);\n        },\n\n        /**\n         * Validate Portuguese VAT number\n         * Examples:\n         * - Valid: PT501964843\n         * - Invalid: PT501964842\n         *\n         * @param {String} value VAT number\n         * @returns {Boolean}\n         */\n        _pt: function(value) {\n            if (/^PT[0-9]{9}$/.test(value)) {\n                value = value.substr(2);\n            }\n            if (!/^[0-9]{9}$/.test(value)) {\n                return false;\n            }\n\n            var sum    = 0,\n                weight = [9, 8, 7, 6, 5, 4, 3, 2];\n\n            for (var i = 0; i < 8; i++) {\n                sum += parseInt(value.charAt(i), 10) * weight[i];\n            }\n            sum = 11 - sum % 11;\n            if (sum > 9) {\n                sum = 0;\n            }\n            return (sum + '' === value.substr(8, 1));\n        },\n\n        /**\n         * Validate Romanian VAT number\n         * Examples:\n         * - Valid: RO18547290\n         * - Invalid: RO18547291\n         *\n         * @param {String} value VAT number\n         * @returns {Boolean}\n         */\n        _ro: function(value) {\n            if (/^RO[1-9][0-9]{1,9}$/.test(value)) {\n                value = value.substr(2);\n            }\n            if (!/^[1-9][0-9]{1,9}$/.test(value)) {\n                return false;\n            }\n\n            var length = value.length,\n                weight = [7, 5, 3, 2, 1, 7, 5, 3, 2].slice(10 - length),\n                sum    = 0;\n            for (var i = 0; i < length - 1; i++) {\n                sum += parseInt(value.charAt(i), 10) * weight[i];\n            }\n\n            sum = (10 * sum) % 11 % 10;\n            return (sum + '' === value.substr(length - 1, 1));\n        },\n\n        /**\n         * Validate Russian VAT number (Taxpayer Identification Number - INN)\n         *\n         * @param {String} value VAT number\n         * @returns {Boolean}\n         */\n        _ru: function(value) {\n            if (/^RU([0-9]{10}|[0-9]{12})$/.test(value)) {\n                value = value.substr(2);\n            }\n            if (!/^([0-9]{10}|[0-9]{12})$/.test(value)) {\n                return false;\n            }\n\n            var i = 0;\n            if (value.length === 10) {\n                var sum    = 0,\n                    weight = [2, 4, 10, 3, 5, 9, 4, 6, 8, 0];\n                for (i = 0; i < 10; i++) {\n                    sum += parseInt(value.charAt(i), 10) * weight[i];\n                }\n                sum = sum % 11;\n                if (sum > 9) {\n                    sum = sum % 10;\n                }\n\n                return (sum + '' === value.substr(9, 1));\n            } else if (value.length === 12) {\n                var sum1    = 0,\n                    weight1 = [7, 2, 4, 10, 3, 5, 9, 4, 6, 8, 0],\n                    sum2    = 0,\n                    weight2 = [3, 7, 2, 4, 10, 3, 5, 9, 4, 6, 8, 0];\n\n                for (i = 0; i < 11; i++) {\n                    sum1 += parseInt(value.charAt(i), 10) * weight1[i];\n                    sum2 += parseInt(value.charAt(i), 10) * weight2[i];\n                }\n                sum1 = sum1 % 11;\n                if (sum1 > 9) {\n                    sum1 = sum1 % 10;\n                }\n                sum2 = sum2 % 11;\n                if (sum2 > 9) {\n                    sum2 = sum2 % 10;\n                }\n\n                return (sum1 + '' === value.substr(10, 1) && sum2 + '' === value.substr(11, 1));\n            }\n\n            return false;\n        },\n\n        /**\n         * Validate Serbian VAT number\n         *\n         * @param {String} value VAT number\n         * @returns {Boolean}\n         */\n        _rs: function(value) {\n            if (/^RS[0-9]{9}$/.test(value)) {\n                value = value.substr(2);\n            }\n            if (!/^[0-9]{9}$/.test(value)) {\n                return false;\n            }\n\n            var sum  = 10,\n                temp = 0;\n            for (var i = 0; i < 8; i++) {\n                temp = (parseInt(value.charAt(i), 10) + sum) % 10;\n                if (temp === 0) {\n                    temp = 10;\n                }\n                sum = (2 * temp) % 11;\n            }\n\n            return ((sum + parseInt(value.substr(8, 1), 10)) % 10 === 1);\n        },\n\n        /**\n         * Validate Swedish VAT number\n         * Examples:\n         * - Valid: SE123456789701\n         * - Invalid: SE123456789101\n         *\n         * @param {String} value VAT number\n         * @returns {Boolean}\n         */\n        _se: function(value) {\n            if (/^SE[0-9]{10}01$/.test(value)) {\n                value = value.substr(2);\n            }\n            if (!/^[0-9]{10}01$/.test(value)) {\n                return false;\n            }\n\n            value = value.substr(0, 10);\n            return $.fn.bootstrapValidator.helpers.luhn(value);\n        },\n\n        /**\n         * Validate Slovenian VAT number\n         * Examples:\n         * - Valid: SI50223054\n         * - Invalid: SI50223055\n         *\n         * @param {String} value VAT number\n         * @returns {Boolean}\n         */\n        _si: function(value) {\n            if (/^SI[0-9]{8}$/.test(value)) {\n                value = value.substr(2);\n            }\n            if (!/^[0-9]{8}$/.test(value)) {\n                return false;\n            }\n\n            var sum    = 0,\n                weight = [8, 7, 6, 5, 4, 3, 2];\n\n            for (var i = 0; i < 7; i++) {\n                sum += parseInt(value.charAt(i), 10) * weight[i];\n            }\n            sum = 11 - sum % 11;\n            if (sum === 10) {\n                sum = 0;\n            }\n            return (sum + '' === value.substr(7, 1));\n        },\n\n        /**\n         * Validate Slovak VAT number\n         * Examples:\n         * - Valid: SK2022749619\n         * - Invalid: SK2022749618\n         *\n         * @param {String} value VAT number\n         * @returns {Boolean}\n         */\n        _sk: function(value) {\n            if (/^SK[1-9][0-9][(2-4)|(6-9)][0-9]{7}$/.test(value)) {\n                value = value.substr(2);\n            }\n            if (!/^[1-9][0-9][(2-4)|(6-9)][0-9]{7}$/.test(value)) {\n                return false;\n            }\n\n            return (parseInt(value, 10) % 11 === 0);\n        },\n\n        /**\n         * Validate Venezuelan VAT number (RIF)\n         * Examples:\n         * - Valid: VEJ309272292, VEV242818101, VEJ000126518, VEJ000458324, J309272292, V242818101, J000126518, J000458324\n         * - Invalid: VEJ309272293, VEV242818100, J000126519, J000458323\n         *\n         * @param {String} value VAT number\n         * @returns {Boolean}\n         */\n        _ve: function(value) {\n            if (/^VE[VEJPG][0-9]{9}$/.test(value)) {\n                value = value.substr(2);\n            }\n            if (!/^[VEJPG][0-9]{9}$/.test(value)) {\n                return false;\n            }\n\n            var types  = {\n                    'V': 4,\n                    'E': 8,\n                    'J': 12,\n                    'P': 16,\n                    'G': 20\n                },\n                sum    = types[value.charAt(0)],\n                weight = [3, 2, 7, 6, 5, 4, 3, 2];\n\n            for (var i = 0; i < 8; i++) {\n                sum += parseInt(value.charAt(i + 1), 10) * weight[i];\n            }\n\n            sum = 11 - sum % 11;\n            if (sum === 11 || sum === 10) {\n                sum = 0;\n            }\n            return (sum + '' === value.substr(9, 1));\n        },\n\n        /**\n         * Validate South African VAT number\n         * Examples:\n         * - Valid: 4012345678\n         * - Invalid: 40123456789, 3012345678\n         *\n         * @params {String} value VAT number\n         * @returns {Boolean}\n         */\n         _za: function(value) {\n            if (/^ZA4[0-9]{9}$/.test(value)) {\n                value = value.substr(2);\n            }\n\n            return /^4[0-9]{9}$/.test(value);\n        }\n    };\n}(window.jQuery));\n;(function($) {\n    $.fn.bootstrapValidator.i18n.vin = $.extend($.fn.bootstrapValidator.i18n.vin || {}, {\n        'default': 'Please enter a valid VIN number'\n    });\n\n    $.fn.bootstrapValidator.validators.vin = {\n        /**\n         * Validate an US VIN (Vehicle Identification Number)\n         *\n         * @param {BootstrapValidator} validator The validator plugin instance\n         * @param {jQuery} $field Field element\n         * @param {Object} options Consist of key:\n         * - message: The invalid message\n         * @returns {Boolean}\n         */\n        validate: function(validator, $field, options) {\n            var value = $field.val();\n            if (value === '') {\n                return true;\n            }\n\n            // Don't accept I, O, Q characters\n            if (!/^[a-hj-npr-z0-9]{8}[0-9xX][a-hj-npr-z0-9]{8}$/i.test(value)) {\n                return false;\n            }\n\n            value = value.toUpperCase();\n            var chars   = {\n                    A: 1,   B: 2,   C: 3,   D: 4,   E: 5,   F: 6,   G: 7,   H: 8,\n                    J: 1,   K: 2,   L: 3,   M: 4,   N: 5,           P: 7,           R: 9,\n                            S: 2,   T: 3,   U: 4,   V: 5,   W: 6,   X: 7,   Y: 8,   Z: 9,\n                    '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9, '0': 0\n                },\n                weights = [8, 7, 6, 5, 4, 3, 2, 10, 0, 9, 8, 7, 6, 5, 4, 3, 2],\n                sum     = 0,\n                length  = value.length;\n            for (var i = 0; i < length; i++) {\n                sum += chars[value.charAt(i) + ''] * weights[i];\n            }\n\n            var reminder = sum % 11;\n            if (reminder === 10) {\n                reminder = 'X';\n            }\n\n            return (reminder + '') === value.charAt(8);\n        }\n    };\n}(window.jQuery));\n;(function($) {\n    $.fn.bootstrapValidator.i18n.zipCode = $.extend($.fn.bootstrapValidator.i18n.zipCode || {}, {\n        'default': 'Please enter a valid postal code',\n        countryNotSupported: 'The country code %s is not supported',\n        country: 'Please enter a valid postal code in %s',\n        countries: {\n            AT: 'Austria',\n            BR: 'Brazil',\n            CA: 'Canada',\n            CH: 'Switzerland',\n            CZ: 'Czech Republic',\n            DE: 'Germany',\n            DK: 'Denmark',\n            FR: 'France',\n            GB: 'United Kingdom',\n            IE: 'Ireland',\n            IT: 'Italy',\n            MA: 'Morocco',\n            NL: 'Netherlands',\n            PT: 'Portugal',\n            RO: 'Romania',\n            RU: 'Russia',\n            SE: 'Sweden',\n            SG: 'Singapore',\n            SK: 'Slovakia',\n            US: 'USA'\n        }\n    });\n\n    $.fn.bootstrapValidator.validators.zipCode = {\n        html5Attributes: {\n            message: 'message',\n            country: 'country'\n        },\n\n        COUNTRY_CODES: [ 'AT', 'BR', 'CA', 'CH', 'CZ', 'DE', 'DK', 'FR', 'GB', 'IE', 'IT', 'MA', 'NL', 'PT', 'RO', 'RU', 'SE', 'SG', 'SK', 'US'],\n\n        /**\n         * Return true if and only if the input value is a valid country zip code\n         *\n         * @param {BootstrapValidator} validator The validator plugin instance\n         * @param {jQuery} $field Field element\n         * @param {Object} options Consist of key:\n         * - message: The invalid message\n         * - country: The country\n         *\n         * The country can be defined by:\n         * - An ISO 3166 country code\n         * - Name of field which its value defines the country code\n         * - Name of callback function that returns the country code\n         * - A callback function that returns the country code\n         *\n         * callback: function(value, validator, $field) {\n         *      // value is the value of field\n         *      // validator is the BootstrapValidator instance\n         *      // $field is jQuery element representing the field\n         * }\n         *\n         * @returns {Boolean|Object}\n         */\n        validate: function(validator, $field, options) {\n            var value = $field.val();\n            if (value === '' || !options.country) {\n                return true;\n            }\n\n            var country = options.country;\n            if (typeof country !== 'string' || $.inArray(country, this.COUNTRY_CODES) === -1) {\n                // Try to determine the country\n                country = validator.getDynamicOption($field, country);\n            }\n\n            if (!country || $.inArray(country.toUpperCase(), this.COUNTRY_CODES) === -1) {\n                return { valid: false, message: $.fn.bootstrapValidator.helpers.format($.fn.bootstrapValidator.i18n.zipCode.countryNotSupported, country) };\n            }\n\n            var isValid = false;\n            country = country.toUpperCase();\n            switch (country) {\n                // http://en.wikipedia.org/wiki/List_of_postal_codes_in_Austria\n                case 'AT':\n                    isValid = /^([1-9]{1})(\\d{3})$/.test(value);\n                    break;\n\n                case 'BR':\n                    isValid = /^(\\d{2})([\\.]?)(\\d{3})([\\-]?)(\\d{3})$/.test(value);\n                    break;\n\n                case 'CA':\n                    isValid = /^(?:A|B|C|E|G|H|J|K|L|M|N|P|R|S|T|V|X|Y){1}[0-9]{1}(?:A|B|C|E|G|H|J|K|L|M|N|P|R|S|T|V|W|X|Y|Z){1}\\s?[0-9]{1}(?:A|B|C|E|G|H|J|K|L|M|N|P|R|S|T|V|W|X|Y|Z){1}[0-9]{1}$/i.test(value);\n                    break;\n\n                case 'CH':\n                    isValid = /^([1-9]{1})(\\d{3})$/.test(value);\n                    break;\n\n                case 'CZ':\n                    // Test: http://regexr.com/39hhr\n                    isValid = /^(\\d{3})([ ]?)(\\d{2})$/.test(value);\n                    break;\n\n                // http://stackoverflow.com/questions/7926687/regular-expression-german-zip-codes\n                case 'DE':\n                    isValid = /^(?!01000|99999)(0[1-9]\\d{3}|[1-9]\\d{4})$/.test(value);\n                    break;\n\n                case 'DK':\n                    isValid = /^(DK(-|\\s)?)?\\d{4}$/i.test(value);\n                    break;\n\n                // http://en.wikipedia.org/wiki/Postal_codes_in_France\n                case 'FR':\n                    isValid = /^[0-9]{5}$/i.test(value);\n                    break;\n\n                case 'GB':\n                    isValid = this._gb(value);\n                    break;\n\n                // http://www.eircode.ie/docs/default-source/Common/prepare-your-business-for-eircode---published-v2.pdf?sfvrsn=2\n                // Test: http://refiddle.com/1kpl\n                case 'IE':\n                    isValid = /^(D6W|[ACDEFHKNPRTVWXY]\\d{2})\\s[0-9ACDEFHKNPRTVWXY]{4}$/.test(value);\n                    break;\n\n                // http://en.wikipedia.org/wiki/List_of_postal_codes_in_Italy\n                case 'IT':\n                    isValid = /^(I-|IT-)?\\d{5}$/i.test(value);\n                    break;\n\n                // http://en.wikipedia.org/wiki/List_of_postal_codes_in_Morocco\n                case 'MA':\n                    isValid = /^[1-9][0-9]{4}$/i.test(value);\n                    break;\n\n                // http://en.wikipedia.org/wiki/Postal_codes_in_the_Netherlands\n                case 'NL':\n                    isValid = /^[1-9][0-9]{3} ?(?!sa|sd|ss)[a-z]{2}$/i.test(value);\n                    break;\n\n                // Test: http://refiddle.com/1l2t\n                case 'PT':\n                    isValid = /^[1-9]\\d{3}-\\d{3}$/.test(value);\n                    break;\n\n                case 'RO':\n                    isValid = /^(0[1-8]{1}|[1-9]{1}[0-5]{1})?[0-9]{4}$/i.test(value);\n                    break;\n\n                case 'RU':\n                    isValid = /^[0-9]{6}$/i.test(value);\n                    break;\n\n                case 'SE':\n                    isValid = /^(S-)?\\d{3}\\s?\\d{2}$/i.test(value);\n                    break;\n\n                case 'SG':\n                    isValid = /^([0][1-9]|[1-6][0-9]|[7]([0-3]|[5-9])|[8][0-2])(\\d{4})$/i.test(value);\n                    break;\n\n                case 'SK':\n                    // Test: http://regexr.com/39hhr\n                    isValid = /^(\\d{3})([ ]?)(\\d{2})$/.test(value);\n                    break;\n\n                case 'US':\n                /* falls through */\n                default:\n                    isValid = /^\\d{4,5}([\\-]?\\d{4})?$/.test(value);\n                    break;\n            }\n\n            return {\n                valid: isValid,\n                message: $.fn.bootstrapValidator.helpers.format(options.message || $.fn.bootstrapValidator.i18n.zipCode.country, $.fn.bootstrapValidator.i18n.zipCode.countries[country])\n            };\n        },\n\n        /**\n         * Validate United Kingdom postcode\n         * Examples:\n         * - Standard: EC1A 1BB, W1A 1HQ, M1 1AA, B33 8TH, CR2 6XH, DN55 1PT\n         * - Special cases:\n         * AI-2640, ASCN 1ZZ, GIR 0AA\n         *\n         * @see http://en.wikipedia.org/wiki/Postcodes_in_the_United_Kingdom\n         * @param {String} value The postcode\n         * @returns {Boolean}\n         */\n        _gb: function(value) {\n            var firstChar  = '[ABCDEFGHIJKLMNOPRSTUWYZ]',     // Does not accept QVX\n                secondChar = '[ABCDEFGHKLMNOPQRSTUVWXY]',     // Does not accept IJZ\n                thirdChar  = '[ABCDEFGHJKPMNRSTUVWXY]',\n                fourthChar = '[ABEHMNPRVWXY]',\n                fifthChar  = '[ABDEFGHJLNPQRSTUWXYZ]',\n                regexps    = [\n                    // AN NAA, ANN NAA, AAN NAA, AANN NAA format\n                    new RegExp('^(' + firstChar + '{1}' + secondChar + '?[0-9]{1,2})(\\\\s*)([0-9]{1}' + fifthChar + '{2})$', 'i'),\n                    // ANA NAA\n                    new RegExp('^(' + firstChar + '{1}[0-9]{1}' + thirdChar + '{1})(\\\\s*)([0-9]{1}' + fifthChar + '{2})$', 'i'),\n                    // AANA NAA\n                    new RegExp('^(' + firstChar + '{1}' + secondChar + '{1}?[0-9]{1}' + fourthChar + '{1})(\\\\s*)([0-9]{1}' + fifthChar + '{2})$', 'i'),\n\n                    new RegExp('^(BF1)(\\\\s*)([0-6]{1}[ABDEFGHJLNPQRST]{1}[ABDEFGHJLNPQRSTUWZYZ]{1})$', 'i'),        // BFPO postcodes\n                    /^(GIR)(\\s*)(0AA)$/i,                       // Special postcode GIR 0AA\n                    /^(BFPO)(\\s*)([0-9]{1,4})$/i,               // Standard BFPO numbers\n                    /^(BFPO)(\\s*)(c\\/o\\s*[0-9]{1,3})$/i,        // c/o BFPO numbers\n                    /^([A-Z]{4})(\\s*)(1ZZ)$/i,                  // Overseas Territories\n                    /^(AI-2640)$/i                              // Anguilla\n                ];\n            for (var i = 0; i < regexps.length; i++) {\n                if (regexps[i].test(value)) {\n                    return true;\n                }\n            }\n\n            return false;\n        }\n    };\n}(window.jQuery));\n"
  },
  {
    "path": "src/main/resources/static/plugins/bootstrapvalidator/js/language/zh_CN.js",
    "content": "(function ($) {\n    /**\n     * Simplified Chinese language package\n     * Translated by @shamiao\n     */\n    $.fn.bootstrapValidator.i18n = $.extend(true, $.fn.bootstrapValidator.i18n, {\n        base64: {\n            'default': '请输入有效的Base64编码'\n        },\n        between: {\n            'default': '请输入在 %s 和 %s 之间的数值',\n            notInclusive: '请输入在 %s 和 %s 之间(不含两端)的数值'\n        },\n        callback: {\n            'default': '请输入有效的值'\n        },\n        choice: {\n            'default': '请输入有效的值',\n            less: '请至少选中 %s 个选项',\n            more: '最多只能选中 %s 个选项',\n            between: '请选择 %s 至 %s 个选项'\n        },\n        color: {\n            'default': '请输入有效的颜色值'\n        },\n        creditCard: {\n            'default': '请输入有效的信用卡号码'\n        },\n        cusip: {\n            'default': '请输入有效的美国CUSIP代码'\n        },\n        cvv: {\n            'default': '请输入有效的CVV代码'\n        },\n        date: {\n            'default': '请输入有效的日期', \n            min: '请输入 %s 或之后的日期',\n            max: '请输入 %s 或以前的日期',\n            range: '请输入 %s 和 %s 之间的日期'\n        },\n        different: {\n            'default': '请输入不同的值'\n        },\n        digits: {\n            'default': '请输入有效的数字'\n        },\n        ean: {\n            'default': '请输入有效的EAN商品编码'\n        },\n        emailAddress: {\n            'default': '请输入有效的邮件地址'\n        },\n        file: {\n            'default': '请选择有效的文件'\n        },\n        greaterThan: {\n            'default': '请输入大于等于 %s 的数值',\n            notInclusive: '请输入大于 %s 的数值'\n        },\n        grid: {\n            'default': '请输入有效的GRId编码'\n        },\n        hex: {\n            'default': '请输入有效的16进制数'\n        },\n        hexColor: {\n            'default': '请输入有效的16进制颜色值'\n        },\n        iban: {\n            'default': '请输入有效的IBAN(国际银行账户)号码',\n            countryNotSupported: '不支持 %s 国家或地区',\n            country: '请输入有效的 %s 国家或地区的IBAN(国际银行账户)号码',\n            countries: {\n                AD: '安道​​尔',\n                AE: '阿联酋',\n                AL: '阿尔巴尼亚',\n                AO: '安哥拉',\n                AT: '奥地利',\n                AZ: '阿塞拜疆',\n                BA: '波斯尼亚和黑塞哥维那',\n                BE: '比利时',\n                BF: '布基纳法索',\n                BG: '保加利亚',\n                BH: '巴林',\n                BI: '布隆迪',\n                BJ: '贝宁',\n                BR: '巴西',\n                CH: '瑞士',\n                CI: '科特迪瓦',\n                CM: '喀麦隆',\n                CR: '哥斯达黎加',\n                CV: '佛得角',\n                CY: '塞浦路斯',\n                CZ: '捷克共和国',\n                DE: '德国',\n                DK: '丹麦',\n                DO: '多米尼加共和国',\n                DZ: '阿尔及利亚',\n                EE: '爱沙尼亚',\n                ES: '西班牙',\n                FI: '芬兰',\n                FO: '法罗群岛',\n                FR: '法国',\n                GB: '英国',\n                GE: '格鲁吉亚',\n                GI: '直布罗陀',\n                GL: '格陵兰岛',\n                GR: '希腊',\n                GT: '危地马拉',\n                HR: '克罗地亚',\n                HU: '匈牙利',\n                IE: '爱尔兰',\n                IL: '以色列',\n                IR: '伊朗',\n                IS: '冰岛',\n                IT: '意大利',\n                JO: '约旦',\n                KW: '科威特',\n                KZ: '哈萨克斯坦',\n                LB: '黎巴嫩',\n                LI: '列支敦士登',\n                LT: '立陶宛',\n                LU: '卢森堡',\n                LV: '拉脱维亚',\n                MC: '摩纳哥',\n                MD: '摩尔多瓦',\n                ME: '黑山',\n                MG: '马达加斯加',\n                MK: '马其顿',\n                ML: '马里',\n                MR: '毛里塔尼亚',\n                MT: '马耳他',\n                MU: '毛里求斯',\n                MZ: '莫桑比克',\n                NL: '荷兰',\n                NO: '挪威',\n                PK: '巴基斯坦',\n                PL: '波兰',\n                PS: '巴勒斯坦',\n                PT: '葡萄牙',\n                QA: '卡塔尔',\n                RO: '罗马尼亚',\n                RS: '塞尔维亚',\n                SA: '沙特阿拉伯',\n                SE: '瑞典',\n                SI: '斯洛文尼亚',\n                SK: '斯洛伐克',\n                SM: '圣马力诺',\n                SN: '塞内加尔',\n                TN: '突尼斯',\n                TR: '土耳其',\n                VG: '英属维尔京群岛'\n            }\n        },\n        id: {\n            'default': '请输入有效的身份证件号码',\n            countryNotSupported: '不支持 %s 国家或地区',\n            country: '请输入有效的 %s 国家或地区的身份证件号码',\n            countries: {\n                BA: '波黑',\n                BG: '保加利亚',\n                BR: '巴西',\n                CH: '瑞士',\n                CL: '智利',\n                CN: '中国',\n                CZ: '捷克共和国',\n                DK: '丹麦',\n                EE: '爱沙尼亚',\n                ES: '西班牙',\n                FI: '芬兰',\n                HR: '克罗地亚',\n                IE: '爱尔兰',\n                IS: '冰岛',\n                LT: '立陶宛',\n                LV: '拉脱维亚',\n                ME: '黑山',\n                MK: '马其顿',\n                NL: '荷兰',\n                RO: '罗马尼亚',\n                RS: '塞尔维亚',\n                SE: '瑞典',\n                SI: '斯洛文尼亚',\n                SK: '斯洛伐克',\n                SM: '圣马力诺',\n                TH: '泰国',\n                ZA: '南非'\n            }\n        },\n        identical: {\n            'default': '请输入相同的值'\n        },\n        imei: {\n            'default': '请输入有效的IMEI(手机串号)'\n        },\n        imo: {\n            'default': '请输入有效的国际海事组织(IMO)号码'\n        },\n        integer: {\n            'default': '请输入有效的整数值'\n        },\n        ip: {\n            'default': '请输入有效的IP地址',\n            ipv4: '请输入有效的IPv4地址',\n            ipv6: '请输入有效的IPv6地址'\n        },\n        isbn: {\n            'default': '请输入有效的ISBN(国际标准书号)'\n        },\n        isin: {\n            'default': '请输入有效的ISIN(国际证券编码)'\n        },\n        ismn: {\n            'default': '请输入有效的ISMN(印刷音乐作品编码)'\n        },\n        issn: {\n            'default': '请输入有效的ISSN(国际标准杂志书号)'\n        },\n        lessThan: {\n            'default': '请输入小于等于 %s 的数值',\n            notInclusive: '请输入小于 %s 的数值'\n        },\n        mac: {\n            'default': '请输入有效的MAC物理地址'\n        },\n        meid: {\n            'default': '请输入有效的MEID(移动设备识别码)'\n        },\n        notEmpty: {\n            'default': '请填写必填项目'\n        },\n        numeric: {\n            'default': '请输入有效的数值，允许小数'\n        },\n        phone: {\n            'default': '请输入有效的电话号码',\n            countryNotSupported: '不支持 %s 国家或地区',\n            country: '请输入有效的 %s 国家或地区的电话号码',\n            countries: {\n                BR: '巴西',\n                CN: '中国',\n                CZ: '捷克共和国',\n                DE: '德国',\n                DK: '丹麦',\n                ES: '西班牙',\n                FR: '法国',\n                GB: '英国',\n                MA: '摩洛哥',\n                PK: '巴基斯坦',\n                RO: '罗马尼亚',\n                RU: '俄罗斯',\n                SK: '斯洛伐克',\n                TH: '泰国',\n                US: '美国',\n                VE: '委内瑞拉'\n            }\n        },\n        regexp: {\n            'default': '请输入符合正则表达式限制的值'\n        },\n        remote: {\n            'default': '请输入有效的值'\n        },\n        rtn: {\n            'default': '请输入有效的RTN号码'\n        },\n        sedol: {\n            'default': '请输入有效的SEDOL代码'\n        },\n        siren: {\n            'default': '请输入有效的SIREN号码'\n        },\n        siret: {\n            'default': '请输入有效的SIRET号码'\n        },\n        step: {\n            'default': '请输入在基础值上，增加 %s 的整数倍的数值'\n        },\n        stringCase: {\n            'default': '只能输入小写字母',\n            upper: '只能输入大写字母'\n        },\n        stringLength: {\n            'default': '请输入符合长度限制的值',\n            less: '最多只能输入 %s 个字符',\n            more: '需要输入至少 %s 个字符',\n            between: '请输入 %s 至 %s 个字符'\n        },\n        uri: {\n            'default': '请输入一个有效的URL地址'\n        },\n        uuid: {\n            'default': '请输入有效的UUID',\n            version: '请输入版本 %s 的UUID'\n        },\n        vat: {\n            'default': '请输入有效的VAT(税号)',\n            countryNotSupported: '不支持 %s 国家或地区',\n            country: '请输入有效的 %s 国家或地区的VAT(税号)',\n            countries: {\n                AT: '奥地利',\n                BE: '比利时',\n                BG: '保加利亚',\n                BR: '巴西',\n                CH: '瑞士',\n                CY: '塞浦路斯',\n                CZ: '捷克共和国',\n                DE: '德国',\n                DK: '丹麦',\n                EE: '爱沙尼亚',\n                ES: '西班牙',\n                FI: '芬兰',\n                FR: '法语',\n                GB: '英国',\n                GR: '希腊',\n                EL: '希腊',\n                HU: '匈牙利',\n                HR: '克罗地亚',\n                IE: '爱尔兰',\n                IS: '冰岛',\n                IT: '意大利',\n                LT: '立陶宛',\n                LU: '卢森堡',\n                LV: '拉脱维亚',\n                MT: '马耳他',\n                NL: '荷兰',\n                NO: '挪威',\n                PL: '波兰',\n                PT: '葡萄牙',\n                RO: '罗马尼亚',\n                RU: '俄罗斯',\n                RS: '塞尔维亚',\n                SE: '瑞典',\n                SI: '斯洛文尼亚',\n                SK: '斯洛伐克',\n                VE: '委内瑞拉',\n                ZA: '南非'\n            }\n        },\n        vin: {\n            'default': '请输入有效的VIN(美国车辆识别号码)'\n        },\n        zipCode: {\n            'default': '请输入有效的邮政编码',\n            countryNotSupported: '不支持 %s 国家或地区',\n            country: '请输入有效的 %s 国家或地区的邮政编码',\n            countries: {\n                AT: '奥地利',\n                BR: '巴西',\n                CA: '加拿大',\n                CH: '瑞士',\n                CZ: '捷克共和国',\n                DE: '德国',\n                DK: '丹麦',\n                FR: '法国',\n                GB: '英国',\n                IE: '爱尔兰',\n                IT: '意大利',\n                MA: '摩洛哥',\n                NL: '荷兰',\n                PT: '葡萄牙',\n                RO: '罗马尼亚',\n                RU: '俄罗斯',\n                SE: '瑞典',\n                SG: '新加坡',\n                SK: '斯洛伐克',\n                US: '美国'\n            }\n        }\n    });\n}(window.jQuery));\n"
  },
  {
    "path": "src/main/resources/static/plugins/font-awesome/css/font-awesome.css",
    "content": "/*!\n *  Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome\n *  License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)\n */\n/* FONT PATH\n * -------------------------- */\n@font-face {\n  font-family: 'FontAwesome';\n  src: url('../fonts/fontawesome-webfont.eot?v=4.7.0');\n  src: url('../fonts/fontawesome-webfont.eot?#iefix&v=4.7.0') format('embedded-opentype'), url('../fonts/fontawesome-webfont.woff2?v=4.7.0') format('woff2'), url('../fonts/fontawesome-webfont.woff?v=4.7.0') format('woff'), url('../fonts/fontawesome-webfont.ttf?v=4.7.0') format('truetype'), url('../fonts/fontawesome-webfont.svg?v=4.7.0#fontawesomeregular') format('svg');\n  font-weight: normal;\n  font-style: normal;\n}\n.fa {\n  display: inline-block;\n  font: normal normal normal 14px/1 FontAwesome;\n  font-size: inherit;\n  text-rendering: auto;\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n}\n/* makes the font 33% larger relative to the icon container */\n.fa-lg {\n  font-size: 1.33333333em;\n  line-height: 0.75em;\n  vertical-align: -15%;\n}\n.fa-2x {\n  font-size: 2em;\n}\n.fa-3x {\n  font-size: 3em;\n}\n.fa-4x {\n  font-size: 4em;\n}\n.fa-5x {\n  font-size: 5em;\n}\n.fa-fw {\n  width: 1.28571429em;\n  text-align: center;\n}\n.fa-ul {\n  padding-left: 0;\n  margin-left: 2.14285714em;\n  list-style-type: none;\n}\n.fa-ul > li {\n  position: relative;\n}\n.fa-li {\n  position: absolute;\n  left: -2.14285714em;\n  width: 2.14285714em;\n  top: 0.14285714em;\n  text-align: center;\n}\n.fa-li.fa-lg {\n  left: -1.85714286em;\n}\n.fa-border {\n  padding: .2em .25em .15em;\n  border: solid 0.08em #eeeeee;\n  border-radius: .1em;\n}\n.fa-pull-left {\n  float: left;\n}\n.fa-pull-right {\n  float: right;\n}\n.fa.fa-pull-left {\n  margin-right: .3em;\n}\n.fa.fa-pull-right {\n  margin-left: .3em;\n}\n/* Deprecated as of 4.4.0 */\n.pull-right {\n  float: right;\n}\n.pull-left {\n  float: left;\n}\n.fa.pull-left {\n  margin-right: .3em;\n}\n.fa.pull-right {\n  margin-left: .3em;\n}\n.fa-spin {\n  -webkit-animation: fa-spin 2s infinite linear;\n  animation: fa-spin 2s infinite linear;\n}\n.fa-pulse {\n  -webkit-animation: fa-spin 1s infinite steps(8);\n  animation: fa-spin 1s infinite steps(8);\n}\n@-webkit-keyframes fa-spin {\n  0% {\n    -webkit-transform: rotate(0deg);\n    transform: rotate(0deg);\n  }\n  100% {\n    -webkit-transform: rotate(359deg);\n    transform: rotate(359deg);\n  }\n}\n@keyframes fa-spin {\n  0% {\n    -webkit-transform: rotate(0deg);\n    transform: rotate(0deg);\n  }\n  100% {\n    -webkit-transform: rotate(359deg);\n    transform: rotate(359deg);\n  }\n}\n.fa-rotate-90 {\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)\";\n  -webkit-transform: rotate(90deg);\n  -ms-transform: rotate(90deg);\n  transform: rotate(90deg);\n}\n.fa-rotate-180 {\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)\";\n  -webkit-transform: rotate(180deg);\n  -ms-transform: rotate(180deg);\n  transform: rotate(180deg);\n}\n.fa-rotate-270 {\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)\";\n  -webkit-transform: rotate(270deg);\n  -ms-transform: rotate(270deg);\n  transform: rotate(270deg);\n}\n.fa-flip-horizontal {\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)\";\n  -webkit-transform: scale(-1, 1);\n  -ms-transform: scale(-1, 1);\n  transform: scale(-1, 1);\n}\n.fa-flip-vertical {\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)\";\n  -webkit-transform: scale(1, -1);\n  -ms-transform: scale(1, -1);\n  transform: scale(1, -1);\n}\n:root .fa-rotate-90,\n:root .fa-rotate-180,\n:root .fa-rotate-270,\n:root .fa-flip-horizontal,\n:root .fa-flip-vertical {\n  filter: none;\n}\n.fa-stack {\n  position: relative;\n  display: inline-block;\n  width: 2em;\n  height: 2em;\n  line-height: 2em;\n  vertical-align: middle;\n}\n.fa-stack-1x,\n.fa-stack-2x {\n  position: absolute;\n  left: 0;\n  width: 100%;\n  text-align: center;\n}\n.fa-stack-1x {\n  line-height: inherit;\n}\n.fa-stack-2x {\n  font-size: 2em;\n}\n.fa-inverse {\n  color: #ffffff;\n}\n/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen\n   readers do not read off random characters that represent icons */\n.fa-glass:before {\n  content: \"\\f000\";\n}\n.fa-music:before {\n  content: \"\\f001\";\n}\n.fa-search:before {\n  content: \"\\f002\";\n}\n.fa-envelope-o:before {\n  content: \"\\f003\";\n}\n.fa-heart:before {\n  content: \"\\f004\";\n}\n.fa-star:before {\n  content: \"\\f005\";\n}\n.fa-star-o:before {\n  content: \"\\f006\";\n}\n.fa-user:before {\n  content: \"\\f007\";\n}\n.fa-film:before {\n  content: \"\\f008\";\n}\n.fa-th-large:before {\n  content: \"\\f009\";\n}\n.fa-th:before {\n  content: \"\\f00a\";\n}\n.fa-th-list:before {\n  content: \"\\f00b\";\n}\n.fa-check:before {\n  content: \"\\f00c\";\n}\n.fa-remove:before,\n.fa-close:before,\n.fa-times:before {\n  content: \"\\f00d\";\n}\n.fa-search-plus:before {\n  content: \"\\f00e\";\n}\n.fa-search-minus:before {\n  content: \"\\f010\";\n}\n.fa-power-off:before {\n  content: \"\\f011\";\n}\n.fa-signal:before {\n  content: \"\\f012\";\n}\n.fa-gear:before,\n.fa-cog:before {\n  content: \"\\f013\";\n}\n.fa-trash-o:before {\n  content: \"\\f014\";\n}\n.fa-home:before {\n  content: \"\\f015\";\n}\n.fa-file-o:before {\n  content: \"\\f016\";\n}\n.fa-clock-o:before {\n  content: \"\\f017\";\n}\n.fa-road:before {\n  content: \"\\f018\";\n}\n.fa-download:before {\n  content: \"\\f019\";\n}\n.fa-arrow-circle-o-down:before {\n  content: \"\\f01a\";\n}\n.fa-arrow-circle-o-up:before {\n  content: \"\\f01b\";\n}\n.fa-inbox:before {\n  content: \"\\f01c\";\n}\n.fa-play-circle-o:before {\n  content: \"\\f01d\";\n}\n.fa-rotate-right:before,\n.fa-repeat:before {\n  content: \"\\f01e\";\n}\n.fa-refresh:before {\n  content: \"\\f021\";\n}\n.fa-list-alt:before {\n  content: \"\\f022\";\n}\n.fa-lock:before {\n  content: \"\\f023\";\n}\n.fa-flag:before {\n  content: \"\\f024\";\n}\n.fa-headphones:before {\n  content: \"\\f025\";\n}\n.fa-volume-off:before {\n  content: \"\\f026\";\n}\n.fa-volume-down:before {\n  content: \"\\f027\";\n}\n.fa-volume-up:before {\n  content: \"\\f028\";\n}\n.fa-qrcode:before {\n  content: \"\\f029\";\n}\n.fa-barcode:before {\n  content: \"\\f02a\";\n}\n.fa-tag:before {\n  content: \"\\f02b\";\n}\n.fa-tags:before {\n  content: \"\\f02c\";\n}\n.fa-book:before {\n  content: \"\\f02d\";\n}\n.fa-bookmark:before {\n  content: \"\\f02e\";\n}\n.fa-print:before {\n  content: \"\\f02f\";\n}\n.fa-camera:before {\n  content: \"\\f030\";\n}\n.fa-font:before {\n  content: \"\\f031\";\n}\n.fa-bold:before {\n  content: \"\\f032\";\n}\n.fa-italic:before {\n  content: \"\\f033\";\n}\n.fa-text-height:before {\n  content: \"\\f034\";\n}\n.fa-text-width:before {\n  content: \"\\f035\";\n}\n.fa-align-left:before {\n  content: \"\\f036\";\n}\n.fa-align-center:before {\n  content: \"\\f037\";\n}\n.fa-align-right:before {\n  content: \"\\f038\";\n}\n.fa-align-justify:before {\n  content: \"\\f039\";\n}\n.fa-list:before {\n  content: \"\\f03a\";\n}\n.fa-dedent:before,\n.fa-outdent:before {\n  content: \"\\f03b\";\n}\n.fa-indent:before {\n  content: \"\\f03c\";\n}\n.fa-video-camera:before {\n  content: \"\\f03d\";\n}\n.fa-photo:before,\n.fa-image:before,\n.fa-picture-o:before {\n  content: \"\\f03e\";\n}\n.fa-pencil:before {\n  content: \"\\f040\";\n}\n.fa-map-marker:before {\n  content: \"\\f041\";\n}\n.fa-adjust:before {\n  content: \"\\f042\";\n}\n.fa-tint:before {\n  content: \"\\f043\";\n}\n.fa-edit:before,\n.fa-pencil-square-o:before {\n  content: \"\\f044\";\n}\n.fa-share-square-o:before {\n  content: \"\\f045\";\n}\n.fa-check-square-o:before {\n  content: \"\\f046\";\n}\n.fa-arrows:before {\n  content: \"\\f047\";\n}\n.fa-step-backward:before {\n  content: \"\\f048\";\n}\n.fa-fast-backward:before {\n  content: \"\\f049\";\n}\n.fa-backward:before {\n  content: \"\\f04a\";\n}\n.fa-play:before {\n  content: \"\\f04b\";\n}\n.fa-pause:before {\n  content: \"\\f04c\";\n}\n.fa-stop:before {\n  content: \"\\f04d\";\n}\n.fa-forward:before {\n  content: \"\\f04e\";\n}\n.fa-fast-forward:before {\n  content: \"\\f050\";\n}\n.fa-step-forward:before {\n  content: \"\\f051\";\n}\n.fa-eject:before {\n  content: \"\\f052\";\n}\n.fa-chevron-left:before {\n  content: \"\\f053\";\n}\n.fa-chevron-right:before {\n  content: \"\\f054\";\n}\n.fa-plus-circle:before {\n  content: \"\\f055\";\n}\n.fa-minus-circle:before {\n  content: \"\\f056\";\n}\n.fa-times-circle:before {\n  content: \"\\f057\";\n}\n.fa-check-circle:before {\n  content: \"\\f058\";\n}\n.fa-question-circle:before {\n  content: \"\\f059\";\n}\n.fa-info-circle:before {\n  content: \"\\f05a\";\n}\n.fa-crosshairs:before {\n  content: \"\\f05b\";\n}\n.fa-times-circle-o:before {\n  content: \"\\f05c\";\n}\n.fa-check-circle-o:before {\n  content: \"\\f05d\";\n}\n.fa-ban:before {\n  content: \"\\f05e\";\n}\n.fa-arrow-left:before {\n  content: \"\\f060\";\n}\n.fa-arrow-right:before {\n  content: \"\\f061\";\n}\n.fa-arrow-up:before {\n  content: \"\\f062\";\n}\n.fa-arrow-down:before {\n  content: \"\\f063\";\n}\n.fa-mail-forward:before,\n.fa-share:before {\n  content: \"\\f064\";\n}\n.fa-expand:before {\n  content: \"\\f065\";\n}\n.fa-compress:before {\n  content: \"\\f066\";\n}\n.fa-plus:before {\n  content: \"\\f067\";\n}\n.fa-minus:before {\n  content: \"\\f068\";\n}\n.fa-asterisk:before {\n  content: \"\\f069\";\n}\n.fa-exclamation-circle:before {\n  content: \"\\f06a\";\n}\n.fa-gift:before {\n  content: \"\\f06b\";\n}\n.fa-leaf:before {\n  content: \"\\f06c\";\n}\n.fa-fire:before {\n  content: \"\\f06d\";\n}\n.fa-eye:before {\n  content: \"\\f06e\";\n}\n.fa-eye-slash:before {\n  content: \"\\f070\";\n}\n.fa-warning:before,\n.fa-exclamation-triangle:before {\n  content: \"\\f071\";\n}\n.fa-plane:before {\n  content: \"\\f072\";\n}\n.fa-calendar:before {\n  content: \"\\f073\";\n}\n.fa-random:before {\n  content: \"\\f074\";\n}\n.fa-comment:before {\n  content: \"\\f075\";\n}\n.fa-magnet:before {\n  content: \"\\f076\";\n}\n.fa-chevron-up:before {\n  content: \"\\f077\";\n}\n.fa-chevron-down:before {\n  content: \"\\f078\";\n}\n.fa-retweet:before {\n  content: \"\\f079\";\n}\n.fa-shopping-cart:before {\n  content: \"\\f07a\";\n}\n.fa-folder:before {\n  content: \"\\f07b\";\n}\n.fa-folder-open:before {\n  content: \"\\f07c\";\n}\n.fa-arrows-v:before {\n  content: \"\\f07d\";\n}\n.fa-arrows-h:before {\n  content: \"\\f07e\";\n}\n.fa-bar-chart-o:before,\n.fa-bar-chart:before {\n  content: \"\\f080\";\n}\n.fa-twitter-square:before {\n  content: \"\\f081\";\n}\n.fa-facebook-square:before {\n  content: \"\\f082\";\n}\n.fa-camera-retro:before {\n  content: \"\\f083\";\n}\n.fa-key:before {\n  content: \"\\f084\";\n}\n.fa-gears:before,\n.fa-cogs:before {\n  content: \"\\f085\";\n}\n.fa-comments:before {\n  content: \"\\f086\";\n}\n.fa-thumbs-o-up:before {\n  content: \"\\f087\";\n}\n.fa-thumbs-o-down:before {\n  content: \"\\f088\";\n}\n.fa-star-half:before {\n  content: \"\\f089\";\n}\n.fa-heart-o:before {\n  content: \"\\f08a\";\n}\n.fa-sign-out:before {\n  content: \"\\f08b\";\n}\n.fa-linkedin-square:before {\n  content: \"\\f08c\";\n}\n.fa-thumb-tack:before {\n  content: \"\\f08d\";\n}\n.fa-external-link:before {\n  content: \"\\f08e\";\n}\n.fa-sign-in:before {\n  content: \"\\f090\";\n}\n.fa-trophy:before {\n  content: \"\\f091\";\n}\n.fa-github-square:before {\n  content: \"\\f092\";\n}\n.fa-upload:before {\n  content: \"\\f093\";\n}\n.fa-lemon-o:before {\n  content: \"\\f094\";\n}\n.fa-phone:before {\n  content: \"\\f095\";\n}\n.fa-square-o:before {\n  content: \"\\f096\";\n}\n.fa-bookmark-o:before {\n  content: \"\\f097\";\n}\n.fa-phone-square:before {\n  content: \"\\f098\";\n}\n.fa-twitter:before {\n  content: \"\\f099\";\n}\n.fa-facebook-f:before,\n.fa-facebook:before {\n  content: \"\\f09a\";\n}\n.fa-github:before {\n  content: \"\\f09b\";\n}\n.fa-unlock:before {\n  content: \"\\f09c\";\n}\n.fa-credit-card:before {\n  content: \"\\f09d\";\n}\n.fa-feed:before,\n.fa-rss:before {\n  content: \"\\f09e\";\n}\n.fa-hdd-o:before {\n  content: \"\\f0a0\";\n}\n.fa-bullhorn:before {\n  content: \"\\f0a1\";\n}\n.fa-bell:before {\n  content: \"\\f0f3\";\n}\n.fa-certificate:before {\n  content: \"\\f0a3\";\n}\n.fa-hand-o-right:before {\n  content: \"\\f0a4\";\n}\n.fa-hand-o-left:before {\n  content: \"\\f0a5\";\n}\n.fa-hand-o-up:before {\n  content: \"\\f0a6\";\n}\n.fa-hand-o-down:before {\n  content: \"\\f0a7\";\n}\n.fa-arrow-circle-left:before {\n  content: \"\\f0a8\";\n}\n.fa-arrow-circle-right:before {\n  content: \"\\f0a9\";\n}\n.fa-arrow-circle-up:before {\n  content: \"\\f0aa\";\n}\n.fa-arrow-circle-down:before {\n  content: \"\\f0ab\";\n}\n.fa-globe:before {\n  content: \"\\f0ac\";\n}\n.fa-wrench:before {\n  content: \"\\f0ad\";\n}\n.fa-tasks:before {\n  content: \"\\f0ae\";\n}\n.fa-filter:before {\n  content: \"\\f0b0\";\n}\n.fa-briefcase:before {\n  content: \"\\f0b1\";\n}\n.fa-arrows-alt:before {\n  content: \"\\f0b2\";\n}\n.fa-group:before,\n.fa-users:before {\n  content: \"\\f0c0\";\n}\n.fa-chain:before,\n.fa-link:before {\n  content: \"\\f0c1\";\n}\n.fa-cloud:before {\n  content: \"\\f0c2\";\n}\n.fa-flask:before {\n  content: \"\\f0c3\";\n}\n.fa-cut:before,\n.fa-scissors:before {\n  content: \"\\f0c4\";\n}\n.fa-copy:before,\n.fa-files-o:before {\n  content: \"\\f0c5\";\n}\n.fa-paperclip:before {\n  content: \"\\f0c6\";\n}\n.fa-save:before,\n.fa-floppy-o:before {\n  content: \"\\f0c7\";\n}\n.fa-square:before {\n  content: \"\\f0c8\";\n}\n.fa-navicon:before,\n.fa-reorder:before,\n.fa-bars:before {\n  content: \"\\f0c9\";\n}\n.fa-list-ul:before {\n  content: \"\\f0ca\";\n}\n.fa-list-ol:before {\n  content: \"\\f0cb\";\n}\n.fa-strikethrough:before {\n  content: \"\\f0cc\";\n}\n.fa-underline:before {\n  content: \"\\f0cd\";\n}\n.fa-table:before {\n  content: \"\\f0ce\";\n}\n.fa-magic:before {\n  content: \"\\f0d0\";\n}\n.fa-truck:before {\n  content: \"\\f0d1\";\n}\n.fa-pinterest:before {\n  content: \"\\f0d2\";\n}\n.fa-pinterest-square:before {\n  content: \"\\f0d3\";\n}\n.fa-google-plus-square:before {\n  content: \"\\f0d4\";\n}\n.fa-google-plus:before {\n  content: \"\\f0d5\";\n}\n.fa-money:before {\n  content: \"\\f0d6\";\n}\n.fa-caret-down:before {\n  content: \"\\f0d7\";\n}\n.fa-caret-up:before {\n  content: \"\\f0d8\";\n}\n.fa-caret-left:before {\n  content: \"\\f0d9\";\n}\n.fa-caret-right:before {\n  content: \"\\f0da\";\n}\n.fa-columns:before {\n  content: \"\\f0db\";\n}\n.fa-unsorted:before,\n.fa-sort:before {\n  content: \"\\f0dc\";\n}\n.fa-sort-down:before,\n.fa-sort-desc:before {\n  content: \"\\f0dd\";\n}\n.fa-sort-up:before,\n.fa-sort-asc:before {\n  content: \"\\f0de\";\n}\n.fa-envelope:before {\n  content: \"\\f0e0\";\n}\n.fa-linkedin:before {\n  content: \"\\f0e1\";\n}\n.fa-rotate-left:before,\n.fa-undo:before {\n  content: \"\\f0e2\";\n}\n.fa-legal:before,\n.fa-gavel:before {\n  content: \"\\f0e3\";\n}\n.fa-dashboard:before,\n.fa-tachometer:before {\n  content: \"\\f0e4\";\n}\n.fa-comment-o:before {\n  content: \"\\f0e5\";\n}\n.fa-comments-o:before {\n  content: \"\\f0e6\";\n}\n.fa-flash:before,\n.fa-bolt:before {\n  content: \"\\f0e7\";\n}\n.fa-sitemap:before {\n  content: \"\\f0e8\";\n}\n.fa-umbrella:before {\n  content: \"\\f0e9\";\n}\n.fa-paste:before,\n.fa-clipboard:before {\n  content: \"\\f0ea\";\n}\n.fa-lightbulb-o:before {\n  content: \"\\f0eb\";\n}\n.fa-exchange:before {\n  content: \"\\f0ec\";\n}\n.fa-cloud-download:before {\n  content: \"\\f0ed\";\n}\n.fa-cloud-upload:before {\n  content: \"\\f0ee\";\n}\n.fa-user-md:before {\n  content: \"\\f0f0\";\n}\n.fa-stethoscope:before {\n  content: \"\\f0f1\";\n}\n.fa-suitcase:before {\n  content: \"\\f0f2\";\n}\n.fa-bell-o:before {\n  content: \"\\f0a2\";\n}\n.fa-coffee:before {\n  content: \"\\f0f4\";\n}\n.fa-cutlery:before {\n  content: \"\\f0f5\";\n}\n.fa-file-text-o:before {\n  content: \"\\f0f6\";\n}\n.fa-building-o:before {\n  content: \"\\f0f7\";\n}\n.fa-hospital-o:before {\n  content: \"\\f0f8\";\n}\n.fa-ambulance:before {\n  content: \"\\f0f9\";\n}\n.fa-medkit:before {\n  content: \"\\f0fa\";\n}\n.fa-fighter-jet:before {\n  content: \"\\f0fb\";\n}\n.fa-beer:before {\n  content: \"\\f0fc\";\n}\n.fa-h-square:before {\n  content: \"\\f0fd\";\n}\n.fa-plus-square:before {\n  content: \"\\f0fe\";\n}\n.fa-angle-double-left:before {\n  content: \"\\f100\";\n}\n.fa-angle-double-right:before {\n  content: \"\\f101\";\n}\n.fa-angle-double-up:before {\n  content: \"\\f102\";\n}\n.fa-angle-double-down:before {\n  content: \"\\f103\";\n}\n.fa-angle-left:before {\n  content: \"\\f104\";\n}\n.fa-angle-right:before {\n  content: \"\\f105\";\n}\n.fa-angle-up:before {\n  content: \"\\f106\";\n}\n.fa-angle-down:before {\n  content: \"\\f107\";\n}\n.fa-desktop:before {\n  content: \"\\f108\";\n}\n.fa-laptop:before {\n  content: \"\\f109\";\n}\n.fa-tablet:before {\n  content: \"\\f10a\";\n}\n.fa-mobile-phone:before,\n.fa-mobile:before {\n  content: \"\\f10b\";\n}\n.fa-circle-o:before {\n  content: \"\\f10c\";\n}\n.fa-quote-left:before {\n  content: \"\\f10d\";\n}\n.fa-quote-right:before {\n  content: \"\\f10e\";\n}\n.fa-spinner:before {\n  content: \"\\f110\";\n}\n.fa-circle:before {\n  content: \"\\f111\";\n}\n.fa-mail-reply:before,\n.fa-reply:before {\n  content: \"\\f112\";\n}\n.fa-github-alt:before {\n  content: \"\\f113\";\n}\n.fa-folder-o:before {\n  content: \"\\f114\";\n}\n.fa-folder-open-o:before {\n  content: \"\\f115\";\n}\n.fa-smile-o:before {\n  content: \"\\f118\";\n}\n.fa-frown-o:before {\n  content: \"\\f119\";\n}\n.fa-meh-o:before {\n  content: \"\\f11a\";\n}\n.fa-gamepad:before {\n  content: \"\\f11b\";\n}\n.fa-keyboard-o:before {\n  content: \"\\f11c\";\n}\n.fa-flag-o:before {\n  content: \"\\f11d\";\n}\n.fa-flag-checkered:before {\n  content: \"\\f11e\";\n}\n.fa-terminal:before {\n  content: \"\\f120\";\n}\n.fa-code:before {\n  content: \"\\f121\";\n}\n.fa-mail-reply-all:before,\n.fa-reply-all:before {\n  content: \"\\f122\";\n}\n.fa-star-half-empty:before,\n.fa-star-half-full:before,\n.fa-star-half-o:before {\n  content: \"\\f123\";\n}\n.fa-location-arrow:before {\n  content: \"\\f124\";\n}\n.fa-crop:before {\n  content: \"\\f125\";\n}\n.fa-code-fork:before {\n  content: \"\\f126\";\n}\n.fa-unlink:before,\n.fa-chain-broken:before {\n  content: \"\\f127\";\n}\n.fa-question:before {\n  content: \"\\f128\";\n}\n.fa-info:before {\n  content: \"\\f129\";\n}\n.fa-exclamation:before {\n  content: \"\\f12a\";\n}\n.fa-superscript:before {\n  content: \"\\f12b\";\n}\n.fa-subscript:before {\n  content: \"\\f12c\";\n}\n.fa-eraser:before {\n  content: \"\\f12d\";\n}\n.fa-puzzle-piece:before {\n  content: \"\\f12e\";\n}\n.fa-microphone:before {\n  content: \"\\f130\";\n}\n.fa-microphone-slash:before {\n  content: \"\\f131\";\n}\n.fa-shield:before {\n  content: \"\\f132\";\n}\n.fa-calendar-o:before {\n  content: \"\\f133\";\n}\n.fa-fire-extinguisher:before {\n  content: \"\\f134\";\n}\n.fa-rocket:before {\n  content: \"\\f135\";\n}\n.fa-maxcdn:before {\n  content: \"\\f136\";\n}\n.fa-chevron-circle-left:before {\n  content: \"\\f137\";\n}\n.fa-chevron-circle-right:before {\n  content: \"\\f138\";\n}\n.fa-chevron-circle-up:before {\n  content: \"\\f139\";\n}\n.fa-chevron-circle-down:before {\n  content: \"\\f13a\";\n}\n.fa-html5:before {\n  content: \"\\f13b\";\n}\n.fa-css3:before {\n  content: \"\\f13c\";\n}\n.fa-anchor:before {\n  content: \"\\f13d\";\n}\n.fa-unlock-alt:before {\n  content: \"\\f13e\";\n}\n.fa-bullseye:before {\n  content: \"\\f140\";\n}\n.fa-ellipsis-h:before {\n  content: \"\\f141\";\n}\n.fa-ellipsis-v:before {\n  content: \"\\f142\";\n}\n.fa-rss-square:before {\n  content: \"\\f143\";\n}\n.fa-play-circle:before {\n  content: \"\\f144\";\n}\n.fa-ticket:before {\n  content: \"\\f145\";\n}\n.fa-minus-square:before {\n  content: \"\\f146\";\n}\n.fa-minus-square-o:before {\n  content: \"\\f147\";\n}\n.fa-level-up:before {\n  content: \"\\f148\";\n}\n.fa-level-down:before {\n  content: \"\\f149\";\n}\n.fa-check-square:before {\n  content: \"\\f14a\";\n}\n.fa-pencil-square:before {\n  content: \"\\f14b\";\n}\n.fa-external-link-square:before {\n  content: \"\\f14c\";\n}\n.fa-share-square:before {\n  content: \"\\f14d\";\n}\n.fa-compass:before {\n  content: \"\\f14e\";\n}\n.fa-toggle-down:before,\n.fa-caret-square-o-down:before {\n  content: \"\\f150\";\n}\n.fa-toggle-up:before,\n.fa-caret-square-o-up:before {\n  content: \"\\f151\";\n}\n.fa-toggle-right:before,\n.fa-caret-square-o-right:before {\n  content: \"\\f152\";\n}\n.fa-euro:before,\n.fa-eur:before {\n  content: \"\\f153\";\n}\n.fa-gbp:before {\n  content: \"\\f154\";\n}\n.fa-dollar:before,\n.fa-usd:before {\n  content: \"\\f155\";\n}\n.fa-rupee:before,\n.fa-inr:before {\n  content: \"\\f156\";\n}\n.fa-cny:before,\n.fa-rmb:before,\n.fa-yen:before,\n.fa-jpy:before {\n  content: \"\\f157\";\n}\n.fa-ruble:before,\n.fa-rouble:before,\n.fa-rub:before {\n  content: \"\\f158\";\n}\n.fa-won:before,\n.fa-krw:before {\n  content: \"\\f159\";\n}\n.fa-bitcoin:before,\n.fa-btc:before {\n  content: \"\\f15a\";\n}\n.fa-file:before {\n  content: \"\\f15b\";\n}\n.fa-file-text:before {\n  content: \"\\f15c\";\n}\n.fa-sort-alpha-asc:before {\n  content: \"\\f15d\";\n}\n.fa-sort-alpha-desc:before {\n  content: \"\\f15e\";\n}\n.fa-sort-amount-asc:before {\n  content: \"\\f160\";\n}\n.fa-sort-amount-desc:before {\n  content: \"\\f161\";\n}\n.fa-sort-numeric-asc:before {\n  content: \"\\f162\";\n}\n.fa-sort-numeric-desc:before {\n  content: \"\\f163\";\n}\n.fa-thumbs-up:before {\n  content: \"\\f164\";\n}\n.fa-thumbs-down:before {\n  content: \"\\f165\";\n}\n.fa-youtube-square:before {\n  content: \"\\f166\";\n}\n.fa-youtube:before {\n  content: \"\\f167\";\n}\n.fa-xing:before {\n  content: \"\\f168\";\n}\n.fa-xing-square:before {\n  content: \"\\f169\";\n}\n.fa-youtube-play:before {\n  content: \"\\f16a\";\n}\n.fa-dropbox:before {\n  content: \"\\f16b\";\n}\n.fa-stack-overflow:before {\n  content: \"\\f16c\";\n}\n.fa-instagram:before {\n  content: \"\\f16d\";\n}\n.fa-flickr:before {\n  content: \"\\f16e\";\n}\n.fa-adn:before {\n  content: \"\\f170\";\n}\n.fa-bitbucket:before {\n  content: \"\\f171\";\n}\n.fa-bitbucket-square:before {\n  content: \"\\f172\";\n}\n.fa-tumblr:before {\n  content: \"\\f173\";\n}\n.fa-tumblr-square:before {\n  content: \"\\f174\";\n}\n.fa-long-arrow-down:before {\n  content: \"\\f175\";\n}\n.fa-long-arrow-up:before {\n  content: \"\\f176\";\n}\n.fa-long-arrow-left:before {\n  content: \"\\f177\";\n}\n.fa-long-arrow-right:before {\n  content: \"\\f178\";\n}\n.fa-apple:before {\n  content: \"\\f179\";\n}\n.fa-windows:before {\n  content: \"\\f17a\";\n}\n.fa-android:before {\n  content: \"\\f17b\";\n}\n.fa-linux:before {\n  content: \"\\f17c\";\n}\n.fa-dribbble:before {\n  content: \"\\f17d\";\n}\n.fa-skype:before {\n  content: \"\\f17e\";\n}\n.fa-foursquare:before {\n  content: \"\\f180\";\n}\n.fa-trello:before {\n  content: \"\\f181\";\n}\n.fa-female:before {\n  content: \"\\f182\";\n}\n.fa-male:before {\n  content: \"\\f183\";\n}\n.fa-gittip:before,\n.fa-gratipay:before {\n  content: \"\\f184\";\n}\n.fa-sun-o:before {\n  content: \"\\f185\";\n}\n.fa-moon-o:before {\n  content: \"\\f186\";\n}\n.fa-archive:before {\n  content: \"\\f187\";\n}\n.fa-bug:before {\n  content: \"\\f188\";\n}\n.fa-vk:before {\n  content: \"\\f189\";\n}\n.fa-weibo:before {\n  content: \"\\f18a\";\n}\n.fa-renren:before {\n  content: \"\\f18b\";\n}\n.fa-pagelines:before {\n  content: \"\\f18c\";\n}\n.fa-stack-exchange:before {\n  content: \"\\f18d\";\n}\n.fa-arrow-circle-o-right:before {\n  content: \"\\f18e\";\n}\n.fa-arrow-circle-o-left:before {\n  content: \"\\f190\";\n}\n.fa-toggle-left:before,\n.fa-caret-square-o-left:before {\n  content: \"\\f191\";\n}\n.fa-dot-circle-o:before {\n  content: \"\\f192\";\n}\n.fa-wheelchair:before {\n  content: \"\\f193\";\n}\n.fa-vimeo-square:before {\n  content: \"\\f194\";\n}\n.fa-turkish-lira:before,\n.fa-try:before {\n  content: \"\\f195\";\n}\n.fa-plus-square-o:before {\n  content: \"\\f196\";\n}\n.fa-space-shuttle:before {\n  content: \"\\f197\";\n}\n.fa-slack:before {\n  content: \"\\f198\";\n}\n.fa-envelope-square:before {\n  content: \"\\f199\";\n}\n.fa-wordpress:before {\n  content: \"\\f19a\";\n}\n.fa-openid:before {\n  content: \"\\f19b\";\n}\n.fa-institution:before,\n.fa-bank:before,\n.fa-university:before {\n  content: \"\\f19c\";\n}\n.fa-mortar-board:before,\n.fa-graduation-cap:before {\n  content: \"\\f19d\";\n}\n.fa-yahoo:before {\n  content: \"\\f19e\";\n}\n.fa-google:before {\n  content: \"\\f1a0\";\n}\n.fa-reddit:before {\n  content: \"\\f1a1\";\n}\n.fa-reddit-square:before {\n  content: \"\\f1a2\";\n}\n.fa-stumbleupon-circle:before {\n  content: \"\\f1a3\";\n}\n.fa-stumbleupon:before {\n  content: \"\\f1a4\";\n}\n.fa-delicious:before {\n  content: \"\\f1a5\";\n}\n.fa-digg:before {\n  content: \"\\f1a6\";\n}\n.fa-pied-piper-pp:before {\n  content: \"\\f1a7\";\n}\n.fa-pied-piper-alt:before {\n  content: \"\\f1a8\";\n}\n.fa-drupal:before {\n  content: \"\\f1a9\";\n}\n.fa-joomla:before {\n  content: \"\\f1aa\";\n}\n.fa-language:before {\n  content: \"\\f1ab\";\n}\n.fa-fax:before {\n  content: \"\\f1ac\";\n}\n.fa-building:before {\n  content: \"\\f1ad\";\n}\n.fa-child:before {\n  content: \"\\f1ae\";\n}\n.fa-paw:before {\n  content: \"\\f1b0\";\n}\n.fa-spoon:before {\n  content: \"\\f1b1\";\n}\n.fa-cube:before {\n  content: \"\\f1b2\";\n}\n.fa-cubes:before {\n  content: \"\\f1b3\";\n}\n.fa-behance:before {\n  content: \"\\f1b4\";\n}\n.fa-behance-square:before {\n  content: \"\\f1b5\";\n}\n.fa-steam:before {\n  content: \"\\f1b6\";\n}\n.fa-steam-square:before {\n  content: \"\\f1b7\";\n}\n.fa-recycle:before {\n  content: \"\\f1b8\";\n}\n.fa-automobile:before,\n.fa-car:before {\n  content: \"\\f1b9\";\n}\n.fa-cab:before,\n.fa-taxi:before {\n  content: \"\\f1ba\";\n}\n.fa-tree:before {\n  content: \"\\f1bb\";\n}\n.fa-spotify:before {\n  content: \"\\f1bc\";\n}\n.fa-deviantart:before {\n  content: \"\\f1bd\";\n}\n.fa-soundcloud:before {\n  content: \"\\f1be\";\n}\n.fa-database:before {\n  content: \"\\f1c0\";\n}\n.fa-file-pdf-o:before {\n  content: \"\\f1c1\";\n}\n.fa-file-word-o:before {\n  content: \"\\f1c2\";\n}\n.fa-file-excel-o:before {\n  content: \"\\f1c3\";\n}\n.fa-file-powerpoint-o:before {\n  content: \"\\f1c4\";\n}\n.fa-file-photo-o:before,\n.fa-file-picture-o:before,\n.fa-file-image-o:before {\n  content: \"\\f1c5\";\n}\n.fa-file-zip-o:before,\n.fa-file-archive-o:before {\n  content: \"\\f1c6\";\n}\n.fa-file-sound-o:before,\n.fa-file-audio-o:before {\n  content: \"\\f1c7\";\n}\n.fa-file-movie-o:before,\n.fa-file-video-o:before {\n  content: \"\\f1c8\";\n}\n.fa-file-code-o:before {\n  content: \"\\f1c9\";\n}\n.fa-vine:before {\n  content: \"\\f1ca\";\n}\n.fa-codepen:before {\n  content: \"\\f1cb\";\n}\n.fa-jsfiddle:before {\n  content: \"\\f1cc\";\n}\n.fa-life-bouy:before,\n.fa-life-buoy:before,\n.fa-life-saver:before,\n.fa-support:before,\n.fa-life-ring:before {\n  content: \"\\f1cd\";\n}\n.fa-circle-o-notch:before {\n  content: \"\\f1ce\";\n}\n.fa-ra:before,\n.fa-resistance:before,\n.fa-rebel:before {\n  content: \"\\f1d0\";\n}\n.fa-ge:before,\n.fa-empire:before {\n  content: \"\\f1d1\";\n}\n.fa-git-square:before {\n  content: \"\\f1d2\";\n}\n.fa-git:before {\n  content: \"\\f1d3\";\n}\n.fa-y-combinator-square:before,\n.fa-yc-square:before,\n.fa-hacker-news:before {\n  content: \"\\f1d4\";\n}\n.fa-tencent-weibo:before {\n  content: \"\\f1d5\";\n}\n.fa-qq:before {\n  content: \"\\f1d6\";\n}\n.fa-wechat:before,\n.fa-weixin:before {\n  content: \"\\f1d7\";\n}\n.fa-send:before,\n.fa-paper-plane:before {\n  content: \"\\f1d8\";\n}\n.fa-send-o:before,\n.fa-paper-plane-o:before {\n  content: \"\\f1d9\";\n}\n.fa-history:before {\n  content: \"\\f1da\";\n}\n.fa-circle-thin:before {\n  content: \"\\f1db\";\n}\n.fa-header:before {\n  content: \"\\f1dc\";\n}\n.fa-paragraph:before {\n  content: \"\\f1dd\";\n}\n.fa-sliders:before {\n  content: \"\\f1de\";\n}\n.fa-share-alt:before {\n  content: \"\\f1e0\";\n}\n.fa-share-alt-square:before {\n  content: \"\\f1e1\";\n}\n.fa-bomb:before {\n  content: \"\\f1e2\";\n}\n.fa-soccer-ball-o:before,\n.fa-futbol-o:before {\n  content: \"\\f1e3\";\n}\n.fa-tty:before {\n  content: \"\\f1e4\";\n}\n.fa-binoculars:before {\n  content: \"\\f1e5\";\n}\n.fa-plug:before {\n  content: \"\\f1e6\";\n}\n.fa-slideshare:before {\n  content: \"\\f1e7\";\n}\n.fa-twitch:before {\n  content: \"\\f1e8\";\n}\n.fa-yelp:before {\n  content: \"\\f1e9\";\n}\n.fa-newspaper-o:before {\n  content: \"\\f1ea\";\n}\n.fa-wifi:before {\n  content: \"\\f1eb\";\n}\n.fa-calculator:before {\n  content: \"\\f1ec\";\n}\n.fa-paypal:before {\n  content: \"\\f1ed\";\n}\n.fa-google-wallet:before {\n  content: \"\\f1ee\";\n}\n.fa-cc-visa:before {\n  content: \"\\f1f0\";\n}\n.fa-cc-mastercard:before {\n  content: \"\\f1f1\";\n}\n.fa-cc-discover:before {\n  content: \"\\f1f2\";\n}\n.fa-cc-amex:before {\n  content: \"\\f1f3\";\n}\n.fa-cc-paypal:before {\n  content: \"\\f1f4\";\n}\n.fa-cc-stripe:before {\n  content: \"\\f1f5\";\n}\n.fa-bell-slash:before {\n  content: \"\\f1f6\";\n}\n.fa-bell-slash-o:before {\n  content: \"\\f1f7\";\n}\n.fa-trash:before {\n  content: \"\\f1f8\";\n}\n.fa-copyright:before {\n  content: \"\\f1f9\";\n}\n.fa-at:before {\n  content: \"\\f1fa\";\n}\n.fa-eyedropper:before {\n  content: \"\\f1fb\";\n}\n.fa-paint-brush:before {\n  content: \"\\f1fc\";\n}\n.fa-birthday-cake:before {\n  content: \"\\f1fd\";\n}\n.fa-area-chart:before {\n  content: \"\\f1fe\";\n}\n.fa-pie-chart:before {\n  content: \"\\f200\";\n}\n.fa-line-chart:before {\n  content: \"\\f201\";\n}\n.fa-lastfm:before {\n  content: \"\\f202\";\n}\n.fa-lastfm-square:before {\n  content: \"\\f203\";\n}\n.fa-toggle-off:before {\n  content: \"\\f204\";\n}\n.fa-toggle-on:before {\n  content: \"\\f205\";\n}\n.fa-bicycle:before {\n  content: \"\\f206\";\n}\n.fa-bus:before {\n  content: \"\\f207\";\n}\n.fa-ioxhost:before {\n  content: \"\\f208\";\n}\n.fa-angellist:before {\n  content: \"\\f209\";\n}\n.fa-cc:before {\n  content: \"\\f20a\";\n}\n.fa-shekel:before,\n.fa-sheqel:before,\n.fa-ils:before {\n  content: \"\\f20b\";\n}\n.fa-meanpath:before {\n  content: \"\\f20c\";\n}\n.fa-buysellads:before {\n  content: \"\\f20d\";\n}\n.fa-connectdevelop:before {\n  content: \"\\f20e\";\n}\n.fa-dashcube:before {\n  content: \"\\f210\";\n}\n.fa-forumbee:before {\n  content: \"\\f211\";\n}\n.fa-leanpub:before {\n  content: \"\\f212\";\n}\n.fa-sellsy:before {\n  content: \"\\f213\";\n}\n.fa-shirtsinbulk:before {\n  content: \"\\f214\";\n}\n.fa-simplybuilt:before {\n  content: \"\\f215\";\n}\n.fa-skyatlas:before {\n  content: \"\\f216\";\n}\n.fa-cart-plus:before {\n  content: \"\\f217\";\n}\n.fa-cart-arrow-down:before {\n  content: \"\\f218\";\n}\n.fa-diamond:before {\n  content: \"\\f219\";\n}\n.fa-ship:before {\n  content: \"\\f21a\";\n}\n.fa-user-secret:before {\n  content: \"\\f21b\";\n}\n.fa-motorcycle:before {\n  content: \"\\f21c\";\n}\n.fa-street-view:before {\n  content: \"\\f21d\";\n}\n.fa-heartbeat:before {\n  content: \"\\f21e\";\n}\n.fa-venus:before {\n  content: \"\\f221\";\n}\n.fa-mars:before {\n  content: \"\\f222\";\n}\n.fa-mercury:before {\n  content: \"\\f223\";\n}\n.fa-intersex:before,\n.fa-transgender:before {\n  content: \"\\f224\";\n}\n.fa-transgender-alt:before {\n  content: \"\\f225\";\n}\n.fa-venus-double:before {\n  content: \"\\f226\";\n}\n.fa-mars-double:before {\n  content: \"\\f227\";\n}\n.fa-venus-mars:before {\n  content: \"\\f228\";\n}\n.fa-mars-stroke:before {\n  content: \"\\f229\";\n}\n.fa-mars-stroke-v:before {\n  content: \"\\f22a\";\n}\n.fa-mars-stroke-h:before {\n  content: \"\\f22b\";\n}\n.fa-neuter:before {\n  content: \"\\f22c\";\n}\n.fa-genderless:before {\n  content: \"\\f22d\";\n}\n.fa-facebook-official:before {\n  content: \"\\f230\";\n}\n.fa-pinterest-p:before {\n  content: \"\\f231\";\n}\n.fa-whatsapp:before {\n  content: \"\\f232\";\n}\n.fa-server:before {\n  content: \"\\f233\";\n}\n.fa-user-plus:before {\n  content: \"\\f234\";\n}\n.fa-user-times:before {\n  content: \"\\f235\";\n}\n.fa-hotel:before,\n.fa-bed:before {\n  content: \"\\f236\";\n}\n.fa-viacoin:before {\n  content: \"\\f237\";\n}\n.fa-train:before {\n  content: \"\\f238\";\n}\n.fa-subway:before {\n  content: \"\\f239\";\n}\n.fa-medium:before {\n  content: \"\\f23a\";\n}\n.fa-yc:before,\n.fa-y-combinator:before {\n  content: \"\\f23b\";\n}\n.fa-optin-monster:before {\n  content: \"\\f23c\";\n}\n.fa-opencart:before {\n  content: \"\\f23d\";\n}\n.fa-expeditedssl:before {\n  content: \"\\f23e\";\n}\n.fa-battery-4:before,\n.fa-battery:before,\n.fa-battery-full:before {\n  content: \"\\f240\";\n}\n.fa-battery-3:before,\n.fa-battery-three-quarters:before {\n  content: \"\\f241\";\n}\n.fa-battery-2:before,\n.fa-battery-half:before {\n  content: \"\\f242\";\n}\n.fa-battery-1:before,\n.fa-battery-quarter:before {\n  content: \"\\f243\";\n}\n.fa-battery-0:before,\n.fa-battery-empty:before {\n  content: \"\\f244\";\n}\n.fa-mouse-pointer:before {\n  content: \"\\f245\";\n}\n.fa-i-cursor:before {\n  content: \"\\f246\";\n}\n.fa-object-group:before {\n  content: \"\\f247\";\n}\n.fa-object-ungroup:before {\n  content: \"\\f248\";\n}\n.fa-sticky-note:before {\n  content: \"\\f249\";\n}\n.fa-sticky-note-o:before {\n  content: \"\\f24a\";\n}\n.fa-cc-jcb:before {\n  content: \"\\f24b\";\n}\n.fa-cc-diners-club:before {\n  content: \"\\f24c\";\n}\n.fa-clone:before {\n  content: \"\\f24d\";\n}\n.fa-balance-scale:before {\n  content: \"\\f24e\";\n}\n.fa-hourglass-o:before {\n  content: \"\\f250\";\n}\n.fa-hourglass-1:before,\n.fa-hourglass-start:before {\n  content: \"\\f251\";\n}\n.fa-hourglass-2:before,\n.fa-hourglass-half:before {\n  content: \"\\f252\";\n}\n.fa-hourglass-3:before,\n.fa-hourglass-end:before {\n  content: \"\\f253\";\n}\n.fa-hourglass:before {\n  content: \"\\f254\";\n}\n.fa-hand-grab-o:before,\n.fa-hand-rock-o:before {\n  content: \"\\f255\";\n}\n.fa-hand-stop-o:before,\n.fa-hand-paper-o:before {\n  content: \"\\f256\";\n}\n.fa-hand-scissors-o:before {\n  content: \"\\f257\";\n}\n.fa-hand-lizard-o:before {\n  content: \"\\f258\";\n}\n.fa-hand-spock-o:before {\n  content: \"\\f259\";\n}\n.fa-hand-pointer-o:before {\n  content: \"\\f25a\";\n}\n.fa-hand-peace-o:before {\n  content: \"\\f25b\";\n}\n.fa-trademark:before {\n  content: \"\\f25c\";\n}\n.fa-registered:before {\n  content: \"\\f25d\";\n}\n.fa-creative-commons:before {\n  content: \"\\f25e\";\n}\n.fa-gg:before {\n  content: \"\\f260\";\n}\n.fa-gg-circle:before {\n  content: \"\\f261\";\n}\n.fa-tripadvisor:before {\n  content: \"\\f262\";\n}\n.fa-odnoklassniki:before {\n  content: \"\\f263\";\n}\n.fa-odnoklassniki-square:before {\n  content: \"\\f264\";\n}\n.fa-get-pocket:before {\n  content: \"\\f265\";\n}\n.fa-wikipedia-w:before {\n  content: \"\\f266\";\n}\n.fa-safari:before {\n  content: \"\\f267\";\n}\n.fa-chrome:before {\n  content: \"\\f268\";\n}\n.fa-firefox:before {\n  content: \"\\f269\";\n}\n.fa-opera:before {\n  content: \"\\f26a\";\n}\n.fa-internet-explorer:before {\n  content: \"\\f26b\";\n}\n.fa-tv:before,\n.fa-television:before {\n  content: \"\\f26c\";\n}\n.fa-contao:before {\n  content: \"\\f26d\";\n}\n.fa-500px:before {\n  content: \"\\f26e\";\n}\n.fa-amazon:before {\n  content: \"\\f270\";\n}\n.fa-calendar-plus-o:before {\n  content: \"\\f271\";\n}\n.fa-calendar-minus-o:before {\n  content: \"\\f272\";\n}\n.fa-calendar-times-o:before {\n  content: \"\\f273\";\n}\n.fa-calendar-check-o:before {\n  content: \"\\f274\";\n}\n.fa-industry:before {\n  content: \"\\f275\";\n}\n.fa-map-pin:before {\n  content: \"\\f276\";\n}\n.fa-map-signs:before {\n  content: \"\\f277\";\n}\n.fa-map-o:before {\n  content: \"\\f278\";\n}\n.fa-map:before {\n  content: \"\\f279\";\n}\n.fa-commenting:before {\n  content: \"\\f27a\";\n}\n.fa-commenting-o:before {\n  content: \"\\f27b\";\n}\n.fa-houzz:before {\n  content: \"\\f27c\";\n}\n.fa-vimeo:before {\n  content: \"\\f27d\";\n}\n.fa-black-tie:before {\n  content: \"\\f27e\";\n}\n.fa-fonticons:before {\n  content: \"\\f280\";\n}\n.fa-reddit-alien:before {\n  content: \"\\f281\";\n}\n.fa-edge:before {\n  content: \"\\f282\";\n}\n.fa-credit-card-alt:before {\n  content: \"\\f283\";\n}\n.fa-codiepie:before {\n  content: \"\\f284\";\n}\n.fa-modx:before {\n  content: \"\\f285\";\n}\n.fa-fort-awesome:before {\n  content: \"\\f286\";\n}\n.fa-usb:before {\n  content: \"\\f287\";\n}\n.fa-product-hunt:before {\n  content: \"\\f288\";\n}\n.fa-mixcloud:before {\n  content: \"\\f289\";\n}\n.fa-scribd:before {\n  content: \"\\f28a\";\n}\n.fa-pause-circle:before {\n  content: \"\\f28b\";\n}\n.fa-pause-circle-o:before {\n  content: \"\\f28c\";\n}\n.fa-stop-circle:before {\n  content: \"\\f28d\";\n}\n.fa-stop-circle-o:before {\n  content: \"\\f28e\";\n}\n.fa-shopping-bag:before {\n  content: \"\\f290\";\n}\n.fa-shopping-basket:before {\n  content: \"\\f291\";\n}\n.fa-hashtag:before {\n  content: \"\\f292\";\n}\n.fa-bluetooth:before {\n  content: \"\\f293\";\n}\n.fa-bluetooth-b:before {\n  content: \"\\f294\";\n}\n.fa-percent:before {\n  content: \"\\f295\";\n}\n.fa-gitlab:before {\n  content: \"\\f296\";\n}\n.fa-wpbeginner:before {\n  content: \"\\f297\";\n}\n.fa-wpforms:before {\n  content: \"\\f298\";\n}\n.fa-envira:before {\n  content: \"\\f299\";\n}\n.fa-universal-access:before {\n  content: \"\\f29a\";\n}\n.fa-wheelchair-alt:before {\n  content: \"\\f29b\";\n}\n.fa-question-circle-o:before {\n  content: \"\\f29c\";\n}\n.fa-blind:before {\n  content: \"\\f29d\";\n}\n.fa-audio-description:before {\n  content: \"\\f29e\";\n}\n.fa-volume-control-phone:before {\n  content: \"\\f2a0\";\n}\n.fa-braille:before {\n  content: \"\\f2a1\";\n}\n.fa-assistive-listening-systems:before {\n  content: \"\\f2a2\";\n}\n.fa-asl-interpreting:before,\n.fa-american-sign-language-interpreting:before {\n  content: \"\\f2a3\";\n}\n.fa-deafness:before,\n.fa-hard-of-hearing:before,\n.fa-deaf:before {\n  content: \"\\f2a4\";\n}\n.fa-glide:before {\n  content: \"\\f2a5\";\n}\n.fa-glide-g:before {\n  content: \"\\f2a6\";\n}\n.fa-signing:before,\n.fa-sign-language:before {\n  content: \"\\f2a7\";\n}\n.fa-low-vision:before {\n  content: \"\\f2a8\";\n}\n.fa-viadeo:before {\n  content: \"\\f2a9\";\n}\n.fa-viadeo-square:before {\n  content: \"\\f2aa\";\n}\n.fa-snapchat:before {\n  content: \"\\f2ab\";\n}\n.fa-snapchat-ghost:before {\n  content: \"\\f2ac\";\n}\n.fa-snapchat-square:before {\n  content: \"\\f2ad\";\n}\n.fa-pied-piper:before {\n  content: \"\\f2ae\";\n}\n.fa-first-order:before {\n  content: \"\\f2b0\";\n}\n.fa-yoast:before {\n  content: \"\\f2b1\";\n}\n.fa-themeisle:before {\n  content: \"\\f2b2\";\n}\n.fa-google-plus-circle:before,\n.fa-google-plus-official:before {\n  content: \"\\f2b3\";\n}\n.fa-fa:before,\n.fa-font-awesome:before {\n  content: \"\\f2b4\";\n}\n.fa-handshake-o:before {\n  content: \"\\f2b5\";\n}\n.fa-envelope-open:before {\n  content: \"\\f2b6\";\n}\n.fa-envelope-open-o:before {\n  content: \"\\f2b7\";\n}\n.fa-linode:before {\n  content: \"\\f2b8\";\n}\n.fa-address-book:before {\n  content: \"\\f2b9\";\n}\n.fa-address-book-o:before {\n  content: \"\\f2ba\";\n}\n.fa-vcard:before,\n.fa-address-card:before {\n  content: \"\\f2bb\";\n}\n.fa-vcard-o:before,\n.fa-address-card-o:before {\n  content: \"\\f2bc\";\n}\n.fa-user-circle:before {\n  content: \"\\f2bd\";\n}\n.fa-user-circle-o:before {\n  content: \"\\f2be\";\n}\n.fa-user-o:before {\n  content: \"\\f2c0\";\n}\n.fa-id-badge:before {\n  content: \"\\f2c1\";\n}\n.fa-drivers-license:before,\n.fa-id-card:before {\n  content: \"\\f2c2\";\n}\n.fa-drivers-license-o:before,\n.fa-id-card-o:before {\n  content: \"\\f2c3\";\n}\n.fa-quora:before {\n  content: \"\\f2c4\";\n}\n.fa-free-code-camp:before {\n  content: \"\\f2c5\";\n}\n.fa-telegram:before {\n  content: \"\\f2c6\";\n}\n.fa-thermometer-4:before,\n.fa-thermometer:before,\n.fa-thermometer-full:before {\n  content: \"\\f2c7\";\n}\n.fa-thermometer-3:before,\n.fa-thermometer-three-quarters:before {\n  content: \"\\f2c8\";\n}\n.fa-thermometer-2:before,\n.fa-thermometer-half:before {\n  content: \"\\f2c9\";\n}\n.fa-thermometer-1:before,\n.fa-thermometer-quarter:before {\n  content: \"\\f2ca\";\n}\n.fa-thermometer-0:before,\n.fa-thermometer-empty:before {\n  content: \"\\f2cb\";\n}\n.fa-shower:before {\n  content: \"\\f2cc\";\n}\n.fa-bathtub:before,\n.fa-s15:before,\n.fa-bath:before {\n  content: \"\\f2cd\";\n}\n.fa-podcast:before {\n  content: \"\\f2ce\";\n}\n.fa-window-maximize:before {\n  content: \"\\f2d0\";\n}\n.fa-window-minimize:before {\n  content: \"\\f2d1\";\n}\n.fa-window-restore:before {\n  content: \"\\f2d2\";\n}\n.fa-times-rectangle:before,\n.fa-window-close:before {\n  content: \"\\f2d3\";\n}\n.fa-times-rectangle-o:before,\n.fa-window-close-o:before {\n  content: \"\\f2d4\";\n}\n.fa-bandcamp:before {\n  content: \"\\f2d5\";\n}\n.fa-grav:before {\n  content: \"\\f2d6\";\n}\n.fa-etsy:before {\n  content: \"\\f2d7\";\n}\n.fa-imdb:before {\n  content: \"\\f2d8\";\n}\n.fa-ravelry:before {\n  content: \"\\f2d9\";\n}\n.fa-eercast:before {\n  content: \"\\f2da\";\n}\n.fa-microchip:before {\n  content: \"\\f2db\";\n}\n.fa-snowflake-o:before {\n  content: \"\\f2dc\";\n}\n.fa-superpowers:before {\n  content: \"\\f2dd\";\n}\n.fa-wpexplorer:before {\n  content: \"\\f2de\";\n}\n.fa-meetup:before {\n  content: \"\\f2e0\";\n}\n.sr-only {\n  position: absolute;\n  width: 1px;\n  height: 1px;\n  padding: 0;\n  margin: -1px;\n  overflow: hidden;\n  clip: rect(0, 0, 0, 0);\n  border: 0;\n}\n.sr-only-focusable:active,\n.sr-only-focusable:focus {\n  position: static;\n  width: auto;\n  height: auto;\n  margin: 0;\n  overflow: visible;\n  clip: auto;\n}\n"
  },
  {
    "path": "src/main/resources/static/plugins/froala-editor/css/froala_editor.css",
    "content": "/*!\n * froala_editor v2.9.1 (https://www.froala.com/wysiwyg-editor)\n * License https://froala.com/wysiwyg-editor/terms/\n * Copyright 2014-2018 Froala Labs\n */\n\n.clearfix::after {\n  clear: both;\n  display: block;\n  content: \"\";\n  height: 0;\n}\n.hide-by-clipping {\n  position: absolute;\n  width: 1px;\n  height: 1px;\n  padding: 0;\n  margin: -1px;\n  overflow: hidden;\n  clip: rect(0, 0, 0, 0);\n  border: 0;\n}\n.fr-element,\n.fr-element:focus {\n  outline: 0px solid transparent;\n}\n.fr-box.fr-basic .fr-element {\n  color: #000000;\n  padding: 16px;\n  -webkit-box-sizing: border-box;\n  -moz-box-sizing: border-box;\n  box-sizing: border-box;\n  overflow-x: auto;\n  min-height: 52px;\n}\n.fr-box.fr-basic.fr-rtl .fr-element {\n  text-align: right;\n}\n.fr-element {\n  background: transparent;\n  position: relative;\n  z-index: 2;\n  -webkit-user-select: auto;\n}\n.fr-element a {\n  user-select: auto;\n  -o-user-select: auto;\n  -moz-user-select: auto;\n  -khtml-user-select: auto;\n  -webkit-user-select: auto;\n  -ms-user-select: auto;\n}\n.fr-element.fr-disabled {\n  user-select: none;\n  -o-user-select: none;\n  -moz-user-select: none;\n  -khtml-user-select: none;\n  -webkit-user-select: none;\n  -ms-user-select: none;\n}\n.fr-element [contenteditable=\"true\"] {\n  outline: 0px solid transparent;\n}\n.fr-box a.fr-floating-btn {\n  -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n  -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n  border-radius: 100%;\n  -moz-border-radius: 100%;\n  -webkit-border-radius: 100%;\n  -moz-background-clip: padding;\n  -webkit-background-clip: padding-box;\n  background-clip: padding-box;\n  height: 32px;\n  width: 32px;\n  background: #ffffff;\n  color: #1e88e5;\n  -webkit-transition: background 0.2s ease 0s, color 0.2s ease 0s, transform 0.2s ease 0s;\n  -moz-transition: background 0.2s ease 0s, color 0.2s ease 0s, transform 0.2s ease 0s;\n  -ms-transition: background 0.2s ease 0s, color 0.2s ease 0s, transform 0.2s ease 0s;\n  -o-transition: background 0.2s ease 0s, color 0.2s ease 0s, transform 0.2s ease 0s;\n  outline: none;\n  left: 0;\n  top: 0;\n  line-height: 32px;\n  -webkit-transform: scale(0);\n  -moz-transform: scale(0);\n  -ms-transform: scale(0);\n  -o-transform: scale(0);\n  text-align: center;\n  display: block;\n  -webkit-box-sizing: border-box;\n  -moz-box-sizing: border-box;\n  box-sizing: border-box;\n  border: none;\n}\n.fr-box a.fr-floating-btn svg {\n  -webkit-transition: transform 0.2s ease 0s;\n  -moz-transition: transform 0.2s ease 0s;\n  -ms-transition: transform 0.2s ease 0s;\n  -o-transition: transform 0.2s ease 0s;\n  fill: #1e88e5;\n}\n.fr-box a.fr-floating-btn i,\n.fr-box a.fr-floating-btn svg {\n  font-size: 14px;\n  line-height: 32px;\n}\n.fr-box a.fr-floating-btn.fr-btn + .fr-btn {\n  margin-left: 10px;\n}\n.fr-box a.fr-floating-btn:hover {\n  background: #ebebeb;\n  cursor: pointer;\n}\n.fr-box a.fr-floating-btn:hover svg {\n  fill: #1e88e5;\n}\n.fr-box .fr-visible a.fr-floating-btn {\n  -webkit-transform: scale(1);\n  -moz-transform: scale(1);\n  -ms-transform: scale(1);\n  -o-transform: scale(1);\n}\niframe.fr-iframe {\n  width: 100%;\n  border: none;\n  position: relative;\n  display: block;\n  z-index: 2;\n  -webkit-box-sizing: border-box;\n  -moz-box-sizing: border-box;\n  box-sizing: border-box;\n}\n.fr-wrapper {\n  position: relative;\n  z-index: 1;\n}\n.fr-wrapper::after {\n  clear: both;\n  display: block;\n  content: \"\";\n  height: 0;\n}\n.fr-wrapper .fr-placeholder {\n  position: absolute;\n  font-size: 12px;\n  color: #aaaaaa;\n  z-index: 1;\n  display: none;\n  top: 0;\n  left: 0;\n  right: 0;\n  overflow: hidden;\n}\n.fr-wrapper.show-placeholder .fr-placeholder {\n  display: block;\n}\n.fr-wrapper ::-moz-selection {\n  background: #b5d6fd;\n  color: #000000;\n}\n.fr-wrapper ::selection {\n  background: #b5d6fd;\n  color: #000000;\n}\n.fr-box.fr-basic .fr-wrapper {\n  background: #ffffff;\n  border: 0px;\n  border-top: 0;\n  top: 0;\n  left: 0;\n}\n.fr-box.fr-basic.fr-top .fr-wrapper {\n  border-top: 0;\n  border-radius: 0 0 2px 2px;\n  -moz-border-radius: 0 0 2px 2px;\n  -webkit-border-radius: 0 0 2px 2px;\n  -moz-background-clip: padding;\n  -webkit-background-clip: padding-box;\n  background-clip: padding-box;\n  -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n  -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n}\n.fr-box.fr-basic.fr-bottom .fr-wrapper {\n  border-bottom: 0;\n  border-radius: 2px 2px 0 0;\n  -moz-border-radius: 2px 2px 0 0;\n  -webkit-border-radius: 2px 2px 0 0;\n  -moz-background-clip: padding;\n  -webkit-background-clip: padding-box;\n  background-clip: padding-box;\n  -webkit-box-shadow: 0 -1px 3px rgba(0, 0, 0, 0.12), 0 -1px 1px 1px rgba(0, 0, 0, 0.16);\n  -moz-box-shadow: 0 -1px 3px rgba(0, 0, 0, 0.12), 0 -1px 1px 1px rgba(0, 0, 0, 0.16);\n  box-shadow: 0 -1px 3px rgba(0, 0, 0, 0.12), 0 -1px 1px 1px rgba(0, 0, 0, 0.16);\n}\n@media (min-width: 992px) {\n  .fr-box.fr-document {\n    min-width: 21cm;\n  }\n  .fr-box.fr-document .fr-wrapper {\n    text-align: center;\n    padding: 30px;\n    min-width: 21cm;\n    background: #EFEFEF;\n  }\n  .fr-box.fr-document .fr-wrapper .fr-element {\n    text-align: left;\n    background: #FFF;\n    width: 21cm;\n    margin: auto;\n    min-height: 26cm !important;\n    padding: 1cm 2cm;\n    -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n    -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n    box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n    overflow: visible;\n  }\n  .fr-box.fr-document .fr-wrapper .fr-element hr {\n    margin-left: -2cm;\n    margin-right: -2cm;\n    background: #EFEFEF;\n    height: 1cm;\n    outline: none;\n    border: none;\n  }\n}\n.fr-tooltip {\n  position: absolute;\n  top: 0;\n  left: 0;\n  padding: 0 8px;\n  border-radius: 2px;\n  -moz-border-radius: 2px;\n  -webkit-border-radius: 2px;\n  -moz-background-clip: padding;\n  -webkit-background-clip: padding-box;\n  background-clip: padding-box;\n  -webkit-box-shadow: 0 3px 6px rgba(0, 0, 0, 0.16), 0 2px 2px 1px rgba(0, 0, 0, 0.14);\n  -moz-box-shadow: 0 3px 6px rgba(0, 0, 0, 0.16), 0 2px 2px 1px rgba(0, 0, 0, 0.14);\n  box-shadow: 0 3px 6px rgba(0, 0, 0, 0.16), 0 2px 2px 1px rgba(0, 0, 0, 0.14);\n  background: #222222;\n  color: #ffffff;\n  font-size: 11px;\n  line-height: 22px;\n  font-family: Arial, Helvetica, sans-serif;\n  -webkit-transition: opacity 0.2s ease 0s;\n  -moz-transition: opacity 0.2s ease 0s;\n  -ms-transition: opacity 0.2s ease 0s;\n  -o-transition: opacity 0.2s ease 0s;\n  -webkit-opacity: 0;\n  -moz-opacity: 0;\n  opacity: 0;\n  -ms-filter: \"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)\";\n  left: -3000px;\n  user-select: none;\n  -o-user-select: none;\n  -moz-user-select: none;\n  -khtml-user-select: none;\n  -webkit-user-select: none;\n  -ms-user-select: none;\n  z-index: 2147483647;\n  text-rendering: optimizelegibility;\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n}\n.fr-tooltip.fr-visible {\n  -webkit-opacity: 1;\n  -moz-opacity: 1;\n  opacity: 1;\n  -ms-filter: \"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)\";\n}\n.fr-toolbar .fr-btn-wrap,\n.fr-popup .fr-btn-wrap {\n  float: left;\n  white-space: nowrap;\n  position: relative;\n}\n.fr-toolbar .fr-btn-wrap.fr-hidden,\n.fr-popup .fr-btn-wrap.fr-hidden {\n  display: none;\n}\n.fr-toolbar .fr-command.fr-btn,\n.fr-popup .fr-command.fr-btn {\n  background: transparent;\n  color: #222222;\n  -moz-outline: 0;\n  outline: 0;\n  border: 0;\n  line-height: 1;\n  cursor: pointer;\n  text-align: left;\n  margin: 0px 2px;\n  -webkit-transition: background 0.2s ease 0s;\n  -moz-transition: background 0.2s ease 0s;\n  -ms-transition: background 0.2s ease 0s;\n  -o-transition: background 0.2s ease 0s;\n  border-radius: 0;\n  -moz-border-radius: 0;\n  -webkit-border-radius: 0;\n  -moz-background-clip: padding;\n  -webkit-background-clip: padding-box;\n  background-clip: padding-box;\n  z-index: 2;\n  position: relative;\n  -webkit-box-sizing: border-box;\n  -moz-box-sizing: border-box;\n  box-sizing: border-box;\n  text-decoration: none;\n  user-select: none;\n  -o-user-select: none;\n  -moz-user-select: none;\n  -khtml-user-select: none;\n  -webkit-user-select: none;\n  -ms-user-select: none;\n  float: left;\n  padding: 0;\n  width: 38px;\n  height: 38px;\n}\n.fr-toolbar .fr-command.fr-btn::-moz-focus-inner,\n.fr-popup .fr-command.fr-btn::-moz-focus-inner {\n  border: 0;\n  padding: 0;\n}\n.fr-toolbar .fr-command.fr-btn.fr-btn-text,\n.fr-popup .fr-command.fr-btn.fr-btn-text {\n  width: auto;\n}\n.fr-toolbar .fr-command.fr-btn i,\n.fr-popup .fr-command.fr-btn i,\n.fr-toolbar .fr-command.fr-btn svg,\n.fr-popup .fr-command.fr-btn svg {\n  display: block;\n  font-size: 14px;\n  width: 14px;\n  margin: 12px 12px;\n  text-align: center;\n  float: none;\n}\n.fr-toolbar .fr-command.fr-btn span.fr-sr-only,\n.fr-popup .fr-command.fr-btn span.fr-sr-only {\n  position: absolute;\n  width: 1px;\n  height: 1px;\n  padding: 0;\n  margin: -1px;\n  overflow: hidden;\n  clip: rect(0, 0, 0, 0);\n  border: 0;\n}\n.fr-toolbar .fr-command.fr-btn span,\n.fr-popup .fr-command.fr-btn span {\n  font-size: 14px;\n  display: block;\n  line-height: 17px;\n  min-width: 34px;\n  float: left;\n  text-overflow: ellipsis;\n  overflow: hidden;\n  white-space: nowrap;\n  height: 17px;\n  font-weight: bold;\n  padding: 0 2px;\n}\n.fr-toolbar .fr-command.fr-btn img,\n.fr-popup .fr-command.fr-btn img {\n  margin: 12px 12px;\n  width: 14px;\n}\n.fr-toolbar .fr-command.fr-btn.fr-active,\n.fr-popup .fr-command.fr-btn.fr-active {\n  color: #1e88e5;\n  background: transparent;\n}\n.fr-toolbar .fr-command.fr-btn.fr-dropdown.fr-selection,\n.fr-popup .fr-command.fr-btn.fr-dropdown.fr-selection {\n  width: auto;\n}\n.fr-toolbar .fr-command.fr-btn.fr-dropdown.fr-selection span,\n.fr-popup .fr-command.fr-btn.fr-dropdown.fr-selection span {\n  font-weight: normal;\n}\n.fr-toolbar .fr-command.fr-btn.fr-dropdown i,\n.fr-popup .fr-command.fr-btn.fr-dropdown i,\n.fr-toolbar .fr-command.fr-btn.fr-dropdown span,\n.fr-popup .fr-command.fr-btn.fr-dropdown span,\n.fr-toolbar .fr-command.fr-btn.fr-dropdown img,\n.fr-popup .fr-command.fr-btn.fr-dropdown img,\n.fr-toolbar .fr-command.fr-btn.fr-dropdown svg,\n.fr-popup .fr-command.fr-btn.fr-dropdown svg {\n  margin-left: 8px;\n  margin-right: 16px;\n}\n.fr-toolbar .fr-command.fr-btn.fr-dropdown.fr-active,\n.fr-popup .fr-command.fr-btn.fr-dropdown.fr-active {\n  color: #222222;\n  background: #d6d6d6;\n}\n.fr-toolbar .fr-command.fr-btn.fr-dropdown.fr-active:hover,\n.fr-popup .fr-command.fr-btn.fr-dropdown.fr-active:hover,\n.fr-toolbar .fr-command.fr-btn.fr-dropdown.fr-active:focus,\n.fr-popup .fr-command.fr-btn.fr-dropdown.fr-active:focus {\n  background: #d6d6d6 !important;\n  color: #222222 !important;\n}\n.fr-toolbar .fr-command.fr-btn.fr-dropdown.fr-active:hover::after,\n.fr-popup .fr-command.fr-btn.fr-dropdown.fr-active:hover::after,\n.fr-toolbar .fr-command.fr-btn.fr-dropdown.fr-active:focus::after,\n.fr-popup .fr-command.fr-btn.fr-dropdown.fr-active:focus::after {\n  border-top-color: #222222 !important;\n}\n.fr-toolbar .fr-command.fr-btn.fr-dropdown::after,\n.fr-popup .fr-command.fr-btn.fr-dropdown::after {\n  position: absolute;\n  width: 0;\n  height: 0;\n  border-left: 4px solid transparent;\n  border-right: 4px solid transparent;\n  border-top: 4px solid #222222;\n  right: 4px;\n  top: 17px;\n  content: \"\";\n}\n.fr-toolbar .fr-command.fr-btn.fr-disabled,\n.fr-popup .fr-command.fr-btn.fr-disabled {\n  color: #bdbdbd;\n  cursor: default;\n}\n.fr-toolbar .fr-command.fr-btn.fr-disabled::after,\n.fr-popup .fr-command.fr-btn.fr-disabled::after {\n  border-top-color: #bdbdbd !important;\n}\n.fr-toolbar .fr-command.fr-btn.fr-hidden,\n.fr-popup .fr-command.fr-btn.fr-hidden {\n  display: none;\n}\n.fr-toolbar.fr-disabled .fr-btn,\n.fr-popup.fr-disabled .fr-btn,\n.fr-toolbar.fr-disabled .fr-btn.fr-active,\n.fr-popup.fr-disabled .fr-btn.fr-active {\n  color: #bdbdbd;\n}\n.fr-toolbar.fr-disabled .fr-btn.fr-dropdown::after,\n.fr-popup.fr-disabled .fr-btn.fr-dropdown::after,\n.fr-toolbar.fr-disabled .fr-btn.fr-active.fr-dropdown::after,\n.fr-popup.fr-disabled .fr-btn.fr-active.fr-dropdown::after {\n  border-top-color: #bdbdbd;\n}\n.fr-toolbar.fr-rtl .fr-command.fr-btn,\n.fr-popup.fr-rtl .fr-command.fr-btn {\n  float: right;\n}\n.fr-toolbar.fr-inline > .fr-command.fr-btn:not(.fr-hidden),\n.fr-toolbar.fr-inline > .fr-btn-wrap:not(.fr-hidden) {\n  display: -webkit-inline-flex;\n  display: -ms-inline-flexbox;\n  display: inline-flex;\n  float: none;\n}\n.fr-desktop .fr-command:hover,\n.fr-desktop .fr-command:focus,\n.fr-desktop .fr-command.fr-btn-hover,\n.fr-desktop .fr-command.fr-expanded {\n  outline: 0;\n  color: #222222;\n  background: #ebebeb;\n}\n.fr-desktop .fr-command:hover::after,\n.fr-desktop .fr-command:focus::after,\n.fr-desktop .fr-command.fr-btn-hover::after,\n.fr-desktop .fr-command.fr-expanded::after {\n  border-top-color: #222222 !important;\n}\n.fr-desktop .fr-command.fr-selected {\n  color: #222222;\n  background: #d6d6d6;\n}\n.fr-desktop .fr-command.fr-active:hover,\n.fr-desktop .fr-command.fr-active:focus,\n.fr-desktop .fr-command.fr-active.fr-btn-hover,\n.fr-desktop .fr-command.fr-active.fr-expanded {\n  color: #1e88e5;\n  background: #ebebeb;\n}\n.fr-desktop .fr-command.fr-active.fr-selected {\n  color: #1e88e5;\n  background: #d6d6d6;\n}\n.fr-desktop .fr-command.fr-disabled:hover,\n.fr-desktop .fr-command.fr-disabled:focus,\n.fr-desktop .fr-command.fr-disabled.fr-selected {\n  background: transparent;\n}\n.fr-desktop.fr-disabled .fr-command:hover,\n.fr-desktop.fr-disabled .fr-command:focus,\n.fr-desktop.fr-disabled .fr-command.fr-selected {\n  background: transparent;\n}\n.fr-toolbar.fr-mobile .fr-command.fr-blink,\n.fr-popup.fr-mobile .fr-command.fr-blink {\n  background: transparent;\n}\n.fr-command.fr-btn.fr-options {\n  width: 16px;\n  margin-left: -5px;\n}\n.fr-command.fr-btn.fr-options.fr-btn-hover,\n.fr-command.fr-btn.fr-options:hover,\n.fr-command.fr-btn.fr-options:focus {\n  border-left: solid 1px #fafafa;\n}\n.fr-command.fr-btn + .fr-dropdown-menu {\n  display: inline-block;\n  position: absolute;\n  right: auto;\n  bottom: auto;\n  height: auto;\n  z-index: 4;\n  -webkit-overflow-scrolling: touch;\n  overflow: hidden;\n  zoom: 1;\n  border-radius: 0 0 2px 2px;\n  -moz-border-radius: 0 0 2px 2px;\n  -webkit-border-radius: 0 0 2px 2px;\n  -moz-background-clip: padding;\n  -webkit-background-clip: padding-box;\n  background-clip: padding-box;\n}\n.fr-command.fr-btn + .fr-dropdown-menu.test-height .fr-dropdown-wrapper {\n  -webkit-transition: none;\n  -moz-transition: none;\n  -ms-transition: none;\n  -o-transition: none;\n  height: auto;\n  max-height: 275px;\n}\n.fr-command.fr-btn + .fr-dropdown-menu .fr-dropdown-wrapper {\n  background: #ffffff;\n  padding: 0;\n  margin: auto;\n  display: inline-block;\n  text-align: left;\n  position: relative;\n  -webkit-box-sizing: border-box;\n  -moz-box-sizing: border-box;\n  box-sizing: border-box;\n  -webkit-transition: max-height 0.2s ease 0s;\n  -moz-transition: max-height 0.2s ease 0s;\n  -ms-transition: max-height 0.2s ease 0s;\n  -o-transition: max-height 0.2s ease 0s;\n  margin-top: 0;\n  float: left;\n  max-height: 0;\n  height: 0;\n  margin-top: 0 !important;\n}\n.fr-command.fr-btn + .fr-dropdown-menu .fr-dropdown-wrapper .fr-dropdown-content {\n  overflow: auto;\n  position: relative;\n  max-height: 275px;\n}\n.fr-command.fr-btn + .fr-dropdown-menu .fr-dropdown-wrapper .fr-dropdown-content ul.fr-dropdown-list {\n  list-style-type: none;\n  margin: 0;\n  padding: 0;\n}\n.fr-command.fr-btn + .fr-dropdown-menu .fr-dropdown-wrapper .fr-dropdown-content ul.fr-dropdown-list li {\n  padding: 0;\n  margin: 0;\n  font-size: 15px;\n}\n.fr-command.fr-btn + .fr-dropdown-menu .fr-dropdown-wrapper .fr-dropdown-content ul.fr-dropdown-list li a {\n  padding: 0 24px;\n  line-height: 200%;\n  display: block;\n  cursor: pointer;\n  white-space: nowrap;\n  color: inherit;\n  text-decoration: none;\n}\n.fr-command.fr-btn + .fr-dropdown-menu .fr-dropdown-wrapper .fr-dropdown-content ul.fr-dropdown-list li a.fr-active {\n  background: #d6d6d6;\n}\n.fr-command.fr-btn + .fr-dropdown-menu .fr-dropdown-wrapper .fr-dropdown-content ul.fr-dropdown-list li a.fr-disabled {\n  color: #bdbdbd;\n  cursor: default;\n}\n.fr-command.fr-btn:not(.fr-active) + .fr-dropdown-menu {\n  left: -3000px !important;\n}\n.fr-command.fr-btn.fr-active + .fr-dropdown-menu {\n  display: inline-block;\n  -webkit-box-shadow: 0 3px 6px rgba(0, 0, 0, 0.16), 0 2px 2px 1px rgba(0, 0, 0, 0.14);\n  -moz-box-shadow: 0 3px 6px rgba(0, 0, 0, 0.16), 0 2px 2px 1px rgba(0, 0, 0, 0.14);\n  box-shadow: 0 3px 6px rgba(0, 0, 0, 0.16), 0 2px 2px 1px rgba(0, 0, 0, 0.14);\n}\n.fr-command.fr-btn.fr-active + .fr-dropdown-menu .fr-dropdown-wrapper {\n  height: auto;\n  max-height: 275px;\n}\n.fr-bottom > .fr-command.fr-btn + .fr-dropdown-menu {\n  border-radius: 2px 2px 0 0;\n  -moz-border-radius: 2px 2px 0 0;\n  -webkit-border-radius: 2px 2px 0 0;\n  -moz-background-clip: padding;\n  -webkit-background-clip: padding-box;\n  background-clip: padding-box;\n}\n.fr-toolbar.fr-rtl .fr-dropdown-wrapper,\n.fr-popup.fr-rtl .fr-dropdown-wrapper {\n  text-align: right !important;\n}\nbody.prevent-scroll {\n  overflow: hidden;\n}\nbody.prevent-scroll.fr-mobile {\n  position: fixed;\n  -webkit-overflow-scrolling: touch;\n}\n.fr-modal {\n  color: #222222;\n  font-family: Arial, Helvetica, sans-serif;\n  position: fixed;\n  overflow-x: auto;\n  overflow-y: scroll;\n  top: 0;\n  left: 0;\n  bottom: 0;\n  right: 0;\n  width: 100%;\n  z-index: 2147483640;\n  text-rendering: optimizelegibility;\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n  text-align: center;\n  line-height: 1.2;\n}\n.fr-modal.fr-middle .fr-modal-wrapper {\n  margin-top: 0;\n  margin-bottom: 0;\n  margin-left: auto;\n  margin-right: auto;\n  top: 50%;\n  left: 50%;\n  -webkit-transform: translate(-50%, -50%);\n  -moz-transform: translate(-50%, -50%);\n  -ms-transform: translate(-50%, -50%);\n  -o-transform: translate(-50%, -50%);\n  position: absolute;\n}\n.fr-modal .fr-modal-wrapper {\n  border-radius: 2px;\n  -moz-border-radius: 2px;\n  -webkit-border-radius: 2px;\n  -moz-background-clip: padding;\n  -webkit-background-clip: padding-box;\n  background-clip: padding-box;\n  margin: 20px auto;\n  display: inline-block;\n  background: #ffffff;\n  min-width: 300px;\n  -webkit-box-shadow: 0 5px 8px rgba(0, 0, 0, 0.19), 0 4px 3px 1px rgba(0, 0, 0, 0.14);\n  -moz-box-shadow: 0 5px 8px rgba(0, 0, 0, 0.19), 0 4px 3px 1px rgba(0, 0, 0, 0.14);\n  box-shadow: 0 5px 8px rgba(0, 0, 0, 0.19), 0 4px 3px 1px rgba(0, 0, 0, 0.14);\n  border: 0px;\n  border-top: 5px solid #222222;\n  overflow: hidden;\n  width: 90%;\n  position: relative;\n}\n@media (min-width: 768px) and (max-width: 991px) {\n  .fr-modal .fr-modal-wrapper {\n    margin: 30px auto;\n    width: 70%;\n  }\n}\n@media (min-width: 992px) {\n  .fr-modal .fr-modal-wrapper {\n    margin: 50px auto;\n    width: 960px;\n  }\n}\n.fr-modal .fr-modal-wrapper .fr-modal-head {\n  background: #ffffff;\n  -webkit-box-shadow: 0 3px 6px rgba(0, 0, 0, 0.16), 0 2px 2px 1px rgba(0, 0, 0, 0.14);\n  -moz-box-shadow: 0 3px 6px rgba(0, 0, 0, 0.16), 0 2px 2px 1px rgba(0, 0, 0, 0.14);\n  box-shadow: 0 3px 6px rgba(0, 0, 0, 0.16), 0 2px 2px 1px rgba(0, 0, 0, 0.14);\n  border-bottom: 0px;\n  overflow: hidden;\n  position: absolute;\n  width: 100%;\n  min-height: 42px;\n  z-index: 3;\n  -webkit-transition: height 0.2s ease 0s;\n  -moz-transition: height 0.2s ease 0s;\n  -ms-transition: height 0.2s ease 0s;\n  -o-transition: height 0.2s ease 0s;\n}\n.fr-modal .fr-modal-wrapper .fr-modal-head .fr-modal-close {\n  padding: 12px;\n  width: 20px;\n  font-size: 16px;\n  cursor: pointer;\n  line-height: 18px;\n  color: #222222;\n  -webkit-box-sizing: content-box;\n  -moz-box-sizing: content-box;\n  box-sizing: content-box;\n  position: absolute;\n  top: 0;\n  right: 0;\n  -webkit-transition: color 0.2s ease 0s;\n  -moz-transition: color 0.2s ease 0s;\n  -ms-transition: color 0.2s ease 0s;\n  -o-transition: color 0.2s ease 0s;\n}\n.fr-modal .fr-modal-wrapper .fr-modal-head h4 {\n  font-size: 18px;\n  padding: 12px 10px;\n  margin: 0;\n  font-weight: 400;\n  line-height: 18px;\n  display: inline-block;\n  float: left;\n}\n.fr-modal .fr-modal-wrapper div.fr-modal-body {\n  height: 100%;\n  min-height: 150px;\n  overflow-y: scroll;\n  padding-bottom: 10px;\n}\n.fr-modal .fr-modal-wrapper div.fr-modal-body:focus {\n  outline: 0;\n}\n.fr-modal .fr-modal-wrapper div.fr-modal-body button.fr-command {\n  height: 36px;\n  line-height: 1;\n  color: #1e88e5;\n  padding: 10px;\n  cursor: pointer;\n  text-decoration: none;\n  border: none;\n  background: none;\n  font-size: 16px;\n  outline: none;\n  -webkit-transition: background 0.2s ease 0s;\n  -moz-transition: background 0.2s ease 0s;\n  -ms-transition: background 0.2s ease 0s;\n  -o-transition: background 0.2s ease 0s;\n  border-radius: 2px;\n  -moz-border-radius: 2px;\n  -webkit-border-radius: 2px;\n  -moz-background-clip: padding;\n  -webkit-background-clip: padding-box;\n  background-clip: padding-box;\n}\n.fr-modal .fr-modal-wrapper div.fr-modal-body button.fr-command + button {\n  margin-left: 24px;\n}\n.fr-modal .fr-modal-wrapper div.fr-modal-body button.fr-command:hover,\n.fr-modal .fr-modal-wrapper div.fr-modal-body button.fr-command:focus {\n  background: #ebebeb;\n  color: #1e88e5;\n}\n.fr-modal .fr-modal-wrapper div.fr-modal-body button.fr-command:active {\n  background: #d6d6d6;\n  color: #1e88e5;\n}\n.fr-modal .fr-modal-wrapper div.fr-modal-body button::-moz-focus-inner {\n  border: 0;\n}\n.fr-desktop .fr-modal-wrapper .fr-modal-head i:hover {\n  background: #ebebeb;\n}\n.fr-overlay {\n  position: fixed;\n  top: 0;\n  bottom: 0;\n  left: 0;\n  right: 0;\n  background: #000000;\n  -webkit-opacity: 0.5;\n  -moz-opacity: 0.5;\n  opacity: 0.5;\n  -ms-filter: \"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)\";\n  z-index: 2147483639;\n}\n.fr-popup {\n  position: absolute;\n  display: none;\n  color: #222222;\n  background: #ffffff;\n  -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n  -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n  border-radius: 2px;\n  -moz-border-radius: 2px;\n  -webkit-border-radius: 2px;\n  -moz-background-clip: padding;\n  -webkit-background-clip: padding-box;\n  background-clip: padding-box;\n  font-family: Arial, Helvetica, sans-serif;\n  -webkit-box-sizing: border-box;\n  -moz-box-sizing: border-box;\n  box-sizing: border-box;\n  user-select: none;\n  -o-user-select: none;\n  -moz-user-select: none;\n  -khtml-user-select: none;\n  -webkit-user-select: none;\n  -ms-user-select: none;\n  margin-top: 10px;\n  z-index: 2147483635;\n  text-align: left;\n  border: 0px;\n  border-top: 5px solid #222222;\n  text-rendering: optimizelegibility;\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n  line-height: 1.2;\n}\n.fr-popup .fr-input-focus {\n  background: #f5f5f5;\n}\n.fr-popup.fr-above {\n  margin-top: -10px;\n  border-top: 0;\n  border-bottom: 5px solid #222222;\n  -webkit-box-shadow: 0 -1px 3px rgba(0, 0, 0, 0.12), 0 -1px 1px 1px rgba(0, 0, 0, 0.16);\n  -moz-box-shadow: 0 -1px 3px rgba(0, 0, 0, 0.12), 0 -1px 1px 1px rgba(0, 0, 0, 0.16);\n  box-shadow: 0 -1px 3px rgba(0, 0, 0, 0.12), 0 -1px 1px 1px rgba(0, 0, 0, 0.16);\n}\n.fr-popup.fr-active {\n  display: block;\n}\n.fr-popup.fr-hidden {\n  -webkit-opacity: 0;\n  -moz-opacity: 0;\n  opacity: 0;\n  -ms-filter: \"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)\";\n}\n.fr-popup.fr-empty {\n  display: none !important;\n}\n.fr-popup .fr-hs {\n  display: block !important;\n}\n.fr-popup .fr-hs.fr-hidden {\n  display: none !important;\n}\n.fr-popup .fr-input-line {\n  position: relative;\n  padding: 8px 0;\n}\n.fr-popup .fr-input-line input[type=\"text\"],\n.fr-popup .fr-input-line textarea {\n  width: 100%;\n  margin: 0px 0 1px 0;\n  border: none;\n  border-bottom: solid 1px #bdbdbd;\n  color: #222222;\n  font-size: 14px;\n  padding: 6px 0 2px;\n  background: rgba(0, 0, 0, 0);\n  position: relative;\n  z-index: 2;\n  -webkit-box-sizing: border-box;\n  -moz-box-sizing: border-box;\n  box-sizing: border-box;\n}\n.fr-popup .fr-input-line input[type=\"text\"]:focus,\n.fr-popup .fr-input-line textarea:focus {\n  border-bottom: solid 2px #1e88e5;\n  margin-bottom: 0px;\n}\n.fr-popup .fr-input-line input + label,\n.fr-popup .fr-input-line textarea + label {\n  position: absolute;\n  top: 0;\n  left: 0;\n  font-size: 12px;\n  color: rgba(0, 0, 0, 0);\n  -webkit-transition: color 0.2s ease 0s;\n  -moz-transition: color 0.2s ease 0s;\n  -ms-transition: color 0.2s ease 0s;\n  -o-transition: color 0.2s ease 0s;\n  z-index: 3;\n  width: 100%;\n  display: block;\n  background: #ffffff;\n}\n.fr-popup .fr-input-line input.fr-not-empty:focus + label,\n.fr-popup .fr-input-line textarea.fr-not-empty:focus + label {\n  color: #1e88e5;\n}\n.fr-popup .fr-input-line input.fr-not-empty + label,\n.fr-popup .fr-input-line textarea.fr-not-empty + label {\n  color: #808080;\n}\n.fr-popup input,\n.fr-popup textarea {\n  user-select: text;\n  -o-user-select: text;\n  -moz-user-select: text;\n  -khtml-user-select: text;\n  -webkit-user-select: text;\n  -ms-user-select: text;\n  border-radius: 0;\n  -moz-border-radius: 0;\n  -webkit-border-radius: 0;\n  -moz-background-clip: padding;\n  -webkit-background-clip: padding-box;\n  background-clip: padding-box;\n  outline: none;\n}\n.fr-popup textarea {\n  resize: none;\n}\n.fr-popup .fr-buttons {\n  -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n  -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n  padding: 0 2px;\n  white-space: nowrap;\n  line-height: 0;\n  border-bottom: 0px;\n}\n.fr-popup .fr-buttons::after {\n  clear: both;\n  display: block;\n  content: \"\";\n  height: 0;\n}\n.fr-popup .fr-buttons .fr-btn {\n  display: inline-block;\n  float: none;\n}\n.fr-popup .fr-buttons .fr-btn i {\n  float: left;\n}\n.fr-popup .fr-buttons .fr-separator {\n  display: inline-block;\n  float: none;\n}\n.fr-popup .fr-layer {\n  width: 225px;\n  -webkit-box-sizing: border-box;\n  -moz-box-sizing: border-box;\n  box-sizing: border-box;\n  margin: 10px;\n  display: none;\n}\n@media (min-width: 768px) {\n  .fr-popup .fr-layer {\n    width: 300px;\n  }\n}\n.fr-popup .fr-layer.fr-active {\n  display: inline-block;\n}\n.fr-popup .fr-action-buttons {\n  z-index: 7;\n  height: 36px;\n  text-align: right;\n}\n.fr-popup .fr-action-buttons button.fr-command {\n  height: 36px;\n  line-height: 1;\n  color: #1e88e5;\n  padding: 10px;\n  cursor: pointer;\n  text-decoration: none;\n  border: none;\n  background: none;\n  font-size: 16px;\n  outline: none;\n  -webkit-transition: background 0.2s ease 0s;\n  -moz-transition: background 0.2s ease 0s;\n  -ms-transition: background 0.2s ease 0s;\n  -o-transition: background 0.2s ease 0s;\n  border-radius: 2px;\n  -moz-border-radius: 2px;\n  -webkit-border-radius: 2px;\n  -moz-background-clip: padding;\n  -webkit-background-clip: padding-box;\n  background-clip: padding-box;\n}\n.fr-popup .fr-action-buttons button.fr-command + button {\n  margin-left: 24px;\n}\n.fr-popup .fr-action-buttons button.fr-command:hover,\n.fr-popup .fr-action-buttons button.fr-command:focus {\n  background: #ebebeb;\n  color: #1e88e5;\n}\n.fr-popup .fr-action-buttons button.fr-command:active {\n  background: #d6d6d6;\n  color: #1e88e5;\n}\n.fr-popup .fr-action-buttons button::-moz-focus-inner {\n  border: 0;\n}\n.fr-popup .fr-checkbox {\n  position: relative;\n  display: inline-block;\n  width: 16px;\n  height: 16px;\n  line-height: 1;\n  -webkit-box-sizing: content-box;\n  -moz-box-sizing: content-box;\n  box-sizing: content-box;\n  vertical-align: middle;\n}\n.fr-popup .fr-checkbox svg {\n  margin-left: 2px;\n  margin-top: 2px;\n  display: none;\n  width: 10px;\n  height: 10px;\n}\n.fr-popup .fr-checkbox span {\n  border: solid 1px #222222;\n  border-radius: 2px;\n  -moz-border-radius: 2px;\n  -webkit-border-radius: 2px;\n  -moz-background-clip: padding;\n  -webkit-background-clip: padding-box;\n  background-clip: padding-box;\n  width: 16px;\n  height: 16px;\n  display: inline-block;\n  position: relative;\n  z-index: 1;\n  -webkit-box-sizing: border-box;\n  -moz-box-sizing: border-box;\n  box-sizing: border-box;\n  -webkit-transition: background 0.2s ease 0s, border-color 0.2s ease 0s;\n  -moz-transition: background 0.2s ease 0s, border-color 0.2s ease 0s;\n  -ms-transition: background 0.2s ease 0s, border-color 0.2s ease 0s;\n  -o-transition: background 0.2s ease 0s, border-color 0.2s ease 0s;\n}\n.fr-popup .fr-checkbox input {\n  position: absolute;\n  z-index: 2;\n  -webkit-opacity: 0;\n  -moz-opacity: 0;\n  opacity: 0;\n  -ms-filter: \"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)\";\n  border: 0 none;\n  cursor: pointer;\n  height: 16px;\n  margin: 0;\n  padding: 0;\n  width: 16px;\n  top: 1px;\n  left: 1px;\n}\n.fr-popup .fr-checkbox input:checked + span {\n  background: #1e88e5;\n  border-color: #1e88e5;\n}\n.fr-popup .fr-checkbox input:checked + span svg {\n  display: block;\n}\n.fr-popup .fr-checkbox input:focus + span {\n  border-color: #1e88e5;\n}\n.fr-popup .fr-checkbox-line {\n  font-size: 14px;\n  line-height: 1.4px;\n  margin-top: 10px;\n}\n.fr-popup .fr-checkbox-line label {\n  cursor: pointer;\n  margin: 0 5px;\n  vertical-align: middle;\n}\n.fr-popup.fr-rtl {\n  direction: rtl;\n  text-align: right;\n}\n.fr-popup.fr-rtl .fr-action-buttons {\n  text-align: left;\n}\n.fr-popup.fr-rtl .fr-input-line input + label,\n.fr-popup.fr-rtl .fr-input-line textarea + label {\n  left: auto;\n  right: 0;\n}\n.fr-popup.fr-rtl .fr-buttons .fr-separator.fr-vs {\n  float: right;\n}\n.fr-popup .fr-arrow {\n  width: 0;\n  height: 0;\n  border-left: 5px solid transparent;\n  border-right: 5px solid transparent;\n  border-bottom: 5px solid #222222;\n  position: absolute;\n  top: -9px;\n  left: 50%;\n  margin-left: -5px;\n  display: inline-block;\n}\n.fr-popup.fr-above .fr-arrow {\n  top: auto;\n  bottom: -9px;\n  border-bottom: 0;\n  border-top: 5px solid #222222;\n}\n.fr-text-edit-layer {\n  width: 250px;\n  -webkit-box-sizing: border-box;\n  -moz-box-sizing: border-box;\n  box-sizing: border-box;\n  display: block !important;\n}\n.fr-toolbar {\n  color: #222222;\n  background: #ffffff;\n  position: relative;\n  z-index: 4;\n  font-family: Arial, Helvetica, sans-serif;\n  -webkit-box-sizing: border-box;\n  -moz-box-sizing: border-box;\n  box-sizing: border-box;\n  user-select: none;\n  -o-user-select: none;\n  -moz-user-select: none;\n  -khtml-user-select: none;\n  -webkit-user-select: none;\n  -ms-user-select: none;\n  padding: 0 2px;\n  border-radius: 2px;\n  -moz-border-radius: 2px;\n  -webkit-border-radius: 2px;\n  -moz-background-clip: padding;\n  -webkit-background-clip: padding-box;\n  background-clip: padding-box;\n  -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n  -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n  text-align: left;\n  border: 0px;\n  border-top: 5px solid #222222;\n  text-rendering: optimizelegibility;\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n  line-height: 1.2;\n}\n.fr-toolbar::after {\n  clear: both;\n  display: block;\n  content: \"\";\n  height: 0;\n}\n.fr-toolbar.fr-rtl {\n  text-align: right;\n}\n.fr-toolbar.fr-inline {\n  display: none;\n  white-space: nowrap;\n  position: absolute;\n  margin-top: 10px;\n}\n.fr-toolbar.fr-inline .fr-arrow {\n  width: 0;\n  height: 0;\n  border-left: 5px solid transparent;\n  border-right: 5px solid transparent;\n  border-bottom: 5px solid #222222;\n  position: absolute;\n  top: -9px;\n  left: 50%;\n  margin-left: -5px;\n  display: inline-block;\n}\n.fr-toolbar.fr-inline.fr-above {\n  margin-top: -10px;\n  -webkit-box-shadow: 0 -1px 3px rgba(0, 0, 0, 0.12), 0 -1px 1px 1px rgba(0, 0, 0, 0.16);\n  -moz-box-shadow: 0 -1px 3px rgba(0, 0, 0, 0.12), 0 -1px 1px 1px rgba(0, 0, 0, 0.16);\n  box-shadow: 0 -1px 3px rgba(0, 0, 0, 0.12), 0 -1px 1px 1px rgba(0, 0, 0, 0.16);\n  border-bottom: 5px solid #222222;\n  border-top: 0;\n}\n.fr-toolbar.fr-inline.fr-above .fr-arrow {\n  top: auto;\n  bottom: -9px;\n  border-bottom: 0;\n  border-top-color: inherit;\n  border-top-style: solid;\n  border-top-width: 5px;\n}\n.fr-toolbar.fr-top {\n  top: 0;\n  border-radius: 2px 2px 0 0;\n  -moz-border-radius: 2px 2px 0 0;\n  -webkit-border-radius: 2px 2px 0 0;\n  -moz-background-clip: padding;\n  -webkit-background-clip: padding-box;\n  background-clip: padding-box;\n  -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n  -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n}\n.fr-toolbar.fr-bottom {\n  bottom: 0;\n  border-radius: 0 0 2px 2px;\n  -moz-border-radius: 0 0 2px 2px;\n  -webkit-border-radius: 0 0 2px 2px;\n  -moz-background-clip: padding;\n  -webkit-background-clip: padding-box;\n  background-clip: padding-box;\n  -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n  -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n}\n.fr-separator {\n  background: #ebebeb;\n  display: block;\n  vertical-align: top;\n  float: left;\n}\n.fr-separator + .fr-separator {\n  display: none;\n}\n.fr-separator.fr-vs {\n  height: 34px;\n  width: 1px;\n  margin: 2px;\n}\n.fr-separator.fr-hs {\n  clear: both;\n  height: 1px;\n  width: calc(100% - (2 * 2px));\n  margin: 0 2px;\n}\n.fr-separator.fr-hidden {\n  display: none !important;\n}\n.fr-rtl .fr-separator {\n  float: right;\n}\n.fr-toolbar.fr-inline .fr-separator.fr-hs {\n  float: none;\n}\n.fr-toolbar.fr-inline .fr-separator.fr-vs {\n  float: none;\n  display: inline-block;\n}\n.fr-visibility-helper {\n  display: none;\n  margin-left: 0px !important;\n}\n@media (min-width: 768px) {\n  .fr-visibility-helper {\n    margin-left: 1px !important;\n  }\n}\n@media (min-width: 992px) {\n  .fr-visibility-helper {\n    margin-left: 2px !important;\n  }\n}\n@media (min-width: 1200px) {\n  .fr-visibility-helper {\n    margin-left: 3px !important;\n  }\n}\n.fr-opacity-0 {\n  -webkit-opacity: 0;\n  -moz-opacity: 0;\n  opacity: 0;\n  -ms-filter: \"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)\";\n}\n.fr-box {\n  position: relative;\n}\n/**\n * Postion sticky hacks.\n */\n.fr-sticky {\n  position: -webkit-sticky;\n  position: -moz-sticky;\n  position: -ms-sticky;\n  position: -o-sticky;\n  position: sticky;\n}\n.fr-sticky-off {\n  position: relative;\n}\n.fr-sticky-on {\n  position: fixed;\n}\n.fr-sticky-on.fr-sticky-ios {\n  position: absolute;\n  left: 0;\n  right: 0;\n  width: auto !important;\n}\n.fr-sticky-dummy {\n  display: none;\n}\n.fr-sticky-on + .fr-sticky-dummy,\n.fr-sticky-box > .fr-sticky-dummy {\n  display: block;\n}\nspan.fr-sr-only {\n  position: absolute;\n  width: 1px;\n  height: 1px;\n  padding: 0;\n  margin: -1px;\n  overflow: hidden;\n  clip: rect(0, 0, 0, 0);\n  border: 0;\n}\n"
  },
  {
    "path": "src/main/resources/static/plugins/froala-editor/css/froala_editor.pkgd.css",
    "content": "/*!\n * froala_editor v2.9.1 (https://www.froala.com/wysiwyg-editor)\n * License https://froala.com/wysiwyg-editor/terms/\n * Copyright 2014-2018 Froala Labs\n */\n\n.clearfix::after {\n  clear: both;\n  display: block;\n  content: \"\";\n  height: 0;\n}\n.hide-by-clipping {\n  position: absolute;\n  width: 1px;\n  height: 1px;\n  padding: 0;\n  margin: -1px;\n  overflow: hidden;\n  clip: rect(0, 0, 0, 0);\n  border: 0;\n}\n.fr-element,\n.fr-element:focus {\n  outline: 0px solid transparent;\n}\n.fr-box.fr-basic .fr-element {\n  color: #000000;\n  padding: 16px;\n  -webkit-box-sizing: border-box;\n  -moz-box-sizing: border-box;\n  box-sizing: border-box;\n  overflow-x: auto;\n  min-height: 52px;\n}\n.fr-box.fr-basic.fr-rtl .fr-element {\n  text-align: right;\n}\n.fr-element {\n  background: transparent;\n  position: relative;\n  z-index: 2;\n  -webkit-user-select: auto;\n}\n.fr-element a {\n  user-select: auto;\n  -o-user-select: auto;\n  -moz-user-select: auto;\n  -khtml-user-select: auto;\n  -webkit-user-select: auto;\n  -ms-user-select: auto;\n}\n.fr-element.fr-disabled {\n  user-select: none;\n  -o-user-select: none;\n  -moz-user-select: none;\n  -khtml-user-select: none;\n  -webkit-user-select: none;\n  -ms-user-select: none;\n}\n.fr-element [contenteditable=\"true\"] {\n  outline: 0px solid transparent;\n}\n.fr-box a.fr-floating-btn {\n  -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n  -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n  border-radius: 100%;\n  -moz-border-radius: 100%;\n  -webkit-border-radius: 100%;\n  -moz-background-clip: padding;\n  -webkit-background-clip: padding-box;\n  background-clip: padding-box;\n  height: 32px;\n  width: 32px;\n  background: #ffffff;\n  color: #1e88e5;\n  -webkit-transition: background 0.2s ease 0s, color 0.2s ease 0s, transform 0.2s ease 0s;\n  -moz-transition: background 0.2s ease 0s, color 0.2s ease 0s, transform 0.2s ease 0s;\n  -ms-transition: background 0.2s ease 0s, color 0.2s ease 0s, transform 0.2s ease 0s;\n  -o-transition: background 0.2s ease 0s, color 0.2s ease 0s, transform 0.2s ease 0s;\n  outline: none;\n  left: 0;\n  top: 0;\n  line-height: 32px;\n  -webkit-transform: scale(0);\n  -moz-transform: scale(0);\n  -ms-transform: scale(0);\n  -o-transform: scale(0);\n  text-align: center;\n  display: block;\n  -webkit-box-sizing: border-box;\n  -moz-box-sizing: border-box;\n  box-sizing: border-box;\n  border: none;\n}\n.fr-box a.fr-floating-btn svg {\n  -webkit-transition: transform 0.2s ease 0s;\n  -moz-transition: transform 0.2s ease 0s;\n  -ms-transition: transform 0.2s ease 0s;\n  -o-transition: transform 0.2s ease 0s;\n  fill: #1e88e5;\n}\n.fr-box a.fr-floating-btn i,\n.fr-box a.fr-floating-btn svg {\n  font-size: 14px;\n  line-height: 32px;\n}\n.fr-box a.fr-floating-btn.fr-btn + .fr-btn {\n  margin-left: 10px;\n}\n.fr-box a.fr-floating-btn:hover {\n  background: #ebebeb;\n  cursor: pointer;\n}\n.fr-box a.fr-floating-btn:hover svg {\n  fill: #1e88e5;\n}\n.fr-box .fr-visible a.fr-floating-btn {\n  -webkit-transform: scale(1);\n  -moz-transform: scale(1);\n  -ms-transform: scale(1);\n  -o-transform: scale(1);\n}\niframe.fr-iframe {\n  width: 100%;\n  border: none;\n  position: relative;\n  display: block;\n  z-index: 2;\n  -webkit-box-sizing: border-box;\n  -moz-box-sizing: border-box;\n  box-sizing: border-box;\n}\n.fr-wrapper {\n  position: relative;\n  z-index: 1;\n}\n.fr-wrapper::after {\n  clear: both;\n  display: block;\n  content: \"\";\n  height: 0;\n}\n.fr-wrapper .fr-placeholder {\n  position: absolute;\n  font-size: 12px;\n  color: #aaaaaa;\n  z-index: 1;\n  display: none;\n  top: 0;\n  left: 0;\n  right: 0;\n  overflow: hidden;\n}\n.fr-wrapper.show-placeholder .fr-placeholder {\n  display: block;\n}\n.fr-wrapper ::-moz-selection {\n  background: #b5d6fd;\n  color: #000000;\n}\n.fr-wrapper ::selection {\n  background: #b5d6fd;\n  color: #000000;\n}\n.fr-box.fr-basic .fr-wrapper {\n  background: #ffffff;\n  border: 0px;\n  border-top: 0;\n  top: 0;\n  left: 0;\n}\n.fr-box.fr-basic.fr-top .fr-wrapper {\n  border-top: 0;\n  border-radius: 0 0 2px 2px;\n  -moz-border-radius: 0 0 2px 2px;\n  -webkit-border-radius: 0 0 2px 2px;\n  -moz-background-clip: padding;\n  -webkit-background-clip: padding-box;\n  background-clip: padding-box;\n  -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n  -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n}\n.fr-box.fr-basic.fr-bottom .fr-wrapper {\n  border-bottom: 0;\n  border-radius: 2px 2px 0 0;\n  -moz-border-radius: 2px 2px 0 0;\n  -webkit-border-radius: 2px 2px 0 0;\n  -moz-background-clip: padding;\n  -webkit-background-clip: padding-box;\n  background-clip: padding-box;\n  -webkit-box-shadow: 0 -1px 3px rgba(0, 0, 0, 0.12), 0 -1px 1px 1px rgba(0, 0, 0, 0.16);\n  -moz-box-shadow: 0 -1px 3px rgba(0, 0, 0, 0.12), 0 -1px 1px 1px rgba(0, 0, 0, 0.16);\n  box-shadow: 0 -1px 3px rgba(0, 0, 0, 0.12), 0 -1px 1px 1px rgba(0, 0, 0, 0.16);\n}\n@media (min-width: 992px) {\n  .fr-box.fr-document {\n    min-width: 21cm;\n  }\n  .fr-box.fr-document .fr-wrapper {\n    text-align: center;\n    padding: 30px;\n    min-width: 21cm;\n    background: #EFEFEF;\n  }\n  .fr-box.fr-document .fr-wrapper .fr-element {\n    text-align: left;\n    background: #FFF;\n    width: 21cm;\n    margin: auto;\n    min-height: 26cm !important;\n    padding: 1cm 2cm;\n    -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n    -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n    box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n    overflow: visible;\n  }\n  .fr-box.fr-document .fr-wrapper .fr-element hr {\n    margin-left: -2cm;\n    margin-right: -2cm;\n    background: #EFEFEF;\n    height: 1cm;\n    outline: none;\n    border: none;\n  }\n}\n.fr-tooltip {\n  position: absolute;\n  top: 0;\n  left: 0;\n  padding: 0 8px;\n  border-radius: 2px;\n  -moz-border-radius: 2px;\n  -webkit-border-radius: 2px;\n  -moz-background-clip: padding;\n  -webkit-background-clip: padding-box;\n  background-clip: padding-box;\n  -webkit-box-shadow: 0 3px 6px rgba(0, 0, 0, 0.16), 0 2px 2px 1px rgba(0, 0, 0, 0.14);\n  -moz-box-shadow: 0 3px 6px rgba(0, 0, 0, 0.16), 0 2px 2px 1px rgba(0, 0, 0, 0.14);\n  box-shadow: 0 3px 6px rgba(0, 0, 0, 0.16), 0 2px 2px 1px rgba(0, 0, 0, 0.14);\n  background: #222222;\n  color: #ffffff;\n  font-size: 11px;\n  line-height: 22px;\n  font-family: Arial, Helvetica, sans-serif;\n  -webkit-transition: opacity 0.2s ease 0s;\n  -moz-transition: opacity 0.2s ease 0s;\n  -ms-transition: opacity 0.2s ease 0s;\n  -o-transition: opacity 0.2s ease 0s;\n  -webkit-opacity: 0;\n  -moz-opacity: 0;\n  opacity: 0;\n  -ms-filter: \"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)\";\n  left: -3000px;\n  user-select: none;\n  -o-user-select: none;\n  -moz-user-select: none;\n  -khtml-user-select: none;\n  -webkit-user-select: none;\n  -ms-user-select: none;\n  z-index: 2147483647;\n  text-rendering: optimizelegibility;\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n}\n.fr-tooltip.fr-visible {\n  -webkit-opacity: 1;\n  -moz-opacity: 1;\n  opacity: 1;\n  -ms-filter: \"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)\";\n}\n.fr-toolbar .fr-btn-wrap,\n.fr-popup .fr-btn-wrap {\n  float: left;\n  white-space: nowrap;\n  position: relative;\n}\n.fr-toolbar .fr-btn-wrap.fr-hidden,\n.fr-popup .fr-btn-wrap.fr-hidden {\n  display: none;\n}\n.fr-toolbar .fr-command.fr-btn,\n.fr-popup .fr-command.fr-btn {\n  background: transparent;\n  color: #222222;\n  -moz-outline: 0;\n  outline: 0;\n  border: 0;\n  line-height: 1;\n  cursor: pointer;\n  text-align: left;\n  margin: 0px 2px;\n  -webkit-transition: background 0.2s ease 0s;\n  -moz-transition: background 0.2s ease 0s;\n  -ms-transition: background 0.2s ease 0s;\n  -o-transition: background 0.2s ease 0s;\n  border-radius: 0;\n  -moz-border-radius: 0;\n  -webkit-border-radius: 0;\n  -moz-background-clip: padding;\n  -webkit-background-clip: padding-box;\n  background-clip: padding-box;\n  z-index: 2;\n  position: relative;\n  -webkit-box-sizing: border-box;\n  -moz-box-sizing: border-box;\n  box-sizing: border-box;\n  text-decoration: none;\n  user-select: none;\n  -o-user-select: none;\n  -moz-user-select: none;\n  -khtml-user-select: none;\n  -webkit-user-select: none;\n  -ms-user-select: none;\n  float: left;\n  padding: 0;\n  width: 38px;\n  height: 38px;\n}\n.fr-toolbar .fr-command.fr-btn::-moz-focus-inner,\n.fr-popup .fr-command.fr-btn::-moz-focus-inner {\n  border: 0;\n  padding: 0;\n}\n.fr-toolbar .fr-command.fr-btn.fr-btn-text,\n.fr-popup .fr-command.fr-btn.fr-btn-text {\n  width: auto;\n}\n.fr-toolbar .fr-command.fr-btn i,\n.fr-popup .fr-command.fr-btn i,\n.fr-toolbar .fr-command.fr-btn svg,\n.fr-popup .fr-command.fr-btn svg {\n  display: block;\n  font-size: 14px;\n  width: 14px;\n  margin: 12px 12px;\n  text-align: center;\n  float: none;\n}\n.fr-toolbar .fr-command.fr-btn span.fr-sr-only,\n.fr-popup .fr-command.fr-btn span.fr-sr-only {\n  position: absolute;\n  width: 1px;\n  height: 1px;\n  padding: 0;\n  margin: -1px;\n  overflow: hidden;\n  clip: rect(0, 0, 0, 0);\n  border: 0;\n}\n.fr-toolbar .fr-command.fr-btn span,\n.fr-popup .fr-command.fr-btn span {\n  font-size: 14px;\n  display: block;\n  line-height: 17px;\n  min-width: 34px;\n  float: left;\n  text-overflow: ellipsis;\n  overflow: hidden;\n  white-space: nowrap;\n  height: 17px;\n  font-weight: bold;\n  padding: 0 2px;\n}\n.fr-toolbar .fr-command.fr-btn img,\n.fr-popup .fr-command.fr-btn img {\n  margin: 12px 12px;\n  width: 14px;\n}\n.fr-toolbar .fr-command.fr-btn.fr-active,\n.fr-popup .fr-command.fr-btn.fr-active {\n  color: #1e88e5;\n  background: transparent;\n}\n.fr-toolbar .fr-command.fr-btn.fr-dropdown.fr-selection,\n.fr-popup .fr-command.fr-btn.fr-dropdown.fr-selection {\n  width: auto;\n}\n.fr-toolbar .fr-command.fr-btn.fr-dropdown.fr-selection span,\n.fr-popup .fr-command.fr-btn.fr-dropdown.fr-selection span {\n  font-weight: normal;\n}\n.fr-toolbar .fr-command.fr-btn.fr-dropdown i,\n.fr-popup .fr-command.fr-btn.fr-dropdown i,\n.fr-toolbar .fr-command.fr-btn.fr-dropdown span,\n.fr-popup .fr-command.fr-btn.fr-dropdown span,\n.fr-toolbar .fr-command.fr-btn.fr-dropdown img,\n.fr-popup .fr-command.fr-btn.fr-dropdown img,\n.fr-toolbar .fr-command.fr-btn.fr-dropdown svg,\n.fr-popup .fr-command.fr-btn.fr-dropdown svg {\n  margin-left: 8px;\n  margin-right: 16px;\n}\n.fr-toolbar .fr-command.fr-btn.fr-dropdown.fr-active,\n.fr-popup .fr-command.fr-btn.fr-dropdown.fr-active {\n  color: #222222;\n  background: #d6d6d6;\n}\n.fr-toolbar .fr-command.fr-btn.fr-dropdown.fr-active:hover,\n.fr-popup .fr-command.fr-btn.fr-dropdown.fr-active:hover,\n.fr-toolbar .fr-command.fr-btn.fr-dropdown.fr-active:focus,\n.fr-popup .fr-command.fr-btn.fr-dropdown.fr-active:focus {\n  background: #d6d6d6 !important;\n  color: #222222 !important;\n}\n.fr-toolbar .fr-command.fr-btn.fr-dropdown.fr-active:hover::after,\n.fr-popup .fr-command.fr-btn.fr-dropdown.fr-active:hover::after,\n.fr-toolbar .fr-command.fr-btn.fr-dropdown.fr-active:focus::after,\n.fr-popup .fr-command.fr-btn.fr-dropdown.fr-active:focus::after {\n  border-top-color: #222222 !important;\n}\n.fr-toolbar .fr-command.fr-btn.fr-dropdown::after,\n.fr-popup .fr-command.fr-btn.fr-dropdown::after {\n  position: absolute;\n  width: 0;\n  height: 0;\n  border-left: 4px solid transparent;\n  border-right: 4px solid transparent;\n  border-top: 4px solid #222222;\n  right: 4px;\n  top: 17px;\n  content: \"\";\n}\n.fr-toolbar .fr-command.fr-btn.fr-disabled,\n.fr-popup .fr-command.fr-btn.fr-disabled {\n  color: #bdbdbd;\n  cursor: default;\n}\n.fr-toolbar .fr-command.fr-btn.fr-disabled::after,\n.fr-popup .fr-command.fr-btn.fr-disabled::after {\n  border-top-color: #bdbdbd !important;\n}\n.fr-toolbar .fr-command.fr-btn.fr-hidden,\n.fr-popup .fr-command.fr-btn.fr-hidden {\n  display: none;\n}\n.fr-toolbar.fr-disabled .fr-btn,\n.fr-popup.fr-disabled .fr-btn,\n.fr-toolbar.fr-disabled .fr-btn.fr-active,\n.fr-popup.fr-disabled .fr-btn.fr-active {\n  color: #bdbdbd;\n}\n.fr-toolbar.fr-disabled .fr-btn.fr-dropdown::after,\n.fr-popup.fr-disabled .fr-btn.fr-dropdown::after,\n.fr-toolbar.fr-disabled .fr-btn.fr-active.fr-dropdown::after,\n.fr-popup.fr-disabled .fr-btn.fr-active.fr-dropdown::after {\n  border-top-color: #bdbdbd;\n}\n.fr-toolbar.fr-rtl .fr-command.fr-btn,\n.fr-popup.fr-rtl .fr-command.fr-btn {\n  float: right;\n}\n.fr-toolbar.fr-inline > .fr-command.fr-btn:not(.fr-hidden),\n.fr-toolbar.fr-inline > .fr-btn-wrap:not(.fr-hidden) {\n  display: -webkit-inline-flex;\n  display: -ms-inline-flexbox;\n  display: inline-flex;\n  float: none;\n}\n.fr-desktop .fr-command:hover,\n.fr-desktop .fr-command:focus,\n.fr-desktop .fr-command.fr-btn-hover,\n.fr-desktop .fr-command.fr-expanded {\n  outline: 0;\n  color: #222222;\n  background: #ebebeb;\n}\n.fr-desktop .fr-command:hover::after,\n.fr-desktop .fr-command:focus::after,\n.fr-desktop .fr-command.fr-btn-hover::after,\n.fr-desktop .fr-command.fr-expanded::after {\n  border-top-color: #222222 !important;\n}\n.fr-desktop .fr-command.fr-selected {\n  color: #222222;\n  background: #d6d6d6;\n}\n.fr-desktop .fr-command.fr-active:hover,\n.fr-desktop .fr-command.fr-active:focus,\n.fr-desktop .fr-command.fr-active.fr-btn-hover,\n.fr-desktop .fr-command.fr-active.fr-expanded {\n  color: #1e88e5;\n  background: #ebebeb;\n}\n.fr-desktop .fr-command.fr-active.fr-selected {\n  color: #1e88e5;\n  background: #d6d6d6;\n}\n.fr-desktop .fr-command.fr-disabled:hover,\n.fr-desktop .fr-command.fr-disabled:focus,\n.fr-desktop .fr-command.fr-disabled.fr-selected {\n  background: transparent;\n}\n.fr-desktop.fr-disabled .fr-command:hover,\n.fr-desktop.fr-disabled .fr-command:focus,\n.fr-desktop.fr-disabled .fr-command.fr-selected {\n  background: transparent;\n}\n.fr-toolbar.fr-mobile .fr-command.fr-blink,\n.fr-popup.fr-mobile .fr-command.fr-blink {\n  background: transparent;\n}\n.fr-command.fr-btn.fr-options {\n  width: 16px;\n  margin-left: -5px;\n}\n.fr-command.fr-btn.fr-options.fr-btn-hover,\n.fr-command.fr-btn.fr-options:hover,\n.fr-command.fr-btn.fr-options:focus {\n  border-left: solid 1px #fafafa;\n}\n.fr-command.fr-btn + .fr-dropdown-menu {\n  display: inline-block;\n  position: absolute;\n  right: auto;\n  bottom: auto;\n  height: auto;\n  z-index: 4;\n  -webkit-overflow-scrolling: touch;\n  overflow: hidden;\n  zoom: 1;\n  border-radius: 0 0 2px 2px;\n  -moz-border-radius: 0 0 2px 2px;\n  -webkit-border-radius: 0 0 2px 2px;\n  -moz-background-clip: padding;\n  -webkit-background-clip: padding-box;\n  background-clip: padding-box;\n}\n.fr-command.fr-btn + .fr-dropdown-menu.test-height .fr-dropdown-wrapper {\n  -webkit-transition: none;\n  -moz-transition: none;\n  -ms-transition: none;\n  -o-transition: none;\n  height: auto;\n  max-height: 275px;\n}\n.fr-command.fr-btn + .fr-dropdown-menu .fr-dropdown-wrapper {\n  background: #ffffff;\n  padding: 0;\n  margin: auto;\n  display: inline-block;\n  text-align: left;\n  position: relative;\n  -webkit-box-sizing: border-box;\n  -moz-box-sizing: border-box;\n  box-sizing: border-box;\n  -webkit-transition: max-height 0.2s ease 0s;\n  -moz-transition: max-height 0.2s ease 0s;\n  -ms-transition: max-height 0.2s ease 0s;\n  -o-transition: max-height 0.2s ease 0s;\n  margin-top: 0;\n  float: left;\n  max-height: 0;\n  height: 0;\n  margin-top: 0 !important;\n}\n.fr-command.fr-btn + .fr-dropdown-menu .fr-dropdown-wrapper .fr-dropdown-content {\n  overflow: auto;\n  position: relative;\n  max-height: 275px;\n}\n.fr-command.fr-btn + .fr-dropdown-menu .fr-dropdown-wrapper .fr-dropdown-content ul.fr-dropdown-list {\n  list-style-type: none;\n  margin: 0;\n  padding: 0;\n}\n.fr-command.fr-btn + .fr-dropdown-menu .fr-dropdown-wrapper .fr-dropdown-content ul.fr-dropdown-list li {\n  padding: 0;\n  margin: 0;\n  font-size: 15px;\n}\n.fr-command.fr-btn + .fr-dropdown-menu .fr-dropdown-wrapper .fr-dropdown-content ul.fr-dropdown-list li a {\n  padding: 0 24px;\n  line-height: 200%;\n  display: block;\n  cursor: pointer;\n  white-space: nowrap;\n  color: inherit;\n  text-decoration: none;\n}\n.fr-command.fr-btn + .fr-dropdown-menu .fr-dropdown-wrapper .fr-dropdown-content ul.fr-dropdown-list li a.fr-active {\n  background: #d6d6d6;\n}\n.fr-command.fr-btn + .fr-dropdown-menu .fr-dropdown-wrapper .fr-dropdown-content ul.fr-dropdown-list li a.fr-disabled {\n  color: #bdbdbd;\n  cursor: default;\n}\n.fr-command.fr-btn:not(.fr-active) + .fr-dropdown-menu {\n  left: -3000px !important;\n}\n.fr-command.fr-btn.fr-active + .fr-dropdown-menu {\n  display: inline-block;\n  -webkit-box-shadow: 0 3px 6px rgba(0, 0, 0, 0.16), 0 2px 2px 1px rgba(0, 0, 0, 0.14);\n  -moz-box-shadow: 0 3px 6px rgba(0, 0, 0, 0.16), 0 2px 2px 1px rgba(0, 0, 0, 0.14);\n  box-shadow: 0 3px 6px rgba(0, 0, 0, 0.16), 0 2px 2px 1px rgba(0, 0, 0, 0.14);\n}\n.fr-command.fr-btn.fr-active + .fr-dropdown-menu .fr-dropdown-wrapper {\n  height: auto;\n  max-height: 275px;\n}\n.fr-bottom > .fr-command.fr-btn + .fr-dropdown-menu {\n  border-radius: 2px 2px 0 0;\n  -moz-border-radius: 2px 2px 0 0;\n  -webkit-border-radius: 2px 2px 0 0;\n  -moz-background-clip: padding;\n  -webkit-background-clip: padding-box;\n  background-clip: padding-box;\n}\n.fr-toolbar.fr-rtl .fr-dropdown-wrapper,\n.fr-popup.fr-rtl .fr-dropdown-wrapper {\n  text-align: right !important;\n}\nbody.prevent-scroll {\n  overflow: hidden;\n}\nbody.prevent-scroll.fr-mobile {\n  position: fixed;\n  -webkit-overflow-scrolling: touch;\n}\n.fr-modal {\n  color: #222222;\n  font-family: Arial, Helvetica, sans-serif;\n  position: fixed;\n  overflow-x: auto;\n  overflow-y: scroll;\n  top: 0;\n  left: 0;\n  bottom: 0;\n  right: 0;\n  width: 100%;\n  z-index: 2147483640;\n  text-rendering: optimizelegibility;\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n  text-align: center;\n  line-height: 1.2;\n}\n.fr-modal.fr-middle .fr-modal-wrapper {\n  margin-top: 0;\n  margin-bottom: 0;\n  margin-left: auto;\n  margin-right: auto;\n  top: 50%;\n  left: 50%;\n  -webkit-transform: translate(-50%, -50%);\n  -moz-transform: translate(-50%, -50%);\n  -ms-transform: translate(-50%, -50%);\n  -o-transform: translate(-50%, -50%);\n  position: absolute;\n}\n.fr-modal .fr-modal-wrapper {\n  border-radius: 2px;\n  -moz-border-radius: 2px;\n  -webkit-border-radius: 2px;\n  -moz-background-clip: padding;\n  -webkit-background-clip: padding-box;\n  background-clip: padding-box;\n  margin: 20px auto;\n  display: inline-block;\n  background: #ffffff;\n  min-width: 300px;\n  -webkit-box-shadow: 0 5px 8px rgba(0, 0, 0, 0.19), 0 4px 3px 1px rgba(0, 0, 0, 0.14);\n  -moz-box-shadow: 0 5px 8px rgba(0, 0, 0, 0.19), 0 4px 3px 1px rgba(0, 0, 0, 0.14);\n  box-shadow: 0 5px 8px rgba(0, 0, 0, 0.19), 0 4px 3px 1px rgba(0, 0, 0, 0.14);\n  border: 0px;\n  border-top: 5px solid #222222;\n  overflow: hidden;\n  width: 90%;\n  position: relative;\n}\n@media (min-width: 768px) and (max-width: 991px) {\n  .fr-modal .fr-modal-wrapper {\n    margin: 30px auto;\n    width: 70%;\n  }\n}\n@media (min-width: 992px) {\n  .fr-modal .fr-modal-wrapper {\n    margin: 50px auto;\n    width: 960px;\n  }\n}\n.fr-modal .fr-modal-wrapper .fr-modal-head {\n  background: #ffffff;\n  -webkit-box-shadow: 0 3px 6px rgba(0, 0, 0, 0.16), 0 2px 2px 1px rgba(0, 0, 0, 0.14);\n  -moz-box-shadow: 0 3px 6px rgba(0, 0, 0, 0.16), 0 2px 2px 1px rgba(0, 0, 0, 0.14);\n  box-shadow: 0 3px 6px rgba(0, 0, 0, 0.16), 0 2px 2px 1px rgba(0, 0, 0, 0.14);\n  border-bottom: 0px;\n  overflow: hidden;\n  position: absolute;\n  width: 100%;\n  min-height: 42px;\n  z-index: 3;\n  -webkit-transition: height 0.2s ease 0s;\n  -moz-transition: height 0.2s ease 0s;\n  -ms-transition: height 0.2s ease 0s;\n  -o-transition: height 0.2s ease 0s;\n}\n.fr-modal .fr-modal-wrapper .fr-modal-head .fr-modal-close {\n  padding: 12px;\n  width: 20px;\n  font-size: 16px;\n  cursor: pointer;\n  line-height: 18px;\n  color: #222222;\n  -webkit-box-sizing: content-box;\n  -moz-box-sizing: content-box;\n  box-sizing: content-box;\n  position: absolute;\n  top: 0;\n  right: 0;\n  -webkit-transition: color 0.2s ease 0s;\n  -moz-transition: color 0.2s ease 0s;\n  -ms-transition: color 0.2s ease 0s;\n  -o-transition: color 0.2s ease 0s;\n}\n.fr-modal .fr-modal-wrapper .fr-modal-head h4 {\n  font-size: 18px;\n  padding: 12px 10px;\n  margin: 0;\n  font-weight: 400;\n  line-height: 18px;\n  display: inline-block;\n  float: left;\n}\n.fr-modal .fr-modal-wrapper div.fr-modal-body {\n  height: 100%;\n  min-height: 150px;\n  overflow-y: scroll;\n  padding-bottom: 10px;\n}\n.fr-modal .fr-modal-wrapper div.fr-modal-body:focus {\n  outline: 0;\n}\n.fr-modal .fr-modal-wrapper div.fr-modal-body button.fr-command {\n  height: 36px;\n  line-height: 1;\n  color: #1e88e5;\n  padding: 10px;\n  cursor: pointer;\n  text-decoration: none;\n  border: none;\n  background: none;\n  font-size: 16px;\n  outline: none;\n  -webkit-transition: background 0.2s ease 0s;\n  -moz-transition: background 0.2s ease 0s;\n  -ms-transition: background 0.2s ease 0s;\n  -o-transition: background 0.2s ease 0s;\n  border-radius: 2px;\n  -moz-border-radius: 2px;\n  -webkit-border-radius: 2px;\n  -moz-background-clip: padding;\n  -webkit-background-clip: padding-box;\n  background-clip: padding-box;\n}\n.fr-modal .fr-modal-wrapper div.fr-modal-body button.fr-command + button {\n  margin-left: 24px;\n}\n.fr-modal .fr-modal-wrapper div.fr-modal-body button.fr-command:hover,\n.fr-modal .fr-modal-wrapper div.fr-modal-body button.fr-command:focus {\n  background: #ebebeb;\n  color: #1e88e5;\n}\n.fr-modal .fr-modal-wrapper div.fr-modal-body button.fr-command:active {\n  background: #d6d6d6;\n  color: #1e88e5;\n}\n.fr-modal .fr-modal-wrapper div.fr-modal-body button::-moz-focus-inner {\n  border: 0;\n}\n.fr-desktop .fr-modal-wrapper .fr-modal-head i:hover {\n  background: #ebebeb;\n}\n.fr-overlay {\n  position: fixed;\n  top: 0;\n  bottom: 0;\n  left: 0;\n  right: 0;\n  background: #000000;\n  -webkit-opacity: 0.5;\n  -moz-opacity: 0.5;\n  opacity: 0.5;\n  -ms-filter: \"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)\";\n  z-index: 2147483639;\n}\n.fr-popup {\n  position: absolute;\n  display: none;\n  color: #222222;\n  background: #ffffff;\n  -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n  -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n  border-radius: 2px;\n  -moz-border-radius: 2px;\n  -webkit-border-radius: 2px;\n  -moz-background-clip: padding;\n  -webkit-background-clip: padding-box;\n  background-clip: padding-box;\n  font-family: Arial, Helvetica, sans-serif;\n  -webkit-box-sizing: border-box;\n  -moz-box-sizing: border-box;\n  box-sizing: border-box;\n  user-select: none;\n  -o-user-select: none;\n  -moz-user-select: none;\n  -khtml-user-select: none;\n  -webkit-user-select: none;\n  -ms-user-select: none;\n  margin-top: 10px;\n  z-index: 2147483635;\n  text-align: left;\n  border: 0px;\n  border-top: 5px solid #222222;\n  text-rendering: optimizelegibility;\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n  line-height: 1.2;\n}\n.fr-popup .fr-input-focus {\n  background: #f5f5f5;\n}\n.fr-popup.fr-above {\n  margin-top: -10px;\n  border-top: 0;\n  border-bottom: 5px solid #222222;\n  -webkit-box-shadow: 0 -1px 3px rgba(0, 0, 0, 0.12), 0 -1px 1px 1px rgba(0, 0, 0, 0.16);\n  -moz-box-shadow: 0 -1px 3px rgba(0, 0, 0, 0.12), 0 -1px 1px 1px rgba(0, 0, 0, 0.16);\n  box-shadow: 0 -1px 3px rgba(0, 0, 0, 0.12), 0 -1px 1px 1px rgba(0, 0, 0, 0.16);\n}\n.fr-popup.fr-active {\n  display: block;\n}\n.fr-popup.fr-hidden {\n  -webkit-opacity: 0;\n  -moz-opacity: 0;\n  opacity: 0;\n  -ms-filter: \"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)\";\n}\n.fr-popup.fr-empty {\n  display: none !important;\n}\n.fr-popup .fr-hs {\n  display: block !important;\n}\n.fr-popup .fr-hs.fr-hidden {\n  display: none !important;\n}\n.fr-popup .fr-input-line {\n  position: relative;\n  padding: 8px 0;\n}\n.fr-popup .fr-input-line input[type=\"text\"],\n.fr-popup .fr-input-line textarea {\n  width: 100%;\n  margin: 0px 0 1px 0;\n  border: none;\n  border-bottom: solid 1px #bdbdbd;\n  color: #222222;\n  font-size: 14px;\n  padding: 6px 0 2px;\n  background: rgba(0, 0, 0, 0);\n  position: relative;\n  z-index: 2;\n  -webkit-box-sizing: border-box;\n  -moz-box-sizing: border-box;\n  box-sizing: border-box;\n}\n.fr-popup .fr-input-line input[type=\"text\"]:focus,\n.fr-popup .fr-input-line textarea:focus {\n  border-bottom: solid 2px #1e88e5;\n  margin-bottom: 0px;\n}\n.fr-popup .fr-input-line input + label,\n.fr-popup .fr-input-line textarea + label {\n  position: absolute;\n  top: 0;\n  left: 0;\n  font-size: 12px;\n  color: rgba(0, 0, 0, 0);\n  -webkit-transition: color 0.2s ease 0s;\n  -moz-transition: color 0.2s ease 0s;\n  -ms-transition: color 0.2s ease 0s;\n  -o-transition: color 0.2s ease 0s;\n  z-index: 3;\n  width: 100%;\n  display: block;\n  background: #ffffff;\n}\n.fr-popup .fr-input-line input.fr-not-empty:focus + label,\n.fr-popup .fr-input-line textarea.fr-not-empty:focus + label {\n  color: #1e88e5;\n}\n.fr-popup .fr-input-line input.fr-not-empty + label,\n.fr-popup .fr-input-line textarea.fr-not-empty + label {\n  color: #808080;\n}\n.fr-popup input,\n.fr-popup textarea {\n  user-select: text;\n  -o-user-select: text;\n  -moz-user-select: text;\n  -khtml-user-select: text;\n  -webkit-user-select: text;\n  -ms-user-select: text;\n  border-radius: 0;\n  -moz-border-radius: 0;\n  -webkit-border-radius: 0;\n  -moz-background-clip: padding;\n  -webkit-background-clip: padding-box;\n  background-clip: padding-box;\n  outline: none;\n}\n.fr-popup textarea {\n  resize: none;\n}\n.fr-popup .fr-buttons {\n  -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n  -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n  padding: 0 2px;\n  white-space: nowrap;\n  line-height: 0;\n  border-bottom: 0px;\n}\n.fr-popup .fr-buttons::after {\n  clear: both;\n  display: block;\n  content: \"\";\n  height: 0;\n}\n.fr-popup .fr-buttons .fr-btn {\n  display: inline-block;\n  float: none;\n}\n.fr-popup .fr-buttons .fr-btn i {\n  float: left;\n}\n.fr-popup .fr-buttons .fr-separator {\n  display: inline-block;\n  float: none;\n}\n.fr-popup .fr-layer {\n  width: 225px;\n  -webkit-box-sizing: border-box;\n  -moz-box-sizing: border-box;\n  box-sizing: border-box;\n  margin: 10px;\n  display: none;\n}\n@media (min-width: 768px) {\n  .fr-popup .fr-layer {\n    width: 300px;\n  }\n}\n.fr-popup .fr-layer.fr-active {\n  display: inline-block;\n}\n.fr-popup .fr-action-buttons {\n  z-index: 7;\n  height: 36px;\n  text-align: right;\n}\n.fr-popup .fr-action-buttons button.fr-command {\n  height: 36px;\n  line-height: 1;\n  color: #1e88e5;\n  padding: 10px;\n  cursor: pointer;\n  text-decoration: none;\n  border: none;\n  background: none;\n  font-size: 16px;\n  outline: none;\n  -webkit-transition: background 0.2s ease 0s;\n  -moz-transition: background 0.2s ease 0s;\n  -ms-transition: background 0.2s ease 0s;\n  -o-transition: background 0.2s ease 0s;\n  border-radius: 2px;\n  -moz-border-radius: 2px;\n  -webkit-border-radius: 2px;\n  -moz-background-clip: padding;\n  -webkit-background-clip: padding-box;\n  background-clip: padding-box;\n}\n.fr-popup .fr-action-buttons button.fr-command + button {\n  margin-left: 24px;\n}\n.fr-popup .fr-action-buttons button.fr-command:hover,\n.fr-popup .fr-action-buttons button.fr-command:focus {\n  background: #ebebeb;\n  color: #1e88e5;\n}\n.fr-popup .fr-action-buttons button.fr-command:active {\n  background: #d6d6d6;\n  color: #1e88e5;\n}\n.fr-popup .fr-action-buttons button::-moz-focus-inner {\n  border: 0;\n}\n.fr-popup .fr-checkbox {\n  position: relative;\n  display: inline-block;\n  width: 16px;\n  height: 16px;\n  line-height: 1;\n  -webkit-box-sizing: content-box;\n  -moz-box-sizing: content-box;\n  box-sizing: content-box;\n  vertical-align: middle;\n}\n.fr-popup .fr-checkbox svg {\n  margin-left: 2px;\n  margin-top: 2px;\n  display: none;\n  width: 10px;\n  height: 10px;\n}\n.fr-popup .fr-checkbox span {\n  border: solid 1px #222222;\n  border-radius: 2px;\n  -moz-border-radius: 2px;\n  -webkit-border-radius: 2px;\n  -moz-background-clip: padding;\n  -webkit-background-clip: padding-box;\n  background-clip: padding-box;\n  width: 16px;\n  height: 16px;\n  display: inline-block;\n  position: relative;\n  z-index: 1;\n  -webkit-box-sizing: border-box;\n  -moz-box-sizing: border-box;\n  box-sizing: border-box;\n  -webkit-transition: background 0.2s ease 0s, border-color 0.2s ease 0s;\n  -moz-transition: background 0.2s ease 0s, border-color 0.2s ease 0s;\n  -ms-transition: background 0.2s ease 0s, border-color 0.2s ease 0s;\n  -o-transition: background 0.2s ease 0s, border-color 0.2s ease 0s;\n}\n.fr-popup .fr-checkbox input {\n  position: absolute;\n  z-index: 2;\n  -webkit-opacity: 0;\n  -moz-opacity: 0;\n  opacity: 0;\n  -ms-filter: \"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)\";\n  border: 0 none;\n  cursor: pointer;\n  height: 16px;\n  margin: 0;\n  padding: 0;\n  width: 16px;\n  top: 1px;\n  left: 1px;\n}\n.fr-popup .fr-checkbox input:checked + span {\n  background: #1e88e5;\n  border-color: #1e88e5;\n}\n.fr-popup .fr-checkbox input:checked + span svg {\n  display: block;\n}\n.fr-popup .fr-checkbox input:focus + span {\n  border-color: #1e88e5;\n}\n.fr-popup .fr-checkbox-line {\n  font-size: 14px;\n  line-height: 1.4px;\n  margin-top: 10px;\n}\n.fr-popup .fr-checkbox-line label {\n  cursor: pointer;\n  margin: 0 5px;\n  vertical-align: middle;\n}\n.fr-popup.fr-rtl {\n  direction: rtl;\n  text-align: right;\n}\n.fr-popup.fr-rtl .fr-action-buttons {\n  text-align: left;\n}\n.fr-popup.fr-rtl .fr-input-line input + label,\n.fr-popup.fr-rtl .fr-input-line textarea + label {\n  left: auto;\n  right: 0;\n}\n.fr-popup.fr-rtl .fr-buttons .fr-separator.fr-vs {\n  float: right;\n}\n.fr-popup .fr-arrow {\n  width: 0;\n  height: 0;\n  border-left: 5px solid transparent;\n  border-right: 5px solid transparent;\n  border-bottom: 5px solid #222222;\n  position: absolute;\n  top: -9px;\n  left: 50%;\n  margin-left: -5px;\n  display: inline-block;\n}\n.fr-popup.fr-above .fr-arrow {\n  top: auto;\n  bottom: -9px;\n  border-bottom: 0;\n  border-top: 5px solid #222222;\n}\n.fr-text-edit-layer {\n  width: 250px;\n  -webkit-box-sizing: border-box;\n  -moz-box-sizing: border-box;\n  box-sizing: border-box;\n  display: block !important;\n}\n.fr-toolbar {\n  color: #222222;\n  background: #ffffff;\n  position: relative;\n  z-index: 4;\n  font-family: Arial, Helvetica, sans-serif;\n  -webkit-box-sizing: border-box;\n  -moz-box-sizing: border-box;\n  box-sizing: border-box;\n  user-select: none;\n  -o-user-select: none;\n  -moz-user-select: none;\n  -khtml-user-select: none;\n  -webkit-user-select: none;\n  -ms-user-select: none;\n  padding: 0 2px;\n  border-radius: 2px;\n  -moz-border-radius: 2px;\n  -webkit-border-radius: 2px;\n  -moz-background-clip: padding;\n  -webkit-background-clip: padding-box;\n  background-clip: padding-box;\n  -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n  -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n  text-align: left;\n  border: 0px;\n  border-top: 5px solid #222222;\n  text-rendering: optimizelegibility;\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n  line-height: 1.2;\n}\n.fr-toolbar::after {\n  clear: both;\n  display: block;\n  content: \"\";\n  height: 0;\n}\n.fr-toolbar.fr-rtl {\n  text-align: right;\n}\n.fr-toolbar.fr-inline {\n  display: none;\n  white-space: nowrap;\n  position: absolute;\n  margin-top: 10px;\n}\n.fr-toolbar.fr-inline .fr-arrow {\n  width: 0;\n  height: 0;\n  border-left: 5px solid transparent;\n  border-right: 5px solid transparent;\n  border-bottom: 5px solid #222222;\n  position: absolute;\n  top: -9px;\n  left: 50%;\n  margin-left: -5px;\n  display: inline-block;\n}\n.fr-toolbar.fr-inline.fr-above {\n  margin-top: -10px;\n  -webkit-box-shadow: 0 -1px 3px rgba(0, 0, 0, 0.12), 0 -1px 1px 1px rgba(0, 0, 0, 0.16);\n  -moz-box-shadow: 0 -1px 3px rgba(0, 0, 0, 0.12), 0 -1px 1px 1px rgba(0, 0, 0, 0.16);\n  box-shadow: 0 -1px 3px rgba(0, 0, 0, 0.12), 0 -1px 1px 1px rgba(0, 0, 0, 0.16);\n  border-bottom: 5px solid #222222;\n  border-top: 0;\n}\n.fr-toolbar.fr-inline.fr-above .fr-arrow {\n  top: auto;\n  bottom: -9px;\n  border-bottom: 0;\n  border-top-color: inherit;\n  border-top-style: solid;\n  border-top-width: 5px;\n}\n.fr-toolbar.fr-top {\n  top: 0;\n  border-radius: 2px 2px 0 0;\n  -moz-border-radius: 2px 2px 0 0;\n  -webkit-border-radius: 2px 2px 0 0;\n  -moz-background-clip: padding;\n  -webkit-background-clip: padding-box;\n  background-clip: padding-box;\n  -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n  -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n}\n.fr-toolbar.fr-bottom {\n  bottom: 0;\n  border-radius: 0 0 2px 2px;\n  -moz-border-radius: 0 0 2px 2px;\n  -webkit-border-radius: 0 0 2px 2px;\n  -moz-background-clip: padding;\n  -webkit-background-clip: padding-box;\n  background-clip: padding-box;\n  -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n  -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n}\n.fr-separator {\n  background: #ebebeb;\n  display: block;\n  vertical-align: top;\n  float: left;\n}\n.fr-separator + .fr-separator {\n  display: none;\n}\n.fr-separator.fr-vs {\n  height: 34px;\n  width: 1px;\n  margin: 2px;\n}\n.fr-separator.fr-hs {\n  clear: both;\n  height: 1px;\n  width: calc(100% - (2 * 2px));\n  margin: 0 2px;\n}\n.fr-separator.fr-hidden {\n  display: none !important;\n}\n.fr-rtl .fr-separator {\n  float: right;\n}\n.fr-toolbar.fr-inline .fr-separator.fr-hs {\n  float: none;\n}\n.fr-toolbar.fr-inline .fr-separator.fr-vs {\n  float: none;\n  display: inline-block;\n}\n.fr-visibility-helper {\n  display: none;\n  margin-left: 0px !important;\n}\n@media (min-width: 768px) {\n  .fr-visibility-helper {\n    margin-left: 1px !important;\n  }\n}\n@media (min-width: 992px) {\n  .fr-visibility-helper {\n    margin-left: 2px !important;\n  }\n}\n@media (min-width: 1200px) {\n  .fr-visibility-helper {\n    margin-left: 3px !important;\n  }\n}\n.fr-opacity-0 {\n  -webkit-opacity: 0;\n  -moz-opacity: 0;\n  opacity: 0;\n  -ms-filter: \"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)\";\n}\n.fr-box {\n  position: relative;\n}\n/**\n * Postion sticky hacks.\n */\n.fr-sticky {\n  position: -webkit-sticky;\n  position: -moz-sticky;\n  position: -ms-sticky;\n  position: -o-sticky;\n  position: sticky;\n}\n.fr-sticky-off {\n  position: relative;\n}\n.fr-sticky-on {\n  position: fixed;\n}\n.fr-sticky-on.fr-sticky-ios {\n  position: absolute;\n  left: 0;\n  right: 0;\n  width: auto !important;\n}\n.fr-sticky-dummy {\n  display: none;\n}\n.fr-sticky-on + .fr-sticky-dummy,\n.fr-sticky-box > .fr-sticky-dummy {\n  display: block;\n}\nspan.fr-sr-only {\n  position: absolute;\n  width: 1px;\n  height: 1px;\n  padding: 0;\n  margin: -1px;\n  overflow: hidden;\n  clip: rect(0, 0, 0, 0);\n  border: 0;\n}\n\n.clearfix::after {\n  clear: both;\n  display: block;\n  content: \"\";\n  height: 0;\n}\n.hide-by-clipping {\n  position: absolute;\n  width: 1px;\n  height: 1px;\n  padding: 0;\n  margin: -1px;\n  overflow: hidden;\n  clip: rect(0, 0, 0, 0);\n  border: 0;\n}\n.fr-box .fr-counter {\n  position: absolute;\n  bottom: 0px;\n  padding: 5px;\n  right: 0px;\n  color: #cccccc;\n  content: attr(data-chars);\n  font-size: 15px;\n  font-family: \"Times New Roman\", Georgia, Serif;\n  z-index: 1;\n  background: #ffffff;\n  border-top: solid 1px #ebebeb;\n  border-left: solid 1px #ebebeb;\n  border-radius: 2px 0 0 0;\n  -moz-border-radius: 2px 0 0 0;\n  -webkit-border-radius: 2px 0 0 0;\n  -moz-background-clip: padding;\n  -webkit-background-clip: padding-box;\n  background-clip: padding-box;\n}\n.fr-box.fr-rtl .fr-counter {\n  left: 0px;\n  right: auto;\n  border-left: none;\n  border-right: solid 1px #ebebeb;\n  border-radius: 0 2px 0 0;\n  -moz-border-radius: 0 2px 0 0;\n  -webkit-border-radius: 0 2px 0 0;\n  -moz-background-clip: padding;\n  -webkit-background-clip: padding-box;\n  background-clip: padding-box;\n}\n.fr-box.fr-code-view .fr-counter {\n  display: none;\n}\n\n.clearfix::after {\n  clear: both;\n  display: block;\n  content: \"\";\n  height: 0;\n}\n.hide-by-clipping {\n  position: absolute;\n  width: 1px;\n  height: 1px;\n  padding: 0;\n  margin: -1px;\n  overflow: hidden;\n  clip: rect(0, 0, 0, 0);\n  border: 0;\n}\ntextarea.fr-code {\n  display: none;\n  width: 100%;\n  resize: none;\n  -moz-resize: none;\n  -webkit-resize: none;\n  -webkit-box-sizing: border-box;\n  -moz-box-sizing: border-box;\n  box-sizing: border-box;\n  border: none;\n  padding: 10px;\n  margin: 0px;\n  font-family: \"Courier New\", monospace;\n  font-size: 14px;\n  background: #ffffff;\n  color: #000000;\n  outline: none;\n}\n.fr-box.fr-rtl textarea.fr-code {\n  direction: rtl;\n}\n.fr-box .CodeMirror {\n  display: none;\n}\n.fr-box.fr-code-view textarea.fr-code {\n  display: block;\n}\n.fr-box.fr-code-view.fr-inline {\n  -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n  -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n}\n.fr-box.fr-code-view .fr-element,\n.fr-box.fr-code-view .fr-placeholder,\n.fr-box.fr-code-view .fr-iframe {\n  display: none;\n}\n.fr-box.fr-code-view .CodeMirror {\n  display: block;\n}\n.fr-box.fr-inline.fr-code-view .fr-command.fr-btn.html-switch {\n  display: block;\n}\n.fr-box.fr-inline .fr-command.fr-btn.html-switch {\n  position: absolute;\n  top: 0;\n  right: 0;\n  -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n  -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n  display: none;\n  background: #ffffff;\n  color: #222222;\n  -moz-outline: 0;\n  outline: 0;\n  border: 0;\n  line-height: 1;\n  cursor: pointer;\n  text-align: left;\n  padding: 12px 12px;\n  -webkit-transition: background 0.2s ease 0s;\n  -moz-transition: background 0.2s ease 0s;\n  -ms-transition: background 0.2s ease 0s;\n  -o-transition: background 0.2s ease 0s;\n  border-radius: 0;\n  -moz-border-radius: 0;\n  -webkit-border-radius: 0;\n  -moz-background-clip: padding;\n  -webkit-background-clip: padding-box;\n  background-clip: padding-box;\n  z-index: 2;\n  -webkit-box-sizing: border-box;\n  -moz-box-sizing: border-box;\n  box-sizing: border-box;\n  text-decoration: none;\n  user-select: none;\n  -o-user-select: none;\n  -moz-user-select: none;\n  -khtml-user-select: none;\n  -webkit-user-select: none;\n  -ms-user-select: none;\n}\n.fr-box.fr-inline .fr-command.fr-btn.html-switch i {\n  font-size: 14px;\n  width: 14px;\n  text-align: center;\n}\n.fr-box.fr-inline .fr-command.fr-btn.html-switch.fr-desktop:hover {\n  background: #ebebeb;\n}\n\n.clearfix::after {\n  clear: both;\n  display: block;\n  content: \"\";\n  height: 0;\n}\n.hide-by-clipping {\n  position: absolute;\n  width: 1px;\n  height: 1px;\n  padding: 0;\n  margin: -1px;\n  overflow: hidden;\n  clip: rect(0, 0, 0, 0);\n  border: 0;\n}\n.fr-popup .fr-colors-tabs {\n  -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n  -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n  margin-bottom: 5px;\n  line-height: 16px;\n  margin-left: -2px;\n  margin-right: -2px;\n}\n.fr-popup .fr-colors-tabs .fr-colors-tab {\n  display: inline-block;\n  width: 50%;\n  cursor: pointer;\n  text-align: center;\n  color: #222222;\n  font-size: 13px;\n  padding: 8px 0;\n  position: relative;\n}\n.fr-popup .fr-colors-tabs .fr-colors-tab:hover,\n.fr-popup .fr-colors-tabs .fr-colors-tab:focus {\n  color: #1e88e5;\n}\n.fr-popup .fr-colors-tabs .fr-colors-tab[data-param1=\"background\"]::after {\n  position: absolute;\n  bottom: 0;\n  left: 0;\n  width: 100%;\n  height: 2px;\n  background: #1e88e5;\n  content: '';\n  -webkit-transition: transform 0.2s ease 0s;\n  -moz-transition: transform 0.2s ease 0s;\n  -ms-transition: transform 0.2s ease 0s;\n  -o-transition: transform 0.2s ease 0s;\n}\n.fr-popup .fr-colors-tabs .fr-colors-tab.fr-selected-tab {\n  color: #1e88e5;\n}\n.fr-popup .fr-colors-tabs .fr-colors-tab.fr-selected-tab[data-param1=\"text\"] ~ [data-param1=\"background\"]::after {\n  -webkit-transform: translate3d(-100%, 0, 0);\n  -moz-transform: translate3d(-100%, 0, 0);\n  -ms-transform: translate3d(-100%, 0, 0);\n  -o-transform: translate3d(-100%, 0, 0);\n}\n.fr-popup .fr-color-hex-layer {\n  width: 100%;\n  margin: 0px;\n  padding: 10px;\n}\n.fr-popup .fr-color-hex-layer .fr-input-line {\n  float: left;\n  width: calc(100% - 50px);\n  padding: 8px 0 0;\n}\n.fr-popup .fr-color-hex-layer .fr-action-buttons {\n  float: right;\n  width: 50px;\n}\n.fr-popup .fr-color-hex-layer .fr-action-buttons button {\n  background-color: #1e88e5;\n  color: #FFF;\n  border-radius: 2px;\n  -moz-border-radius: 2px;\n  -webkit-border-radius: 2px;\n  -moz-background-clip: padding;\n  -webkit-background-clip: padding-box;\n  background-clip: padding-box;\n  font-size: 13px;\n  height: 32px;\n}\n.fr-popup .fr-color-hex-layer .fr-action-buttons button:hover {\n  background-color: #166dba;\n  color: #FFF;\n}\n.fr-popup .fr-separator + .fr-colors-tabs {\n  -webkit-box-shadow: none;\n  -moz-box-shadow: none;\n  box-shadow: none;\n  margin-left: 2px;\n  margin-right: 2px;\n}\n.fr-popup .fr-color-set {\n  line-height: 0;\n  display: none;\n}\n.fr-popup .fr-color-set.fr-selected-set {\n  display: block;\n}\n.fr-popup .fr-color-set > span {\n  display: inline-block;\n  width: 32px;\n  height: 32px;\n  position: relative;\n  z-index: 1;\n}\n.fr-popup .fr-color-set > span > i,\n.fr-popup .fr-color-set > span > svg {\n  text-align: center;\n  line-height: 32px;\n  height: 32px;\n  width: 32px;\n  font-size: 13px;\n  position: absolute;\n  bottom: 0;\n  cursor: default;\n  left: 0;\n}\n.fr-popup .fr-color-set > span .fr-selected-color {\n  color: #ffffff;\n  font-family: FontAwesome;\n  font-size: 13px;\n  font-weight: 400;\n  line-height: 32px;\n  position: absolute;\n  top: 0;\n  bottom: 0;\n  right: 0;\n  left: 0;\n  text-align: center;\n  cursor: default;\n}\n.fr-popup .fr-color-set > span:hover,\n.fr-popup .fr-color-set > span:focus {\n  outline: 1px solid #222222;\n  z-index: 2;\n}\n.fr-rtl .fr-popup .fr-colors-tabs .fr-colors-tab.fr-selected-tab[data-param1=\"text\"] ~ [data-param1=\"background\"]::after {\n  -webkit-transform: translate3d(100%, 0, 0);\n  -moz-transform: translate3d(100%, 0, 0);\n  -ms-transform: translate3d(100%, 0, 0);\n  -o-transform: translate3d(100%, 0, 0);\n}\n\n.clearfix::after {\n  clear: both;\n  display: block;\n  content: \"\";\n  height: 0;\n}\n.hide-by-clipping {\n  position: absolute;\n  width: 1px;\n  height: 1px;\n  padding: 0;\n  margin: -1px;\n  overflow: hidden;\n  clip: rect(0, 0, 0, 0);\n  border: 0;\n}\n.fr-drag-helper {\n  background: #1e88e5;\n  height: 2px;\n  margin-top: -1px;\n  -webkit-opacity: 0.2;\n  -moz-opacity: 0.2;\n  opacity: 0.2;\n  -ms-filter: \"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)\";\n  position: absolute;\n  z-index: 2147483640;\n  display: none;\n}\n.fr-drag-helper.fr-visible {\n  display: block;\n}\n.fr-dragging {\n  -webkit-opacity: 0.4;\n  -moz-opacity: 0.4;\n  opacity: 0.4;\n  -ms-filter: \"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)\";\n}\n\n.clearfix::after {\n  clear: both;\n  display: block;\n  content: \"\";\n  height: 0;\n}\n.hide-by-clipping {\n  position: absolute;\n  width: 1px;\n  height: 1px;\n  padding: 0;\n  margin: -1px;\n  overflow: hidden;\n  clip: rect(0, 0, 0, 0);\n  border: 0;\n}\n.fr-popup .fr-emoticon {\n  display: inline-block;\n  font-size: 20px;\n  width: 20px;\n  padding: 5px;\n  line-height: 1;\n  cursor: default;\n  font-weight: normal;\n  font-family: \"Apple Color Emoji\", \"Segoe UI Emoji\", \"NotoColorEmoji\", \"Segoe UI Symbol\", \"Android Emoji\", \"EmojiSymbols\";\n  -webkit-box-sizing: content-box;\n  -moz-box-sizing: content-box;\n  box-sizing: content-box;\n}\n.fr-popup .fr-emoticon img {\n  height: 20px;\n}\n.fr-popup .fr-link:focus {\n  outline: 0;\n  background: #ebebeb;\n}\n\n.clearfix::after {\n  clear: both;\n  display: block;\n  content: \"\";\n  height: 0;\n}\n.hide-by-clipping {\n  position: absolute;\n  width: 1px;\n  height: 1px;\n  padding: 0;\n  margin: -1px;\n  overflow: hidden;\n  clip: rect(0, 0, 0, 0);\n  border: 0;\n}\n.fr-popup .fr-file-upload-layer {\n  border: dashed 2px #bdbdbd;\n  padding: 25px 0;\n  position: relative;\n  font-size: 14px;\n  letter-spacing: 1px;\n  line-height: 140%;\n  -webkit-box-sizing: border-box;\n  -moz-box-sizing: border-box;\n  box-sizing: border-box;\n  text-align: center;\n}\n.fr-popup .fr-file-upload-layer:hover {\n  background: #ebebeb;\n}\n.fr-popup .fr-file-upload-layer.fr-drop {\n  background: #ebebeb;\n  border-color: #1e88e5;\n}\n.fr-popup .fr-file-upload-layer .fr-form {\n  -webkit-opacity: 0;\n  -moz-opacity: 0;\n  opacity: 0;\n  -ms-filter: \"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)\";\n  position: absolute;\n  top: 0;\n  bottom: 0;\n  left: 0;\n  right: 0;\n  z-index: 2147483640;\n  overflow: hidden;\n  margin: 0 !important;\n  padding: 0 !important;\n  width: 100% !important;\n}\n.fr-popup .fr-file-upload-layer .fr-form input {\n  cursor: pointer;\n  position: absolute;\n  right: 0px;\n  top: 0px;\n  bottom: 0px;\n  width: 500%;\n  height: 100%;\n  margin: 0px;\n  font-size: 400px;\n}\n.fr-popup .fr-file-progress-bar-layer {\n  -webkit-box-sizing: border-box;\n  -moz-box-sizing: border-box;\n  box-sizing: border-box;\n}\n.fr-popup .fr-file-progress-bar-layer > h3 {\n  font-size: 16px;\n  margin: 10px 0;\n  font-weight: normal;\n}\n.fr-popup .fr-file-progress-bar-layer > div.fr-action-buttons {\n  display: none;\n}\n.fr-popup .fr-file-progress-bar-layer > div.fr-loader {\n  background: #bcdbf7;\n  height: 10px;\n  width: 100%;\n  margin-top: 20px;\n  overflow: hidden;\n  position: relative;\n}\n.fr-popup .fr-file-progress-bar-layer > div.fr-loader span {\n  display: block;\n  height: 100%;\n  width: 0%;\n  background: #1e88e5;\n  -webkit-transition: width 0.2s ease 0s;\n  -moz-transition: width 0.2s ease 0s;\n  -ms-transition: width 0.2s ease 0s;\n  -o-transition: width 0.2s ease 0s;\n}\n.fr-popup .fr-file-progress-bar-layer > div.fr-loader.fr-indeterminate span {\n  width: 30% !important;\n  position: absolute;\n  top: 0;\n  -webkit-animation: loading 2s linear infinite;\n  -moz-animation: loading 2s linear infinite;\n  -o-animation: loading 2s linear infinite;\n  animation: loading 2s linear infinite;\n}\n.fr-popup .fr-file-progress-bar-layer.fr-error > div.fr-loader {\n  display: none;\n}\n.fr-popup .fr-file-progress-bar-layer.fr-error > div.fr-action-buttons {\n  display: block;\n}\n@keyframes loading {\n  from {\n    left: -25%;\n  }\n  to {\n    left: 100%;\n  }\n}\n@-webkit-keyframes loading {\n  from {\n    left: -25%;\n  }\n  to {\n    left: 100%;\n  }\n}\n@-moz-keyframes loading {\n  from {\n    left: -25%;\n  }\n  to {\n    left: 100%;\n  }\n}\n@-o-keyframes loading {\n  from {\n    left: -25%;\n  }\n  to {\n    left: 100%;\n  }\n}\n\nbody.fr-fullscreen {\n  overflow: hidden;\n  height: 100%;\n  width: 100%;\n  position: fixed;\n}\n.fr-box.fr-fullscreen {\n  margin: 0 !important;\n  position: fixed;\n  top: 0;\n  left: 0;\n  bottom: 0;\n  right: 0;\n  z-index: 2147483630 !important;\n  width: auto !important;\n}\n.fr-box.fr-fullscreen .fr-toolbar.fr-top {\n  top: 0 !important;\n}\n.fr-box.fr-fullscreen .fr-toolbar.fr-bottom {\n  bottom: 0 !important;\n}\n\n.clearfix::after {\n  clear: both;\n  display: block;\n  content: \"\";\n  height: 0;\n}\n.hide-by-clipping {\n  position: absolute;\n  width: 1px;\n  height: 1px;\n  padding: 0;\n  margin: -1px;\n  overflow: hidden;\n  clip: rect(0, 0, 0, 0);\n  border: 0;\n}\n.fr-modal .fr-modal-wrapper .fr-modal-body .fr-help-modal {\n  text-align: left;\n  padding: 20px 20px 10px;\n}\n.fr-modal .fr-modal-wrapper .fr-modal-body .fr-help-modal table {\n  border-collapse: collapse;\n  font-size: 14px;\n  line-height: 1.5;\n  width: 100%;\n}\n.fr-modal .fr-modal-wrapper .fr-modal-body .fr-help-modal table + table {\n  margin-top: 20px;\n}\n.fr-modal .fr-modal-wrapper .fr-modal-body .fr-help-modal table tr {\n  border: 0;\n}\n.fr-modal .fr-modal-wrapper .fr-modal-body .fr-help-modal table th,\n.fr-modal .fr-modal-wrapper .fr-modal-body .fr-help-modal table td {\n  padding: 6px 0 4px;\n}\n.fr-modal .fr-modal-wrapper .fr-modal-body .fr-help-modal table tbody tr {\n  border-bottom: solid 1px #ebebeb;\n}\n.fr-modal .fr-modal-wrapper .fr-modal-body .fr-help-modal table tbody td:first-child {\n  width: 60%;\n  color: #646464;\n}\n.fr-modal .fr-modal-wrapper .fr-modal-body .fr-help-modal table tbody td:nth-child(n+2) {\n  letter-spacing: 0.5px;\n}\n\n.clearfix::after {\n  clear: both;\n  display: block;\n  content: \"\";\n  height: 0;\n}\n.hide-by-clipping {\n  position: absolute;\n  width: 1px;\n  height: 1px;\n  padding: 0;\n  margin: -1px;\n  overflow: hidden;\n  clip: rect(0, 0, 0, 0);\n  border: 0;\n}\n.fr-element img {\n  cursor: pointer;\n}\n.fr-image-resizer {\n  position: absolute;\n  border: solid 1px #1e88e5;\n  display: none;\n  user-select: none;\n  -o-user-select: none;\n  -moz-user-select: none;\n  -khtml-user-select: none;\n  -webkit-user-select: none;\n  -ms-user-select: none;\n  -webkit-box-sizing: content-box;\n  -moz-box-sizing: content-box;\n  box-sizing: content-box;\n  z-index: 2;\n}\n.fr-image-resizer.fr-active {\n  display: block;\n}\n.fr-image-resizer .fr-handler {\n  display: block;\n  position: absolute;\n  background: #1e88e5;\n  border: solid 1px #ffffff;\n  z-index: 4;\n  -webkit-box-sizing: border-box;\n  -moz-box-sizing: border-box;\n  box-sizing: border-box;\n}\n.fr-image-resizer .fr-handler.fr-hnw {\n  cursor: nw-resize;\n}\n.fr-image-resizer .fr-handler.fr-hne {\n  cursor: ne-resize;\n}\n.fr-image-resizer .fr-handler.fr-hsw {\n  cursor: sw-resize;\n}\n.fr-image-resizer .fr-handler.fr-hse {\n  cursor: se-resize;\n}\n.fr-image-resizer .fr-handler {\n  width: 12px;\n  height: 12px;\n}\n.fr-image-resizer .fr-handler.fr-hnw {\n  left: -6px;\n  top: -6px;\n}\n.fr-image-resizer .fr-handler.fr-hne {\n  right: -6px;\n  top: -6px;\n}\n.fr-image-resizer .fr-handler.fr-hsw {\n  left: -6px;\n  bottom: -6px;\n}\n.fr-image-resizer .fr-handler.fr-hse {\n  right: -6px;\n  bottom: -6px;\n}\n@media (min-width: 1200px) {\n  .fr-image-resizer .fr-handler {\n    width: 10px;\n    height: 10px;\n  }\n  .fr-image-resizer .fr-handler.fr-hnw {\n    left: -5px;\n    top: -5px;\n  }\n  .fr-image-resizer .fr-handler.fr-hne {\n    right: -5px;\n    top: -5px;\n  }\n  .fr-image-resizer .fr-handler.fr-hsw {\n    left: -5px;\n    bottom: -5px;\n  }\n  .fr-image-resizer .fr-handler.fr-hse {\n    right: -5px;\n    bottom: -5px;\n  }\n}\n.fr-image-overlay {\n  position: fixed;\n  top: 0;\n  left: 0;\n  bottom: 0;\n  right: 0;\n  z-index: 2147483640;\n  display: none;\n}\n.fr-popup .fr-image-upload-layer {\n  border: dashed 2px #bdbdbd;\n  padding: 25px 0;\n  position: relative;\n  font-size: 14px;\n  letter-spacing: 1px;\n  line-height: 140%;\n  text-align: center;\n}\n.fr-popup .fr-image-upload-layer:hover {\n  background: #ebebeb;\n}\n.fr-popup .fr-image-upload-layer.fr-drop {\n  background: #ebebeb;\n  border-color: #1e88e5;\n}\n.fr-popup .fr-image-upload-layer .fr-form {\n  -webkit-opacity: 0;\n  -moz-opacity: 0;\n  opacity: 0;\n  -ms-filter: \"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)\";\n  position: absolute;\n  top: 0;\n  bottom: 0;\n  left: 0;\n  right: 0;\n  z-index: 2147483640;\n  overflow: hidden;\n  margin: 0 !important;\n  padding: 0 !important;\n  width: 100% !important;\n}\n.fr-popup .fr-image-upload-layer .fr-form input {\n  cursor: pointer;\n  position: absolute;\n  right: 0px;\n  top: 0px;\n  bottom: 0px;\n  width: 500%;\n  height: 100%;\n  margin: 0px;\n  font-size: 400px;\n}\n.fr-popup .fr-image-progress-bar-layer > h3 {\n  font-size: 16px;\n  margin: 10px 0;\n  font-weight: normal;\n}\n.fr-popup .fr-image-progress-bar-layer > div.fr-action-buttons {\n  display: none;\n}\n.fr-popup .fr-image-progress-bar-layer > div.fr-loader {\n  background: #bcdbf7;\n  height: 10px;\n  width: 100%;\n  margin-top: 20px;\n  overflow: hidden;\n  position: relative;\n}\n.fr-popup .fr-image-progress-bar-layer > div.fr-loader span {\n  display: block;\n  height: 100%;\n  width: 0%;\n  background: #1e88e5;\n  -webkit-transition: width 0.2s ease 0s;\n  -moz-transition: width 0.2s ease 0s;\n  -ms-transition: width 0.2s ease 0s;\n  -o-transition: width 0.2s ease 0s;\n}\n.fr-popup .fr-image-progress-bar-layer > div.fr-loader.fr-indeterminate span {\n  width: 30% !important;\n  position: absolute;\n  top: 0;\n  -webkit-animation: loading 2s linear infinite;\n  -moz-animation: loading 2s linear infinite;\n  -o-animation: loading 2s linear infinite;\n  animation: loading 2s linear infinite;\n}\n.fr-popup .fr-image-progress-bar-layer.fr-error > div.fr-loader {\n  display: none;\n}\n.fr-popup .fr-image-progress-bar-layer.fr-error > div.fr-action-buttons {\n  display: block;\n}\n.fr-image-size-layer .fr-image-group .fr-input-line {\n  width: calc(50% - 5px);\n  display: inline-block;\n}\n.fr-image-size-layer .fr-image-group .fr-input-line + .fr-input-line {\n  margin-left: 10px;\n}\n.fr-uploading {\n  -webkit-opacity: 0.4;\n  -moz-opacity: 0.4;\n  opacity: 0.4;\n  -ms-filter: \"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)\";\n}\n@keyframes loading {\n  from {\n    left: -25%;\n  }\n  to {\n    left: 100%;\n  }\n}\n@-webkit-keyframes loading {\n  from {\n    left: -25%;\n  }\n  to {\n    left: 100%;\n  }\n}\n@-moz-keyframes loading {\n  from {\n    left: -25%;\n  }\n  to {\n    left: 100%;\n  }\n}\n@-o-keyframes loading {\n  from {\n    left: -25%;\n  }\n  to {\n    left: 100%;\n  }\n}\n\n.clearfix::after {\n  clear: both;\n  display: block;\n  content: \"\";\n  height: 0;\n}\n.hide-by-clipping {\n  position: absolute;\n  width: 1px;\n  height: 1px;\n  padding: 0;\n  margin: -1px;\n  overflow: hidden;\n  clip: rect(0, 0, 0, 0);\n  border: 0;\n}\n.fr-modal-head .fr-modal-head-line::after {\n  clear: both;\n  display: block;\n  content: \"\";\n  height: 0;\n}\n.fr-modal-head .fr-modal-head-line i.fr-modal-more {\n  float: left;\n  opacity: 1;\n  -webkit-transition: padding 0.2s ease 0s, width 0.2s ease 0s, opacity 0.2s ease 0s;\n  -moz-transition: padding 0.2s ease 0s, width 0.2s ease 0s, opacity 0.2s ease 0s;\n  -ms-transition: padding 0.2s ease 0s, width 0.2s ease 0s, opacity 0.2s ease 0s;\n  -o-transition: padding 0.2s ease 0s, width 0.2s ease 0s, opacity 0.2s ease 0s;\n  padding: 12px;\n}\n.fr-modal-head .fr-modal-head-line i.fr-modal-more.fr-not-available {\n  opacity: 0;\n  width: 0;\n  padding: 12px 0;\n}\n.fr-modal-head .fr-modal-tags {\n  display: none;\n  text-align: left;\n}\n.fr-modal-head .fr-modal-tags a {\n  display: inline-block;\n  opacity: 0;\n  padding: 6px 8px;\n  margin: 8px 0 8px 8px;\n  text-decoration: none;\n  border-radius: 2px;\n  -moz-border-radius: 2px;\n  -webkit-border-radius: 2px;\n  -moz-background-clip: padding;\n  -webkit-background-clip: padding-box;\n  background-clip: padding-box;\n  color: #1e88e5;\n  -webkit-transition: opacity 0.2s ease 0s, background 0.2s ease 0s;\n  -moz-transition: opacity 0.2s ease 0s, background 0.2s ease 0s;\n  -ms-transition: opacity 0.2s ease 0s, background 0.2s ease 0s;\n  -o-transition: opacity 0.2s ease 0s, background 0.2s ease 0s;\n  cursor: pointer;\n}\n.fr-modal-head .fr-modal-tags a:focus {\n  outline: none;\n}\n.fr-modal-head .fr-modal-tags a.fr-selected-tag {\n  background: #d6d6d6;\n}\ndiv.fr-modal-body .fr-preloader {\n  display: block;\n  margin: 50px auto;\n}\ndiv.fr-modal-body div.fr-image-list {\n  text-align: center;\n  margin: 0 10px;\n  padding: 0;\n}\ndiv.fr-modal-body div.fr-image-list::after {\n  clear: both;\n  display: block;\n  content: \"\";\n  height: 0;\n}\ndiv.fr-modal-body div.fr-image-list .fr-list-column {\n  float: left;\n  width: calc((100% - 10px) / 2);\n}\n@media (min-width: 768px) and (max-width: 1199px) {\n  div.fr-modal-body div.fr-image-list .fr-list-column {\n    width: calc((100% - 20px) / 3);\n  }\n}\n@media (min-width: 1200px) {\n  div.fr-modal-body div.fr-image-list .fr-list-column {\n    width: calc((100% - 30px) / 4);\n  }\n}\ndiv.fr-modal-body div.fr-image-list .fr-list-column + .fr-list-column {\n  margin-left: 10px;\n}\ndiv.fr-modal-body div.fr-image-list div.fr-image-container {\n  position: relative;\n  width: 100%;\n  display: block;\n  -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n  -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n  border-radius: 2px;\n  -moz-border-radius: 2px;\n  -webkit-border-radius: 2px;\n  -moz-background-clip: padding;\n  -webkit-background-clip: padding-box;\n  background-clip: padding-box;\n  overflow: hidden;\n}\ndiv.fr-modal-body div.fr-image-list div.fr-image-container:first-child {\n  margin-top: 10px;\n}\ndiv.fr-modal-body div.fr-image-list div.fr-image-container + div {\n  margin-top: 10px;\n}\ndiv.fr-modal-body div.fr-image-list div.fr-image-container.fr-image-deleting::after {\n  position: absolute;\n  -webkit-opacity: 0.5;\n  -moz-opacity: 0.5;\n  opacity: 0.5;\n  -ms-filter: \"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)\";\n  -webkit-transition: opacity 0.2s ease 0s;\n  -moz-transition: opacity 0.2s ease 0s;\n  -ms-transition: opacity 0.2s ease 0s;\n  -o-transition: opacity 0.2s ease 0s;\n  background: #000000;\n  content: \"\";\n  top: 0;\n  left: 0;\n  bottom: 0;\n  right: 0;\n  z-index: 2;\n}\ndiv.fr-modal-body div.fr-image-list div.fr-image-container.fr-image-deleting::before {\n  content: attr(data-deleting);\n  color: #ffffff;\n  top: 0;\n  left: 0;\n  bottom: 0;\n  right: 0;\n  margin: auto;\n  position: absolute;\n  z-index: 3;\n  font-size: 15px;\n  height: 20px;\n}\ndiv.fr-modal-body div.fr-image-list div.fr-image-container.fr-empty {\n  height: 95px;\n  background: #cccccc;\n  z-index: 1;\n}\ndiv.fr-modal-body div.fr-image-list div.fr-image-container.fr-empty::after {\n  position: absolute;\n  margin: auto;\n  top: 0;\n  bottom: 0;\n  left: 0;\n  right: 0;\n  content: attr(data-loading);\n  display: inline-block;\n  height: 20px;\n}\ndiv.fr-modal-body div.fr-image-list div.fr-image-container img {\n  width: 100%;\n  vertical-align: middle;\n  position: relative;\n  z-index: 2;\n  -webkit-opacity: 1;\n  -moz-opacity: 1;\n  opacity: 1;\n  -ms-filter: \"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)\";\n  -webkit-transition: opacity 0.2s ease 0s, filter 0.2s ease 0s;\n  -moz-transition: opacity 0.2s ease 0s, filter 0.2s ease 0s;\n  -ms-transition: opacity 0.2s ease 0s, filter 0.2s ease 0s;\n  -o-transition: opacity 0.2s ease 0s, filter 0.2s ease 0s;\n  -webkit-transform: translateZ(0);\n  -moz-transform: translateZ(0);\n  -ms-transform: translateZ(0);\n  -o-transform: translateZ(0);\n}\ndiv.fr-modal-body div.fr-image-list div.fr-image-container.fr-mobile-selected img {\n  -webkit-opacity: 0.75;\n  -moz-opacity: 0.75;\n  opacity: 0.75;\n  -ms-filter: \"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)\";\n}\ndiv.fr-modal-body div.fr-image-list div.fr-image-container.fr-mobile-selected .fr-delete-img,\ndiv.fr-modal-body div.fr-image-list div.fr-image-container.fr-mobile-selected .fr-insert-img {\n  display: inline-block;\n}\ndiv.fr-modal-body div.fr-image-list div.fr-image-container .fr-delete-img,\ndiv.fr-modal-body div.fr-image-list div.fr-image-container .fr-insert-img {\n  display: none;\n  top: 50%;\n  border-radius: 100%;\n  -moz-border-radius: 100%;\n  -webkit-border-radius: 100%;\n  -moz-background-clip: padding;\n  -webkit-background-clip: padding-box;\n  background-clip: padding-box;\n  -webkit-transition: background 0.2s ease 0s, color 0.2s ease 0s;\n  -moz-transition: background 0.2s ease 0s, color 0.2s ease 0s;\n  -ms-transition: background 0.2s ease 0s, color 0.2s ease 0s;\n  -o-transition: background 0.2s ease 0s, color 0.2s ease 0s;\n  -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n  -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n  position: absolute;\n  cursor: pointer;\n  margin: 0;\n  width: 36px;\n  height: 36px;\n  line-height: 36px;\n  text-decoration: none;\n  z-index: 3;\n}\ndiv.fr-modal-body div.fr-image-list div.fr-image-container .fr-delete-img {\n  background: #b8312f;\n  color: #ffffff;\n  left: 50%;\n  -webkit-transform: translateY(-50%) translateX(25%);\n  -moz-transform: translateY(-50%) translateX(25%);\n  -ms-transform: translateY(-50%) translateX(25%);\n  -o-transform: translateY(-50%) translateX(25%);\n}\ndiv.fr-modal-body div.fr-image-list div.fr-image-container .fr-insert-img {\n  background: #ffffff;\n  color: #1e88e5;\n  left: 50%;\n  -webkit-transform: translateY(-50%) translateX(-125%);\n  -moz-transform: translateY(-50%) translateX(-125%);\n  -ms-transform: translateY(-50%) translateX(-125%);\n  -o-transform: translateY(-50%) translateX(-125%);\n}\n.fr-desktop .fr-modal-wrapper .fr-modal-head .fr-modal-tags a:hover {\n  background: #ebebeb;\n}\n.fr-desktop .fr-modal-wrapper .fr-modal-head .fr-modal-tags a.fr-selected-tag {\n  background: #d6d6d6;\n}\n.fr-desktop .fr-modal-wrapper div.fr-modal-body div.fr-image-list div.fr-image-container:hover img {\n  -webkit-opacity: 0.75;\n  -moz-opacity: 0.75;\n  opacity: 0.75;\n  -ms-filter: \"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)\";\n}\n.fr-desktop .fr-modal-wrapper div.fr-modal-body div.fr-image-list div.fr-image-container:hover .fr-delete-img,\n.fr-desktop .fr-modal-wrapper div.fr-modal-body div.fr-image-list div.fr-image-container:hover .fr-insert-img {\n  display: inline-block;\n}\n.fr-desktop .fr-modal-wrapper div.fr-modal-body div.fr-image-list div.fr-image-container .fr-delete-img:hover {\n  background: #bf4644;\n  color: #ffffff;\n}\n.fr-desktop .fr-modal-wrapper div.fr-modal-body div.fr-image-list div.fr-image-container .fr-insert-img:hover {\n  background: #ebebeb;\n}\n\n.clearfix::after {\n  clear: both;\n  display: block;\n  content: \"\";\n  height: 0;\n}\n.hide-by-clipping {\n  position: absolute;\n  width: 1px;\n  height: 1px;\n  padding: 0;\n  margin: -1px;\n  overflow: hidden;\n  clip: rect(0, 0, 0, 0);\n  border: 0;\n}\n.fr-line-breaker {\n  cursor: text;\n  border-top: 1px solid #1e88e5;\n  position: fixed;\n  z-index: 2;\n  display: none;\n}\n.fr-line-breaker.fr-visible {\n  display: block;\n}\n.fr-line-breaker a.fr-floating-btn {\n  position: absolute;\n  left: calc(50% - (32px / 2));\n  top: -16px;\n}\n\n.clearfix::after {\n  clear: both;\n  display: block;\n  content: \"\";\n  height: 0;\n}\n.hide-by-clipping {\n  position: absolute;\n  width: 1px;\n  height: 1px;\n  padding: 0;\n  margin: -1px;\n  overflow: hidden;\n  clip: rect(0, 0, 0, 0);\n  border: 0;\n}\n.fr-quick-insert {\n  position: absolute;\n  z-index: 2147483639;\n  white-space: nowrap;\n  padding-right: 5px;\n  margin-left: -5px;\n  -webkit-box-sizing: content-box;\n  -moz-box-sizing: content-box;\n  box-sizing: content-box;\n}\n.fr-quick-insert.fr-on a.fr-floating-btn svg {\n  -webkit-transform: rotate(135deg);\n  -moz-transform: rotate(135deg);\n  -ms-transform: rotate(135deg);\n  -o-transform: rotate(135deg);\n}\n.fr-quick-insert.fr-hidden {\n  display: none;\n}\n.fr-qi-helper {\n  position: absolute;\n  z-index: 3;\n  padding-left: 16px;\n  white-space: nowrap;\n}\n.fr-qi-helper a.fr-btn.fr-floating-btn {\n  text-align: center;\n  display: inline-block;\n  color: #222222;\n  -webkit-opacity: 0;\n  -moz-opacity: 0;\n  opacity: 0;\n  -ms-filter: \"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)\";\n  -webkit-transform: scale(0);\n  -moz-transform: scale(0);\n  -ms-transform: scale(0);\n  -o-transform: scale(0);\n}\n.fr-qi-helper a.fr-btn.fr-floating-btn.fr-size-1 {\n  -webkit-opacity: 1;\n  -moz-opacity: 1;\n  opacity: 1;\n  -ms-filter: \"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)\";\n  -webkit-transform: scale(1);\n  -moz-transform: scale(1);\n  -ms-transform: scale(1);\n  -o-transform: scale(1);\n}\n\n.clearfix::after {\n  clear: both;\n  display: block;\n  content: \"\";\n  height: 0;\n}\n.hide-by-clipping {\n  position: absolute;\n  width: 1px;\n  height: 1px;\n  padding: 0;\n  margin: -1px;\n  overflow: hidden;\n  clip: rect(0, 0, 0, 0);\n  border: 0;\n}\n.fr-modal .fr-modal-wrapper .fr-modal-body .fr-special-characters-modal {\n  text-align: left;\n  padding: 20px 20px 10px;\n}\n.fr-modal .fr-modal-wrapper .fr-modal-body .fr-special-characters-modal .fr-special-characters-list {\n  margin-bottom: 20px;\n}\n.fr-modal .fr-modal-wrapper .fr-modal-body .fr-special-characters-modal .fr-special-characters-title {\n  font-weight: bold;\n  font-size: 14px;\n  padding: 6px 0 4px;\n  margin: 0 0 5px;\n}\n.fr-modal .fr-modal-wrapper .fr-modal-body .fr-special-characters-modal .fr-special-character {\n  display: inline-block;\n  font-size: 16px;\n  width: 20px;\n  height: 20px;\n  padding: 5px;\n  line-height: 20px;\n  cursor: default;\n  font-weight: normal;\n  -webkit-box-sizing: content-box;\n  -moz-box-sizing: content-box;\n  box-sizing: content-box;\n  text-align: center;\n  border: 1px solid #cccccc;\n  margin: -1px 0 0 -1px;\n}\n\n.clearfix::after {\n  clear: both;\n  display: block;\n  content: \"\";\n  height: 0;\n}\n.hide-by-clipping {\n  position: absolute;\n  width: 1px;\n  height: 1px;\n  padding: 0;\n  margin: -1px;\n  overflow: hidden;\n  clip: rect(0, 0, 0, 0);\n  border: 0;\n}\n.fr-element table td.fr-selected-cell,\n.fr-element table th.fr-selected-cell {\n  border: 1px double #1e88e5;\n}\n.fr-element table tr {\n  user-select: none;\n  -o-user-select: none;\n  -moz-user-select: none;\n  -khtml-user-select: none;\n  -webkit-user-select: none;\n  -ms-user-select: none;\n}\n.fr-element table td,\n.fr-element table th {\n  user-select: text;\n  -o-user-select: text;\n  -moz-user-select: text;\n  -khtml-user-select: text;\n  -webkit-user-select: text;\n  -ms-user-select: text;\n}\n.fr-element .fr-no-selection table td,\n.fr-element .fr-no-selection table th {\n  user-select: none;\n  -o-user-select: none;\n  -moz-user-select: none;\n  -khtml-user-select: none;\n  -webkit-user-select: none;\n  -ms-user-select: none;\n}\n.fr-table-resizer {\n  cursor: col-resize;\n  position: absolute;\n  z-index: 3;\n  display: none;\n}\n.fr-table-resizer.fr-moving {\n  z-index: 2;\n}\n.fr-table-resizer div {\n  -webkit-opacity: 0;\n  -moz-opacity: 0;\n  opacity: 0;\n  -ms-filter: \"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)\";\n  border-right: 1px solid #1e88e5;\n}\n.fr-no-selection {\n  user-select: none;\n  -o-user-select: none;\n  -moz-user-select: none;\n  -khtml-user-select: none;\n  -webkit-user-select: none;\n  -ms-user-select: none;\n}\n.fr-popup .fr-table-colors-hex-layer {\n  width: 100%;\n  margin: 0px;\n  padding: 10px;\n}\n.fr-popup .fr-table-colors-hex-layer .fr-input-line {\n  float: left;\n  width: calc(100% - 50px);\n  padding: 8px 0 0;\n}\n.fr-popup .fr-table-colors-hex-layer .fr-action-buttons {\n  float: right;\n  width: 50px;\n}\n.fr-popup .fr-table-colors-hex-layer .fr-action-buttons button {\n  background-color: #1e88e5;\n  color: #FFF;\n  border-radius: 2px;\n  -moz-border-radius: 2px;\n  -webkit-border-radius: 2px;\n  -moz-background-clip: padding;\n  -webkit-background-clip: padding-box;\n  background-clip: padding-box;\n  font-size: 13px;\n  height: 32px;\n}\n.fr-popup .fr-table-colors-hex-layer .fr-action-buttons button:hover {\n  background-color: #166dba;\n  color: #FFF;\n}\n.fr-popup .fr-table-size .fr-table-size-info {\n  text-align: center;\n  font-size: 14px;\n  padding: 8px;\n}\n.fr-popup .fr-table-size .fr-select-table-size {\n  line-height: 0;\n  padding: 0 5px 5px;\n  white-space: nowrap;\n}\n.fr-popup .fr-table-size .fr-select-table-size > span {\n  display: inline-block;\n  padding: 0px 4px 4px 0;\n  background: transparent;\n}\n.fr-popup .fr-table-size .fr-select-table-size > span > span {\n  display: inline-block;\n  width: 18px;\n  height: 18px;\n  border: 1px solid #dddddd;\n}\n.fr-popup .fr-table-size .fr-select-table-size > span.hover {\n  background: transparent;\n}\n.fr-popup .fr-table-size .fr-select-table-size > span.hover > span {\n  background: rgba(30, 136, 229, 0.3);\n  border: solid 1px #1e88e5;\n}\n.fr-popup .fr-table-size .fr-select-table-size .new-line::after {\n  clear: both;\n  display: block;\n  content: \"\";\n  height: 0;\n}\n.fr-popup.fr-above .fr-table-size .fr-select-table-size > span {\n  display: inline-block !important;\n}\n.fr-popup .fr-table-colors-buttons {\n  margin-bottom: 5px;\n}\n.fr-popup .fr-table-colors {\n  line-height: 0;\n  display: block;\n}\n.fr-popup .fr-table-colors > span {\n  display: inline-block;\n  width: 32px;\n  height: 32px;\n  position: relative;\n  z-index: 1;\n}\n.fr-popup .fr-table-colors > span > i {\n  text-align: center;\n  line-height: 32px;\n  height: 32px;\n  width: 32px;\n  font-size: 13px;\n  position: absolute;\n  bottom: 0;\n  cursor: default;\n  left: 0;\n}\n.fr-popup .fr-table-colors > span:focus {\n  outline: 1px solid #222222;\n  z-index: 2;\n}\n.fr-popup.fr-desktop .fr-table-size .fr-select-table-size > span > span {\n  width: 12px;\n  height: 12px;\n}\n.fr-insert-helper {\n  position: absolute;\n  z-index: 9999;\n  white-space: nowrap;\n}\n\n.clearfix::after {\n  clear: both;\n  display: block;\n  content: \"\";\n  height: 0;\n}\n.hide-by-clipping {\n  position: absolute;\n  width: 1px;\n  height: 1px;\n  padding: 0;\n  margin: -1px;\n  overflow: hidden;\n  clip: rect(0, 0, 0, 0);\n  border: 0;\n}\n.fr-element .fr-video {\n  user-select: none;\n  -o-user-select: none;\n  -moz-user-select: none;\n  -khtml-user-select: none;\n  -webkit-user-select: none;\n  -ms-user-select: none;\n}\n.fr-element .fr-video::after {\n  position: absolute;\n  content: '';\n  z-index: 1;\n  top: 0;\n  left: 0;\n  right: 0;\n  bottom: 0;\n  cursor: pointer;\n  display: block;\n  background: rgba(0, 0, 0, 0);\n}\n.fr-element .fr-video.fr-active > * {\n  z-index: 2;\n  position: relative;\n}\n.fr-element .fr-video > * {\n  -webkit-box-sizing: content-box;\n  -moz-box-sizing: content-box;\n  box-sizing: content-box;\n  max-width: 100%;\n  border: none;\n}\n.fr-box .fr-video-resizer {\n  position: absolute;\n  border: solid 1px #1e88e5;\n  display: none;\n  user-select: none;\n  -o-user-select: none;\n  -moz-user-select: none;\n  -khtml-user-select: none;\n  -webkit-user-select: none;\n  -ms-user-select: none;\n}\n.fr-box .fr-video-resizer.fr-active {\n  display: block;\n}\n.fr-box .fr-video-resizer .fr-handler {\n  display: block;\n  position: absolute;\n  background: #1e88e5;\n  border: solid 1px #ffffff;\n  z-index: 4;\n  -webkit-box-sizing: border-box;\n  -moz-box-sizing: border-box;\n  box-sizing: border-box;\n}\n.fr-box .fr-video-resizer .fr-handler.fr-hnw {\n  cursor: nw-resize;\n}\n.fr-box .fr-video-resizer .fr-handler.fr-hne {\n  cursor: ne-resize;\n}\n.fr-box .fr-video-resizer .fr-handler.fr-hsw {\n  cursor: sw-resize;\n}\n.fr-box .fr-video-resizer .fr-handler.fr-hse {\n  cursor: se-resize;\n}\n.fr-box .fr-video-resizer .fr-handler {\n  width: 12px;\n  height: 12px;\n}\n.fr-box .fr-video-resizer .fr-handler.fr-hnw {\n  left: -6px;\n  top: -6px;\n}\n.fr-box .fr-video-resizer .fr-handler.fr-hne {\n  right: -6px;\n  top: -6px;\n}\n.fr-box .fr-video-resizer .fr-handler.fr-hsw {\n  left: -6px;\n  bottom: -6px;\n}\n.fr-box .fr-video-resizer .fr-handler.fr-hse {\n  right: -6px;\n  bottom: -6px;\n}\n@media (min-width: 1200px) {\n  .fr-box .fr-video-resizer .fr-handler {\n    width: 10px;\n    height: 10px;\n  }\n  .fr-box .fr-video-resizer .fr-handler.fr-hnw {\n    left: -5px;\n    top: -5px;\n  }\n  .fr-box .fr-video-resizer .fr-handler.fr-hne {\n    right: -5px;\n    top: -5px;\n  }\n  .fr-box .fr-video-resizer .fr-handler.fr-hsw {\n    left: -5px;\n    bottom: -5px;\n  }\n  .fr-box .fr-video-resizer .fr-handler.fr-hse {\n    right: -5px;\n    bottom: -5px;\n  }\n}\n.fr-popup .fr-video-size-layer .fr-video-group .fr-input-line {\n  width: calc(50% - 5px);\n  display: inline-block;\n}\n.fr-popup .fr-video-size-layer .fr-video-group .fr-input-line + .fr-input-line {\n  margin-left: 10px;\n}\n.fr-popup .fr-video-upload-layer {\n  border: dashed 2px #bdbdbd;\n  padding: 25px 0;\n  position: relative;\n  font-size: 14px;\n  letter-spacing: 1px;\n  line-height: 140%;\n  text-align: center;\n}\n.fr-popup .fr-video-upload-layer:hover {\n  background: #ebebeb;\n}\n.fr-popup .fr-video-upload-layer.fr-drop {\n  background: #ebebeb;\n  border-color: #1e88e5;\n}\n.fr-popup .fr-video-upload-layer .fr-form {\n  -webkit-opacity: 0;\n  -moz-opacity: 0;\n  opacity: 0;\n  -ms-filter: \"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)\";\n  position: absolute;\n  top: 0;\n  bottom: 0;\n  left: 0;\n  right: 0;\n  z-index: 2147483640;\n  overflow: hidden;\n  margin: 0 !important;\n  padding: 0 !important;\n  width: 100% !important;\n}\n.fr-popup .fr-video-upload-layer .fr-form input {\n  cursor: pointer;\n  position: absolute;\n  right: 0px;\n  top: 0px;\n  bottom: 0px;\n  width: 500%;\n  height: 100%;\n  margin: 0px;\n  font-size: 400px;\n}\n.fr-popup .fr-video-progress-bar-layer > h3 {\n  font-size: 16px;\n  margin: 10px 0;\n  font-weight: normal;\n}\n.fr-popup .fr-video-progress-bar-layer > div.fr-action-buttons {\n  display: none;\n}\n.fr-popup .fr-video-progress-bar-layer > div.fr-loader {\n  background: #bcdbf7;\n  height: 10px;\n  width: 100%;\n  margin-top: 20px;\n  overflow: hidden;\n  position: relative;\n}\n.fr-popup .fr-video-progress-bar-layer > div.fr-loader span {\n  display: block;\n  height: 100%;\n  width: 0%;\n  background: #1e88e5;\n  -webkit-transition: width 0.2s ease 0s;\n  -moz-transition: width 0.2s ease 0s;\n  -ms-transition: width 0.2s ease 0s;\n  -o-transition: width 0.2s ease 0s;\n}\n.fr-popup .fr-video-progress-bar-layer > div.fr-loader.fr-indeterminate span {\n  width: 30% !important;\n  position: absolute;\n  top: 0;\n  -webkit-animation: loading 2s linear infinite;\n  -moz-animation: loading 2s linear infinite;\n  -o-animation: loading 2s linear infinite;\n  animation: loading 2s linear infinite;\n}\n.fr-popup .fr-video-progress-bar-layer.fr-error > div.fr-loader {\n  display: none;\n}\n.fr-popup .fr-video-progress-bar-layer.fr-error > div.fr-action-buttons {\n  display: block;\n}\n.fr-video-overlay {\n  position: fixed;\n  top: 0;\n  left: 0;\n  bottom: 0;\n  right: 0;\n  z-index: 2147483640;\n  display: none;\n}\n"
  },
  {
    "path": "src/main/resources/static/plugins/froala-editor/css/froala_style.css",
    "content": "/*!\n * froala_editor v2.9.1 (https://www.froala.com/wysiwyg-editor)\n * License https://froala.com/wysiwyg-editor/terms/\n * Copyright 2014-2018 Froala Labs\n */\n\n.clearfix::after {\n  clear: both;\n  display: block;\n  content: \"\";\n  height: 0;\n}\n.hide-by-clipping {\n  position: absolute;\n  width: 1px;\n  height: 1px;\n  padding: 0;\n  margin: -1px;\n  overflow: hidden;\n  clip: rect(0, 0, 0, 0);\n  border: 0;\n}\nimg.fr-rounded,\n.fr-img-caption.fr-rounded img {\n  border-radius: 10px;\n  -moz-border-radius: 10px;\n  -webkit-border-radius: 10px;\n  -moz-background-clip: padding;\n  -webkit-background-clip: padding-box;\n  background-clip: padding-box;\n}\nimg.fr-bordered,\n.fr-img-caption.fr-bordered img {\n  border: solid 5px #CCC;\n}\nimg.fr-bordered {\n  -webkit-box-sizing: content-box;\n  -moz-box-sizing: content-box;\n  box-sizing: content-box;\n}\n.fr-img-caption.fr-bordered img {\n  -webkit-box-sizing: border-box;\n  -moz-box-sizing: border-box;\n  box-sizing: border-box;\n}\nimg.fr-shadow,\n.fr-img-caption.fr-shadow img {\n  -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n  -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n}\n.fr-view {\n  word-wrap: break-word;\n}\n.fr-view span[style~=\"color:\"] a {\n  color: inherit;\n}\n.fr-view strong {\n  font-weight: 700;\n}\n.fr-view table {\n  border: none;\n  border-collapse: collapse;\n  empty-cells: show;\n  max-width: 100%;\n}\n.fr-view table td {\n  min-width: 5px;\n}\n.fr-view table.fr-dashed-borders td,\n.fr-view table.fr-dashed-borders th {\n  border-style: dashed;\n}\n.fr-view table.fr-alternate-rows tbody tr:nth-child(2n) {\n  background: #f5f5f5;\n}\n.fr-view table td,\n.fr-view table th {\n  border: 1px solid #dddddd;\n}\n.fr-view table td:empty,\n.fr-view table th:empty {\n  height: 20px;\n}\n.fr-view table td.fr-highlighted,\n.fr-view table th.fr-highlighted {\n  border: 1px double red;\n}\n.fr-view table td.fr-thick,\n.fr-view table th.fr-thick {\n  border-width: 2px;\n}\n.fr-view table th {\n  background: #e6e6e6;\n}\n.fr-view hr {\n  clear: both;\n  user-select: none;\n  -o-user-select: none;\n  -moz-user-select: none;\n  -khtml-user-select: none;\n  -webkit-user-select: none;\n  -ms-user-select: none;\n  page-break-after: always;\n}\n.fr-view .fr-file {\n  position: relative;\n}\n.fr-view .fr-file::after {\n  position: relative;\n  content: \"\\1F4CE\";\n  font-weight: normal;\n}\n.fr-view pre {\n  white-space: pre-wrap;\n  word-wrap: break-word;\n  overflow: visible;\n}\n.fr-view[dir=\"rtl\"] blockquote {\n  border-left: none;\n  border-right: solid 2px #5e35b1;\n  margin-right: 0;\n  padding-right: 5px;\n  padding-left: 0px;\n}\n.fr-view[dir=\"rtl\"] blockquote blockquote {\n  border-color: #00bcd4;\n}\n.fr-view[dir=\"rtl\"] blockquote blockquote blockquote {\n  border-color: #43a047;\n}\n.fr-view blockquote {\n  border-left: solid 2px #5e35b1;\n  margin-left: 0;\n  padding-left: 5px;\n  color: #5e35b1;\n}\n.fr-view blockquote blockquote {\n  border-color: #00bcd4;\n  color: #00bcd4;\n}\n.fr-view blockquote blockquote blockquote {\n  border-color: #43a047;\n  color: #43a047;\n}\n.fr-view span.fr-emoticon {\n  font-weight: normal;\n  font-family: \"Apple Color Emoji\", \"Segoe UI Emoji\", \"NotoColorEmoji\", \"Segoe UI Symbol\", \"Android Emoji\", \"EmojiSymbols\";\n  display: inline;\n  line-height: 0;\n}\n.fr-view span.fr-emoticon.fr-emoticon-img {\n  background-repeat: no-repeat !important;\n  font-size: inherit;\n  height: 1em;\n  width: 1em;\n  min-height: 20px;\n  min-width: 20px;\n  display: inline-block;\n  margin: -0.1em 0.1em 0.1em;\n  line-height: 1;\n  vertical-align: middle;\n}\n.fr-view .fr-text-gray {\n  color: #AAA !important;\n}\n.fr-view .fr-text-bordered {\n  border-top: solid 1px #222;\n  border-bottom: solid 1px #222;\n  padding: 10px 0;\n}\n.fr-view .fr-text-spaced {\n  letter-spacing: 1px;\n}\n.fr-view .fr-text-uppercase {\n  text-transform: uppercase;\n}\n.fr-view .fr-class-highlighted {\n  background-color: #ffff00;\n}\n.fr-view .fr-class-code {\n  border-color: #cccccc;\n  border-radius: 2px;\n  -moz-border-radius: 2px;\n  -webkit-border-radius: 2px;\n  -moz-background-clip: padding;\n  -webkit-background-clip: padding-box;\n  background-clip: padding-box;\n  background: #f5f5f5;\n  padding: 10px;\n  font-family: \"Courier New\", Courier, monospace;\n}\n.fr-view .fr-class-transparency {\n  opacity: 0.5;\n}\n.fr-view img {\n  position: relative;\n  max-width: 100%;\n}\n.fr-view img.fr-dib {\n  margin: 5px auto;\n  display: block;\n  float: none;\n  vertical-align: top;\n}\n.fr-view img.fr-dib.fr-fil {\n  margin-left: 0;\n  text-align: left;\n}\n.fr-view img.fr-dib.fr-fir {\n  margin-right: 0;\n  text-align: right;\n}\n.fr-view img.fr-dii {\n  display: inline-block;\n  float: none;\n  vertical-align: bottom;\n  margin-left: 5px;\n  margin-right: 5px;\n  max-width: calc(100% - (2 * 5px));\n}\n.fr-view img.fr-dii.fr-fil {\n  float: left;\n  margin: 5px 5px 5px 0;\n  max-width: calc(100% - 5px);\n}\n.fr-view img.fr-dii.fr-fir {\n  float: right;\n  margin: 5px 0 5px 5px;\n  max-width: calc(100% - 5px);\n}\n.fr-view span.fr-img-caption {\n  position: relative;\n  max-width: 100%;\n}\n.fr-view span.fr-img-caption.fr-dib {\n  margin: 5px auto;\n  display: block;\n  float: none;\n  vertical-align: top;\n}\n.fr-view span.fr-img-caption.fr-dib.fr-fil {\n  margin-left: 0;\n  text-align: left;\n}\n.fr-view span.fr-img-caption.fr-dib.fr-fir {\n  margin-right: 0;\n  text-align: right;\n}\n.fr-view span.fr-img-caption.fr-dii {\n  display: inline-block;\n  float: none;\n  vertical-align: bottom;\n  margin-left: 5px;\n  margin-right: 5px;\n  max-width: calc(100% - (2 * 5px));\n}\n.fr-view span.fr-img-caption.fr-dii.fr-fil {\n  float: left;\n  margin: 5px 5px 5px 0;\n  max-width: calc(100% - 5px);\n}\n.fr-view span.fr-img-caption.fr-dii.fr-fir {\n  float: right;\n  margin: 5px 0 5px 5px;\n  max-width: calc(100% - 5px);\n}\n.fr-view .fr-video {\n  text-align: center;\n  position: relative;\n}\n.fr-view .fr-video.fr-rv {\n  padding-bottom: 56.25%;\n  padding-top: 30px;\n  height: 0;\n  overflow: hidden;\n}\n.fr-view .fr-video.fr-rv > iframe,\n.fr-view .fr-video.fr-rv object,\n.fr-view .fr-video.fr-rv embed {\n  position: absolute !important;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n}\n.fr-view .fr-video > * {\n  -webkit-box-sizing: content-box;\n  -moz-box-sizing: content-box;\n  box-sizing: content-box;\n  max-width: 100%;\n  border: none;\n}\n.fr-view .fr-video.fr-dvb {\n  display: block;\n  clear: both;\n}\n.fr-view .fr-video.fr-dvb.fr-fvl {\n  text-align: left;\n}\n.fr-view .fr-video.fr-dvb.fr-fvr {\n  text-align: right;\n}\n.fr-view .fr-video.fr-dvi {\n  display: inline-block;\n}\n.fr-view .fr-video.fr-dvi.fr-fvl {\n  float: left;\n}\n.fr-view .fr-video.fr-dvi.fr-fvr {\n  float: right;\n}\n.fr-view a.fr-strong {\n  font-weight: 700;\n}\n.fr-view a.fr-green {\n  color: green;\n}\n.fr-view .fr-img-caption {\n  text-align: center;\n}\n.fr-view .fr-img-caption .fr-img-wrap {\n  padding: 0px;\n  display: inline-block;\n  margin: auto;\n  text-align: center;\n  width: 100%;\n}\n.fr-view .fr-img-caption .fr-img-wrap img {\n  display: block;\n  margin: auto;\n  width: 100%;\n}\n.fr-view .fr-img-caption .fr-img-wrap > span {\n  margin: auto;\n  display: block;\n  padding: 5px 5px 10px;\n  font-size: 14px;\n  font-weight: initial;\n  -webkit-box-sizing: border-box;\n  -moz-box-sizing: border-box;\n  box-sizing: border-box;\n  -webkit-opacity: 0.9;\n  -moz-opacity: 0.9;\n  opacity: 0.9;\n  -ms-filter: \"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)\";\n  width: 100%;\n  text-align: center;\n}\n.fr-view button.fr-rounded,\n.fr-view input.fr-rounded,\n.fr-view textarea.fr-rounded {\n  border-radius: 10px;\n  -moz-border-radius: 10px;\n  -webkit-border-radius: 10px;\n  -moz-background-clip: padding;\n  -webkit-background-clip: padding-box;\n  background-clip: padding-box;\n}\n.fr-view button.fr-large,\n.fr-view input.fr-large,\n.fr-view textarea.fr-large {\n  font-size: 24px;\n}\n/**\n * Image style.\n */\na.fr-view.fr-strong {\n  font-weight: 700;\n}\na.fr-view.fr-green {\n  color: green;\n}\n/**\n * Link style.\n */\nimg.fr-view {\n  position: relative;\n  max-width: 100%;\n}\nimg.fr-view.fr-dib {\n  margin: 5px auto;\n  display: block;\n  float: none;\n  vertical-align: top;\n}\nimg.fr-view.fr-dib.fr-fil {\n  margin-left: 0;\n  text-align: left;\n}\nimg.fr-view.fr-dib.fr-fir {\n  margin-right: 0;\n  text-align: right;\n}\nimg.fr-view.fr-dii {\n  display: inline-block;\n  float: none;\n  vertical-align: bottom;\n  margin-left: 5px;\n  margin-right: 5px;\n  max-width: calc(100% - (2 * 5px));\n}\nimg.fr-view.fr-dii.fr-fil {\n  float: left;\n  margin: 5px 5px 5px 0;\n  max-width: calc(100% - 5px);\n}\nimg.fr-view.fr-dii.fr-fir {\n  float: right;\n  margin: 5px 0 5px 5px;\n  max-width: calc(100% - 5px);\n}\nspan.fr-img-caption.fr-view {\n  position: relative;\n  max-width: 100%;\n}\nspan.fr-img-caption.fr-view.fr-dib {\n  margin: 5px auto;\n  display: block;\n  float: none;\n  vertical-align: top;\n}\nspan.fr-img-caption.fr-view.fr-dib.fr-fil {\n  margin-left: 0;\n  text-align: left;\n}\nspan.fr-img-caption.fr-view.fr-dib.fr-fir {\n  margin-right: 0;\n  text-align: right;\n}\nspan.fr-img-caption.fr-view.fr-dii {\n  display: inline-block;\n  float: none;\n  vertical-align: bottom;\n  margin-left: 5px;\n  margin-right: 5px;\n  max-width: calc(100% - (2 * 5px));\n}\nspan.fr-img-caption.fr-view.fr-dii.fr-fil {\n  float: left;\n  margin: 5px 5px 5px 0;\n  max-width: calc(100% - 5px);\n}\nspan.fr-img-caption.fr-view.fr-dii.fr-fir {\n  float: right;\n  margin: 5px 0 5px 5px;\n  max-width: calc(100% - 5px);\n}\n"
  },
  {
    "path": "src/main/resources/static/plugins/froala-editor/css/plugins/char_counter.css",
    "content": "/*!\n * froala_editor v2.9.1 (https://www.froala.com/wysiwyg-editor)\n * License https://froala.com/wysiwyg-editor/terms/\n * Copyright 2014-2018 Froala Labs\n */\n\n.clearfix::after {\n  clear: both;\n  display: block;\n  content: \"\";\n  height: 0;\n}\n.hide-by-clipping {\n  position: absolute;\n  width: 1px;\n  height: 1px;\n  padding: 0;\n  margin: -1px;\n  overflow: hidden;\n  clip: rect(0, 0, 0, 0);\n  border: 0;\n}\n.fr-box .fr-counter {\n  position: absolute;\n  bottom: 0px;\n  padding: 5px;\n  right: 0px;\n  color: #cccccc;\n  content: attr(data-chars);\n  font-size: 15px;\n  font-family: \"Times New Roman\", Georgia, Serif;\n  z-index: 1;\n  background: #ffffff;\n  border-top: solid 1px #ebebeb;\n  border-left: solid 1px #ebebeb;\n  border-radius: 2px 0 0 0;\n  -moz-border-radius: 2px 0 0 0;\n  -webkit-border-radius: 2px 0 0 0;\n  -moz-background-clip: padding;\n  -webkit-background-clip: padding-box;\n  background-clip: padding-box;\n}\n.fr-box.fr-rtl .fr-counter {\n  left: 0px;\n  right: auto;\n  border-left: none;\n  border-right: solid 1px #ebebeb;\n  border-radius: 0 2px 0 0;\n  -moz-border-radius: 0 2px 0 0;\n  -webkit-border-radius: 0 2px 0 0;\n  -moz-background-clip: padding;\n  -webkit-background-clip: padding-box;\n  background-clip: padding-box;\n}\n.fr-box.fr-code-view .fr-counter {\n  display: none;\n}\n"
  },
  {
    "path": "src/main/resources/static/plugins/froala-editor/css/plugins/code_view.css",
    "content": "/*!\n * froala_editor v2.9.1 (https://www.froala.com/wysiwyg-editor)\n * License https://froala.com/wysiwyg-editor/terms/\n * Copyright 2014-2018 Froala Labs\n */\n\n.clearfix::after {\n  clear: both;\n  display: block;\n  content: \"\";\n  height: 0;\n}\n.hide-by-clipping {\n  position: absolute;\n  width: 1px;\n  height: 1px;\n  padding: 0;\n  margin: -1px;\n  overflow: hidden;\n  clip: rect(0, 0, 0, 0);\n  border: 0;\n}\ntextarea.fr-code {\n  display: none;\n  width: 100%;\n  resize: none;\n  -moz-resize: none;\n  -webkit-resize: none;\n  -webkit-box-sizing: border-box;\n  -moz-box-sizing: border-box;\n  box-sizing: border-box;\n  border: none;\n  padding: 10px;\n  margin: 0px;\n  font-family: \"Courier New\", monospace;\n  font-size: 14px;\n  background: #ffffff;\n  color: #000000;\n  outline: none;\n}\n.fr-box.fr-rtl textarea.fr-code {\n  direction: rtl;\n}\n.fr-box .CodeMirror {\n  display: none;\n}\n.fr-box.fr-code-view textarea.fr-code {\n  display: block;\n}\n.fr-box.fr-code-view.fr-inline {\n  -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n  -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n}\n.fr-box.fr-code-view .fr-element,\n.fr-box.fr-code-view .fr-placeholder,\n.fr-box.fr-code-view .fr-iframe {\n  display: none;\n}\n.fr-box.fr-code-view .CodeMirror {\n  display: block;\n}\n.fr-box.fr-inline.fr-code-view .fr-command.fr-btn.html-switch {\n  display: block;\n}\n.fr-box.fr-inline .fr-command.fr-btn.html-switch {\n  position: absolute;\n  top: 0;\n  right: 0;\n  -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n  -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n  display: none;\n  background: #ffffff;\n  color: #222222;\n  -moz-outline: 0;\n  outline: 0;\n  border: 0;\n  line-height: 1;\n  cursor: pointer;\n  text-align: left;\n  padding: 12px 12px;\n  -webkit-transition: background 0.2s ease 0s;\n  -moz-transition: background 0.2s ease 0s;\n  -ms-transition: background 0.2s ease 0s;\n  -o-transition: background 0.2s ease 0s;\n  border-radius: 0;\n  -moz-border-radius: 0;\n  -webkit-border-radius: 0;\n  -moz-background-clip: padding;\n  -webkit-background-clip: padding-box;\n  background-clip: padding-box;\n  z-index: 2;\n  -webkit-box-sizing: border-box;\n  -moz-box-sizing: border-box;\n  box-sizing: border-box;\n  text-decoration: none;\n  user-select: none;\n  -o-user-select: none;\n  -moz-user-select: none;\n  -khtml-user-select: none;\n  -webkit-user-select: none;\n  -ms-user-select: none;\n}\n.fr-box.fr-inline .fr-command.fr-btn.html-switch i {\n  font-size: 14px;\n  width: 14px;\n  text-align: center;\n}\n.fr-box.fr-inline .fr-command.fr-btn.html-switch.fr-desktop:hover {\n  background: #ebebeb;\n}\n"
  },
  {
    "path": "src/main/resources/static/plugins/froala-editor/css/plugins/colors.css",
    "content": "/*!\n * froala_editor v2.9.1 (https://www.froala.com/wysiwyg-editor)\n * License https://froala.com/wysiwyg-editor/terms/\n * Copyright 2014-2018 Froala Labs\n */\n\n.clearfix::after {\n  clear: both;\n  display: block;\n  content: \"\";\n  height: 0;\n}\n.hide-by-clipping {\n  position: absolute;\n  width: 1px;\n  height: 1px;\n  padding: 0;\n  margin: -1px;\n  overflow: hidden;\n  clip: rect(0, 0, 0, 0);\n  border: 0;\n}\n.fr-popup .fr-colors-tabs {\n  -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n  -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n  margin-bottom: 5px;\n  line-height: 16px;\n  margin-left: -2px;\n  margin-right: -2px;\n}\n.fr-popup .fr-colors-tabs .fr-colors-tab {\n  display: inline-block;\n  width: 50%;\n  cursor: pointer;\n  text-align: center;\n  color: #222222;\n  font-size: 13px;\n  padding: 8px 0;\n  position: relative;\n}\n.fr-popup .fr-colors-tabs .fr-colors-tab:hover,\n.fr-popup .fr-colors-tabs .fr-colors-tab:focus {\n  color: #1e88e5;\n}\n.fr-popup .fr-colors-tabs .fr-colors-tab[data-param1=\"background\"]::after {\n  position: absolute;\n  bottom: 0;\n  left: 0;\n  width: 100%;\n  height: 2px;\n  background: #1e88e5;\n  content: '';\n  -webkit-transition: transform 0.2s ease 0s;\n  -moz-transition: transform 0.2s ease 0s;\n  -ms-transition: transform 0.2s ease 0s;\n  -o-transition: transform 0.2s ease 0s;\n}\n.fr-popup .fr-colors-tabs .fr-colors-tab.fr-selected-tab {\n  color: #1e88e5;\n}\n.fr-popup .fr-colors-tabs .fr-colors-tab.fr-selected-tab[data-param1=\"text\"] ~ [data-param1=\"background\"]::after {\n  -webkit-transform: translate3d(-100%, 0, 0);\n  -moz-transform: translate3d(-100%, 0, 0);\n  -ms-transform: translate3d(-100%, 0, 0);\n  -o-transform: translate3d(-100%, 0, 0);\n}\n.fr-popup .fr-color-hex-layer {\n  width: 100%;\n  margin: 0px;\n  padding: 10px;\n}\n.fr-popup .fr-color-hex-layer .fr-input-line {\n  float: left;\n  width: calc(100% - 50px);\n  padding: 8px 0 0;\n}\n.fr-popup .fr-color-hex-layer .fr-action-buttons {\n  float: right;\n  width: 50px;\n}\n.fr-popup .fr-color-hex-layer .fr-action-buttons button {\n  background-color: #1e88e5;\n  color: #FFF;\n  border-radius: 2px;\n  -moz-border-radius: 2px;\n  -webkit-border-radius: 2px;\n  -moz-background-clip: padding;\n  -webkit-background-clip: padding-box;\n  background-clip: padding-box;\n  font-size: 13px;\n  height: 32px;\n}\n.fr-popup .fr-color-hex-layer .fr-action-buttons button:hover {\n  background-color: #166dba;\n  color: #FFF;\n}\n.fr-popup .fr-separator + .fr-colors-tabs {\n  -webkit-box-shadow: none;\n  -moz-box-shadow: none;\n  box-shadow: none;\n  margin-left: 2px;\n  margin-right: 2px;\n}\n.fr-popup .fr-color-set {\n  line-height: 0;\n  display: none;\n}\n.fr-popup .fr-color-set.fr-selected-set {\n  display: block;\n}\n.fr-popup .fr-color-set > span {\n  display: inline-block;\n  width: 32px;\n  height: 32px;\n  position: relative;\n  z-index: 1;\n}\n.fr-popup .fr-color-set > span > i,\n.fr-popup .fr-color-set > span > svg {\n  text-align: center;\n  line-height: 32px;\n  height: 32px;\n  width: 32px;\n  font-size: 13px;\n  position: absolute;\n  bottom: 0;\n  cursor: default;\n  left: 0;\n}\n.fr-popup .fr-color-set > span .fr-selected-color {\n  color: #ffffff;\n  font-family: FontAwesome;\n  font-size: 13px;\n  font-weight: 400;\n  line-height: 32px;\n  position: absolute;\n  top: 0;\n  bottom: 0;\n  right: 0;\n  left: 0;\n  text-align: center;\n  cursor: default;\n}\n.fr-popup .fr-color-set > span:hover,\n.fr-popup .fr-color-set > span:focus {\n  outline: 1px solid #222222;\n  z-index: 2;\n}\n.fr-rtl .fr-popup .fr-colors-tabs .fr-colors-tab.fr-selected-tab[data-param1=\"text\"] ~ [data-param1=\"background\"]::after {\n  -webkit-transform: translate3d(100%, 0, 0);\n  -moz-transform: translate3d(100%, 0, 0);\n  -ms-transform: translate3d(100%, 0, 0);\n  -o-transform: translate3d(100%, 0, 0);\n}\n"
  },
  {
    "path": "src/main/resources/static/plugins/froala-editor/css/plugins/draggable.css",
    "content": "/*!\n * froala_editor v2.9.1 (https://www.froala.com/wysiwyg-editor)\n * License https://froala.com/wysiwyg-editor/terms/\n * Copyright 2014-2018 Froala Labs\n */\n\n.clearfix::after {\n  clear: both;\n  display: block;\n  content: \"\";\n  height: 0;\n}\n.hide-by-clipping {\n  position: absolute;\n  width: 1px;\n  height: 1px;\n  padding: 0;\n  margin: -1px;\n  overflow: hidden;\n  clip: rect(0, 0, 0, 0);\n  border: 0;\n}\n.fr-drag-helper {\n  background: #1e88e5;\n  height: 2px;\n  margin-top: -1px;\n  -webkit-opacity: 0.2;\n  -moz-opacity: 0.2;\n  opacity: 0.2;\n  -ms-filter: \"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)\";\n  position: absolute;\n  z-index: 2147483640;\n  display: none;\n}\n.fr-drag-helper.fr-visible {\n  display: block;\n}\n.fr-dragging {\n  -webkit-opacity: 0.4;\n  -moz-opacity: 0.4;\n  opacity: 0.4;\n  -ms-filter: \"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)\";\n}\n"
  },
  {
    "path": "src/main/resources/static/plugins/froala-editor/css/plugins/emoticons.css",
    "content": "/*!\n * froala_editor v2.9.1 (https://www.froala.com/wysiwyg-editor)\n * License https://froala.com/wysiwyg-editor/terms/\n * Copyright 2014-2018 Froala Labs\n */\n\n.clearfix::after {\n  clear: both;\n  display: block;\n  content: \"\";\n  height: 0;\n}\n.hide-by-clipping {\n  position: absolute;\n  width: 1px;\n  height: 1px;\n  padding: 0;\n  margin: -1px;\n  overflow: hidden;\n  clip: rect(0, 0, 0, 0);\n  border: 0;\n}\n.fr-popup .fr-emoticon {\n  display: inline-block;\n  font-size: 20px;\n  width: 20px;\n  padding: 5px;\n  line-height: 1;\n  cursor: default;\n  font-weight: normal;\n  font-family: \"Apple Color Emoji\", \"Segoe UI Emoji\", \"NotoColorEmoji\", \"Segoe UI Symbol\", \"Android Emoji\", \"EmojiSymbols\";\n  -webkit-box-sizing: content-box;\n  -moz-box-sizing: content-box;\n  box-sizing: content-box;\n}\n.fr-popup .fr-emoticon img {\n  height: 20px;\n}\n.fr-popup .fr-link:focus {\n  outline: 0;\n  background: #ebebeb;\n}\n"
  },
  {
    "path": "src/main/resources/static/plugins/froala-editor/css/plugins/file.css",
    "content": "/*!\n * froala_editor v2.9.1 (https://www.froala.com/wysiwyg-editor)\n * License https://froala.com/wysiwyg-editor/terms/\n * Copyright 2014-2018 Froala Labs\n */\n\n.clearfix::after {\n  clear: both;\n  display: block;\n  content: \"\";\n  height: 0;\n}\n.hide-by-clipping {\n  position: absolute;\n  width: 1px;\n  height: 1px;\n  padding: 0;\n  margin: -1px;\n  overflow: hidden;\n  clip: rect(0, 0, 0, 0);\n  border: 0;\n}\n.fr-popup .fr-file-upload-layer {\n  border: dashed 2px #bdbdbd;\n  padding: 25px 0;\n  position: relative;\n  font-size: 14px;\n  letter-spacing: 1px;\n  line-height: 140%;\n  -webkit-box-sizing: border-box;\n  -moz-box-sizing: border-box;\n  box-sizing: border-box;\n  text-align: center;\n}\n.fr-popup .fr-file-upload-layer:hover {\n  background: #ebebeb;\n}\n.fr-popup .fr-file-upload-layer.fr-drop {\n  background: #ebebeb;\n  border-color: #1e88e5;\n}\n.fr-popup .fr-file-upload-layer .fr-form {\n  -webkit-opacity: 0;\n  -moz-opacity: 0;\n  opacity: 0;\n  -ms-filter: \"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)\";\n  position: absolute;\n  top: 0;\n  bottom: 0;\n  left: 0;\n  right: 0;\n  z-index: 2147483640;\n  overflow: hidden;\n  margin: 0 !important;\n  padding: 0 !important;\n  width: 100% !important;\n}\n.fr-popup .fr-file-upload-layer .fr-form input {\n  cursor: pointer;\n  position: absolute;\n  right: 0px;\n  top: 0px;\n  bottom: 0px;\n  width: 500%;\n  height: 100%;\n  margin: 0px;\n  font-size: 400px;\n}\n.fr-popup .fr-file-progress-bar-layer {\n  -webkit-box-sizing: border-box;\n  -moz-box-sizing: border-box;\n  box-sizing: border-box;\n}\n.fr-popup .fr-file-progress-bar-layer > h3 {\n  font-size: 16px;\n  margin: 10px 0;\n  font-weight: normal;\n}\n.fr-popup .fr-file-progress-bar-layer > div.fr-action-buttons {\n  display: none;\n}\n.fr-popup .fr-file-progress-bar-layer > div.fr-loader {\n  background: #bcdbf7;\n  height: 10px;\n  width: 100%;\n  margin-top: 20px;\n  overflow: hidden;\n  position: relative;\n}\n.fr-popup .fr-file-progress-bar-layer > div.fr-loader span {\n  display: block;\n  height: 100%;\n  width: 0%;\n  background: #1e88e5;\n  -webkit-transition: width 0.2s ease 0s;\n  -moz-transition: width 0.2s ease 0s;\n  -ms-transition: width 0.2s ease 0s;\n  -o-transition: width 0.2s ease 0s;\n}\n.fr-popup .fr-file-progress-bar-layer > div.fr-loader.fr-indeterminate span {\n  width: 30% !important;\n  position: absolute;\n  top: 0;\n  -webkit-animation: loading 2s linear infinite;\n  -moz-animation: loading 2s linear infinite;\n  -o-animation: loading 2s linear infinite;\n  animation: loading 2s linear infinite;\n}\n.fr-popup .fr-file-progress-bar-layer.fr-error > div.fr-loader {\n  display: none;\n}\n.fr-popup .fr-file-progress-bar-layer.fr-error > div.fr-action-buttons {\n  display: block;\n}\n@keyframes loading {\n  from {\n    left: -25%;\n  }\n  to {\n    left: 100%;\n  }\n}\n@-webkit-keyframes loading {\n  from {\n    left: -25%;\n  }\n  to {\n    left: 100%;\n  }\n}\n@-moz-keyframes loading {\n  from {\n    left: -25%;\n  }\n  to {\n    left: 100%;\n  }\n}\n@-o-keyframes loading {\n  from {\n    left: -25%;\n  }\n  to {\n    left: 100%;\n  }\n}\n"
  },
  {
    "path": "src/main/resources/static/plugins/froala-editor/css/plugins/fullscreen.css",
    "content": "/*!\n * froala_editor v2.9.1 (https://www.froala.com/wysiwyg-editor)\n * License https://froala.com/wysiwyg-editor/terms/\n * Copyright 2014-2018 Froala Labs\n */\n\nbody.fr-fullscreen {\n  overflow: hidden;\n  height: 100%;\n  width: 100%;\n  position: fixed;\n}\n.fr-box.fr-fullscreen {\n  margin: 0 !important;\n  position: fixed;\n  top: 0;\n  left: 0;\n  bottom: 0;\n  right: 0;\n  z-index: 2147483630 !important;\n  width: auto !important;\n}\n.fr-box.fr-fullscreen .fr-toolbar.fr-top {\n  top: 0 !important;\n}\n.fr-box.fr-fullscreen .fr-toolbar.fr-bottom {\n  bottom: 0 !important;\n}\n"
  },
  {
    "path": "src/main/resources/static/plugins/froala-editor/css/plugins/help.css",
    "content": "/*!\n * froala_editor v2.9.1 (https://www.froala.com/wysiwyg-editor)\n * License https://froala.com/wysiwyg-editor/terms/\n * Copyright 2014-2018 Froala Labs\n */\n\n.clearfix::after {\n  clear: both;\n  display: block;\n  content: \"\";\n  height: 0;\n}\n.hide-by-clipping {\n  position: absolute;\n  width: 1px;\n  height: 1px;\n  padding: 0;\n  margin: -1px;\n  overflow: hidden;\n  clip: rect(0, 0, 0, 0);\n  border: 0;\n}\n.fr-modal .fr-modal-wrapper .fr-modal-body .fr-help-modal {\n  text-align: left;\n  padding: 20px 20px 10px;\n}\n.fr-modal .fr-modal-wrapper .fr-modal-body .fr-help-modal table {\n  border-collapse: collapse;\n  font-size: 14px;\n  line-height: 1.5;\n  width: 100%;\n}\n.fr-modal .fr-modal-wrapper .fr-modal-body .fr-help-modal table + table {\n  margin-top: 20px;\n}\n.fr-modal .fr-modal-wrapper .fr-modal-body .fr-help-modal table tr {\n  border: 0;\n}\n.fr-modal .fr-modal-wrapper .fr-modal-body .fr-help-modal table th,\n.fr-modal .fr-modal-wrapper .fr-modal-body .fr-help-modal table td {\n  padding: 6px 0 4px;\n}\n.fr-modal .fr-modal-wrapper .fr-modal-body .fr-help-modal table tbody tr {\n  border-bottom: solid 1px #ebebeb;\n}\n.fr-modal .fr-modal-wrapper .fr-modal-body .fr-help-modal table tbody td:first-child {\n  width: 60%;\n  color: #646464;\n}\n.fr-modal .fr-modal-wrapper .fr-modal-body .fr-help-modal table tbody td:nth-child(n+2) {\n  letter-spacing: 0.5px;\n}\n"
  },
  {
    "path": "src/main/resources/static/plugins/froala-editor/css/plugins/image.css",
    "content": "/*!\n * froala_editor v2.9.1 (https://www.froala.com/wysiwyg-editor)\n * License https://froala.com/wysiwyg-editor/terms/\n * Copyright 2014-2018 Froala Labs\n */\n\n.clearfix::after {\n  clear: both;\n  display: block;\n  content: \"\";\n  height: 0;\n}\n.hide-by-clipping {\n  position: absolute;\n  width: 1px;\n  height: 1px;\n  padding: 0;\n  margin: -1px;\n  overflow: hidden;\n  clip: rect(0, 0, 0, 0);\n  border: 0;\n}\n.fr-element img {\n  cursor: pointer;\n}\n.fr-image-resizer {\n  position: absolute;\n  border: solid 1px #1e88e5;\n  display: none;\n  user-select: none;\n  -o-user-select: none;\n  -moz-user-select: none;\n  -khtml-user-select: none;\n  -webkit-user-select: none;\n  -ms-user-select: none;\n  -webkit-box-sizing: content-box;\n  -moz-box-sizing: content-box;\n  box-sizing: content-box;\n  z-index: 2;\n}\n.fr-image-resizer.fr-active {\n  display: block;\n}\n.fr-image-resizer .fr-handler {\n  display: block;\n  position: absolute;\n  background: #1e88e5;\n  border: solid 1px #ffffff;\n  z-index: 4;\n  -webkit-box-sizing: border-box;\n  -moz-box-sizing: border-box;\n  box-sizing: border-box;\n}\n.fr-image-resizer .fr-handler.fr-hnw {\n  cursor: nw-resize;\n}\n.fr-image-resizer .fr-handler.fr-hne {\n  cursor: ne-resize;\n}\n.fr-image-resizer .fr-handler.fr-hsw {\n  cursor: sw-resize;\n}\n.fr-image-resizer .fr-handler.fr-hse {\n  cursor: se-resize;\n}\n.fr-image-resizer .fr-handler {\n  width: 12px;\n  height: 12px;\n}\n.fr-image-resizer .fr-handler.fr-hnw {\n  left: -6px;\n  top: -6px;\n}\n.fr-image-resizer .fr-handler.fr-hne {\n  right: -6px;\n  top: -6px;\n}\n.fr-image-resizer .fr-handler.fr-hsw {\n  left: -6px;\n  bottom: -6px;\n}\n.fr-image-resizer .fr-handler.fr-hse {\n  right: -6px;\n  bottom: -6px;\n}\n@media (min-width: 1200px) {\n  .fr-image-resizer .fr-handler {\n    width: 10px;\n    height: 10px;\n  }\n  .fr-image-resizer .fr-handler.fr-hnw {\n    left: -5px;\n    top: -5px;\n  }\n  .fr-image-resizer .fr-handler.fr-hne {\n    right: -5px;\n    top: -5px;\n  }\n  .fr-image-resizer .fr-handler.fr-hsw {\n    left: -5px;\n    bottom: -5px;\n  }\n  .fr-image-resizer .fr-handler.fr-hse {\n    right: -5px;\n    bottom: -5px;\n  }\n}\n.fr-image-overlay {\n  position: fixed;\n  top: 0;\n  left: 0;\n  bottom: 0;\n  right: 0;\n  z-index: 2147483640;\n  display: none;\n}\n.fr-popup .fr-image-upload-layer {\n  border: dashed 2px #bdbdbd;\n  padding: 25px 0;\n  position: relative;\n  font-size: 14px;\n  letter-spacing: 1px;\n  line-height: 140%;\n  text-align: center;\n}\n.fr-popup .fr-image-upload-layer:hover {\n  background: #ebebeb;\n}\n.fr-popup .fr-image-upload-layer.fr-drop {\n  background: #ebebeb;\n  border-color: #1e88e5;\n}\n.fr-popup .fr-image-upload-layer .fr-form {\n  -webkit-opacity: 0;\n  -moz-opacity: 0;\n  opacity: 0;\n  -ms-filter: \"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)\";\n  position: absolute;\n  top: 0;\n  bottom: 0;\n  left: 0;\n  right: 0;\n  z-index: 2147483640;\n  overflow: hidden;\n  margin: 0 !important;\n  padding: 0 !important;\n  width: 100% !important;\n}\n.fr-popup .fr-image-upload-layer .fr-form input {\n  cursor: pointer;\n  position: absolute;\n  right: 0px;\n  top: 0px;\n  bottom: 0px;\n  width: 500%;\n  height: 100%;\n  margin: 0px;\n  font-size: 400px;\n}\n.fr-popup .fr-image-progress-bar-layer > h3 {\n  font-size: 16px;\n  margin: 10px 0;\n  font-weight: normal;\n}\n.fr-popup .fr-image-progress-bar-layer > div.fr-action-buttons {\n  display: none;\n}\n.fr-popup .fr-image-progress-bar-layer > div.fr-loader {\n  background: #bcdbf7;\n  height: 10px;\n  width: 100%;\n  margin-top: 20px;\n  overflow: hidden;\n  position: relative;\n}\n.fr-popup .fr-image-progress-bar-layer > div.fr-loader span {\n  display: block;\n  height: 100%;\n  width: 0%;\n  background: #1e88e5;\n  -webkit-transition: width 0.2s ease 0s;\n  -moz-transition: width 0.2s ease 0s;\n  -ms-transition: width 0.2s ease 0s;\n  -o-transition: width 0.2s ease 0s;\n}\n.fr-popup .fr-image-progress-bar-layer > div.fr-loader.fr-indeterminate span {\n  width: 30% !important;\n  position: absolute;\n  top: 0;\n  -webkit-animation: loading 2s linear infinite;\n  -moz-animation: loading 2s linear infinite;\n  -o-animation: loading 2s linear infinite;\n  animation: loading 2s linear infinite;\n}\n.fr-popup .fr-image-progress-bar-layer.fr-error > div.fr-loader {\n  display: none;\n}\n.fr-popup .fr-image-progress-bar-layer.fr-error > div.fr-action-buttons {\n  display: block;\n}\n.fr-image-size-layer .fr-image-group .fr-input-line {\n  width: calc(50% - 5px);\n  display: inline-block;\n}\n.fr-image-size-layer .fr-image-group .fr-input-line + .fr-input-line {\n  margin-left: 10px;\n}\n.fr-uploading {\n  -webkit-opacity: 0.4;\n  -moz-opacity: 0.4;\n  opacity: 0.4;\n  -ms-filter: \"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)\";\n}\n@keyframes loading {\n  from {\n    left: -25%;\n  }\n  to {\n    left: 100%;\n  }\n}\n@-webkit-keyframes loading {\n  from {\n    left: -25%;\n  }\n  to {\n    left: 100%;\n  }\n}\n@-moz-keyframes loading {\n  from {\n    left: -25%;\n  }\n  to {\n    left: 100%;\n  }\n}\n@-o-keyframes loading {\n  from {\n    left: -25%;\n  }\n  to {\n    left: 100%;\n  }\n}\n"
  },
  {
    "path": "src/main/resources/static/plugins/froala-editor/css/plugins/image_manager.css",
    "content": "/*!\n * froala_editor v2.9.1 (https://www.froala.com/wysiwyg-editor)\n * License https://froala.com/wysiwyg-editor/terms/\n * Copyright 2014-2018 Froala Labs\n */\n\n.clearfix::after {\n  clear: both;\n  display: block;\n  content: \"\";\n  height: 0;\n}\n.hide-by-clipping {\n  position: absolute;\n  width: 1px;\n  height: 1px;\n  padding: 0;\n  margin: -1px;\n  overflow: hidden;\n  clip: rect(0, 0, 0, 0);\n  border: 0;\n}\n.fr-modal-head .fr-modal-head-line::after {\n  clear: both;\n  display: block;\n  content: \"\";\n  height: 0;\n}\n.fr-modal-head .fr-modal-head-line i.fr-modal-more {\n  float: left;\n  opacity: 1;\n  -webkit-transition: padding 0.2s ease 0s, width 0.2s ease 0s, opacity 0.2s ease 0s;\n  -moz-transition: padding 0.2s ease 0s, width 0.2s ease 0s, opacity 0.2s ease 0s;\n  -ms-transition: padding 0.2s ease 0s, width 0.2s ease 0s, opacity 0.2s ease 0s;\n  -o-transition: padding 0.2s ease 0s, width 0.2s ease 0s, opacity 0.2s ease 0s;\n  padding: 12px;\n}\n.fr-modal-head .fr-modal-head-line i.fr-modal-more.fr-not-available {\n  opacity: 0;\n  width: 0;\n  padding: 12px 0;\n}\n.fr-modal-head .fr-modal-tags {\n  display: none;\n  text-align: left;\n}\n.fr-modal-head .fr-modal-tags a {\n  display: inline-block;\n  opacity: 0;\n  padding: 6px 8px;\n  margin: 8px 0 8px 8px;\n  text-decoration: none;\n  border-radius: 2px;\n  -moz-border-radius: 2px;\n  -webkit-border-radius: 2px;\n  -moz-background-clip: padding;\n  -webkit-background-clip: padding-box;\n  background-clip: padding-box;\n  color: #1e88e5;\n  -webkit-transition: opacity 0.2s ease 0s, background 0.2s ease 0s;\n  -moz-transition: opacity 0.2s ease 0s, background 0.2s ease 0s;\n  -ms-transition: opacity 0.2s ease 0s, background 0.2s ease 0s;\n  -o-transition: opacity 0.2s ease 0s, background 0.2s ease 0s;\n  cursor: pointer;\n}\n.fr-modal-head .fr-modal-tags a:focus {\n  outline: none;\n}\n.fr-modal-head .fr-modal-tags a.fr-selected-tag {\n  background: #d6d6d6;\n}\ndiv.fr-modal-body .fr-preloader {\n  display: block;\n  margin: 50px auto;\n}\ndiv.fr-modal-body div.fr-image-list {\n  text-align: center;\n  margin: 0 10px;\n  padding: 0;\n}\ndiv.fr-modal-body div.fr-image-list::after {\n  clear: both;\n  display: block;\n  content: \"\";\n  height: 0;\n}\ndiv.fr-modal-body div.fr-image-list .fr-list-column {\n  float: left;\n  width: calc((100% - 10px) / 2);\n}\n@media (min-width: 768px) and (max-width: 1199px) {\n  div.fr-modal-body div.fr-image-list .fr-list-column {\n    width: calc((100% - 20px) / 3);\n  }\n}\n@media (min-width: 1200px) {\n  div.fr-modal-body div.fr-image-list .fr-list-column {\n    width: calc((100% - 30px) / 4);\n  }\n}\ndiv.fr-modal-body div.fr-image-list .fr-list-column + .fr-list-column {\n  margin-left: 10px;\n}\ndiv.fr-modal-body div.fr-image-list div.fr-image-container {\n  position: relative;\n  width: 100%;\n  display: block;\n  -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n  -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n  border-radius: 2px;\n  -moz-border-radius: 2px;\n  -webkit-border-radius: 2px;\n  -moz-background-clip: padding;\n  -webkit-background-clip: padding-box;\n  background-clip: padding-box;\n  overflow: hidden;\n}\ndiv.fr-modal-body div.fr-image-list div.fr-image-container:first-child {\n  margin-top: 10px;\n}\ndiv.fr-modal-body div.fr-image-list div.fr-image-container + div {\n  margin-top: 10px;\n}\ndiv.fr-modal-body div.fr-image-list div.fr-image-container.fr-image-deleting::after {\n  position: absolute;\n  -webkit-opacity: 0.5;\n  -moz-opacity: 0.5;\n  opacity: 0.5;\n  -ms-filter: \"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)\";\n  -webkit-transition: opacity 0.2s ease 0s;\n  -moz-transition: opacity 0.2s ease 0s;\n  -ms-transition: opacity 0.2s ease 0s;\n  -o-transition: opacity 0.2s ease 0s;\n  background: #000000;\n  content: \"\";\n  top: 0;\n  left: 0;\n  bottom: 0;\n  right: 0;\n  z-index: 2;\n}\ndiv.fr-modal-body div.fr-image-list div.fr-image-container.fr-image-deleting::before {\n  content: attr(data-deleting);\n  color: #ffffff;\n  top: 0;\n  left: 0;\n  bottom: 0;\n  right: 0;\n  margin: auto;\n  position: absolute;\n  z-index: 3;\n  font-size: 15px;\n  height: 20px;\n}\ndiv.fr-modal-body div.fr-image-list div.fr-image-container.fr-empty {\n  height: 95px;\n  background: #cccccc;\n  z-index: 1;\n}\ndiv.fr-modal-body div.fr-image-list div.fr-image-container.fr-empty::after {\n  position: absolute;\n  margin: auto;\n  top: 0;\n  bottom: 0;\n  left: 0;\n  right: 0;\n  content: attr(data-loading);\n  display: inline-block;\n  height: 20px;\n}\ndiv.fr-modal-body div.fr-image-list div.fr-image-container img {\n  width: 100%;\n  vertical-align: middle;\n  position: relative;\n  z-index: 2;\n  -webkit-opacity: 1;\n  -moz-opacity: 1;\n  opacity: 1;\n  -ms-filter: \"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)\";\n  -webkit-transition: opacity 0.2s ease 0s, filter 0.2s ease 0s;\n  -moz-transition: opacity 0.2s ease 0s, filter 0.2s ease 0s;\n  -ms-transition: opacity 0.2s ease 0s, filter 0.2s ease 0s;\n  -o-transition: opacity 0.2s ease 0s, filter 0.2s ease 0s;\n  -webkit-transform: translateZ(0);\n  -moz-transform: translateZ(0);\n  -ms-transform: translateZ(0);\n  -o-transform: translateZ(0);\n}\ndiv.fr-modal-body div.fr-image-list div.fr-image-container.fr-mobile-selected img {\n  -webkit-opacity: 0.75;\n  -moz-opacity: 0.75;\n  opacity: 0.75;\n  -ms-filter: \"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)\";\n}\ndiv.fr-modal-body div.fr-image-list div.fr-image-container.fr-mobile-selected .fr-delete-img,\ndiv.fr-modal-body div.fr-image-list div.fr-image-container.fr-mobile-selected .fr-insert-img {\n  display: inline-block;\n}\ndiv.fr-modal-body div.fr-image-list div.fr-image-container .fr-delete-img,\ndiv.fr-modal-body div.fr-image-list div.fr-image-container .fr-insert-img {\n  display: none;\n  top: 50%;\n  border-radius: 100%;\n  -moz-border-radius: 100%;\n  -webkit-border-radius: 100%;\n  -moz-background-clip: padding;\n  -webkit-background-clip: padding-box;\n  background-clip: padding-box;\n  -webkit-transition: background 0.2s ease 0s, color 0.2s ease 0s;\n  -moz-transition: background 0.2s ease 0s, color 0.2s ease 0s;\n  -ms-transition: background 0.2s ease 0s, color 0.2s ease 0s;\n  -o-transition: background 0.2s ease 0s, color 0.2s ease 0s;\n  -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n  -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n  position: absolute;\n  cursor: pointer;\n  margin: 0;\n  width: 36px;\n  height: 36px;\n  line-height: 36px;\n  text-decoration: none;\n  z-index: 3;\n}\ndiv.fr-modal-body div.fr-image-list div.fr-image-container .fr-delete-img {\n  background: #b8312f;\n  color: #ffffff;\n  left: 50%;\n  -webkit-transform: translateY(-50%) translateX(25%);\n  -moz-transform: translateY(-50%) translateX(25%);\n  -ms-transform: translateY(-50%) translateX(25%);\n  -o-transform: translateY(-50%) translateX(25%);\n}\ndiv.fr-modal-body div.fr-image-list div.fr-image-container .fr-insert-img {\n  background: #ffffff;\n  color: #1e88e5;\n  left: 50%;\n  -webkit-transform: translateY(-50%) translateX(-125%);\n  -moz-transform: translateY(-50%) translateX(-125%);\n  -ms-transform: translateY(-50%) translateX(-125%);\n  -o-transform: translateY(-50%) translateX(-125%);\n}\n.fr-desktop .fr-modal-wrapper .fr-modal-head .fr-modal-tags a:hover {\n  background: #ebebeb;\n}\n.fr-desktop .fr-modal-wrapper .fr-modal-head .fr-modal-tags a.fr-selected-tag {\n  background: #d6d6d6;\n}\n.fr-desktop .fr-modal-wrapper div.fr-modal-body div.fr-image-list div.fr-image-container:hover img {\n  -webkit-opacity: 0.75;\n  -moz-opacity: 0.75;\n  opacity: 0.75;\n  -ms-filter: \"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)\";\n}\n.fr-desktop .fr-modal-wrapper div.fr-modal-body div.fr-image-list div.fr-image-container:hover .fr-delete-img,\n.fr-desktop .fr-modal-wrapper div.fr-modal-body div.fr-image-list div.fr-image-container:hover .fr-insert-img {\n  display: inline-block;\n}\n.fr-desktop .fr-modal-wrapper div.fr-modal-body div.fr-image-list div.fr-image-container .fr-delete-img:hover {\n  background: #bf4644;\n  color: #ffffff;\n}\n.fr-desktop .fr-modal-wrapper div.fr-modal-body div.fr-image-list div.fr-image-container .fr-insert-img:hover {\n  background: #ebebeb;\n}\n"
  },
  {
    "path": "src/main/resources/static/plugins/froala-editor/css/plugins/line_breaker.css",
    "content": "/*!\n * froala_editor v2.9.1 (https://www.froala.com/wysiwyg-editor)\n * License https://froala.com/wysiwyg-editor/terms/\n * Copyright 2014-2018 Froala Labs\n */\n\n.clearfix::after {\n  clear: both;\n  display: block;\n  content: \"\";\n  height: 0;\n}\n.hide-by-clipping {\n  position: absolute;\n  width: 1px;\n  height: 1px;\n  padding: 0;\n  margin: -1px;\n  overflow: hidden;\n  clip: rect(0, 0, 0, 0);\n  border: 0;\n}\n.fr-line-breaker {\n  cursor: text;\n  border-top: 1px solid #1e88e5;\n  position: fixed;\n  z-index: 2;\n  display: none;\n}\n.fr-line-breaker.fr-visible {\n  display: block;\n}\n.fr-line-breaker a.fr-floating-btn {\n  position: absolute;\n  left: calc(50% - (32px / 2));\n  top: -16px;\n}\n"
  },
  {
    "path": "src/main/resources/static/plugins/froala-editor/css/plugins/quick_insert.css",
    "content": "/*!\n * froala_editor v2.9.1 (https://www.froala.com/wysiwyg-editor)\n * License https://froala.com/wysiwyg-editor/terms/\n * Copyright 2014-2018 Froala Labs\n */\n\n.clearfix::after {\n  clear: both;\n  display: block;\n  content: \"\";\n  height: 0;\n}\n.hide-by-clipping {\n  position: absolute;\n  width: 1px;\n  height: 1px;\n  padding: 0;\n  margin: -1px;\n  overflow: hidden;\n  clip: rect(0, 0, 0, 0);\n  border: 0;\n}\n.fr-quick-insert {\n  position: absolute;\n  z-index: 2147483639;\n  white-space: nowrap;\n  padding-right: 5px;\n  margin-left: -5px;\n  -webkit-box-sizing: content-box;\n  -moz-box-sizing: content-box;\n  box-sizing: content-box;\n}\n.fr-quick-insert.fr-on a.fr-floating-btn svg {\n  -webkit-transform: rotate(135deg);\n  -moz-transform: rotate(135deg);\n  -ms-transform: rotate(135deg);\n  -o-transform: rotate(135deg);\n}\n.fr-quick-insert.fr-hidden {\n  display: none;\n}\n.fr-qi-helper {\n  position: absolute;\n  z-index: 3;\n  padding-left: 16px;\n  white-space: nowrap;\n}\n.fr-qi-helper a.fr-btn.fr-floating-btn {\n  text-align: center;\n  display: inline-block;\n  color: #222222;\n  -webkit-opacity: 0;\n  -moz-opacity: 0;\n  opacity: 0;\n  -ms-filter: \"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)\";\n  -webkit-transform: scale(0);\n  -moz-transform: scale(0);\n  -ms-transform: scale(0);\n  -o-transform: scale(0);\n}\n.fr-qi-helper a.fr-btn.fr-floating-btn.fr-size-1 {\n  -webkit-opacity: 1;\n  -moz-opacity: 1;\n  opacity: 1;\n  -ms-filter: \"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)\";\n  -webkit-transform: scale(1);\n  -moz-transform: scale(1);\n  -ms-transform: scale(1);\n  -o-transform: scale(1);\n}\n"
  },
  {
    "path": "src/main/resources/static/plugins/froala-editor/css/plugins/special_characters.css",
    "content": "/*!\n * froala_editor v2.9.1 (https://www.froala.com/wysiwyg-editor)\n * License https://froala.com/wysiwyg-editor/terms/\n * Copyright 2014-2018 Froala Labs\n */\n\n.clearfix::after {\n  clear: both;\n  display: block;\n  content: \"\";\n  height: 0;\n}\n.hide-by-clipping {\n  position: absolute;\n  width: 1px;\n  height: 1px;\n  padding: 0;\n  margin: -1px;\n  overflow: hidden;\n  clip: rect(0, 0, 0, 0);\n  border: 0;\n}\n.fr-modal .fr-modal-wrapper .fr-modal-body .fr-special-characters-modal {\n  text-align: left;\n  padding: 20px 20px 10px;\n}\n.fr-modal .fr-modal-wrapper .fr-modal-body .fr-special-characters-modal .fr-special-characters-list {\n  margin-bottom: 20px;\n}\n.fr-modal .fr-modal-wrapper .fr-modal-body .fr-special-characters-modal .fr-special-characters-title {\n  font-weight: bold;\n  font-size: 14px;\n  padding: 6px 0 4px;\n  margin: 0 0 5px;\n}\n.fr-modal .fr-modal-wrapper .fr-modal-body .fr-special-characters-modal .fr-special-character {\n  display: inline-block;\n  font-size: 16px;\n  width: 20px;\n  height: 20px;\n  padding: 5px;\n  line-height: 20px;\n  cursor: default;\n  font-weight: normal;\n  -webkit-box-sizing: content-box;\n  -moz-box-sizing: content-box;\n  box-sizing: content-box;\n  text-align: center;\n  border: 1px solid #cccccc;\n  margin: -1px 0 0 -1px;\n}\n"
  },
  {
    "path": "src/main/resources/static/plugins/froala-editor/css/plugins/table.css",
    "content": "/*!\n * froala_editor v2.9.1 (https://www.froala.com/wysiwyg-editor)\n * License https://froala.com/wysiwyg-editor/terms/\n * Copyright 2014-2018 Froala Labs\n */\n\n.clearfix::after {\n  clear: both;\n  display: block;\n  content: \"\";\n  height: 0;\n}\n.hide-by-clipping {\n  position: absolute;\n  width: 1px;\n  height: 1px;\n  padding: 0;\n  margin: -1px;\n  overflow: hidden;\n  clip: rect(0, 0, 0, 0);\n  border: 0;\n}\n.fr-element table td.fr-selected-cell,\n.fr-element table th.fr-selected-cell {\n  border: 1px double #1e88e5;\n}\n.fr-element table tr {\n  user-select: none;\n  -o-user-select: none;\n  -moz-user-select: none;\n  -khtml-user-select: none;\n  -webkit-user-select: none;\n  -ms-user-select: none;\n}\n.fr-element table td,\n.fr-element table th {\n  user-select: text;\n  -o-user-select: text;\n  -moz-user-select: text;\n  -khtml-user-select: text;\n  -webkit-user-select: text;\n  -ms-user-select: text;\n}\n.fr-element .fr-no-selection table td,\n.fr-element .fr-no-selection table th {\n  user-select: none;\n  -o-user-select: none;\n  -moz-user-select: none;\n  -khtml-user-select: none;\n  -webkit-user-select: none;\n  -ms-user-select: none;\n}\n.fr-table-resizer {\n  cursor: col-resize;\n  position: absolute;\n  z-index: 3;\n  display: none;\n}\n.fr-table-resizer.fr-moving {\n  z-index: 2;\n}\n.fr-table-resizer div {\n  -webkit-opacity: 0;\n  -moz-opacity: 0;\n  opacity: 0;\n  -ms-filter: \"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)\";\n  border-right: 1px solid #1e88e5;\n}\n.fr-no-selection {\n  user-select: none;\n  -o-user-select: none;\n  -moz-user-select: none;\n  -khtml-user-select: none;\n  -webkit-user-select: none;\n  -ms-user-select: none;\n}\n.fr-popup .fr-table-colors-hex-layer {\n  width: 100%;\n  margin: 0px;\n  padding: 10px;\n}\n.fr-popup .fr-table-colors-hex-layer .fr-input-line {\n  float: left;\n  width: calc(100% - 50px);\n  padding: 8px 0 0;\n}\n.fr-popup .fr-table-colors-hex-layer .fr-action-buttons {\n  float: right;\n  width: 50px;\n}\n.fr-popup .fr-table-colors-hex-layer .fr-action-buttons button {\n  background-color: #1e88e5;\n  color: #FFF;\n  border-radius: 2px;\n  -moz-border-radius: 2px;\n  -webkit-border-radius: 2px;\n  -moz-background-clip: padding;\n  -webkit-background-clip: padding-box;\n  background-clip: padding-box;\n  font-size: 13px;\n  height: 32px;\n}\n.fr-popup .fr-table-colors-hex-layer .fr-action-buttons button:hover {\n  background-color: #166dba;\n  color: #FFF;\n}\n.fr-popup .fr-table-size .fr-table-size-info {\n  text-align: center;\n  font-size: 14px;\n  padding: 8px;\n}\n.fr-popup .fr-table-size .fr-select-table-size {\n  line-height: 0;\n  padding: 0 5px 5px;\n  white-space: nowrap;\n}\n.fr-popup .fr-table-size .fr-select-table-size > span {\n  display: inline-block;\n  padding: 0px 4px 4px 0;\n  background: transparent;\n}\n.fr-popup .fr-table-size .fr-select-table-size > span > span {\n  display: inline-block;\n  width: 18px;\n  height: 18px;\n  border: 1px solid #dddddd;\n}\n.fr-popup .fr-table-size .fr-select-table-size > span.hover {\n  background: transparent;\n}\n.fr-popup .fr-table-size .fr-select-table-size > span.hover > span {\n  background: rgba(30, 136, 229, 0.3);\n  border: solid 1px #1e88e5;\n}\n.fr-popup .fr-table-size .fr-select-table-size .new-line::after {\n  clear: both;\n  display: block;\n  content: \"\";\n  height: 0;\n}\n.fr-popup.fr-above .fr-table-size .fr-select-table-size > span {\n  display: inline-block !important;\n}\n.fr-popup .fr-table-colors-buttons {\n  margin-bottom: 5px;\n}\n.fr-popup .fr-table-colors {\n  line-height: 0;\n  display: block;\n}\n.fr-popup .fr-table-colors > span {\n  display: inline-block;\n  width: 32px;\n  height: 32px;\n  position: relative;\n  z-index: 1;\n}\n.fr-popup .fr-table-colors > span > i {\n  text-align: center;\n  line-height: 32px;\n  height: 32px;\n  width: 32px;\n  font-size: 13px;\n  position: absolute;\n  bottom: 0;\n  cursor: default;\n  left: 0;\n}\n.fr-popup .fr-table-colors > span:focus {\n  outline: 1px solid #222222;\n  z-index: 2;\n}\n.fr-popup.fr-desktop .fr-table-size .fr-select-table-size > span > span {\n  width: 12px;\n  height: 12px;\n}\n.fr-insert-helper {\n  position: absolute;\n  z-index: 9999;\n  white-space: nowrap;\n}\n"
  },
  {
    "path": "src/main/resources/static/plugins/froala-editor/css/plugins/video.css",
    "content": "/*!\n * froala_editor v2.9.1 (https://www.froala.com/wysiwyg-editor)\n * License https://froala.com/wysiwyg-editor/terms/\n * Copyright 2014-2018 Froala Labs\n */\n\n.clearfix::after {\n  clear: both;\n  display: block;\n  content: \"\";\n  height: 0;\n}\n.hide-by-clipping {\n  position: absolute;\n  width: 1px;\n  height: 1px;\n  padding: 0;\n  margin: -1px;\n  overflow: hidden;\n  clip: rect(0, 0, 0, 0);\n  border: 0;\n}\n.fr-element .fr-video {\n  user-select: none;\n  -o-user-select: none;\n  -moz-user-select: none;\n  -khtml-user-select: none;\n  -webkit-user-select: none;\n  -ms-user-select: none;\n}\n.fr-element .fr-video::after {\n  position: absolute;\n  content: '';\n  z-index: 1;\n  top: 0;\n  left: 0;\n  right: 0;\n  bottom: 0;\n  cursor: pointer;\n  display: block;\n  background: rgba(0, 0, 0, 0);\n}\n.fr-element .fr-video.fr-active > * {\n  z-index: 2;\n  position: relative;\n}\n.fr-element .fr-video > * {\n  -webkit-box-sizing: content-box;\n  -moz-box-sizing: content-box;\n  box-sizing: content-box;\n  max-width: 100%;\n  border: none;\n}\n.fr-box .fr-video-resizer {\n  position: absolute;\n  border: solid 1px #1e88e5;\n  display: none;\n  user-select: none;\n  -o-user-select: none;\n  -moz-user-select: none;\n  -khtml-user-select: none;\n  -webkit-user-select: none;\n  -ms-user-select: none;\n}\n.fr-box .fr-video-resizer.fr-active {\n  display: block;\n}\n.fr-box .fr-video-resizer .fr-handler {\n  display: block;\n  position: absolute;\n  background: #1e88e5;\n  border: solid 1px #ffffff;\n  z-index: 4;\n  -webkit-box-sizing: border-box;\n  -moz-box-sizing: border-box;\n  box-sizing: border-box;\n}\n.fr-box .fr-video-resizer .fr-handler.fr-hnw {\n  cursor: nw-resize;\n}\n.fr-box .fr-video-resizer .fr-handler.fr-hne {\n  cursor: ne-resize;\n}\n.fr-box .fr-video-resizer .fr-handler.fr-hsw {\n  cursor: sw-resize;\n}\n.fr-box .fr-video-resizer .fr-handler.fr-hse {\n  cursor: se-resize;\n}\n.fr-box .fr-video-resizer .fr-handler {\n  width: 12px;\n  height: 12px;\n}\n.fr-box .fr-video-resizer .fr-handler.fr-hnw {\n  left: -6px;\n  top: -6px;\n}\n.fr-box .fr-video-resizer .fr-handler.fr-hne {\n  right: -6px;\n  top: -6px;\n}\n.fr-box .fr-video-resizer .fr-handler.fr-hsw {\n  left: -6px;\n  bottom: -6px;\n}\n.fr-box .fr-video-resizer .fr-handler.fr-hse {\n  right: -6px;\n  bottom: -6px;\n}\n@media (min-width: 1200px) {\n  .fr-box .fr-video-resizer .fr-handler {\n    width: 10px;\n    height: 10px;\n  }\n  .fr-box .fr-video-resizer .fr-handler.fr-hnw {\n    left: -5px;\n    top: -5px;\n  }\n  .fr-box .fr-video-resizer .fr-handler.fr-hne {\n    right: -5px;\n    top: -5px;\n  }\n  .fr-box .fr-video-resizer .fr-handler.fr-hsw {\n    left: -5px;\n    bottom: -5px;\n  }\n  .fr-box .fr-video-resizer .fr-handler.fr-hse {\n    right: -5px;\n    bottom: -5px;\n  }\n}\n.fr-popup .fr-video-size-layer .fr-video-group .fr-input-line {\n  width: calc(50% - 5px);\n  display: inline-block;\n}\n.fr-popup .fr-video-size-layer .fr-video-group .fr-input-line + .fr-input-line {\n  margin-left: 10px;\n}\n.fr-popup .fr-video-upload-layer {\n  border: dashed 2px #bdbdbd;\n  padding: 25px 0;\n  position: relative;\n  font-size: 14px;\n  letter-spacing: 1px;\n  line-height: 140%;\n  text-align: center;\n}\n.fr-popup .fr-video-upload-layer:hover {\n  background: #ebebeb;\n}\n.fr-popup .fr-video-upload-layer.fr-drop {\n  background: #ebebeb;\n  border-color: #1e88e5;\n}\n.fr-popup .fr-video-upload-layer .fr-form {\n  -webkit-opacity: 0;\n  -moz-opacity: 0;\n  opacity: 0;\n  -ms-filter: \"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)\";\n  position: absolute;\n  top: 0;\n  bottom: 0;\n  left: 0;\n  right: 0;\n  z-index: 2147483640;\n  overflow: hidden;\n  margin: 0 !important;\n  padding: 0 !important;\n  width: 100% !important;\n}\n.fr-popup .fr-video-upload-layer .fr-form input {\n  cursor: pointer;\n  position: absolute;\n  right: 0px;\n  top: 0px;\n  bottom: 0px;\n  width: 500%;\n  height: 100%;\n  margin: 0px;\n  font-size: 400px;\n}\n.fr-popup .fr-video-progress-bar-layer > h3 {\n  font-size: 16px;\n  margin: 10px 0;\n  font-weight: normal;\n}\n.fr-popup .fr-video-progress-bar-layer > div.fr-action-buttons {\n  display: none;\n}\n.fr-popup .fr-video-progress-bar-layer > div.fr-loader {\n  background: #bcdbf7;\n  height: 10px;\n  width: 100%;\n  margin-top: 20px;\n  overflow: hidden;\n  position: relative;\n}\n.fr-popup .fr-video-progress-bar-layer > div.fr-loader span {\n  display: block;\n  height: 100%;\n  width: 0%;\n  background: #1e88e5;\n  -webkit-transition: width 0.2s ease 0s;\n  -moz-transition: width 0.2s ease 0s;\n  -ms-transition: width 0.2s ease 0s;\n  -o-transition: width 0.2s ease 0s;\n}\n.fr-popup .fr-video-progress-bar-layer > div.fr-loader.fr-indeterminate span {\n  width: 30% !important;\n  position: absolute;\n  top: 0;\n  -webkit-animation: loading 2s linear infinite;\n  -moz-animation: loading 2s linear infinite;\n  -o-animation: loading 2s linear infinite;\n  animation: loading 2s linear infinite;\n}\n.fr-popup .fr-video-progress-bar-layer.fr-error > div.fr-loader {\n  display: none;\n}\n.fr-popup .fr-video-progress-bar-layer.fr-error > div.fr-action-buttons {\n  display: block;\n}\n.fr-video-overlay {\n  position: fixed;\n  top: 0;\n  left: 0;\n  bottom: 0;\n  right: 0;\n  z-index: 2147483640;\n  display: none;\n}\n"
  },
  {
    "path": "src/main/resources/static/plugins/froala-editor/css/themes/dark.css",
    "content": "/*!\n * froala_editor v2.9.1 (https://www.froala.com/wysiwyg-editor)\n * License https://froala.com/wysiwyg-editor/terms/\n * Copyright 2014-2018 Froala Labs\n */\n\n.clearfix::after {\n  clear: both;\n  display: block;\n  content: \"\";\n  height: 0;\n}\n.hide-by-clipping {\n  position: absolute;\n  width: 1px;\n  height: 1px;\n  padding: 0;\n  margin: -1px;\n  overflow: hidden;\n  clip: rect(0, 0, 0, 0);\n  border: 0;\n}\n.dark-theme.fr-box.fr-basic .fr-element {\n  color: #000000;\n  padding: 16px;\n  overflow-x: auto;\n  min-height: 52px;\n}\n.dark-theme .fr-element {\n  -webkit-user-select: auto;\n}\n.dark-theme.fr-box a.fr-floating-btn {\n  -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n  -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n  height: 32px;\n  width: 32px;\n  background: #353535;\n  color: #42a5f5;\n  -webkit-transition: background 0.2s ease 0s, color 0.2s ease 0s, transform 0.2s ease 0s;\n  -moz-transition: background 0.2s ease 0s, color 0.2s ease 0s, transform 0.2s ease 0s;\n  -ms-transition: background 0.2s ease 0s, color 0.2s ease 0s, transform 0.2s ease 0s;\n  -o-transition: background 0.2s ease 0s, color 0.2s ease 0s, transform 0.2s ease 0s;\n  left: 0;\n  top: 0;\n  line-height: 32px;\n  border: none;\n}\n.dark-theme.fr-box a.fr-floating-btn svg {\n  -webkit-transition: transform 0.2s ease 0s;\n  -moz-transition: transform 0.2s ease 0s;\n  -ms-transition: transform 0.2s ease 0s;\n  -o-transition: transform 0.2s ease 0s;\n  fill: #42a5f5;\n}\n.dark-theme.fr-box a.fr-floating-btn i,\n.dark-theme.fr-box a.fr-floating-btn svg {\n  font-size: 14px;\n  line-height: 32px;\n}\n.dark-theme.fr-box a.fr-floating-btn:hover {\n  background: #3d3d3d;\n}\n.dark-theme.fr-box a.fr-floating-btn:hover svg {\n  fill: #42a5f5;\n}\n.dark-theme .fr-wrapper .fr-placeholder {\n  font-size: 12px;\n  color: #aaaaaa;\n  top: 0;\n  left: 0;\n  right: 0;\n}\n.dark-theme .fr-wrapper ::-moz-selection {\n  background: #b5d6fd;\n  color: #000000;\n}\n.dark-theme .fr-wrapper ::selection {\n  background: #b5d6fd;\n  color: #000000;\n}\n.dark-theme.fr-box.fr-basic .fr-wrapper {\n  background: #ffffff;\n  border: 0px;\n  border-top: 0;\n  top: 0;\n  left: 0;\n}\n.dark-theme.fr-box.fr-basic.fr-top .fr-wrapper {\n  border-top: 0;\n  border-radius: 0 0 2px 2px;\n  -moz-border-radius: 0 0 2px 2px;\n  -webkit-border-radius: 0 0 2px 2px;\n  -moz-background-clip: padding;\n  -webkit-background-clip: padding-box;\n  background-clip: padding-box;\n  -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n  -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n}\n.dark-theme.fr-box.fr-basic.fr-bottom .fr-wrapper {\n  border-bottom: 0;\n  border-radius: 2px 2px 0 0;\n  -moz-border-radius: 2px 2px 0 0;\n  -webkit-border-radius: 2px 2px 0 0;\n  -moz-background-clip: padding;\n  -webkit-background-clip: padding-box;\n  background-clip: padding-box;\n  -webkit-box-shadow: 0 -1px 3px rgba(0, 0, 0, 0.12), 0 -1px 1px 1px rgba(0, 0, 0, 0.16);\n  -moz-box-shadow: 0 -1px 3px rgba(0, 0, 0, 0.12), 0 -1px 1px 1px rgba(0, 0, 0, 0.16);\n  box-shadow: 0 -1px 3px rgba(0, 0, 0, 0.12), 0 -1px 1px 1px rgba(0, 0, 0, 0.16);\n}\n@media (min-width: 992px) {\n  .dark-theme .fr-box.fr-document .fr-wrapper .fr-element {\n    margin: auto;\n    -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n    -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n    box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n  }\n}\n.dark-theme .fr-sticky-on.fr-sticky-ios {\n  left: 0;\n  right: 0;\n}\n.dark-theme.fr-box .fr-counter {\n  color: #aaaaaa;\n  background: #ffffff;\n  border-top: solid 1px #ebebeb;\n  border-left: solid 1px #ebebeb;\n  border-radius: 2px 0 0 0;\n  -moz-border-radius: 2px 0 0 0;\n  -webkit-border-radius: 2px 0 0 0;\n  -moz-background-clip: padding;\n  -webkit-background-clip: padding-box;\n  background-clip: padding-box;\n}\n.dark-theme.fr-box.fr-rtl .fr-counter {\n  right: auto;\n  border-right: solid 1px #ebebeb;\n  border-radius: 0 2px 0 0;\n  -moz-border-radius: 0 2px 0 0;\n  -webkit-border-radius: 0 2px 0 0;\n  -moz-background-clip: padding;\n  -webkit-background-clip: padding-box;\n  background-clip: padding-box;\n}\n.dark-theme textarea.fr-code {\n  background: #ffffff;\n  color: #000000;\n}\n.dark-theme.fr-box.fr-code-view.fr-inline {\n  -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n  -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n}\n.dark-theme.fr-box.fr-inline .fr-command.fr-btn.html-switch {\n  top: 0;\n  right: 0;\n  -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n  -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n  background: #ffffff;\n  color: #ffffff;\n  -moz-outline: 0;\n  outline: 0;\n  border: 0;\n  padding: 12px 12px;\n  -webkit-transition: background 0.2s ease 0s;\n  -moz-transition: background 0.2s ease 0s;\n  -ms-transition: background 0.2s ease 0s;\n  -o-transition: background 0.2s ease 0s;\n}\n.dark-theme.fr-box.fr-inline .fr-command.fr-btn.html-switch i {\n  font-size: 14px;\n  width: 14px;\n}\n.dark-theme.fr-box.fr-inline .fr-command.fr-btn.html-switch.fr-desktop:hover {\n  background: #3d3d3d;\n}\n.dark-theme.fr-popup .fr-colors-tabs {\n  -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n  -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n}\n.dark-theme.fr-popup .fr-colors-tabs .fr-colors-tab {\n  color: #ffffff;\n  padding: 8px 0;\n}\n.dark-theme.fr-popup .fr-colors-tabs .fr-colors-tab:hover,\n.dark-theme.fr-popup .fr-colors-tabs .fr-colors-tab:focus {\n  color: #42a5f5;\n}\n.dark-theme.fr-popup .fr-colors-tabs .fr-colors-tab[data-param1=\"background\"]::after {\n  bottom: 0;\n  left: 0;\n  background: #42a5f5;\n  -webkit-transition: transform 0.2s ease 0s;\n  -moz-transition: transform 0.2s ease 0s;\n  -ms-transition: transform 0.2s ease 0s;\n  -o-transition: transform 0.2s ease 0s;\n}\n.dark-theme.fr-popup .fr-colors-tabs .fr-colors-tab.fr-selected-tab {\n  color: #42a5f5;\n}\n.dark-theme.fr-popup .fr-color-hex-layer .fr-input-line {\n  padding: 8px 0 0;\n}\n.dark-theme.fr-popup .fr-color-hex-layer .fr-action-buttons button {\n  background-color: #42a5f5;\n  border-radius: 2px;\n  -moz-border-radius: 2px;\n  -webkit-border-radius: 2px;\n  -moz-background-clip: padding;\n  -webkit-background-clip: padding-box;\n  background-clip: padding-box;\n}\n.dark-theme.fr-popup .fr-color-hex-layer .fr-action-buttons button:hover {\n  background-color: #128ef2;\n}\n.dark-theme.fr-popup .fr-color-set {\n  line-height: 0;\n}\n.dark-theme.fr-popup .fr-color-set > span > i,\n.dark-theme.fr-popup .fr-color-set > span > svg {\n  bottom: 0;\n  left: 0;\n}\n.dark-theme.fr-popup .fr-color-set > span .fr-selected-color {\n  color: #ffffff;\n  font-weight: 400;\n  top: 0;\n  bottom: 0;\n  right: 0;\n  left: 0;\n}\n.dark-theme.fr-popup .fr-color-set > span:hover,\n.dark-theme.fr-popup .fr-color-set > span:focus {\n  outline: 1px solid #ffffff;\n}\n.dark-theme .fr-drag-helper {\n  background: #42a5f5;\n  z-index: 2147483640;\n}\n.dark-theme.fr-popup .fr-link:focus {\n  outline: 0;\n  background: #3d3d3d;\n}\n.dark-theme.fr-popup .fr-file-upload-layer {\n  border: dashed 2px #808080;\n  padding: 25px 0;\n}\n.dark-theme.fr-popup .fr-file-upload-layer:hover {\n  background: #3d3d3d;\n}\n.dark-theme.fr-popup .fr-file-upload-layer.fr-drop {\n  background: #3d3d3d;\n  border-color: #42a5f5;\n}\n.dark-theme.fr-popup .fr-file-upload-layer .fr-form {\n  top: 0;\n  bottom: 0;\n  left: 0;\n  right: 0;\n  z-index: 2147483640;\n}\n.dark-theme.fr-popup .fr-file-progress-bar-layer > h3 {\n  margin: 10px 0;\n}\n.dark-theme.fr-popup .fr-file-progress-bar-layer > div.fr-loader {\n  background: #c6e4fc;\n}\n.dark-theme.fr-popup .fr-file-progress-bar-layer > div.fr-loader span {\n  background: #42a5f5;\n  -webkit-transition: width 0.2s ease 0s;\n  -moz-transition: width 0.2s ease 0s;\n  -ms-transition: width 0.2s ease 0s;\n  -o-transition: width 0.2s ease 0s;\n}\n.dark-theme.fr-popup .fr-file-progress-bar-layer > div.fr-loader.fr-indeterminate span {\n  top: 0;\n}\n.dark-theme.fr-box.fr-fullscreen {\n  top: 0;\n  left: 0;\n  bottom: 0;\n  right: 0;\n}\n.dark-theme.fr-modal .fr-modal-wrapper .fr-modal-body .fr-help-modal table tr {\n  border: 0;\n}\n.dark-theme.fr-modal .fr-modal-wrapper .fr-modal-body .fr-help-modal table tbody tr {\n  border-bottom: solid 1px #595959;\n}\n.dark-theme.fr-modal .fr-modal-wrapper .fr-modal-body .fr-help-modal table tbody td:first-child {\n  color: #ffffff;\n}\n.dark-theme .fr-image-resizer {\n  border: solid 1px #42a5f5;\n}\n.dark-theme .fr-image-resizer .fr-handler {\n  background: #42a5f5;\n  border: solid 1px #ffffff;\n}\n.dark-theme .fr-image-resizer .fr-handler {\n  width: 12px;\n  height: 12px;\n}\n.dark-theme .fr-image-resizer .fr-handler.fr-hnw {\n  left: -6px;\n  top: -6px;\n}\n.dark-theme .fr-image-resizer .fr-handler.fr-hne {\n  right: -6px;\n  top: -6px;\n}\n.dark-theme .fr-image-resizer .fr-handler.fr-hsw {\n  left: -6px;\n  bottom: -6px;\n}\n.dark-theme .fr-image-resizer .fr-handler.fr-hse {\n  right: -6px;\n  bottom: -6px;\n}\n@media (min-width: 1200px) {\n  .dark-theme .fr-image-resizer .fr-handler {\n    width: 10px;\n    height: 10px;\n  }\n  .dark-theme .fr-image-resizer .fr-handler.fr-hnw {\n    left: -5px;\n    top: -5px;\n  }\n  .dark-theme .fr-image-resizer .fr-handler.fr-hne {\n    right: -5px;\n    top: -5px;\n  }\n  .dark-theme .fr-image-resizer .fr-handler.fr-hsw {\n    left: -5px;\n    bottom: -5px;\n  }\n  .dark-theme .fr-image-resizer .fr-handler.fr-hse {\n    right: -5px;\n    bottom: -5px;\n  }\n}\n.dark-theme.fr-image-overlay {\n  top: 0;\n  left: 0;\n  bottom: 0;\n  right: 0;\n  z-index: 2147483640;\n}\n.dark-theme.fr-popup .fr-image-upload-layer {\n  border: dashed 2px #808080;\n  padding: 25px 0;\n}\n.dark-theme.fr-popup .fr-image-upload-layer:hover {\n  background: #3d3d3d;\n}\n.dark-theme.fr-popup .fr-image-upload-layer.fr-drop {\n  background: #3d3d3d;\n  border-color: #42a5f5;\n}\n.dark-theme.fr-popup .fr-image-upload-layer .fr-form {\n  top: 0;\n  bottom: 0;\n  left: 0;\n  right: 0;\n  z-index: 2147483640;\n}\n.dark-theme.fr-popup .fr-image-progress-bar-layer > h3 {\n  margin: 10px 0;\n}\n.dark-theme.fr-popup .fr-image-progress-bar-layer > div.fr-loader {\n  background: #c6e4fc;\n}\n.dark-theme.fr-popup .fr-image-progress-bar-layer > div.fr-loader span {\n  background: #42a5f5;\n  -webkit-transition: width 0.2s ease 0s;\n  -moz-transition: width 0.2s ease 0s;\n  -ms-transition: width 0.2s ease 0s;\n  -o-transition: width 0.2s ease 0s;\n}\n.dark-theme.fr-popup .fr-image-progress-bar-layer > div.fr-loader.fr-indeterminate span {\n  top: 0;\n}\n.dark-theme.fr-modal-head .fr-modal-head-line i.fr-modal-more {\n  -webkit-transition: padding 0.2s ease 0s, width 0.2s ease 0s, opacity 0.2s ease 0s;\n  -moz-transition: padding 0.2s ease 0s, width 0.2s ease 0s, opacity 0.2s ease 0s;\n  -ms-transition: padding 0.2s ease 0s, width 0.2s ease 0s, opacity 0.2s ease 0s;\n  -o-transition: padding 0.2s ease 0s, width 0.2s ease 0s, opacity 0.2s ease 0s;\n}\n.dark-theme.fr-modal-head .fr-modal-head-line i.fr-modal-more.fr-not-available {\n  opacity: 0;\n  width: 0;\n  padding: 12px 0;\n}\n.dark-theme.fr-modal-head .fr-modal-tags a {\n  opacity: 0;\n  border-radius: 2px;\n  -moz-border-radius: 2px;\n  -webkit-border-radius: 2px;\n  -moz-background-clip: padding;\n  -webkit-background-clip: padding-box;\n  background-clip: padding-box;\n  color: #42a5f5;\n  -webkit-transition: opacity 0.2s ease 0s, background 0.2s ease 0s;\n  -moz-transition: opacity 0.2s ease 0s, background 0.2s ease 0s;\n  -ms-transition: opacity 0.2s ease 0s, background 0.2s ease 0s;\n  -o-transition: opacity 0.2s ease 0s, background 0.2s ease 0s;\n}\n.dark-theme.fr-modal-head .fr-modal-tags a.fr-selected-tag {\n  background: #2e2e2e;\n}\n.dark-themediv.fr-modal-body .fr-preloader {\n  margin: 50px auto;\n}\n.dark-themediv.fr-modal-body div.fr-image-list {\n  padding: 0;\n}\n.dark-themediv.fr-modal-body div.fr-image-list div.fr-image-container {\n  -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n  -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n  border-radius: 2px;\n  -moz-border-radius: 2px;\n  -webkit-border-radius: 2px;\n  -moz-background-clip: padding;\n  -webkit-background-clip: padding-box;\n  background-clip: padding-box;\n}\n.dark-themediv.fr-modal-body div.fr-image-list div.fr-image-container.fr-image-deleting::after {\n  -webkit-transition: opacity 0.2s ease 0s;\n  -moz-transition: opacity 0.2s ease 0s;\n  -ms-transition: opacity 0.2s ease 0s;\n  -o-transition: opacity 0.2s ease 0s;\n  background: #000000;\n  top: 0;\n  left: 0;\n  bottom: 0;\n  right: 0;\n}\n.dark-themediv.fr-modal-body div.fr-image-list div.fr-image-container.fr-image-deleting::before {\n  color: #ffffff;\n  top: 0;\n  left: 0;\n  bottom: 0;\n  right: 0;\n  margin: auto;\n}\n.dark-themediv.fr-modal-body div.fr-image-list div.fr-image-container.fr-empty {\n  background: #aaaaaa;\n}\n.dark-themediv.fr-modal-body div.fr-image-list div.fr-image-container.fr-empty::after {\n  margin: auto;\n  top: 0;\n  bottom: 0;\n  left: 0;\n  right: 0;\n}\n.dark-themediv.fr-modal-body div.fr-image-list div.fr-image-container img {\n  -webkit-transition: opacity 0.2s ease 0s, filter 0.2s ease 0s;\n  -moz-transition: opacity 0.2s ease 0s, filter 0.2s ease 0s;\n  -ms-transition: opacity 0.2s ease 0s, filter 0.2s ease 0s;\n  -o-transition: opacity 0.2s ease 0s, filter 0.2s ease 0s;\n}\n.dark-themediv.fr-modal-body div.fr-image-list div.fr-image-container .fr-delete-img,\n.dark-themediv.fr-modal-body div.fr-image-list div.fr-image-container .fr-insert-img {\n  -webkit-transition: background 0.2s ease 0s, color 0.2s ease 0s;\n  -moz-transition: background 0.2s ease 0s, color 0.2s ease 0s;\n  -ms-transition: background 0.2s ease 0s, color 0.2s ease 0s;\n  -o-transition: background 0.2s ease 0s, color 0.2s ease 0s;\n  -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n  -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n  margin: 0;\n}\n.dark-themediv.fr-modal-body div.fr-image-list div.fr-image-container .fr-delete-img {\n  background: #b8312f;\n  color: #ffffff;\n}\n.dark-themediv.fr-modal-body div.fr-image-list div.fr-image-container .fr-insert-img {\n  background: #353535;\n  color: #42a5f5;\n}\n.dark-theme.dark-theme.fr-desktop .fr-modal-wrapper .fr-modal-head .fr-modal-tags a:hover {\n  background: #3d3d3d;\n}\n.dark-theme.dark-theme.fr-desktop .fr-modal-wrapper .fr-modal-head .fr-modal-tags a.fr-selected-tag {\n  background: #2e2e2e;\n}\n.dark-theme.dark-theme.fr-desktop .fr-modal-wrapper div.fr-modal-body div.fr-image-list div.fr-image-container .fr-delete-img:hover {\n  background: #bf4644;\n  color: #ffffff;\n}\n.dark-theme.dark-theme.fr-desktop .fr-modal-wrapper div.fr-modal-body div.fr-image-list div.fr-image-container .fr-insert-img:hover {\n  background: #3d3d3d;\n}\n.dark-theme .fr-line-breaker {\n  border-top: 1px solid #42a5f5;\n}\n.dark-theme .fr-line-breaker a.fr-floating-btn {\n  left: calc(50% - (32px / 2));\n  top: -16px;\n}\n.dark-theme .fr-qi-helper {\n  padding-left: 16px;\n}\n.dark-theme .fr-qi-helper a.fr-btn.fr-floating-btn {\n  color: #ffffff;\n}\n.dark-theme.fr-modal .fr-modal-wrapper .fr-modal-body .fr-special-characters-modal .fr-special-character {\n  border: 1px solid #aaaaaa;\n}\n.dark-theme .fr-element table td.fr-selected-cell,\n.dark-theme .fr-element table th.fr-selected-cell {\n  border: 1px double #42a5f5;\n}\n.dark-theme .fr-table-resizer div {\n  border-right: 1px solid #42a5f5;\n}\n.dark-theme.fr-popup .fr-table-colors-hex-layer .fr-input-line {\n  padding: 8px 0 0;\n}\n.dark-theme.fr-popup .fr-table-colors-hex-layer .fr-action-buttons button {\n  background-color: #42a5f5;\n  border-radius: 2px;\n  -moz-border-radius: 2px;\n  -webkit-border-radius: 2px;\n  -moz-background-clip: padding;\n  -webkit-background-clip: padding-box;\n  background-clip: padding-box;\n}\n.dark-theme.fr-popup .fr-table-colors-hex-layer .fr-action-buttons button:hover {\n  background-color: #128ef2;\n}\n.dark-theme.fr-popup .fr-table-size .fr-select-table-size {\n  line-height: 0;\n}\n.dark-theme.fr-popup .fr-table-size .fr-select-table-size > span {\n  padding: 0px 4px 4px 0;\n}\n.dark-theme.fr-popup .fr-table-size .fr-select-table-size > span > span {\n  border: 1px solid #dddddd;\n}\n.dark-theme.fr-popup .fr-table-size .fr-select-table-size > span.hover > span {\n  background: rgba(66, 165, 245, 0.3);\n  border: solid 1px #42a5f5;\n}\n.dark-theme.fr-popup .fr-table-colors {\n  line-height: 0;\n}\n.dark-theme.fr-popup .fr-table-colors > span > i {\n  bottom: 0;\n  left: 0;\n}\n.dark-theme.fr-popup .fr-table-colors > span:focus {\n  outline: 1px solid #ffffff;\n}\n.dark-theme .fr-element .fr-video::after {\n  top: 0;\n  left: 0;\n  right: 0;\n  bottom: 0;\n}\n.dark-theme.fr-box .fr-video-resizer {\n  border: solid 1px #42a5f5;\n}\n.dark-theme.fr-box .fr-video-resizer .fr-handler {\n  background: #42a5f5;\n  border: solid 1px #ffffff;\n}\n.dark-theme.fr-box .fr-video-resizer .fr-handler {\n  width: 12px;\n  height: 12px;\n}\n.dark-theme.fr-box .fr-video-resizer .fr-handler.fr-hnw {\n  left: -6px;\n  top: -6px;\n}\n.dark-theme.fr-box .fr-video-resizer .fr-handler.fr-hne {\n  right: -6px;\n  top: -6px;\n}\n.dark-theme.fr-box .fr-video-resizer .fr-handler.fr-hsw {\n  left: -6px;\n  bottom: -6px;\n}\n.dark-theme.fr-box .fr-video-resizer .fr-handler.fr-hse {\n  right: -6px;\n  bottom: -6px;\n}\n@media (min-width: 1200px) {\n  .dark-theme.fr-box .fr-video-resizer .fr-handler {\n    width: 10px;\n    height: 10px;\n  }\n  .dark-theme.fr-box .fr-video-resizer .fr-handler.fr-hnw {\n    left: -5px;\n    top: -5px;\n  }\n  .dark-theme.fr-box .fr-video-resizer .fr-handler.fr-hne {\n    right: -5px;\n    top: -5px;\n  }\n  .dark-theme.fr-box .fr-video-resizer .fr-handler.fr-hsw {\n    left: -5px;\n    bottom: -5px;\n  }\n  .dark-theme.fr-box .fr-video-resizer .fr-handler.fr-hse {\n    right: -5px;\n    bottom: -5px;\n  }\n}\n.dark-theme.fr-popup .fr-video-upload-layer {\n  border: dashed 2px #808080;\n  padding: 25px 0;\n}\n.dark-theme.fr-popup .fr-video-upload-layer:hover {\n  background: #3d3d3d;\n}\n.dark-theme.fr-popup .fr-video-upload-layer.fr-drop {\n  background: #3d3d3d;\n  border-color: #42a5f5;\n}\n.dark-theme.fr-popup .fr-video-upload-layer .fr-form {\n  top: 0;\n  bottom: 0;\n  left: 0;\n  right: 0;\n  z-index: 2147483640;\n}\n.dark-theme.fr-popup .fr-video-progress-bar-layer > h3 {\n  margin: 10px 0;\n}\n.dark-theme.fr-popup .fr-video-progress-bar-layer > div.fr-loader {\n  background: #c6e4fc;\n}\n.dark-theme.fr-popup .fr-video-progress-bar-layer > div.fr-loader span {\n  background: #42a5f5;\n  -webkit-transition: width 0.2s ease 0s;\n  -moz-transition: width 0.2s ease 0s;\n  -ms-transition: width 0.2s ease 0s;\n  -o-transition: width 0.2s ease 0s;\n}\n.dark-theme.fr-popup .fr-video-progress-bar-layer > div.fr-loader.fr-indeterminate span {\n  top: 0;\n}\n.dark-theme.fr-video-overlay {\n  top: 0;\n  left: 0;\n  bottom: 0;\n  right: 0;\n  z-index: 2147483640;\n}\n.dark-theme .fr-view span[style~=\"color:\"] a {\n  color: inherit;\n}\n.dark-theme .fr-view strong {\n  font-weight: 700;\n}\n.dark-theme .fr-view table.fr-alternate-rows tbody tr:nth-child(2n) {\n  background: #d3d3d3;\n}\n.dark-theme .fr-view table td,\n.dark-theme .fr-view table th {\n  border: 1px solid #dddddd;\n}\n.dark-theme .fr-view table th {\n  background: #e6e6e6;\n}\n.dark-theme .fr-view[dir=\"rtl\"] blockquote {\n  border-right: solid 2px #5e35b1;\n  margin-right: 0;\n}\n.dark-theme .fr-view[dir=\"rtl\"] blockquote blockquote {\n  border-color: #00bcd4;\n}\n.dark-theme .fr-view[dir=\"rtl\"] blockquote blockquote blockquote {\n  border-color: #43a047;\n}\n.dark-theme .fr-view blockquote {\n  border-left: solid 2px #5e35b1;\n  margin-left: 0;\n  color: #5e35b1;\n}\n.dark-theme .fr-view blockquote blockquote {\n  border-color: #00bcd4;\n  color: #00bcd4;\n}\n.dark-theme .fr-view blockquote blockquote blockquote {\n  border-color: #43a047;\n  color: #43a047;\n}\n.dark-theme .fr-view span.fr-emoticon {\n  line-height: 0;\n}\n.dark-theme .fr-view span.fr-emoticon.fr-emoticon-img {\n  font-size: inherit;\n}\n.dark-theme .fr-view .fr-text-bordered {\n  padding: 10px 0;\n}\n.dark-theme .fr-view .fr-class-highlighted {\n  background-color: #ffff00;\n}\n.dark-theme .fr-view .fr-img-caption .fr-img-wrap {\n  margin: auto;\n}\n.dark-theme .fr-view .fr-img-caption .fr-img-wrap img {\n  margin: auto;\n}\n.dark-theme .fr-view .fr-img-caption .fr-img-wrap > span {\n  margin: auto;\n}\n.dark-theme .fr-element .fr-embedly::after {\n  top: 0;\n  left: 0;\n  right: 0;\n  bottom: 0;\n}\n.dark-theme.fr-box .fr-embedly-resizer {\n  border: solid 1px #42a5f5;\n}\n.dark-theme.fr-modal .fr-modal-wrapper .fr-modal-body .fr-font-awesome-modal .fr-font-awesome-title {\n  border-bottom: solid 1px #e6e6e6;\n}\n.dark-theme .tui-image-editor-container {\n  top: 0;\n  left: 0;\n  bottom: 0;\n  right: 0;\n  z-index: 10;\n}\n.dark-theme .tui-editor-cancel-btn {\n  background-color: #ffffff;\n  border: 1px solid #aaaaaa;\n}\n.dark-theme .tui-editor-save-btn {\n  color: #ffffff;\n}\n.dark-theme .examples-variante > a {\n  font-size: 14px;\n  font-family: Arial, Helvetica, sans-serif;\n}\n.dark-theme .sc-cm-holder > .sc-cm {\n  border-top: 5px solid #222222 !important;\n}\n.dark-theme .sc-cm__item_dropdown:hover > a,\n.dark-theme .sc-cm a:hover {\n  background-color: #3d3d3d !important;\n}\n.dark-theme .sc-cm__item_active > a,\n.dark-theme .sc-cm__item_active > a:hover,\n.dark-theme .sc-cm a:active,\n.dark-theme .sc-cm a:focus {\n  background-color: #2e2e2e !important;\n}\n.dark-theme .sc-cm-holder > .sc-cm:before {\n  background-color: #3d3d3d !important;\n}\n.dark-theme .fr-tooltip {\n  top: 0;\n  left: 0;\n  border-radius: 2px;\n  -moz-border-radius: 2px;\n  -webkit-border-radius: 2px;\n  -moz-background-clip: padding;\n  -webkit-background-clip: padding-box;\n  background-clip: padding-box;\n  -webkit-box-shadow: 0 3px 6px rgba(0, 0, 0, 0.16), 0 2px 2px 1px rgba(0, 0, 0, 0.14);\n  -moz-box-shadow: 0 3px 6px rgba(0, 0, 0, 0.16), 0 2px 2px 1px rgba(0, 0, 0, 0.14);\n  box-shadow: 0 3px 6px rgba(0, 0, 0, 0.16), 0 2px 2px 1px rgba(0, 0, 0, 0.14);\n  background: #222222;\n  color: #ffffff;\n  font-size: 11px;\n  line-height: 22px;\n  font-family: Arial, Helvetica, sans-serif;\n  -webkit-transition: opacity 0.2s ease 0s;\n  -moz-transition: opacity 0.2s ease 0s;\n  -ms-transition: opacity 0.2s ease 0s;\n  -o-transition: opacity 0.2s ease 0s;\n}\n.dark-theme.fr-toolbar .fr-command.fr-btn,\n.dark-theme.fr-popup .fr-command.fr-btn {\n  color: #ffffff;\n  -moz-outline: 0;\n  outline: 0;\n  border: 0;\n  margin: 0px 2px;\n  -webkit-transition: background 0.2s ease 0s;\n  -moz-transition: background 0.2s ease 0s;\n  -ms-transition: background 0.2s ease 0s;\n  -o-transition: background 0.2s ease 0s;\n  padding: 0;\n  width: 38px;\n  height: 38px;\n}\n.dark-theme.fr-toolbar .fr-command.fr-btn::-moz-focus-inner,\n.dark-theme.fr-popup .fr-command.fr-btn::-moz-focus-inner {\n  border: 0;\n}\n.dark-theme.fr-toolbar .fr-command.fr-btn.fr-btn-text,\n.dark-theme.fr-popup .fr-command.fr-btn.fr-btn-text {\n  width: auto;\n}\n.dark-theme.fr-toolbar .fr-command.fr-btn i,\n.dark-theme.fr-popup .fr-command.fr-btn i,\n.dark-theme.fr-toolbar .fr-command.fr-btn svg,\n.dark-theme.fr-popup .fr-command.fr-btn svg {\n  font-size: 14px;\n  width: 14px;\n  margin: 12px 12px;\n}\n.dark-theme.fr-toolbar .fr-command.fr-btn span,\n.dark-theme.fr-popup .fr-command.fr-btn span {\n  font-size: 14px;\n  line-height: 17px;\n  min-width: 34px;\n  height: 17px;\n  padding: 0 2px;\n}\n.dark-theme.fr-toolbar .fr-command.fr-btn img,\n.dark-theme.fr-popup .fr-command.fr-btn img {\n  margin: 12px 12px;\n  width: 14px;\n}\n.dark-theme.fr-toolbar .fr-command.fr-btn.fr-active,\n.dark-theme.fr-popup .fr-command.fr-btn.fr-active {\n  color: #42a5f5;\n  background: transparent;\n}\n.dark-theme.fr-toolbar .fr-command.fr-btn.fr-dropdown.fr-selection,\n.dark-theme.fr-popup .fr-command.fr-btn.fr-dropdown.fr-selection {\n  width: auto;\n}\n.dark-theme.fr-toolbar .fr-command.fr-btn.fr-dropdown i,\n.dark-theme.fr-popup .fr-command.fr-btn.fr-dropdown i,\n.dark-theme.fr-toolbar .fr-command.fr-btn.fr-dropdown span,\n.dark-theme.fr-popup .fr-command.fr-btn.fr-dropdown span,\n.dark-theme.fr-toolbar .fr-command.fr-btn.fr-dropdown img,\n.dark-theme.fr-popup .fr-command.fr-btn.fr-dropdown img,\n.dark-theme.fr-toolbar .fr-command.fr-btn.fr-dropdown svg,\n.dark-theme.fr-popup .fr-command.fr-btn.fr-dropdown svg {\n  margin-left: 8px;\n  margin-right: 16px;\n}\n.dark-theme.fr-toolbar .fr-command.fr-btn.fr-dropdown.fr-active,\n.dark-theme.fr-popup .fr-command.fr-btn.fr-dropdown.fr-active {\n  color: #ffffff;\n  background: #2e2e2e;\n}\n.dark-theme.fr-toolbar .fr-command.fr-btn.fr-dropdown.fr-active:hover,\n.dark-theme.fr-popup .fr-command.fr-btn.fr-dropdown.fr-active:hover,\n.dark-theme.fr-toolbar .fr-command.fr-btn.fr-dropdown.fr-active:focus,\n.dark-theme.fr-popup .fr-command.fr-btn.fr-dropdown.fr-active:focus {\n  background: #2e2e2e !important;\n  color: #ffffff !important;\n}\n.dark-theme.fr-toolbar .fr-command.fr-btn.fr-dropdown.fr-active:hover::after,\n.dark-theme.fr-popup .fr-command.fr-btn.fr-dropdown.fr-active:hover::after,\n.dark-theme.fr-toolbar .fr-command.fr-btn.fr-dropdown.fr-active:focus::after,\n.dark-theme.fr-popup .fr-command.fr-btn.fr-dropdown.fr-active:focus::after {\n  border-top-color: #ffffff !important;\n}\n.dark-theme.fr-toolbar .fr-command.fr-btn.fr-dropdown::after,\n.dark-theme.fr-popup .fr-command.fr-btn.fr-dropdown::after {\n  width: 0;\n  height: 0;\n  border-left: 4px solid transparent;\n  border-right: 4px solid transparent;\n  border-top: 4px solid #ffffff;\n  right: 4px;\n  top: 17px;\n}\n.dark-theme.fr-toolbar .fr-command.fr-btn.fr-disabled,\n.dark-theme.fr-popup .fr-command.fr-btn.fr-disabled {\n  color: #808080;\n}\n.dark-theme.fr-toolbar .fr-command.fr-btn.fr-disabled::after,\n.dark-theme.fr-popup .fr-command.fr-btn.fr-disabled::after {\n  border-top-color: #808080 !important;\n}\n.dark-theme.fr-toolbar.fr-disabled .fr-btn,\n.dark-theme.fr-popup.fr-disabled .fr-btn,\n.dark-theme.fr-toolbar.fr-disabled .fr-btn.fr-active,\n.dark-theme.fr-popup.fr-disabled .fr-btn.fr-active {\n  color: #808080;\n}\n.dark-theme.fr-toolbar.fr-disabled .fr-btn.fr-dropdown::after,\n.dark-theme.fr-popup.fr-disabled .fr-btn.fr-dropdown::after,\n.dark-theme.fr-toolbar.fr-disabled .fr-btn.fr-active.fr-dropdown::after,\n.dark-theme.fr-popup.fr-disabled .fr-btn.fr-active.fr-dropdown::after {\n  border-top-color: #808080;\n}\n.dark-theme.fr-desktop .fr-command:hover,\n.dark-theme.fr-desktop .fr-command:focus,\n.dark-theme.fr-desktop .fr-command.fr-btn-hover,\n.dark-theme.fr-desktop .fr-command.fr-expanded {\n  outline: 0;\n  color: #ffffff;\n  background: #3d3d3d;\n}\n.dark-theme.fr-desktop .fr-command:hover::after,\n.dark-theme.fr-desktop .fr-command:focus::after,\n.dark-theme.fr-desktop .fr-command.fr-btn-hover::after,\n.dark-theme.fr-desktop .fr-command.fr-expanded::after {\n  border-top-color: #ffffff !important;\n}\n.dark-theme.fr-desktop .fr-command.fr-selected {\n  color: #ffffff;\n  background: #2e2e2e;\n}\n.dark-theme.fr-desktop .fr-command.fr-active:hover,\n.dark-theme.fr-desktop .fr-command.fr-active:focus,\n.dark-theme.fr-desktop .fr-command.fr-active.fr-btn-hover,\n.dark-theme.fr-desktop .fr-command.fr-active.fr-expanded {\n  color: #42a5f5;\n  background: #3d3d3d;\n}\n.dark-theme.fr-desktop .fr-command.fr-active.fr-selected {\n  color: #42a5f5;\n  background: #2e2e2e;\n}\n.dark-theme.fr-toolbar.fr-mobile .fr-command.fr-blink,\n.dark-theme.fr-popup.fr-mobile .fr-command.fr-blink {\n  background: transparent;\n}\n.dark-theme .fr-command.fr-btn.fr-options {\n  width: 16px;\n  margin-left: -5px;\n}\n.dark-theme .fr-command.fr-btn.fr-options.fr-btn-hover,\n.dark-theme .fr-command.fr-btn.fr-options:hover,\n.dark-theme .fr-command.fr-btn.fr-options:focus {\n  border-left: solid 1px #fafafa;\n}\n.dark-theme .fr-command.fr-btn + .fr-dropdown-menu {\n  right: auto;\n  bottom: auto;\n  height: auto;\n  border-radius: 0 0 2px 2px;\n  -moz-border-radius: 0 0 2px 2px;\n  -webkit-border-radius: 0 0 2px 2px;\n  -moz-background-clip: padding;\n  -webkit-background-clip: padding-box;\n  background-clip: padding-box;\n}\n.dark-theme .fr-command.fr-btn + .fr-dropdown-menu.test-height .fr-dropdown-wrapper {\n  height: auto;\n  max-height: 275px;\n}\n.dark-theme .fr-command.fr-btn + .fr-dropdown-menu .fr-dropdown-wrapper {\n  background: #353535;\n  padding: 0;\n  margin: auto;\n  -webkit-transition: max-height 0.2s ease 0s;\n  -moz-transition: max-height 0.2s ease 0s;\n  -ms-transition: max-height 0.2s ease 0s;\n  -o-transition: max-height 0.2s ease 0s;\n  margin-top: 0;\n  max-height: 0;\n  height: 0;\n}\n.dark-theme .fr-command.fr-btn + .fr-dropdown-menu .fr-dropdown-wrapper .fr-dropdown-content {\n  overflow: auto;\n  max-height: 275px;\n}\n.dark-theme .fr-command.fr-btn + .fr-dropdown-menu .fr-dropdown-wrapper .fr-dropdown-content ul.fr-dropdown-list {\n  margin: 0;\n  padding: 0;\n}\n.dark-theme .fr-command.fr-btn + .fr-dropdown-menu .fr-dropdown-wrapper .fr-dropdown-content ul.fr-dropdown-list li {\n  padding: 0;\n  margin: 0;\n}\n.dark-theme .fr-command.fr-btn + .fr-dropdown-menu .fr-dropdown-wrapper .fr-dropdown-content ul.fr-dropdown-list li a {\n  color: inherit;\n}\n.dark-theme .fr-command.fr-btn + .fr-dropdown-menu .fr-dropdown-wrapper .fr-dropdown-content ul.fr-dropdown-list li a.fr-active {\n  background: #2e2e2e;\n}\n.dark-theme .fr-command.fr-btn + .fr-dropdown-menu .fr-dropdown-wrapper .fr-dropdown-content ul.fr-dropdown-list li a.fr-disabled {\n  color: #808080;\n}\n.dark-theme .fr-command.fr-btn.fr-active + .fr-dropdown-menu {\n  -webkit-box-shadow: 0 3px 6px rgba(0, 0, 0, 0.16), 0 2px 2px 1px rgba(0, 0, 0, 0.14);\n  -moz-box-shadow: 0 3px 6px rgba(0, 0, 0, 0.16), 0 2px 2px 1px rgba(0, 0, 0, 0.14);\n  box-shadow: 0 3px 6px rgba(0, 0, 0, 0.16), 0 2px 2px 1px rgba(0, 0, 0, 0.14);\n}\n.dark-theme .fr-command.fr-btn.fr-active + .fr-dropdown-menu .fr-dropdown-wrapper {\n  height: auto;\n  max-height: 275px;\n}\n.dark-theme .fr-bottom > .fr-command.fr-btn + .fr-dropdown-menu {\n  border-radius: 2px 2px 0 0;\n  -moz-border-radius: 2px 2px 0 0;\n  -webkit-border-radius: 2px 2px 0 0;\n  -moz-background-clip: padding;\n  -webkit-background-clip: padding-box;\n  background-clip: padding-box;\n}\n.dark-theme.fr-modal {\n  color: #ffffff;\n  font-family: Arial, Helvetica, sans-serif;\n  overflow-x: auto;\n  top: 0;\n  left: 0;\n  bottom: 0;\n  right: 0;\n  z-index: 2147483640;\n}\n.dark-theme.fr-modal.fr-middle .fr-modal-wrapper {\n  margin-top: 0;\n  margin-bottom: 0;\n  margin-left: auto;\n  margin-right: auto;\n}\n.dark-theme.fr-modal .fr-modal-wrapper {\n  border-radius: 2px;\n  -moz-border-radius: 2px;\n  -webkit-border-radius: 2px;\n  -moz-background-clip: padding;\n  -webkit-background-clip: padding-box;\n  background-clip: padding-box;\n  margin: 20px auto;\n  background: #353535;\n  -webkit-box-shadow: 0 5px 8px rgba(0, 0, 0, 0.19), 0 4px 3px 1px rgba(0, 0, 0, 0.14);\n  -moz-box-shadow: 0 5px 8px rgba(0, 0, 0, 0.19), 0 4px 3px 1px rgba(0, 0, 0, 0.14);\n  box-shadow: 0 5px 8px rgba(0, 0, 0, 0.19), 0 4px 3px 1px rgba(0, 0, 0, 0.14);\n  border: 0px;\n  border-top: 5px solid #222222;\n}\n@media (min-width: 768px) and (max-width: 991px) {\n  .dark-theme.fr-modal .fr-modal-wrapper {\n    margin: 30px auto;\n  }\n}\n@media (min-width: 992px) {\n  .dark-theme.fr-modal .fr-modal-wrapper {\n    margin: 50px auto;\n  }\n}\n.dark-theme.fr-modal .fr-modal-wrapper .fr-modal-head {\n  background: #353535;\n  -webkit-box-shadow: 0 3px 6px rgba(0, 0, 0, 0.16), 0 2px 2px 1px rgba(0, 0, 0, 0.14);\n  -moz-box-shadow: 0 3px 6px rgba(0, 0, 0, 0.16), 0 2px 2px 1px rgba(0, 0, 0, 0.14);\n  box-shadow: 0 3px 6px rgba(0, 0, 0, 0.16), 0 2px 2px 1px rgba(0, 0, 0, 0.14);\n  border-bottom: 0px;\n  -webkit-transition: height 0.2s ease 0s;\n  -moz-transition: height 0.2s ease 0s;\n  -ms-transition: height 0.2s ease 0s;\n  -o-transition: height 0.2s ease 0s;\n}\n.dark-theme.fr-modal .fr-modal-wrapper .fr-modal-head .fr-modal-close {\n  color: #ffffff;\n  top: 0;\n  right: 0;\n  -webkit-transition: color 0.2s ease 0s;\n  -moz-transition: color 0.2s ease 0s;\n  -ms-transition: color 0.2s ease 0s;\n  -o-transition: color 0.2s ease 0s;\n}\n.dark-theme.fr-modal .fr-modal-wrapper .fr-modal-head h4 {\n  margin: 0;\n  font-weight: 400;\n}\n.dark-theme.fr-modal .fr-modal-wrapper div.fr-modal-body:focus {\n  outline: 0;\n}\n.dark-theme.fr-modal .fr-modal-wrapper div.fr-modal-body button.fr-command {\n  color: #42a5f5;\n  -webkit-transition: background 0.2s ease 0s;\n  -moz-transition: background 0.2s ease 0s;\n  -ms-transition: background 0.2s ease 0s;\n  -o-transition: background 0.2s ease 0s;\n  border-radius: 2px;\n  -moz-border-radius: 2px;\n  -webkit-border-radius: 2px;\n  -moz-background-clip: padding;\n  -webkit-background-clip: padding-box;\n  background-clip: padding-box;\n}\n.dark-theme.fr-modal .fr-modal-wrapper div.fr-modal-body button.fr-command:hover,\n.dark-theme.fr-modal .fr-modal-wrapper div.fr-modal-body button.fr-command:focus {\n  background: #3d3d3d;\n  color: #42a5f5;\n}\n.dark-theme.fr-modal .fr-modal-wrapper div.fr-modal-body button.fr-command:active {\n  background: #2e2e2e;\n  color: #42a5f5;\n}\n.dark-theme.fr-modal .fr-modal-wrapper div.fr-modal-body button::-moz-focus-inner {\n  border: 0;\n}\n.dark-theme.dark-theme.fr-desktop .fr-modal-wrapper .fr-modal-head i:hover {\n  background: #3d3d3d;\n}\n.dark-theme.fr-overlay {\n  top: 0;\n  bottom: 0;\n  left: 0;\n  right: 0;\n  background: #000000;\n}\n.dark-theme.fr-popup {\n  color: #ffffff;\n  background: #353535;\n  -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n  -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n  border-radius: 2px;\n  -moz-border-radius: 2px;\n  -webkit-border-radius: 2px;\n  -moz-background-clip: padding;\n  -webkit-background-clip: padding-box;\n  background-clip: padding-box;\n  font-family: Arial, Helvetica, sans-serif;\n  border: 0px;\n  border-top: 5px solid #222222;\n}\n.dark-theme.fr-popup .fr-input-focus {\n  background: #363636;\n}\n.dark-theme.fr-popup.fr-above {\n  border-top: 0;\n  border-bottom: 5px solid #222222;\n  -webkit-box-shadow: 0 -1px 3px rgba(0, 0, 0, 0.12), 0 -1px 1px 1px rgba(0, 0, 0, 0.16);\n  -moz-box-shadow: 0 -1px 3px rgba(0, 0, 0, 0.12), 0 -1px 1px 1px rgba(0, 0, 0, 0.16);\n  box-shadow: 0 -1px 3px rgba(0, 0, 0, 0.12), 0 -1px 1px 1px rgba(0, 0, 0, 0.16);\n}\n.dark-theme.fr-popup .fr-input-line {\n  padding: 8px 0;\n}\n.dark-theme.fr-popup .fr-input-line input[type=\"text\"],\n.dark-theme.fr-popup .fr-input-line textarea {\n  margin: 0px 0 1px 0;\n  border-bottom: solid 1px #bdbdbd;\n  color: #ffffff;\n}\n.dark-theme.fr-popup .fr-input-line input[type=\"text\"]:focus,\n.dark-theme.fr-popup .fr-input-line textarea:focus {\n  border-bottom: solid 2px #42a5f5;\n}\n.dark-theme.fr-popup .fr-input-line input + label,\n.dark-theme.fr-popup .fr-input-line textarea + label {\n  top: 0;\n  left: 0;\n  -webkit-transition: color 0.2s ease 0s;\n  -moz-transition: color 0.2s ease 0s;\n  -ms-transition: color 0.2s ease 0s;\n  -o-transition: color 0.2s ease 0s;\n  background: #353535;\n}\n.dark-theme.fr-popup .fr-input-line input.fr-not-empty:focus + label,\n.dark-theme.fr-popup .fr-input-line textarea.fr-not-empty:focus + label {\n  color: #42a5f5;\n}\n.dark-theme.fr-popup .fr-input-line input.fr-not-empty + label,\n.dark-theme.fr-popup .fr-input-line textarea.fr-not-empty + label {\n  color: #808080;\n}\n.dark-theme.fr-popup .fr-buttons {\n  -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n  -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n  padding: 0 2px;\n  line-height: 0;\n  border-bottom: 0px;\n}\n.dark-theme.fr-popup .fr-layer {\n  width: 225px;\n}\n@media (min-width: 768px) {\n  .dark-theme.fr-popup .fr-layer {\n    width: 300px;\n  }\n}\n.dark-theme.fr-popup .fr-action-buttons button.fr-command {\n  color: #42a5f5;\n  -webkit-transition: background 0.2s ease 0s;\n  -moz-transition: background 0.2s ease 0s;\n  -ms-transition: background 0.2s ease 0s;\n  -o-transition: background 0.2s ease 0s;\n  border-radius: 2px;\n  -moz-border-radius: 2px;\n  -webkit-border-radius: 2px;\n  -moz-background-clip: padding;\n  -webkit-background-clip: padding-box;\n  background-clip: padding-box;\n}\n.dark-theme.fr-popup .fr-action-buttons button.fr-command:hover,\n.dark-theme.fr-popup .fr-action-buttons button.fr-command:focus {\n  background: #3d3d3d;\n  color: #42a5f5;\n}\n.dark-theme.fr-popup .fr-action-buttons button.fr-command:active {\n  background: #2e2e2e;\n  color: #42a5f5;\n}\n.dark-theme.fr-popup .fr-action-buttons button::-moz-focus-inner {\n  border: 0;\n}\n.dark-theme.fr-popup .fr-checkbox span {\n  border: solid 1px #ffffff;\n  border-radius: 2px;\n  -moz-border-radius: 2px;\n  -webkit-border-radius: 2px;\n  -moz-background-clip: padding;\n  -webkit-background-clip: padding-box;\n  background-clip: padding-box;\n  -webkit-transition: background 0.2s ease 0s, border-color 0.2s ease 0s;\n  -moz-transition: background 0.2s ease 0s, border-color 0.2s ease 0s;\n  -ms-transition: background 0.2s ease 0s, border-color 0.2s ease 0s;\n  -o-transition: background 0.2s ease 0s, border-color 0.2s ease 0s;\n}\n.dark-theme.fr-popup .fr-checkbox input {\n  margin: 0;\n  padding: 0;\n}\n.dark-theme.fr-popup .fr-checkbox input:checked + span {\n  background: #42a5f5;\n  border-color: #42a5f5;\n}\n.dark-theme.fr-popup .fr-checkbox input:focus + span {\n  border-color: #42a5f5;\n}\n.dark-theme.fr-popup.fr-rtl .fr-input-line input + label,\n.dark-theme.fr-popup.fr-rtl .fr-input-line textarea + label {\n  left: auto;\n  right: 0;\n}\n.dark-theme.fr-popup .fr-arrow {\n  width: 0;\n  height: 0;\n  border-left: 5px solid transparent;\n  border-right: 5px solid transparent;\n  border-bottom: 5px solid #222222;\n  top: -9px;\n  margin-left: -5px;\n}\n.dark-theme.fr-popup.fr-above .fr-arrow {\n  top: auto;\n  bottom: -9px;\n  border-bottom: 0;\n  border-top: 5px solid #222222;\n}\n.dark-theme.fr-toolbar {\n  color: #ffffff;\n  background: #353535;\n  font-family: Arial, Helvetica, sans-serif;\n  padding: 0 2px;\n  border-radius: 2px;\n  -moz-border-radius: 2px;\n  -webkit-border-radius: 2px;\n  -moz-background-clip: padding;\n  -webkit-background-clip: padding-box;\n  background-clip: padding-box;\n  -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n  -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n  border: 0px;\n  border-top: 5px solid #222222;\n}\n.dark-theme.fr-toolbar.fr-inline .fr-arrow {\n  width: 0;\n  height: 0;\n  border-left: 5px solid transparent;\n  border-right: 5px solid transparent;\n  border-bottom: 5px solid #222222;\n  top: -9px;\n  margin-left: -5px;\n}\n.dark-theme.fr-toolbar.fr-inline.fr-above {\n  -webkit-box-shadow: 0 -1px 3px rgba(0, 0, 0, 0.12), 0 -1px 1px 1px rgba(0, 0, 0, 0.16);\n  -moz-box-shadow: 0 -1px 3px rgba(0, 0, 0, 0.12), 0 -1px 1px 1px rgba(0, 0, 0, 0.16);\n  box-shadow: 0 -1px 3px rgba(0, 0, 0, 0.12), 0 -1px 1px 1px rgba(0, 0, 0, 0.16);\n  border-bottom: 5px solid #222222;\n  border-top: 0;\n}\n.dark-theme.fr-toolbar.fr-inline.fr-above .fr-arrow {\n  top: auto;\n  bottom: -9px;\n  border-bottom: 0;\n  border-top-color: inherit;\n  border-top-width: 5px;\n}\n.dark-theme.fr-toolbar.fr-top {\n  top: 0;\n  border-radius: 2px 2px 0 0;\n  -moz-border-radius: 2px 2px 0 0;\n  -webkit-border-radius: 2px 2px 0 0;\n  -moz-background-clip: padding;\n  -webkit-background-clip: padding-box;\n  background-clip: padding-box;\n  -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n  -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n}\n.dark-theme.fr-toolbar.fr-bottom {\n  bottom: 0;\n  border-radius: 0 0 2px 2px;\n  -moz-border-radius: 0 0 2px 2px;\n  -webkit-border-radius: 0 0 2px 2px;\n  -moz-background-clip: padding;\n  -webkit-background-clip: padding-box;\n  background-clip: padding-box;\n  -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n  -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n}\n.dark-theme .fr-separator {\n  background: #595959;\n}\n.dark-theme .fr-separator.fr-vs {\n  height: 34px;\n  width: 1px;\n  margin: 2px;\n}\n.dark-theme .fr-separator.fr-hs {\n  height: 1px;\n  width: calc(100% - (2 * 2px));\n  margin: 0 2px;\n}\n"
  },
  {
    "path": "src/main/resources/static/plugins/froala-editor/css/themes/gray.css",
    "content": "/*!\n * froala_editor v2.9.1 (https://www.froala.com/wysiwyg-editor)\n * License https://froala.com/wysiwyg-editor/terms/\n * Copyright 2014-2018 Froala Labs\n */\n\n.clearfix::after {\n  clear: both;\n  display: block;\n  content: \"\";\n  height: 0;\n}\n.hide-by-clipping {\n  position: absolute;\n  width: 1px;\n  height: 1px;\n  padding: 0;\n  margin: -1px;\n  overflow: hidden;\n  clip: rect(0, 0, 0, 0);\n  border: 0;\n}\n.gray-theme.fr-box.fr-basic .fr-element {\n  color: #000000;\n  padding: 16px;\n  overflow-x: auto;\n  min-height: 52px;\n}\n.gray-theme .fr-element {\n  -webkit-user-select: auto;\n}\n.gray-theme.fr-box a.fr-floating-btn {\n  -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n  -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n  height: 32px;\n  width: 32px;\n  background: #ffffff;\n  color: #0097a7;\n  -webkit-transition: background 0.2s ease 0s, color 0.2s ease 0s, transform 0.2s ease 0s;\n  -moz-transition: background 0.2s ease 0s, color 0.2s ease 0s, transform 0.2s ease 0s;\n  -ms-transition: background 0.2s ease 0s, color 0.2s ease 0s, transform 0.2s ease 0s;\n  -o-transition: background 0.2s ease 0s, color 0.2s ease 0s, transform 0.2s ease 0s;\n  left: 0;\n  top: 0;\n  line-height: 32px;\n  border: none;\n}\n.gray-theme.fr-box a.fr-floating-btn svg {\n  -webkit-transition: transform 0.2s ease 0s;\n  -moz-transition: transform 0.2s ease 0s;\n  -ms-transition: transform 0.2s ease 0s;\n  -o-transition: transform 0.2s ease 0s;\n  fill: #0097a7;\n}\n.gray-theme.fr-box a.fr-floating-btn i,\n.gray-theme.fr-box a.fr-floating-btn svg {\n  font-size: 14px;\n  line-height: 32px;\n}\n.gray-theme.fr-box a.fr-floating-btn:hover {\n  background: #e6e6e6;\n}\n.gray-theme.fr-box a.fr-floating-btn:hover svg {\n  fill: #0097a7;\n}\n.gray-theme .fr-wrapper .fr-placeholder {\n  font-size: 12px;\n  color: #aaaaaa;\n  top: 0;\n  left: 0;\n  right: 0;\n}\n.gray-theme .fr-wrapper ::-moz-selection {\n  background: #b5d6fd;\n  color: #000000;\n}\n.gray-theme .fr-wrapper ::selection {\n  background: #b5d6fd;\n  color: #000000;\n}\n.gray-theme.fr-box.fr-basic .fr-wrapper {\n  background: #ffffff;\n  border: 0px;\n  border-top: 0;\n  top: 0;\n  left: 0;\n}\n.gray-theme.fr-box.fr-basic.fr-top .fr-wrapper {\n  border-top: 0;\n  border-radius: 0 0 2px 2px;\n  -moz-border-radius: 0 0 2px 2px;\n  -webkit-border-radius: 0 0 2px 2px;\n  -moz-background-clip: padding;\n  -webkit-background-clip: padding-box;\n  background-clip: padding-box;\n  -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n  -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n}\n.gray-theme.fr-box.fr-basic.fr-bottom .fr-wrapper {\n  border-bottom: 0;\n  border-radius: 2px 2px 0 0;\n  -moz-border-radius: 2px 2px 0 0;\n  -webkit-border-radius: 2px 2px 0 0;\n  -moz-background-clip: padding;\n  -webkit-background-clip: padding-box;\n  background-clip: padding-box;\n  -webkit-box-shadow: 0 -1px 3px rgba(0, 0, 0, 0.12), 0 -1px 1px 1px rgba(0, 0, 0, 0.16);\n  -moz-box-shadow: 0 -1px 3px rgba(0, 0, 0, 0.12), 0 -1px 1px 1px rgba(0, 0, 0, 0.16);\n  box-shadow: 0 -1px 3px rgba(0, 0, 0, 0.12), 0 -1px 1px 1px rgba(0, 0, 0, 0.16);\n}\n@media (min-width: 992px) {\n  .gray-theme .fr-box.fr-document .fr-wrapper .fr-element {\n    margin: auto;\n    -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n    -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n    box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n  }\n}\n.gray-theme .fr-sticky-on.fr-sticky-ios {\n  left: 0;\n  right: 0;\n}\n.gray-theme.fr-box .fr-counter {\n  color: #cccccc;\n  background: #ffffff;\n  border-top: solid 1px #ebebeb;\n  border-left: solid 1px #ebebeb;\n  border-radius: 2px 0 0 0;\n  -moz-border-radius: 2px 0 0 0;\n  -webkit-border-radius: 2px 0 0 0;\n  -moz-background-clip: padding;\n  -webkit-background-clip: padding-box;\n  background-clip: padding-box;\n}\n.gray-theme.fr-box.fr-rtl .fr-counter {\n  right: auto;\n  border-right: solid 1px #ebebeb;\n  border-radius: 0 2px 0 0;\n  -moz-border-radius: 0 2px 0 0;\n  -webkit-border-radius: 0 2px 0 0;\n  -moz-background-clip: padding;\n  -webkit-background-clip: padding-box;\n  background-clip: padding-box;\n}\n.gray-theme textarea.fr-code {\n  background: #ffffff;\n  color: #000000;\n}\n.gray-theme.fr-box.fr-code-view.fr-inline {\n  -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n  -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n}\n.gray-theme.fr-box.fr-inline .fr-command.fr-btn.html-switch {\n  top: 0;\n  right: 0;\n  -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n  -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n  background: #ffffff;\n  color: #37474f;\n  -moz-outline: 0;\n  outline: 0;\n  border: 0;\n  padding: 12px 12px;\n  -webkit-transition: background 0.2s ease 0s;\n  -moz-transition: background 0.2s ease 0s;\n  -ms-transition: background 0.2s ease 0s;\n  -o-transition: background 0.2s ease 0s;\n}\n.gray-theme.fr-box.fr-inline .fr-command.fr-btn.html-switch i {\n  font-size: 14px;\n  width: 14px;\n}\n.gray-theme.fr-box.fr-inline .fr-command.fr-btn.html-switch.fr-desktop:hover {\n  background: #e6e6e6;\n}\n.gray-theme.fr-popup .fr-colors-tabs {\n  -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n  -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n}\n.gray-theme.fr-popup .fr-colors-tabs .fr-colors-tab {\n  color: #37474f;\n  padding: 8px 0;\n}\n.gray-theme.fr-popup .fr-colors-tabs .fr-colors-tab:hover,\n.gray-theme.fr-popup .fr-colors-tabs .fr-colors-tab:focus {\n  color: #0097a7;\n}\n.gray-theme.fr-popup .fr-colors-tabs .fr-colors-tab[data-param1=\"background\"]::after {\n  bottom: 0;\n  left: 0;\n  background: #0097a7;\n  -webkit-transition: transform 0.2s ease 0s;\n  -moz-transition: transform 0.2s ease 0s;\n  -ms-transition: transform 0.2s ease 0s;\n  -o-transition: transform 0.2s ease 0s;\n}\n.gray-theme.fr-popup .fr-colors-tabs .fr-colors-tab.fr-selected-tab {\n  color: #0097a7;\n}\n.gray-theme.fr-popup .fr-color-hex-layer .fr-input-line {\n  padding: 8px 0 0;\n}\n.gray-theme.fr-popup .fr-color-hex-layer .fr-action-buttons button {\n  background-color: #0097a7;\n  border-radius: 2px;\n  -moz-border-radius: 2px;\n  -webkit-border-radius: 2px;\n  -moz-background-clip: padding;\n  -webkit-background-clip: padding-box;\n  background-clip: padding-box;\n}\n.gray-theme.fr-popup .fr-color-hex-layer .fr-action-buttons button:hover {\n  background-color: #006974;\n}\n.gray-theme.fr-popup .fr-color-set {\n  line-height: 0;\n}\n.gray-theme.fr-popup .fr-color-set > span > i,\n.gray-theme.fr-popup .fr-color-set > span > svg {\n  bottom: 0;\n  left: 0;\n}\n.gray-theme.fr-popup .fr-color-set > span .fr-selected-color {\n  color: #ffffff;\n  font-weight: 400;\n  top: 0;\n  bottom: 0;\n  right: 0;\n  left: 0;\n}\n.gray-theme.fr-popup .fr-color-set > span:hover,\n.gray-theme.fr-popup .fr-color-set > span:focus {\n  outline: 1px solid #37474f;\n}\n.gray-theme .fr-drag-helper {\n  background: #0097a7;\n  z-index: 2147483640;\n}\n.gray-theme.fr-popup .fr-link:focus {\n  outline: 0;\n  background: #e6e6e6;\n}\n.gray-theme.fr-popup .fr-file-upload-layer {\n  border: dashed 2px #b7bdc0;\n  padding: 25px 0;\n}\n.gray-theme.fr-popup .fr-file-upload-layer:hover {\n  background: #e6e6e6;\n}\n.gray-theme.fr-popup .fr-file-upload-layer.fr-drop {\n  background: #e6e6e6;\n  border-color: #0097a7;\n}\n.gray-theme.fr-popup .fr-file-upload-layer .fr-form {\n  top: 0;\n  bottom: 0;\n  left: 0;\n  right: 0;\n  z-index: 2147483640;\n}\n.gray-theme.fr-popup .fr-file-progress-bar-layer > h3 {\n  margin: 10px 0;\n}\n.gray-theme.fr-popup .fr-file-progress-bar-layer > div.fr-loader {\n  background: #b3e0e5;\n}\n.gray-theme.fr-popup .fr-file-progress-bar-layer > div.fr-loader span {\n  background: #0097a7;\n  -webkit-transition: width 0.2s ease 0s;\n  -moz-transition: width 0.2s ease 0s;\n  -ms-transition: width 0.2s ease 0s;\n  -o-transition: width 0.2s ease 0s;\n}\n.gray-theme.fr-popup .fr-file-progress-bar-layer > div.fr-loader.fr-indeterminate span {\n  top: 0;\n}\n.gray-theme.fr-box.fr-fullscreen {\n  top: 0;\n  left: 0;\n  bottom: 0;\n  right: 0;\n}\n.gray-theme.fr-modal .fr-modal-wrapper .fr-modal-body .fr-help-modal table tr {\n  border: 0;\n}\n.gray-theme.fr-modal .fr-modal-wrapper .fr-modal-body .fr-help-modal table tbody tr {\n  border-bottom: solid 1px #ebebeb;\n}\n.gray-theme.fr-modal .fr-modal-wrapper .fr-modal-body .fr-help-modal table tbody td:first-child {\n  color: #737e84;\n}\n.gray-theme .fr-image-resizer {\n  border: solid 1px #0097a7;\n}\n.gray-theme .fr-image-resizer .fr-handler {\n  background: #0097a7;\n  border: solid 1px #ffffff;\n}\n.gray-theme .fr-image-resizer .fr-handler {\n  width: 12px;\n  height: 12px;\n}\n.gray-theme .fr-image-resizer .fr-handler.fr-hnw {\n  left: -6px;\n  top: -6px;\n}\n.gray-theme .fr-image-resizer .fr-handler.fr-hne {\n  right: -6px;\n  top: -6px;\n}\n.gray-theme .fr-image-resizer .fr-handler.fr-hsw {\n  left: -6px;\n  bottom: -6px;\n}\n.gray-theme .fr-image-resizer .fr-handler.fr-hse {\n  right: -6px;\n  bottom: -6px;\n}\n@media (min-width: 1200px) {\n  .gray-theme .fr-image-resizer .fr-handler {\n    width: 10px;\n    height: 10px;\n  }\n  .gray-theme .fr-image-resizer .fr-handler.fr-hnw {\n    left: -5px;\n    top: -5px;\n  }\n  .gray-theme .fr-image-resizer .fr-handler.fr-hne {\n    right: -5px;\n    top: -5px;\n  }\n  .gray-theme .fr-image-resizer .fr-handler.fr-hsw {\n    left: -5px;\n    bottom: -5px;\n  }\n  .gray-theme .fr-image-resizer .fr-handler.fr-hse {\n    right: -5px;\n    bottom: -5px;\n  }\n}\n.gray-theme.fr-image-overlay {\n  top: 0;\n  left: 0;\n  bottom: 0;\n  right: 0;\n  z-index: 2147483640;\n}\n.gray-theme.fr-popup .fr-image-upload-layer {\n  border: dashed 2px #b7bdc0;\n  padding: 25px 0;\n}\n.gray-theme.fr-popup .fr-image-upload-layer:hover {\n  background: #e6e6e6;\n}\n.gray-theme.fr-popup .fr-image-upload-layer.fr-drop {\n  background: #e6e6e6;\n  border-color: #0097a7;\n}\n.gray-theme.fr-popup .fr-image-upload-layer .fr-form {\n  top: 0;\n  bottom: 0;\n  left: 0;\n  right: 0;\n  z-index: 2147483640;\n}\n.gray-theme.fr-popup .fr-image-progress-bar-layer > h3 {\n  margin: 10px 0;\n}\n.gray-theme.fr-popup .fr-image-progress-bar-layer > div.fr-loader {\n  background: #b3e0e5;\n}\n.gray-theme.fr-popup .fr-image-progress-bar-layer > div.fr-loader span {\n  background: #0097a7;\n  -webkit-transition: width 0.2s ease 0s;\n  -moz-transition: width 0.2s ease 0s;\n  -ms-transition: width 0.2s ease 0s;\n  -o-transition: width 0.2s ease 0s;\n}\n.gray-theme.fr-popup .fr-image-progress-bar-layer > div.fr-loader.fr-indeterminate span {\n  top: 0;\n}\n.gray-theme.fr-modal-head .fr-modal-head-line i.fr-modal-more {\n  -webkit-transition: padding 0.2s ease 0s, width 0.2s ease 0s, opacity 0.2s ease 0s;\n  -moz-transition: padding 0.2s ease 0s, width 0.2s ease 0s, opacity 0.2s ease 0s;\n  -ms-transition: padding 0.2s ease 0s, width 0.2s ease 0s, opacity 0.2s ease 0s;\n  -o-transition: padding 0.2s ease 0s, width 0.2s ease 0s, opacity 0.2s ease 0s;\n}\n.gray-theme.fr-modal-head .fr-modal-head-line i.fr-modal-more.fr-not-available {\n  opacity: 0;\n  width: 0;\n  padding: 12px 0;\n}\n.gray-theme.fr-modal-head .fr-modal-tags a {\n  opacity: 0;\n  border-radius: 2px;\n  -moz-border-radius: 2px;\n  -webkit-border-radius: 2px;\n  -moz-background-clip: padding;\n  -webkit-background-clip: padding-box;\n  background-clip: padding-box;\n  color: #0097a7;\n  -webkit-transition: opacity 0.2s ease 0s, background 0.2s ease 0s;\n  -moz-transition: opacity 0.2s ease 0s, background 0.2s ease 0s;\n  -ms-transition: opacity 0.2s ease 0s, background 0.2s ease 0s;\n  -o-transition: opacity 0.2s ease 0s, background 0.2s ease 0s;\n}\n.gray-theme.fr-modal-head .fr-modal-tags a.fr-selected-tag {\n  background: #d6d6d6;\n}\n.gray-themediv.fr-modal-body .fr-preloader {\n  margin: 50px auto;\n}\n.gray-themediv.fr-modal-body div.fr-image-list {\n  padding: 0;\n}\n.gray-themediv.fr-modal-body div.fr-image-list div.fr-image-container {\n  -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n  -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n  border-radius: 2px;\n  -moz-border-radius: 2px;\n  -webkit-border-radius: 2px;\n  -moz-background-clip: padding;\n  -webkit-background-clip: padding-box;\n  background-clip: padding-box;\n}\n.gray-themediv.fr-modal-body div.fr-image-list div.fr-image-container.fr-image-deleting::after {\n  -webkit-transition: opacity 0.2s ease 0s;\n  -moz-transition: opacity 0.2s ease 0s;\n  -ms-transition: opacity 0.2s ease 0s;\n  -o-transition: opacity 0.2s ease 0s;\n  background: #000000;\n  top: 0;\n  left: 0;\n  bottom: 0;\n  right: 0;\n}\n.gray-themediv.fr-modal-body div.fr-image-list div.fr-image-container.fr-image-deleting::before {\n  color: #ffffff;\n  top: 0;\n  left: 0;\n  bottom: 0;\n  right: 0;\n  margin: auto;\n}\n.gray-themediv.fr-modal-body div.fr-image-list div.fr-image-container.fr-empty {\n  background: #cccccc;\n}\n.gray-themediv.fr-modal-body div.fr-image-list div.fr-image-container.fr-empty::after {\n  margin: auto;\n  top: 0;\n  bottom: 0;\n  left: 0;\n  right: 0;\n}\n.gray-themediv.fr-modal-body div.fr-image-list div.fr-image-container img {\n  -webkit-transition: opacity 0.2s ease 0s, filter 0.2s ease 0s;\n  -moz-transition: opacity 0.2s ease 0s, filter 0.2s ease 0s;\n  -ms-transition: opacity 0.2s ease 0s, filter 0.2s ease 0s;\n  -o-transition: opacity 0.2s ease 0s, filter 0.2s ease 0s;\n}\n.gray-themediv.fr-modal-body div.fr-image-list div.fr-image-container .fr-delete-img,\n.gray-themediv.fr-modal-body div.fr-image-list div.fr-image-container .fr-insert-img {\n  -webkit-transition: background 0.2s ease 0s, color 0.2s ease 0s;\n  -moz-transition: background 0.2s ease 0s, color 0.2s ease 0s;\n  -ms-transition: background 0.2s ease 0s, color 0.2s ease 0s;\n  -o-transition: background 0.2s ease 0s, color 0.2s ease 0s;\n  -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n  -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n  margin: 0;\n}\n.gray-themediv.fr-modal-body div.fr-image-list div.fr-image-container .fr-delete-img {\n  background: #b8312f;\n  color: #ffffff;\n}\n.gray-themediv.fr-modal-body div.fr-image-list div.fr-image-container .fr-insert-img {\n  background: #f5f5f5;\n  color: #0097a7;\n}\n.gray-theme.gray-theme.fr-desktop .fr-modal-wrapper .fr-modal-head .fr-modal-tags a:hover {\n  background: #e6e6e6;\n}\n.gray-theme.gray-theme.fr-desktop .fr-modal-wrapper .fr-modal-head .fr-modal-tags a.fr-selected-tag {\n  background: #d6d6d6;\n}\n.gray-theme.gray-theme.fr-desktop .fr-modal-wrapper div.fr-modal-body div.fr-image-list div.fr-image-container .fr-delete-img:hover {\n  background: #bf4644;\n  color: #ffffff;\n}\n.gray-theme.gray-theme.fr-desktop .fr-modal-wrapper div.fr-modal-body div.fr-image-list div.fr-image-container .fr-insert-img:hover {\n  background: #e6e6e6;\n}\n.gray-theme .fr-line-breaker {\n  border-top: 1px solid #0097a7;\n}\n.gray-theme .fr-line-breaker a.fr-floating-btn {\n  left: calc(50% - (32px / 2));\n  top: -16px;\n}\n.gray-theme .fr-qi-helper {\n  padding-left: 16px;\n}\n.gray-theme .fr-qi-helper a.fr-btn.fr-floating-btn {\n  color: #37474f;\n}\n.gray-theme.fr-modal .fr-modal-wrapper .fr-modal-body .fr-special-characters-modal .fr-special-character {\n  border: 1px solid #cccccc;\n}\n.gray-theme .fr-element table td.fr-selected-cell,\n.gray-theme .fr-element table th.fr-selected-cell {\n  border: 1px double #0097a7;\n}\n.gray-theme .fr-table-resizer div {\n  border-right: 1px solid #0097a7;\n}\n.gray-theme.fr-popup .fr-table-colors-hex-layer .fr-input-line {\n  padding: 8px 0 0;\n}\n.gray-theme.fr-popup .fr-table-colors-hex-layer .fr-action-buttons button {\n  background-color: #0097a7;\n  border-radius: 2px;\n  -moz-border-radius: 2px;\n  -webkit-border-radius: 2px;\n  -moz-background-clip: padding;\n  -webkit-background-clip: padding-box;\n  background-clip: padding-box;\n}\n.gray-theme.fr-popup .fr-table-colors-hex-layer .fr-action-buttons button:hover {\n  background-color: #006974;\n}\n.gray-theme.fr-popup .fr-table-size .fr-select-table-size {\n  line-height: 0;\n}\n.gray-theme.fr-popup .fr-table-size .fr-select-table-size > span {\n  padding: 0px 4px 4px 0;\n}\n.gray-theme.fr-popup .fr-table-size .fr-select-table-size > span > span {\n  border: 1px solid #dddddd;\n}\n.gray-theme.fr-popup .fr-table-size .fr-select-table-size > span.hover > span {\n  background: rgba(0, 151, 167, 0.3);\n  border: solid 1px #0097a7;\n}\n.gray-theme.fr-popup .fr-table-colors {\n  line-height: 0;\n}\n.gray-theme.fr-popup .fr-table-colors > span > i {\n  bottom: 0;\n  left: 0;\n}\n.gray-theme.fr-popup .fr-table-colors > span:focus {\n  outline: 1px solid #37474f;\n}\n.gray-theme .fr-element .fr-video::after {\n  top: 0;\n  left: 0;\n  right: 0;\n  bottom: 0;\n}\n.gray-theme.fr-box .fr-video-resizer {\n  border: solid 1px #0097a7;\n}\n.gray-theme.fr-box .fr-video-resizer .fr-handler {\n  background: #0097a7;\n  border: solid 1px #ffffff;\n}\n.gray-theme.fr-box .fr-video-resizer .fr-handler {\n  width: 12px;\n  height: 12px;\n}\n.gray-theme.fr-box .fr-video-resizer .fr-handler.fr-hnw {\n  left: -6px;\n  top: -6px;\n}\n.gray-theme.fr-box .fr-video-resizer .fr-handler.fr-hne {\n  right: -6px;\n  top: -6px;\n}\n.gray-theme.fr-box .fr-video-resizer .fr-handler.fr-hsw {\n  left: -6px;\n  bottom: -6px;\n}\n.gray-theme.fr-box .fr-video-resizer .fr-handler.fr-hse {\n  right: -6px;\n  bottom: -6px;\n}\n@media (min-width: 1200px) {\n  .gray-theme.fr-box .fr-video-resizer .fr-handler {\n    width: 10px;\n    height: 10px;\n  }\n  .gray-theme.fr-box .fr-video-resizer .fr-handler.fr-hnw {\n    left: -5px;\n    top: -5px;\n  }\n  .gray-theme.fr-box .fr-video-resizer .fr-handler.fr-hne {\n    right: -5px;\n    top: -5px;\n  }\n  .gray-theme.fr-box .fr-video-resizer .fr-handler.fr-hsw {\n    left: -5px;\n    bottom: -5px;\n  }\n  .gray-theme.fr-box .fr-video-resizer .fr-handler.fr-hse {\n    right: -5px;\n    bottom: -5px;\n  }\n}\n.gray-theme.fr-popup .fr-video-upload-layer {\n  border: dashed 2px #b7bdc0;\n  padding: 25px 0;\n}\n.gray-theme.fr-popup .fr-video-upload-layer:hover {\n  background: #e6e6e6;\n}\n.gray-theme.fr-popup .fr-video-upload-layer.fr-drop {\n  background: #e6e6e6;\n  border-color: #0097a7;\n}\n.gray-theme.fr-popup .fr-video-upload-layer .fr-form {\n  top: 0;\n  bottom: 0;\n  left: 0;\n  right: 0;\n  z-index: 2147483640;\n}\n.gray-theme.fr-popup .fr-video-progress-bar-layer > h3 {\n  margin: 10px 0;\n}\n.gray-theme.fr-popup .fr-video-progress-bar-layer > div.fr-loader {\n  background: #b3e0e5;\n}\n.gray-theme.fr-popup .fr-video-progress-bar-layer > div.fr-loader span {\n  background: #0097a7;\n  -webkit-transition: width 0.2s ease 0s;\n  -moz-transition: width 0.2s ease 0s;\n  -ms-transition: width 0.2s ease 0s;\n  -o-transition: width 0.2s ease 0s;\n}\n.gray-theme.fr-popup .fr-video-progress-bar-layer > div.fr-loader.fr-indeterminate span {\n  top: 0;\n}\n.gray-theme.fr-video-overlay {\n  top: 0;\n  left: 0;\n  bottom: 0;\n  right: 0;\n  z-index: 2147483640;\n}\n.gray-theme .fr-view span[style~=\"color:\"] a {\n  color: inherit;\n}\n.gray-theme .fr-view strong {\n  font-weight: 700;\n}\n.gray-theme .fr-view table.fr-alternate-rows tbody tr:nth-child(2n) {\n  background: #f5f5f5;\n}\n.gray-theme .fr-view table td,\n.gray-theme .fr-view table th {\n  border: 1px solid #dddddd;\n}\n.gray-theme .fr-view table th {\n  background: #e6e6e6;\n}\n.gray-theme .fr-view[dir=\"rtl\"] blockquote {\n  border-right: solid 2px #5e35b1;\n  margin-right: 0;\n}\n.gray-theme .fr-view[dir=\"rtl\"] blockquote blockquote {\n  border-color: #00bcd4;\n}\n.gray-theme .fr-view[dir=\"rtl\"] blockquote blockquote blockquote {\n  border-color: #43a047;\n}\n.gray-theme .fr-view blockquote {\n  border-left: solid 2px #5e35b1;\n  margin-left: 0;\n  color: #5e35b1;\n}\n.gray-theme .fr-view blockquote blockquote {\n  border-color: #00bcd4;\n  color: #00bcd4;\n}\n.gray-theme .fr-view blockquote blockquote blockquote {\n  border-color: #43a047;\n  color: #43a047;\n}\n.gray-theme .fr-view span.fr-emoticon {\n  line-height: 0;\n}\n.gray-theme .fr-view span.fr-emoticon.fr-emoticon-img {\n  font-size: inherit;\n}\n.gray-theme .fr-view .fr-text-bordered {\n  padding: 10px 0;\n}\n.gray-theme .fr-view .fr-class-highlighted {\n  background-color: #ffff00;\n}\n.gray-theme .fr-view .fr-img-caption .fr-img-wrap {\n  margin: auto;\n}\n.gray-theme .fr-view .fr-img-caption .fr-img-wrap img {\n  margin: auto;\n}\n.gray-theme .fr-view .fr-img-caption .fr-img-wrap > span {\n  margin: auto;\n}\n.gray-theme .fr-element .fr-embedly::after {\n  top: 0;\n  left: 0;\n  right: 0;\n  bottom: 0;\n}\n.gray-theme.fr-box .fr-embedly-resizer {\n  border: solid 1px #0097a7;\n}\n.gray-theme.fr-modal .fr-modal-wrapper .fr-modal-body .fr-font-awesome-modal .fr-font-awesome-title {\n  border-bottom: solid 1px #f0f0f0;\n}\n.gray-theme .tui-image-editor-container {\n  top: 0;\n  left: 0;\n  bottom: 0;\n  right: 0;\n  z-index: 10;\n}\n.gray-theme .tui-editor-cancel-btn {\n  background-color: #ffffff;\n  border: 1px solid #cccccc;\n}\n.gray-theme .tui-editor-save-btn {\n  color: #ffffff;\n}\n.gray-theme .examples-variante > a {\n  font-size: 14px;\n  font-family: Arial, Helvetica, sans-serif;\n}\n.gray-theme .sc-cm-holder > .sc-cm {\n  border-top: 5px solid #bdbdbd !important;\n}\n.gray-theme .sc-cm__item_dropdown:hover > a,\n.gray-theme .sc-cm a:hover {\n  background-color: #e6e6e6 !important;\n}\n.gray-theme .sc-cm__item_active > a,\n.gray-theme .sc-cm__item_active > a:hover,\n.gray-theme .sc-cm a:active,\n.gray-theme .sc-cm a:focus {\n  background-color: #d6d6d6 !important;\n}\n.gray-theme .sc-cm-holder > .sc-cm:before {\n  background-color: #e6e6e6 !important;\n}\n.gray-theme .fr-tooltip {\n  top: 0;\n  left: 0;\n  border-radius: 2px;\n  -moz-border-radius: 2px;\n  -webkit-border-radius: 2px;\n  -moz-background-clip: padding;\n  -webkit-background-clip: padding-box;\n  background-clip: padding-box;\n  -webkit-box-shadow: 0 3px 6px rgba(0, 0, 0, 0.16), 0 2px 2px 1px rgba(0, 0, 0, 0.14);\n  -moz-box-shadow: 0 3px 6px rgba(0, 0, 0, 0.16), 0 2px 2px 1px rgba(0, 0, 0, 0.14);\n  box-shadow: 0 3px 6px rgba(0, 0, 0, 0.16), 0 2px 2px 1px rgba(0, 0, 0, 0.14);\n  background: #222222;\n  color: #ffffff;\n  font-size: 11px;\n  line-height: 22px;\n  font-family: Arial, Helvetica, sans-serif;\n  -webkit-transition: opacity 0.2s ease 0s;\n  -moz-transition: opacity 0.2s ease 0s;\n  -ms-transition: opacity 0.2s ease 0s;\n  -o-transition: opacity 0.2s ease 0s;\n}\n.gray-theme.fr-toolbar .fr-command.fr-btn,\n.gray-theme.fr-popup .fr-command.fr-btn {\n  color: #37474f;\n  -moz-outline: 0;\n  outline: 0;\n  border: 0;\n  margin: 0px 2px;\n  -webkit-transition: background 0.2s ease 0s;\n  -moz-transition: background 0.2s ease 0s;\n  -ms-transition: background 0.2s ease 0s;\n  -o-transition: background 0.2s ease 0s;\n  padding: 0;\n  width: 38px;\n  height: 38px;\n}\n.gray-theme.fr-toolbar .fr-command.fr-btn::-moz-focus-inner,\n.gray-theme.fr-popup .fr-command.fr-btn::-moz-focus-inner {\n  border: 0;\n}\n.gray-theme.fr-toolbar .fr-command.fr-btn.fr-btn-text,\n.gray-theme.fr-popup .fr-command.fr-btn.fr-btn-text {\n  width: auto;\n}\n.gray-theme.fr-toolbar .fr-command.fr-btn i,\n.gray-theme.fr-popup .fr-command.fr-btn i,\n.gray-theme.fr-toolbar .fr-command.fr-btn svg,\n.gray-theme.fr-popup .fr-command.fr-btn svg {\n  font-size: 14px;\n  width: 14px;\n  margin: 12px 12px;\n}\n.gray-theme.fr-toolbar .fr-command.fr-btn span,\n.gray-theme.fr-popup .fr-command.fr-btn span {\n  font-size: 14px;\n  line-height: 17px;\n  min-width: 34px;\n  height: 17px;\n  padding: 0 2px;\n}\n.gray-theme.fr-toolbar .fr-command.fr-btn img,\n.gray-theme.fr-popup .fr-command.fr-btn img {\n  margin: 12px 12px;\n  width: 14px;\n}\n.gray-theme.fr-toolbar .fr-command.fr-btn.fr-active,\n.gray-theme.fr-popup .fr-command.fr-btn.fr-active {\n  color: #0097a7;\n  background: transparent;\n}\n.gray-theme.fr-toolbar .fr-command.fr-btn.fr-dropdown.fr-selection,\n.gray-theme.fr-popup .fr-command.fr-btn.fr-dropdown.fr-selection {\n  width: auto;\n}\n.gray-theme.fr-toolbar .fr-command.fr-btn.fr-dropdown i,\n.gray-theme.fr-popup .fr-command.fr-btn.fr-dropdown i,\n.gray-theme.fr-toolbar .fr-command.fr-btn.fr-dropdown span,\n.gray-theme.fr-popup .fr-command.fr-btn.fr-dropdown span,\n.gray-theme.fr-toolbar .fr-command.fr-btn.fr-dropdown img,\n.gray-theme.fr-popup .fr-command.fr-btn.fr-dropdown img,\n.gray-theme.fr-toolbar .fr-command.fr-btn.fr-dropdown svg,\n.gray-theme.fr-popup .fr-command.fr-btn.fr-dropdown svg {\n  margin-left: 8px;\n  margin-right: 16px;\n}\n.gray-theme.fr-toolbar .fr-command.fr-btn.fr-dropdown.fr-active,\n.gray-theme.fr-popup .fr-command.fr-btn.fr-dropdown.fr-active {\n  color: #37474f;\n  background: #d6d6d6;\n}\n.gray-theme.fr-toolbar .fr-command.fr-btn.fr-dropdown.fr-active:hover,\n.gray-theme.fr-popup .fr-command.fr-btn.fr-dropdown.fr-active:hover,\n.gray-theme.fr-toolbar .fr-command.fr-btn.fr-dropdown.fr-active:focus,\n.gray-theme.fr-popup .fr-command.fr-btn.fr-dropdown.fr-active:focus {\n  background: #d6d6d6 !important;\n  color: #37474f !important;\n}\n.gray-theme.fr-toolbar .fr-command.fr-btn.fr-dropdown.fr-active:hover::after,\n.gray-theme.fr-popup .fr-command.fr-btn.fr-dropdown.fr-active:hover::after,\n.gray-theme.fr-toolbar .fr-command.fr-btn.fr-dropdown.fr-active:focus::after,\n.gray-theme.fr-popup .fr-command.fr-btn.fr-dropdown.fr-active:focus::after {\n  border-top-color: #37474f !important;\n}\n.gray-theme.fr-toolbar .fr-command.fr-btn.fr-dropdown::after,\n.gray-theme.fr-popup .fr-command.fr-btn.fr-dropdown::after {\n  width: 0;\n  height: 0;\n  border-left: 4px solid transparent;\n  border-right: 4px solid transparent;\n  border-top: 4px solid #37474f;\n  right: 4px;\n  top: 17px;\n}\n.gray-theme.fr-toolbar .fr-command.fr-btn.fr-disabled,\n.gray-theme.fr-popup .fr-command.fr-btn.fr-disabled {\n  color: #b7bdc0;\n}\n.gray-theme.fr-toolbar .fr-command.fr-btn.fr-disabled::after,\n.gray-theme.fr-popup .fr-command.fr-btn.fr-disabled::after {\n  border-top-color: #b7bdc0 !important;\n}\n.gray-theme.fr-toolbar.fr-disabled .fr-btn,\n.gray-theme.fr-popup.fr-disabled .fr-btn,\n.gray-theme.fr-toolbar.fr-disabled .fr-btn.fr-active,\n.gray-theme.fr-popup.fr-disabled .fr-btn.fr-active {\n  color: #b7bdc0;\n}\n.gray-theme.fr-toolbar.fr-disabled .fr-btn.fr-dropdown::after,\n.gray-theme.fr-popup.fr-disabled .fr-btn.fr-dropdown::after,\n.gray-theme.fr-toolbar.fr-disabled .fr-btn.fr-active.fr-dropdown::after,\n.gray-theme.fr-popup.fr-disabled .fr-btn.fr-active.fr-dropdown::after {\n  border-top-color: #b7bdc0;\n}\n.gray-theme.fr-desktop .fr-command:hover,\n.gray-theme.fr-desktop .fr-command:focus,\n.gray-theme.fr-desktop .fr-command.fr-btn-hover,\n.gray-theme.fr-desktop .fr-command.fr-expanded {\n  outline: 0;\n  color: #37474f;\n  background: #e6e6e6;\n}\n.gray-theme.fr-desktop .fr-command:hover::after,\n.gray-theme.fr-desktop .fr-command:focus::after,\n.gray-theme.fr-desktop .fr-command.fr-btn-hover::after,\n.gray-theme.fr-desktop .fr-command.fr-expanded::after {\n  border-top-color: #37474f !important;\n}\n.gray-theme.fr-desktop .fr-command.fr-selected {\n  color: #37474f;\n  background: #d6d6d6;\n}\n.gray-theme.fr-desktop .fr-command.fr-active:hover,\n.gray-theme.fr-desktop .fr-command.fr-active:focus,\n.gray-theme.fr-desktop .fr-command.fr-active.fr-btn-hover,\n.gray-theme.fr-desktop .fr-command.fr-active.fr-expanded {\n  color: #0097a7;\n  background: #e6e6e6;\n}\n.gray-theme.fr-desktop .fr-command.fr-active.fr-selected {\n  color: #0097a7;\n  background: #d6d6d6;\n}\n.gray-theme.fr-toolbar.fr-mobile .fr-command.fr-blink,\n.gray-theme.fr-popup.fr-mobile .fr-command.fr-blink {\n  background: transparent;\n}\n.gray-theme .fr-command.fr-btn.fr-options {\n  width: 16px;\n  margin-left: -5px;\n}\n.gray-theme .fr-command.fr-btn.fr-options.fr-btn-hover,\n.gray-theme .fr-command.fr-btn.fr-options:hover,\n.gray-theme .fr-command.fr-btn.fr-options:focus {\n  border-left: solid 1px #fafafa;\n}\n.gray-theme .fr-command.fr-btn + .fr-dropdown-menu {\n  right: auto;\n  bottom: auto;\n  height: auto;\n  border-radius: 0 0 2px 2px;\n  -moz-border-radius: 0 0 2px 2px;\n  -webkit-border-radius: 0 0 2px 2px;\n  -moz-background-clip: padding;\n  -webkit-background-clip: padding-box;\n  background-clip: padding-box;\n}\n.gray-theme .fr-command.fr-btn + .fr-dropdown-menu.test-height .fr-dropdown-wrapper {\n  height: auto;\n  max-height: 275px;\n}\n.gray-theme .fr-command.fr-btn + .fr-dropdown-menu .fr-dropdown-wrapper {\n  background: #f5f5f5;\n  padding: 0;\n  margin: auto;\n  -webkit-transition: max-height 0.2s ease 0s;\n  -moz-transition: max-height 0.2s ease 0s;\n  -ms-transition: max-height 0.2s ease 0s;\n  -o-transition: max-height 0.2s ease 0s;\n  margin-top: 0;\n  max-height: 0;\n  height: 0;\n}\n.gray-theme .fr-command.fr-btn + .fr-dropdown-menu .fr-dropdown-wrapper .fr-dropdown-content {\n  overflow: auto;\n  max-height: 275px;\n}\n.gray-theme .fr-command.fr-btn + .fr-dropdown-menu .fr-dropdown-wrapper .fr-dropdown-content ul.fr-dropdown-list {\n  margin: 0;\n  padding: 0;\n}\n.gray-theme .fr-command.fr-btn + .fr-dropdown-menu .fr-dropdown-wrapper .fr-dropdown-content ul.fr-dropdown-list li {\n  padding: 0;\n  margin: 0;\n}\n.gray-theme .fr-command.fr-btn + .fr-dropdown-menu .fr-dropdown-wrapper .fr-dropdown-content ul.fr-dropdown-list li a {\n  color: inherit;\n}\n.gray-theme .fr-command.fr-btn + .fr-dropdown-menu .fr-dropdown-wrapper .fr-dropdown-content ul.fr-dropdown-list li a.fr-active {\n  background: #d6d6d6;\n}\n.gray-theme .fr-command.fr-btn + .fr-dropdown-menu .fr-dropdown-wrapper .fr-dropdown-content ul.fr-dropdown-list li a.fr-disabled {\n  color: #b7bdc0;\n}\n.gray-theme .fr-command.fr-btn.fr-active + .fr-dropdown-menu {\n  -webkit-box-shadow: 0 3px 6px rgba(0, 0, 0, 0.16), 0 2px 2px 1px rgba(0, 0, 0, 0.14);\n  -moz-box-shadow: 0 3px 6px rgba(0, 0, 0, 0.16), 0 2px 2px 1px rgba(0, 0, 0, 0.14);\n  box-shadow: 0 3px 6px rgba(0, 0, 0, 0.16), 0 2px 2px 1px rgba(0, 0, 0, 0.14);\n}\n.gray-theme .fr-command.fr-btn.fr-active + .fr-dropdown-menu .fr-dropdown-wrapper {\n  height: auto;\n  max-height: 275px;\n}\n.gray-theme .fr-bottom > .fr-command.fr-btn + .fr-dropdown-menu {\n  border-radius: 2px 2px 0 0;\n  -moz-border-radius: 2px 2px 0 0;\n  -webkit-border-radius: 2px 2px 0 0;\n  -moz-background-clip: padding;\n  -webkit-background-clip: padding-box;\n  background-clip: padding-box;\n}\n.gray-theme.fr-modal {\n  color: #37474f;\n  font-family: Arial, Helvetica, sans-serif;\n  overflow-x: auto;\n  top: 0;\n  left: 0;\n  bottom: 0;\n  right: 0;\n  z-index: 2147483640;\n}\n.gray-theme.fr-modal.fr-middle .fr-modal-wrapper {\n  margin-top: 0;\n  margin-bottom: 0;\n  margin-left: auto;\n  margin-right: auto;\n}\n.gray-theme.fr-modal .fr-modal-wrapper {\n  border-radius: 2px;\n  -moz-border-radius: 2px;\n  -webkit-border-radius: 2px;\n  -moz-background-clip: padding;\n  -webkit-background-clip: padding-box;\n  background-clip: padding-box;\n  margin: 20px auto;\n  background: #ffffff;\n  -webkit-box-shadow: 0 5px 8px rgba(0, 0, 0, 0.19), 0 4px 3px 1px rgba(0, 0, 0, 0.14);\n  -moz-box-shadow: 0 5px 8px rgba(0, 0, 0, 0.19), 0 4px 3px 1px rgba(0, 0, 0, 0.14);\n  box-shadow: 0 5px 8px rgba(0, 0, 0, 0.19), 0 4px 3px 1px rgba(0, 0, 0, 0.14);\n  border: 0px;\n  border-top: 5px solid #bdbdbd;\n}\n@media (min-width: 768px) and (max-width: 991px) {\n  .gray-theme.fr-modal .fr-modal-wrapper {\n    margin: 30px auto;\n  }\n}\n@media (min-width: 992px) {\n  .gray-theme.fr-modal .fr-modal-wrapper {\n    margin: 50px auto;\n  }\n}\n.gray-theme.fr-modal .fr-modal-wrapper .fr-modal-head {\n  background: #f5f5f5;\n  -webkit-box-shadow: 0 3px 6px rgba(0, 0, 0, 0.16), 0 2px 2px 1px rgba(0, 0, 0, 0.14);\n  -moz-box-shadow: 0 3px 6px rgba(0, 0, 0, 0.16), 0 2px 2px 1px rgba(0, 0, 0, 0.14);\n  box-shadow: 0 3px 6px rgba(0, 0, 0, 0.16), 0 2px 2px 1px rgba(0, 0, 0, 0.14);\n  border-bottom: 0px;\n  -webkit-transition: height 0.2s ease 0s;\n  -moz-transition: height 0.2s ease 0s;\n  -ms-transition: height 0.2s ease 0s;\n  -o-transition: height 0.2s ease 0s;\n}\n.gray-theme.fr-modal .fr-modal-wrapper .fr-modal-head .fr-modal-close {\n  color: #37474f;\n  top: 0;\n  right: 0;\n  -webkit-transition: color 0.2s ease 0s;\n  -moz-transition: color 0.2s ease 0s;\n  -ms-transition: color 0.2s ease 0s;\n  -o-transition: color 0.2s ease 0s;\n}\n.gray-theme.fr-modal .fr-modal-wrapper .fr-modal-head h4 {\n  margin: 0;\n  font-weight: 400;\n}\n.gray-theme.fr-modal .fr-modal-wrapper div.fr-modal-body:focus {\n  outline: 0;\n}\n.gray-theme.fr-modal .fr-modal-wrapper div.fr-modal-body button.fr-command {\n  color: #0097a7;\n  -webkit-transition: background 0.2s ease 0s;\n  -moz-transition: background 0.2s ease 0s;\n  -ms-transition: background 0.2s ease 0s;\n  -o-transition: background 0.2s ease 0s;\n  border-radius: 2px;\n  -moz-border-radius: 2px;\n  -webkit-border-radius: 2px;\n  -moz-background-clip: padding;\n  -webkit-background-clip: padding-box;\n  background-clip: padding-box;\n}\n.gray-theme.fr-modal .fr-modal-wrapper div.fr-modal-body button.fr-command:hover,\n.gray-theme.fr-modal .fr-modal-wrapper div.fr-modal-body button.fr-command:focus {\n  background: #e6e6e6;\n  color: #0097a7;\n}\n.gray-theme.fr-modal .fr-modal-wrapper div.fr-modal-body button.fr-command:active {\n  background: #d6d6d6;\n  color: #0097a7;\n}\n.gray-theme.fr-modal .fr-modal-wrapper div.fr-modal-body button::-moz-focus-inner {\n  border: 0;\n}\n.gray-theme.gray-theme.fr-desktop .fr-modal-wrapper .fr-modal-head i:hover {\n  background: #e6e6e6;\n}\n.gray-theme.fr-overlay {\n  top: 0;\n  bottom: 0;\n  left: 0;\n  right: 0;\n  background: #000000;\n}\n.gray-theme.fr-popup {\n  color: #37474f;\n  background: #f5f5f5;\n  -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n  -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n  border-radius: 2px;\n  -moz-border-radius: 2px;\n  -webkit-border-radius: 2px;\n  -moz-background-clip: padding;\n  -webkit-background-clip: padding-box;\n  background-clip: padding-box;\n  font-family: Arial, Helvetica, sans-serif;\n  border: 0px;\n  border-top: 5px solid #bdbdbd;\n}\n.gray-theme.fr-popup .fr-input-focus {\n  background: #ebebeb;\n}\n.gray-theme.fr-popup.fr-above {\n  border-top: 0;\n  border-bottom: 5px solid #bdbdbd;\n  -webkit-box-shadow: 0 -1px 3px rgba(0, 0, 0, 0.12), 0 -1px 1px 1px rgba(0, 0, 0, 0.16);\n  -moz-box-shadow: 0 -1px 3px rgba(0, 0, 0, 0.12), 0 -1px 1px 1px rgba(0, 0, 0, 0.16);\n  box-shadow: 0 -1px 3px rgba(0, 0, 0, 0.12), 0 -1px 1px 1px rgba(0, 0, 0, 0.16);\n}\n.gray-theme.fr-popup .fr-input-line {\n  padding: 8px 0;\n}\n.gray-theme.fr-popup .fr-input-line input[type=\"text\"],\n.gray-theme.fr-popup .fr-input-line textarea {\n  margin: 0px 0 1px 0;\n  border-bottom: solid 1px #bdbdbd;\n  color: #37474f;\n}\n.gray-theme.fr-popup .fr-input-line input[type=\"text\"]:focus,\n.gray-theme.fr-popup .fr-input-line textarea:focus {\n  border-bottom: solid 2px #0097a7;\n}\n.gray-theme.fr-popup .fr-input-line input + label,\n.gray-theme.fr-popup .fr-input-line textarea + label {\n  top: 0;\n  left: 0;\n  -webkit-transition: color 0.2s ease 0s;\n  -moz-transition: color 0.2s ease 0s;\n  -ms-transition: color 0.2s ease 0s;\n  -o-transition: color 0.2s ease 0s;\n  background: #f5f5f5;\n}\n.gray-theme.fr-popup .fr-input-line input.fr-not-empty:focus + label,\n.gray-theme.fr-popup .fr-input-line textarea.fr-not-empty:focus + label {\n  color: #0097a7;\n}\n.gray-theme.fr-popup .fr-input-line input.fr-not-empty + label,\n.gray-theme.fr-popup .fr-input-line textarea.fr-not-empty + label {\n  color: #808080;\n}\n.gray-theme.fr-popup .fr-buttons {\n  -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n  -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n  padding: 0 2px;\n  line-height: 0;\n  border-bottom: 0px;\n}\n.gray-theme.fr-popup .fr-layer {\n  width: 225px;\n}\n@media (min-width: 768px) {\n  .gray-theme.fr-popup .fr-layer {\n    width: 300px;\n  }\n}\n.gray-theme.fr-popup .fr-action-buttons button.fr-command {\n  color: #0097a7;\n  -webkit-transition: background 0.2s ease 0s;\n  -moz-transition: background 0.2s ease 0s;\n  -ms-transition: background 0.2s ease 0s;\n  -o-transition: background 0.2s ease 0s;\n  border-radius: 2px;\n  -moz-border-radius: 2px;\n  -webkit-border-radius: 2px;\n  -moz-background-clip: padding;\n  -webkit-background-clip: padding-box;\n  background-clip: padding-box;\n}\n.gray-theme.fr-popup .fr-action-buttons button.fr-command:hover,\n.gray-theme.fr-popup .fr-action-buttons button.fr-command:focus {\n  background: #e6e6e6;\n  color: #0097a7;\n}\n.gray-theme.fr-popup .fr-action-buttons button.fr-command:active {\n  background: #d6d6d6;\n  color: #0097a7;\n}\n.gray-theme.fr-popup .fr-action-buttons button::-moz-focus-inner {\n  border: 0;\n}\n.gray-theme.fr-popup .fr-checkbox span {\n  border: solid 1px #37474f;\n  border-radius: 2px;\n  -moz-border-radius: 2px;\n  -webkit-border-radius: 2px;\n  -moz-background-clip: padding;\n  -webkit-background-clip: padding-box;\n  background-clip: padding-box;\n  -webkit-transition: background 0.2s ease 0s, border-color 0.2s ease 0s;\n  -moz-transition: background 0.2s ease 0s, border-color 0.2s ease 0s;\n  -ms-transition: background 0.2s ease 0s, border-color 0.2s ease 0s;\n  -o-transition: background 0.2s ease 0s, border-color 0.2s ease 0s;\n}\n.gray-theme.fr-popup .fr-checkbox input {\n  margin: 0;\n  padding: 0;\n}\n.gray-theme.fr-popup .fr-checkbox input:checked + span {\n  background: #0097a7;\n  border-color: #0097a7;\n}\n.gray-theme.fr-popup .fr-checkbox input:focus + span {\n  border-color: #0097a7;\n}\n.gray-theme.fr-popup.fr-rtl .fr-input-line input + label,\n.gray-theme.fr-popup.fr-rtl .fr-input-line textarea + label {\n  left: auto;\n  right: 0;\n}\n.gray-theme.fr-popup .fr-arrow {\n  width: 0;\n  height: 0;\n  border-left: 5px solid transparent;\n  border-right: 5px solid transparent;\n  border-bottom: 5px solid #bdbdbd;\n  top: -9px;\n  margin-left: -5px;\n}\n.gray-theme.fr-popup.fr-above .fr-arrow {\n  top: auto;\n  bottom: -9px;\n  border-bottom: 0;\n  border-top: 5px solid #bdbdbd;\n}\n.gray-theme.fr-toolbar {\n  color: #37474f;\n  background: #f5f5f5;\n  font-family: Arial, Helvetica, sans-serif;\n  padding: 0 2px;\n  border-radius: 2px;\n  -moz-border-radius: 2px;\n  -webkit-border-radius: 2px;\n  -moz-background-clip: padding;\n  -webkit-background-clip: padding-box;\n  background-clip: padding-box;\n  -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n  -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n  border: 0px;\n  border-top: 5px solid #bdbdbd;\n}\n.gray-theme.fr-toolbar.fr-inline .fr-arrow {\n  width: 0;\n  height: 0;\n  border-left: 5px solid transparent;\n  border-right: 5px solid transparent;\n  border-bottom: 5px solid #bdbdbd;\n  top: -9px;\n  margin-left: -5px;\n}\n.gray-theme.fr-toolbar.fr-inline.fr-above {\n  -webkit-box-shadow: 0 -1px 3px rgba(0, 0, 0, 0.12), 0 -1px 1px 1px rgba(0, 0, 0, 0.16);\n  -moz-box-shadow: 0 -1px 3px rgba(0, 0, 0, 0.12), 0 -1px 1px 1px rgba(0, 0, 0, 0.16);\n  box-shadow: 0 -1px 3px rgba(0, 0, 0, 0.12), 0 -1px 1px 1px rgba(0, 0, 0, 0.16);\n  border-bottom: 5px solid #bdbdbd;\n  border-top: 0;\n}\n.gray-theme.fr-toolbar.fr-inline.fr-above .fr-arrow {\n  top: auto;\n  bottom: -9px;\n  border-bottom: 0;\n  border-top-color: inherit;\n  border-top-width: 5px;\n}\n.gray-theme.fr-toolbar.fr-top {\n  top: 0;\n  border-radius: 2px 2px 0 0;\n  -moz-border-radius: 2px 2px 0 0;\n  -webkit-border-radius: 2px 2px 0 0;\n  -moz-background-clip: padding;\n  -webkit-background-clip: padding-box;\n  background-clip: padding-box;\n  -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n  -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n}\n.gray-theme.fr-toolbar.fr-bottom {\n  bottom: 0;\n  border-radius: 0 0 2px 2px;\n  -moz-border-radius: 0 0 2px 2px;\n  -webkit-border-radius: 0 0 2px 2px;\n  -moz-background-clip: padding;\n  -webkit-background-clip: padding-box;\n  background-clip: padding-box;\n  -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n  -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n}\n.gray-theme .fr-separator {\n  background: #ebebeb;\n}\n.gray-theme .fr-separator.fr-vs {\n  height: 34px;\n  width: 1px;\n  margin: 2px;\n}\n.gray-theme .fr-separator.fr-hs {\n  height: 1px;\n  width: calc(100% - (2 * 2px));\n  margin: 0 2px;\n}\n"
  },
  {
    "path": "src/main/resources/static/plugins/froala-editor/css/themes/red.css",
    "content": "/*!\n * froala_editor v2.9.1 (https://www.froala.com/wysiwyg-editor)\n * License https://froala.com/wysiwyg-editor/terms/\n * Copyright 2014-2018 Froala Labs\n */\n\n.clearfix::after {\n  clear: both;\n  display: block;\n  content: \"\";\n  height: 0;\n}\n.hide-by-clipping {\n  position: absolute;\n  width: 1px;\n  height: 1px;\n  padding: 0;\n  margin: -1px;\n  overflow: hidden;\n  clip: rect(0, 0, 0, 0);\n  border: 0;\n}\n.red-theme.fr-box.fr-basic .fr-element {\n  color: #000000;\n  padding: 16px;\n  overflow-x: auto;\n  min-height: 52px;\n}\n.red-theme .fr-element {\n  -webkit-user-select: auto;\n}\n.red-theme.fr-box a.fr-floating-btn {\n  -webkit-box-shadow: none;\n  -moz-box-shadow: none;\n  box-shadow: none;\n  height: 32px;\n  width: 32px;\n  background: #ffffff;\n  color: #ffca28;\n  -webkit-transition: background 0.2s ease 0s, color 0.2s ease 0s, transform 0.2s ease 0s;\n  -moz-transition: background 0.2s ease 0s, color 0.2s ease 0s, transform 0.2s ease 0s;\n  -ms-transition: background 0.2s ease 0s, color 0.2s ease 0s, transform 0.2s ease 0s;\n  -o-transition: background 0.2s ease 0s, color 0.2s ease 0s, transform 0.2s ease 0s;\n  left: 0;\n  top: 0;\n  line-height: 32px;\n  border: solid 1px #cccccc;\n}\n.red-theme.fr-box a.fr-floating-btn svg {\n  -webkit-transition: transform 0.2s ease 0s;\n  -moz-transition: transform 0.2s ease 0s;\n  -ms-transition: transform 0.2s ease 0s;\n  -o-transition: transform 0.2s ease 0s;\n  fill: #ffca28;\n}\n.red-theme.fr-box a.fr-floating-btn i,\n.red-theme.fr-box a.fr-floating-btn svg {\n  font-size: 14px;\n  line-height: 32px;\n}\n.red-theme.fr-box a.fr-floating-btn:hover {\n  background: #ebebeb;\n}\n.red-theme.fr-box a.fr-floating-btn:hover svg {\n  fill: #ffca28;\n}\n.red-theme .fr-wrapper .fr-placeholder {\n  font-size: 12px;\n  color: #aaaaaa;\n  top: 0;\n  left: 0;\n  right: 0;\n}\n.red-theme .fr-wrapper ::-moz-selection {\n  background: #b5d6fd;\n  color: #000000;\n}\n.red-theme .fr-wrapper ::selection {\n  background: #b5d6fd;\n  color: #000000;\n}\n.red-theme.fr-box.fr-basic .fr-wrapper {\n  background: #ffffff;\n  border: solid 1px #671b1a;\n  border-top: 0;\n  top: 0;\n  left: 0;\n}\n.red-theme.fr-box.fr-basic.fr-top .fr-wrapper {\n  border-top: 0;\n  border-radius: 0 0 2px 2px;\n  -moz-border-radius: 0 0 2px 2px;\n  -webkit-border-radius: 0 0 2px 2px;\n  -moz-background-clip: padding;\n  -webkit-background-clip: padding-box;\n  background-clip: padding-box;\n  -webkit-box-shadow: none;\n  -moz-box-shadow: none;\n  box-shadow: none;\n}\n.red-theme.fr-box.fr-basic.fr-bottom .fr-wrapper {\n  border-bottom: 0;\n  border-radius: 2px 2px 0 0;\n  -moz-border-radius: 2px 2px 0 0;\n  -webkit-border-radius: 2px 2px 0 0;\n  -moz-background-clip: padding;\n  -webkit-background-clip: padding-box;\n  background-clip: padding-box;\n  -webkit-box-shadow: none;\n  -moz-box-shadow: none;\n  box-shadow: none;\n}\n@media (min-width: 992px) {\n  .red-theme .fr-box.fr-document .fr-wrapper .fr-element {\n    margin: auto;\n    -webkit-box-shadow: none;\n    -moz-box-shadow: none;\n    box-shadow: none;\n  }\n}\n.red-theme .fr-sticky-on.fr-sticky-ios {\n  left: 0;\n  right: 0;\n}\n.red-theme.fr-box .fr-counter {\n  color: #cccccc;\n  background: #ffffff;\n  border-top: solid 1px #ebebeb;\n  border-left: solid 1px #ebebeb;\n  border-radius: 2px 0 0 0;\n  -moz-border-radius: 2px 0 0 0;\n  -webkit-border-radius: 2px 0 0 0;\n  -moz-background-clip: padding;\n  -webkit-background-clip: padding-box;\n  background-clip: padding-box;\n}\n.red-theme.fr-box.fr-rtl .fr-counter {\n  right: auto;\n  border-right: solid 1px #ebebeb;\n  border-radius: 0 2px 0 0;\n  -moz-border-radius: 0 2px 0 0;\n  -webkit-border-radius: 0 2px 0 0;\n  -moz-background-clip: padding;\n  -webkit-background-clip: padding-box;\n  background-clip: padding-box;\n}\n.red-theme textarea.fr-code {\n  background: #ffffff;\n  color: #000000;\n}\n.red-theme.fr-box.fr-code-view.fr-inline {\n  -webkit-box-shadow: none;\n  -moz-box-shadow: none;\n  box-shadow: none;\n}\n.red-theme.fr-box.fr-inline .fr-command.fr-btn.html-switch {\n  top: 0;\n  right: 0;\n  -webkit-box-shadow: none;\n  -moz-box-shadow: none;\n  box-shadow: none;\n  background: #ffffff;\n  color: #ffffff;\n  -moz-outline: 0;\n  outline: 0;\n  border: 0;\n  padding: 12px 12px;\n  -webkit-transition: background 0.2s ease 0s;\n  -moz-transition: background 0.2s ease 0s;\n  -ms-transition: background 0.2s ease 0s;\n  -o-transition: background 0.2s ease 0s;\n}\n.red-theme.fr-box.fr-inline .fr-command.fr-btn.html-switch i {\n  font-size: 14px;\n  width: 14px;\n}\n.red-theme.fr-box.fr-inline .fr-command.fr-btn.html-switch.fr-desktop:hover {\n  background: #c65a59;\n}\n.red-theme.fr-popup .fr-colors-tabs {\n  -webkit-box-shadow: none;\n  -moz-box-shadow: none;\n  box-shadow: none;\n}\n.red-theme.fr-popup .fr-colors-tabs .fr-colors-tab {\n  color: #ffffff;\n  padding: 8px 0;\n}\n.red-theme.fr-popup .fr-colors-tabs .fr-colors-tab:hover,\n.red-theme.fr-popup .fr-colors-tabs .fr-colors-tab:focus {\n  color: #ffca28;\n}\n.red-theme.fr-popup .fr-colors-tabs .fr-colors-tab[data-param1=\"background\"]::after {\n  bottom: 0;\n  left: 0;\n  background: #ffca28;\n  -webkit-transition: transform 0.2s ease 0s;\n  -moz-transition: transform 0.2s ease 0s;\n  -ms-transition: transform 0.2s ease 0s;\n  -o-transition: transform 0.2s ease 0s;\n}\n.red-theme.fr-popup .fr-colors-tabs .fr-colors-tab.fr-selected-tab {\n  color: #ffca28;\n}\n.red-theme.fr-popup .fr-color-hex-layer .fr-input-line {\n  padding: 8px 0 0;\n}\n.red-theme.fr-popup .fr-color-hex-layer .fr-action-buttons button {\n  background-color: #ffca28;\n  border-radius: 2px;\n  -moz-border-radius: 2px;\n  -webkit-border-radius: 2px;\n  -moz-background-clip: padding;\n  -webkit-background-clip: padding-box;\n  background-clip: padding-box;\n}\n.red-theme.fr-popup .fr-color-hex-layer .fr-action-buttons button:hover {\n  background-color: #f4b800;\n}\n.red-theme.fr-popup .fr-color-set {\n  line-height: 0;\n}\n.red-theme.fr-popup .fr-color-set > span > i,\n.red-theme.fr-popup .fr-color-set > span > svg {\n  bottom: 0;\n  left: 0;\n}\n.red-theme.fr-popup .fr-color-set > span .fr-selected-color {\n  color: #ffffff;\n  font-weight: 400;\n  top: 0;\n  bottom: 0;\n  right: 0;\n  left: 0;\n}\n.red-theme.fr-popup .fr-color-set > span:hover,\n.red-theme.fr-popup .fr-color-set > span:focus {\n  outline: 1px solid #ffffff;\n}\n.red-theme .fr-drag-helper {\n  background: #ffca28;\n  z-index: 2147483640;\n}\n.red-theme.fr-popup .fr-link:focus {\n  outline: 0;\n  background: #c65a59;\n}\n.red-theme.fr-popup .fr-file-upload-layer {\n  border: dashed 2px #edc9c9;\n  padding: 25px 0;\n}\n.red-theme.fr-popup .fr-file-upload-layer:hover {\n  background: #c65a59;\n}\n.red-theme.fr-popup .fr-file-upload-layer.fr-drop {\n  background: #c65a59;\n  border-color: #ffca28;\n}\n.red-theme.fr-popup .fr-file-upload-layer .fr-form {\n  top: 0;\n  bottom: 0;\n  left: 0;\n  right: 0;\n  z-index: 2147483640;\n}\n.red-theme.fr-popup .fr-file-progress-bar-layer > h3 {\n  margin: 10px 0;\n}\n.red-theme.fr-popup .fr-file-progress-bar-layer > div.fr-loader {\n  background: #ffefbf;\n}\n.red-theme.fr-popup .fr-file-progress-bar-layer > div.fr-loader span {\n  background: #ffca28;\n  -webkit-transition: width 0.2s ease 0s;\n  -moz-transition: width 0.2s ease 0s;\n  -ms-transition: width 0.2s ease 0s;\n  -o-transition: width 0.2s ease 0s;\n}\n.red-theme.fr-popup .fr-file-progress-bar-layer > div.fr-loader.fr-indeterminate span {\n  top: 0;\n}\n.red-theme.fr-box.fr-fullscreen {\n  top: 0;\n  left: 0;\n  bottom: 0;\n  right: 0;\n}\n.red-theme.fr-modal .fr-modal-wrapper .fr-modal-body .fr-help-modal table tr {\n  border: 0;\n}\n.red-theme.fr-modal .fr-modal-wrapper .fr-modal-body .fr-help-modal table tbody tr {\n  border-bottom: solid 1px rgba(255, 255, 255, 0.3);\n}\n.red-theme.fr-modal .fr-modal-wrapper .fr-modal-body .fr-help-modal table tbody td:first-child {\n  color: #ffffff;\n}\n.red-theme .fr-image-resizer {\n  border: solid 1px #ffca28;\n}\n.red-theme .fr-image-resizer .fr-handler {\n  background: #ffca28;\n  border: solid 1px #ffffff;\n}\n.red-theme .fr-image-resizer .fr-handler {\n  width: 12px;\n  height: 12px;\n}\n.red-theme .fr-image-resizer .fr-handler.fr-hnw {\n  left: -6px;\n  top: -6px;\n}\n.red-theme .fr-image-resizer .fr-handler.fr-hne {\n  right: -6px;\n  top: -6px;\n}\n.red-theme .fr-image-resizer .fr-handler.fr-hsw {\n  left: -6px;\n  bottom: -6px;\n}\n.red-theme .fr-image-resizer .fr-handler.fr-hse {\n  right: -6px;\n  bottom: -6px;\n}\n@media (min-width: 1200px) {\n  .red-theme .fr-image-resizer .fr-handler {\n    width: 10px;\n    height: 10px;\n  }\n  .red-theme .fr-image-resizer .fr-handler.fr-hnw {\n    left: -5px;\n    top: -5px;\n  }\n  .red-theme .fr-image-resizer .fr-handler.fr-hne {\n    right: -5px;\n    top: -5px;\n  }\n  .red-theme .fr-image-resizer .fr-handler.fr-hsw {\n    left: -5px;\n    bottom: -5px;\n  }\n  .red-theme .fr-image-resizer .fr-handler.fr-hse {\n    right: -5px;\n    bottom: -5px;\n  }\n}\n.red-theme.fr-image-overlay {\n  top: 0;\n  left: 0;\n  bottom: 0;\n  right: 0;\n  z-index: 2147483640;\n}\n.red-theme.fr-popup .fr-image-upload-layer {\n  border: dashed 2px #edc9c9;\n  padding: 25px 0;\n}\n.red-theme.fr-popup .fr-image-upload-layer:hover {\n  background: #c65a59;\n}\n.red-theme.fr-popup .fr-image-upload-layer.fr-drop {\n  background: #c65a59;\n  border-color: #ffca28;\n}\n.red-theme.fr-popup .fr-image-upload-layer .fr-form {\n  top: 0;\n  bottom: 0;\n  left: 0;\n  right: 0;\n  z-index: 2147483640;\n}\n.red-theme.fr-popup .fr-image-progress-bar-layer > h3 {\n  margin: 10px 0;\n}\n.red-theme.fr-popup .fr-image-progress-bar-layer > div.fr-loader {\n  background: #ffefbf;\n}\n.red-theme.fr-popup .fr-image-progress-bar-layer > div.fr-loader span {\n  background: #ffca28;\n  -webkit-transition: width 0.2s ease 0s;\n  -moz-transition: width 0.2s ease 0s;\n  -ms-transition: width 0.2s ease 0s;\n  -o-transition: width 0.2s ease 0s;\n}\n.red-theme.fr-popup .fr-image-progress-bar-layer > div.fr-loader.fr-indeterminate span {\n  top: 0;\n}\n.red-theme.fr-modal-head .fr-modal-head-line i.fr-modal-more {\n  -webkit-transition: padding 0.2s ease 0s, width 0.2s ease 0s, opacity 0.2s ease 0s;\n  -moz-transition: padding 0.2s ease 0s, width 0.2s ease 0s, opacity 0.2s ease 0s;\n  -ms-transition: padding 0.2s ease 0s, width 0.2s ease 0s, opacity 0.2s ease 0s;\n  -o-transition: padding 0.2s ease 0s, width 0.2s ease 0s, opacity 0.2s ease 0s;\n}\n.red-theme.fr-modal-head .fr-modal-head-line i.fr-modal-more.fr-not-available {\n  opacity: 0;\n  width: 0;\n  padding: 12px 0;\n}\n.red-theme.fr-modal-head .fr-modal-tags a {\n  opacity: 0;\n  border-radius: 2px;\n  -moz-border-radius: 2px;\n  -webkit-border-radius: 2px;\n  -moz-background-clip: padding;\n  -webkit-background-clip: padding-box;\n  background-clip: padding-box;\n  color: #ffca28;\n  -webkit-transition: opacity 0.2s ease 0s, background 0.2s ease 0s;\n  -moz-transition: opacity 0.2s ease 0s, background 0.2s ease 0s;\n  -ms-transition: opacity 0.2s ease 0s, background 0.2s ease 0s;\n  -o-transition: opacity 0.2s ease 0s, background 0.2s ease 0s;\n}\n.red-theme.fr-modal-head .fr-modal-tags a.fr-selected-tag {\n  background: #d48382;\n}\n.red-themediv.fr-modal-body .fr-preloader {\n  margin: 50px auto;\n}\n.red-themediv.fr-modal-body div.fr-image-list {\n  padding: 0;\n}\n.red-themediv.fr-modal-body div.fr-image-list div.fr-image-container {\n  -webkit-box-shadow: none;\n  -moz-box-shadow: none;\n  box-shadow: none;\n  border-radius: 2px;\n  -moz-border-radius: 2px;\n  -webkit-border-radius: 2px;\n  -moz-background-clip: padding;\n  -webkit-background-clip: padding-box;\n  background-clip: padding-box;\n}\n.red-themediv.fr-modal-body div.fr-image-list div.fr-image-container.fr-image-deleting::after {\n  -webkit-transition: opacity 0.2s ease 0s;\n  -moz-transition: opacity 0.2s ease 0s;\n  -ms-transition: opacity 0.2s ease 0s;\n  -o-transition: opacity 0.2s ease 0s;\n  background: #000000;\n  top: 0;\n  left: 0;\n  bottom: 0;\n  right: 0;\n}\n.red-themediv.fr-modal-body div.fr-image-list div.fr-image-container.fr-image-deleting::before {\n  color: #ffffff;\n  top: 0;\n  left: 0;\n  bottom: 0;\n  right: 0;\n  margin: auto;\n}\n.red-themediv.fr-modal-body div.fr-image-list div.fr-image-container.fr-empty {\n  background: #cccccc;\n}\n.red-themediv.fr-modal-body div.fr-image-list div.fr-image-container.fr-empty::after {\n  margin: auto;\n  top: 0;\n  bottom: 0;\n  left: 0;\n  right: 0;\n}\n.red-themediv.fr-modal-body div.fr-image-list div.fr-image-container img {\n  -webkit-transition: opacity 0.2s ease 0s, filter 0.2s ease 0s;\n  -moz-transition: opacity 0.2s ease 0s, filter 0.2s ease 0s;\n  -ms-transition: opacity 0.2s ease 0s, filter 0.2s ease 0s;\n  -o-transition: opacity 0.2s ease 0s, filter 0.2s ease 0s;\n}\n.red-themediv.fr-modal-body div.fr-image-list div.fr-image-container .fr-delete-img,\n.red-themediv.fr-modal-body div.fr-image-list div.fr-image-container .fr-insert-img {\n  -webkit-transition: background 0.2s ease 0s, color 0.2s ease 0s;\n  -moz-transition: background 0.2s ease 0s, color 0.2s ease 0s;\n  -ms-transition: background 0.2s ease 0s, color 0.2s ease 0s;\n  -o-transition: background 0.2s ease 0s, color 0.2s ease 0s;\n  -webkit-box-shadow: none;\n  -moz-box-shadow: none;\n  box-shadow: none;\n  margin: 0;\n}\n.red-themediv.fr-modal-body div.fr-image-list div.fr-image-container .fr-delete-img {\n  background: #b8312f;\n  color: #ffffff;\n}\n.red-themediv.fr-modal-body div.fr-image-list div.fr-image-container .fr-insert-img {\n  background: #b8312f;\n  color: #ffca28;\n}\n.red-theme.red-theme.fr-desktop .fr-modal-wrapper .fr-modal-head .fr-modal-tags a:hover {\n  background: #c65a59;\n}\n.red-theme.red-theme.fr-desktop .fr-modal-wrapper .fr-modal-head .fr-modal-tags a.fr-selected-tag {\n  background: #d48382;\n}\n.red-theme.red-theme.fr-desktop .fr-modal-wrapper div.fr-modal-body div.fr-image-list div.fr-image-container .fr-delete-img:hover {\n  background: #bf4644;\n  color: #ffffff;\n}\n.red-theme.red-theme.fr-desktop .fr-modal-wrapper div.fr-modal-body div.fr-image-list div.fr-image-container .fr-insert-img:hover {\n  background: #c65a59;\n}\n.red-theme .fr-line-breaker {\n  border-top: 1px solid #ffca28;\n}\n.red-theme .fr-line-breaker a.fr-floating-btn {\n  left: calc(50% - (32px / 2));\n  top: -16px;\n}\n.red-theme .fr-qi-helper {\n  padding-left: 16px;\n}\n.red-theme .fr-qi-helper a.fr-btn.fr-floating-btn {\n  color: #ffffff;\n}\n.red-theme.fr-modal .fr-modal-wrapper .fr-modal-body .fr-special-characters-modal .fr-special-character {\n  border: 1px solid #cccccc;\n}\n.red-theme .fr-element table td.fr-selected-cell,\n.red-theme .fr-element table th.fr-selected-cell {\n  border: 1px double #ffca28;\n}\n.red-theme .fr-table-resizer div {\n  border-right: 1px solid #ffca28;\n}\n.red-theme.fr-popup .fr-table-colors-hex-layer .fr-input-line {\n  padding: 8px 0 0;\n}\n.red-theme.fr-popup .fr-table-colors-hex-layer .fr-action-buttons button {\n  background-color: #ffca28;\n  border-radius: 2px;\n  -moz-border-radius: 2px;\n  -webkit-border-radius: 2px;\n  -moz-background-clip: padding;\n  -webkit-background-clip: padding-box;\n  background-clip: padding-box;\n}\n.red-theme.fr-popup .fr-table-colors-hex-layer .fr-action-buttons button:hover {\n  background-color: #f4b800;\n}\n.red-theme.fr-popup .fr-table-size .fr-select-table-size {\n  line-height: 0;\n}\n.red-theme.fr-popup .fr-table-size .fr-select-table-size > span {\n  padding: 0px 4px 4px 0;\n}\n.red-theme.fr-popup .fr-table-size .fr-select-table-size > span > span {\n  border: 1px solid #dddddd;\n}\n.red-theme.fr-popup .fr-table-size .fr-select-table-size > span.hover > span {\n  background: rgba(255, 202, 40, 0.3);\n  border: solid 1px #ffca28;\n}\n.red-theme.fr-popup .fr-table-colors {\n  line-height: 0;\n}\n.red-theme.fr-popup .fr-table-colors > span > i {\n  bottom: 0;\n  left: 0;\n}\n.red-theme.fr-popup .fr-table-colors > span:focus {\n  outline: 1px solid #ffffff;\n}\n.red-theme .fr-element .fr-video::after {\n  top: 0;\n  left: 0;\n  right: 0;\n  bottom: 0;\n}\n.red-theme.fr-box .fr-video-resizer {\n  border: solid 1px #ffca28;\n}\n.red-theme.fr-box .fr-video-resizer .fr-handler {\n  background: #ffca28;\n  border: solid 1px #ffffff;\n}\n.red-theme.fr-box .fr-video-resizer .fr-handler {\n  width: 12px;\n  height: 12px;\n}\n.red-theme.fr-box .fr-video-resizer .fr-handler.fr-hnw {\n  left: -6px;\n  top: -6px;\n}\n.red-theme.fr-box .fr-video-resizer .fr-handler.fr-hne {\n  right: -6px;\n  top: -6px;\n}\n.red-theme.fr-box .fr-video-resizer .fr-handler.fr-hsw {\n  left: -6px;\n  bottom: -6px;\n}\n.red-theme.fr-box .fr-video-resizer .fr-handler.fr-hse {\n  right: -6px;\n  bottom: -6px;\n}\n@media (min-width: 1200px) {\n  .red-theme.fr-box .fr-video-resizer .fr-handler {\n    width: 10px;\n    height: 10px;\n  }\n  .red-theme.fr-box .fr-video-resizer .fr-handler.fr-hnw {\n    left: -5px;\n    top: -5px;\n  }\n  .red-theme.fr-box .fr-video-resizer .fr-handler.fr-hne {\n    right: -5px;\n    top: -5px;\n  }\n  .red-theme.fr-box .fr-video-resizer .fr-handler.fr-hsw {\n    left: -5px;\n    bottom: -5px;\n  }\n  .red-theme.fr-box .fr-video-resizer .fr-handler.fr-hse {\n    right: -5px;\n    bottom: -5px;\n  }\n}\n.red-theme.fr-popup .fr-video-upload-layer {\n  border: dashed 2px #edc9c9;\n  padding: 25px 0;\n}\n.red-theme.fr-popup .fr-video-upload-layer:hover {\n  background: #c65a59;\n}\n.red-theme.fr-popup .fr-video-upload-layer.fr-drop {\n  background: #c65a59;\n  border-color: #ffca28;\n}\n.red-theme.fr-popup .fr-video-upload-layer .fr-form {\n  top: 0;\n  bottom: 0;\n  left: 0;\n  right: 0;\n  z-index: 2147483640;\n}\n.red-theme.fr-popup .fr-video-progress-bar-layer > h3 {\n  margin: 10px 0;\n}\n.red-theme.fr-popup .fr-video-progress-bar-layer > div.fr-loader {\n  background: #ffefbf;\n}\n.red-theme.fr-popup .fr-video-progress-bar-layer > div.fr-loader span {\n  background: #ffca28;\n  -webkit-transition: width 0.2s ease 0s;\n  -moz-transition: width 0.2s ease 0s;\n  -ms-transition: width 0.2s ease 0s;\n  -o-transition: width 0.2s ease 0s;\n}\n.red-theme.fr-popup .fr-video-progress-bar-layer > div.fr-loader.fr-indeterminate span {\n  top: 0;\n}\n.red-theme.fr-video-overlay {\n  top: 0;\n  left: 0;\n  bottom: 0;\n  right: 0;\n  z-index: 2147483640;\n}\n.red-theme .fr-view span[style~=\"color:\"] a {\n  color: inherit;\n}\n.red-theme .fr-view strong {\n  font-weight: 700;\n}\n.red-theme .fr-view table.fr-alternate-rows tbody tr:nth-child(2n) {\n  background: #f5f5f5;\n}\n.red-theme .fr-view table td,\n.red-theme .fr-view table th {\n  border: 1px solid #dddddd;\n}\n.red-theme .fr-view table th {\n  background: #e6e6e6;\n}\n.red-theme .fr-view[dir=\"rtl\"] blockquote {\n  border-right: solid 2px #5e35b1;\n  margin-right: 0;\n}\n.red-theme .fr-view[dir=\"rtl\"] blockquote blockquote {\n  border-color: #00bcd4;\n}\n.red-theme .fr-view[dir=\"rtl\"] blockquote blockquote blockquote {\n  border-color: #43a047;\n}\n.red-theme .fr-view blockquote {\n  border-left: solid 2px #5e35b1;\n  margin-left: 0;\n  color: #5e35b1;\n}\n.red-theme .fr-view blockquote blockquote {\n  border-color: #00bcd4;\n  color: #00bcd4;\n}\n.red-theme .fr-view blockquote blockquote blockquote {\n  border-color: #43a047;\n  color: #43a047;\n}\n.red-theme .fr-view span.fr-emoticon {\n  line-height: 0;\n}\n.red-theme .fr-view span.fr-emoticon.fr-emoticon-img {\n  font-size: inherit;\n}\n.red-theme .fr-view .fr-text-bordered {\n  padding: 10px 0;\n}\n.red-theme .fr-view .fr-class-highlighted {\n  background-color: #ffff00;\n}\n.red-theme .fr-view .fr-img-caption .fr-img-wrap {\n  margin: auto;\n}\n.red-theme .fr-view .fr-img-caption .fr-img-wrap img {\n  margin: auto;\n}\n.red-theme .fr-view .fr-img-caption .fr-img-wrap > span {\n  margin: auto;\n}\n.red-theme .fr-element .fr-embedly::after {\n  top: 0;\n  left: 0;\n  right: 0;\n  bottom: 0;\n}\n.red-theme.fr-box .fr-embedly-resizer {\n  border: solid 1px #ffca28;\n}\n.red-theme.fr-modal .fr-modal-wrapper .fr-modal-body .fr-font-awesome-modal .fr-font-awesome-title {\n  border-bottom: solid 1px #f0f0f0;\n}\n.red-theme .tui-image-editor-container {\n  top: 0;\n  left: 0;\n  bottom: 0;\n  right: 0;\n  z-index: 10;\n}\n.red-theme .tui-editor-cancel-btn {\n  background-color: #ffffff;\n  border: 1px solid #cccccc;\n}\n.red-theme .tui-editor-save-btn {\n  color: #ffffff;\n}\n.red-theme .examples-variante > a {\n  font-size: 14px;\n  font-family: Arial, Helvetica, sans-serif;\n}\n.red-theme .sc-cm-holder > .sc-cm {\n  border-top: 5px solid #671b1a !important;\n}\n.red-theme .sc-cm__item_dropdown:hover > a,\n.red-theme .sc-cm a:hover {\n  background-color: #c65a59 !important;\n}\n.red-theme .sc-cm__item_active > a,\n.red-theme .sc-cm__item_active > a:hover,\n.red-theme .sc-cm a:active,\n.red-theme .sc-cm a:focus {\n  background-color: #d48382 !important;\n}\n.red-theme .sc-cm-holder > .sc-cm:before {\n  background-color: #c65a59 !important;\n}\n.red-theme .fr-tooltip {\n  top: 0;\n  left: 0;\n  border-radius: 2px;\n  -moz-border-radius: 2px;\n  -webkit-border-radius: 2px;\n  -moz-background-clip: padding;\n  -webkit-background-clip: padding-box;\n  background-clip: padding-box;\n  -webkit-box-shadow: none;\n  -moz-box-shadow: none;\n  box-shadow: none;\n  background: #222222;\n  color: #ffffff;\n  font-size: 11px;\n  line-height: 22px;\n  font-family: Arial, Helvetica, sans-serif;\n  -webkit-transition: opacity 0.2s ease 0s;\n  -moz-transition: opacity 0.2s ease 0s;\n  -ms-transition: opacity 0.2s ease 0s;\n  -o-transition: opacity 0.2s ease 0s;\n}\n.red-theme.fr-toolbar .fr-command.fr-btn,\n.red-theme.fr-popup .fr-command.fr-btn {\n  color: #ffffff;\n  -moz-outline: 0;\n  outline: 0;\n  border: 0;\n  margin: 0px 2px;\n  -webkit-transition: background 0.2s ease 0s;\n  -moz-transition: background 0.2s ease 0s;\n  -ms-transition: background 0.2s ease 0s;\n  -o-transition: background 0.2s ease 0s;\n  padding: 0;\n  width: 38px;\n  height: 38px;\n}\n.red-theme.fr-toolbar .fr-command.fr-btn::-moz-focus-inner,\n.red-theme.fr-popup .fr-command.fr-btn::-moz-focus-inner {\n  border: 0;\n}\n.red-theme.fr-toolbar .fr-command.fr-btn.fr-btn-text,\n.red-theme.fr-popup .fr-command.fr-btn.fr-btn-text {\n  width: auto;\n}\n.red-theme.fr-toolbar .fr-command.fr-btn i,\n.red-theme.fr-popup .fr-command.fr-btn i,\n.red-theme.fr-toolbar .fr-command.fr-btn svg,\n.red-theme.fr-popup .fr-command.fr-btn svg {\n  font-size: 14px;\n  width: 14px;\n  margin: 12px 12px;\n}\n.red-theme.fr-toolbar .fr-command.fr-btn span,\n.red-theme.fr-popup .fr-command.fr-btn span {\n  font-size: 14px;\n  line-height: 17px;\n  min-width: 34px;\n  height: 17px;\n  padding: 0 2px;\n}\n.red-theme.fr-toolbar .fr-command.fr-btn img,\n.red-theme.fr-popup .fr-command.fr-btn img {\n  margin: 12px 12px;\n  width: 14px;\n}\n.red-theme.fr-toolbar .fr-command.fr-btn.fr-active,\n.red-theme.fr-popup .fr-command.fr-btn.fr-active {\n  color: #ffca28;\n  background: transparent;\n}\n.red-theme.fr-toolbar .fr-command.fr-btn.fr-dropdown.fr-selection,\n.red-theme.fr-popup .fr-command.fr-btn.fr-dropdown.fr-selection {\n  width: auto;\n}\n.red-theme.fr-toolbar .fr-command.fr-btn.fr-dropdown i,\n.red-theme.fr-popup .fr-command.fr-btn.fr-dropdown i,\n.red-theme.fr-toolbar .fr-command.fr-btn.fr-dropdown span,\n.red-theme.fr-popup .fr-command.fr-btn.fr-dropdown span,\n.red-theme.fr-toolbar .fr-command.fr-btn.fr-dropdown img,\n.red-theme.fr-popup .fr-command.fr-btn.fr-dropdown img,\n.red-theme.fr-toolbar .fr-command.fr-btn.fr-dropdown svg,\n.red-theme.fr-popup .fr-command.fr-btn.fr-dropdown svg {\n  margin-left: 8px;\n  margin-right: 16px;\n}\n.red-theme.fr-toolbar .fr-command.fr-btn.fr-dropdown.fr-active,\n.red-theme.fr-popup .fr-command.fr-btn.fr-dropdown.fr-active {\n  color: #ffffff;\n  background: #d48382;\n}\n.red-theme.fr-toolbar .fr-command.fr-btn.fr-dropdown.fr-active:hover,\n.red-theme.fr-popup .fr-command.fr-btn.fr-dropdown.fr-active:hover,\n.red-theme.fr-toolbar .fr-command.fr-btn.fr-dropdown.fr-active:focus,\n.red-theme.fr-popup .fr-command.fr-btn.fr-dropdown.fr-active:focus {\n  background: #d48382 !important;\n  color: #ffffff !important;\n}\n.red-theme.fr-toolbar .fr-command.fr-btn.fr-dropdown.fr-active:hover::after,\n.red-theme.fr-popup .fr-command.fr-btn.fr-dropdown.fr-active:hover::after,\n.red-theme.fr-toolbar .fr-command.fr-btn.fr-dropdown.fr-active:focus::after,\n.red-theme.fr-popup .fr-command.fr-btn.fr-dropdown.fr-active:focus::after {\n  border-top-color: #ffffff !important;\n}\n.red-theme.fr-toolbar .fr-command.fr-btn.fr-dropdown::after,\n.red-theme.fr-popup .fr-command.fr-btn.fr-dropdown::after {\n  width: 0;\n  height: 0;\n  border-left: 4px solid transparent;\n  border-right: 4px solid transparent;\n  border-top: 4px solid #ffffff;\n  right: 4px;\n  top: 17px;\n}\n.red-theme.fr-toolbar .fr-command.fr-btn.fr-disabled,\n.red-theme.fr-popup .fr-command.fr-btn.fr-disabled {\n  color: #edc9c9;\n}\n.red-theme.fr-toolbar .fr-command.fr-btn.fr-disabled::after,\n.red-theme.fr-popup .fr-command.fr-btn.fr-disabled::after {\n  border-top-color: #edc9c9 !important;\n}\n.red-theme.fr-toolbar.fr-disabled .fr-btn,\n.red-theme.fr-popup.fr-disabled .fr-btn,\n.red-theme.fr-toolbar.fr-disabled .fr-btn.fr-active,\n.red-theme.fr-popup.fr-disabled .fr-btn.fr-active {\n  color: #edc9c9;\n}\n.red-theme.fr-toolbar.fr-disabled .fr-btn.fr-dropdown::after,\n.red-theme.fr-popup.fr-disabled .fr-btn.fr-dropdown::after,\n.red-theme.fr-toolbar.fr-disabled .fr-btn.fr-active.fr-dropdown::after,\n.red-theme.fr-popup.fr-disabled .fr-btn.fr-active.fr-dropdown::after {\n  border-top-color: #edc9c9;\n}\n.red-theme.fr-desktop .fr-command:hover,\n.red-theme.fr-desktop .fr-command:focus,\n.red-theme.fr-desktop .fr-command.fr-btn-hover,\n.red-theme.fr-desktop .fr-command.fr-expanded {\n  outline: 0;\n  color: #ffffff;\n  background: #c65a59;\n}\n.red-theme.fr-desktop .fr-command:hover::after,\n.red-theme.fr-desktop .fr-command:focus::after,\n.red-theme.fr-desktop .fr-command.fr-btn-hover::after,\n.red-theme.fr-desktop .fr-command.fr-expanded::after {\n  border-top-color: #ffffff !important;\n}\n.red-theme.fr-desktop .fr-command.fr-selected {\n  color: #ffffff;\n  background: #d48382;\n}\n.red-theme.fr-desktop .fr-command.fr-active:hover,\n.red-theme.fr-desktop .fr-command.fr-active:focus,\n.red-theme.fr-desktop .fr-command.fr-active.fr-btn-hover,\n.red-theme.fr-desktop .fr-command.fr-active.fr-expanded {\n  color: #ffca28;\n  background: #c65a59;\n}\n.red-theme.fr-desktop .fr-command.fr-active.fr-selected {\n  color: #ffca28;\n  background: #d48382;\n}\n.red-theme.fr-toolbar.fr-mobile .fr-command.fr-blink,\n.red-theme.fr-popup.fr-mobile .fr-command.fr-blink {\n  background: transparent;\n}\n.red-theme .fr-command.fr-btn.fr-options {\n  width: 16px;\n  margin-left: -5px;\n}\n.red-theme .fr-command.fr-btn.fr-options.fr-btn-hover,\n.red-theme .fr-command.fr-btn.fr-options:hover,\n.red-theme .fr-command.fr-btn.fr-options:focus {\n  border-left: solid 1px #fafafa;\n}\n.red-theme .fr-command.fr-btn + .fr-dropdown-menu {\n  right: auto;\n  bottom: auto;\n  height: auto;\n  border-radius: 0 0 2px 2px;\n  -moz-border-radius: 0 0 2px 2px;\n  -webkit-border-radius: 0 0 2px 2px;\n  -moz-background-clip: padding;\n  -webkit-background-clip: padding-box;\n  background-clip: padding-box;\n}\n.red-theme .fr-command.fr-btn + .fr-dropdown-menu.test-height .fr-dropdown-wrapper {\n  height: auto;\n  max-height: 275px;\n}\n.red-theme .fr-command.fr-btn + .fr-dropdown-menu .fr-dropdown-wrapper {\n  background: #b8312f;\n  padding: 0;\n  margin: auto;\n  -webkit-transition: max-height 0.2s ease 0s;\n  -moz-transition: max-height 0.2s ease 0s;\n  -ms-transition: max-height 0.2s ease 0s;\n  -o-transition: max-height 0.2s ease 0s;\n  margin-top: 0;\n  max-height: 0;\n  height: 0;\n}\n.red-theme .fr-command.fr-btn + .fr-dropdown-menu .fr-dropdown-wrapper .fr-dropdown-content {\n  overflow: auto;\n  max-height: 275px;\n}\n.red-theme .fr-command.fr-btn + .fr-dropdown-menu .fr-dropdown-wrapper .fr-dropdown-content ul.fr-dropdown-list {\n  margin: 0;\n  padding: 0;\n}\n.red-theme .fr-command.fr-btn + .fr-dropdown-menu .fr-dropdown-wrapper .fr-dropdown-content ul.fr-dropdown-list li {\n  padding: 0;\n  margin: 0;\n}\n.red-theme .fr-command.fr-btn + .fr-dropdown-menu .fr-dropdown-wrapper .fr-dropdown-content ul.fr-dropdown-list li a {\n  color: inherit;\n}\n.red-theme .fr-command.fr-btn + .fr-dropdown-menu .fr-dropdown-wrapper .fr-dropdown-content ul.fr-dropdown-list li a.fr-active {\n  background: #d48382;\n}\n.red-theme .fr-command.fr-btn + .fr-dropdown-menu .fr-dropdown-wrapper .fr-dropdown-content ul.fr-dropdown-list li a.fr-disabled {\n  color: #edc9c9;\n}\n.red-theme .fr-command.fr-btn.fr-active + .fr-dropdown-menu {\n  -webkit-box-shadow: none;\n  -moz-box-shadow: none;\n  box-shadow: none;\n}\n.red-theme .fr-command.fr-btn.fr-active + .fr-dropdown-menu .fr-dropdown-wrapper {\n  height: auto;\n  max-height: 275px;\n}\n.red-theme .fr-bottom > .fr-command.fr-btn + .fr-dropdown-menu {\n  border-radius: 2px 2px 0 0;\n  -moz-border-radius: 2px 2px 0 0;\n  -webkit-border-radius: 2px 2px 0 0;\n  -moz-background-clip: padding;\n  -webkit-background-clip: padding-box;\n  background-clip: padding-box;\n}\n.red-theme.fr-modal {\n  color: #ffffff;\n  font-family: Arial, Helvetica, sans-serif;\n  overflow-x: auto;\n  top: 0;\n  left: 0;\n  bottom: 0;\n  right: 0;\n  z-index: 2147483640;\n}\n.red-theme.fr-modal.fr-middle .fr-modal-wrapper {\n  margin-top: 0;\n  margin-bottom: 0;\n  margin-left: auto;\n  margin-right: auto;\n}\n.red-theme.fr-modal .fr-modal-wrapper {\n  border-radius: 2px;\n  -moz-border-radius: 2px;\n  -webkit-border-radius: 2px;\n  -moz-background-clip: padding;\n  -webkit-background-clip: padding-box;\n  background-clip: padding-box;\n  margin: 20px auto;\n  background: #b8312f;\n  -webkit-box-shadow: none;\n  -moz-box-shadow: none;\n  box-shadow: none;\n  border: solid 1px #671b1a;\n  border-top: 5px solid #671b1a;\n}\n@media (min-width: 768px) and (max-width: 991px) {\n  .red-theme.fr-modal .fr-modal-wrapper {\n    margin: 30px auto;\n  }\n}\n@media (min-width: 992px) {\n  .red-theme.fr-modal .fr-modal-wrapper {\n    margin: 50px auto;\n  }\n}\n.red-theme.fr-modal .fr-modal-wrapper .fr-modal-head {\n  background: #b8312f;\n  -webkit-box-shadow: none;\n  -moz-box-shadow: none;\n  box-shadow: none;\n  border-bottom: solid 1px #671b1a;\n  -webkit-transition: height 0.2s ease 0s;\n  -moz-transition: height 0.2s ease 0s;\n  -ms-transition: height 0.2s ease 0s;\n  -o-transition: height 0.2s ease 0s;\n}\n.red-theme.fr-modal .fr-modal-wrapper .fr-modal-head .fr-modal-close {\n  color: #ffffff;\n  top: 0;\n  right: 0;\n  -webkit-transition: color 0.2s ease 0s;\n  -moz-transition: color 0.2s ease 0s;\n  -ms-transition: color 0.2s ease 0s;\n  -o-transition: color 0.2s ease 0s;\n}\n.red-theme.fr-modal .fr-modal-wrapper .fr-modal-head h4 {\n  margin: 0;\n  font-weight: 400;\n}\n.red-theme.fr-modal .fr-modal-wrapper div.fr-modal-body:focus {\n  outline: 0;\n}\n.red-theme.fr-modal .fr-modal-wrapper div.fr-modal-body button.fr-command {\n  color: #ffca28;\n  -webkit-transition: background 0.2s ease 0s;\n  -moz-transition: background 0.2s ease 0s;\n  -ms-transition: background 0.2s ease 0s;\n  -o-transition: background 0.2s ease 0s;\n  border-radius: 2px;\n  -moz-border-radius: 2px;\n  -webkit-border-radius: 2px;\n  -moz-background-clip: padding;\n  -webkit-background-clip: padding-box;\n  background-clip: padding-box;\n}\n.red-theme.fr-modal .fr-modal-wrapper div.fr-modal-body button.fr-command:hover,\n.red-theme.fr-modal .fr-modal-wrapper div.fr-modal-body button.fr-command:focus {\n  background: #c65a59;\n  color: #ffca28;\n}\n.red-theme.fr-modal .fr-modal-wrapper div.fr-modal-body button.fr-command:active {\n  background: #d48382;\n  color: #ffca28;\n}\n.red-theme.fr-modal .fr-modal-wrapper div.fr-modal-body button::-moz-focus-inner {\n  border: 0;\n}\n.red-theme.red-theme.fr-desktop .fr-modal-wrapper .fr-modal-head i:hover {\n  background: #c65a59;\n}\n.red-theme.fr-overlay {\n  top: 0;\n  bottom: 0;\n  left: 0;\n  right: 0;\n  background: #000000;\n}\n.red-theme.fr-popup {\n  color: #ffffff;\n  background: #b8312f;\n  -webkit-box-shadow: none;\n  -moz-box-shadow: none;\n  box-shadow: none;\n  border-radius: 2px;\n  -moz-border-radius: 2px;\n  -webkit-border-radius: 2px;\n  -moz-background-clip: padding;\n  -webkit-background-clip: padding-box;\n  background-clip: padding-box;\n  font-family: Arial, Helvetica, sans-serif;\n  border: solid 1px #671b1a;\n  border-top: 5px solid #671b1a;\n}\n.red-theme.fr-popup .fr-input-focus {\n  background: #bf4644;\n}\n.red-theme.fr-popup.fr-above {\n  border-top: 0;\n  border-bottom: 5px solid #671b1a;\n  -webkit-box-shadow: none;\n  -moz-box-shadow: none;\n  box-shadow: none;\n}\n.red-theme.fr-popup .fr-input-line {\n  padding: 8px 0;\n}\n.red-theme.fr-popup .fr-input-line input[type=\"text\"],\n.red-theme.fr-popup .fr-input-line textarea {\n  margin: 0px 0 1px 0;\n  border-bottom: solid 1px #bdbdbd;\n  color: #ffffff;\n}\n.red-theme.fr-popup .fr-input-line input[type=\"text\"]:focus,\n.red-theme.fr-popup .fr-input-line textarea:focus {\n  border-bottom: solid 2px #ffca28;\n}\n.red-theme.fr-popup .fr-input-line input + label,\n.red-theme.fr-popup .fr-input-line textarea + label {\n  top: 0;\n  left: 0;\n  -webkit-transition: color 0.2s ease 0s;\n  -moz-transition: color 0.2s ease 0s;\n  -ms-transition: color 0.2s ease 0s;\n  -o-transition: color 0.2s ease 0s;\n  background: #b8312f;\n}\n.red-theme.fr-popup .fr-input-line input.fr-not-empty:focus + label,\n.red-theme.fr-popup .fr-input-line textarea.fr-not-empty:focus + label {\n  color: #ffca28;\n}\n.red-theme.fr-popup .fr-input-line input.fr-not-empty + label,\n.red-theme.fr-popup .fr-input-line textarea.fr-not-empty + label {\n  color: #808080;\n}\n.red-theme.fr-popup .fr-buttons {\n  -webkit-box-shadow: none;\n  -moz-box-shadow: none;\n  box-shadow: none;\n  padding: 0 2px;\n  line-height: 0;\n  border-bottom: solid 1px #671b1a;\n}\n.red-theme.fr-popup .fr-layer {\n  width: 225px;\n}\n@media (min-width: 768px) {\n  .red-theme.fr-popup .fr-layer {\n    width: 300px;\n  }\n}\n.red-theme.fr-popup .fr-action-buttons button.fr-command {\n  color: #ffca28;\n  -webkit-transition: background 0.2s ease 0s;\n  -moz-transition: background 0.2s ease 0s;\n  -ms-transition: background 0.2s ease 0s;\n  -o-transition: background 0.2s ease 0s;\n  border-radius: 2px;\n  -moz-border-radius: 2px;\n  -webkit-border-radius: 2px;\n  -moz-background-clip: padding;\n  -webkit-background-clip: padding-box;\n  background-clip: padding-box;\n}\n.red-theme.fr-popup .fr-action-buttons button.fr-command:hover,\n.red-theme.fr-popup .fr-action-buttons button.fr-command:focus {\n  background: #c65a59;\n  color: #ffca28;\n}\n.red-theme.fr-popup .fr-action-buttons button.fr-command:active {\n  background: #d48382;\n  color: #ffca28;\n}\n.red-theme.fr-popup .fr-action-buttons button::-moz-focus-inner {\n  border: 0;\n}\n.red-theme.fr-popup .fr-checkbox span {\n  border: solid 1px #ffffff;\n  border-radius: 2px;\n  -moz-border-radius: 2px;\n  -webkit-border-radius: 2px;\n  -moz-background-clip: padding;\n  -webkit-background-clip: padding-box;\n  background-clip: padding-box;\n  -webkit-transition: background 0.2s ease 0s, border-color 0.2s ease 0s;\n  -moz-transition: background 0.2s ease 0s, border-color 0.2s ease 0s;\n  -ms-transition: background 0.2s ease 0s, border-color 0.2s ease 0s;\n  -o-transition: background 0.2s ease 0s, border-color 0.2s ease 0s;\n}\n.red-theme.fr-popup .fr-checkbox input {\n  margin: 0;\n  padding: 0;\n}\n.red-theme.fr-popup .fr-checkbox input:checked + span {\n  background: #ffca28;\n  border-color: #ffca28;\n}\n.red-theme.fr-popup .fr-checkbox input:focus + span {\n  border-color: #ffca28;\n}\n.red-theme.fr-popup.fr-rtl .fr-input-line input + label,\n.red-theme.fr-popup.fr-rtl .fr-input-line textarea + label {\n  left: auto;\n  right: 0;\n}\n.red-theme.fr-popup .fr-arrow {\n  width: 0;\n  height: 0;\n  border-left: 5px solid transparent;\n  border-right: 5px solid transparent;\n  border-bottom: 5px solid #671b1a;\n  top: -9px;\n  margin-left: -5px;\n}\n.red-theme.fr-popup.fr-above .fr-arrow {\n  top: auto;\n  bottom: -9px;\n  border-bottom: 0;\n  border-top: 5px solid #671b1a;\n}\n.red-theme.fr-toolbar {\n  color: #ffffff;\n  background: #b8312f;\n  font-family: Arial, Helvetica, sans-serif;\n  padding: 0 2px;\n  border-radius: 2px;\n  -moz-border-radius: 2px;\n  -webkit-border-radius: 2px;\n  -moz-background-clip: padding;\n  -webkit-background-clip: padding-box;\n  background-clip: padding-box;\n  -webkit-box-shadow: none;\n  -moz-box-shadow: none;\n  box-shadow: none;\n  border: solid 1px #671b1a;\n  border-top: 5px solid #671b1a;\n}\n.red-theme.fr-toolbar.fr-inline .fr-arrow {\n  width: 0;\n  height: 0;\n  border-left: 5px solid transparent;\n  border-right: 5px solid transparent;\n  border-bottom: 5px solid #671b1a;\n  top: -9px;\n  margin-left: -5px;\n}\n.red-theme.fr-toolbar.fr-inline.fr-above {\n  -webkit-box-shadow: none;\n  -moz-box-shadow: none;\n  box-shadow: none;\n  border-bottom: 5px solid #671b1a;\n  border-top: 0;\n}\n.red-theme.fr-toolbar.fr-inline.fr-above .fr-arrow {\n  top: auto;\n  bottom: -9px;\n  border-bottom: 0;\n  border-top-color: inherit;\n  border-top-width: 5px;\n}\n.red-theme.fr-toolbar.fr-top {\n  top: 0;\n  border-radius: 2px 2px 0 0;\n  -moz-border-radius: 2px 2px 0 0;\n  -webkit-border-radius: 2px 2px 0 0;\n  -moz-background-clip: padding;\n  -webkit-background-clip: padding-box;\n  background-clip: padding-box;\n  -webkit-box-shadow: none;\n  -moz-box-shadow: none;\n  box-shadow: none;\n}\n.red-theme.fr-toolbar.fr-bottom {\n  bottom: 0;\n  border-radius: 0 0 2px 2px;\n  -moz-border-radius: 0 0 2px 2px;\n  -webkit-border-radius: 0 0 2px 2px;\n  -moz-background-clip: padding;\n  -webkit-background-clip: padding-box;\n  background-clip: padding-box;\n  -webkit-box-shadow: none;\n  -moz-box-shadow: none;\n  box-shadow: none;\n}\n.red-theme .fr-separator {\n  background: rgba(255, 255, 255, 0.3);\n}\n.red-theme .fr-separator.fr-vs {\n  height: 34px;\n  width: 1px;\n  margin: 2px;\n}\n.red-theme .fr-separator.fr-hs {\n  height: 1px;\n  width: calc(100% - (2 * 2px));\n  margin: 0 2px;\n}\n"
  },
  {
    "path": "src/main/resources/static/plugins/froala-editor/css/themes/royal.css",
    "content": "/*!\n * froala_editor v2.9.1 (https://www.froala.com/wysiwyg-editor)\n * License https://froala.com/wysiwyg-editor/terms/\n * Copyright 2014-2018 Froala Labs\n */\n\n.clearfix::after {\n  clear: both;\n  display: block;\n  content: \"\";\n  height: 0;\n}\n.hide-by-clipping {\n  position: absolute;\n  width: 1px;\n  height: 1px;\n  padding: 0;\n  margin: -1px;\n  overflow: hidden;\n  clip: rect(0, 0, 0, 0);\n  border: 0;\n}\n.royal-theme.fr-box.fr-basic .fr-element {\n  color: #000000;\n  padding: 16px;\n  overflow-x: auto;\n  min-height: 52px;\n}\n.royal-theme .fr-element {\n  -webkit-user-select: auto;\n}\n.royal-theme.fr-box a.fr-floating-btn {\n  -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n  -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n  height: 32px;\n  width: 32px;\n  background: #ffffff;\n  color: #553982;\n  -webkit-transition: background 0.2s ease 0s, color 0.2s ease 0s, transform 0.2s ease 0s;\n  -moz-transition: background 0.2s ease 0s, color 0.2s ease 0s, transform 0.2s ease 0s;\n  -ms-transition: background 0.2s ease 0s, color 0.2s ease 0s, transform 0.2s ease 0s;\n  -o-transition: background 0.2s ease 0s, color 0.2s ease 0s, transform 0.2s ease 0s;\n  left: 0;\n  top: 0;\n  line-height: 32px;\n  border: none;\n}\n.royal-theme.fr-box a.fr-floating-btn svg {\n  -webkit-transition: transform 0.2s ease 0s;\n  -moz-transition: transform 0.2s ease 0s;\n  -ms-transition: transform 0.2s ease 0s;\n  -o-transition: transform 0.2s ease 0s;\n  fill: #553982;\n}\n.royal-theme.fr-box a.fr-floating-btn i,\n.royal-theme.fr-box a.fr-floating-btn svg {\n  font-size: 14px;\n  line-height: 32px;\n}\n.royal-theme.fr-box a.fr-floating-btn:hover {\n  background: #9365b8;\n}\n.royal-theme.fr-box a.fr-floating-btn:hover svg {\n  fill: #ffffff;\n}\n.royal-theme .fr-wrapper .fr-placeholder {\n  font-size: 12px;\n  color: #aaaaaa;\n  top: 0;\n  left: 0;\n  right: 0;\n}\n.royal-theme .fr-wrapper ::-moz-selection {\n  background: #b5d6fd;\n  color: #000000;\n}\n.royal-theme .fr-wrapper ::selection {\n  background: #b5d6fd;\n  color: #000000;\n}\n.royal-theme.fr-box.fr-basic .fr-wrapper {\n  background: #ffffff;\n  border: 0px;\n  border-top: 0;\n  top: 0;\n  left: 0;\n}\n.royal-theme.fr-box.fr-basic.fr-top .fr-wrapper {\n  border-top: 0;\n  border-radius: 0 0 2px 2px;\n  -moz-border-radius: 0 0 2px 2px;\n  -webkit-border-radius: 0 0 2px 2px;\n  -moz-background-clip: padding;\n  -webkit-background-clip: padding-box;\n  background-clip: padding-box;\n  -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n  -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n}\n.royal-theme.fr-box.fr-basic.fr-bottom .fr-wrapper {\n  border-bottom: 0;\n  border-radius: 2px 2px 0 0;\n  -moz-border-radius: 2px 2px 0 0;\n  -webkit-border-radius: 2px 2px 0 0;\n  -moz-background-clip: padding;\n  -webkit-background-clip: padding-box;\n  background-clip: padding-box;\n  -webkit-box-shadow: 0 -1px 3px rgba(0, 0, 0, 0.12), 0 -1px 1px 1px rgba(0, 0, 0, 0.16);\n  -moz-box-shadow: 0 -1px 3px rgba(0, 0, 0, 0.12), 0 -1px 1px 1px rgba(0, 0, 0, 0.16);\n  box-shadow: 0 -1px 3px rgba(0, 0, 0, 0.12), 0 -1px 1px 1px rgba(0, 0, 0, 0.16);\n}\n@media (min-width: 992px) {\n  .royal-theme .fr-box.fr-document .fr-wrapper .fr-element {\n    margin: auto;\n    -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n    -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n    box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n  }\n}\n.royal-theme .fr-sticky-on.fr-sticky-ios {\n  left: 0;\n  right: 0;\n}\n.royal-theme.fr-box .fr-counter {\n  color: #cccccc;\n  background: #ffffff;\n  border-top: solid 1px #ebebeb;\n  border-left: solid 1px #ebebeb;\n  border-radius: 2px 0 0 0;\n  -moz-border-radius: 2px 0 0 0;\n  -webkit-border-radius: 2px 0 0 0;\n  -moz-background-clip: padding;\n  -webkit-background-clip: padding-box;\n  background-clip: padding-box;\n}\n.royal-theme.fr-box.fr-rtl .fr-counter {\n  right: auto;\n  border-right: solid 1px #ebebeb;\n  border-radius: 0 2px 0 0;\n  -moz-border-radius: 0 2px 0 0;\n  -webkit-border-radius: 0 2px 0 0;\n  -moz-background-clip: padding;\n  -webkit-background-clip: padding-box;\n  background-clip: padding-box;\n}\n.royal-theme textarea.fr-code {\n  background: #ffffff;\n  color: #000000;\n}\n.royal-theme.fr-box.fr-code-view.fr-inline {\n  -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n  -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n}\n.royal-theme.fr-box.fr-inline .fr-command.fr-btn.html-switch {\n  top: 0;\n  right: 0;\n  -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n  -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n  background: #ffffff;\n  color: #553982;\n  -moz-outline: 0;\n  outline: 0;\n  border: 0;\n  padding: 12px 12px;\n  -webkit-transition: background 0.2s ease 0s;\n  -moz-transition: background 0.2s ease 0s;\n  -ms-transition: background 0.2s ease 0s;\n  -o-transition: background 0.2s ease 0s;\n}\n.royal-theme.fr-box.fr-inline .fr-command.fr-btn.html-switch i {\n  font-size: 14px;\n  width: 14px;\n}\n.royal-theme.fr-box.fr-inline .fr-command.fr-btn.html-switch.fr-desktop:hover {\n  background: #ebebeb;\n}\n.royal-theme.fr-popup .fr-colors-tabs {\n  -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n  -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n}\n.royal-theme.fr-popup .fr-colors-tabs .fr-colors-tab {\n  color: #553982;\n  padding: 8px 0;\n}\n.royal-theme.fr-popup .fr-colors-tabs .fr-colors-tab:hover,\n.royal-theme.fr-popup .fr-colors-tabs .fr-colors-tab:focus {\n  color: #553982;\n}\n.royal-theme.fr-popup .fr-colors-tabs .fr-colors-tab[data-param1=\"background\"]::after {\n  bottom: 0;\n  left: 0;\n  background: #553982;\n  -webkit-transition: transform 0.2s ease 0s;\n  -moz-transition: transform 0.2s ease 0s;\n  -ms-transition: transform 0.2s ease 0s;\n  -o-transition: transform 0.2s ease 0s;\n}\n.royal-theme.fr-popup .fr-colors-tabs .fr-colors-tab.fr-selected-tab {\n  color: #553982;\n}\n.royal-theme.fr-popup .fr-color-hex-layer .fr-input-line {\n  padding: 8px 0 0;\n}\n.royal-theme.fr-popup .fr-color-hex-layer .fr-action-buttons button {\n  background-color: #553982;\n  border-radius: 2px;\n  -moz-border-radius: 2px;\n  -webkit-border-radius: 2px;\n  -moz-background-clip: padding;\n  -webkit-background-clip: padding-box;\n  background-clip: padding-box;\n}\n.royal-theme.fr-popup .fr-color-hex-layer .fr-action-buttons button:hover {\n  background-color: #3e295f;\n}\n.royal-theme.fr-popup .fr-color-set {\n  line-height: 0;\n}\n.royal-theme.fr-popup .fr-color-set > span > i,\n.royal-theme.fr-popup .fr-color-set > span > svg {\n  bottom: 0;\n  left: 0;\n}\n.royal-theme.fr-popup .fr-color-set > span .fr-selected-color {\n  color: #ffffff;\n  font-weight: 400;\n  top: 0;\n  bottom: 0;\n  right: 0;\n  left: 0;\n}\n.royal-theme.fr-popup .fr-color-set > span:hover,\n.royal-theme.fr-popup .fr-color-set > span:focus {\n  outline: 1px solid #553982;\n}\n.royal-theme .fr-drag-helper {\n  background: #553982;\n  z-index: 2147483640;\n}\n.royal-theme.fr-popup .fr-link:focus {\n  outline: 0;\n  background: #ebebeb;\n}\n.royal-theme.fr-popup .fr-file-upload-layer {\n  border: dashed 2px #b7bdc0;\n  padding: 25px 0;\n}\n.royal-theme.fr-popup .fr-file-upload-layer:hover {\n  background: #ebebeb;\n}\n.royal-theme.fr-popup .fr-file-upload-layer.fr-drop {\n  background: #ebebeb;\n  border-color: #553982;\n}\n.royal-theme.fr-popup .fr-file-upload-layer .fr-form {\n  top: 0;\n  bottom: 0;\n  left: 0;\n  right: 0;\n  z-index: 2147483640;\n}\n.royal-theme.fr-popup .fr-file-progress-bar-layer > h3 {\n  margin: 10px 0;\n}\n.royal-theme.fr-popup .fr-file-progress-bar-layer > div.fr-loader {\n  background: #ccc4da;\n}\n.royal-theme.fr-popup .fr-file-progress-bar-layer > div.fr-loader span {\n  background: #553982;\n  -webkit-transition: width 0.2s ease 0s;\n  -moz-transition: width 0.2s ease 0s;\n  -ms-transition: width 0.2s ease 0s;\n  -o-transition: width 0.2s ease 0s;\n}\n.royal-theme.fr-popup .fr-file-progress-bar-layer > div.fr-loader.fr-indeterminate span {\n  top: 0;\n}\n.royal-theme.fr-box.fr-fullscreen {\n  top: 0;\n  left: 0;\n  bottom: 0;\n  right: 0;\n}\n.royal-theme.fr-modal .fr-modal-wrapper .fr-modal-body .fr-help-modal table tr {\n  border: 0;\n}\n.royal-theme.fr-modal .fr-modal-wrapper .fr-modal-body .fr-help-modal table tbody tr {\n  border-bottom: solid 1px #ebebeb;\n}\n.royal-theme.fr-modal .fr-modal-wrapper .fr-modal-body .fr-help-modal table tbody td:first-child {\n  color: #8874a8;\n}\n.royal-theme .fr-image-resizer {\n  border: solid 1px #553982;\n}\n.royal-theme .fr-image-resizer .fr-handler {\n  background: #553982;\n  border: solid 1px #ffffff;\n}\n.royal-theme .fr-image-resizer .fr-handler {\n  width: 12px;\n  height: 12px;\n}\n.royal-theme .fr-image-resizer .fr-handler.fr-hnw {\n  left: -6px;\n  top: -6px;\n}\n.royal-theme .fr-image-resizer .fr-handler.fr-hne {\n  right: -6px;\n  top: -6px;\n}\n.royal-theme .fr-image-resizer .fr-handler.fr-hsw {\n  left: -6px;\n  bottom: -6px;\n}\n.royal-theme .fr-image-resizer .fr-handler.fr-hse {\n  right: -6px;\n  bottom: -6px;\n}\n@media (min-width: 1200px) {\n  .royal-theme .fr-image-resizer .fr-handler {\n    width: 10px;\n    height: 10px;\n  }\n  .royal-theme .fr-image-resizer .fr-handler.fr-hnw {\n    left: -5px;\n    top: -5px;\n  }\n  .royal-theme .fr-image-resizer .fr-handler.fr-hne {\n    right: -5px;\n    top: -5px;\n  }\n  .royal-theme .fr-image-resizer .fr-handler.fr-hsw {\n    left: -5px;\n    bottom: -5px;\n  }\n  .royal-theme .fr-image-resizer .fr-handler.fr-hse {\n    right: -5px;\n    bottom: -5px;\n  }\n}\n.royal-theme.fr-image-overlay {\n  top: 0;\n  left: 0;\n  bottom: 0;\n  right: 0;\n  z-index: 2147483640;\n}\n.royal-theme.fr-popup .fr-image-upload-layer {\n  border: dashed 2px #b7bdc0;\n  padding: 25px 0;\n}\n.royal-theme.fr-popup .fr-image-upload-layer:hover {\n  background: #ebebeb;\n}\n.royal-theme.fr-popup .fr-image-upload-layer.fr-drop {\n  background: #ebebeb;\n  border-color: #553982;\n}\n.royal-theme.fr-popup .fr-image-upload-layer .fr-form {\n  top: 0;\n  bottom: 0;\n  left: 0;\n  right: 0;\n  z-index: 2147483640;\n}\n.royal-theme.fr-popup .fr-image-progress-bar-layer > h3 {\n  margin: 10px 0;\n}\n.royal-theme.fr-popup .fr-image-progress-bar-layer > div.fr-loader {\n  background: #ccc4da;\n}\n.royal-theme.fr-popup .fr-image-progress-bar-layer > div.fr-loader span {\n  background: #553982;\n  -webkit-transition: width 0.2s ease 0s;\n  -moz-transition: width 0.2s ease 0s;\n  -ms-transition: width 0.2s ease 0s;\n  -o-transition: width 0.2s ease 0s;\n}\n.royal-theme.fr-popup .fr-image-progress-bar-layer > div.fr-loader.fr-indeterminate span {\n  top: 0;\n}\n.royal-theme.fr-modal-head .fr-modal-head-line i.fr-modal-more {\n  -webkit-transition: padding 0.2s ease 0s, width 0.2s ease 0s, opacity 0.2s ease 0s;\n  -moz-transition: padding 0.2s ease 0s, width 0.2s ease 0s, opacity 0.2s ease 0s;\n  -ms-transition: padding 0.2s ease 0s, width 0.2s ease 0s, opacity 0.2s ease 0s;\n  -o-transition: padding 0.2s ease 0s, width 0.2s ease 0s, opacity 0.2s ease 0s;\n}\n.royal-theme.fr-modal-head .fr-modal-head-line i.fr-modal-more.fr-not-available {\n  opacity: 0;\n  width: 0;\n  padding: 12px 0;\n}\n.royal-theme.fr-modal-head .fr-modal-tags a {\n  opacity: 0;\n  border-radius: 2px;\n  -moz-border-radius: 2px;\n  -webkit-border-radius: 2px;\n  -moz-background-clip: padding;\n  -webkit-background-clip: padding-box;\n  background-clip: padding-box;\n  color: #553982;\n  -webkit-transition: opacity 0.2s ease 0s, background 0.2s ease 0s;\n  -moz-transition: opacity 0.2s ease 0s, background 0.2s ease 0s;\n  -ms-transition: opacity 0.2s ease 0s, background 0.2s ease 0s;\n  -o-transition: opacity 0.2s ease 0s, background 0.2s ease 0s;\n}\n.royal-theme.fr-modal-head .fr-modal-tags a.fr-selected-tag {\n  background: #d6d6d6;\n}\n.royal-themediv.fr-modal-body .fr-preloader {\n  margin: 50px auto;\n}\n.royal-themediv.fr-modal-body div.fr-image-list {\n  padding: 0;\n}\n.royal-themediv.fr-modal-body div.fr-image-list div.fr-image-container {\n  -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n  -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n  border-radius: 2px;\n  -moz-border-radius: 2px;\n  -webkit-border-radius: 2px;\n  -moz-background-clip: padding;\n  -webkit-background-clip: padding-box;\n  background-clip: padding-box;\n}\n.royal-themediv.fr-modal-body div.fr-image-list div.fr-image-container.fr-image-deleting::after {\n  -webkit-transition: opacity 0.2s ease 0s;\n  -moz-transition: opacity 0.2s ease 0s;\n  -ms-transition: opacity 0.2s ease 0s;\n  -o-transition: opacity 0.2s ease 0s;\n  background: #000000;\n  top: 0;\n  left: 0;\n  bottom: 0;\n  right: 0;\n}\n.royal-themediv.fr-modal-body div.fr-image-list div.fr-image-container.fr-image-deleting::before {\n  color: #ffffff;\n  top: 0;\n  left: 0;\n  bottom: 0;\n  right: 0;\n  margin: auto;\n}\n.royal-themediv.fr-modal-body div.fr-image-list div.fr-image-container.fr-empty {\n  background: #cccccc;\n}\n.royal-themediv.fr-modal-body div.fr-image-list div.fr-image-container.fr-empty::after {\n  margin: auto;\n  top: 0;\n  bottom: 0;\n  left: 0;\n  right: 0;\n}\n.royal-themediv.fr-modal-body div.fr-image-list div.fr-image-container img {\n  -webkit-transition: opacity 0.2s ease 0s, filter 0.2s ease 0s;\n  -moz-transition: opacity 0.2s ease 0s, filter 0.2s ease 0s;\n  -ms-transition: opacity 0.2s ease 0s, filter 0.2s ease 0s;\n  -o-transition: opacity 0.2s ease 0s, filter 0.2s ease 0s;\n}\n.royal-themediv.fr-modal-body div.fr-image-list div.fr-image-container .fr-delete-img,\n.royal-themediv.fr-modal-body div.fr-image-list div.fr-image-container .fr-insert-img {\n  -webkit-transition: background 0.2s ease 0s, color 0.2s ease 0s;\n  -moz-transition: background 0.2s ease 0s, color 0.2s ease 0s;\n  -ms-transition: background 0.2s ease 0s, color 0.2s ease 0s;\n  -o-transition: background 0.2s ease 0s, color 0.2s ease 0s;\n  -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n  -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n  margin: 0;\n}\n.royal-themediv.fr-modal-body div.fr-image-list div.fr-image-container .fr-delete-img {\n  background: #b8312f;\n  color: #ffffff;\n}\n.royal-themediv.fr-modal-body div.fr-image-list div.fr-image-container .fr-insert-img {\n  background: #ffffff;\n  color: #553982;\n}\n.royal-theme.royal-theme.fr-desktop .fr-modal-wrapper .fr-modal-head .fr-modal-tags a:hover {\n  background: #ebebeb;\n}\n.royal-theme.royal-theme.fr-desktop .fr-modal-wrapper .fr-modal-head .fr-modal-tags a.fr-selected-tag {\n  background: #d6d6d6;\n}\n.royal-theme.royal-theme.fr-desktop .fr-modal-wrapper div.fr-modal-body div.fr-image-list div.fr-image-container .fr-delete-img:hover {\n  background: #bf4644;\n  color: #ffffff;\n}\n.royal-theme.royal-theme.fr-desktop .fr-modal-wrapper div.fr-modal-body div.fr-image-list div.fr-image-container .fr-insert-img:hover {\n  background: #ebebeb;\n}\n.royal-theme .fr-line-breaker {\n  border-top: 1px solid #553982;\n}\n.royal-theme .fr-line-breaker a.fr-floating-btn {\n  left: calc(50% - (32px / 2));\n  top: -16px;\n}\n.royal-theme .fr-qi-helper {\n  padding-left: 16px;\n}\n.royal-theme .fr-qi-helper a.fr-btn.fr-floating-btn {\n  color: #553982;\n}\n.royal-theme.fr-modal .fr-modal-wrapper .fr-modal-body .fr-special-characters-modal .fr-special-character {\n  border: 1px solid #cccccc;\n}\n.royal-theme .fr-element table td.fr-selected-cell,\n.royal-theme .fr-element table th.fr-selected-cell {\n  border: 1px double #553982;\n}\n.royal-theme .fr-table-resizer div {\n  border-right: 1px solid #553982;\n}\n.royal-theme.fr-popup .fr-table-colors-hex-layer .fr-input-line {\n  padding: 8px 0 0;\n}\n.royal-theme.fr-popup .fr-table-colors-hex-layer .fr-action-buttons button {\n  background-color: #553982;\n  border-radius: 2px;\n  -moz-border-radius: 2px;\n  -webkit-border-radius: 2px;\n  -moz-background-clip: padding;\n  -webkit-background-clip: padding-box;\n  background-clip: padding-box;\n}\n.royal-theme.fr-popup .fr-table-colors-hex-layer .fr-action-buttons button:hover {\n  background-color: #3e295f;\n}\n.royal-theme.fr-popup .fr-table-size .fr-select-table-size {\n  line-height: 0;\n}\n.royal-theme.fr-popup .fr-table-size .fr-select-table-size > span {\n  padding: 0px 4px 4px 0;\n}\n.royal-theme.fr-popup .fr-table-size .fr-select-table-size > span > span {\n  border: 1px solid #dddddd;\n}\n.royal-theme.fr-popup .fr-table-size .fr-select-table-size > span.hover > span {\n  background: rgba(85, 57, 130, 0.3);\n  border: solid 1px #553982;\n}\n.royal-theme.fr-popup .fr-table-colors {\n  line-height: 0;\n}\n.royal-theme.fr-popup .fr-table-colors > span > i {\n  bottom: 0;\n  left: 0;\n}\n.royal-theme.fr-popup .fr-table-colors > span:focus {\n  outline: 1px solid #553982;\n}\n.royal-theme .fr-element .fr-video::after {\n  top: 0;\n  left: 0;\n  right: 0;\n  bottom: 0;\n}\n.royal-theme.fr-box .fr-video-resizer {\n  border: solid 1px #553982;\n}\n.royal-theme.fr-box .fr-video-resizer .fr-handler {\n  background: #553982;\n  border: solid 1px #ffffff;\n}\n.royal-theme.fr-box .fr-video-resizer .fr-handler {\n  width: 12px;\n  height: 12px;\n}\n.royal-theme.fr-box .fr-video-resizer .fr-handler.fr-hnw {\n  left: -6px;\n  top: -6px;\n}\n.royal-theme.fr-box .fr-video-resizer .fr-handler.fr-hne {\n  right: -6px;\n  top: -6px;\n}\n.royal-theme.fr-box .fr-video-resizer .fr-handler.fr-hsw {\n  left: -6px;\n  bottom: -6px;\n}\n.royal-theme.fr-box .fr-video-resizer .fr-handler.fr-hse {\n  right: -6px;\n  bottom: -6px;\n}\n@media (min-width: 1200px) {\n  .royal-theme.fr-box .fr-video-resizer .fr-handler {\n    width: 10px;\n    height: 10px;\n  }\n  .royal-theme.fr-box .fr-video-resizer .fr-handler.fr-hnw {\n    left: -5px;\n    top: -5px;\n  }\n  .royal-theme.fr-box .fr-video-resizer .fr-handler.fr-hne {\n    right: -5px;\n    top: -5px;\n  }\n  .royal-theme.fr-box .fr-video-resizer .fr-handler.fr-hsw {\n    left: -5px;\n    bottom: -5px;\n  }\n  .royal-theme.fr-box .fr-video-resizer .fr-handler.fr-hse {\n    right: -5px;\n    bottom: -5px;\n  }\n}\n.royal-theme.fr-popup .fr-video-upload-layer {\n  border: dashed 2px #b7bdc0;\n  padding: 25px 0;\n}\n.royal-theme.fr-popup .fr-video-upload-layer:hover {\n  background: #ebebeb;\n}\n.royal-theme.fr-popup .fr-video-upload-layer.fr-drop {\n  background: #ebebeb;\n  border-color: #553982;\n}\n.royal-theme.fr-popup .fr-video-upload-layer .fr-form {\n  top: 0;\n  bottom: 0;\n  left: 0;\n  right: 0;\n  z-index: 2147483640;\n}\n.royal-theme.fr-popup .fr-video-progress-bar-layer > h3 {\n  margin: 10px 0;\n}\n.royal-theme.fr-popup .fr-video-progress-bar-layer > div.fr-loader {\n  background: #ccc4da;\n}\n.royal-theme.fr-popup .fr-video-progress-bar-layer > div.fr-loader span {\n  background: #553982;\n  -webkit-transition: width 0.2s ease 0s;\n  -moz-transition: width 0.2s ease 0s;\n  -ms-transition: width 0.2s ease 0s;\n  -o-transition: width 0.2s ease 0s;\n}\n.royal-theme.fr-popup .fr-video-progress-bar-layer > div.fr-loader.fr-indeterminate span {\n  top: 0;\n}\n.royal-theme.fr-video-overlay {\n  top: 0;\n  left: 0;\n  bottom: 0;\n  right: 0;\n  z-index: 2147483640;\n}\n.royal-theme .fr-view span[style~=\"color:\"] a {\n  color: inherit;\n}\n.royal-theme .fr-view strong {\n  font-weight: 700;\n}\n.royal-theme .fr-view table.fr-alternate-rows tbody tr:nth-child(2n) {\n  background: #f5f5f5;\n}\n.royal-theme .fr-view table td,\n.royal-theme .fr-view table th {\n  border: 1px solid #dddddd;\n}\n.royal-theme .fr-view table th {\n  background: #e6e6e6;\n}\n.royal-theme .fr-view[dir=\"rtl\"] blockquote {\n  border-right: solid 2px #5e35b1;\n  margin-right: 0;\n}\n.royal-theme .fr-view[dir=\"rtl\"] blockquote blockquote {\n  border-color: #00bcd4;\n}\n.royal-theme .fr-view[dir=\"rtl\"] blockquote blockquote blockquote {\n  border-color: #43a047;\n}\n.royal-theme .fr-view blockquote {\n  border-left: solid 2px #5e35b1;\n  margin-left: 0;\n  color: #5e35b1;\n}\n.royal-theme .fr-view blockquote blockquote {\n  border-color: #00bcd4;\n  color: #00bcd4;\n}\n.royal-theme .fr-view blockquote blockquote blockquote {\n  border-color: #43a047;\n  color: #43a047;\n}\n.royal-theme .fr-view span.fr-emoticon {\n  line-height: 0;\n}\n.royal-theme .fr-view span.fr-emoticon.fr-emoticon-img {\n  font-size: inherit;\n}\n.royal-theme .fr-view .fr-text-bordered {\n  padding: 10px 0;\n}\n.royal-theme .fr-view .fr-class-highlighted {\n  background-color: #ffff00;\n}\n.royal-theme .fr-view .fr-img-caption .fr-img-wrap {\n  margin: auto;\n}\n.royal-theme .fr-view .fr-img-caption .fr-img-wrap img {\n  margin: auto;\n}\n.royal-theme .fr-view .fr-img-caption .fr-img-wrap > span {\n  margin: auto;\n}\n.royal-theme .fr-element .fr-embedly::after {\n  top: 0;\n  left: 0;\n  right: 0;\n  bottom: 0;\n}\n.royal-theme.fr-box .fr-embedly-resizer {\n  border: solid 1px #553982;\n}\n.royal-theme.fr-modal .fr-modal-wrapper .fr-modal-body .fr-font-awesome-modal .fr-font-awesome-title {\n  border-bottom: solid 1px #f0f0f0;\n}\n.royal-theme .tui-image-editor-container {\n  top: 0;\n  left: 0;\n  bottom: 0;\n  right: 0;\n  z-index: 10;\n}\n.royal-theme .tui-editor-cancel-btn {\n  background-color: #ffffff;\n  border: 1px solid #cccccc;\n}\n.royal-theme .tui-editor-save-btn {\n  color: #ffffff;\n}\n.royal-theme .examples-variante > a {\n  font-size: 14px;\n  font-family: Arial, Helvetica, sans-serif;\n}\n.royal-theme .sc-cm-holder > .sc-cm {\n  border-top: 5px solid #553982 !important;\n}\n.royal-theme .sc-cm__item_dropdown:hover > a,\n.royal-theme .sc-cm a:hover {\n  background-color: #ebebeb !important;\n}\n.royal-theme .sc-cm__item_active > a,\n.royal-theme .sc-cm__item_active > a:hover,\n.royal-theme .sc-cm a:active,\n.royal-theme .sc-cm a:focus {\n  background-color: #d6d6d6 !important;\n}\n.royal-theme .sc-cm-holder > .sc-cm:before {\n  background-color: #ebebeb !important;\n}\n.royal-theme .fr-tooltip {\n  top: 0;\n  left: 0;\n  border-radius: 2px;\n  -moz-border-radius: 2px;\n  -webkit-border-radius: 2px;\n  -moz-background-clip: padding;\n  -webkit-background-clip: padding-box;\n  background-clip: padding-box;\n  -webkit-box-shadow: 0 3px 6px rgba(0, 0, 0, 0.16), 0 2px 2px 1px rgba(0, 0, 0, 0.14);\n  -moz-box-shadow: 0 3px 6px rgba(0, 0, 0, 0.16), 0 2px 2px 1px rgba(0, 0, 0, 0.14);\n  box-shadow: 0 3px 6px rgba(0, 0, 0, 0.16), 0 2px 2px 1px rgba(0, 0, 0, 0.14);\n  background: #222222;\n  color: #ffffff;\n  font-size: 11px;\n  line-height: 22px;\n  font-family: Arial, Helvetica, sans-serif;\n  -webkit-transition: opacity 0.2s ease 0s;\n  -moz-transition: opacity 0.2s ease 0s;\n  -ms-transition: opacity 0.2s ease 0s;\n  -o-transition: opacity 0.2s ease 0s;\n}\n.royal-theme.fr-toolbar .fr-command.fr-btn,\n.royal-theme.fr-popup .fr-command.fr-btn {\n  color: #553982;\n  -moz-outline: 0;\n  outline: 0;\n  border: 0;\n  margin: 0px 2px;\n  -webkit-transition: background 0.2s ease 0s;\n  -moz-transition: background 0.2s ease 0s;\n  -ms-transition: background 0.2s ease 0s;\n  -o-transition: background 0.2s ease 0s;\n  padding: 0;\n  width: 38px;\n  height: 38px;\n}\n.royal-theme.fr-toolbar .fr-command.fr-btn::-moz-focus-inner,\n.royal-theme.fr-popup .fr-command.fr-btn::-moz-focus-inner {\n  border: 0;\n}\n.royal-theme.fr-toolbar .fr-command.fr-btn.fr-btn-text,\n.royal-theme.fr-popup .fr-command.fr-btn.fr-btn-text {\n  width: auto;\n}\n.royal-theme.fr-toolbar .fr-command.fr-btn i,\n.royal-theme.fr-popup .fr-command.fr-btn i,\n.royal-theme.fr-toolbar .fr-command.fr-btn svg,\n.royal-theme.fr-popup .fr-command.fr-btn svg {\n  font-size: 14px;\n  width: 14px;\n  margin: 12px 12px;\n}\n.royal-theme.fr-toolbar .fr-command.fr-btn span,\n.royal-theme.fr-popup .fr-command.fr-btn span {\n  font-size: 14px;\n  line-height: 17px;\n  min-width: 34px;\n  height: 17px;\n  padding: 0 2px;\n}\n.royal-theme.fr-toolbar .fr-command.fr-btn img,\n.royal-theme.fr-popup .fr-command.fr-btn img {\n  margin: 12px 12px;\n  width: 14px;\n}\n.royal-theme.fr-toolbar .fr-command.fr-btn.fr-active,\n.royal-theme.fr-popup .fr-command.fr-btn.fr-active {\n  color: #ffffff;\n  background: #9365b8;\n}\n.royal-theme.fr-toolbar .fr-command.fr-btn.fr-dropdown.fr-selection,\n.royal-theme.fr-popup .fr-command.fr-btn.fr-dropdown.fr-selection {\n  width: auto;\n}\n.royal-theme.fr-toolbar .fr-command.fr-btn.fr-dropdown i,\n.royal-theme.fr-popup .fr-command.fr-btn.fr-dropdown i,\n.royal-theme.fr-toolbar .fr-command.fr-btn.fr-dropdown span,\n.royal-theme.fr-popup .fr-command.fr-btn.fr-dropdown span,\n.royal-theme.fr-toolbar .fr-command.fr-btn.fr-dropdown img,\n.royal-theme.fr-popup .fr-command.fr-btn.fr-dropdown img,\n.royal-theme.fr-toolbar .fr-command.fr-btn.fr-dropdown svg,\n.royal-theme.fr-popup .fr-command.fr-btn.fr-dropdown svg {\n  margin-left: 8px;\n  margin-right: 16px;\n}\n.royal-theme.fr-toolbar .fr-command.fr-btn.fr-dropdown.fr-active,\n.royal-theme.fr-popup .fr-command.fr-btn.fr-dropdown.fr-active {\n  color: #553982;\n  background: #d6d6d6;\n}\n.royal-theme.fr-toolbar .fr-command.fr-btn.fr-dropdown.fr-active:hover,\n.royal-theme.fr-popup .fr-command.fr-btn.fr-dropdown.fr-active:hover,\n.royal-theme.fr-toolbar .fr-command.fr-btn.fr-dropdown.fr-active:focus,\n.royal-theme.fr-popup .fr-command.fr-btn.fr-dropdown.fr-active:focus {\n  background: #d6d6d6 !important;\n  color: #553982 !important;\n}\n.royal-theme.fr-toolbar .fr-command.fr-btn.fr-dropdown.fr-active:hover::after,\n.royal-theme.fr-popup .fr-command.fr-btn.fr-dropdown.fr-active:hover::after,\n.royal-theme.fr-toolbar .fr-command.fr-btn.fr-dropdown.fr-active:focus::after,\n.royal-theme.fr-popup .fr-command.fr-btn.fr-dropdown.fr-active:focus::after {\n  border-top-color: #553982 !important;\n}\n.royal-theme.fr-toolbar .fr-command.fr-btn.fr-dropdown::after,\n.royal-theme.fr-popup .fr-command.fr-btn.fr-dropdown::after {\n  width: 0;\n  height: 0;\n  border-left: 4px solid transparent;\n  border-right: 4px solid transparent;\n  border-top: 4px solid #553982;\n  right: 4px;\n  top: 17px;\n}\n.royal-theme.fr-toolbar .fr-command.fr-btn.fr-disabled,\n.royal-theme.fr-popup .fr-command.fr-btn.fr-disabled {\n  color: #b7bdc0;\n}\n.royal-theme.fr-toolbar .fr-command.fr-btn.fr-disabled::after,\n.royal-theme.fr-popup .fr-command.fr-btn.fr-disabled::after {\n  border-top-color: #b7bdc0 !important;\n}\n.royal-theme.fr-toolbar.fr-disabled .fr-btn,\n.royal-theme.fr-popup.fr-disabled .fr-btn,\n.royal-theme.fr-toolbar.fr-disabled .fr-btn.fr-active,\n.royal-theme.fr-popup.fr-disabled .fr-btn.fr-active {\n  color: #b7bdc0;\n}\n.royal-theme.fr-toolbar.fr-disabled .fr-btn.fr-dropdown::after,\n.royal-theme.fr-popup.fr-disabled .fr-btn.fr-dropdown::after,\n.royal-theme.fr-toolbar.fr-disabled .fr-btn.fr-active.fr-dropdown::after,\n.royal-theme.fr-popup.fr-disabled .fr-btn.fr-active.fr-dropdown::after {\n  border-top-color: #b7bdc0;\n}\n.royal-theme.fr-desktop .fr-command:hover,\n.royal-theme.fr-desktop .fr-command:focus,\n.royal-theme.fr-desktop .fr-command.fr-btn-hover,\n.royal-theme.fr-desktop .fr-command.fr-expanded {\n  outline: 0;\n  color: #553982;\n  background: #ebebeb;\n}\n.royal-theme.fr-desktop .fr-command:hover::after,\n.royal-theme.fr-desktop .fr-command:focus::after,\n.royal-theme.fr-desktop .fr-command.fr-btn-hover::after,\n.royal-theme.fr-desktop .fr-command.fr-expanded::after {\n  border-top-color: #553982 !important;\n}\n.royal-theme.fr-desktop .fr-command.fr-selected {\n  color: #553982;\n  background: #d6d6d6;\n}\n.royal-theme.fr-desktop .fr-command.fr-active:hover,\n.royal-theme.fr-desktop .fr-command.fr-active:focus,\n.royal-theme.fr-desktop .fr-command.fr-active.fr-btn-hover,\n.royal-theme.fr-desktop .fr-command.fr-active.fr-expanded {\n  color: #553982;\n  background: #ebebeb;\n}\n.royal-theme.fr-desktop .fr-command.fr-active.fr-selected {\n  color: #553982;\n  background: #d6d6d6;\n}\n.royal-theme.fr-toolbar.fr-mobile .fr-command.fr-blink,\n.royal-theme.fr-popup.fr-mobile .fr-command.fr-blink {\n  background: #9365b8;\n}\n.royal-theme .fr-command.fr-btn.fr-options {\n  width: 16px;\n  margin-left: -5px;\n}\n.royal-theme .fr-command.fr-btn.fr-options.fr-btn-hover,\n.royal-theme .fr-command.fr-btn.fr-options:hover,\n.royal-theme .fr-command.fr-btn.fr-options:focus {\n  border-left: solid 1px #fafafa;\n}\n.royal-theme .fr-command.fr-btn + .fr-dropdown-menu {\n  right: auto;\n  bottom: auto;\n  height: auto;\n  border-radius: 0 0 2px 2px;\n  -moz-border-radius: 0 0 2px 2px;\n  -webkit-border-radius: 0 0 2px 2px;\n  -moz-background-clip: padding;\n  -webkit-background-clip: padding-box;\n  background-clip: padding-box;\n}\n.royal-theme .fr-command.fr-btn + .fr-dropdown-menu.test-height .fr-dropdown-wrapper {\n  height: auto;\n  max-height: 275px;\n}\n.royal-theme .fr-command.fr-btn + .fr-dropdown-menu .fr-dropdown-wrapper {\n  background: #ffffff;\n  padding: 0;\n  margin: auto;\n  -webkit-transition: max-height 0.2s ease 0s;\n  -moz-transition: max-height 0.2s ease 0s;\n  -ms-transition: max-height 0.2s ease 0s;\n  -o-transition: max-height 0.2s ease 0s;\n  margin-top: 0;\n  max-height: 0;\n  height: 0;\n}\n.royal-theme .fr-command.fr-btn + .fr-dropdown-menu .fr-dropdown-wrapper .fr-dropdown-content {\n  overflow: auto;\n  max-height: 275px;\n}\n.royal-theme .fr-command.fr-btn + .fr-dropdown-menu .fr-dropdown-wrapper .fr-dropdown-content ul.fr-dropdown-list {\n  margin: 0;\n  padding: 0;\n}\n.royal-theme .fr-command.fr-btn + .fr-dropdown-menu .fr-dropdown-wrapper .fr-dropdown-content ul.fr-dropdown-list li {\n  padding: 0;\n  margin: 0;\n}\n.royal-theme .fr-command.fr-btn + .fr-dropdown-menu .fr-dropdown-wrapper .fr-dropdown-content ul.fr-dropdown-list li a {\n  color: inherit;\n}\n.royal-theme .fr-command.fr-btn + .fr-dropdown-menu .fr-dropdown-wrapper .fr-dropdown-content ul.fr-dropdown-list li a.fr-active {\n  background: #d6d6d6;\n}\n.royal-theme .fr-command.fr-btn + .fr-dropdown-menu .fr-dropdown-wrapper .fr-dropdown-content ul.fr-dropdown-list li a.fr-disabled {\n  color: #b7bdc0;\n}\n.royal-theme .fr-command.fr-btn.fr-active + .fr-dropdown-menu {\n  -webkit-box-shadow: 0 3px 6px rgba(0, 0, 0, 0.16), 0 2px 2px 1px rgba(0, 0, 0, 0.14);\n  -moz-box-shadow: 0 3px 6px rgba(0, 0, 0, 0.16), 0 2px 2px 1px rgba(0, 0, 0, 0.14);\n  box-shadow: 0 3px 6px rgba(0, 0, 0, 0.16), 0 2px 2px 1px rgba(0, 0, 0, 0.14);\n}\n.royal-theme .fr-command.fr-btn.fr-active + .fr-dropdown-menu .fr-dropdown-wrapper {\n  height: auto;\n  max-height: 275px;\n}\n.royal-theme .fr-bottom > .fr-command.fr-btn + .fr-dropdown-menu {\n  border-radius: 2px 2px 0 0;\n  -moz-border-radius: 2px 2px 0 0;\n  -webkit-border-radius: 2px 2px 0 0;\n  -moz-background-clip: padding;\n  -webkit-background-clip: padding-box;\n  background-clip: padding-box;\n}\n.royal-theme.fr-modal {\n  color: #553982;\n  font-family: Arial, Helvetica, sans-serif;\n  overflow-x: auto;\n  top: 0;\n  left: 0;\n  bottom: 0;\n  right: 0;\n  z-index: 2147483640;\n}\n.royal-theme.fr-modal.fr-middle .fr-modal-wrapper {\n  margin-top: 0;\n  margin-bottom: 0;\n  margin-left: auto;\n  margin-right: auto;\n}\n.royal-theme.fr-modal .fr-modal-wrapper {\n  border-radius: 2px;\n  -moz-border-radius: 2px;\n  -webkit-border-radius: 2px;\n  -moz-background-clip: padding;\n  -webkit-background-clip: padding-box;\n  background-clip: padding-box;\n  margin: 20px auto;\n  background: #ffffff;\n  -webkit-box-shadow: 0 5px 8px rgba(0, 0, 0, 0.19), 0 4px 3px 1px rgba(0, 0, 0, 0.14);\n  -moz-box-shadow: 0 5px 8px rgba(0, 0, 0, 0.19), 0 4px 3px 1px rgba(0, 0, 0, 0.14);\n  box-shadow: 0 5px 8px rgba(0, 0, 0, 0.19), 0 4px 3px 1px rgba(0, 0, 0, 0.14);\n  border: 0px;\n  border-top: 5px solid #553982;\n}\n@media (min-width: 768px) and (max-width: 991px) {\n  .royal-theme.fr-modal .fr-modal-wrapper {\n    margin: 30px auto;\n  }\n}\n@media (min-width: 992px) {\n  .royal-theme.fr-modal .fr-modal-wrapper {\n    margin: 50px auto;\n  }\n}\n.royal-theme.fr-modal .fr-modal-wrapper .fr-modal-head {\n  background: #ffffff;\n  -webkit-box-shadow: 0 3px 6px rgba(0, 0, 0, 0.16), 0 2px 2px 1px rgba(0, 0, 0, 0.14);\n  -moz-box-shadow: 0 3px 6px rgba(0, 0, 0, 0.16), 0 2px 2px 1px rgba(0, 0, 0, 0.14);\n  box-shadow: 0 3px 6px rgba(0, 0, 0, 0.16), 0 2px 2px 1px rgba(0, 0, 0, 0.14);\n  border-bottom: 0px;\n  -webkit-transition: height 0.2s ease 0s;\n  -moz-transition: height 0.2s ease 0s;\n  -ms-transition: height 0.2s ease 0s;\n  -o-transition: height 0.2s ease 0s;\n}\n.royal-theme.fr-modal .fr-modal-wrapper .fr-modal-head .fr-modal-close {\n  color: #553982;\n  top: 0;\n  right: 0;\n  -webkit-transition: color 0.2s ease 0s;\n  -moz-transition: color 0.2s ease 0s;\n  -ms-transition: color 0.2s ease 0s;\n  -o-transition: color 0.2s ease 0s;\n}\n.royal-theme.fr-modal .fr-modal-wrapper .fr-modal-head h4 {\n  margin: 0;\n  font-weight: 400;\n}\n.royal-theme.fr-modal .fr-modal-wrapper div.fr-modal-body:focus {\n  outline: 0;\n}\n.royal-theme.fr-modal .fr-modal-wrapper div.fr-modal-body button.fr-command {\n  color: #553982;\n  -webkit-transition: background 0.2s ease 0s;\n  -moz-transition: background 0.2s ease 0s;\n  -ms-transition: background 0.2s ease 0s;\n  -o-transition: background 0.2s ease 0s;\n  border-radius: 2px;\n  -moz-border-radius: 2px;\n  -webkit-border-radius: 2px;\n  -moz-background-clip: padding;\n  -webkit-background-clip: padding-box;\n  background-clip: padding-box;\n}\n.royal-theme.fr-modal .fr-modal-wrapper div.fr-modal-body button.fr-command:hover,\n.royal-theme.fr-modal .fr-modal-wrapper div.fr-modal-body button.fr-command:focus {\n  background: #ebebeb;\n  color: #553982;\n}\n.royal-theme.fr-modal .fr-modal-wrapper div.fr-modal-body button.fr-command:active {\n  background: #d6d6d6;\n  color: #553982;\n}\n.royal-theme.fr-modal .fr-modal-wrapper div.fr-modal-body button::-moz-focus-inner {\n  border: 0;\n}\n.royal-theme.royal-theme.fr-desktop .fr-modal-wrapper .fr-modal-head i:hover {\n  background: #ebebeb;\n}\n.royal-theme.fr-overlay {\n  top: 0;\n  bottom: 0;\n  left: 0;\n  right: 0;\n  background: #000000;\n}\n.royal-theme.fr-popup {\n  color: #553982;\n  background: #ffffff;\n  -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n  -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n  border-radius: 2px;\n  -moz-border-radius: 2px;\n  -webkit-border-radius: 2px;\n  -moz-background-clip: padding;\n  -webkit-background-clip: padding-box;\n  background-clip: padding-box;\n  font-family: Arial, Helvetica, sans-serif;\n  border: 0px;\n  border-top: 5px solid #553982;\n}\n.royal-theme.fr-popup .fr-input-focus {\n  background: #f5f5f5;\n}\n.royal-theme.fr-popup.fr-above {\n  border-top: 0;\n  border-bottom: 5px solid #553982;\n  -webkit-box-shadow: 0 -1px 3px rgba(0, 0, 0, 0.12), 0 -1px 1px 1px rgba(0, 0, 0, 0.16);\n  -moz-box-shadow: 0 -1px 3px rgba(0, 0, 0, 0.12), 0 -1px 1px 1px rgba(0, 0, 0, 0.16);\n  box-shadow: 0 -1px 3px rgba(0, 0, 0, 0.12), 0 -1px 1px 1px rgba(0, 0, 0, 0.16);\n}\n.royal-theme.fr-popup .fr-input-line {\n  padding: 8px 0;\n}\n.royal-theme.fr-popup .fr-input-line input[type=\"text\"],\n.royal-theme.fr-popup .fr-input-line textarea {\n  margin: 0px 0 1px 0;\n  border-bottom: solid 1px #bdbdbd;\n  color: #553982;\n}\n.royal-theme.fr-popup .fr-input-line input[type=\"text\"]:focus,\n.royal-theme.fr-popup .fr-input-line textarea:focus {\n  border-bottom: solid 2px #553982;\n}\n.royal-theme.fr-popup .fr-input-line input + label,\n.royal-theme.fr-popup .fr-input-line textarea + label {\n  top: 0;\n  left: 0;\n  -webkit-transition: color 0.2s ease 0s;\n  -moz-transition: color 0.2s ease 0s;\n  -ms-transition: color 0.2s ease 0s;\n  -o-transition: color 0.2s ease 0s;\n  background: #ffffff;\n}\n.royal-theme.fr-popup .fr-input-line input.fr-not-empty:focus + label,\n.royal-theme.fr-popup .fr-input-line textarea.fr-not-empty:focus + label {\n  color: #553982;\n}\n.royal-theme.fr-popup .fr-input-line input.fr-not-empty + label,\n.royal-theme.fr-popup .fr-input-line textarea.fr-not-empty + label {\n  color: #808080;\n}\n.royal-theme.fr-popup .fr-buttons {\n  -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n  -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n  padding: 0 2px;\n  line-height: 0;\n  border-bottom: 0px;\n}\n.royal-theme.fr-popup .fr-layer {\n  width: 225px;\n}\n@media (min-width: 768px) {\n  .royal-theme.fr-popup .fr-layer {\n    width: 300px;\n  }\n}\n.royal-theme.fr-popup .fr-action-buttons button.fr-command {\n  color: #553982;\n  -webkit-transition: background 0.2s ease 0s;\n  -moz-transition: background 0.2s ease 0s;\n  -ms-transition: background 0.2s ease 0s;\n  -o-transition: background 0.2s ease 0s;\n  border-radius: 2px;\n  -moz-border-radius: 2px;\n  -webkit-border-radius: 2px;\n  -moz-background-clip: padding;\n  -webkit-background-clip: padding-box;\n  background-clip: padding-box;\n}\n.royal-theme.fr-popup .fr-action-buttons button.fr-command:hover,\n.royal-theme.fr-popup .fr-action-buttons button.fr-command:focus {\n  background: #ebebeb;\n  color: #553982;\n}\n.royal-theme.fr-popup .fr-action-buttons button.fr-command:active {\n  background: #d6d6d6;\n  color: #553982;\n}\n.royal-theme.fr-popup .fr-action-buttons button::-moz-focus-inner {\n  border: 0;\n}\n.royal-theme.fr-popup .fr-checkbox span {\n  border: solid 1px #553982;\n  border-radius: 2px;\n  -moz-border-radius: 2px;\n  -webkit-border-radius: 2px;\n  -moz-background-clip: padding;\n  -webkit-background-clip: padding-box;\n  background-clip: padding-box;\n  -webkit-transition: background 0.2s ease 0s, border-color 0.2s ease 0s;\n  -moz-transition: background 0.2s ease 0s, border-color 0.2s ease 0s;\n  -ms-transition: background 0.2s ease 0s, border-color 0.2s ease 0s;\n  -o-transition: background 0.2s ease 0s, border-color 0.2s ease 0s;\n}\n.royal-theme.fr-popup .fr-checkbox input {\n  margin: 0;\n  padding: 0;\n}\n.royal-theme.fr-popup .fr-checkbox input:checked + span {\n  background: #553982;\n  border-color: #553982;\n}\n.royal-theme.fr-popup .fr-checkbox input:focus + span {\n  border-color: #553982;\n}\n.royal-theme.fr-popup.fr-rtl .fr-input-line input + label,\n.royal-theme.fr-popup.fr-rtl .fr-input-line textarea + label {\n  left: auto;\n  right: 0;\n}\n.royal-theme.fr-popup .fr-arrow {\n  width: 0;\n  height: 0;\n  border-left: 5px solid transparent;\n  border-right: 5px solid transparent;\n  border-bottom: 5px solid #553982;\n  top: -9px;\n  margin-left: -5px;\n}\n.royal-theme.fr-popup.fr-above .fr-arrow {\n  top: auto;\n  bottom: -9px;\n  border-bottom: 0;\n  border-top: 5px solid #553982;\n}\n.royal-theme.fr-toolbar {\n  color: #553982;\n  background: #ffffff;\n  font-family: Arial, Helvetica, sans-serif;\n  padding: 0 2px;\n  border-radius: 2px;\n  -moz-border-radius: 2px;\n  -webkit-border-radius: 2px;\n  -moz-background-clip: padding;\n  -webkit-background-clip: padding-box;\n  background-clip: padding-box;\n  -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n  -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n  border: 0px;\n  border-top: 5px solid #553982;\n}\n.royal-theme.fr-toolbar.fr-inline .fr-arrow {\n  width: 0;\n  height: 0;\n  border-left: 5px solid transparent;\n  border-right: 5px solid transparent;\n  border-bottom: 5px solid #553982;\n  top: -9px;\n  margin-left: -5px;\n}\n.royal-theme.fr-toolbar.fr-inline.fr-above {\n  -webkit-box-shadow: 0 -1px 3px rgba(0, 0, 0, 0.12), 0 -1px 1px 1px rgba(0, 0, 0, 0.16);\n  -moz-box-shadow: 0 -1px 3px rgba(0, 0, 0, 0.12), 0 -1px 1px 1px rgba(0, 0, 0, 0.16);\n  box-shadow: 0 -1px 3px rgba(0, 0, 0, 0.12), 0 -1px 1px 1px rgba(0, 0, 0, 0.16);\n  border-bottom: 5px solid #553982;\n  border-top: 0;\n}\n.royal-theme.fr-toolbar.fr-inline.fr-above .fr-arrow {\n  top: auto;\n  bottom: -9px;\n  border-bottom: 0;\n  border-top-color: inherit;\n  border-top-width: 5px;\n}\n.royal-theme.fr-toolbar.fr-top {\n  top: 0;\n  border-radius: 2px 2px 0 0;\n  -moz-border-radius: 2px 2px 0 0;\n  -webkit-border-radius: 2px 2px 0 0;\n  -moz-background-clip: padding;\n  -webkit-background-clip: padding-box;\n  background-clip: padding-box;\n  -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n  -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n}\n.royal-theme.fr-toolbar.fr-bottom {\n  bottom: 0;\n  border-radius: 0 0 2px 2px;\n  -moz-border-radius: 0 0 2px 2px;\n  -webkit-border-radius: 0 0 2px 2px;\n  -moz-background-clip: padding;\n  -webkit-background-clip: padding-box;\n  background-clip: padding-box;\n  -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n  -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n}\n.royal-theme .fr-separator {\n  background: #ebebeb;\n}\n.royal-theme .fr-separator.fr-vs {\n  height: 34px;\n  width: 1px;\n  margin: 2px;\n}\n.royal-theme .fr-separator.fr-hs {\n  height: 1px;\n  width: calc(100% - (2 * 2px));\n  margin: 0 2px;\n}\n"
  },
  {
    "path": "src/main/resources/static/plugins/froala-editor/css/third_party/embedly.css",
    "content": "/*!\n * froala_editor v2.9.1 (https://www.froala.com/wysiwyg-editor)\n * License https://froala.com/wysiwyg-editor/terms/\n * Copyright 2014-2018 Froala Labs\n */\n\n.clearfix::after {\n  clear: both;\n  display: block;\n  content: \"\";\n  height: 0;\n}\n.hide-by-clipping {\n  position: absolute;\n  width: 1px;\n  height: 1px;\n  padding: 0;\n  margin: -1px;\n  overflow: hidden;\n  clip: rect(0, 0, 0, 0);\n  border: 0;\n}\n.fr-element .fr-embedly {\n  user-select: none;\n  -o-user-select: none;\n  -moz-user-select: none;\n  -khtml-user-select: none;\n  -webkit-user-select: none;\n  -ms-user-select: none;\n  position: relative;\n}\n.fr-element .fr-embedly::after {\n  position: absolute;\n  content: '';\n  z-index: 1;\n  top: 0;\n  left: 0;\n  right: 0;\n  bottom: 0;\n  cursor: pointer;\n  display: block;\n  background: rgba(0, 0, 0, 0);\n}\n.fr-element .fr-embedly > * {\n  -webkit-box-sizing: content-box;\n  -moz-box-sizing: content-box;\n  box-sizing: content-box;\n  max-width: 100%;\n  border: none;\n}\n.fr-box .fr-embedly-resizer {\n  position: absolute;\n  border: solid 1px #1e88e5;\n  display: none;\n  user-select: none;\n  -o-user-select: none;\n  -moz-user-select: none;\n  -khtml-user-select: none;\n  -webkit-user-select: none;\n  -ms-user-select: none;\n}\n.fr-box .fr-embedly-resizer.fr-active {\n  display: block;\n}\n"
  },
  {
    "path": "src/main/resources/static/plugins/froala-editor/css/third_party/font_awesome.css",
    "content": "/*!\n * froala_editor v2.9.1 (https://www.froala.com/wysiwyg-editor)\n * License https://froala.com/wysiwyg-editor/terms/\n * Copyright 2014-2018 Froala Labs\n */\n\n.clearfix::after {\n  clear: both;\n  display: block;\n  content: \"\";\n  height: 0;\n}\n.hide-by-clipping {\n  position: absolute;\n  width: 1px;\n  height: 1px;\n  padding: 0;\n  margin: -1px;\n  overflow: hidden;\n  clip: rect(0, 0, 0, 0);\n  border: 0;\n}\n.fr-modal .fr-modal-wrapper .fr-modal-body .fr-font-awesome-modal {\n  text-align: left;\n  padding: 20px 20px 10px;\n}\n.fr-modal .fr-modal-wrapper .fr-modal-body .fr-font-awesome-modal .fr-font-awesome-list {\n  margin-bottom: 20px;\n}\n.fr-modal .fr-modal-wrapper .fr-modal-body .fr-font-awesome-modal .fr-font-awesome-title {\n  font-size: 20px;\n  padding: 6px 0 4px;\n  margin: 15px 0 5px;\n  border-bottom: solid 1px #f0f0f0;\n}\n.fr-modal .fr-modal-wrapper .fr-modal-body .fr-font-awesome-modal .fr-font-awesome {\n  display: inline-block;\n  font-size: 16px;\n  width: 20px;\n  height: 20px;\n  padding: 16px;\n  line-height: 20px;\n  cursor: default;\n  font-weight: normal;\n  -webkit-box-sizing: content-box;\n  -moz-box-sizing: content-box;\n  box-sizing: content-box;\n  text-align: center;\n  margin: -1px 0 0 -1px;\n}\n"
  },
  {
    "path": "src/main/resources/static/plugins/froala-editor/css/third_party/image_tui.css",
    "content": "/*!\n * froala_editor v2.9.1 (https://www.froala.com/wysiwyg-editor)\n * License https://froala.com/wysiwyg-editor/terms/\n * Copyright 2014-2018 Froala Labs\n */\n\n.clearfix::after {\n  clear: both;\n  display: block;\n  content: \"\";\n  height: 0;\n}\n.hide-by-clipping {\n  position: absolute;\n  width: 1px;\n  height: 1px;\n  padding: 0;\n  margin: -1px;\n  overflow: hidden;\n  clip: rect(0, 0, 0, 0);\n  border: 0;\n}\n.tui-image-editor-container {\n  position: fixed;\n  top: 0;\n  left: 0;\n  bottom: 0;\n  right: 0;\n  height: 100%;\n  width: 100%;\n  z-index: 10;\n}\n.tui-editor-cancel-btn {\n  background-color: #ffffff;\n  border: 1px solid #cccccc;\n  color: #222;\n}\n.tui-editor-save-btn {\n  background-color: #fdba3b;\n  border: 1px solid #fdba3b;\n  color: #ffffff;\n}\n"
  },
  {
    "path": "src/main/resources/static/plugins/froala-editor/css/third_party/spell_checker.css",
    "content": "/*!\n * froala_editor v2.9.1 (https://www.froala.com/wysiwyg-editor)\n * License https://froala.com/wysiwyg-editor/terms/\n * Copyright 2014-2018 Froala Labs\n */\n\n.clearfix::after {\n  clear: both;\n  display: block;\n  content: \"\";\n  height: 0;\n}\n.hide-by-clipping {\n  position: absolute;\n  width: 1px;\n  height: 1px;\n  padding: 0;\n  margin: -1px;\n  overflow: hidden;\n  clip: rect(0, 0, 0, 0);\n  border: 0;\n}\n.examples-variante > a {\n  font-size: 14px;\n  font-family: Arial, Helvetica, sans-serif;\n}\n.sc-cm-holder > .sc-cm {\n  border-top: 5px solid #222222 !important;\n  padding: 0px !important;\n  line-height: 200% !important;\n  -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n  -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 1px 1px rgba(0, 0, 0, 0.16);\n}\n.sc-cm .sc-cm__item.examples-variante.sc-cm__item_active > a > i {\n  display: none !important;\n}\n.sc-cm .sc-cm__item.examples-variante > a > i {\n  display: none !important;\n}\n.sc-cm__item_dropdown .i-icon {\n  display: none !important;\n}\n.sc-cm__item_dropdown .i-icon::before {\n  display: none !important;\n}\n.sc-cm::before {\n  display: none !important;\n}\ndiv.sc-cm-holder.sc-cm_show > ul > li.sc-cm__item.sc-cm__item_dropdown.sc-cm__item_arrow > div > ul {\n  border-style: none !important;\n  padding: 0px !important;\n}\n.sc-cm__item_dropdown:hover > a,\n.sc-cm a:hover {\n  background-color: #ebebeb !important;\n}\n.sc-cm__item_active > a,\n.sc-cm__item_active > a:hover,\n.sc-cm a:active,\n.sc-cm a:focus {\n  background-color: #d6d6d6 !important;\n}\n.sc-cm__item > a {\n  line-height: 200% !important;\n}\n.sc-cm-holder > .sc-cm:before {\n  background-color: #ebebeb !important;\n}\n.sc-cm-holder {\n  display: none;\n}\n"
  },
  {
    "path": "src/main/resources/static/plugins/froala-editor/js/languages/ar.js",
    "content": "/*!\n * froala_editor v2.9.1 (https://www.froala.com/wysiwyg-editor)\n * License https://froala.com/wysiwyg-editor/terms/\n * Copyright 2014-2018 Froala Labs\n */\n\n(function (factory) {\n    if (typeof define === 'function' && define.amd) {\n        // AMD. Register as an anonymous module.\n        define(['jquery'], factory);\n    } else if (typeof module === 'object' && module.exports) {\n        // Node/CommonJS\n        module.exports = function( root, jQuery ) {\n            if ( jQuery === undefined ) {\n                // require('jQuery') returns a factory that requires window to\n                // build a jQuery instance, we normalize how we use modules\n                // that require this pattern but the window provided is a noop\n                // if it's defined (how jquery works)\n                if ( typeof window !== 'undefined' ) {\n                    jQuery = require('jquery');\n                }\n                else {\n                    jQuery = require('jquery')(root);\n                }\n            }\n            return factory(jQuery);\n        };\n    } else {\n        // Browser globals\n        factory(window.jQuery);\n    }\n}(function ($) {\n/**\n * Arabic\n */\n\n$.FE.LANGUAGE['ar'] = {\n  translation: {\n    // Place holder\n    \"Type something\": \"\\u0627\\u0643\\u062a\\u0628 \\u0634\\u064a\\u0626\\u0627\",\n\n    // Basic formatting\n    \"Bold\": \"\\u063a\\u0627\\u0645\\u0642\",\n    \"Italic\": \"\\u0645\\u0627\\u0626\\u0644\",\n    \"Underline\": \"\\u062a\\u0633\\u0637\\u064a\\u0631\",\n    \"Strikethrough\": \"\\u064a\\u062a\\u0648\\u0633\\u0637 \\u062e\\u0637\",\n\n    // Main buttons\n    \"Insert\": \"\\u0625\\u062f\\u0631\\u0627\\u062c\",\n    \"Delete\": \"\\u062d\\u0630\\u0641\",\n    \"Cancel\": \"\\u0625\\u0644\\u063a\\u0627\\u0621\",\n    \"OK\": \"\\u0645\\u0648\\u0627\\u0641\\u0642\",\n    \"Back\": \"\\u0638\\u0647\\u0631\",\n    \"Remove\": \"\\u0625\\u0632\\u0627\\u0644\\u0629\",\n    \"More\": \"\\u0623\\u0643\\u062b\\u0631\",\n    \"Update\": \"\\u0627\\u0644\\u062a\\u062d\\u062f\\u064a\\u062b\",\n    \"Style\": \"\\u0623\\u0633\\u0644\\u0648\\u0628\",\n\n    // Font\n    \"Font Family\": \"\\u0639\\u0627\\u0626\\u0644\\u0629 \\u0627\\u0644\\u062e\\u0637\",\n    \"Font Size\": \"\\u062d\\u062c\\u0645 \\u0627\\u0644\\u062e\\u0637\",\n\n    // Colors\n    \"Colors\": \"\\u0627\\u0644\\u0623\\u0644\\u0648\\u0627\\u0646\",\n    \"Background\": \"\\u0627\\u0644\\u062e\\u0644\\u0641\\u064a\\u0629\",\n    \"Text\": \"\\u0627\\u0644\\u0646\\u0635\",\n    \"HEX Color\": \"عرافة اللون\",\n\n    // Paragraphs\n    \"Paragraph Format\": \"\\u062a\\u0646\\u0633\\u064a\\u0642 \\u0627\\u0644\\u0641\\u0642\\u0631\\u0629\",\n    \"Normal\": \"\\u0637\\u0628\\u064a\\u0639\\u064a\",\n    \"Code\": \"\\u0643\\u0648\\u062f\",\n    \"Heading 1\": \"\\u0627\\u0644\\u0639\\u0646\\u0627\\u0648\\u064a\\u0646 1\",\n    \"Heading 2\": \"\\u0627\\u0644\\u0639\\u0646\\u0627\\u0648\\u064a\\u0646 2\",\n    \"Heading 3\": \"\\u0627\\u0644\\u0639\\u0646\\u0627\\u0648\\u064a\\u0646 3\",\n    \"Heading 4\": \"\\u0627\\u0644\\u0639\\u0646\\u0627\\u0648\\u064a\\u0646 4\",\n\n    // Style\n    \"Paragraph Style\": \"\\u0646\\u0645\\u0637 \\u0627\\u0644\\u0641\\u0642\\u0631\\u0629\",\n    \"Inline Style\": \"\\u0627\\u0644\\u0646\\u0645\\u0637 \\u0627\\u0644\\u0645\\u0636\\u0645\\u0646\",\n\n    // Alignment\n    \"Align\": \"\\u0645\\u062d\\u0627\\u0630\\u0627\\u0629\",\n    \"Align Left\": \"\\u0645\\u062d\\u0627\\u0630\\u0627\\u0629 \\u0627\\u0644\\u0646\\u0635 \\u0644\\u0644\\u064a\\u0633\\u0627\\u0631\",\n    \"Align Center\": \"\\u062a\\u0648\\u0633\\u064a\\u0637\",\n    \"Align Right\": \"\\u0645\\u062d\\u0627\\u0630\\u0627\\u0629 \\u0627\\u0644\\u0646\\u0635 \\u0644\\u0644\\u064a\\u0645\\u064a\\u0646\",\n    \"Align Justify\": \"\\u0636\\u0628\\u0637\",\n    \"None\": \"\\u0644\\u0627 \\u0634\\u064a\\u0621\",\n\n    // Lists\n    \"Ordered List\": \"\\u0642\\u0627\\u0626\\u0645\\u0629 \\u0645\\u0631\\u062a\\u0628\\u0629\",\n    \"Unordered List\": \"\\u0642\\u0627\\u0626\\u0645\\u0629 \\u063a\\u064a\\u0631 \\u0645\\u0631\\u062a\\u0628\\u0629\",\n\n    // Indent\n    \"Decrease Indent\": \"\\u0627\\u0646\\u062e\\u0641\\u0627\\u0636 \\u0627\\u0644\\u0645\\u0633\\u0627\\u0641\\u0629 \\u0627\\u0644\\u0628\\u0627\\u062f\\u0626\\u0629\",\n    \"Increase Indent\": \"\\u0632\\u064a\\u0627\\u062f\\u0629 \\u0627\\u0644\\u0645\\u0633\\u0627\\u0641\\u0629 \\u0627\\u0644\\u0628\\u0627\\u062f\\u0626\\u0629\",\n\n    // Links\n    \"Insert Link\": \"\\u0625\\u062f\\u0631\\u0627\\u062c \\u0631\\u0627\\u0628\\u0637\",\n    \"Open in new tab\": \"\\u0641\\u062a\\u062d \\u0641\\u064a \\u0639\\u0644\\u0627\\u0645\\u0629 \\u062a\\u0628\\u0648\\u064a\\u0628 \\u062c\\u062f\\u064a\\u062f\\u0629\",\n    \"Open Link\": \"\\u0627\\u0641\\u062a\\u062d \\u0627\\u0644\\u0631\\u0627\\u0628\\u0637\",\n    \"Edit Link\": \"\\u0627\\u0631\\u062a\\u0628\\u0627\\u0637 \\u062a\\u062d\\u0631\\u064a\\u0631\",\n    \"Unlink\": \"\\u062d\\u0630\\u0641 \\u0627\\u0644\\u0631\\u0627\\u0628\\u0637\",\n    \"Choose Link\": \"\\u0627\\u062e\\u062a\\u064a\\u0627\\u0631 \\u0635\\u0644\\u0629\",\n\n    // Images\n    \"Insert Image\": \"\\u0625\\u062f\\u0631\\u0627\\u062c \\u0635\\u0648\\u0631\\u0629\",\n    \"Upload Image\": \"\\u062a\\u062d\\u0645\\u064a\\u0644 \\u0635\\u0648\\u0631\\u0629\",\n    \"By URL\": \"\\u0628\\u0648\\u0627\\u0633\\u0637\\u0629 URL\",\n    \"Browse\": \"\\u062a\\u0635\\u0641\\u062d\",\n    \"Drop image\": \"\\u0625\\u0633\\u0642\\u0627\\u0637 \\u0635\\u0648\\u0631\\u0629\",\n    \"or click\": \"\\u0623\\u0648 \\u0627\\u0646\\u0642\\u0631 \\u0641\\u0648\\u0642\",\n    \"Manage Images\": \"\\u0625\\u062f\\u0627\\u0631\\u0629 \\u0627\\u0644\\u0635\\u0648\\u0631\",\n    \"Loading\": \"\\u062a\\u062d\\u0645\\u064a\\u0644\",\n    \"Deleting\": \"\\u062d\\u0630\\u0641\",\n    \"Tags\": \"\\u0627\\u0644\\u0643\\u0644\\u0645\\u0627\\u062a\",\n    \"Are you sure? Image will be deleted.\": \"\\u0647\\u0644 \\u0623\\u0646\\u062a \\u0645\\u062a\\u0623\\u0643\\u062f\\u061f \\u0633\\u064a\\u062a\\u0645 \\u062d\\u0630\\u0641 \\u0627\\u0644\\u0635\\u0648\\u0631\\u0629\\u002e\",\n    \"Replace\": \"\\u0627\\u0633\\u062a\\u0628\\u062f\\u0627\\u0644\",\n    \"Uploading\": \"\\u062a\\u062d\\u0645\\u064a\\u0644\",\n    \"Loading image\": \"\\u0635\\u0648\\u0631\\u0629 \\u062a\\u062d\\u0645\\u064a\\u0644\",\n    \"Display\": \"\\u0639\\u0631\\u0636\",\n    \"Inline\": \"\\u0641\\u064a \\u062e\\u0637\",\n    \"Break Text\": \"\\u0646\\u0635 \\u0627\\u0633\\u062a\\u0631\\u0627\\u062d\\u0629\",\n    \"Alternative Text\": \"\\u0646\\u0635 \\u0628\\u062f\\u064a\\u0644\",\n    \"Change Size\": \"\\u062a\\u063a\\u064a\\u064a\\u0631 \\u062d\\u062c\\u0645\",\n    \"Width\": \"\\u0639\\u0631\\u0636\",\n    \"Height\": \"\\u0627\\u0631\\u062a\\u0641\\u0627\\u0639\",\n    \"Something went wrong. Please try again.\": \".\\u062d\\u062f\\u062b \\u062e\\u0637\\u0623 \\u0645\\u0627. \\u062d\\u0627\\u0648\\u0644 \\u0645\\u0631\\u0629 \\u0627\\u062e\\u0631\\u0649\",\n    \"Image Caption\": \"تعليق على الصورة\",\n    \"Advanced Edit\": \"تعديل متقدم\",\n\n    // Video\n    \"Insert Video\": \"\\u0625\\u062f\\u0631\\u0627\\u062c \\u0641\\u064a\\u062f\\u064a\\u0648\",\n    \"Embedded Code\": \"\\u0627\\u0644\\u062a\\u0639\\u0644\\u064a\\u0645\\u0627\\u062a \\u0627\\u0644\\u0628\\u0631\\u0645\\u062c\\u064a\\u0629 \\u0627\\u0644\\u0645\\u0636\\u0645\\u0646\\u0629\",\n    \"Paste in a video URL\": \"لصق في عنوان ورل للفيديو\",\n    \"Drop video\": \"انخفاض الفيديو\",\n    \"Your browser does not support HTML5 video.\": \"متصفحك لا يدعم فيديو HTML5.\",\n    \"Upload Video\": \"رفع فيديو\",\n\n    // Tables\n    \"Insert Table\": \"\\u0625\\u062f\\u0631\\u0627\\u062c \\u062c\\u062f\\u0648\\u0644\",\n    \"Table Header\": \"\\u0631\\u0623\\u0633 \\u0627\\u0644\\u062c\\u062f\\u0648\\u0644\",\n    \"Remove Table\": \"\\u0625\\u0632\\u0627\\u0644\\u0629 \\u0627\\u0644\\u062c\\u062f\\u0648\\u0644\",\n    \"Table Style\": \"\\u0646\\u0645\\u0637 \\u0627\\u0644\\u062c\\u062f\\u0648\\u0644\",\n    \"Horizontal Align\": \"\\u0645\\u062d\\u0627\\u0630\\u0627\\u0629 \\u0623\\u0641\\u0642\\u064a\\u0629\",\n    \"Row\": \"\\u0635\\u0641\",\n    \"Insert row above\": \"\\u0625\\u062f\\u0631\\u0627\\u062c \\u0635\\u0641 \\u0644\\u0644\\u0623\\u0639\\u0644\\u0649\",\n    \"Insert row below\": \"\\u0625\\u062f\\u0631\\u0627\\u062c \\u0635\\u0641 \\u0644\\u0644\\u0623\\u0633\\u0641\\u0644\",\n    \"Delete row\": \"\\u062d\\u0630\\u0641 \\u0635\\u0641\",\n    \"Column\": \"\\u0639\\u0645\\u0648\\u062f\",\n    \"Insert column before\": \"\\u0625\\u062f\\u0631\\u0627\\u062c \\u0639\\u0645\\u0648\\u062f \\u0644\\u0644\\u064a\\u0633\\u0627\\u0631\",\n    \"Insert column after\": \"\\u0625\\u062f\\u0631\\u0627\\u062c \\u0639\\u0645\\u0648\\u062f \\u0644\\u0644\\u064a\\u0645\\u064a\\u0646\",\n    \"Delete column\": \"\\u062d\\u0630\\u0641 \\u0639\\u0645\\u0648\\u062f\",\n    \"Cell\": \"\\u062e\\u0644\\u064a\\u0629\",\n    \"Merge cells\": \"\\u062f\\u0645\\u062c \\u062e\\u0644\\u0627\\u064a\\u0627\",\n    \"Horizontal split\": \"\\u0627\\u0646\\u0642\\u0633\\u0627\\u0645 \\u0623\\u0641\\u0642\\u064a\",\n    \"Vertical split\": \"\\u0627\\u0644\\u0627\\u0646\\u0642\\u0633\\u0627\\u0645 \\u0627\\u0644\\u0639\\u0645\\u0648\\u062f\\u064a\",\n    \"Cell Background\": \"\\u062e\\u0644\\u0641\\u064a\\u0629 \\u0627\\u0644\\u062e\\u0644\\u064a\\u0629\",\n    \"Vertical Align\": \"\\u0645\\u062d\\u0627\\u0630\\u0627\\u0629 \\u0639\\u0645\\u0648\\u062f\\u064a\\u0629\",\n    \"Top\": \"\\u0623\\u0639\\u0644\\u0649\",\n    \"Middle\": \"\\u0648\\u0633\\u0637\",\n    \"Bottom\": \"\\u0623\\u0633\\u0641\\u0644\",\n    \"Align Top\": \"\\u0645\\u062d\\u0627\\u0630\\u0627\\u0629 \\u0623\\u0639\\u0644\\u0649\",\n    \"Align Middle\": \"\\u0645\\u062d\\u0627\\u0630\\u0627\\u0629 \\u0648\\u0633\\u0637\",\n    \"Align Bottom\": \"\\u0645\\u062d\\u0627\\u0630\\u0627\\u0629 \\u0627\\u0644\\u0623\\u0633\\u0641\\u0644\",\n    \"Cell Style\": \"\\u0646\\u0645\\u0637 \\u0627\\u0644\\u062e\\u0644\\u064a\\u0629\",\n\n    // Files\n    \"Upload File\": \"\\u062a\\u062d\\u0645\\u064a\\u0644 \\u0627\\u0644\\u0645\\u0644\\u0641\",\n    \"Drop file\": \"\\u0627\\u0646\\u062e\\u0641\\u0627\\u0636 \\u0627\\u0644\\u0645\\u0644\\u0641\",\n\n    // Emoticons\n    \"Emoticons\": \"\\u0627\\u0644\\u0645\\u0634\\u0627\\u0639\\u0631\",\n    \"Grinning face\": \"\\u064a\\u0643\\u0634\\u0631 \\u0648\\u062c\\u0647\\u0647\",\n    \"Grinning face with smiling eyes\": \"\\u0645\\u0628\\u062a\\u0633\\u0645\\u0627 \\u0648\\u062c\\u0647 \\u0645\\u0639 \\u064a\\u0628\\u062a\\u0633\\u0645 \\u0627\\u0644\\u0639\\u064a\\u0646\",\n    \"Face with tears of joy\": \"\\u0648\\u062c\\u0647 \\u0645\\u0639 \\u062f\\u0645\\u0648\\u0639 \\u0627\\u0644\\u0641\\u0631\\u062d\",\n    \"Smiling face with open mouth\": \"\\u0627\\u0644\\u0648\\u062c\\u0647 \\u0627\\u0644\\u0645\\u0628\\u062a\\u0633\\u0645 \\u0645\\u0639 \\u0641\\u062a\\u062d \\u0627\\u0644\\u0641\\u0645\",\n    \"Smiling face with open mouth and smiling eyes\": \"\\u0627\\u0644\\u0648\\u062c\\u0647 \\u0627\\u0644\\u0645\\u0628\\u062a\\u0633\\u0645 \\u0645\\u0639 \\u0641\\u062a\\u062d \\u0627\\u0644\\u0641\\u0645 \\u0648\\u0627\\u0644\\u0639\\u064a\\u0646\\u064a\\u0646 \\u064a\\u0628\\u062a\\u0633\\u0645\",\n    \"Smiling face with open mouth and cold sweat\": \"\\u0627\\u0644\\u0648\\u062c\\u0647 \\u0627\\u0644\\u0645\\u0628\\u062a\\u0633\\u0645 \\u0645\\u0639 \\u0641\\u062a\\u062d \\u0627\\u0644\\u0641\\u0645 \\u0648\\u0627\\u0644\\u0639\\u0631\\u0642 \\u0627\\u0644\\u0628\\u0627\\u0631\\u062f\",\n    \"Smiling face with open mouth and tightly-closed eyes\": \"\\u0627\\u0644\\u0648\\u062c\\u0647 \\u0627\\u0644\\u0645\\u0628\\u062a\\u0633\\u0645 \\u0645\\u0639 \\u0641\\u062a\\u062d \\u0627\\u0644\\u0641\\u0645 \\u0648\\u0627\\u0644\\u0639\\u064a\\u0646\\u064a\\u0646 \\u0645\\u063a\\u0644\\u0642\\u0629 \\u0628\\u0625\\u062d\\u0643\\u0627\\u0645\",\n    \"Smiling face with halo\": \"\\u0627\\u0644\\u0648\\u062c\\u0647 \\u0627\\u0644\\u0645\\u0628\\u062a\\u0633\\u0645 \\u0645\\u0639 \\u0647\\u0627\\u0644\\u0629\",\n    \"Smiling face with horns\": \"\\u0627\\u0644\\u0648\\u062c\\u0647 \\u0627\\u0644\\u0645\\u0628\\u062a\\u0633\\u0645 \\u0628\\u0642\\u0631\\u0648\\u0646\",\n    \"Winking face\": \"\\u0627\\u0644\\u063a\\u0645\\u0632 \\u0648\\u062c\\u0647\",\n    \"Smiling face with smiling eyes\": \"\\u064a\\u0628\\u062a\\u0633\\u0645 \\u0648\\u062c\\u0647 \\u0645\\u0639 \\u0639\\u064a\\u0648\\u0646 \\u062a\\u0628\\u062a\\u0633\\u0645\",\n    \"Face savoring delicious food\": \"\\u064a\\u0648\\u0627\\u062c\\u0647 \\u0644\\u0630\\u064a\\u0630 \\u0627\\u0644\\u0645\\u0630\\u0627\\u0642 \\u0644\\u0630\\u064a\\u0630 \\u0627\\u0644\\u0637\\u0639\\u0627\\u0645\",\n    \"Relieved face\": \"\\u0648\\u062c\\u0647 \\u0628\\u0627\\u0644\\u0627\\u0631\\u062a\\u064a\\u0627\\u062d\",\n    \"Smiling face with heart-shaped eyes\": \"\\u0627\\u0644\\u0648\\u062c\\u0647 \\u0627\\u0644\\u0645\\u0628\\u062a\\u0633\\u0645 \\u0628\\u0639\\u064a\\u0646\\u064a\\u0646 \\u0639\\u0644\\u0649 \\u0634\\u0643\\u0644 \\u0642\\u0644\\u0628\",\n    \"Smiling face with sunglasses\": \"\\u0627\\u0644\\u0648\\u062c\\u0647 \\u0627\\u0644\\u0645\\u0628\\u062a\\u0633\\u0645 \\u0645\\u0639 \\u0627\\u0644\\u0646\\u0638\\u0627\\u0631\\u0627\\u062a \\u0627\\u0644\\u0634\\u0645\\u0633\\u064a\\u0629\",\n    \"Smirking face\": \"\\u0633\\u0645\\u064a\\u0631\\u0643\\u064a\\u0646\\u062c \\u0627\\u0644\\u0648\\u062c\\u0647\",\n    \"Neutral face\": \"\\u0645\\u062d\\u0627\\u064a\\u062f \\u0627\\u0644\\u0648\\u062c\\u0647\",\n    \"Expressionless face\": \"\\u0648\\u062c\\u0647 \\u0627\\u0644\\u062a\\u0639\\u0627\\u0628\\u064a\\u0631\",\n    \"Unamused face\": \"\\u0644\\u0627 \\u0645\\u0633\\u0644\\u064a\\u0627 \\u0627\\u0644\\u0648\\u062c\\u0647\",\n    \"Face with cold sweat\": \"\\u0648\\u062c\\u0647 \\u0645\\u0639 \\u0639\\u0631\\u0642 \\u0628\\u0627\\u0631\\u062f\",\n    \"Pensive face\": \"\\u0648\\u062c\\u0647 \\u0645\\u062a\\u0623\\u0645\\u0644\",\n    \"Confused face\": \"\\u0648\\u062c\\u0647 \\u0627\\u0644\\u062e\\u0644\\u0637\",\n    \"Confounded face\": \"\\u0648\\u062c\\u0647 \\u0645\\u0631\\u062a\\u0628\\u0643\",\n    \"Kissing face\": \"\\u062a\\u0642\\u0628\\u064a\\u0644 \\u0627\\u0644\\u0648\\u062c\\u0647\",\n    \"Face throwing a kiss\": \"\\u0645\\u0648\\u0627\\u062c\\u0647\\u0629 \\u0631\\u0645\\u064a \\u0642\\u0628\\u0644\\u0629\",\n    \"Kissing face with smiling eyes\": \"\\u062a\\u0642\\u0628\\u064a\\u0644 \\u0648\\u062c\\u0647 \\u0645\\u0639 \\u0639\\u064a\\u0648\\u0646 \\u062a\\u0628\\u062a\\u0633\\u0645\",\n    \"Kissing face with closed eyes\": \"\\u062a\\u0642\\u0628\\u064a\\u0644 \\u0648\\u062c\\u0647 \\u0645\\u0639 \\u0639\\u064a\\u0648\\u0646 \\u0645\\u063a\\u0644\\u0642\\u0629\",\n    \"Face with stuck out tongue\": \"\\u0627\\u0644\\u0648\\u062c\\u0647 \\u0645\\u0639 \\u062a\\u0645\\u0633\\u0643 \\u0628\\u0647\\u0627 \\u0627\\u0644\\u0644\\u0633\\u0627\\u0646\",\n    \"Face with stuck out tongue and winking eye\": \"\\u0627\\u0644\\u0648\\u062c\\u0647 \\u0645\\u0639 \\u062a\\u0645\\u0633\\u0643 \\u0628\\u0647\\u0627 \\u0627\\u0644\\u0644\\u0633\\u0627\\u0646 \\u0648\\u0627\\u0644\\u0639\\u064a\\u0646 \\u0627\\u0644\\u062a\\u063a\\u0627\\u0636\\u064a\",\n    \"Face with stuck out tongue and tightly-closed eyes\": \"\\u0627\\u0644\\u0648\\u062c\\u0647 \\u0645\\u0639 \\u062a\\u0645\\u0633\\u0643 \\u0628\\u0647\\u0627 \\u0627\\u0644\\u0644\\u0633\\u0627\\u0646 \\u0648\\u0627\\u0644\\u0639\\u064a\\u0648\\u0646 \\u0645\\u063a\\u0644\\u0642\\u0629 \\u0628\\u0623\\u062d\\u0643\\u0627\\u0645\\u002d\",\n    \"Disappointed face\": \"\\u0648\\u062c\\u0647\\u0627 \\u062e\\u064a\\u0628\\u0629 \\u0623\\u0645\\u0644\",\n    \"Worried face\": \"\\u0648\\u062c\\u0647\\u0627 \\u0627\\u0644\\u0642\\u0644\\u0642\\u0648\\u0646\",\n    \"Angry face\": \"\\u0648\\u062c\\u0647 \\u063a\\u0627\\u0636\\u0628\",\n    \"Pouting face\": \"\\u0627\\u0644\\u0639\\u0628\\u0648\\u0633 \\u0648\\u062c\\u0647\",\n    \"Crying face\": \"\\u0627\\u0644\\u0628\\u0643\\u0627\\u0621 \\u0627\\u0644\\u0648\\u062c\\u0647\",\n    \"Persevering face\": \"\\u0627\\u0644\\u0645\\u062b\\u0627\\u0628\\u0631\\u0629 \\u0648\\u062c\\u0647\\u0647\",\n    \"Face with look of triumph\": \"\\u0648\\u0627\\u062c\\u0647 \\u0645\\u0639 \\u0646\\u0638\\u0631\\u0629 \\u0627\\u0646\\u062a\\u0635\\u0627\\u0631\",\n    \"Disappointed but relieved face\": \"\\u0628\\u062e\\u064a\\u0628\\u0629 \\u0623\\u0645\\u0644 \\u0648\\u0644\\u0643\\u0646 \\u064a\\u0639\\u0641\\u0649 \\u0648\\u062c\\u0647\",\n    \"Frowning face with open mouth\": \"\\u0645\\u0642\\u0637\\u0628 \\u0627\\u0644\\u0648\\u062c\\u0647 \\u0645\\u0639 \\u0641\\u062a\\u062d \\u0627\\u0644\\u0641\\u0645\",\n    \"Anguished face\": \"\\u0627\\u0644\\u0648\\u062c\\u0647 \\u0627\\u0644\\u0645\\u0624\\u0644\\u0645\",\n    \"Fearful face\": \"\\u0627\\u0644\\u0648\\u062c\\u0647 \\u0627\\u0644\\u0645\\u062e\\u064a\\u0641\",\n    \"Weary face\": \"\\u0648\\u062c\\u0647\\u0627 \\u0628\\u0627\\u0644\\u0636\\u062c\\u0631\",\n    \"Sleepy face\": \"\\u0648\\u062c\\u0647 \\u0646\\u0639\\u0633\\u0627\\u0646\",\n    \"Tired face\": \"\\u0648\\u062c\\u0647 \\u0645\\u062a\\u0639\\u0628\",\n    \"Grimacing face\": \"\\u0648\\u062e\\u0631\\u062c \\u0633\\u064a\\u0633 \\u0627\\u0644\\u0648\\u062c\\u0647\",\n    \"Loudly crying face\": \"\\u0627\\u0644\\u0628\\u0643\\u0627\\u0621 \\u0628\\u0635\\u0648\\u062a \\u0639\\u0627\\u0644 \\u0648\\u062c\\u0647\\u0647\",\n    \"Face with open mouth\": \"\\u0648\\u0627\\u062c\\u0647 \\u0645\\u0639 \\u0641\\u062a\\u062d \\u0627\\u0644\\u0641\\u0645\",\n    \"Hushed face\": \"\\u0648\\u062c\\u0647\\u0627 \\u0627\\u0644\\u062a\\u0643\\u062a\\u0645\",\n    \"Face with open mouth and cold sweat\": \"\\u0648\\u0627\\u062c\\u0647 \\u0645\\u0639 \\u0641\\u062a\\u062d \\u0627\\u0644\\u0641\\u0645 \\u0648\\u0627\\u0644\\u0639\\u0631\\u0642 \\u0627\\u0644\\u0628\\u0627\\u0631\\u062f\",\n    \"Face screaming in fear\": \"\\u0648\\u0627\\u062c\\u0647 \\u064a\\u0635\\u0631\\u062e \\u0641\\u064a \\u062e\\u0648\\u0641\",\n    \"Astonished face\": \"\\u0648\\u062c\\u0647\\u0627 \\u062f\\u0647\\u0634\",\n    \"Flushed face\": \"\\u0627\\u062d\\u0645\\u0631\\u0627\\u0631 \\u0627\\u0644\\u0648\\u062c\\u0647\",\n    \"Sleeping face\": \"\\u0627\\u0644\\u0646\\u0648\\u0645 \\u0627\\u0644\\u0648\\u062c\\u0647\",\n    \"Dizzy face\": \"\\u0648\\u062c\\u0647\\u0627 \\u0628\\u0627\\u0644\\u062f\\u0648\\u0627\\u0631\",\n    \"Face without mouth\": \"\\u0648\\u0627\\u062c\\u0647 \\u062f\\u0648\\u0646 \\u0627\\u0644\\u0641\\u0645\",\n    \"Face with medical mask\": \"\\u0648\\u0627\\u062c\\u0647 \\u0645\\u0639 \\u0642\\u0646\\u0627\\u0639 \\u0627\\u0644\\u0637\\u0628\\u064a\\u0629\",\n\n    // Line breaker\n    \"Break\": \"\\u0627\\u0644\\u0627\\u0646\\u0642\\u0633\\u0627\\u0645\",\n\n    // Math\n    \"Subscript\": \"\\u0645\\u0646\\u062e\\u0641\\u0636\",\n    \"Superscript\": \"\\u062d\\u0631\\u0641 \\u0641\\u0648\\u0642\\u064a\",\n\n    // Full screen\n    \"Fullscreen\": \"\\u0643\\u0627\\u0645\\u0644 \\u0627\\u0644\\u0634\\u0627\\u0634\\u0629\",\n\n    // Horizontal line\n    \"Insert Horizontal Line\": \"\\u0625\\u062f\\u0631\\u0627\\u062c \\u062e\\u0637 \\u0623\\u0641\\u0642\\u064a\",\n\n    // Clear formatting\n    \"Clear Formatting\": \"\\u0625\\u0632\\u0627\\u0644\\u0629 \\u0627\\u0644\\u062a\\u0646\\u0633\\u064a\\u0642\",\n\n    // Save\n    \"Save\": \"\\u062d\\u0641\\u0638\",\n\n    // Undo, redo\n    \"Undo\": \"\\u062a\\u0631\\u0627\\u062c\\u0639\",\n    \"Redo\": \"\\u0625\\u0639\\u0627\\u062f\\u0629\",\n\n    // Select all\n    \"Select All\": \"\\u062a\\u062d\\u062f\\u064a\\u062f \\u0627\\u0644\\u0643\\u0644\",\n\n    // Code view\n    \"Code View\": \"\\u0639\\u0631\\u0636 \\u0627\\u0644\\u062a\\u0639\\u0644\\u064a\\u0645\\u0627\\u062a \\u0627\\u0644\\u0628\\u0631\\u0645\\u062c\\u064a\\u0629\",\n\n    // Quote\n    \"Quote\": \"\\u0627\\u0642\\u062a\\u0628\\u0633\",\n    \"Increase\": \"\\u0632\\u064a\\u0627\\u062f\\u0629\",\n    \"Decrease\": \"\\u0627\\u0646\\u062e\\u0641\\u0627\\u0636\",\n\n    // Quick Insert\n    \"Quick Insert\": \"\\u0625\\u062f\\u0631\\u0627\\u062c \\u0633\\u0631\\u064a\\u0639\",\n\n    // Spcial Characters\n    \"Special Characters\": \"أحرف خاصة\",\n    \"Latin\": \"لاتينية\",\n    \"Greek\": \"الإغريقي\",\n    \"Cyrillic\": \"السيريلية\",\n    \"Punctuation\": \"علامات ترقيم\",\n    \"Currency\": \"دقة\",\n    \"Arrows\": \"السهام\",\n    \"Math\": \"الرياضيات\",\n    \"Misc\": \"متفرقات\",\n\n    // Print.\n    \"Print\": \"طباعة\",\n\n    // Spell Checker.\n    \"Spell Checker\": \"مدقق املائي\",\n\n    // Help\n    \"Help\": \"مساعدة\",\n    \"Shortcuts\": \"اختصارات\",\n    \"Inline Editor\": \"محرر مضمنة\",\n    \"Show the editor\": \"عرض المحرر\",\n    \"Common actions\": \"الإجراءات المشتركة\",\n    \"Copy\": \"نسخ\",\n    \"Cut\": \"يقطع\",\n    \"Paste\": \"معجون\",\n    \"Basic Formatting\": \"التنسيق الأساسي\",\n    \"Increase quote level\": \"زيادة مستوى الاقتباس\",\n    \"Decrease quote level\": \"انخفاض مستوى الاقتباس\",\n    \"Image / Video\": \"صورة / فيديو\",\n    \"Resize larger\": \"تغيير حجم أكبر\",\n    \"Resize smaller\": \"تغيير حجم أصغر\",\n    \"Table\": \"الطاولة\",\n    \"Select table cell\": \"حدد خلية الجدول\",\n    \"Extend selection one cell\": \"توسيع اختيار خلية واحدة\",\n    \"Extend selection one row\": \"تمديد اختيار صف واحد\",\n    \"Navigation\": \"التنقل\",\n    \"Focus popup / toolbar\": \"التركيز المنبثقة / شريط الأدوات\",\n    \"Return focus to previous position\": \"عودة التركيز إلى الموقف السابق\",\n\n    // Embed.ly\n    \"Embed URL\": \"تضمين عنوان ورل\",\n    \"Paste in a URL to embed\": \"الصق في عنوان ورل لتضمينه\",\n\n    // Word Paste.\n    \"The pasted content is coming from a Microsoft Word document. Do you want to keep the format or clean it up?\": \"المحتوى الذي تم لصقه قادم من وثيقة كلمة ميكروسوفت. هل تريد الاحتفاظ بالتنسيق أو تنظيفه؟\",\n    \"Keep\": \"احتفظ\",\n    \"Clean\": \"نظيف\",\n    \"Word Paste Detected\": \"تم اكتشاف معجون الكلمات\"\n  },\n  direction: \"rtl\"\n};\n\n}));\n"
  },
  {
    "path": "src/main/resources/static/plugins/froala-editor/js/languages/bs.js",
    "content": "/*!\n * froala_editor v2.9.1 (https://www.froala.com/wysiwyg-editor)\n * License https://froala.com/wysiwyg-editor/terms/\n * Copyright 2014-2018 Froala Labs\n */\n\n(function (factory) {\n    if (typeof define === 'function' && define.amd) {\n        // AMD. Register as an anonymous module.\n        define(['jquery'], factory);\n    } else if (typeof module === 'object' && module.exports) {\n        // Node/CommonJS\n        module.exports = function( root, jQuery ) {\n            if ( jQuery === undefined ) {\n                // require('jQuery') returns a factory that requires window to\n                // build a jQuery instance, we normalize how we use modules\n                // that require this pattern but the window provided is a noop\n                // if it's defined (how jquery works)\n                if ( typeof window !== 'undefined' ) {\n                    jQuery = require('jquery');\n                }\n                else {\n                    jQuery = require('jquery')(root);\n                }\n            }\n            return factory(jQuery);\n        };\n    } else {\n        // Browser globals\n        factory(window.jQuery);\n    }\n}(function ($) {\n/**\n * Bosnian\n */\n\n$.FE.LANGUAGE['bs'] = {\n  translation: {\n    // Place holder\n    \"Type something\": \"Ukucajte ne\\u0161tp\",\n\n    // Basic formatting\n    \"Bold\": \"Bold\",\n    \"Italic\": \"Italic\",\n    \"Underline\": \"Podvu\\u010deno\",\n    \"Strikethrough\": \"Precrtano\",\n\n    // Main buttons\n    \"Insert\": \"Umetni\",\n    \"Delete\": \"Obri\\u0161i\",\n    \"Cancel\": \"Otka\\u017ei\",\n    \"OK\": \"U redu\",\n    \"Back\": \"Natrag\",\n    \"Remove\": \"Ukloni\",\n    \"More\": \"Vi\\u0161e\",\n    \"Update\": \"A\\u017euriranje\",\n    \"Style\": \"Stil\",\n\n    // Font\n    \"Font Family\": \"Odaberi font\",\n    \"Font Size\": \"Veli\\u010dina fonta\",\n\n    // Colors\n    \"Colors\": \"Boje\",\n    \"Background\": \"Pozadine\",\n    \"Text\": \"Teksta\",\n    \"HEX Color\": \"Hex boje\",\n\n    // Paragraphs\n    \"Paragraph Format\": \"Paragraf formatu\",\n    \"Normal\": \"Normalno\",\n    \"Code\": \"Izvorni kod\",\n    \"Heading 1\": \"Naslov 1\",\n    \"Heading 2\": \"Naslov 2\",\n    \"Heading 3\": \"Naslov 3\",\n    \"Heading 4\": \"Naslov 4\",\n\n    // Style\n    \"Paragraph Style\": \"Paragraf stil\",\n    \"Inline Style\": \"Inline stil\",\n\n    // Alignment\n    \"Alignment\": \"Poravnanje\",\n    \"Align Left\": \"Poravnaj lijevo\",\n    \"Align Center\": \"Poravnaj po sredini\",\n    \"Align Right\": \"Poravnaj desno\",\n    \"Align Justify\": \"Obostrano poravnanje\",\n    \"None\": \"Nijedan\",\n\n    // Lists\n    \"Ordered List\": \"Ure\\u0111ena lista\",\n    \"Unordered List\": \"Nesre\\u0111ene lista\",\n\n    // Indent\n    \"Decrease Indent\": \"Smanjenje alineja\",\n    \"Increase Indent\": \"Pove\\u0107anje alineja\",\n\n    // Links\n    \"Insert Link\": \"Umetni link\",\n    \"Open in new tab\": \"Otvori u novom prozoru\",\n    \"Open Link\": \"Otvori link\",\n    \"Edit Link\": \"Uredi link\",\n    \"Unlink\": \"Ukloni link\",\n    \"Choose Link\": \"Izabrati link\",\n\n    // Images\n    \"Insert Image\": \"Umetni sliku\",\n    \"Upload Image\": \"Upload sliku\",\n    \"By URL\": \"Preko URL\",\n    \"Browse\": \"Pregledaj\",\n    \"Drop image\": \"Izbaci sliku\",\n    \"or click\": \"ili odaberi\",\n    \"Manage Images\": \"Upravljanje ilustracijama\",\n    \"Loading\": \"Koji tovari\",\n    \"Deleting\": \"Brisanje\",\n    \"Tags\": \"Oznake\",\n    \"Are you sure? Image will be deleted.\": \"Da li ste sigurni da \\u017eelite da obri\\u0161ete ovu ilustraciju?\",\n    \"Replace\": \"Zamijenite\",\n    \"Uploading\": \"Uploading\",\n    \"Loading image\": \"Koji tovari sliku\",\n    \"Display\": \"Prikaz\",\n    \"Inline\": \"Inline\",\n    \"Break Text\": \"Break tekst\",\n    \"Alternative Text\": \"Alternativna tekst\",\n    \"Change Size\": \"Promijeni veli\\u010dinu\",\n    \"Width\": \"\\u0161irina\",\n    \"Height\": \"Visina\",\n    \"Something went wrong. Please try again.\": \"Ne\\u0161to je po\\u0161lo po zlu. Molimo vas da poku\\u0161ate ponovo.\",\n    \"Image Caption\": \"Caption slika\",\n    \"Advanced Edit\": \"Napredna izmjena\",\n\n    // Video\n    \"Insert Video\": \"Umetni video\",\n    \"Embedded Code\": \"Embedded kod\",\n    \"Paste in a video URL\": \"Nalepite u video url\",\n    \"Drop video\": \"Drop video\",\n    \"Your browser does not support HTML5 video.\": \"Vaš pretraživač ne podržava html5 video.\",\n    \"Upload Video\": \"Otpremite video\",\n\n    // Tables\n    \"Insert Table\": \"Umetni tabelu\",\n    \"Table Header\": \"Tabelu zaglavlja\",\n    \"Remove Table\": \"Uklonite tabelu\",\n    \"Table Style\": \"Tabela stil\",\n    \"Horizontal Align\": \"Horizontalno poravnaj\",\n    \"Row\": \"Red\",\n    \"Insert row above\": \"Umetni red iznad\",\n    \"Insert row below\": \"Umetni red ispod\",\n    \"Delete row\": \"Obri\\u0161i red\",\n    \"Column\": \"Kolona\",\n    \"Insert column before\": \"Umetni kolonu prije\",\n    \"Insert column after\": \"Umetni kolonu poslije\",\n    \"Delete column\": \"Obri\\u0161i kolonu\",\n    \"Cell\": \"\\u0106elija\",\n    \"Merge cells\": \"Spoji \\u0107elija\",\n    \"Horizontal split\": \"Horizontalno razdvajanje polja\",\n    \"Vertical split\": \"Vertikalno razdvajanje polja\",\n    \"Cell Background\": \"\\u0106elija pozadini\",\n    \"Vertical Align\": \"Vertikalni poravnaj\",\n    \"Top\": \"Vrh\",\n    \"Middle\": \"Srednji\",\n    \"Bottom\": \"Dno\",\n    \"Align Top\": \"Poravnaj vrh\",\n    \"Align Middle\": \"Poravnaj srednji\",\n    \"Align Bottom\": \"Poravnaj dno\",\n    \"Cell Style\": \"\\u0106elija stil\",\n\n    // Files\n    \"Upload File\": \"Upload datoteke\",\n    \"Drop file\": \"Drop datoteke\",\n\n    // Emoticons\n    \"Emoticons\": \"Emotikona\",\n    \"Grinning face\": \"Cere\\u0107i lice\",\n    \"Grinning face with smiling eyes\": \"Cere\\u0107i lice nasmijana o\\u010dima\",\n    \"Face with tears of joy\": \"Lice sa suze radosnice\",\n    \"Smiling face with open mouth\": \"Nasmijana lica s otvorenih usta\",\n    \"Smiling face with open mouth and smiling eyes\": \"Nasmijana lica s otvorenih usta i nasmijana o\\u010di\",\n    \"Smiling face with open mouth and cold sweat\": \"Nasmijana lica s otvorenih usta i hladan znoj\",\n    \"Smiling face with open mouth and tightly-closed eyes\": \"Nasmijana lica s otvorenih usta i \\u010dvrsto-zatvorenih o\\u010diju\",\n    \"Smiling face with halo\": \"Nasmijana lica sa halo\",\n    \"Smiling face with horns\": \"Nasmijana lica s rogovima\",\n    \"Winking face\": \"Namigivanje lice\",\n    \"Smiling face with smiling eyes\": \"Nasmijana lica sa nasmijana o\\u010dima\",\n    \"Face savoring delicious food\": \"Suo\\u010davaju u\\u017eivaju\\u0107i ukusna hrana\",\n    \"Relieved face\": \"Laknulo lice\",\n    \"Smiling face with heart-shaped eyes\": \"Nasmijana lica sa obliku srca o\\u010di\",\n    \"Smiling face with sunglasses\": \"Nasmijana lica sa sun\\u010dane nao\\u010dare\",\n    \"Smirking face\": \"Namr\\u0161tena lica\",\n    \"Neutral face\": \"Neutral lice\",\n    \"Expressionless face\": \"Bezizra\\u017eajno lice\",\n    \"Unamused face\": \"Nije zabavno lice\",\n    \"Face with cold sweat\": \"Lice s hladnim znojem\",\n    \"Pensive face\": \"Zami\\u0161ljen lice\",\n    \"Confused face\": \"Zbunjen lice\",\n    \"Confounded face\": \"Uzbu\\u0111en lice\",\n    \"Kissing face\": \"Ljubakanje lice\",\n    \"Face throwing a kiss\": \"Suo\\u010davaju bacanje poljubac\",\n    \"Kissing face with smiling eyes\": \"Ljubljenje lice nasmijana o\\u010dima\",\n    \"Kissing face with closed eyes\": \"Ljubljenje lice sa zatvorenim o\\u010dima\",\n    \"Face with stuck out tongue\": \"Lice sa ispru\\u017eio jezik\",\n    \"Face with stuck out tongue and winking eye\": \"Lice sa ispru\\u017eio jezik i trep\\u0107u\\u0107e \\u0107e oko\",\n    \"Face with stuck out tongue and tightly-closed eyes\": \"Lice sa ispru\\u017eio jezik i \\u010dvrsto zatvorene o\\u010di\",\n    \"Disappointed face\": \"Razo\\u010daran lice\",\n    \"Worried face\": \"Zabrinuti lice\",\n    \"Angry face\": \"Ljut lice\",\n    \"Pouting face\": \"Napu\\u0107enim lice\",\n    \"Crying face\": \"Plakanje lice\",\n    \"Persevering face\": \"Istrajan lice\",\n    \"Face with look of triumph\": \"Lice s pogledom trijumfa\",\n    \"Disappointed but relieved face\": \"Razo\\u010daran, ali olak\\u0161anje lice\",\n    \"Frowning face with open mouth\": \"Namr\\u0161tiv\\u0161i lice s otvorenih usta\",\n    \"Anguished face\": \"Bolnom lice\",\n    \"Fearful face\": \"Pla\\u0161ljiv lice\",\n    \"Weary face\": \"Umoran lice\",\n    \"Sleepy face\": \"Pospan lice\",\n    \"Tired face\": \"Umorno lice\",\n    \"Grimacing face\": \"Grimase lice\",\n    \"Loudly crying face\": \"Glasno pla\\u010de lice\",\n    \"Face with open mouth\": \"Lice s otvorenih usta\",\n    \"Hushed face\": \"Smiren lice\",\n    \"Face with open mouth and cold sweat\": \"Lice s otvorenih usta i hladan znoj\",\n    \"Face screaming in fear\": \"Suo\\u010davaju vri\\u0161ti u strahu\",\n    \"Astonished face\": \"Zapanjen lice\",\n    \"Flushed face\": \"Rumeno lice\",\n    \"Sleeping face\": \"Usnulo lice\",\n    \"Dizzy face\": \"O\\u0161amu\\u0107en lice\",\n    \"Face without mouth\": \"Lice bez usta\",\n    \"Face with medical mask\": \"Lice sa medicinskom maskom\",\n\n    // Line breaker\n    \"Break\": \"Slomiti\",\n\n    // Math\n    \"Subscript\": \"Potpisan\",\n    \"Superscript\": \"Natpis\",\n\n    // Full screen\n    \"Fullscreen\": \"Preko cijelog zaslona\",\n\n    // Horizontal line\n    \"Insert Horizontal Line\": \"Umetni vodoravna liniju\",\n\n    // Clear formatting\n    \"Clear Formatting\": \"Izbrisati formatiranje\",\n\n    // Save\n    \"Save\":\"Spremi\",\n\n    // Undo, redo\n    \"Undo\": \"Korak nazad\",\n    \"Redo\": \"Korak naprijed\",\n\n    // Select all\n    \"Select All\": \"Ozna\\u010di sve\",\n\n    // Code view\n    \"Code View\": \"Kod pogled\",\n\n    // Quote\n    \"Quote\": \"Citat\",\n    \"Increase\": \"Pove\\u0107ati\",\n    \"Decrease\": \"Smanjenje\",\n\n    // Quick Insert\n    \"Quick Insert\": \"Brzo umetak\",\n\n    // Spcial Characters\n    \"Special Characters\": \"Posebni znakovi\",\n    \"Latin\": \"Latin\",\n    \"Greek\": \"Greek\",\n    \"Cyrillic\": \"Ćirilično\",\n    \"Punctuation\": \"Interpunkcija\",\n    \"Currency\": \"Valuta\",\n    \"Arrows\": \"Strelice\",\n    \"Math\": \"Matematika\",\n    \"Misc\": \"Misc\",\n\n    // Print.\n    \"Print\": \"Print\",\n\n    // Spell Checker.\n    \"Spell Checker\": \"Proveru pravopisa\",\n\n    // Help\n    \"Help\": \"Pomoć\",\n    \"Shortcuts\": \"Prečice\",\n    \"Inline Editor\": \"Inline editor\",\n    \"Show the editor\": \"Pokaži urednika\",\n    \"Common actions\": \"Zajedničke akcije\",\n    \"Copy\": \"Kopiraj\",\n    \"Cut\": \"Cut\",\n    \"Paste\": \"Paste\",\n    \"Basic Formatting\": \"Osnovno oblikovanje\",\n    \"Increase quote level\": \"Povećati cijeni\",\n    \"Decrease quote level\": \"Smanjiti nivo ponude\",\n    \"Image / Video\": \"Slika / video\",\n    \"Resize larger\": \"Veće veličine\",\n    \"Resize smaller\": \"Manja promjena veličine\",\n    \"Table\": \"Stol\",\n    \"Select table cell\": \"Izaberite ćeliju tablice\",\n    \"Extend selection one cell\": \"Produžiti izbor jedne ćelije\",\n    \"Extend selection one row\": \"Produžiti izbor jedan red\",\n    \"Navigation\": \"Navigacija\",\n    \"Focus popup / toolbar\": \"Focus popup / toolbar\",\n    \"Return focus to previous position\": \"Vratite fokus na prethodnu poziciju\",\n\n    // Embed.ly\n    \"Embed URL\": \"Ugraditi url\",\n    \"Paste in a URL to embed\": \"Paste u URL adresu za ugradnju\",\n\n    // Word Paste.\n    \"The pasted content is coming from a Microsoft Word document. Do you want to keep the format or clean it up?\": \"Nalepeni sadržaj dolazi iz Microsoft Word dokumenta. da li želite da zadržite format ili da ga očistite?\",\n    \"Keep\": \"Zadržati\",\n    \"Clean\": \"Čist\",\n    \"Word Paste Detected\": \"Otkrivena je slovna reč\"\n  },\n  direction: \"ltr\"\n};\n\n}));\n"
  },
  {
    "path": "src/main/resources/static/plugins/froala-editor/js/languages/cs.js",
    "content": "/*!\n * froala_editor v2.9.1 (https://www.froala.com/wysiwyg-editor)\n * License https://froala.com/wysiwyg-editor/terms/\n * Copyright 2014-2018 Froala Labs\n */\n\n(function (factory) {\n    if (typeof define === 'function' && define.amd) {\n        // AMD. Register as an anonymous module.\n        define(['jquery'], factory);\n    } else if (typeof module === 'object' && module.exports) {\n        // Node/CommonJS\n        module.exports = function( root, jQuery ) {\n            if ( jQuery === undefined ) {\n                // require('jQuery') returns a factory that requires window to\n                // build a jQuery instance, we normalize how we use modules\n                // that require this pattern but the window provided is a noop\n                // if it's defined (how jquery works)\n                if ( typeof window !== 'undefined' ) {\n                    jQuery = require('jquery');\n                }\n                else {\n                    jQuery = require('jquery')(root);\n                }\n            }\n            return factory(jQuery);\n        };\n    } else {\n        // Browser globals\n        factory(window.jQuery);\n    }\n}(function ($) {\n/**\n * Czech\n */\n\n$.FE.LANGUAGE['cs'] = {\n  translation: {\n    // Place holder\n    \"Type something\": \"Napi\\u0161te n\\u011bco\",\n\n    // Basic formatting\n    \"Bold\": \"Tu\\u010dn\\u00e9\",\n    \"Italic\": \"Kurz\\u00edva\",\n    \"Underline\": \"Podtr\\u017een\\u00e9\",\n    \"Strikethrough\": \"P\\u0159e\\u0161krtnut\\u00e9\",\n\n    // Main buttons\n    \"Insert\": \"Vlo\\u017eit\",\n    \"Delete\": \"Vymazat\",\n    \"Cancel\": \"Zru\\u0161it\",\n    \"OK\": \"OK\",\n    \"Back\": \"Zp\\u011bt\",\n    \"Remove\": \"Odstranit\",\n    \"More\": \"V\\u00edce\",\n    \"Update\": \"Aktualizovat\",\n    \"Style\": \"Styl\",\n\n    // Font\n    \"Font Family\": \"Typ p\\u00edsma\",\n    \"Font Size\": \"Velikost p\\u00edsma\",\n\n    // Colors\n    \"Colors\": \"Barvy\",\n    \"Background\": \"Pozad\\u00ed\",\n    \"Text\": \"P\\u00edsmo\",\n    \"HEX Color\": \"Hex Barvy\",\n\n    // Paragraphs\n    \"Paragraph Format\": \"Form\\u00e1t odstavec\",\n    \"Normal\": \"Norm\\u00e1ln\\u00ed\",\n    \"Code\": \"K\\u00f3d\",\n    \"Heading 1\": \"Nadpis 1\",\n    \"Heading 2\": \"Nadpis 2\",\n    \"Heading 3\": \"Nadpis 3\",\n    \"Heading 4\": \"Nadpis 4\",\n\n    // Style\n    \"Paragraph Style\": \"Odstavec styl\",\n    \"Inline Style\": \"Inline styl\",\n\n    // Alignment\n    \"Align\": \"Zarovn\\u00e1n\\u00ed\",\n    \"Align Left\": \"Zarovnat vlevo\",\n    \"Align Center\": \"Zarovnat na st\\u0159ed\",\n    \"Align Right\": \"Zarovnat vpravo\",\n    \"Align Justify\": \"Zarovnat do bloku\",\n    \"None\": \"Nikdo\",\n\n    // Lists\n    \"Ordered List\": \"\\u010c\\u00edslovan\\u00fd seznam\",\n    \"Unordered List\": \"Ne\\u010d\\u00edslovan\\u00fd seznam\",\n\n    // Indent\n    \"Decrease Indent\": \"Zmen\\u0161it odsazen\\u00ed\",\n    \"Increase Indent\": \"Zv\\u011bt\\u0161it odsazen\\u00ed\",\n\n    // Links\n    \"Insert Link\": \"Vlo\\u017eit odkaz\",\n    \"Open in new tab\": \"Otev\\u0159\\u00edt v nov\\u00e9 z\\u00e1lo\\u017ece\",\n    \"Open Link\": \"Otev\\u0159\\u00edt odkaz\",\n    \"Edit Link\": \"Upravit odkaz\",\n    \"Unlink\": \"Odstranit odkaz\",\n    \"Choose Link\": \"Zvolte odkaz\",\n\n    // Images\n    \"Insert Image\": \"Vlo\\u017eit obr\\u00e1zek\",\n    \"Upload Image\": \"Nahr\\u00e1t obr\\u00e1zek\",\n    \"By URL\": \"Podle URL\",\n    \"Browse\": \"Proch\\u00e1zet\",\n    \"Drop image\": \"P\\u0159et\\u00e1hn\\u011bte sem obr\\u00e1zek\",\n    \"or click\": \"nebo zde klepn\\u011bte\",\n    \"Manage Images\": \"Spr\\u00e1va obr\\u00e1zk\\u016f\",\n    \"Loading\": \"Nakl\\u00e1d\\u00e1n\\u00ed\",\n    \"Deleting\": \"Odstran\\u011bn\\u00ed\",\n    \"Tags\": \"Zna\\u010dky\",\n    \"Are you sure? Image will be deleted.\": \"Ur\\u010dit\\u011b? Obr\\u00e1zek bude smaz\\u00e1n.\",\n    \"Replace\": \"Nahradit\",\n    \"Uploading\": \"Nahr\\u00e1v\\u00e1n\\u00ed\",\n    \"Loading image\": \"Obr\\u00e1zek se na\\u010d\\u00edt\\u00e1\",\n    \"Display\": \"Zobrazit\",\n    \"Inline\": \"Inline\",\n    \"Break Text\": \"P\\u0159est\\u00e1vka textu\",\n    \"Alternative Text\": \"Alternativn\\u00ed textu\",\n    \"Change Size\": \"Zm\\u011bnit velikost\",\n    \"Width\": \"\\u0160\\u00ed\\u0159ka\",\n    \"Height\": \"V\\u00fd\\u0161ka\",\n    \"Something went wrong. Please try again.\": \"N\\u011bco se pokazilo. Pros\\u00edm zkuste to znovu.\",\n    \"Image Caption\": \"Obrázek titulku\",\n    \"Advanced Edit\": \"Pokročilá úprava\",\n\n    // Video\n    \"Insert Video\": \"Vlo\\u017eit video\",\n    \"Embedded Code\": \"Vlo\\u017een\\u00fd k\\u00f3d\",\n    \"Paste in a video URL\": \"Vložit adresu URL videa\",\n    \"Drop video\": \"Drop video\",\n    \"Your browser does not support HTML5 video.\": \"Váš prohlížeč nepodporuje video html5.\",\n    \"Upload Video\": \"Nahrát video\",\n\n    // Tables\n    \"Insert Table\": \"Vlo\\u017eit tabulku\",\n    \"Table Header\": \"Hlavi\\u010dka tabulky\",\n    \"Remove Table\": \"Odstranit tabulku\",\n    \"Table Style\": \"Styl tabulky\",\n    \"Horizontal Align\": \"Horizont\\u00e1ln\\u00ed zarovn\\u00e1n\\u00ed\",\n    \"Row\": \"\\u0158\\u00e1dek\",\n    \"Insert row above\": \"Vlo\\u017eit \\u0159\\u00e1dek nad\",\n    \"Insert row below\": \"Vlo\\u017eit \\u0159\\u00e1dek pod\",\n    \"Delete row\": \"Smazat \\u0159\\u00e1dek\",\n    \"Column\": \"Sloupec\",\n    \"Insert column before\": \"Vlo\\u017eit sloupec vlevo\",\n    \"Insert column after\": \"Vlo\\u017eit sloupec vpravo\",\n    \"Delete column\": \"Smazat sloupec\",\n    \"Cell\": \"Bu\\u0148ka\",\n    \"Merge cells\": \"Slou\\u010dit bu\\u0148ky\",\n    \"Horizontal split\": \"Horizont\\u00e1ln\\u00ed rozd\\u011blen\\u00ed\",\n    \"Vertical split\": \"Vertik\\u00e1ln\\u00ed rozd\\u011blen\\u00ed\",\n    \"Cell Background\": \"Bu\\u0148ka pozad\\u00ed\",\n    \"Vertical Align\": \"Vertik\\u00e1ln\\u00ed zarovn\\u00e1n\\u00ed\",\n    \"Top\": \"Vrchol\",\n    \"Middle\": \"St\\u0159ed\",\n    \"Bottom\": \"Spodn\\u00ed\",\n    \"Align Top\": \"Zarovnat vrchol\",\n    \"Align Middle\": \"Zarovnat st\\u0159ed\",\n    \"Align Bottom\": \"Zarovnat spodn\\u00ed\",\n    \"Cell Style\": \"Styl bu\\u0148ky\",\n\n    // Files\n    \"Upload File\": \"Nahr\\u00e1t soubor\",\n    \"Drop file\": \"P\\u0159et\\u00e1hn\\u011bte sem soubor\",\n\n    // Emoticons\n    \"Emoticons\": \"Emotikony\",\n    \"Grinning face\": \"S \\u00fasm\\u011bvem tv\\u00e1\\u0159\",\n    \"Grinning face with smiling eyes\": \"S \\u00fasm\\u011bvem obli\\u010dej s o\\u010dima s \\u00fasm\\u011bvem\",\n    \"Face with tears of joy\": \"tv\\u00e1\\u0159 se slzami radosti\",\n    \"Smiling face with open mouth\": \"Usm\\u00edvaj\\u00edc\\u00ed se obli\\u010dej s otev\\u0159en\\u00fdmi \\u00fasty\",\n    \"Smiling face with open mouth and smiling eyes\": \"Usm\\u00edvaj\\u00edc\\u00ed se obli\\u010dej s otev\\u0159en\\u00fdmi \\u00fasty a o\\u010dima s \\u00fasm\\u011bvem\",\n    \"Smiling face with open mouth and cold sweat\": \"Usm\\u00edvaj\\u00edc\\u00ed se tv\\u00e1\\u0159 s otev\\u0159en\\u00fdmi \\u00fasty a studen\\u00fd pot\",\n    \"Smiling face with open mouth and tightly-closed eyes\": \"Usm\\u00edvaj\\u00edc\\u00ed se tv\\u00e1\\u0159 s otev\\u0159en\\u00fdmi \\u00fasty a t\\u011bsn\\u011b zav\\u0159en\\u00e9 o\\u010di\",\n    \"Smiling face with halo\": \"Usm\\u00edvaj\\u00edc\\u00ed se obli\\u010dej s halo\",\n    \"Smiling face with horns\": \"Usm\\u00edvaj\\u00edc\\u00ed se obli\\u010dej s  rohy\",\n    \"Winking face\": \"Mrk\\u00e1n\\u00ed tv\\u00e1\\u0159\",\n    \"Smiling face with smiling eyes\": \"Usm\\u00edvaj\\u00edc\\u00ed se obli\\u010dej s  o\\u010dima s \\u00fasm\\u011bvem\",\n    \"Face savoring delicious food\": \"Tv\\u00e1\\u0159 vychutn\\u00e1val chutn\\u00e9 j\\u00eddlo\",\n    \"Relieved face\": \"Ulevilo tv\\u00e1\\u0159\",\n    \"Smiling face with heart-shaped eyes\": \"Usm\\u00edvaj\\u00edc\\u00ed se tv\\u00e1\\u0159 ve tvaru srdce o\\u010dima\",\n    \"Smiling face with sunglasses\": \"Usm\\u00edvaj\\u00edc\\u00ed se tv\\u00e1\\u0159 se slune\\u010dn\\u00edmi br\\u00fdlemi\",\n    \"Smirking face\": \"Uculoval tv\\u00e1\\u0159\",\n    \"Neutral face\": \"Neutr\\u00e1ln\\u00ed tv\\u00e1\\u0159\",\n    \"Expressionless face\": \"Bezv\\u00fdrazn\\u00fd obli\\u010dej\",\n    \"Unamused face\": \"Ne pobaven\\u00fd tv\\u00e1\\u0159\",\n    \"Face with cold sweat\": \"Tv\\u00e1\\u0159 se studen\\u00fdm potem\",\n    \"Pensive face\": \"Zamy\\u0161len\\u00fd obli\\u010dej\",\n    \"Confused face\": \"Zmaten\\u00fd tv\\u00e1\\u0159\",\n    \"Confounded face\": \"Na\\u0161tvan\\u00fd tv\\u00e1\\u0159\",\n    \"Kissing face\": \"L\\u00edb\\u00e1n\\u00ed tv\\u00e1\\u0159\",\n    \"Face throwing a kiss\": \"Tv\\u00e1\\u0159 h\\u00e1zet polibek\",\n    \"Kissing face with smiling eyes\": \"L\\u00edb\\u00e1n\\u00ed obli\\u010dej s o\\u010dima s \\u00fasm\\u011bvem\",\n    \"Kissing face with closed eyes\": \"L\\u00edb\\u00e1n\\u00ed tv\\u00e1\\u0159 se zav\\u0159en\\u00fdma o\\u010dima\",\n    \"Face with stuck out tongue\": \"Tv\\u00e1\\u0159 s tr\\u010dely jazyk\",\n    \"Face with stuck out tongue and winking eye\": \"Tv\\u00e1\\u0159 s tr\\u010dely jazykem a mrkat o\\u010dima\",\n    \"Face with stuck out tongue and tightly-closed eyes\": \"Suo\\u010diti s tr\\u010dely jazykem t\\u011bsn\\u011b zav\\u0159en\\u00e9 vidikovce\",\n    \"Disappointed face\": \"Zklaman\\u00fd tv\\u00e1\\u0159\",\n    \"Worried face\": \"Boj\\u00ed\\u0161 se tv\\u00e1\\u0159\",\n    \"Angry face\": \"Rozzloben\\u00fd tv\\u00e1\\u0159\",\n    \"Pouting face\": \"Na\\u0161pulen\\u00e9 tv\\u00e1\\u0159\",\n    \"Crying face\": \"Pl\\u00e1\\u010d tv\\u00e1\\u0159\",\n    \"Persevering face\": \"Vytrval\\u00fdm tv\\u00e1\\u0159\",\n    \"Face with look of triumph\": \"Tv\\u00e1\\u0159 s v\\u00fdrazem triumfu\",\n    \"Disappointed but relieved face\": \"Zklaman\\u00fd ale ulevilo tv\\u00e1\\u0159\",\n    \"Frowning face with open mouth\": \"Zamra\\u010dil se obli\\u010dej s otev\\u0159en\\u00fdmi \\u00fasty\",\n    \"Anguished face\": \"\\u00fazkostn\\u00e9 tv\\u00e1\\u0159\",\n    \"Fearful face\": \"Stra\\u0161n\\u00fd tv\\u00e1\\u0159\",\n    \"Weary face\": \"Unaven\\u00fd tv\\u00e1\\u0159\",\n    \"Sleepy face\": \"Ospal\\u00fd tv\\u00e1\\u0159\",\n    \"Tired face\": \"Unaven\\u00fd tv\\u00e1\\u0159\",\n    \"Grimacing face\": \"\\u0161klebil tv\\u00e1\\u0159\",\n    \"Loudly crying face\": \"Hlasit\\u011b pl\\u00e1\\u010de tv\\u00e1\\u0159\",\n    \"Face with open mouth\": \"Obli\\u010dej s otev\\u0159en\\u00fdmi \\u00fasty\",\n    \"Hushed face\": \"Tlumen\\u00fd tv\\u00e1\\u0159\",\n    \"Face with open mouth and cold sweat\": \"Obli\\u010dej s otev\\u0159en\\u00fdmi \\u00fasty a studen\\u00fd pot\",\n    \"Face screaming in fear\": \"Tv\\u00e1\\u0159 k\\u0159i\\u010d\\u00ed ve strachu\",\n    \"Astonished face\": \"V \\u00fa\\u017easu tv\\u00e1\\u0159\",\n    \"Flushed face\": \"Zarudnut\\u00ed v obli\\u010deji\",\n    \"Sleeping face\": \"Sp\\u00edc\\u00ed tv\\u00e1\\u0159\",\n    \"Dizzy face\": \"Z\\u00e1vrat\\u011b tv\\u00e1\\u0159\",\n    \"Face without mouth\": \"Tv\\u00e1\\u0159 bez \\u00fast\",\n    \"Face with medical mask\": \"Tv\\u00e1\\u0159 s l\\u00e9ka\\u0159sk\\u00fdm maskou\",\n\n    // Line breaker\n    \"Break\": \"P\\u0159eru\\u0161en\\u00ed\",\n\n    // Math\n    \"Subscript\": \"Doln\\u00ed index\",\n    \"Superscript\": \"Horn\\u00ed index\",\n\n    // Full screen\n    \"Fullscreen\": \"Cel\\u00e1 obrazovka\",\n\n    // Horizontal line\n    \"Insert Horizontal Line\": \"Vlo\\u017eit vodorovnou \\u010d\\u00e1ru\",\n\n    // Clear formatting\n    \"Clear Formatting\": \"Vymazat form\\u00e1tov\\u00e1n\\u00ed\",\n\n    // Save\n    \"Save\": \"\\u0055\\u006c\\u006f\\u017e\\u0069\\u0074\",\n\n    // Undo, redo\n    \"Undo\": \"Zp\\u011bt\",\n    \"Redo\": \"Znovu\",\n\n    // Select all\n    \"Select All\": \"Vybrat v\\u0161e\",\n\n    // Code view\n    \"Code View\": \"Zobrazen\\u00ed k\\u00f3d\",\n\n    // Quote\n    \"Quote\": \"Cit\\u00e1t\",\n    \"Increase\": \"Nav\\u00fd\\u0161it\",\n    \"Decrease\": \"Sn\\u00ed\\u017een\\u00ed\",\n\n    // Quick Insert\n    \"Quick Insert\": \"Rychl\\u00e1 vlo\\u017eka\",\n\n    // Spcial Characters\n    \"Special Characters\": \"Speciální znaky\",\n    \"Latin\": \"Latinský\",\n    \"Greek\": \"Řecký\",\n    \"Cyrillic\": \"Cyrilice\",\n    \"Punctuation\": \"Interpunkce\",\n    \"Currency\": \"Měna\",\n    \"Arrows\": \"Šipky\",\n    \"Math\": \"Matematika\",\n    \"Misc\": \"Misc\",\n\n    // Print.\n    \"Print\": \"Tisk\",\n\n    // Spell Checker.\n    \"Spell Checker\": \"Kontrola pravopisu\",\n\n    // Help\n    \"Help\": \"Pomoc\",\n    \"Shortcuts\": \"Zkratky\",\n    \"Inline Editor\": \"Inline editor\",\n    \"Show the editor\": \"Zobrazit editor\",\n    \"Common actions\": \"Společné akce\",\n    \"Copy\": \"Kopírovat\",\n    \"Cut\": \"Střih\",\n    \"Paste\": \"Vložit\",\n    \"Basic Formatting\": \"Základní formátování\",\n    \"Increase quote level\": \"Zvýšení cenové hladiny\",\n    \"Decrease quote level\": \"Snížit úroveň cenové nabídky\",\n    \"Image / Video\": \"Obraz / video\",\n    \"Resize larger\": \"Změna velikosti větší\",\n    \"Resize smaller\": \"Změnit velikost menší\",\n    \"Table\": \"Stůl\",\n    \"Select table cell\": \"Vyberte buňku tabulky\",\n    \"Extend selection one cell\": \"Rozšířit výběr o jednu buňku\",\n    \"Extend selection one row\": \"Rozšířit výběr o jeden řádek\",\n    \"Navigation\": \"Navigace\",\n    \"Focus popup / toolbar\": \"Popup / panel nástrojů zaostření\",\n    \"Return focus to previous position\": \"Návrat na předchozí pozici\",\n\n    // Embed.ly\n    \"Embed URL\": \"Vložte url\",\n    \"Paste in a URL to embed\": \"Vložit adresu URL, kterou chcete vložit\",\n\n    // Word Paste.\n    \"The pasted content is coming from a Microsoft Word document. Do you want to keep the format or clean it up?\": \"Vložený obsah pochází z dokumentu Microsoft Word. chcete formát uchovat nebo jej vyčistit?\",\n    \"Keep\": \"Držet\",\n    \"Clean\": \"Čistý\",\n    \"Word Paste Detected\": \"Slovní vložka zjištěna\"\n  },\n  direction: \"ltr\"\n};\n\n}));\n"
  },
  {
    "path": "src/main/resources/static/plugins/froala-editor/js/languages/da.js",
    "content": "/*!\n * froala_editor v2.9.1 (https://www.froala.com/wysiwyg-editor)\n * License https://froala.com/wysiwyg-editor/terms/\n * Copyright 2014-2018 Froala Labs\n */\n\n(function (factory) {\n    if (typeof define === 'function' && define.amd) {\n        // AMD. Register as an anonymous module.\n        define(['jquery'], factory);\n    } else if (typeof module === 'object' && module.exports) {\n        // Node/CommonJS\n        module.exports = function( root, jQuery ) {\n            if ( jQuery === undefined ) {\n                // require('jQuery') returns a factory that requires window to\n                // build a jQuery instance, we normalize how we use modules\n                // that require this pattern but the window provided is a noop\n                // if it's defined (how jquery works)\n                if ( typeof window !== 'undefined' ) {\n                    jQuery = require('jquery');\n                }\n                else {\n                    jQuery = require('jquery')(root);\n                }\n            }\n            return factory(jQuery);\n        };\n    } else {\n        // Browser globals\n        factory(window.jQuery);\n    }\n}(function ($) {\n/**\n * Danish\n */\n\n$.FE.LANGUAGE['da'] = {\n  translation: {\n    // Place holder\n    \"Type something\": \"Skriv her\",\n\n    // Basic formatting\n    \"Bold\": \"Fed\",\n    \"Italic\": \"Kursiv\",\n    \"Underline\": \"Understreget\",\n    \"Strikethrough\": \"Gennemstreget\",\n\n    // Main buttons\n    \"Insert\": \"Indsæt\",\n    \"Delete\": \"Slet\",\n    \"Cancel\": \"Fortryd\",\n    \"OK\": \"Ok\",\n    \"Back\": \"Tilbage\",\n    \"Remove\": \"Fjern\",\n    \"More\": \"Mere\",\n    \"Update\": \"Opdater\",\n    \"Style\": \"Udseende\",\n\n    // Font\n    \"Font Family\": \"Skrifttype\",\n    \"Font Size\": \"Skriftstørrelse\",\n\n    // Colors\n    \"Colors\": \"Farver\",\n    \"Background\": \"Baggrund\",\n    \"Text\": \"Tekst\",\n    \"HEX Color\": \"Hex farve\",\n\n    // Paragraphs\n    \"Paragraph Format\": \"Typografi\",\n    \"Normal\": \"Normal\",\n    \"Code\": \"Kode\",\n    \"Heading 1\": \"Overskrift 1\",\n    \"Heading 2\": \"Overskrift 2\",\n    \"Heading 3\": \"Overskrift 3\",\n    \"Heading 4\": \"Overskrift 4\",\n\n    // Style\n    \"Paragraph Style\": \"Afsnit\",\n    \"Inline Style\": \"På linje\",\n\n    // Alignment\n    \"Align\": \"Tilpasning\",\n    \"Align Left\": \"Venstrejusteret\",\n    \"Align Center\": \"Centreret\",\n    \"Align Right\": \"Højrejusteret\",\n    \"Align Justify\": \"Justeret\",\n    \"None\": \"Ingen\",\n\n    // Lists\n    \"Ordered List\": \"Punktopstilling\",\n    \"Unordered List\": \"Punktopstilling med tal\",\n\n    // Indent\n    \"Decrease Indent\": \"Formindsk indrykning\",\n    \"Increase Indent\": \"Forøg indrykning\",\n\n    // Links\n    \"Insert Link\": \"Indsæt link\",\n    \"Open in new tab\": \"Åbn i ny fane\",\n    \"Open Link\": \"Åbn link\",\n    \"Edit Link\": \"Rediger link\",\n    \"Unlink\": \"Fjern link\",\n    \"Choose Link\": \"Vælg link\",\n\n    // Images\n    \"Insert Image\": \"Indsæt billede\",\n    \"Upload Image\": \"Upload billede\",\n    \"By URL\": \"Fra URL\",\n    \"Browse\": \"Gennemse\",\n    \"Drop image\": \"Træk billedet herind\",\n    \"or click\": \"eller klik\",\n    \"Manage Images\": \"Administrer billeder\",\n    \"Loading\": \"Henter\",\n    \"Deleting\": \"Sletter\",\n    \"Tags\": \"Tags\",\n    \"Are you sure? Image will be deleted.\": \"Er du sikker? Billedet vil blive slettet.\",\n    \"Replace\": \"Udskift\",\n    \"Uploading\": \"Uploader\",\n    \"Loading image\": \"Henter billede\",\n    \"Display\": \"Layout\",\n    \"Inline\": \"På linje\",\n    \"Break Text\": \"Ombryd tekst\",\n    \"Alternative Text\": \"Supplerende tekst\",\n    \"Change Size\": \"Tilpas størrelse\",\n    \"Width\": \"Bredde\",\n    \"Height\": \"Højde\",\n    \"Something went wrong. Please try again.\": \"Noget gik galt. Prøv igen.\",\n    \"Image Caption\": \"Billedtekst\",\n    \"Advanced Edit\": \"Avanceret redigering\",\n\n    // Video\n    \"Insert Video\": \"Indsæt video\",\n    \"Embedded Code\": \"Indlejret kode\",\n    \"Paste in a video URL\": \"Indsæt en video via URL\",\n    \"Drop video\": \"Træk videoen herind\",\n    \"Your browser does not support HTML5 video.\": \"Din browser understøtter ikke HTML5 video.\",\n    \"Upload Video\": \"Upload video\",\n\n    // Tables\n    \"Insert Table\": \"Indsæt tabel\",\n    \"Table Header\": \"Tabeloverskrift\",\n    \"Remove Table\": \"Fjern tabel\",\n    \"Table Style\": \"Tabeludseende\",\n    \"Horizontal Align\": \"Vandret tilpasning\",\n    \"Row\": \"Række\",\n    \"Insert row above\": \"Indsæt række over\",\n    \"Insert row below\": \"Indsæt række under\",\n    \"Delete row\": \"Slet række\",\n    \"Column\": \"Kolonne\",\n    \"Insert column before\": \"Indsæt kolonne før\",\n    \"Insert column after\": \"Indsæt kolonne efter\",\n    \"Delete column\": \"Slet kolonne\",\n    \"Cell\": \"Celle\",\n    \"Merge cells\": \"Flet celler\",\n    \"Horizontal split\": \"Vandret split\",\n    \"Vertical split\": \"Lodret split\",\n    \"Cell Background\": \"Cellebaggrund\",\n    \"Vertical Align\": \"Lodret tilpasning\",\n    \"Top\": \"Top\",\n    \"Middle\": \"Midte\",\n    \"Bottom\": \"Bund\",\n    \"Align Top\": \"Tilpas i top\",\n    \"Align Middle\": \"Tilpas i midte\",\n    \"Align Bottom\": \"Tilpas i bund\",\n    \"Cell Style\": \"Celleudseende\",\n\n    // Files\n    \"Upload File\": \"Upload fil\",\n    \"Drop file\": \"Træk filen herind\",\n\n    // Emoticons\n    \"Emoticons\": \"Humørikoner\",\n    \"Grinning face\": \"Grinende ansigt\",\n    \"Grinning face with smiling eyes\": \"Grinende ansigt med smilende øjne\",\n    \"Face with tears of joy\": \"Ansigt med glædestårer\",\n    \"Smiling face with open mouth\": \"Smilende ansigt med åben mund\",\n    \"Smiling face with open mouth and smiling eyes\": \"Smilende ansigt med åben mund og smilende øjne\",\n    \"Smiling face with open mouth and cold sweat\": \"Smilende ansigt med åben mund og koldsved\",\n    \"Smiling face with open mouth and tightly-closed eyes\": \"Smilende ansigt med åben mund og stramtlukkede øjne\",\n    \"Smiling face with halo\": \"Smilende ansigt med glorie\",\n    \"Smiling face with horns\": \"Smilende ansigt med horn\",\n    \"Winking face\": \"Blinkede ansigt\",\n    \"Smiling face with smiling eyes\": \"Smilende ansigt med smilende øjne\",\n    \"Face savoring delicious food\": \"Ansigt der savler over lækker mad\",\n    \"Relieved face\": \"Lettet ansigt\",\n    \"Smiling face with heart-shaped eyes\": \"Smilende ansigt med hjerteformede øjne\",\n    \"Smiling face with sunglasses\": \"Smilende ansigt med solbriller\",\n    \"Smirking face\": \"Smilende ansigt\",\n    \"Neutral face\": \"Neutralt ansigt\",\n    \"Expressionless face\": \"Udtryksløst ansigt\",\n    \"Unamused face\": \"Utilfredst ansigt\",\n    \"Face with cold sweat\": \"Ansigt med koldsved\",\n    \"Pensive face\": \"Eftertænksomt ansigt\",\n    \"Confused face\": \"Forvirret ansigt\",\n    \"Confounded face\": \"Irriteret ansigt\",\n    \"Kissing face\": \"Kyssende ansigt\",\n    \"Face throwing a kiss\": \"Ansigt der luftkysser\",\n    \"Kissing face with smiling eyes\": \"Kyssende ansigt med smilende øjne\",\n    \"Kissing face with closed eyes\": \"Kyssende ansigt med lukkede øjne\",\n    \"Face with stuck out tongue\": \"Ansigt med tungen ud af munden\",\n    \"Face with stuck out tongue and winking eye\": \"Ansigt med tungen ud af munden og blinkede øje\",\n    \"Face with stuck out tongue and tightly-closed eyes\": \"Ansigt med tungen ud af munden og stramt lukkede øjne\",\n    \"Disappointed face\": \"Skuffet ansigt\",\n    \"Worried face\": \"Bekymret ansigt\",\n    \"Angry face\": \"Vredt ansigt\",\n    \"Pouting face\": \"Surmulende ansigt\",\n    \"Crying face\": \"Grædende ansigt\",\n    \"Persevering face\": \"Vedholdende ansigt\",\n    \"Face with look of triumph\": \"Hoverende ansigt\",\n    \"Disappointed but relieved face\": \"Skuffet, men lettet ansigt\",\n    \"Frowning face with open mouth\": \"Ansigt med åben mund og rynket pande\",\n    \"Anguished face\": \"Forpintt ansigt\",\n    \"Fearful face\": \"Angst ansigt\",\n    \"Weary face\": \"Udmattet ansigt\",\n    \"Sleepy face\": \"Søvnigt ansigt\",\n    \"Tired face\": \"Træt ansigt\",\n    \"Grimacing face\": \"Ansigt der laver en grimasse\",\n    \"Loudly crying face\": \"Vrælende ansigt\",\n    \"Face with open mouth\": \"Ansigt med åben mund\",\n    \"Hushed face\": \"Tyst ansigt\",\n    \"Face with open mouth and cold sweat\": \"Ansigt med åben mund og koldsved\",\n    \"Face screaming in fear\": \"Ansigt der skriger i frygt\",\n    \"Astonished face\": \"Forbløffet ansigt\",\n    \"Flushed face\": \"Blussende ansigt\",\n    \"Sleeping face\": \"Sovende ansigt\",\n    \"Dizzy face\": \"Svimmelt ansigt\",\n    \"Face without mouth\": \"Ansigt uden mund\",\n    \"Face with medical mask\": \"Ansigt med mundbind\",\n\n    // Line breaker\n    \"Break\": \"Linjeskift\",\n\n    // Math\n    \"Subscript\": \"Sænket skrift\",\n    \"Superscript\": \"Hævet skrift\",\n\n    // Full screen\n    \"Fullscreen\": \"Fuldskærm\",\n\n    // Horizontal line\n    \"Insert Horizontal Line\": \"Indsæt vandret linie\",\n\n    // Clear formatting\n    \"Clear Formatting\": \"Fjern formatering\",\n\n    // Undo, redo\n    \"Undo\": \"Fortryd\",\n    \"Redo\": \"Annuller fortryd\",\n\n    // Select all\n    \"Select All\": \"Vælg alt\",\n\n    // Code view\n    \"Code View\": \"Kodevisning\",\n\n    // Quote\n    \"Quote\": \"Citat\",\n    \"Increase\": \"Forøg\",\n    \"Decrease\": \"Formindsk\",\n\n    // Quick Insert\n    \"Quick Insert\": \"Kvik-indsæt\",\n\n    // Spcial Characters\n    \"Special Characters\": \"Specialtegn\",\n    \"Latin\": \"Latin\",\n    \"Greek\": \"Græsk\",\n    \"Cyrillic\": \"Kyrillisk\",\n    \"Punctuation\": \"Tegnsætning\",\n    \"Currency\": \"Valuta\",\n    \"Arrows\": \"Pile\",\n    \"Math\": \"Matematik\",\n    \"Misc\": \"Diverse\",\n\n    // Print.\n    \"Print\": \"Print\",\n\n    // Spell Checker.\n    \"Spell Checker\": \"Stavekontrol\",\n\n    // Help\n    \"Help\": \"Hjælp\",\n    \"Shortcuts\": \"Genveje\",\n    \"Inline Editor\": \"Indlejret editor\",\n    \"Show the editor\": \"Vis editor\",\n    \"Common actions\": \"Almindelige handlinger\",\n    \"Copy\": \"Kopier\",\n    \"Cut\": \"Klip\",\n    \"Paste\": \"Sæt ind\",\n    \"Basic Formatting\": \"Grundlæggende formatering\",\n    \"Increase quote level\": \"Hæv citatniveau\",\n    \"Decrease quote level\": \"Sænk citatniveau\",\n    \"Image / Video\": \"Billede / video\",\n    \"Resize larger\": \"Ændre til større\",\n    \"Resize smaller\": \"Ændre til mindre\",\n    \"Table\": \"Tabel\",\n    \"Select table cell\": \"Vælg tabelcelle\",\n    \"Extend selection one cell\": \"Udvid markeringen med én celle\",\n    \"Extend selection one row\": \"Udvid markeringen med én række\",\n    \"Navigation\": \"Navigation\",\n    \"Focus popup / toolbar\": \"Fokuser popup / værktøjslinje\",\n    \"Return focus to previous position\": \"Skift fokus tilbage til tidligere position\",\n\n    // Embed.ly\n    \"Embed URL\": \"Integrer URL\",\n    \"Paste in a URL to embed\": \"Indsæt en URL for at indlejre\",\n\n    // Word Paste.\n    \"The pasted content is coming from a Microsoft Word document. Do you want to keep the format or clean it up?\": \"Det indsatte indhold kommer fra et Microsoft Word-dokument. Vil du beholde formateringen eller fjerne den?\",\n    \"Keep\": \"Behold\",\n    \"Clean\": \"Fjern\",\n    \"Word Paste Detected\": \"Indsættelse fra Word opdaget\"\n  },\n  direction: \"ltr\"\n};\n\n}));\n"
  },
  {
    "path": "src/main/resources/static/plugins/froala-editor/js/languages/de.js",
    "content": "/*!\n * froala_editor v2.9.1 (https://www.froala.com/wysiwyg-editor)\n * License https://froala.com/wysiwyg-editor/terms/\n * Copyright 2014-2018 Froala Labs\n */\n\n(function (factory) {\n    if (typeof define === 'function' && define.amd) {\n        // AMD. Register as an anonymous module.\n        define(['jquery'], factory);\n    } else if (typeof module === 'object' && module.exports) {\n        // Node/CommonJS\n        module.exports = function( root, jQuery ) {\n            if ( jQuery === undefined ) {\n                // require('jQuery') returns a factory that requires window to\n                // build a jQuery instance, we normalize how we use modules\n                // that require this pattern but the window provided is a noop\n                // if it's defined (how jquery works)\n                if ( typeof window !== 'undefined' ) {\n                    jQuery = require('jquery');\n                }\n                else {\n                    jQuery = require('jquery')(root);\n                }\n            }\n            return factory(jQuery);\n        };\n    } else {\n        // Browser globals\n        factory(window.jQuery);\n    }\n}(function ($) {\n/**\n * German\n */\n\n$.FE.LANGUAGE['de'] = {\n  translation: {\n    // Place holder\n    \"Type something\": \"Hier tippen\",\n\n    // Basic formatting\n    \"Bold\": \"Fett\",\n    \"Italic\": \"Kursiv\",\n    \"Underline\": \"Unterstrichen\",\n    \"Strikethrough\": \"Durchgestrichen\",\n\n    // Main buttons\n    \"Insert\": \"Einfügen\",\n    \"Delete\": \"Löschen\",\n    \"Cancel\": \"Abbrechen\",\n    \"OK\": \"OK\",\n    \"Back\": \"Zurück\",\n    \"Remove\": \"Entfernen\",\n    \"More\": \"Mehr\",\n    \"Update\": \"Aktualisieren\",\n    \"Style\": \"Stil\",\n\n    // Font\n    \"Font Family\": \"Schriftart\",\n    \"Font Size\": \"Schriftgröße\",\n\n    // Colors\n    \"Colors\": \"Farben\",\n    \"Background\": \"Hintergrund\",\n    \"Text\": \"Text\",\n    \"HEX Color\": \"Hexadezimaler Farbwert\",\n\n    // Paragraphs\n    \"Paragraph Format\": \"Formatierung\",\n    \"Normal\": \"Normal\",\n    \"Code\": \"Quelltext\",\n    \"Heading 1\": \"Überschrift 1\",\n    \"Heading 2\": \"Überschrift 2\",\n    \"Heading 3\": \"Überschrift 3\",\n    \"Heading 4\": \"Überschrift 4\",\n\n    // Style\n    \"Paragraph Style\": \"Absatzformatierung\",\n    \"Inline Style\": \"Inlineformatierung\",\n\n    // Alignment\n    \"Align\": \"Ausrichtung\",\n    \"Align Left\": \"Linksbündig ausrichten\",\n    \"Align Center\": \"Zentriert ausrichten\",\n    \"Align Right\": \"Rechtsbündig ausrichten\",\n    \"Align Justify\": \"Blocksatz\",\n    \"None\": \"Keine\",\n\n    // Lists\n    \"Ordered List\": \"Nummerierte Liste\",\n    \"Unordered List\": \"Unnummerierte Liste\",\n\n    // Indent\n    \"Decrease Indent\": \"Einzug verkleinern\",\n    \"Increase Indent\": \"Einzug vergrößern\",\n\n    // Links\n    \"Insert Link\": \"Link einfügen\",\n    \"Open in new tab\": \"In neuem Tab öffnen\",\n    \"Open Link\": \"Link öffnen\",\n    \"Edit Link\": \"Link bearbeiten\",\n    \"Unlink\": \"Link entfernen\",\n    \"Choose Link\": \"Einen Link auswählen\",\n\n    // Images\n    \"Insert Image\": \"Bild einfügen\",\n    \"Upload Image\": \"Bild hochladen\",\n    \"By URL\": \"Von URL\",\n    \"Browse\": \"Durchsuchen\",\n    \"Drop image\": \"Bild hineinziehen\",\n    \"or click\": \"oder hier klicken\",\n    \"Manage Images\": \"Bilder verwalten\",\n    \"Loading\": \"Laden\",\n    \"Deleting\": \"Löschen\",\n    \"Tags\": \"Tags\",\n    \"Are you sure? Image will be deleted.\": \"Wollen Sie das Bild wirklich löschen?\",\n    \"Replace\": \"Ersetzen\",\n    \"Uploading\": \"Hochladen\",\n    \"Loading image\": \"Das Bild wird geladen\",\n    \"Display\": \"Textausrichtung\",\n    \"Inline\": \"Mit Text in einer Zeile\",\n    \"Break Text\": \"Text umbrechen\",\n    \"Alternative Text\": \"Alternativtext\",\n    \"Change Size\": \"Größe ändern\",\n    \"Width\": \"Breite\",\n    \"Height\": \"Höhe\",\n    \"Something went wrong. Please try again.\": \"Etwas ist schief gelaufen. Bitte versuchen Sie es erneut.\",\n    \"Image Caption\": \"Bildbeschreibung\",\n    \"Advanced Edit\": \"Erweiterte Bearbeitung\",\n\n    // Video\n    \"Insert Video\": \"Video einfügen\",\n    \"Embedded Code\": \"Eingebetteter Code\",\n    \"Paste in a video URL\": \"Fügen Sie die Video-URL ein\",\n    \"Drop video\": \"Video hineinziehen\",\n    \"Your browser does not support HTML5 video.\": \"Ihr Browser unterstützt keine HTML5-Videos.\",\n    \"Upload Video\": \"Video hochladen\",\n\n    // Tables\n    \"Insert Table\": \"Tabelle einfügen\",\n    \"Table Header\": \"Tabellenkopf\",\n    \"Remove Table\": \"Tabelle entfernen\",\n    \"Table Style\": \"Tabellenformatierung\",\n    \"Horizontal Align\": \"Horizontale Ausrichtung\",\n    \"Row\": \"Zeile\",\n    \"Insert row above\": \"Neue Zeile davor einfügen\",\n    \"Insert row below\": \"Neue Zeile danach einfügen\",\n    \"Delete row\": \"Zeile löschen\",\n    \"Column\": \"Spalte\",\n    \"Insert column before\": \"Neue Spalte davor einfügen\",\n    \"Insert column after\": \"Neue Spalte danach einfügen\",\n    \"Delete column\": \"Spalte löschen\",\n    \"Cell\": \"Zelle\",\n    \"Merge cells\": \"Zellen verbinden\",\n    \"Horizontal split\": \"Horizontal teilen\",\n    \"Vertical split\": \"Vertikal teilen\",\n    \"Cell Background\": \"Zellenfarbe\",\n    \"Vertical Align\": \"Vertikale Ausrichtung\",\n    \"Top\": \"Oben\",\n    \"Middle\": \"Zentriert\",\n    \"Bottom\": \"Unten\",\n    \"Align Top\": \"Oben ausrichten\",\n    \"Align Middle\": \"Zentriert ausrichten\",\n    \"Align Bottom\": \"Unten ausrichten\",\n    \"Cell Style\": \"Zellen-Stil\",\n\n    // Files\n    \"Upload File\": \"Datei hochladen\",\n    \"Drop file\": \"Datei hineinziehen\",\n\n    // Emoticons\n    \"Emoticons\": \"Emoticons\",\n    \"Grinning face\": \"Grinsendes Gesicht\",\n    \"Grinning face with smiling eyes\": \"Grinsend Gesicht mit lächelnden Augen\",\n    \"Face with tears of joy\": \"Gesicht mit Tränen der Freude\",\n    \"Smiling face with open mouth\": \"Lächelndes Gesicht mit offenem Mund\",\n    \"Smiling face with open mouth and smiling eyes\": \"Lächelndes Gesicht mit offenem Mund und lächelnden Augen\",\n    \"Smiling face with open mouth and cold sweat\": \"Lächelndes Gesicht mit offenem Mund und kaltem Schweiß\",\n    \"Smiling face with open mouth and tightly-closed eyes\": \"Lächelndes Gesicht mit offenem Mund und fest geschlossenen Augen\",\n    \"Smiling face with halo\": \"Lächeln Gesicht mit Heiligenschein\",\n    \"Smiling face with horns\": \"Lächeln Gesicht mit Hörnern\",\n    \"Winking face\": \"Zwinkerndes Gesicht\",\n    \"Smiling face with smiling eyes\": \"Lächelndes Gesicht mit lächelnden Augen\",\n    \"Face savoring delicious food\": \"Gesicht leckeres Essen genießend\",\n    \"Relieved face\": \"Erleichtertes Gesicht\",\n    \"Smiling face with heart-shaped eyes\": \"Lächelndes Gesicht mit herzförmigen Augen\",\n    \"Smiling face with sunglasses\": \"Lächelndes Gesicht mit Sonnenbrille\",\n    \"Smirking face\": \"Grinsendes Gesicht\",\n    \"Neutral face\": \"Neutrales Gesicht\",\n    \"Expressionless face\": \"Ausdrucksloses Gesicht\",\n    \"Unamused face\": \"Genervtes Gesicht\",\n    \"Face with cold sweat\": \"Gesicht mit kaltem Schweiß\",\n    \"Pensive face\": \"Nachdenkliches Gesicht\",\n    \"Confused face\": \"Verwirrtes Gesicht\",\n    \"Confounded face\": \"Elendes Gesicht\",\n    \"Kissing face\": \"Küssendes Gesicht\",\n    \"Face throwing a kiss\": \"Gesicht wirft einen Kuss\",\n    \"Kissing face with smiling eyes\": \"Küssendes Gesicht mit lächelnden Augen\",\n    \"Kissing face with closed eyes\": \"Küssendes Gesicht mit geschlossenen Augen\",\n    \"Face with stuck out tongue\": \"Gesicht mit herausgestreckter Zunge\",\n    \"Face with stuck out tongue and winking eye\": \"Gesicht mit herausgestreckter Zunge und zwinkerndem Auge\",\n    \"Face with stuck out tongue and tightly-closed eyes\": \"Gesicht mit herausgestreckter Zunge und fest geschlossenen Augen\",\n    \"Disappointed face\": \"Enttäuschtes Gesicht\",\n    \"Worried face\": \"Besorgtes Gesicht\",\n    \"Angry face\": \"Verärgertes Gesicht\",\n    \"Pouting face\": \"Schmollendes Gesicht\",\n    \"Crying face\": \"Weinendes Gesicht\",\n    \"Persevering face\": \"Ausharrendes Gesicht\",\n    \"Face with look of triumph\": \"Gesicht mit triumphierenden Blick\",\n    \"Disappointed but relieved face\": \"Enttäuschtes, aber erleichtertes Gesicht\",\n    \"Frowning face with open mouth\": \"Entsetztes Gesicht mit offenem Mund\",\n    \"Anguished face\": \"Gequältes Gesicht\",\n    \"Fearful face\": \"Angstvolles Gesicht\",\n    \"Weary face\": \"Müdes Gesicht\",\n    \"Sleepy face\": \"Schläfriges Gesicht\",\n    \"Tired face\": \"Gähnendes Gesicht\",\n    \"Grimacing face\": \"Grimassenschneidendes Gesicht\",\n    \"Loudly crying face\": \"Laut weinendes Gesicht\",\n    \"Face with open mouth\": \"Gesicht mit offenem Mund\",\n    \"Hushed face\": \"Besorgtes Gesicht mit offenem Mund\",\n    \"Face with open mouth and cold sweat\": \"Gesicht mit offenem Mund und kaltem Schweiß\",\n    \"Face screaming in fear\": \"Vor Angst schreiendes Gesicht\",\n    \"Astonished face\": \"Erstauntes Gesicht\",\n    \"Flushed face\": \"Gerötetes Gesicht\",\n    \"Sleeping face\": \"Schlafendes Gesicht\",\n    \"Dizzy face\": \"Schwindliges Gesicht\",\n    \"Face without mouth\": \"Gesicht ohne Mund\",\n    \"Face with medical mask\": \"Gesicht mit Mundschutz\",\n\n    // Line breaker\n    \"Break\": \"Zeilenumbruch\",\n\n    // Math\n    \"Subscript\": \"Tiefgestellt\",\n    \"Superscript\": \"Hochgestellt\",\n\n    // Full screen\n    \"Fullscreen\": \"Vollbild\",\n\n    // Horizontal line\n    \"Insert Horizontal Line\": \"Horizontale Linie einfügen\",\n\n    // Clear formatting\n    \"Clear Formatting\": \"Formatierung löschen\",\n\n    // Save\n    \"Save\": \"Sparen\",\n\n    // Undo, redo\n    \"Undo\": \"Rückgängig\",\n    \"Redo\": \"Wiederholen\",\n\n    // Select all\n    \"Select All\": \"Alles auswählen\",\n\n    // Code view\n    \"Code View\": \"Code-Ansicht\",\n\n    // Quote\n    \"Quote\": \"Zitieren\",\n    \"Increase\": \"Vergrößern\",\n    \"Decrease\": \"Verkleinern\",\n\n    // Quick Insert\n    \"Quick Insert\": \"Schnell einfügen\",\n\n    // Spcial Characters\n    \"Special Characters\": \"Sonderzeichen\",\n    \"Latin\": \"Lateinisch\",\n    \"Greek\": \"Griechisch\",\n    \"Cyrillic\": \"Kyrillisch\",\n    \"Punctuation\": \"Satzzeichen\",\n    \"Currency\": \"Währung\",\n    \"Arrows\": \"Pfeile\",\n    \"Math\": \"Mathematik\",\n    \"Misc\": \"Sonstige\",\n\n    // Print.\n    \"Print\": \"Drucken\",\n\n    // Spell Checker.\n    \"Spell Checker\": \"Rechtschreibprüfung\",\n\n    // Help\n    \"Help\": \"Hilfe\",\n    \"Shortcuts\": \"Verknüpfungen\",\n    \"Inline Editor\": \"Inline-Editor\",\n    \"Show the editor\": \"Editor anzeigen\",\n    \"Common actions\": \"Häufig verwendete Befehle\",\n    \"Copy\": \"Kopieren\",\n    \"Cut\": \"Ausschneiden\",\n    \"Paste\": \"Einfügen\",\n    \"Basic Formatting\": \"Grundformatierung\",\n    \"Increase quote level\": \"Zitatniveau erhöhen\",\n    \"Decrease quote level\": \"Zitatniveau verringern\",\n    \"Image / Video\": \"Bild / Video\",\n    \"Resize larger\": \"Vergrößern\",\n    \"Resize smaller\": \"Verkleinern\",\n    \"Table\": \"Tabelle\",\n    \"Select table cell\": \"Tabellenzelle auswählen\",\n    \"Extend selection one cell\": \"Erweitere Auswahl um eine Zelle\",\n    \"Extend selection one row\": \"Erweitere Auswahl um eine Zeile\",\n    \"Navigation\": \"Navigation\",\n    \"Focus popup / toolbar\": \"Fokus-Popup / Symbolleiste\",\n    \"Return focus to previous position\": \"Fokus auf vorherige Position\",\n\n    // Embed.ly\n    \"Embed URL\": \"URL einbetten\",\n    \"Paste in a URL to embed\": \"URL einfügen um sie einzubetten\",\n\n    // Word Paste.\n    \"The pasted content is coming from a Microsoft Word document. Do you want to keep the format or clean it up?\": \"Der eingefügte Inhalt kommt aus einem Microsoft Word-Dokument. Möchten Sie die Formatierungen behalten oder verwerfen?\",\n    \"Keep\": \"Behalten\",\n    \"Clean\": \"Bereinigen\",\n    \"Word Paste Detected\": \"Aus Word einfügen\"\n  },\n  direction: \"ltr\"\n};\n\n}));\n"
  },
  {
    "path": "src/main/resources/static/plugins/froala-editor/js/languages/el.js",
    "content": "/*!\n * froala_editor v2.9.1 (https://www.froala.com/wysiwyg-editor)\n * License https://froala.com/wysiwyg-editor/terms/\n * Copyright 2014-2018 Froala Labs\n */\n\n(function (factory) {\n    if (typeof define === 'function' && define.amd) {\n        // AMD. Register as an anonymous module.\n        define(['jquery'], factory);\n    } else if (typeof module === 'object' && module.exports) {\n        // Node/CommonJS\n        module.exports = function( root, jQuery ) {\n            if ( jQuery === undefined ) {\n                // require('jQuery') returns a factory that requires window to\n                // build a jQuery instance, we normalize how we use modules\n                // that require this pattern but the window provided is a noop\n                // if it's defined (how jquery works)\n                if ( typeof window !== 'undefined' ) {\n                    jQuery = require('jquery');\n                }\n                else {\n                    jQuery = require('jquery')(root);\n                }\n            }\n            return factory(jQuery);\n        };\n    } else {\n        // Browser globals\n        factory(window.jQuery);\n    }\n}(function ($) {\n/**\n * Arabic\n */\n\n$.FE.LANGUAGE['el'] = {\n  translation: {\n// Place holder\n    \"Type something\": \"Εισάγετε κείμενο\",\n\n    // Basic formatting\n    \"Bold\": \"Έντονα\",\n    \"Italic\": \"Πλάγια\",\n    \"Underline\": \"Υπογραμμισμένα\",\n    \"Strikethrough\": \"Διαγραμμένα\",\n\n    // Main buttons\n    \"Insert\": \"Εισαγωγή\",\n    \"Delete\": \"Διαγραφή\",\n    \"Cancel\": \"Ακύρωση\",\n    \"OK\": \"OK\",\n    \"Back\": \"Πίσω\",\n    \"Remove\": \"Αφαίρεση\",\n    \"More\": \"Περισσότερα\",\n    \"Update\": \"Ενημέρωση\",\n    \"Style\": \"Εξατομίκευση\",\n\n    // Font\n    \"Font Family\": \"Γραμματοσειρά\",\n    \"Font Size\": \"Μέγεθος\",\n\n    // Colors\n    \"Colors\": \"Χρώματα\",\n    \"Background\": \"Φόντο\",\n    \"Text\": \"Κείμενο\",\n    \"HEX Color\": \"Χρώμα HEX\",\n\n    // Paragraphs\n    \"Paragraph Format\": \"Μορφή παραγράφου\",\n    \"Normal\": \"Κανονική\",\n    \"Code\": \"Κώδικας\",\n    \"Heading 1\": \"Επικεφαλίδα 1\",\n    \"Heading 2\": \"Επικεφαλίδα 2\",\n    \"Heading 3\": \"Επικεφαλίδα 3\",\n    \"Heading 4\": \"Επικεφαλίδα 4\",\n\n    // Style\n    \"Paragraph Style\": \"Εξατομίκευση παραγράφου\",\n\t\"Gray\": \"Γκρι\",\n\t\"Spaced\": \"Αραιά\",\n\t\"Uppercase\": \"Κεφαλαία\",\n    \"Inline Style\": \"Ενσωματωμένος τύπος\",\n\n    // Alignment\n    \"Align\": \"Ευθυγράμμιση\",\n    \"Align Left\": \"Αριστερά\",\n    \"Align Center\": \"Κέντρο\",\n    \"Align Right\": \"Δεξιά\",\n    \"Align Justify\": \"Γέμισμα\",\n    \"None\": \"Χωρίς ευθυγράμμιση\",\n\n    // Lists\n    \"Ordered List\": \"Διεταγμένη λίστα\",\n    \"Unordered List\": \"Αναδιάταχτη λίστα\",\n\n    // Indent\n    \"Decrease Indent\": \"Μείωση πλαισίου\",\n    \"Increase Indent\": \"Αύξηση πλαισίου\",\n\n    // Links\n    \"Insert Link\": \"Εισαγωγή συνδέσμου\",\n    \"Open in new tab\": \"Άνοιγμα σε νέα καρτέλα\",\n    \"Open Link\": \"Άνοιγμα συνδέσμου\",\n    \"Edit Link\": \"Επεξεργασία συνδέσμου\",\n    \"Unlink\": \"Αποσύνδεση\",\n    \"Choose Link\": \"Επιλογή συνδέσμου\",\n\n    // Images\n    \"Insert Image\": \"Εισαγωγή εικόνας\",\n    \"Upload Image\": \"Ανέβασμα εικόνας\",\n    \"By URL\": \"Από URL\",\n    \"Browse\": \"Περιήγηση\",\n    \"Drop image\": \"Σύρετε εικόνα\",\n    \"or click\": \"ή κάντε κλικ\",\n    \"Manage Images\": \"Διαχείριση εικόνων\",\n    \"Loading\": \"Φόρτωση\",\n    \"Deleting\": \"Διαγραφή\",\n    \"Tags\": \"Ετικέτες\",\n    \"Are you sure? Image will be deleted.\": \"Σίγουρα; Η εικόνα θα διαγραφεί.\",\n    \"Replace\": \"Αντικατάσταση\",\n    \"Uploading\": \"Ανέβασμα\",\n    \"Loading image\": \"Φόρτωση εικόνας\",\n    \"Display\": \"Προβολή\",\n    \"Inline\": \"Ενσωματωμένη\",\n    \"Break Text\": \"Σπάσιμο κειμένου\",\n    \"Alternative Text\": \"Εναλλακτικό κείμενο\",\n    \"Change Size\": \"Αλλαγή μεγέθους\",\n    \"Width\": \"Πλάτος\",\n    \"Height\": \"Ύψος\",\n    \"Something went wrong. Please try again.\": \"Κάτι πήγε στραβά. Προσπαθήστε ξανά.\",\n    \"Image Caption\": \"Λεζάντα εικόνας\",\n    \"Advanced Edit\": \"Προχωρημένη επεξεργασία\",\n\t\"Rounded\": \"Κυκλικός\",\n\t\"Bordered\": \"Πλαίσιο\",\n\t\"Shadow\": \"Σκια\",\n\n    // Video\n    \"Insert Video\": \"Εισαγωγή βίντεο\",\n    \"Embedded Code\": \"Ενσωμάτωση κώδικα\",\n    \"Paste in a video URL\": \"Εισαγωγή URL βίντεο\",\n    \"Drop video\": \"Σύρετε βίντεο\",\n    \"Your browser does not support HTML5 video.\": \"Ο περιηγητής σας δεν υποστηρίζει βίντεο τύπου HTML5.\",\n    \"Upload Video\": \"Ανέβασμα βίντεο\",\n\n    // Tables\n    \"Insert Table\": \"Εισαγωγή πίνακα\",\n    \"Table Header\": \"Επικεφαλίδα πίνακα\",\n    \"Remove Table\": \"Αφαίρεση πίνακα\",\n    \"Table Style\": \"Εξατομίκευση πίνακα\",\n    \"Horizontal Align\": \"Οριζόντια ευθυγράμμιση\",\n    \"Row\": \"Σειρά\",\n    \"Insert row above\": \"Εισαγωγή σειράς από πάνω\",\n    \"Insert row below\": \"Εισαγωγή σειράς από κάτω\",\n    \"Delete row\": \"Διαγραφή σειράς\",\n    \"Column\": \"Στήλη\",\n    \"Insert column before\": \"Εισαγωγή στήλης πριν\",\n    \"Insert column after\": \"Εισαγωγή στήλης μετά\",\n    \"Delete column\": \"Διαγραφή στήλης\",\n    \"Cell\": \"Κελί\",\n    \"Merge cells\": \"Συγχώνευση κελιών\",\n    \"Horizontal split\": \"Οριζόντος διαχωρισμός\",\n    \"Vertical split\": \"Κατακόρυφος διαχωρισμός\",\n    \"Cell Background\": \"Φόντο κελιού\",\n    \"Vertical Align\": \"Κατακόρυφη ευθυγράμμιση\",\n    \"Top\": \"Κορυφή\",\n    \"Middle\": \"Μέση\",\n    \"Bottom\": \"Βάθος\",\n    \"Align Top\": \"Ευθυγράμμιση κορυφής\",\n    \"Align Middle\": \"Ευθυγράμμιση μέσης\",\n    \"Align Bottom\": \"Ευθυγράμμιση βάθους\",\n    \"Cell Style\": \"Εξατομίκευση κελιού\",\n\n    // Files\n    \"Upload File\": \"Ανέβασμα αρχείου\",\n    \"Drop file\": \"Σύρετε αρχείο\",\n\n    // Emoticons\n    \"Emoticons\": \"Emoticons\",\n    \"Grinning face\": \"Γέλιο\",\n    \"Grinning face with smiling eyes\": \"Γέλιο με γελαστά μάτια\",\n    \"Face with tears of joy\": \"Δάκρυα γέλιου (LOL)\",\n    \"Smiling face with open mouth\": \"Χαμόγελο με ανοιχτό στόμα\",\n    \"Smiling face with open mouth and smiling eyes\": \"Χαμόγελο με ανοιχτό στόμα και γελαστά μάτια\",\n    \"Smiling face with open mouth and cold sweat\": \"Χαμόγελο με ανοιχτό στόμα και σταγόνα ιδρώτα\",\n    \"Smiling face with open mouth and tightly-closed eyes\": \"Χαμόγελο με ανοιχτό στόμα και σφιχτά κλεισμένα μάτια\",\n    \"Smiling face with halo\": \"Χαμόγελο με φωτοστέφανο\",\n    \"Smiling face with horns\": \"Χαμογελαστό διαβολάκι\",\n    \"Winking face\": \"Κλείσιμο ματιού\",\n    \"Smiling face with smiling eyes\": \"Χαμόγελο με γελαστά μάτια\",\n    \"Face savoring delicious food\": \"Νόστιμο\",\n    \"Relieved face\": \"Ανακούφιση\",\n    \"Smiling face with heart-shaped eyes\": \"Χαμόγελο με μάτια σε σχήμα καρδιάς\",\n    \"Smiling face with sunglasses\": \"Χαμόγελο με γυαλιά ηλίου\",\n    \"Smirking face\": \"Ειρωνία\",\n    \"Neutral face\": \"Ουδέτερο\",\n    \"Expressionless face\": \"Ανέκφραστο\",\n    \"Unamused face\": \"Αψυχαγώγητο\",\n    \"Face with cold sweat\": \"Σταγόνα ιδρώτα\",\n    \"Pensive face\": \"Σκεπτικό\",\n    \"Confused face\": \"Σύγχιση\",\n    \"Confounded face\": \"Ακράτεια\",\n    \"Kissing face\": \"Φιλί\",\n    \"Face throwing a kiss\": \"Πάσα φιλιού\",\n    \"Kissing face with smiling eyes\": \"Φιλί με γελαστά μάτια\",\n    \"Kissing face with closed eyes\": \"Φιλί με κλειστά μάτια\",\n    \"Face with stuck out tongue\": \"Γλώσσα\",\n    \"Face with stuck out tongue and winking eye\": \"Γλώσσα με κλείσιμο ματιού\",\n    \"Face with stuck out tongue and tightly-closed eyes\": \"Γλώσσα με σφιχτά κλεισμένα μάτια\",\n    \"Disappointed face\": \"Απογοήτευση\",\n    \"Worried face\": \"Ανυσηχία\",\n    \"Angry face\": \"Θυμός\",\n    \"Pouting face\": \"Έξαλλο\",\n    \"Crying face\": \"Κλάμα θυμού\",\n    \"Persevering face\": \"Έτοιμο να εκραγεί\",\n    \"Face with look of triumph\": \"Θρίαμβος\",\n    \"Disappointed but relieved face\": \"Απογοήτευση με ανακούφιση\",\n    \"Frowning face with open mouth\": \"Απορία\",\n    \"Anguished face\": \"Αγωνία\",\n    \"Fearful face\": \"Φόβος\",\n    \"Weary face\": \"Κούραση\",\n    \"Sleepy face\": \"Εξάντληση\",\n    \"Tired face\": \"Γκρίνια\",\n    \"Grimacing face\": \"Γκριμάτσα\",\n    \"Loudly crying face\": \"Δυνατό κλάμα\",\n    \"Face with open mouth\": \"Έκπληξη\",\n    \"Hushed face\": \"Σιωπή\",\n    \"Face with open mouth and cold sweat\": \"Έκπληξη με ιδρώτα\",\n    \"Face screaming in fear\": \"Πανικός\",\n    \"Astonished face\": \"Ηλίθιο\",\n    \"Flushed face\": \"Ντροπαλό\",\n    \"Sleeping face\": \"Ύπνος\",\n    \"Dizzy face\": \"Ζαλάδα\",\n    \"Face without mouth\": \"Άφωνο\",\n    \"Face with medical mask\": \"Νοσηλευτική μάσκα\",\n\n    // Line breaker\n    \"Break\": \"Σπάσιμο\",\n\n    // Math\n    \"Subscript\": \"Υποκείμενο\",\n    \"Superscript\": \"Υπερκείμενο\",\n\n    // Full screen\n    \"Fullscreen\": \"Πλήρης οθόνη\",\n\n    // Horizontal line\n    \"Insert Horizontal Line\": \"Εισαγωγή οριζόντιας γραμμής\",\n\n    // Clear formatting\n    \"Clear Formatting\": \"Εκαθάριση μορφοποίησης\",\n\n    // Save\n    \"Save\": \"\",\n\n    // Undo, redo\n    \"Undo\": \"Αναίρεση\",\n    \"Redo\": \"Επανάληψη\",\n\n    // Select all\n    \"Select All\": \"Επιλογή Όλων\",\n\n    // Code view\n    \"Code View\": \"Προβολή Κώδικα\",\n\n    // Quote\n    \"Quote\": \"Απόσπασμα\",\n    \"Increase\": \"Αύξηση\",\n    \"Decrease\": \"Μείωση\",\n\n    // Quick Insert\n    \"Quick Insert\": \"Γρήγορη εισαγωγή\",\n\n    // Spcial Characters\n    \"Special Characters\": \"Ειδικοί χαρακτήρες\",\n    \"Latin\": \"Λατινικοί\",\n    \"Greek\": \"Ελληνικοί\",\n    \"Cyrillic\": \"Κρυλλικοί\",\n    \"Punctuation\": \"Σημεία στήξης\",\n    \"Currency\": \"Συνάλλαγμα\",\n    \"Arrows\": \"Βέλη\",\n    \"Math\": \"Μαθηματικά\",\n    \"Misc\": \"Διάφοροι\",\n\n    // Print.\n    \"Print\": \"Εκτύπωση\",\n\n    // Spell Checker.\n    \"Spell Checker\": \"Έλεγχος ορθογραφίας\",\n\n    // Help\n    \"Help\": \"Βοήθεια\",\n    \"Shortcuts\": \"Συντομεύσεις\",\n    \"Inline Editor\": \"Ενσωματωμένος επεξεργαστής\",\n    \"Show the editor\": \"Εμφάνιση επεξεργαστή\",\n    \"Common actions\": \"Κοινές ενέργειες\",\n    \"Copy\": \"Αντιγραφή\",\n    \"Cut\": \"Αποκοπή\",\n    \"Paste\": \"Επικόλληση\",\n    \"Basic Formatting\": \"Βασική διαμόρφωση\",\n    \"Increase quote level\": \"Αύξηση επιπέδου αποσπάσματος\",\n    \"Decrease quote level\": \"Μείωση επιπέδου αποσπάσματος\",\n    \"Image / Video\": \"Εικόνα / Βίντεο\",\n    \"Resize larger\": \"Αύξηση μεγέθους\",\n    \"Resize smaller\": \"Μείωση μεγέθους\",\n    \"Table\": \"Πίνακας\",\n    \"Select table cell\": \"Επιλογή κελιού από πίνακα\",\n    \"Extend selection one cell\": \"Επέκταση επιλογής κατά ένα κελί\",\n    \"Extend selection one row\": \"Επέκταση επιλογής κατά μια σειρά\",\n    \"Navigation\": \"Πλοήγηση\",\n    \"Focus popup / toolbar\": \"Εστίαση αναδυόμενου / εργαλειοθήκης\",\n    \"Return focus to previous position\": \"Επιστροφή εστίασης στην προηγούμενη θέση\",\n\n    // Embed.ly\n    \"Embed URL\": \"Ενσωμάτωση URL\",\n    \"Paste in a URL to embed\": \"Εισάγετε ένα URL για ενσωμάτωση\",\n\n    // Word Paste.\n    \"The pasted content is coming from a Microsoft Word document. Do you want to keep the format or clean it up?\": \"Το περιεχόμενο που επικολλήσατε προέρχεται από ένα έγγραφο του Microsoft Word. Θέλετε να διατηρήσετε το έγγραφο ή να το καταργήσετε;\",\n    \"Keep\": \"Διατήρηση\",\n    \"Clean\": \"Κατάργηση\",\n    \"Word Paste Detected\": \"Εντοπίστηκε επικόλληση από αρχείο Word\"\n  },\n  direction: \"ltr\"\n};\n\n}));\n"
  },
  {
    "path": "src/main/resources/static/plugins/froala-editor/js/languages/en_ca.js",
    "content": "/*!\n * froala_editor v2.9.1 (https://www.froala.com/wysiwyg-editor)\n * License https://froala.com/wysiwyg-editor/terms/\n * Copyright 2014-2018 Froala Labs\n */\n\n(function (factory) {\n    if (typeof define === 'function' && define.amd) {\n        // AMD. Register as an anonymous module.\n        define(['jquery'], factory);\n    } else if (typeof module === 'object' && module.exports) {\n        // Node/CommonJS\n        module.exports = function( root, jQuery ) {\n            if ( jQuery === undefined ) {\n                // require('jQuery') returns a factory that requires window to\n                // build a jQuery instance, we normalize how we use modules\n                // that require this pattern but the window provided is a noop\n                // if it's defined (how jquery works)\n                if ( typeof window !== 'undefined' ) {\n                    jQuery = require('jquery');\n                }\n                else {\n                    jQuery = require('jquery')(root);\n                }\n            }\n            return factory(jQuery);\n        };\n    } else {\n        // Browser globals\n        factory(window.jQuery);\n    }\n}(function ($) {\n/**\n * English spoken in Canada\n */\n\n$.FE.LANGUAGE['en_ca'] = {\n  translation: {\n    // Place holder\n    \"Type something\": \"Type something\",\n\n    // Basic formatting\n    \"Bold\": \"Bold\",\n    \"Italic\": \"Italic\",\n    \"Underline\": \"Underline\",\n    \"Strikethrough\": \"Strikethrough\",\n\n    // Main buttons\n    \"Insert\": \"Insert\",\n    \"Delete\": \"Delete\",\n    \"Cancel\": \"Cancel\",\n    \"OK\": \"OK\",\n    \"Back\": \"Back\",\n    \"Remove\": \"Remove\",\n    \"More\": \"More\",\n    \"Update\": \"Update\",\n    \"Style\": \"Style\",\n\n    // Font\n    \"Font Family\": \"Font Family\",\n    \"Font Size\": \"Font Size\",\n\n    // Colors\n    \"Colors\": \"Colours\",\n    \"Background\": \"Background\",\n    \"Text\": \"Text\",\n    \"HEX Color\": \"HEX Colour\",\n\n    // Paragraphs\n    \"Paragraph Format\": \"Paragraph Format\",\n    \"Normal\": \"Normal\",\n    \"Code\": \"Code\",\n    \"Heading 1\": \"Heading 1\",\n    \"Heading 2\": \"Heading 2\",\n    \"Heading 3\": \"Heading 3\",\n    \"Heading 4\": \"Heading 4\",\n\n    // Style\n    \"Paragraph Style\": \"Paragraph Style\",\n    \"Inline Style\": \"Inline Style\",\n\n    // Alignment\n    \"Align\": \"Align\",\n    \"Align Left\": \"Align Left\",\n    \"Align Center\": \"Align Centre\",\n    \"Align Right\": \"Align Right\",\n    \"Align Justify\": \"Align Justify\",\n    \"None\": \"None\",\n\n    // Lists\n    \"Ordered List\": \"Ordered List\",\n    \"Unordered List\": \"Unordered List\",\n\n    // Indent\n    \"Decrease Indent\": \"Decrease Indent\",\n    \"Increase Indent\": \"Increase Indent\",\n\n    // Links\n    \"Insert Link\": \"Insert Link\",\n    \"Open in new tab\": \"Open in new tab\",\n    \"Open Link\": \"Open Link\",\n    \"Edit Link\": \"Edit Link\",\n    \"Unlink\": \"Unlink\",\n    \"Choose Link\": \"Choose Link\",\n\n    // Images\n    \"Insert Image\": \"Insert Image\",\n    \"Upload Image\": \"Upload Image\",\n    \"By URL\": \"By URL\",\n    \"Browse\": \"Browse\",\n    \"Drop image\": \"Drop image\",\n    \"or click\": \"or click\",\n    \"Manage Images\": \"Manage Images\",\n    \"Loading\": \"Loading\",\n    \"Deleting\": \"Deleting\",\n    \"Tags\": \"Tags\",\n    \"Are you sure? Image will be deleted.\": \"Are you sure? Image will be deleted.\",\n    \"Replace\": \"Replace\",\n    \"Uploading\": \"Uploading\",\n    \"Loading image\": \"Loading image\",\n    \"Display\": \"Display\",\n    \"Inline\": \"Inline\",\n    \"Break Text\": \"Break Text\",\n    \"Alternative Text\": \"Alternative Text\",\n    \"Change Size\": \"Change Size\",\n    \"Width\": \"Width\",\n    \"Height\": \"Height\",\n    \"Something went wrong. Please try again.\": \"Something went wrong. Please try again.\",\n    \"Image Caption\": \"Image Caption\",\n    \"Advanced Edit\": \"Advanced Edit\",\n\n    // Video\n    \"Insert Video\": \"Insert Video\",\n    \"Embedded Code\": \"Embedded Code\",\n    \"Paste in a video URL\": \"Paste in a video URL\",\n    \"Drop video\": \"Drop video\",\n    \"Your browser does not support HTML5 video.\": \"Your browser does not support HTML5 video.\",\n    \"Upload Video\": \"Upload Video\",\n\n    // Tables\n    \"Insert Table\": \"Insert Table\",\n    \"Table Header\": \"Table Header\",\n    \"Remove Table\": \"Remove Table\",\n    \"Table Style\": \"Table Style\",\n    \"Horizontal Align\": \"Horizontal Align\",\n    \"Row\": \"Row\",\n    \"Insert row above\": \"Insert row above\",\n    \"Insert row below\": \"Insert row below\",\n    \"Delete row\": \"Delete row\",\n    \"Column\": \"Column\",\n    \"Insert column before\": \"Insert column before\",\n    \"Insert column after\": \"Insert column after\",\n    \"Delete column\": \"Delete column\",\n    \"Cell\": \"Cell\",\n    \"Merge cells\": \"Merge cells\",\n    \"Horizontal split\": \"Horizontal split\",\n    \"Vertical split\": \"Vertical split\",\n    \"Cell Background\": \"Cell Background\",\n    \"Vertical Align\": \"Vertical Align\",\n    \"Top\": \"Top\",\n    \"Middle\": \"Middle\",\n    \"Bottom\": \"Bottom\",\n    \"Align Top\": \"Align Top\",\n    \"Align Middle\": \"Align Middle\",\n    \"Align Bottom\": \"Align Bottom\",\n    \"Cell Style\": \"Cell Style\",\n\n    // Files\n    \"Upload File\": \"Upload File\",\n    \"Drop file\": \"Drop file\",\n\n    // Emoticons\n    \"Emoticons\": \"Emoticons\",\n\n    // Line breaker\n    \"Break\": \"Break\",\n\n    // Math\n    \"Subscript\": \"Subscript\",\n    \"Superscript\": \"Superscript\",\n\n    // Full screen\n    \"Fullscreen\": \"Fullscreen\",\n\n    // Horizontal line\n    \"Insert Horizontal Line\": \"Insert Horizontal Line\",\n\n    // Clear formatting\n    \"Clear Formatting\": \"Clear Formatting\",\n\n    // Save\n    \"Save\": \"Save\",\n\n    // Undo, redo\n    \"Undo\": \"Undo\",\n    \"Redo\": \"Redo\",\n\n    // Select all\n    \"Select All\": \"Select All\",\n\n    // Code view\n    \"Code View\": \"Code View\",\n\n    // Quote\n    \"Quote\": \"Quote\",\n    \"Increase\": \"Increase\",\n    \"Decrease\": \"Decrease\",\n\n    // Quick Insert\n    \"Quick Insert\": \"Quick Insert\",\n\n    // Spcial Characters\n    \"Special Characters\": \"Special Characters\",\n    \"Latin\": \"Latin\",\n    \"Greek\": \"Greek\",\n    \"Cyrillic\": \"Cyrillic\",\n    \"Punctuation\": \"Punctuation\",\n    \"Currency\": \"Currency\",\n    \"Arrows\": \"Arrows\",\n    \"Math\": \"Math\",\n    \"Misc\": \"Misc\",\n\n    // Print.\n    \"Print\": \"Print\",\n\n    // Spell Checker.\n    \"Spell Checker\": \"Spell Checker\",\n\n    // Help\n    \"Help\": \"Help\",\n    \"Shortcuts\": \"Shortcuts\",\n    \"Inline Editor\": \"Inline Editor\",\n    \"Show the editor\": \"Show the editor\",\n    \"Common actions\": \"Common actions\",\n    \"Copy\": \"Copy\",\n    \"Cut\": \"Cut\",\n    \"Paste\": \"Paste\",\n    \"Basic Formatting\": \"Basic Formatting\",\n    \"Increase quote level\": \"Increase quote level\",\n    \"Decrease quote level\": \"Decrease quote level\",\n    \"Image / Video\": \"Image / Video\",\n    \"Resize larger\": \"Resize larger\",\n    \"Resize smaller\": \"Resize smaller\",\n    \"Table\": \"Table\",\n    \"Select table cell\": \"Select table cell\",\n    \"Extend selection one cell\": \"Extend selection one cell\",\n    \"Extend selection one row\": \"Extend selection one row\",\n    \"Navigation\": \"Navigation\",\n    \"Focus popup / toolbar\": \"Focus popup / toolbar\",\n    \"Return focus to previous position\": \"Return focus to previous position\",\n\n    // Embed.ly\n    \"Embed URL\": \"Embed URL\",\n    \"Paste in a URL to embed\": \"Paste in a URL to embed\",\n\n    // Word Paste.\n    \"The pasted content is coming from a Microsoft Word document. Do you want to keep the format or clean it up?\": \"The pasted content is coming from a Microsoft Word document. Do you want to keep the format or clean it up?\",\n    \"Keep\": \"Keep\",\n    \"Clean\": \"Clean\",\n    \"Word Paste Detected\": \"Word Paste Detected\"\n  },\n  direction: \"ltr\"\n};\n\n}));\n"
  },
  {
    "path": "src/main/resources/static/plugins/froala-editor/js/languages/en_gb.js",
    "content": "/*!\n * froala_editor v2.9.1 (https://www.froala.com/wysiwyg-editor)\n * License https://froala.com/wysiwyg-editor/terms/\n * Copyright 2014-2018 Froala Labs\n */\n\n(function (factory) {\n    if (typeof define === 'function' && define.amd) {\n        // AMD. Register as an anonymous module.\n        define(['jquery'], factory);\n    } else if (typeof module === 'object' && module.exports) {\n        // Node/CommonJS\n        module.exports = function( root, jQuery ) {\n            if ( jQuery === undefined ) {\n                // require('jQuery') returns a factory that requires window to\n                // build a jQuery instance, we normalize how we use modules\n                // that require this pattern but the window provided is a noop\n                // if it's defined (how jquery works)\n                if ( typeof window !== 'undefined' ) {\n                    jQuery = require('jquery');\n                }\n                else {\n                    jQuery = require('jquery')(root);\n                }\n            }\n            return factory(jQuery);\n        };\n    } else {\n        // Browser globals\n        factory(window.jQuery);\n    }\n}(function ($) {\n/**\n * English spoken in Great Britain\n */\n\n$.FE.LANGUAGE['en_gb'] = {\n  translation: {\n    // Place holder\n    \"Type something\": \"Type something\",\n\n    // Basic formatting\n    \"Bold\": \"Bold\",\n    \"Italic\": \"Italic\",\n    \"Underline\": \"Underline\",\n    \"Strikethrough\": \"Strikethrough\",\n\n    // Main buttons\n    \"Insert\": \"Insert\",\n    \"Delete\": \"Delete\",\n    \"Cancel\": \"Cancel\",\n    \"OK\": \"OK\",\n    \"Back\": \"Back\",\n    \"Remove\": \"Remove\",\n    \"More\": \"More\",\n    \"Update\": \"Update\",\n    \"Style\": \"Style\",\n\n    // Font\n    \"Font Family\": \"Font Family\",\n    \"Font Size\": \"Font Size\",\n\n    // Colors\n    \"Colors\": \"Colours\",\n    \"Background\": \"Background\",\n    \"Text\": \"Text\",\n    \"HEX Color\": \"HEX Colour\",\n\n    // Paragraphs\n    \"Paragraph Format\": \"Paragraph Format\",\n    \"Normal\": \"Normal\",\n    \"Code\": \"Code\",\n    \"Heading 1\": \"Heading 1\",\n    \"Heading 2\": \"Heading 2\",\n    \"Heading 3\": \"Heading 3\",\n    \"Heading 4\": \"Heading 4\",\n\n    // Style\n    \"Paragraph Style\": \"Paragraph Style\",\n    \"Inline Style\": \"Inline Style\",\n\n    // Alignment\n    \"Align\": \"Align\",\n    \"Align Left\": \"Align Left\",\n    \"Align Center\": \"Align Centre\",\n    \"Align Right\": \"Alight Right\",\n    \"Align Justify\": \"Align Justify\",\n    \"None\": \"None\",\n\n    // Lists\n    \"Ordered List\": \"Ordered List\",\n    \"Unordered List\": \"Unordered List\",\n\n    // Indent\n    \"Decrease Indent\": \"Decrease Indent\",\n    \"Increase Indent\": \"Increase Indent\",\n\n    // Links\n    \"Insert Link\": \"Insert Link\",\n    \"Open in new tab\": \"Open in new tab\",\n    \"Open Link\": \"Open Link\",\n    \"Edit Link\": \"Edit Link\",\n    \"Unlink\": \"Unlink\",\n    \"Choose Link\": \"Choose Link\",\n\n    // Images\n    \"Insert Image\": \"Insert Image\",\n    \"Upload Image\": \"Upload Image\",\n    \"By URL\": \"By URL\",\n    \"Browse\": \"Browse\",\n    \"Drop image\": \"Drop image\",\n    \"or click\": \"or click\",\n    \"Manage Images\": \"Manage Images\",\n    \"Loading\": \"Loading\",\n    \"Deleting\": \"Deleting\",\n    \"Tags\": \"Tags\",\n    \"Are you sure? Image will be deleted.\": \"Are you sure? Image will be deleted.\",\n    \"Replace\": \"Replace\",\n    \"Uploading\": \"Uploading\",\n    \"Loading image\": \"Loading image\",\n    \"Display\": \"Display\",\n    \"Inline\": \"Inline\",\n    \"Break Text\": \"Break Text\",\n    \"Alternative Text\": \"Alternative Text\",\n    \"Change Size\": \"Change Size\",\n    \"Width\": \"Width\",\n    \"Height\": \"Height\",\n    \"Something went wrong. Please try again.\": \"Something went wrong. Please try again.\",\n    \"Image Caption\": \"Image Caption\",\n    \"Advanced Edit\": \"Advanced Edit\",\n\n    // Video\n    \"Insert Video\": \"Insert Video\",\n    \"Embedded Code\": \"Embedded Code\",\n    \"Paste in a video URL\": \"Paste in a video URL\",\n    \"Drop video\": \"Drop video\",\n    \"Your browser does not support HTML5 video.\": \"Your browser does not support HTML5 video.\",\n    \"Upload Video\": \"Upload Video\",\n\n    // Tables\n    \"Insert Table\": \"Insert Table\",\n    \"Table Header\": \"Table Header\",\n    \"Remove Table\": \"Remove Table\",\n    \"Table Style\": \"Table Style\",\n    \"Horizontal Align\": \"Horizontal Align\",\n    \"Row\": \"Row\",\n    \"Insert row above\": \"Insert row above\",\n    \"Insert row below\": \"Insert row below\",\n    \"Delete row\": \"Delete row\",\n    \"Column\": \"Column\",\n    \"Insert column before\": \"Insert column before\",\n    \"Insert column after\": \"Insert column after\",\n    \"Delete column\": \"Delete column\",\n    \"Cell\": \"Cell\",\n    \"Merge cells\": \"Merge cells\",\n    \"Horizontal split\": \"Horizontal split\",\n    \"Vertical split\": \"Vertical split\",\n    \"Cell Background\": \"Cell Background\",\n    \"Vertical Align\": \"Vertical Align\",\n    \"Top\": \"Top\",\n    \"Middle\": \"Middle\",\n    \"Bottom\": \"Bottom\",\n    \"Align Top\": \"Align Top\",\n    \"Align Middle\": \"Align Middle\",\n    \"Align Bottom\": \"Align Bottom\",\n    \"Cell Style\": \"Cell Style\",\n\n    // Files\n    \"Upload File\": \"Upload File\",\n    \"Drop file\": \"Drop file\",\n\n    // Emoticons\n    \"Emoticons\": \"Emoticons\",\n\n    // Line breaker\n    \"Break\": \"Break\",\n\n    // Math\n    \"Subscript\": \"Subscript\",\n    \"Superscript\": \"Superscript\",\n\n    // Full screen\n    \"Fullscreen\": \"Fullscreen\",\n\n    // Horizontal line\n    \"Insert Horizontal Line\": \"Insert Horizontal Line\",\n\n    // Clear formatting\n    \"Clear Formatting\": \"Cell Formatting\",\n\n    // Save\n    \"Save\": \"Save\",\n\n    // Undo, redo\n    \"Undo\": \"Undo\",\n    \"Redo\": \"Redo\",\n\n    // Select all\n    \"Select All\": \"Select All\",\n\n    // Code view\n    \"Code View\": \"Code View\",\n\n    // Quote\n    \"Quote\": \"Quote\",\n    \"Increase\": \"Increase\",\n    \"Decrease\": \"Decrease\",\n\n    // Quick Insert\n    \"Quick Insert\": \"Quick Insert\",\n\n    // Spcial Characters\n    \"Special Characters\": \"Special Characters\",\n    \"Latin\": \"Latin\",\n    \"Greek\": \"Greek\",\n    \"Cyrillic\": \"Cyrillic\",\n    \"Punctuation\": \"Punctuation\",\n    \"Currency\": \"Currency\",\n    \"Arrows\": \"Arrows\",\n    \"Math\": \"Math\",\n    \"Misc\": \"Misc\",\n\n    // Print.\n    \"Print\": \"Print\",\n\n    // Spell Checker.\n    \"Spell Checker\": \"Spell Checker\",\n\n    // Help\n    \"Help\": \"Help\",\n    \"Shortcuts\": \"Shortcuts\",\n    \"Inline Editor\": \"Inline Editor\",\n    \"Show the editor\": \"Show the editor\",\n    \"Common actions\": \"Common actions\",\n    \"Copy\": \"Copy\",\n    \"Cut\": \"Cut\",\n    \"Paste\": \"Paste\",\n    \"Basic Formatting\": \"Basic Formatting\",\n    \"Increase quote level\": \"Increase quote level\",\n    \"Decrease quote level\": \"Decrease quote level\",\n    \"Image / Video\": \"Image / Video\",\n    \"Resize larger\": \"Resize larger\",\n    \"Resize smaller\": \"Resize smaller\",\n    \"Table\": \"Table\",\n    \"Select table cell\": \"Select table cell\",\n    \"Extend selection one cell\": \"Extend selection one cell\",\n    \"Extend selection one row\": \"Extend selection one row\",\n    \"Navigation\": \"Navigation\",\n    \"Focus popup / toolbar\": \"Focus popup / toolbar\",\n    \"Return focus to previous position\": \"Return focus to previous position\",\n\n    // Embed.ly\n    \"Embed URL\": \"Embed URL\",\n    \"Paste in a URL to embed\": \"Paste in a URL to embed\",\n\n    // Word Paste.\n    \"The pasted content is coming from a Microsoft Word document. Do you want to keep the format or clean it up?\": \"The pasted content is coming from a Microsoft Word document. Do you want to keep the format or clean it up?\",\n    \"Keep\": \"Keep\",\n    \"Clean\": \"Clean\",\n    \"Word Paste Detected\": \"Word Paste Detected\"\n  },\n  direction: \"ltr\"\n};\n\n}));\n"
  },
  {
    "path": "src/main/resources/static/plugins/froala-editor/js/languages/es.js",
    "content": "/*!\n * froala_editor v2.9.1 (https://www.froala.com/wysiwyg-editor)\n * License https://froala.com/wysiwyg-editor/terms/\n * Copyright 2014-2018 Froala Labs\n */\n\n(function (factory) {\n    if (typeof define === 'function' && define.amd) {\n        // AMD. Register as an anonymous module.\n        define(['jquery'], factory);\n    } else if (typeof module === 'object' && module.exports) {\n        // Node/CommonJS\n        module.exports = function( root, jQuery ) {\n            if ( jQuery === undefined ) {\n                // require('jQuery') returns a factory that requires window to\n                // build a jQuery instance, we normalize how we use modules\n                // that require this pattern but the window provided is a noop\n                // if it's defined (how jquery works)\n                if ( typeof window !== 'undefined' ) {\n                    jQuery = require('jquery');\n                }\n                else {\n                    jQuery = require('jquery')(root);\n                }\n            }\n            return factory(jQuery);\n        };\n    } else {\n        // Browser globals\n        factory(window.jQuery);\n    }\n}(function ($) {\n/**\n * Spanish\n */\n\n$.FE.LANGUAGE['es'] = {\n  translation: {\n    // Place holder\n    \"Type something\": \"Escriba algo\",\n\n    // Basic formatting\n    \"Bold\": \"Negrita\",\n    \"Italic\": \"It\\u00e1lica\",\n    \"Underline\": \"Subrayado\",\n    \"Strikethrough\": \"Tachado\",\n\n    // Main buttons\n    \"Insert\": \"Insertar\",\n    \"Delete\": \"Borrar\",\n    \"Cancel\": \"Cancelar\",\n    \"OK\": \"Ok\",\n    \"Back\": \"Atr\\u00e1s\",\n    \"Remove\": \"Quitar\",\n    \"More\": \"M\\u00e1s\",\n    \"Update\": \"Actualizaci\\u00f3n\",\n    \"Style\": \"Estilo\",\n\n    // Font\n    \"Font Family\": \"Familia de fuentes\",\n    \"Font Size\": \"Tama\\u00f1o de fuente\",\n\n    // Colors\n    \"Colors\": \"Colores\",\n    \"Background\": \"Fondo\",\n    \"Text\": \"Texto\",\n    \"HEX Color\": \"Color hexadecimal\",\n\n    // Paragraphs\n    \"Paragraph Format\": \"Formato de p\\u00e1rrafo\",\n    \"Normal\": \"Normal\",\n    \"Code\": \"C\\u00f3digo\",\n    \"Heading 1\": \"Encabezado 1\",\n    \"Heading 2\": \"Encabezado 2\",\n    \"Heading 3\": \"Encabezado 3\",\n    \"Heading 4\": \"Encabezado 4\",\n\n    // Style\n    \"Paragraph Style\": \"Estilo de p\\u00e1rrafo\",\n    \"Inline Style\": \"Estilo en l\\u00ednea\",\n\n    // Alignment\n    \"Align\": \"Alinear\",\n    \"Align Left\": \"Alinear a la izquierda\",\n    \"Align Center\": \"Alinear al centro\",\n    \"Align Right\": \"Alinear a la derecha\",\n    \"Align Justify\": \"Justificar\",\n    \"None\": \"Ninguno\",\n\n    // Lists\n    \"Ordered List\": \"Lista ordenada\",\n    \"Unordered List\": \"Lista desordenada\",\n\n    // Indent\n    \"Decrease Indent\": \"Reducir sangr\\u00eda\",\n    \"Increase Indent\": \"Aumentar sangr\\u00eda\",\n\n    // Links\n    \"Insert Link\": \"Insertar enlace\",\n    \"Open in new tab\": \"Abrir en una nueva pesta\\u00F1a\",\n    \"Open Link\": \"Abrir enlace\",\n    \"Edit Link\": \"Editar enlace\",\n    \"Unlink\": \"Quitar enlace\",\n    \"Choose Link\": \"Elegir enlace\",\n\n    // Images\n    \"Insert Image\": \"Insertar imagen\",\n    \"Upload Image\": \"Cargar imagen\",\n    \"By URL\": \"Por URL\",\n    \"Browse\": \"Examinar\",\n    \"Drop image\": \"Soltar la imagen\",\n    \"or click\": \"o haga clic en\",\n    \"Manage Images\": \"Administrar im\\u00e1genes\",\n    \"Loading\": \"Cargando\",\n    \"Deleting\": \"Borrado\",\n    \"Tags\": \"Etiquetas\",\n    \"Are you sure? Image will be deleted.\": \"\\u00bfEst\\u00e1 seguro? Imagen ser\\u00e1 borrada.\",\n    \"Replace\": \"Reemplazar\",\n    \"Uploading\": \"Carga\",\n    \"Loading image\": \"Cargando imagen\",\n    \"Display\": \"Mostrar\",\n    \"Inline\": \"En l\\u00ednea\",\n    \"Break Text\": \"Romper texto\",\n    \"Alternative Text\": \"Texto alternativo\",\n    \"Change Size\": \"Cambiar tama\\u00f1o\",\n    \"Width\": \"Ancho\",\n    \"Height\": \"Altura\",\n    \"Something went wrong. Please try again.\": \"Algo sali\\u00f3 mal. Por favor, vuelva a intentarlo.\",\n    \"Image Caption\": \"Captura de imagen\",\n    \"Advanced Edit\": \"Edición avanzada\",\n\n    // Video\n    \"Insert Video\": \"Insertar video\",\n    \"Embedded Code\": \"C\\u00f3digo incrustado\",\n    \"Paste in a video URL\": \"Pegar en una URL de video\",\n    \"Drop video\": \"Soltar video\",\n    \"Your browser does not support HTML5 video.\": \"Su navegador no es compatible con video html5.\",\n    \"Upload Video\": \"Subir video\",\n\n    // Tables\n    \"Insert Table\": \"Insertar tabla\",\n    \"Table Header\": \"Encabezado de la tabla\",\n    \"Remove Table\": \"Retire la tabla\",\n    \"Table Style\": \"Estilo de tabla\",\n    \"Horizontal Align\": \"Alinear horizontal\",\n    \"Row\": \"Fila\",\n    \"Insert row above\": \"Insertar fila antes\",\n    \"Insert row below\": \"Insertar fila despu\\u00e9s\",\n    \"Delete row\": \"Eliminar fila\",\n    \"Column\": \"Columna\",\n    \"Insert column before\": \"Insertar columna antes\",\n    \"Insert column after\": \"Insertar columna despu\\u00e9s\",\n    \"Delete column\": \"Eliminar columna\",\n    \"Cell\": \"Celda\",\n    \"Merge cells\": \"Combinar celdas\",\n    \"Horizontal split\": \"Divisi\\u00f3n horizontal\",\n    \"Vertical split\": \"Divisi\\u00f3n vertical\",\n    \"Cell Background\": \"Fondo de la celda\",\n    \"Vertical Align\": \"Alinear vertical\",\n    \"Top\": \"Cima\",\n    \"Middle\": \"Medio\",\n    \"Bottom\": \"Del fondo\",\n    \"Align Top\": \"Alinear a la parte superior\",\n    \"Align Middle\": \"Alinear media\",\n    \"Align Bottom\": \"Alinear abajo\",\n    \"Cell Style\": \"Estilo de celda\",\n\n    // Files\n    \"Upload File\": \"Subir archivo\",\n    \"Drop file\": \"Soltar archivo\",\n\n    // Emoticons\n    \"Emoticons\": \"Emoticones\",\n    \"Grinning face\": \"Sonriendo cara\",\n    \"Grinning face with smiling eyes\": \"Sonriendo cara con ojos sonrientes\",\n    \"Face with tears of joy\": \"Cara con l\\u00e1grimas de alegr\\u00eda\",\n    \"Smiling face with open mouth\": \"Cara sonriente con la boca abierta\",\n    \"Smiling face with open mouth and smiling eyes\": \"Cara sonriente con la boca abierta y los ojos sonrientes\",\n    \"Smiling face with open mouth and cold sweat\": \"Cara sonriente con la boca abierta y el sudor fr\\u00edo\",\n    \"Smiling face with open mouth and tightly-closed eyes\": \"Cara sonriente con la boca abierta y los ojos fuertemente cerrados\",\n    \"Smiling face with halo\": \"Cara sonriente con halo\",\n    \"Smiling face with horns\": \"Cara sonriente con cuernos\",\n    \"Winking face\": \"Gui\\u00f1o de la cara\",\n    \"Smiling face with smiling eyes\": \"Cara sonriente con ojos sonrientes\",\n    \"Face savoring delicious food\": \"Care saborear una deliciosa comida\",\n    \"Relieved face\": \"Cara Aliviado\",\n    \"Smiling face with heart-shaped eyes\": \"Cara sonriente con los ojos en forma de coraz\\u00f3n\",\n    \"Smiling face with sunglasses\": \"Cara sonriente con gafas de sol\",\n    \"Smirking face\": \"Sonriendo cara\",\n    \"Neutral face\": \"Cara neutral\",\n    \"Expressionless face\": \"Rostro inexpresivo\",\n    \"Unamused face\": \"Cara no divertido\",\n    \"Face with cold sweat\": \"Cara con sudor fr\\u00edo\",\n    \"Pensive face\": \"Rostro pensativo\",\n    \"Confused face\": \"Cara confusa\",\n    \"Confounded face\": \"Cara Averg\\u00fc\\u00e9ncense\",\n    \"Kissing face\": \"Besar la cara\",\n    \"Face throwing a kiss\": \"Cara lanzando un beso\",\n    \"Kissing face with smiling eyes\": \"Besar a cara con ojos sonrientes\",\n    \"Kissing face with closed eyes\": \"Besar a cara con los ojos cerrados\",\n    \"Face with stuck out tongue\": \"Cara con la lengua pegada\",\n    \"Face with stuck out tongue and winking eye\": \"Cara con pegado a la lengua y los ojos gui\\u00f1o\",\n    \"Face with stuck out tongue and tightly-closed eyes\": \"Cara con la lengua pegada a y los ojos fuertemente cerrados\",\n    \"Disappointed face\": \"Cara decepcionado\",\n    \"Worried face\": \"Cara de preocupaci\\u00f3n\",\n    \"Angry face\": \"Cara enojada\",\n    \"Pouting face\": \"Que pone mala cara\",\n    \"Crying face\": \"Cara llorando\",\n    \"Persevering face\": \"Perseverar cara\",\n    \"Face with look of triumph\": \"Cara con expresi\\u00f3n de triunfo\",\n    \"Disappointed but relieved face\": \"Decepcionado pero el rostro aliviado\",\n    \"Frowning face with open mouth\": \"Con el ce\\u00f1o fruncido la cara con la boca abierta\",\n    \"Anguished face\": \"Rostro angustiado\",\n    \"Fearful face\": \"Cara Temeroso\",\n    \"Weary face\": \"Rostro cansado\",\n    \"Sleepy face\": \"Rostro so\\u00f1oliento\",\n    \"Tired face\": \"Rostro cansado\",\n    \"Grimacing face\": \"Haciendo una mueca cara\",\n    \"Loudly crying face\": \"Llorando en voz alta la cara\",\n    \"Face with open mouth\": \"Cara con la boca abierta\",\n    \"Hushed face\": \"Cara callada\",\n    \"Face with open mouth and cold sweat\": \"Cara con la boca abierta y el sudor frío\",\n    \"Face screaming in fear\": \"Cara gritando de miedo\",\n    \"Astonished face\": \"Cara asombrosa\",\n    \"Flushed face\": \"Cara enrojecida\",\n    \"Sleeping face\": \"Rostro dormido\",\n    \"Dizzy face\": \"Cara Mareado\",\n    \"Face without mouth\": \"Cara sin boca\",\n    \"Face with medical mask\": \"Cara con la m\\u00e1scara m\\u00e9dica\",\n\n    // Line breaker\n    \"Break\": \"Romper\",\n\n    // Math\n    \"Subscript\": \"Sub\\u00edndice\",\n    \"Superscript\": \"Super\\u00edndice\",\n\n    // Full screen\n    \"Fullscreen\": \"Pantalla completa\",\n\n    // Horizontal line\n    \"Insert Horizontal Line\": \"Insertar l\\u00ednea horizontal\",\n\n    // Clear formatting\n    \"Clear Formatting\": \"Quitar el formato\",\n\n    // Save\n    \"Save\": \"Salvar\",\n\n    // Undo, redo\n    \"Undo\": \"Deshacer\",\n    \"Redo\": \"Rehacer\",\n\n    // Select all\n    \"Select All\": \"Seleccionar todo\",\n\n    // Code view\n    \"Code View\": \"Vista de c\\u00f3digo\",\n\n    // Quote\n    \"Quote\": \"Cita\",\n    \"Increase\": \"Aumentar\",\n    \"Decrease\": \"Disminuci\\u00f3n\",\n\n    // Quick Insert\n    \"Quick Insert\": \"Inserci\\u00f3n r\\u00e1pida\",\n\n    // Spcial Characters\n    \"Special Characters\": \"Caracteres especiales\",\n    \"Latin\": \"Latín\",\n    \"Greek\": \"Griego\",\n    \"Cyrillic\": \"Cirílico\",\n    \"Punctuation\": \"Puntuación\",\n    \"Currency\": \"Moneda\",\n    \"Arrows\": \"Flechas\",\n    \"Math\": \"Mates\",\n    \"Misc\": \"Misc\",\n\n    // Print.\n    \"Print\": \"Impresión\",\n\n    // Spell Checker.\n    \"Spell Checker\": \"Corrector ortográfico\",\n\n    // Help\n    \"Help\": \"Ayuda\",\n    \"Shortcuts\": \"Atajos\",\n    \"Inline Editor\": \"Editor en línea\",\n    \"Show the editor\": \"Mostrar al editor\",\n    \"Common actions\": \"Acciones comunes\",\n    \"Copy\": \"Dupdo\",\n    \"Cut\": \"Cortar\",\n    \"Paste\": \"Pegar\",\n    \"Basic Formatting\": \"Formato básico\",\n    \"Increase quote level\": \"Aumentar el nivel de cotización\",\n    \"Decrease quote level\": \"Disminuir el nivel de cotización\",\n    \"Image / Video\": \"Imagen / video\",\n    \"Resize larger\": \"Redimensionar más grande\",\n    \"Resize smaller\": \"Redimensionar más pequeño\",\n    \"Table\": \"Mesa\",\n    \"Select table cell\": \"Celda de tabla select\",\n    \"Extend selection one cell\": \"Ampliar la selección una celda\",\n    \"Extend selection one row\": \"Ampliar la selección una fila\",\n    \"Navigation\": \"Navegación\",\n    \"Focus popup / toolbar\": \"Focus popup / toolbar\",\n    \"Return focus to previous position\": \"Volver al foco a la posición anterior\",\n\n    // Embed.ly\n    \"Embed URL\": \"URL de inserción\",\n    \"Paste in a URL to embed\": \"Pegar en una url para incrustar\",\n\n    // Word Paste.\n    \"The pasted content is coming from a Microsoft Word document. Do you want to keep the format or clean it up?\": \"El contenido pegado viene de un documento de Microsoft Word. ¿Quieres mantener el formato o limpiarlo?\",\n    \"Keep\": \"Guardar\",\n    \"Clean\": \"Limpiar\",\n    \"Word Paste Detected\": \"Palabra detectada\"\n  },\n  direction: \"ltr\"\n};\n\n}));\n"
  },
  {
    "path": "src/main/resources/static/plugins/froala-editor/js/languages/et.js",
    "content": "/*!\n * froala_editor v2.9.1 (https://www.froala.com/wysiwyg-editor)\n * License https://froala.com/wysiwyg-editor/terms/\n * Copyright 2014-2018 Froala Labs\n */\n\n(function (factory) {\n    if (typeof define === 'function' && define.amd) {\n        // AMD. Register as an anonymous module.\n        define(['jquery'], factory);\n    } else if (typeof module === 'object' && module.exports) {\n        // Node/CommonJS\n        module.exports = function( root, jQuery ) {\n            if ( jQuery === undefined ) {\n                // require('jQuery') returns a factory that requires window to\n                // build a jQuery instance, we normalize how we use modules\n                // that require this pattern but the window provided is a noop\n                // if it's defined (how jquery works)\n                if ( typeof window !== 'undefined' ) {\n                    jQuery = require('jquery');\n                }\n                else {\n                    jQuery = require('jquery')(root);\n                }\n            }\n            return factory(jQuery);\n        };\n    } else {\n        // Browser globals\n        factory(window.jQuery);\n    }\n}(function ($) {\n/**\n * Estonian\n */\n\n$.FE.LANGUAGE['et'] = {\n  translation: {\n    // Place holder\n    \"Type something\": \"Kirjuta midagi\",\n\n    // Basic formatting\n    \"Bold\": \"Rasvane\",\n    \"Italic\": \"Kursiiv\",\n    \"Underline\": \"Allajoonitud\",\n    \"Strikethrough\": \"L\\u00e4bikriipsutatud\",\n\n    // Main buttons\n    \"Insert\": \"Lisa\",\n    \"Delete\": \"Kustuta\",\n    \"Cancel\": \"T\\u00fchista\",\n    \"OK\": \"OK\",\n    \"Back\": \"Tagasi\",\n    \"Remove\": \"Eemaldama\",\n    \"More\": \"Rohkem\",\n    \"Update\": \"Ajakohastama\",\n    \"Style\": \"Stiil\",\n\n    // Font\n    \"Font Family\": \"Fondi perekond\",\n    \"Font Size\": \"Fondi suurus\",\n\n    // Colors\n    \"Colors\": \"V\\u00e4rvid\",\n    \"Background\": \"Taust\",\n    \"Text\": \"Tekst\",\n    \"HEX Color\": \"Hex värvi\",\n\n    // Paragraphs\n    \"Paragraph Format\": \"Paragrahv formaat\",\n    \"Normal\": \"Normaalne\",\n    \"Code\": \"Kood\",\n    \"Heading 1\": \"P\\u00e4is 1\",\n    \"Heading 2\": \"P\\u00e4is 2\",\n    \"Heading 3\": \"P\\u00e4is 3\",\n    \"Heading 4\": \"P\\u00e4is 4\",\n\n    // Style\n    \"Paragraph Style\": \"Paragrahv stiil\",\n    \"Inline Style\": \"J\\u00e4rjekorras stiil\",\n\n    // Alignment\n    \"Align\": \"Joonda\",\n    \"Align Left\": \"Joonda vasakule\",\n    \"Align Center\": \"Joonda keskele\",\n    \"Align Right\": \"Joonda paremale\",\n    \"Align Justify\": \"R\\u00f6\\u00f6pjoondus\",\n    \"None\": \"Mitte \\u00fckski\",\n\n    // Lists\n    \"Ordered List\": \"Tellitud nimekirja\",\n    \"Unordered List\": \"Tavalise nimekirja\",\n\n    // Indent\n    \"Decrease Indent\": \"V\\u00e4henemine taane\",\n    \"Increase Indent\": \"Suurenda taanet\",\n\n    // Links\n    \"Insert Link\": \"Lisa link\",\n    \"Open in new tab\": \"Ava uues sakis\",\n    \"Open Link\": \"Avatud link\",\n    \"Edit Link\": \"Muuda link\",\n    \"Unlink\": \"Eemalda link\",\n    \"Choose Link\": \"Vali link\",\n\n    // Images\n    \"Insert Image\": \"Lisa pilt\",\n    \"Upload Image\": \"Laadige pilt\",\n    \"By URL\": \"Poolt URL\",\n    \"Browse\": \"sirvida\",\n    \"Drop image\": \"Aseta pilt\",\n    \"or click\": \"v\\u00f5i kliki\",\n    \"Manage Images\": \"Halda pilte\",\n    \"Loading\": \"Laadimine\",\n    \"Deleting\": \"Kustutamine\",\n    \"Tags\": \"Sildid\",\n    \"Are you sure? Image will be deleted.\": \"Oled sa kindel? Pilt kustutatakse.\",\n    \"Replace\": \"Asendama\",\n    \"Uploading\": \"Laadimise pilti\",\n    \"Loading image\": \"Laadimise pilti\",\n    \"Display\": \"Kuvama\",\n    \"Inline\": \"J\\u00e4rjekorras\",\n    \"Break Text\": \"Murdma teksti\",\n    \"Alternative Text\": \"Asendusliikme teksti\",\n    \"Change Size\": \"Muuda suurust\",\n    \"Width\": \"Laius\",\n    \"Height\": \"K\\u00f5rgus\",\n    \"Something went wrong. Please try again.\": \"Midagi l\\u00e4ks valesti. Palun proovi uuesti.\",\n    \"Image Caption\": \"Pildi pealkiri\",\n    \"Advanced Edit\": \"Täiustatud redigeerimine\",\n\n    // Video\n    \"Insert Video\": \"Lisa video\",\n    \"Embedded Code\": \"Varjatud koodi\",\n    \"Paste in a video URL\": \"Kleebi video URL-i\",\n    \"Drop video\": \"Tilk videot\",\n    \"Your browser does not support HTML5 video.\": \"Teie brauser ei toeta html5-videot.\",\n    \"Upload Video\": \"Video üleslaadimine\",\n\n    // Tables\n    \"Insert Table\": \"Sisesta tabel\",\n    \"Table Header\": \"Tabel p\\u00e4ise kaudu\",\n    \"Remove Table\": \"Eemalda tabel\",\n    \"Table Style\": \"Tabel stiili\",\n    \"Horizontal Align\": \"Horisontaalne joonda\",\n    \"Row\": \"Rida\",\n    \"Insert row above\": \"Sisesta rida \\u00fcles\",\n    \"Insert row below\": \"Sisesta rida alla\",\n    \"Delete row\": \"Kustuta rida\",\n    \"Column\": \"Veerg\",\n    \"Insert column before\": \"Sisesta veerg ette\",\n    \"Insert column after\": \"Sisesta veerg j\\u00e4rele\",\n    \"Delete column\": \"Kustuta veerg\",\n    \"Cell\": \"Lahter\",\n    \"Merge cells\": \"\\u00fchenda lahtrid\",\n    \"Horizontal split\": \"Poolita horisontaalselt\",\n    \"Vertical split\": \"Poolita vertikaalselt\",\n    \"Cell Background\": \"Lahter tausta\",\n    \"Vertical Align\": \"Vertikaalne joonda\",\n    \"Top\": \"\\u00fclemine\",\n    \"Middle\": \"Keskmine\",\n    \"Bottom\": \"P\\u00f5hi\",\n    \"Align Top\": \"Joonda \\u00fclemine\",\n    \"Align Middle\": \"Joonda keskmine\",\n    \"Align Bottom\": \"Joonda P\\u00f5hi\",\n    \"Cell Style\": \"Lahter stiili\",\n\n    // Files\n    \"Upload File\": \"Lae fail \\u00fcles\",\n    \"Drop file\": \"Aseta fail\",\n\n    // Emoticons\n    \"Emoticons\": \"Emotikonid\",\n    \"Grinning face\": \"Irvitas n\\u00e4kku\",\n    \"Grinning face with smiling eyes\": \"Irvitas n\\u00e4kku naeratavad silmad\",\n    \"Face with tears of joy\": \"N\\u00e4gu r\\u00f5\\u00f5mupisaratega\",\n    \"Smiling face with open mouth\": \"Naeratav n\\u00e4gu avatud suuga\",\n    \"Smiling face with open mouth and smiling eyes\": \"Naeratav n\\u00e4gu avatud suu ja naeratavad silmad\",\n    \"Smiling face with open mouth and cold sweat\": \"Naeratav n\\u00e4gu avatud suu ja k\\u00fclm higi\",\n    \"Smiling face with open mouth and tightly-closed eyes\": \"Naeratav n\\u00e4gu avatud suu ja tihedalt suletud silmad\",\n    \"Smiling face with halo\": \"Naeratav n\\u00e4gu halo\",\n    \"Smiling face with horns\": \"Naeratav n\\u00e4gu sarved\",\n    \"Winking face\": \"Pilgutab n\\u00e4gu\",\n    \"Smiling face with smiling eyes\": \"Naeratav n\\u00e4gu naeratab silmad\",\n    \"Face savoring delicious food\": \"N\\u00e4gu nautides maitsvat toitu\",\n    \"Relieved face\": \"P\\u00e4\\u00e4stetud n\\u00e4gu\",\n    \"Smiling face with heart-shaped eyes\": \"Naeratav n\\u00e4gu s\\u00fcdajas silmad\",\n    \"Smiling face with sunglasses\": \"Naeratav n\\u00e4gu p\\u00e4ikeseprillid\",\n    \"Smirking face\": \"Muigama n\\u00e4gu \",\n    \"Neutral face\": \"Neutraalne n\\u00e4gu\",\n    \"Expressionless face\": \"Ilmetu n\\u00e4gu\",\n    \"Unamused face\": \"Morn n\\u00e4gu\",\n    \"Face with cold sweat\": \"N\\u00e4gu k\\u00fclma higiga\",\n    \"Pensive face\": \"M\\u00f5tlik n\\u00e4gu\",\n    \"Confused face\": \"Segaduses n\\u00e4gu\",\n    \"Confounded face\": \"Segas n\\u00e4gu\",\n    \"Kissing face\": \"Suudlevad n\\u00e4gu\",\n    \"Face throwing a kiss\": \"N\\u00e4gu viskamine suudlus\",\n    \"Kissing face with smiling eyes\": \"Suudlevad n\\u00e4gu naeratab silmad\",\n    \"Kissing face with closed eyes\": \"Suudlevad n\\u00e4gu, silmad kinni\",\n    \"Face with stuck out tongue\": \"N\\u00e4gu ummikus v\\u00e4lja keele\",\n    \"Face with stuck out tongue and winking eye\": \"N\\u00e4gu ummikus v\\u00e4lja keele ja silma pilgutav silma\",\n    \"Face with stuck out tongue and tightly-closed eyes\": \"N\\u00e4gu ummikus v\\u00e4lja keele ja silmad tihedalt suletuna\",\n    \"Disappointed face\": \"Pettunud n\\u00e4gu\",\n    \"Worried face\": \"Mures n\\u00e4gu\",\n    \"Angry face\": \"Vihane n\\u00e4gu\",\n    \"Pouting face\": \"Tursik n\\u00e4gu\",\n    \"Crying face\": \"Nutt n\\u00e4gu\",\n    \"Persevering face\": \"Püsiv n\\u00e4gu\",\n    \"Face with look of triumph\": \"N\\u00e4gu ilme triumf\",\n    \"Disappointed but relieved face\": \"Pettunud kuid vabastati n\\u00e4gu\",\n    \"Frowning face with open mouth\": \"Kulmukortsutav n\\u00e4gu avatud suuga\",\n    \"Anguished face\": \"Ahastavad n\\u00e4gu\",\n    \"Fearful face\": \"Hirmunult n\\u00e4gu\",\n    \"Weary face\": \"Grimasse\",\n    \"Sleepy face\": \"Unine n\\u00e4gu\",\n    \"Tired face\": \"V\\u00e4sinud n\\u00e4gu\",\n    \"Grimacing face\": \"Grimassitavaks n\\u00e4gu\",\n    \"Loudly crying face\": \"Valjusti nutma n\\u00e4gu\",\n    \"Face with open mouth\": \"N\\u00e4gu avatud suuga\",\n    \"Hushed face\": \"Raskel n\\u00e4gu\",\n    \"Face with open mouth and cold sweat\": \"N\\u00e4gu avatud suu ja k\\u00fclm higi\",\n    \"Face screaming in fear\": \"N\\u00e4gu karjuvad hirm\",\n    \"Astonished face\": \"Lummatud n\\u00e4gu\",\n    \"Flushed face\": \"Punetav n\\u00e4gu\",\n    \"Sleeping face\": \"Uinuv n\\u00e4gu\",\n    \"Dizzy face\": \"Uimane n\\u00fcgu\",\n    \"Face without mouth\": \"N\\u00e4gu ilma suu\",\n    \"Face with medical mask\": \"N\\u00e4gu meditsiinilise mask\",\n\n    // Line breaker\n    \"Break\": \"Murdma\",\n\n    // Math\n    \"Subscript\": \"Allindeks\",\n    \"Superscript\": \"\\u00dclaindeks\",\n\n    // Full screen\n    \"Fullscreen\": \"T\\u00e4isekraanil\",\n\n    // Horizontal line\n    \"Insert Horizontal Line\": \"Sisesta horisontaalne joon\",\n\n    // Clear formatting\n    \"Clear Formatting\": \"Eemalda formaatimine\",\n\n    // Save\n    \"Save\": \"Salvesta\",\n\n    // Undo, redo\n    \"Undo\": \"V\\u00f5ta tagasi\",\n    \"Redo\": \"Tee uuesti\",\n\n    // Select all\n    \"Select All\": \"Vali k\\u00f5ik\",\n\n    // Code view\n    \"Code View\": \"Koodi vaadata\",\n\n    // Quote\n    \"Quote\": \"Tsitaat\",\n    \"Increase\": \"Suurendama\",\n    \"Decrease\": \"V\\u00e4henda\",\n\n    // Quick Insert\n    \"Quick Insert\": \"Kiire sisestada\",\n\n    // Spcial Characters\n    \"Special Characters\": \"Erimärgid\",\n    \"Latin\": \"Latin\",\n    \"Greek\": \"Kreeka keel\",\n    \"Cyrillic\": \"Kirillitsa\",\n    \"Punctuation\": \"Kirjavahemärgid\",\n    \"Currency\": \"Valuuta\",\n    \"Arrows\": \"Nooled\",\n    \"Math\": \"Matemaatika\",\n    \"Misc\": \"Misc\",\n\n    // Print.\n    \"Print\": \"Printige\",\n\n    // Spell Checker.\n    \"Spell Checker\": \"Õigekirja kontrollija\",\n\n    // Help\n    \"Help\": \"Abi\",\n    \"Shortcuts\": \"Otseteed\",\n    \"Inline Editor\": \"Sisemine redaktor\",\n    \"Show the editor\": \"Näita redaktorit\",\n    \"Common actions\": \"Ühised meetmed\",\n    \"Copy\": \"Koopia\",\n    \"Cut\": \"Lõigake\",\n    \"Paste\": \"Kleepige\",\n    \"Basic Formatting\": \"Põhiline vormindamine\",\n    \"Increase quote level\": \"Suurendada tsiteerimise taset\",\n    \"Decrease quote level\": \"Langetada tsiteerimise tase\",\n    \"Image / Video\": \"Pilt / video\",\n    \"Resize larger\": \"Suuruse muutmine suurem\",\n    \"Resize smaller\": \"Väiksema suuruse muutmine\",\n    \"Table\": \"Laud\",\n    \"Select table cell\": \"Vali tabeli lahtrisse\",\n    \"Extend selection one cell\": \"Laiendage valikut üks lahtrisse\",\n    \"Extend selection one row\": \"Laiendage valikut ühe reana\",\n    \"Navigation\": \"Navigeerimine\",\n    \"Focus popup / toolbar\": \"Fookuse hüpikakna / tööriistariba\",\n    \"Return focus to previous position\": \"Tagasi pöörata tähelepanu eelmisele positsioonile\",\n\n    // Embed.ly\n    \"Embed URL\": \"Embed url\",\n    \"Paste in a URL to embed\": \"Kleepige URL-i sisestamiseks\",\n\n    // Word Paste.\n    \"The pasted content is coming from a Microsoft Word document. Do you want to keep the format or clean it up?\": \"Kleepitud sisu pärineb Microsoft Wordi dokumendist. kas soovite vormi säilitada või puhastada?\",\n    \"Keep\": \"Pidage seda\",\n    \"Clean\": \"Puhas\",\n    \"Word Paste Detected\": \"Avastatud sõna pasta\"\n  },\n  direction: \"ltr\"\n};\n\n}));\n"
  },
  {
    "path": "src/main/resources/static/plugins/froala-editor/js/languages/fa.js",
    "content": "/*!\n * froala_editor v2.9.1 (https://www.froala.com/wysiwyg-editor)\n * License https://froala.com/wysiwyg-editor/terms/\n * Copyright 2014-2018 Froala Labs\n */\n\n(function (factory) {\n    if (typeof define === 'function' && define.amd) {\n        // AMD. Register as an anonymous module.\n        define(['jquery'], factory);\n    } else if (typeof module === 'object' && module.exports) {\n        // Node/CommonJS\n        module.exports = function( root, jQuery ) {\n            if ( jQuery === undefined ) {\n                // require('jQuery') returns a factory that requires window to\n                // build a jQuery instance, we normalize how we use modules\n                // that require this pattern but the window provided is a noop\n                // if it's defined (how jquery works)\n                if ( typeof window !== 'undefined' ) {\n                    jQuery = require('jquery');\n                }\n                else {\n                    jQuery = require('jquery')(root);\n                }\n            }\n            return factory(jQuery);\n        };\n    } else {\n        // Browser globals\n        factory(window.jQuery);\n    }\n}(function ($) {\n/**\n * Persian\n */\n\n$.FE.LANGUAGE['fa'] = {\n  translation: {\n    // Place holder\n    \"Type something\": \"\\u0686\\u06cc\\u0632\\u06cc \\u0628\\u0646\\u0648\\u06cc\\u0633\\u06cc\\u062f\",\n\n    // Basic formatting\n    \"Bold\": \"ضخیم\",\n    \"Italic\": \"خط کج\",\n    \"Underline\": \"خط زیر\",\n    \"Strikethrough\": \"\\u062e\\u0637 \\u062e\\u0648\\u0631\\u062f\\u0647\",\n\n    // Main buttons\n    \"Insert\": \"\\u0627\\u0636\\u0627\\u0641\\u0647 \\u06a9\\u0631\\u062f\\u0646\",\n    \"Delete\": \"\\u062d\\u0630\\u0641 \\u06a9\\u0631\\u062f\\u0646\",\n    \"Cancel\": \"\\u0644\\u063a\\u0648\",\n    \"OK\": \"\\u0628\\u0627\\u0634\\u0647\",\n    \"Back\": \"\\u0628\\u0647 \\u0639\\u0642\\u0628\",\n    \"Remove\": \"\\u0628\\u0631\\u062f\\u0627\\u0634\\u062a\\u0646\",\n    \"More\": \"\\u0628\\u06cc\\u0634\\u062a\\u0631\",\n    \"Update\": \"\\u0628\\u0647 \\u0631\\u0648\\u0632 \\u0631\\u0633\\u0627\\u0646\\u06cc\",\n    \"Style\": \"\\u0633\\u0628\\u06a9\",\n\n    // Font\n    \"Font Family\": \"\\u0642\\u0644\\u0645\",\n    \"Font Size\": \"\\u0627\\u0646\\u062f\\u0627\\u0632\\u0647 \\u0642\\u0644\\u0645\",\n\n    // Colors\n    \"Colors\": \"\\u0631\\u0646\\u06af\",\n    \"Background\": \"\\u0632\\u0645\\u06cc\\u0646\\u0647 \\u0645\\u062a\\u0646\",\n    \"Text\": \"\\u0645\\u062a\\u0646\",\n    \"HEX Color\": \"کد رنگ\",\n\n    // Paragraphs\n    \"Paragraph Format\": \"\\u0642\\u0627\\u0644\\u0628\",\n    \"Normal\": \"\\u0637\\u0628\\u06cc\\u0639\\u06cc - Normal\",\n    \"Code\": \"\\u062f\\u0633\\u062a\\u0648\\u0631\\u0627\\u0644\\u0639\\u0645\\u0644\\u0647\\u0627 - Code\",\n    \"Heading 1\": \"\\u0633\\u0631\\u200c\\u0635\\u0641\\u062d\\u0647 1\",\n    \"Heading 2\": \"\\u0633\\u0631\\u200c\\u0635\\u0641\\u062d\\u0647 2\",\n    \"Heading 3\": \"\\u0633\\u0631\\u200c\\u0635\\u0641\\u062d\\u0647 3\",\n    \"Heading 4\": \"\\u0633\\u0631\\u200c\\u0635\\u0641\\u062d\\u0647 4\",\n\n    // Style\n    \"Paragraph Style\": \"\\u067e\\u0627\\u0631\\u0627\\u06af\\u0631\\u0627\\u0641 \\u0633\\u0628\\u06a9\",\n    \"Inline Style\": \"\\u062e\\u0637\\u06cc \\u0633\\u0628\\u06a9\",\n\n    // Alignment\n    \"Align\": \"\\u0631\\u062f\\u06cc\\u0641 \\u0628\\u0646\\u062f\\u06cc \\u0646\\u0648\\u0634\\u062a\\u0647\",\n    \"Align Left\": \"\\u0686\\u067e \\u0686\\u06cc\\u0646\",\n    \"Align Center\": \"\\u0648\\u0633\\u0637 \\u0686\\u06cc\\u0646\",\n    \"Align Right\": \"\\u0631\\u0627\\u0633\\u062a \\u0686\\u06cc\\u0646\",\n    \"Align Justify\": \"\\u0645\\u0633\\u0627\\u0648\\u06cc \\u0627\\u0632 \\u0637\\u0631\\u0641\\u06cc\\u0646\",\n    \"None\": \"\\u0647\\u06cc\\u0686\",\n\n    // Lists\n    \"Ordered List\": \"\\u0644\\u06cc\\u0633\\u062a \\u0634\\u0645\\u0627\\u0631\\u0647 \\u0627\\u06cc\",\n    \"Unordered List\": \"\\u0644\\u06cc\\u0633\\u062a \\u062f\\u0627\\u06cc\\u0631\\u0647 \\u0627\\u06cc\",\n\n    // Indent\n    \"Decrease Indent\": \"\\u06a9\\u0627\\u0647\\u0634 \\u062a\\u0648 \\u0631\\u0641\\u062a\\u06af\\u06cc\",\n    \"Increase Indent\": \"\\u0627\\u0641\\u0632\\u0627\\u06cc\\u0634 \\u062a\\u0648 \\u0631\\u0641\\u062a\\u06af\\u06cc\",\n\n    // Links\n    \"Insert Link\": \"\\u0627\\u0636\\u0627\\u0641\\u0647 \\u06a9\\u0631\\u062f\\u0646 \\u0644\\u06cc\\u0646\\u06a9\",\n    \"Open in new tab\": \"\\u0628\\u0627\\u0632 \\u06a9\\u0631\\u062f\\u0646 \\u062f\\u0631 \\u0628\\u0631\\u06af\\u0647 \\u062c\\u062f\\u06cc\\u062f\",\n    \"Open Link\": \"\\u0644\\u06cc\\u0646\\u06a9 \\u0647\\u0627\\u06cc \\u0628\\u0627\\u0632\",\n    \"Edit Link\": \"\\u0644\\u06cc\\u0646\\u06a9 \\u0648\\u06cc\\u0631\\u0627\\u06cc\\u0634\",\n    \"Unlink\": \"\\u062d\\u0630\\u0641 \\u0644\\u06cc\\u0646\\u06a9\",\n    \"Choose Link\": \"\\u0644\\u06cc\\u0646\\u06a9 \\u0631\\u0627 \\u0627\\u0646\\u062a\\u062e\\u0627\\u0628 \\u06a9\\u0646\\u06cc\\u062f\",\n\n    // Images\n    \"Insert Image\": \"\\u0627\\u0636\\u0627\\u0641\\u0647 \\u06a9\\u0631\\u062f\\u0646 \\u062a\\u0635\\u0648\\u06cc\\u0631\",\n    \"Upload Image\": \"\\u0622\\u067e\\u0644\\u0648\\u062f \\u062a\\u0635\\u0648\\u06cc\\u0631\",\n    \"By URL\": \"URL \\u062a\\u0648\\u0633\\u0637\",\n    \"Browse\": \"\\u0641\\u0647\\u0631\\u0633\\u062a\",\n    \"Drop image\": \"\\u062a\\u0635\\u0648\\u06cc\\u0631 \\u0631\\u0627 \\u0627\\u06cc\\u0646\\u062c\\u0627 \\u0628\\u06cc\\u0646\\u062f\\u0627\\u0632\\u06cc\\u062f\",\n    \"or click\": \"\\u06cc\\u0627 \\u06a9\\u0644\\u06cc\\u06a9 \\u06a9\\u0646\\u06cc\\u062f\",\n    \"Manage Images\": \"\\u0645\\u062f\\u06cc\\u0631\\u06cc\\u062a \\u062a\\u0635\\u0627\\u0648\\u06cc\\u0631\",\n    \"Loading\": \"\\u0628\\u0627\\u0631\\u06af\\u06cc\\u0631\\u06cc\",\n    \"Deleting\": \"\\u062d\\u0630\\u0641\",\n    \"Tags\": \"\\u0628\\u0631\\u0686\\u0633\\u0628 \\u0647\\u0627\",\n    \"Are you sure? Image will be deleted.\": \".\\u0622\\u06cc\\u0627 \\u0645\\u0637\\u0645\\u0626\\u0646 \\u0647\\u0633\\u062a\\u06cc\\u062f\\u061f \\u062a\\u0635\\u0648\\u06cc\\u0631 \\u062d\\u0630\\u0641 \\u062e\\u0648\\u0627\\u0647\\u062f \\u0634\\u062f\",\n    \"Replace\": \"\\u062c\\u0627\\u06cc\\u06af\\u0632\\u06cc\\u0646 \\u06a9\\u0631\\u062f\\u0646\",\n    \"Uploading\": \"\\u0622\\u067e\\u0644\\u0648\\u062f\",\n    \"Loading image\": \"\\u0628\\u0627\\u0631\\u06af\\u0630\\u0627\\u0631\\u06cc \\u062a\\u0635\\u0648\\u06cc\\u0631\",\n    \"Display\": \"\\u0646\\u0634\\u0627\\u0646 \\u062f\\u0627\\u062f\\u0646\",\n    \"Inline\": \"\\u062e\\u0637\\u06cc\",\n    \"Break Text\": \"\\u0634\\u06a9\\u0633\\u062a\\u0646 \\u0627\\u0633\\u062a\\u0631\\u0627\\u062d\\u062a\",\n    \"Alternative Text\": \"\\u0645\\u062a\\u0646 \\u062c\\u0627\\u06cc\\u06af\\u0632\\u06cc\\u0646\",\n    \"Change Size\": \"\\u062a\\u063a\\u06cc\\u06cc\\u0631 \\u0627\\u0646\\u062f\\u0627\\u0632\\u0647\",\n    \"Width\": \"\\u0639\\u0631\\u0636\",\n    \"Height\": \"\\u0627\\u0631\\u062a\\u0641\\u0627\\u0639\",\n    \"Something went wrong. Please try again.\": \"خطایی رخ داده است ، لطفا مجددا تلاش کنید\",\n    \"Image Caption\": \"عنوان تصویر\",\n    \"Advanced Edit\": \"ویرایش پیشرفته\",\n\n    // Video\n    \"Insert Video\": \"\\u0627\\u0636\\u0627\\u0641\\u0647 \\u06a9\\u0631\\u062f\\u0646 \\u0641\\u0627\\u06cc\\u0644 \\u062a\\u0635\\u0648\\u06cc\\u0631\\u06cc\",\n    \"Embedded Code\": \"\\u06a9\\u062f \\u062c\\u0627\\u0633\\u0627\\u0632\\u06cc \\u0634\\u062f\\u0647\",\n    \"Paste in a video URL\": \"در URL ویدیو وارد کنید\",\n    \"Drop video\": \"رها کردن ویدیو\",\n    \"Your browser does not support HTML5 video.\": \"مرورگر شما ویدیو HTML5 را پشتیبانی نمی کند.\",\n    \"Upload Video\": \"آپلود ویدیو\",\n\n    // Tables\n    \"Insert Table\": \"\\u0627\\u0636\\u0627\\u0641\\u0647 \\u06a9\\u0631\\u062f\\u0646 \\u062c\\u062f\\u0648\\u0644\",\n    \"Table Header\": \"\\u0647\\u062f\\u0631 \\u062c\\u062f\\u0648\\u0644\",\n    \"Remove Table\": \"\\u062d\\u0630\\u0641 \\u062c\\u062f\\u0648\\u0644\",\n    \"Table Style\": \"\\u0633\\u0628\\u06a9 \\u062c\\u062f\\u0648\\u0644\",\n    \"Horizontal Align\": \"\\u062a\\u0646\\u0638\\u06cc\\u0645 \\u0627\\u0641\\u0642\\u06cc\",\n    \"Row\": \"\\u0633\\u0637\\u0631\",\n    \"Insert row above\": \"\\u062f\\u0631\\u062c \\u0631\\u062f\\u06cc\\u0641 \\u062f\\u0631 \\u0628\\u0627\\u0644\\u0627\",\n    \"Insert row below\": \"\\u0633\\u0637\\u0631 \\u0632\\u06cc\\u0631 \\u0631\\u0627 \\u0648\\u0627\\u0631\\u062f \\u06a9\\u0646\\u06cc\\u062f\",\n    \"Delete row\": \"\\u062d\\u0630\\u0641 \\u0633\\u0637\\u0631\",\n    \"Column\": \"\\u0633\\u062a\\u0648\\u0646\",\n    \"Insert column before\": \"\\u062f\\u0631\\u062c \\u0633\\u062a\\u0648\\u0646 \\u0642\\u0628\\u0644\",\n    \"Insert column after\": \"\\u062f\\u0631\\u062c \\u0633\\u062a\\u0648\\u0646 \\u0628\\u0639\\u062f\",\n    \"Delete column\": \"\\u062d\\u0630\\u0641 \\u0633\\u062a\\u0648\\u0646\",\n    \"Cell\": \"\\u0633\\u0644\\u0648\\u0644\",\n    \"Merge cells\": \"\\u0627\\u062f\\u063a\\u0627\\u0645 \\u0633\\u0644\\u0648\\u0644\\u200c\\u0647\\u0627\",\n    \"Horizontal split\": \"\\u062a\\u0642\\u0633\\u06cc\\u0645 \\u0627\\u0641\\u0642\\u06cc\",\n    \"Vertical split\": \"\\u062a\\u0642\\u0633\\u06cc\\u0645 \\u0639\\u0645\\u0648\\u062f\\u06cc\",\n    \"Cell Background\": \"\\u067e\\u0633 \\u0632\\u0645\\u06cc\\u0646\\u0647 \\u0647\\u0645\\u0631\\u0627\\u0647\",\n    \"Vertical Align\": \"\\u0631\\u062f\\u06cc\\u0641 \\u0639\\u0645\\u0648\\u062f\\u06cc\",\n    \"Top\": \"\\u0628\\u0627\\u0644\\u0627\",\n    \"Middle\": \"\\u0645\\u062a\\u0648\\u0633\\u0637\",\n    \"Bottom\": \"\\u067e\\u0627\\u06cc\\u06cc\\u0646\",\n    \"Align Top\": \"\\u062a\\u0631\\u0627\\u0632 \\u0628\\u0627\\u0644\\u0627\\u06cc\",\n    \"Align Middle\": \"\\u062a\\u0631\\u0627\\u0632 \\u0648\\u0633\\u0637\",\n    \"Align Bottom\": \"\\u062a\\u0631\\u0627\\u0632 \\u067e\\u0627\\u06cc\\u06cc\\u0646\",\n    \"Cell Style\": \"\\u0633\\u0628\\u06a9 \\u0647\\u0627\\u06cc \\u0647\\u0645\\u0631\\u0627\\u0647\",\n\n    // Files\n    \"Upload File\": \"\\u0622\\u067e\\u0644\\u0648\\u062f \\u0641\\u0627\\u06cc\\u0644\",\n    \"Drop file\": \"\\u0627\\u0641\\u062a \\u0641\\u0627\\u06cc\\u0644\",\n\n    // Emoticons\n    \"Emoticons\": \"\\u0634\\u06a9\\u0644\\u06a9 \\u0647\\u0627\",\n    \"Grinning face\": \"\\u0686\\u0647\\u0631\\u0647 \\u067e\\u0648\\u0632\\u062e\\u0646\\u062f\",\n    \"Grinning face with smiling eyes\": \"\\u0686\\u0647\\u0631\\u0647 \\u067e\\u0648\\u0632\\u062e\\u0646\\u062f \\u0628\\u0627 \\u0686\\u0634\\u0645\\u0627\\u0646 \\u062e\\u0646\\u062f\\u0627\\u0646\",\n    \"Face with tears of joy\": \"\\u0686\\u0647\\u0631\\u0647 \\u0628\\u0627 \\u0627\\u0634\\u06a9 \\u0634\\u0627\\u062f\\u06cc\",\n    \"Smiling face with open mouth\": \"\\u0686\\u0647\\u0631\\u0647 \\u062e\\u0646\\u062f\\u0627\\u0646 \\u0628\\u0627 \\u062f\\u0647\\u0627\\u0646 \\u0628\\u0627\\u0632\",\n    \"Smiling face with open mouth and smiling eyes\": \"\\u0686\\u0647\\u0631\\u0647 \\u062e\\u0646\\u062f\\u0627\\u0646 \\u0628\\u0627 \\u062f\\u0647\\u0627\\u0646 \\u0628\\u0627\\u0632 \\u0648 \\u062e\\u0646\\u062f\\u0627\\u0646 \\u0686\\u0634\\u0645\",\n    \"Smiling face with open mouth and cold sweat\": \"\\u0686\\u0647\\u0631\\u0647 \\u062e\\u0646\\u062f\\u0627\\u0646 \\u0628\\u0627 \\u062f\\u0647\\u0627\\u0646 \\u0628\\u0627\\u0632 \\u0648 \\u0639\\u0631\\u0642 \\u0633\\u0631\\u062f\",\n    \"Smiling face with open mouth and tightly-closed eyes\": \"\\u0686\\u0647\\u0631\\u0647 \\u062e\\u0646\\u062f\\u0627\\u0646 \\u0628\\u0627 \\u062f\\u0647\\u0627\\u0646 \\u0628\\u0627\\u0632 \\u0648 \\u0686\\u0634\\u0645 \\u062f\\u0631\\u0628\\u062f\\u0627\\u0631\",\n    \"Smiling face with halo\": \"\\u0686\\u0647\\u0631\\u0647 \\u062e\\u0646\\u062f\\u0627\\u0646 \\u0628\\u0627 \\u0647\\u0627\\u0644\\u0647\",\n    \"Smiling face with horns\": \"\\u0686\\u0647\\u0631\\u0647 \\u062e\\u0646\\u062f\\u0627\\u0646 \\u0628\\u0627 \\u0634\\u0627\\u062e\",\n    \"Winking face\": \"\\u062d\\u0631\\u06a9\\u062a \\u067e\\u0630\\u06cc\\u0631\\u06cc\",\n    \"Smiling face with smiling eyes\": \"\\u0686\\u0647\\u0631\\u0647 \\u062e\\u0646\\u062f\\u0627\\u0646 \\u0628\\u0627 \\u0686\\u0634\\u0645 \\u0644\\u0628\\u062e\\u0646\\u062f\",\n    \"Face savoring delicious food\": \"\\u0686\\u0647\\u0631\\u0647 \\u0644\\u0630\\u06cc\\u0630 \\u063a\\u0630\\u0627\\u06cc \\u062e\\u0648\\u0634\\u0645\\u0632\\u0647\",\n    \"Relieved face\": \"\\u0686\\u0647\\u0631\\u0647 \\u0631\\u0647\\u0627\",\n    \"Smiling face with heart-shaped eyes\": \"\\u0686\\u0647\\u0631\\u0647 \\u062e\\u0646\\u062f\\u0627\\u0646 \\u0628\\u0627 \\u0686\\u0634\\u0645 \\u0628\\u0647 \\u0634\\u06a9\\u0644 \\u0642\\u0644\\u0628\",\n    \"Smiling face with sunglasses\": \"\\u0686\\u0647\\u0631\\u0647 \\u062e\\u0646\\u062f\\u0627\\u0646 \\u0628\\u0627 \\u0639\\u06cc\\u0646\\u06a9 \\u0622\\u0641\\u062a\\u0627\\u0628\\u06cc\",\n    \"Smirking face\": \"\\u067e\\u0648\\u0632\\u062e\\u0646\\u062f \\u0686\\u0647\\u0631\\u0647\",\n    \"Neutral face\": \"\\u0686\\u0647\\u0631\\u0647 \\u0647\\u0627\\u06cc \\u062e\\u0646\\u062b\\u06cc\",\n    \"Expressionless face\": \"\\u0686\\u0647\\u0631\\u0647 \\u0646\\u0627\\u06af\\u0648\\u06cc\\u0627\",\n    \"Unamused face\": \"\\u0686\\u0647\\u0631\\u0647 \\u062e\\u0648\\u0634\\u062d\\u0627\\u0644 \\u0646\\u06cc\\u0633\\u062a\",\n    \"Face with cold sweat\": \"\\u0686\\u0647\\u0631\\u0647 \\u0628\\u0627 \\u0639\\u0631\\u0642 \\u0633\\u0631\\u062f\",\n    \"Pensive face\": \"\\u0686\\u0647\\u0631\\u0647 \\u0627\\u0641\\u0633\\u0631\\u062f\\u0647\",\n    \"Confused face\": \"\\u0686\\u0647\\u0631\\u0647 \\u0627\\u0634\\u062a\\u0628\\u0627\\u0647\",\n    \"Confounded face\": \"\\u0686\\u0647\\u0631\\u0647 \\u0633\\u0631 \\u062f\\u0631 \\u06af\\u0645\",\n    \"Kissing face\": \"\\u0628\\u0648\\u0633\\u06cc\\u062f\\u0646 \\u0635\\u0648\\u0631\\u062a\",\n    \"Face throwing a kiss\": \"\\u0686\\u0647\\u0631\\u0647 \\u067e\\u0631\\u062a\\u0627\\u0628 \\u06cc\\u06a9 \\u0628\\u0648\\u0633\\u0647\",\n    \"Kissing face with smiling eyes\": \"\\u0628\\u0648\\u0633\\u06cc\\u062f\\u0646 \\u0686\\u0647\\u0631\\u0647 \\u0628\\u0627 \\u0686\\u0634\\u0645 \\u0644\\u0628\\u062e\\u0646\\u062f\",\n    \"Kissing face with closed eyes\": \"\\u0628\\u0648\\u0633\\u06cc\\u062f\\u0646 \\u0635\\u0648\\u0631\\u062a \\u0628\\u0627 \\u0686\\u0634\\u0645\\u0627\\u0646 \\u0628\\u0633\\u062a\\u0647\",\n    \"Face with stuck out tongue\": \"\\u0686\\u0647\\u0631\\u0647 \\u0628\\u0627 \\u06af\\u06cc\\u0631 \\u06a9\\u0631\\u062f\\u0646 \\u0632\\u0628\\u0627\\u0646\",\n    \"Face with stuck out tongue and winking eye\": \"\\u0686\\u0647\\u0631\\u0647 \\u0628\\u0627 \\u0632\\u0628\\u0627\\u0646 \\u06af\\u06cc\\u0631 \\u06a9\\u0631\\u062f\\u0646 \\u0648 \\u062d\\u0631\\u06a9\\u062a \\u0686\\u0634\\u0645\",\n    \"Face with stuck out tongue and tightly-closed eyes\": \"\\u0635\\u0648\\u0631\\u062a \\u0628\\u0627 \\u0632\\u0628\\u0627\\u0646 \\u06af\\u06cc\\u0631 \\u06a9\\u0631\\u062f\\u0646 \\u0648 \\u0686\\u0634\\u0645 \\u0631\\u0627 \\u0645\\u062d\\u06a9\\u0645 \\u0628\\u0633\\u062a\\u0647\",\n    \"Disappointed face\": \"\\u0686\\u0647\\u0631\\u0647 \\u0646\\u0627 \\u0627\\u0645\\u06cc\\u062f\",\n    \"Worried face\": \"\\u0686\\u0647\\u0631\\u0647 \\u0646\\u06af\\u0631\\u0627\\u0646\",\n    \"Angry face\": \"\\u0686\\u0647\\u0631\\u0647 \\u0639\\u0635\\u0628\\u0627\\u0646\\u06cc\",\n    \"Pouting face\": \"\\u0628\\u063a \\u0686\\u0647\\u0631\\u0647\",\n    \"Crying face\": \"\\u06af\\u0631\\u06cc\\u0647 \\u0686\\u0647\\u0631\\u0647\",\n    \"Persevering face\": \"\\u067e\\u0627\\u06cc\\u062f\\u0627\\u0631\\u06cc \\u0686\\u0647\\u0631\\u0647\",\n    \"Face with look of triumph\": \"\\u0686\\u0647\\u0631\\u0647 \\u0628\\u0627 \\u0646\\u06af\\u0627\\u0647\\u06cc \\u0627\\u0632 \\u067e\\u06cc\\u0631\\u0648\\u0632\\u06cc\",\n    \"Disappointed but relieved face\": \"\\u0646\\u0627 \\u0627\\u0645\\u06cc\\u062f \\u0627\\u0645\\u0627 \\u0622\\u0633\\u0648\\u062f\\u0647 \\u0686\\u0647\\u0631\\u0647\",\n    \"Frowning face with open mouth\": \"\\u0627\\u062e\\u0645 \\u0635\\u0648\\u0631\\u062a \\u0628\\u0627 \\u062f\\u0647\\u0627\\u0646 \\u0628\\u0627\\u0632\",\n    \"Anguished face\": \"\\u0686\\u0647\\u0631\\u0647 \\u0646\\u06af\\u0631\\u0627\\u0646\",\n    \"Fearful face\": \"\\u0686\\u0647\\u0631\\u0647 \\u062a\\u0631\\u0633\",\n    \"Weary face\": \"\\u0686\\u0647\\u0631\\u0647 \\u062e\\u0633\\u062a\\u0647\",\n    \"Sleepy face\": \"\\u0686\\u0647\\u0631\\u0647 \\u062e\\u0648\\u0627\\u0628 \\u0622\\u0644\\u0648\\u062f\",\n    \"Tired face\": \"\\u0686\\u0647\\u0631\\u0647 \\u062e\\u0633\\u062a\\u0647\",\n    \"Grimacing face\": \"\\u0627\\u0634 \\u0686\\u0647\\u0631\\u0647\",\n    \"Loudly crying face\": \"\\u0646\\u062f\\u0627\\u06cc\\u06cc \\u0631\\u0633\\u0627 \\u06af\\u0631\\u06cc\\u0647 \\u0686\\u0647\\u0631\\u0647\",\n    \"Face with open mouth\": \"\\u0686\\u0647\\u0631\\u0647 \\u0628\\u0627 \\u062f\\u0647\\u0627\\u0646 \\u0628\\u0627\\u0632\",\n    \"Hushed face\": \"\\u0686\\u0647\\u0631\\u0647 \\u0633\\u06a9\\u0648\\u062a\",\n    \"Face with open mouth and cold sweat\": \"\\u0686\\u0647\\u0631\\u0647 \\u0628\\u0627 \\u062f\\u0647\\u0627\\u0646 \\u0628\\u0627\\u0632 \\u0648 \\u0639\\u0631\\u0642 \\u0633\\u0631\\u062f\",\n    \"Face screaming in fear\": \"\\u0686\\u0647\\u0631\\u0647 \\u062c\\u06cc\\u063a \\u062f\\u0631 \\u062a\\u0631\\u0633\",\n    \"Astonished face\": \"\\u0686\\u0647\\u0631\\u0647 \\u0634\\u06af\\u0641\\u062a \\u0632\\u062f\\u0647\",\n    \"Flushed face\": \"\\u0686\\u0647\\u0631\\u0647 \\u0628\\u0631\\u0627\\u0641\\u0631\\u0648\\u062e\\u062a\\u0647\",\n    \"Sleeping face\": \"\\u062e\\u0648\\u0627\\u0628 \\u0686\\u0647\\u0631\\u0647\",\n    \"Dizzy face\": \"\\u0686\\u0647\\u0631\\u0647 \\u062f\\u06cc\\u0632\\u06cc\",\n    \"Face without mouth\": \"\\u0686\\u0647\\u0631\\u0647 \\u0628\\u062f\\u0648\\u0646 \\u062f\\u0647\\u0627\\u0646\",\n    \"Face with medical mask\": \"\\u0686\\u0647\\u0631\\u0647 \\u0628\\u0627 \\u0645\\u0627\\u0633\\u06a9 \\u0647\\u0627\\u06cc \\u067e\\u0632\\u0634\\u06a9\\u06cc\",\n\n    // Line breaker\n    \"Break\": \"\\u0634\\u06a9\\u0633\\u062a\\u0646\",\n\n    // Math\n    \"Subscript\": \"\\u067e\\u0627\\u064a\\u064a\\u0646 \\u0646\\u0648\\u064a\\u0633\",\n    \"Superscript\": \"\\u0628\\u0627\\u0644\\u0627 \\u0646\\u06af\\u0627\\u0634\\u062a\",\n\n    // Full screen\n    \"Fullscreen\": \"\\u062a\\u0645\\u0627\\u0645 \\u0635\\u0641\\u062d\\u0647\",\n\n    // Horizontal line\n    \"Insert Horizontal Line\": \"\\u0642\\u0631\\u0627\\u0631 \\u062f\\u0627\\u062f\\u0646 \\u0627\\u0641\\u0642\\u06cc \\u062e\\u0637\",\n\n    // Clear formatting\n    \"Clear Formatting\": \"\\u062d\\u0630\\u0641 \\u0642\\u0627\\u0644\\u0628 \\u0628\\u0646\\u062f\\u06cc\",\n\n    // Save\n    \"Save\": \"\\u0635\\u0631\\u0641\\u0647 \\u062c\\u0648\\u06cc\\u06cc\",\n\n    // Undo, redo\n    \"Undo\": \"\\u0628\\u0627\\u0637\\u0644 \\u06a9\\u0631\\u062f\\u0646\",\n    \"Redo\": \"\\u0627\\u0646\\u062c\\u0627\\u0645 \\u062f\\u0648\\u0628\\u0627\\u0631\\u0647\",\n\n    // Select all\n    \"Select All\": \"\\u0627\\u0646\\u062a\\u062e\\u0627\\u0628 \\u0647\\u0645\\u0647\",\n\n    // Code view\n    \"Code View\": \"\\u0645\\u0634\\u0627\\u0647\\u062f\\u0647 \\u06a9\\u062f\",\n\n    // Quote\n    \"Quote\": \"\\u0646\\u0642\\u0644 \\u0642\\u0648\\u0644\",\n    \"Increase\": \"\\u0627\\u0641\\u0632\\u0627\\u06cc\\u0634 \\u062f\\u0627\\u062f\\u0646\",\n    \"Decrease\": \"\\u0646\\u0632\\u0648\\u0644 \\u06a9\\u0631\\u062f\\u0646\",\n\n    // Quick Insert\n    \"Quick Insert\": \"\\u062f\\u0631\\u062c \\u0633\\u0631\\u06cc\\u0639\",\n\n    // Spcial Characters\n    \"Special Characters\": \"کاراکترهای خاص\",\n    \"Latin\": \"لاتین\",\n    \"Greek\": \"یونانی\",\n    \"Cyrillic\": \"سیریلیک\",\n    \"Punctuation\": \"نقطه گذاری\",\n    \"Currency\": \"واحد پول\",\n    \"Arrows\": \"فلش ها\",\n    \"Math\": \"ریاضی\",\n    \"Misc\": \"متاسفم\",\n\n    // Print.\n    \"Print\": \"چاپ\",\n\n    // Spell Checker.\n    \"Spell Checker\": \"بررسی کننده غلط املایی\",\n\n    // Help\n    \"Help\": \"کمک\",\n    \"Shortcuts\": \"کلید های میانبر\",\n    \"Inline Editor\": \"ویرایشگر خطی\",\n    \"Show the editor\": \"ویرایشگر را نشان بده\",\n    \"Common actions\": \"اقدامات مشترک\",\n    \"Copy\": \"کپی کنید\",\n    \"Cut\": \"برش\",\n    \"Paste\": \"چسباندن\",\n    \"Basic Formatting\": \"قالب بندی اولیه\",\n    \"Increase quote level\": \"افزایش سطح نقل قول\",\n    \"Decrease quote level\": \"کاهش میزان نقل قول\",\n    \"Image / Video\": \"تصویر / ویدئو\",\n    \"Resize larger\": \"تغییر اندازه بزرگتر\",\n    \"Resize smaller\": \"تغییر اندازه کوچکتر\",\n    \"Table\": \"جدول\",\n    \"Select table cell\": \"سلول جدول را انتخاب کنید\",\n    \"Extend selection one cell\": \"انتخاب یک سلول را گسترش دهید\",\n    \"Extend selection one row\": \"یک ردیف را انتخاب کنید\",\n    \"Navigation\": \"جهت یابی\",\n    \"Focus popup / toolbar\": \"تمرکز پنجره / نوار ابزار\",\n    \"Return focus to previous position\": \"تمرکز بازگشت به موقعیت قبلی\",\n\n    // Embed.ly\n    \"Embed URL\": \"آدرس جاسازی\",\n    \"Paste in a URL to embed\": \"یک URL برای جاسازی کپی کنید\",\n\n    // Word Paste.\n    \"The pasted content is coming from a Microsoft Word document. Do you want to keep the format or clean it up?\": \"محتوای جا به جا از یک سند Word Microsoft می آید. آیا می خواهید فرمت را نگه دارید یا پاک کنید؟\",\n    \"Keep\": \"نگاه داشتن\",\n    \"Clean\": \"پاک کن\",\n    \"Word Paste Detected\": \"کلمه رب تشخیص داده شده است\"\n  },\n  direction: \"rtl\"\n};\n\n}));\n"
  },
  {
    "path": "src/main/resources/static/plugins/froala-editor/js/languages/fi.js",
    "content": "/*!\n * froala_editor v2.9.1 (https://www.froala.com/wysiwyg-editor)\n * License https://froala.com/wysiwyg-editor/terms/\n * Copyright 2014-2018 Froala Labs\n */\n\n(function (factory) {\n    if (typeof define === 'function' && define.amd) {\n        // AMD. Register as an anonymous module.\n        define(['jquery'], factory);\n    } else if (typeof module === 'object' && module.exports) {\n        // Node/CommonJS\n        module.exports = function( root, jQuery ) {\n            if ( jQuery === undefined ) {\n                // require('jQuery') returns a factory that requires window to\n                // build a jQuery instance, we normalize how we use modules\n                // that require this pattern but the window provided is a noop\n                // if it's defined (how jquery works)\n                if ( typeof window !== 'undefined' ) {\n                    jQuery = require('jquery');\n                }\n                else {\n                    jQuery = require('jquery')(root);\n                }\n            }\n            return factory(jQuery);\n        };\n    } else {\n        // Browser globals\n        factory(window.jQuery);\n    }\n}(function ($) {\n/**\n * Finnish\n */\n\n$.FE.LANGUAGE['fi'] = {\n  translation: {\n    // Place holder\n    \"Type something\": \"Kirjoita jotain\",\n\n    // Basic formatting\n    \"Bold\": \"Lihavointi\",\n    \"Italic\": \"Kursivointi\",\n    \"Underline\": \"Alleviivaus\",\n    \"Strikethrough\": \"Yliviivaus\",\n\n    // Main buttons\n    \"Insert\": \"Lis\\u00e4\\u00e4\",\n    \"Delete\": \"Poista\",\n    \"Cancel\": \"Peruuta\",\n    \"OK\": \"Ok\",\n    \"Back\": \"Takaisin\",\n    \"Remove\": \"Poista\",\n    \"More\": \"Lis\\u00e4\\u00e4\",\n    \"Update\": \"P\\u00e4ivitys\",\n    \"Style\": \"Tyyli\",\n\n    // Font\n    \"Font Family\": \"Fontti\",\n    \"Font Size\": \"Fonttikoko\",\n\n    // Colors\n    \"Colors\": \"V\\u00e4rit\",\n    \"Background\": \"Taustan\",\n    \"Text\": \"Tekstin\",\n    \"HEX Color\": \"Heksadesimaali\",\n\n    // Paragraphs\n    \"Paragraph Format\": \"Muotoilut\",\n    \"Normal\": \"Normaali\",\n    \"Code\": \"Koodi\",\n    \"Heading 1\": \"Otsikko 1\",\n    \"Heading 2\": \"Otsikko 2\",\n    \"Heading 3\": \"Otsikko 3\",\n    \"Heading 4\": \"Otsikko 4\",\n\n    // Style\n    \"Paragraph Style\": \"Kappaleen tyyli\",\n    \"Inline Style\": \"Linjassa tyyli\",\n\n    // Alignment\n    \"Align\": \"Tasaa\",\n    \"Align Left\": \"Tasaa vasemmalle\",\n    \"Align Center\": \"Keskit\\u00e4\",\n    \"Align Right\": \"Tasaa oikealle\",\n    \"Align Justify\": \"Tasaa\",\n    \"None\": \"Ei mit\\u00e4\\u00e4n\",\n\n    // Lists\n    \"Ordered List\": \"J\\u00e4rjestetty lista\",\n    \"Unordered List\": \"J\\u00e4rjest\\u00e4m\\u00e4t\\u00f6n lista\",\n\n    // Indent\n    \"Decrease Indent\": \"Sisenn\\u00e4\",\n    \"Increase Indent\": \"Loitonna\",\n\n    // Links\n    \"Insert Link\": \"Lis\\u00e4\\u00e4 linkki\",\n    \"Open in new tab\": \"Avaa uudessa v\\u00e4lilehdess\\u00e4\",\n    \"Open Link\": \"Avaa linkki\",\n    \"Edit Link\": \"Muokkaa linkki\",\n    \"Unlink\": \"Poista linkki\",\n    \"Choose Link\": \"Valitse linkki\",\n\n    // Images\n    \"Insert Image\": \"Lis\\u00e4\\u00e4 kuva\",\n    \"Upload Image\": \"Lataa kuva\",\n    \"By URL\": \"Mukaan URL\",\n    \"Browse\": \"Selailla\",\n    \"Drop image\": \"Pudota kuva\",\n    \"or click\": \"tai napsauta\",\n    \"Manage Images\": \"Hallitse kuvia\",\n    \"Loading\": \"Lastaus\",\n    \"Deleting\": \"Poistaminen\",\n    \"Tags\": \"Tagit\",\n    \"Are you sure? Image will be deleted.\": \"Oletko varma? Kuva poistetaan.\",\n    \"Replace\": \"Vaihda\",\n    \"Uploading\": \"Lataaminen\",\n    \"Loading image\": \"Lastaus kuva\",\n    \"Display\": \"N\\u00e4ytt\\u00e4\",\n    \"Inline\": \"Linjassa\",\n    \"Break Text\": \"Rikkoa teksti\",\n    \"Alternative Text\": \"Vaihtoehtoinen teksti\",\n    \"Change Size\": \"Muuta kokoa\",\n    \"Width\": \"Leveys\",\n    \"Height\": \"Korkeus\",\n    \"Something went wrong. Please try again.\": \"Jotain meni pieleen. Yrit\\u00e4 uudelleen.\",\n    \"Image Caption\": \"Kuva-otsikko\",\n    \"Advanced Edit\": \"Edistynyt muokkaus\",\n\n    // Video\n    \"Insert Video\": \"Lis\\u00e4\\u00e4 video\",\n    \"Embedded Code\": \"Upotettu koodi\",\n    \"Paste in a video URL\": \"Liitä video url\",\n    \"Drop video\": \"Pudota video\",\n    \"Your browser does not support HTML5 video.\": \"Selaimesi ei tue html5-videota.\",\n    \"Upload Video\": \"Lataa video\",\n\n    // Tables\n    \"Insert Table\": \"Lis\\u00e4\\u00e4 taulukko\",\n    \"Table Header\": \"Taulukko yl\\u00e4tunniste\",\n    \"Remove Table\": \"Poista taulukko\",\n    \"Table Style\": \"Taulukko tyyli\",\n    \"Horizontal Align\": \"Vaakasuora tasaa\",\n    \"Row\": \"Rivi\",\n    \"Insert row above\": \"Lis\\u00e4\\u00e4 rivi ennen\",\n    \"Insert row below\": \"Lis\\u00e4\\u00e4 rivi j\\u00e4lkeen\",\n    \"Delete row\": \"Poista rivi\",\n    \"Column\": \"Sarake\",\n    \"Insert column before\": \"Lis\\u00e4\\u00e4 sarake ennen\",\n    \"Insert column after\": \"Lis\\u00e4\\u00e4 sarake j\\u00e4lkeen\",\n    \"Delete column\": \"Poista sarake\",\n    \"Cell\": \"Solu\",\n    \"Merge cells\": \"Yhdist\\u00e4 solut\",\n    \"Horizontal split\": \"Jaa vaakasuora\",\n    \"Vertical split\": \"Jaa pystysuora\",\n    \"Cell Background\": \"Solun tausta\",\n    \"Vertical Align\": \"Pystysuora tasaa\",\n    \"Top\": \"Alku\",\n    \"Middle\": \"Keskimm\\u00e4inen\",\n    \"Bottom\": \"Pohja\",\n    \"Align Top\": \"Tasaa alkuun\",\n    \"Align Middle\": \"Tasaa keskimm\\u00e4inen\",\n    \"Align Bottom\": \"Tasaa pohja\",\n    \"Cell Style\": \"Solun tyyli\",\n\n    // Files\n    \"Upload File\": \"Lataa tiedosto\",\n    \"Drop file\": \"Pudota tiedosto\",\n\n    // Emoticons\n    \"Emoticons\": \"Hymi\\u00f6it\\u00e4\",\n    \"Grinning face\": \"Virnisteli kasvot\",\n    \"Grinning face with smiling eyes\": \"Virnisteli kasvot hymyilev\\u00e4t silm\\u00e4t\",\n    \"Face with tears of joy\": \"Kasvot ilon kyyneleit\\u00e4\",\n    \"Smiling face with open mouth\": \"Hymyilev\\u00e4 kasvot suu auki\",\n    \"Smiling face with open mouth and smiling eyes\": \"Hymyilev\\u00e4 kasvot suu auki ja hymyilee silm\\u00e4t\",\n    \"Smiling face with open mouth and cold sweat\": \"Hymyilev\\u00e4 kasvot suu auki ja kylm\\u00e4 hiki\",\n    \"Smiling face with open mouth and tightly-closed eyes\": \"Hymyilev\\u00e4 kasvot suu auki ja tiiviisti suljettu silm\\u00e4t\",\n    \"Smiling face with halo\": \"Hymyilev\\u00e4 kasvot Halo\",\n    \"Smiling face with horns\": \"Hymyilev\\u00e4 kasvot sarvet\",\n    \"Winking face\": \"Silm\\u00e4niskut kasvot\",\n    \"Smiling face with smiling eyes\": \"Hymyilev\\u00e4 kasvot hymyilev\\u00e4t silm\\u00e4t\",\n    \"Face savoring delicious food\": \"Kasvot maistella herkullista ruokaa\",\n    \"Relieved face\": \"Vapautettu kasvot\",\n    \"Smiling face with heart-shaped eyes\": \"Hymyilev\\u00e4t kasvot syd\\u00e4men muotoinen silm\\u00e4t\",\n    \"Smiling face with sunglasses\": \"Hymyilev\\u00e4 kasvot aurinkolasit\",\n    \"Smirking face\": \"Hym\\u00e4t\\u00e4\\u00e4 kasvot\",\n    \"Neutral face\": \"Neutraali kasvot\",\n    \"Expressionless face\": \"Ilmeet\\u00f6n kasvot\",\n    \"Unamused face\": \"Ei huvittanut kasvo\",\n    \"Face with cold sweat\": \"Kasvot kylm\\u00e4 hiki\",\n    \"Pensive face\": \"Mietteli\\u00e4s kasvot\",\n    \"Confused face\": \"Sekava kasvot\",\n    \"Confounded face\": \"Sekoitti kasvot\",\n    \"Kissing face\": \"Suudella kasvot\",\n    \"Face throwing a kiss\": \"Kasvo heitt\\u00e4\\u00e4 suudelma\",\n    \"Kissing face with smiling eyes\": \"Suudella kasvot hymyilev\\u00e4t silm\\u00e4t\",\n    \"Kissing face with closed eyes\": \"Suudella kasvot silm\\u00e4t ummessa\",\n    \"Face with stuck out tongue\": \"Kasvot ojensi kieli\",\n    \"Face with stuck out tongue and winking eye\": \"Kasvot on juuttunut pois kielen ja silm\\u00e4niskuja silm\\u00e4\",\n    \"Face with stuck out tongue and tightly-closed eyes\": \"Kasvot on juuttunut pois kielen ja tiiviisti suljettuna silm\\u00e4t\",\n    \"Disappointed face\": \"Pettynyt kasvot\",\n    \"Worried face\": \"Huolissaan kasvot\",\n    \"Angry face\": \"Vihainen kasvot\",\n    \"Pouting face\": \"Pouting kasvot\",\n    \"Crying face\": \"Itku kasvot\",\n    \"Persevering face\": \"Pitk\\u00e4j\\u00e4nteinen kasvot\",\n    \"Face with look of triumph\": \"Kasvot ilme Triumph\",\n    \"Disappointed but relieved face\": \"Pettynyt mutta helpottunut kasvot\",\n    \"Frowning face with open mouth\": \"Frowning kasvot suu auki\",\n    \"Anguished face\": \"Tuskainen kasvot\",\n    \"Fearful face\": \"Pelokkuus kasvot\",\n    \"Weary face\": \"V\\u00e4synyt kasvot\",\n    \"Sleepy face\": \"Unelias kasvot\",\n    \"Tired face\": \"V\\u00e4synyt kasvot\",\n    \"Grimacing face\": \"Irvist\\u00e4en kasvot\",\n    \"Loudly crying face\": \"\\u00e4\\u00e4nekk\\u00e4\\u00e4sti itku kasvot\",\n    \"Face with open mouth\": \"Kasvot suu auki\",\n    \"Hushed face\": \"Hiljentynyt kasvot\",\n    \"Face with open mouth and cold sweat\": \"Kasvot suu auki ja kylm\\u00e4 hiki\",\n    \"Face screaming in fear\": \"Kasvot huutaa pelosta\",\n    \"Astonished face\": \"H\\u00e4mm\\u00e4stynyt kasvot\",\n    \"Flushed face\": \"Kasvojen punoitus\",\n    \"Sleeping face\": \"Nukkuva kasvot\",\n    \"Dizzy face\": \"Huimausta kasvot\",\n    \"Face without mouth\": \"Kasvot ilman suuhun\",\n    \"Face with medical mask\": \"Kasvot l\\u00e4\\u00e4ketieteen naamio\",\n\n    // Line breaker\n    \"Break\": \"Rikkoa\",\n\n    // Math\n    \"Subscript\": \"Alaindeksi\",\n    \"Superscript\": \"Yl\\u00e4indeksi\",\n\n    // Full screen\n    \"Fullscreen\": \"Koko n\\u00e4ytt\\u00f6\",\n\n    // Horizontal line\n    \"Insert Horizontal Line\": \"Lis\\u00e4\\u00e4 vaakasuora viiva\",\n\n    // Clear formatting\n    \"Clear Formatting\": \"Poista muotoilu\",\n\n    // Save\n    \"Save\": \"Tallentaa\",\n\n    // Undo, redo\n    \"Undo\": \"Peru\",\n    \"Redo\": \"Tee uudelleen\",\n\n    // Select all\n    \"Select All\": \"Valitse kaikki\",\n\n    // Code view\n    \"Code View\": \"Koodi n\\u00e4kym\\u00e4\",\n\n    // Quote\n    \"Quote\": \"Lainaus\",\n    \"Increase\": \"Lis\\u00e4t\\u00e4\",\n    \"Decrease\": \"Pienenn\\u00e4\",\n\n    // Quick Insert\n    \"Quick Insert\": \"Nopea insertti\",\n\n    // Spcial Characters\n    \"Special Characters\": \"Erikoismerkkejä\",\n    \"Latin\": \"Latina\",\n    \"Greek\": \"Kreikkalainen\",\n    \"Cyrillic\": \"Kyrillinen\",\n    \"Punctuation\": \"Välimerkit\",\n    \"Currency\": \"Valuutta\",\n    \"Arrows\": \"Nuolet\",\n    \"Math\": \"Matematiikka\",\n    \"Misc\": \"Sekalaista\",\n\n    // Print.\n    \"Print\": \"Tulosta\",\n\n    // Spell Checker.\n    \"Spell Checker\": \"Oikeinkirjoittaja\",\n\n    // Help\n    \"Help\": \"Auta\",\n    \"Shortcuts\": \"Pikakuvakkeet\",\n    \"Inline Editor\": \"Inline-editori\",\n    \"Show the editor\": \"Näytä editori\",\n    \"Common actions\": \"Yhteisiä toimia\",\n    \"Copy\": \"Kopio\",\n    \"Cut\": \"Leikata\",\n    \"Paste\": \"Tahna\",\n    \"Basic Formatting\": \"Perusmuotoilu\",\n    \"Increase quote level\": \"Lisää lainaustasoa\",\n    \"Decrease quote level\": \"Laskea lainaustasoa\",\n    \"Image / Video\": \"Kuva / video\",\n    \"Resize larger\": \"Kokoa suurempi\",\n    \"Resize smaller\": \"Pienempi koko\",\n    \"Table\": \"Pöytä\",\n    \"Select table cell\": \"Valitse taulukon solu\",\n    \"Extend selection one cell\": \"Laajentaa valinta yhden solun\",\n    \"Extend selection one row\": \"Laajenna valinta yksi rivi\",\n    \"Navigation\": \"Suunnistus\",\n    \"Focus popup / toolbar\": \"Painopistevalo / työkalurivi\",\n    \"Return focus to previous position\": \"Palauta tarkennus edelliseen asentoon\",\n\n    // Embed.ly\n    \"Embed URL\": \"Upottaa URL-osoite\",\n    \"Paste in a URL to embed\": \"Liitä upotettu URL-osoite\",\n\n    // Word Paste.\n    \"The pasted content is coming from a Microsoft Word document. Do you want to keep the format or clean it up?\": \"Liitetty sisältö tulee Microsoft Word -asiakirjasta. Haluatko säilyttää muodon tai puhdistaa sen?\",\n    \"Keep\": \"Pitää\",\n    \"Clean\": \"Puhdas\",\n    \"Word Paste Detected\": \"Sana-tahna havaittu\"\n  },\n  direction: \"ltr\"\n};\n\n}));\n"
  },
  {
    "path": "src/main/resources/static/plugins/froala-editor/js/languages/fr.js",
    "content": "/*!\n * froala_editor v2.9.1 (https://www.froala.com/wysiwyg-editor)\n * License https://froala.com/wysiwyg-editor/terms/\n * Copyright 2014-2018 Froala Labs\n */\n\n(function (factory) {\n    if (typeof define === 'function' && define.amd) {\n        // AMD. Register as an anonymous module.\n        define(['jquery'], factory);\n    } else if (typeof module === 'object' && module.exports) {\n        // Node/CommonJS\n        module.exports = function( root, jQuery ) {\n            if ( jQuery === undefined ) {\n                // require('jQuery') returns a factory that requires window to\n                // build a jQuery instance, we normalize how we use modules\n                // that require this pattern but the window provided is a noop\n                // if it's defined (how jquery works)\n                if ( typeof window !== 'undefined' ) {\n                    jQuery = require('jquery');\n                }\n                else {\n                    jQuery = require('jquery')(root);\n                }\n            }\n            return factory(jQuery);\n        };\n    } else {\n        // Browser globals\n        factory(window.jQuery);\n    }\n}(function ($) {\n/**\n * French\n */\n\n$.FE.LANGUAGE['fr'] = {\n  translation: {\n    // Place holder\n    \"Type something\": \"Tapez quelque chose\",\n\n    // Basic formatting\n    \"Bold\": \"Gras\",\n    \"Italic\": \"Italique\",\n    \"Underline\": \"Soulign\\u00e9\",\n    \"Strikethrough\": \"Barr\\u00e9\",\n\n    // Main buttons\n    \"Insert\": \"Ins\\u00e9rer\",\n    \"Delete\": \"Supprimer\",\n    \"Cancel\": \"Annuler\",\n    \"OK\": \"Ok\",\n    \"Back\": \"Retour\",\n    \"Remove\": \"Supprimer\",\n    \"More\": \"Plus\",\n    \"Update\": \"Actualiser\",\n    \"Style\": \"Style\",\n\n    // Font\n    \"Font Family\": \"Polices de caract\\u00e8res\",\n    \"Font Size\": \"Taille de police\",\n\n    // Colors\n    \"Colors\": \"Couleurs\",\n    \"Background\": \"Arri\\u00e8re-plan\",\n    \"Text\": \"Texte\",\n    \"HEX Color\": \"Couleur hexad\\u00e9cimale\",\n\n    // Paragraphs\n    \"Paragraph Format\": \"Format de paragraphe\",\n    \"Normal\": \"Normal\",\n    \"Code\": \"Code\",\n    \"Heading 1\": \"Titre 1\",\n    \"Heading 2\": \"Titre 2\",\n    \"Heading 3\": \"Titre 3\",\n    \"Heading 4\": \"Titre 4\",\n\n    // Style\n    \"Paragraph Style\": \"Style de paragraphe\",\n    \"Inline Style\": \"Style en ligne\",\n\n    // Alignment\n    \"Align\": \"Aligner\",\n    \"Align Left\": \"Aligner \\u00e0 gauche\",\n    \"Align Center\": \"Aligner au centre\",\n    \"Align Right\": \"Aligner \\u00e0 droite\",\n    \"Align Justify\": \"Justifier\",\n    \"None\": \"Aucun\",\n\n    // Lists\n    \"Ordered List\": \"Liste ordonn\\u00e9e\",\n    \"Unordered List\": \"Liste non ordonn\\u00e9e\",\n\n    // Indent\n    \"Decrease Indent\": \"Diminuer le retrait\",\n    \"Increase Indent\": \"Augmenter le retrait\",\n\n    // Links\n    \"Insert Link\": \"Ins\\u00e9rer un lien\",\n    \"Open in new tab\": \"Ouvrir dans un nouvel onglet\",\n    \"Open Link\": \"Ouvrir le lien\",\n    \"Edit Link\": \"Modifier le lien\",\n    \"Unlink\": \"Enlever le lien\",\n    \"Choose Link\": \"Choisir le lien\",\n\n    // Images\n    \"Insert Image\": \"Ins\\u00e9rer une image\",\n    \"Upload Image\": \"T\\u00e9l\\u00e9verser une image\",\n    \"By URL\": \"Par URL\",\n    \"Browse\": \"Parcourir\",\n    \"Drop image\": \"D\\u00e9poser une image\",\n    \"or click\": \"ou cliquer\",\n    \"Manage Images\": \"G\\u00e9rer les images\",\n    \"Loading\": \"Chargement\",\n    \"Deleting\": \"Suppression\",\n    \"Tags\": \"\\u00c9tiquettes\",\n    \"Are you sure? Image will be deleted.\": \"Etes-vous certain? L'image sera supprim\\u00e9e.\",\n    \"Replace\": \"Remplacer\",\n    \"Uploading\": \"En t\\u00e9l\\u00e9versement d'images\",\n    \"Loading image\": \"En chargement d'images\",\n    \"Display\": \"Afficher\",\n    \"Inline\": \"En ligne\",\n    \"Break Text\": \"Rompre le texte\",\n    \"Alternative Text\": \"Texte alternatif\",\n    \"Change Size\": \"Changer la dimension\",\n    \"Width\": \"Largeur\",\n    \"Height\": \"Hauteur\",\n    \"Something went wrong. Please try again.\": \"Quelque chose a mal tourn\\u00e9. Veuillez r\\u00e9essayer.\",\n    \"Image Caption\": \"L\\u00e9gende de l'image\",\n    \"Advanced Edit\": \"\\u00c9dition avanc\\u00e9e\",\n\n    // Video\n    \"Insert Video\": \"Ins\\u00e9rer une vid\\u00e9o\",\n    \"Embedded Code\": \"Code int\\u00e9gr\\u00e9\",\n    \"Paste in a video URL\": \"Coller l'URL d'une vid\\u00e9o\",\n    \"Drop video\": \"D\\u00e9poser une vid\\u00e9o\",\n    \"Your browser does not support HTML5 video.\": \"Votre navigateur ne supporte pas les vid\\u00e9os en format HTML5.\",\n    \"Upload Video\": \"T\\u00e9l\\u00e9verser une vid\\u00e9o\",\n\n    // Tables\n    \"Insert Table\": \"Ins\\u00e9rer un tableau\",\n    \"Table Header\": \"Ent\\u00eate de tableau\",\n    \"Remove Table\": \"Supprimer le tableau\",\n    \"Table Style\": \"Style de tableau\",\n    \"Horizontal Align\": \"Alignement horizontal\",\n    \"Row\": \"Ligne\",\n    \"Insert row above\": \"Ins\\u00e9rer une ligne au-dessus\",\n    \"Insert row below\": \"Ins\\u00e9rer une ligne en-dessous\",\n    \"Delete row\": \"Supprimer la ligne\",\n    \"Column\": \"Colonne\",\n    \"Insert column before\": \"Ins\\u00e9rer une colonne avant\",\n    \"Insert column after\": \"Ins\\u00e9rer une colonne apr\\u00e8s\",\n    \"Delete column\": \"Supprimer la colonne\",\n    \"Cell\": \"Cellule\",\n    \"Merge cells\": \"Fusionner les cellules\",\n    \"Horizontal split\": \"Diviser horizontalement\",\n    \"Vertical split\": \"Diviser verticalement\",\n    \"Cell Background\": \"Arri\\u00e8re-plan de la cellule\",\n    \"Vertical Align\": \"Alignement vertical\",\n    \"Top\": \"En haut\",\n    \"Middle\": \"Au centre\",\n    \"Bottom\": \"En bas\",\n    \"Align Top\": \"Aligner en haut\",\n    \"Align Middle\": \"Aligner au centre\",\n    \"Align Bottom\": \"Aligner en bas\",\n    \"Cell Style\": \"Style de cellule\",\n\n    // Files\n    \"Upload File\": \"T\\u00e9l\\u00e9verser un fichier\",\n    \"Drop file\": \"D\\u00e9poser un fichier\",\n\n    // Emoticons\n    \"Emoticons\": \"\\u00c9motic\\u00f4nes\",\n    \"Grinning face\": \"Souriant visage\",\n    \"Grinning face with smiling eyes\": \"Souriant visage aux yeux souriants\",\n    \"Face with tears of joy\": \"Visage \\u00e0 des larmes de joie\",\n    \"Smiling face with open mouth\": \"Visage souriant avec la bouche ouverte\",\n    \"Smiling face with open mouth and smiling eyes\": \"Visage souriant avec la bouche ouverte et les yeux en souriant\",\n    \"Smiling face with open mouth and cold sweat\": \"Visage souriant avec la bouche ouverte et la sueur froide\",\n    \"Smiling face with open mouth and tightly-closed eyes\": \"Visage souriant avec la bouche ouverte et les yeux herm\\u00e9tiquement clos\",\n    \"Smiling face with halo\": \"Sourire visage avec halo\",\n    \"Smiling face with horns\": \"Visage souriant avec des cornes\",\n    \"Winking face\": \"Clin d'oeil visage\",\n    \"Smiling face with smiling eyes\": \"Sourire visage aux yeux souriants\",\n    \"Face savoring delicious food\": \"Visage savourant de d\\u00e9licieux plats\",\n    \"Relieved face\": \"Soulag\\u00e9 visage\",\n    \"Smiling face with heart-shaped eyes\": \"Visage souriant avec des yeux en forme de coeur\",\n    \"Smiling face with sunglasses\": \"Sourire visage avec des lunettes de soleil\",\n    \"Smirking face\": \"Souriant visage\",\n    \"Neutral face\": \"Visage neutre\",\n    \"Expressionless face\": \"Visage sans expression\",\n    \"Unamused face\": \"Visage pas amus\\u00e9\",\n    \"Face with cold sweat\": \"Face \\u00e0 la sueur froide\",\n    \"Pensive face\": \"pensif visage\",\n    \"Confused face\": \"Visage confus\",\n    \"Confounded face\": \"visage maudit\",\n    \"Kissing face\": \"Embrasser le visage\",\n    \"Face throwing a kiss\": \"Visage jetant un baiser\",\n    \"Kissing face with smiling eyes\": \"Embrasser le visage avec les yeux souriants\",\n    \"Kissing face with closed eyes\": \"Embrasser le visage avec les yeux ferm\\u00e9s\",\n    \"Face with stuck out tongue\": \"Visage avec sortait de la langue\",\n    \"Face with stuck out tongue and winking eye\": \"Visage avec sortait de la langue et des yeux clignotante\",\n    \"Face with stuck out tongue and tightly-closed eyes\": \"Visage avec sortait de la langue et les yeux ferm\\u00e9s herm\\u00e9tiquement\",\n    \"Disappointed face\": \"Visage d\\u00e9\\u00e7u\",\n    \"Worried face\": \"Visage inquiet\",\n    \"Angry face\": \"Visage en col\\u00e9re\",\n    \"Pouting face\": \"Faire la moue face\",\n    \"Crying face\": \"Pleurer visage\",\n    \"Persevering face\": \"Pers\\u00e9v\\u00e9rer face\",\n    \"Face with look of triumph\": \"Visage avec le regard de triomphe\",\n    \"Disappointed but relieved face\": \"D\\u00e9\\u00e7u, mais le visage soulag\\u00e9\",\n    \"Frowning face with open mouth\": \"Les sourcils fronc\\u00e9s visage avec la bouche ouverte\",\n    \"Anguished face\": \"Visage angoiss\\u00e9\",\n    \"Fearful face\": \"Craignant visage\",\n    \"Weary face\": \"Visage las\",\n    \"Sleepy face\": \"Visage endormi\",\n    \"Tired face\": \"Visage fatigu\\u00e9\",\n    \"Grimacing face\": \"Visage grima\\u00e7ante\",\n    \"Loudly crying face\": \"Pleurer bruyamment visage\",\n    \"Face with open mouth\": \"Visage \\u00e0 la bouche ouverte\",\n    \"Hushed face\": \"Visage feutr\\u00e9e\",\n    \"Face with open mouth and cold sweat\": \"Visage \\u00e0 la bouche ouverte et la sueur froide\",\n    \"Face screaming in fear\": \"Visage hurlant de peur\",\n    \"Astonished face\": \"Visage \\u00e9tonn\\u00e9\",\n    \"Flushed face\": \"Visage congestionn\\u00e9\",\n    \"Sleeping face\": \"Visage au bois dormant\",\n    \"Dizzy face\": \"Visage vertige\",\n    \"Face without mouth\": \"Visage sans bouche\",\n    \"Face with medical mask\": \"Visage avec un masque m\\u00e9dical\",\n\n    // Line breaker\n    \"Break\": \"Rompre\",\n\n    // Math\n    \"Subscript\": \"Indice\",\n    \"Superscript\": \"Exposant\",\n\n    // Full screen\n    \"Fullscreen\": \"Plein \\u00e9cran\",\n\n    // Horizontal line\n    \"Insert Horizontal Line\": \"Ins\\u00e9rer une ligne horizontale\",\n\n    // Clear formatting\n    \"Clear Formatting\": \"Effacer le formatage\",\n\n    // Save\n    \"Save\": \"sauvegarder\",\n\n    // Undo, redo\n    \"Undo\": \"Annuler\",\n    \"Redo\": \"R\\u00e9tablir\",\n\n    // Select all\n    \"Select All\": \"Tout s\\u00e9lectionner\",\n\n    // Code view\n    \"Code View\": \"Mode HTML\",\n\n    // Quote\n    \"Quote\": \"Citation\",\n    \"Increase\": \"Augmenter\",\n    \"Decrease\": \"Diminuer\",\n\n    // Quick Insert\n    \"Quick Insert\": \"Insertion rapide\",\n\n    // Spcial Characters\n    \"Special Characters\": \"Caract\\u00e8res sp\\u00e9ciaux\",\n    \"Latin\": \"Latin\",\n    \"Greek\": \"Grec\",\n    \"Cyrillic\": \"Cyrillique\",\n    \"Punctuation\": \"Ponctuation\",\n    \"Currency\": \"Devise\",\n    \"Arrows\": \"Fl\\u00e8ches\",\n    \"Math\": \"Math\",\n    \"Misc\": \"Divers\",\n\n    // Print.\n    \"Print\": \"Imprimer\",\n\n    // Spell Checker.\n    \"Spell Checker\": \"Correcteur orthographique\",\n\n    // Help\n    \"Help\": \"Aide\",\n    \"Shortcuts\": \"Raccourcis\",\n    \"Inline Editor\": \"\\u00c9diteur en ligne\",\n    \"Show the editor\": \"Montrer l'\\u00e9diteur\",\n    \"Common actions\": \"Actions communes\",\n    \"Copy\": \"Copier\",\n    \"Cut\": \"Couper\",\n    \"Paste\": \"Coller\",\n    \"Basic Formatting\": \"Formatage de base\",\n    \"Increase quote level\": \"Augmenter le niveau de citation\",\n    \"Decrease quote level\": \"Diminuer le niveau de citation\",\n    \"Image / Video\": \"Image / vid\\u00e9o\",\n    \"Resize larger\": \"Redimensionner plus grand\",\n    \"Resize smaller\": \"Redimensionner plus petit\",\n    \"Table\": \"Table\",\n    \"Select table cell\": \"S\\u00e9lectionner la cellule du tableau\",\n    \"Extend selection one cell\": \"\\u00c9tendre la s\\u00e9lection d'une cellule\",\n    \"Extend selection one row\": \"\\u00c9tendre la s\\u00e9lection d'une ligne\",\n    \"Navigation\": \"Navigation\",\n    \"Focus popup / toolbar\": \"Focus popup / toolbar\",\n    \"Return focus to previous position\": \"Retourner l'accent sur le poste pr\\u00e9c\\u00e9dent\",\n\n    // Embed.ly\n    \"Embed URL\": \"URL int\\u00e9gr\\u00e9e\",\n    \"Paste in a URL to embed\": \"Coller une URL int\\u00e9gr\\u00e9e\",\n\n    // Word Paste.\n    \"The pasted content is coming from a Microsoft Word document. Do you want to keep the format or clean it up?\": \"Le contenu coll\\u00e9 provient d'un document Microsoft Word. Voulez-vous conserver le format ou le nettoyer?\",\n    \"Keep\": \"Conserver\",\n    \"Clean\": \"Nettoyer\",\n    \"Word Paste Detected\": \"Copiage de mots d\\u00e9tect\\u00e9\"\n  },\n  direction: \"ltr\"\n};\n\n}));\n"
  },
  {
    "path": "src/main/resources/static/plugins/froala-editor/js/languages/he.js",
    "content": "/*!\n * froala_editor v2.9.1 (https://www.froala.com/wysiwyg-editor)\n * License https://froala.com/wysiwyg-editor/terms/\n * Copyright 2014-2018 Froala Labs\n */\n\n(function (factory) {\n    if (typeof define === 'function' && define.amd) {\n        // AMD. Register as an anonymous module.\n        define(['jquery'], factory);\n    } else if (typeof module === 'object' && module.exports) {\n        // Node/CommonJS\n        module.exports = function( root, jQuery ) {\n            if ( jQuery === undefined ) {\n                // require('jQuery') returns a factory that requires window to\n                // build a jQuery instance, we normalize how we use modules\n                // that require this pattern but the window provided is a noop\n                // if it's defined (how jquery works)\n                if ( typeof window !== 'undefined' ) {\n                    jQuery = require('jquery');\n                }\n                else {\n                    jQuery = require('jquery')(root);\n                }\n            }\n            return factory(jQuery);\n        };\n    } else {\n        // Browser globals\n        factory(window.jQuery);\n    }\n}(function ($) {\n/**\n * Hebrew\n */\n\n$.FE.LANGUAGE['he'] = {\n  translation: {\n    // Place holder\n    \"Type something\": \"\\u05d4\\u05e7\\u05dc\\u05d3 \\u05db\\u05d0\\u05df\",\n\n    // Basic formatting\n    \"Bold\": \"\\u05de\\u05d5\\u05d3\\u05d2\\u05e9\",\n    \"Italic\": \"\\u05de\\u05d5\\u05d8\\u05d4\",\n    \"Underline\": \"\\u05e7\\u05d5 \\u05ea\\u05d7\\u05ea\\u05d9\",\n    \"Strikethrough\": \"\\u05e7\\u05d5 \\u05d0\\u05de\\u05e6\\u05e2\\u05d9\",\n\n    // Main buttons\n    \"Insert\": \"\\u05d4\\u05d5\\u05e1\\u05e4\\u05ea\",\n    \"Delete\": \"\\u05de\\u05d7\\u05d9\\u05e7\\u05d4\",\n    \"Cancel\": \"\\u05d1\\u05d9\\u05d8\\u05d5\\u05dc\",\n    \"OK\": \"\\u05d1\\u05e6\\u05e2\",\n    \"Back\": \"\\u05d1\\u05d7\\u05d6\\u05e8\\u05d4\",\n    \"Remove\": \"\\u05d4\\u05e1\\u05e8\",\n    \"More\": \"\\u05d9\\u05d5\\u05ea\\u05e8\",\n    \"Update\": \"\\u05e2\\u05d3\\u05db\\u05d5\\u05df\",\n    \"Style\": \"\\u05e1\\u05d2\\u05e0\\u05d5\\u05df\",\n\n    // Font\n    \"Font Family\": \"\\u05d2\\u05d5\\u05e4\\u05df\",\n    \"Font Size\": \"\\u05d2\\u05d5\\u05d3\\u05dc \\u05d4\\u05d2\\u05d5\\u05e4\\u05df\",\n\n    // Colors\n    \"Colors\": \"\\u05e6\\u05d1\\u05e2\\u05d9\\u05dd\",\n    \"Background\": \"\\u05e8\\u05e7\\u05e2\",\n    \"Text\": \"\\u05d4\\u05d8\\u05e1\\u05d8\",\n    \"HEX Color\": \"צבע הקס\",\n\n    // Paragraphs\n    \"Paragraph Format\": \"\\u05e4\\u05d5\\u05e8\\u05de\\u05d8\",\n    \"Normal\": \"\\u05e8\\u05d2\\u05d9\\u05dc\",\n    \"Code\": \"\\u05e7\\u05d5\\u05d3\",\n    \"Heading 1\": \"1 \\u05db\\u05d5\\u05ea\\u05e8\\u05ea\",\n    \"Heading 2\": \"2 \\u05db\\u05d5\\u05ea\\u05e8\\u05ea\",\n    \"Heading 3\": \"3 \\u05db\\u05d5\\u05ea\\u05e8\\u05ea\",\n    \"Heading 4\": \"4 \\u05db\\u05d5\\u05ea\\u05e8\\u05ea\",\n\n    // Style\n    \"Paragraph Style\": \"\\u05e1\\u05d2\\u05e0\\u05d5\\u05df \\u05e4\\u05e1\\u05e7\\u05d4\",\n    \"Inline Style\": \"\\u05e1\\u05d2\\u05e0\\u05d5\\u05df \\u05de\\u05d5\\u05d1\\u05e0\\u05d4\",\n\n    // Alignment\n    \"Align\": \"\\u05d9\\u05d9\\u05e9\\u05d5\\u05e8\",\n    \"Align Left\": \"\\u05d9\\u05d9\\u05e9\\u05d5\\u05e8 \\u05dc\\u05e9\\u05de\\u05d0\\u05dc\",\n    \"Align Center\": \"\\u05d9\\u05d9\\u05e9\\u05d5\\u05e8 \\u05dc\\u05de\\u05e8\\u05db\\u05d6\",\n    \"Align Right\": \"\\u05d9\\u05d9\\u05e9\\u05d5\\u05e8 \\u05dc\\u05d9\\u05de\\u05d9\\u05df\",\n    \"Align Justify\": \"\\u05d9\\u05d9\\u05e9\\u05d5\\u05e8 \\u05de\\u05dc\\u05d0\",\n    \"None\": \"\\u05d0\\u05e3 \\u05d0\\u05d7\\u05d3\",\n\n    // Lists\n    \"Ordered List\": \"\\u05d4\\u05d5\\u05e1\\u05e4\\u05ea \\u05e8\\u05e9\\u05d9\\u05de\\u05d4 \\u05de\\u05de\\u05d5\\u05e1\\u05e4\\u05e8\\u05ea\",\n    \"Unordered List\": \"\\u05d4\\u05d5\\u05e1\\u05e4\\u05ea \\u05e8\\u05e9\\u05d9\\u05de\\u05d4\",\n\n    // Indent\n    \"Decrease Indent\": \"\\u05d4\\u05e7\\u05d8\\u05e0\\u05ea \\u05db\\u05e0\\u05d9\\u05e1\\u05d4\",\n    \"Increase Indent\": \"\\u05d4\\u05d2\\u05d3\\u05dc\\u05ea \\u05db\\u05e0\\u05d9\\u05e1\\u05d4\",\n\n    // Links\n    \"Insert Link\": \"\\u05d4\\u05d5\\u05e1\\u05e4\\u05ea \\u05e7\\u05d9\\u05e9\\u05d5\\u05e8\",\n    \"Open in new tab\": \"\\u05dc\\u05e4\\u05ea\\u05d5\\u05d7 \\u05d1\\u05d8\\u05d0\\u05d1 \\u05d7\\u05d3\\u05e9\",\n    \"Open Link\": \"\\u05e7\\u05d9\\u05e9\\u05d5\\u05e8 \\u05e4\\u05ea\\u05d5\\u05d7\",\n    \"Edit Link\": \"\\u05e7\\u05d9\\u05e9\\u05d5\\u05e8 \\u05e2\\u05e8\\u05d9\\u05db\\u05d4\",\n    \"Unlink\": \"\\u05d4\\u05e1\\u05e8\\u05ea \\u05d4\\u05e7\\u05d9\\u05e9\\u05d5\\u05e8\",\n    \"Choose Link\": \"\\u05dc\\u05d1\\u05d7\\u05d5\\u05e8 \\u05e7\\u05d9\\u05e9\\u05d5\\u05e8\",\n\n    // Images\n    \"Insert Image\": \"\\u05d4\\u05d5\\u05e1\\u05e4\\u05ea \\u05ea\\u05de\\u05d5\\u05e0\\u05d4\",\n    \"Upload Image\": \"\\u05ea\\u05de\\u05d5\\u05e0\\u05ea \\u05d4\\u05e2\\u05dc\\u05d0\\u05d4\",\n    \"By URL\": \"URL \\u05e2\\u05dc \\u05d9\\u05d3\\u05d9\",\n    \"Browse\": \"\\u05dc\\u05d2\\u05dc\\u05d5\\u05e9\",\n    \"Drop image\": \"\\u05e9\\u05d7\\u05e8\\u05e8 \\u05d0\\u05ea \\u05d4\\u05ea\\u05de\\u05d5\\u05e0\\u05d4 \\u05db\\u05d0\\u05df\",\n    \"or click\": \"\\u05d0\\u05d5 \\u05dc\\u05d7\\u05e5\",\n    \"Manage Images\": \"\\u05e0\\u05d9\\u05d4\\u05d5\\u05dc \\u05d4\\u05ea\\u05de\\u05d5\\u05e0\\u05d5\\u05ea\",\n    \"Loading\": \"\\u05d8\\u05e2\\u05d9\\u05e0\\u05d4\",\n    \"Deleting\": \"\\u05de\\u05d7\\u05d9\\u05e7\\u05d4\",\n    \"Tags\": \"\\u05ea\\u05d2\\u05d9\\u05dd\",\n    \"Are you sure? Image will be deleted.\": \"\\u05d4\\u05d0\\u05dd \\u05d0\\u05ea\\u05d4 \\u05d1\\u05d8\\u05d5\\u05d7\\u003f \\u05d4\\u05ea\\u05de\\u05d5\\u05e0\\u05d4 \\u05ea\\u05de\\u05d7\\u05e7\\u002e\",\n    \"Replace\": \"\\u05dc\\u05d4\\u05d7\\u05dc\\u05d9\\u05e3\",\n    \"Uploading\": \"\\u05d4\\u05e2\\u05dc\\u05d0\\u05d4\",\n    \"Loading image\": \"\\u05ea\\u05de\\u05d5\\u05e0\\u05ea \\u05d8\\u05e2\\u05d9\\u05e0\\u05d4\",\n    \"Display\": \"\\u05ea\\u05e6\\u05d5\\u05d2\\u05d4\",\n    \"Inline\": \"\\u05d1\\u05e9\\u05d5\\u05e8\\u05d4\",\n    \"Break Text\": \"\\u05d8\\u05e7\\u05e1\\u05d8 \\u05d4\\u05e4\\u05e1\\u05e7\\u05d4\",\n    \"Alternative Text\": \"\\u05d8\\u05e7\\u05e1\\u05d8 \\u05d7\\u05dc\\u05d5\\u05e4\\u05d9\",\n    \"Change Size\": \"\\u05d2\\u05d5\\u05d3\\u05dc \\u05e9\\u05d9\\u05e0\\u05d5\\u05d9\",\n    \"Width\": \"\\u05e8\\u05d5\\u05d7\\u05d1\",\n    \"Height\": \"\\u05d2\\u05d5\\u05d1\\u05d4\",\n    \"Something went wrong. Please try again.\": \"\\u05de\\u05e9\\u05d4\\u05d5 \\u05d4\\u05e9\\u05ea\\u05d1\\u05e9. \\u05d1\\u05d1\\u05e7\\u05e9\\u05d4 \\u05e0\\u05e1\\u05d4 \\u05e9\\u05d5\\u05d1.\",\n    \"Image Caption\": \"כיתוב תמונה\",\n    \"Advanced Edit\": \"עריכה מתקדמת\",\n\n    // Video\n    \"Insert Video\": \"\\u05d4\\u05d5\\u05e1\\u05e4\\u05ea \\u05d5\\u05d9\\u05d3\\u05d9\\u05d0\\u05d5\",\n    \"Embedded Code\": \"\\u05e7\\u05d5\\u05d3 \\u05de\\u05d5\\u05d8\\u05d1\\u05e2\",\n    \"Paste in a video URL\": \"הדבק בכתובת אתר של סרטון\",\n    \"Drop video\": \"ירידה וידאו\",\n    \"Your browser does not support HTML5 video.\": \"הדפדפן שלך אינו תומך וידאו html5.\",\n    \"Upload Video\": \"להעלות וידאו\",\n\n    // Tables\n    \"Insert Table\": \"\\u05d4\\u05db\\u05e0\\u05e1 \\u05d8\\u05d1\\u05dc\\u05d4\",\n    \"Table Header\": \"\\u05db\\u05d5\\u05ea\\u05e8\\u05ea \\u05d8\\u05d1\\u05dc\\u05d4\",\n    \"Remove Table\": \"\\u05d4\\u05e1\\u05e8 \\u05e9\\u05d5\\u05dc\\u05d7\\u05df\",\n    \"Table Style\": \"\\u05e1\\u05d2\\u05e0\\u05d5\\u05df \\u05d8\\u05d1\\u05dc\\u05d4\",\n    \"Horizontal Align\": \"\\u05d0\\u05d5\\u05e4\\u05e7\\u05d9\\u05ea \\u05dc\\u05d9\\u05d9\\u05e9\\u05e8\",\n    \"Row\": \"\\u05e9\\u05d5\\u05e8\\u05d4\",\n    \"Insert row above\": \"\\u05d4\\u05d5\\u05e1\\u05e4\\u05ea \\u05e9\\u05d5\\u05e8\\u05d4 \\u05dc\\u05e4\\u05e0\\u05d9\",\n    \"Insert row below\": \"\\u05d4\\u05d5\\u05e1\\u05e4\\u05ea \\u05e9\\u05d5\\u05e8\\u05d4 \\u05d0\\u05d7\\u05e8\\u05d9\",\n    \"Delete row\": \"\\u05de\\u05d7\\u05d9\\u05e7\\u05ea \\u05e9\\u05d5\\u05e8\\u05d4\",\n    \"Column\": \"\\u05d8\\u05d5\\u05e8\",\n    \"Insert column before\": \"\\u05d4\\u05d5\\u05e1\\u05e4\\u05ea \\u05d8\\u05d5\\u05e8 \\u05dc\\u05e4\\u05e0\\u05d9\",\n    \"Insert column after\": \"\\u05d4\\u05d5\\u05e1\\u05e4\\u05ea \\u05d8\\u05d5\\u05e8 \\u05d0\\u05d7\\u05e8\\u05d9\",\n    \"Delete column\": \"\\u05de\\u05d7\\u05d9\\u05e7\\u05ea \\u05d8\\u05d5\\u05e8\",\n    \"Cell\": \"\\u05ea\\u05d0\",\n    \"Merge cells\": \"\\u05de\\u05d6\\u05d2 \\u05ea\\u05d0\\u05d9\\u05dd\",\n    \"Horizontal split\": \"\\u05e4\\u05e6\\u05dc \\u05d0\\u05d5\\u05e4\\u05e7\\u05d9\",\n    \"Vertical split\": \"\\u05e4\\u05e6\\u05dc \\u05d0\\u05e0\\u05db\\u05d9\",\n    \"Cell Background\": \"\\u05e8\\u05e7\\u05e2 \\u05ea\\u05d0\",\n    \"Vertical Align\": \"\\u05d9\\u05d9\\u05e9\\u05d5\\u05e8 \\u05d0\\u05e0\\u05db\\u05d9\",\n    \"Top\": \"\\u05e2\\u05b6\\u05dc\\u05b4\\u05d9\\u05d5\\u05b9\\u05df\",\n    \"Middle\": \"\\u05ea\\u05b4\\u05d9\\u05db\\u05d5\\u05b9\\u05e0\\u05b4\\u05d9\",\n    \"Bottom\": \"\\u05ea\\u05d7\\u05ea\\u05d5\\u05df\",\n    \"Align Top\": \"\\u05dc\\u05d9\\u05d9\\u05e9\\u05e8 \\u05e2\\u05b6\\u05dc\\u05b4\\u05d9\\u05d5\\u05b9\\u05df\",\n    \"Align Middle\": \"\\u05dc\\u05d9\\u05d9\\u05e9\\u05e8 \\u05ea\\u05b4\\u05d9\\u05db\\u05d5\\u05b9\\u05e0\\u05b4\\u05d9\",\n    \"Align Bottom\": \"\\u05dc\\u05d9\\u05d9\\u05e9\\u05e8 \\u05ea\\u05d7\\u05ea\\u05d5\\u05df\",\n    \"Cell Style\": \"\\u05e1\\u05d2\\u05e0\\u05d5\\u05df \\u05ea\\u05d0\",\n\n    // Files\n    \"Upload File\": \"\\u05d4\\u05e2\\u05dc\\u05d0\\u05ea \\u05e7\\u05d5\\u05d1\\u05e5\",\n    \"Drop file\": \"\\u05d6\\u05e8\\u05d5\\u05e7 \\u05e7\\u05d5\\u05d1\\u05e5 \\u05db\\u05d0\\u05df\",\n\n    // Emoticons\n    \"Emoticons\": \"\\u05e1\\u05de\\u05d9\\u05d9\\u05dc\\u05d9\\u05dd\",\n    \"Grinning face\": \"\\u05d7\\u05d9\\u05d9\\u05da \\u05e4\\u05e0\\u05d9\\u05dd\",\n    \"Grinning face with smiling eyes\": \"\\u05d7\\u05d9\\u05d9\\u05da \\u05e4\\u05e0\\u05d9\\u05dd \\u05e2\\u05dd \\u05e2\\u05d9\\u05e0\\u05d9\\u05d9\\u05dd \\u05de\\u05d7\\u05d9\\u05d9\\u05db\\u05d5\\u05ea\",\n    \"Face with tears of joy\": \"\\u05e4\\u05e0\\u05d9\\u05dd \\u05e2\\u05dd \\u05d3\\u05de\\u05e2\\u05d5\\u05ea \\u05e9\\u05dc \\u05e9\\u05de\\u05d7\\u05d4\",\n    \"Smiling face with open mouth\": \"\\u05d7\\u05d9\\u05d5\\u05da \\u05e4\\u05e0\\u05d9\\u05dd \\u05e2\\u05dd \\u05e4\\u05d4 \\u05e4\\u05ea\\u05d5\\u05d7\",\n    \"Smiling face with open mouth and smiling eyes\": \"\\u05d7\\u05d9\\u05d5\\u05da \\u05e4\\u05e0\\u05d9\\u05dd \\u05e2\\u05dd \\u05e4\\u05d4 \\u05e4\\u05ea\\u05d5\\u05d7 \\u05d5\\u05de\\u05d7\\u05d9\\u05d9\\u05da \\u05e2\\u05d9\\u05e0\\u05d9\\u05d9\\u05dd\",\n    \"Smiling face with open mouth and cold sweat\": \"\\u05d7\\u05d9\\u05d5\\u05da \\u05e4\\u05e0\\u05d9\\u05dd \\u05e2\\u05dd \\u05e4\\u05d4 \\u05e4\\u05ea\\u05d5\\u05d7 \\u05d5\\u05d6\\u05d9\\u05e2\\u05d4 \\u05e7\\u05e8\\u05d4\",\n    \"Smiling face with open mouth and tightly-closed eyes\": \"\\u05d7\\u05d9\\u05d5\\u05da \\u05e4\\u05e0\\u05d9\\u05dd \\u05e2\\u05dd \\u05e4\\u05d4 \\u05e4\\u05ea\\u05d5\\u05d7 \\u05d5\\u05e2\\u05d9\\u05e0\\u05d9\\u05d9\\u05dd \\u05d1\\u05d7\\u05d5\\u05d6\\u05e7\\u05d4\\u002d\\u05e1\\u05d2\\u05d5\\u05e8\\u05d5\\u05ea\",\n    \"Smiling face with halo\": \"\\u05d7\\u05d9\\u05d5\\u05da \\u05e4\\u05e0\\u05d9\\u05dd \\u05e2\\u05dd \\u05d4\\u05d9\\u05dc\\u05d4\",\n    \"Smiling face with horns\": \"\\u05d7\\u05d9\\u05d5\\u05da \\u05e4\\u05e0\\u05d9\\u05dd \\u05e2\\u05dd \\u05e7\\u05e8\\u05e0\\u05d5\\u05ea\",\n    \"Winking face\": \"\\u05e7\\u05e8\\u05d9\\u05e6\\u05d4 \\u05e4\\u05e0\\u05d9\\u05dd\",\n    \"Smiling face with smiling eyes\": \"\\u05d7\\u05d9\\u05d5\\u05da \\u05e4\\u05e0\\u05d9\\u05dd \\u05e2\\u05dd \\u05e2\\u05d9\\u05e0\\u05d9\\u05d9\\u05dd \\u05de\\u05d7\\u05d9\\u05d9\\u05db\\u05d5\\u05ea\",\n    \"Face savoring delicious food\": \"\\u05e4\\u05e0\\u05d9\\u05dd \\u05de\\u05ea\\u05e2\\u05e0\\u05d2 \\u05d0\\u05d5\\u05db\\u05dc \\u05d8\\u05e2\\u05d9\\u05dd\",\n    \"Relieved face\": \"\\u05e4\\u05e0\\u05d9\\u05dd \\u05e9\\u05dc \\u05d4\\u05e7\\u05dc\\u05d4\",\n    \"Smiling face with heart-shaped eyes\": \"\\u05d7\\u05d9\\u05d5\\u05da \\u05e4\\u05e0\\u05d9\\u05dd \\u05e2\\u05dd \\u05e2\\u05d9\\u05e0\\u05d9\\u05d9\\u05dd \\u05d1\\u05e6\\u05d5\\u05e8\\u05ea \\u05dc\\u05d1\",\n    \"Smiling face with sunglasses\": \"\\u05d7\\u05d9\\u05d5\\u05da \\u05e4\\u05e0\\u05d9\\u05dd \\u05e2\\u05dd \\u05de\\u05e9\\u05e7\\u05e4\\u05d9 \\u05e9\\u05de\\u05e9\",\n    \"Smirking face\": \"\\u05d4\\u05d9\\u05d0 \\u05d7\\u05d9\\u05d9\\u05db\\u05d4 \\u05d7\\u05d9\\u05d5\\u05da \\u05e0\\u05d1\\u05d6\\u05d4 \\u05e4\\u05e0\\u05d9\\u05dd\",\n    \"Neutral face\": \"\\u05e4\\u05e0\\u05d9\\u05dd \\u05e0\\u05d9\\u05d8\\u05e8\\u05dc\\u05d9\",\n    \"Expressionless face\": \"\\u05d1\\u05e4\\u05e0\\u05d9\\u05dd \\u05d7\\u05ea\\u05d5\\u05dd\",\n    \"Unamused face\": \"\\u05e4\\u05e0\\u05d9\\u05dd \\u05dc\\u05d0 \\u05de\\u05e9\\u05d5\\u05e2\\u05e9\\u05e2\\u05d9\\u05dd\",\n    \"Face with cold sweat\": \"\\u05e4\\u05e0\\u05d9\\u05dd \\u05e2\\u05dd \\u05d6\\u05d9\\u05e2\\u05d4 \\u05e7\\u05e8\\u05d4\",\n    \"Pensive face\": \"\\u05d1\\u05e4\\u05e0\\u05d9\\u05dd \\u05de\\u05d4\\u05d5\\u05e8\\u05d4\\u05e8\",\n    \"Confused face\": \"\\u05e4\\u05e0\\u05d9\\u05dd \\u05de\\u05d1\\u05d5\\u05dc\\u05d1\\u05dc\\u05d9\\u05dd\",\n    \"Confounded face\": \"\\u05e4\\u05e0\\u05d9\\u05dd \\u05de\\u05d1\\u05d5\\u05dc\\u05d1\\u05dc\",\n    \"Kissing face\": \"\\u05e0\\u05e9\\u05d9\\u05e7\\u05d5\\u05ea \\u05e4\\u05e0\\u05d9\\u05dd\",\n    \"Face throwing a kiss\": \"\\u05e4\\u05e0\\u05d9\\u05dd \\u05dc\\u05d6\\u05e8\\u05d5\\u05e7 \\u05e0\\u05e9\\u05d9\\u05e7\\u05d4\",\n    \"Kissing face with smiling eyes\": \"\\u05e0\\u05e9\\u05d9\\u05e7\\u05d5\\u05ea \\u05e4\\u05e0\\u05d9\\u05dd \\u05e2\\u05dd \\u05e2\\u05d9\\u05e0\\u05d9\\u05d9\\u05dd \\u05de\\u05d7\\u05d9\\u05d9\\u05db\\u05d5\\u05ea\",\n    \"Kissing face with closed eyes\": \"\\u05e0\\u05e9\\u05d9\\u05e7\\u05d5\\u05ea \\u05e4\\u05e0\\u05d9\\u05dd \\u05e2\\u05dd \\u05e2\\u05d9\\u05e0\\u05d9\\u05d9\\u05dd \\u05e1\\u05d2\\u05d5\\u05e8\\u05d5\\u05ea\",\n    \"Face with stuck out tongue\": \"\\u05e4\\u05e0\\u05d9\\u05dd \\u05e2\\u05dd \\u05dc\\u05e9\\u05d5\\u05df \\u05d1\\u05dc\\u05d8\\u05d5\",\n    \"Face with stuck out tongue and winking eye\": \"\\u05e4\\u05e0\\u05d9\\u05dd \\u05e2\\u05dd \\u05dc\\u05e9\\u05d5\\u05df \\u05ea\\u05e7\\u05d5\\u05e2\\u05d4 \\u05d4\\u05d7\\u05d5\\u05e6\\u05d4 \\u05d5\\u05e2\\u05d9\\u05df \\u05e7\\u05d5\\u05e8\\u05e6\\u05ea\",\n    \"Face with stuck out tongue and tightly-closed eyes\": \"\\u05e4\\u05e0\\u05d9\\u05dd \\u05e2\\u05dd \\u05dc\\u05e9\\u05d5\\u05df \\u05ea\\u05e7\\u05d5\\u05e2\\u05d4 \\u05d4\\u05d7\\u05d5\\u05e6\\u05d4 \\u05d5\\u05e2\\u05d9\\u05e0\\u05d9\\u05d9\\u05dd \\u05d1\\u05d7\\u05d5\\u05d6\\u05e7\\u05d4\\u002d\\u05e1\\u05d2\\u05d5\\u05e8\\u05d5\\u05ea\",\n    \"Disappointed face\": \"\\u05e4\\u05e0\\u05d9\\u05dd \\u05de\\u05d0\\u05d5\\u05db\\u05d6\\u05d1\\u05d9\\u05dd\",\n    \"Worried face\": \"\\u05e4\\u05e0\\u05d9\\u05dd \\u05de\\u05d5\\u05d3\\u05d0\\u05d2\\u05d9\\u05dd\",\n    \"Angry face\": \"\\u05e4\\u05e0\\u05d9\\u05dd \\u05db\\u05d5\\u05e2\\u05e1\\u05d9\\u05dd\",\n    \"Pouting face\": \"\\u05de\\u05e9\\u05d5\\u05e8\\u05d1\\u05d1 \\u05e4\\u05e0\\u05d9\\u05dd\",\n    \"Crying face\": \"\\u05d1\\u05db\\u05d9 \\u05e4\\u05e0\\u05d9\\u05dd\",\n    \"Persevering face\": \"\\u05d4\\u05ea\\u05de\\u05d3\\u05ea \\u05e4\\u05e0\\u05d9\\u05dd\",\n    \"Face with look of triumph\": \"\\u05e4\\u05e0\\u05d9\\u05dd \\u05e2\\u05dd \\u05de\\u05d1\\u05d8 \\u05e9\\u05dc \\u05e0\\u05e6\\u05d7\\u05d5\\u05df\",\n    \"Disappointed but relieved face\": \"\\u05de\\u05d0\\u05d5\\u05db\\u05d6\\u05d1 \\u05d0\\u05d1\\u05dc \\u05d4\\u05d5\\u05e7\\u05dc \\u05e4\\u05e0\\u05d9\\u05dd\",\n    \"Frowning face with open mouth\": \"\\u05e7\\u05de\\u05d8 \\u05d0\\u05ea \\u05de\\u05e6\\u05d7 \\u05e4\\u05e0\\u05d9\\u05dd \\u05e2\\u05dd \\u05e4\\u05d4 \\u05e4\\u05ea\\u05d5\\u05d7\",\n    \"Anguished face\": \"\\u05e4\\u05e0\\u05d9\\u05dd \\u05de\\u05d9\\u05d5\\u05e1\\u05e8\\u05d9\\u05dd\",\n    \"Fearful face\": \"\\u05e4\\u05e0\\u05d9\\u05dd \\u05e9\\u05d7\\u05e9\\u05e9\\u05d5\",\n    \"Weary face\": \"\\u05e4\\u05e0\\u05d9\\u05dd \\u05d5\\u05d9\\u05e8\\u05d9\",\n    \"Sleepy face\": \"\\u05e4\\u05e0\\u05d9\\u05dd \\u05e9\\u05dc \\u05e1\\u05dc\\u05d9\\u05e4\\u05d9\",\n    \"Tired face\": \"\\u05e4\\u05e0\\u05d9\\u05dd \\u05e2\\u05d9\\u05d9\\u05e4\\u05d9\\u05dd\",\n    \"Grimacing face\": \"\\u05d4\\u05d5\\u05d0 \\u05d4\\u05e2\\u05d5\\u05d5\\u05d4 \\u05d0\\u05ea \\u05e4\\u05e0\\u05d9 \\u05e4\\u05e0\\u05d9\\u05dd\",\n    \"Loudly crying face\": \"\\u05d1\\u05e7\\u05d5\\u05dc \\u05e8\\u05dd \\u05d1\\u05d5\\u05db\\u05d4 \\u05e4\\u05e0\\u05d9\\u05dd\",\n    \"Face with open mouth\": \"\\u05e4\\u05e0\\u05d9\\u05dd \\u05e2\\u05dd \\u05e4\\u05d4 \\u05e4\\u05ea\\u05d5\\u05d7\",\n    \"Hushed face\": \"\\u05e4\\u05e0\\u05d9\\u05dd \\u05e9\\u05d5\\u05e7\\u05d8\\u05d9\\u05dd\",\n    \"Face with open mouth and cold sweat\": \"\\u05e4\\u05e0\\u05d9\\u05dd \\u05e2\\u05dd \\u05e4\\u05d4 \\u05e4\\u05ea\\u05d5\\u05d7 \\u05d5\\u05d6\\u05d9\\u05e2\\u05d4 \\u05e7\\u05e8\\u05d4\\u0022\",\n    \"Face screaming in fear\": \"\\u05e4\\u05e0\\u05d9\\u05dd \\u05e6\\u05d5\\u05e8\\u05d7\\u05d9\\u05dd \\u05d1\\u05e4\\u05d7\\u05d3\",\n    \"Astonished face\": \"\\u05e4\\u05e0\\u05d9\\u05d5 \\u05e0\\u05d3\\u05d4\\u05de\\u05d5\\u05ea\",\n    \"Flushed face\": \"\\u05e4\\u05e0\\u05d9\\u05d5 \\u05e1\\u05de\\u05d5\\u05e7\\u05d5\\u05ea\",\n    \"Sleeping face\": \"\\u05e9\\u05d9\\u05e0\\u05d4 \\u05e4\\u05e0\\u05d9\\u05dd\",\n    \"Dizzy face\": \"\\u05e4\\u05e0\\u05d9\\u05dd \\u05e9\\u05dc \\u05d3\\u05d9\\u05d6\\u05d9\",\n    \"Face without mouth\": \"\\u05e4\\u05e0\\u05d9\\u05dd \\u05dc\\u05dc\\u05d0 \\u05e4\\u05d4\",\n    \"Face with medical mask\": \"\\u05e4\\u05e0\\u05d9\\u05dd \\u05e2\\u05dd \\u05de\\u05e1\\u05db\\u05d4 \\u05e8\\u05e4\\u05d5\\u05d0\\u05d9\\u05ea\",\n\n    // Line breaker\n    \"Break\": \"\\u05d4\\u05e4\\u05e1\\u05e7\\u05d4\",\n\n    // Math\n    \"Subscript\": \"\\u05db\\u05ea\\u05d1 \\u05ea\\u05d7\\u05ea\\u05d9\",\n    \"Superscript\": \"\\u05e2\\u05d9\\u05dc\\u05d9\",\n\n    // Full screen\n    \"Fullscreen\": \"\\u05de\\u05e1\\u05da \\u05de\\u05dc\\u05d0\",\n\n    // Horizontal line\n    \"Insert Horizontal Line\": \"\\u05d4\\u05d5\\u05e1\\u05e4\\u05ea \\u05e7\\u05d5 \\u05d0\\u05d5\\u05e4\\u05e7\\u05d9\",\n\n    // Clear formatting\n    \"Clear Formatting\": \"\\u05dc\\u05d4\\u05e1\\u05d9\\u05e8 \\u05e2\\u05d9\\u05e6\\u05d5\\u05d1\",\n\n    // Save\n    \"Save\": \"\\u05dc\\u05d4\\u05e6\\u05d9\\u05dc\",\n\n    // Undo, redo\n    \"Undo\": \"\\u05d1\\u05d9\\u05d8\\u05d5\\u05dc\",\n    \"Redo\": \"\\u05d1\\u05e6\\u05e2 \\u05e9\\u05d5\\u05d1\",\n\n    // Select all\n    \"Select All\": \"\\u05d1\\u05d7\\u05e8 \\u05d4\\u05db\\u05dc\",\n\n    // Code view\n    \"Code View\": \"\\u05ea\\u05e6\\u05d5\\u05d2\\u05ea \\u05e7\\u05d5\\u05d3\",\n\n    // Quote\n    \"Quote\": \"\\u05e6\\u05d9\\u05d8\\u05d5\\u05d8\",\n    \"Increase\": \"\\u05dc\\u05d4\\u05d2\\u05d1\\u05d9\\u05e8\",\n    \"Decrease\": \"\\u05d9\\u05e8\\u05d9\\u05d3\\u05d4\",\n\n    // Quick Insert\n    \"Quick Insert\": \"\\u05db\\u05e0\\u05e1 \\u05de\\u05d4\\u05d9\\u05e8\",\n\n    // Spcial Characters\n    \"Special Characters\": \"תווים מיוחדים\",\n    \"Latin\": \"לָטִינִית\",\n    \"Greek\": \"יווני\",\n    \"Cyrillic\": \"קירילית\",\n    \"Punctuation\": \"פיסוק\",\n    \"Currency\": \"מַטְבֵּעַ\",\n    \"Arrows\": \"חצים\",\n    \"Math\": \"מתמטיקה\",\n    \"Misc\": \"שונות\",\n\n    // Print.\n    \"Print\": \"הדפס\",\n\n    // Spell Checker.\n    \"Spell Checker\": \"בודק איות\",\n\n    // Help\n    \"Help\": \"עֶזרָה\",\n    \"Shortcuts\": \"קיצורי דרך\",\n    \"Inline Editor\": \"עורך מוטבע\",\n    \"Show the editor\": \"להראות את העורך\",\n    \"Common actions\": \"פעולות נפוצות\",\n    \"Copy\": \"עותק\",\n    \"Cut\": \"גזירה\",\n    \"Paste\": \"לְהַדבִּיק\",\n    \"Basic Formatting\": \"עיצוב בסיסי\",\n    \"Increase quote level\": \"רמת ציטוט\",\n    \"Decrease quote level\": \"רמת ציטוט ירידה\",\n    \"Image / Video\": \"תמונה / וידאו\",\n    \"Resize larger\": \"גודל גדול יותר\",\n    \"Resize smaller\": \"גודל קטן יותר\",\n    \"Table\": \"שולחן\",\n    \"Select table cell\": \"בחר תא תא - -\",\n    \"Extend selection one cell\": \"להאריך את הבחירה תא אחד\",\n    \"Extend selection one row\": \"להאריך את הבחירה שורה אחת\",\n    \"Navigation\": \"ניווט\",\n    \"Focus popup / toolbar\": \"מוקד קופץ / סרגל הכלים\",\n    \"Return focus to previous position\": \"חזרה להתמקד קודם\",\n\n    // Embed.ly\n    \"Embed URL\": \"כתובת אתר להטביע\",\n    \"Paste in a URL to embed\": \"הדבק כתובת אתר להטביע\",\n\n    // Word Paste.\n    \"The pasted content is coming from a Microsoft Word document. Do you want to keep the format or clean it up?\": \"התוכן המודבק מגיע ממסמך Word של Microsoft. האם ברצונך לשמור את הפורמט או לנקות אותו?\",\n    \"Keep\": \"לִשְׁמוֹר\",\n    \"Clean\": \"לְנַקוֹת\",\n    \"Word Paste Detected\": \"הדבק מילה זוהתה\"\n  },\n  direction: \"rtl\"\n};\n\n}));\n"
  },
  {
    "path": "src/main/resources/static/plugins/froala-editor/js/languages/hr.js",
    "content": "/*!\n * froala_editor v2.9.1 (https://www.froala.com/wysiwyg-editor)\n * License https://froala.com/wysiwyg-editor/terms/\n * Copyright 2014-2018 Froala Labs\n */\n\n(function (factory) {\n    if (typeof define === 'function' && define.amd) {\n        // AMD. Register as an anonymous module.\n        define(['jquery'], factory);\n    } else if (typeof module === 'object' && module.exports) {\n        // Node/CommonJS\n        module.exports = function( root, jQuery ) {\n            if ( jQuery === undefined ) {\n                // require('jQuery') returns a factory that requires window to\n                // build a jQuery instance, we normalize how we use modules\n                // that require this pattern but the window provided is a noop\n                // if it's defined (how jquery works)\n                if ( typeof window !== 'undefined' ) {\n                    jQuery = require('jquery');\n                }\n                else {\n                    jQuery = require('jquery')(root);\n                }\n            }\n            return factory(jQuery);\n        };\n    } else {\n        // Browser globals\n        factory(window.jQuery);\n    }\n}(function ($) {\n/**\n * Croatian\n */\n\n$.FE.LANGUAGE['hr'] = {\n  translation: {\n    // Place holder\n    \"Type something\": \"Napi\\u0161i ne\\u0161to\",\n\n    // Basic formatting\n    \"Bold\": \"Podebljaj\",\n    \"Italic\": \"Kurziv\",\n    \"Underline\": \"Podcrtano\",\n    \"Strikethrough\": \"Precrtano\",\n\n    // Main buttons\n    \"Insert\": \"Umetni\",\n    \"Delete\": \"Obri\\u0161i\",\n    \"Cancel\": \"Otka\\u017ei\",\n    \"OK\": \"U redu\",\n    \"Back\": \"Natrag\",\n    \"Remove\": \"Ukloni\",\n    \"More\": \"Vi\\u0161e\",\n    \"Update\": \"A\\u017euriraj\",\n    \"Style\": \"Stil\",\n\n    // Font\n    \"Font Family\": \"Odaberi font\",\n    \"Font Size\": \"Veli\\u010dina fonta\",\n\n    // Colors\n    \"Colors\": \"Boje\",\n    \"Background\": \"Pozadina\",\n    \"Text\": \"Tekst\",\n    \"HEX Color\": \"Heksadecimalne boje\",\n\n    // Paragraphs\n    \"Paragraph Format\": \"Format odlomka\",\n    \"Normal\": \"Normalno\",\n    \"Code\": \"Izvorni kod\",\n    \"Heading 1\": \"Naslov 1\",\n    \"Heading 2\": \"Naslov 2\",\n    \"Heading 3\": \"Naslov 3\",\n    \"Heading 4\": \"Naslov 4\",\n\n    // Style\n    \"Paragraph Style\": \"Stil odlomka\",\n    \"Inline Style\": \"Stil u liniji\",\n\n    // Alignment\n    \"Align\": \"Poravnaj\",\n    \"Align Left\": \"Poravnaj lijevo\",\n    \"Align Center\": \"Poravnaj po sredini\",\n    \"Align Right\": \"Poravnaj desno\",\n    \"Align Justify\": \"Obostrano poravnanje\",\n    \"None\": \"Nijedan\",\n\n    // Lists\n    \"Ordered List\": \"Ure\\u0111ena lista\",\n    \"Unordered List\": \"Neure\\u0111ena lista\",\n\n    // Indent\n    \"Decrease Indent\": \"Uvuci odlomak\",\n    \"Increase Indent\": \"Izvuci odlomak\",\n\n    // Links\n    \"Insert Link\": \"Umetni link\",\n    \"Open in new tab\": \"Otvori u novom prozoru\",\n    \"Open Link\": \"Otvori link\",\n    \"Edit Link\": \"Uredi link\",\n    \"Unlink\": \"Ukloni link\",\n    \"Choose Link\": \"Odaberi link\",\n\n    // Images\n    \"Insert Image\": \"Umetni sliku\",\n    \"Upload Image\": \"Prijenos slike\",\n    \"By URL\": \"Prema URL\",\n    \"Browse\": \"Odabir\",\n    \"Drop image\": \"Ispusti sliku\",\n    \"or click\": \"ili odaberi\",\n    \"Manage Images\": \"Upravljanje slikama\",\n    \"Loading\": \"U\\u010ditavanje\",\n    \"Deleting\": \"Brisanje\",\n    \"Tags\": \"Oznake\",\n    \"Are you sure? Image will be deleted.\": \"Da li ste sigurni da \\u017eelite obrisati ovu sliku?\",\n    \"Replace\": \"Zamijeni\",\n    \"Uploading\": \"Prijenos\",\n    \"Loading image\": \"Otvaram sliku\",\n    \"Display\": \"Prika\\u017ei\",\n    \"Inline\": \"U liniji\",\n    \"Break Text\": \"Odvojeni tekst\",\n    \"Alternative Text\": \"Alternativni tekst\",\n    \"Change Size\": \"Promjena veli\\u010dine\",\n    \"Width\": \"\\u0160irina\",\n    \"Height\": \"Visina\",\n    \"Something went wrong. Please try again.\": \"Ne\\u0161to je po\\u0161lo po zlu. Molimo poku\\u0161ajte ponovno.\",\n    \"Image Caption\": \"Opis slike\",\n    \"Advanced Edit\": \"Napredno uređivanje\",\n\n    // Video\n    \"Insert Video\": \"Umetni video\",\n    \"Embedded Code\": \"Ugra\\u0111eni kod\",\n    \"Paste in a video URL\": \"Zalijepite u URL videozapisa\",\n    \"Drop video\": \"Ispusti video\",\n    \"Your browser does not support HTML5 video.\": \"Vaš preglednik ne podržava HTML video.\",\n    \"Upload Video\": \"Prenesi videozapis\",\n\n    // Tables\n    \"Insert Table\": \"Umetni tablicu\",\n    \"Table Header\": \"Zaglavlje tablice\",\n    \"Remove Table\": \"Izbri\\u0161i tablicu\",\n    \"Table Style\": \"Tablica stil\",\n    \"Horizontal Align\": \"Horizontalna poravnanje\",\n    \"Row\": \"Red\",\n    \"Insert row above\": \"Umetni red iznad\",\n    \"Insert row below\": \"Umetni red ispod\",\n    \"Delete row\": \"Obri\\u0161i red\",\n    \"Column\": \"Stupac\",\n    \"Insert column before\": \"Umetni stupac prije\",\n    \"Insert column after\": \"Umetni stupac poslije\",\n    \"Delete column\": \"Obri\\u0161i stupac\",\n    \"Cell\": \"Polje\",\n    \"Merge cells\": \"Spoji polja\",\n    \"Horizontal split\": \"Horizontalno razdvajanje polja\",\n    \"Vertical split\": \"Vertikalno razdvajanje polja\",\n    \"Cell Background\": \"Polje pozadine\",\n    \"Vertical Align\": \"Vertikalno poravnanje\",\n    \"Top\": \"Vrh\",\n    \"Middle\": \"Sredina\",\n    \"Bottom\": \"Dno\",\n    \"Align Top\": \"Poravnaj na vrh\",\n    \"Align Middle\": \"Poravnaj po sredini\",\n    \"Align Bottom\": \"Poravnaj na dno\",\n    \"Cell Style\": \"Stil polja\",\n\n    // Files\n    \"Upload File\": \"Prijenos datoteke\",\n    \"Drop file\": \"Ispusti datoteku\",\n\n    // Emoticons\n    \"Emoticons\": \"Emotikoni\",\n    \"Grinning face\": \"Nacereno lice\",\n    \"Grinning face with smiling eyes\": \"Nacereno lice s nasmije\\u0161enim o\\u010dima\",\n    \"Face with tears of joy\": \"Lice sa suzama radosnicama\",\n    \"Smiling face with open mouth\": \"Nasmijano lice s otvorenim ustima\",\n    \"Smiling face with open mouth and smiling eyes\": \"Nasmijano lice s otvorenim ustima i nasmijanim o\\u010dima\",\n    \"Smiling face with open mouth and cold sweat\": \"Nasmijano lice s otvorenim ustima i hladnim znojem\",\n    \"Smiling face with open mouth and tightly-closed eyes\": \"Nasmijano lice s otvorenim ustima i \\u010dvrsto zatvorenih o\\u010diju\",\n    \"Smiling face with halo\": \"Nasmijano lice sa aureolom\",\n    \"Smiling face with horns\": \"Nasmijano lice s rogovima\",\n    \"Winking face\": \"Lice koje namiguje\",\n    \"Smiling face with smiling eyes\": \"Nasmijano lice s nasmiješenim o\\u010dima\",\n    \"Face savoring delicious food\": \"Lice koje u\\u017eiva ukusnu hranu\",\n    \"Relieved face\": \"Lice s olak\\u0161anjem\",\n    \"Smiling face with heart-shaped eyes\": \"Nasmijano lice sa o\\u010dima u obliku srca\",\n    \"Smiling face with sunglasses\": \"Nasmijano lice sa sun\\u010danim nao\\u010dalama\",\n    \"Smirking face\": \"Zlokobno nasmije\\u0161eno lice\",\n    \"Neutral face\": \"Neutralno lice\",\n    \"Expressionless face\": \"Bezizra\\u017eajno lice\",\n    \"Unamused face\": \"Nezainteresirano lice\",\n    \"Face with cold sweat\": \"Lice s hladnim znojem\",\n    \"Pensive face\": \"Zami\\u0161ljeno lice\",\n    \"Confused face\": \"Zbunjeno lice\",\n    \"Confounded face\": \"Zbunjeno lice\",\n    \"Kissing face\": \"Lice s poljupcem\",\n    \"Face throwing a kiss\": \"Lice koje baca poljubac\",\n    \"Kissing face with smiling eyes\": \"Lice s poljupcem s nasmije\\u0161enim o\\u010dima\",\n    \"Kissing face with closed eyes\": \"Lice s poljupcem zatvorenih o\\u010diju\",\n    \"Face with stuck out tongue\": \"Lice s ispru\\u017eenim jezikom\",\n    \"Face with stuck out tongue and winking eye\": \"Lice s ispru\\u017eenim jezikom koje namiguje\",\n    \"Face with stuck out tongue and tightly-closed eyes\": \"Lice s ispru\\u017eenim jezikom i \\u010dvrsto zatvorenih o\\u010diju\",\n    \"Disappointed face\": \"Razo\\u010darano lice\",\n    \"Worried face\": \"Zabrinuto lice\",\n    \"Angry face\": \"Ljutito lice\",\n    \"Pouting face\": \"Nadureno lice\",\n    \"Crying face\": \"Uplakano lice\",\n    \"Persevering face\": \"Lice s negodovanjem\",\n    \"Face with look of triumph\": \"Trijumfalno lice\",\n    \"Disappointed but relieved face\": \"Razo\\u010darano ali olakšano lice\",\n    \"Frowning face with open mouth\": \"Namrgo\\u0111eno lice s otvorenim ustima\",\n    \"Anguished face\": \"Tjeskobno lice\",\n    \"Fearful face\": \"Prestra\\u0161eno lice\",\n    \"Weary face\": \"Umorno lice\",\n    \"Sleepy face\": \"Pospano lice\",\n    \"Tired face\": \"Umorno lice\",\n    \"Grimacing face\": \"Lice sa grimasama\",\n    \"Loudly crying face\": \"Glasno pla\\u010du\\u0107e lice\",\n    \"Face with open mouth\": \"Lice s otvorenim ustima\",\n    \"Hushed face\": \"Tiho lice\",\n    \"Face with open mouth and cold sweat\": \"Lice s otvorenim ustima i hladnim znojem\",\n    \"Face screaming in fear\": \"Lice koje vri\\u0161ti u strahu\",\n    \"Astonished face\": \"Zaprepa\\u0161teno lice\",\n    \"Flushed face\": \"Zajapureno lice\",\n    \"Sleeping face\": \"Spava\\u0107e lice\",\n    \"Dizzy face\": \"Lice sa vrtoglavicom\",\n    \"Face without mouth\": \"Lice bez usta\",\n    \"Face with medical mask\": \"Lice s medicinskom maskom\",\n\n    // Line breaker\n    \"Break\": \"Odvojeno\",\n\n    // Math\n    \"Subscript\": \"Indeks\",\n    \"Superscript\": \"Eksponent\",\n\n    // Full screen\n    \"Fullscreen\": \"Puni zaslon\",\n\n    // Horizontal line\n    \"Insert Horizontal Line\": \"Umetni liniju\",\n\n    // Clear formatting\n    \"Clear Formatting\": \"Ukloni oblikovanje\",\n\n    // Save\n    \"Save\": \"\\u0055\\u0161\\u0074\\u0065\\u0064\\u006a\\u0065\\u0074\\u0069\",\n\n    // Undo, redo\n    \"Undo\": \"Korak natrag\",\n    \"Redo\": \"Korak naprijed\",\n\n    // Select all\n    \"Select All\": \"Odaberi sve\",\n\n    // Code view\n    \"Code View\": \"Pregled koda\",\n\n    // Quote\n    \"Quote\": \"Citat\",\n    \"Increase\": \"Pove\\u0107aj\",\n    \"Decrease\": \"Smanji\",\n\n    // Quick Insert\n    \"Quick Insert\": \"Brzo umetak\",\n\n    // Spcial Characters\n    \"Special Characters\": \"Posebni znakovi\",\n    \"Latin\": \"Latinski\",\n    \"Greek\": \"Grčki\",\n    \"Cyrillic\": \"Ćirilica\",\n    \"Punctuation\": \"Interpunkcija\",\n    \"Currency\": \"Valuta\",\n    \"Arrows\": \"Strelice\",\n    \"Math\": \"Matematika\",\n    \"Misc\": \"Razno\",\n\n    // Print.\n    \"Print\": \"Otisak\",\n\n    // Spell Checker.\n    \"Spell Checker\": \"Provjeritelj pravopisa\",\n\n    // Help\n    \"Help\": \"Pomoć\",\n    \"Shortcuts\": \"Prečaci\",\n    \"Inline Editor\": \"Inline editor\",\n    \"Show the editor\": \"Prikaži urednika\",\n    \"Common actions\": \"Zajedničke radnje\",\n    \"Copy\": \"Kopirati\",\n    \"Cut\": \"Rez\",\n    \"Paste\": \"Zalijepiti\",\n    \"Basic Formatting\": \"Osnovno oblikovanje\",\n    \"Increase quote level\": \"Povećati razinu citata\",\n    \"Decrease quote level\": \"Smanjite razinu citata\",\n    \"Image / Video\": \"Slika / video\",\n    \"Resize larger\": \"Promijenite veličinu većeg\",\n    \"Resize smaller\": \"Promijenite veličinu manju\",\n    \"Table\": \"Stol\",\n    \"Select table cell\": \"Odaberite stolnu ćeliju\",\n    \"Extend selection one cell\": \"Proširiti odabir jedne ćelije\",\n    \"Extend selection one row\": \"Proširite odabir jednog retka\",\n    \"Navigation\": \"Navigacija\",\n    \"Focus popup / toolbar\": \"Fokus popup / alatnoj traci\",\n    \"Return focus to previous position\": \"Vratiti fokus na prethodnu poziciju\",\n\n    // Embed.ly\n    \"Embed URL\": \"Uredi url\",\n    \"Paste in a URL to embed\": \"Zalijepite URL da biste ga ugradili\",\n\n    // Word Paste.\n    \"The pasted content is coming from a Microsoft Word document. Do you want to keep the format or clean it up?\": \"Zalijepi sadržaj dolazi iz Microsoft Word dokumenta. Želite li zadržati format ili očistiti?\",\n    \"Keep\": \"Zadržati\",\n    \"Clean\": \"Čist\",\n    \"Word Paste Detected\": \"Otkrivena je zastavica riječi\"\n  },\n  direction: \"ltr\"\n};\n\n}));\n"
  },
  {
    "path": "src/main/resources/static/plugins/froala-editor/js/languages/hu.js",
    "content": "/*!\n * froala_editor v2.9.1 (https://www.froala.com/wysiwyg-editor)\n * License https://froala.com/wysiwyg-editor/terms/\n * Copyright 2014-2018 Froala Labs\n */\n\n(function (factory) {\n    if (typeof define === 'function' && define.amd) {\n        // AMD. Register as an anonymous module.\n        define(['jquery'], factory);\n    } else if (typeof module === 'object' && module.exports) {\n        // Node/CommonJS\n        module.exports = function( root, jQuery ) {\n            if ( jQuery === undefined ) {\n                // require('jQuery') returns a factory that requires window to\n                // build a jQuery instance, we normalize how we use modules\n                // that require this pattern but the window provided is a noop\n                // if it's defined (how jquery works)\n                if ( typeof window !== 'undefined' ) {\n                    jQuery = require('jquery');\n                }\n                else {\n                    jQuery = require('jquery')(root);\n                }\n            }\n            return factory(jQuery);\n        };\n    } else {\n        // Browser globals\n        factory(window.jQuery);\n    }\n}(function ($) {\n/**\n * Hungarian\n */\n\n$.FE.LANGUAGE['hu'] = {\n  translation: {\n    // Place holder\n    \"Type something\": \"Sz\\u00f6veg...\",\n\n    // Basic formatting\n    \"Bold\": \"F\\u00e9lk\\u00f6v\\u00e9r\",\n    \"Italic\": \"D\\u0151lt\",\n    \"Underline\": \"Al\\u00e1h\\u00fazott\",\n    \"Strikethrough\": \"\\u00c1th\\u00fazott\",\n\n    // Main buttons\n    \"Insert\": \"Beilleszt\\u00e9s\",\n    \"Delete\": \"T\\u00f6rl\\u00e9s\",\n    \"Cancel\": \"M\\u00e9gse\",\n    \"OK\": \"Rendben\",\n    \"Back\": \"Vissza\",\n    \"Remove\": \"Elt\\u00e1vol\\u00edt\\u00e1s\",\n    \"More\": \"T\\u00f6bb\",\n    \"Update\": \"Friss\\u00edt\\u00e9s\",\n    \"Style\": \"St\\u00edlus\",\n\n    // Font\n    \"Font Family\": \"Bet\\u0171t\\u00edpus\",\n    \"Font Size\": \"Bet\\u0171m\\u00e9ret\",\n\n    // Colors\n    \"Colors\": \"Sz\\u00ednek\",\n    \"Background\": \"H\\u00e1tt\\u00e9r\",\n    \"Text\": \"Sz\\u00f6veg\",\n    \"HEX Color\": \"Hex színű\",\n\n    // Paragraphs\n    \"Paragraph Format\": \"Form\\u00e1tumok\",\n    \"Normal\": \"Norm\\u00e1l\",\n    \"Code\": \"K\\u00f3d\",\n    \"Heading 1\": \"C\\u00edmsor 1\",\n    \"Heading 2\": \"C\\u00edmsor 2\",\n    \"Heading 3\": \"C\\u00edmsor 3\",\n    \"Heading 4\": \"C\\u00edmsor 4\",\n\n    // Style\n    \"Paragraph Style\": \"Bekezd\\u00e9s st\\u00edlusa\",\n    \"Inline Style\": \" Helyi st\\u00edlus\",\n\n    // Alignment\n    \"Align\": \"Igaz\\u00edt\\u00e1s\",\n    \"Align Left\": \"Balra igaz\\u00edt\",\n    \"Align Center\": \"K\\u00f6z\\u00e9pre z\\u00e1r\",\n    \"Align Right\": \"Jobbra igaz\\u00edt\",\n    \"Align Justify\": \"Sorkiz\\u00e1r\\u00e1s\",\n    \"None\": \"Egyik sem\",\n\n    // Lists\n    \"Ordered List\": \"Sz\\u00e1moz\\u00e1s\",\n    \"Unordered List\": \"Felsorol\\u00e1s\",\n\n    // Indent\n    \"Decrease Indent\": \"Beh\\u00faz\\u00e1s cs\\u00f6kkent\\u00e9se\",\n    \"Increase Indent\": \"Beh\\u00faz\\u00e1s n\\u00f6vel\\u00e9se\",\n\n    // Links\n    \"Insert Link\": \"Hivatkoz\\u00e1s beilleszt\\u00e9se\",\n    \"Open in new tab\": \"Megnyit\\u00e1s \\u00faj lapon\",\n    \"Open Link\": \"Hivatkoz\\u00e1s megnyit\\u00e1sa\",\n    \"Edit Link\": \"Hivatkoz\\u00e1 s szerkeszt\\u00e9se\",\n    \"Unlink\": \"Hivatkoz\\u00e1s t\\u00f6rl\\u00e9se\",\n    \"Choose Link\": \"Keres\\u00e9s a lapok k\\u00f6z\\u00f6tt\",\n\n    // Images\n    \"Insert Image\": \"K\\u00e9p beilleszt\\u00e9se\",\n    \"Upload Image\": \"K\\u00e9p felt\\u00f6lt\\u00e9se\",\n    \"By URL\": \"Webc\\u00edm megad\\u00e1sa\",\n    \"Browse\": \"B\\u00f6ng\\u00e9sz\\u00e9s\",\n    \"Drop image\": \"H\\u00fazza ide a k\\u00e9pet\",\n    \"or click\": \"vagy kattintson ide\",\n    \"Manage Images\": \"K\\u00e9pek kezel\\u00e9se\",\n    \"Loading\": \"Bet\\u00f6lt\\u00e9s...\",\n    \"Deleting\": \"T\\u00f6rl\\u00e9s...\",\n    \"Tags\": \"C\\u00edmk\\u00e9k\",\n    \"Are you sure? Image will be deleted.\": \"Biztos benne? A k\\u00e9p t\\u00f6rl\\u00e9sre ker\\u00fcl.\",\n    \"Replace\": \"Csere\",\n    \"Uploading\": \"Felt\\u00f6lt\\u00e9s\",\n    \"Loading image\": \"K\\u00e9p bet\\u00f6lt\\u00e9se\",\n    \"Display\": \"Kijelz\\u0151\",\n    \"Inline\": \"Sorban\",\n    \"Break Text\": \"Sz\\u00f6veg t\\u00f6r\\u00e9se\",\n    \"Alternative Text\": \"Alternat\\u00edv sz\\u00f6veg\",\n    \"Change Size\": \"M\\u00e9ret m\\u00f3dos\\u00edt\\u00e1sa\",\n    \"Width\": \"Sz\\u00e9less\\u00e9g\",\n    \"Height\": \"Magass\\u00e1g\",\n    \"Something went wrong. Please try again.\": \"Valami elromlott. K\\u00e9rlek pr\\u00f3b\\u00e1ld \\u00fajra.\",\n    \"Image Caption\": \"Képaláírás\",\n    \"Advanced Edit\": \"Fejlett szerkesztés\",\n\n    // Video\n    \"Insert Video\": \"Vide\\u00f3 beilleszt\\u00e9se\",\n    \"Embedded Code\": \"K\\u00f3d bem\\u00e1sol\\u00e1sa\",\n    \"Paste in a video URL\": \"Illessze be a videó URL-címét\",\n    \"Drop video\": \"Csepp videót\",\n    \"Your browser does not support HTML5 video.\": \"A böngészője nem támogatja a html5 videót.\",\n    \"Upload Video\": \"Videó feltöltése\",\n\n    // Tables\n    \"Insert Table\": \"T\\u00e1bl\\u00e1zat beilleszt\\u00e9se\",\n    \"Table Header\": \"T\\u00e1bl\\u00e1zat fejl\\u00e9ce\",\n    \"Remove Table\": \"T\\u00e1bla elt\\u00e1vol\\u00edt\\u00e1sa\",\n    \"Table Style\": \"T\\u00e1bl\\u00e1zat st\\u00edlusa\",\n    \"Horizontal Align\": \"V\\u00edzszintes igaz\\u00edt\\u00e1s\",\n    \"Row\": \"Sor\",\n    \"Insert row above\": \"Sor besz\\u00far\\u00e1sa el\\u00e9\",\n    \"Insert row below\": \"Sor besz\\u00far\\u00e1sa m\\u00f6g\\u00e9\",\n    \"Delete row\": \"Sor t\\u00f6rl\\u00e9se\",\n    \"Column\": \"Oszlop\",\n    \"Insert column before\": \"Oszlop besz\\u00far\\u00e1sa el\\u00e9\",\n    \"Insert column after\": \"Oszlop besz\\u00far\\u00e1sa m\\u00f6g\\u00e9\",\n    \"Delete column\": \"Oszlop t\\u00f6rl\\u00e9se\",\n    \"Cell\": \"Cella\",\n    \"Merge cells\": \"Cell\\u00e1k egyes\\u00edt\\u00e9se\",\n    \"Horizontal split\": \"V\\u00edzszintes osztott\",\n    \"Vertical split\": \"F\\u00fcgg\\u0151leges osztott\",\n    \"Cell Background\": \"Cella h\\u00e1ttere\",\n    \"Vertical Align\": \"F\\u00fcgg\\u0151leges fej\\u00e1ll\\u00edt\\u00e1s\",\n    \"Top\": \"Fels\\u0151\",\n    \"Middle\": \"K\\u00f6z\\u00e9ps\\u0151\",\n    \"Bottom\": \"Als\\u00f3\",\n    \"Align Top\": \"Igaz\\u00edtsa fel\\u00fclre\",\n    \"Align Middle\": \"Igaz\\u00edtsa k\\u00f6z\\u00e9pre\",\n    \"Align Bottom\": \"Igaz\\u00edtsa al\\u00falra\",\n    \"Cell Style\": \"Cella st\\u00edlusa\",\n\n    // Files\n    \"Upload File\": \"F\\u00e1jl felt\\u00f6lt\\u00e9se\",\n    \"Drop file\": \"H\\u00fazza ide a f\\u00e1jlt\",\n\n    // Emoticons\n    \"Emoticons\": \"Hangulatjelek\",\n    \"Grinning face\": \"Vigyorg\\u00f3 arc\",\n    \"Grinning face with smiling eyes\": \"Vigyorg\\u00f3 arc mosolyg\\u00f3 szemekkel\",\n    \"Face with tears of joy\": \"Arc \\u00e1t az \\u00f6r\\u00f6m k\\u00f6nnyei\",\n    \"Smiling face with open mouth\": \"Mosolyg\\u00f3 arc t\\u00e1tott sz\\u00e1jjal\",\n    \"Smiling face with open mouth and smiling eyes\": \"Mosolyg\\u00f3 arc t\\u00e1tott sz\\u00e1jjal \\u00e9s mosolyg\\u00f3 szemek\",\n    \"Smiling face with open mouth and cold sweat\": \"Mosolyg\\u00f3 arc t\\u00e1tott sz\\u00e1jjal \\u00e9s hideg ver\\u00edt\\u00e9k\",\n    \"Smiling face with open mouth and tightly-closed eyes\": \"Mosolyg\\u00f3 arc t\\u00e1tott sz\\u00e1jjal \\u00e9s szorosan lehunyt szemmel\",\n    \"Smiling face with halo\": \"Mosolyg\\u00f3 arc dicsf\\u00e9nyben\",\n    \"Smiling face with horns\": \"Mosolyg\\u00f3 arc szarvakkal\",\n    \"Winking face\": \"Kacsint\\u00f3s arc\",\n    \"Smiling face with smiling eyes\": \"Mosolyg\\u00f3 arc mosolyg\\u00f3 szemekkel\",\n    \"Face savoring delicious food\": \"Arc \\u00edzlelgette \\u00edzletes \\u00e9telek\",\n    \"Relieved face\": \"Megk\\u00f6nnyebb\\u00fclt arc\",\n    \"Smiling face with heart-shaped eyes\": \"Mosolyg\\u00f3 arc sz\\u00edv alak\\u00fa szemekkel\",\n    \"Smilin g face with sunglasses\": \"Mosolyg\\u00f3 arc napszem\\u00fcvegben\",\n    \"Smirking face\": \"Vigyorg\\u00f3 arca\",\n    \"Neutral face\": \"Semleges arc\",\n    \"Expressionless face\": \"Kifejez\\u00e9stelen arc\",\n    \"Unamused face\": \"Unott arc\",\n    \"Face with cold sweat\": \"Arc\\u00e1n hideg verejt\\u00e9kkel\",\n    \"Pensive face\": \"T\\u00f6preng\\u0151 arc\",\n    \"Confused face\": \"Zavaros arc\",\n    \"Confounded face\": \"R\\u00e1c\\u00e1folt arc\",\n    \"Kissing face\": \"Cs\\u00f3kos arc\",\n    \"Face throwing a kiss\": \"Arcra dobott egy cs\\u00f3kot\",\n    \"Kissing face with smiling eyes\": \"Cs\\u00f3kos arc\\u00e1t mosolyg\\u00f3 szemek\",\n    \"Kissing face with closed eyes\": \"Cs\\u00f3kos arc\\u00e1t csukott szemmel\",\n    \"Face with stuck out tongue\": \"Szembe kiny\\u00faj totta a nyelv\\u00e9t\",\n    \"Face with stuck out tongue and winking eye\": \"Szembe kiny\\u00fajtotta a nyelv\\u00e9t, \\u00e9s kacsint\\u00f3 szem\",\n    \"Face with stuck out tongue and tightly-closed eyes\": \"Arc kiny\\u00fajtotta a nyelv\\u00e9t, \\u00e9s szorosan lehunyt szemmel\",\n    \"Disappointed face\": \"Csal\\u00f3dott arc\",\n    \"Worried face\": \"Agg\\u00f3d\\u00f3 arc\\u00e1t\",\n    \"Angry face\": \"D\\u00fch\\u00f6s arc\",\n    \"Pouting face\": \"Duzzog\\u00f3 arc\",\n    \"Crying face\": \"S\\u00edr\\u00f3 arc\",\n    \"Persevering face\": \"Kitart\\u00f3 arc\",\n    \"Face with look of triumph\": \"Arc\\u00e1t diadalmas pillant\\u00e1st\",\n    \"Disappointed but relieved face\": \"Csal\\u00f3dott, de megk\\u00f6nnyebb\\u00fclt arc\",\n    \"Frowning face with open mouth\": \"Komor arcb\\u00f3l t\\u00e1tott sz\\u00e1jjal\",\n    \"Anguished face\": \"Gy\\u00f6tr\\u0151d\\u0151 arc\",\n    \"Fearful face\": \"F\\u00e9lelmetes arc\",\n    \"Weary face\": \"F\\u00e1radt arc\",\n    \"Sleepy face\": \"\\u00e1lmos arc\",\n    \"Tired face\": \"F\\u00e1radt arc\",\n    \"Grimacing face\": \"Elfintorodott arc\",\n    \"Loudly crying face\": \"Hangosan s\\u00edr\\u00f3 arc\",\n    \"Face with open mouth\": \"Arc nyitott sz\\u00e1jjal\",\n    \"Hushed face\": \"Csit\\u00edtott arc\",\n    \"Face with open mouth and cold sweat\": \"Arc t\\u00e1tott sz\\u00e1jjal \\u00e9s hideg ver\\u00edt\\u00e9k\",\n    \"Face screaming in fear\": \"Sikoltoz\\u00f3 arc a f\\u00e9lelemt\\u0151l\",\n    \"Astonished face\": \"Meglepett arc\",\n    \"Flushed face\": \"Kipirult arc\",\n    \"Sleeping face\": \"Alv\\u00f3 arc\",\n    \"Dizzy face\": \" Sz\\u00e1d\\u00fcl\\u0151 arc\",\n    \"Face without mouth\": \"Arc n\\u00e9lküli sz\\u00e1j\",\n    \"Face with medical mask\": \"Arc\\u00e1n orvosi maszk\",\n\n    // Line breaker\n    \"Break\": \"T\\u00f6r\\u00e9s\",\n\n    // Math\n    \"Subscript\": \"Als\\u00f3 index\",\n    \"Superscript\": \"Fels\\u0151 index\",\n\n    // Full screen\n    \"Fullscreen\": \"Teljes k\\u00e9perny\\u0151\",\n\n    // Horizontal line\n    \"Insert Horizontal Line\": \"V\\u00edzszintes vonal\",\n\n    // Clear formatting\n    \"Clear Formatting\": \"Form\\u00e1z\\u00e1s elt\\u00e1vol\\u00edt\\u00e1sa\",\n\n    // Save\n    \"Save\": \"\\u004d\\u0065\\u006e\\u0074\\u00e9\\u0073\",\n\n    // Undo, redo\n    \"Undo\": \"Visszavon\\u00e1s\",\n    \"Redo\": \"Ism\\u00e9t\",\n\n    // Select all\n    \"Select All\": \"Minden kijel\\u00f6l\\u00e9se\",\n\n    // Code view\n    \"Code View\": \"Forr\\u00e1sk\\u00f3d\",\n\n    // Quote\n    \"Quote\": \"Id\\u00e9zet\",\n    \"Increase\": \"N\\u00f6vel\\u00e9s\",\n    \"Decrease\": \"Cs\\u00f6kkent\\u00e9s\",\n\n    // Quick Insert\n    \"Quick Insert\": \"Beilleszt\\u00e9s\",\n\n    // Spcial Characters\n    \"Special Characters\": \"Speciális karakterek\",\n    \"Latin\": \"Latin\",\n    \"Greek\": \"Görög\",\n    \"Cyrillic\": \"Cirill\",\n    \"Punctuation\": \"Központozás\",\n    \"Currency\": \"Valuta\",\n    \"Arrows\": \"Nyilak\",\n    \"Math\": \"Matematikai\",\n    \"Misc\": \"Misc\",\n\n    // Print.\n    \"Print\": \"Nyomtatás\",\n\n    // Spell Checker.\n    \"Spell Checker\": \"Helyesírás-ellenőrző\",\n\n    // Help\n    \"Help\": \"Segítség\",\n    \"Shortcuts\": \"Hivatkozások\",\n    \"Inline Editor\": \"Inline szerkesztő\",\n    \"Show the editor\": \"Mutassa meg a szerkesztőt\",\n    \"Common actions\": \"Közös cselekvések\",\n    \"Copy\": \"Másolat\",\n    \"Cut\": \"Vágott\",\n    \"Paste\": \"Paszta\",\n    \"Basic Formatting\": \"Alap formázás\",\n    \"Increase quote level\": \"Növeli az idézet szintjét\",\n    \"Decrease quote level\": \"Csökkenti az árazási szintet\",\n    \"Image / Video\": \"Kép / videó\",\n    \"Resize larger\": \"Nagyobb átméretezés\",\n    \"Resize smaller\": \"Kisebb méretűek\",\n    \"Table\": \"Asztal\",\n    \"Select table cell\": \"Válasszon táblázatcellát\",\n    \"Extend selection one cell\": \"Kiterjesztheti a kiválasztást egy cellára\",\n    \"Extend selection one row\": \"Szűkítse ki az egy sort\",\n    \"Navigation\": \"Navigáció\",\n    \"Focus popup / toolbar\": \"Fókusz felugró ablak / eszköztár\",\n    \"Return focus to previous position\": \"Visszaáll az előző pozícióra\",\n\n    // Embed.ly\n    \"Embed URL\": \"Beágyazott url\",\n    \"Paste in a URL to embed\": \"Beilleszteni egy URL-t a beágyazáshoz\",\n\n    // Word Paste.\n    \"The pasted content is coming from a Microsoft Word document. Do you want to keep the format or clean it up?\": \"A beillesztett tartalom egy microsoft szó dokumentumból származik. szeretné megtartani a formátumot vagy tisztítani?\",\n    \"Keep\": \"Tart\",\n    \"Clean\": \"Tiszta\",\n    \"Word Paste Detected\": \"Szópaszta észlelhető\"\n  },\n  direction: \"ltr\"\n};\n\n}));\n"
  },
  {
    "path": "src/main/resources/static/plugins/froala-editor/js/languages/id.js",
    "content": "/*!\n * froala_editor v2.9.1 (https://www.froala.com/wysiwyg-editor)\n * License https://froala.com/wysiwyg-editor/terms/\n * Copyright 2014-2018 Froala Labs\n */\n\n(function (factory) {\n    if (typeof define === 'function' && define.amd) {\n        // AMD. Register as an anonymous module.\n        define(['jquery'], factory);\n    } else if (typeof module === 'object' && module.exports) {\n        // Node/CommonJS\n        module.exports = function( root, jQuery ) {\n            if ( jQuery === undefined ) {\n                // require('jQuery') returns a factory that requires window to\n                // build a jQuery instance, we normalize how we use modules\n                // that require this pattern but the window provided is a noop\n                // if it's defined (how jquery works)\n                if ( typeof window !== 'undefined' ) {\n                    jQuery = require('jquery');\n                }\n                else {\n                    jQuery = require('jquery')(root);\n                }\n            }\n            return factory(jQuery);\n        };\n    } else {\n        // Browser globals\n        factory(window.jQuery);\n    }\n}(function ($) {\n/**\n * Indonesian\n */\n\n$.FE.LANGUAGE['id'] = {\n  translation: {\n    // Place holder\n    \"Type something\": \"Ketik sesuatu\",\n\n    // Basic formatting\n    \"Bold\": \"Tebal\",\n    \"Italic\": \"Miring\",\n    \"Underline\": \"Garis bawah\",\n    \"Strikethrough\": \"Coret\",\n\n    // Main buttons\n    \"Insert\": \"Memasukkan\",\n    \"Delete\": \"Hapus\",\n    \"Cancel\": \"Batal\",\n    \"OK\": \"Ok\",\n    \"Back\": \"Kembali\",\n    \"Remove\": \"Hapus\",\n    \"More\": \"Lebih\",\n    \"Update\": \"Memperbarui\",\n    \"Style\": \"Gaya\",\n\n    // Font\n    \"Font Family\": \"Jenis Huruf\",\n    \"Font Size\": \"Ukuran leter\",\n\n    // Colors\n    \"Colors\": \"Warna\",\n    \"Background\": \"Latar belakang\",\n    \"Text\": \"Teks\",\n    \"HEX Color\": \"Warna hex\",\n\n    // Paragraphs\n    \"Paragraph Format\": \"Format\",\n    \"Normal\": \"Normal\",\n    \"Code\": \"Kode\",\n    \"Heading 1\": \"Header 1\",\n    \"Heading 2\": \"Header 2\",\n    \"Heading 3\": \"Header 3\",\n    \"Heading 4\": \"Header 4\",\n\n    // Style\n    \"Paragraph Style\": \"Paragraf gaya\",\n    \"Inline Style\": \"Di barisan gaya\",\n\n    // Alignment\n    \"Align\": \"Rate\",\n    \"Align Left\": \"Rate kiri\",\n    \"Align Center\": \"Rate tengah\",\n    \"Align Right\": \"Rata kanan\",\n    \"Align Justify\": \"Justifi\",\n    \"None\": \"Tak satupun\",\n\n    // Lists\n    \"Ordered List\": \"List nomor\",\n    \"Unordered List\": \"List simbol\",\n\n    // Indent\n    \"Decrease Indent\": \"Turunkan inden\",\n    \"Increase Indent\": \"Tambah inden\",\n\n    // Links\n    \"Insert Link\": \"Memasukkan link\",\n    \"Open in new tab\": \"Buka di tab baru\",\n    \"Open Link\": \"Buka tautan\",\n    \"Edit Link\": \"Mengedit link\",\n    \"Unlink\": \"Menghapus link\",\n    \"Choose Link\": \"Memilih link\",\n\n    // Images\n    \"Insert Image\": \"Memasukkan gambar\",\n    \"Upload Image\": \"Meng-upload gambar\",\n    \"By URL\": \"Oleh URL\",\n    \"Browse\": \"Melihat-lihat\",\n    \"Drop image\": \"Jatuhkan gambar\",\n    \"or click\": \"atau klik\",\n    \"Manage Images\": \"Mengelola gambar\",\n    \"Loading\": \"Pemuatan\",\n    \"Deleting\": \"Menghapus\",\n    \"Tags\": \"Label\",\n    \"Are you sure? Image will be deleted.\": \"Apakah Anda yakin? Gambar akan dihapus.\",\n    \"Replace\": \"Mengganti\",\n    \"Uploading\": \"Gambar upload\",\n    \"Loading image\": \"Pemuatan gambar\",\n    \"Display\": \"Pameran\",\n    \"Inline\": \"Di barisan\",\n    \"Break Text\": \"Memecah teks\",\n    \"Alternative Text\": \"Teks alternatif\",\n    \"Change Size\": \"Ukuran perubahan\",\n    \"Width\": \"Lebar\",\n    \"Height\": \"Tinggi\",\n    \"Something went wrong. Please try again.\": \"Ada yang salah. Silakan coba lagi.\",\n    \"Image Caption\": \"Keterangan gambar\",\n    \"Advanced Edit\": \"Edit lanjutan\",\n\n    // Video\n    \"Insert Video\": \"Memasukkan video\",\n    \"Embedded Code\": \"Kode tertanam\",\n    \"Paste in a video URL\": \"Paste di url video\",\n    \"Drop video\": \"Jatuhkan video\",\n    \"Your browser does not support HTML5 video.\": \"Browser Anda tidak mendukung video html5.\",\n    \"Upload Video\": \"Mengunggah video\",\n\n    // Tables\n    \"Insert Table\": \"Sisipkan tabel\",\n    \"Table Header\": \"Header tabel\",\n    \"Remove Table\": \"Hapus tabel\",\n    \"Table Style\": \"Gaya tabel\",\n    \"Horizontal Align\": \"Menyelaraskan horisontal\",\n\n    \"Row\": \"Baris\",\n    \"Insert row above\": \"Sisipkan baris di atas\",\n    \"Insert row below\": \"Sisipkan baris di bawah\",\n    \"Delete row\": \"Hapus baris\",\n    \"Column\": \"Kolom\",\n    \"Insert column before\": \"Sisipkan kolom sebelumSisipkan kolom sebelum\",\n    \"Insert column after\": \"Sisipkan kolom setelah\",\n    \"Delete column\": \"Hapus kolom\",\n    \"Cell\": \"Sel\",\n    \"Merge cells\": \"Menggabungkan sel\",\n    \"Horizontal split\": \"Perpecahan horisontal\",\n    \"Vertical split\": \"Perpecahan vertikal\",\n    \"Cell Background\": \"Latar belakang sel\",\n    \"Vertical Align\": \"Menyelaraskan vertikal\",\n    \"Top\": \"Teratas\",\n    \"Middle\": \"Tengah\",\n    \"Bottom\": \"Bagian bawah\",\n    \"Align Top\": \"Menyelaraskan atas\",\n    \"Align Middle\": \"Menyelaraskan tengah\",\n    \"Align Bottom\": \"Menyelaraskan bawah\",\n    \"Cell Style\": \"Gaya sel\",\n\n    // Files\n    \"Upload File\": \"Meng-upload berkas\",\n    \"Drop file\": \"Jatuhkan berkas\",\n\n    // Emoticons\n    \"Emoticons\": \"Emoticon\",\n    \"Grinning face\": \"Sambil tersenyum wajah\",\n    \"Grinning face with smiling eyes\": \"Sambil tersenyum wajah dengan mata tersenyum\",\n    \"Face with tears of joy\": \"Hadapi dengan air mata sukacita\",\n    \"Smiling face with open mouth\": \"Tersenyum wajah dengan mulut terbuka\",\n    \"Smiling face with open mouth and smiling eyes\": \"Tersenyum wajah dengan mulut terbuka dan tersenyum mata\",\n    \"Smiling face with open mouth and cold sweat\": \"Tersenyum wajah dengan mulut terbuka dan keringat dingin\",\n    \"Smiling face with open mouth and tightly-closed eyes\": \"Tersenyum wajah dengan mulut terbuka dan mata tertutup rapat\",\n    \"Smiling face with halo\": \"Tersenyum wajah dengan halo\",\n    \"Smiling face with horns\": \"Tersenyum wajah dengan tanduk\",\n    \"Winking face\": \"Mengedip wajah\",\n    \"Smiling face with smiling eyes\": \"Tersenyum wajah dengan mata tersenyum\",\n    \"Face savoring delicious food\": \"Wajah menikmati makanan lezat\",\n    \"Relieved face\": \"Wajah Lega\",\n    \"Smiling face with heart-shaped eyes\": \"Tersenyum wajah dengan mata berbentuk hati\",\n    \"Smiling face with sunglasses\": \"Tersenyum wajah dengan kacamata hitam\",\n    \"Smirking face\": \"Menyeringai wajah\",\n    \"Neutral face\": \"Wajah Netral\",\n    \"Expressionless face\": \"Wajah tanpa ekspresi\",\n    \"Unamused face\": \"Wajah tidak senang\",\n    \"Face with cold sweat\": \"Muka dengan keringat dingin\",\n    \"Pensive face\": \"Wajah termenung\",\n    \"Confused face\": \"Wajah Bingung\",\n    \"Confounded face\": \"Wajah kesal\",\n    \"Kissing face\": \"wajah mencium\",\n    \"Face throwing a kiss\": \"Wajah melempar ciuman\",\n    \"Kissing face with smiling eyes\": \"Berciuman wajah dengan mata tersenyum\",\n    \"Kissing face with closed eyes\": \"Berciuman wajah dengan mata tertutup\",\n    \"Face with stuck out tongue\": \"Muka dengan menjulurkan lidah\",\n    \"Face with stuck out tongue and winking eye\": \"Muka dengan menjulurkan lidah dan mengedip mata\",\n    \"Face with stuck out tongue and tightly-closed eyes\": \"Wajah dengan lidah terjebak dan mata erat-tertutup\",\n    \"Disappointed face\": \"Wajah kecewa\",\n    \"Worried face\": \"Wajah Khawatir\",\n    \"Angry face\": \"Wajah Marah\",\n    \"Pouting face\": \"Cemberut wajah\",\n    \"Crying face\": \"Menangis wajah\",\n    \"Persevering face\": \"Tekun wajah\",\n    \"Face with look of triumph\": \"Hadapi dengan tampilan kemenangan\",\n    \"Disappointed but relieved face\": \"Kecewa tapi lega wajah\",\n    \"Frowning face with open mouth\": \"Sambil mengerutkan kening wajah dengan mulut terbuka\",\n    \"Anguished face\": \"Wajah sedih\",\n    \"Fearful face\": \"Wajah Takut\",\n    \"Weary face\": \"Wajah lelah\",\n    \"Sleepy face\": \"wajah mengantuk\",\n    \"Tired face\": \"Wajah Lelah\",\n    \"Grimacing face\": \"Sambil meringis wajah\",\n    \"Loudly crying face\": \"Keras menangis wajah\",\n    \"Face with open mouth\": \"Hadapi dengan mulut terbuka\",\n    \"Hushed face\": \"Wajah dipetieskan\",\n    \"Face with open mouth and cold sweat\": \"Hadapi dengan mulut terbuka dan keringat dingin\",\n    \"Face screaming in fear\": \"Hadapi berteriak dalam ketakutan\",\n    \"Astonished face\": \"Wajah Kaget\",\n    \"Flushed face\": \"Wajah memerah\",\n    \"Sleeping face\": \"Tidur face\",\n    \"Dizzy face\": \"Wajah pusing\",\n    \"Face without mouth\": \"Wajah tanpa mulut\",\n    \"Face with medical mask\": \"Hadapi dengan masker medis\",\n\n    // Line breaker\n    \"Break\": \"Memecah\",\n\n    // Math\n    \"Subscript\": \"Subskrip\",\n    \"Superscript\": \"Superskrip\",\n\n    // Full screen\n    \"Fullscreen\": \"Layar penuh\",\n\n    // Horizontal line\n    \"Insert Horizontal Line\": \"Sisipkan Garis Horizontal\",\n\n    // Clear formatting\n    \"Clear Formatting\": \"Menghapus format\",\n\n    // Save\n    \"Save\": \"Menyimpan\",\n\n    // Undo, redo\n    \"Undo\": \"Batal\",\n    \"Redo\": \"Ulang\",\n\n    // Select all\n    \"Select All\": \"Pilih semua\",\n\n    // Code view\n    \"Code View\": \"Melihat kode\",\n\n    // Quote\n    \"Quote\": \"Kutipan\",\n    \"Increase\": \"Meningkat\",\n    \"Decrease\": \"Penurunan\",\n\n    // Quick Insert\n    \"Quick Insert\": \"Memasukkan cepat\",\n\n    // Spcial Characters\n    \"Special Characters\": \"Karakter spesial\",\n    \"Latin\": \"Latin\",\n    \"Greek\": \"Yunani\",\n    \"Cyrillic\": \"Kyrillic\",\n    \"Punctuation\": \"Tanda baca\",\n    \"Currency\": \"Mata uang\",\n    \"Arrows\": \"Panah\",\n    \"Math\": \"Matematika\",\n    \"Misc\": \"Misc\",\n\n    // Print.\n    \"Print\": \"Mencetak\",\n\n    // Spell Checker.\n    \"Spell Checker\": \"Pemeriksa ejaan\",\n\n    // Help\n    \"Help\": \"Membantu\",\n    \"Shortcuts\": \"Jalan pintas\",\n    \"Inline Editor\": \"Editor inline\",\n    \"Show the editor\": \"Tunjukkan editornya\",\n    \"Common actions\": \"Tindakan umum\",\n    \"Copy\": \"Salinan\",\n    \"Cut\": \"Memotong\",\n    \"Paste\": \"Pasta\",\n    \"Basic Formatting\": \"Format dasar\",\n    \"Increase quote level\": \"Meningkatkan tingkat kutipan\",\n    \"Decrease quote level\": \"Menurunkan tingkat kutipan\",\n    \"Image / Video\": \"Gambar / video\",\n    \"Resize larger\": \"Mengubah ukuran lebih besar\",\n    \"Resize smaller\": \"Mengubah ukuran lebih kecil\",\n    \"Table\": \"Meja\",\n    \"Select table cell\": \"Pilih sel tabel\",\n    \"Extend selection one cell\": \"Memperpanjang seleksi satu sel\",\n    \"Extend selection one row\": \"Perpanjang pilihan satu baris\",\n    \"Navigation\": \"Navigasi\",\n    \"Focus popup / toolbar\": \"Fokus popup / toolbar\",\n    \"Return focus to previous position\": \"Kembali fokus ke posisi sebelumnya\",\n\n    // Embed.ly\n    \"Embed URL\": \"Embed url\",\n    \"Paste in a URL to embed\": \"Paste di url untuk menanamkan\",\n\n    // Word Paste.\n    \"The pasted content is coming from a Microsoft Word document. Do you want to keep the format or clean it up?\": \"Konten yang disisipkan berasal dari dokumen kata microsoft. apakah Anda ingin menyimpan format atau membersihkannya?\",\n    \"Keep\": \"Menjaga\",\n    \"Clean\": \"Bersih\",\n    \"Word Paste Detected\": \"Kata paste terdeteksi\"\n  },\n  direction: \"ltr\"\n};\n\n}));\n"
  },
  {
    "path": "src/main/resources/static/plugins/froala-editor/js/languages/it.js",
    "content": "/*!\n * froala_editor v2.9.1 (https://www.froala.com/wysiwyg-editor)\n * License https://froala.com/wysiwyg-editor/terms/\n * Copyright 2014-2018 Froala Labs\n */\n\n(function (factory) {\n    if (typeof define === 'function' && define.amd) {\n        // AMD. Register as an anonymous module.\n        define(['jquery'], factory);\n    } else if (typeof module === 'object' && module.exports) {\n        // Node/CommonJS\n        module.exports = function( root, jQuery ) {\n            if ( jQuery === undefined ) {\n                // require('jQuery') returns a factory that requires window to\n                // build a jQuery instance, we normalize how we use modules\n                // that require this pattern but the window provided is a noop\n                // if it's defined (how jquery works)\n                if ( typeof window !== 'undefined' ) {\n                    jQuery = require('jquery');\n                }\n                else {\n                    jQuery = require('jquery')(root);\n                }\n            }\n            return factory(jQuery);\n        };\n    } else {\n        // Browser globals\n        factory(window.jQuery);\n    }\n}(function ($) {\n/**\n * Italian\n */\n\n$.FE.LANGUAGE['it'] = {\n  translation: {\n    // Place holder\n    \"Type something\": \"Digita qualcosa\",\n\n    // Basic formatting\n    \"Bold\": \"Grassetto\",\n    \"Italic\": \"Corsivo\",\n    \"Underline\": \"Sottolineato\",\n    \"Strikethrough\": \"Barrato\",\n\n    // Main buttons\n    \"Insert\": \"Inserisci\",\n    \"Delete\": \"Cancella\",\n    \"Cancel\": \"Cancella\",\n    \"OK\": \"OK\",\n    \"Back\": \"Indietro\",\n    \"Remove\": \"Rimuovi\",\n    \"More\": \"Di pi\\u00f9\",\n    \"Update\": \"Aggiorna\",\n    \"Style\": \"Stile\",\n\n    // Font\n    \"Font Family\": \"Carattere\",\n    \"Font Size\": \"Dimensione Carattere\",\n\n    // Colors\n    \"Colors\": \"Colori\",\n    \"Background\": \"Sfondo\",\n    \"Text\": \"Testo\",\n    \"HEX Color\": \"Colore Esadecimale\",\n\n    // Paragraphs\n    \"Paragraph Format\": \"Formattazione\",\n    \"Normal\": \"Normale\",\n    \"Code\": \"Codice\",\n    \"Heading 1\": \"Intestazione 1\",\n    \"Heading 2\": \"Intestazione 2\",\n    \"Heading 3\": \"Intestazione 3\",\n    \"Heading 4\": \"Intestazione 4\",\n\n    // Style\n    \"Paragraph Style\": \"Stile Paragrafo\",\n    \"Inline Style\": \"Stile in Linea\",\n\n    // Alignment\n    \"Align\": \"Allinea\",\n    \"Align Left\": \"Allinea a Sinistra\",\n    \"Align Center\": \"Allinea al Cento\",\n    \"Align Right\": \"Allinea a Destra\",\n    \"Align Justify\": \"Giustifica\",\n    \"None\": \"Nessuno\",\n\n    // Lists\n    \"Ordered List\": \"Elenchi Numerati\",\n    \"Unordered List\": \"Elenchi Puntati\",\n\n    // Indent\n    \"Decrease Indent\": \"Riduci Rientro\",\n    \"Increase Indent\": \"Aumenta Rientro\",\n\n    // Links\n    \"Insert Link\": \"Inserisci Link\",\n    \"Open in new tab\": \"Apri in nuova scheda\",\n    \"Open Link\": \"Apri Link\",\n    \"Edit Link\": \"Modifica Link\",\n    \"Unlink\": \"Rimuovi Link\",\n    \"Choose Link\": \"Scegli Link\",\n\n    // Images\n    \"Insert Image\": \"Inserisci Immagine\",\n    \"Upload Image\": \"Carica Immagine\",\n    \"By URL\": \"Inserisci URL\",\n    \"Browse\": \"Sfoglia\",\n    \"Drop image\": \"Rilascia immagine\",\n    \"or click\": \"oppure clicca qui\",\n    \"Manage Images\": \"Gestione Immagini\",\n    \"Loading\": \"Caricamento\",\n    \"Deleting\": \"Eliminazione\",\n    \"Tags\": \"Etichetta\",\n    \"Are you sure? Image will be deleted.\": \"Sei sicuro? L\\'immagine verr\\u00e0 cancellata.\",\n    \"Replace\": \"Sostituisci\",\n    \"Uploading\": \"Caricamento\",\n    \"Loading image\": \"Caricamento immagine\",\n    \"Display\": \"Visualizzazione\",\n    \"Inline\": \"In Linea\",\n    \"Break Text\": \"Separa dal Testo\",\n    \"Alternative Text\": \"Testo Alternativo\",\n    \"Change Size\": \"Cambia Dimensioni\",\n    \"Width\": \"Larghezza\",\n    \"Height\": \"Altezza\",\n    \"Something went wrong. Please try again.\": \"Qualcosa non ha funzionato. Riprova, per favore.\",\n    \"Image Caption\": \"Didascalia\",\n    \"Advanced Edit\": \"Avanzato\",\n\n    // Video\n    \"Insert Video\": \"Inserisci Video\",\n    \"Embedded Code\": \"Codice Incorporato\",\n    \"Paste in a video URL\": \"Incolla l'URL del video\",\n    \"Drop video\": \"Rilascia video\",\n    \"Your browser does not support HTML5 video.\": \"Il tuo browser non supporta i video html5.\",\n    \"Upload Video\": \"Carica Video\",\n\n    // Tables\n    \"Insert Table\": \"Inserisci Tabella\",\n    \"Table Header\": \"Intestazione Tabella\",\n    \"Remove Table\": \"Rimuovi Tabella\",\n    \"Table Style\": \"Stile Tabella\",\n    \"Horizontal Align\": \"Allineamento Orizzontale\",\n    \"Row\": \"Riga\",\n    \"Insert row above\": \"Inserisci una riga prima\",\n    \"Insert row below\": \"Inserisci una riga dopo\",\n    \"Delete row\": \"Cancella riga\",\n    \"Column\": \"Colonna\",\n    \"Insert column before\": \"Inserisci una colonna prima\",\n    \"Insert column after\": \"Inserisci una colonna dopo\",\n    \"Delete column\": \"Cancella colonna\",\n    \"Cell\": \"Cella\",\n    \"Merge cells\": \"Unisci celle\",\n    \"Horizontal split\": \"Dividi in orizzontale\",\n    \"Vertical split\": \"Dividi in verticale\",\n    \"Cell Background\": \"Sfondo Cella\",\n    \"Vertical Align\": \"Allineamento Verticale\",\n    \"Top\": \"Alto\",\n    \"Middle\": \"Centro\",\n    \"Bottom\": \"Basso\",\n    \"Align Top\": \"Allinea in Alto\",\n    \"Align Middle\": \"Allinea al Centro\",\n    \"Align Bottom\": \"Allinea in Basso\",\n    \"Cell Style\": \"Stile Cella\",\n\n    // Files\n    \"Upload File\": \"Carica File\",\n    \"Drop file\": \"Rilascia file\",\n\n    // Emoticons\n    \"Emoticons\": \"Emoticon\",\n    \"Grinning face\": \"Sorridente\",\n    \"Grinning face with smiling eyes\": \"Sorridente con gli occhi sorridenti\",\n    \"Face with tears of joy\": \"Con lacrime di gioia\",\n    \"Smiling face with open mouth\": \"Sorridente con la bocca aperta\",\n    \"Smiling face with open mouth and smiling eyes\": \"Sorridente con la bocca aperta e gli occhi sorridenti\",\n    \"Smiling face with open mouth and cold sweat\": \"Sorridente con la bocca aperta e sudore freddo\",\n    \"Smiling face with open mouth and tightly-closed eyes\": \"Sorridente con la bocca aperta e gli occhi stretti\",\n    \"Smiling face with halo\": \"Sorridente con aureola\",\n    \"Smiling face with horns\": \"Diavolo sorridente\",\n    \"Winking face\": \"Ammiccante\",\n    \"Smiling face with smiling eyes\": \"Sorridente imbarazzato\",\n    \"Face savoring delicious food\": \"Goloso\",\n    \"Relieved face\": \"Rassicurato\",\n    \"Smiling face with heart-shaped eyes\": \"Sorridente con gli occhi a forma di cuore\",\n    \"Smiling face with sunglasses\": \"Sorridente con gli occhiali da sole\",\n    \"Smirking face\": \"Compiaciuto\",\n    \"Neutral face\": \"Neutro\",\n    \"Expressionless face\": \"Inespressivo\",\n    \"Unamused face\": \"Annoiato\",\n    \"Face with cold sweat\": \"Sudare freddo\",\n    \"Pensive face\": \"Pensieroso\",\n    \"Confused face\": \"Perplesso\",\n    \"Confounded face\": \"Confuso\",\n    \"Kissing face\": \"Bacio\",\n    \"Face throwing a kiss\": \"Manda un bacio\",\n    \"Kissing face with smiling eyes\": \"Bacio con gli occhi sorridenti\",\n    \"Kissing face with closed eyes\": \"Bacio con gli occhi chiusi\",\n    \"Face with stuck out tongue\": \"Linguaccia\",\n    \"Face with stuck out tongue and winking eye\": \"Linguaccia ammiccante\",\n    \"Face with stuck out tongue and tightly-closed eyes\": \"Linguaccia con occhi stretti\",\n    \"Disappointed face\": \"Deluso\",\n    \"Worried face\": \"Preoccupato\",\n    \"Angry face\": \"Arrabbiato\",\n    \"Pouting face\": \"Imbronciato\",\n    \"Crying face\": \"Pianto\",\n    \"Persevering face\": \"Perseverante\",\n    \"Face with look of triumph\": \"Trionfante\",\n    \"Disappointed but relieved face\": \"Deluso ma rassicurato\",\n    \"Frowning face with open mouth\": \"Accigliato con la bocca aperta\",\n    \"Anguished face\": \"Angosciato\",\n    \"Fearful face\": \"Pauroso\",\n    \"Weary face\": \"Stanco\",\n    \"Sleepy face\": \"Assonnato\",\n    \"Tired face\": \"Snervato\",\n    \"Grimacing face\": \"Smorfia\",\n    \"Loudly crying face\": \"Pianto a gran voce\",\n    \"Face with open mouth\": \"Bocca aperta\",\n    \"Hushed face\": \"Silenzioso\",\n    \"Face with open mouth and cold sweat\": \"Bocca aperta e sudore freddo\",\n    \"Face screaming in fear\": \"Urlante dalla paura\",\n    \"Astonished face\": \"Stupito\",\n    \"Flushed face\": \"Arrossito\",\n    \"Sleeping face\": \"Addormentato\",\n    \"Dizzy face\": \"Stordito\",\n    \"Face without mouth\": \"Senza parole\",\n    \"Face with medical mask\": \"Malattia infettiva\",\n\n    // Line breaker\n    \"Break\": \"Separatore\",\n\n    // Math\n    \"Subscript\": \"Pedice\",\n    \"Superscript\": \"Apice\",\n\n    // Full screen\n    \"Fullscreen\": \"Schermo intero\",\n\n    // Horizontal line\n    \"Insert Horizontal Line\": \"Inserisci Divisore Orizzontale\",\n\n    // Clear formatting\n    \"Clear Formatting\": \"Cancella Formattazione\",\n\n    // Save\n    \"Save\": \"Salvare\",\n\n    // Undo, redo\n    \"Undo\": \"Annulla\",\n    \"Redo\": \"Ripeti\",\n\n    // Select all\n    \"Select All\": \"Seleziona Tutto\",\n\n    // Code view\n    \"Code View\": \"Visualizza Codice\",\n\n    // Quote\n    \"Quote\": \"Citazione\",\n    \"Increase\": \"Aumenta\",\n    \"Decrease\": \"Diminuisci\",\n\n    // Quick Insert\n    \"Quick Insert\": \"Inserimento Rapido\",\n\n    // Spcial Characters\n    \"Special Characters\": \"Caratteri Speciali\",\n    \"Latin\": \"Latino\",\n    \"Greek\": \"Greco\",\n    \"Cyrillic\": \"Cirillico\",\n    \"Punctuation\": \"Punteggiatura\",\n    \"Currency\": \"Valuta\",\n    \"Arrows\": \"Frecce\",\n    \"Math\": \"Matematica\",\n    \"Misc\": \"Misc\",\n\n    // Print.\n    \"Print\": \"Stampa\",\n\n    // Spell Checker.\n    \"Spell Checker\": \"Correttore Ortografico\",\n\n    // Help\n    \"Help\": \"Aiuto\",\n    \"Shortcuts\": \"Scorciatoie\",\n    \"Inline Editor\": \"Editor in Linea\",\n    \"Show the editor\": \"Mostra Editor\",\n    \"Common actions\": \"Azioni comuni\",\n    \"Copy\": \"Copia\",\n    \"Cut\": \"Taglia\",\n    \"Paste\": \"Incolla\",\n    \"Basic Formatting\": \"Formattazione di base\",\n    \"Increase quote level\": \"Aumenta il livello di citazione\",\n    \"Decrease quote level\": \"Diminuisci il livello di citazione\",\n    \"Image / Video\": \"Immagine / Video\",\n    \"Resize larger\": \"Pi\\u00f9 grande\",\n    \"Resize smaller\": \"Pi\\u00f9 piccolo\",\n    \"Table\": \"Tabella\",\n    \"Select table cell\": \"Seleziona la cella della tabella\",\n    \"Extend selection one cell\": \"Estendi la selezione di una cella\",\n    \"Extend selection one row\": \"Estendi la selezione una riga\",\n    \"Navigation\": \"Navigazione\",\n    \"Focus popup / toolbar\": \"Metti a fuoco la barra degli strumenti\",\n    \"Return focus to previous position\": \"Rimetti il fuoco sulla posizione precedente\",\n\n    // Embed.ly\n    \"Embed URL\": \"Incorpora URL\",\n    \"Paste in a URL to embed\": \"Incolla un URL da incorporare\",\n\n    // Word Paste.\n    \"The pasted content is coming from a Microsoft Word document. Do you want to keep the format or clean it up?\": \"Il contenuto incollato proviene da un documento di Microsoft Word. Vuoi mantenere la formattazione di Word o pulirlo?\",\n    \"Keep\": \"Mantieni\",\n    \"Clean\": \"Pulisci\",\n    \"Word Paste Detected\": \"\\u00c8 stato rilevato un incolla da Word\"\n  },\n  direction: \"ltr\"\n};\n\n}));\n"
  },
  {
    "path": "src/main/resources/static/plugins/froala-editor/js/languages/ja.js",
    "content": "/*!\n * froala_editor v2.9.1 (https://www.froala.com/wysiwyg-editor)\n * License https://froala.com/wysiwyg-editor/terms/\n * Copyright 2014-2018 Froala Labs\n */\n\n(function (factory) {\n    if (typeof define === 'function' && define.amd) {\n        // AMD. Register as an anonymous module.\n        define(['jquery'], factory);\n    } else if (typeof module === 'object' && module.exports) {\n        // Node/CommonJS\n        module.exports = function( root, jQuery ) {\n            if ( jQuery === undefined ) {\n                // require('jQuery') returns a factory that requires window to\n                // build a jQuery instance, we normalize how we use modules\n                // that require this pattern but the window provided is a noop\n                // if it's defined (how jquery works)\n                if ( typeof window !== 'undefined' ) {\n                    jQuery = require('jquery');\n                }\n                else {\n                    jQuery = require('jquery')(root);\n                }\n            }\n            return factory(jQuery);\n        };\n    } else {\n        // Browser globals\n        factory(window.jQuery);\n    }\n}(function ($) {\n/**\n * Japanese\n */\n\n$.FE.LANGUAGE['ja'] = {\n  translation: {\n    // Place holder\n    \"Type something\": \"\\u3053\\u3053\\u306b\\u5165\\u529b\\u3057\\u307e\\u3059\",\n\n    // Basic formatting\n    \"Bold\": \"\\u592a\\u5b57\",\n    \"Italic\": \"\\u659c\\u4f53\",\n    \"Underline\": \"\\u4e0b\\u7dda\",\n    \"Strikethrough\": \"\\u53d6\\u308a\\u6d88\\u3057\\u7dda\",\n\n    // Main buttons\n    \"Insert\": \"\\u633f\\u5165\",\n    \"Delete\": \"\\u524a\\u9664\",\n    \"Cancel\": \"\\u30ad\\u30e3\\u30f3\\u30bb\\u30eb\",\n    \"OK\": \"OK\",\n    \"Back\": \"\\u623b\\u308b\",\n    \"Remove\": \"\\u524a\\u9664\",\n    \"More\": \"\\u3082\\u3063\\u3068\",\n    \"Update\": \"\\u66f4\\u65b0\",\n    \"Style\": \"\\u30b9\\u30bf\\u30a4\\u30eb\",\n\n    // Font\n    \"Font Family\": \"\\u30d5\\u30a9\\u30f3\\u30c8\",\n    \"Font Size\": \"\\u30d5\\u30a9\\u30f3\\u30c8\\u30b5\\u30a4\\u30ba\",\n\n    // Colors\n    \"Colors\": \"\\u8272\",\n    \"Background\": \"\\u80cc\\u666f\",\n    \"Text\": \"\\u30c6\\u30ad\\u30b9\\u30c8\",\n    \"HEX Color\": \"\\u30d8\\u30ad\\u30b5\\u306e\\u8272\",\n\n    // Paragraphs\n    \"Paragraph Format\": \"\\u6bb5\\u843d\\u306e\\u66f8\\u5f0f\",\n    \"Normal\": \"\\u6a19\\u6e96\",\n    \"Code\": \"\\u30b3\\u30fc\\u30c9\",\n    \"Heading 1\": \"\\u30d8\\u30c3\\u30c0\\u30fc 1\",\n    \"Heading 2\": \"\\u30d8\\u30c3\\u30c0\\u30fc 2\",\n    \"Heading 3\": \"\\u30d8\\u30c3\\u30c0\\u30fc 3\",\n    \"Heading 4\": \"\\u30d8\\u30c3\\u30c0\\u30fc 4\",\n\n    // Style\n    \"Paragraph Style\": \"\\u6bb5\\u843d\\u30b9\\u30bf\\u30a4\\u30eb\",\n    \"Inline Style\": \"\\u30a4\\u30f3\\u30e9\\u30a4\\u30f3\\u30b9\\u30bf\\u30a4\\u30eb\",\n\n    // Alignment\n    \"Align\": \"\\u914d\\u7f6e\",\n    \"Align Left\": \"\\u5de6\\u63c3\\u3048\",\n    \"Align Center\": \"\\u4e2d\\u592e\\u63c3\\u3048\",\n    \"Align Right\": \"\\u53f3\\u63c3\\u3048\",\n    \"Align Justify\": \"\\u4e21\\u7aef\\u63c3\\u3048\",\n    \"None\": \"\\u306a\\u3057\",\n\n    // Lists\n    \"Ordered List\": \"\\u6bb5\\u843d\\u756a\\u53f7\",\n    \"Unordered List\": \"\\u7b87\\u6761\\u66f8\\u304d\",\n\n    // Indent\n    \"Decrease Indent\": \"\\u30a4\\u30f3\\u30c7\\u30f3\\u30c8\\u3092\\u6e1b\\u3089\\u3059\",\n    \"Increase Indent\": \"\\u30a4\\u30f3\\u30c7\\u30f3\\u30c8\\u3092\\u5897\\u3084\\u3059\",\n\n    // Links\n    \"Insert Link\": \"\\u30ea\\u30f3\\u30af\\u306e\\u633f\\u5165\",\n    \"Open in new tab\": \"\\u65b0\\u3057\\u3044\\u30bf\\u30d6\\u3067\\u958b\\u304f\",\n    \"Open Link\": \"\\u30ea\\u30f3\\u30af\\u3092\\u958b\\u304f\",\n    \"Edit Link\": \"\\u30ea\\u30f3\\u30af\\u306e\\u7de8\\u96c6\",\n    \"Unlink\": \"\\u30ea\\u30f3\\u30af\\u306e\\u524a\\u9664\",\n    \"Choose Link\": \"\\u30ea\\u30f3\\u30af\\u3092\\u9078\\u629e\",\n\n    // Images\n    \"Insert Image\": \"\\u753b\\u50cf\\u306e\\u633f\\u5165\",\n    \"Upload Image\": \"\\u753b\\u50cf\\u3092\\u30a2\\u30c3\\u30d7\\u30ed\\u30fc\\u30c9\",\n    \"By URL\": \"\\u753b\\u50cf\\u306eURL\\u3092\\u5165\\u529b\",\n    \"Browse\": \"\\u53c2\\u7167\",\n    \"Drop image\": \"\\u753b\\u50cf\\u3092\\u30c9\\u30e9\\u30c3\\u30b0&\\u30c9\\u30ed\\u30c3\\u30d7\",\n    \"or click\": \"\\u307e\\u305f\\u306f\\u30af\\u30ea\\u30c3\\u30af\",\n    \"Manage Images\": \"\\u753b\\u50cf\\u306e\\u7ba1\\u7406\",\n    \"Loading\": \"\\u8aad\\u307f\\u8fbc\\u307f\\u4e2d\",\n    \"Deleting\": \"\\u524a\\u9664\",\n    \"Tags\": \"\\u30bf\\u30b0\",\n    \"Are you sure? Image will be deleted.\": \"\\u672c\\u5f53\\u306b\\u524a\\u9664\\u3057\\u307e\\u3059\\u304b\\uff1f\",\n    \"Replace\": \"\\u7f6e\\u63db\",\n    \"Uploading\": \"\\u30a2\\u30c3\\u30d7\\u30ed\\u30fc\\u30c9\\u4e2d\",\n    \"Loading image\": \"\\u753b\\u50cf\\u8aad\\u307f\\u8fbc\\u307f\\u4e2d\",\n    \"Display\": \"\\u8868\\u793a\",\n    \"Inline\": \"\\u30a4\\u30f3\\u30e9\\u30a4\\u30f3\",\n    \"Break Text\": \"\\u30c6\\u30ad\\u30b9\\u30c8\\u306e\\u6539\\u884c\",\n    \"Alternative Text\": \"\\u4ee3\\u66ff\\u30c6\\u30ad\\u30b9\\u30c8\",\n    \"Change Size\": \"\\u30b5\\u30a4\\u30ba\\u5909\\u66f4\",\n    \"Width\": \"\\u5e45\",\n    \"Height\": \"\\u9ad8\\u3055\",\n    \"Something went wrong. Please try again.\": \"\\u554f\\u984c\\u304c\\u767a\\u751f\\u3057\\u307e\\u3057\\u305f\\u3002\\u3082\\u3046\\u4e00\\u5ea6\\u3084\\u308a\\u76f4\\u3057\\u3066\\u304f\\u3060\\u3055\\u3044\\u3002\",\n    \"Image Caption\": \"\\u753b\\u50cf\\u30ad\\u30e3\\u30d7\\u30b7\\u30e7\\u30f3\",\n    \"Advanced Edit\": \"\\u9ad8\\u5ea6\\u306a\\u7de8\\u96c6\",\n\n    // Video\n    \"Insert Video\": \"\\u52d5\\u753b\\u306e\\u633f\\u5165\",\n    \"Embedded Code\": \"\\u57cb\\u3081\\u8fbc\\u307f\\u30b3\\u30fc\\u30c9\",\n    \"Paste in a video URL\": \"\\u52d5\\u753bURL\\u306b\\u8cbc\\u308a\\u4ed8\\u3051\\u308b\",\n    \"Drop video\": \"\\u52d5\\u753b\\u3092\\u30c9\\u30e9\\u30c3\\u30b0&\\u30c9\\u30ed\\u30c3\\u30d7\",\n    \"Your browser does not support HTML5 video.\": \"\\u3042\\u306a\\u305f\\u306e\\u30d6\\u30e9\\u30a6\\u30b6\\u306fhtml5 video\\u3092\\u30b5\\u30dd\\u30fc\\u30c8\\u3057\\u3066\\u3044\\u307e\\u305b\\u3093\\u3002\",\n    \"Upload Video\": \"\\u52d5\\u753b\\u306e\\u30a2\\u30c3\\u30d7\\u30ed\\u30fc\\u30c9\",\n\n    // Tables\n    \"Insert Table\": \"\\u8868\\u306e\\u633f\\u5165\",\n    \"Table Header\": \"\\u8868\\u306e\\u30d8\\u30c3\\u30c0\\u30fc\",\n    \"Remove Table\": \"\\u8868\\u306e\\u524a\\u9664\",\n    \"Table Style\": \"\\u8868\\u306e\\u30b9\\u30bf\\u30a4\\u30eb\",\n    \"Horizontal Align\": \"\\u6a2a\\u4f4d\\u7f6e\",\n    \"Row\": \"\\u884c\",\n    \"Insert row above\": \"\\u4e0a\\u306b\\u884c\\u3092\\u633f\\u5165\",\n    \"Insert row below\": \"\\u4e0b\\u306b\\u884c\\u3092\\u633f\\u5165\",\n    \"Delete row\": \"\\u884c\\u306e\\u524a\\u9664\",\n    \"Column\": \"\\u5217\",\n    \"Insert column before\": \"\\u5de6\\u306b\\u5217\\u3092\\u633f\\u5165\",\n    \"Insert column after\": \"\\u53f3\\u306b\\u5217\\u3092\\u633f\\u5165\",\n    \"Delete column\": \"\\u5217\\u306e\\u524a\\u9664\",\n    \"Cell\": \"\\u30bb\\u30eb\",\n    \"Merge cells\": \"\\u30bb\\u30eb\\u306e\\u7d50\\u5408\",\n    \"Horizontal split\": \"\\u6a2a\\u5206\\u5272\",\n    \"Vertical split\": \"\\u7e26\\u5206\\u5272\",\n    \"Cell Background\": \"\\u30bb\\u30eb\\u306e\\u80cc\\u666f\",\n    \"Vertical Align\": \"\\u7e26\\u4f4d\\u7f6e\",\n    \"Top\": \"\\u4e0a\\u63c3\\u3048\",\n    \"Middle\": \"\\u4e2d\\u592e\\u63c3\\u3048\",\n    \"Bottom\": \"\\u4e0b\\u63c3\\u3048\",\n    \"Align Top\": \"\\u4e0a\\u306b\\u63c3\\u3048\\u307e\\u3059\",\n    \"Align Middle\": \"\\u4e2d\\u592e\\u306b\\u63c3\\u3048\\u307e\\u3059\",\n    \"Align Bottom\": \"\\u4e0b\\u306b\\u63c3\\u3048\\u307e\\u3059\",\n    \"Cell Style\": \"\\u30bb\\u30eb\\u30b9\\u30bf\\u30a4\\u30eb\",\n\n    // Files\n    \"Upload File\": \"\\u30d5\\u30a1\\u30a4\\u30eb\\u306e\\u30a2\\u30c3\\u30d7\\u30ed\\u30fc\\u30c9\",\n    \"Drop file\": \"\\u30d5\\u30a1\\u30a4\\u30eb\\u3092\\u30c9\\u30e9\\u30c3\\u30b0&\\u30c9\\u30ed\\u30c3\\u30d7\",\n\n    // Emoticons\n    \"Emoticons\": \"\\u7d75\\u6587\\u5b57\",\n    \"Grinning face\": \"\\u30cb\\u30f3\\u30de\\u30ea\\u9854\",\n    \"Grinning face with smiling eyes\": \"\\u30cb\\u30f3\\u30de\\u30ea\\u9854(\\u7b11\\u3063\\u3066\\u3044\\u308b\\u76ee)\",\n    \"Face with tears of joy\": \"\\u5b09\\u3057\\u6ce3\\u304d\\u3059\\u308b\\u9854\",\n    \"Smiling face with open mouth\": \"\\u7b11\\u9854(\\u5e83\\u3052\\u305f\\u53e3)\",\n    \"Smiling face with open mouth and smiling eyes\": \"\\u7b11\\u9854(\\u5e83\\u3052\\u305f\\u53e3\\u3001\\u7b11\\u3063\\u3066\\u3044\\u308b\\u76ee)\",\n    \"Smiling face with open mouth and cold sweat\": \"\\u7b11\\u9854(\\u5e83\\u3052\\u305f\\u53e3\\u3001\\u51b7\\u3084\\u6c57)\",\n    \"Smiling face with open mouth and tightly-closed eyes\": \"\\u7b11\\u9854(\\u5e83\\u3052\\u305f\\u53e3\\u3001\\u3057\\u3063\\u304b\\u308a\\u9589\\u3058\\u305f\\u76ee)\",\n    \"Smiling face with halo\": \"\\u5929\\u4f7f\\u306e\\u8f2a\\u304c\\u304b\\u304b\\u3063\\u3066\\u3044\\u308b\\u7b11\\u9854\",\n    \"Smiling face with horns\": \"\\u89d2\\u306e\\u3042\\u308b\\u7b11\\u9854\",\n    \"Winking face\": \"\\u30a6\\u30a3\\u30f3\\u30af\\u3057\\u305f\\u9854\",\n    \"Smiling face with smiling eyes\": \"\\u7b11\\u9854(\\u7b11\\u3063\\u3066\\u3044\\u308b\\u76ee)\",\n    \"Face savoring delicious food\": \"\\u304a\\u3044\\u3057\\u3044\\u3082\\u306e\\u3092\\u98df\\u3079\\u305f\\u9854\",\n    \"Relieved face\": \"\\u5b89\\u5fc3\\u3057\\u305f\\u9854\",\n    \"Smiling face with heart-shaped eyes\": \"\\u76ee\\u304c\\u30cf\\u30fc\\u30c8\\u306e\\u7b11\\u9854\",\n    \"Smiling face with sunglasses\": \"\\u30b5\\u30f3\\u30b0\\u30e9\\u30b9\\u3092\\u304b\\u3051\\u305f\\u7b11\\u9854\",\n    \"Smirking face\": \"\\u4f5c\\u308a\\u7b11\\u3044\",\n    \"Neutral face\": \"\\u7121\\u8868\\u60c5\\u306e\\u9854\",\n    \"Expressionless face\": \"\\u7121\\u8868\\u60c5\\u306a\\u9854\",\n    \"Unamused face\": \"\\u3064\\u307e\\u3089\\u306a\\u3044\\u9854\",\n    \"Face with cold sweat\": \"\\u51b7\\u3084\\u6c57\\u3092\\u304b\\u3044\\u305f\\u9854\",\n    \"Pensive face\": \"\\u8003\\u3048\\u4e2d\\u306e\\u9854\",\n    \"Confused face\": \"\\u5c11\\u3057\\u3057\\u3087\\u3093\\u307c\\u308a\\u3057\\u305f\\u9854\",\n    \"Confounded face\": \"\\u56f0\\u308a\\u679c\\u3066\\u305f\\u9854\",\n    \"Kissing face\": \"\\u30ad\\u30b9\\u3059\\u308b\\u9854\",\n    \"Face throwing a kiss\": \"\\u6295\\u3052\\u30ad\\u30c3\\u30b9\\u3059\\u308b\\u9854\",\n    \"Kissing face with smiling eyes\": \"\\u7b11\\u3044\\u306a\\u304c\\u3089\\u30ad\\u30b9\\u3059\\u308b\\u9854\",\n    \"Kissing face with closed eyes\": \"\\u76ee\\u3092\\u9589\\u3058\\u3066\\u30ad\\u30b9\\u3059\\u308b\\u9854\",\n    \"Face with stuck out tongue\": \"\\u304b\\u3089\\u304b\\u3063\\u305f\\u9854(\\u3042\\u3063\\u304b\\u3093\\u3079\\u3048)\",\n    \"Face with stuck out tongue and winking eye\": \"\\u30a6\\u30a3\\u30f3\\u30af\\u3057\\u3066\\u820c\\u3092\\u51fa\\u3057\\u305f\\u9854\",\n    \"Face with stuck out tongue and tightly-closed eyes\": \"\\u76ee\\u3092\\u9589\\u3058\\u3066\\u820c\\u3092\\u51fa\\u3057\\u305f\\u9854\",\n    \"Disappointed face\": \"\\u843d\\u3061\\u8fbc\\u3093\\u3060\\u9854\",\n    \"Worried face\": \"\\u4e0d\\u5b89\\u306a\\u9854\",\n    \"Angry face\": \"\\u6012\\u3063\\u305f\\u9854\",\n    \"Pouting face\": \"\\u3075\\u304f\\u308c\\u9854\",\n    \"Crying face\": \"\\u6ce3\\u3044\\u3066\\u3044\\u308b\\u9854\",\n    \"Persevering face\": \"\\u5931\\u6557\\u9854\",\n    \"Face with look of triumph\": \"\\u52dd\\u3061\\u307b\\u3053\\u3063\\u305f\\u9854\",\n    \"Disappointed but relieved face\": \"\\u5b89\\u5835\\u3057\\u305f\\u9854\",\n    \"Frowning face with open mouth\": \"\\u3044\\u3084\\u306a\\u9854(\\u958b\\u3051\\u305f\\u53e3)\",\n    \"Anguished face\": \"\\u3052\\u3093\\u306a\\u308a\\u3057\\u305f\\u9854\",\n    \"Fearful face\": \"\\u9752\\u3056\\u3081\\u305f\\u9854\",\n    \"Weary face\": \"\\u75b2\\u308c\\u305f\\u9854\",\n    \"Sleepy face\": \"\\u7720\\u3044\\u9854\",\n    \"Tired face\": \"\\u3057\\u3093\\u3069\\u3044\\u9854\",\n    \"Grimacing face\": \"\\u3061\\u3087\\u3063\\u3068\\u4e0d\\u5feb\\u306a\\u9854\",\n    \"Loudly crying face\": \"\\u5927\\u6ce3\\u304d\\u3057\\u3066\\u3044\\u308b\\u9854\",\n    \"Face with open mouth\": \"\\u53e3\\u3092\\u958b\\u3051\\u305f\\u9854\",\n    \"Hushed face\": \"\\u9ed9\\u3063\\u305f\\u9854\",\n    \"Face with open mouth and cold sweat\": \"\\u53e3\\u3092\\u958b\\u3051\\u305f\\u9854(\\u51b7\\u3084\\u6c57)\",\n    \"Face screaming in fear\": \"\\u6050\\u6016\\u306e\\u53eb\\u3073\\u9854\",\n    \"Astonished face\": \"\\u9a5a\\u3044\\u305f\\u9854\",\n    \"Flushed face\": \"\\u71b1\\u3063\\u307d\\u3044\\u9854\",\n    \"Sleeping face\": \"\\u5bdd\\u9854\",\n    \"Dizzy face\": \"\\u307e\\u3044\\u3063\\u305f\\u9854\",\n    \"Face without mouth\": \"\\u53e3\\u306e\\u306a\\u3044\\u9854\",\n    \"Face with medical mask\": \"\\u30de\\u30b9\\u30af\\u3057\\u305f\\u9854\",\n\n    // Line breaker\n    \"Break\": \"\\u6539\\u884c\",\n\n    // Math\n    \"Subscript\": \"\\u4e0b\\u4ed8\\u304d\\u6587\\u5b57\",\n    \"Superscript\": \"\\u4e0a\\u4ed8\\u304d\\u6587\\u5b57\",\n\n    // Full screen\n    \"Fullscreen\": \"\\u5168\\u753b\\u9762\\u8868\\u793a\",\n\n    // Horizontal line\n    \"Insert Horizontal Line\": \"\\u6c34\\u5e73\\u7dda\\u306e\\u633f\\u5165\",\n\n    // Clear formatting\n    \"Clear Formatting\": \"\\u66f8\\u5f0f\\u306e\\u30af\\u30ea\\u30a2\",\n\n    // Save\n    \"Save\": \"\\u30bb\\u30fc\\u30d6\",\n\n    // Undo, redo\n    \"Undo\": \"\\u5143\\u306b\\u623b\\u3059\",\n    \"Redo\": \"\\u3084\\u308a\\u76f4\\u3059\",\n\n    // Select all\n    \"Select All\": \"\\u5168\\u3066\\u3092\\u9078\\u629e\",\n\n    // Code view\n    \"Code View\": \"HTML\\u30bf\\u30b0\\u8868\\u793a\",\n\n    // Quote\n    \"Quote\": \"\\u5f15\\u7528\",\n    \"Increase\": \"\\u5897\\u52a0\",\n    \"Decrease\": \"\\u6e1b\\u5c11\",\n\n    // Quick Insert\n    \"Quick Insert\": \"\\u30af\\u30a4\\u30c3\\u30af\\u633f\\u5165\",\n\n    // Spcial Characters\n    \"Special Characters\": \"\\u7279\\u6b8a\\u6587\\u5b57\",\n    \"Latin\": \"\\u30e9\\u30c6\\u30f3\\u8a9e\",\n    \"Greek\": \"\\u30ae\\u30ea\\u30b7\\u30e3\\u8a9e\",\n    \"Cyrillic\": \"\\u30ad\\u30ea\\u30eb\\u6587\\u5b57\",\n    \"Punctuation\": \"\\u53e5\\u8aad\\u70b9\",\n    \"Currency\": \"\\u901a\\u8ca8\",\n    \"Arrows\": \"\\u77e2\\u5370\",\n    \"Math\": \"\\u6570\\u5b66\",\n    \"Misc\": \"\\u305d\\u306e\\u4ed6\",\n\n    // Print.\n    \"Print\": \"\\u5370\\u5237\",\n\n    // Spell Checker.\n    \"Spell Checker\": \"\\u30b9\\u30da\\u30eb\\u30c1\\u30a7\\u30c3\\u30af\",\n\n    // Help\n    \"Help\": \"\\u30d8\\u30eb\\u30d7\",\n    \"Shortcuts\": \"\\u30b7\\u30e7\\u30fc\\u30c8\\u30ab\\u30c3\\u30c8\",\n    \"Inline Editor\": \"\\u30a4\\u30f3\\u30e9\\u30a4\\u30f3\\u30a8\\u30c7\\u30a3\\u30bf\",\n    \"Show the editor\": \"\\u30a8\\u30c7\\u30a3\\u30bf\\u3092\\u8868\\u793a\",\n    \"Common actions\": \"\\u4e00\\u822c\\u52d5\\u4f5c\",\n    \"Copy\": \"\\u30b3\\u30d4\\u30fc\",\n    \"Cut\": \"\\u30ab\\u30c3\\u30c8\",\n    \"Paste\": \"\\u8cbc\\u308a\\u4ed8\\u3051\",\n    \"Basic Formatting\": \"\\u57fa\\u672c\\u66f8\\u5f0f\",\n    \"Increase quote level\": \"\\u5f15\\u7528\\u3092\\u5897\\u3084\\u3059\",\n    \"Decrease quote level\": \"\\u5f15\\u7528\\u3092\\u6e1b\\u3089\\u3059\",\n    \"Image / Video\": \"\\u753b\\u50cf/\\u52d5\\u753b\",\n    \"Resize larger\": \"\\u5927\\u304d\\u304f\\u3059\\u308b\",\n    \"Resize smaller\": \"\\u5c0f\\u3055\\u304f\\u3059\\u308b\",\n    \"Table\": \"\\u8868\",\n    \"Select table cell\": \"\\u30bb\\u30eb\\u3092\\u9078\\u629e\",\n    \"Extend selection one cell\": \"\\u30bb\\u30eb\\u306e\\u9078\\u629e\\u7bc4\\u56f2\\u3092\\u5e83\\u3052\\u308b\",\n    \"Extend selection one row\": \"\\u5217\\u306e\\u9078\\u629e\\u7bc4\\u56f2\\u3092\\u5e83\\u3052\\u308b\",\n    \"Navigation\": \"\\u30ca\\u30d3\\u30b2\\u30fc\\u30b7\\u30e7\\u30f3\",\n    \"Focus popup / toolbar\": \"\\u30dd\\u30c3\\u30d7\\u30a2\\u30c3\\u30d7/\\u30c4\\u30fc\\u30eb\\u30d0\\u30fc\\u3092\\u30d5\\u30a9\\u30fc\\u30ab\\u30b9\",\n    \"Return focus to previous position\": \"\\u524d\\u306e\\u4f4d\\u7f6e\\u306b\\u30d5\\u30a9\\u30fc\\u30ab\\u30b9\\u3092\\u623b\\u3059\",\n\n    //\\u00a0Embed.ly\n    \"Embed URL\": \"\\u57cb\\u3081\\u8fbc\\u307fURL\",\n    \"Paste in a URL to embed\": \"\\u57cb\\u3081\\u8fbc\\u307fURL\\u306b\\u8cbc\\u308a\\u4ed8\\u3051\\u308b\",\n\n    // Word Paste.\n    \"The pasted content is coming from a Microsoft Word document. Do you want to keep the format or clean it up?\": \"\\u8cbc\\u308a\\u4ed8\\u3051\\u305f\\u6587\\u66f8\\u306fMicrosoft Word\\u304b\\u3089\\u53d6\\u5f97\\u3055\\u308c\\u307e\\u3059\\u3002\\u30d5\\u30a9\\u30fc\\u30de\\u30c3\\u30c8\\u3092\\u4fdd\\u6301\\u3057\\u3066\\u8cbc\\u308a\\u4ed8\\u3051\\u307e\\u3059\\u304b\\uff1f\",\n    \"Keep\": \"\\u66f8\\u5f0f\\u3092\\u4fdd\\u6301\\u3059\\u308b\",\n    \"Clean\": \"\\u66f8\\u5f0f\\u3092\\u4fdd\\u6301\\u3057\\u306a\\u3044\",\n    \"Word Paste Detected\": \"Microsoft Word\\u306e\\u8cbc\\u308a\\u4ed8\\u3051\\u304c\\u691c\\u51fa\\u3055\\u308c\\u307e\\u3057\\u305f\"\n  },\n  direction: \"ltr\"\n};\n\n}));\n"
  },
  {
    "path": "src/main/resources/static/plugins/froala-editor/js/languages/ko.js",
    "content": "/*!\n * froala_editor v2.9.1 (https://www.froala.com/wysiwyg-editor)\n * License https://froala.com/wysiwyg-editor/terms/\n * Copyright 2014-2018 Froala Labs\n */\n\n(function (factory) {\n    if (typeof define === 'function' && define.amd) {\n        // AMD. Register as an anonymous module.\n        define(['jquery'], factory);\n    } else if (typeof module === 'object' && module.exports) {\n        // Node/CommonJS\n        module.exports = function( root, jQuery ) {\n            if ( jQuery === undefined ) {\n                // require('jQuery') returns a factory that requires window to\n                // build a jQuery instance, we normalize how we use modules\n                // that require this pattern but the window provided is a noop\n                // if it's defined (how jquery works)\n                if ( typeof window !== 'undefined' ) {\n                    jQuery = require('jquery');\n                }\n                else {\n                    jQuery = require('jquery')(root);\n                }\n            }\n            return factory(jQuery);\n        };\n    } else {\n        // Browser globals\n        factory(window.jQuery);\n    }\n}(function ($) {\n/**\n * Korean\n */\n\n$.FE.LANGUAGE['ko'] = {\n  translation: {\n    // Place holder\n    \"Type something\": \"\\ub0b4\\uc6a9\\uc744 \\uc785\\ub825\\ud558\\uc138\\uc694\",\n\n    // Basic formatting\n    \"Bold\": \"\\uad75\\uac8c\",\n    \"Italic\": \"\\uae30\\uc6b8\\uc784\\uaf34\",\n    \"Underline\": \"\\ubc11\\uc904\",\n    \"Strikethrough\": \"\\ucde8\\uc18c\\uc120\",\n\n    // Main buttons\n    \"Insert\": \"\\uc0bd\\uc785\",\n    \"Delete\": \"\\uc0ad\\uc81c\",\n    \"Cancel\": \"\\ucde8\\uc18c\",\n    \"OK\": \"\\uc2b9\\uc778\",\n    \"Back\": \"\\ub4a4\\ub85c\",\n    \"Remove\": \"\\uc81c\\uac70\",\n    \"More\": \"\\ub354\",\n    \"Update\": \"\\uc5c5\\ub370\\uc774\\ud2b8\",\n    \"Style\": \"\\uc2a4\\ud0c0\\uc77c\",\n\n    // Font\n    \"Font Family\": \"\\uae00\\uaf34\",\n    \"Font Size\": \"\\ud3f0\\ud2b8 \\ud06c\\uae30\",\n\n    // Colors\n    \"Colors\": \"\\uc0c9\\uc0c1\",\n    \"Background\": \"\\ubc30\\uacbd\",\n    \"Text\": \"\\ud14d\\uc2a4\\ud2b8\",\n    \"HEX Color\": \"\\ud5e5\\uc2a4 \\uc0c9\\uc0c1\",\n\n    // Paragraphs\n    \"Paragraph Format\": \"\\ub2e8\\ub77d\",\n    \"Normal\": \"\\ud45c\\uc900\",\n    \"Code\": \"\\ucf54\\ub4dc\",\n    \"Heading 1\": \"\\uc81c\\ubaa9 1\",\n    \"Heading 2\": \"\\uc81c\\ubaa9 2\",\n    \"Heading 3\": \"\\uc81c\\ubaa9 3\",\n    \"Heading 4\": \"\\uc81c\\ubaa9 4\",\n\n    // Style\n    \"Paragraph Style\": \"\\ub2e8\\ub77d \\uc2a4\\ud0c0\\uc77c\",\n    \"Inline Style\": \"\\uc778\\ub77c\\uc778 \\uc2a4\\ud0c0\\uc77c\",\n\n    // Alignment\n    \"Align\": \"\\uc815\\ub82c\",\n    \"Align Left\": \"\\uc67c\\ucabd\\uc815\\ub82c\",\n    \"Align Center\": \"\\uac00\\uc6b4\\ub370\\uc815\\ub82c\",\n    \"Align Right\": \"\\uc624\\ub978\\ucabd\\uc815\\ub82c\",\n    \"Align Justify\": \"\\uc591\\ucabd\\uc815\\ub82c\",\n    \"None\": \"\\uc5c6\\uc74c\",\n\n    // Lists\n    \"Ordered List\": \"\\uc22b\\uc790 \\ub9ac\\uc2a4\\ud2b8\",\n    \"Unordered List\": \"\\uc810 \\ub9ac\\uc2a4\\ud2b8\",\n\n    // Indent\n    \"Decrease Indent\": \"\\ub0b4\\uc5b4\\uc4f0\\uae30\",\n    \"Increase Indent\": \"\\ub4e4\\uc5ec\\uc4f0\\uae30\",\n\n    // Links\n    \"Insert Link\": \"\\ub9c1\\ud06c \\uc0bd\\uc785\",\n    \"Open in new tab\": \"\\uc0c8 \\ud0ed\\uc5d0\\uc11c \\uc5f4\\uae30\",\n    \"Open Link\": \"\\ub9c1\\ud06c \\uc5f4\\uae30\",\n    \"Edit Link\": \"\\ud3b8\\uc9d1 \\ub9c1\\ud06c\",\n    \"Unlink\": \"\\ub9c1\\ud06c\\uc0ad\\uc81c\",\n    \"Choose Link\": \"\\ub9c1\\ud06c\\ub97c \\uc120\\ud0dd\",\n\n    // Images\n    \"Insert Image\": \"\\uc774\\ubbf8\\uc9c0 \\uc0bd\\uc785\",\n    \"Upload Image\": \"\\uc774\\ubbf8\\uc9c0 \\uc5c5\\ub85c\\ub4dc\",\n    \"By URL\": \"URL \\ub85c\",\n    \"Browse\": \"\\uac80\\uc0c9\",\n    \"Drop image\": \"\\uc774\\ubbf8\\uc9c0\\ub97c \\ub4dc\\ub798\\uadf8&\\ub4dc\\ub86d\",\n    \"or click\": \"\\ub610\\ub294 \\ud074\\ub9ad\",\n    \"Manage Images\": \"\\uc774\\ubbf8\\uc9c0 \\uad00\\ub9ac\",\n    \"Loading\": \"\\ub85c\\ub4dc\",\n    \"Deleting\": \"\\uc0ad\\uc81c\",\n    \"Tags\": \"\\ud0dc\\uadf8\",\n    \"Are you sure? Image will be deleted.\": \"\\ud655\\uc2e4\\ud55c\\uac00\\uc694? \\uc774\\ubbf8\\uc9c0\\uac00 \\uc0ad\\uc81c\\ub429\\ub2c8\\ub2e4.\",\n    \"Replace\": \"\\uad50\\uccb4\",\n    \"Uploading\": \"\\uc5c5\\ub85c\\ub4dc\",\n    \"Loading image\": \"\\uc774\\ubbf8\\uc9c0 \\ub85c\\ub4dc \\uc911\",\n    \"Display\": \"\\ub514\\uc2a4\\ud50c\\ub808\\uc774\",\n    \"Inline\": \"\\uc778\\ub77c\\uc778\",\n    \"Break Text\": \"\\uad6c\\ubd84 \\ud14d\\uc2a4\\ud2b8\",\n    \"Alternative Text\": \"\\ub300\\uccb4 \\ud14d\\uc2a4\\ud2b8\",\n    \"Change Size\": \"\\ud06c\\uae30 \\ubcc0\\uacbd\",\n    \"Width\": \"\\ud3ed\",\n    \"Height\": \"\\ub192\\uc774\",\n    \"Something went wrong. Please try again.\": \"\\ubb38\\uc81c\\uac00 \\ubc1c\\uc0dd\\ud588\\uc2b5\\ub2c8\\ub2e4. \\ub2e4\\uc2dc \\uc2dc\\ub3c4\\ud558\\uc2ed\\uc2dc\\uc624.\",\n    \"Image Caption\": \"\\uc774\\ubbf8\\uc9c0 \\ucea1\\uc158\",\n    \"Advanced Edit\": \"\\uace0\\uae09 \\ud3b8\\uc9d1\",\n\n    // Video\n    \"Insert Video\": \"\\ub3d9\\uc601\\uc0c1 \\uc0bd\\uc785\",\n    \"Embedded Code\": \"\\uc784\\ubca0\\ub514\\ub4dc \\ucf54\\ub4dc\",\n    \"Paste in a video URL\": \"\\ub3d9\\uc601\\uc0c1 URL\\uc5d0 \\ubd99\\uc5ec \\ub123\\uae30\",\n    \"Drop video\": \"\\ub3d9\\uc601\\uc0c1\\uc744 \\ub4dc\\ub798\\uadf8&\\ub4dc\\ub86d\",\n    \"Your browser does not support HTML5 video.\": \"\\uadc0\\ud558\\uc758 \\ube0c\\ub77c\\uc6b0\\uc800\\ub294 html5 video\\ub97c \\uc9c0\\uc6d0\\ud558\\uc9c0 \\uc54a\\uc2b5\\ub2c8\\ub2e4.\",\n    \"Upload Video\": \"\\ub3d9\\uc601\\uc0c1 \\uc5c5\\ub85c\\ub4dc\",\n\n    // Tables\n    \"Insert Table\": \"\\ud45c \\uc0bd\\uc785\",\n    \"Table Header\": \"\\ud45c \\ud5e4\\ub354\",\n    \"Remove Table\": \"\\ud45c \\uc81c\\uac70\",\n    \"Table Style\": \"\\ud45c \\uc2a4\\ud0c0\\uc77c\",\n    \"Horizontal Align\": \"\\uc218\\ud3c9 \\uc815\\ub82c\",\n    \"Row\": \"\\ud589\",\n    \"Insert row above\": \"\\uc55e\\uc5d0 \\ud589\\uc744 \\uc0bd\\uc785\",\n    \"Insert row below\": \"\\ub4a4\\uc5d0 \\ud589\\uc744 \\uc0bd\\uc785\",\n    \"Delete row\": \"\\ud589 \\uc0ad\\uc81c\",\n    \"Column\": \"\\uc5f4\",\n    \"Insert column before\": \"\\uc55e\\uc5d0 \\uc5f4\\uc744 \\uc0bd\\uc785\",\n    \"Insert column after\": \"\\ub4a4\\uc5d0 \\uc5f4\\uc744 \\uc0bd\\uc785\",\n    \"Delete column\": \"\\uc5f4 \\uc0ad\\uc81c\",\n    \"Cell\": \"\\uc140\",\n    \"Merge cells\": \"\\uc140 \\ud569\\uce58\\uae30\",\n    \"Horizontal split\": \"\\uc218\\ud3c9 \\ubd84\\ud560\",\n    \"Vertical split\": \"\\uc218\\uc9c1 \\ubd84\\ud560\",\n    \"Cell Background\": \"\\uc140 \\ubc30\\uacbd\",\n    \"Vertical Align\": \"\\uc218\\uc9c1 \\uc815\\ub82c\",\n    \"Top\": \"\\uc704\\ucabd \\uc815\\ub82c\",\n    \"Middle\": \"\\uac00\\uc6b4\\ub370 \\uc815\\ub82c\",\n    \"Bottom\": \"\\uc544\\ub798\\ucabd \\uc815\\ub82c\",\n    \"Align Top\": \"\\uc704\\ucabd\\uc73c\\ub85c \\uc815\\ub82c\\ud569\\ub2c8\\ub2e4.\",\n    \"Align Middle\": \"\\uac00\\uc6b4\\ub370\\ub85c \\uc815\\ub82c\\ud569\\ub2c8\\ub2e4.\",\n    \"Align Bottom\": \"\\uc544\\ub798\\ucabd\\uc73c\\ub85c \\uc815\\ub82c\\ud569\\ub2c8\\ub2e4.\",\n    \"Cell Style\": \"\\uc140 \\uc2a4\\ud0c0\\uc77c\",\n\n    // Files\n    \"Upload File\": \"\\ud30c\\uc77c \\ucca8\\ubd80\",\n    \"Drop file\": \"\\ud30c\\uc77c\\uc744 \\ub4dc\\ub798\\uadf8&\\ub4dc\\ub86d\",\n\n    // Emoticons\n    \"Emoticons\": \"\\uc774\\ubaa8\\ud2f0\\ucf58\",\n    \"Grinning face\": \"\\uc5bc\\uad74 \\uc6c3\\uae30\\ub9cc\",\n    \"Grinning face with smiling eyes\": \"\\ubbf8\\uc18c\\ub294 \\ub208\\uc744 \\uac00\\uc9c4 \\uc5bc\\uad74 \\uc6c3\\uae30\\ub9cc\",\n    \"Face with tears of joy\": \"\\uae30\\uc068\\uc758 \\ub208\\ubb3c\\ub85c \\uc5bc\\uad74\",\n    \"Smiling face with open mouth\": \"\\uc624\\ud508 \\uc785\\uc73c\\ub85c \\uc6c3\\ub294 \\uc5bc\\uad74\",\n    \"Smiling face with open mouth and smiling eyes\": \"\\uc624\\ud508 \\uc785\\uc73c\\ub85c \\uc6c3\\ub294 \\uc5bc\\uad74\\uacfc \\ub208\\uc744 \\ubbf8\\uc18c\",\n    \"Smiling face with open mouth and cold sweat\": \"\\uc785\\uc744 \\uc5f4\\uace0 \\uc2dd\\uc740 \\ub540\\uacfc \\ud568\\uaed8 \\uc6c3\\ub294 \\uc5bc\\uad74\",\n    \"Smiling face with open mouth and tightly-closed eyes\": \"\\uc624\\ud508 \\uc785\\uacfc \\ubc00\\uc811\\ud558\\uac8c \\ub2eb\\ud78c \\ub41c \\ub208\\uc744 \\uac00\\uc9c4 \\uc6c3\\ub294 \\uc5bc\\uad74\",\n    \"Smiling face with halo\": \"\\ud6c4\\uad11 \\uc6c3\\ub294 \\uc5bc\\uad74\",\n    \"Smiling face with horns\": \"\\ubfd4 \\uc6c3\\ub294 \\uc5bc\\uad74\",\n    \"Winking face\": \"\\uc5bc\\uad74 \\uc719\\ud06c\",\n    \"Smiling face with smiling eyes\": \"\\uc6c3\\ub294 \\ub208\\uc73c\\ub85c \\uc6c3\\ub294 \\uc5bc\\uad74\",\n    \"Face savoring delicious food\": \"\\ub9db\\uc788\\ub294 \\uc74c\\uc2dd\\uc744 \\uc74c\\ubbf8 \\uc5bc\\uad74\",\n    \"Relieved face\": \"\\uc548\\ub3c4 \\uc5bc\\uad74\",\n    \"Smiling face with heart-shaped eyes\": \"\\ud558\\ud2b8 \\ubaa8\\uc591\\uc758 \\ub208\\uc73c\\ub85c \\uc6c3\\ub294 \\uc5bc\\uad74\",\n    \"Smiling face with sunglasses\": \"\\uc120\\uae00\\ub77c\\uc2a4 \\uc6c3\\ub294 \\uc5bc\\uad74\",\n    \"Smirking face\": \"\\ub3c8\\uc744 \\uc9c0\\ubd88 \\uc5bc\\uad74\",\n    \"Neutral face\": \"\\uc911\\ub9bd \\uc5bc\\uad74\",\n    \"Expressionless face\": \"\\ubb34\\ud45c\\uc815 \\uc5bc\\uad74\",\n    \"Unamused face\": \"\\uc990\\uac81\\uac8c\\ud558\\uc9c0 \\uc5bc\\uad74\",\n    \"Face with cold sweat\": \"\\uc2dd\\uc740 \\ub540\\uacfc \\uc5bc\\uad74\",\n    \"Pensive face\": \"\\uc7a0\\uaca8\\uc788\\ub294 \\uc5bc\\uad74\",\n    \"Confused face\": \"\\ud63c\\ub780 \\uc5bc\\uad74\",\n    \"Confounded face\": \"\\ub9dd\\ud560 \\uac83 \\uc5bc\\uad74\",\n    \"Kissing face\": \"\\uc5bc\\uad74\\uc744 \\ud0a4\\uc2a4\",\n    \"Face throwing a kiss\": \"\\ud0a4\\uc2a4\\ub97c \\ub358\\uc9c0\\uace0 \\uc5bc\\uad74\",\n    \"Kissing face with smiling eyes\": \"\\ubbf8\\uc18c\\ub294 \\ub208\\uc744 \\uac00\\uc9c4 \\uc5bc\\uad74\\uc744 \\ud0a4\\uc2a4\",\n    \"Kissing face with closed eyes\": \"\\ub2eb\\ud78c \\ub41c \\ub208\\uc744 \\uac00\\uc9c4 \\uc5bc\\uad74\\uc744 \\ud0a4\\uc2a4\",\n    \"Face with stuck out tongue\": \"\\ub0b4\\ubc00 \\ud600 \\uc5bc\\uad74\",\n    \"Face with stuck out tongue and winking eye\": \"\\ub0b4\\ubc00 \\ud600\\uc640 \\uc719\\ud06c \\ub208\\uacfc \\uc5bc\\uad74\",\n    \"Face with stuck out tongue and tightly-closed eyes\": \"\\ubc16\\uc73c\\ub85c \\ubd99\\uc5b4 \\ud600\\uc640 \\ubc00\\uc811\\ud558\\uac8c \\ub2eb\\ud78c \\ub41c \\ub208\\uc744 \\uac00\\uc9c4 \\uc5bc\\uad74\",\n    \"Disappointed face\": \"\\uc2e4\\ub9dd \\uc5bc\\uad74\",\n    \"Worried face\": \"\\uac71\\uc815 \\uc5bc\\uad74\",\n    \"Angry face\": \"\\uc131\\ub09c \\uc5bc\\uad74\",\n    \"Pouting face\": \"\\uc5bc\\uad74\\uc744 \\uc090\",\n    \"Crying face\": \"\\uc5bc\\uad74 \\uc6b0\\ub294\",\n    \"Persevering face\": \"\\uc5bc\\uad74\\uc744 \\uc778\\ub0b4\",\n    \"Face with look of triumph\": \"\\uc2b9\\ub9ac\\uc758 \\ud45c\\uc815\\uc73c\\ub85c \\uc5bc\\uad74\",\n    \"Disappointed but relieved face\": \"\\uc2e4\\ub9dd\\ud558\\uc9c0\\ub9cc \\uc5bc\\uad74\\uc744 \\uc548\\uc2ec\",\n    \"Frowning face with open mouth\": \"\\uc624\\ud508 \\uc785\\uc73c\\ub85c \\uc5bc\\uad74\\uc744 \\ucc21\\uadf8\\ub9bc\",\n    \"Anguished face\": \"\\uace0\\ub1cc\\uc758 \\uc5bc\\uad74\",\n    \"Fearful face\": \"\\ubb34\\uc11c\\uc6b4 \\uc5bc\\uad74\",\n    \"Weary face\": \"\\uc9c0\\uce5c \\uc5bc\\uad74\",\n    \"Sleepy face\": \"\\uc2ac\\ub9ac\\ud53c \\uc5bc\\uad74\",\n    \"Tired face\": \"\\ud53c\\uace4 \\uc5bc\\uad74\",\n    \"Grimacing face\": \"\\uc5bc\\uad74\\uc744 \\ucc21\\uadf8\\ub9b0\",\n    \"Loudly crying face\": \"\\ud070 \\uc18c\\ub9ac\\ub85c \\uc5bc\\uad74\\uc744 \\uc6b8\\uace0\",\n    \"Face with open mouth\": \"\\uc624\\ud508 \\uc785\\uc73c\\ub85c \\uc5bc\\uad74\",\n    \"Hushed face\": \"\\uc870\\uc6a9\\ud55c \\uc5bc\\uad74\",\n    \"Face with open mouth and cold sweat\": \"\\uc785\\uc744 \\uc5f4\\uace0 \\uc2dd\\uc740 \\ub540\\uc73c\\ub85c \\uc5bc\\uad74\",\n    \"Face screaming in fear\": \"\\uacf5\\ud3ec\\uc5d0 \\ube44\\uba85 \\uc5bc\\uad74\",\n    \"Astonished face\": \"\\ub180\\ub77c \\uc5bc\\uad74\",\n    \"Flushed face\": \"\\ud50c\\ub7ec\\uc2dc \\uc5bc\\uad74\",\n    \"Sleeping face\": \"\\uc5bc\\uad74 \\uc7a0\\uc790\\ub294\",\n    \"Dizzy face\": \"\\ub514\\uc9c0 \\uc5bc\\uad74\",\n    \"Face without mouth\": \"\\uc785\\uc5c6\\uc774 \\uc5bc\\uad74\",\n    \"Face with medical mask\": \"\\uc758\\ub8cc \\ub9c8\\uc2a4\\ud06c\\ub85c \\uc5bc\\uad74\",\n\n    // Line breaker\n    \"Break\": \"\\ub2e8\\uc808\",\n\n    // Math\n    \"Subscript\": \"\\uc544\\ub798 \\ucca8\\uc790\",\n    \"Superscript\": \"\\uc704 \\ucca8\\uc790\",\n\n    // Full screen\n    \"Fullscreen\": \"\\uc804\\uccb4 \\ud654\\uba74\",\n\n    // Horizontal line\n    \"Insert Horizontal Line\": \"\\uc218\\ud3c9\\uc120\\uc744 \\uc0bd\\uc785\",\n\n    // Clear formatting\n    \"Clear Formatting\": \"\\uc11c\\uc2dd \\uc81c\\uac70\",\n\n    // Save\n    \"Save\": \"\\uad6c\\ud558\\ub2e4\",\n\n    // Undo, redo\n    \"Undo\": \"\\uc2e4\\ud589 \\ucde8\\uc18c\",\n    \"Redo\": \"\\ub418\\ub3cc\\ub9ac\\uae30\",\n\n    // Select all\n    \"Select All\": \"\\uc804\\uccb4\\uc120\\ud0dd\",\n\n    // Code view\n    \"Code View\": \"\\ucf54\\ub4dc\\ubcf4\\uae30\",\n\n    // Quote\n    \"Quote\": \"\\uc778\\uc6a9\",\n    \"Increase\": \"\\uc99d\\uac00\",\n    \"Decrease\": \"\\uac10\\uc18c\",\n\n    // Quick Insert\n    \"Quick Insert\": \"\\ube60\\ub978 \\uc0bd\\uc785\",\n\n    // Spcial Characters\n    \"Special Characters\": \"\\ud2b9\\uc218 \\ubb38\\uc790\",\n    \"Latin\": \"\\ub77c\\ud2f4\\uc5b4\",\n    \"Greek\": \"\\uadf8\\ub9ac\\uc2a4\\uc5b4\",\n    \"Cyrillic\": \"\\ud0a4\\ub9b4 \\ubb38\\uc790\",\n    \"Punctuation\": \"\\ubb38\\uc7a5\\ubd80\\ud638\",\n    \"Currency\": \"\\ud1b5\\ud654\",\n    \"Arrows\": \"\\ud654\\uc0b4\\ud45c\",\n    \"Math\": \"\\uc218\\ud559\",\n    \"Misc\": \"\\uadf8 \\uc678\",\n\n    // Print.\n    \"Print\": \"\\uc778\\uc1c4\",\n\n    // Spell Checker.\n    \"Spell Checker\": \"\\ub9de\\ucda4\\ubc95 \\uac80\\uc0ac\\uae30\",\n\n    // Help\n    \"Help\": \"\\ub3c4\\uc6c0\\ub9d0\",\n    \"Shortcuts\": \"\\ub2e8\\ucd95\\ud0a4\",\n    \"Inline Editor\": \"\\uc778\\ub77c\\uc778 \\uc5d0\\ub514\\ud130\",\n    \"Show the editor\": \"\\uc5d0\\ub514\\ud130 \\ubcf4\\uae30\",\n    \"Common actions\": \"\\uc77c\\ubc18 \\ub3d9\\uc791\",\n    \"Copy\": \"\\ubcf5\\uc0ac\\ud558\\uae30\",\n    \"Cut\": \"\\uc798\\ub77c\\ub0b4\\uae30\",\n    \"Paste\": \"\\ubd99\\uc5ec\\ub123\\uae30\",\n    \"Basic Formatting\": \"\\uae30\\ubcf8 \\uc11c\\uc2dd\",\n    \"Increase quote level\": \"\\uc778\\uc6a9 \\uc99d\\uac00\",\n    \"Decrease quote level\": \"\\uc778\\uc6a9 \\uac10\\uc18c\",\n    \"Image / Video\": \"\\uc774\\ubbf8\\uc9c0 / \\ub3d9\\uc601\\uc0c1\",\n    \"Resize larger\": \"\\ud06c\\uae30\\ub97c \\ub354 \\ud06c\\uac8c \\uc870\\uc815\",\n    \"Resize smaller\": \"\\ud06c\\uae30\\ub97c \\ub354 \\uc791\\uac8c \\uc870\\uc815\",\n    \"Table\": \"\\ud45c\",\n    \"Select table cell\": \"\\ud45c \\uc140 \\uc120\\ud0dd\",\n    \"Extend selection one cell\": \"\\uc140\\uc758 \\uc120\\ud0dd \\ubc94\\uc704\\ub97c \\ud655\\uc7a5\",\n    \"Extend selection one row\": \"\\ud589\\uc758 \\uc120\\ud0dd \\ubc94\\uc704\\ub97c \\ud655\\uc7a5\",\n    \"Navigation\": \"\\ub124\\ube44\\uac8c\\uc774\\uc158\",\n    \"Focus popup / toolbar\": \"\\ud31d\\uc5c5 / \\ud234\\ubc14\\ub97c \\ud3ec\\ucee4\\uc2a4\",\n    \"Return focus to previous position\": \"\\uc774\\uc804 \\uc704\\uce58\\ub85c \\ud3ec\\ucee4\\uc2a4 \\ub418\\ub3cc\\ub9ac\\uae30\",\n\n    // Embed.ly\n    \"Embed URL\": \"\\uc784\\ubca0\\ub4dc URL\",\n    \"Paste in a URL to embed\": \"\\uc784\\ubca0\\ub4dc URL\\uc5d0 \\ubd99\\uc5ec \\ub123\\uae30\",\n\n    // Word Paste.\n    \"The pasted content is coming from a Microsoft Word document. Do you want to keep the format or clean it up?\": \"\\ubd99\\uc5ec\\ub123\\uc740 \\ubb38\\uc11c\\ub294 \\ub9c8\\uc774\\ud06c\\ub85c\\uc18c\\ud504\\ud2b8 \\uc6cc\\ub4dc\\uc5d0\\uc11c \\uac00\\uc838\\uc654\\uc2b5\\ub2c8\\ub2e4. \\ud3ec\\ub9f7\\uc744 \\uc720\\uc9c0\\ud558\\uac70\\ub098 \\uc815\\ub9ac \\ud558\\uc2dc\\uaca0\\uc2b5\\ub2c8\\uae4c?\",\n    \"Keep\": \"\\uc720\\uc9c0\",\n    \"Clean\": \"\\uc815\\ub9ac\",\n    \"Word Paste Detected\": \"\\uc6cc\\ub4dc \\ubd99\\uc5ec \\ub123\\uae30\\uac00 \\uac80\\ucd9c \\ub418\\uc5c8\\uc2b5\\ub2c8\\ub2e4.\"\n  },\n  direction: \"ltr\"\n};\n\n}));\n"
  },
  {
    "path": "src/main/resources/static/plugins/froala-editor/js/languages/ku.js",
    "content": "/*!\n * froala_editor v2.9.1 (https://www.froala.com/wysiwyg-editor)\n * License https://froala.com/wysiwyg-editor/terms/\n * Copyright 2014-2018 Froala Labs\n */\n\n(function (factory) {\n    if (typeof define === 'function' && define.amd) {\n        // AMD. Register as an anonymous module.\n        define(['jquery'], factory);\n    } else if (typeof module === 'object' && module.exports) {\n        // Node/CommonJS\n        module.exports = function( root, jQuery ) {\n            if ( jQuery === undefined ) {\n                // require('jQuery') returns a factory that requires window to\n                // build a jQuery instance, we normalize how we use modules\n                // that require this pattern but the window provided is a noop\n                // if it's defined (how jquery works)\n                if ( typeof window !== 'undefined' ) {\n                    jQuery = require('jquery');\n                }\n                else {\n                    jQuery = require('jquery')(root);\n                }\n            }\n            return factory(jQuery);\n        };\n    } else {\n        // Browser globals\n        factory(window.jQuery);\n    }\n}(function ($) {\n/**\n * Arabic\n */\n\n$.FE.LANGUAGE['ku'] = {\n  translation: {\n    // Place holder\n    \"Type something\": \"شتێک بنووسە\",\n\n    // Basic formatting\n    \"Bold\": \"تۆخکردنەوە\",\n    \"Italic\": \"لارکردنەوە\",\n    \"Underline\": \"هێڵ بەژێردا هێنان\",\n    \"Strikethrough\": \"هێڵ بە سەردا هێنان\",\n\n    // Main buttons\n    \"Insert\": \"خستنە ناو\",\n    \"Delete\": \"سڕینەوە\",\n    \"Cancel\": \"پاشگەزبوونەوە\",\n    \"OK\": \"باشە\",\n    \"Back\": \"گەڕانەوە\",\n    \"Remove\": \"لابردن\",\n    \"More\": \"زیاتر\",\n    \"Update\": \"نوێکردنەوە\",\n    \"Style\": \"شێواز\",\n\n    // Font\n    \"Font Family\": \"فۆنتی خێزان\",\n    \"Font Size\": \"قەبارەی فۆنت\",\n\n    // Colors\n    \"Colors\": \"ڕەنگەکان\",\n    \"Background\": \"پاشبنەما(باکگراوند)\",\n    \"Text\": \"دەق\",\n\n    // Paragraphs بۆیە ڕەقەمەکانی خوارەوەم نەکردووە بە کوردی لە شوێنی تریش بینیوومە هەروا نوسراوەتەوە\n    \"Paragraph Format\": \"شێوازی پەڕەگراف\",\n    \"Normal\": \"ئاسایی\",\n    \"Code\": \"کۆد\",\n    \"Heading 1\": \" 1\",\n    \"Heading 2\": \" 2\",\n    \"Heading 3\": \" 3\",\n    \"Heading 4\": \" 4\",\n\n    // Style\n    \"Paragraph Style\": \"شێوازی پەڕەگراف\",\n    \"Inline Style\": \"شێوزای ناو دێڕ\",\n\n    // Alignment\n    \"Align\": \"ڕیزکردن\",\n    \"Align Left\": \"ڕیزکردن لای چەپەوە\",\n    \"Align Center\": \"ڕیزکردن لە ناوەڕاستەوە\",\n    \"Align Right\": \"ڕیزکردن لای ڕاستەوە\",\n    \"Align Justify\": \"هاوڕێک\",\n    \"None\": \"هیچ\",\n\n    // Lists\n    \"Ordered List\": \"لیستی داواکراو\",\n    \"Unordered List\": \"لیستی داوانەکراو\",\n\n    // Indent\n    \"Decrease Indent\": \"کەمکردنەوەی بۆشایی بەجێهێشتن\",\n    \"Increase Indent\": \"زیادکردنی بۆشایی بەجێهێشتن\",\n\n    // Links\n    \"Insert Link\": \"دانانی بەستەر\",\n    \"Open in new tab\": \"کردنەوەی لە تابێکی نوێدا\",\n    \"Open Link\": \"کردنەوەی بەستەر\",\n    \"Edit Link\": \"دەستکاریکردنی بەستەر\",\n    \"Unlink\": \"سڕینەوەی بەستەر\",\n    \"Choose Link\": \"هەڵبژاردنی بەستەر\",\n\n    // Images\n    \"Insert Image\": \"هێنانی وێنە\",\n    \"Upload Image\": \"بارکردنی وێنە\",\n    \"By URL\": \"بە شێوەی بەستەر\",\n    \"Browse\": \"هێنان\",\n    \"Drop image\": \"ڕاکێشانی وێنە\",\n    \"or click\": \"یان کرتە\",\n    \"Manage Images\": \"بەڕێوەبردنی وێنە\",\n    \"ئامادەکردن\": \"Cargando\",\n    \"Deleting\": \"سڕینەوە\",\n    \"Tags\": \"تاگەکان\",\n    \"Are you sure? Image will be deleted.\": \"دڵنیایت لە سڕینەوەی وێنەکە\",\n    \"Replace\": \"لەبری دانان\",\n    \"Uploading\": \"بارکردن\",\n    \"Loading image\": \"ئامادەکردنی وێنە\",\n    \"Display\": \"پیشان دان\",\n    \"Inline\": \"ناو دێڕ\",\n    \"Break Text\": \"ماوەی دەق\",\n    \"Alternative Text\": \"جێگرەوەی دەق\",\n    \"Change Size\": \"گۆڕینی قەبارەی\",\n    \"Width\": \"پانی\",\n    \"Height\": \"بەرزی\",\n    \"Something went wrong. Please try again.\": \"شتێک هە ڵەیە تکایە هەوڵبدەرەوە\",\n\n    // Video\n    \"Insert Video\": \"دانانی ڤیدیۆ\",\n    \"Embedded Code\": \"کۆدی ئێمبد\",\n\n    // Tables\n    \"Insert Table\": \"دانانی خشتە\",\n    \"Table Header\": \"خشتەی ناونیشان\",\n    \"Remove Table\": \"سڕینەوەی خشتە\",\n    \"Table Style\": \"شێوازی خشتە\",\n    \"Horizontal Align\": \"ڕێکخستنی ئاسۆیی\",\n    \"Row\": \"ڕیز\",\n    \"Insert row above\": \"دانانی ڕیز لەسەرەوە\",\n    \"Insert row below\": \"دانانی ڕیز لە خوارەوە\",\n    \"Delete row\": \"سڕینەوەی ڕیز\",\n    \"Column\": \"ستوون\",\n    \"Insert column before\": \"زیادکردنی ستونێک لە پێشەوە\",\n    \"Insert column after\": \"زیادکردنی ستونێک لە دوایەوە\",\n    \"Delete column\": \"سڕینەوەی ستونێک\",\n    \"Cell\": \"خانە\",\n    \"Merge cells\": \"تێکەڵکردنی خانەکان\",\n    \"Horizontal split\": \"جیاکردنەوەی هێڵی ئاسۆیی\",\n    \"Vertical split\": \"جیاکردنەوەی سەر بەرەو خوار\",\n    \"Cell Background\": \"خانەی باکگراوند\",\n    \"Vertical Align\": \"ڕیزکردن بەشێوەی سەر بەرەو خوار\",\n    \"Top\": \"سەرەوە\",\n    \"Middle\": \"ناوەڕاست\",\n    \"Bottom\": \"خوارەوە\",\n    \"Align Top\": \"ڕیزکردن لە سەرەوە\",\n    \"Align Middle\": \"ڕیزکردن لە ناوەڕاستەوە\",\n    \"Align Bottom\": \"ڕیزکردن لە خوارەوە\",\n    \"Cell Style\": \"شێوازی خانە\",\n\n    // Files\n    \"Upload File\": \"بەرزکردنەوەی پەڕگە\",\n    \"Drop file\": \"ڕاکێشانی پەڕگە\",\n\n    // Emoticons\n    \"Emoticons\": \"ئیمۆجی\",\n    \"Grinning face\": \"ڕوخسارێکی پێکەنیناوی\",\n    \"Grinning face with smiling eyes\": \"ڕوخسارێکی پێکەنیناوی لەگەڵ چاوێکی خەندە ئامێز\",\n    \"Face with tears of joy\": \"دەمووچاوێک لەگەڵ ئاو هاتنە خوارەوەوە بە چاودا\",\n    \"Smiling face with open mouth\": \"دەمووچاوێکی پێکەنیناوی لەگەڵ دەمکردنەوە\",\n    \"Smiling face with open mouth and smiling eyes\": \"دەمووچاوێکی پێکەنیناوی لەگەڵ دەمکردنەوە و چاوێکی خەندە ئامێز\",\n    \"Smiling face with open mouth and cold sweat\": \"دەمووچاوێکی پێکەنیناوی لەگەڵ دەمکردنەوە و ئارەق کردنەوە\",\n    \"Smiling face with open mouth and tightly-closed eyes\": \"Cara sonriente con la boca abierta y los ojos fuertemente cerrados\",\n    \"Smiling face with halo\": \"دەمووچاوێکی پێکەنیناوی و بوونی بازنەیەکی خڕ بەسەرتەوە\",\n    \"Smiling face with horns\": \"دەمووچاوێکی پێکەنیناوی لەگەڵ دوو قۆچدا\",\n    \"Winking face\": \"چاو داگرتن\",\n    \"Smiling face with smiling eyes\": \"دەمووچاوێکی پێکەنیناوی چاوی بچوک کردوەتەوە\",\n    \"Face savoring delicious food\": \"دەمووچاوی کەسێک کە حەزی لە خواردنە\",\n    \"Relieved face\": \"دەمووچاوێکی حەساوە\",\n    \"Smiling face with heart-shaped eyes\": \"دەمووچاوێک لەگەڵ بوونی دڵ لە چاودا\",\n    \"Smiling face with sunglasses\": \"دەمووچاوێک لەگەڵ چاویلکەدا\",\n    \"Smirking face\": \"دەمووچاوێکی فیزاوی\",\n    \"Neutral face\": \"دەم داخستن\",\n    \"Expressionless face\": \"دەم و چاو داخستن\",\n    \"Unamused face\": \"دەمووچاوێکی بێزار\",\n    \"Face with cold sweat\": \"ڕوخسارێک لەگەڵ ئارەقی سارددا\",\n    \"Pensive face\": \"ڕوخسارێکی خەمبار\",\n    \"Confused face\": \"ڕوخسارێکی قەلەق\",\n    \"Confounded face\": \"ڕوخسارێکی ئاڵۆز\",\n    \"Kissing face\": \"دەمووچاوێک و ماچ\",\n    \"Face throwing a kiss\": \"دەمووچاوێک ماچ هەڵبدات\",\n    \"Kissing face with smiling eyes\": \"دەمووچاوێک ماچ دەکات لەگەڵ ڕوخسارێکی پێکەنیناوی\",\n    \"Kissing face with closed eyes\": \"دەمووچاوێک ماچ دەکات و چاوی داخستووە\",\n    \"Face with stuck out tongue\": \"ڕوخسارێک زمانی دەرهێناوە\",\n    \"Face with stuck out tongue and winking eye\": \"ڕوخسارێک زمانی دەرهێناوە و چاوێکی لێت داگرتووە\",\n    \"Face with stuck out tongue and tightly-closed eyes\": \"هەردووچاوی داخستووە و زمان دەردێنێت\",\n    \"Disappointed face\": \"ڕوخسارێکی نائومێد کراو\",\n    \"Worried face\": \"ڕوخسارێکی بێتاقەت\",\n    \"Angry face\": \"ڕوخسارێکی توڕە\",\n    \"Pouting face\": \"ڕوخسارێک لچی دەرهێناوە\",\n    \"Crying face\": \"ڕوخسارێک دەگری\",\n    \"Persevering face\": \"ڕوخسارێکی تەواوی بێتاقەت\",\n    \"Face with look of triumph\": \"ڕوخسارێک کە سوورە لەسەر کارێک\",\n    \"Disappointed but relieved face\": \"ڕوخسارێکی خەمبارە و ئارەق دەکاتەوە\",\n    \"Frowning face with open mouth\": \"ڕوخسارێکی تووڕە و دەمی کراوەتەوە\",\n    \"Anguished face\": \"ڕوخسارێکی خەمناک\",\n    \"Fearful face\": \"دەموچاوێکی ترساو\",\n    \"Weary face\": \"ڕوخسارێکی ماندوو\",\n    \"Sleepy face\": \"ڕوخسارێکی خەوتوو\",\n    \"Tired face\": \"ڕوخسارێکی ماندوو\",\n    \"Grimacing face\": \"دان جیڕ کردنەوە\",\n    \"Loudly crying face\": \"ڕوخسارێک بە دەنگی بەرزەوە دەگری\",\n    \"Face with open mouth\": \"ڕوخسارێک دەمی کردوەتەوە\",\n    \"Hushed face\": \"ڕوخسارێکی بێدەنگ کراو\",\n    \"Face with open mouth and cold sweat\": \"دەمووچاوێک دەمی کردوەتەوە و ئارەق دەڕێژێت\",\n    \"Face screaming in fear\": \"دەمووچاوێک هاوار دەکات و لە شتێک دەترسێت\",\n    \"Astonished face\": \"ڕوخسارێکی سەرسام بوو\",\n    \"Flushed face\": \"ڕوخسارێکی سور بووەوە\",\n    \"Sleeping face\": \"ڕوخسارێکی خەوتوو\",\n    \"Dizzy face\": \"سەرگێژ خواردن\",\n    \"Face without mouth\": \"دەمووچاوێک بەبێ دەم\",\n    \"Face with medical mask\": \"دەمووچاوێک لەگەڵ ماسکی پزیشکی\",\n\n    // Line breaker\n    \"Break\": \"بڕینی هێڵێک\",\n\n    // Math\n    \"Subscript\": \"نوسین لە ژێرەوەی نوسینێکی دیکە\",\n    \"Superscript\": \"سەرنووس\",\n\n    // Full screen\n    \"Fullscreen\": \"پڕ بە شاشە\",\n\n    // Horizontal line\n    \"Insert Horizontal Line\": \"دانانی هێڵی ئاسۆیی\",\n\n    // Clear formatting\n    \"Clear Formatting\": \"سڕینەوەی شێواز\",\n\n    // Save\n    \"Save\": \"\",\n\n    // Undo, redo\n    \"Undo\": \"گەڕانەوە\",\n    \"Redo\": \"هێنانەوەی هەنگاوی پێشتر\",\n\n    // Select all\n    \"Select All\": \"دیاریکردنی هەموو\",\n\n    // Code view\n    \"Code View\": \"بینینی کۆد\",\n\n    // Quote\n    \"Quote\": \"وتە\",\n    \"Increase\": \"زیادکردن\",\n    \"Decrease\": \"کەمکردن\",\n\n    // Quick Insert\n    \"Quick Insert\": \"خێرا خستنە ناو\",\n\n    // Spcial Characters\n    \"Special Characters\": \"Special Characters\",\n    \"Latin\": \"Latin\",\n    \"Greek\": \"Greek\",\n    \"Cyrillic\": \"Cyrillic\",\n    \"Punctuation\": \"Punctuation\",\n    \"Currency\": \"Currency\",\n    \"Arrows\": \"Arrows\",\n    \"Math\": \"Math\",\n    \"Misc\": \"Misc\",\n\n    // Print.\n    \"Print\": \"Print\",\n\n    // Spell Checker.\n    \"Spell Checker\": \"Spell Checker\",\n\n    // Help\n    \"Help\": \"Help\",\n    \"Shortcuts\": \"Shortcuts\",\n    \"Inline Editor\": \"Inline Editor\",\n    \"Show the editor\": \"Show the editor\",\n    \"Common actions\": \"Common actions\",\n    \"Copy\": \"Copy\",\n    \"Cut\": \"Cut\",\n    \"Paste\": \"Paste\",\n    \"Basic Formatting\": \"Basic Formatting\",\n    \"Increase quote level\": \"Increase quote level\",\n    \"Decrease quote level\": \"Decrease quote level\",\n    \"Image / Video\": \"Image / Video\",\n    \"Resize larger\": \"Resize larger\",\n    \"Resize smaller\": \"Resize smaller\",\n    \"Table\": \"Table\",\n    \"Select table cell\": \"Select table cell\",\n    \"Extend selection one cell\": \"Extend selection one cell\",\n    \"Extend selection one row\": \"Extend selection one row\",\n    \"Navigation\": \"Navigation\",\n    \"Focus popup / toolbar\": \"Focus popup / toolbar\",\n    \"Return focus to previous position\": \"Return focus to previous position\",\n\n    // Embed.ly\n    \"Embed URL\": \"Embed URL\",\n    \"Paste in a URL to embed\": \"Paste in a URL to embed\",\n\n    // Word Paste.\n    \"The pasted content is coming from a Microsoft Word document. Do you want to keep the format or clean it up?\": \"The pasted content is coming from a Microsoft Word document. Do you want to keep the format or clean it up?\",\n    \"Keep\": \"Keep\",\n    \"Clean\": \"Clean\",\n    \"Word Paste Detected\": \"Word Paste Detected\"\n  },\n  direction: \"rtl\"\n};\n\n}));\n"
  },
  {
    "path": "src/main/resources/static/plugins/froala-editor/js/languages/me.js",
    "content": "/*!\n * froala_editor v2.9.1 (https://www.froala.com/wysiwyg-editor)\n * License https://froala.com/wysiwyg-editor/terms/\n * Copyright 2014-2018 Froala Labs\n */\n\n(function (factory) {\n    if (typeof define === 'function' && define.amd) {\n        // AMD. Register as an anonymous module.\n        define(['jquery'], factory);\n    } else if (typeof module === 'object' && module.exports) {\n        // Node/CommonJS\n        module.exports = function( root, jQuery ) {\n            if ( jQuery === undefined ) {\n                // require('jQuery') returns a factory that requires window to\n                // build a jQuery instance, we normalize how we use modules\n                // that require this pattern but the window provided is a noop\n                // if it's defined (how jquery works)\n                if ( typeof window !== 'undefined' ) {\n                    jQuery = require('jquery');\n                }\n                else {\n                    jQuery = require('jquery')(root);\n                }\n            }\n            return factory(jQuery);\n        };\n    } else {\n        // Browser globals\n        factory(window.jQuery);\n    }\n}(function ($) {\n/**\n * Montenegrin\n */\n\n$.FE.LANGUAGE['me'] = {\n  translation: {\n    // Place holder\n    \"Type something\": \"Ukucajte ne\\u0161tp\",\n\n    // Basic formatting\n    \"Bold\": \"Bold\",\n    \"Italic\": \"Italic\",\n    \"Underline\": \"Podvu\\u010deno\",\n    \"Strikethrough\": \"Prekri\\u017eano\",\n\n    // Main buttons\n    \"Insert\": \"Umetni\",\n    \"Delete\": \"Obri\\u0161i\",\n    \"Cancel\": \"Otka\\u017ei\",\n    \"OK\": \"U redu\",\n    \"Back\": \"Natrag\",\n    \"Remove\": \"Ukloni\",\n    \"More\": \"Vi\\u0161e\",\n    \"Update\": \"A\\u017euriranje\",\n    \"Style\": \"Stil\",\n\n    // Font\n    \"Font Family\": \"Odaberi font\",\n    \"Font Size\": \"Veli\\u010dina fonta\",\n\n    // Colors\n    \"Colors\": \"Boje\",\n    \"Background\": \"Pozadine\",\n    \"Text\": \"Teksta\",\n    \"HEX Color\": \"HEX boje\",\n\n    // Paragraphs\n    \"Paragraph Format\": \"Paragraf formatu\",\n    \"Normal\": \"Normalno\",\n    \"Code\": \"Izvorni kod\",\n    \"Heading 1\": \"Naslov 1\",\n    \"Heading 2\": \"Naslov 2\",\n    \"Heading 3\": \"Naslov 3\",\n    \"Heading 4\": \"Naslov 4\",\n\n    // Style\n    \"Paragraph Style\": \"Paragraf stil\",\n    \"Inline Style\": \"Inline stil\",\n\n    // Alignment\n    \"Align\": \"Poravnaj\",\n    \"Align Left\": \"Poravnaj lijevo\",\n    \"Align Center\": \"Poravnaj po sredini\",\n    \"Align Right\": \"Poravnaj desno\",\n    \"Align Justify\": \"Cjelokupno poravnanje\",\n    \"None\": \"Nijedan\",\n\n    // Lists\n    \"Ordered List\": \"Ure\\u0111ena lista\",\n    \"Unordered List\": \"Nesre\\u0111ene lista\",\n\n    // Indent\n    \"Decrease Indent\": \"Smanjenje alineja\",\n    \"Increase Indent\": \"Pove\\u0107anje alineja\",\n\n    // Links\n    \"Insert Link\": \"Umetni link\",\n    \"Open in new tab\": \"Otvori u novom prozoru\",\n    \"Open Link\": \"Otvori link\",\n    \"Edit Link\": \"Uredi link\",\n    \"Unlink\": \"Ukloni link\",\n    \"Choose Link\": \"Izabrati link\",\n\n    // Images\n    \"Insert Image\": \"Umetni sliku\",\n    \"Upload Image\": \"Upload sliku\",\n    \"By URL\": \"Preko URL\",\n    \"Browse\": \"Pregledaj\",\n    \"Drop image\": \"Izbaci sliku\",\n    \"or click\": \"ili odaberi\",\n    \"Manage Images\": \"Upravljanje ilustracijama\",\n    \"Loading\": \"Koji tovari\",\n    \"Deleting\": \"Brisanje\",\n    \"Tags\": \"Oznake\",\n    \"Are you sure? Image will be deleted.\": \"Da li ste sigurni da \\u017eelite da obri\\u0161ete ovu ilustraciju?\",\n    \"Replace\": \"Zamijenite\",\n    \"Uploading\": \"Uploading\",\n    \"Loading image\": \"Koji tovari sliku\",\n    \"Display\": \"Prikaz\",\n    \"Inline\": \"Inline\",\n    \"Break Text\": \"Break tekst\",\n    \"Alternative Text\": \"Alternativna tekst\",\n    \"Change Size\": \"Promijeni veli\\u010dinu\",\n    \"Width\": \"\\u0161irina\",\n    \"Height\": \"Visina\",\n    \"Something went wrong. Please try again.\": \"Ne\\u0161to je po\\u0161lo po zlu. Molimo vas da poku\\u0161ate ponovo.\",\n    \"Image Caption\": \"Slika natpisa\",\n    \"Advanced Edit\": \"Napredno uređivanje\",\n\n    // Video\n    \"Insert Video\": \"Umetni video\",\n    \"Embedded Code\": \"Embedded kod\",\n    \"Paste in a video URL\": \"Prilepite v URL video posnetka\",\n    \"Drop video\": \"Izbaci video\",\n    \"Your browser does not support HTML5 video.\": \"Váš prehliadač nepodporuje video HTML5.\",\n    \"Upload Video\": \"Upload video\",\n\n    // Tables\n    \"Insert Table\": \"Umetni tabelu\",\n    \"Table Header\": \"Zaglavlje tabelu\",\n    \"Remove Table\": \"Izbri\\u0161i tabelu\",\n    \"Table Style\": \"Tabelu stil\",\n    \"Horizontal Align\": \"Horizontalna poravnanje\",\n    \"Row\": \"Red\",\n    \"Insert row above\": \"Umetni red iznad\",\n    \"Insert row below\": \"Umetni red ispod\",\n    \"Delete row\": \"Obri\\u0161i red\",\n    \"Column\": \"Kolona\",\n    \"Insert column before\": \"Umetni kolonu prije\",\n    \"Insert column after\": \"Umetni kolonu poslije\",\n    \"Delete column\": \"Obri\\u0161i kolonu\",\n    \"Cell\": \"\\u0106elija\",\n    \"Merge cells\": \"Spoji \\u0107elija\",\n    \"Horizontal split\": \"Horizontalno razdvajanje polja\",\n    \"Vertical split\": \"Vertikalno razdvajanje polja\",\n    \"Cell Background\": \"\\u0106elija pozadini\",\n    \"Vertical Align\": \"Vertikalni poravnaj\",\n    \"Top\": \"Vrh\",\n    \"Middle\": \"Srednji\",\n    \"Bottom\": \"Dno\",\n    \"Align Top\": \"Poravnaj vrh\",\n    \"Align Middle\": \"Poravnaj srednji\",\n    \"Align Bottom\": \"Poravnaj dno\",\n    \"Cell Style\": \"\\u0106elija stil\",\n\n    // Files\n    \"Upload File\": \"Upload datoteke\",\n    \"Drop file\": \"Drop datoteke\",\n\n    // Emoticons\n    \"Emoticons\": \"Emotikona\",\n    \"Grinning face\": \"Cere\\u0107i lice\",\n    \"Grinning face with smiling eyes\": \"Cere\\u0107i lice nasmijana o\\u010dima\",\n    \"Face with tears of joy\": \"Lice sa suze radosnice\",\n    \"Smiling face with open mouth\": \"Nasmijana lica s otvorenih usta\",\n    \"Smiling face with open mouth and smiling eyes\": \"Nasmijana lica s otvorenih usta i nasmijana o\\u010di\",\n    \"Smiling face with open mouth and cold sweat\": \"Nasmijana lica s otvorenih usta i hladan znoj\",\n    \"Smiling face with open mouth and tightly-closed eyes\": \"Nasmijana lica s otvorenih usta i \\u010dvrsto-zatvorenih o\\u010diju\",\n    \"Smiling face with halo\": \"Nasmijana lica sa halo\",\n    \"Smiling face with horns\": \"Nasmijana lica s rogovima\",\n    \"Winking face\": \"Namigivanje lice\",\n    \"Smiling face with smiling eyes\": \"Nasmijana lica sa nasmijana o\\u010dima\",\n    \"Face savoring delicious food\": \"Suo\\u010davaju uživaju\\u0107i ukusna hrana\",\n    \"Relieved face\": \"Laknulo lice\",\n    \"Smiling face with heart-shaped eyes\": \"Nasmijana lica sa obliku srca o\\u010di\",\n    \"Smiling face with sunglasses\": \"Nasmijana lica sa sun\\u010dane nao\\u010dare\",\n    \"Smirking face\": \"Namr\\u0161tena lica\",\n    \"Neutral face\": \"Neutral lice\",\n    \"Expressionless face\": \"Bezizra\\u017eajno lice\",\n    \"Unamused face\": \"Nije zabavno lice\",\n    \"Face with cold sweat\": \"Lice s hladnim znojem\",\n    \"Pensive face\": \"Zami\\u0161ljen lice\",\n    \"Confused face\": \"Zbunjen lice\",\n    \"Confounded face\": \"Uzbu\\u0111en lice\",\n    \"Kissing face\": \"Ljubakanje lice\",\n    \"Face throwing a kiss\": \"Suo\\u010davaju bacanje poljubac\",\n    \"Kissing face with smiling eyes\": \"Ljubljenje lice nasmijana o\\u010dima\",\n    \"Kissing face with closed eyes\": \"Ljubljenje lice sa zatvorenim o\\u010dima\",\n    \"Face with stuck out tongue\": \"Lice sa ispru\\u017eio jezik\",\n    \"Face with stuck out tongue and winking eye\": \"Lice sa ispru\\u017eio jezik i trep\\u0107u\\u0107e \\u0107e oko\",\n    \"Face with stuck out tongue and tightly-closed eyes\": \"Lice sa ispru\\u017eio jezik i \\u010dvrsto zatvorene o\\u010di\",\n    \"Disappointed face\": \"Razo\\u010daran lice\",\n    \"Worried face\": \"Zabrinuti lice\",\n    \"Angry face\": \"Ljut lice\",\n    \"Pouting face\": \"Napu\\u0107enim lice\",\n    \"Crying face\": \"Plakanje lice\",\n    \"Persevering face\": \"Istrajan lice\",\n    \"Face with look of triumph\": \"Lice s pogledom trijumfa\",\n    \"Disappointed but relieved face\": \"Razo\\u010daran, ali olak\\u0161anje lice\",\n    \"Frowning face with open mouth\": \"Namr\\u0161tiv\\u0161i lice s otvorenih usta\",\n    \"Anguished face\": \"Bolnom lice\",\n    \"Fearful face\": \"Pla\\u0161ljiv lice\",\n    \"Weary face\": \"Umoran lice\",\n    \"Sleepy face\": \"Pospan lice\",\n    \"Tired face\": \"Umorno lice\",\n    \"Grimacing face\": \"Grimase lice\",\n    \"Loudly crying face\": \"Glasno pla\\u010de lice\",\n    \"Face with open mouth\": \"Lice s otvorenih usta\",\n    \"Hushed face\": \"Smiren lice\",\n    \"Face with open mouth and cold sweat\": \"Lice s otvorenih usta i hladan znoj\",\n    \"Face screaming in fear\": \"Suo\\u010davaju vri\\u0161ti u strahu\",\n    \"Astonished face\": \"Zapanjen lice\",\n    \"Flushed face\": \"Rumeno lice\",\n    \"Sleeping face\": \"Usnulo lice\",\n    \"Dizzy face\": \"O\\u0161amu\\u0107en lice\",\n    \"Face without mouth\": \"Lice bez usta\",\n    \"Face with medical mask\": \"Lice sa medicinskom maskom\",\n\n    // Line breaker\n    \"Break\": \"Slomiti\",\n\n    // Math\n    \"Subscript\": \"Potpisan\",\n    \"Superscript\": \"Natpis\",\n\n    // Full screen\n    \"Fullscreen\": \"Preko cijelog zaslona\",\n\n    // Horizontal line\n    \"Insert Horizontal Line\": \"Umetni vodoravna liniju\",\n\n    // Clear formatting\n    \"Clear Formatting\": \"Izbrisati formatiranje\",\n\n    // Save\n    \"Save\": \"Save\",\n\n    // Undo, redo\n    \"Undo\": \"Korak nazad\",\n    \"Redo\": \"Korak naprijed\",\n\n    // Select all\n    \"Select All\": \"Ozna\\u010di sve\",\n\n    // Code view\n    \"Code View\": \"Kod pogled\",\n\n    // Quote\n    \"Quote\": \"Citat\",\n    \"Increase\": \"Pove\\u0107ati\",\n    \"Decrease\": \"Smanjenje\",\n\n    // Quick Insert\n    \"Quick Insert\": \"Brzo umetni\",\n\n    // Spcial Characters\n    \"Special Characters\": \"Specijalni znakovi\",\n    \"Latin\": \"Latino\",\n    \"Greek\": \"Grk\",\n    \"Cyrillic\": \"Ćirilica\",\n    \"Punctuation\": \"Interpunkcije\",\n    \"Currency\": \"Valuta\",\n    \"Arrows\": \"Strelice\",\n    \"Math\": \"Matematika\",\n    \"Misc\": \"Misc\",\n\n    // Print.\n    \"Print\": \"Odštampaj\",\n\n    // Spell Checker.\n    \"Spell Checker\": \"Kontrolor pravopisa\",\n\n    // Help\n    \"Help\": \"Pomoć\",\n    \"Shortcuts\": \"Prečice\",\n    \"Inline Editor\": \"Pri upisivanju Editor\",\n    \"Show the editor\": \"Prikaži urednik\",\n    \"Common actions\": \"Zajedničke akcije\",\n    \"Copy\": \"Kopija\",\n    \"Cut\": \"Rez\",\n    \"Paste\": \"Nalepi\",\n    \"Basic Formatting\": \"Osnovno oblikovanje\",\n    \"Increase quote level\": \"Povećati ponudu za nivo\",\n    \"Decrease quote level\": \"Smanjenje ponude nivo\",\n    \"Image / Video\": \"Slika / Video\",\n    \"Resize larger\": \"Veće veličine\",\n    \"Resize smaller\": \"Promena veličine manji\",\n    \"Table\": \"Sto\",\n    \"Select table cell\": \"Select ćelije\",\n    \"Extend selection one cell\": \"Proširite selekciju jednu ćeliju\",\n    \"Extend selection one row\": \"Proširite selekciju jedan red\",\n    \"Navigation\": \"Navigacija\",\n    \"Focus popup / toolbar\": \"Fokus Iskačući meni / traka sa alatkama\",\n    \"Return focus to previous position\": \"Vratiti fokus na prethodnu poziciju\",\n\n    // Embed.ly\n    \"Embed URL\": \"Ugradite URL\",\n    \"Paste in a URL to embed\": \"Nalepite URL adresu da biste ugradili\",\n\n    // Word Paste.\n    \"The pasted content is coming from a Microsoft Word document. Do you want to keep the format or clean it up?\": \"Nalepljeni sadržaj dolazi iz Microsoft Word dokument. Da li želite zadržati u formatu ili počistiti?\",\n    \"Keep\": \"Nastavi\",\n    \"Clean\": \"Oиisti\",\n    \"Word Paste Detected\": \"Word Nalepi otkriven\"\n  },\n  direction: \"ltr\"\n};\n\n}));\n"
  },
  {
    "path": "src/main/resources/static/plugins/froala-editor/js/languages/nb.js",
    "content": "/*!\n * froala_editor v2.9.1 (https://www.froala.com/wysiwyg-editor)\n * License https://froala.com/wysiwyg-editor/terms/\n * Copyright 2014-2018 Froala Labs\n */\n\n(function (factory) {\n    if (typeof define === 'function' && define.amd) {\n        // AMD. Register as an anonymous module.\n        define(['jquery'], factory);\n    } else if (typeof module === 'object' && module.exports) {\n        // Node/CommonJS\n        module.exports = function( root, jQuery ) {\n            if ( jQuery === undefined ) {\n                // require('jQuery') returns a factory that requires window to\n                // build a jQuery instance, we normalize how we use modules\n                // that require this pattern but the window provided is a noop\n                // if it's defined (how jquery works)\n                if ( typeof window !== 'undefined' ) {\n                    jQuery = require('jquery');\n                }\n                else {\n                    jQuery = require('jquery')(root);\n                }\n            }\n            return factory(jQuery);\n        };\n    } else {\n        // Browser globals\n        factory(window.jQuery);\n    }\n}(function ($) {\n/**\n * Norwegian\n */\n\n$.FE.LANGUAGE['nb'] = {\n  translation: {\n    // Place holder\n    \"Type something\": \"Skriv noe\",\n\n    // Basic formatting\n    \"Bold\": \"Fet\",\n    \"Italic\": \"Kursiv\",\n    \"Underline\": \"Understreket\",\n    \"Strikethrough\": \"Gjennomstreket\",\n\n    // Main buttons\n    \"Insert\": \"Sett\",\n    \"Delete\": \"Slett\",\n    \"Cancel\": \"Avbryt\",\n    \"OK\": \"OK\",\n    \"Back\": \"Tilbake\",\n    \"Remove\": \"Fjern\",\n    \"More\": \"Mer\",\n    \"Update\": \"Oppdatering\",\n    \"Style\": \"Stil\",\n\n    // Font\n    \"Font Family\": \"Skriftsnitt\",\n    \"Font Size\": \"St\\u00f8rrelse\",\n\n    // Colors\n    \"Colors\": \"Farger\",\n    \"Background\": \"Bakgrunn\",\n    \"Text\": \"Tekst\",\n    \"HEX Color\": \"Heksefarge\",\n\n    // Paragraphs\n    \"Paragraph Format\": \"Stiler\",\n    \"Normal\": \"Normal\",\n    \"Code\": \"Kode\",\n    \"Heading 1\": \"Overskrift 1\",\n    \"Heading 2\": \"Overskrift 2\",\n    \"Heading 3\": \"Overskrift 3\",\n    \"Heading 4\": \"Overskrift 4\",\n\n    // Style\n    \"Paragraph Style\": \"Avsnittsstil\",\n    \"Inline Style\": \"P\\u00e5 linje stil\",\n\n    // Alignment\n    \"Align\": \"Justering\",\n    \"Align Left\": \"Venstrejustert\",\n    \"Align Center\": \"Midtstilt\",\n    \"Align Right\": \"H\\u00f8yrejustert\",\n    \"Align Justify\": \"Juster alle linjer\",\n    \"None\": \"None\",\n\n    // Lists\n    \"Ordered List\": \"Ordnet liste\",\n    \"Unordered List\": \"Uordnet liste\",\n\n    // Indent\n    \"Decrease Indent\": \"Reduser innrykk\",\n    \"Increase Indent\": \"\\u00d8k innrykk\",\n\n    // Links\n    \"Insert Link\": \"Sett inn lenke\",\n    \"Open in new tab\": \"\\u00c5pne i ny fane\",\n    \"Open Link\": \"\\u00c5pne lenke\",\n    \"Edit Link\": \"Rediger lenke\",\n    \"Unlink\": \"Fjern lenke\",\n    \"Choose Link\": \"Velge lenke\",\n\n    // Images\n    \"Insert Image\": \"Sett inn bilde\",\n    \"Upload Image\": \"Last opp bilde\",\n    \"By URL\": \"Ved URL\",\n    \"Browse\": \"Bla\",\n    \"Drop image\": \"Slippe bilde\",\n    \"or click\": \"eller klikk\",\n    \"Manage Images\": \"Bildebehandling\",\n    \"Loading\": \"Lasting\",\n    \"Deleting\": \"Slette\",\n    \"Tags\": \"Tags\",\n    \"Are you sure? Image will be deleted.\": \"Er du sikker? Bildet vil bli slettet.\",\n    \"Replace\": \"Erstatte\",\n    \"Uploading\": \"Opplasting\",\n    \"Loading image\": \"Lasting bilde\",\n    \"Display\": \"Utstilling\",\n    \"Inline\": \"P\\u00e5 linje\",\n    \"Break Text\": \"Brudd tekst\",\n    \"Alternative Text\": \"Alternativ tekst\",\n    \"Change Size\": \"Endre st\\u00f8rrelse\",\n    \"Width\": \"Bredde\",\n    \"Height\": \"H\\u00f8yde\",\n    \"Something went wrong. Please try again.\": \"Noe gikk galt. V\\u00e6r s\\u00e5 snill, pr\\u00f8v p\\u00e5 nytt.\",\n    \"Image Caption\": \"Bilde bildetekst\",\n    \"Advanced Edit\": \"Avansert redigering\",\n\n    // Video\n    \"Insert Video\": \"Sett inn video\",\n    \"Embedded Code\": \"Embedded kode\",\n    \"Paste in a video URL\": \"Lim inn i en video-url\",\n    \"Drop video\": \"Slipp video\",\n    \"Your browser does not support HTML5 video.\": \"Nettleseren din støtter ikke html5 video.\",\n    \"Upload Video\": \"Last opp video\",\n\n    // Tables\n    \"Insert Table\": \"Sett inn tabell\",\n    \"Table Header\": \"Tabell header\",\n    \"Remove Table\": \"Fjern tabell\",\n    \"Table Style\": \"Tabell stil\",\n    \"Horizontal Align\": \"Horisontal justering\",\n    \"Row\": \"Rad\",\n    \"Insert row above\": \"Sett inn rad f\\u00f8r\",\n    \"Insert row below\": \"Sett in rad etter\",\n    \"Delete row\": \"Slett rad\",\n    \"Column\": \"Kolonne\",\n    \"Insert column before\": \"Sett inn kolonne f\\u00f8r\",\n    \"Insert column after\": \"Sett inn kolonne etter\",\n    \"Delete column\": \"Slett kolonne\",\n    \"Cell\": \"Celle\",\n    \"Merge cells\": \"Sl\\u00e5 sammen celler\",\n    \"Horizontal split\": \"Horisontalt delt\",\n    \"Vertical split\": \"Vertikal split\",\n    \"Cell Background\": \"Celle bakgrunn\",\n    \"Vertical Align\": \"Vertikal justering\",\n    \"Top\": \"Topp\",\n    \"Middle\": \"Midten\",\n    \"Bottom\": \"Bunn\",\n    \"Align Top\": \"Justere toppen\",\n    \"Align Middle\": \"Justere midten\",\n    \"Align Bottom\": \"Justere bunnen\",\n    \"Cell Style\": \"Celle stil\",\n\n    // Files\n    \"Upload File\": \"Opplastingsfil\",\n    \"Drop file\": \"Slippe fil\",\n\n    // Emoticons\n    \"Emoticons\": \"Emoticons\",\n    \"Grinning face\": \"Flirer ansikt\",\n    \"Grinning face with smiling eyes\": \"Flirer ansikt med smilende \\u00f8yne\",\n    \"Face with tears of joy\": \"Ansikt med t\\u00e5rer av glede\",\n    \"Smiling face with open mouth\": \"Smilende ansikt med \\u00e5pen munn\",\n    \"Smiling face with open mouth and smiling eyes\": \"Smilende ansikt med \\u00e5pen munn og smilende \\u00f8yne\",\n    \"Smiling face with open mouth and cold sweat\": \"Smilende ansikt med \\u00e5pen munn og kald svette\",\n    \"Smiling face with open mouth and tightly-closed eyes\": \"Smilende ansikt med \\u00e5pen munn og tett lukkede \\u00f8yne\",\n    \"Smiling face with halo\": \"Smilende ansikt med glorie\",\n    \"Smiling face with horns\": \"Smilende ansikt med horn\",\n    \"Winking face\": \"Blunk ansikt\",\n    \"Smiling face with smiling eyes\": \"Smilende ansikt med smilende \\u00f8yne\",\n    \"Face savoring delicious food\": \"M\\u00f8te nyter deilig mat\",\n    \"Relieved face\": \"Lettet ansikt\",\n    \"Smiling face with heart-shaped eyes\": \"Smilende ansikt med hjerteformede \\u00f8yne\",\n    \"Smiling face with sunglasses\": \"Smilende ansikt med solbriller\",\n    \"Smirking face\": \"Tilfreds ansikt\",\n    \"Neutral face\": \"N\\u00f8ytral ansikt\",\n    \"Expressionless face\": \"Uttrykksl\\u00f8st ansikt\",\n    \"Unamused face\": \"Ikke moret ansikt\",\n    \"Face with cold sweat\": \"Ansikt med kald svette\",\n    \"Pensive face\": \"Tankefull ansikt\",\n    \"Confused face\": \"Forvirret ansikt\",\n    \"Confounded face\": \"Skamme ansikt\",\n    \"Kissing face\": \"Kyssing ansikt\",\n    \"Face throwing a kiss\": \"Ansikt kaste et kyss\",\n    \"Kissing face with smiling eyes\": \"Kyssing ansikt med smilende \\u00f8yne\",\n    \"Kissing face with closed eyes\": \"Kyssing ansiktet med lukkede \\u00f8yne\",\n    \"Face with stuck out tongue\": \"Ansikt med stakk ut tungen\",\n    \"Face with stuck out tongue and winking eye\": \"Ansikt med stakk ut tungen og blunke \\u00f8ye\",\n    \"Face with stuck out tongue and tightly-closed eyes\": \"Ansikt med fast ut tungen og tett lukket \\u00f8yne\",\n    \"Disappointed face\": \"Skuffet ansikt\",\n    \"Worried face\": \"Bekymret ansikt\",\n    \"Angry face\": \"Sint ansikt\",\n    \"Pouting face\": \"Trutmunn ansikt\",\n    \"Crying face\": \"Gr\\u00e5ter ansikt\",\n    \"Persevering face\": \"Utholdende ansikt\",\n    \"Face with look of triumph\": \"Ansikt med utseendet til triumf\",\n    \"Disappointed but relieved face\": \"Skuffet men lettet ansikt\",\n    \"Frowning face with open mouth\": \"Rynke ansikt med \\u00e5pen munn\",\n    \"Anguished face\": \"Forpint ansikt\",\n    \"Fearful face\": \"Engstelig ansikt\",\n    \"Weary face\": \"Slitne ansiktet\",\n    \"Sleepy face\": \"S\\u00f8vnig ansikt\",\n    \"Tired face\": \"Tr\\u00f8tt ansikt\",\n    \"Grimacing face\": \"Griner ansikt\",\n    \"Loudly crying face\": \"H\\u00f8ylytt gr\\u00e5tende ansikt\",\n    \"Face with open mouth\": \"Ansikt med \\u00e5pen munn\",\n    \"Hushed face\": \"Lavm\\u00e6lt ansikt\",\n    \"Face with open mouth and cold sweat\": \"Ansikt med \\u00e5pen munn og kald svette\",\n    \"Face screaming in fear\": \"Ansikt skriker i frykt\",\n    \"Astonished face\": \"Forbauset ansikt\",\n    \"Flushed face\": \"Flushed ansikt\",\n    \"Sleeping face\": \"Sovende ansikt\",\n    \"Dizzy face\": \"Svimmel ansikt\",\n    \"Face without mouth\": \"Ansikt uten munn\",\n    \"Face with medical mask\": \"Ansikt med medisinsk maske\",\n\n    // Line breaker\n    \"Break\": \"Brudd\",\n\n    // Math\n    \"Subscript\": \"Senket skrift\",\n    \"Superscript\": \"Hevet skrift\",\n\n    // Full screen\n    \"Fullscreen\": \"Full skjerm\",\n\n    // Horizontal line\n    \"Insert Horizontal Line\": \"Sett inn horisontal linje\",\n\n    // Clear formatting\n    \"Clear Formatting\": \"Fjerne formatering\",\n\n    // Save\n    \"Save\": \"Lagre\",\n\n    // Undo, redo\n    \"Undo\": \"Angre\",\n    \"Redo\": \"Utf\\u00f8r likevel\",\n\n    // Select all\n    \"Select All\": \"Marker alt\",\n\n    // Code view\n    \"Code View\": \"Kodevisning\",\n\n    // Quote\n    \"Quote\": \"Sitat\",\n    \"Increase\": \"\\u00d8ke\",\n    \"Decrease\": \"Nedgang\",\n\n    // Quick Insert\n    \"Quick Insert\": \"Hurtiginnsats\",\n\n    // Spcial Characters\n    \"Special Characters\": \"Spesielle karakterer\",\n    \"Latin\": \"Latin\",\n    \"Greek\": \"Gresk\",\n    \"Cyrillic\": \"Kyrilliske\",\n    \"Punctuation\": \"Tegnsetting\",\n    \"Currency\": \"Valuta\",\n    \"Arrows\": \"Piler\",\n    \"Math\": \"Matte\",\n    \"Misc\": \"Misc\",\n\n    // Print.\n    \"Print\": \"Skrive ut\",\n\n    // Spell Checker.\n    \"Spell Checker\": \"Stavekontroll\",\n\n    // Help\n    \"Help\": \"Hjelp\",\n    \"Shortcuts\": \"Snarveier\",\n    \"Inline Editor\": \"Inline editor\",\n    \"Show the editor\": \"Vis redaktøren\",\n    \"Common actions\": \"Felles handlinger\",\n    \"Copy\": \"Kopiere\",\n    \"Cut\": \"Kutte opp\",\n    \"Paste\": \"Lim inn\",\n    \"Basic Formatting\": \"Grunnleggende formatering\",\n    \"Increase quote level\": \"Øke tilbudsnivået\",\n    \"Decrease quote level\": \"Redusere tilbudsnivå\",\n    \"Image / Video\": \"Bilde / video\",\n    \"Resize larger\": \"Endre størrelsen større\",\n    \"Resize smaller\": \"Endre størrelsen mindre\",\n    \"Table\": \"Bord\",\n    \"Select table cell\": \"Velg tabellcelle\",\n    \"Extend selection one cell\": \"Utvide valg en celle\",\n    \"Extend selection one row\": \"Utvide valg en rad\",\n    \"Navigation\": \"Navigasjon\",\n    \"Focus popup / toolbar\": \"Fokus popup / verktøylinje\",\n    \"Return focus to previous position\": \"Returnere fokus til tidligere posisjon\",\n\n    // Embed.ly\n    \"Embed URL\": \"Legge inn nettadressen\",\n    \"Paste in a URL to embed\": \"Lim inn i en URL for å legge inn\",\n\n    // Word Paste.\n    \"The pasted content is coming from a Microsoft Word document. Do you want to keep the format or clean it up?\": \"Det limte innholdet kommer fra et Microsoft Word-dokument. vil du beholde formatet eller rydde det opp?\",\n    \"Keep\": \"Beholde\",\n    \"Clean\": \"Ren\",\n    \"Word Paste Detected\": \"Ordpasta oppdages\"\n  },\n  direction: \"ltr\"\n};\n\n}));\n"
  },
  {
    "path": "src/main/resources/static/plugins/froala-editor/js/languages/nl.js",
    "content": "/*!\n * froala_editor v2.9.1 (https://www.froala.com/wysiwyg-editor)\n * License https://froala.com/wysiwyg-editor/terms/\n * Copyright 2014-2018 Froala Labs\n */\n\n(function (factory) {\n    if (typeof define === 'function' && define.amd) {\n        // AMD. Register as an anonymous module.\n        define(['jquery'], factory);\n    } else if (typeof module === 'object' && module.exports) {\n        // Node/CommonJS\n        module.exports = function( root, jQuery ) {\n            if ( jQuery === undefined ) {\n                // require('jQuery') returns a factory that requires window to\n                // build a jQuery instance, we normalize how we use modules\n                // that require this pattern but the window provided is a noop\n                // if it's defined (how jquery works)\n                if ( typeof window !== 'undefined' ) {\n                    jQuery = require('jquery');\n                }\n                else {\n                    jQuery = require('jquery')(root);\n                }\n            }\n            return factory(jQuery);\n        };\n    } else {\n        // Browser globals\n        factory(window.jQuery);\n    }\n}(function ($) {\n/**\n * Dutch\n */\n\n$.FE.LANGUAGE['nl'] = {\n  translation: {\n    // Place holder\n    \"Type something\": \"Typ iets\",\n\n    // Basic formatting\n    \"Bold\": \"Vet\",\n    \"Italic\": \"Cursief\",\n    \"Underline\": \"Onderstreept\",\n    \"Strikethrough\": \"Doorhalen\",\n\n    // Main buttons\n    \"Insert\": \"Invoegen\",\n    \"Delete\": \"Verwijder\",\n    \"Cancel\": \"Annuleren\",\n    \"OK\": \"Ok\\u00e9\",\n    \"Back\": \"Terug\",\n    \"Remove\": \"Verwijderen\",\n    \"More\": \"Meer\",\n    \"Update\": \"Bijwerken\",\n    \"Style\": \"Stijl\",\n\n    // Font\n    \"Font Family\": \"Lettertype\",\n    \"Font Size\": \"Lettergrootte\",\n\n    // Colors\n    \"Colors\": \"Kleuren\",\n    \"Background\": \"Achtergrond\",\n    \"Text\": \"Tekst\",\n    \"HEX Color\": \"HEX kleur\",\n\n    // Paragraphs\n    \"Paragraph Format\": \"Opmaak\",\n    \"Normal\": \"Normaal\",\n    \"Code\": \"Code\",\n    \"Heading 1\": \"Kop 1\",\n    \"Heading 2\": \"Kop 2\",\n    \"Heading 3\": \"Kop 3\",\n    \"Heading 4\": \"Kop 4\",\n\n    // Style\n    \"Paragraph Style\": \"Paragraaf stijl\",\n    \"Inline Style\": \"Inline stijl\",\n\n    // Alignment\n    \"Align\": \"Uitlijnen\",\n    \"Align Left\": \"Links uitlijnen\",\n    \"Align Center\": \"Centreren\",\n    \"Align Right\": \"Rechts uitlijnen\",\n    \"Align Justify\": \"Uitvullen\",\n    \"None\": \"Geen\",\n\n    // Lists\n    \"Ordered List\": \"Geordende lijst\",\n    \"Unordered List\": \"Ongeordende lijst\",\n\n    // Indent\n    \"Decrease Indent\": \"Inspringen verkleinen\",\n    \"Increase Indent\": \"Inspringen vergroten\",\n\n    // Links\n    \"Insert Link\": \"Link invoegen\",\n    \"Open in new tab\": \"Openen in nieuwe tab\",\n    \"Open Link\": \"Open link\",\n    \"Edit Link\": \"Link bewerken\",\n    \"Unlink\": \"Link verwijderen\",\n    \"Choose Link\": \"Link kiezen\",\n\n    // Images\n    \"Insert Image\": \"Afbeelding invoegen\",\n    \"Upload Image\": \"Afbeelding uploaden\",\n    \"By URL\": \"Via URL\",\n    \"Browse\": \"Bladeren\",\n    \"Drop image\": \"Sleep afbeelding\",\n    \"or click\": \"of klik op\",\n    \"Manage Images\": \"Afbeeldingen beheren\",\n    \"Loading\": \"Bezig met laden\",\n    \"Deleting\": \"Verwijderen\",\n    \"Tags\": \"Labels\",\n    \"Are you sure? Image will be deleted.\": \"Weet je het zeker? Afbeelding wordt verwijderd.\",\n    \"Replace\": \"Vervangen\",\n    \"Uploading\": \"Uploaden\",\n    \"Loading image\": \"Afbeelding laden\",\n    \"Display\": \"Tonen\",\n    \"Inline\": \"Inline\",\n    \"Break Text\": \"Tekst afbreken\",\n    \"Alternative Text\": \"Alternatieve tekst\",\n    \"Change Size\": \"Grootte wijzigen\",\n    \"Width\": \"Breedte\",\n    \"Height\": \"Hoogte\",\n    \"Something went wrong. Please try again.\": \"Er is iets fout gegaan. Probeer opnieuw.\",\n    \"Image Caption\": \"Afbeelding caption\",\n    \"Advanced Edit\": \"Geavanceerd bewerken\",\n\n    // Video\n    \"Insert Video\": \"Video invoegen\",\n    \"Embedded Code\": \"Ingebedde code\",\n    \"Paste in a video URL\": \"Voeg een video-URL toe\",\n    \"Drop video\": \"Sleep video\",\n    \"Your browser does not support HTML5 video.\": \"Je browser ondersteunt geen html5-video.\",\n    \"Upload Video\": \"Video uploaden\",\n\n    // Tables\n    \"Insert Table\": \"Tabel invoegen\",\n    \"Table Header\": \"Tabel hoofd\",\n    \"Remove Table\": \"Verwijder tabel\",\n    \"Table Style\": \"Tabelstijl\",\n    \"Horizontal Align\": \"Horizontale uitlijning\",\n    \"Row\": \"Rij\",\n    \"Insert row above\": \"Voeg rij boven toe\",\n    \"Insert row below\": \"Voeg rij onder toe\",\n    \"Delete row\": \"Verwijder rij\",\n    \"Column\": \"Kolom\",\n    \"Insert column before\": \"Voeg kolom in voor\",\n    \"Insert column after\": \"Voeg kolom in na\",\n    \"Delete column\": \"Verwijder kolom\",\n    \"Cell\": \"Cel\",\n    \"Merge cells\": \"Cellen samenvoegen\",\n    \"Horizontal split\": \"Horizontaal splitsen\",\n    \"Vertical split\": \"Verticaal splitsen\",\n    \"Cell Background\": \"Cel achtergrond\",\n    \"Vertical Align\": \"Verticale uitlijning\",\n    \"Top\": \"Top\",\n    \"Middle\": \"Midden\",\n    \"Bottom\": \"Onder\",\n    \"Align Top\": \"Uitlijnen top\",\n    \"Align Middle\": \"Uitlijnen midden\",\n    \"Align Bottom\": \"Onder uitlijnen\",\n    \"Cell Style\": \"Celstijl\",\n\n    // Files\n    \"Upload File\": \"Bestand uploaden\",\n    \"Drop file\": \"Sleep bestand\",\n\n    // Emoticons\n    \"Emoticons\": \"Emoticons\",\n    \"Grinning face\": \"Grijnzend gezicht\",\n    \"Grinning face with smiling eyes\": \"Grijnzend gezicht met lachende ogen\",\n    \"Face with tears of joy\": \"Gezicht met tranen van vreugde\",\n    \"Smiling face with open mouth\": \"Lachend gezicht met open mond\",\n    \"Smiling face with open mouth and smiling eyes\": \"Lachend gezicht met open mond en lachende ogen\",\n    \"Smiling face with open mouth and cold sweat\": \"Lachend gezicht met open mond en koud zweet\",\n    \"Smiling face with open mouth and tightly-closed eyes\": \"Lachend gezicht met open mond en strak gesloten ogen\",\n    \"Smiling face with halo\": \"Lachend gezicht met halo\",\n    \"Smiling face with horns\": \"Lachend gezicht met hoorns\",\n    \"Winking face\": \"Knipogend gezicht\",\n    \"Smiling face with smiling eyes\": \"Lachend gezicht met lachende ogen\",\n    \"Face savoring delicious food\": \"Gezicht genietend van heerlijk eten\",\n    \"Relieved face\": \"Opgelucht gezicht\",\n    \"Smiling face with heart-shaped eyes\": \"Glimlachend gezicht met hart-vormige ogen\",\n    \"Smiling face with sunglasses\": \"Lachend gezicht met zonnebril\",\n    \"Smirking face\": \"Grijnzende gezicht\",\n    \"Neutral face\": \"Neutraal gezicht\",\n    \"Expressionless face\": \"Uitdrukkingsloos gezicht\",\n    \"Unamused face\": \"Niet geamuseerd gezicht\",\n    \"Face with cold sweat\": \"Gezicht met koud zweet\",\n    \"Pensive face\": \"Peinzend gezicht\",\n    \"Confused face\": \"Verward gezicht\",\n    \"Confounded face\": \"Beschaamd gezicht\",\n    \"Kissing face\": \"Zoenend gezicht\",\n    \"Face throwing a kiss\": \"Gezicht gooien van een kus\",\n    \"Kissing face with smiling eyes\": \"Zoenend gezicht met lachende ogen\",\n    \"Kissing face with closed eyes\": \"Zoenend gezicht met gesloten ogen\",\n    \"Face with stuck out tongue\": \"Gezicht met uitstekende tong\",\n    \"Face with stuck out tongue and winking eye\": \"Gezicht met uitstekende tong en knipoog\",\n    \"Face with stuck out tongue and tightly-closed eyes\": \"Gezicht met uitstekende tong en strak-gesloten ogen\",\n    \"Disappointed face\": \"Teleurgesteld gezicht\",\n    \"Worried face\": \"Bezorgd gezicht\",\n    \"Angry face\": \"Boos gezicht\",\n    \"Pouting face\": \"Pruilend gezicht\",\n    \"Crying face\": \"Huilend gezicht\",\n    \"Persevering face\": \"Volhardend gezicht\",\n    \"Face with look of triumph\": \"Gezicht met blik van triomf\",\n    \"Disappointed but relieved face\": \"Teleurgesteld, maar opgelucht gezicht\",\n    \"Frowning face with open mouth\": \"Fronsend gezicht met open mond\",\n    \"Anguished face\": \"Gekweld gezicht\",\n    \"Fearful face\": \"Angstig gezicht\",\n    \"Weary face\": \"Vermoeid gezicht\",\n    \"Sleepy face\": \"Slaperig gezicht\",\n    \"Tired face\": \"Moe gezicht\",\n    \"Grimacing face\": \"Grimassen trekkend gezicht\",\n    \"Loudly crying face\": \"Luid schreeuwend gezicht\",\n    \"Face with open mouth\": \"Gezicht met open mond\",\n    \"Hushed face\": \"Tot zwijgen gebracht gezicht\",\n    \"Face with open mouth and cold sweat\": \"Gezicht met open mond en koud zweet\",\n    \"Face screaming in fear\": \"Gezicht schreeuwend van angst\",\n    \"Astonished face\": \"Verbaasd gezicht\",\n    \"Flushed face\": \"Blozend gezicht\",\n    \"Sleeping face\": \"Slapend gezicht\",\n    \"Dizzy face\": \"Duizelig gezicht\",\n    \"Face without mouth\": \"Gezicht zonder mond\",\n    \"Face with medical mask\": \"Gezicht met medisch masker\",\n\n    // Line breaker\n    \"Break\": \"Afbreken\",\n\n    // Math\n    \"Subscript\": \"Subscript\",\n    \"Superscript\": \"Superscript\",\n\n    // Full screen\n    \"Fullscreen\": \"Volledig scherm\",\n\n    // Horizontal line\n    \"Insert Horizontal Line\": \"Horizontale lijn invoegen\",\n\n    // Clear formatting\n    \"Clear Formatting\": \"Verwijder opmaak\",\n\n    // Save\n    \"Save\": \"Opslaan\",\n\n    // Undo, redo\n    \"Undo\": \"Ongedaan maken\",\n    \"Redo\": \"Opnieuw\",\n\n    // Select all\n    \"Select All\": \"Alles selecteren\",\n\n    // Code view\n    \"Code View\": \"Codeweergave\",\n\n    // Quote\n    \"Quote\": \"Citaat\",\n    \"Increase\": \"Toenemen\",\n    \"Decrease\": \"Afnemen\",\n\n    // Quick Insert\n    \"Quick Insert\": \"Snel invoegen\",\n\n    // Spcial Characters\n    \"Special Characters\": \"Speciale tekens\",\n    \"Latin\": \"Latijns\",\n    \"Greek\": \"Grieks\",\n    \"Cyrillic\": \"Cyrillisch\",\n    \"Punctuation\": \"Interpunctie\",\n    \"Currency\": \"Valuta\",\n    \"Arrows\": \"Pijlen\",\n    \"Math\": \"Wiskunde\",\n    \"Misc\": \"Misc\",\n\n    // Print.\n    \"Print\": \"Afdrukken\",\n\n    // Spell Checker.\n    \"Spell Checker\": \"Spellingscontrole\",\n\n    // Help\n    \"Help\": \"Hulp\",\n    \"Shortcuts\": \"Snelkoppelingen\",\n    \"Inline Editor\": \"Inline editor\",\n    \"Show the editor\": \"Laat de editor zien\",\n    \"Common actions\": \"Algemene acties\",\n    \"Copy\": \"Kopiëren\",\n    \"Cut\": \"Knippen\",\n    \"Paste\": \"Plakken\",\n    \"Basic Formatting\": \"Basisformattering\",\n    \"Increase quote level\": \"Citaat niveau verhogen\",\n    \"Decrease quote level\": \"Citaatniveau verminderen\",\n    \"Image / Video\": \"Beeld / video\",\n    \"Resize larger\": \"Groter maken\",\n    \"Resize smaller\": \"Kleiner maken\",\n    \"Table\": \"Tabel\",\n    \"Select table cell\": \"Selecteer tabelcel\",\n    \"Extend selection one cell\": \"Selecteer een cel uit\",\n    \"Extend selection one row\": \"Selecteer een rij uit\",\n    \"Navigation\": \"Navigatie\",\n    \"Focus popup / toolbar\": \"Focus pop-up / werkbalk\",\n    \"Return focus to previous position\": \"Focus terug naar vorige positie\",\n\n    // Embed.ly\n    \"Embed URL\": \"Embed url\",\n    \"Paste in a URL to embed\": \"Voer een URL in om toe te voegen\",\n\n    // Word Paste.\n    \"The pasted content is coming from a Microsoft Word document. Do you want to keep the format or clean it up?\": \"De geplakte inhoud komt uit een Microsoft Word-document. wil je het formaat behouden of schoonmaken?\",\n    \"Keep\": \"Opmaak behouden\",\n    \"Clean\": \"Tekst schoonmaken\",\n    \"Word Paste Detected\": \"Word inhoud gedetecteerd\"\n  },\n  direction: \"ltr\"\n};\n\n}));\n"
  },
  {
    "path": "src/main/resources/static/plugins/froala-editor/js/languages/pl.js",
    "content": "/*!\n * froala_editor v2.9.1 (https://www.froala.com/wysiwyg-editor)\n * License https://froala.com/wysiwyg-editor/terms/\n * Copyright 2014-2018 Froala Labs\n */\n\n(function (factory) {\n    if (typeof define === 'function' && define.amd) {\n        // AMD. Register as an anonymous module.\n        define(['jquery'], factory);\n    } else if (typeof module === 'object' && module.exports) {\n        // Node/CommonJS\n        module.exports = function( root, jQuery ) {\n            if ( jQuery === undefined ) {\n                // require('jQuery') returns a factory that requires window to\n                // build a jQuery instance, we normalize how we use modules\n                // that require this pattern but the window provided is a noop\n                // if it's defined (how jquery works)\n                if ( typeof window !== 'undefined' ) {\n                    jQuery = require('jquery');\n                }\n                else {\n                    jQuery = require('jquery')(root);\n                }\n            }\n            return factory(jQuery);\n        };\n    } else {\n        // Browser globals\n        factory(window.jQuery);\n    }\n}(function ($) {\n/**\n * Polish\n */\n\n$.FE.LANGUAGE['pl'] = {\n  translation: {\n    // Place holder\n    \"Type something\": \"Wpisz co\\u015b\",\n\n    // Basic formatting\n    \"Bold\": \"Pogrubienie\",\n    \"Italic\": \"Kursywa\",\n    \"Underline\": \"Podkre\\u015blenie\",\n    \"Strikethrough\": \"Przekre\\u015blenie\",\n\n    // Main buttons\n    \"Insert\": \"Wstaw\",\n    \"Delete\": \"Usun\\u0105\\u0107\",\n    \"Cancel\": \"Anuluj\",\n    \"OK\": \"Ok\",\n    \"Back\": \"Plecy\",\n    \"Remove\": \"Usun\\u0105\\u0107\",\n    \"More\": \"Jeszcze\",\n    \"Update\": \"Aktualizacja\",\n    \"Style\": \"Styl\",\n\n    // Font\n    \"Font Family\": \"Kr\\u00f3j czcionki\",\n    \"Font Size\": \"Rozmiar czcionki\",\n\n    // Colors\n    \"Colors\": \"Kolory\",\n    \"Background\": \"T\\u0142o\",\n    \"Text\": \"Tekstu\",\n    \"HEX Color\": \"Sześciokąt\",\n\n    // Paragraphs\n    \"Paragraph Format\": \"Formaty\",\n    \"Normal\": \"Normalny\",\n    \"Code\": \"Kod \\u017ar\\u00f3d\\u0142owy\",\n    \"Heading 1\": \"Nag\\u0142\\u00f3wek 1\",\n    \"Heading 2\": \"Nag\\u0142\\u00f3wek 2\",\n    \"Heading 3\": \"Nag\\u0142\\u00f3wek 3\",\n    \"Heading 4\": \"Nag\\u0142\\u00f3wek 4\",\n\n    // Style\n    \"Paragraph Style\": \"Styl akapitu\",\n    \"Inline Style\": \"Stylu zgodna\",\n\n    // Alignment\n    \"Align\": \"Wyr\\u00f3wnaj\",\n    \"Align Left\": \"Wyr\\u00f3wnaj do lewej\",\n    \"Align Center\": \"Wyr\\u00f3wnaj do \\u015brodka\",\n    \"Align Right\": \"Wyr\\u00f3wnaj do prawej\",\n    \"Align Justify\": \"Do lewej i prawej\",\n    \"None\": \"\\u017baden\",\n\n    // Lists\n    \"Ordered List\": \"Uporz\\u0105dkowana lista\",\n    \"Unordered List\": \"Lista nieuporz\\u0105dkowana\",\n\n    // Indent\n    \"Decrease Indent\": \"Zmniejsz wci\\u0119cie\",\n    \"Increase Indent\": \"Zwi\\u0119ksz wci\\u0119cie\",\n\n    // Links\n    \"Insert Link\": \"Wstaw link\",\n    \"Open in new tab\": \"Otw\\u00f3rz w nowej karcie\",\n    \"Open Link\": \"Otw\\u00f3rz link\",\n    \"Edit Link\": \"Link edytuj\",\n    \"Unlink\": \"Usu\\u0144 link\",\n    \"Choose Link\": \"Wybierz link\",\n\n    // Images\n    \"Insert Image\": \"Wstaw obrazek\",\n    \"Upload Image\": \"Za\\u0142aduj obrazek\",\n    \"By URL\": \"Przez URL\",\n    \"Browse\": \"Przegl\\u0105danie\",\n    \"Drop image\": \"Upu\\u015bci\\u0107 obraz\",\n    \"or click\": \"lub kliknij\",\n    \"Manage Images\": \"Zarz\\u0105dzanie zdj\\u0119ciami\",\n    \"Loading\": \"\\u0141adowanie\",\n    \"Deleting\": \"Usuwanie\",\n    \"Tags\": \"Tagi\",\n    \"Are you sure? Image will be deleted.\": \"Czy na pewno? Obraz zostanie skasowany.\",\n    \"Replace\": \"Zast\\u0105pi\\u0107\",\n    \"Uploading\": \"Zamieszczanie\",\n    \"Loading image\": \"\\u0141adowanie obrazek\",\n    \"Display\": \"Wystawa\",\n    \"Inline\": \"Zgodna\",\n    \"Break Text\": \"Z\\u0142ama\\u0107 tekst\",\n    \"Alternative Text\": \"Tekst alternatywny\",\n    \"Change Size\": \"Zmie\\u0144 rozmiar\",\n    \"Width\": \"Szeroko\\u015b\\u0107\",\n    \"Height\": \"Wysoko\\u015b\\u0107\",\n    \"Something went wrong. Please try again.\": \"Co\\u015b posz\\u0142o nie tak. Prosz\\u0119 spr\\u00f3buj ponownie.\",\n    \"Image Caption\": \"Podpis obrazu\",\n    \"Advanced Edit\": \"Zaawansowana edycja\",\n\n    // Video\n    \"Insert Video\": \"Wstaw wideo\",\n    \"Embedded Code\": \"Kod osadzone\",\n    \"Paste in a video URL\": \"Wklej adres URL filmu\",\n    \"Drop video\": \"Upuść wideo\",\n    \"Your browser does not support HTML5 video.\": \"Twoja przeglądarka nie obsługuje wideo html5.\",\n    \"Upload Video\": \"Prześlij wideo\",\n\n    // Tables\n    \"Insert Table\": \"Wstaw tabel\\u0119\",\n    \"Table Header\": \"Nag\\u0142\\u00f3wek tabeli\",\n    \"Remove Table\": \"Usu\\u0144 tabel\\u0119\",\n    \"Table Style\": \"Styl tabeli\",\n    \"Horizontal Align\": \"Wyr\\u00f3wnaj poziomy\",\n    \"Row\": \"Wiersz\",\n    \"Insert row above\": \"Wstaw wiersz przed\",\n    \"Insert row below\": \"Wstaw wiersz po\",\n    \"Delete row\": \"Usu\\u0144 wiersz\",\n    \"Column\": \"Kolumna\",\n    \"Insert column before\": \"Wstaw kolumn\\u0119 przed\",\n    \"Insert column after\": \"Wstaw kolumn\\u0119 po\",\n    \"Delete column\": \"Usu\\u0144 kolumn\\u0119\",\n    \"Cell\": \"Kom\\u00f3rka\",\n    \"Merge cells\": \"\\u0141\\u0105cz kom\\u00f3rki\",\n    \"Horizontal split\": \"Podzia\\u0142 poziomy\",\n    \"Vertical split\": \"Podzia\\u0142 pionowy\",\n    \"Cell Background\": \"T\\u0142a kom\\u00f3rek\",\n    \"Vertical Align\": \"Pionowe wyr\\u00f3wnanie\",\n    \"Top\": \"Top\",\n    \"Middle\": \"\\u015arodkowy\",\n    \"Bottom\": \"Dno\",\n    \"Align Top\": \"Wyr\\u00f3wnaj do g\\u00f3ry\",\n    \"Align Middle\": \"Wyr\\u00f3wnaj \\u015brodku\",\n    \"Align Bottom\": \"Wyr\\u00f3wnaj do do\\u0142u\",\n    \"Cell Style\": \"Styl kom\\u00f3rki\",\n\n    // Files\n    \"Upload File\": \"Prze\\u015blij plik\",\n    \"Drop file\": \"Upu\\u015bci\\u0107 plik\",\n\n    // Emoticons\n    \"Emoticons\": \"Emotikony\",\n    \"Grinning face\": \"Z u\\u015bmiechem twarz\",\n    \"Grinning face with smiling eyes\": \"Z u\\u015bmiechem twarz z u\\u015bmiechni\\u0119tymi oczami\",\n    \"Face with tears of joy\": \"Twarz ze \\u0142zami rado\\u015bci\",\n    \"Smiling face with open mouth\": \"U\\u015bmiechni\\u0119ta twarz z otwartymi ustami\",\n    \"Smiling face with open mouth and smiling eyes\": \"U\\u015bmiechni\\u0119ta twarz z otwartymi ustami i u\\u015bmiechni\\u0119te oczy\",\n    \"Smiling face with open mouth and cold sweat\": \"U\\u015bmiechni\\u0119ta twarz z otwartymi ustami i zimny pot\",\n    \"Smiling face with open mouth and tightly-closed eyes\": \"U\\u015bmiechni\\u0119ta twarz z otwartymi ustami i szczelnie zamkni\\u0119tych oczu\",\n    \"Smiling face with halo\": \"U\\u015bmiechni\\u0119ta twarz z halo\",\n    \"Smiling face with horns\": \"U\\u015bmiechni\\u0119ta twarz z rogami\",\n    \"Winking face\": \"Mrugaj\\u0105ca twarz\",\n    \"Smiling face with smiling eyes\": \"U\\u015bmiechni\\u0119ta twarz z u\\u015bmiechni\\u0119tymi oczami\",\n    \"Face savoring delicious food\": \"Twarz smakuj\\u0105 c pyszne jedzenie\",\n    \"Relieved face\": \"Z ulg\\u0105  twarz\",\n    \"Smiling face with heart-shaped eyes\": \"U\\u015bmiechni\\u0119ta twarz z oczami w kszta\\u0142cie serca\",\n    \"Smiling face with sunglasses\": \"U\\u015bmiechni\\u0119ta twarz z okulary\",\n    \"Smirking face\": \"Zadowolony z siebie twarz\",\n    \"Neutral face\": \"Neutralny twarzy\",\n    \"Expressionless face\": \"Bezwyrazowy twarzy\",\n    \"Unamused face\": \"Nie rozbawiony twarzy\",\n    \"Face with cold sweat\": \"Zimny pot z twarzy\",\n    \"Pensive face\": \"Zamy\\u015blona twarz\",\n    \"Confused face\": \"Myli\\u0107 twarzy\",\n    \"Confounded face\": \"Ha\\u0144ba twarz\",\n    \"Kissing face\": \"Ca\\u0142owanie twarz\",\n    \"Face throwing a kiss\": \"Twarz rzucaj\\u0105c poca\\u0142unek\",\n    \"Kissing face with smiling eyes\": \"Ca\\u0142owanie twarz z u\\u015bmiechni\\u0119tymi oczami\",\n    \"Kissing face with closed eyes\": \"Ca\\u0142owanie twarz z zamkni\\u0119tymi oczami\",\n    \"Face with stuck out tongue\": \"Twarz z j\\u0119zyka stercza\\u0142y\",\n    \"Face with stuck out tongue and winking eye\": \"Twarz z stercza\\u0142y j\\u0119zyka i mrugaj\\u0105c okiem\",\n    \"Face with stuck out tongue and tightly-closed eyes\": \"Twarz z stercza\\u0142y j\\u0119zyka i szczelnie zamkni\\u0119tych oczu\",\n    \"Disappointed face\": \"Rozczarowany twarzy\",\n    \"Worried face\": \"Martwi twarzy\",\n    \"Angry face\": \"Gniewnych twarzy\",\n    \"Pouting face\": \"D\\u0105sy twarzy\",\n    \"Crying face\": \"P\\u0142acz\\u0105cy\",\n    \"Persevering face\": \"Wytrwa\\u0142a twarz\",\n    \"Face with look of triumph\": \"Twarz z wyrazem triumfu\",\n    \"Disappointed but relieved face\": \"Rozczarowany ale ulg\\u0119 twarz\",\n    \"Frowning face with open mouth\": \"Krzywi\\u0105c twarz z otwartymi ustami\",\n    \"Anguished face\": \"Bolesna twarz\",\n    \"Fearful face\": \"W obawie twarzy\",\n    \"Weary face\": \"Zm\\u0119czona twarz\",\n    \"Sleepy face\": \"Je\\u017adziec bez twarzy\",\n    \"Tired face\": \"Zm\\u0119czonej twarzy\",\n    \"Grimacing face\": \"Skrzywi\\u0142 twarz\",\n    \"Loudly crying face\": \"G\\u0142o\\u015bno p\\u0142aka\\u0107 twarz\",\n    \"Face with open mouth\": \"twarz z otwartymi ustami\",\n    \"Hushed face\": \"Uciszy\\u0142 twarzy\",\n    \"Face with open mouth and cold sweat\": \"Twarz z otwartymi ustami i zimny pot\",\n    \"Face screaming in fear\": \"Twarz z krzykiem w strachu\",\n    \"Astonished face\": \"Zdziwienie twarzy\",\n    \"Flushed face\": \"Zaczerwienienie twarzy\",\n    \"Sleeping face\": \"\\u015api\\u0105ca twarz\",\n    \"Dizzy face\": \"Zawroty g\\u0142owy twarzy\",\n    \"Face without mouth\": \"Twarz bez usta\",\n    \"Face with medical mask\": \"Twarz\\u0105 w medycznych maski\",\n\n    // Line breaker\n    \"Break\": \"Z\\u0142ama\\u0107\",\n\n    // Math\n    \"Subscript\": \"Indeks dolny\",\n    \"Superscript\": \"Indeks g\\u00f3rny\",\n\n    // Full screen\n    \"Fullscreen\": \"Pe\\u0142ny ekran\",\n\n    // Horizontal line\n    \"Insert Horizontal Line\": \"Wstaw lini\\u0119 poziom\\u0105\",\n\n    // Clear formatting\n    \"Clear Formatting\": \"Usu\\u0144 formatowanie\",\n\n    // Save\n    \"Save\": \"\\u005a\\u0061\\u0070\\u0069\\u0073\\u0061\\u0107\",\n\n    // Undo, redo\n    \"Undo\": \"Cofnij\",\n    \"Redo\": \"Pon\\u00f3w\",\n\n    // Select all\n    \"Select All\": \"Zaznacz wszystko\",\n\n    // Code view\n    \"Code View\": \"Widok kod\",\n\n    // Quote\n    \"Quote\": \"Cytat\",\n    \"Increase\": \"Wzrost\",\n    \"Decrease\": \"Zmniejszenie\",\n\n    // Quick Insert\n    \"Quick Insert\": \"Szybkie wstaw\",\n\n    // Spcial Characters\n    \"Special Characters\": \"Znaki specjalne\",\n    \"Latin\": \"Łacina\",\n    \"Greek\": \"Grecki\",\n    \"Cyrillic\": \"Cyrylica\",\n    \"Punctuation\": \"Interpunkcja\",\n    \"Currency\": \"Waluta\",\n    \"Arrows\": \"Strzałki\",\n    \"Math\": \"Matematyka\",\n    \"Misc\": \"Misc\",\n\n    // Print.\n    \"Print\": \"Wydrukować\",\n\n    // Spell Checker.\n    \"Spell Checker\": \"Sprawdzanie pisowni\",\n\n    // Help\n    \"Help\": \"Wsparcie\",\n    \"Shortcuts\": \"Skróty\",\n    \"Inline Editor\": \"Edytor w wierszu\",\n    \"Show the editor\": \"Pokazać edytor\",\n    \"Common actions\": \"Wspólne działania\",\n    \"Copy\": \"Kopiuj\",\n    \"Cut\": \"Ciąć\",\n    \"Paste\": \"Pasta\",\n    \"Basic Formatting\": \"Podstawowe formatowanie\",\n    \"Increase quote level\": \"Zwiększyć poziom notowań\",\n    \"Decrease quote level\": \"Zmniejszyć poziom notowań\",\n    \"Image / Video\": \"Obraz / wideo\",\n    \"Resize larger\": \"Zmienić rozmiar większy\",\n    \"Resize smaller\": \"Zmienić rozmiar mniejszy\",\n    \"Table\": \"Stół\",\n    \"Select table cell\": \"Wybierz komórkę tabeli\",\n    \"Extend selection one cell\": \"Przedłużyć wybór jednej komórki\",\n    \"Extend selection one row\": \"Przedłużyć wybór jednego rzędu\",\n    \"Navigation\": \"Nawigacja\",\n    \"Focus popup / toolbar\": \"Focus popup / toolbar\",\n    \"Return focus to previous position\": \"Powrót do poprzedniej pozycji\",\n\n    // Embed.ly\n    \"Embed URL\": \"Osadzaj url\",\n    \"Paste in a URL to embed\": \"Wklej w adresie URL do osadzenia\",\n\n    // Word Paste.\n    \"The pasted content is coming from a Microsoft Word document. Do you want to keep the format or clean it up?\": \"Wklejana treść pochodzi z programu Microsoft Word. Czy chcesz zachować formatowanie czy wkleić jako zwykły tekst?\",\n    \"Keep\": \"Zachowaj formatowanie\",\n    \"Clean\": \"Wklej jako tekst\",\n    \"Word Paste Detected\": \"Wykryto sformatowany tekst\"\n  },\n  direction: \"ltr\"\n};\n\n}));\n"
  },
  {
    "path": "src/main/resources/static/plugins/froala-editor/js/languages/pt_br.js",
    "content": "/*!\n * froala_editor v2.9.1 (https://www.froala.com/wysiwyg-editor)\n * License https://froala.com/wysiwyg-editor/terms/\n * Copyright 2014-2018 Froala Labs\n */\n\n(function (factory) {\n    if (typeof define === 'function' && define.amd) {\n        // AMD. Register as an anonymous module.\n        define(['jquery'], factory);\n    } else if (typeof module === 'object' && module.exports) {\n        // Node/CommonJS\n        module.exports = function( root, jQuery ) {\n            if ( jQuery === undefined ) {\n                // require('jQuery') returns a factory that requires window to\n                // build a jQuery instance, we normalize how we use modules\n                // that require this pattern but the window provided is a noop\n                // if it's defined (how jquery works)\n                if ( typeof window !== 'undefined' ) {\n                    jQuery = require('jquery');\n                }\n                else {\n                    jQuery = require('jquery')(root);\n                }\n            }\n            return factory(jQuery);\n        };\n    } else {\n        // Browser globals\n        factory(window.jQuery);\n    }\n}(function ($) {\n/**\n * Portuguese spoken in Brazil\n */\n\n$.FE.LANGUAGE['pt_br'] = {\n  translation: {\n    // Place holder\n    \"Type something\": \"Digite algo\",\n\n    // Basic formatting\n    \"Bold\": \"Negrito\",\n    \"Italic\": \"Itálito\",\n    \"Underline\": \"Sublinhar\",\n    \"Strikethrough\": \"Tachado\",\n\n    // Main buttons\n    \"Insert\": \"Inserir\",\n    \"Delete\": \"Apagar\",\n    \"Cancel\": \"Cancelar\",\n    \"OK\": \"Ok\",\n    \"Back\": \"Voltar\",\n    \"Remove\": \"Remover\",\n    \"More\": \"Mais\",\n    \"Update\": \"Atualizar\",\n    \"Style\": \"Estilo\",\n\n    // Font\n    \"Font Family\": \"Fonte\",\n    \"Font Size\": \"Tamanho\",\n\n    // Colors\n    \"Colors\": \"Cores\",\n    \"Background\": \"Fundo\",\n    \"Text\": \"Texto\",\n    \"HEX Color\": \"Cor hexadecimal\",\n\n    // Paragraphs\n    \"Paragraph Format\": \"Formatos\",\n    \"Normal\": \"Normal\",\n    \"Code\": \"Código\",\n    \"Heading 1\": \"Cabeçalho 1\",\n    \"Heading 2\": \"Cabeçalho 2\",\n    \"Heading 3\": \"Cabeçalho 3\",\n    \"Heading 4\": \"Cabeçalho 4\",\n\n    // Style\n    \"Paragraph Style\": \"Estilo de parágrafo\",\n    \"Inline Style\": \"Estilo embutido\",\n\n    // Alignment\n    \"Align\": \"Alinhar\",\n    \"Align Left\": \"Alinhar à esquerda\",\n    \"Align Center\": \"Centralizar\",\n    \"Align Right\": \"Alinhar à direita\",\n    \"Align Justify\": \"Justificar\",\n    \"None\": \"Nenhum\",\n\n    // Lists\n    \"Ordered List\": \"Lista ordenada\",\n    \"Unordered List\": \"Lista não ordenada\",\n\n    // Indent\n    \"Decrease Indent\": \"Diminuir recuo\",\n    \"Increase Indent\": \"Aumentar recuo\",\n\n    // Links\n    \"Insert Link\": \"Inserir link\",\n    \"Open in new tab\": \"Abrir em uma nova aba\",\n    \"Open Link\": \"Abrir link\",\n    \"Edit Link\": \"Editar link\",\n    \"Unlink\": \"Remover link\",\n    \"Choose Link\": \"Escolha o link\",\n\n    // Images\n    \"Insert Image\": \"Inserir imagem\",\n    \"Upload Image\": \"Carregar imagem\",\n    \"By URL\": \"Por um endereço URL\",\n    \"Browse\": \"Procurar\",\n    \"Drop image\": \"Arraste sua imagem aqui\",\n    \"or click\": \"ou clique aqui\",\n    \"Manage Images\": \"Gerenciar imagens\",\n    \"Loading\": \"Carregando\",\n    \"Deleting\": \"Excluindo\",\n    \"Tags\": \"Etiquetas\",\n    \"Are you sure? Image will be deleted.\": \"Você tem certeza? A imagem será apagada.\",\n    \"Replace\": \"Substituir\",\n    \"Uploading\": \"Carregando imagem\",\n    \"Loading image\": \"Carregando imagem\",\n    \"Display\": \"Exibir\",\n    \"Inline\": \"Em linha\",\n    \"Break Text\": \"Texto de quebra\",\n    \"Alternate Text\": \"Texto alternativo\",\n    \"Change Size\": \"Alterar tamanho\",\n    \"Width\": \"Largura\",\n    \"Height\": \"Altura\",\n    \"Something went wrong. Please try again.\": \"Algo deu errado. Por favor, tente novamente.\",\n    \"Image Caption\": \"Legenda da imagem\",\n    \"Advanced Edit\": \"Edição avançada\",\n\n    // Video\n    \"Insert Video\": \"Inserir vídeo\",\n    \"Embedded Code\": \"Código embutido\",\n    \"Paste in a video URL\": \"Colar um endereço de vídeo\",\n    \"Drop video\": \"Solte o vídeo\",\n    \"Your browser does not support HTML5 vídeo.\": \"Seu navegador não suporta vídeo em HTML5.\",\n    \"Upload Video\": \"Carregar vídeo\",\n\n    // Tables\n    \"Insert Table\": \"Inserir tabela\",\n    \"Table Header\": \"Cabeçalho da tabela\",\n    \"Remove Table\": \"Remover tabela\",\n    \"Table Style\": \"Estilo de tabela\",\n    \"Horizontal Align\": \"Alinhamento horizontal\",\n    \"Row\": \"Linha\",\n    \"Insert row above\": \"Inserir linha antes\",\n    \"Insert row below\": \"Inserir linha depois\",\n    \"Delete row\": \"Excluir linha\",\n    \"Column\": \"Coluna\",\n    \"Insert column before\": \"Inserir coluna antes\",\n    \"Insert column after\": \"Inserir coluna depois\",\n    \"Delete column\": \"Excluir coluna\",\n    \"Cell\": \"Célula\",\n    \"Merge cells\": \"Agrupar células\",\n    \"Horizontal split\": \"Divisão horizontal\",\n    \"Vertical split\": \"Divisão vertical\",\n    \"Cell Background\": \"Fundo da célula\",\n    \"Vertical Align\": \"Alinhamento vertical\",\n    \"Top\": \"Topo\",\n    \"Middle\": \"Meio\",\n    \"Bottom\": \"Fundo\",\n    \"Align Top\": \"Alinhar topo\",\n    \"Align Middle\": \"Alinhar meio\",\n    \"Align Bottom\": \"Alinhar fundo\",\n    \"Cell Style\": \"Estilo de célula\",\n\n    // Files\n    \"Upload File\": \"Carregar arquivo\",\n    \"Drop file\": \"Arraste seu arquivo aqui\",\n\n    // Emoticons\n    \"Emoticons\": \"Emoticons\",\n    \"Grinning face\": \"Rosto sorrindo\",\n    \"Grinning face with smiling eyes\": \"Rosto sorrindo rosto com olhos sorridentes\",\n    \"Face with tears of joy\": \"Rosto com lágrimas de alegria\",\n    \"Smiling face with open mouth\": \"Rosto sorrindo com a boca aberta\",\n    \"Smiling face with open mouth and smiling eyes\": \"Rosto sorrindo com a boca aberta e olhos sorridentes\",\n    \"Smiling face with open mouth and cold sweat\": \"Rosto sorrindo com a boca aberta e suor frio\",\n    \"Smiling face with open mouth and tightly-closed eyes\": \"Rosto sorrindo com a boca aberta e os olhos bem fechados\",\n    \"Smiling face with halo\": \"Rosto sorrindo com aréola\",\n    \"Smiling face with horns\": \"Rosto sorrindo com chifres\",\n    \"Winking face\": \"Rosto piscando\",\n    \"Smiling face with smiling eyes\": \"Rosto sorrindo com olhos sorridentes\",\n    \"Face savoring delicious food\": \"Rosto saboreando uma deliciosa comida\",\n    \"Relieved face\": \"Rosto aliviado\",\n    \"Smiling face with heart-shaped eyes\": \"Rosto sorrindo com os olhos em forma de coração\",\n    \"Smiling face with sunglasses\": \"Rosto sorrindo com óculos de sol\",\n    \"Smirking face\": \"Rosto sorridente\",\n    \"Neutral face\": \"Rosto neutro\",\n    \"Expressionless face\": \"Rosto inexpressivo\",\n    \"Unamused face\": \"Rosto sem expressão\",\n    \"Face with cold sweat\": \"Rosto com suor frio\",\n    \"Pensive face\": \"Rosto pensativo\",\n    \"Confused face\": \"Rosto confuso\",\n    \"Confounded face\": \"Rosto atônito\",\n    \"Kissing face\": \"Rosto beijando\",\n    \"Face throwing a kiss\": \"Rosto jogando um beijo\",\n    \"Kissing face with smiling eyes\": \"Rosto beijando com olhos sorridentes\",\n    \"Kissing face with closed eyes\": \"Rosto beijando com os olhos fechados\",\n    \"Face with stuck out tongue\": \"Rosto com a língua para fora\",\n    \"Face with stuck out tongue and winking eye\": \"Rosto com a língua para fora e um olho piscando\",\n    \"Face with stuck out tongue and tightly-closed eyes\": \"Rosto com a língua para fora e os olhos bem fechados\",\n    \"Disappointed face\": \"Rosto decepcionado\",\n    \"Worried face\": \"Rosto preocupado\",\n    \"Angry face\": \"Rosto irritado\",\n    \"Pouting face\": \"Rosto com beicinho\",\n    \"Crying face\": \"Rosto chorando\",\n    \"Persevering face\": \"Rosto perseverante\",\n    \"Face with look of triumph\": \"Rosto com olhar de triunfo\",\n    \"Disappointed but relieved face\": \"Rosto decepcionado mas aliviado\",\n    \"Frowning face with open mouth\": \"Rosto franzido com a boca aberta\",\n    \"Anguished face\": \"Rosto angustiado\",\n    \"Fearful face\": \"Rosto com medo\",\n    \"Weary face\": \"Rosto cansado\",\n    \"Sleepy face\": \"Rosto com sono\",\n    \"Tired face\": \"Rosto cansado\",\n    \"Grimacing face\": \"Rosto fazendo careta\",\n    \"Loudly crying face\": \"Rosto chorando alto\",\n    \"Face with open mouth\": \"Rosto com a boca aberta\",\n    \"Hushed face\": \"Rosto silencioso\",\n    \"Face with open mouth and cold sweat\": \"Rosto com a boca aferta e suando frio\",\n    \"Face screaming in fear\": \"Rosto gritando de medo\",\n    \"Astonished face\": \"Rosto surpreso\",\n    \"Flushed face\": \"Rosto envergonhado\",\n    \"Sleeping face\": \"Rosto dormindo\",\n    \"Dizzy face\": \"Rosto tonto\",\n    \"Face without mouth\": \"Rosto sem boca\",\n    \"Face with medical mask\": \"Rosto com máscara médica\",\n\n    // Line breaker\n    \"Break\": \"Quebrar linha\",\n\n    // Math\n    \"Subscript\": \"Subscrito\",\n    \"Superscript\": \"Sobrescrito\",\n\n    // Full screen\n    \"Fullscreen\": \"Tela cheia\",\n\n    // Horizontal line\n    \"Insert Horizontal Line\": \"Inserir linha horizontal\",\n\n    // Clear formatting\n    \"Clear Formatting\": \"Remover formatação\",\n\n    // Save\n    \"Save\": \"\\u0053\\u0061\\u006c\\u0076\\u0065\",\n\n    // Undo, redo\n    \"Undo\": \"Desfazer\",\n    \"Redo\": \"Refazer\",\n\n    // Select all\n    \"Select All\": \"Selecionar tudo\",\n\n    // Code view\n    \"Code View\": \"Exibir de código\",\n\n    // Quote\n    \"Quote\": \"Citação\",\n    \"Increase\": \"Aumentar\",\n    \"Decrease\": \"Diminuir\",\n\n    // Quick Insert\n    \"Quick Insert\": \"Inserção rápida\",\n\n    // Spcial Characters\n    \"Special Characters\": \"Caracteres especiais\",\n    \"Latin\": \"Latino\",\n    \"Greek\": \"Grego\",\n    \"Cyrillic\": \"Cirílico\",\n    \"Punctuation\": \"Pontuação\",\n    \"Currency\": \"Moeda\",\n    \"Arrows\": \"Setas\",\n    \"Math\": \"Matemática\",\n    \"Misc\": \"Misc\",\n\n    // Print.\n    \"Print\": \"Impressão\",\n\n    // Spell Checker.\n    \"Spell Checker\": \"Corretor ortográfico\",\n\n    // Help\n    \"Help\": \"Ajuda\",\n    \"Shortcuts\": \"Atalhos\",\n    \"Inline Editor\": \"Editor em linha\",\n    \"Show the editor\": \"Mostre o editor\",\n    \"Common actions\": \"Ações comuns\",\n    \"Copy\": \"Cópia de\",\n    \"Cut\": \"Cortar\",\n    \"Paste\": \"Colar\",\n    \"Basic Formatting\": \"Formatação básica\",\n    \"Increase quote level\": \"Aumentar o nível de cotação\",\n    \"Decrease quote level\": \"Diminuir o nível de cotação\",\n    \"Image / Video\": \"Imagem / Vídeo\",\n    \"Resize larger\": \"Redimensionar maior\",\n    \"Resize smaller\": \"Redimensionar menor\",\n    \"Table\": \"Tabela\",\n    \"Select table cell\": \"Selecione a célula da tabela\",\n    \"Extend selection one cell\": \"Ampliar a seleção de uma célula\",\n    \"Extend selection one row\": \"Ampliar a seleção de uma linha\",\n    \"Navigation\": \"Navegação\",\n    \"Focus popup / toolbar\": \"Pop-up de foco / Barra de ferramentas\",\n    \"Return focus to previous position\": \"Retornar o foco para a posição anterior\",\n\n    // Embed.ly\n    \"Embed URL\": \"URL de inserção\",\n    \"Paste in a URL to embed\": \"Colar um endereço URL para incorporar\",\n\n    // Word Paste.\n    \"The pasted content is coming from a Microsoft Word document. Do you want to keep the format or clean it up?\": \"O conteúdo colado vem de um documento Microsoft Word. Você quer manter o formato ou limpá-lo?\",\n    \"Keep\": \"Manter\",\n    \"Clean\": \"Limpar\",\n    \"Word Paste Detected\": \"Colar do Word detectado\"\n  },\n  direction: \"ltr\"\n};\n\n}));\n"
  },
  {
    "path": "src/main/resources/static/plugins/froala-editor/js/languages/pt_pt.js",
    "content": "/*!\n * froala_editor v2.9.1 (https://www.froala.com/wysiwyg-editor)\n * License https://froala.com/wysiwyg-editor/terms/\n * Copyright 2014-2018 Froala Labs\n */\n\n(function (factory) {\n    if (typeof define === 'function' && define.amd) {\n        // AMD. Register as an anonymous module.\n        define(['jquery'], factory);\n    } else if (typeof module === 'object' && module.exports) {\n        // Node/CommonJS\n        module.exports = function( root, jQuery ) {\n            if ( jQuery === undefined ) {\n                // require('jQuery') returns a factory that requires window to\n                // build a jQuery instance, we normalize how we use modules\n                // that require this pattern but the window provided is a noop\n                // if it's defined (how jquery works)\n                if ( typeof window !== 'undefined' ) {\n                    jQuery = require('jquery');\n                }\n                else {\n                    jQuery = require('jquery')(root);\n                }\n            }\n            return factory(jQuery);\n        };\n    } else {\n        // Browser globals\n        factory(window.jQuery);\n    }\n}(function ($) {\n/**\n * Portuguese spoken in Portugal\n */\n\n$.FE.LANGUAGE['pt_pt'] = {\n  translation: {\n    // Place holder\n    \"Type something\": \"Digite algo\",\n\n    // Basic formatting\n    \"Bold\": \"Negrito\",\n    \"Italic\": \"It\\u00e1lico\",\n    \"Underline\": \"Sublinhado\",\n    \"Strikethrough\": \"Rasurado\",\n\n    // Main buttons\n    \"Insert\": \"Inserir\",\n    \"Delete\": \"Apagar\",\n    \"Cancel\": \"Cancelar\",\n    \"OK\": \"Ok\",\n    \"Back\": \"Voltar\",\n    \"Remove\": \"Remover\",\n    \"More\": \"Mais\",\n    \"Update\": \"Atualizar\",\n    \"Style\": \"Estilo\",\n\n    // Font\n    \"Font Family\": \"Fonte\",\n    \"Font Size\": \"Tamanho da fonte\",\n\n    // Colors\n    \"Colors\": \"Cores\",\n    \"Background\": \"Fundo\",\n    \"Text\": \"Texto\",\n    \"HEX Color\": \"Cor hexadecimal\",\n\n    // Paragraphs\n    \"Paragraph Format\": \"Formatos\",\n    \"Normal\": \"Normal\",\n    \"Code\": \"C\\u00f3digo\",\n    \"Heading 1\": \"Cabe\\u00e7alho 1\",\n    \"Heading 2\": \"Cabe\\u00e7alho 2\",\n    \"Heading 3\": \"Cabe\\u00e7alho 3\",\n    \"Heading 4\": \"Cabe\\u00e7alho 4\",\n\n    // Style\n    \"Paragraph Style\": \"Estilo de par\\u00e1grafo\",\n    \"Inline Style\": \"Estilo embutido\",\n\n    // Alignment\n    \"Align\": \"Alinhar\",\n    \"Align Left\": \"Alinhar \\u00e0 esquerda\",\n    \"Align Center\": \"Alinhar ao centro\",\n    \"Align Right\": \"Alinhar \\u00e0 direita\",\n    \"Align Justify\": \"Justificado\",\n    \"None\": \"Nenhum\",\n\n    // Lists\n    \"Ordered List\": \"Lista ordenada\",\n    \"Unordered List\": \"Lista n\\u00e3o ordenada\",\n\n    // Indent\n    \"Decrease Indent\": \"Diminuir avan\\u00e7o\",\n    \"Increase Indent\": \"Aumentar avan\\u00e7o\",\n\n    // Links\n    \"Insert Link\": \"Inserir link\",\n    \"Open in new tab\": \"Abrir em uma nova aba\",\n    \"Open Link\": \"Abrir link\",\n    \"Edit Link\": \"Editar link\",\n    \"Unlink\": \"Remover link\",\n    \"Choose Link\": \"Escolha o link\",\n\n    // Images\n    \"Insert Image\": \"Inserir imagem\",\n    \"Upload Image\": \"Carregar imagem\",\n    \"By URL\": \"Por URL\",\n    \"Browse\": \"Procurar\",\n    \"Drop image\": \"Largue imagem\",\n    \"or click\": \"ou clique em\",\n    \"Manage Images\": \"Gerenciar as imagens\",\n    \"Loading\": \"Carregando\",\n    \"Deleting\": \"Excluindo\",\n    \"Tags\": \"Etiquetas\",\n    \"Are you sure? Image will be deleted.\": \"Voc\\u00ea tem certeza? Imagem ser\\u00e1 apagada.\",\n    \"Replace\": \"Substituir\",\n    \"Uploading\": \"Carregando imagem\",\n    \"Loading image\": \"Carregando imagem\",\n    \"Display\": \"Exibir\",\n    \"Inline\": \"Em linha\",\n    \"Break Text\": \"Texto de quebra\",\n    \"Alternative Text\": \"Texto alternativo\",\n    \"Change Size\": \"Alterar tamanho\",\n    \"Width\": \"Largura\",\n    \"Height\": \"Altura\",\n    \"Something went wrong. Please try again.\": \"Algo deu errado. Por favor, tente novamente.\",\n    \"Image Caption\": \"Legenda da imagem\",\n    \"Advanced Edit\": \"Edição avançada\",\n\n    // Video\n    \"Insert Video\": \"Inserir v\\u00eddeo\",\n    \"Embedded Code\": \"C\\u00f3digo embutido\",\n    \"Paste in a video URL\": \"Colar em um URL de vídeo\",\n    \"Drop video\": \"Solte o video\",\n    \"Your browser does not support HTML5 video.\": \"Seu navegador não suporta o vídeo html5.\",\n    \"Upload Video\": \"Envio vídeo\",\n\n    // Tables\n    \"Insert Table\": \"Inserir tabela\",\n    \"Table Header\": \"Cabe\\u00e7alho da tabela\",\n    \"Remove Table\": \"Remover tabela\",\n    \"Table Style\": \"estilo de tabela\",\n    \"Horizontal Align\": \"Alinhamento horizontal\",\n    \"Row\": \"Linha\",\n    \"Insert row above\": \"Inserir linha antes\",\n    \"Insert row below\": \"Inserir linha depois\",\n    \"Delete row\": \"Eliminar linha\",\n    \"Column\": \"Coluna\",\n    \"Insert column before\": \"Inserir coluna antes\",\n    \"Insert column after\": \"Inserir coluna depois\",\n    \"Delete column\": \"Eliminar coluna\",\n    \"Cell\": \"C\\u00e9lula\",\n    \"Merge cells\": \"Unir c\\u00e9lulas\",\n    \"Horizontal split\": \"Divis\\u00e3o horizontal\",\n    \"Vertical split\": \"Divis\\u00e3o vertical\",\n    \"Cell Background\": \"Fundo da c\\u00e9lula\",\n    \"Vertical Align\": \"Alinhar vertical\",\n    \"Top\": \"Topo\",\n    \"Middle\": \"Meio\",\n    \"Bottom\": \"Fundo\",\n    \"Align Top\": \"Alinhar topo\",\n    \"Align Middle\": \"Alinhar meio\",\n    \"Align Bottom\": \"Alinhar fundo\",\n    \"Cell Style\": \"Estilo de c\\u00e9lula\",\n\n    // Files\n    \"Upload File\": \"Upload de arquivo\",\n    \"Drop file\": \"Largar arquivo\",\n\n    // Emoticons\n    \"Emoticons\": \"Emoticons\",\n    \"Grinning face\": \"Sorrindo a cara\",\n    \"Grinning face with smiling eyes\": \"Sorrindo rosto com olhos sorridentes\",\n    \"Face with tears of joy\": \"Rosto com l\\u00e1grimas de alegria\",\n    \"Smiling face with open mouth\": \"Rosto de sorriso com a boca aberta\",\n    \"Smiling face with open mouth and smiling eyes\": \"Rosto de sorriso com a boca aberta e olhos sorridentes\",\n    \"Smiling face with open mouth and cold sweat\": \"Rosto de sorriso com a boca aberta e suor frio\",\n    \"Smiling face with open mouth and tightly-closed eyes\": \"Rosto de sorriso com a boca aberta e os olhos bem fechados\",\n    \"Smiling face with halo\": \"Rosto de sorriso com halo\",\n    \"Smiling face with horns\": \"Rosto de sorriso com chifres\",\n    \"Winking face\": \"Pisc a rosto\",\n    \"Smiling face with smiling eyes\": \"Rosto de sorriso com olhos sorridentes\",\n    \"Face savoring delicious food\": \"Rosto saboreando uma deliciosa comida\",\n    \"Relieved face\": \"Rosto aliviado\",\n    \"Smiling face with heart-shaped eyes\": \"Rosto de sorriso com os olhos em forma de cora\\u00e7\\u00e3o\",\n    \"Smiling face with sunglasses\": \"Rosto de sorriso com \\u00f3culos de sol\",\n    \"Smirking face\": \"Rosto sorridente\",\n    \"Neutral face\": \"Rosto neutra\",\n    \"Expressionless face\": \"Rosto inexpressivo\",\n    \"Unamused face\": \"O rosto n\\u00e3o divertido\",\n    \"Face with cold sweat\": \"Rosto com suor frio\",\n    \"Pensive face\": \"O rosto pensativo\",\n    \"Confused face\": \"Cara confusa\",\n    \"Confounded face\": \"Rosto at\\u00f4nito\",\n    \"Kissing face\": \"Beijar Rosto\",\n    \"Face throwing a kiss\": \"Rosto jogando um beijo\",\n    \"Kissing face with smiling eyes\": \"Beijar rosto com olhos sorridentes\",\n    \"Kissing face with closed eyes\": \"Beijando a cara com os olhos fechados\",\n    \"Face with stuck out tongue\": \"Preso de cara com a l\\u00edngua para fora\",\n    \"Face with stuck out tongue and winking eye\": \"Rosto com estendeu a l\\u00edngua e olho piscando\",\n    \"Face with stuck out tongue and tightly-closed eyes\": \"Rosto com estendeu a língua e os olhos bem fechados\",\n    \"Disappointed face\": \"Rosto decepcionado\",\n    \"Worried face\": \"O rosto preocupado\",\n    \"Angry face\": \"Rosto irritado\",\n    \"Pouting face\": \"Beicinho Rosto\",\n    \"Crying face\": \"Cara de choro\",\n    \"Persevering face\": \"Perseverar Rosto\",\n    \"Face with look of triumph\": \"Rosto com olhar de triunfo\",\n    \"Disappointed but relieved face\": \"Fiquei Desapontado mas aliviado Rosto\",\n    \"Frowning face with open mouth\": \"Sobrancelhas franzidas rosto com a boca aberta\",\n    \"Anguished face\": \"O rosto angustiado\",\n    \"Fearful face\": \"Cara com medo\",\n    \"Weary face\": \"Rosto cansado\",\n    \"Sleepy face\": \"Cara de sono\",\n    \"Tired face\": \"Rosto cansado\",\n    \"Grimacing face\": \"Fazendo caretas face\",\n    \"Loudly crying face\": \"Alto chorando rosto\",\n    \"Face with open mouth\": \"Enfrentar com a boca aberta\",\n    \"Hushed face\": \"Flagrantes de rosto\",\n    \"Face with open mouth and cold sweat\": \"Enfrentar com a boca aberta e suor frio\",\n    \"Face screaming in fear\": \"Cara gritando de medo\",\n    \"Astonished face\": \"Cara de surpresa\",\n    \"Flushed face\": \"Rosto vermelho\",\n    \"Sleeping face\": \"O rosto de sono\",\n    \"Dizzy face\": \"Cara tonto\",\n    \"Face without mouth\": \"Rosto sem boca\",\n    \"Face with medical mask\": \"Rosto com m\\u00e1scara m\\u00e9dica\",\n\n    // Line breaker\n    \"Break\": \"Partir\",\n\n    // Math\n    \"Subscript\": \"Subscrito\",\n    \"Superscript\": \"Sobrescrito\",\n\n    // Full screen\n    \"Fullscreen\": \"Tela cheia\",\n\n    // Horizontal line\n    \"Insert Horizontal Line\": \"Inserir linha horizontal\",\n\n    // Clear formatting\n    \"Clear Formatting\": \"Remover formata\\u00e7\\u00e3o\",\n\n    // Save\n    \"Save\": \"\\u0053\\u0061\\u006c\\u0076\\u0065\",\n\n    // Undo, redo\n    \"Undo\": \"Anular\",\n    \"Redo\": \"Restaurar\",\n\n    // Select all\n    \"Select All\": \"Seleccionar tudo\",\n\n    // Code view\n    \"Code View\": \"Exibi\\u00e7\\u00e3o de c\\u00f3digo\",\n\n    // Quote\n    \"Quote\": \"Cita\\u00e7\\u00e3o\",\n    \"Increase\": \"Aumentar\",\n    \"Decrease\": \"Diminuir\",\n\n    // Quick Insert\n    \"Quick Insert\": \"Inser\\u00e7\\u00e3o r\\u00e1pida\",\n\n    // Spcial Characters\n    \"Special Characters\": \"Caracteres especiais\",\n    \"Latin\": \"Latino\",\n    \"Greek\": \"Grego\",\n    \"Cyrillic\": \"Cirílico\",\n    \"Punctuation\": \"Pontuação\",\n    \"Currency\": \"Moeda\",\n    \"Arrows\": \"Setas; flechas\",\n    \"Math\": \"Matemática\",\n    \"Misc\": \"Misc\",\n\n    // Print.\n    \"Print\": \"Impressão\",\n\n    // Spell Checker.\n    \"Spell Checker\": \"Verificador ortográfico\",\n\n    // Help\n    \"Help\": \"Socorro\",\n    \"Shortcuts\": \"Atalhos\",\n    \"Inline Editor\": \"Editor em linha\",\n    \"Show the editor\": \"Mostre o editor\",\n    \"Common actions\": \"Ações comuns\",\n    \"Copy\": \"Cópia de\",\n    \"Cut\": \"Cortar\",\n    \"Paste\": \"Colar\",\n    \"Basic Formatting\": \"Formatação básica\",\n    \"Increase quote level\": \"Aumentar o nível de cotação\",\n    \"Decrease quote level\": \"Diminuir o nível de cotação\",\n    \"Image / Video\": \"Imagem / video\",\n    \"Resize larger\": \"Redimensionar maior\",\n    \"Resize smaller\": \"Redimensionar menor\",\n    \"Table\": \"Tabela\",\n    \"Select table cell\": \"Selecione a célula da tabela\",\n    \"Extend selection one cell\": \"Ampliar a seleção de uma célula\",\n    \"Extend selection one row\": \"Ampliar a seleção uma linha\",\n    \"Navigation\": \"Navegação\",\n    \"Focus popup / toolbar\": \"Foco popup / barra de ferramentas\",\n    \"Return focus to previous position\": \"Retornar o foco para a posição anterior\",\n\n    // Embed.ly\n    \"Embed URL\": \"URL de inserção\",\n    \"Paste in a URL to embed\": \"Colar em url para incorporar\",\n\n    // Word Paste.\n    \"The pasted content is coming from a Microsoft Word document. Do you want to keep the format or clean it up?\": \"O conteúdo colado vem de um documento Microsoft Word. Você quer manter o formato ou limpá-lo?\",\n    \"Keep\": \"Guarda\",\n    \"Clean\": \"Limpar \\ limpo\",\n    \"Word Paste Detected\": \"Pasta de palavras detectada\"\n  },\n  direction: \"ltr\"\n};\n\n}));\n"
  },
  {
    "path": "src/main/resources/static/plugins/froala-editor/js/languages/ro.js",
    "content": "/*!\n * froala_editor v2.9.1 (https://www.froala.com/wysiwyg-editor)\n * License https://froala.com/wysiwyg-editor/terms/\n * Copyright 2014-2018 Froala Labs\n */\n\n(function (factory) {\n    if (typeof define === 'function' && define.amd) {\n        // AMD. Register as an anonymous module.\n        define(['jquery'], factory);\n    } else if (typeof module === 'object' && module.exports) {\n        // Node/CommonJS\n        module.exports = function( root, jQuery ) {\n            if ( jQuery === undefined ) {\n                // require('jQuery') returns a factory that requires window to\n                // build a jQuery instance, we normalize how we use modules\n                // that require this pattern but the window provided is a noop\n                // if it's defined (how jquery works)\n                if ( typeof window !== 'undefined' ) {\n                    jQuery = require('jquery');\n                }\n                else {\n                    jQuery = require('jquery')(root);\n                }\n            }\n            return factory(jQuery);\n        };\n    } else {\n        // Browser globals\n        factory(window.jQuery);\n    }\n}(function ($) {\n/**\n * Romanian\n */\n\n$.FE.LANGUAGE['ro'] = {\n  translation: {\n    // Place holder\n    \"Type something\": \"Tasteaz\\u0103 ceva\",\n\n    // Basic formatting\n    \"Bold\": \"\\u00cengro\\u015fat\",\n    \"Italic\": \"Cursiv\",\n    \"Underline\": \"Subliniat\",\n    \"Strikethrough\": \"T\\u0103iat\",\n\n    // Main buttons\n    \"Insert\": \"Insereaz\\u0103\",\n    \"Delete\": \"\\u015eterge\",\n    \"Cancel\": \"Anuleaz\\u0103\",\n    \"OK\": \"Ok\",\n    \"Back\": \"\\u00cenapoi\",\n    \"Remove\": \"\\u0218terge\",\n    \"More\": \"Mai mult\",\n    \"Update\": \"Actualizeaz\\u0103\",\n    \"Style\": \"Stil\",\n\n    // Font\n    \"Font Family\": \"Font\",\n    \"Font Size\": \"Dimensiune font\",\n\n    // Colors\n    \"Colors\": \"Culoare\",\n    \"Background\": \"Fundal\",\n    \"Text\": \"Text\",\n    \"HEX Color\": \"Culoare Hexa\",\n\n    // Paragraphs\n    \"Paragraph Format\": \"Format paragraf\",\n    \"Normal\": \"Normal\",\n    \"Code\": \"Cod\",\n    \"Heading 1\": \"Antet 1\",\n    \"Heading 2\": \"Antet 2\",\n    \"Heading 3\": \"Antet 3\",\n    \"Heading 4\": \"Antet 4\",\n\n    // Style\n    \"Paragraph Style\": \"Stil paragraf\",\n    \"Inline Style\": \"Stil \\u00een linie\",\n\n    // Alignment\n    \"Align\": \"Aliniere\",\n    \"Align Left\": \"Aliniere la st\\u00e2nga\",\n    \"Align Center\": \"Aliniere la centru\",\n    \"Align Right\": \"Aliniere la dreapta\",\n    \"Align Justify\": \"Aliniere pe toat\\u0103 l\\u0103\\u021bimea\",\n    \"None\": \"Niciunul\",\n\n    // Lists\n    \"Ordered List\": \"List\\u0103 ordonat\\u0103\",\n    \"Unordered List\": \"List\\u0103 neordonat\\u0103\",\n\n    // Indent\n    \"Decrease Indent\": \"De-indenteaz\\u0103\",\n    \"Increase Indent\": \"Indenteaz\\u0103\",\n\n    // Links\n    \"Insert Link\": \"Inserare link\",\n    \"Open in new tab\": \"Deschide \\u00EEn tab nou\",\n    \"Open Link\": \"Deschide link\",\n    \"Edit Link\": \"Editare link\",\n    \"Unlink\": \"\\u0218terge link-ul\",\n    \"Choose Link\": \"Alege link\",\n\n    // Images\n    \"Insert Image\": \"Inserare imagine\",\n    \"Upload Image\": \"\\u00cencarc\\u0103 imagine\",\n    \"By URL\": \"Dup\\u0103 URL\",\n    \"Browse\": \"R\\u0103sfoie\\u0219te\",\n    \"Drop image\": \"Trage imagine\",\n    \"or click\": \"sau f\\u0103 click\",\n    \"Manage Images\": \"Gestionare imagini\",\n    \"Loading\": \"Se \\u00eencarc\\u0103\",\n    \"Deleting\": \"Se \\u0219terge\",\n    \"Tags\": \"Etichete\",\n    \"Are you sure? Image will be deleted.\": \"Sunte\\u021bi sigur? Imaginea va fi \\u015ftears\\u0103.\",\n    \"Replace\": \"\\u00cenlocuire\",\n    \"Uploading\": \"Imaginea se \\u00eencarc\\u0103\",\n    \"Loading image\": \"Imaginea se \\u00eencarc\\u0103\",\n    \"Display\": \"Afi\\u0219are\",\n    \"Inline\": \"\\u00cen linie\",\n    \"Break Text\": \"Sparge text\",\n    \"Alternative Text\": \"Text alternativ\",\n    \"Change Size\": \"Modificare dimensiuni\",\n    \"Width\": \"L\\u0103\\u021bime\",\n    \"Height\": \"\\u00cen\\u0103l\\u021bime\",\n    \"Something went wrong. Please try again.\": \"Ceva n-a mers bine. V\\u0103 rug\\u0103m s\\u0103 \\u00eencerca\\u021bi din nou.\",\n    \"Image Caption\": \"Captura imaginii\",\n    \"Advanced Edit\": \"Editare avansată\",\n\n    // Video\n    \"Insert Video\": \"Inserare video\",\n    \"Embedded Code\": \"Cod embedded\",\n    \"Paste in a video URL\": \"Lipiți o adresă URL pentru video\",\n    \"Drop video\": \"Trage video\",\n    \"Your browser does not support HTML5 video.\": \"Browserul dvs. nu acceptă videoclipul html5.\",\n    \"Upload Video\": \"Încărcați videoclipul\",\n\n    // Tables\n    \"Insert Table\": \"Inserare tabel\",\n    \"Table Header\": \"Antet tabel\",\n    \"Remove Table\": \"\\u0218terge tabel\",\n    \"Table Style\": \"Stil tabel\",\n    \"Horizontal Align\": \"Aliniere orizontal\\u0103\",\n    \"Row\": \"Linie\",\n    \"Insert row above\": \"Insereaz\\u0103 linie \\u00eenainte\",\n    \"Insert row below\": \"Insereaz\\u0103 linie dup\\u0103\",\n    \"Delete row\": \"\\u015eterge linia\",\n    \"Column\": \"Coloan\\u0103\",\n    \"Insert column before\": \"Insereaz\\u0103 coloan\\u0103 \\u00eenainte\",\n    \"Insert column after\": \"Insereaz\\u0103 coloan\\u0103 dup\\u0103\",\n    \"Delete column\": \"\\u015eterge coloana\",\n    \"Cell\": \"Celula\",\n    \"Merge cells\": \"Une\\u015fte celulele\",\n    \"Horizontal split\": \"\\u00cemparte orizontal\",\n    \"Vertical split\": \"\\u00cemparte vertical\",\n    \"Cell Background\": \"Fundal celul\\u0103\",\n    \"Vertical Align\": \"Aliniere vertical\\u0103\",\n    \"Top\": \"Sus\",\n    \"Middle\": \"Mijloc\",\n    \"Bottom\": \"Jos\",\n    \"Align Top\": \"Aliniere sus\",\n    \"Align Middle\": \"Aliniere la mijloc\",\n    \"Align Bottom\": \"Aliniere jos\",\n    \"Cell Style\": \"Stil celul\\u0103\",\n\n    // Files\n    \"Upload File\": \"\\u00cenc\\u0103rca\\u021bi fi\\u0219ier\",\n    \"Drop file\": \"Trage fi\\u0219ier\",\n\n    // Emoticons\n    \"Emoticons\": \"Emoticoane\",\n    \"Grinning face\": \"Fa\\u021b\\u0103 r\\u00e2njind\",\n    \"Grinning face with smiling eyes\": \"Fa\\u021b\\u0103 r\\u00e2njind cu ochi z\\u00e2mbitori\",\n    \"Face with tears of joy\": \"Fa\\u021b\\u0103 cu lacrimi de bucurie\",\n    \"Smiling face with open mouth\": \"Fa\\u021b\\u0103 z\\u00e2mbitoare cu gura deschis\\u0103\",\n    \"Smiling face with open mouth and smiling eyes\": \"Fa\\u021b\\u0103 z\\u00e2mbitoare cu gura deschis\\u0103 \\u0219i ochi z\\u00e2mbitori\",\n    \"Smiling face with open mouth and cold sweat\": \"Fa\\u021b\\u0103 z\\u00e2mbitoare cu gura deschis\\u0103 şi sudoare rece\",\n    \"Smiling face with open mouth and tightly-closed eyes\": \"Fa\\u021b\\u0103 z\\u00e2mbitoare cu gura deschis\\u0103 şi ochii ferm \\u00eenchi\\u0219i\",\n    \"Smiling face with halo\": \"Fa\\u021b\\u0103 z\\u00e2mbitoare cu aur\\u0103\",\n    \"Smiling face with horns\": \"Fa\\u021b\\u0103 z\\u00e2mbitoare cu coarne\",\n    \"Winking face\": \"Fa\\u021b\\u0103 clipind\",\n    \"Smiling face with smiling eyes\": \"Fa\\u021b\\u0103 z\\u00e2mbitoare cu ochi z\\u00e2mbitori\",\n    \"Face savoring delicious food\": \"Fa\\u021b\\u0103 savur\\u00e2nd preparate delicioase\",\n    \"Relieved face\": \"Fa\\u021b\\u0103 u\\u0219urat\\u0103\",\n    \"Smiling face with heart-shaped eyes\": \"Fa\\u021b\\u0103 z\\u00e2mbitoare cu ochi in forma de inim\\u0103\",\n    \"Smiling face with sunglasses\": \"Fa\\u021b\\u0103 z\\u00e2mbitoare cu ochelari de soare\",\n    \"Smirking face\": \"Fa\\u021b\\u0103 cu sur\\u00e2s afectat\",\n    \"Neutral face\": \"Fa\\u021b\\u0103 neutr\\u0103\",\n    \"Expressionless face\": \"Fa\\u021b\\u0103 f\\u0103r\\u0103 expresie\",\n    \"Unamused face\": \"Fa\\u021b\\u0103 neamuzat\\u0103\",\n    \"Face with cold sweat\": \"Fa\\u021b\\u0103 cu sudoare rece\",\n    \"Pensive face\": \"Fa\\u021b\\u0103 medit\\u00e2nd\",\n    \"Confused face\": \"Fa\\u021b\\u0103 confuz\\u0103\",\n    \"Confounded face\": \"Fa\\u021b\\u0103 z\\u0103p\\u0103cit\\u0103\",\n    \"Kissing face\": \"Fa\\u021b\\u0103 s\\u0103rut\\u00e2nd\",\n    \"Face throwing a kiss\": \"Fa\\u021b\\u0103 arunc\\u00e2nd un s\\u0103rut\",\n    \"Kissing face with smiling eyes\": \"Fa\\u021b\\u0103 s\\u0103rut\\u00e2nd cu ochi z\\u00e2mbitori\",\n    \"Kissing face with closed eyes\": \"Fa\\u021b\\u0103 s\\u0103rut\\u00e2nd cu ochii \\u00eenchi\\u0219i\",\n    \"Face with stuck out tongue\": \"Fa\\u021b\\u0103 cu limba afar\\u0103\",\n    \"Face with stuck out tongue and winking eye\": \"Fa\\u021b\\u0103 cu limba scoas\\u0103 clipind\",\n    \"Face with stuck out tongue and tightly-closed eyes\": \"Fa\\u021b\\u0103 cu limba scoas\\u0103 \\u0219i ochii ferm \\u00eenchi\\u0219i\",\n    \"Disappointed face\": \"Fa\\u021b\\u0103 dezam\\u0103git\\u0103\",\n    \"Worried face\": \"Fa\\u021b\\u0103 \\u00eengrijorat\\u0103\",\n    \"Angry face\": \"Fa\\u021b\\u0103 nervoas\\u0103\",\n    \"Pouting face\": \"Fa\\u021b\\u0103 fierb\\u00e2nd\",\n    \"Crying face\": \"Fa\\u021b\\u0103 pl\\u00e2ng\\u00e2nd\",\n    \"Persevering face\": \"Fa\\u021b\\u0103 perseverent\\u0103\",\n    \"Face with look of triumph\": \"Fa\\u021b\\u0103 triumf\\u0103toare\",\n    \"Disappointed but relieved face\": \"Fa\\u021b\\u0103 dezam\\u0103git\\u0103 dar u\\u0219urat\\u0103\",\n    \"Frowning face with open mouth\": \"Fa\\u021b\\u0103 \\u00eencruntat\\u0103 cu gura deschis\\u0103\",\n    \"Anguished face\": \"Fa\\u021b\\u0103 \\u00eendurerat\\u0103\",\n    \"Fearful face\": \"Fa\\u021b\\u0103 tem\\u0103toare\",\n    \"Weary face\": \"Fa\\u021b\\u0103 \\u00eengrijorat\\u0103\",\n    \"Sleepy face\": \"Fa\\u021b\\u0103 adormit\\u0103\",\n    \"Tired face\": \"Fa\\u021b\\u0103 obosit\\u0103\",\n    \"Grimacing face\": \"Fa\\u021b\\u0103 cu grimas\\u0103\",\n    \"Loudly crying face\": \"Fa\\u021b\\u0103 pl\\u00e2ng\\u00e2nd zgomotos\",\n    \"Face with open mouth\": \"Fa\\u021b\\u0103 cu gura deschis\\u0103\",\n    \"Hushed face\": \"Fa\\u021b\\u0103 discret\\u0103\",\n    \"Face with open mouth and cold sweat\": \"Fa\\u021b\\u0103 cu gura deschis\\u0103 si sudoare rece\",\n    \"Face screaming in fear\": \"Fa\\u021b\\u0103 \\u021bip\\u00e2nd de fric\\u0103\",\n    \"Astonished face\": \"Fa\\u021b\\u0103 uimit\\u0103\",\n    \"Flushed face\": \"Fa\\u021b\\u0103 sp\\u0103lat\\u0103\",\n    \"Sleeping face\": \"Fa\\u021b\\u0103 adormit\\u0103\",\n    \"Dizzy face\": \"Fa\\u021b\\u0103 ame\\u021bit\\u0103\",\n    \"Face without mouth\": \"Fa\\u021b\\u0103 f\\u0103r\\u0103 gur\\u0103\",\n    \"Face with medical mask\": \"Fa\\u021b\\u0103 cu masc\\u0103 medical\\u0103\",\n\n    // Line breaker\n    \"Break\": \"Desparte\",\n\n    // Horizontal line\n    \"Insert Horizontal Line\": \"Inserare linie orizontal\\u0103\",\n\n    // Math\n    \"Subscript\": \"Indice\",\n    \"Superscript\": \"Exponent\",\n\n    // Full screen\n    \"Fullscreen\": \"Ecran complet\",\n\n    // Clear formatting\n    \"Clear Formatting\": \"Elimina\\u021bi formatarea\",\n\n    // Save\n    \"Save\": \"\\u0053\\u0061\\u006c\\u0076\\u0061\\u021b\\u0069\",\n\n    // Undo, redo\n    \"Undo\": \"Reexecut\\u0103\",\n    \"Redo\": \"Dezexecut\\u0103\",\n\n    // Select all\n    \"Select All\": \"Selecteaz\\u0103 tot\",\n\n    // Code view\n    \"Code View\": \"Vizualizare cod\",\n\n    // Quote\n    \"Quote\": \"Citat\",\n    \"Increase\": \"Indenteaz\\u0103\",\n    \"Decrease\": \"De-indenteaz\\u0103\",\n\n    // Quick Insert\n    \"Quick Insert\": \"Inserare rapid\\u0103\",\n\n    // Spcial Characters\n    \"Special Characters\": \"Caracterele speciale\",\n    \"Latin\": \"Latină\",\n    \"Greek\": \"Greacă\",\n    \"Cyrillic\": \"Chirilic\",\n    \"Punctuation\": \"Punctuaţie\",\n    \"Currency\": \"Valută\",\n    \"Arrows\": \"Săgeți\",\n    \"Math\": \"Matematică\",\n    \"Misc\": \"Diverse\",\n\n    // Print.\n    \"Print\": \"Imprimare\",\n\n    // Spell Checker.\n    \"Spell Checker\": \"Ortografie\",\n\n    // Help\n    \"Help\": \"Ajutor\",\n    \"Shortcuts\": \"Comenzi rapide\",\n    \"Inline Editor\": \"Editor inline\",\n    \"Show the editor\": \"Arătați editorul\",\n    \"Common actions\": \"Acțiuni comune\",\n    \"Copy\": \"Copie\",\n    \"Cut\": \"A taia\",\n    \"Paste\": \"Lipire\",\n    \"Basic Formatting\": \"Formatul de bază\",\n    \"Increase quote level\": \"Creșteți nivelul cotației\",\n    \"Decrease quote level\": \"Micșorați nivelul cotației\",\n    \"Image / Video\": \"Imagine / video\",\n    \"Resize larger\": \"Redimensionați mai mare\",\n    \"Resize smaller\": \"Redimensionați mai puțin\",\n    \"Table\": \"Tabel\",\n    \"Select table cell\": \"Selectați celula tabelă\",\n    \"Extend selection one cell\": \"Extindeți selecția la o celulă\",\n    \"Extend selection one row\": \"Extindeți selecția cu un rând\",\n    \"Navigation\": \"Navigare\",\n    \"Focus popup / toolbar\": \"Focus popup / bara de instrumente\",\n    \"Return focus to previous position\": \"Reveniți la poziția anterioară\",\n\n    // Embed.ly\n    \"Embed URL\": \"Încorporați url\",\n    \"Paste in a URL to embed\": \"Lipiți un URL pentru a-l încorpora\",\n\n    // Word Paste.\n    \"The pasted content is coming from a Microsoft Word document. Do you want to keep the format or clean it up?\": \"Conținutul lipit vine dintr-un document word Microsoft. Doriți să păstrați formatul sau să îl curățați?\",\n    \"Keep\": \"A pastra\",\n    \"Clean\": \"Curat\",\n    \"Word Paste Detected\": \"A fost detectată lipire din Word\"\n  },\n  direction: \"ltr\"\n};\n\n}));\n"
  },
  {
    "path": "src/main/resources/static/plugins/froala-editor/js/languages/ru.js",
    "content": "/*!\n * froala_editor v2.9.1 (https://www.froala.com/wysiwyg-editor)\n * License https://froala.com/wysiwyg-editor/terms/\n * Copyright 2014-2018 Froala Labs\n */\n\n(function (factory) {\n    if (typeof define === 'function' && define.amd) {\n        // AMD. Register as an anonymous module.\n        define(['jquery'], factory);\n    } else if (typeof module === 'object' && module.exports) {\n        // Node/CommonJS\n        module.exports = function( root, jQuery ) {\n            if ( jQuery === undefined ) {\n                // require('jQuery') returns a factory that requires window to\n                // build a jQuery instance, we normalize how we use modules\n                // that require this pattern but the window provided is a noop\n                // if it's defined (how jquery works)\n                if ( typeof window !== 'undefined' ) {\n                    jQuery = require('jquery');\n                }\n                else {\n                    jQuery = require('jquery')(root);\n                }\n            }\n            return factory(jQuery);\n        };\n    } else {\n        // Browser globals\n        factory(window.jQuery);\n    }\n}(function ($) {\n/**\n * Russian\n */\n\n$.FE.LANGUAGE['ru'] = {\n  translation: {\n    // Place holder\n    \"Type something\": \"\\u041d\\u0430\\u043f\\u0438\\u0448\\u0438\\u0442\\u0435 \\u0447\\u0442\\u043e\\u002d\\u043d\\u0438\\u0431\\u0443\\u0434\\u044c\",\n\n    // Basic formatting\n    \"Bold\": \"\\u0416\\u0438\\u0440\\u043d\\u044b\\u0439\",\n    \"Italic\": \"\\u041a\\u0443\\u0440\\u0441\\u0438\\u0432\",\n    \"Underline\": \"\\u041f\\u043e\\u0434\\u0447\\u0435\\u0440\\u043a\\u043d\\u0443\\u0442\\u044b\\u0439\",\n    \"Strikethrough\": \"\\u0417\\u0430\\u0447\\u0435\\u0440\\u043a\\u043d\\u0443\\u0442\\u044b\\u0439\",\n\n    // Main buttons\n    \"Insert\": \"\\u0412\\u0441\\u0442\\u0430\\u0432\\u0438\\u0442\\u044c\",\n    \"Delete\": \"\\u0423\\u0434\\u0430\\u043b\\u0438\\u0442\\u044c\",\n    \"Cancel\": \"\\u041e\\u0442\\u043c\\u0435\\u043d\\u0438\\u0442\\u044c\",\n    \"OK\": \"\\u041e\\u043a\",\n    \"Back\": \"\\u043d\\u0430\\u0437\\u0430\\u0434\",\n    \"Remove\": \"\\u0423\\u0434\\u0430\\u043b\\u0438\\u0442\\u044c\",\n    \"More\": \"\\u0411\\u043e\\u043b\\u044c\\u0448\\u0435\",\n    \"Update\": \"\\u041e\\u0431\\u043d\\u043e\\u0432\\u0438\\u0442\\u044c\",\n    \"Style\": \"\\u0421\\u0442\\u0438\\u043b\\u044c\",\n\n    // Font\n    \"Font Family\": \"\\u0428\\u0440\\u0438\\u0444\\u0442\",\n    \"Font Size\": \"\\u0420\\u0430\\u0437\\u043c\\u0435\\u0440 \\u0448\\u0440\\u0438\\u0444\\u0442\\u0430\",\n\n    // Colors\n    \"Colors\": \"\\u0426\\u0432\\u0435\\u0442\\u0430\",\n    \"Background\": \"\\u0424\\u043e\\u043d\",\n    \"Text\": \"\\u0422\\u0435\\u043a\\u0441\\u0442\",\n    \"HEX Color\": \"HEX цвет\",\n\n    // Paragraphs\n    \"Paragraph Format\": \"\\u0424\\u043e\\u0440\\u043c\\u0430\\u0442 \\u0430\\u0431\\u0437\\u0430\\u0446\\u0430\",\n    \"Normal\": \"\\u041d\\u043e\\u0440\\u043c\\u0430\\u043b\\u044c\\u043d\\u044b\\u0439\",\n    \"Code\": \"\\u041a\\u043e\\u0434\",\n    \"Heading 1\": \"\\u0417\\u0430\\u0433\\u043e\\u043b\\u043e\\u0432\\u043e\\u043a 1\",\n    \"Heading 2\": \"\\u0417\\u0430\\u0433\\u043e\\u043b\\u043e\\u0432\\u043e\\u043a 2\",\n    \"Heading 3\": \"\\u0417\\u0430\\u0433\\u043e\\u043b\\u043e\\u0432\\u043e\\u043a 3\",\n    \"Heading 4\": \"\\u0417\\u0430\\u0433\\u043e\\u043b\\u043e\\u0432\\u043e\\u043a 4\",\n\n    // Style\n    \"Paragraph Style\": \"\\u0421\\u0442\\u0438\\u043b\\u044c \\u0430\\u0431\\u0437\\u0430\\u0446\\u0430\",\n    \"Inline Style\": \"\\u0412\\u0441\\u0442\\u0440\\u043e\\u0435\\u043d\\u043d\\u044b\\u0439 \\u0441\\u0442\\u0438\\u043b\\u044c\",\n\n    // Alignment\n    \"Align\": \"\\u0412\\u044b\\u0440\\u043e\\u0432\\u043d\\u044f\\u0442\\u044c \\u043f\\u043e\",\n    \"Align Left\": \"\\u041f\\u043e \\u043b\\u0435\\u0432\\u043e\\u043c\\u0443 \\u043a\\u0440\\u0430\\u044e\",\n    \"Align Center\": \"\\u041f\\u043e \\u0446\\u0435\\u043d\\u0442\\u0440\\u0443\",\n    \"Align Right\": \"\\u041f\\u043e \\u043f\\u0440\\u0430\\u0432\\u043e\\u043c\\u0443 \\u043a\\u0440\\u0430\\u044e\",\n    \"Align Justify\": \"\\u041f\\u043e \\u0448\\u0438\\u0440\\u0438\\u043d\\u0435\",\n    \"None\": \"\\u041d\\u0438\\u043a\\u0430\\u043a\",\n\n    // Lists\n    \"Ordered List\": \"\\u041d\\u0443\\u043c\\u0435\\u0440\\u043e\\u0432\\u0430\\u043d\\u043d\\u044b\\u0439 \\u0441\\u043f\\u0438\\u0441\\u043e\\u043a\",\n    \"Unordered List\": \"\\u041c\\u0430\\u0440\\u043a\\u0438\\u0440\\u043e\\u0432\\u0430\\u043d\\u043d\\u044b\\u0439 \\u0441\\u043f\\u0438\\u0441\\u043e\\u043a\",\n\n    // Indent\n    \"Decrease Indent\": \"\\u0423\\u043c\\u0435\\u043d\\u044c\\u0448\\u0438\\u0442\\u044c \\u043e\\u0442\\u0441\\u0442\\u0443\\u043f\",\n    \"Increase Indent\": \"\\u0423\\u0432\\u0435\\u043b\\u0438\\u0447\\u0438\\u0442\\u044c \\u043e\\u0442\\u0441\\u0442\\u0443\\u043f\",\n\n    // Links\n    \"Insert Link\": \"\\u0412\\u0441\\u0442\\u0430\\u0432\\u0438\\u0442\\u044c \\u0441\\u0441\\u044b\\u043b\\u043a\\u0443\",\n    \"Open in new tab\": \"\\u041e\\u0442\\u043a\\u0440\\u044b\\u0442\\u044c \\u0432 \\u043d\\u043e\\u0432\\u043e\\u0439 \\u0432\\u043a\\u043b\\u0430\\u0434\\u043a\\u0435\",\n    \"Open Link\": \"\\u041f\\u0435\\u0440\\u0435\\u0439\\u0442\\u0438 \\u043f\\u043e \\u0441\\u0441\\u044b\\u043b\\u043a\\u0435\",\n    \"Edit Link\": \"\\u041e\\u0442\\u0440\\u0435\\u0434\\u0430\\u043a\\u0442\\u0438\\u0440\\u043e\\u0432\\u0430\\u0442\\u044c \\u0441\\u0441\\u044b\\u043b\\u043a\\u0443\",\n    \"Unlink\": \"\\u0423\\u0434\\u0430\\u043b\\u0438\\u0442\\u044c \\u0441\\u0441\\u044b\\u043b\\u043a\\u0443\",\n    \"Choose Link\": \"\\u0412\\u044b\\u0431\\u0435\\u0440\\u0438\\u0442\\u0435 \\u0441\\u0441\\u044b\\u043b\\u043a\\u0443\",\n\n    // Images\n    \"Insert Image\": \"\\u0412\\u0441\\u0442\\u0430\\u0432\\u0438\\u0442\\u044c \\u0438\\u0437\\u043e\\u0431\\u0440\\u0430\\u0436\\u0435\\u043d\\u0438\\u0435\",\n    \"Upload Image\": \"\\u0417\\u0430\\u0433\\u0440\\u0443\\u0437\\u0438\\u0442\\u044c \\u0438\\u0437\\u043e\\u0431\\u0440\\u0430\\u0436\\u0435\\u043d\\u0438\\u0435\",\n    \"By URL\": \"\\u041f\\u043e \\u0441\\u0441\\u044b\\u043b\\u043a\\u0435\",\n    \"Browse\": \"\\u0417\\u0430\\u0433\\u0440\\u0443\\u0436\\u0435\\u043d\\u043d\\u044b\\u0435 \\u0438\\u0437\\u043e\\u0431\\u0440\\u0430\\u0436\\u0435\\u043d\\u0438\\u044f\",\n    \"Drop image\": \"\\u041f\\u0435\\u0440\\u0435\\u043c\\u0435\\u0441\\u0442\\u0438\\u0442\\u0435 \\u0441\\u044e\\u0434\\u0430 \\u0438\\u0437\\u043e\\u0431\\u0440\\u0430\\u0436\\u0435\\u043d\\u0438\\u0435\",\n    \"or click\": \"\\u0438\\u043b\\u0438 \\u043d\\u0430\\u0436\\u043c\\u0438\\u0442\\u0435\",\n    \"Manage Images\": \"\\u0423\\u043f\\u0440\\u0430\\u0432\\u043b\\u0435\\u043d\\u0438\\u0435 \\u0438\\u0437\\u043e\\u0431\\u0440\\u0430\\u0436\\u0435\\u043d\\u0438\\u044f\\u043c\\u0438\",\n    \"Loading\": \"\\u0417\\u0430\\u0433\\u0440\\u0443\\u0437\\u043a\\u0430\",\n    \"Deleting\": \"\\u0423\\u0434\\u0430\\u043b\\u0435\\u043d\\u0438\\u0435\",\n    \"Tags\": \"\\u041a\\u043b\\u044e\\u0447\\u0435\\u0432\\u044b\\u0435 \\u0441\\u043b\\u043e\\u0432\\u0430\",\n    \"Are you sure? Image will be deleted.\": \"\\u0412\\u044b \\u0443\\u0432\\u0435\\u0440\\u0435\\u043d\\u044b? \\u0418\\u0437\\u043e\\u0431\\u0440\\u0430\\u0436\\u0435\\u043d\\u0438\\u0435 \\u0431\\u0443\\u0434\\u0435\\u0442 \\u0443\\u0434\\u0430\\u043b\\u0435\\u043d\\u043e.\",\n    \"Replace\": \"\\u0417\\u0430\\u043c\\u0435\\u043d\\u0438\\u0442\\u044c\",\n    \"Uploading\": \"\\u0417\\u0430\\u0433\\u0440\\u0443\\u0437\\u043a\\u0430\",\n    \"Loading image\": \"\\u0417\\u0430\\u0433\\u0440\\u0443\\u0437\\u043a\\u0430 \\u0438\\u0437\\u043e\\u0431\\u0440\\u0430\\u0436\\u0435\\u043d\\u0438\\u044f\",\n    \"Display\": \"\\u041f\\u043e\\u043b\\u043e\\u0436\\u0435\\u043d\\u0438\\u0435\",\n    \"Inline\": \"\\u041e\\u0431\\u0442\\u0435\\u043a\\u0430\\u043d\\u0438\\u0435 \\u0442\\u0435\\u043a\\u0441\\u0442\\u043e\\u043c\",\n    \"Break Text\": \"\\u0412\\u0441\\u0442\\u0440\\u043e\\u0435\\u043d\\u043d\\u043e\\u0435 \\u0432 \\u0442\\u0435\\u043a\\u0441\\u0442\",\n    \"Alternative Text\": \"\\u0410\\u043b\\u044c\\u0442\\u0435\\u0440\\u043d\\u0430\\u0442\\u0438\\u0432\\u043d\\u044b\\u0439 \\u0442\\u0435\\u043a\\u0441\\u0442\",\n    \"Change Size\": \"\\u0418\\u0437\\u043c\\u0435\\u043d\\u0438\\u0442\\u044c \\u0440\\u0430\\u0437\\u043c\\u0435\\u0440\",\n    \"Width\": \"\\u0428\\u0438\\u0440\\u0438\\u043d\\u0430\",\n    \"Height\": \"\\u0412\\u044b\\u0441\\u043e\\u0442\\u0430\",\n    \"Something went wrong. Please try again.\": \"\\u0427\\u0442\\u043e\\u002d\\u0442\\u043e \\u043f\\u043e\\u0448\\u043b\\u043e \\u043d\\u0435 \\u0442\\u0430\\u043a\\u002e \\u041f\\u043e\\u0436\\u0430\\u043b\\u0443\\u0439\\u0441\\u0442\\u0430\\u002c \\u043f\\u043e\\u043f\\u0440\\u043e\\u0431\\u0443\\u0439\\u0442\\u0435 \\u0435\\u0449\\u0435 \\u0440\\u0430\\u0437\\u002e\",\n    \"Image Caption\": \"Подпись к изображению\",\n    \"Advanced Edit\": \"Расширенное редактирование\",\n\n    // Video\n    \"Insert Video\": \"\\u0412\\u0441\\u0442\\u0430\\u0432\\u0438\\u0442\\u044c \\u0432\\u0438\\u0434\\u0435\\u043e\",\n    \"Embedded Code\": \"\\u0048\\u0054\\u004d\\u004c\\u002d\\u043a\\u043e\\u0434 \\u0434\\u043b\\u044f \\u0432\\u0441\\u0442\\u0430\\u0432\\u043a\\u0438\",\n    \"Paste in a video URL\": \"Вставить URL-адрес видео\",\n    \"Drop video\": \"Вставить видео\",\n    \"Your browser does not support HTML5 video.\": \"Ваш браузер не поддерживает html5 видео.\",\n    \"Upload Video\": \"Загрузить видео\",\n\n    // Tables\n    \"Insert Table\": \"\\u0412\\u0441\\u0442\\u0430\\u0432\\u0438\\u0442\\u044c \\u0442\\u0430\\u0431\\u043b\\u0438\\u0446\\u0443\",\n    \"Table Header\": \"\\u0417\\u0430\\u0433\\u043e\\u043b\\u043e\\u0432\\u043e\\u043a \\u0442\\u0430\\u0431\\u043b\\u0438\\u0446\\u044b\",\n    \"Remove Table\": \"\\u0423\\u0434\\u0430\\u043b\\u0438\\u0442\\u044c \\u0442\\u0430\\u0431\\u043b\\u0438\\u0446\\u0443\",\n    \"Table Style\": \"\\u0421\\u0442\\u0438\\u043b\\u044c \\u0442\\u0430\\u0431\\u043b\\u0438\\u0446\\u044b\",\n    \"Horizontal Align\": \"\\u0413\\u043e\\u0440\\u0438\\u0437\\u043e\\u043d\\u0442\\u0430\\u043b\\u044c\\u043d\\u043e\\u0435 \\u0432\\u044b\\u0440\\u0430\\u0432\\u043d\\u0438\\u0432\\u0430\\u043d\\u0438\\u0435\",\n    \"Row\": \"\\u0421\\u0442\\u0440\\u043e\\u043a\\u0430\",\n    \"Insert row above\": \"\\u0412\\u0441\\u0442\\u0430\\u0432\\u0438\\u0442\\u044c \\u0441\\u0442\\u0440\\u043e\\u043a\\u0443 \\u0441\\u0432\\u0435\\u0440\\u0445\\u0443\",\n    \"Insert row below\": \"\\u0412\\u0441\\u0442\\u0430\\u0432\\u0438\\u0442\\u044c \\u0441\\u0442\\u0440\\u043e\\u043a\\u0443 \\u0441\\u043d\\u0438\\u0437\\u0443\",\n    \"Delete row\": \"\\u0423\\u0434\\u0430\\u043b\\u0438\\u0442\\u044c \\u0441\\u0442\\u0440\\u043e\\u043a\\u0443\",\n    \"Column\": \"\\u0421\\u0442\\u043e\\u043b\\u0431\\u0435\\u0446\",\n    \"Insert column before\": \"\\u0412\\u0441\\u0442\\u0430\\u0432\\u0438\\u0442\\u044c \\u0441\\u0442\\u043e\\u043b\\u0431\\u0435\\u0446 \\u0441\\u043b\\u0435\\u0432\\u0430\",\n    \"Insert column after\": \"\\u0412\\u0441\\u0442\\u0430\\u0432\\u0438\\u0442\\u044c \\u0441\\u0442\\u043e\\u043b\\u0431\\u0435\\u0446 \\u0441\\u043f\\u0440\\u0430\\u0432\\u0430\",\n    \"Delete column\": \"\\u0423\\u0434\\u0430\\u043b\\u0438\\u0442\\u044c \\u0441\\u0442\\u043e\\u043b\\u0431\\u0435\\u0446\",\n    \"Cell\": \"\\u042f\\u0447\\u0435\\u0439\\u043a\\u0430\",\n    \"Merge cells\": \"\\u041e\\u0431\\u044a\\u0435\\u0434\\u0438\\u043d\\u0438\\u0442\\u044c \\u044f\\u0447\\u0435\\u0439\\u043a\\u0438\",\n    \"Horizontal split\": \"\\u0420\\u0430\\u0437\\u0434\\u0435\\u043b\\u0438\\u0442\\u044c \\u0433\\u043e\\u0440\\u0438\\u0437\\u043e\\u043d\\u0442\\u0430\\u043b\\u044c\\u043d\\u043e\",\n    \"Vertical split\": \"\\u0420\\u0430\\u0437\\u0434\\u0435\\u043b\\u0438\\u0442\\u044c \\u0432\\u0435\\u0440\\u0442\\u0438\\u043a\\u0430\\u043b\\u044c\\u043d\\u043e\",\n    \"Cell Background\": \"\\u0424\\u043e\\u043d \\u044f\\u0447\\u0435\\u0439\\u043a\\u0438\",\n    \"Vertical Align\": \"\\u0412\\u0435\\u0440\\u0442\\u0438\\u043a\\u0430\\u043b\\u044c\\u043d\\u043e\\u0435 \\u0432\\u044b\\u0440\\u0430\\u0432\\u043d\\u0438\\u0432\\u0430\\u043d\\u0438\\u0435\",\n    \"Top\": \"\\u041f\\u043e \\u0432\\u0435\\u0440\\u0445\\u043d\\u0435\\u043c\\u0443 \\u043a\\u0440\\u0430\\u044e\",\n    \"Middle\": \"\\u041f\\u043e\\u0441\\u0435\\u0440\\u0435\\u0434\\u0438\\u043d\\u0435\",\n    \"Bottom\": \"\\u041f\\u043e \\u043d\\u0438\\u0436\\u043d\\u0435\\u043c\\u0443 \\u043a\\u0440\\u0430\\u044e\",\n    \"Align Top\": \"\\u0412\\u044b\\u0440\\u043e\\u0432\\u043d\\u044f\\u0442\\u044c \\u043f\\u043e \\u0432\\u0435\\u0440\\u0445\\u043d\\u0435\\u043c\\u0443 \\u043a\\u0440\\u0430\\u044e\",\n    \"Align Middle\": \"\\u0412\\u044b\\u0440\\u043e\\u0432\\u043d\\u044f\\u0442\\u044c \\u043f\\u043e \\u0441\\u0435\\u0440\\u0435\\u0434\\u0438\\u043d\\u0435\",\n    \"Align Bottom\": \"\\u0412\\u044b\\u0440\\u043e\\u0432\\u043d\\u044f\\u0442\\u044c \\u043f\\u043e \\u043d\\u0438\\u0436\\u043d\\u0435\\u043c\\u0443 \\u043a\\u0440\\u0430\\u044e\",\n    \"Cell Style\": \"\\u0421\\u0442\\u0438\\u043b\\u044c \\u044f\\u0447\\u0435\\u0439\\u043a\\u0438\",\n\n    // Files\n    \"Upload File\": \"\\u0417\\u0430\\u0433\\u0440\\u0443\\u0437\\u0438\\u0442\\u044c \\u0444\\u0430\\u0439\\u043b\",\n    \"Drop file\": \"\\u041f\\u0435\\u0440\\u0435\\u043c\\u0435\\u0441\\u0442\\u0438\\u0442\\u0435 \\u0441\\u044e\\u0434\\u0430 \\u0444\\u0430\\u0439\\u043b\",\n\n    // Emoticons\n    \"Emoticons\": \"\\u0421\\u043c\\u0430\\u0439\\u043b\\u0438\\u043a\\u0438\",\n    \"Grinning face\": \"\\u0423\\u0445\\u043c\\u044b\\u043b\\u043a\\u0430 \\u043d\\u0430 \\u043b\\u0438\\u0446\\u0435\",\n    \"Grinning face with smiling eyes\": \"\\u0423\\u0441\\u043c\\u0435\\u0445\\u043d\\u0443\\u0432\\u0448\\u0435\\u0435\\u0441\\u044f \\u043b\\u0438\\u0446\\u043e \\u0441 \\u0443\\u043b\\u044b\\u0431\\u0430\\u044e\\u0449\\u0438\\u043c\\u0438\\u0441\\u044f \\u0433\\u043b\\u0430\\u0437\\u0430\\u043c\\u0438\",\n    \"Face with tears of joy\": \"\\u041b\\u0438\\u0446\\u043e \\u0441\\u043e \\u0441\\u043b\\u0435\\u0437\\u0430\\u043c\\u0438 \\u0440\\u0430\\u0434\\u043e\\u0441\\u0442\\u0438\",\n    \"Smiling face with open mouth\": \"\\u0423\\u043b\\u044b\\u0431\\u0430\\u044e\\u0449\\u0435\\u0435\\u0441\\u044f \\u043b\\u0438\\u0446\\u043e \\u0441 \\u043e\\u0442\\u043a\\u0440\\u044b\\u0442\\u044b\\u043c \\u0440\\u0442\\u043e\\u043c\",\n    \"Smiling face with open mouth and smiling eyes\": \"\\u0423\\u043b\\u044b\\u0431\\u0430\\u044f\\u0441\\u044c \\u043b\\u0438\\u0446\\u043e \\u0441 \\u043e\\u0442\\u043a\\u0440\\u044b\\u0442\\u044b\\u043c \\u0440\\u0442\\u043e\\u043c \\u0438 \\u0443\\u043b\\u044b\\u0431\\u0430\\u044e\\u0449\\u0438\\u0435\\u0441\\u044f \\u0433\\u043b\\u0430\\u0437\\u0430\",\n    \"Smiling face with open mouth and cold sweat\": \"\\u0423\\u043b\\u044b\\u0431\\u0430\\u044f\\u0441\\u044c \\u043b\\u0438\\u0446\\u043e \\u0441 \\u043e\\u0442\\u043a\\u0440\\u044b\\u0442\\u044b\\u043c \\u0440\\u0442\\u043e\\u043c \\u0438 \\u0445\\u043e\\u043b\\u043e\\u0434\\u043d\\u044b\\u0439 \\u043f\\u043e\\u0442\",\n    \"Smiling face with open mouth and tightly-closed eyes\": \"\\u0423\\u043b\\u044b\\u0431\\u0430\\u044f\\u0441\\u044c \\u043b\\u0438\\u0446\\u043e \\u0441 \\u043e\\u0442\\u043a\\u0440\\u044b\\u0442\\u044b\\u043c \\u0440\\u0442\\u043e\\u043c \\u0438 \\u043f\\u043b\\u043e\\u0442\\u043d\\u043e \\u0437\\u0430\\u043a\\u0440\\u044b\\u0442\\u044b\\u043c\\u0438 \\u0433\\u043b\\u0430\\u0437\\u0430\\u043c\\u0438\",\n    \"Smiling face with halo\": \"\\u0423\\u043b\\u044b\\u0431\\u0430\\u044f\\u0441\\u044c \\u043b\\u0438\\u0446\\u043e \\u0433\\u0430\\u043b\\u043e\",\n    \"Smiling face with horns\": \"\\u0423\\u043b\\u044b\\u0431\\u0430\\u044f\\u0441\\u044c \\u043b\\u0438\\u0446\\u043e \\u0441 \\u0440\\u043e\\u0433\\u0430\\u043c\\u0438\",\n    \"Winking face\": \"\\u043f\\u043e\\u0434\\u043c\\u0438\\u0433\\u0438\\u0432\\u0430\\u044f \\u043b\\u0438\\u0446\\u043e\",\n    \"Smiling face with smiling eyes\": \"\\u0423\\u043b\\u044b\\u0431\\u0430\\u044f\\u0441\\u044c \\u043b\\u0438\\u0446\\u043e \\u0441 \\u0443\\u043b\\u044b\\u0431\\u0430\\u044e\\u0449\\u0438\\u043c\\u0438\\u0441\\u044f \\u0433\\u043b\\u0430\\u0437\\u0430\\u043c\\u0438\",\n    \"Face savoring delicious food\": \"\\u041b\\u0438\\u0446\\u043e \\u0441\\u043c\\u0430\\u043a\\u0443\\u044e\\u0449\\u0435\\u0435 \\u0432\\u043a\\u0443\\u0441\\u043d\\u0443\\u044e \\u0435\\u0434\\u0443\",\n    \"Relieved face\": \"\\u041e\\u0441\\u0432\\u043e\\u0431\\u043e\\u0436\\u0434\\u0435\\u043d\\u044b \\u043b\\u0438\\u0446\\u043e\",\n    \"Smiling face with heart-shaped eyes\": \"\\u0423\\u043b\\u044b\\u0431\\u0430\\u044f\\u0441\\u044c \\u043b\\u0438\\u0446\\u043e \\u0432 \\u0444\\u043e\\u0440\\u043c\\u0435 \\u0441\\u0435\\u0440\\u0434\\u0446\\u0430 \\u0433\\u043b\\u0430\\u0437\\u0430\\u043c\\u0438\",\n    \"Smiling face with sunglasses\": \"\\u0423\\u043b\\u044b\\u0431\\u0430\\u044f\\u0441\\u044c \\u043b\\u0438\\u0446\\u043e \\u0441 \\u043e\\u0447\\u043a\\u0430\\u043c\\u0438\",\n    \"Smirking face\": \"\\u0423\\u0441\\u043c\\u0435\\u0445\\u043d\\u0443\\u0432\\u0448\\u0438\\u0441\\u044c \\u043b\\u0438\\u0446\\u043e\",\n    \"Neutral face\": \"\\u041e\\u0431\\u044b\\u0447\\u043d\\u044b\\u0439 \\u043b\\u0438\\u0446\\u043e\",\n    \"Expressionless face\": \"\\u041d\\u0435\\u0432\\u044b\\u0440\\u0430\\u0437\\u0438\\u0442\\u0435\\u043b\\u044c\\u043d\\u043e\\u0435 \\u043b\\u0438\\u0446\\u043e\",\n    \"Unamused face\": \"\\u041d\\u0435 \\u0441\\u043c\\u0435\\u0448\\u043d\\u043e \\u043b\\u0438\\u0446\\u043e\",\n    \"Face with cold sweat\": \"\\u041b\\u0438\\u0446\\u043e \\u0432 \\u0445\\u043e\\u043b\\u043e\\u0434\\u043d\\u043e\\u043c \\u043f\\u043e\\u0442\\u0443\",\n    \"Pensive face\": \"\\u0417\\u0430\\u0434\\u0443\\u043c\\u0447\\u0438\\u0432\\u044b\\u0439 \\u043b\\u0438\\u0446\\u043e\",\n    \"Confused face\": \"\\u0421\\u043c\\u0443\\u0449\\u0435\\u043d\\u043d\\u043e\\u0435 \\u043b\\u0438\\u0446\\u043e\",\n    \"Confounded face\": \"\\u041f\\u043e\\u0441\\u0442\\u044b\\u0434\\u043d\\u043e\\u0435 \\u043b\\u0438\\u0446\\u043e\",\n    \"Kissing face\": \"\\u041f\\u043e\\u0446\\u0435\\u043b\\u0443\\u0438 \\u043b\\u0438\\u0446\\u043e\",\n    \"Face throwing a kiss\": \"\\u041b\\u0438\\u0446\\u043e \\u043e\\u0442\\u043f\\u0440\\u0430\\u0432\\u043b\\u044f\\u044e\\u0449\\u0435\\u0435 \\u043f\\u043e\\u0446\\u0435\\u043b\\u0443\\u0439\",\n    \"Kissing face with smiling eyes\": \"\\u041f\\u043e\\u0446\\u0435\\u043b\\u0443\\u0438 \\u043b\\u0438\\u0446\\u043e \\u0441 \\u0443\\u043b\\u044b\\u0431\\u0430\\u044e\\u0449\\u0438\\u043c\\u0438\\u0441\\u044f \\u0433\\u043b\\u0430\\u0437\\u0430\\u043c\\u0438\",\n    \"Kissing face with closed eyes\": \"\\u041f\\u043e\\u0446\\u0435\\u043b\\u0443\\u0438 \\u043b\\u0438\\u0446\\u043e \\u0441 \\u0437\\u0430\\u043a\\u0440\\u044b\\u0442\\u044b\\u043c\\u0438 \\u0433\\u043b\\u0430\\u0437\\u0430\\u043c\\u0438\",\n    \"Face with stuck out tongue\": \"\\u041b\\u0438\\u0446\\u043e \\u0441 \\u0442\\u043e\\u0440\\u0447\\u0430\\u0449\\u0438\\u043c \\u044f\\u0437\\u044b\\u043a\\u043e\\u043c\",\n    \"Face with stuck out tongue and winking eye\": \"\\u041b\\u0438\\u0446\\u043e \\u0441 \\u0442\\u043e\\u0440\\u0447\\u0430\\u0449\\u0438\\u043c \\u044f\\u0437\\u044b\\u043a\\u043e\\u043c \\u0438 \\u043f\\u043e\\u0434\\u043c\\u0438\\u0433\\u0438\\u0432\\u0430\\u044e\\u0449\\u0438\\u043c \\u0433\\u043b\\u0430\\u0437\\u043e\\u043c\",\n    \"Face with stuck out tongue and tightly-closed eyes\": \"\\u041b\\u0438\\u0446\\u043e \\u0441 \\u0442\\u043e\\u0440\\u0447\\u0430\\u0449\\u0438\\u043c \\u044f\\u0437\\u044b\\u043a\\u043e\\u043c \\u0438 \\u043f\\u043b\\u043e\\u0442\\u043d\\u043e \\u0437\\u0430\\u043a\\u0440\\u044b\\u0442\\u044b\\u043c\\u0438 \\u0433\\u043b\\u0430\\u0437\\u0430\\u043c\\u0438\",\n    \"Disappointed face\": \"\\u0420\\u0430\\u0437\\u043e\\u0447\\u0430\\u0440\\u043e\\u0432\\u0430\\u043d\\u043d\\u043e\\u0435 \\u043b\\u0438\\u0446\\u043e\",\n    \"Worried face\": \"\\u041e\\u0431\\u0435\\u0441\\u043f\\u043e\\u043a\\u043e\\u0435\\u043d\\u043d\\u044b\\u0439 \\u043b\\u0438\\u0446\\u043e\",\n    \"Angry face\": \"\\u0417\\u043b\\u043e\\u0439 \\u043b\\u0438\\u0446\\u043e\",\n    \"Pouting face\": \"\\u041f\\u0443\\u0445\\u043b\\u044b\\u0435 \\u043b\\u0438\\u0446\\u043e\",\n    \"Crying face\": \"\\u041f\\u043b\\u0430\\u0447\\u0443\\u0449\\u0435\\u0435 \\u043b\\u0438\\u0446\\u043e\",\n    \"Persevering face\": \"\\u041d\\u0430\\u0441\\u0442\\u043e\\u0439\\u0447\\u0438\\u0432\\u0430\\u044f \\u043b\\u0438\\u0446\\u043e\",\n    \"Face with look of triumph\": \"\\u041b\\u0438\\u0446\\u043e \\u0441 \\u0432\\u0438\\u0434\\u043e\\u043c \\u0442\\u0440\\u0438\\u0443\\u043c\\u0444\\u0430\",\n    \"Disappointed but relieved face\": \"\\u0420\\u0430\\u0437\\u043e\\u0447\\u0430\\u0440\\u043e\\u0432\\u0430\\u043d\\u043d\\u043e\\u0435\\u002c \\u043d\\u043e \\u0441\\u043f\\u043e\\u043a\\u043e\\u0439\\u043d\\u043e\\u0435 \\u043b\\u0438\\u0446\\u043e\",\n    \"Frowning face with open mouth\": \"\\u041d\\u0430\\u0445\\u043c\\u0443\\u0440\\u0435\\u043d\\u043d\\u043e\\u0435 \\u043b\\u0438\\u0446\\u043e \\u0441 \\u043e\\u0442\\u043a\\u0440\\u044b\\u0442\\u044b\\u043c \\u0440\\u0442\\u043e\\u043c\",\n    \"Anguished face\": \"\\u043c\\u0443\\u0447\\u0438\\u0442\\u0435\\u043b\\u044c\\u043d\\u044b\\u0439 \\u043b\\u0438\\u0446\\u043e\",\n    \"Fearful face\": \"\\u041d\\u0430\\u043f\\u0443\\u0433\\u0430\\u043d\\u043d\\u043e\\u0435 \\u043b\\u0438\\u0446\\u043e\",\n    \"Weary face\": \"\\u0423\\u0441\\u0442\\u0430\\u043b\\u044b\\u0439 \\u043b\\u0438\\u0446\\u043e\",\n    \"Sleepy face\": \"\\u0441\\u043e\\u043d\\u043d\\u043e\\u0435 \\u043b\\u0438\\u0446\\u043e\",\n    \"Tired face\": \"\\u0423\\u0441\\u0442\\u0430\\u043b\\u0438 \\u043b\\u0438\\u0446\\u043e\",\n    \"Grimacing face\": \"\\u0413\\u0440\\u0438\\u043c\\u0430\\u0441\\u0430 \\u043d\\u0430 \\u043b\\u0438\\u0446\\u0435\",\n    \"Loudly crying face\": \"\\u0413\\u0440\\u043e\\u043c\\u043a\\u043e \\u043f\\u043b\\u0430\\u0447\\u0430 \\u043b\\u0438\\u0446\\u043e\",\n    \"Face with open mouth\": \"\\u041b\\u0438\\u0446\\u043e \\u0441 \\u043e\\u0442\\u043a\\u0440\\u044b\\u0442\\u044b\\u043c \\u0440\\u0442\\u043e\\u043c\",\n    \"Hushed face\": \"\\u0417\\u0430\\u0442\\u0438\\u0445\\u0448\\u0438\\u0439 \\u043b\\u0438\\u0446\\u043e\",\n    \"Face with open mouth and cold sweat\": \"\\u041b\\u0438\\u0446\\u043e \\u0441 \\u043e\\u0442\\u043a\\u0440\\u044b\\u0442\\u044b\\u043c \\u0440\\u0442\\u043e\\u043c \\u0432 \\u0445\\u043e\\u043b\\u043e\\u0434\\u043d\\u043e\\u043c \\u043f\\u043e\\u0442\\u0443\",\n    \"Face screaming in fear\": \"\\u041b\\u0438\\u0446\\u043e \\u043a\\u0440\\u0438\\u0447\\u0430\\u0449\\u0435\\u0435 \\u043e\\u0442 \\u0441\\u0442\\u0440\\u0430\\u0445\\u0430\",\n    \"Astonished face\": \"\\u0423\\u0434\\u0438\\u0432\\u043b\\u0435\\u043d\\u043d\\u043e\\u0435 \\u043b\\u0438\\u0446\\u043e\",\n    \"Flushed face\": \"\\u041f\\u043e\\u043a\\u0440\\u0430\\u0441\\u043d\\u0435\\u0432\\u0448\\u0435\\u0435 \\u043b\\u0438\\u0446\\u043e\",\n    \"Sleeping face\": \"\\u0421\\u043f\\u044f\\u0449\\u0430\\u044f \\u043b\\u0438\\u0446\\u043e\",\n    \"Dizzy face\": \"\\u0414\\u0438\\u0437\\u0437\\u0438 \\u043b\\u0438\\u0446\\u043e\",\n    \"Face without mouth\": \"\\u041b\\u0438\\u0446\\u043e \\u0431\\u0435\\u0437 \\u0440\\u0442\\u0430\",\n    \"Face with medical mask\": \"\\u041b\\u0438\\u0446\\u043e \\u0441 \\u043c\\u0435\\u0434\\u0438\\u0446\\u0438\\u043d\\u0441\\u043a\\u043e\\u0439 \\u043c\\u0430\\u0441\\u043a\\u043e\\u0439\",\n\n    // Line breaker\n    \"Break\": \"\\u041d\\u043e\\u0432\\u0430\\u044f \\u0441\\u0442\\u0440\\u043e\\u043a\\u0430\",\n\n    // Math\n    \"Subscript\": \"\\u041d\\u0438\\u0436\\u043d\\u0438\\u0439 \\u0438\\u043d\\u0434\\u0435\\u043a\\u0441\",\n    \"Superscript\": \"\\u0412\\u0435\\u0440\\u0445\\u043d\\u0438\\u0439 \\u0438\\u043d\\u0434\\u0435\\u043a\\u0441\",\n\n    // Full screen\n    \"Fullscreen\": \"\\u041d\\u0430 \\u0432\\u0435\\u0441\\u044c \\u044d\\u043a\\u0440\\u0430\\u043d\",\n\n    // Horizontal line\n    \"Insert Horizontal Line\": \"\\u0412\\u0441\\u0442\\u0430\\u0432\\u0438\\u0442\\u044c \\u0433\\u043e\\u0440\\u0438\\u0437\\u043e\\u043d\\u0442\\u0430\\u043b\\u044c\\u043d\\u0443\\u044e \\u043b\\u0438\\u043d\\u0438\\u044e\",\n\n    // Clear formatting\n    \"Clear Formatting\": \"\\u0423\\u0434\\u0430\\u043b\\u0438\\u0442\\u044c \\u0444\\u043e\\u0440\\u043c\\u0430\\u0442\\u0438\\u0440\\u043e\\u0432\\u0430\\u043d\\u0438\\u0435\",\n\n    // Save\n    \"Save\": \"\\u0421\\u043e\\u0445\\u0440\\u0430\\u043d\\u0438\\u0442\\u044c\",\n\n    // Undo, redo\n    \"Undo\": \"\\u041e\\u0442\\u043c\\u0435\\u043d\\u0438\\u0442\\u044c\",\n    \"Redo\": \"\\u041f\\u043e\\u0432\\u0442\\u043e\\u0440\\u0438\\u0442\\u044c\",\n\n    // Select all\n    \"Select All\": \"\\u0412\\u044b\\u0431\\u0440\\u0430\\u0442\\u044c \\u0432\\u0441\\u0451\",\n\n    // Code view\n    \"Code View\": \"\\u041f\\u0440\\u043e\\u0441\\u043c\\u043e\\u0442\\u0440 \\u0048\\u0054\\u004d\\u004c\\u002d\\u043a\\u043e\\u0434\\u0430\",\n\n    // Quote\n    \"Quote\": \"\\u0426\\u0438\\u0442\\u0430\\u0442\\u0430\",\n    \"Increase\": \"\\u0423\\u0432\\u0435\\u043b\\u0438\\u0447\\u0435\\u043d\\u0438\\u0435\",\n    \"Decrease\": \"\\u0421\\u043d\\u0438\\u0436\\u0435\\u043d\\u0438\\u0435\",\n\n    // Quick Insert\n    \"Quick Insert\": \"\\u0411\\u044b\\u0441\\u0442\\u0440\\u0430\\u044f \\u0432\\u0441\\u0442\\u0430\\u0432\\u043a\\u0430\",\n\n    // Spcial Characters\n    \"Special Characters\": \"Специальные символы\",\n    \"Latin\": \"Латинский\",\n    \"Greek\": \"Греческий\",\n    \"Cyrillic\": \"Кириллица\",\n    \"Punctuation\": \"Пунктуация\",\n    \"Currency\": \"Валюта\",\n    \"Arrows\": \"Стрелки\",\n    \"Math\": \"Математический\",\n    \"Misc\": \"Разное\",\n\n    // Print.\n    \"Print\": \"Распечатать\",\n\n    // Spell Checker.\n    \"Spell Checker\": \"Программа проверки орфографии\",\n\n    // Help\n    \"Help\": \"Помощь\",\n    \"Shortcuts\": \"Горячие клавищи\",\n    \"Inline Editor\": \"Встроенный редактор\",\n    \"Show the editor\": \"Показать редактор\",\n    \"Common actions\": \"Общие действия\",\n    \"Copy\": \"Копировать\",\n    \"Cut\": \"Вырезать\",\n    \"Paste\": \"Вставить\",\n    \"Basic Formatting\": \"Базовое форматирование\",\n    \"Increase quote level\": \"Увеличить уровень цитирования\",\n    \"Decrease quote level\": \"Уменьшить уровень цитирования\",\n    \"Image / Video\": \"Изображение / Видео\",\n    \"Resize larger\": \"Изменить размер\",\n    \"Resize smaller\": \"Уменьшить размер\",\n    \"Table\": \"Таблица\",\n    \"Select table cell\": \"Выбрать ячейку таблицы\",\n    \"Extend selection one cell\": \"Расширить выделение одной ячейки\",\n    \"Extend selection one row\": \"Расширить выделение на одну строку\",\n    \"Navigation\": \"Навигация\",\n    \"Focus popup / toolbar\": \"Сфокусировать всплывающее окно / панель инструментов\",\n    \"Return focus to previous position\": \"Вернуть фокус на предыдущую позицию\",\n\n    // Embed.ly\n    \"Embed URL\": \"Вставить URL-адрес\",\n    \"Paste in a URL to embed\": \"Вставить URL-адрес для встраивания\",\n\n    // Word Paste.\n    \"The pasted content is coming from a Microsoft Word document. Do you want to keep the format or clean it up?\": \"Вы пытаетесь вставить текст из документа Microsoft Word. Вы хотите сохранить или очистить формат?\",\n    \"Keep\": \"Сохранить\",\n    \"Clean\": \"Очистить\",\n    \"Word Paste Detected\": \"Обнаружена вставка отформатированного текста\"\n  },\n  direction: \"ltr\"\n};\n\n}));\n"
  },
  {
    "path": "src/main/resources/static/plugins/froala-editor/js/languages/sk.js",
    "content": "/*!\n * froala_editor v2.9.1 (https://www.froala.com/wysiwyg-editor)\n * License https://froala.com/wysiwyg-editor/terms/\n * Copyright 2014-2018 Froala Labs\n */\n\n(function (factory) {\n    if (typeof define === 'function' && define.amd) {\n        // AMD. Register as an anonymous module.\n        define(['jquery'], factory);\n    } else if (typeof module === 'object' && module.exports) {\n        // Node/CommonJS\n        module.exports = function( root, jQuery ) {\n            if ( jQuery === undefined ) {\n                // require('jQuery') returns a factory that requires window to\n                // build a jQuery instance, we normalize how we use modules\n                // that require this pattern but the window provided is a noop\n                // if it's defined (how jquery works)\n                if ( typeof window !== 'undefined' ) {\n                    jQuery = require('jquery');\n                }\n                else {\n                    jQuery = require('jquery')(root);\n                }\n            }\n            return factory(jQuery);\n        };\n    } else {\n        // Browser globals\n        factory(window.jQuery);\n    }\n}(function ($) {\n/**\n * Slovak\n */\n\n$.FE.LANGUAGE['sk'] = {\n  translation: {\n\n    // Place holder\n    \"Type something\": \"Nap\\u00ed\\u0161te hoci\\u010do\",\n\n    // Basic formatting\n    \"Bold\": \"Tu\\u010dn\\u00e9\",\n    \"Italic\": \"Kurz\\u00edva\",\n    \"Underline\": \"Pod\\u010diarknut\\u00e9\",\n    \"Strikethrough\": \"Pre\\u0161krtnut\\u00e9\",\n\n    // Main buttons\n    \"Insert\": \"Vlo\\u017ei\\u0165\",\n    \"Delete\": \"Vymaza\\u0165\",\n    \"Cancel\": \"Zru\\u0161i\\u0165\",\n    \"OK\": \"OK\",\n    \"Back\": \"Sp\\u00e4\\u0165\",\n    \"Remove\": \"Odstr\\u00e1ni\\u0165\",\n    \"More\": \"Viac\",\n    \"Update\": \"Aktualizova\\u0165\",\n    \"Style\": \"\\u0165t\\u00fdl\",\n\n    // Font\n    \"Font Family\": \"Typ p\\u00edsma\",\n    \"Font Size\": \"Ve\\u013ekos\\u0165 p\\u00edsma\",\n\n    // Colors\n    \"Colors\": \"Farby\",\n    \"Background\": \"Pozadie\",\n    \"Text\": \"Text\",\n    \"HEX Color\": \"Hex Farby\",\n\n    // Paragraphs\n    \"Paragraph Format\": \"Form\\u00e1t odstavca\",\n    \"Normal\": \"Norm\\u00e1lne\",\n    \"Code\": \"K\\u00f3d\",\n    \"Heading 1\": \"Nadpis 1\",\n    \"Heading 2\": \"Nadpis 2\",\n    \"Heading 3\": \"Nadpis 3\",\n    \"Heading 4\": \"Nadpis 4\",\n\n    // Style\n    \"Paragraph Style\": \"\\u0165t\\u00fdl odstavca\",\n    \"Inline Style\": \"Inline \\u0161t\\u00fdl\",\n\n    // Alignment\n    \"Align\": \"Zarovnanie\",\n    \"Align Left\": \"Zarovna\\u0165 v\\u013eavo\",\n    \"Align Center\": \"Zarovna\\u0165 na stred\",\n    \"Align Right\": \"Zarovna\\u0165 vpravo\",\n    \"Align Justify\": \"Zarovna\\u0165 do bloku\",\n    \"None\": \"\\u017diadne\",\n\n    // Lists\n    \"Ordered List\": \"\\u010c\\u00edslovan\\u00fd zoznam\",\n    \"Unordered List\": \"Ne\\u010d\\u00edslovan\\u00fd zoznam\",\n\n    // Indent\n    \"Decrease Indent\": \"Zmen\\u0161i\\u0165 odsadenie\",\n    \"Increase Indent\": \"Zv\\u00e4\\u010d\\u0161i\\u0165 odsadenie\",\n\n    // Links\n    \"Insert Link\": \"Vlo\\u017ei\\u0165 odkaz\",\n    \"Open in new tab\": \"Otvori\\u0165 v novom okne\",\n    \"Open Link\": \"Otvori\\u0165 odkaz\",\n    \"Edit Link\": \"Upravi\\u0165 odkaz\",\n    \"Unlink\": \"Odstr\\u00e1ni\\u0165 odkaz\",\n    \"Choose Link\": \"Vyberte odkaz\",\n\n    // Images\n    \"Insert Image\": \"Vlo\\u017ei\\u0165 obr\\u00e1zok\",\n    \"Upload Image\": \"Nahra\\u0165 obr\\u00e1zok\",\n    \"By URL\": \"Z URL adresy\",\n    \"Browse\": \"Vybra\\u0165\",\n    \"Drop image\": \"Pretiahnite obr\\u00e1zok do tohto miesta\",\n    \"or click\": \"alebo kliknite a vlo\\u017ete\",\n    \"Manage Images\": \"Spr\\u00e1va obr\\u00e1zkov\",\n    \"Loading\": \"Nahr\\u00e1vam\",\n    \"Deleting\": \"Odstra\\u0148ujem\",\n    \"Tags\": \"Zna\\u010dky\",\n    \"Are you sure? Image will be deleted.\": \"Ste si ist\\u00fd? Obr\\u00e1zok bude odstranen\\u00fd.\",\n    \"Replace\": \"Vymeni\\u0165\",\n    \"Uploading\": \"Nahr\\u00e1vam\",\n    \"Loading image\": \"Obr\\u00e1zok se na\\u010d\\u00edtav\\u00e1\",\n    \"Display\": \"Zobrazi\\u0165\",\n    \"Inline\": \"Inline\",\n    \"Break Text\": \"Zalomenie textu\",\n    \"Alternative Text\": \"Alternat\\u00edvny text\",\n    \"Change Size\": \"Zmeni\\u0165 ve\\u013ekos\\u0165\",\n    \"Width\": \"\\u0165\\u00edrka\",\n    \"Height\": \"V\\u00fd\\u0161ka\",\n    \"Something went wrong. Please try again.\": \"Nie\\u010do sa pokazilo. Pros\\u00edm, sk\\u00faste to znova.\",\n    \"Image Caption\": \"Titulok obrázka\",\n    \"Advanced Edit\": \"Pokročilá úprava\",\n\n    // Video\n    \"Insert Video\": \"Vlo\\u017ei\\u0165 video\",\n    \"Embedded Code\": \"Vlo\\u017een\\u00fd k\\u00f3d\",\n    \"Paste in a video URL\": \"Vložte do adresy URL videa\",\n    \"Drop video\": \"Drop video\",\n    \"Your browser does not support HTML5 video.\": \"Váš prehliadač nepodporuje video html5.\",\n    \"Upload Video\": \"Nahrať video\",\n\n    // Tables\n    \"Insert Table\": \"Vlo\\u017ei\\u0165 tabu\\u013eku\",\n    \"Table Header\": \"Hlavi\\u010dka tabu\\u013eky\",\n    \"Remove Table\": \"Odstrani\\u0165 tabu\\u013eku\",\n    \"Table Style\": \"\\u0165t\\u00fdl tabu\\u013eky\",\n    \"Horizontal Align\": \"Horizont\\u00e1lne zarovnanie\",\n    \"Row\": \"Riadok\",\n    \"Insert row above\": \"Vlo\\u017ei\\u0165 riadok nad\",\n    \"Insert row below\": \"Vlo\\u017ei\\u0165 riadok pod\",\n    \"Delete row\": \"Odstrani\\u0165 riadok\",\n    \"Column\": \"St\\u013apec\",\n    \"Insert column before\": \"Vlo\\u017ei\\u0165 st\\u013apec v\\u013eavo\",\n    \"Insert column after\": \"Vlo\\u017ei\\u0165 st\\u013apec vpravo\",\n    \"Delete column\": \"Odstrani\\u0165 st\\u013apec\",\n    \"Cell\": \"Bunka\",\n    \"Merge cells\": \"Zl\\u00fa\\u010di\\u0165 bunky\",\n    \"Horizontal split\": \"Horizont\\u00e1lne rozdelenie\",\n    \"Vertical split\": \"Vertik\\u00e1lne rozdelenie\",\n    \"Cell Background\": \"Bunka pozadia\",\n    \"Vertical Align\": \"Vertik\\u00e1lne zarovn\\u00e1n\\u00ed\",\n    \"Top\": \"Vrch\",\n    \"Middle\": \"Stred\",\n    \"Bottom\": \"Spodok\",\n    \"Align Top\": \"Zarovnat na vrch\",\n    \"Align Middle\": \"Zarovnat na stred\",\n    \"Align Bottom\": \"Zarovnat na spodok\",\n    \"Cell Style\": \"\\u0165t\\u00fdl bunky\",\n\n    // Files\n    \"Upload File\": \"Nahra\\u0165 s\\u00fabor\",\n    \"Drop file\": \"Vlo\\u017ete s\\u00fabor sem\",\n\n    // Emoticons\n    \"Emoticons\": \"Emotikony\",\n    \"Grinning face\": \"Tv\\u00e1r s \\u00fasmevom\",\n    \"Grinning face with smiling eyes\": \"Tv\\u00e1r s \\u00fasmevom a o\\u010dami\",\n    \"Face with tears of joy\": \"Tv\\u00e1r so slzamy radosti\",\n    \"Smiling face with open mouth\": \"Usmievaj\\u00faci sa tv\\u00e1r s otvoren\\u00fdmi \\u00fastami\",\n    \"Smiling face with open mouth and smiling eyes\": \"Usmievaj\\u00faci sa tv\\u00e1r s otvoren\\u00fdmi \\u00fastami a o\\u010dami\",\n    \"Smiling face with open mouth and cold sweat\": \"Usmievaj\\u00faci sa tv\\u00e1r s otvoren\\u00fdmi \\u00fastami a studen\\u00fd pot\",\n    \"Smiling face with open mouth and tightly-closed eyes\": \"Usmievaj\\u00faci sa tv\\u00e1r s otvoren\\u00fdmi \\u00fastami a zavret\\u00fdmi o\\u010dami\",\n    \"Smiling face with halo\": \"Usmievaj\\u00faci sa tv\\u00e1r s halo\",\n    \"Smiling face with horns\": \"Usmievaj\\u00faci sa tv\\u00e1r s rohmi\",\n    \"Winking face\": \"Mrkaj\\u00faca tv\\u00e1r\",\n    \"Smiling face with smiling eyes\": \"Usmievaj\\u00faci sa tv\\u00e1r a o\\u010dami\",\n    \"Face savoring delicious food\": \"Tv\\u00e1r vychutn\\u00e1vaj\\u00faca si chutn\\u00e9 jedlo\",\n    \"Relieved face\": \"Spokojn\\u00e1 tv\\u00e1r\",\n    \"Smiling face with heart-shaped eyes\": \"Usmievaj\\u00faci sa tv\\u00e1r s o\\u010dami v tvare srdca\",\n    \"Smiling face with sunglasses\": \"Usmievaj\\u00faci sa tv\\u00e1r so slne\\u010dn\\u00fdmi okuliarmi\",\n    \"Smirking face\": \"U\\u0161k\\u0155\\u0148aj\\u00faca sa tv\\u00e1r\",\n    \"Neutral face\": \"Neutr\\u00e1lna tva\\u0155\",\n    \"Expressionless face\": \"Bezv\\u00fdrazn\\u00e1 tv\\u00e1r\",\n    \"Unamused face\": \"Nepobaven\\u00e1 tv\\u00e1r\",\n    \"Face with cold sweat\": \"Tv\\u00e1r so studen\\u00fdm potom\",\n    \"Pensive face\": \"Zamyslen\\u00e1 tv\\u00e1r\",\n    \"Confused face\": \"Zmeten\\u00e1 tv\\u00e1r\",\n    \"Confounded face\": \"Nahnevan\\u00e1 tv\\u00e1r\",\n    \"Kissing face\": \"Bozkavaj\\u00faca tv\\u00e1r\",\n    \"Face throwing a kiss\": \"Tv\\u00e1r hadzaj\\u00faca pusu\",\n    \"Kissing face with smiling eyes\": \"Bozk\\u00e1vaj\\u00faca tv\\u00e1r s o\\u010dami a \\u00fasmevom\",\n    \"Kissing face with closed eyes\": \"Bozk\\u00e1vaj\\u00faca tv\\u00e1r so zavret\\u00fdmi o\\u010dami\",\n    \"Face with stuck out tongue\": \"Tv\\u00e1r s vyplazen\\u00fdm jazykom\",\n    \"Face with stuck out tongue and winking eye\": \"Mrkaj\\u00faca tv\\u00e1r s vyplazen\\u00fdm jazykom\",\n    \"Face with stuck out tongue and tightly-closed eyes\": \"Tv\\u00e1r s vyplazen\\u00fdm jazykom a privret\\u00fdmi o\\u010dami\",\n    \"Disappointed face\": \"Sklaman\\u00e1 tv\\u00e1r\",\n    \"Worried face\": \"Obavaj\\u00faca se tv\\u00e1r\",\n    \"Angry face\": \"Nahnevan\\u00e1 tv\\u00e1r\",\n    \"Pouting face\": \"Na\\u0161pulen\\u00e1 tv\\u00e1r\",\n    \"Crying face\": \"Pla\\u010d\\u00faca tv\\u00e1r\",\n    \"Persevering face\": \"H\\u00fa\\u017eevnat\\u00e1 tv\\u00e1r\",\n    \"Face with look of triumph\": \"Tv\\u00e1r s v\\u00fdrazom v\\u00ed\\u0165aza\",\n    \"Disappointed but relieved face\": \"Sklaman\\u00e1 ale spokojn\\u00e1 tv\\u00e1r\",\n    \"Frowning face with open mouth\": \"Zamra\\u010den\\u00e1 tvar s otvoren\\u00fdmi \\u00fastami\",\n    \"Anguished face\": \"\\u00dazkostn\\u00e1 tv\\u00e1r\",\n    \"Fearful face\": \"Strachuj\\u00faca sa tv\\u00e1r\",\n    \"Weary face\": \"Unaven\\u00e1 tv\\u00e1r\",\n    \"Sleepy face\": \"Ospal\\u00e1 tv\\u00e1r\",\n    \"Tired face\": \"Unaven\\u00e1 tv\\u00e1r\",\n    \"Grimacing face\": \"Sv\\u00e1r s grimasou\",\n    \"Loudly crying face\": \"Nahlas pl\\u00e1\\u010d\\u00faca tv\\u00e1r\",\n    \"Face with open mouth\": \"Tv\\u00e1r s otvoren\\u00fdm \\u00fastami\",\n    \"Hushed face\": \"Ml\\u010diaca tv\\u00e1r\",\n    \"Face with open mouth and cold sweat\": \"Tv\\u00e1r s otvoren\\u00fdmi \\u00fastami a studen\\u00fdm potom\",\n    \"Face screaming in fear\": \"Tv\\u00e1r kri\\u010diaca strachom\",\n    \"Astonished face\": \"Tv\\u00e1r v \\u00fa\\u017ease\",\n    \"Flushed face\": \"S\\u010dervenanie v tv\\u00e1ri\",\n    \"Sleeping face\": \"Spiaca tv\\u00e1r\",\n    \"Dizzy face\": \"Tv\\u00e1r vyjadruj\\u00faca z\\u00e1vrat\",\n    \"Face without mouth\": \"Tv\\u00e1r bez \\u00fast\",\n    \"Face with medical mask\": \"Tv\\u00e1r s lek\\u00e1rskou maskou\",\n\n    // Line breaker\n    \"Break\": \"Zalomenie\",\n\n    // Math\n    \"Subscript\": \"Doln\\u00fd index\",\n    \"Superscript\": \"Horn\\u00fd index\",\n\n    // Full screen\n    \"Fullscreen\": \"Cel\\u00e1 obrazovka\",\n\n    // Horizontal line\n    \"Insert Horizontal Line\": \"Vlo\\u017ei\\u0165 vodorovn\\u00fa \\u010diaru\",\n\n    // Clear formatting\n    \"Clear Formatting\": \"Vymaza\\u0165 formatovanie\",\n\n    // Save\n    \"Save\": \"\\u0055\\u006c\\u006f\\u017e\\u0069\\u0165\",\n\n    // Undo, redo\n    \"Undo\": \"Sp\\u00e4\\u0165\",\n    \"Redo\": \"Znova\",\n\n    // Select all\n    \"Select All\": \"Vybra\\u0165 v\\u0161etko\",\n\n    // Code view\n    \"Code View\": \"Zobrazi\\u0165 html k\\u00f3d\",\n\n    // Quote\n    \"Quote\": \"Cit\\u00e1t\",\n    \"Increase\": \"Nav\\u00fd\\u0161i\\u0165\",\n    \"Decrease\": \"Zn\\u00ed\\u017ei\\u0165\",\n\n    // Quick Insert\n    \"Quick Insert\": \"Vlo\\u017ei\\u0165 zr\\u00fdchlene\",\n\n    // Spcial Characters\n    \"Special Characters\": \"Špeciálne znaky\",\n    \"Latin\": \"Latinčina\",\n    \"Greek\": \"Grécky\",\n    \"Cyrillic\": \"Cyriliky\",\n    \"Punctuation\": \"Interpunkcia\",\n    \"Currency\": \"Mena\",\n    \"Arrows\": \"Šípky\",\n    \"Math\": \"Matematika\",\n    \"Misc\": \"Misc\",\n\n    // Print.\n    \"Print\": \"Vytlačiť\",\n\n    // Spell Checker.\n    \"Spell Checker\": \"Kontrola pravopisu\",\n\n    // Help\n    \"Help\": \"Pomoc\",\n    \"Shortcuts\": \"Skratky\",\n    \"Inline Editor\": \"Inline editor\",\n    \"Show the editor\": \"Zobraziť editor\",\n    \"Common actions\": \"Spoločné akcie\",\n    \"Copy\": \"Kópie\",\n    \"Cut\": \"Rez\",\n    \"Paste\": \"Pasta\",\n    \"Basic Formatting\": \"Základné formátovanie\",\n    \"Increase quote level\": \"Zvýšiť úroveň cenovej ponuky\",\n    \"Decrease quote level\": \"Znížiť úroveň cenovej ponuky\",\n    \"Image / Video\": \"Obrázok / video\",\n    \"Resize larger\": \"Zmena veľkosti\",\n    \"Resize smaller\": \"Meniť veľkosť\",\n    \"Table\": \"Stôl\",\n    \"Select table cell\": \"Vyberte bunku tabuľky\",\n    \"Extend selection one cell\": \"Rozšíriť výber jednej bunky\",\n    \"Extend selection one row\": \"Rozšíriť výber o jeden riadok\",\n    \"Navigation\": \"Navigácia\",\n    \"Focus popup / toolbar\": \"Zameranie / panel s nástrojmi\",\n    \"Return focus to previous position\": \"Vrátiť zaostrenie na predchádzajúcu pozíciu\",\n\n    // Embed.ly\n    \"Embed URL\": \"Vložiť adresu URL\",\n    \"Paste in a URL to embed\": \"Vložte do adresy URL, ktorú chcete vložiť\",\n\n    // Word Paste.\n    \"The pasted content is coming from a Microsoft Word document. Do you want to keep the format or clean it up?\": \"Vložený obsah vychádza z dokumentu Microsoft Word. chcete formát uchovať alebo ho vyčistiť?\",\n    \"Keep\": \"Zachovať\",\n    \"Clean\": \"Čistý\",\n    \"Word Paste Detected\": \"Slovná vložka bola zistená\"\n  },\n  direction: \"ltr\"\n};\n}));\n"
  },
  {
    "path": "src/main/resources/static/plugins/froala-editor/js/languages/sr.js",
    "content": "/*!\n * froala_editor v2.9.1 (https://www.froala.com/wysiwyg-editor)\n * License https://froala.com/wysiwyg-editor/terms/\n * Copyright 2014-2018 Froala Labs\n */\n\n(function (factory) {\n    if (typeof define === 'function' && define.amd) {\n        // AMD. Register as an anonymous module.\n        define(['jquery'], factory);\n    } else if (typeof module === 'object' && module.exports) {\n        // Node/CommonJS\n        module.exports = function( root, jQuery ) {\n            if ( jQuery === undefined ) {\n                // require('jQuery') returns a factory that requires window to\n                // build a jQuery instance, we normalize how we use modules\n                // that require this pattern but the window provided is a noop\n                // if it's defined (how jquery works)\n                if ( typeof window !== 'undefined' ) {\n                    jQuery = require('jquery');\n                }\n                else {\n                    jQuery = require('jquery')(root);\n                }\n            }\n            return factory(jQuery);\n        };\n    } else {\n        // Browser globals\n        factory(window.jQuery);\n    }\n}(function ($) {\n/**\n * Serbian (Latin)\n */\n\n$.FE.LANGUAGE['sr'] = {\n  translation: {\n    // Place holder\n    \"Type something\": \"Ukucajte ne\\u0161tp\",\n\n    // Basic formatting\n    \"Bold\": \"Podebljan\",\n    \"Italic\": \"Isko\\u0161en\",\n    \"Underline\": \"Podvu\\u010deno\",\n    \"Strikethrough\": \"Precrtan\",\n\n    // Main buttons\n    \"Insert\": \"Umetanje\",\n    \"Delete\": \"Izbri\\u0161i\",\n    \"Cancel\": \"Otkazivanje\",\n    \"OK\": \"Ok\",\n    \"Back\": \"Nazad\",\n    \"Remove\": \"Uklonite\",\n    \"More\": \"Vi\\u0161e\",\n    \"Update\": \"A\\u017euriranje\",\n    \"Style\": \"Stil\",\n\n    // Font\n    \"Font Family\": \"Odaberi font\",\n    \"Font Size\": \"Veli\\u010dina fontova\",\n\n    // Colors\n    \"Colors\": \"Boje\",\n    \"Background\": \"Pozadina\",\n    \"Text\": \"Tekst\",\n    \"HEX Color\": \"HEX boje\",\n\n    // Paragraphs\n    \"Paragraph Format\": \"Format pasusa\",\n    \"Normal\": \"Normalno\",\n    \"Code\": \"\\u0160ifra\",\n    \"Heading 1\": \"Naslov 1\",\n    \"Heading 2\": \"Naslov 2\",\n    \"Heading 3\": \"Naslov 3\",\n    \"Heading 4\": \"Naslov 4\",\n\n    // Style\n    \"Paragraph Style\": \"Stil pasusa\",\n    \"Inline Style\": \"Umetnutih stilova\",\n\n    // Alignment\n    \"Align\": \"Poravnavanje\",\n    \"Align Left\": \"Poravnaj levo\",\n    \"Align Center\": \"Poravnaj u centru\",\n    \"Align Right\": \"Poravnaj desno\",\n    \"Align Justify\": \"Obostrano poravnavanje\",\n    \"None\": \"Niko nije\",\n\n    // Lists\n    \"Ordered List\": \"Ure\\u0111enih lista\",\n    \"Unordered List\": \"Neure\\u0111enu lista\",\n\n    // Indent\n    \"Decrease Indent\": \"Smanjivanje uvla\\u010denja\",\n    \"Increase Indent\": \"Pove\\u0107avanje uvla\\u010denja\",\n\n    // Links\n    \"Insert Link\": \"Umetni vezu\",\n    \"Open in new tab\": \"Otvori na novoj kartici\",\n    \"Open Link\": \"Otvori vezu\",\n    \"Edit Link\": \"Ure\\u0111ivanje veze\",\n    \"Unlink\": \"Ukloni vezu\",\n    \"Choose Link\": \"Odaberite vezu\",\n\n    // Images\n    \"Insert Image\": \"Umetanje slike\",\n    \"Upload Image\": \"Otpremanje slika\",\n    \"By URL\": \"Po URL adresi\",\n    \"Browse\": \"Potra\\u017ei\",\n    \"Drop image\": \"Baci sliku\",\n    \"or click\": \"ili kliknite na dugme\",\n    \"Manage Images\": \"Upravljanje slike\",\n    \"Loading\": \"U\\u010ditavanje\",\n    \"Deleting\": \"Brisanje\",\n    \"Tags\": \"Oznake\",\n    \"Are you sure? Image will be deleted.\": \"Jesi siguran? Slika \\u0107e biti izbrisana.\",\n    \"Replace\": \"Zameni\",\n    \"Uploading\": \"Otpremanje\",\n    \"Loading image\": \"U\\u010ditavanje slika\",\n    \"Display\": \"Prikaz\",\n    \"Inline\": \"Pri upisivanju\",\n    \"Break Text\": \"Prelom teksta\",\n    \"Alternative Text\": \"Alternativni tekst\",\n    \"Change Size\": \"Promena veli\\u010dine\",\n    \"Width\": \"\\u0160irina\",\n    \"Height\": \"Visina\",\n    \"Something went wrong. Please try again.\": \"Ne\\u0161to krenulo naopako. Poku\\u0161ajte ponovo.\",\n    \"Image Caption\": \"Slika natpisa\",\n    \"Advanced Edit\": \"Napredno uređivanje\",\n\n    // Video\n    \"Insert Video\": \"Umetanje video\",\n    \"Embedded Code\": \"Ugra\\u0111eni k\\u00f4d\",\n    \"Paste in a video URL\": \"Lepljenje u video URL\",\n    \"Drop video\": \"Baci snimak\",\n    \"Your browser does not support HTML5 video.\": \"Vaš pregledač ne podržava HTML5 video.\",\n    \"Upload Video\": \"Otpremanje video\",\n\n    // Tables\n    \"Insert Table\": \"Umetni tabelu\",\n    \"Table Header\": \"Zaglavlje tabele\",\n    \"Remove Table\": \"Uklanjanje tabele\",\n    \"Table Style\": \"Stil tabele\",\n    \"Horizontal Align\": \"Horizontalno poravnavanje\",\n    \"Row\": \"Red\",\n    \"Insert row above\": \"Umetni red iznad\",\n    \"Insert row below\": \"Umetni red ispod\",\n    \"Delete row\": \"Izbri\\u0161i red\",\n    \"Column\": \"Kolone\",\n    \"Insert column before\": \"Umetnite kolonu pre\",\n    \"Insert column after\": \"Umetnite kolonu nakon\",\n    \"Delete column\": \"Izbri\\u0161i kolone\",\n    \"Cell\": \"Mobilni\",\n    \"Merge cells\": \"Objedinjavanje \\u0107elija\",\n    \"Horizontal split\": \"Horizontalna split\",\n    \"Vertical split\": \"Vertikalno razdelite\",\n    \"Cell Background\": \"Mobilni pozadina\",\n    \"Vertical Align\": \"Vertikalno poravnavanje\",\n    \"Top\": \"Top\",\n    \"Middle\": \"Srednji\",\n    \"Bottom\": \"Dno\",\n    \"Align Top\": \"Poravnaj gore\",\n    \"Align Middle\": \"Poravnaj po sredini\",\n    \"Align Bottom\": \"Poravnaj dole\",\n    \"Cell Style\": \"Mobilni stil\",\n\n    // Files\n    \"Upload File\": \"Otpremanje datoteke\",\n    \"Drop file\": \"Baci datoteku\",\n\n    // Emoticons\n    \"Emoticons\": \"Emotikona\",\n    \"Grinning face\": \"Nasmejanoj lice\",\n    \"Grinning face with smiling eyes\": \"Nasmejanoj lice sa osmehom o\\u010di\",\n    \"Face with tears of joy\": \"Suo\\u010davaju sa suzama radosnicama\",\n    \"Smiling face with open mouth\": \"Nasmejano lice sa otvorenim ustima\",\n    \"Smiling face with open mouth and smiling eyes\": \"Lica sa otvorenim ustima i nasmejani o\\u010di\",\n    \"Smiling face with open mouth and cold sweat\": \"Nasmejano lice sa otvorenih usta i hladan znoj\",\n    \"Smiling face with open mouth and tightly-closed eyes\": \"Nasmejano lice otvorenih usta i \\u010dvrsto zatvorenih o\\u010diju\",\n    \"Smiling face with halo\": \"Nasmejano lice sa oreolom\",\n    \"Smiling face with horns\": \"Nasmejano lice sa rogovima\",\n    \"Winking face\": \"Namigivanje lice\",\n    \"Smiling face with smiling eyes\": \"Lica sa osmehom o\\u010di\",\n    \"Face savoring delicious food\": \"Lice u\\u045bivaju\\u0436i u ukusnu hranu\",\n    \"Relieved face\": \"Laknulo lice\",\n    \"Smiling face with heart-shaped eyes\": \"Nasmejano lice sa o\\u010dima u obliku srca\",\n    \"Smiling face with sunglasses\": \"Nasmejano lice sa nao\\u010dare\",\n    \"Smirking face\": \"Rugaju\\u0436i lice\",\n    \"Neutral face\": \"Neutralno lice\",\n    \"Expressionless face\": \"Bez izraza lica.\",\n    \"Unamused face\": \"Nije zapaljen lice\",\n    \"Face with cold sweat\": \"Suo\\u010davaju sa hladnim znojem\",\n    \"Pensive face\": \"Nevesela lica\",\n    \"Confused face\": \"Zbunjeno lice\",\n    \"Confounded face\": \"Dosadnih lice\",\n    \"Kissing face\": \"Ljubim lice\",\n    \"Face throwing a kiss\": \"Lice baca poljubac\",\n    \"Kissing face with smiling eyes\": \"Ljubi lice sa osmehom o\\u010di\",\n    \"Kissing face with closed eyes\": \"Ljubi lice sa zatvorenim o\\u010dima\",\n    \"Face with stuck out tongue\": \"Lice sa zaglavio jezik\",\n    \"Face with stuck out tongue and winking eye\": \"Lice sa zaglavljen jezik i namigivanje\",\n    \"Face with stuck out tongue and tightly-closed eyes\": \"Lice sa zaglavljen jezik i cvrsto zatvorene o\\u010di\",\n    \"Disappointed face\": \"Razo\\u010darani lice\",\n    \"Worried face\": \"Zabrinuto lice\",\n    \"Angry face\": \"Ljut lice\",\n    \"Pouting face\": \"Zlovoljan lice\",\n    \"Crying face\": \"Plakanje lice\",\n    \"Persevering face\": \"Istrajnog lice\",\n    \"Face with look of triumph\": \"Suo\\u010davaju sa izgledom trijumfa\",\n    \"Disappointed but relieved face\": \"Razo\\u010daran ali laknulo lice\",\n    \"Frowning face with open mouth\": \"Namršten lice sa otvorenim ustima\",\n    \"Anguished face\": \"Enih lica\",\n    \"Fearful face\": \"Strahu lice\",\n    \"Weary face\": \"Umorna lica\",\n    \"Sleepy face\": \"Spava mi se lice\",\n    \"Tired face\": \"Umorna lica\",\n    \"Grimacing face\": \"Klupi lice\",\n    \"Loudly crying face\": \"Glasno plakanje lice\",\n    \"Face with open mouth\": \"Suo\\u010davaju sa otvorenim ustima\",\n    \"Hushed face\": \"Tihim lice\",\n    \"Face with open mouth and cold sweat\": \"Suo\\u010davaju sa otvorenih usta i hladan znoj\",\n    \"Face screaming in fear\": \"Lice vrisak u strahu\",\n    \"Astonished face\": \"Zadivljeni lice\",\n    \"Flushed face\": \"Uplakanu lice\",\n    \"Sleeping face\": \"Pospanog lica\",\n    \"Dizzy face\": \"Lice mi se vrti\",\n    \"Face without mouth\": \"Lice bez jezika\",\n    \"Face with medical mask\": \"Suo\\u010davaju sa medicinskim masku\",\n\n    // Line breaker\n    \"Break\": \"Prelom\",\n\n    // Math\n    \"Subscript\": \"Indeksni tekst\",\n    \"Superscript\": \"Eksponentni tekst\",\n\n    // Full screen\n    \"Fullscreen\": \"Puni ekran\",\n\n    // Horizontal line\n    \"Insert Horizontal Line\": \"Umetni horizontalnu liniju\",\n\n    // Clear formatting\n    \"Clear Formatting\": \"Brisanje oblikovanja\",\n\n    // Save\n    \"Save\": \"\\u0441\\u0430\\u0447\\u0443\\u0432\\u0430\\u0442\\u0438\",\n\n    // Undo, redo\n    \"Undo\": \"Opozovi radnju\",\n    \"Redo\": \"Ponavljanje\",\n\n    // Select all\n    \"Select All\": \"Izaberi sve\",\n\n    // Code view\n    \"Code View\": \"Prikaz koda\",\n\n    // Quote\n    \"Quote\": \"Ponude\",\n    \"Increase\": \"Pove\\u0107anje\",\n    \"Decrease\": \"Smanjivanje\",\n\n    // Quick Insert\n    \"Quick Insert\": \"Brzo umetanje\",\n\n    // Spcial Characters\n    \"Special Characters\": \"Specijalni znakovi\",\n    \"Latin\": \"Latino\",\n    \"Greek\": \"Grk\",\n    \"Cyrillic\": \"Ćirilica\",\n    \"Punctuation\": \"Interpunkcije\",\n    \"Currency\": \"Valuta\",\n    \"Arrows\": \"Strelice\",\n    \"Math\": \"Matematika\",\n    \"Misc\": \"Misc\",\n\n    // Print.\n    \"Print\": \"Odštampaj\",\n\n    // Spell Checker.\n    \"Spell Checker\": \"Kontrolor pravopisa\",\n\n    // Help\n    \"Help\": \"Pomoć\",\n    \"Shortcuts\": \"Prečice\",\n    \"Inline Editor\": \"Pri upisivanju Editor\",\n    \"Show the editor\": \"Prikaži urednik\",\n    \"Common actions\": \"Zajedničke akcije\",\n    \"Copy\": \"Kopija\",\n    \"Cut\": \"Rez\",\n    \"Paste\": \"Nalepi\",\n    \"Basic Formatting\": \"Osnovno oblikovanje\",\n    \"Increase quote level\": \"Povećati ponudu za nivo\",\n    \"Decrease quote level\": \"Smanjenje ponude nivo\",\n    \"Image / Video\": \"Slika / Video\",\n    \"Resize larger\": \"Veće veličine\",\n    \"Resize smaller\": \"Promena veličine manji\",\n    \"Table\": \"Sto\",\n    \"Select table cell\": \"Select ćelije\",\n    \"Extend selection one cell\": \"Proširite selekciju jednu ćeliju\",\n    \"Extend selection one row\": \"Proširite selekciju jedan red\",\n    \"Navigation\": \"Navigacija\",\n    \"Focus popup / toolbar\": \"Fokus Iskačući meni / traka sa alatkama\",\n    \"Return focus to previous position\": \"Vratiti fokus na prethodnu poziciju\",\n\n    // Embed.ly\n    \"Embed URL\": \"Ugradite URL\",\n    \"Paste in a URL to embed\": \"Nalepite URL adresu da biste ugradili\",\n\n    // Word Paste.\n    \"The pasted content is coming from a Microsoft Word document. Do you want to keep the format or clean it up?\": \"Nalepljeni sadržaj dolazi iz Microsoft Word dokument. Da li želite zadržati u formatu ili počistiti?\",\n    \"Keep\": \"Nastavi\",\n    \"Clean\": \"Oиisti\",\n    \"Word Paste Detected\": \"Word Nalepi otkriven\"\n  },\n  direction: \"ltr\"\n};\n\n}));\n"
  },
  {
    "path": "src/main/resources/static/plugins/froala-editor/js/languages/sv.js",
    "content": "/*!\n * froala_editor v2.9.1 (https://www.froala.com/wysiwyg-editor)\n * License https://froala.com/wysiwyg-editor/terms/\n * Copyright 2014-2018 Froala Labs\n */\n\n(function (factory) {\n    if (typeof define === 'function' && define.amd) {\n        // AMD. Register as an anonymous module.\n        define(['jquery'], factory);\n    } else if (typeof module === 'object' && module.exports) {\n        // Node/CommonJS\n        module.exports = function( root, jQuery ) {\n            if ( jQuery === undefined ) {\n                // require('jQuery') returns a factory that requires window to\n                // build a jQuery instance, we normalize how we use modules\n                // that require this pattern but the window provided is a noop\n                // if it's defined (how jquery works)\n                if ( typeof window !== 'undefined' ) {\n                    jQuery = require('jquery');\n                }\n                else {\n                    jQuery = require('jquery')(root);\n                }\n            }\n            return factory(jQuery);\n        };\n    } else {\n        // Browser globals\n        factory(window.jQuery);\n    }\n}(function ($) {\n/**\n * Swedish\n */\n\n$.FE.LANGUAGE['sv'] = {\n  translation: {\n    // Place holder\n    \"Type something\": \"Ange n\\u00e5got\",\n\n    // Basic formatting\n    \"Bold\": \"Fetstil\",\n    \"Italic\": \"Kursiv stil\",\n    \"Underline\": \"Understruken\",\n    \"Strikethrough\": \"Genomstruken\",\n\n    // Main buttons\n    \"Insert\": \"Infoga\",\n    \"Delete\": \"Radera\",\n    \"Cancel\": \"Avbryt\",\n    \"OK\": \"Ok\",\n    \"Back\": \"Tillbaka\",\n    \"Remove\": \"Ta bort\",\n    \"More\": \"Mer\",\n    \"Update\": \"Uppdatera\",\n    \"Style\": \"Stil\",\n\n    // Font\n    \"Font Family\": \"Teckensnitt\",\n    \"Font Size\": \"Teckenstorlek\",\n\n    // Colors\n    \"Colors\": \"F\\u00e4rger\",\n    \"Background\": \"Bakgrund\",\n    \"Text\": \"Text\",\n    \"HEX Color\": \"Hex färg\",\n\n    // Paragraphs\n    \"Paragraph Format\": \"Format\",\n    \"Normal\": \"Normal\",\n    \"Code\": \"Kod\",\n    \"Heading 1\": \"Rubrik 1\",\n    \"Heading 2\": \"Rubrik 2\",\n    \"Heading 3\": \"Rubrik 3\",\n    \"Heading 4\": \"Rubrik 4\",\n\n    // Style\n    \"Paragraph Style\": \"Styckesformat\",\n    \"Inline Style\": \"Infogad stil\",\n\n    // Alignment\n    \"Align\": \"Justera\",\n    \"Align Left\": \"Vänsterjustera\",\n    \"Align Center\": \"Centrera\",\n    \"Align Right\": \"Högerjustera\",\n    \"Align Justify\": \"Justera\",\n    \"None\": \"Inget\",\n\n    // Lists\n    \"Ordered List\": \"Ordnad lista\",\n    \"Unordered List\": \"Oordnad lista\",\n\n    // Indent\n    \"Decrease Indent\": \"Minska indrag\",\n    \"Increase Indent\": \"\\u00d6ka indrag\",\n\n    // Links\n    \"Insert Link\": \"Infoga l\\u00e4nk\",\n    \"Open in new tab\": \"\\u00d6ppna i ny flik\",\n    \"Open Link\": \"\\u00d6ppna l\\u00e4nk\",\n    \"Edit Link\": \"Redigera l\\u00e4nk\",\n    \"Unlink\": \"Ta bort l\\u00e4nk\",\n    \"Choose Link\": \"V\\u00e4lj l\\u00e4nk\",\n\n    // Images\n    \"Insert Image\": \"Infoga bild\",\n    \"Upload Image\": \"Ladda upp en bild\",\n    \"By URL\": \"Genom URL\",\n    \"Browse\": \"Bl\\u00e4ddra\",\n    \"Drop image\": \"Sl\\u00e4pp bild\",\n    \"or click\": \"eller klicka\",\n    \"Manage Images\": \"Hantera bilder\",\n    \"Loading\": \"Laddar\",\n    \"Deleting\": \"Raderar\",\n    \"Tags\": \"Etiketter\",\n    \"Are you sure? Image will be deleted.\": \"\\u00c4r du s\\u00e4ker? Bild kommer att raderas.\",\n    \"Replace\": \"Ers\\u00e4tt\",\n    \"Uploading\": \"Laddar up\",\n    \"Loading image\": \"Laddar bild\",\n    \"Display\": \"Visa\",\n    \"Inline\": \"I linje\",\n    \"Break Text\": \"Bryt text\",\n    \"Alternative Text\": \"Alternativ text\",\n    \"Change Size\": \"\\u00c4ndra storlek\",\n    \"Width\": \"Bredd\",\n    \"Height\": \"H\\u00f6jd\",\n    \"Something went wrong. Please try again.\": \"N\\u00e5got gick fel. Var god f\\u00f6rs\\u00f6k igen.\",\n    \"Image Caption\": \"Bildtext\",\n    \"Advanced Edit\": \"Avancerad redigering\",\n\n    // Video\n    \"Insert Video\": \"Infoga video\",\n    \"Embedded Code\": \"Inb\\u00e4ddad kod\",\n    \"Paste in a video URL\": \"Klistra in i en video url\",\n    \"Drop video\": \"Släpp video\",\n    \"Your browser does not support HTML5 video.\": \"Din webbläsare stöder inte html5-video.\",\n    \"Upload Video\": \"Ladda upp video\",\n\n    // Tables\n    \"Insert Table\": \"Infoga tabell\",\n    \"Table Header\": \"Tabell huvud\",\n    \"Remove Table\": \"Ta bort tabellen\",\n    \"Table Style\": \"Tabellformat\",\n    \"Horizontal Align\": \"Horisontell justering\",\n    \"Row\": \"Rad\",\n    \"Insert row above\": \"Infoga rad f\\u00f6re\",\n    \"Insert row below\": \"Infoga rad efter\",\n    \"Delete row\": \"Ta bort rad\",\n    \"Column\": \"Kolumn\",\n    \"Insert column before\": \"Infoga kollumn f\\u00f6re\",\n    \"Insert column after\": \"Infoga kolumn efter\",\n    \"Delete column\": \"Ta bort kolumn\",\n    \"Cell\": \"Cell\",\n    \"Merge cells\": \"Sammanfoga celler\",\n    \"Horizontal split\": \"Dela horisontellt\",\n    \"Vertical split\": \"Dela vertikalt\",\n    \"Cell Background\": \"Cellbakgrund\",\n    \"Vertical Align\": \"Vertikal justering\",\n    \"Top\": \"Överst\",\n    \"Middle\": \"Mitten\",\n    \"Bottom\": \"Nederst\",\n    \"Align Top\": \"Justera överst\",\n    \"Align Middle\": \"Justera mitten\",\n    \"Align Bottom\": \"Justera nederst\",\n    \"Cell Style\": \"Cellformat\",\n\n    // Files\n    \"Upload File\": \"Ladda upp fil\",\n    \"Drop file\": \"Sl\\u00e4pp fil\",\n\n    // Emoticons\n    \"Emoticons\": \"Uttryckssymboler\",\n    \"Grinning face\": \"Grina ansikte\",\n    \"Grinning face with smiling eyes\": \"Grina ansikte med leende \\u00f6gon\",\n    \"Face with tears of joy\": \"Face med gl\\u00e4djet\\u00e5rar\",\n    \"Smiling face with open mouth\": \"Leende ansikte med \\u00f6ppen mun\",\n    \"Smiling face with open mouth and smiling eyes\": \"Leende ansikte med \\u00f6ppen mun och leende \\u00f6gon\",\n    \"Smiling face with open mouth and cold sweat\": \"Leende ansikte med \\u00f6ppen mun och kallsvett\",\n    \"Smiling face with open mouth and tightly-closed eyes\": \"Leende ansikte med \\u00f6ppen mun och t\\u00e4tt slutna \\u00f6gon\",\n    \"Smiling face with halo\": \"Leende ansikte med halo\",\n    \"Smiling face with horns\": \"Leende ansikte med horn\",\n    \"Winking face\": \"Blinka ansikte\",\n    \"Smiling face with smiling eyes\": \"Leende ansikte med leende \\u00f6gon\",\n    \"Face savoring delicious food\": \"Ansikte smaka uts\\u00f6kt mat\",\n    \"Relieved face\": \"L\\u00e4ttad ansikte\",\n    \"Smiling face with heart-shaped eyes\": \"Leende ansikte med hj\\u00e4rtformade \\u00f6gon\",\n    \"Smiling face with sunglasses\": \"Leende ansikte med solglas\\u00f6gon\",\n    \"Smirking face\": \"Flinande ansikte\",\n    \"Neutral face\": \"Neutral ansikte\",\n    \"Expressionless face\": \"Uttryckslöst ansikte\",\n    \"Unamused face\": \"Inte roade ansikte\",\n    \"Face with cold sweat\": \"Ansikte med kallsvett\",\n    \"Pensive face\": \"Eftert\\u00e4nksamt ansikte\",\n    \"Confused face\": \"F\\u00f6rvirrad ansikte\",\n    \"Confounded face\": \"F\\u00f6rbryllade ansikte\",\n    \"Kissing face\": \"Kyssande ansikte\",\n    \"Face throwing a kiss\": \"Ansikte kasta en kyss\",\n    \"Kissing face with smiling eyes\": \"Kyssa ansikte med leende \\u00f6gon\",\n    \"Kissing face with closed eyes\": \"Kyssa ansikte med slutna \\u00f6gon\",\n    \"Face with stuck out tongue\": \"Ansikte med stack ut tungan\",\n    \"Face with stuck out tongue and winking eye\": \"Ansikte med stack ut tungan och blinkande \\u00f6ga\",\n    \"Face with stuck out tongue and tightly-closed eyes\": \"Ansikte med stack ut tungan och t\\u00e4tt slutna \\u00f6gon\",\n    \"Disappointed face\": \"Besviken ansikte\",\n    \"Worried face\": \"Orolig ansikte\",\n    \"Angry face\": \"Argt ansikte\",\n    \"Pouting face\": \"Sk\\u00e4ggtorsk ansikte\",\n    \"Crying face\": \"Gr\\u00e5tande ansikte\",\n    \"Persevering face\": \"Uth\\u00e5llig ansikte\",\n    \"Face with look of triumph\": \"Ansikte med utseendet p\\u00e5 triumf\",\n    \"Disappointed but relieved face\": \"Besviken men l\\u00e4ttad ansikte\",\n    \"Frowning face with open mouth\": \"Rynkar pannan ansikte med \\u00f6ppen mun\",\n    \"Anguished face\": \"\\u00c5ngest ansikte\",\n    \"Fearful face\": \"R\\u00e4dda ansikte\",\n    \"Weary face\": \"Tr\\u00f6tta ansikte\",\n    \"Sleepy face\": \"S\\u00f6mnig ansikte\",\n    \"Tired face\": \"Tr\\u00f6tt ansikte\",\n    \"Grimacing face\": \"Grimaserande ansikte\",\n    \"Loudly crying face\": \"H\\u00f6gt gr\\u00e5tande ansikte\",\n    \"Face with open mouth\": \"Ansikte med \\u00f6ppen mun\",\n    \"Hushed face\": \"D\\u00e4mpade ansikte\",\n    \"Face with open mouth and cold sweat\": \"Ansikte med \\u00f6ppen mun och kallsvett\",\n    \"Face screaming in fear\": \"Face skriker i skr\\u00e4ck\",\n    \"Astonished face\": \"F\\u00f6rv\\u00e5nad ansikte\",\n    \"Flushed face\": \"Ansiktsrodnad\",\n    \"Sleeping face\": \"Sovande anskite\",\n    \"Dizzy face\": \"Yr ansikte\",\n    \"Face without mouth\": \"Ansikte utan mun\",\n    \"Face with medical mask\": \"Ansikte med medicinsk maskera\",\n\n    // Line breaker\n    \"Break\": \"Ny rad\",\n\n    // Math\n    \"Subscript\": \"Neds\\u00e4nkt\",\n    \"Superscript\": \"Upph\\u00f6jd\",\n\n    // Full screen\n    \"Fullscreen\": \"Helsk\\u00e4rm\",\n\n    // Horizontal line\n    \"Insert Horizontal Line\": \"Infoga horisontell linje\",\n\n    // Clear formatting\n    \"Clear Formatting\": \"Ta bort formatering\",\n\n    // Save\n    \"Save\": \"Spara\",\n\n    // Undo, redo\n    \"Undo\": \"\\u00c5ngra\",\n    \"Redo\": \"G\\u00f6r om\",\n\n    // Select all\n    \"Select All\": \"Markera allt\",\n\n    // Code view\n    \"Code View\": \"Kodvy\",\n\n    // Quote\n    \"Quote\": \"Citat\",\n    \"Increase\": \"\\u00d6ka\",\n    \"Decrease\": \"Minska\",\n\n    // Quick Insert\n    \"Quick Insert\": \"Snabbinfoga\",\n\n    // Spcial Characters\n    \"Special Characters\": \"Specialtecken\",\n    \"Latin\": \"Latin\",\n    \"Greek\": \"Grekisk\",\n    \"Cyrillic\": \"Cyrillic\",\n    \"Punctuation\": \"Skiljetecken\",\n    \"Currency\": \"Valuta\",\n    \"Arrows\": \"Pilar\",\n    \"Math\": \"Matematik\",\n    \"Misc\": \"Övrigt\",\n\n    // Print.\n    \"Print\": \"Skriva ut\",\n\n    // Spell Checker.\n    \"Spell Checker\": \"Stavningskontroll\",\n\n    // Help\n    \"Help\": \"Hjälp\",\n    \"Shortcuts\": \"Genvägar\",\n    \"Inline Editor\": \"Inline editor\",\n    \"Show the editor\": \"Visa redigeraren\",\n    \"Common actions\": \"Vanliga kommandon\",\n    \"Copy\": \"Kopiera\",\n    \"Cut\": \"Klipp ut\",\n    \"Paste\": \"Klistra in\",\n    \"Basic Formatting\": \"Grundläggande formatering\",\n    \"Increase quote level\": \"Öka citatnivå\",\n    \"Decrease quote level\": \"Minska citatnivå\",\n    \"Image / Video\": \"Bild / video\",\n    \"Resize larger\": \"Öka storlek\",\n    \"Resize smaller\": \"Minska storlek\",\n    \"Table\": \"Tabell\",\n    \"Select table cell\": \"Markera tabellcell\",\n    \"Extend selection one cell\": \"Utöka markering en cell\",\n    \"Extend selection one row\": \"Utöka markering en rad\",\n    \"Navigation\": \"Navigering\",\n    \"Focus popup / toolbar\": \"Fokusera popup / verktygsfältet\",\n    \"Return focus to previous position\": \"Byt fokus till föregående plats\",\n\n    // Embed.ly\n    \"Embed URL\": \"Bädda in url\",\n    \"Paste in a URL to embed\": \"Klistra in i en url för att bädda in\",\n\n    // Word Paste.\n    \"The pasted content is coming from a Microsoft Word document. Do you want to keep the format or clean it up?\": \"Den inklippta texten kommer från ett Microsoft Word-dokument. Vill du behålla formateringen eller städa upp det?\",\n    \"Keep\": \"Behåll\",\n    \"Clean\": \"Städa upp\",\n    \"Word Paste Detected\": \"Urklipp från Word upptäckt\"\n  },\n  direction: \"ltr\"\n};\n\n}));\n"
  },
  {
    "path": "src/main/resources/static/plugins/froala-editor/js/languages/th.js",
    "content": "/*!\n * froala_editor v2.9.1 (https://www.froala.com/wysiwyg-editor)\n * License https://froala.com/wysiwyg-editor/terms/\n * Copyright 2014-2018 Froala Labs\n */\n\n(function (factory) {\n    if (typeof define === 'function' && define.amd) {\n        // AMD. Register as an anonymous module.\n        define(['jquery'], factory);\n    } else if (typeof module === 'object' && module.exports) {\n        // Node/CommonJS\n        module.exports = function( root, jQuery ) {\n            if ( jQuery === undefined ) {\n                // require('jQuery') returns a factory that requires window to\n                // build a jQuery instance, we normalize how we use modules\n                // that require this pattern but the window provided is a noop\n                // if it's defined (how jquery works)\n                if ( typeof window !== 'undefined' ) {\n                    jQuery = require('jquery');\n                }\n                else {\n                    jQuery = require('jquery')(root);\n                }\n            }\n            return factory(jQuery);\n        };\n    } else {\n        // Browser globals\n        factory(window.jQuery);\n    }\n}(function ($) {\n/**\n * Thai\n */\n\n$.FE.LANGUAGE['th'] = {\n  translation: {\n    // Place holder\n    \"Type something\": \"\\u0e1e\\u0e34\\u0e21\\u0e1e\\u0e4c\\u0e1a\\u0e32\\u0e07\\u0e2a\\u0e34\\u0e48\\u0e07\\u0e1a\\u0e32\\u0e07\\u0e2d\\u0e22\\u0e48\\u0e32\\u0e07\",\n\n    // Basic formatting\n    \"Bold\": \"\\u0e15\\u0e31\\u0e27\\u0e2b\\u0e19\\u0e32\",\n    \"Italic\": \"\\u0e15\\u0e31\\u0e27\\u0e40\\u0e2d\\u0e35\\u0e22\\u0e07\",\n    \"Underline\": \"\\u0e02\\u0e35\\u0e14\\u0e40\\u0e2a\\u0e49\\u0e19\\u0e43\\u0e15\\u0e49\",\n    \"Strikethrough\": \"\\u0e02\\u0e35\\u0e14\\u0e17\\u0e31\\u0e1a\",\n\n    // Main buttons\n    \"Insert\": \"\\u0e41\\u0e17\\u0e23\\u0e01\",\n    \"Delete\": \"\\u0e25\\u0e1a\",\n    \"Cancel\": \"\\u0e22\\u0e01\\u0e40\\u0e25\\u0e34\\u0e01\",\n    \"OK\": \"\\u0e15\\u0e01\\u0e25\\u0e07\",\n    \"Back\": \"\\u0e01\\u0e25\\u0e31\\u0e1a\",\n    \"Remove\": \"\\u0e40\\u0e2d\\u0e32\\u0e2d\\u0e2d\\u0e01\",\n    \"More\": \"\\u0e21\\u0e32\\u0e01\\u0e01\\u0e27\\u0e48\\u0e32\",\n    \"Update\": \"\\u0e2d\\u0e31\\u0e1e\\u0e40\\u0e14\\u0e17\",\n    \"Style\": \"\\u0e2a\\u0e44\\u0e15\\u0e25\\u0e4c\",\n\n    // Font\n    \"Font Family\": \"\\u0e15\\u0e23\\u0e30\\u0e01\\u0e39\\u0e25\\u0e41\\u0e1a\\u0e1a\\u0e2d\\u0e31\\u0e01\\u0e29\\u0e23\",\n    \"Font Size\": \"\\u0e02\\u0e19\\u0e32\\u0e14\\u0e41\\u0e1a\\u0e1a\\u0e2d\\u0e31\\u0e01\\u0e29\\u0e23\",\n\n    // Colors\n    \"Colors\": \"\\u0e2a\\u0e35\",\n    \"Background\": \"\\u0e1e\\u0e37\\u0e49\\u0e19\\u0e2b\\u0e25\\u0e31\\u0e07\",\n    \"Text\": \"\\u0e02\\u0e49\\u0e2d\\u0e04\\u0e27\\u0e32\\u0e21\",\n    \"HEX Color\": \"สีฐานสิบหก\",\n\n    // Paragraphs\n    \"Paragraph Format\": \"\\u0e23\\u0e39\\u0e1b\\u0e41\\u0e1a\\u0e1a\",\n    \"Normal\": \"\\u0e1b\\u0e01\\u0e15\\u0e34\",\n    \"Code\": \"\\u0e42\\u0e04\\u0e49\\u0e14\",\n    \"Heading 1\": \"\\u0e2a\\u0e48\\u0e27\\u0e19\\u0e2b\\u0e31\\u0e27 1\",\n    \"Heading 2\": \"\\u0e2a\\u0e48\\u0e27\\u0e19\\u0e2b\\u0e31\\u0e27 2\",\n    \"Heading 3\": \"\\u0e2a\\u0e48\\u0e27\\u0e19\\u0e2b\\u0e31\\u0e27 3\",\n    \"Heading 4\": \"\\u0e2a\\u0e48\\u0e27\\u0e19\\u0e2b\\u0e31\\u0e27 4\",\n\n    // Style\n    \"Paragraph Style\": \"\\u0e25\\u0e31\\u0e01\\u0e29\\u0e13\\u0e30\\u0e22\\u0e48\\u0e2d\\u0e2b\\u0e19\\u0e49\\u0e32\",\n    \"Inline Style\": \"\\u0e23\\u0e39\\u0e1b\\u0e41\\u0e1a\\u0e1a\\u0e2d\\u0e34\\u0e19\\u0e44\\u0e25\\u0e19\\u0e4c\",\n\n    // Alignment\n    \"Align\": \"\\u0e01\\u0e32\\u0e23\\u0e08\\u0e31\\u0e14\\u0e41\\u0e19\\u0e27\",\n    \"Align Left\": \"\\u0e08\\u0e31\\u0e14\\u0e0a\\u0e34\\u0e14\\u0e0b\\u0e49\\u0e32\\u0e22\",\n    \"Align Center\": \"\\u0e08\\u0e31\\u0e14\\u0e01\\u0e36\\u0e48\\u0e07\\u0e01\\u0e25\\u0e32\\u0e07\",\n    \"Align Right\": \"\\u0e08\\u0e31\\u0e14\\u0e0a\\u0e34\\u0e14\\u0e02\\u0e27\\u0e32\",\n    \"Align Justify\": \"\\u0e40\\u0e15\\u0e47\\u0e21\\u0e41\\u0e19\\u0e27\",\n    \"None\": \"\\u0e44\\u0e21\\u0e48\",\n\n    // Lists\n    \"Ordered List\": \"\\u0e23\\u0e32\\u0e22\\u0e01\\u0e32\\u0e23\\u0e25\\u0e33\\u0e14\\u0e31\\u0e1a\\u0e40\\u0e25\\u0e02\",\n    \"Unordered List\": \"\\u0e23\\u0e32\\u0e22\\u0e01\\u0e32\\u0e23\\u0e2a\\u0e31\\u0e0d\\u0e25\\u0e31\\u0e01\\u0e29\\u0e13\\u0e4c\\u0e2b\\u0e31\\u0e27\\u0e02\\u0e49\\u0e2d\\u0e22\\u0e48\\u0e2d\\u0e22\",\n\n    // Indent\n    \"Decrease Indent\": \"\\u0e25\\u0e14\\u0e01\\u0e32\\u0e23\\u0e40\\u0e22\\u0e37\\u0e49\\u0e2d\\u0e07\",\n    \"Increase Indent\": \"\\u0e40\\u0e1e\\u0e34\\u0e48\\u0e21\\u0e01\\u0e32\\u0e23\\u0e40\\u0e22\\u0e37\\u0e49\\u0e2d\\u0e07\",\n\n    // Links\n    \"Insert Link\": \"\\u0e41\\u0e17\\u0e23\\u0e01\\u0e25\\u0e34\\u0e07\\u0e01\\u0e4c\",\n    \"Open in new tab\": \"\\u0e40\\u0e1b\\u0e34\\u0e14\\u0e43\\u0e19\\u0e41\\u0e17\\u0e47\\u0e1a\\u0e43\\u0e2b\\u0e21\\u0e48\",\n    \"Open Link\": \"\\u0e40\\u0e1b\\u0e34\\u0e14\\u0e25\\u0e34\\u0e49\\u0e07\\u0e04\\u0e4c\",\n    \"Edit Link\": \"\\u0e25\\u0e34\\u0e07\\u0e04\\u0e4c\\u0e41\\u0e01\\u0e49\\u0e44\\u0e02\",\n    \"Unlink\": \"\\u0e40\\u0e2d\\u0e32\\u0e25\\u0e34\\u0e07\\u0e01\\u0e4c\\u0e2d\\u0e2d\\u0e01\",\n    \"Choose Link\": \"\\u0e40\\u0e25\\u0e37\\u0e2d\\u0e01\\u0e01\\u0e32\\u0e23\\u0e40\\u0e0a\\u0e37\\u0e48\\u0e2d\\u0e21\\u0e42\\u0e22\\u0e07\",\n\n    // Images\n    \"Insert Image\": \"\\u0e41\\u0e17\\u0e23\\u0e01\\u0e23\\u0e39\\u0e1b\\u0e20\\u0e32\\u0e1e\",\n    \"Upload Image\": \"\\u0e01\\u0e32\\u0e23\\u0e2d\\u0e31\\u0e1b\\u0e42\\u0e2b\\u0e25\\u0e14\\u0e20\\u0e32\\u0e1e\",\n    \"By URL\": \"\\u0e15\\u0e32\\u0e21 URL\",\n    \"Browse\": \"\\u0e40\\u0e23\\u0e35\\u0e22\\u0e01\\u0e14\\u0e39\",\n    \"Drop image\": \"\\u0e27\\u0e32\\u0e07\\u0e20\\u0e32\\u0e1e\",\n    \"or click\": \"\\u0e2b\\u0e23\\u0e37\\u0e2d\\u0e04\\u0e25\\u0e34\\u0e01\\u0e17\\u0e35\\u0e48\",\n    \"Manage Images\": \"\\u0e08\\u0e31\\u0e14\\u0e01\\u0e32\\u0e23\\u0e20\\u0e32\\u0e1e\",\n    \"Loading\": \"\\u0e42\\u0e2b\\u0e25\\u0e14\",\n    \"Deleting\": \"\\u0e25\\u0e1a\",\n    \"Tags\": \"\\u0e41\\u0e17\\u0e47\\u0e01\",\n    \"Are you sure? Image will be deleted.\": \"\\u0e04\\u0e38\\u0e13\\u0e41\\u0e19\\u0e48\\u0e43\\u0e08\\u0e2b\\u0e23\\u0e37\\u0e2d\\u0e44\\u0e21\\u0e48 \\u0e20\\u0e32\\u0e1e\\u0e08\\u0e30\\u0e16\\u0e39\\u0e01\\u0e25\\u0e1a\",\n    \"Replace\": \"\\u0e41\\u0e17\\u0e19\\u0e17\\u0e35\\u0e48\",\n    \"Uploading\": \"\\u0e2d\\u0e31\\u0e1e\\u0e42\\u0e2b\\u0e25\\u0e14\",\n    \"Loading image\": \"\\u0e42\\u0e2b\\u0e25\\u0e14\\u0e20\\u0e32\\u0e1e\",\n    \"Display\": \"\\u0e41\\u0e2a\\u0e14\\u0e07\",\n    \"Inline\": \"\\u0e41\\u0e1a\\u0e1a\\u0e2d\\u0e34\\u0e19\\u0e44\\u0e25\\u0e19\\u0e4c\",\n    \"Break Text\": \"\\u0e02\\u0e49\\u0e2d\\u0e04\\u0e27\\u0e32\\u0e21\\u0e2b\\u0e22\\u0e38\\u0e14\",\n    \"Alternative Text\": \"\\u0e02\\u0e49\\u0e2d\\u0e04\\u0e27\\u0e32\\u0e21\\u0e2d\\u0e37\\u0e48\\u0e19\",\n    \"Change Size\": \"\\u0e40\\u0e1b\\u0e25\\u0e35\\u0e48\\u0e22\\u0e19\\u0e02\\u0e19\\u0e32\\u0e14\",\n    \"Width\": \"\\u0e04\\u0e27\\u0e32\\u0e21\\u0e01\\u0e27\\u0e49\\u0e32\\u0e07\",\n    \"Height\": \"\\u0e04\\u0e27\\u0e32\\u0e21\\u0e2a\\u0e39\\u0e07\",\n    \"Something went wrong. Please try again.\": \"\\u0e1a\\u0e32\\u0e07\\u0e2d\\u0e22\\u0e48\\u0e32\\u0e07\\u0e1c\\u0e34\\u0e14\\u0e1b\\u0e01\\u0e15\\u0e34. \\u0e01\\u0e23\\u0e38\\u0e13\\u0e32\\u0e25\\u0e2d\\u0e07\\u0e2d\\u0e35\\u0e01\\u0e04\\u0e23\\u0e31\\u0e49\\u0e07.\",\n    \"Image Caption\": \"คำบรรยายภาพ\",\n    \"Advanced Edit\": \"แก้ไขขั้นสูง\",\n\n    // Video\n    \"Insert Video\": \"\\u0e41\\u0e17\\u0e23\\u0e01\\u0e27\\u0e34\\u0e14\\u0e35\\u0e42\\u0e2d\",\n    \"Embedded Code\": \"\\u0e23\\u0e2b\\u0e31\\u0e2a\\u0e2a\\u0e21\\u0e2d\\u0e07\\u0e01\\u0e25\\u0e1d\\u0e31\\u0e07\\u0e15\\u0e31\\u0e27\",\n    \"Paste in a video URL\": \"วางใน URL วิดีโอ\",\n    \"Drop video\": \"วางวิดีโอ\",\n    \"Your browser does not support HTML5 video.\": \"เบราเซอร์ของคุณไม่สนับสนุนวิดีโอ HTML5\",\n    \"Upload Video\": \"อัปโหลดวิดีโอ\",\n\n    // Tables\n    \"Insert Table\": \"\\u0e41\\u0e17\\u0e23\\u0e01\\u0e15\\u0e32\\u0e23\\u0e32\\u0e07\",\n    \"Table Header\": \"\\u0e2a\\u0e48\\u0e27\\u0e19\\u0e2b\\u0e31\\u0e27\\u0e02\\u0e2d\\u0e07\\u0e15\\u0e32\\u0e23\\u0e32\\u0e07\",\n    \"Remove Table\": \"\\u0e40\\u0e2d\\u0e32\\u0e15\\u0e32\\u0e23\\u0e32\\u0e07\\u0e2d\\u0e2d\\u0e01\",\n    \"Table Style\": \"\\u0e25\\u0e31\\u0e01\\u0e29\\u0e13\\u0e30\\u0e15\\u0e32\\u0e23\\u0e32\\u0e07\",\n    \"Horizontal Align\": \"\\u0e43\\u0e19\\u0e41\\u0e19\\u0e27\\u0e19\\u0e2d\\u0e19\",\n    \"Row\": \"\\u0e41\\u0e16\\u0e27\",\n    \"Insert row above\": \"\\u0e41\\u0e17\\u0e23\\u0e01\\u0e41\\u0e16\\u0e27\\u0e14\\u0e49\\u0e32\\u0e19\\u0e1a\\u0e19\",\n    \"Insert row below\": \"\\u0e41\\u0e17\\u0e23\\u0e01\\u0e41\\u0e16\\u0e27\\u0e14\\u0e49\\u0e32\\u0e19\\u0e25\\u0e48\\u0e32\\u0e07\",\n    \"Delete row\": \"\\u0e25\\u0e1a\\u0e41\\u0e16\\u0e27\",\n    \"Column\": \"\\u0e04\\u0e2d\\u0e25\\u0e31\\u0e21\\u0e19\\u0e4c\",\n    \"Insert column before\": \"\\u0e41\\u0e17\\u0e23\\u0e01\\u0e04\\u0e2d\\u0e25\\u0e31\\u0e21\\u0e19\\u0e4c\\u0e02\\u0e49\\u0e32\\u0e07\\u0e2b\\u0e19\\u0e49\\u0e32\",\n    \"Insert column after\": \"\\u0e41\\u0e17\\u0e23\\u0e01\\u0e04\\u0e2d\\u0e25\\u0e31\\u0e21\\u0e19\\u0e4c\\u0e02\\u0e49\\u0e32\\u0e07\\u0e2b\\u0e25\\u0e31\\u0e07\",\n    \"Delete column\": \"\\u0e25\\u0e1a\\u0e04\\u0e2d\\u0e25\\u0e31\\u0e21\\u0e19\\u0e4c\",\n    \"Cell\": \"\\u0e40\\u0e0b\\u0e25\\u0e25\\u0e4c\",\n    \"Merge cells\": \"\\u0e1c\\u0e2a\\u0e32\\u0e19\\u0e40\\u0e0b\\u0e25\\u0e25\\u0e4c\",\n    \"Horizontal split\": \"\\u0e41\\u0e22\\u0e01\\u0e41\\u0e19\\u0e27\\u0e19\\u0e2d\\u0e19\",\n    \"Vertical split\": \"\\u0e41\\u0e22\\u0e01\\u0e43\\u0e19\\u0e41\\u0e19\\u0e27\\u0e15\\u0e31\\u0e49\\u0e07\",\n    \"Cell Background\": \"\\u0e1e\\u0e37\\u0e49\\u0e19\\u0e2b\\u0e25\\u0e31\\u0e07\\u0e02\\u0e2d\\u0e07\\u0e40\\u0e0b\\u0e25\\u0e25\\u0e4c\",\n    \"Vertical Align\": \"\\u0e08\\u0e31\\u0e14\\u0e41\\u0e19\\u0e27\\u0e15\\u0e31\\u0e49\\u0e07\",\n    \"Top\": \"\\u0e14\\u0e49\\u0e32\\u0e19\\u0e1a\\u0e19\",\n    \"Middle\": \"\\u0e01\\u0e25\\u0e32\\u0e07\",\n    \"Bottom\": \"\\u0e01\\u0e49\\u0e19\",\n    \"Align Top\": \"\\u0e08\\u0e31\\u0e14\\u0e14\\u0e49\\u0e32\\u0e19\\u0e1a\\u0e19\",\n    \"Align Middle\": \"\\u0e15\\u0e4d\\u0e32\\u0e41\\u0e2b\\u0e19\\u0e48\\u0e07\\u0e01\\u0e25\\u0e32\\u0e07\",\n    \"Align Bottom\": \"\\u0e15\\u0e4d\\u0e32\\u0e41\\u0e2b\\u0e19\\u0e48\\u0e07\\u0e14\\u0e49\\u0e32\\u0e19\\u0e25\\u0e48\\u0e32\\u0e07\",\n    \"Cell Style\": \"\\u0e23\\u0e39\\u0e1b\\u0e41\\u0e1a\\u0e1a\\u0e02\\u0e2d\\u0e07\\u0e40\\u0e0b\\u0e25\\u0e25\\u0e4c\",\n\n    // Files\n    \"Upload File\": \"\\u0e2d\\u0e31\\u0e1b\\u0e42\\u0e2b\\u0e25\\u0e14\\u0e44\\u0e1f\\u0e25\\u0e4c\",\n    \"Drop file\": \"\\u0e27\\u0e32\\u0e07\\u0e44\\u0e1f\\u0e25\\u0e4c\",\n\n    // Emoticons\n    \"Emoticons\": \"\\u0e2d\\u0e35\\u0e42\\u0e21\\u0e15\\u0e34\\u0e04\\u0e2d\\u0e19\",\n    \"Grinning face\": \"\\u0e43\\u0e1a\\u0e2b\\u0e19\\u0e49\\u0e32\\u0e22\\u0e34\\u0e49\\u0e21\",\n    \"Grinning face with smiling eyes\": \"\\u0e43\\u0e1a\\u0e2b\\u0e19\\u0e49\\u0e32\\u0e22\\u0e34\\u0e49\\u0e21\\u0e14\\u0e49\\u0e27\\u0e22\\u0e15\\u0e32\\u0e22\\u0e34\\u0e49\\u0e21\",\n    \"Face with tears of joy\": \"\\u0e43\\u0e1a\\u0e2b\\u0e19\\u0e49\\u0e32\\u0e14\\u0e49\\u0e27\\u0e22\\u0e19\\u0e49\\u0e33\\u0e15\\u0e32\\u0e41\\u0e2b\\u0e48\\u0e07\\u0e04\\u0e27\\u0e32\\u0e21\\u0e2a\\u0e38\\u0e02\",\n    \"Smiling face with open mouth\": \"\\u0e43\\u0e1a\\u0e2b\\u0e19\\u0e49\\u0e32\\u0e40\\u0e1b\\u0e37\\u0e49\\u0e2d\\u0e19\\u0e23\\u0e2d\\u0e22\\u0e22\\u0e34\\u0e49\\u0e21\\u0e17\\u0e35\\u0e48\\u0e21\\u0e35\\u0e1b\\u0e32\\u0e01\\u0e40\\u0e1b\\u0e34\\u0e14\",\n    \"Smiling face with open mouth and smiling eyes\": \"\\u0e43\\u0e1a\\u0e2b\\u0e19\\u0e49\\u0e32\\u0e22\\u0e34\\u0e49\\u0e21\\u0e01\\u0e31\\u0e1a\\u0e40\\u0e1b\\u0e34\\u0e14\\u0e1b\\u0e32\\u0e01\\u0e41\\u0e25\\u0e30\\u0e15\\u0e32\\u0e22\\u0e34\\u0e49\\u0e21\",\n    \"Smiling face with open mouth and cold sweat\": \"\\u0e43\\u0e1a\\u0e2b\\u0e19\\u0e49\\u0e32\\u0e22\\u0e34\\u0e49\\u0e21\\u0e14\\u0e49\\u0e27\\u0e22\\u0e1b\\u0e32\\u0e01\\u0e40\\u0e1b\\u0e34\\u0e14\\u0e41\\u0e25\\u0e30\\u0e40\\u0e2b\\u0e07\\u0e37\\u0e48\\u0e2d\\u0e40\\u0e22\\u0e47\\u0e19\",\n    \"Smiling face with open mouth and tightly-closed eyes\": \"\\u0e43\\u0e1a\\u0e2b\\u0e19\\u0e49\\u0e32\\u0e22\\u0e34\\u0e49\\u0e21\\u0e01\\u0e31\\u0e1a\\u0e40\\u0e1b\\u0e34\\u0e14\\u0e1b\\u0e32\\u0e01\\u0e41\\u0e25\\u0e30\\u0e15\\u0e32\\u0e41\\u0e19\\u0e48\\u0e19\\u0e1b\\u0e34\\u0e14\",\n    \"Smiling face with halo\": \"\\u0e43\\u0e1a\\u0e2b\\u0e19\\u0e49\\u0e32\\u0e22\\u0e34\\u0e49\\u0e21\\u0e17\\u0e35\\u0e48\\u0e21\\u0e35\\u0e23\\u0e31\\u0e28\\u0e21\\u0e35\",\n    \"Smiling face with horns\": \"\\u0e22\\u0e34\\u0e49\\u0e21\\u0e43\\u0e1a\\u0e2b\\u0e19\\u0e49\\u0e32\\u0e21\\u0e35\\u0e40\\u0e02\\u0e32\",\n    \"Winking face\": \"\\u0e01\\u0e32\\u0e23\\u0e01\\u0e23\\u0e30\\u0e1e\\u0e23\\u0e34\\u0e1a\\u0e43\\u0e1a\\u0e2b\\u0e19\\u0e49\\u0e32\",\n    \"Smiling face with smiling eyes\": \"\\u0e43\\u0e1a\\u0e2b\\u0e19\\u0e49\\u0e32\\u0e22\\u0e34\\u0e49\\u0e21\\u0e14\\u0e49\\u0e27\\u0e22\\u0e15\\u0e32\\u0e22\\u0e34\\u0e49\\u0e21\",\n    \"Face savoring delicious food\": \"\\u0e40\\u0e1c\\u0e0a\\u0e34\\u0e0d \\u0073\\u0061\\u0076\\u006f\\u0072\\u0069\\u006e\\u0067 \\u0e2d\\u0e32\\u0e2b\\u0e32\\u0e23\\u0e2d\\u0e23\\u0e48\\u0e2d\\u0e22\",\n    \"Relieved face\": \"\\u0e43\\u0e1a\\u0e2b\\u0e19\\u0e49\\u0e32\\u0e42\\u0e25\\u0e48\\u0e07\\u0e43\\u0e08\",\n    \"Smiling face with heart-shaped eyes\": \"\\u0e43\\u0e1a\\u0e2b\\u0e19\\u0e49\\u0e32\\u0e22\\u0e34\\u0e49\\u0e21\\u0e14\\u0e49\\u0e27\\u0e22\\u0e15\\u0e32\\u0e23\\u0e39\\u0e1b\\u0e2b\\u0e31\\u0e27\\u0e43\\u0e08\",\n    \"Smiling face with sunglasses\": \"\\u0e22\\u0e34\\u0e49\\u0e21\\u0e2b\\u0e19\\u0e49\\u0e32\\u0e14\\u0e49\\u0e27\\u0e22\\u0e41\\u0e27\\u0e48\\u0e19\\u0e15\\u0e32\\u0e01\\u0e31\\u0e19\\u0e41\\u0e14\\u0e14\",\n    \"Smirking face\": \"\\u0e2b\\u0e19\\u0e49\\u0e32\\u0e41\\u0e2a\\u0e22\\u0e30\\u0e22\\u0e34\\u0e49\\u0e21\\u0e17\\u0e35\\u0e48\\u0e21\\u0e38\\u0e21\",\n    \"Neutral face\": \"\\u0e43\\u0e1a\\u0e2b\\u0e19\\u0e49\\u0e32\\u0e17\\u0e35\\u0e48\\u0e40\\u0e1b\\u0e47\\u0e19\\u0e01\\u0e25\\u0e32\\u0e07\",\n    \"Expressionless face\": \"\\u0e43\\u0e1a\\u0e2b\\u0e19\\u0e49\\u0e32\\u0e2d\\u0e32\\u0e23\\u0e21\\u0e13\\u0e4c\",\n    \"Unamused face\": \"\\u0e43\\u0e1a\\u0e2b\\u0e19\\u0e49\\u0e32 \\u0055\\u006e\\u0061\\u006d\\u0075\\u0073\\u0065\\u0064\",\n    \"Face with cold sweat\": \"\\u0e43\\u0e1a\\u0e2b\\u0e19\\u0e49\\u0e32\\u0e17\\u0e35\\u0e48\\u0e21\\u0e35\\u0e40\\u0e2b\\u0e07\\u0e37\\u0e48\\u0e2d\\u0e40\\u0e22\\u0e47\\u0e19\",\n    \"Pensive face\": \"\\u0e43\\u0e1a\\u0e2b\\u0e19\\u0e49\\u0e32\\u0e2b\\u0e21\\u0e48\\u0e19\",\n    \"Confused face\": \"\\u0e43\\u0e1a\\u0e2b\\u0e19\\u0e49\\u0e32\\u0e2a\\u0e31\\u0e1a\\u0e2a\\u0e19\",\n    \"Confounded face\": \"\\u0e43\\u0e1a\\u0e2b\\u0e19\\u0e49\\u0e32\\u0e2a\\u0e31\\u0e1a\\u0e2a\\u0e19\",\n    \"Kissing face\": \"\\u0e43\\u0e1a\\u0e2b\\u0e19\\u0e49\\u0e32\\u0e08\\u0e39\\u0e1a\",\n    \"Face throwing a kiss\": \"\\u0e15\\u0e49\\u0e2d\\u0e07\\u0e40\\u0e1c\\u0e0a\\u0e34\\u0e0d\\u0e01\\u0e31\\u0e1a\\u0e01\\u0e32\\u0e23\\u0e02\\u0e27\\u0e49\\u0e32\\u0e07\\u0e1b\\u0e32\\u0e08\\u0e39\\u0e1a\",\n    \"Kissing face with smiling eyes\": \"\\u0e08\\u0e39\\u0e1a\\u0e43\\u0e1a\\u0e2b\\u0e19\\u0e49\\u0e32\\u0e14\\u0e49\\u0e27\\u0e22\\u0e15\\u0e32\\u0e22\\u0e34\\u0e49\\u0e21\",\n    \"Kissing face with closed eyes\": \"\\u0e08\\u0e39\\u0e1a\\u0e2b\\u0e19\\u0e49\\u0e32\\u0e14\\u0e49\\u0e27\\u0e22\\u0e14\\u0e27\\u0e07\\u0e15\\u0e32\\u0e17\\u0e35\\u0e48\\u0e1b\\u0e34\\u0e14\\u0e2a\\u0e19\\u0e34\\u0e17\",\n    \"Face with stuck out tongue\": \"\\u0e43\\u0e1a\\u0e2b\\u0e19\\u0e49\\u0e32\\u0e21\\u0e35\\u0e41\\u0e1e\\u0e25\\u0e21\\u0e2d\\u0e2d\\u0e01\\u0e21\\u0e32\\u0e25\\u0e34\\u0e49\\u0e19\",\n    \"Face with stuck out tongue and winking eye\": \"\\u0e43\\u0e1a\\u0e2b\\u0e19\\u0e49\\u0e32\\u0e21\\u0e35\\u0e15\\u0e34\\u0e14\\u0e25\\u0e34\\u0e49\\u0e19\\u0e41\\u0e25\\u0e30\\u0e15\\u0e32\\u0e02\\u0e22\\u0e34\\u0e1a\\u0e15\\u0e32\",\n    \"Face with stuck out tongue and tightly-closed eyes\": \"\\u0e43\\u0e1a\\u0e2b\\u0e19\\u0e49\\u0e32\\u0e21\\u0e35\\u0e15\\u0e34\\u0e14\\u0e25\\u0e34\\u0e49\\u0e19\\u0e41\\u0e25\\u0e30\\u0e14\\u0e27\\u0e07\\u0e15\\u0e32\\u0e17\\u0e35\\u0e48\\u0e1b\\u0e34\\u0e14\\u0e41\\u0e19\\u0e48\\u0e19\",\n    \"Disappointed face\": \"\\u0e43\\u0e1a\\u0e2b\\u0e19\\u0e49\\u0e32\\u0e1c\\u0e34\\u0e14\\u0e2b\\u0e27\\u0e31\\u0e07\",\n    \"Worried face\": \"\\u0e43\\u0e1a\\u0e2b\\u0e19\\u0e49\\u0e32\\u0e01\\u0e31\\u0e07\\u0e27\\u0e25\",\n    \"Angry face\": \"\\u0e43\\u0e1a\\u0e2b\\u0e19\\u0e49\\u0e32\\u0e42\\u0e01\\u0e23\\u0e18\",\n    \"Pouting face\": \"\\u0e2b\\u0e19\\u0e49\\u0e32\\u0e21\\u0e38\\u0e48\\u0e22\",\n    \"Crying face\": \"\\u0e43\\u0e1a\\u0e2b\\u0e19\\u0e49\\u0e32\\u0e23\\u0e49\\u0e2d\\u0e07\\u0e44\\u0e2b\\u0e49\",\n    \"Persevering face\": \"\\u0e43\\u0e1a\\u0e2b\\u0e19\\u0e49\\u0e32\\u0e40\\u0e2d\\u0e32\\u0e16\\u0e48\\u0e32\\u0e19\",\n    \"Face with look of triumph\": \"\\u0e43\\u0e1a\\u0e2b\\u0e19\\u0e49\\u0e32\\u0e01\\u0e31\\u0e1a\\u0e23\\u0e39\\u0e1b\\u0e25\\u0e31\\u0e01\\u0e29\\u0e13\\u0e4c\\u0e02\\u0e2d\\u0e07\\u0e0a\\u0e31\\u0e22\\u0e0a\\u0e19\\u0e30\",\n    \"Disappointed but relieved face\": \"\\u0e43\\u0e1a\\u0e2b\\u0e19\\u0e49\\u0e32\\u0e1c\\u0e34\\u0e14\\u0e2b\\u0e27\\u0e31\\u0e07 \\u0e41\\u0e15\\u0e48\\u0e42\\u0e25\\u0e48\\u0e07\\u0e43\\u0e08\",\n    \"Frowning face with open mouth\": \"\\u0e2b\\u0e19\\u0e49\\u0e32\\u0e21\\u0e38\\u0e48\\u0e22\\u0e17\\u0e35\\u0e48\\u0e21\\u0e35\\u0e1b\\u0e32\\u0e01\\u0e40\\u0e1b\\u0e34\\u0e14\",\n    \"Anguished face\": \"\\u0e43\\u0e1a\\u0e2b\\u0e19\\u0e49\\u0e32\\u0e01\\u0e14\\u0e02\\u0e35\\u0e48\",\n    \"Fearful face\": \"\\u0e43\\u0e1a\\u0e2b\\u0e19\\u0e49\\u0e32\\u0e17\\u0e35\\u0e48\\u0e19\\u0e48\\u0e32\\u0e01\\u0e25\\u0e31\\u0e27\",\n    \"Weary face\": \"\\u0e43\\u0e1a\\u0e2b\\u0e19\\u0e49\\u0e32\\u0e17\\u0e35\\u0e48\\u0e40\\u0e2b\\u0e19\\u0e37\\u0e48\\u0e2d\\u0e22\\u0e25\\u0e49\\u0e32\",\n    \"Sleepy face\": \"\\u0e2b\\u0e19\\u0e49\\u0e32\\u0e07\\u0e48\\u0e27\\u0e07\\u0e19\\u0e2d\\u0e19\",\n    \"Tired face\": \"\\u0e2b\\u0e19\\u0e49\\u0e32\\u0e40\\u0e1a\\u0e37\\u0e48\\u0e2d\",\n    \"Grimacing face\": \"\\u0e43\\u0e1a\\u0e2b\\u0e19\\u0e49\\u0e32 \\u0067\\u0072\\u0069\\u006d\\u0061\\u0063\\u0069\\u006e\\u0067\",\n    \"Loudly crying face\": \"\\u0e23\\u0e49\\u0e2d\\u0e07\\u0e44\\u0e2b\\u0e49\\u0e40\\u0e2a\\u0e35\\u0e22\\u0e07\\u0e14\\u0e31\\u0e07\\u0e2b\\u0e19\\u0e49\\u0e32\",\n    \"Face with open mouth\": \"\\u0e43\\u0e1a\\u0e2b\\u0e19\\u0e49\\u0e32\\u0e17\\u0e35\\u0e48\\u0e21\\u0e35\\u0e1b\\u0e32\\u0e01\\u0e40\\u0e1b\\u0e34\\u0e14\",\n    \"Hushed face\": \"\\u0e43\\u0e1a\\u0e2b\\u0e19\\u0e49\\u0e32\\u0e40\\u0e07\\u0e35\\u0e22\\u0e1a\",\n    \"Face with open mouth and cold sweat\": \"หน้ากับปากเปิดและเหงื่อเย็น\",\n    \"Face screaming in fear\": \"\\u0e43\\u0e1a\\u0e2b\\u0e19\\u0e49\\u0e32\\u0e17\\u0e35\\u0e48\\u0e21\\u0e35\\u0e1b\\u0e32\\u0e01\\u0e40\\u0e1b\\u0e34\\u0e14\\u0e41\\u0e25\\u0e30\\u0e40\\u0e2b\\u0e07\\u0e37\\u0e48\\u0e2d\\u0e40\\u0e22\\u0e47\\u0e19\",\n    \"Astonished face\": \"\\u0e43\\u0e1a\\u0e2b\\u0e19\\u0e49\\u0e32\\u0e1b\\u0e23\\u0e30\\u0e2b\\u0e25\\u0e32\\u0e14\\u0e43\\u0e08\",\n    \"Flushed face\": \"\\u0e43\\u0e1a\\u0e2b\\u0e19\\u0e49\\u0e32\\u0e41\\u0e14\\u0e07\",\n    \"Sleeping face\": \"\\u0e43\\u0e1a\\u0e2b\\u0e19\\u0e49\\u0e32\\u0e19\\u0e2d\\u0e19\",\n    \"Dizzy face\": \"\\u0e43\\u0e1a\\u0e2b\\u0e19\\u0e49\\u0e32\\u0e15\\u0e32\\u0e25\\u0e32\\u0e22\",\n    \"Face without mouth\": \"\\u0e43\\u0e1a\\u0e2b\\u0e19\\u0e49\\u0e32\\u0e42\\u0e14\\u0e22\\u0e44\\u0e21\\u0e48\\u0e15\\u0e49\\u0e2d\\u0e07\\u0e1b\\u0e32\\u0e01\",\n    \"Face with medical mask\": \"\\u0e43\\u0e1a\\u0e2b\\u0e19\\u0e49\\u0e32\\u0e14\\u0e49\\u0e27\\u0e22\\u0e2b\\u0e19\\u0e49\\u0e32\\u0e01\\u0e32\\u0e01\\u0e17\\u0e32\\u0e07\\u0e01\\u0e32\\u0e23\\u0e41\\u0e1e\\u0e17\\u0e22\\u0e4c\",\n\n    // Line breaker\n    \"Break\": \"\\u0e2b\\u0e22\\u0e38\\u0e14\",\n\n    // Math\n    \"Subscript\": \"\\u0e15\\u0e31\\u0e27\\u0e2b\\u0e49\\u0e2d\\u0e22\",\n    \"Superscript\": \"\\u0e15\\u0e31\\u0e27\\u0e22\\u0e01\",\n\n    // Full screen\n    \"Fullscreen\": \"\\u0e40\\u0e15\\u0e47\\u0e21\\u0e2b\\u0e19\\u0e49\\u0e32\\u0e08\\u0e2d\",\n\n    // Horizontal line\n    \"Insert Horizontal Line\": \"\\u0e41\\u0e17\\u0e23\\u0e01\\u0e40\\u0e2a\\u0e49\\u0e19\\u0e41\\u0e19\\u0e27\\u0e19\\u0e2d\\u0e19\",\n\n    // Clear formatting\n    \"Clear Formatting\": \"\\u0e19\\u0e33\\u0e01\\u0e32\\u0e23\\u0e08\\u0e31\\u0e14\\u0e23\\u0e39\\u0e1b\\u0e41\\u0e1a\\u0e1a\",\n\n    // Save\n    \"Save\": \"\\u0e1a\\u0e31\\u0e19\\u0e17\\u0e36\\u0e01\",\n\n    // Undo, redo\n    \"Undo\": \"\\u0e40\\u0e25\\u0e34\\u0e01\\u0e17\\u0e33\",\n    \"Redo\": \"\\u0e17\\u0e4d\\u0e32\\u0e0b\\u0e49\\u0e33\",\n\n    // Select all\n    \"Select All\": \"\\u0e40\\u0e25\\u0e37\\u0e2d\\u0e01\\u0e17\\u0e31\\u0e49\\u0e07\\u0e2b\\u0e21\\u0e14\",\n\n    // Code view\n    \"Code View\": \"\\u0e21\\u0e38\\u0e21\\u0e21\\u0e2d\\u0e07\\u0e23\\u0e2b\\u0e31\\u0e2a\",\n\n    // Quote\n    \"Quote\": \"\\u0e2d\\u0e49\\u0e32\\u0e07\",\n    \"Increase\": \"\\u0e40\\u0e1e\\u0e34\\u0e48\\u0e21\",\n    \"Decrease\": \"\\u0e25\\u0e14\\u0e25\\u0e07\",\n\n    // Quick Insert\n    \"Quick Insert\": \"\\u0e41\\u0e17\\u0e23\\u0e01\\u0e14\\u0e48\\u0e27\\u0e19\",\n\n    // Spcial Characters\n    \"Special Characters\": \"อักขระพิเศษ\",\n    \"Latin\": \"ละติน\",\n    \"Greek\": \"กรีก\",\n    \"Cyrillic\": \"ริลลิก\",\n    \"Punctuation\": \"วรรคตอน\",\n    \"Currency\": \"เงินตรา\",\n    \"Arrows\": \"ลูกศร\",\n    \"Math\": \"คณิตศาสตร์\",\n    \"Misc\": \"อื่น ๆ\",\n\n    // Print.\n    \"Print\": \"พิมพ์\",\n\n    // Spell Checker.\n    \"Spell Checker\": \"ตัวตรวจสอบการสะกด\",\n\n    // Help\n    \"Help\": \"ช่วยด้วย\",\n    \"Shortcuts\": \"ทางลัด\",\n    \"Inline Editor\": \"ตัวแก้ไขแบบอินไลน์\",\n    \"Show the editor\": \"แสดงตัวแก้ไข\",\n    \"Common actions\": \"การกระทำร่วมกัน\",\n    \"Copy\": \"สำเนา\",\n    \"Cut\": \"ตัด\",\n    \"Paste\": \"แปะ\",\n    \"Basic Formatting\": \"การจัดรูปแบบพื้นฐาน\",\n    \"Increase quote level\": \"ระดับราคาเพิ่มขึ้น\",\n    \"Decrease quote level\": \"ระดับราคาลดลง\",\n    \"Image / Video\": \"ภาพ / วิดีโอ\",\n    \"Resize larger\": \"ปรับขนาดใหญ่ขึ้น\",\n    \"Resize smaller\": \"ปรับขนาดเล็กลง\",\n    \"Table\": \"ตาราง\",\n    \"Select table cell\": \"เลือกเซลล์ตาราง\",\n    \"Extend selection one cell\": \"ขยายการเลือกหนึ่งเซลล์\",\n    \"Extend selection one row\": \"ขยายการเลือกหนึ่งแถว\",\n    \"Navigation\": \"การเดินเรือ\",\n    \"Focus popup / toolbar\": \"โฟกัสป๊อปอัพ / แถบเครื่องมือ\",\n    \"Return focus to previous position\": \"กลับไปยังตำแหน่งก่อนหน้า\",\n\n    // Embed.ly\n    \"Embed URL\": \"ฝัง URL\",\n    \"Paste in a URL to embed\": \"วางใน url เพื่อฝัง\",\n\n    // Word Paste.\n    \"The pasted content is coming from a Microsoft Word document. Do you want to keep the format or clean it up?\": \"เนื้อหาที่วางจะมาจากเอกสารคำในแบบ microsoft คุณต้องการเก็บรูปแบบหรือทำความสะอาดหรือไม่?\",\n    \"Keep\": \"เก็บ\",\n    \"Clean\": \"สะอาด\",\n    \"Word Paste Detected\": \"ตรวจพบการวางคำ\"\n  },\n  direction: \"ltr\"\n};\n\n}));\n"
  },
  {
    "path": "src/main/resources/static/plugins/froala-editor/js/languages/tr.js",
    "content": "/*!\n * froala_editor v2.9.1 (https://www.froala.com/wysiwyg-editor)\n * License https://froala.com/wysiwyg-editor/terms/\n * Copyright 2014-2018 Froala Labs\n */\n\n(function (factory) {\n    if (typeof define === 'function' && define.amd) {\n        // AMD. Register as an anonymous module.\n        define(['jquery'], factory);\n    } else if (typeof module === 'object' && module.exports) {\n        // Node/CommonJS\n        module.exports = function( root, jQuery ) {\n            if ( jQuery === undefined ) {\n                // require('jQuery') returns a factory that requires window to\n                // build a jQuery instance, we normalize how we use modules\n                // that require this pattern but the window provided is a noop\n                // if it's defined (how jquery works)\n                if ( typeof window !== 'undefined' ) {\n                    jQuery = require('jquery');\n                }\n                else {\n                    jQuery = require('jquery')(root);\n                }\n            }\n            return factory(jQuery);\n        };\n    } else {\n        // Browser globals\n        factory(window.jQuery);\n    }\n}(function ($) {\n/**\n * Turkish\n */\n\n$.FE.LANGUAGE['tr'] = {\n  translation: {\n    // Place holder\n    \"Type something\": \"Bir \\u015fey yaz\\u0131n\",\n\n    // Basic formatting\n    \"Bold\": \"Kal\\u0131n\",\n    \"Italic\": \"\\u0130talik\",\n    \"Underline\": \"Alt\\u0131 \\u00e7izili\",\n    \"Strikethrough\": \"\\u00dcst\\u00fc \\u00e7izili\",\n\n    // Main buttons\n    \"Insert\": \"Ekle\",\n    \"Delete\": \"Silmek\",\n    \"Cancel\": \"\\u0130ptal\",\n    \"OK\": \"Tamam\",\n    \"Back\": \"Geri\",\n    \"Remove\": \"Kald\\u0131r\",\n    \"More\": \"Daha\",\n    \"Update\": \"G\\u00fcncelle\\u015ftirme\",\n    \"Style\": \"Stil\",\n\n    // Font\n    \"Font Family\": \"Yaz\\u0131tipi Ailesi\",\n    \"Font Size\": \"Yaz\\u0131tipi B\\u00fcy\\u00fckl\\u00fc\\u011f\\u00fc\",\n\n    // Colors\n    \"Colors\": \"Renkler\",\n    \"Background\": \"Arkaplan\",\n    \"Text\": \"Metin\",\n    \"HEX Color\": \"Altı renkli\",\n\n    // Paragraphs\n    \"Paragraph Format\": \"Bi\\u00e7imler\",\n    \"Normal\": \"Normal\",\n    \"Code\": \"Kod\",\n    \"Heading 1\": \"Ba\\u015fl\\u0131k 1\",\n    \"Heading 2\": \"Ba\\u015fl\\u0131k 2\",\n    \"Heading 3\": \"Ba\\u015fl\\u0131k 3\",\n    \"Heading 4\": \"Ba\\u015fl\\u0131k 4\",\n\n    // Style\n    \"Paragraph Style\": \"Paragraf stili\",\n    \"Inline Style\": \"\\u00c7izgide stili\",\n\n    // Alignment\n    \"Align\": \"Hizalama\",\n    \"Align Left\": \"Sola hizala\",\n    \"Align Center\": \"Ortala\",\n    \"Align Right\": \"Sa\\u011fa hizala\",\n    \"Align Justify\": \"\\u0130ki yana yasla\",\n    \"None\": \"Hi\\u00e7biri\",\n\n    // Lists\n    \"Ordered List\": \"S\\u0131ral\\u0131 liste\",\n    \"Unordered List\": \"S\\u0131ras\\u0131z liste\",\n\n    // Indent\n    \"Decrease Indent\": \"Girintiyi azalt\",\n    \"Increase Indent\": \"Girintiyi art\\u0131r\",\n\n    // Links\n    \"Insert Link\": \"Ba\\u011flant\\u0131 ekle\",\n    \"Open in new tab\": \"Yeni sekmede a\\u00e7\",\n    \"Open Link\": \"Linki a\\u00e7\",\n    \"Edit Link\": \"D\\u00fczenleme ba\\u011flant\\u0131s\\u0131\",\n    \"Unlink\": \"Ba\\u011flant\\u0131y\\u0131 kald\\u0131r\",\n    \"Choose Link\": \"Ba\\u011flant\\u0131y\\u0131 se\\u00e7in\",\n\n    // Images\n    \"Insert Image\": \"Resim ekle\",\n    \"Upload Image\": \"Y\\u00fckleme g\\u00f6r\\u00fcnt\\u00fcs\\u00fc\",\n    \"By URL\": \"URL'ye g\\u00f6re\",\n    \"Browse\": \"G\\u00f6zat\",\n    \"Drop image\": \"B\\u0131rak resim\",\n    \"or click\": \"ya da t\\u0131klay\\u0131n\",\n    \"Manage Images\": \"G\\u00f6r\\u00fcnt\\u00fcleri y\\u00f6netin\",\n    \"Loading\": \"Y\\u00fckleniyor\",\n    \"Deleting\": \"Silme\",\n    \"Tags\": \"Etiketler\",\n    \"Are you sure? Image will be deleted.\": \"Emin misin? Resim silinecektir.\",\n    \"Replace\": \"De\\u011fi\\u015ftirmek\",\n    \"Uploading\": \"Y\\u00fckleme\",\n    \"Loading image\": \"Y\\u00fckleme g\\u00f6r\\u00fcnt\\u00fcs\\u00fc\",\n    \"Display\": \"G\\u00f6stermek\",\n    \"Inline\": \"\\u00c7izgide\",\n    \"Break Text\": \"K\\u0131r\\u0131lma metni\",\n    \"Alternative Text\": \"Alternatif metin\",\n    \"Change Size\": \"De\\u011fi\\u015fim boyutu\",\n    \"Width\": \"Geni\\u015flik\",\n    \"Height\": \"Y\\u00fckseklik\",\n    \"Something went wrong. Please try again.\": \"Bir \\u015feyler yanl\\u0131\\u015f gitti. L\\u00fctfen tekrar deneyin.\",\n    \"Image Caption\": \"Resim yazısı\",\n    \"Advanced Edit\": \"Ileri düzey düzenleme\",\n\n    // Video\n    \"Insert Video\": \"Video ekle\",\n    \"Embedded Code\": \"G\\u00f6m\\u00fcl\\u00fc kod\",\n    \"Paste in a video URL\": \"Bir video URL'sine yapıştırın\",\n    \"Drop video\": \"Video bırak\",\n    \"Your browser does not support HTML5 video.\": \"Tarayıcınız html5 videoyu desteklemez.\",\n    \"Upload Video\": \"Video yükle\",\n\n    // Tables\n    \"Insert Table\": \"Tablo ekle\",\n    \"Table Header\": \"Tablo \\u00fcstbilgisi\",\n    \"Remove Table\": \"Tablo kald\\u0131rma\",\n    \"Table Style\": \"Tablo stili\",\n    \"Horizontal Align\": \"Yatay hizalama\",\n    \"Row\": \"Sat\\u0131r\",\n    \"Insert row above\": \"\\u00d6ncesine yeni sat\\u0131r ekle\",\n    \"Insert row below\": \"Sonras\\u0131na yeni sat\\u0131r ekle\",\n    \"Delete row\": \"Sat\\u0131r\\u0131 sil\",\n    \"Column\": \"S\\u00fctun\",\n    \"Insert column before\": \"\\u00d6ncesine yeni s\\u00fctun ekle\",\n    \"Insert column after\": \"Sonras\\u0131na yeni s\\u00fctun ekle\",\n    \"Delete column\": \"S\\u00fctunu sil\",\n    \"Cell\": \"H\\u00fccre\",\n    \"Merge cells\": \"H\\u00fccreleri birle\\u015ftir\",\n    \"Horizontal split\": \"Yatay b\\u00f6l\\u00fcnm\\u00fc\\u015f\",\n    \"Vertical split\": \"Dikey  b\\u00f6l\\u00fcnm\\u00fc\\u015f\",\n    \"Cell Background\": \"H\\u00fccre arka plan\\u0131\",\n    \"Vertical Align\": \"Dikey hizalama\",\n    \"Top\": \"\\u00dcst\",\n    \"Middle\": \"Orta\",\n    \"Bottom\": \"Alt\",\n    \"Align Top\": \"\\u00dcst hizalama\",\n    \"Align Middle\": \"Orta hizalama\",\n    \"Align Bottom\": \"Dibe hizalama\",\n    \"Cell Style\": \"H\\u00fccre stili\",\n\n    // Files\n    \"Upload File\": \"Dosya Y\\u00fckle\",\n    \"Drop file\": \"B\\u0131rak dosya\",\n\n    // Emoticons\n    \"Emoticons\": \"\\u0130fadeler\",\n    \"Grinning face\": \"S\\u0131r\\u0131tan y\\u00fcz\",\n    \"Grinning face with smiling eyes\": \"G\\u00fclen g\\u00f6zlerle y\\u00fcz s\\u0131r\\u0131tarak\",\n    \"Face with tears of joy\": \"Sevin\\u00e7 g\\u00f6zya\\u015flar\\u0131yla Y\\u00fcz\",\n    \"Smiling face with open mouth\": \"A\\u00e7\\u0131k a\\u011fz\\u0131 ile g\\u00fcl\\u00fcmseyen y\\u00fcz\\u00fc\",\n    \"Smiling face with open mouth and smiling eyes\": \"A\\u00e7\\u0131k a\\u011fzı ve g\\u00fcl\\u00fcmseyen g\\u00f6zlerle g\\u00fcler y\\u00fcz\",\n    \"Smiling face with open mouth and cold sweat\": \"A\\u00e7\\u0131k a\\u011fz\\u0131 ve so\\u011fuk ter ile g\\u00fclen y\\u00fcz\\u00fc\",\n    \"Smiling face with open mouth and tightly-closed eyes\": \"A\\u00e7\\u0131k a\\u011fz\\u0131 s\\u0131k\\u0131ca kapal\\u0131 g\\u00f6zlerle g\\u00fclen y\\u00fcz\\u00fc\",\n    \"Smiling face with halo\": \"Halo ile y\\u00fcz g\\u00fclen\",\n    \"Smiling face with horns\": \"Boynuzlar\\u0131 ile g\\u00fcler y\\u00fcz\",\n    \"Winking face\": \"G\\u00f6z a\\u00e7\\u0131p kapay\\u0131ncaya y\\u00fcz\\u00fc\",\n    \"Smiling face with smiling eyes\": \"G\\u00fclen g\\u00f6zlerle g\\u00fcler Y\\u00fcz\",\n    \"Face savoring delicious food\": \"Lezzetli yemekler tad\\u0131n\\u0131 Y\\u00fcz\",\n    \"Relieved face\": \"Rahatlad\\u0131m y\\u00fcz\\u00fc\",\n    \"Smiling face with heart-shaped eyes\": \"Kalp \\u015feklinde g\\u00f6zlerle g\\u00fcler y\\u00fcz\",\n    \"Smiling face with sunglasses\": \"Kalp \\u015feklinde g\\u00f6zlerle g\\u00fcler y\\u00fcz\",\n    \"Smirking face\": \"S\\u0131r\\u0131tan y\\u00fcz\",\n    \"Neutral face\": \"N\\u00f6tr y\\u00fcz\",\n    \"Expressionless face\": \"Ifadesiz y\\u00fcz\\u00fc\",\n    \"Unamused face\": \"Kay\\u0131ts\\u0131z y\\u00fcz\\u00fc\",\n    \"Face with cold sweat\": \"So\\u011fuk terler Y\\u00fcz\",\n    \"Pensive face\": \"dalg\\u0131n bir y\\u00fcz\",\n    \"Confused face\": \"\\u015fa\\u015fk\\u0131n bir y\\u00fcz\",\n    \"Confounded face\": \"Ele\\u015ftirilmi\\u015ftir y\\u00fcz\\u00fc\",\n    \"Kissing face\": \"\\u00f6p\\u00fc\\u015fme y\\u00fcz\\u00fc\",\n    \"Face throwing a kiss\": \"Bir \\u00f6p\\u00fcc\\u00fck atma Y\\u00fcz\",\n    \"Kissing face with smiling eyes\": \"G\\u00fclen g\\u00f6zlerle y\\u00fcz \\u00f6p\\u00fc\\u015fme\",\n    \"Kissing face with closed eyes\": \"Kapal\\u0131 g\\u00f6zlerle \\u00f6p\\u00f6\\u015fme y\\u00fcz\",\n    \"Face with stuck out tongue\": \"Dilini y\\u00fcz ile s\\u0131k\\u0131\\u015fm\\u0131\\u015f\",\n    \"Face with stuck out tongue and winking eye\": \"\\u015ea\\u015f\\u0131r\\u0131p kalm\\u0131\\u015f d\\u0131\\u015far\\u0131 dil ve g\\u00f6z k\\u0131rpan y\\u00fcz\",\n    \"Face with stuck out tongue and tightly-closed eyes\": \"Y\\u00fcz ile dil ve s\\u0131k\\u0131ca kapal\\u0131 g\\u00f6zleri s\\u0131k\\u0131\\u015fm\\u0131\\u015f\",\n    \"Disappointed face\": \"Hayal k\\u0131r\\u0131kl\\u0131\\u011f\\u0131na y\\u00fcz\\u00fc\",\n    \"Worried face\": \"Endi\\u015feli bir y\\u00fcz\",\n    \"Angry face\": \"K\\u0131zg\\u0131n y\\u00fcz\",\n    \"Pouting face\": \"Somurtarak y\\u00fcz\\u00fc\",\n    \"Crying face\": \"A\\u011flayan y\\u00fcz\",\n    \"Persevering face\": \"Azmeden y\\u00fcz\\u00fc\",\n    \"Face with look of triumph\": \"Zafer bak\\u0131\\u015fla Y\\u00fcz\",\n    \"Disappointed but relieved face\": \"Hayal k\\u0131r\\u0131kl\\u0131\\u011f\\u0131 ama rahatlad\\u0131m y\\u00fcz\",\n    \"Frowning face with open mouth\": \"A\\u00e7\\u0131k a\\u011fz\\u0131 ile \\u00e7at\\u0131k y\\u00fcz\\u00fc\",\n    \"Anguished face\": \"Kederli y\\u00fcz\",\n    \"Fearful face\": \"Korkulu y\\u00fcz\\u00fc\",\n    \"Weary face\": \"Yorgun y\\u00fcz\\u00fc\",\n    \"Sleepy face\": \"Uykulu y\\u00fcz\\u00fc\",\n    \"Tired face\": \"Yorgun y\\u00fcz\\u00fc\",\n    \"Grimacing face\": \"Y\\u00fcz\\u00fcn\\u00fc buru\\u015fturarak y\\u00fcz\\u00fc\",\n    \"Loudly crying face\": \"Y\\u00fcksek sesle y\\u00fcz\\u00fc a\\u011fl\\u0131yor\",\n    \"Face with open mouth\": \"A\\u00e7\\u0131k a\\u011fz\\u0131 ile Y\\u00fcz\",\n    \"Hushed face\": \"Dingin y\\u00fcz\\u00fc\",\n    \"Face with open mouth and cold sweat\": \"A\\u00e7\\u0131k a\\u011fz\\u0131 ve so\\u011fuk ter ile Y\\u00fcz\",\n    \"Face screaming in fear\": \"Korku i\\u00e7inde \\u00e7ı\\u011fl\\u0131k Y\\u00fcz\",\n    \"Astonished face\": \"\\u015fa\\u015fk\\u0131n bir y\\u00fcz\",\n    \"Flushed face\": \"K\\u0131zarm\\u0131\\u015f y\\u00fcz\\u00fc\",\n    \"Sleeping face\": \"Uyuyan y\\u00fcz\\u00fc\",\n    \"Dizzy face\": \"Ba\\u015f\\u0131m d\\u00f6nd\\u00fc y\\u00fcz\",\n    \"Face without mouth\": \"A\\u011f\\u0131z olmadan Y\\u00fcz\",\n    \"Face with medical mask\": \"T\\u0131bbi maske ile y\\u00fcz\",\n\n    // Line breaker\n    \"Break\": \"K\\u0131r\\u0131lma\",\n\n    // Math\n    \"Subscript\": \"Alt simge\",\n    \"Superscript\": \"\\u00dcst simge\",\n\n    // Full screen\n    \"Fullscreen\": \"Tam ekran\",\n\n    // Horizontal line\n    \"Insert Horizontal Line\": \"Yatay \\u00e7izgi ekleme\",\n\n    // Clear formatting\n    \"Clear Formatting\": \"Bi\\u00e7imlendirme kald\\u0131r\",\n\n    // Save\n    \"Save\": \"Kayıt etmek\",\n\n    // Undo, redo\n    \"Undo\": \"Geri Al\",\n    \"Redo\": \"Yinele\",\n\n    // Select all\n    \"Select All\": \"T\\u00fcm\\u00fcn\\u00fc se\\u00e7\",\n\n    // Code view\n    \"Code View\": \"Kod g\\u00f6r\\u00fcn\\u00fcm\\u00fc\",\n\n    // Quote\n    \"Quote\": \"Al\\u0131nt\\u0131\",\n    \"Increase\": \"Art\\u0131rmak\",\n    \"Decrease\": \"Azal\\u0131\\u015f\",\n\n    // Quick Insert\n    \"Quick Insert\": \"H\\u0131zl\\u0131 insert\",\n\n    // Spcial Characters\n    \"Special Characters\": \"Özel karakterler\",\n    \"Latin\": \"Latince\",\n    \"Greek\": \"Yunan\",\n    \"Cyrillic\": \"Kiril\",\n    \"Punctuation\": \"Noktalama\",\n    \"Currency\": \"Para birimi\",\n    \"Arrows\": \"Oklar\",\n    \"Math\": \"Matematik\",\n    \"Misc\": \"Misc\",\n\n    // Print.\n    \"Print\": \"Baskı\",\n\n    // Spell Checker.\n    \"Spell Checker\": \"Yazım denetleyicisi\",\n\n    // Help\n    \"Help\": \"Yardım et\",\n    \"Shortcuts\": \"Kısayollar\",\n    \"Inline Editor\": \"Satır içi düzenleyici\",\n    \"Show the editor\": \"Editörü gösterin\",\n    \"Common actions\": \"Ortak eylemler\",\n    \"Copy\": \"Kopya\",\n    \"Cut\": \"Kesim\",\n    \"Paste\": \"Yapıştırmak\",\n    \"Basic Formatting\": \"Temel biçimlendirme\",\n    \"Increase quote level\": \"Teklif seviyesini yükselt\",\n    \"Decrease quote level\": \"Teklif seviyesini azalt\",\n    \"Image / Video\": \"Resim / video\",\n    \"Resize larger\": \"Daha büyük yeniden boyutlandır\",\n    \"Resize smaller\": \"Daha küçük boyuta getir\",\n    \"Table\": \"Tablo\",\n    \"Select table cell\": \"Tablo hücresi seç\",\n    \"Extend selection one cell\": \"Seçimi bir hücre genişlet\",\n    \"Extend selection one row\": \"Seçimi bir sıra genişlet\",\n    \"Navigation\": \"Navigasyon\",\n    \"Focus popup / toolbar\": \"Odaklanma açılır penceresi / araç çubuğu\",\n    \"Return focus to previous position\": \"Odaklamaya önceki konumuna geri dönün\",\n\n    // Embed.ly\n    \"Embed URL\": \"URL göm\",\n    \"Paste in a URL to embed\": \"Yerleştirmek için bir URL'ye yapıştırın\",\n\n    // Word Paste.\n    \"The pasted content is coming from a Microsoft Word document. Do you want to keep the format or clean it up?\": \"Yapıştırılan içerik bir Microsoft Word belgesinden geliyor. Biçimi saklamaya mı yoksa temizlemeyi mi istiyor musun?\",\n    \"Keep\": \"Tutmak\",\n    \"Clean\": \"Temiz\",\n    \"Word Paste Detected\": \"Kelime yapıştırması algılandı\"\n  },\n  direction: \"ltr\"\n};\n\n}));\n"
  },
  {
    "path": "src/main/resources/static/plugins/froala-editor/js/languages/uk.js",
    "content": "/*!\n * froala_editor v2.9.1 (https://www.froala.com/wysiwyg-editor)\n * License https://froala.com/wysiwyg-editor/terms/\n * Copyright 2014-2018 Froala Labs\n */\n\n(function (factory) {\n    if (typeof define === 'function' && define.amd) {\n        // AMD. Register as an anonymous module.\n        define(['jquery'], factory);\n    } else if (typeof module === 'object' && module.exports) {\n        // Node/CommonJS\n        module.exports = function( root, jQuery ) {\n            if ( jQuery === undefined ) {\n                // require('jQuery') returns a factory that requires window to\n                // build a jQuery instance, we normalize how we use modules\n                // that require this pattern but the window provided is a noop\n                // if it's defined (how jquery works)\n                if ( typeof window !== 'undefined' ) {\n                    jQuery = require('jquery');\n                }\n                else {\n                    jQuery = require('jquery')(root);\n                }\n            }\n            return factory(jQuery);\n        };\n    } else {\n        // Browser globals\n        factory(window.jQuery);\n    }\n}(function ($) {\n/**\n * Ukrainian\n */\n\n$.FE.LANGUAGE['uk'] = {\n  translation: {\n    // Place holder\n    \"Type something\": \"\\u041d\\u0430\\u043f\\u0438\\u0448\\u0456\\u0442\\u044c \\u0431\\u0443\\u0434\\u044c-\\u0449\\u043e\",\n\n    // Basic formatting\n    \"Bold\": \"\\u0416\\u0438\\u0440\\u043d\\u0438\\u0439\",\n    \"Italic\": \"\\u041a\\u0443\\u0440\\u0441\\u0438\\u0432\",\n    \"Underline\": \"\\u041f\\u0456\\u0434\\u043a\\u0440\\u0435\\u0441\\u043b\\u0435\\u043d\\u0438\\u0439\",\n    \"Strikethrough\": \"\\u0417\\u0430\\u043a\\u0440\\u0435\\u0441\\u043b\\u0435\\u043d\\u0438\\u0439\",\n\n    // Main buttons\n    \"Insert\": \"\\u0432\\u0441\\u0442\\u0430\\u0432\\u0438\\u0442\\u0438\",\n    \"Delete\": \"\\u0412\\u0438\\u0434\\u0430\\u043b\\u0438\\u0442\\u0438\",\n    \"Cancel\": \"\\u0421\\u043a\\u0430\\u0441\\u0443\\u0432\\u0430\\u0442\\u0438\",\n    \"OK\": \"OK\",\n    \"Back\": \"\\u043d\\u0430\\u0437\\u0430\\u0434\",\n    \"Remove\": \"\\u0432\\u0438\\u0434\\u0430\\u043b\\u0438\\u0442\\u0438\",\n    \"More\": \"\\u0431\\u0456\\u043b\\u044c\\u0448\\u0435\",\n    \"Update\": \"\\u043e\\u043d\\u043e\\u0432\\u043b\\u0435\\u043d\\u043d\\u044f\",\n    \"Style\": \"\\u0441\\u0442\\u0438\\u043b\\u044c\",\n\n    // Font\n    \"Font Family\": \"\\u0428\\u0440\\u0438\\u0444\\u0442\",\n    \"Font Size\": \"\\u0420\\u043e\\u0437\\u043c\\u0456\\u0440 \\u0448\\u0440\\u0438\\u0444\\u0442\\u0443\",\n\n    // Colors\n    \"Colors\": \"\\u043a\\u043e\\u043b\\u044c\\u043e\\u0440\\u0438\",\n    \"Background\": \"\\u0424\\u043e\\u043d\",\n    \"Text\": \"\\u0422\\u0435\\u043a\\u0441\\u0442\",\n    \"HEX Color\": \"Шістнадцятковий колір\",\n\n    // Paragraphs\n    \"Paragraph Format\": \"\\u0424\\u043e\\u0440\\u043c\\u0430\\u0442\",\n    \"Normal\": \"\\u041d\\u043e\\u0440\\u043c\\u0430\\u043b\\u044c\\u043d\\u0438\\u0439\",\n    \"Code\": \"\\u041a\\u043e\\u0434\",\n    \"Heading 1\": \"\\u0417\\u0430\\u0433\\u043e\\u043b\\u043e\\u0432\\u043e\\u043a 1\",\n    \"Heading 2\": \"\\u0417\\u0430\\u0433\\u043e\\u043b\\u043e\\u0432\\u043e\\u043a 2\",\n    \"Heading 3\": \"\\u0417\\u0430\\u0433\\u043e\\u043b\\u043e\\u0432\\u043e\\u043a 3\",\n    \"Heading 4\": \"\\u0417\\u0430\\u0433\\u043e\\u043b\\u043e\\u0432\\u043e\\u043a 4\",\n\n    // Style\n    \"Paragraph Style\": \"\\u043f\\u0443\\u043d\\u043a\\u0442 \\u0441\\u0442\\u0438\\u043b\\u044c\",\n    \"Inline Style\": \"\\u0432\\u0431\\u0443\\u0434\\u043e\\u0432\\u0430\\u043d\\u0438\\u0439 \\u0441\\u0442\\u0438\\u043b\\u044c\",\n\n    // Alignment\n    \"Align\": \"\\u0412\\u0438\\u0440\\u0456\\u0432\\u043d\\u044e\\u0432\\u0430\\u043d\\u043d\\u044f\",\n    \"Align Left\": \"\\u041f\\u043e \\u043b\\u0456\\u0432\\u043e\\u043c\\u0443 \\u043a\\u0440\\u0430\\u044e\",\n    \"Align Center\": \"\\u041f\\u043e \\u0446\\u0435\\u043d\\u0442\\u0440\\u0443\",\n    \"Align Right\": \"\\u041f\\u043e \\u043f\\u0440\\u0430\\u0432\\u043e\\u043c\\u0443 \\u043a\\u0440\\u0430\\u044e\",\n    \"Align Justify\": \"\\u041f\\u043e \\u0448\\u0438\\u0440\\u0438\\u043d\\u0456\",\n    \"None\": \"\\u043d\\u0456\",\n\n    // Lists\n    \"Ordered List\": \"\\u041d\\u0443\\u043c\\u0435\\u0440\\u043e\\u0432\\u0430\\u043d\\u0438\\u0439 \\u0441\\u043f\\u0438\\u0441\\u043e\\u043a\",\n    \"Unordered List\": \"\\u041c\\u0430\\u0440\\u043a\\u043e\\u0432\\u0430\\u043d\\u0438\\u0439 \\u0441\\u043f\\u0438\\u0441\\u043e\\u043a\",\n\n    // Indent\n    \"Decrease Indent\": \"\\u0417\\u043c\\u0435\\u043d\\u0448\\u0438\\u0442\\u0438 \\u0432\\u0456\\u0434\\u0441\\u0442\\u0443\\u043f\",\n    \"Increase Indent\": \"\\u0417\\u0431\\u0456\\u043b\\u044c\\u0448\\u0438\\u0442\\u0438 \\u0432\\u0456\\u0434\\u0441\\u0442\\u0443\\u043f\",\n\n    // Links\n    \"Insert Link\": \"\\u0412\\u0441\\u0442\\u0430\\u0432\\u0438\\u0442\\u0438 \\u043f\\u043e\\u0441\\u0438\\u043b\\u0430\\u043d\\u043d\\u044f\",\n    \"Open in new tab\": \"\\u0412\\u0456\\u0434\\u043a\\u0440\\u0438\\u0442\\u0438 \\u0432 \\u043d\\u043e\\u0432\\u0456\\u0439 \\u0432\\u043a\\u043b\\u0430\\u0434\\u0446\\u0456\",\n    \"Open Link\": \"\\u0432\\u0456\\u0434\\u043a\\u0440\\u0438\\u0442\\u0438 \\u043f\\u043e\\u0441\\u0438\\u043b\\u0430\\u043d\\u043d\\u044f\",\n    \"Edit Link\": \"\\u0440\\u0435\\u0434\\u0430\\u0433\\u0443\\u0432\\u0430\\u0442\\u0438 \\u043f\\u043e\\u0441\\u0438\\u043b\\u0430\\u043d\\u043d\\u044f\",\n    \"Unlink\": \"\\u0412\\u0438\\u0434\\u0430\\u043b\\u0438\\u0442\\u0438 \\u043f\\u043e\\u0441\\u0438\\u043b\\u0430\\u043d\\u043d\\u044f\",\n    \"Choose Link\": \"\\u0412\\u0438\\u0431\\u0435\\u0440\\u0456\\u0442\\u044c \\u043f\\u043e\\u0441\\u0438\\u043b\\u0430\\u043d\\u043d\\u044f\",\n\n    // Images\n    \"Insert Image\": \"\\u0412\\u0441\\u0442\\u0430\\u0432\\u0438\\u0442\\u0438 \\u0437\\u043e\\u0431\\u0440\\u0430\\u0436\\u0435\\u043d\\u043d\\u044f\",\n    \"Upload Image\": \"\\u0417\\u0430\\u0432\\u0430\\u043d\\u0442\\u0430\\u0436\\u0438\\u0442\\u0438 \\u0437\\u043e\\u0431\\u0440\\u0430\\u0436\\u0435\\u043d\\u043d\\u044f\",\n    \"By URL\": \"\\u0437\\u0430 URL\",\n    \"Browse\": \"\\u043f\\u0435\\u0440\\u0435\\u0433\\u043b\\u044f\\u0434\\u0430\\u0442\\u0438\",\n    \"Drop image\": \"\\u041f\\u0435\\u0440\\u0435\\u043c\\u0456\\u0441\\u0442\\u0456\\u0442\\u044c \\u0437\\u043e\\u0431\\u0440\\u0430\\u0436\\u0435\\u043d\\u043d\\u044f \\u0441\\u044e\\u0434\\u0438\",\n    \"or click\": \"\\u0430\\u0431\\u043e \\u043d\\u0430\\u0442\\u0438\\u0441\\u043d\\u0456\\u0442\\u044c\",\n    \"Manage Images\": \"\\u041a\\u0435\\u0440\\u0443\\u0432\\u0430\\u043d\\u043d\\u044f \\u0437\\u043e\\u0431\\u0440\\u0430\\u0436\\u0435\\u043d\\u043d\\u044f\\u043c\\u0438\",\n    \"Loading\": \"\\u0417\\u0430\\u0432\\u0430\\u043d\\u0442\\u0430\\u0436\\u0435\\u043d\\u043d\\u044f\",\n    \"Deleting\": \"\\u0432\\u0438\\u0434\\u0430\\u043b\\u0435\\u043d\\u043d\\u044f\",\n    \"Tags\": \"\\u043a\\u043b\\u044e\\u0447\\u043e\\u0432\\u0456 \\u0441\\u043b\\u043e\\u0432\\u0430\",\n    \"Are you sure? Image will be deleted.\": \"\\u0412\\u0438 \\u0432\\u043f\\u0435\\u0432\\u043d\\u0435\\u043d\\u0456? \\u0417\\u043e\\u0431\\u0440\\u0430\\u0436\\u0435\\u043d\\u043d\\u044f \\u0431\\u0443\\u0434\\u0435 \\u0432\\u0438\\u0434\\u0430\\u043b\\u0435\\u043d\\u043e.\",\n    \"Replace\": \"\\u0437\\u0430\\u043c\\u0456\\u043d\\u044e\\u0432\\u0430\\u0442\\u0438\",\n    \"Uploading\": \"\\u0417\\u0430\\u0432\\u0430\\u043d\\u0442\\u0430\\u0436\\u0435\\u043d\\u043d\\u044f\",\n    \"Loading image\": \"\\u0417\\u0430\\u0432\\u0430\\u043d\\u0442\\u0430\\u0436\\u0435\\u043d\\u043d\\u044f \\u0437\\u043e\\u0431\\u0440\\u0430\\u0436\\u0435\\u043d\\u044c\",\n    \"Display\": \"\\u0434\\u0438\\u0441\\u043f\\u043b\\u0435\\u0439\",\n    \"Inline\": \"\\u0412 \\u043b\\u0456\\u043d\\u0456\\u044e\",\n    \"Break Text\": \"\\u043f\\u0435\\u0440\\u0435\\u0440\\u0432\\u0430 \\u0442\\u0435\\u043a\\u0441\\u0442\",\n    \"Alternative Text\": \"\\u0430\\u043b\\u044c\\u0442\\u0435\\u0440\\u043d\\u0430\\u0442\\u0438\\u0432\\u043d\\u0438\\u0439 \\u0442\\u0435\\u043a\\u0441\\u0442\",\n    \"Change Size\": \"\\u0437\\u043c\\u0456\\u043d\\u0438\\u0442\\u0438 \\u0440\\u043e\\u0437\\u043c\\u0456\\u0440\",\n    \"Width\": \"\\u0428\\u0438\\u0440\\u0438\\u043d\\u0430\",\n    \"Height\": \"\\u0412\\u0438\\u0441\\u043e\\u0442\\u0430\",\n    \"Something went wrong. Please try again.\": \"\\u0429\\u043e\\u0441\\u044c \\u043f\\u0456\\u0448\\u043b\\u043e \\u043d\\u0435 \\u0442\\u0430\\u043a. \\u0411\\u0443\\u0434\\u044c \\u043b\\u0430\\u0441\\u043a\\u0430 \\u0441\\u043f\\u0440\\u043e\\u0431\\u0443\\u0439\\u0442\\u0435 \\u0449\\u0435 \\u0440\\u0430\\u0437.\",\n    \"Image Caption\": \"Заголовок зображення\",\n    \"Advanced Edit\": \"Розширений редагування\",\n\n    // Video\n    \"Insert Video\": \"\\u0412\\u0441\\u0442\\u0430\\u0432\\u0438\\u0442\\u0438 \\u0432\\u0456\\u0434\\u0435\\u043e\",\n    \"Embedded Code\": \"\\u0432\\u0431\\u0443\\u0434\\u043e\\u0432\\u0430\\u043d\\u0438\\u0439 \\u043a\\u043e\\u0434\",\n    \"Paste in a video URL\": \"Вставте в відео-URL\",\n    \"Drop video\": \"Перетягніть відео\",\n    \"Your browser does not support HTML5 video.\": \"Ваш браузер не підтримує відео html5.\",\n    \"Upload Video\": \"Завантажити відео\",\n\n    // Tables\n    \"Insert Table\": \"\\u0412\\u0441\\u0442\\u0430\\u0432\\u0438\\u0442\\u0438 \\u0442\\u0430\\u0431\\u043b\\u0438\\u0446\\u044e\",\n    \"Table Header\": \"\\u0417\\u0430\\u0433\\u043e\\u043b\\u043e\\u0432\\u043e\\u043a \\u0442\\u0430\\u0431\\u043b\\u0438\\u0446\\u0456\",\n    \"Remove Table\": \"\\u0412\\u0438\\u0434\\u0430\\u043b\\u0438\\u0442\\u0438 \\u0442\\u0430\\u0431\\u043b\\u0438\\u0446\\u0456\",\n    \"Table Style\": \"\\u0421\\u0442\\u0438\\u043b\\u044c \\u0442\\u0430\\u0431\\u043b\\u0438\\u0446\\u0456\",\n    \"Horizontal Align\": \"\\u0413\\u043e\\u0440\\u0438\\u0437\\u043e\\u043d\\u0442\\u0430\\u043b\\u044c\\u043d\\u0435 \\u0432\\u0438\\u0440\\u0456\\u0432\\u043d\\u044e\\u0432\\u0430\\u043d\\u043d\\u044f\",\n    \"Row\": \"\\u0420\\u044f\\u0434\\u043e\\u043a\",\n    \"Insert row above\": \"\\u0412\\u0441\\u0442\\u0430\\u0432\\u0438\\u0442\\u0438 \\u043f\\u043e\\u0440\\u043e\\u0436\\u043d\\u0456\\u0439 \\u0440\\u044f\\u0434\\u043e\\u043a \\u0437\\u0432\\u0435\\u0440\\u0445\\u0443\",\n    \"Insert row below\": \"\\u0412\\u0441\\u0442\\u0430\\u0432\\u0438\\u0442\\u0438 \\u043f\\u043e\\u0440\\u043e\\u0436\\u043d\\u0456\\u0439 \\u0440\\u044f\\u0434\\u043e\\u043a \\u0437\\u043d\\u0438\\u0437\\u0443\",\n    \"Delete row\": \"\\u0412\\u0438\\u0434\\u0430\\u043b\\u0438\\u0442\\u0438 \\u0440\\u044f\\u0434\\u043e\\u043a\",\n    \"Column\": \"\\u0421\\u0442\\u043e\\u0432\\u043f\\u0435\\u0446\\u044c\",\n    \"Insert column before\": \"\\u0414\\u043e\\u0434\\u0430\\u0442\\u0438 \\u0441\\u0442\\u043e\\u0432\\u043f\\u0435\\u0446\\u044c \\u043b\\u0456\\u0432\\u043e\\u0440\\u0443\\u0447\",\n    \"Insert column after\": \"\\u0414\\u043e\\u0434\\u0430\\u0442\\u0438 \\u0441\\u0442\\u043e\\u0432\\u043f\\u0435\\u0446\\u044c \\u043f\\u0440\\u0430\\u0432\\u043e\\u0440\\u0443\\u0447\",\n    \"Delete column\": \"\\u0412\\u0438\\u0434\\u0430\\u043b\\u0438\\u0442\\u0438 \\u0441\\u0442\\u043e\\u0432\\u043f\\u0435\\u0446\\u044c\",\n    \"Cell\": \"\\u041a\\u043e\\u043c\\u0456\\u0440\\u043a\\u0430\",\n    \"Merge cells\": \"\\u041e\\u0431'\\u0454\\u0434\\u043d\\u0430\\u0442\\u0438 \\u043a\\u043e\\u043c\\u0456\\u0440\\u043a\\u0438\",\n    \"Horizontal split\": \"\\u0420\\u043e\\u0437\\u0434\\u0456\\u043b\\u0438\\u0442\\u0438 \\u0433\\u043e\\u0440\\u0438\\u0437\\u043e\\u043d\\u0442\\u0430\\u043b\\u044c\\u043d\\u043e\",\n    \"Vertical split\": \"\\u0420\\u043e\\u0437\\u0434\\u0456\\u043b\\u0438\\u0442\\u0438 \\u0432\\u0435\\u0440\\u0442\\u0438\\u043a\\u0430\\u043b\\u044c\\u043d\\u043e\",\n    \"Cell Background\": \"\\u0441\\u0442\\u0456\\u043b\\u044c\\u043d\\u0438\\u043a\\u043e\\u0432\\u0438\\u0439 \\u0444\\u043e\\u043d\",\n    \"Vertical Align\": \"\\u0432\\u0435\\u0440\\u0442\\u0438\\u043a\\u0430\\u043b\\u044c\\u043d\\u0430 \\u0432\\u0438\\u0440\\u0456\\u0432\\u043d\\u044e\\u0432\\u0430\\u043d\\u043d\\u044f\",\n    \"Top\": \"\\u0422\\u043e\\u043f\",\n    \"Middle\": \"\\u0441\\u0435\\u0440\\u0435\\u0434\\u043d\\u0456\\u0439\",\n    \"Bottom\": \"\\u0434\\u043d\\u043e\",\n    \"Align Top\": \"\\u0417\\u0456\\u0441\\u0442\\u0430\\u0432\\u0442\\u0435 \\u0432\\u0435\\u0440\\u0445\\u043d\\u044e\",\n    \"Align Middle\": \"\\u0432\\u0438\\u0440\\u0456\\u0432\\u043d\\u044f\\u0442\\u0438 \\u043f\\u043e \\u0441\\u0435\\u0440\\u0435\\u0434\\u0438\\u043d\\u0456\",\n    \"Align Bottom\": \"\\u0417\\u0456\\u0441\\u0442\\u0430\\u0432\\u0442\\u0435 \\u043d\\u0438\\u0436\\u043d\\u044e\",\n    \"Cell Style\": \"\\u0441\\u0442\\u0438\\u043b\\u044c \\u043a\\u043e\\u043c\\u0456\\u0440\\u043a\\u0438\",\n\n    // Files\n    \"Upload File\": \"\\u0417\\u0430\\u0432\\u0430\\u043d\\u0442\\u0430\\u0436\\u0438\\u0442\\u0438 \\u0444\\u0430\\u0439\\u043b\",\n    \"Drop file\": \"\\u041f\\u0435\\u0440\\u0435\\u043c\\u0456\\u0441\\u0442\\u0456\\u0442\\u044c \\u0444\\u0430\\u0439\\u043b \\u0441\\u044e\\u0434\\u0438\",\n\n    // Emoticons\n    \"Emoticons\": \"\\u0441\\u043c\\u0430\\u0439\\u043b\\u0438\",\n    \"Grinning face\": \"\\u043f\\u043e\\u0441\\u043c\\u0456\\u0445\\u043d\\u0443\\u0432\\u0448\\u0438\\u0441\\u044c \\u043e\\u0441\\u043e\\u0431\\u0430\",\n    \"Grinning face with smiling eyes\": \"\\u041f\\u043e\\u0441\\u043c\\u0456\\u0445\\u043d\\u0443\\u0432\\u0448\\u0438\\u0441\\u044c \\u043e\\u0441\\u043e\\u0431\\u0430 \\u0437 \\u0443\\u0441\\u043c\\u0456\\u0445\\u043d\\u0435\\u043d\\u0438\\u043c\\u0438 \\u043e\\u0447\\u0438\\u043c\\u0430\",\n    \"Face with tears of joy\": \"\\u041e\\u0431\\u043b\\u0438\\u0447\\u0447\\u044f \\u0437\\u0456 \\u0441\\u043b\\u044c\\u043e\\u0437\\u0430\\u043c\\u0438 \\u0440\\u0430\\u0434\\u043e\\u0441\\u0442\\u0456\",\n    \"Smiling face with open mouth\": \"\\u0423\\u0441\\u043c\\u0456\\u0445\\u043d\\u0435\\u043d\\u0435 \\u043e\\u0431\\u043b\\u0438\\u0447\\u0447\\u044f \\u0437 \\u0432\\u0456\\u0434\\u043a\\u0440\\u0438\\u0442\\u0438\\u043c \\u0440\\u043e\\u0442\\u043e\\u043c\",\n    \"Smiling face with open mouth and smiling eyes\": \"\\u041f\\u043e\\u0441\\u043c\\u0456\\u0445\\u0430\\u044e\\u0447\\u0438\\u0441\\u044c \\u043e\\u0441\\u043e\\u0431\\u0430 \\u0437 \\u0432\\u0456\\u0434\\u043a\\u0440\\u0438\\u0442\\u0438\\u043c \\u0440\\u043e\\u0442\\u043e\\u043c \\u0456 \",\n    \"Smiling face with open mouth and cold sweat\": \"\\u041f\\u043e\\u0441\\u043c\\u0456\\u0445\\u0430\\u044e\\u0447\\u0438\\u0441\\u044c \\u043e\\u0441\\u043e\\u0431\\u0430 \\u0437 \\u0432\\u0456\\u0434\\u043a\\u0440\\u0438\\u0442\\u0438\\u043c \\u0440\\u043e\\u0442\\u043e\\u043c \\u0456 \",\n    \"Smiling face with open mouth and tightly-closed eyes\": \"\\u041f\\u043e\\u0441\\u043c\\u0456\\u0445\\u0430\\u044e\\u0447\\u0438\\u0441\\u044c \\u043e\\u0441\\u043e\\u0431\\u0430 \\u0437 \\u0432\\u0456\\u0434\\u043a\\u0440\\u0438\\u0442\\u0438\\u043c \\u0440\\u043e\\u0442\\u043e\\u043c \\u0456 \\u0449\\u0456\\u043b\\u044c\\u043d\\u043e \\u0437\\u0430\\u043a\\u0440\\u0438\\u0442\\u0438\\u043c\\u0438 \\u043e\\u0447\\u0438\\u043c\\u0430\",\n    \"Smiling face with halo\": \"\\u041f\\u043e\\u0441\\u043c\\u0456\\u0445\\u0430\\u044e\\u0447\\u0438\\u0441\\u044c \\u043e\\u0441\\u043e\\u0431\\u0430 \\u0433\\u0430\\u043b\\u043e\",\n    \"Smiling face with horns\": \"\\u041f\\u043e\\u0441\\u043c\\u0456\\u0445\\u0430\\u044e\\u0447\\u0438\\u0441\\u044c \\u043e\\u0441\\u043e\\u0431\\u0430 \\u0437 \\u0440\\u043e\\u0433\\u0430\\u043c\\u0438\",\n    \"Winking face\": \"\\u043f\\u0456\\u0434\\u043c\\u043e\\u0440\\u0433\\u0443\\u044e\\u0447\\u0438 \\u043e\\u0441\\u043e\\u0431\\u0430\",\n    \"Smiling face with smiling eyes\": \"\\u041f\\u043e\\u0441\\u043c\\u0456\\u0445\\u0430\\u044e\\u0447\\u0438\\u0441\\u044c \\u043e\\u0441\\u043e\\u0431\\u0430 \\u0437 \\u0443\\u0441\\u043c\\u0456\\u0445\\u043d\\u0435\\u043d\\u0438\\u043c\\u0438 \\u043e\\u0447\\u0438\\u043c\\u0430\",\n    \"Face savoring delicious food\": \"\\u041e\\u0441\\u043e\\u0431\\u0430 \\u0441\\u043c\\u0430\\u043a\\u0443\\u044e\\u0447\\u0438 \\u0441\\u043c\\u0430\\u0447\\u043d\\u0443 \\u0457\\u0436\\u0443\",\n    \"Relieved face\": \"\\u0437\\u0432\\u0456\\u043b\\u044c\\u043d\\u0435\\u043d\\u043e \\u043e\\u0441\\u043e\\u0431\\u0430\",\n    \"Smiling face with heart-shaped eyes\": \"\\u041f\\u043e\\u0441\\u043c\\u0456\\u0445\\u0430\\u044e\\u0447\\u0438\\u0441\\u044c \\u043e\\u0441\\u043e\\u0431\\u0430 \\u0443 \\u0444\\u043e\\u0440\\u043c\\u0456 \\u0441\\u0435\\u0440\\u0446\\u044f \\u043e\\u0447\\u0438\\u043c\\u0430\",\n    \"Smiling face with sunglasses\": \"\\u0053\\u006d\\u0069\\u006c\\u0069\\u006e\\u0067 \\u0066\\u0061\\u0063\\u0065 \\u0077\\u0069\\u0074\\u0068 \\u0073\\u0075\\u006e\\u0067\\u006c\\u0061\\u0073\\u0073\\u0065\\u0073\",\n    \"Smirking face\": \"\\u043f\\u043e\\u0441\\u043c\\u0456\\u0445\\u043d\\u0443\\u0432\\u0448\\u0438\\u0441\\u044c \\u043e\\u0441\\u043e\\u0431\\u0430\",\n    \"Neutral face\": \"\\u0437\\u0432\\u0438\\u0447\\u0430\\u0439\\u043d\\u0438\\u0439 \\u043e\\u0441\\u043e\\u0431\\u0430\",\n    \"Expressionless face\": \"\\u043d\\u0435\\u0432\\u0438\\u0440\\u0430\\u0437\\u043d\\u0456 \\u043e\\u0431\\u043b\\u0438\\u0447\\u0447\\u044f\",\n    \"Unamused face\": \"\\u0055\\u006e\\u0061\\u006d\\u0075\\u0073\\u0065\\u0064 \\u043e\\u0441\\u043e\\u0431\\u0430\",\n    \"Face with cold sweat\": \"\\u041e\\u0441\\u043e\\u0431\\u0430 \\u0437 \\u0445\\u043e\\u043b\\u043e\\u0434\\u043d\\u043e\\u0433\\u043e \\u043f\\u043e\\u0442\\u0443\",\n    \"Pensive face\": \"\\u0437\\u0430\\u043c\\u0438\\u0441\\u043b\\u0435\\u043d\\u0438\\u0439 \\u043e\\u0441\\u043e\\u0431\\u0430\",\n    \"Confused face\": \"\\u043f\\u043b\\u0443\\u0442\\u0430\\u0442\\u0438 \\u043e\\u0441\\u043e\\u0431\\u0430\",\n    \"Confounded face\": \"\\u043d\\u0435\\u0445\\u0430\\u0439 \\u043f\\u043e\\u0441\\u043e\\u0440\\u043e\\u043c\\u043b\\u044f\\u0442\\u044c\\u0441\\u044f \\u043e\\u0441\\u043e\\u0431\\u0430\",\n    \"Kissing face\": \"\\u043f\\u043e\\u0446\\u0456\\u043b\\u0443\\u043d\\u043a\\u0438 \\u043e\\u0441\\u043e\\u0431\\u0430\",\n    \"Face throwing a kiss\": \"\\u041e\\u0441\\u043e\\u0431\\u0430 \\u043a\\u0438\\u0434\\u0430\\u043b\\u0438 \\u043f\\u043e\\u0446\\u0456\\u043b\\u0443\\u043d\\u043e\\u043a\",\n    \"Kissing face with smiling eyes\": \"\\u041f\\u043e\\u0446\\u0456\\u043b\\u0443\\u043d\\u043a\\u0438 \\u043e\\u0441\\u043e\\u0431\\u0430 \\u0437 \\u0443\\u0441\\u043c\\u0456\\u0445\\u043d\\u0435\\u043d\\u0438\\u043c\\u0438 \\u043e\\u0447\\u0438\\u043c\\u0430\",\n    \"Kissing face with closed eyes\": \"\\u041f\\u043e\\u0446\\u0456\\u043b\\u0443\\u043d\\u043a\\u0438 \\u043e\\u0431\\u043b\\u0438\\u0447\\u0447\\u044f \\u0437 \\u0437\\u0430\\u043f\\u043b\\u044e\\u0449\\u0435\\u043d\\u0438\\u043c\\u0438 \\u043e\\u0447\\u0438\\u043c\\u0430\",\n    \"Face with stuck out tongue\": \"\\u041e\\u0431\\u043b\\u0438\\u0447\\u0447\\u044f \\u0437 \\u0441\\u0442\\u0438\\u0440\\u0447\\u0430\\u043b\\u0438 \\u044f\\u0437\\u0438\\u043a\",\n    \"Face with stuck out tongue and winking eye\": \"\\u041e\\u0431\\u043b\\u0438\\u0447\\u0447\\u044f \\u0437 \\u0441\\u0442\\u0438\\u0440\\u0447\\u0430\\u043b\\u0438 \\u044f\\u0437\\u0438\\u043a\\u0430 \\u0456 \\u0410\\u043d\\u0456\\u043c\\u043e\\u0432\\u0430\\u043d\\u0435 \\u043e\\u0447\\u0435\\u0439\",\n    \"Face with stuck out tongue and tightly-closed eyes\": \"\\u041e\\u0431\\u043b\\u0438\\u0447\\u0447\\u044f \\u0437 \\u0441\\u0442\\u0438\\u0440\\u0447\\u0430\\u043b\\u0438 \\u044f\\u0437\\u0438\\u043a\\u0430 \\u0456 \\u0449\\u0456\\u043b\\u044c\\u043d\\u043e \\u0437\\u0430\\u043a\\u0440\\u0438\\u0442\\u0456 \\u043e\\u0447\\u0456\",\n    \"Disappointed face\": \"\\u0440\\u043e\\u0437\\u0447\\u0430\\u0440\\u043e\\u0432\\u0430\\u043d\\u0438\\u0439 \\u043e\\u0441\\u043e\\u0431\\u0430\",\n    \"Worried face\": \"\\u0441\\u0442\\u0443\\u0440\\u0431\\u043e\\u0432\\u0430\\u043d\\u0438\\u0439 \\u043e\\u0441\\u043e\\u0431\\u0430\",\n    \"Angry face\": \"\\u0437\\u043b\\u0438\\u0439 \\u043e\\u0441\\u043e\\u0431\\u0430\",\n    \"Pouting face\": \"\\u043f\\u0443\\u0445\\u043a\\u0456 \\u043e\\u0441\\u043e\\u0431\\u0430\",\n    \"Crying face\": \"\\u043f\\u043b\\u0430\\u0447 \\u043e\\u0441\\u043e\\u0431\\u0430\",\n    \"Persevering face\": \"\\u043d\\u0430\\u043f\\u043e\\u043b\\u0435\\u0433\\u043b\\u0438\\u0432\\u0430 \\u043e\\u0441\\u043e\\u0431\\u0430\",\n    \"Face with look of triumph\": \"\\u041e\\u0441\\u043e\\u0431\\u0430 \\u0437 \\u0432\\u0438\\u0434\\u043e\\u043c \\u0442\\u0440\\u0456\\u0443\\u043c\\u0444\\u0443\",\n    \"Disappointed but relieved face\": \"\\u0420\\u043e\\u0437\\u0447\\u0430\\u0440\\u043e\\u0432\\u0430\\u043d\\u0438\\u0439\\u002c \\u0430\\u043b\\u0435 \\u0437\\u0432\\u0456\\u043b\\u044c\\u043d\\u0435\\u043d\\u0438\\u0439 \\u043e\\u0441\\u043e\\u0431\\u0430\",\n    \"Frowning face with open mouth\": \"\\u041d\\u0430\\u0441\\u0443\\u043f\\u0438\\u0432\\u0448\\u0438\\u0441\\u044c \\u043e\\u0441\\u043e\\u0431\\u0430 \\u0437 \\u0432\\u0456\\u0434\\u043a\\u0440\\u0438\\u0442\\u0438\\u043c \\u0440\\u043e\\u0442\\u043e\\u043c\",\n    \"Anguished face\": \"\\u0431\\u043e\\u043b\\u0456\\u0441\\u043d\\u0438\\u0439 \\u043e\\u0441\\u043e\\u0431\\u0430\",\n    \"Fearful face\": \"\\u043f\\u043e\\u0431\\u043e\\u044e\\u044e\\u0447\\u0438\\u0441\\u044c \\u043e\\u0441\\u043e\\u0431\\u0430\",\n    \"Weary face\": \"\\u0432\\u0442\\u043e\\u043c\\u043b\\u0435\\u043d\\u0438\\u0439 \\u043e\\u0441\\u043e\\u0431\\u0430\",\n    \"Sleepy face\": \"сонне обличчя\",\n    \"Tired face\": \"\\u0432\\u0442\\u043e\\u043c\\u0438\\u043b\\u0438\\u0441\\u044f \\u043e\\u0441\\u043e\\u0431\\u0430\",\n    \"Grimacing face\": \"\\u0433\\u0440\\u0438\\u043c\\u0430\\u0441\\u0443\\u044e\\u0447\\u0438 \\u043e\\u0441\\u043e\\u0431\\u0430\",\n    \"Loudly crying face\": \"\\u004c\\u006f\\u0075\\u0064\\u006c\\u0079 \\u0063\\u0072\\u0079\\u0069\\u006e\\u0067 \\u0066\\u0061\\u0063\\u0065\",\n    \"Face with open mouth\": \"\\u041e\\u0441\\u043e\\u0431\\u0430 \\u0437 \\u0432\\u0456\\u0434\\u043a\\u0440\\u0438\\u0442\\u0438\\u043c \\u0440\\u043e\\u0442\\u043e\\u043c\",\n    \"Hushed face\": \"\\u0437\\u0430\\u0442\\u0438\\u0445 \\u043e\\u0441\\u043e\\u0431\\u0430\",\n    \"Face with open mouth and cold sweat\": \"\\u041e\\u0441\\u043e\\u0431\\u0430 \\u0437 \\u0432\\u0456\\u0434\\u043a\\u0440\\u0438\\u0442\\u0438\\u043c \\u0440\\u043e\\u0442\\u043e\\u043c \\u0456 \\u0445\\u043e\\u043b\\u043e\\u0434\\u043d\\u0438\\u0439 \\u043f\\u0456\\u0442\",\n    \"Face screaming in fear\": \"\\u041e\\u0441\\u043e\\u0431\\u0430 \\u043a\\u0440\\u0438\\u0447\\u0430\\u0442\\u0438 \\u0432 \\u0441\\u0442\\u0440\\u0430\\u0445\\u0443\",\n    \"Astonished face\": \"\\u0437\\u0434\\u0438\\u0432\\u043e\\u0432\\u0430\\u043d\\u0438\\u0439 \\u043e\\u0441\\u043e\\u0431\\u0430\",\n    \"Flushed face\": \"\\u043f\\u0440\\u0438\\u043f\\u043b\\u0438\\u0432 \\u043a\\u0440\\u043e\\u0432\\u0456 \\u0434\\u043e \\u043e\\u0431\\u043b\\u0438\\u0447\\u0447\\u044f\",\n    \"Sleeping face\": \"\\u0421\\u043f\\u043b\\u044f\\u0447\\u0430 \\u043e\\u0441\\u043e\\u0431\\u0430\",\n    \"Dizzy face\": \"\\u0414\\u0456\\u0437\\u0437\\u0456 \\u043e\\u0441\\u043e\\u0431\\u0430\",\n    \"Face without mouth\": \"\\u041e\\u0441\\u043e\\u0431\\u0430 \\u0431\\u0435\\u0437 \\u0440\\u043e\\u0442\\u0430\",\n    \"Face with medical mask\": \"\\u041e\\u0441\\u043e\\u0431\\u0430 \\u0437 \\u043c\\u0435\\u0434\\u0438\\u0447\\u043d\\u043e\\u044e \\u043c\\u0430\\u0441\\u043a\\u043e\\u044e\",\n\n    // Line breaker\n    \"Break\": \"\\u0437\\u043b\\u043e\\u043c\\u0438\\u0442\\u0438\",\n\n    // Math\n    \"Subscript\": \"\\u043f\\u0456\\u0434\\u0440\\u044f\\u0434\\u043a\\u043e\\u0432\\u0438\\u0439\",\n    \"Superscript\": \"\\u043d\\u0430\\u0434\\u0440\\u044f\\u0434\\u043a\\u043e\\u0432\\u0438\\u0439 \\u0441\\u0438\\u043c\\u0432\\u043e\\u043b\",\n\n    // Full screen\n    \"Fullscreen\": \"\\u043f\\u043e\\u0432\\u043d\\u043e\\u0435\\u043a\\u0440\\u0430\\u043d\\u043d\\u0438\\u0439 \\u0440\\u0435\\u0436\\u0438\\u043c\",\n\n    // Horizontal line\n    \"Insert Horizontal Line\": \"\\u0412\\u0441\\u0442\\u0430\\u0432\\u0438\\u0442\\u0438 \\u0433\\u043e\\u0440\\u0438\\u0437\\u043e\\u043d\\u0442\\u0430\\u043b\\u044c\\u043d\\u0443 \\u043b\\u0456\\u043d\\u0456\\u044e\",\n\n    // Clear formatting\n    \"Clear Formatting\": \"\\u041e\\u0447\\u0438\\u0441\\u0442\\u0438\\u0442\\u0438 \\u0444\\u043e\\u0440\\u043c\\u0430\\u0442\\u0443\\u0432\\u0430\\u043d\\u043d\\u044f\",\n\n    // Save\n    \"Save\": \"\\u0417\\u0431\\u0435\\u0440\\u0435\\u0433\\u0442\\u0438\",\n\n    // Undo, redo\n    \"Undo\": \"\\u0421\\u043a\\u0430\\u0441\\u0443\\u0432\\u0430\\u0442\\u0438\",\n    \"Redo\": \"\\u041f\\u043e\\u0432\\u0442\\u043e\\u0440\\u0438\\u0442\\u0438\",\n\n    // Select all\n    \"Select All\": \"\\u0412\\u0438\\u0431\\u0440\\u0430\\u0442\\u0438 \\u0432\\u0441\\u0435\",\n\n    // Code view\n    \"Code View\": \"\\u041f\\u0435\\u0440\\u0435\\u0433\\u043b\\u044f\\u0434 \\u043a\\u043e\\u0434\\u0443\",\n\n    // Quote\n    \"Quote\": \"\\u0426\\u0438\\u0442\\u0430\\u0442\\u0430\",\n    \"Increase\": \"\\u0417\\u0431\\u0456\\u043b\\u044c\\u0448\\u0438\\u0442\\u0438\",\n    \"Decrease\": \"\\u0437\\u043d\\u0438\\u0436\\u0435\\u043d\\u043d\\u044f\",\n\n    // Quick Insert\n    \"Quick Insert\": \"\\u0428\\u0432\\u0438\\u0434\\u043a\\u0438\\u0439 \\u0432\\u0441\\u0442\\u0430\\u0432\\u043a\\u0430\",\n\n    // Spcial Characters\n    \"Special Characters\": \"Спеціальні символи\",\n    \"Latin\": \"Латинський\",\n    \"Greek\": \"Грецький\",\n    \"Cyrillic\": \"Кирилиця\",\n    \"Punctuation\": \"Пунктуація\",\n    \"Currency\": \"Валюта\",\n    \"Arrows\": \"Стріли\",\n    \"Math\": \"Математика\",\n    \"Misc\": \"Різне\",\n\n    // Print.\n    \"Print\": \"Друкувати\",\n\n    // Spell Checker.\n    \"Spell Checker\": \"Перевірка орфографії\",\n\n    // Help\n    \"Help\": \"Допомогти\",\n    \"Shortcuts\": \"Ярлики\",\n    \"Inline Editor\": \"Вбудований редактор\",\n    \"Show the editor\": \"Показати редактору\",\n    \"Common actions\": \"Спільні дії\",\n    \"Copy\": \"Скопіювати\",\n    \"Cut\": \"Вирізати\",\n    \"Paste\": \"Вставити\",\n    \"Basic Formatting\": \"Основне форматування\",\n    \"Increase quote level\": \"Збільшити рівень цитування\",\n    \"Decrease quote level\": \"Знизити рівень цитування\",\n    \"Image / Video\": \"Зображення / відео\",\n    \"Resize larger\": \"Змінити розмір більше\",\n    \"Resize smaller\": \"Змінити розмір менше\",\n    \"Table\": \"Стіл\",\n    \"Select table cell\": \"Виберіть комірку таблиці\",\n    \"Extend selection one cell\": \"Продовжити виділення однієї комірки\",\n    \"Extend selection one row\": \"Продовжити виділення одного рядка\",\n    \"Navigation\": \"Навігація\",\n    \"Focus popup / toolbar\": \"Фокус спливаюче / панель інструментів\",\n    \"Return focus to previous position\": \"Поверніть фокус на попередню позицію\",\n\n    // Embed.ly\n    \"Embed URL\": \"Вставити URL-адресу\",\n    \"Paste in a URL to embed\": \"Вставте в url, щоб вставити\",\n\n    // Word Paste.\n    \"The pasted content is coming from a Microsoft Word document. Do you want to keep the format or clean it up?\": \"Вставлений вміст надходить з документу Microsoft Word. ви хочете зберегти формат чи очистити його?\",\n    \"Keep\": \"Тримати\",\n    \"Clean\": \"Чистий\",\n    \"Word Paste Detected\": \"Слово паста виявлено\"\n  },\n  direction: \"ltr\"\n};\n\n}));\n"
  },
  {
    "path": "src/main/resources/static/plugins/froala-editor/js/languages/vi.js",
    "content": "/*!\n * froala_editor v2.9.1 (https://www.froala.com/wysiwyg-editor)\n * License https://froala.com/wysiwyg-editor/terms/\n * Copyright 2014-2018 Froala Labs\n */\n\n(function (factory) {\n    if (typeof define === 'function' && define.amd) {\n        // AMD. Register as an anonymous module.\n        define(['jquery'], factory);\n    } else if (typeof module === 'object' && module.exports) {\n        // Node/CommonJS\n        module.exports = function( root, jQuery ) {\n            if ( jQuery === undefined ) {\n                // require('jQuery') returns a factory that requires window to\n                // build a jQuery instance, we normalize how we use modules\n                // that require this pattern but the window provided is a noop\n                // if it's defined (how jquery works)\n                if ( typeof window !== 'undefined' ) {\n                    jQuery = require('jquery');\n                }\n                else {\n                    jQuery = require('jquery')(root);\n                }\n            }\n            return factory(jQuery);\n        };\n    } else {\n        // Browser globals\n        factory(window.jQuery);\n    }\n}(function ($) {\n$.FE.LANGUAGE['vi'] = {\n  translation: {\n    // Place holder\n    \"Type something\": \"Vi\\u1EBFt \\u0111i\\u1EC1u g\\u00EC \\u0111\\u00F3...\",\n\n    // Basic formatting\n    \"Bold\": \"\\u0110\\u1EADm\",\n    \"Italic\": \"Nghi\\u00EAng\",\n    \"Underline\": \"G\\u1EA1ch ch\\u00E2n\",\n    \"Strikethrough\": \"G\\u1EA1ch ngang ch\\u1EEF\",\n\n    // Main buttons\n    \"Insert\": \"Ch\\u00E8n\",\n    \"Delete\": \"X\\u00F3a\",\n    \"Cancel\": \"H\\u1EE7y\",\n    \"OK\": \"OK\",\n    \"Back\": \"Tr\\u1EDF v\\u1EC1\",\n    \"Remove\": \"X\\u00F3a\",\n    \"More\": \"Th\\u00EAm\",\n    \"Update\": \"C\\u1EADp nh\\u1EADt\",\n    \"Style\": \"Ki\\u1EC3u\",\n\n    // Font\n    \"Font Family\": \"Ph\\u00F4ng ch\\u1EEF\",\n    \"Font Size\": \"C\\u1EE1 ch\\u1EEF\",\n\n    // Colors\n    \"Colors\": \"M\\u00E0u s\\u1EAFc\",\n    \"Background\": \"N\\u1EC1n\",\n    \"Text\": \"Ch\\u1EEF\",\n    \"HEX Color\": \"Màu hex\",\n\n    // Paragraphs\n    \"Paragraph Format\": \"\\u0110\\u1ECBnh d\\u1EA1ng \\u0111o\\u1EA1n v\\u0103n b\\u1EA3n\",\n    \"Normal\": \"Normal\",\n    \"Code\": \"Code\",\n    \"Heading 1\": \"Heading 1\",\n    \"Heading 2\": \"Heading 2\",\n    \"Heading 3\": \"Heading 3\",\n    \"Heading 4\": \"Heading 4\",\n\n    // Style\n    \"Paragraph Style\": \"Ki\\u1EC3u \\u0111o\\u1EA1n v\\u0103n b\\u1EA3n\",\n    \"Inline Style\": \"Ki\\u1EC3u d\\u00F2ng\",\n\n    // Alignment\n     \"Align\": \"C\\u0103n ch\\u1EC9nh\",\n    \"Align Left\": \"C\\u0103n tr\\u00E1i\",\n    \"Align Center\": \"C\\u0103n gi\\u1EEFa\",\n    \"Align Right\": \"C\\u0103n ph\\u1EA3i\",\n    \"Align Justify\": \"C\\u0103n \\u0111\\u1EC1u\",\n    \"None\": \"Kh\\u00F4ng\",\n\n    // Lists\n    \"Ordered List\": \"Danh s\\u00E1ch theo th\\u1EE9 t\\u1EF1\",\n    \"Unordered List\": \"Danh s\\u00E1ch li\\u1EC7t k\\u00EA\",\n\n    // Indent\n    \"Decrease Indent\": \"Gi\\u1EA3m c\\u0103n l\\u1EC1\",\n    \"Increase Indent\": \"T\\u0103ng c\\u0103n l\\u1EC1\",\n\n    // Links\n    \"Insert Link\": \"Ch\\u00E8n link\",\n    \"Open in new tab\": \"M\\u1EDF trong tab m\\u1EDBi\",\n    \"Open Link\": \"M\\u1EDF link\",\n    \"Edit Link\": \"S\\u1EEDa link\",\n    \"Unlink\": \"B\\u1ECF link\",\n    \"Choose Link\": \"Ch\\u1ECDn link\",\n\n    // Images\n    \"Insert Image\": \"Ch\\u00E8n h\\u00ECnh\",\n    \"Upload Image\": \"T\\u1EA3i h\\u00ECnh l\\u00EAn\",\n    \"By URL\": \"B\\u1EB1ng URL\",\n    \"Browse\": \"Duy\\u1EC7t file\",\n    \"Drop image\": \"K\\u00E9o th\\u1EA3 h\\u00ECnh\",\n    \"or click\": \"ho\\u1EB7c ch\\u1ECDn\",\n    \"Manage Images\": \"Qu\\u1EA3n l\\u00FD h\\u00ECnh \\u1EA3nh\",\n    \"Loading\": \"\\u0110ang t\\u1EA3i\",\n    \"Deleting\": \"\\u0110ang x\\u00F3a\",\n    \"Tags\": \"Tags\",\n    \"Are you sure? Image will be deleted.\": \"B\\u1EA1n c\\u00F3 ch\\u1EAFc ch\\u1EAFn? H\\u00ECnh \\u1EA3nh s\\u1EBD b\\u1ECB x\\u00F3a.\",\n    \"Replace\": \"Thay th\\u1EBF\",\n    \"Uploading\": \"\\u0110ang t\\u1EA3i l\\u00EAn\",\n    \"Loading image\": \"\\u0110ang t\\u1EA3i h\\u00ECnh \\u1EA3nh\",\n    \"Display\": \"Hi\\u1EC3n th\\u1ECB\",\n    \"Inline\": \"C\\u00F9ng d\\u00F2ng v\\u1EDBi ch\\u1EEF\",\n    \"Break Text\": \"Kh\\u00F4ng c\\u00F9ng d\\u00F2ng v\\u1EDBi ch\\u1EEF\",\n    \"Alternative Text\": \"Thay th\\u1EBF ch\\u1EEF\",\n    \"Change Size\": \"Thay \\u0111\\u1ED5i k\\u00EDch c\\u1EE1\",\n    \"Width\": \"Chi\\u1EC1u r\\u1ED9ng\",\n    \"Height\": \"Chi\\u1EC1u cao\",\n    \"Something went wrong. Please try again.\": \"C\\u00F3 l\\u1ED7i x\\u1EA3y ra. Vui l\\u00F2ng th\\u1EED l\\u1EA1i sau.\",\n    \"Image Caption\": \"Chú thích hình ảnh\",\n    \"Advanced Edit\": \"Chỉnh sửa tiên tiến\",\n\n    // Video\n    \"Insert Video\": \"Ch\\u00E8n video\",\n    \"Embedded Code\": \"M\\u00E3 nh\\u00FAng\",\n    \"Paste in a video URL\": \"Dán vào một url video\",\n    \"Drop video\": \"Thả video\",\n    \"Your browser does not support HTML5 video.\": \"Trình duyệt của bạn không hỗ trợ video html5.\",\n    \"Upload Video\": \"Tải video lên\",\n\n    // Tables\n    \"Insert Table\": \"Ch\\u00E8n b\\u1EA3ng\",\n    \"Table Header\": \"D\\u00F2ng \\u0111\\u1EA7u b\\u1EA3ng\",\n    \"Remove Table\": \"X\\u00F3a b\\u1EA3ng\",\n    \"Table Style\": \"Ki\\u1EC3u b\\u1EA3ng\",\n    \"Horizontal Align\": \"C\\u0103n ch\\u1EC9nh chi\\u1EC1u ngang\",\n    \"Row\": \"D\\u00F2ng\",\n    \"Insert row above\": \"Ch\\u00E8n d\\u00F2ng ph\\u00EDa tr\\u00EAn\",\n    \"Insert row below\": \"Ch\\u00E8n d\\u00F2ng ph\\u00EDa d\\u01B0\\u1EDBi\",\n    \"Delete row\": \"X\\u00F3a d\\u00F2ng\",\n    \"Column\": \"C\\u1ED9t\",\n    \"Insert column before\": \"Ch\\u00E8n c\\u1ED9t b\\u00EAn tr\\u00E1i\",\n    \"Insert column after\": \"Ch\\u00E8n c\\u1ED9t b\\u00EAn ph\\u1EA3i\",\n    \"Delete column\": \"X\\u00F3a c\\u1ED9t\",\n    \"Cell\": \"\\u00D4 b\\u1EA3ng\",\n    \"Merge cells\": \"G\\u1ED9p \\u00F4\",\n    \"Horizontal split\": \"Chia d\\u00F2ng\",\n    \"Vertical split\": \"Chia c\\u1ED9t\",\n    \"Cell Background\": \"M\\u00E0u n\\u1EC1n\",\n    \"Vertical Align\": \"C\\u0103n ch\\u1EC9nh chi\\u1EC1u d\\u1ECDc\",\n    \"Top\": \"Tr\\u00EAn c\\u00F9ng\",\n    \"Middle\": \"Gi\\u1EEFa\",\n    \"Bottom\": \"D\\u01B0\\u1EDBi \\u0111\\u00E1y\",\n    \"Align Top\": \"C\\u0103n tr\\u00EAn\",\n    \"Align Middle\": \"C\\u0103n gi\\u1EEFa\",\n    \"Align Bottom\": \"C\\u0103n d\\u01B0\\u1EDBi\",\n    \"Cell Style\": \"Ki\\u1EC3u \\u00F4\",\n\n    // Files\n    \"Upload File\": \"T\\u1EA3i file l\\u00EAn\",\n    \"Drop file\": \"K\\u00E9o th\\u1EA3 file\",\n\n    // Emoticons\n    \"Emoticons\": \"Bi\\u1EC3u t\\u01B0\\u1EE3ng c\\u1EA3m x\\u00FAc\",\n\n    // Line breaker\n    \"Break\": \"Ng\\u1EAFt d\\u00F2ng\",\n\n    // Math\n    \"Subscript\": \"Subscript\",\n    \"Superscript\": \"Superscript\",\n\n    // Full screen\n    \"Fullscreen\": \"To\\u00E0n m\\u00E0n h\\u00ECnh\",\n\n    // Horizontal line\n    \"Insert Horizontal Line\": \"Ch\\u00E8n \\u0111\\u01B0\\u1EDDng k\\u1EBB ngang v\\u0103n b\\u1EA3n\",\n\n    // Clear formatting\n    \"Clear Formatting\": \"X\\u00F3a \\u0111\\u1ECBnh d\\u1EA1ng\",\n\n    // Save\n    \"Save\": \"Save\",\n\n    // Undo, redo\n    \"Undo\": \"Undo\",\n    \"Redo\": \"Redo\",\n\n    // Select all\n    \"Select All\": \"Ch\\u1ECDn t\\u1EA5t c\\u1EA3\",\n\n    // Code view\n    \"Code View\": \"Xem d\\u1EA1ng code\",\n\n    // Quote\n    \"Quote\": \"Tr\\u00EDch d\\u1EABn\",\n    \"Increase\": \"T\\u0103ng\",\n    \"Decrease\": \"Gi\\u1EA3m\",\n\n    // Quick Insert\n    \"Quick Insert\": \"Ch\\u00E8n nhanh\",\n\n    // Spcial Characters\n    \"Special Characters\": \"Nhân vật đặc biệt\",\n    \"Latin\": \"Latin\",\n    \"Greek\": \"Người Hy Lạp\",\n    \"Cyrillic\": \"Chữ viết tay\",\n    \"Punctuation\": \"Chấm câu\",\n    \"Currency\": \"Tiền tệ\",\n    \"Arrows\": \"Mũi tên\",\n    \"Math\": \"Môn Toán\",\n    \"Misc\": \"Misc\",\n\n    // Print.\n    \"Print\": \"In\",\n\n    // Spell Checker.\n    \"Spell Checker\": \"Công cụ kiểm tra chính tả\",\n\n    // Help\n    \"Help\": \"Cứu giúp\",\n    \"Shortcuts\": \"Phím tắt\",\n    \"Inline Editor\": \"Trình biên tập nội tuyến\",\n    \"Show the editor\": \"Hiển thị trình soạn thảo\",\n    \"Common actions\": \"Hành động thông thường\",\n    \"Copy\": \"Sao chép\",\n    \"Cut\": \"Cắt tỉa\",\n    \"Paste\": \"Dán\",\n    \"Basic Formatting\": \"Định dạng cơ bản\",\n    \"Increase quote level\": \"Tăng mức báo giá\",\n    \"Decrease quote level\": \"Giảm mức giá\",\n    \"Image / Video\": \"Hình ảnh / video\",\n    \"Resize larger\": \"Thay đổi kích thước lớn hơn\",\n    \"Resize smaller\": \"Thay đổi kích thước nhỏ hơn\",\n    \"Table\": \"Bàn\",\n    \"Select table cell\": \"Chọn ô trong bảng\",\n    \"Extend selection one cell\": \"Mở rộng lựa chọn một ô\",\n    \"Extend selection one row\": \"Mở rộng lựa chọn một hàng\",\n    \"Navigation\": \"Dẫn đường\",\n    \"Focus popup / toolbar\": \"Tập trung popup / thanh công cụ\",\n    \"Return focus to previous position\": \"Quay trở lại vị trí trước\",\n\n    // Embed.ly\n    \"Embed URL\": \"Url nhúng\",\n    \"Paste in a URL to embed\": \"Dán vào một url để nhúng\",\n\n    // Word Paste.\n    \"The pasted content is coming from a Microsoft Word document. Do you want to keep the format or clean it up?\": \"Nội dung dán là đến từ một tài liệu từ microsoft. bạn có muốn giữ định dạng hoặc làm sạch nó?\",\n    \"Keep\": \"Giữ\",\n    \"Clean\": \"Dọn dẹp\",\n    \"Word Paste Detected\": \"Dán từ được phát hiện\"\n  },\n  direction: \"ltr\"\n};\n\n}));\n"
  },
  {
    "path": "src/main/resources/static/plugins/froala-editor/js/languages/zh_cn.js",
    "content": "/*!\n * froala_editor v2.9.1 (https://www.froala.com/wysiwyg-editor)\n * License https://froala.com/wysiwyg-editor/terms/\n * Copyright 2014-2018 Froala Labs\n */\n\n(function (factory) {\n    if (typeof define === 'function' && define.amd) {\n        // AMD. Register as an anonymous module.\n        define(['jquery'], factory);\n    } else if (typeof module === 'object' && module.exports) {\n        // Node/CommonJS\n        module.exports = function( root, jQuery ) {\n            if ( jQuery === undefined ) {\n                // require('jQuery') returns a factory that requires window to\n                // build a jQuery instance, we normalize how we use modules\n                // that require this pattern but the window provided is a noop\n                // if it's defined (how jquery works)\n                if ( typeof window !== 'undefined' ) {\n                    jQuery = require('jquery');\n                }\n                else {\n                    jQuery = require('jquery')(root);\n                }\n            }\n            return factory(jQuery);\n        };\n    } else {\n        // Browser globals\n        factory(window.jQuery);\n    }\n}(function ($) {\n/**\n* Simplified Chinese spoken in China.\n*/\n\n$.FE.LANGUAGE['zh_cn'] = {\n  translation: {\n    // Place holder\n    \"Type something\": \"输入内容\",\n\n    // Basic formatting\n    \"Bold\": \"粗体\",\n    \"Italic\": \"斜体\",\n    \"Underline\": \"下划线\",\n    \"Strikethrough\": \"删除线\",\n\n    // Main buttons\n    \"Insert\": \"插入\",\n    \"Delete\": \"删除\",\n    \"Cancel\": \"取消\",\n    \"OK\": \"确定\",\n    \"Back\": \"后退\",\n    \"Remove\": \"删除\",\n    \"More\": \"更多\",\n    \"Update\": \"更新\",\n    \"Style\": \"样式\",\n\n    // Font\n    \"Font Family\": \"字体\",\n    \"Font Size\": \"字号\",\n\n    // Colors\n    \"Colors\": \"颜色\",\n    \"Background\": \"背景\",\n    \"Text\": \"字体\",\n    \"HEX Color\": \"十六进制颜色\",\n\n    // Paragraphs\n    \"Paragraph Format\": \"段落格式\",\n    \"Normal\": \"正文\",\n    \"Code\": \"代码\",\n    \"Heading 1\": \"标题1\",\n    \"Heading 2\": \"标题2\",\n    \"Heading 3\": \"标题3\",\n    \"Heading 4\": \"标题4\",\n\n    // Style\n    \"Paragraph Style\": \"段落样式\",\n    \"Inline Style\": \"内联样式\",\n\n    // Alignment\n    \"Align\": \"对齐方式\",\n    \"Align Left\": \"左对齐\",\n    \"Align Center\": \"居中\",\n    \"Align Right\": \"右对齐\",\n    \"Align Justify\": \"两端对齐\",\n    \"None\": \"无\",\n\n    // Lists\n    \"Ordered List\": \"编号\",\n    \"Unordered List\": \"项目符号\",\n\n    // Indent\n    \"Decrease Indent\": \"减少缩进量\",\n    \"Increase Indent\": \"增加缩进量\",\n\n    // Links\n    \"Insert Link\": \"插入超链接\",\n    \"Open in new tab\": \"在新标签页中打开\",\n    \"Open Link\": \"打开超链接\",\n    \"Edit Link\": \"编辑超链接\",\n    \"Unlink\": \"删除超链接\",\n    \"Choose Link\": \"选择超链接\",\n\n    // Images\n    \"Insert Image\": \"插入图片\",\n    \"Upload Image\": \"上传图片\",\n    \"By URL\": \"通过 URL\",\n    \"Browse\": \"浏览\",\n    \"Drop image\": \"拖入图片\",\n    \"or click\": \"或点击\",\n    \"Manage Images\": \"管理图片\",\n    \"Loading\": \"加载中\",\n    \"Deleting\": \"删除中\",\n    \"Tags\": \"标签\",\n    \"Are you sure? Image will be deleted.\": \"图片将会被删除，是否确认？\",\n    \"Replace\": \"替换\",\n    \"Uploading\": \"上传中\",\n    \"Loading image\": \"图片加载中\",\n    \"Display\": \"显示\",\n    \"Inline\": \"嵌入型\",\n    \"Break Text\": \"上下型环绕\",\n    \"Alternative Text\": \"替换文字\",\n    \"Change Size\": \"改变大小\",\n    \"Width\": \"宽度\",\n    \"Height\": \"高度\",\n    \"Something went wrong. Please try again.\": \"发生错误，请重试。\",\n    \"Image Caption\": \"图片标题\",\n    \"Advanced Edit\": \"高级编辑\",\n\n    // Video\n    \"Insert Video\": \"插入视频\",\n    \"Embedded Code\": \"嵌入代码\",\n    \"Paste in a video URL\": \"粘贴视频网址\",\n    \"Drop video\": \"拖入视频\",\n    \"Your browser does not support HTML5 video.\": \"您的浏览器不支持 HTML5 视频。\",\n    \"Upload Video\": \"上传视频\",\n\n    // Tables\n    \"Insert Table\": \"插入表格\",\n    \"Table Header\": \"表头\",\n    \"Remove Table\": \"删除表格\",\n    \"Table Style\": \"表格样式\",\n    \"Horizontal Align\": \"水平对齐方式\",\n    \"Row\": \"行\",\n    \"Insert row above\": \"在上方插入\",\n    \"Insert row below\": \"在下方插入\",\n    \"Delete row\": \"删除行\",\n    \"Column\": \"列\",\n    \"Insert column before\": \"在左侧插入\",\n    \"Insert column after\": \"在右侧插入\",\n    \"Delete column\": \"删除列\",\n    \"Cell\": \"单元格\",\n    \"Merge cells\": \"合并单元格\",\n    \"Horizontal split\": \"水平分割\",\n    \"Vertical split\": \"垂直分割\",\n    \"Cell Background\": \"单元格背景\",\n    \"Vertical Align\": \"垂直对齐方式\",\n    \"Top\": \"靠上\",\n    \"Middle\": \"居中\",\n    \"Bottom\": \"靠下\",\n    \"Align Top\": \"靠上对齐\",\n    \"Align Middle\": \"居中对齐\",\n    \"Align Bottom\": \"靠下对齐\",\n    \"Cell Style\": \"单元格样式\",\n\n    // Files\n    \"Upload File\": \"上传文件\",\n    \"Drop file\": \"拖入文件\",\n\n    // Emoticons\n    \"Emoticons\": \"表情符号\",\n    \"Grinning face\": \"露齿笑脸\",\n    \"Grinning face with smiling eyes\": \"露齿笑到眯起眼\",\n    \"Face with tears of joy\": \"笑哭\",\n    \"Smiling face with open mouth\": \"张嘴微笑\",\n    \"Smiling face with open mouth and smiling eyes\": \"眯眼张嘴微笑\",\n    \"Smiling face with open mouth and cold sweat\": \"带冷汗的张嘴微笑\",\n    \"Smiling face with open mouth and tightly-closed eyes\": \"紧闭双眼张嘴微笑\",\n    \"Smiling face with halo\": \"带光环微笑\",\n    \"Smiling face with horns\": \"带牛角的微笑\",\n    \"Winking face\": \"眨眼\",\n    \"Smiling face with smiling eyes\": \"眯眼微笑\",\n    \"Face savoring delicious food\": \"馋\",\n    \"Relieved face\": \"如释重负\",\n    \"Smiling face with heart-shaped eyes\": \"桃心眼微笑\",\n    \"Smiling face with sunglasses\": \"戴太阳镜微笑\",\n    \"Smirking face\": \"得意地笑\",\n    \"Neutral face\": \"中性脸\",\n    \"Expressionless face\": \"面无表情\",\n    \"Unamused face\": \"不高兴\",\n    \"Face with cold sweat\": \"冷汗\",\n    \"Pensive face\": \"沉思\",\n    \"Confused face\": \"迷惑\",\n    \"Confounded face\": \"困惑\",\n    \"Kissing face\": \"嘴巴嘟嘟\",\n    \"Face throwing a kiss\": \"飞吻\",\n    \"Kissing face with smiling eyes\": \"眯眼接吻\",\n    \"Kissing face with closed eyes\": \"闭眼接吻\",\n    \"Face with stuck out tongue\": \"吐舌\",\n    \"Face with stuck out tongue and winking eye\": \"眨眼吐舌\",\n    \"Face with stuck out tongue and tightly-closed eyes\": \"眯眼吐舌\",\n    \"Disappointed face\": \"失望\",\n    \"Worried face\": \"担心\",\n    \"Angry face\": \"生气\",\n    \"Pouting face\": \"撅嘴\",\n    \"Crying face\": \"大哭\",\n    \"Persevering face\": \"坚强\",\n    \"Face with look of triumph\": \"扬眉吐气\",\n    \"Disappointed but relieved face\": \"失望\",\n    \"Frowning face with open mouth\": \"皱眉\",\n    \"Anguished face\": \"痛苦\",\n    \"Fearful face\": \"害怕\",\n    \"Weary face\": \"疲惫\",\n    \"Sleepy face\": \"困了\",\n    \"Tired face\": \"累了\",\n    \"Grimacing face\": \"扭曲脸\",\n    \"Loudly crying face\": \"大哭\",\n    \"Face with open mouth\": \"张开嘴\",\n    \"Hushed face\": \"安静\",\n    \"Face with open mouth and cold sweat\": \"冷汗\",\n    \"Face screaming in fear\": \"害怕尖叫\",\n    \"Astonished face\": \"惊讶\",\n    \"Flushed face\": \"脸红\",\n    \"Sleeping face\": \"熟睡\",\n    \"Dizzy face\": \"眩晕\",\n    \"Face without mouth\": \"没有嘴的脸\",\n    \"Face with medical mask\": \"口罩脸\",\n\n    // Line breaker\n    \"Break\": \"换行\",\n\n    // Math\n    \"Subscript\": \"下标\",\n    \"Superscript\": \"上标\",\n\n    // Full screen\n    \"Fullscreen\": \"全屏\",\n\n    // Horizontal line\n    \"Insert Horizontal Line\": \"插入水平线\",\n\n    // Clear formatting\n    \"Clear Formatting\": \"清除格式\",\n\n    // Save\n    \"Save\": \"保存\",\n\n    // Undo, redo\n    \"Undo\": \"撤消\",\n    \"Redo\": \"恢复\",\n\n    // Select all\n    \"Select All\": \"全选\",\n\n    // Code view\n    \"Code View\": \"代码视图\",\n\n    // Quote\n    \"Quote\": \"引用\",\n    \"Increase\": \"增加引用级别\",\n    \"Decrease\": \"减少引用级别\",\n\n    // Quick Insert\n    \"Quick Insert\": \"快速插入\",\n\n    // Spcial Characters\n    \"Special Characters\": \"特殊字符\",\n    \"Latin\": \"拉丁字母\",\n    \"Greek\": \"希腊字母\",\n    \"Cyrillic\": \"西里尔字母\",\n    \"Punctuation\": \"标点\",\n    \"Currency\": \"货币\",\n    \"Arrows\": \"箭头\",\n    \"Math\": \"数学\",\n    \"Misc\": \"杂项\",\n\n    // Print.\n    \"Print\": \"打印\",\n\n    // Spell Checker.\n    \"Spell Checker\": \"拼写检查器\",\n\n    // Help\n    \"Help\": \"帮助\",\n    \"Shortcuts\": \"快捷键\",\n    \"Inline Editor\": \"内联编辑器\",\n    \"Show the editor\": \"显示编辑器\",\n    \"Common actions\": \"常用操作\",\n    \"Copy\": \"复制\",\n    \"Cut\": \"剪切\",\n    \"Paste\": \"粘贴\",\n    \"Basic Formatting\": \"基本格式\",\n    \"Increase quote level\": \"增加引用级别\",\n    \"Decrease quote level\": \"减少引用级别\",\n    \"Image / Video\": \"图像/视频\",\n    \"Resize larger\": \"放大\",\n    \"Resize smaller\": \"缩小\",\n    \"Table\": \"表格\",\n    \"Select table cell\": \"选择单元格\",\n    \"Extend selection one cell\": \"增加选中的单元格\",\n    \"Extend selection one row\": \"增加选中的行\",\n    \"Navigation\": \"导航\",\n    \"Focus popup / toolbar\": \"焦点弹出/工具栏\",\n    \"Return focus to previous position\": \"将焦点返回到上一个位置\",\n\n    // Embed.ly\n    \"Embed URL\": \"嵌入网址\",\n    \"Paste in a URL to embed\": \"粘贴要嵌入的网址\",\n\n    // Word Paste.\n    \"The pasted content is coming from a Microsoft Word document. Do you want to keep the format or clean it up?\": \"粘贴的内容来自微软 Word 文档。你想保留还是清除格式？\",\n    \"Keep\": \"保留\",\n    \"Clean\": \"清除\",\n    \"Word Paste Detected\": \"检测到粘贴自 Word 的内容\"\n  },\n  direction: \"ltr\"\n};\n\n}));\n"
  },
  {
    "path": "src/main/resources/static/plugins/froala-editor/js/languages/zh_tw.js",
    "content": "/*!\n * froala_editor v2.9.1 (https://www.froala.com/wysiwyg-editor)\n * License https://froala.com/wysiwyg-editor/terms/\n * Copyright 2014-2018 Froala Labs\n */\n\n(function (factory) {\n    if (typeof define === 'function' && define.amd) {\n        // AMD. Register as an anonymous module.\n        define(['jquery'], factory);\n    } else if (typeof module === 'object' && module.exports) {\n        // Node/CommonJS\n        module.exports = function( root, jQuery ) {\n            if ( jQuery === undefined ) {\n                // require('jQuery') returns a factory that requires window to\n                // build a jQuery instance, we normalize how we use modules\n                // that require this pattern but the window provided is a noop\n                // if it's defined (how jquery works)\n                if ( typeof window !== 'undefined' ) {\n                    jQuery = require('jquery');\n                }\n                else {\n                    jQuery = require('jquery')(root);\n                }\n            }\n            return factory(jQuery);\n        };\n    } else {\n        // Browser globals\n        factory(window.jQuery);\n    }\n}(function ($) {\n/**\n * Traditional Chinese spoken in Taiwan.\n */\n\n$.FE.LANGUAGE['zh_tw'] = {\n  translation: {\n    // Place holder\n    \"Type something\": \"\\u8f38\\u5165\\u4e00\\u4e9b\\u5167\\u5bb9\",\n\n    // Basic formatting\n    \"Bold\": \"\\u7c97\\u9ad4\",\n    \"Italic\": \"\\u659c\\u9ad4\",\n    \"Underline\": \"\\u5e95\\u7dda\",\n    \"Strikethrough\": \"\\u522a\\u9664\\u7dda\",\n\n    // Main buttons\n    \"Insert\": \"\\u63d2\\u5165\",\n    \"Delete\": \"\\u522a\\u9664\",\n    \"Cancel\": \"\\u53d6\\u6d88\",\n    \"OK\": \"\\u78ba\\u5b9a\",\n    \"Back\": \"\\u5f8c\",\n    \"Remove\": \"\\u79fb\\u9664\",\n    \"More\": \"\\u66f4\\u591a\",\n    \"Update\": \"\\u66f4\\u65b0\",\n    \"Style\": \"\\u6a23\\u5f0f\",\n\n    // Font\n    \"Font Family\": \"\\u5b57\\u9ad4\",\n    \"Font Size\": \"\\u5b57\\u578b\\u5927\\u5c0f\",\n\n    // Colors\n    \"Colors\": \"\\u984f\\u8272\",\n    \"Background\": \"\\u80cc\\u666f\",\n    \"Text\": \"\\u6587\\u5b57\",\n    \"HEX Color\": \"十六進制顏色\",\n\n    // Paragraphs\n    \"Paragraph Format\": \"\\u683c\\u5f0f\",\n    \"Normal\": \"\\u6b63\\u5e38\",\n    \"Code\": \"\\u7a0b\\u5f0f\\u78bc\",\n    \"Heading 1\": \"\\u6a19\\u984c 1\",\n    \"Heading 2\": \"\\u6a19\\u984c 2\",\n    \"Heading 3\": \"\\u6a19\\u984c 3\",\n    \"Heading 4\": \"\\u6a19\\u984c 4\",\n\n    // Style\n    \"Paragraph Style\": \"\\u6bb5\\u843d\\u6a23\\u5f0f\",\n    \"Inline Style\": \"\\u5167\\u806f\\u6a23\\u5f0f\",\n\n    // Alignment\n    \"Align\": \"\\u5c0d\\u9f4a\",\n    \"Align Left\": \"\\u7f6e\\u5de6\\u5c0d\\u9f4a\",\n    \"Align Center\": \"\\u7f6e\\u4e2d\\u5c0d\\u9f4a\",\n    \"Align Right\": \"\\u7f6e\\u53f3\\u5c0d\\u9f4a\",\n    \"Align Justify\": \"\\u5de6\\u53f3\\u5c0d\\u9f4a\",\n    \"None\": \"\\u7121\",\n\n    // Lists\n    \"Ordered List\": \"\\u6578\\u5b57\\u6e05\\u55ae\",\n    \"Unordered List\": \"\\u9805\\u76ee\\u6e05\\u55ae\",\n\n    // Indent\n    \"Decrease Indent\": \"\\u6e1b\\u5c11\\u7e2e\\u6392\",\n    \"Increase Indent\": \"\\u589e\\u52a0\\u7e2e\\u6392\",\n\n    // Links\n    \"Insert Link\": \"\\u63d2\\u5165\\u9023\\u7d50\",\n    \"Open in new tab\": \"\\u5728\\u65b0\\u5206\\u9801\\u958b\\u555f\",\n    \"Open Link\": \"\\u958b\\u555f\\u9023\\u7d50\",\n    \"Edit Link\": \"\\u7de8\\u8f2f\\u9023\\u7d50\",\n    \"Unlink\": \"\\u79fb\\u9664\\u9023\\u7d50\",\n    \"Choose Link\": \"\\u9078\\u64c7\\u9023\\u7d50\",\n\n    // Images\n    \"Insert Image\": \"\\u63d2\\u5165\\u5716\\u7247\",\n    \"Upload Image\": \"\\u4e0a\\u50b3\\u5716\\u7247\",\n    \"By URL\": \"\\u7db2\\u5740\\u4e0a\\u50b3\",\n    \"Browse\": \"\\u700f\\u89bd\",\n    \"Drop image\": \"\\u5716\\u7247\\u62d6\\u66f3\",\n    \"or click\": \"\\u6216\\u9ede\\u64ca\",\n    \"Manage Images\": \"\\u7ba1\\u7406\\u5716\\u7247\",\n    \"Loading\": \"\\u8f09\\u5165\\u4e2d\",\n    \"Deleting\": \"\\u522a\\u9664\",\n    \"Tags\": \"\\u6a19\\u7c64\",\n    \"Are you sure? Image will be deleted.\": \"\\u78ba\\u5b9a\\u522a\\u9664\\u5716\\u7247\\uff1f\",\n    \"Replace\": \"\\u66f4\\u63db\",\n    \"Uploading\": \"\\u4e0a\\u50b3\",\n    \"Loading image\": \"\\u4e0a\\u50b3\\u4e2d\",\n    \"Display\": \"\\u986f\\u793a\",\n    \"Inline\": \"\\u5d4c\\u5165\",\n    \"Break Text\": \"\\u8207\\u6587\\u5b57\\u5206\\u96e2\",\n    \"Alternative Text\": \"\\u6587\\u5b57\\u74b0\\u7e5e\",\n    \"Change Size\": \"\\u8abf\\u6574\\u5927\\u5c0f\",\n    \"Width\": \"\\u5bec\\u5ea6\",\n    \"Height\": \"\\u9ad8\\u5ea6\",\n    \"Something went wrong. Please try again.\": \"\\u932f\\u8aa4\\uff0c\\u8acb\\u518d\\u8a66\\u4e00\\u6b21\\u3002\",\n    \"Image Caption\": \"圖片說明\",\n    \"Advanced Edit\": \"高級編輯\",\n\n    // Video\n    \"Insert Video\": \"\\u63d2\\u5165\\u5f71\\u7247\",\n    \"Embedded Code\": \"\\u5d4c\\u5165\\u7a0b\\u5f0f\\u78bc\",\n    \"Paste in a video URL\": \"粘貼在視頻網址\",\n    \"Drop video\": \"放下視頻\",\n    \"Your browser does not support HTML5 video.\": \"您的瀏覽器不支持html5視頻。\",\n    \"Upload Video\": \"上傳視頻\",\n\n    // Tables\n    \"Insert Table\": \"\\u63d2\\u5165\\u8868\\u683c\",\n    \"Table Header\": \"\\u8868\\u982d\",\n    \"Remove Table\": \"\\u522a\\u9664\\u8868\",\n    \"Table Style\": \"\\u8868\\u6a23\\u5f0f\",\n    \"Horizontal Align\": \"\\u6c34\\u6e96\\u5c0d\\u9f4a\\u65b9\\u5f0f\",\n    \"Row\": \"\\u884c\",\n    \"Insert row above\": \"\\u5411\\u4e0a\\u63d2\\u5165\\u4e00\\u884c\",\n    \"Insert row below\": \"\\u5411\\u4e0b\\u63d2\\u5165\\u4e00\\u884c\",\n    \"Delete row\": \"\\u522a\\u9664\\u884c\",\n    \"Column\": \"\\u5217\",\n    \"Insert column before\": \"\\u5411\\u5de6\\u63d2\\u5165\\u4e00\\u5217\",\n    \"Insert column after\": \"\\u5411\\u53f3\\u63d2\\u5165\\u4e00\\u5217\",\n    \"Delete column\": \"\\u522a\\u9664\\u884c\",\n    \"Cell\": \"\\u5132\\u5b58\\u683c\",\n    \"Merge cells\": \"\\u5408\\u4f75\\u5132\\u5b58\\u683c\",\n    \"Horizontal split\": \"\\u6c34\\u5e73\\u5206\\u5272\",\n    \"Vertical split\": \"\\u5782\\u76f4\\u5206\\u5272\",\n    \"Cell Background\": \"\\u5132\\u5b58\\u683c\\u80cc\\u666f\",\n    \"Vertical Align\": \"\\u5782\\u76f4\\u5c0d\\u9f4a\\u65b9\\u5f0f\",\n    \"Top\": \"\\u4e0a\",\n    \"Middle\": \"\\u4e2d\",\n    \"Bottom\": \"\\u4e0b\",\n    \"Align Top\": \"\\u5411\\u4e0a\\u5c0d\\u9f4a\",\n    \"Align Middle\": \"\\u4e2d\\u9593\\u5c0d\\u9f4a\",\n    \"Align Bottom\": \"\\u5e95\\u90e8\\u5c0d\\u9f4a\",\n    \"Cell Style\": \"\\u5132\\u5b58\\u683c\\u6a23\\u5f0f\",\n\n    // Files\n    \"Upload File\": \"\\u4e0a\\u50b3\\u6587\\u4ef6\",\n    \"Drop file\": \"\\u6587\\u4ef6\\u62d6\\u66f3\",\n\n    // Emoticons\n    \"Emoticons\": \"\\u8868\\u60c5\",\n    \"Grinning face\": \"\\u81c9\\u4e0a\\u7b11\\u563b\\u563b\",\n    \"Grinning face with smiling eyes\": \"\\u7b11\\u563b\\u563b\\u7684\\u81c9\\uff0c\\u542b\\u7b11\\u7684\\u773c\\u775b\",\n    \"Face with tears of joy\": \"\\u81c9\\u4e0a\\u5e36\\u8457\\u559c\\u6085\\u7684\\u6dda\\u6c34\",\n    \"Smiling face with open mouth\": \"\\u7b11\\u81c9\\u5f35\\u958b\\u5634\",\n    \"Smiling face with open mouth and smiling eyes\": \"\\u7b11\\u81c9\\u5f35\\u958b\\u5634\\u5fae\\u7b11\\u7684\\u773c\\u775b\",\n    \"Smiling face with open mouth and cold sweat\": \"\\u7b11\\u81c9\\u5f35\\u958b\\u5634\\uff0c\\u4e00\\u8eab\\u51b7\\u6c57\",\n    \"Smiling face with open mouth and tightly-closed eyes\": \"\\u7b11\\u81c9\\u5f35\\u958b\\u5634\\uff0c\\u7dca\\u7dca\\u9589\\u8457\\u773c\\u775b\",\n    \"Smiling face with halo\": \"\\u7b11\\u81c9\\u6688\",\n    \"Smiling face with horns\": \"\\u5fae\\u7b11\\u7684\\u81c9\\u89d2\",\n    \"Winking face\": \"\\u7728\\u773c\\u8868\\u60c5\",\n    \"Smiling face with smiling eyes\": \"\\u9762\\u5e36\\u5fae\\u7b11\\u7684\\u773c\\u775b\",\n    \"Face savoring delicious food\": \"\\u9762\\u5c0d\\u54c1\\u5690\\u7f8e\\u5473\\u7684\\u98df\\u7269\",\n    \"Relieved face\": \"\\u9762\\u5c0d\\u5982\\u91cb\\u91cd\\u8ca0\",\n    \"Smiling face with heart-shaped eyes\": \"\\u5fae\\u7b11\\u7684\\u81c9\\uff0c\\u5fc3\\u81df\\u5f62\\u7684\\u773c\\u775b\",\n    \"Smiling face with sunglasses\": \"\\u7b11\\u81c9\\u592a\\u967d\\u93e1\",\n    \"Smirking face\": \"\\u9762\\u5c0d\\u9762\\u5e36\\u7b11\\u5bb9\",\n    \"Neutral face\": \"\\u4e2d\\u6027\\u9762\",\n    \"Expressionless face\": \"\\u9762\\u7121\\u8868\\u60c5\",\n    \"Unamused face\": \"\\u4e00\\u81c9\\u4e0d\\u5feb\\u7684\\u81c9\",\n    \"Face with cold sweat\": \"\\u9762\\u5c0d\\u51b7\\u6c57\",\n    \"Pensive face\": \"\\u6c89\\u601d\\u7684\\u81c9\",\n    \"Confused face\": \"\\u9762\\u5c0d\\u56f0\\u60d1\",\n    \"Confounded face\": \"\\u8a72\\u6b7b\\u7684\\u81c9\",\n    \"Kissing face\": \"\\u9762\\u5c0d\\u63a5\\u543b\",\n    \"Face throwing a kiss\": \"\\u9762\\u5c0d\\u6295\\u64f2\\u4e00\\u500b\\u543b\",\n    \"Kissing face with smiling eyes\": \"\\u63a5\\u543b\\u81c9\\uff0c\\u542b\\u7b11\\u7684\\u773c\\u775b\",\n    \"Kissing face with closed eyes\": \"\\u63a5\\u543b\\u7684\\u81c9\\u9589\\u8457\\u773c\\u775b\",\n    \"Face with stuck out tongue\": \"\\u9762\\u5c0d\\u4f38\\u51fa\\u820c\\u982d\",\n    \"Face with stuck out tongue and winking eye\": \"\\u9762\\u5c0d\\u4f38\\u51fa\\u820c\\u982d\\u548c\\u7728\\u52d5\\u7684\\u773c\\u775b\",\n    \"Face with stuck out tongue and tightly-closed eyes\": \"\\u9762\\u5c0d\\u4f38\\u51fa\\u820c\\u982d\\u548c\\u7dca\\u9589\\u7684\\u773c\\u775b\",\n    \"Disappointed face\": \"\\u9762\\u5c0d\\u5931\\u671b\",\n    \"Worried face\": \"\\u9762\\u5c0d\\u64d4\\u5fc3\",\n    \"Angry face\": \"\\u61a4\\u6012\\u7684\\u81c9\",\n    \"Pouting face\": \"\\u9762\\u5c0d\\u5658\\u5634\",\n    \"Crying face\": \"\\u54ed\\u6ce3\\u7684\\u81c9\",\n    \"Persevering face\": \"\\u600e\\u5948\\u81c9\",\n    \"Face with look of triumph\": \"\\u9762\\u5e36\\u770b\\u7684\\u52dd\\u5229\",\n    \"Disappointed but relieved face\": \"\\u5931\\u671b\\uff0c\\u4f46\\u81c9\\u4e0a\\u91cb\\u7136\",\n    \"Frowning face with open mouth\": \"\\u9762\\u5c0d\\u76ba\\u8457\\u7709\\u982d\\u5f35\\u53e3\",\n    \"Anguished face\": \"\\u9762\\u5c0d\\u75db\\u82e6\",\n    \"Fearful face\": \"\\u53ef\\u6015\\u7684\\u81c9\",\n    \"Weary face\": \"\\u9762\\u5c0d\\u53ad\\u5026\",\n    \"Sleepy face\": \"\\u9762\\u5c0d\\u56f0\",\n    \"Tired face\": \"\\u75b2\\u618a\\u7684\\u81c9\",\n    \"Grimacing face\": \"\\u7319\\u7370\\u7684\\u81c9\",\n    \"Loudly crying face\": \"\\u5927\\u8072\\u54ed\\u81c9\",\n    \"Face with open mouth\": \"\\u9762\\u5c0d\\u5f35\\u958b\\u5634\",\n    \"Hushed face\": \"\\u5b89\\u975c\\u7684\\u81c9\",\n    \"Face with open mouth and cold sweat\": \"\\u9762\\u5c0d\\u5f35\\u958b\\u5634\\uff0c\\u4e00\\u8eab\\u51b7\\u6c57\",\n    \"Face screaming in fear\": \"\\u9762\\u5c0d\\u5c16\\u53eb\\u5728\\u6050\\u61fc\\u4e2d\",\n    \"Astonished face\": \"\\u9762\\u5c0d\\u9a5a\\u8a1d\",\n    \"Flushed face\": \"\\u7d05\\u64b2\\u64b2\\u7684\\u81c9\\u86cb\",\n    \"Sleeping face\": \"\\u719f\\u7761\\u7684\\u81c9\",\n    \"Dizzy face\": \"\\u9762\\u5c0d\\u7729\",\n    \"Face without mouth\": \"\\u81c9\\u4e0a\\u6c92\\u6709\\u5634\",\n    \"Face with medical mask\": \"\\u9762\\u5c0d\\u91ab\\u7642\\u53e3\\u7f69\",\n\n    // Line breaker\n    \"Break\": \"\\u63db\\u884c\",\n\n    // Math\n    \"Subscript\": \"\\u4e0b\\u6a19\",\n    \"Superscript\": \"\\u4e0a\\u6a19\",\n\n    // Full screen\n    \"Fullscreen\": \"\\u5168\\u87a2\\u5e55\",\n\n    // Horizontal line\n    \"Insert Horizontal Line\": \"\\u63d2\\u5165\\u6c34\\u5e73\\u7dda\",\n\n    // Clear formatting\n    \"Clear Formatting\": \"\\u6e05\\u9664\\u683c\\u5f0f\",\n\n    // Save\n    \"Save\": \"保存\",\n\n    // Undo, redo\n    \"Undo\": \"\\u5fa9\\u539f\",\n    \"Redo\": \"\\u53d6\\u6d88\\u5fa9\\u539f\",\n\n    // Select all\n    \"Select All\": \"\\u5168\\u9078\",\n\n    // Code view\n    \"Code View\": \"\\u539f\\u59cb\\u78bc\",\n\n    // Quote\n    \"Quote\": \"\\u5f15\\u6587\",\n    \"Increase\": \"\\u7e2e\\u6392\",\n    \"Decrease\": \"\\u53bb\\u9664\\u7e2e\\u6392\",\n\n    // Quick Insert\n    \"Quick Insert\": \"\\u5feb\\u63d2\",\n\n    // Spcial Characters\n    \"Special Characters\": \"特殊字符\",\n    \"Latin\": \"拉丁\",\n    \"Greek\": \"希臘語\",\n    \"Cyrillic\": \"西里爾\",\n    \"Punctuation\": \"標點\",\n    \"Currency\": \"貨幣\",\n    \"Arrows\": \"箭頭\",\n    \"Math\": \"數學\",\n    \"Misc\": \"雜項\",\n\n    // Print.\n    \"Print\": \"打印\",\n\n    // Spell Checker.\n    \"Spell Checker\": \"拼寫檢查器\",\n\n    // Help\n    \"Help\": \"幫幫我\",\n    \"Shortcuts\": \"快捷鍵\",\n    \"Inline Editor\": \"內聯編輯器\",\n    \"Show the editor\": \"顯示編輯\",\n    \"Common actions\": \"共同行動\",\n    \"Copy\": \"複製\",\n    \"Cut\": \"切\",\n    \"Paste\": \"糊\",\n    \"Basic Formatting\": \"基本格式\",\n    \"Increase quote level\": \"提高報價水平\",\n    \"Decrease quote level\": \"降低報價水平\",\n    \"Image / Video\": \"圖像/視頻\",\n    \"Resize larger\": \"調整大小更大\",\n    \"Resize smaller\": \"調整大小更小\",\n    \"Table\": \"表\",\n    \"Select table cell\": \"選擇表單元格\",\n    \"Extend selection one cell\": \"擴展選擇一個單元格\",\n    \"Extend selection one row\": \"擴展選擇一行\",\n    \"Navigation\": \"導航\",\n    \"Focus popup / toolbar\": \"焦點彈出/工具欄\",\n    \"Return focus to previous position\": \"將焦點返回到上一個位置\",\n\n    // Embed.ly\n    \"Embed URL\": \"嵌入網址\",\n    \"Paste in a URL to embed\": \"粘貼在一個網址中嵌入\",\n\n    // Word Paste.\n    \"The pasted content is coming from a Microsoft Word document. Do you want to keep the format or clean it up?\": \"粘貼的內容來自微軟Word文檔。你想保留格式還是清理它？\",\n    \"Keep\": \"保持\",\n    \"Clean\": \"清潔\",\n    \"Word Paste Detected\": \"檢測到字貼\"\n  },\n  direction: \"ltr\"\n};\n\n}));\n"
  },
  {
    "path": "src/main/resources/static/plugins/highlight/highlight.css",
    "content": ".dp-highlighter {\n\tbackground: #fff;\n\tborder: 1px dashed #ccc;\n\twidth: 96%;\n\tword-break: break-all;\n\twhite-space: normal;\n\toverflow: auto;\n\t/*margin: 10px auto;*/\n\tpadding: 5px;\n}\n\n.dp-highlighter:hover {\n\tbackground: #fafafa;\n\tborder: 1px dashed #0088cc;\n}\n\n.dp-highlighter .bar {\n\tpadding: 2px;\n}\n\n.dp-highlighter .collapsed .bar,.dp-highlighter .nogutter .bar {\n\tpadding-left: 0px\n}\n\n.dp-highlighter ol {\n\tmargin: 0px 0px 1px -15px;\n\t/*padding: 2px;*/\n\tcolor: #666;\n}\n\n.dp-highlighter.nogutter ol {\n\tlist-style-type: none;\n\tmargin-left: 0px;\n}\n\n.dp-highlighter ol li,.dp-highlighter .columns div {\n\tborder-left: 1px dashed #ccc;\n\tpadding-left: 10px;\n\tline-height: 18px;\n}\n\n.dp-highlighter .nogutter ol li,.dp-highlighter .nogutter .columns div {\n\tborder: 0;\n}\n\n.dp-highlighter .columns {\n\tcolor: gray;\n\twidth: 100%;\n}\n\n.dp-highlighter .columns div {\n\tpadding-bottom: 5px;\n}\n\n.dp-highlighter ol li.alt {\n}\n\n.dp-highlighter ol li span {\n\tcolor: Black;\n}\n\n.dp-highlighter .collapsed ol {\n\tmargin: 0px;\n}\n\n.dp-highlighter .collapsed ol li {\n\tdisplay: none;\n}\n\n.dp-highlighter .printing {\n\tborder: none;\n}\n\n.dp-highlighter .printing .tools {\n\tdisplay: none !important;\n}\n\n.dp-highlighter .printing li {\n\tdisplay: list-item !important;\n}\n\n.dp-highlighter .tools {\n\tpadding: 3px 8px 3px 15px;\n\tborder-bottom: 1px solid #2B91AF;\n\tcolor: silver;\n}\n\n.dp-highlighter .collapsed .tools {\n\tborder-bottom: 0;\n}\n\n.dp-highlighter .tools a {\n\tfont-size: 9pt;\n\tcolor: gray;\n\ttext-decoration: none;\n\tmargin-right: 10px;\n}\n\n.dp-highlighter .tools a:hover {\n\tcolor: red;\n\ttext-decoration: underline;\n}\n\n.dp-about {\n\tbackground-color: #fff;\n\tmargin: 0px;\n\tpadding: 0px;\n}\n\n.dp-about table {\n\twidth: 100%;\n\theight: 100%;\n}\n\n.dp-about td {\n\tpadding: 10px;\n\tvertical-align: top;\n}\n\n.dp-about .copy {\n\tborder-bottom: 1px solid #ACA899;\n\theight: 95%;\n}\n\n.dp-about .title {\n\tcolor: red;\n\tfont-weight: bold;\n}\n\n.dp-about .para {\n\tmargin: 0 0 4px 0;\n}\n\n.dp-about .footer {\n\tbackground-color: #ECEADB;\n\tborder-top: 1px solid #fff;\n\ttext-align: right;\n}\n\n.dp-about .close {\n\tbackground-color: #ECEADB;\n\twidth: 60px;\n\theight: 22px;\n}\n\n.dp-c {\n}\n\n.dp-c .comment {\n\tcolor: green;\n}\n\n.dp-c .string {\n\tcolor: blue;\n}\n\n.dp-c .preprocessor {\n\tcolor: gray;\n}\n\n.dp-c .keyword {\n\tcolor: blue;\n}\n\n.dp-c .vars {\n\tcolor: #d00;\n}\n\n.dp-vb {\n}\n\n.dp-vb .comment {\n\tcolor: green;\n}\n\n.dp-vb .string {\n\tcolor: blue;\n}\n\n.dp-vb .preprocessor {\n\tcolor: gray;\n}\n\n.dp-vb .keyword {\n\tcolor: blue;\n}\n\n.dp-sql {\n}\n\n.dp-sql .comment {\n\tcolor: green;\n}\n\n.dp-sql .string {\n\tcolor: red;\n}\n\n.dp-sql .keyword {\n\tcolor: rgb(127,0,85);\n}\n\n.dp-sql .func {\n\tcolor: #ff1493;\n}\n\n.dp-sql .op {\n\tcolor: blue;\n}\n\n.dp-xml {\n}\n\n.dp-xml .cdata {\n\tcolor: #ff1493;\n}\n\n.dp-xml .comments {\n\tcolor: green;\n}\n\n.dp-xml .tag {\n\tfont-weight: bold;\n\tcolor: blue;\n}\n\n.dp-xml .tag-name {\n\tcolor: rgb(127,0,85);\n\tfont-weight: bold;\n}\n\n.dp-xml .attribute {\n\tcolor: red\n}\n\n.dp-xml .attribute-value {\n\tcolor: blue\n}\n\n.dp-delphi {\n}\n\n.dp-delphi .comment {\n\tcolor: #008200;\n\tfont-style: italic;\n}\n\n.dp-delphi .string {\n\tcolor: blue;\n}\n\n.dp-delphi .number {\n\tcolor: blue;\n}\n\n.dp-delphi .directive {\n\tcolor: #008284;\n}\n\n.dp-delphi .keyword {\n\tfont-weight: bold;\n\tcolor: navy;\n}\n\n.dp-delphi .vars {\n\tcolor: #000;\n}\n\n.dp-py {\n}\n\n.dp-py .comment {\n\tcolor: green;\n}\n\n.dp-py .string {\n\tcolor: red;\n}\n\n.dp-py .docstring {\n\tcolor: green;\n}\n\n.dp-py .keyword {\n\tcolor: blue;\n\tfont-weight: bold;\n}\n\n.dp-py .builtins {\n\tcolor: #ff1493;\n}\n\n.dp-py .magicmethods {\n\tcolor: #808080;\n}\n\n.dp-py .exceptions {\n\tcolor: brown;\n}\n\n.dp-py .types {\n\tcolor: brown;\n\tfont-style: italic\n}\n\n.dp-py .commonlibs {\n\tcolor: #8A2BE2;\n\tfont-style: italic;\n}\n\n.dp-rb {\n}\n\n.dp-rb .comment {\n\tcolor: #c00;\n}\n\n.dp-rb .string {\n\tcolor: #f0c;\n}\n\n.dp-rb .symbol {\n\tcolor: #02b902;\n}\n\n.dp-rb .keyword {\n\tcolor: #069;\n}\n\n.dp-rb .variable {\n\tcolor: #6cf;\n}\n\n.dp-css {\n}\n\n.dp-css .comment {\n\tcolor: green;\n}\n\n.dp-css .string {\n\tcolor: red;\n}\n\n.dp-css .keyword {\n\tcolor: blue;\n}\n\n.dp-css .colors {\n\tcolor: darkred;\n}\n\n.dp-css .vars {\n\tcolor: #d00;\n}\n\n.dp-j {\n}\n\n.dp-j .comment {\n\tcolor: rgb(63,127,95);\n}\n\n.dp-j .string {\n\tcolor: rgb(42,0,255);\n}\n\n.dp-j .keyword {\n\tcolor: rgb(127,0,85);\n\tfont-weight: bold;\n}\n\n.dp-j .annotation {\n\tcolor: #646464;\n}\n\n.dp-j .number {\n\tcolor: #C00000;\n}\n\n.dp-cpp {\n}\n\n.dp-cpp .comment {\n\tcolor: #e00;\n}\n\n.dp-cpp .string {\n\tcolor: red\n}\n\n.dp-cpp .preprocessor {\n\tcolor: #CD00CD;\n\tfont-weight: bold;\n}\n\n.dp-cpp .keyword {\n\tcolor: #5697D9;\n\tfont-weight: bold;\n}\n\n.dp-cpp .datatypes {\n\tcolor: #2E8B57;\n\tfont-weight: bold;\n}\n\n.dp-perl {\n}\n\n.dp-perl .comment {\n\tcolor: green;\n}\n\n.dp-perl .string {\n\tcolor: red;\n}\n\n.dp-perl .keyword {\n\tcolor: rgb(127,0,85);\n}\n\n.dp-perl .func {\n\tcolor: #ff1493;\n}\n\n.dp-perl .declarations {\n\tcolor: blue;\n}\n\n.dp-css .vars {\n\tcolor: #d00;\n}\n\n.dp-g {\n}\n\n.dp-g .comment {\n\tcolor: rgb(63,127,95);\n}\n\n.dp-g .string {\n\tcolor: rgb(42,0,255);\n}\n\n.dp-g .keyword {\n\tcolor: rgb(127,0,85);\n\tfont-weight: bold;\n}\n\n.dp-g .type {\n\tcolor: rgb(0,127,0);\n\tfont-weight: bold;\n}\n\n.dp-g .modifier {\n\tcolor: rgb(100,0,100);\n\tfont-weight: bold;\n}\n\n.dp-g .constant {\n\tcolor: rgb(255,0,0);\n\tfont-weight: bold;\n}\n\n.dp-g .method {\n\tcolor: rgb(255,96,0);\n\tfont-weight: bold;\n}\n\n.dp-g .number {\n\tcolor: #C00000;\n}\n/* comment */\n.comment-list .dp-highlighter {\n\tbackground: #fff;\n\tmargin-top: 5px;\n\tborder: 1px dashed #ccc;\n}\n\n.comment-list .dp-highlighter li {\n\tmargin: 0;\n\tpadding: 0 5px;\n\tborder: 0;\n}\n\n.comment-list .dp-highlighter ol {\n\tmargin: 0;\n}\n\n/*自定义模式*/\n.dp-highlighter .bar {\n\tpadding: 2px;\n\tdisplay: none;\n}\nol li {\n\tlist-style: decimal;\n"
  },
  {
    "path": "src/main/resources/static/plugins/highlight/highlight.js",
    "content": "﻿var dp={sh:{Toolbar:{},Utils:{},RegexLib:{},Brushes:{},Strings:{},Version:\"1.4.1\"}};dp.sh.Strings={AboutDialog:\"<html><head><title>About...</title></head><body class=\\\"dp-about\\\"><table cellspacing=\\\"0\\\"><tr><td class=\\\"copy\\\"><p class=\\\"title\\\">dp.SyntaxHighlighter</div><div class=\\\"para\\\">Version: {V}</p><p><a href=\\\"http://www.dreamprojections.com/syntaxhighlighter/?ref=about\\\" target=\\\"_blank\\\">http://www.dreamprojections.com/SyntaxHighlighter</a></p>&copy;2004-2005 Alex Gorbatchev. All right reserved.</td></tr><tr><td class=\\\"footer\\\"><input type=\\\"button\\\" class=\\\"close\\\" value=\\\"OK\\\" onClick=\\\"window.close()\\\"/></td></tr></table></body></html>\"};dp.SyntaxHighlighter=dp.sh;dp.sh.Toolbar.Commands={ExpandSource:{label:\"+ expand source\",check:function(_1){return _1.collapse;},func:function(_2,_3){_2.parentNode.removeChild(_2);_3.div.className=_3.div.className.replace(\"collapsed\",\"\");}},ViewSource:{label:\"View\",func:function(_4,_5){var _6=_5.originalCode.replace(/</g,\"&lt;\");var _7=window.open(\"\",\"_blank\",\"width=750, height=400, location=0, resizable=1, menubar=0, scrollbars=1\");_7.document.write(\"<textarea style=\\\"width:99%;height:99%\\\">\"+_6+\"</textarea>\");_7.document.close();}},CopyToClipboard:{label:\"Copy\",check:function(){return window.clipboardData!=null;},func:function(_8,_9){window.clipboardData.setData(\"text\",_9.originalCode);alert(\"The code is in your clipboard now\");}},PrintSource:{label:\"Print\",func:function(_a,_b){var _c=document.createElement(\"IFRAME\");var _d=null;_c.style.cssText=\"position:absolute;width:0px;height:0px;left:-500px;top:-500px;\";document.body.appendChild(_c);_d=_c.contentWindow.document;dp.sh.Utils.CopyStyles(_d,window.document);_d.write(\"<div class=\\\"\"+_b.div.className.replace(\"collapsed\",\"\")+\" printing\\\">\"+_b.div.innerHTML+\"</div>\");_d.close();_c.contentWindow.focus();_c.contentWindow.print();alert(\"Printing...\");document.body.removeChild(_c);}},About:{label:\"\",func:function(_e){var _f=window.open(\"\",\"_blank\",\"dialog,width=300,height=150,scrollbars=0\");var doc=_f.document;dp.sh.Utils.CopyStyles(doc,window.document);doc.write(dp.sh.Strings.AboutDialog.replace(\"{V}\",dp.sh.Version));doc.close();_f.focus();}}};dp.sh.Toolbar.Create=function(_11){var div=document.createElement(\"DIV\");div.className=\"tools\";div.innerHTML='<b style=\"color:#000;\">Code</b>&nbsp;&nbsp;&nbsp;';for(var _13 in dp.sh.Toolbar.Commands){var cmd=dp.sh.Toolbar.Commands[_13];if(cmd.check!=null&&!cmd.check(_11)){continue;}div.innerHTML+=\"<a href=\\\"#\\\" onclick=\\\"dp.sh.Toolbar.Command('\"+_13+\"',this);return false;\\\">\"+cmd.label+\"</a>\";}return div;};dp.sh.Toolbar.Command=function(_15,_16){var n=_16;while(n!=null&&n.className.indexOf(\"dp-highlighter\")==-1){n=n.parentNode;}if(n!=null){dp.sh.Toolbar.Commands[_15].func(_16,n.highlighter);}};dp.sh.Utils.CopyStyles=function(_18,_19){var _1a=_19.getElementsByTagName(\"link\");for(var i=0;i<_1a.length;i++){if(_1a[i].rel.toLowerCase()==\"stylesheet\"){_18.write(\"<link type=\\\"text/css\\\" rel=\\\"stylesheet\\\" href=\\\"\"+_1a[i].href+\"\\\"></link>\");}}};dp.sh.RegexLib={MultiLineCComments:new RegExp(\"/\\\\*[\\\\s\\\\S]*?\\\\*/\",\"gm\"),SingleLineCComments:new RegExp(\"//.*$\",\"gm\"),SingleLinePerlComments:new RegExp(\"#.*$\",\"gm\"),DoubleQuotedString:new RegExp(\"\\\"(?:\\\\.|(\\\\\\\\\\\\\\\")|[^\\\\\\\"\\\"])*\\\"\",\"g\"),SingleQuotedString:new RegExp(\"'(?:\\\\.|(\\\\\\\\\\\\'))*'\",\"g\")};dp.sh.Match=function(_1c,_1d,css){this.value=_1c;this.index=_1d;this.length=_1c.length;this.css=css;};dp.sh.Highlighter=function(){this.noGutter=false;this.addControls=true;this.collapse=false;this.tabsToSpaces=true;this.wrapColumn=80;this.showColumns=true;};dp.sh.Highlighter.SortCallback=function(m1,m2){if(m1.index<m2.index){return -1;}else{if(m1.index>m2.index){return 1;}else{if(m1.length<m2.length){return -1;}else{if(m1.length>m2.length){return 1;}}}}return 0;};dp.sh.Highlighter.prototype.CreateElement=function(_21){var _22=document.createElement(_21);_22.highlighter=this;return _22;};dp.sh.Highlighter.prototype.GetMatches=function(_23,css){var _25=0;var _26=null;while((_26=_23.exec(this.code))!=null){this.matches[this.matches.length]=new dp.sh.Match(_26[0],_26.index,css);}};dp.sh.Highlighter.prototype.AddBit=function(str,css){if(str==null||str.length==0){return;}var _29=this.CreateElement(\"SPAN\");str=str.replace(/&/g,\"&amp;\");str=str.replace(/ /g,\"&nbsp;\");str=str.replace(/</g,\"&lt;\");str=str.replace(/\\n/gm,\"&nbsp;<br>\");if(css!=null){var _2a=new RegExp(\"<br>\",\"gi\");if(_2a.test(str)){var _2b=str.split(\"&nbsp;<br>\");str=\"\";for(var i=0;i<_2b.length;i++){_29=this.CreateElement(\"SPAN\");_29.className=css;_29.innerHTML=_2b[i];this.div.appendChild(_29);if(i+1<_2b.length){this.div.appendChild(this.CreateElement(\"BR\"));}}}else{_29.className=css;_29.innerHTML=str;this.div.appendChild(_29);}}else{_29.innerHTML=str;this.div.appendChild(_29);}};dp.sh.Highlighter.prototype.IsInside=function(_2d){if(_2d==null||_2d.length==0){return false;}for(var i=0;i<this.matches.length;i++){var c=this.matches[i];if(c==null){continue;}if((_2d.index>c.index)&&(_2d.index<c.index+c.length)){return true;}}return false;};dp.sh.Highlighter.prototype.ProcessRegexList=function(){for(var i=0;i<this.regexList.length;i++){this.GetMatches(this.regexList[i].regex,this.regexList[i].css);}};dp.sh.Highlighter.prototype.ProcessSmartTabs=function(_31){var _32=_31.split(\"\\n\");var _33=\"\";var _34=4;var tab=\"\\t\";function InsertSpaces(_36,pos,_38){var _39=_36.substr(0,pos);var _3a=_36.substr(pos+1,_36.length);var _3b=\"\";for(var i=0;i<_38;i++){_3b+=\" \";}return _39+_3b+_3a;}function ProcessLine(_3d,_3e){if(_3d.indexOf(tab)==-1){return _3d;}var pos=0;while((pos=_3d.indexOf(tab))!=-1){var _40=_3e-pos%_3e;_3d=InsertSpaces(_3d,pos,_40);}return _3d;}for(var i=0;i<_32.length;i++){_33+=ProcessLine(_32[i],_34)+\"\\n\";}return _33;};dp.sh.Highlighter.prototype.SwitchToList=function(){var _42=this.div.innerHTML.replace(/<(br)\\/?>/gi,\"\\n\");var _43=_42.split(\"\\n\");if(this.addControls==true){this.bar.appendChild(dp.sh.Toolbar.Create(this));}if(this.showColumns){var div=this.CreateElement(\"div\");var _45=this.CreateElement(\"div\");var _46=10;var i=1;while(i<=150){if(i%_46==0){div.innerHTML+=i;i+=(i+\"\").length;}else{div.innerHTML+=\"&middot;\";i++;}}_45.className=\"columns\";_45.appendChild(div);this.bar.appendChild(_45);}for(var i=0,lineIndex=this.firstLine;i<_43.length-1;i++,lineIndex++){var li=this.CreateElement(\"LI\");var _4a=this.CreateElement(\"SPAN\");li.className=(i%2==0)?\"alt\":\"\";_4a.innerHTML=_43[i]+\"&nbsp;\";li.appendChild(_4a);this.ol.appendChild(li);}this.div.innerHTML=\"\";};dp.sh.Highlighter.prototype.Highlight=function(_4b){function Trim(str){return str.replace(/^\\s*(.*?)[\\s\\n]*$/g,\"$1\");}function Chop(str){return str.replace(/\\n*$/,\"\").replace(/^\\n*/,\"\");}function Unindent(str){var _4f=str.split(\"\\n\");var _50=new Array();var _51=new RegExp(\"^\\\\s*\",\"g\");var min=1000;for(var i=0;i<_4f.length&&min>0;i++){if(Trim(_4f[i]).length==0){continue;}var _54=_51.exec(_4f[i]);if(_54!=null&&_54.length>0){min=Math.min(_54[0].length,min);}}if(min>0){for(var i=0;i<_4f.length;i++){_4f[i]=_4f[i].substr(min);}}return _4f.join(\"\\n\");}function Copy(_56,_57,_58){return _56.substr(_57,_58-_57);}var pos=0;this.originalCode=_4b;this.code=Chop(Unindent(_4b));this.div=this.CreateElement(\"DIV\");this.bar=this.CreateElement(\"DIV\");this.ol=this.CreateElement(\"OL\");this.matches=new Array();this.div.className=\"dp-highlighter\";this.div.highlighter=this;this.bar.className=\"bar\";this.ol.start=this.firstLine;if(this.CssClass!=null){this.ol.className=this.CssClass;}if(this.collapse){this.div.className+=\" collapsed\";}if(this.noGutter){this.div.className+=\" nogutter\";}if(this.tabsToSpaces==true){this.code=this.ProcessSmartTabs(this.code);}this.ProcessRegexList();if(this.matches.length==0){this.AddBit(this.code,null);this.SwitchToList();this.div.appendChild(this.ol);return;}this.matches=this.matches.sort(dp.sh.Highlighter.SortCallback);for(var i=0;i<this.matches.length;i++){if(this.IsInside(this.matches[i])){this.matches[i]=null;}}for(var i=0;i<this.matches.length;i++){var _5c=this.matches[i];if(_5c==null||_5c.length==0){continue;}this.AddBit(Copy(this.code,pos,_5c.index),null);this.AddBit(_5c.value,_5c.css);pos=_5c.index+_5c.length;}this.AddBit(this.code.substr(pos),null);this.SwitchToList();this.div.appendChild(this.bar);this.div.appendChild(this.ol);};dp.sh.Highlighter.prototype.GetKeywords=function(str){return \"\\\\b\"+str.replace(/ /g,\"\\\\b|\\\\b\")+\"\\\\b\";};dp.sh.HighlightAll=function(_5e,_5f,_60,_61,_62,_63){function FindValue(){var a=arguments;for(var i=0;i<a.length;i++){if(a[i]==null){continue;}if(typeof (a[i])==\"string\"&&a[i]!=\"\"){return a[i]+\"\";}if(typeof (a[i])==\"object\"&&a[i].value!=\"\"){return a[i].value+\"\";}}return null;}function IsOptionSet(_66,_67){for(var i=0;i<_67.length;i++){if(_67[i]==_66){return true;}}return false;}function GetOptionValue(_69,_6a,_6b){var _6c=new RegExp(\"^\"+_69+\"\\\\[(\\\\w+)\\\\]$\",\"gi\");var _6d=null;for(var i=0;i<_6a.length;i++){if((_6d=_6c.exec(_6a[i]))!=null){return _6d[1];}}return _6b;}var _6f=document.getElementsByName(_5e);var _70=null;var _71=new Object();var _72=\"value\";if(_6f==null){return;}for(var _73 in dp.sh.Brushes){var _74=dp.sh.Brushes[_73].Aliases;if(_74==null){continue;}for(var i=0;i<_74.length;i++){_71[_74[i]]=_73;}}for(var i=0;i<_6f.length;i++){var _77=_6f[i];var _78=FindValue(_77.attributes[\"class\"],_77.className,_77.attributes[\"language\"],_77.language);var _79=\"\";if(_78==null){continue;}_78=_78.split(\":\");_79=_78[0].toLowerCase();if(_71[_79]==null){continue;}_70=new dp.sh.Brushes[_71[_79]]();_77.style.display=\"none\";_70.noGutter=(_5f==null)?IsOptionSet(\"nogutter\",_78):!_5f;_70.addControls=(_60==null)?!IsOptionSet(\"nocontrols\",_78):_60;_70.collapse=(_61==null)?IsOptionSet(\"collapse\",_78):_61;_70.showColumns=(_63==null)?IsOptionSet(\"showcolumns\",_78):_63;_70.firstLine=(_62==null)?parseInt(GetOptionValue(\"firstline\",_78,1)):_62;_70.Highlight(_77[_72]);_77.parentNode.insertBefore(_70.div,_77);}};\ndp.sh.Brushes.Ruby=function(){var keywords='alias and BEGIN begin break case class def define_method defined do each else elsif '+'END end ensure false for if in module new next nil not or raise redo rescue retry return '+'self super then throw true undef unless until when while yield';var builtins='Array Bignum Binding Class Continuation Dir Exception FalseClass File::Stat File Fixnum Fload '+'Hash Integer IO MatchData Method Module NilClass Numeric Object Proc Range Regexp String Struct::TMS Symbol '+'ThreadGroup Thread Time TrueClass';this.regexList=[{regex:dp.sh.RegexLib.SingleLinePerlComments,css:'comment'},{regex:dp.sh.RegexLib.DoubleQuotedString,css:'string'},{regex:dp.sh.RegexLib.SingleQuotedString,css:'string'},{regex:new RegExp(':[a-z][A-Za-z0-9_]*','g'),css:'symbol'},{regex:new RegExp('[\\\\$|@|@@]\\\\w+','g'),css:'variable'},{regex:new RegExp(this.GetKeywords(keywords),'gm'),css:'keyword'},{regex:new RegExp(this.GetKeywords(builtins),'gm'),css:'builtin'}];this.CssClass='dp-rb';};dp.sh.Brushes.Ruby.prototype=new dp.sh.Highlighter();dp.sh.Brushes.Ruby.Aliases=['ruby','rails'];\ndp.sh.Brushes.Cpp=function(){var datatypes='ATOM BOOL BOOLEAN BYTE CHAR COLORREF DWORD DWORDLONG DWORD_PTR '+'DWORD32 DWORD64 FLOAT HACCEL HALF_PTR HANDLE HBITMAP HBRUSH '+'HCOLORSPACE HCONV HCONVLIST HCURSOR HDC HDDEDATA HDESK HDROP HDWP '+'HENHMETAFILE HFILE HFONT HGDIOBJ HGLOBAL HHOOK HICON HINSTANCE HKEY '+'HKL HLOCAL HMENU HMETAFILE HMODULE HMONITOR HPALETTE HPEN HRESULT '+'HRGN HRSRC HSZ HWINSTA HWND INT INT_PTR INT32 INT64 LANGID LCID LCTYPE '+'LGRPID LONG LONGLONG LONG_PTR LONG32 LONG64 LPARAM LPBOOL LPBYTE LPCOLORREF '+'LPCSTR LPCTSTR LPCVOID LPCWSTR LPDWORD LPHANDLE LPINT LPLONG LPSTR LPTSTR '+'LPVOID LPWORD LPWSTR LRESULT PBOOL PBOOLEAN PBYTE PCHAR PCSTR PCTSTR PCWSTR '+'PDWORDLONG PDWORD_PTR PDWORD32 PDWORD64 PFLOAT PHALF_PTR PHANDLE PHKEY PINT '+'PINT_PTR PINT32 PINT64 PLCID PLONG PLONGLONG PLONG_PTR PLONG32 PLONG64 POINTER_32 '+'POINTER_64 PSHORT PSIZE_T PSSIZE_T PSTR PTBYTE PTCHAR PTSTR PUCHAR PUHALF_PTR '+'PUINT PUINT_PTR PUINT32 PUINT64 PULONG PULONGLONG PULONG_PTR PULONG32 PULONG64 '+'PUSHORT PVOID PWCHAR PWORD PWSTR SC_HANDLE SC_LOCK SERVICE_STATUS_HANDLE SHORT '+'SIZE_T SSIZE_T TBYTE TCHAR UCHAR UHALF_PTR UINT UINT_PTR UINT32 UINT64 ULONG '+'ULONGLONG ULONG_PTR ULONG32 ULONG64 USHORT USN VOID WCHAR WORD WPARAM WPARAM WPARAM '+'char bool short int __int32 __int64 __int8 __int16 long float double __wchar_t '+'clock_t _complex _dev_t _diskfree_t div_t ldiv_t _exception _EXCEPTION_POINTERS '+'FILE _finddata_t _finddatai64_t _wfinddata_t _wfinddatai64_t __finddata64_t '+'__wfinddata64_t _FPIEEE_RECORD fpos_t _HEAPINFO _HFILE lconv intptr_t '+'jmp_buf mbstate_t _off_t _onexit_t _PNH ptrdiff_t _purecall_handler '+'sig_atomic_t size_t _stat __stat64 _stati64 terminate_function '+'time_t __time64_t _timeb __timeb64 tm uintptr_t _utimbuf '+'va_list wchar_t wctrans_t wctype_t wint_t signed';var keywords='break case catch class const __finally __exception __try '+'const_cast continue private public protected __declspec '+'default delete deprecated dllexport dllimport do dynamic_cast '+'else enum explicit extern if for friend goto inline '+'mutable naked namespace new noinline noreturn nothrow '+'register reinterpret_cast return selectany '+'sizeof static static_cast struct switch template this '+'thread throw true false try typedef typeid typename union '+'using uuid virtual void volatile whcar_t while';this.regexList=[{regex:dp.sh.RegexLib.SingleLineCComments,css:'comment'},{regex:dp.sh.RegexLib.MultiLineCComments,css:'comment'},{regex:dp.sh.RegexLib.DoubleQuotedString,css:'string'},{regex:dp.sh.RegexLib.SingleQuotedString,css:'string'},{regex:new RegExp('^ *#.*','gm'),css:'preprocessor'},{regex:new RegExp(this.GetKeywords(datatypes),'gm'),css:'datatypes'},{regex:new RegExp(this.GetKeywords(keywords),'gm'),css:'keyword'}];this.CssClass='dp-cpp';};dp.sh.Brushes.Cpp.prototype=new dp.sh.Highlighter();dp.sh.Brushes.Cpp.Aliases=['cpp','c','c++'];\ndp.sh.Brushes.CSharp=function(){var keywords='abstract as base bool break byte case catch char checked class const '+'continue decimal default delegate do double else enum event explicit '+'extern false finally fixed float for foreach get goto if implicit in int '+'interface internal is lock long namespace new null object operator out '+'override params private protected public readonly ref return sbyte sealed set '+'short sizeof stackalloc static string struct switch this throw true try '+'typeof uint ulong unchecked unsafe ushort using virtual void while';this.regexList=[{regex:dp.sh.RegexLib.SingleLineCComments,css:'comment'},{regex:dp.sh.RegexLib.MultiLineCComments,css:'comment'},{regex:dp.sh.RegexLib.DoubleQuotedString,css:'string'},{regex:dp.sh.RegexLib.SingleQuotedString,css:'string'},{regex:new RegExp('^\\\\s*#.*','gm'),css:'preprocessor'},{regex:new RegExp(this.GetKeywords(keywords),'gm'),css:'keyword'}];this.CssClass='dp-c';};dp.sh.Brushes.CSharp.prototype=new dp.sh.Highlighter();dp.sh.Brushes.CSharp.Aliases=['c#','c-sharp','csharp'];\ndp.sh.Brushes.CSS=function(){var keywords='ascent azimuth background-attachment background-color background-image background-position '+'background-repeat background baseline bbox border-collapse border-color border-spacing border-style border-top '+'border-right border-bottom border-left border-top-color border-right-color border-bottom-color border-left-color '+'border-top-style border-right-style border-bottom-style border-left-style border-top-width border-right-width '+'border-bottom-width border-left-width border-width border bottom cap-height caption-side centerline clear clip color '+'content counter-increment counter-reset cue-after cue-before cue cursor definition-src descent direction display '+'elevation empty-cells float font-size-adjust font-family font-size font-stretch font-style font-variant font-weight font '+'height letter-spacing line-height list-style-image list-style-position list-style-type list-style margin-top '+'margin-right margin-bottom margin-left margin marker-offset marks mathline max-height max-width min-height min-width orphans '+'outline-color outline-style outline-width outline overflow padding-top padding-right padding-bottom padding-left padding page '+'page-break-after page-break-before page-break-inside pause pause-after pause-before pitch pitch-range play-during position '+'quotes richness right size slope src speak-header speak-numeral speak-punctuation speak speech-rate stemh stemv stress '+'table-layout text-align text-decoration text-indent text-shadow text-transform unicode-bidi unicode-range units-per-em '+'vertical-align visibility voice-family volume white-space widows width widths word-spacing x-height z-index';var values='above absolute all always aqua armenian attr aural auto avoid baseline behind below bidi-override black blink block blue bold bolder '+'both bottom braille capitalize caption center center-left center-right circle close-quote code collapse compact condensed '+'continuous counter counters crop cross crosshair cursive dashed decimal decimal-leading-zero default digits disc dotted double '+'embed embossed e-resize expanded extra-condensed extra-expanded fantasy far-left far-right fast faster fixed format fuchsia '+'gray green groove handheld hebrew help hidden hide high higher icon inline-table inline inset inside invert italic '+'justify landscape large larger left-side left leftwards level lighter lime line-through list-item local loud lower-alpha '+'lowercase lower-greek lower-latin lower-roman lower low ltr marker maroon medium message-box middle mix move narrower '+'navy ne-resize no-close-quote none no-open-quote no-repeat normal nowrap n-resize nw-resize oblique olive once open-quote outset '+'outside overline pointer portrait pre print projection purple red relative repeat repeat-x repeat-y rgb ridge right right-side '+'rightwards rtl run-in screen scroll semi-condensed semi-expanded separate se-resize show silent silver slower slow '+'small small-caps small-caption smaller soft solid speech spell-out square s-resize static status-bar sub super sw-resize '+'table-caption table-cell table-column table-column-group table-footer-group table-header-group table-row table-row-group teal '+'text-bottom text-top thick thin top transparent tty tv ultra-condensed ultra-expanded underline upper-alpha uppercase upper-latin '+'upper-roman url visible wait white wider w-resize x-fast x-high x-large x-loud x-low x-slow x-small x-soft xx-large xx-small yellow';var fonts='[mM]onospace [tT]ahoma [vV]erdana [aA]rial [hH]elvetica [sS]ans-serif [sS]erif';this.regexList=[{regex:dp.sh.RegexLib.MultiLineCComments,css:'comment'},{regex:dp.sh.RegexLib.DoubleQuotedString,css:'string'},{regex:dp.sh.RegexLib.SingleQuotedString,css:'string'},{regex:new RegExp('\\\\#[a-zA-Z0-9]{3,6}','g'),css:'colors'},{regex:new RegExp('(\\\\d+)(px|pt|\\:)','g'),css:'string'},{regex:new RegExp(this.GetKeywords(keywords),'gm'),css:'keyword'},{regex:new RegExp(this.GetKeywords(values),'g'),css:'string'},{regex:new RegExp(this.GetKeywords(fonts),'g'),css:'string'}];this.CssClass='dp-css';};dp.sh.Brushes.CSS.prototype=new dp.sh.Highlighter();dp.sh.Brushes.CSS.Aliases=['css'];\ndp.sh.Brushes.Java=function(){var keywords='abstract assert boolean break byte case catch char class const '+'continue default do double else enum extends '+'false final finally float for goto if implements import '+'instanceof int interface long native new null '+'package private protected public return '+'short static strictfp super switch synchronized this throw throws true '+'transient try void volatile while';this.regexList=[{regex:dp.sh.RegexLib.SingleLineCComments,css:'comment'},{regex:dp.sh.RegexLib.MultiLineCComments,css:'comment'},{regex:dp.sh.RegexLib.DoubleQuotedString,css:'string'},{regex:dp.sh.RegexLib.SingleQuotedString,css:'string'},{regex:new RegExp('\\\\b([\\\\d]+(\\\\.[\\\\d]+)?|0x[a-f0-9]+)\\\\b','gi'),css:'number'},{regex:new RegExp('(?!\\\\@interface\\\\b)\\\\@[\\\\$\\\\w]+\\\\b','g'),css:'annotation'},{regex:new RegExp('\\\\@interface\\\\b','g'),css:'keyword'},{regex:new RegExp(this.GetKeywords(keywords),'gm'),css:'keyword'}];this.CssClass='dp-j';};dp.sh.Brushes.Java.prototype=new dp.sh.Highlighter();dp.sh.Brushes.Java.Aliases=['java'];\ndp.sh.Brushes.JScript=function(){var keywords='abstract boolean break byte case catch char class const continue debugger '+'default delete do double else enum export extends false final finally float '+'for function goto if implements import in instanceof int interface long native '+'new null package private protected public return short static super switch '+'synchronized this throw throws transient true try typeof var void volatile while with';this.regexList=[{regex:dp.sh.RegexLib.SingleLineCComments,css:'comment'},{regex:dp.sh.RegexLib.MultiLineCComments,css:'comment'},{regex:dp.sh.RegexLib.DoubleQuotedString,css:'string'},{regex:dp.sh.RegexLib.SingleQuotedString,css:'string'},{regex:new RegExp('^\\\\s*#.*','gm'),css:'preprocessor'},{regex:new RegExp(this.GetKeywords(keywords),'gm'),css:'keyword'}];this.CssClass='dp-c';};dp.sh.Brushes.JScript.prototype=new dp.sh.Highlighter();dp.sh.Brushes.JScript.Aliases=['js','jscript','javascript'];\ndp.sh.Brushes.Python=function(){var keywords='and assert break class continue def del elif else except exec '+'finally for from global if import in is lambda not or object pass print '+'raise return try yield while';var builtins='self __builtin__ __dict__ __future__ __methods__ __members__ __author__ __email__ __version__'+'__class__ __bases__ __import__ __main__ __name__ __doc__ __self__ __debug__ __slots__ '+'abs append apply basestring bool buffer callable chr classmethod clear close cmp coerce compile complex '+'conjugate copy count delattr dict dir divmod enumerate Ellipsis eval execfile extend False file fileno filter float flush '+'get getattr globals has_key hasarttr hash hex id index input insert int intern isatty isinstance isubclass '+'items iter keys len list locals long map max min mode oct open ord pop pow property range '+'raw_input read readline readlines reduce reload remove repr reverse round seek setattr slice sum '+'staticmethod str super tell True truncate tuple type unichr unicode update values write writelines xrange zip';var magicmethods='__abs__ __add__ __and__ __call__ __cmp__ __coerce__ __complex__ __concat__ __contains__ __del__ __delattr__ __delitem__ '+'__delslice__ __div__ __divmod__ __float__ __getattr__ __getitem__ __getslice__ __hash__ __hex__ __eq__ __le__ __lt__ __gt__ __ge__ '+'__iadd__ __isub__ __imod__ __idiv__ __ipow__ __iand__ __ior__ __ixor__ __ilshift__ __irshift__ '+'__invert__ __init__ __int__ __inv__ __iter__ __len__ __long__ __lshift__ __mod__ __mul__ __new__ __neg__ __nonzero__ __oct__ __or__ '+'__pos__ __pow__ __radd__ __rand__ __rcmp__ __rdiv__ __rdivmod__ __repeat__ __repr__ __rlshift__ __rmod__ __rmul__ '+'__ror__ __rpow__ __rrshift__ __rshift__ __rsub__ __rxor__ __setattr__ __setitem__ __setslice__ __str__ __sub__ __xor__';var exceptions='Exception StandardError ArithmeticError LookupError EnvironmentError AssertionError AttributeError EOFError '+'FutureWarning IndentationError OverflowWarning PendingDeprecationWarning ReferenceError RuntimeWarning '+'SyntaxWarning TabError UnicodeDecodeError UnicodeEncodeError UnicodeTranslateError UserWarning Warning '+'IOError ImportError IndexError KeyError KeyboardInterrupt MemoryError NameError NotImplementedError OSError '+'RuntimeError StopIteration SyntaxError SystemError SystemExit TypeError UnboundLocalError UnicodeError ValueError '+'FloatingPointError OverflowError WindowsError ZeroDivisionError';var types='NoneType TypeType IntType LongType FloatType ComplexType StringType UnicodeType BufferType TupleType ListType '+'DictType FunctionType LambdaType CodeType ClassType UnboundMethodType InstanceType MethodType BuiltinFunctionType BuiltinMethodType '+'ModuleType FileType XRangeType TracebackType FrameType SliceType EllipsisType';var commonlibs='anydbm array asynchat asyncore AST base64 binascii binhex bisect bsddb buildtools bz2 '+'BaseHTTPServer Bastion calendar cgi cmath cmd codecs codeop commands compiler copy copy_reg '+'cPickle crypt cStringIO csv curses Carbon CGIHTTPServer ConfigParser Cookie datetime dbhash '+'dbm difflib dircache distutils doctest DocXMLRPCServer email encodings errno exceptions fcntl '+'filecmp fileinput ftplib gc gdbm getopt getpass glob gopherlib gzip heapq htmlentitydefs '+'htmllib httplib HTMLParser imageop imaplib imgfile imghdr imp inspect itertools jpeg keyword '+'linecache locale logging mailbox mailcap marshal math md5 mhlib mimetools mimetypes mimify mmap '+'mpz multifile mutex MimeWriter netrc new nis nntplib nsremote operator optparse os parser pickle pipes '+'popen2 poplib posix posixfile pprint preferences profile pstats pwd pydoc pythonprefs quietconsole '+'quopri Queue random re readline resource rexec rfc822 rgbimg sched select sets sgmllib sha shelve shutil '+'signal site smtplib socket stat statcache string struct symbol sys syslog SimpleHTTPServer '+'SimpleXMLRPCServer SocketServer StringIO tabnanny tarfile telnetlib tempfile termios textwrap '+'thread threading time timeit token tokenize traceback tty types Tkinter unicodedata unittest '+'urllib urllib2 urlparse user UserDict UserList UserString warnings weakref webbrowser whichdb '+'xml xmllib xmlrpclib xreadlines zipfile zlib';this.regexList=[{regex:new RegExp('#.*$','gm'),css:'comment'},{regex:new RegExp('\"\"\"(.|\\n)*?\"\"\"','gm'),css:'string'},{regex:new RegExp(\"'''(.|\\n)*?'''\",'gm'),css:'string'},{regex:new RegExp(this.GetKeywords(keywords),'gm'),css:'keyword'},{regex:new RegExp(this.GetKeywords(builtins),'gm'),css:'builtins'},{regex:new RegExp(this.GetKeywords(magicmethods),'gm'),css:'magicmethods'},{regex:new RegExp(this.GetKeywords(exceptions),'gm'),css:'exceptions'},{regex:new RegExp(this.GetKeywords(types),'gm'),css:'types'},{regex:new RegExp(this.GetKeywords(commonlibs),'gm'),css:'commonlibs'}];this.CssClass='dp-py';};dp.sh.Brushes.Python.prototype=new dp.sh.Highlighter();dp.sh.Brushes.Python.Aliases=['py','python'];\ndp.sh.Brushes.Sql=function(){var funcs='abs avg case cast coalesce convert count current_timestamp '+'current_user day isnull left lower month nullif replace right '+'session_user space substring sum system_user upper user year';var keywords='absolute action add after alter as asc at authorization begin bigint '+'binary bit by cascade char character check checkpoint close collate '+'column commit committed connect connection constraint contains continue '+'create cube current current_date current_time cursor database date '+'deallocate dec decimal declare default delete desc distinct double drop '+'dynamic else end end-exec escape except exec execute false fetch first '+'float for force foreign forward free from full function global goto grant '+'group grouping having hour ignore index inner insensitive insert instead '+'int integer intersect into is isolation key last level load local max min '+'minute modify move name national nchar next no numeric of off on only '+'open option order out output partial password precision prepare primary '+'prior privileges procedure public read real references relative repeatable '+'restrict return returns revoke rollback rollup rows rule schema scroll '+'second section select sequence serializable set size smallint static '+'statistics table temp temporary then time timestamp to top transaction '+'translation trigger true truncate uncommitted union unique update values '+'varchar varying view when where with work';var operators='all and any between cross in join like not null or outer some';this.regexList=[{regex:new RegExp('--(.*)$','gm'),css:'comment'},{regex:dp.sh.RegexLib.DoubleQuotedString,css:'string'},{regex:dp.sh.RegexLib.SingleQuotedString,css:'string'},{regex:new RegExp(this.GetKeywords(funcs),'gmi'),css:'func'},{regex:new RegExp(this.GetKeywords(operators),'gmi'),css:'op'},{regex:new RegExp(this.GetKeywords(keywords),'gmi'),css:'keyword'}];this.CssClass='dp-sql';};dp.sh.Brushes.Sql.prototype=new dp.sh.Highlighter();dp.sh.Brushes.Sql.Aliases=['sql'];\ndp.sh.Brushes.Xml=function(){this.CssClass='dp-xml';};dp.sh.Brushes.Xml.prototype=new dp.sh.Highlighter();dp.sh.Brushes.Xml.Aliases=['xml','xhtml','xslt','html','xhtml'];dp.sh.Brushes.Xml.prototype.ProcessRegexList=function(){function push(array,value){array[array.length]=value;};var index=0;var match=null;var regex=null;this.GetMatches(new RegExp('<\\\\!\\\\[[\\\\w\\\\s]*?\\\\[(.|\\\\s)*?\\\\]\\\\]>','gm'),'cdata');this.GetMatches(new RegExp('<!--\\\\s*.*\\\\s*?-->','gm'),'comments');regex=new RegExp('([:\\\\w-\\.]+)\\\\s*=\\\\s*(\".*?\"|\\'.*?\\'|\\\\w+)*','gm');while((match=regex.exec(this.code))!=null){push(this.matches,new dp.sh.Match(match[1],match.index,'attribute'));if(match[2]!=undefined){push(this.matches,new dp.sh.Match(match[2],match.index+match[0].indexOf(match[2]),'attribute-value'));};};this.GetMatches(new RegExp('</*\\\\?*(?!\\\\!)|/*\\\\?*>','gm'),'tag');regex=new RegExp('</*\\\\?*\\\\s*([:\\\\w-\\.]+)','gm');while((match=regex.exec(this.code))!=null){push(this.matches,new dp.sh.Match(match[1],match.index+match[0].indexOf(match[1]),'tag-name'));};};\ndp.sh.Brushes.Php=function(){var funcs='abs acos acosh addcslashes addslashes '+'array_change_key_case array_chunk array_combine array_count_values array_diff '+'array_diff_assoc array_diff_key array_diff_uassoc array_diff_ukey array_fill '+'array_filter array_flip array_intersect array_intersect_assoc array_intersect_key '+'array_intersect_uassoc array_intersect_ukey array_key_exists array_keys array_map '+'array_merge array_merge_recursive array_multisort array_pad array_pop array_product '+'array_push array_rand array_reduce array_reverse array_search array_shift '+'array_slice array_splice array_sum array_udiff array_udiff_assoc '+'array_udiff_uassoc array_uintersect array_uintersect_assoc '+'array_uintersect_uassoc array_unique array_unshift array_values array_walk '+'array_walk_recursive atan atan2 atanh base64_decode base64_encode base_convert '+'basename bcadd bccomp bcdiv bcmod bcmul bindec bindtextdomain bzclose bzcompress '+'bzdecompress bzerrno bzerror bzerrstr bzflush bzopen bzread bzwrite ceil chdir '+'checkdate checkdnsrr chgrp chmod chop chown chr chroot chunk_split class_exists '+'closedir closelog copy cos cosh count count_chars date decbin dechex decoct '+'deg2rad delete ebcdic2ascii echo empty end ereg ereg_replace eregi eregi_replace error_log '+'error_reporting escapeshellarg escapeshellcmd eval exec exit exp explode extension_loaded '+'feof fflush fgetc fgetcsv fgets fgetss file_exists file_get_contents file_put_contents '+'fileatime filectime filegroup fileinode filemtime fileowner fileperms filesize filetype '+'floatval flock floor flush fmod fnmatch fopen fpassthru fprintf fputcsv fputs fread fscanf '+'fseek fsockopen fstat ftell ftok getallheaders getcwd getdate getenv gethostbyaddr gethostbyname '+'gethostbynamel getimagesize getlastmod getmxrr getmygid getmyinode getmypid getmyuid getopt '+'getprotobyname getprotobynumber getrandmax getrusage getservbyname getservbyport gettext '+'gettimeofday gettype glob gmdate gmmktime ini_alter ini_get ini_get_all ini_restore ini_set '+'interface_exists intval ip2long is_a is_array is_bool is_callable is_dir is_double '+'is_executable is_file is_finite is_float is_infinite is_int is_integer is_link is_long '+'is_nan is_null is_numeric is_object is_readable is_real is_resource is_scalar is_soap_fault '+'is_string is_subclass_of is_uploaded_file is_writable is_writeable mkdir mktime nl2br '+'parse_ini_file parse_str parse_url passthru pathinfo readlink realpath rewind rewinddir rmdir '+'round str_ireplace str_pad str_repeat str_replace str_rot13 str_shuffle str_split '+'str_word_count strcasecmp strchr strcmp strcoll strcspn strftime strip_tags stripcslashes '+'stripos stripslashes stristr strlen strnatcasecmp strnatcmp strncasecmp strncmp strpbrk '+'strpos strptime strrchr strrev strripos strrpos strspn strstr strtok strtolower strtotime '+'strtoupper strtr strval substr substr_compare';var keywords='and or xor __FILE__ __LINE__ array as break case '+'cfunction class const continue declare default die do else '+'elseif empty enddeclare endfor endforeach endif endswitch endwhile '+'extends for foreach function include include_once global if '+'new old_function return static switch use require require_once '+'var while __FUNCTION__ __CLASS__ '+'__METHOD__ abstract interface public implements extends private protected throw';this.regexList=[{regex:dp.sh.RegexLib.SingleLineCComments,css:'comment'},{regex:dp.sh.RegexLib.MultiLineCComments,css:'comment'},{regex:dp.sh.RegexLib.DoubleQuotedString,css:'string'},{regex:dp.sh.RegexLib.SingleQuotedString,css:'string'},{regex:new RegExp('\\\\$\\\\w+','g'),css:'vars'},{regex:new RegExp(this.GetKeywords(funcs),'gmi'),css:'func'},{regex:new RegExp(this.GetKeywords(keywords),'gm'),css:'keyword'}];this.CssClass='dp-c';};dp.sh.Brushes.Php.prototype=new dp.sh.Highlighter();dp.sh.Brushes.Php.Aliases=['php'];\ndp.sh.Brushes.Vb=function(){var keywords='AddHandler AddressOf AndAlso Alias And Ansi As Assembly Auto '+'Boolean ByRef Byte ByVal Call Case Catch CBool CByte CChar CDate '+'CDec CDbl Char CInt Class CLng CObj Const CShort CSng CStr CType '+'Date Decimal Declare Default Delegate Dim DirectCast Do Double Each '+'Else ElseIf End Enum Erase Error Event Exit False Finally For Friend '+'Function Get GetType GoSub GoTo Handles If Implements Imports In '+'Inherits Integer Interface Is Let Lib Like Long Loop Me Mod Module '+'MustInherit MustOverride MyBase MyClass Namespace New Next Not Nothing '+'NotInheritable NotOverridable Object On Option Optional Or OrElse '+'Overloads Overridable Overrides ParamArray Preserve Private Property '+'Protected Public RaiseEvent ReadOnly ReDim REM RemoveHandler Resume '+'Return Select Set Shadows Shared Short Single Static Step Stop String '+'Structure Sub SyncLock Then Throw To True Try TypeOf Unicode Until '+'Variant When While With WithEvents WriteOnly Xor';this.regexList=[{regex:new RegExp('\\'.*$','gm'),css:'comment'},{regex:dp.sh.RegexLib.DoubleQuotedString,css:'string'},{regex:new RegExp('^\\\\s*#.*','gm'),css:'preprocessor'},{regex:new RegExp(this.GetKeywords(keywords),'gm'),css:'keyword'}];this.CssClass='dp-vb';};dp.sh.Brushes.Vb.prototype=new dp.sh.Highlighter();dp.sh.Brushes.Vb.Aliases=['vb','vb.net'];\ndp.sh.Brushes.Perl = function(){var funcs = 'abs accept alarm atan2 bind binmode bless caller chdir chmod chomp chop chown chr chroot close closedir connect cos crypt dbmclose dbmopen defined delete dump each endgrent endhostent endnetent endprotoent endpwent endservent eof exec exists exp fcntl fileno flock fork format formline getc getgrent getgrgid getgrnam gethostbyaddr gethostbyname gethostent getlogin getnetbyaddr getnetbyname getnetent getpeername getpgrp getppid getpriority getprotobyname getprotobynumber getprotoent getpwent getpwnam getpwuid getservbyname getservbyport getservent getsockname getsockopt glob gmtime grep hex import index int ioctl join keys kill lc lcfirst length link listen localtime lock log lstat m map mkdir msgctl msgget msgrcv msgsnd no oct open opendir ord pack pipe pop pos print printf prototype push q qq quotemeta qw qx rand read readdir readline readlink readpipe recv ref rename reset reverse rewinddir rindex rmdir scalar seek seekdir semctl semget semop send setgrent sethostent setnetent setpgrp setpriority setprotoent setpwent setservent setsockopt shift shmctl shmget shmread shmwrite shutdown sin sleep socket socketpair sort splice split sprintf sqrt srand stat study sub substr symlink syscall sysopen sysread sysseek system syswrite tell telldir tie tied time times tr truncate uc ucfirst umask undef unlink unpack unshift untie utime values vec waitpid wantarray warn write qr';var keywords ='s select goto die do package redo require return continue for foreach last next wait while use if else elsif eval exit unless switch case';var declarations = 'my our local';this.regexList = [{ regex: dp.sh.RegexLib.SingleLinePerlComments, css: 'comment' },{ regex: dp.sh.RegexLib.DoubleQuotedString, css: 'string' },\t{ regex: dp.sh.RegexLib.SingleQuotedString, css: 'string' },{ regex: new RegExp('(\\\\$|@|%)\\\\w+', 'g'), css: 'vars' },{ regex: new RegExp(this.GetKeywords(funcs), 'gmi'), css: 'func' },{ regex: new RegExp(this.GetKeywords(keywords), 'gm'), css: 'keyword' },{ regex: new RegExp(this.GetKeywords(declarations), 'gm'), css: 'declarations' }];this.CssClass = 'dp-perl';};dp.sh.Brushes.Perl.prototype= new dp.sh.Highlighter();dp.sh.Brushes.Perl.Aliases= ['perl'];\ndp.sh.Brushes.Delphi=function(){var keywords='abs addr and ansichar ansistring array as asm begin boolean byte cardinal '+'case char class comp const constructor currency destructor div do double '+'downto else end except exports extended false file finalization finally '+'for function goto if implementation in inherited int64 initialization '+'integer interface is label library longint longword mod nil not object '+'of on or packed pansichar pansistring pchar pcurrency pdatetime pextended '+'pint64 pointer private procedure program property pshortstring pstring '+'pvariant pwidechar pwidestring protected public published raise real real48 '+'record repeat set shl shortint shortstring shr single smallint string then '+'threadvar to true try type unit until uses val var varirnt while widechar '+'widestring with word write writeln xor';this.regexList=[{regex:new RegExp('\\\\(\\\\*[\\\\s\\\\S]*?\\\\*\\\\)','gm'),css:'comment'},{regex:new RegExp('{(?!\\\\$)[\\\\s\\\\S]*?}','gm'),css:'comment'},{regex:dp.sh.RegexLib.SingleLineCComments,css:'comment'},{regex:dp.sh.RegexLib.SingleQuotedString,css:'string'},{regex:new RegExp('\\\\{\\\\$[a-zA-Z]+ .+\\\\}','g'),css:'directive'},{regex:new RegExp('\\\\b[\\\\d\\\\.]+\\\\b','g'),css:'number'},{regex:new RegExp('\\\\$[a-zA-Z0-9]+\\\\b','g'),css:'number'},{regex:new RegExp(this.GetKeywords(keywords),'gm'),css:'keyword'}];this.CssClass='dp-delphi';this.Style='.dp-delphi .number { color: blue; }'+'.dp-delphi .directive { color: #008284; }'+'.dp-delphi .vars { color: #000; }';};dp.sh.Brushes.Delphi.prototype=new dp.sh.Highlighter();dp.sh.Brushes.Delphi.Aliases=['delphi','pascal'];\ndp.sh.Brushes.Groovy=function(){var keywords='as assert break case catch class continue def default do else extends finally '+'if in implements import instanceof interface new package property return switch '+'throw throws try while';var types='void boolean byte char short int long float double';var modifiers='public protected private static';var constants='null';var methods='allProperties count get size '+'collect each eachProperty eachPropertyName eachWithIndex find findAll '+'findIndexOf grep inject max min reverseEach sort '+'asImmutable asSynchronized flatten intersect join pop reverse subMap toList '+'padRight padLeft contains eachMatch toCharacter toLong toUrl tokenize '+'eachFile eachFileRecurse eachB yte eachLine readBytes readLine getText '+'splitEachLine withReader append encodeBase64 decodeBase64 filterLine '+'transformChar transformLine withOutputStream withPrintWriter withStream '+'withStreams withWriter withWriterAppend write writeLine '+'dump inspect invokeMethod print println step times upto use waitForOrKill '+'getText';this.regexList=[{regex:dp.sh.RegexLib.SingleLineCComments,css:'comment'},{regex:dp.sh.RegexLib.MultiLineCComments,css:'comment'},{regex:dp.sh.RegexLib.DoubleQuotedString,css:'string'},{regex:dp.sh.RegexLib.SingleQuotedString,css:'string'},{regex:new RegExp('\"\"\".*\"\"\"','g'),css:'string'},{regex:new RegExp('\\\\b([\\\\d]+(\\\\.[\\\\d]+)?|0x[a-f0-9]+)\\\\b','gi'),css:'number'},{regex:new RegExp(this.GetKeywords(keywords),'gm'),css:'keyword'},{regex:new RegExp(this.GetKeywords(types),'gm'),css:'type'},{regex:new RegExp(this.GetKeywords(modifiers),'gm'),css:'modifier'},{regex:new RegExp(this.GetKeywords(constants),'gm'),css:'constant'},{regex:new RegExp(this.GetKeywords(methods),'gm'),css:'method'}];this.CssClass='dp-g'};dp.sh.Brushes.Groovy.prototype=new dp.sh.Highlighter();dp.sh.Brushes.Groovy.Aliases=['groovy'];\n\n\n\twindow.resizeTo(750,532);\n\n\tfunction clearText()\n\t{\n\t\tdocument.getElementById(\"sourceCode\").value=\"\";\n\t\tdocument.getElementById(\"htmlCode\").value=\"\";\n\t\tdocument.getElementById(\"preview\").innerHTML=\"\";\n\t}\n\n\tfunction generateCode()\n\t{\n\t\n\t\tif(document.getElementById(\"sourceCode\").value.trim()==\"\")\n\t\t{\n\t\t\treturn;\n\t\t}\n\t\t\n\t\tdp.SyntaxHighlighter.HighlightAll(\"sourceCode\",\n\t\tdocument.getElementById(\"showGutter\").checked,\n\t\tdocument.getElementById(\"showControls\").checked,\n\t\tdocument.getElementById(\"collapseAll\").checked,\n\t\tdocument.getElementById(\"firstLine\").checked,\n\t\tdocument.getElementById(\"showColumns\").checked);\n\t}\n\n\tfunction docopy(src)\n\t{\n\t\tif(src=='source')\n\t\t{\n\t\t\tif(document.getElementById(\"sourceCode\").value != \"\")\n\t\t\t\twindow.clipboardData.setdata(\"Text\",document.getElementById(\"sourceCode\").value); \n\t\t\telse\n\t\t\t\talert(\"Content is empty, can't copy!\")\n\t\t}\n\t\telse if(src=='html')\n\t\t{\n\t\t\tif(document.getElementById(\"sourceCode\").value != \"\")\n\t\t\t\twindow.clipboardData.setdata(\"Text\",document.getElementById(\"htmlCode\").value); \n\t\t\telse\n\t\t\t\talert(\"Content is empty, can't copy!\")\n\t\t}\n\t\telse\n\t\t{\n\t\t\tif(document.getElementById(\"preview\").innerHTML != \"\")\n\t\t\t\twindow.clipboardData.setdata(\"Text\",document.getElementById(\"htmlCode\").value);\n\t\t\telse\n\t\t\t\talert(\"Content is empty, can't copy!\")\n\t\t}\n\t}\n\n\tfunction dopasted(dst)\n\t{\n\t\tif(dst == 'source')\n\t\t{\n\t\t\tif(window.clipboardData.getdata(\"Text\") != null)\n\t\t\t\tdocument.getElementById(\"sourceCode\").value=window.clipboardData.getdata(\"Text\"); \n\t\t}\n\t\telse if(dst == 'html')\n\t\t{\n\t\t\tif(window.clipboardData.getdata(\"Text\") != null)\n\t\t\t\tdocument.getElementById(\"htmlCode\").value=window.clipboardData.getdata(\"Text\"); \n\t\t}\n\t\telse\n\t\t{\n\t\t\tif(window.clipboardData.getdata(\"Text\") != null)\n\t\t\t\tdocument.getElementById(\"preview\").innerHTML=window.clipboardData.getdata(\"Text\"); \n\t\t}\n\t}\n\n\tfunction doclear(dst)\n\t{\n\t\tif(dst == 'source')\n\t\t{\n\t\t\tdocument.getElementById(\"sourceCode\").value=\"\"; \n\t\t}\n\t\telse if(dst == 'html')\n\t\t{\n\t\t\tdocument.getElementById(\"htmlCode\").value=\"\"; \n\t\t}\n\t\telse\n\t\t{\n\t\t\tdocument.getElementById(\"preview\").innerHTML=\"\"; \n\t\t}\n\t}\n\n\tString.prototype.trim = function(){\n\t\treturn this.replace(/(^\\s*)|(\\s*＄)/g, \"\");\n\t}\n\n//rendered div - highlighted div\nvar  highlightdiv = null;\n\n// highlightes all elements identified by name and gets source code from specified property\ndp.sh.HighlightAll = function(name, showGutter /* optional */, showControls /* optional */, collapseAll /* optional */, firstLine /* optional */, showColumns /* optional */)\n{\n\tfunction FindValue()\n\t{\n\t\tvar a = arguments;\n\t\t\n\t\tfor(var i = 0; i < a.length; i++)\n\t\t{\n\t\t\tif(a[i] == null)\n\t\t\t\tcontinue;\n\t\t\t\t\n\t\t\tif(typeof(a[i]) == 'string' && a[i] != '')\n\t\t\t\treturn a[i] + '';\n\t\t\n\t\t\tif(typeof(a[i]) == 'object' && a[i].value != '')\n\t\t\t\treturn a[i].value + '';\n\t\t}\n\t\t\n\t\treturn null;\n\t}\n\t\n\tfunction IsoptionSet(value, list)\n\t{\n\t\tfor(var i = 0; i < list.length; i++)\n\t\t\tif(list[i] == value)\n\t\t\t\treturn true;\n\t\t\n\t\treturn false;\n\t}\n\t\n\tfunction GetoptionValue(name, list, defaultValue)\n\t{\n\t\tvar regex = new RegExp('^' + name + '\\\\[(\\\\w+)\\\\]＄', 'gi');\n\t\tvar matches = null;\n\n\t\tfor(var i = 0; i < list.length; i++)\n\t\t\tif((matches = regex.exec(list[i])) != null)\n\t\t\t\treturn matches[1];\n\t\t\n\t\treturn defaultValue;\n\t}\n\n\tvar elements = document.getElementsByName(name);\n\tvar highlighter = null;\n\tvar registered = new Object();\n\tvar propertyName = 'value';\n\t\n\t// if no code blocks found, leave\n\tif(elements == null)\n\t\treturn;\n\n\t// register all brushes\n\tfor(var brush in dp.sh.Brushes)\n\t{\n\t\tvar aliases = dp.sh.Brushes[brush].Aliases;\n\n\t\tif(aliases == null)\n\t\t\tcontinue;\n\t\t\n\t\tfor(var i = 0; i < aliases.length; i++)\n\t\t\tregistered[aliases[i]] = brush;\n\t}\n\n\tfor(var i = 0; i < elements.length; i++)\n\t{\n\t\tvar element = elements[i];\n\t\tvar options = FindValue(\n\t\t\t\telement.attributes['class'], element.className, \n\t\t\t\telement.attributes['language'], element.language\n\t\t\t\t);\n\t\tvar language = '';\n\t\t\n\t\tif(options == null)\n\t\t\tcontinue;\n\t\t\n\t\toptions = options.split(':');\n\t\t\n\t\tlanguage = options[0].toLowerCase();\n\n\t\tif(registered[language] == null)\n\t\t\tcontinue;\n\t\t\n\t\t// instantiate a brush\n\t\thighlighter = new dp.sh.Brushes[registered[language]]();\n\t\t\n\t\t// hide the original element\n\t\t//element.style.display = 'none';\n\n\t\thighlighter.noGutter = (showGutter == null) ? IsoptionSet('nogutter', options) : !showGutter;\n\t\thighlighter.addControls = (showControls == null) ? !IsoptionSet('nocontrols', options) : showControls;\n\t\thighlighter.collapse = (collapseAll == null) ? IsoptionSet('collapse', options) : collapseAll;\n\t\thighlighter.showColumns = (showColumns == null) ? IsoptionSet('showcolumns', options) : showColumns;\n\t\t\n\t\t// first line idea comes from Andrew Collington, thanks!\n\t\thighlighter.firstLine = (firstLine == null) ? parseInt(GetoptionValue('firstline', options, 1)) : firstLine;\n\n\t\thighlighter.Highlight(element[propertyName]);\n\t\t\n\t\tdocument.getElementById(\"htmlCode\").value = highlighter.div.outerHTML.substring();\n\n\t\thighlightdiv = highlighter;\n\t\t\n\t\tdocument.getElementById(\"preview\").innerHTML = highlighter.div.outerHTML.trim();\n\t}\t\n}\n\n// executes toolbar command by name\ndp.sh.Toolbar.Command = function(name, sender)\n{\n\tvar n = sender;\n\t\n\t//while(n != null && n.className.indexOf('dp-highlighter') == -1)\n\t//\tn = n.parentNode;\n\t//if(n != null)\n\t\tdp.sh.Toolbar.Commands[name].func(sender, highlightdiv);\n"
  },
  {
    "path": "src/main/resources/static/plugins/layer/layer.js",
    "content": "/*! layer-v3.1.1 Web弹层组件 MIT License  http://layer.layui.com/  By 贤心 */\n"
  },
  {
    "path": "src/main/resources/static/plugins/layer/mobile/layer.js",
    "content": "/*! layer mobile-v2.0.0 Web弹层组件 MIT License  http://layer.layui.com/mobile  By 贤心 */\n"
  },
  {
    "path": "src/main/resources/static/plugins/layer/mobile/need/layer.css",
    "content": ""
  },
  {
    "path": "src/main/resources/static/plugins/layer/theme/default/layer.css",
    "content": ""
  },
  {
    "path": "src/main/resources/static/plugins/lazyload/jquery.lazyload.js",
    "content": "/*!\n * Lazy Load - jQuery plugin for lazy loading images\n *\n * Copyright (c) 2007-2015 Mika Tuupola\n *\n * Licensed under the MIT license:\n *   http://www.opensource.org/licenses/mit-license.php\n *\n * Project home:\n *   http://www.appelsiini.net/projects/lazyload\n *\n * Version:  1.9.7\n *\n */\n\n(function($, window, document, undefined) {\n    var $window = $(window);\n\n    $.fn.lazyload = function(options) {\n        var elements = this;\n        var $container;\n        var settings = {\n            threshold       : 0,\n            failure_limit   : 0,\n            event           : \"scroll\",\n            effect          : \"show\",\n            container       : window,\n            data_attribute  : \"original\",\n            skip_invisible  : false,\n            appear          : null,\n            load            : null,\n            placeholder     : \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB/AAffA0nNPuCLAAAAAElFTkSuQmCC\"\n        };\n\n        function update() {\n            var counter = 0;\n\n            elements.each(function() {\n                var $this = $(this);\n                if (settings.skip_invisible && !$this.is(\":visible\")) {\n                    return;\n                }\n                if ($.abovethetop(this, settings) ||\n                    $.leftofbegin(this, settings)) {\n                        /* Nothing. */\n                } else if (!$.belowthefold(this, settings) &&\n                    !$.rightoffold(this, settings)) {\n                        $this.trigger(\"appear\");\n                        /* if we found an image we'll load, reset the counter */\n                        counter = 0;\n                } else {\n                    if (++counter > settings.failure_limit) {\n                        return false;\n                    }\n                }\n            });\n\n        }\n\n        if(options) {\n            /* Maintain BC for a couple of versions. */\n            if (undefined !== options.failurelimit) {\n                options.failure_limit = options.failurelimit;\n                delete options.failurelimit;\n            }\n            if (undefined !== options.effectspeed) {\n                options.effect_speed = options.effectspeed;\n                delete options.effectspeed;\n            }\n\n            $.extend(settings, options);\n        }\n\n        /* Cache container as jQuery as object. */\n        $container = (settings.container === undefined ||\n                      settings.container === window) ? $window : $(settings.container);\n\n        /* Fire one scroll event per scroll. Not one scroll event per image. */\n        if (0 === settings.event.indexOf(\"scroll\")) {\n            $container.bind(settings.event, function() {\n                return update();\n            });\n        }\n\n        this.each(function() {\n            var self = this;\n            var $self = $(self);\n\n            self.loaded = false;\n\n            /* If no src attribute given use data:uri. */\n            if ($self.attr(\"src\") === undefined || $self.attr(\"src\") === false) {\n                if ($self.is(\"img\")) {\n                    $self.attr(\"src\", settings.placeholder);\n                }\n            }\n\n            /* When appear is triggered load original image. */\n            $self.one(\"appear\", function() {\n                if (!this.loaded) {\n                    if (settings.appear) {\n                        var elements_left = elements.length;\n                        settings.appear.call(self, elements_left, settings);\n                    }\n                    $(\"<img />\")\n                        .bind(\"load\", function() {\n\n                            var original = $self.attr(\"data-\" + settings.data_attribute);\n                            $self.hide();\n                            if ($self.is(\"img\")) {\n                                $self.attr(\"src\", original);\n                            } else {\n                                $self.css(\"background-image\", \"url('\" + original + \"')\");\n                            }\n                            $self[settings.effect](settings.effect_speed);\n\n                            self.loaded = true;\n\n                            /* Remove image from array so it is not looped next time. */\n                            var temp = $.grep(elements, function(element) {\n                                return !element.loaded;\n                            });\n                            elements = $(temp);\n\n                            if (settings.load) {\n                                var elements_left = elements.length;\n                                settings.load.call(self, elements_left, settings);\n                            }\n                        })\n                        .attr(\"src\", $self.attr(\"data-\" + settings.data_attribute));\n                }\n            });\n\n            /* When wanted event is triggered load original image */\n            /* by triggering appear.                              */\n            if (0 !== settings.event.indexOf(\"scroll\")) {\n                $self.bind(settings.event, function() {\n                    if (!self.loaded) {\n                        $self.trigger(\"appear\");\n                    }\n                });\n            }\n        });\n\n        /* Check if something appears when window is resized. */\n        $window.bind(\"resize\", function() {\n            update();\n        });\n\n        /* With IOS5 force loading images when navigating with back button. */\n        /* Non optimal workaround. */\n        if ((/(?:iphone|ipod|ipad).*os 5/gi).test(navigator.appVersion)) {\n            $window.bind(\"pageshow\", function(event) {\n                if (event.originalEvent && event.originalEvent.persisted) {\n                    elements.each(function() {\n                        $(this).trigger(\"appear\");\n                    });\n                }\n            });\n        }\n\n        /* Force initial check if images should appear. */\n        $(document).ready(function() {\n            update();\n        });\n\n        return this;\n    };\n\n    /* Convenience methods in jQuery namespace.           */\n    /* Use as  $.belowthefold(element, {threshold : 100, container : window}) */\n\n    $.belowthefold = function(element, settings) {\n        var fold;\n\n        if (settings.container === undefined || settings.container === window) {\n            fold = (window.innerHeight ? window.innerHeight : $window.height()) + $window.scrollTop();\n        } else {\n            fold = $(settings.container).offset().top + $(settings.container).height();\n        }\n\n        return fold <= $(element).offset().top - settings.threshold;\n    };\n\n    $.rightoffold = function(element, settings) {\n        var fold;\n\n        if (settings.container === undefined || settings.container === window) {\n            fold = $window.width() + $window.scrollLeft();\n        } else {\n            fold = $(settings.container).offset().left + $(settings.container).width();\n        }\n\n        return fold <= $(element).offset().left - settings.threshold;\n    };\n\n    $.abovethetop = function(element, settings) {\n        var fold;\n\n        if (settings.container === undefined || settings.container === window) {\n            fold = $window.scrollTop();\n        } else {\n            fold = $(settings.container).offset().top;\n        }\n\n        return fold >= $(element).offset().top + settings.threshold  + $(element).height();\n    };\n\n    $.leftofbegin = function(element, settings) {\n        var fold;\n\n        if (settings.container === undefined || settings.container === window) {\n            fold = $window.scrollLeft();\n        } else {\n            fold = $(settings.container).offset().left;\n        }\n\n        return fold >= $(element).offset().left + settings.threshold + $(element).width();\n    };\n\n    $.inviewport = function(element, settings) {\n         return !$.rightoffold(element, settings) && !$.leftofbegin(element, settings) &&\n                !$.belowthefold(element, settings) && !$.abovethetop(element, settings);\n     };\n\n    /* Custom selectors for your convenience.   */\n    /* Use as $(\"img:below-the-fold\").something() or */\n    /* $(\"img\").filter(\":below-the-fold\").something() which is faster */\n\n    $.extend($.expr[\":\"], {\n        \"below-the-fold\" : function(a) { return $.belowthefold(a, {threshold : 0}); },\n        \"above-the-top\"  : function(a) { return !$.belowthefold(a, {threshold : 0}); },\n        \"right-of-screen\": function(a) { return $.rightoffold(a, {threshold : 0}); },\n        \"left-of-screen\" : function(a) { return !$.rightoffold(a, {threshold : 0}); },\n        \"in-viewport\"    : function(a) { return $.inviewport(a, {threshold : 0}); },\n        /* Maintain BC for couple of versions. */\n        \"above-the-fold\" : function(a) { return !$.belowthefold(a, {threshold : 0}); },\n        \"right-of-fold\"  : function(a) { return $.rightoffold(a, {threshold : 0}); },\n        \"left-of-fold\"   : function(a) { return !$.rightoffold(a, {threshold : 0}); }\n    });\n\n})(jQuery, window, document);\n"
  },
  {
    "path": "src/main/resources/static/plugins/loaders/loaders.css",
    "content": "/**\n *\n * All animations must live in their own file\n * in the animations directory and be included\n * here.\n *\n */\n/**\n * Styles shared by multiple animations\n */\n@-webkit-keyframes scale {\n  0% {\n    -webkit-transform: scale(1);\n            transform: scale(1);\n    opacity: 1; }\n\n  45% {\n    -webkit-transform: scale(0.1);\n            transform: scale(0.1);\n    opacity: 0.7; }\n\n  80% {\n    -webkit-transform: scale(1);\n            transform: scale(1);\n    opacity: 1; } }\n@keyframes scale {\n  0% {\n    -webkit-transform: scale(1);\n            transform: scale(1);\n    opacity: 1; }\n\n  45% {\n    -webkit-transform: scale(0.1);\n            transform: scale(0.1);\n    opacity: 0.7; }\n\n  80% {\n    -webkit-transform: scale(1);\n            transform: scale(1);\n    opacity: 1; } }\n\n.ball-pulse > div:nth-child(0) {\n  -webkit-animation: scale 0.75s 0s infinite cubic-bezier(.2, .68, .18, 1.08);\n          animation: scale 0.75s 0s infinite cubic-bezier(.2, .68, .18, 1.08); }\n.ball-pulse > div:nth-child(1) {\n  -webkit-animation: scale 0.75s 0.12s infinite cubic-bezier(.2, .68, .18, 1.08);\n          animation: scale 0.75s 0.12s infinite cubic-bezier(.2, .68, .18, 1.08); }\n.ball-pulse > div:nth-child(2) {\n  -webkit-animation: scale 0.75s 0.24s infinite cubic-bezier(.2, .68, .18, 1.08);\n          animation: scale 0.75s 0.24s infinite cubic-bezier(.2, .68, .18, 1.08); }\n.ball-pulse > div:nth-child(3) {\n  -webkit-animation: scale 0.75s 0.36s infinite cubic-bezier(.2, .68, .18, 1.08);\n          animation: scale 0.75s 0.36s infinite cubic-bezier(.2, .68, .18, 1.08); }\n.ball-pulse > div {\n  background-color: #fff;\n  width: 15px;\n  height: 15px;\n  border-radius: 100%;\n  margin: 2px;\n  -webkit-animation-fill-mode: both;\n          animation-fill-mode: both;\n  display: inline-block; }\n\n@-webkit-keyframes ball-pulse-sync {\n  33% {\n    -webkit-transform: translateY(10px);\n            transform: translateY(10px); }\n\n  66% {\n    -webkit-transform: translateY(-10px);\n            transform: translateY(-10px); }\n\n  100% {\n    -webkit-transform: translateY(0);\n            transform: translateY(0); } }\n\n@keyframes ball-pulse-sync {\n  33% {\n    -webkit-transform: translateY(10px);\n            transform: translateY(10px); }\n\n  66% {\n    -webkit-transform: translateY(-10px);\n            transform: translateY(-10px); }\n\n  100% {\n    -webkit-transform: translateY(0);\n            transform: translateY(0); } }\n\n.ball-pulse-sync > div:nth-child(0) {\n  -webkit-animation: ball-pulse-sync 0.6s 0s infinite ease-in-out;\n          animation: ball-pulse-sync 0.6s 0s infinite ease-in-out; }\n.ball-pulse-sync > div:nth-child(1) {\n  -webkit-animation: ball-pulse-sync 0.6s 0.07s infinite ease-in-out;\n          animation: ball-pulse-sync 0.6s 0.07s infinite ease-in-out; }\n.ball-pulse-sync > div:nth-child(2) {\n  -webkit-animation: ball-pulse-sync 0.6s 0.14s infinite ease-in-out;\n          animation: ball-pulse-sync 0.6s 0.14s infinite ease-in-out; }\n.ball-pulse-sync > div:nth-child(3) {\n  -webkit-animation: ball-pulse-sync 0.6s 0.21s infinite ease-in-out;\n          animation: ball-pulse-sync 0.6s 0.21s infinite ease-in-out; }\n.ball-pulse-sync > div {\n  background-color: #fff;\n  width: 15px;\n  height: 15px;\n  border-radius: 100%;\n  margin: 2px;\n  -webkit-animation-fill-mode: both;\n          animation-fill-mode: both;\n  display: inline-block; }\n\n@-webkit-keyframes ball-scale {\n  0% {\n    -webkit-transform: scale(0);\n            transform: scale(0); }\n\n  100% {\n    -webkit-transform: scale(1);\n            transform: scale(1);\n    opacity: 0; } }\n\n@keyframes ball-scale {\n  0% {\n    -webkit-transform: scale(0);\n            transform: scale(0); }\n\n  100% {\n    -webkit-transform: scale(1);\n            transform: scale(1);\n    opacity: 0; } }\n\n.ball-scale > div {\n  background-color: #fff;\n  width: 15px;\n  height: 15px;\n  border-radius: 100%;\n  margin: 2px;\n  -webkit-animation-fill-mode: both;\n          animation-fill-mode: both;\n  display: inline-block;\n  height: 60px;\n  width: 60px;\n  -webkit-animation: ball-scale 1s 0s ease-in-out infinite;\n          animation: ball-scale 1s 0s ease-in-out infinite; }\n\n@-webkit-keyframes rotate {\n  0% {\n    -webkit-transform: rotate(0deg);\n            transform: rotate(0deg); }\n\n  50% {\n    -webkit-transform: rotate(180deg);\n            transform: rotate(180deg); }\n\n  100% {\n    -webkit-transform: rotate(360deg);\n            transform: rotate(360deg); } }\n\n@keyframes rotate {\n  0% {\n    -webkit-transform: rotate(0deg);\n            transform: rotate(0deg); }\n\n  50% {\n    -webkit-transform: rotate(180deg);\n            transform: rotate(180deg); }\n\n  100% {\n    -webkit-transform: rotate(360deg);\n            transform: rotate(360deg); } }\n\n.ball-rotate {\n  position: relative; }\n  .ball-rotate > div {\n    background-color: #fff;\n    width: 15px;\n    height: 15px;\n    border-radius: 100%;\n    margin: 2px;\n    -webkit-animation-fill-mode: both;\n            animation-fill-mode: both;\n    position: relative; }\n    .ball-rotate > div:first-child {\n      -webkit-animation: rotate 1s 0s cubic-bezier(.7, -.13, .22, .86) infinite;\n              animation: rotate 1s 0s cubic-bezier(.7, -.13, .22, .86) infinite; }\n    .ball-rotate > div:before, .ball-rotate > div:after {\n      background-color: #fff;\n      width: 15px;\n      height: 15px;\n      border-radius: 100%;\n      margin: 2px;\n      content: \"\";\n      position: absolute;\n      opacity: 0.8; }\n    .ball-rotate > div:before {\n      top: 0px;\n      left: -28px; }\n    .ball-rotate > div:after {\n      top: 0px;\n      left: 25px; }\n\n@keyframes rotate {\n  0% {\n    -webkit-transform: rotate(0deg) scale(1);\n            transform: rotate(0deg) scale(1); }\n\n  50% {\n    -webkit-transform: rotate(180deg) scale(0.6);\n            transform: rotate(180deg) scale(0.6); }\n\n  100% {\n    -webkit-transform: rotate(360deg) scale(1);\n            transform: rotate(360deg) scale(1); } }\n\n.ball-clip-rotate > div {\n  background-color: #fff;\n  width: 15px;\n  height: 15px;\n  border-radius: 100%;\n  margin: 2px;\n  -webkit-animation-fill-mode: both;\n          animation-fill-mode: both;\n  border: 2px solid #fff;\n  border-bottom-color: transparent;\n  height: 25px;\n  width: 25px;\n  background: transparent !important;\n  display: inline-block;\n  -webkit-animation: rotate 0.75s 0s linear infinite;\n          animation: rotate 0.75s 0s linear infinite; }\n\n@keyframes rotate {\n  0% {\n    -webkit-transform: rotate(0deg) scale(1);\n            transform: rotate(0deg) scale(1); }\n\n  50% {\n    -webkit-transform: rotate(180deg) scale(0.6);\n            transform: rotate(180deg) scale(0.6); }\n\n  100% {\n    -webkit-transform: rotate(360deg) scale(1);\n            transform: rotate(360deg) scale(1); } }\n\n@keyframes scale {\n  30% {\n    -webkit-transform: scale(0.3);\n            transform: scale(0.3); }\n\n  100% {\n    -webkit-transform: scale(1);\n            transform: scale(1); } }\n\n.ball-clip-rotate-pulse {\n  position: relative;\n  -webkit-transform: translateY(-15px);\n      -ms-transform: translateY(-15px);\n          transform: translateY(-15px); }\n  .ball-clip-rotate-pulse > div {\n    -webkit-animation-fill-mode: both;\n            animation-fill-mode: both;\n    position: absolute;\n    top: 0px;\n    left: 0px;\n    border-radius: 100%; }\n    .ball-clip-rotate-pulse > div:first-child {\n      background: #fff;\n      height: 16px;\n      width: 16px;\n      top: 9px;\n      left: 9px;\n      -webkit-animation: scale 1s 0s cubic-bezier(.09, .57, .49, .9) infinite;\n              animation: scale 1s 0s cubic-bezier(.09, .57, .49, .9) infinite; }\n    .ball-clip-rotate-pulse > div:last-child {\n      position: absolute;\n      border: 2px solid #fff;\n      width: 30px;\n      height: 30px;\n      background: transparent;\n      border: 2px solid;\n      border-color: #fff transparent #fff transparent;\n      -webkit-animation: rotate 1s 0s cubic-bezier(.09, .57, .49, .9) infinite;\n              animation: rotate 1s 0s cubic-bezier(.09, .57, .49, .9) infinite;\n      -webkit-animation-duration: 1s;\n              animation-duration: 1s; }\n\n@keyframes rotate {\n  0% {\n    -webkit-transform: rotate(0deg) scale(1);\n            transform: rotate(0deg) scale(1); }\n\n  50% {\n    -webkit-transform: rotate(180deg) scale(0.6);\n            transform: rotate(180deg) scale(0.6); }\n\n  100% {\n    -webkit-transform: rotate(360deg) scale(1);\n            transform: rotate(360deg) scale(1); } }\n\n.ball-clip-rotate-multiple {\n  position: relative; }\n  .ball-clip-rotate-multiple > div {\n    -webkit-animation-fill-mode: both;\n            animation-fill-mode: both;\n    position: absolute;\n    left: 0px;\n    top: 0px;\n    border: 2px solid #fff;\n    border-bottom-color: transparent;\n    border-top-color: transparent;\n    border-radius: 100%;\n    height: 35px;\n    width: 35px;\n    -webkit-animation: rotate 1s 0s ease-in-out infinite;\n            animation: rotate 1s 0s ease-in-out infinite; }\n    .ball-clip-rotate-multiple > div:last-child {\n      display: inline-block;\n      top: 10px;\n      left: 10px;\n      width: 15px;\n      height: 15px;\n      -webkit-animation-duration: 0.5s;\n              animation-duration: 0.5s;\n      border-color: #fff transparent #fff transparent;\n      -webkit-animation-direction: reverse;\n              animation-direction: reverse; }\n\n@-webkit-keyframes ball-scale-ripple {\n  0% {\n    -webkit-transform: scale(0.1);\n            transform: scale(0.1);\n    opacity: 1; }\n\n  70% {\n    -webkit-transform: scale(1);\n            transform: scale(1);\n    opacity: 0.7; }\n\n  100% {\n    opacity: 0.0; } }\n\n@keyframes ball-scale-ripple {\n  0% {\n    -webkit-transform: scale(0.1);\n            transform: scale(0.1);\n    opacity: 1; }\n\n  70% {\n    -webkit-transform: scale(1);\n            transform: scale(1);\n    opacity: 0.7; }\n\n  100% {\n    opacity: 0.0; } }\n\n.ball-scale-ripple > div {\n  -webkit-animation-fill-mode: both;\n          animation-fill-mode: both;\n  height: 50px;\n  width: 50px;\n  border-radius: 100%;\n  border: 2px solid #fff;\n  -webkit-animation: ball-scale-ripple 1s 0s infinite cubic-bezier(.21, .53, .56, .8);\n          animation: ball-scale-ripple 1s 0s infinite cubic-bezier(.21, .53, .56, .8); }\n\n@-webkit-keyframes ball-scale-ripple-multiple {\n  0% {\n    -webkit-transform: scale(0.1);\n            transform: scale(0.1);\n    opacity: 1; }\n\n  70% {\n    -webkit-transform: scale(1);\n            transform: scale(1);\n    opacity: 0.7; }\n\n  100% {\n    opacity: 0.0; } }\n\n@keyframes ball-scale-ripple-multiple {\n  0% {\n    -webkit-transform: scale(0.1);\n            transform: scale(0.1);\n    opacity: 1; }\n\n  70% {\n    -webkit-transform: scale(1);\n            transform: scale(1);\n    opacity: 0.7; }\n\n  100% {\n    opacity: 0.0; } }\n\n.ball-scale-ripple-multiple {\n  position: relative;\n  -webkit-transform: translateY(-25px);\n      -ms-transform: translateY(-25px);\n          transform: translateY(-25px); }\n  .ball-scale-ripple-multiple > div:nth-child(0) {\n    -webkit-animation-delay: -0.2s;\n            animation-delay: -0.2s; }\n  .ball-scale-ripple-multiple > div:nth-child(1) {\n    -webkit-animation-delay: 0s;\n            animation-delay: 0s; }\n  .ball-scale-ripple-multiple > div:nth-child(2) {\n    -webkit-animation-delay: 0.2s;\n            animation-delay: 0.2s; }\n  .ball-scale-ripple-multiple > div:nth-child(3) {\n    -webkit-animation-delay: 0.4s;\n            animation-delay: 0.4s; }\n  .ball-scale-ripple-multiple > div {\n    -webkit-animation-fill-mode: both;\n            animation-fill-mode: both;\n    position: absolute;\n    top: 0;\n    left: 0;\n    width: 50px;\n    height: 50px;\n    border-radius: 100%;\n    border: 2px solid #fff;\n    -webkit-animation: ball-scale-ripple-multiple 1.25s 0s infinite cubic-bezier(.21, .53, .56, .8);\n            animation: ball-scale-ripple-multiple 1.25s 0s infinite cubic-bezier(.21, .53, .56, .8); }\n\n@-webkit-keyframes ball-beat {\n  50% {\n    opacity: 0.2;\n    -webkit-transform: scale(0.75);\n            transform: scale(0.75); }\n\n  100% {\n    opacity: 1;\n    -webkit-transform: scale(1);\n            transform: scale(1); } }\n\n@keyframes ball-beat {\n  50% {\n    opacity: 0.2;\n    -webkit-transform: scale(0.75);\n            transform: scale(0.75); }\n\n  100% {\n    opacity: 1;\n    -webkit-transform: scale(1);\n            transform: scale(1); } }\n\n.ball-beat > div {\n  background-color: #fff;\n  width: 15px;\n  height: 15px;\n  border-radius: 100%;\n  margin: 2px;\n  -webkit-animation-fill-mode: both;\n          animation-fill-mode: both;\n  display: inline-block;\n  -webkit-animation: ball-beat 0.7s 0s infinite linear;\n          animation: ball-beat 0.7s 0s infinite linear; }\n  .ball-beat > div:nth-child(2n-1) {\n    -webkit-animation-delay: 0.35s !important;\n            animation-delay: 0.35s !important; }\n\n@-webkit-keyframes ball-scale-multiple {\n  0% {\n    -webkit-transform: scale(0);\n            transform: scale(0);\n    opacity: 0; }\n\n  5% {\n    opacity: 1; }\n\n  100% {\n    -webkit-transform: scale(1);\n            transform: scale(1);\n    opacity: 0; } }\n\n@keyframes ball-scale-multiple {\n  0% {\n    -webkit-transform: scale(0);\n            transform: scale(0);\n    opacity: 0; }\n\n  5% {\n    opacity: 1; }\n\n  100% {\n    -webkit-transform: scale(1);\n            transform: scale(1);\n    opacity: 0; } }\n\n.ball-scale-multiple {\n  position: relative;\n  -webkit-transform: translateY(-30px);\n      -ms-transform: translateY(-30px);\n          transform: translateY(-30px); }\n  .ball-scale-multiple > div:nth-child(2) {\n    -webkit-animation-delay: 0.2s;\n            animation-delay: 0.2s; }\n  .ball-scale-multiple > div:nth-child(3) {\n    -webkit-animation-delay: 0.4s;\n            animation-delay: 0.4s; }\n  .ball-scale-multiple > div {\n    background-color: #fff;\n    width: 15px;\n    height: 15px;\n    border-radius: 100%;\n    margin: 2px;\n    -webkit-animation-fill-mode: both;\n            animation-fill-mode: both;\n    position: absolute;\n    left: 0px;\n    top: 0px;\n    opacity: 0;\n    margin: 0;\n    width: 60px;\n    height: 60px;\n    -webkit-animation: ball-scale-multiple 1s 0s linear infinite;\n            animation: ball-scale-multiple 1s 0s linear infinite; }\n\n@-webkit-keyframes ball-triangle-path-1 {\n  33% {\n    -webkit-transform: translate(25px, -50px);\n            transform: translate(25px, -50px); }\n\n  66% {\n    -webkit-transform: translate(50px, 0px);\n            transform: translate(50px, 0px); }\n\n  100% {\n    -webkit-transform: translate(0px, 0px);\n            transform: translate(0px, 0px); } }\n\n@keyframes ball-triangle-path-1 {\n  33% {\n    -webkit-transform: translate(25px, -50px);\n            transform: translate(25px, -50px); }\n\n  66% {\n    -webkit-transform: translate(50px, 0px);\n            transform: translate(50px, 0px); }\n\n  100% {\n    -webkit-transform: translate(0px, 0px);\n            transform: translate(0px, 0px); } }\n\n@-webkit-keyframes ball-triangle-path-2 {\n  33% {\n    -webkit-transform: translate(25px, 50px);\n            transform: translate(25px, 50px); }\n\n  66% {\n    -webkit-transform: translate(-25px, 50px);\n            transform: translate(-25px, 50px); }\n\n  100% {\n    -webkit-transform: translate(0px, 0px);\n            transform: translate(0px, 0px); } }\n\n@keyframes ball-triangle-path-2 {\n  33% {\n    -webkit-transform: translate(25px, 50px);\n            transform: translate(25px, 50px); }\n\n  66% {\n    -webkit-transform: translate(-25px, 50px);\n            transform: translate(-25px, 50px); }\n\n  100% {\n    -webkit-transform: translate(0px, 0px);\n            transform: translate(0px, 0px); } }\n\n@-webkit-keyframes ball-triangle-path-3 {\n  33% {\n    -webkit-transform: translate(-50px, 0px);\n            transform: translate(-50px, 0px); }\n\n  66% {\n    -webkit-transform: translate(-25px, -50px);\n            transform: translate(-25px, -50px); }\n\n  100% {\n    -webkit-transform: translate(0px, 0px);\n            transform: translate(0px, 0px); } }\n\n@keyframes ball-triangle-path-3 {\n  33% {\n    -webkit-transform: translate(-50px, 0px);\n            transform: translate(-50px, 0px); }\n\n  66% {\n    -webkit-transform: translate(-25px, -50px);\n            transform: translate(-25px, -50px); }\n\n  100% {\n    -webkit-transform: translate(0px, 0px);\n            transform: translate(0px, 0px); } }\n\n.ball-triangle-path {\n  position: relative;\n  -webkit-transform: translate(-25px, -25px);\n      -ms-transform: translate(-25px, -25px);\n          transform: translate(-25px, -25px); }\n  .ball-triangle-path > div:nth-child(1) {\n    -webkit-animation-name: ball-triangle-path-1;\n            animation-name: ball-triangle-path-1;\n    -webkit-animation-delay: 0;\n            animation-delay: 0;\n    -webkit-animation-duration: 2s;\n            animation-duration: 2s;\n    -webkit-animation-timing-function: ease-in-out;\n            animation-timing-function: ease-in-out;\n    -webkit-animation-iteration-count: infinite;\n            animation-iteration-count: infinite; }\n  .ball-triangle-path > div:nth-child(2) {\n    -webkit-animation-name: ball-triangle-path-2;\n            animation-name: ball-triangle-path-2;\n    -webkit-animation-delay: 0;\n            animation-delay: 0;\n    -webkit-animation-duration: 2s;\n            animation-duration: 2s;\n    -webkit-animation-timing-function: ease-in-out;\n            animation-timing-function: ease-in-out;\n    -webkit-animation-iteration-count: infinite;\n            animation-iteration-count: infinite; }\n  .ball-triangle-path > div:nth-child(3) {\n    -webkit-animation-name: ball-triangle-path-3;\n            animation-name: ball-triangle-path-3;\n    -webkit-animation-delay: 0;\n            animation-delay: 0;\n    -webkit-animation-duration: 2s;\n            animation-duration: 2s;\n    -webkit-animation-timing-function: ease-in-out;\n            animation-timing-function: ease-in-out;\n    -webkit-animation-iteration-count: infinite;\n            animation-iteration-count: infinite; }\n  .ball-triangle-path > div {\n    -webkit-animation-fill-mode: both;\n            animation-fill-mode: both;\n    position: absolute;\n    width: 10px;\n    height: 10px;\n    border-radius: 100%;\n    border: 1px solid #fff; }\n    .ball-triangle-path > div:nth-of-type(1) {\n      top: 50px; }\n    .ball-triangle-path > div:nth-of-type(2) {\n      left: 25px; }\n    .ball-triangle-path > div:nth-of-type(3) {\n      top: 50px;\n      left: 50px; }\n\n@-webkit-keyframes ball-pulse-rise-even {\n  0% {\n    -webkit-transform: scale(1.1);\n            transform: scale(1.1); }\n\n  25% {\n    -webkit-transform: translateY(-30px);\n            transform: translateY(-30px); }\n\n  50% {\n    -webkit-transform: scale(0.4);\n            transform: scale(0.4); }\n\n  75% {\n    -webkit-transform: translateY(30px);\n            transform: translateY(30px); }\n\n  100% {\n    -webkit-transform: translateY(0);\n            transform: translateY(0);\n    -webkit-transform: scale(1);\n            transform: scale(1); } }\n\n@keyframes ball-pulse-rise-even {\n  0% {\n    -webkit-transform: scale(1.1);\n            transform: scale(1.1); }\n\n  25% {\n    -webkit-transform: translateY(-30px);\n            transform: translateY(-30px); }\n\n  50% {\n    -webkit-transform: scale(0.4);\n            transform: scale(0.4); }\n\n  75% {\n    -webkit-transform: translateY(30px);\n            transform: translateY(30px); }\n\n  100% {\n    -webkit-transform: translateY(0);\n            transform: translateY(0);\n    -webkit-transform: scale(1);\n            transform: scale(1); } }\n\n@-webkit-keyframes ball-pulse-rise-odd {\n  0% {\n    -webkit-transform: scale(0.4);\n            transform: scale(0.4); }\n\n  25% {\n    -webkit-transform: translateY(30px);\n            transform: translateY(30px); }\n\n  50% {\n    -webkit-transform: scale(1.1);\n            transform: scale(1.1); }\n\n  75% {\n    -webkit-transform: translateY(-30px);\n            transform: translateY(-30px); }\n\n  100% {\n    -webkit-transform: translateY(0);\n            transform: translateY(0);\n    -webkit-transform: scale(0.75);\n            transform: scale(0.75); } }\n\n@keyframes ball-pulse-rise-odd {\n  0% {\n    -webkit-transform: scale(0.4);\n            transform: scale(0.4); }\n\n  25% {\n    -webkit-transform: translateY(30px);\n            transform: translateY(30px); }\n\n  50% {\n    -webkit-transform: scale(1.1);\n            transform: scale(1.1); }\n\n  75% {\n    -webkit-transform: translateY(-30px);\n            transform: translateY(-30px); }\n\n  100% {\n    -webkit-transform: translateY(0);\n            transform: translateY(0);\n    -webkit-transform: scale(0.75);\n            transform: scale(0.75); } }\n\n.ball-pulse-rise > div {\n  background-color: #fff;\n  width: 15px;\n  height: 15px;\n  border-radius: 100%;\n  margin: 2px;\n  -webkit-animation-fill-mode: both;\n          animation-fill-mode: both;\n  display: inline-block;\n  -webkit-animation-duration: 1s;\n          animation-duration: 1s;\n  -webkit-animation-timing-function: cubic-bezier(.15, .46, .9, .6);\n          animation-timing-function: cubic-bezier(.15, .46, .9, .6);\n  -webkit-animation-iteration-count: infinite;\n          animation-iteration-count: infinite;\n  -webkit-animation-delay: 0;\n          animation-delay: 0; }\n  .ball-pulse-rise > div:nth-child(2n) {\n    -webkit-animation-name: ball-pulse-rise-even;\n            animation-name: ball-pulse-rise-even; }\n  .ball-pulse-rise > div:nth-child(2n-1) {\n    -webkit-animation-name: ball-pulse-rise-odd;\n            animation-name: ball-pulse-rise-odd; }\n\n@-webkit-keyframes ball-grid-beat {\n  50% {\n    opacity: 0.7; }\n\n  100% {\n    opacity: 1; } }\n\n@keyframes ball-grid-beat {\n  50% {\n    opacity: 0.7; }\n\n  100% {\n    opacity: 1; } }\n\n.ball-grid-beat {\n  width: 57px; }\n  .ball-grid-beat > div:nth-child(1) {\n    -webkit-animation-delay: 0.36s;\n            animation-delay: 0.36s;\n    -webkit-animation-duration: 0.96s;\n            animation-duration: 0.96s; }\n  .ball-grid-beat > div:nth-child(2) {\n    -webkit-animation-delay: 0.4s;\n            animation-delay: 0.4s;\n    -webkit-animation-duration: 0.93s;\n            animation-duration: 0.93s; }\n  .ball-grid-beat > div:nth-child(3) {\n    -webkit-animation-delay: 0.68s;\n            animation-delay: 0.68s;\n    -webkit-animation-duration: 1.19s;\n            animation-duration: 1.19s; }\n  .ball-grid-beat > div:nth-child(4) {\n    -webkit-animation-delay: 0.41s;\n            animation-delay: 0.41s;\n    -webkit-animation-duration: 1.13s;\n            animation-duration: 1.13s; }\n  .ball-grid-beat > div:nth-child(5) {\n    -webkit-animation-delay: 0.71s;\n            animation-delay: 0.71s;\n    -webkit-animation-duration: 1.34s;\n            animation-duration: 1.34s; }\n  .ball-grid-beat > div:nth-child(6) {\n    -webkit-animation-delay: -0.15s;\n            animation-delay: -0.15s;\n    -webkit-animation-duration: 0.94s;\n            animation-duration: 0.94s; }\n  .ball-grid-beat > div:nth-child(7) {\n    -webkit-animation-delay: -0.12s;\n            animation-delay: -0.12s;\n    -webkit-animation-duration: 1.2s;\n            animation-duration: 1.2s; }\n  .ball-grid-beat > div:nth-child(8) {\n    -webkit-animation-delay: 0.01s;\n            animation-delay: 0.01s;\n    -webkit-animation-duration: 0.82s;\n            animation-duration: 0.82s; }\n  .ball-grid-beat > div:nth-child(9) {\n    -webkit-animation-delay: 0.32s;\n            animation-delay: 0.32s;\n    -webkit-animation-duration: 1.19s;\n            animation-duration: 1.19s; }\n  .ball-grid-beat > div {\n    background-color: #fff;\n    width: 15px;\n    height: 15px;\n    border-radius: 100%;\n    margin: 2px;\n    -webkit-animation-fill-mode: both;\n            animation-fill-mode: both;\n    display: inline-block;\n    float: left;\n    -webkit-animation-name: ball-grid-beat;\n            animation-name: ball-grid-beat;\n    -webkit-animation-iteration-count: infinite;\n            animation-iteration-count: infinite;\n    -webkit-animation-delay: 0;\n            animation-delay: 0; }\n\n@-webkit-keyframes ball-grid-pulse {\n  0% {\n    -webkit-transform: scale(1);\n            transform: scale(1); }\n\n  50% {\n    -webkit-transform: scale(0.5);\n            transform: scale(0.5);\n    opacity: 0.7; }\n\n  100% {\n    -webkit-transform: scale(1);\n            transform: scale(1);\n    opacity: 1; } }\n\n@keyframes ball-grid-pulse {\n  0% {\n    -webkit-transform: scale(1);\n            transform: scale(1); }\n\n  50% {\n    -webkit-transform: scale(0.5);\n            transform: scale(0.5);\n    opacity: 0.7; }\n\n  100% {\n    -webkit-transform: scale(1);\n            transform: scale(1);\n    opacity: 1; } }\n\n.ball-grid-pulse {\n  width: 57px; }\n  .ball-grid-pulse > div:nth-child(1) {\n    -webkit-animation-delay: -0.06s;\n            animation-delay: -0.06s;\n    -webkit-animation-duration: 0.72s;\n            animation-duration: 0.72s; }\n  .ball-grid-pulse > div:nth-child(2) {\n    -webkit-animation-delay: 0.25s;\n            animation-delay: 0.25s;\n    -webkit-animation-duration: 1.02s;\n            animation-duration: 1.02s; }\n  .ball-grid-pulse > div:nth-child(3) {\n    -webkit-animation-delay: -0.17s;\n            animation-delay: -0.17s;\n    -webkit-animation-duration: 1.28s;\n            animation-duration: 1.28s; }\n  .ball-grid-pulse > div:nth-child(4) {\n    -webkit-animation-delay: 0.48s;\n            animation-delay: 0.48s;\n    -webkit-animation-duration: 1.42s;\n            animation-duration: 1.42s; }\n  .ball-grid-pulse > div:nth-child(5) {\n    -webkit-animation-delay: 0.31s;\n            animation-delay: 0.31s;\n    -webkit-animation-duration: 1.45s;\n            animation-duration: 1.45s; }\n  .ball-grid-pulse > div:nth-child(6) {\n    -webkit-animation-delay: 0.03s;\n            animation-delay: 0.03s;\n    -webkit-animation-duration: 1.18s;\n            animation-duration: 1.18s; }\n  .ball-grid-pulse > div:nth-child(7) {\n    -webkit-animation-delay: 0.46s;\n            animation-delay: 0.46s;\n    -webkit-animation-duration: 0.87s;\n            animation-duration: 0.87s; }\n  .ball-grid-pulse > div:nth-child(8) {\n    -webkit-animation-delay: 0.78s;\n            animation-delay: 0.78s;\n    -webkit-animation-duration: 1.45s;\n            animation-duration: 1.45s; }\n  .ball-grid-pulse > div:nth-child(9) {\n    -webkit-animation-delay: 0.45s;\n            animation-delay: 0.45s;\n    -webkit-animation-duration: 1.06s;\n            animation-duration: 1.06s; }\n  .ball-grid-pulse > div {\n    background-color: #fff;\n    width: 15px;\n    height: 15px;\n    border-radius: 100%;\n    margin: 2px;\n    -webkit-animation-fill-mode: both;\n            animation-fill-mode: both;\n    display: inline-block;\n    float: left;\n    -webkit-animation-name: ball-grid-pulse;\n            animation-name: ball-grid-pulse;\n    -webkit-animation-iteration-count: infinite;\n            animation-iteration-count: infinite;\n    -webkit-animation-delay: 0;\n            animation-delay: 0; }\n\n@-webkit-keyframes ball-spin-fade-loader {\n  50% {\n    opacity: 0.3;\n    -webkit-transform: scale(0.4);\n            transform: scale(0.4); }\n\n  100% {\n    opacity: 1;\n    -webkit-transform: scale(1);\n            transform: scale(1); } }\n\n@keyframes ball-spin-fade-loader {\n  50% {\n    opacity: 0.3;\n    -webkit-transform: scale(0.4);\n            transform: scale(0.4); }\n\n  100% {\n    opacity: 1;\n    -webkit-transform: scale(1);\n            transform: scale(1); } }\n\n.ball-spin-fade-loader {\n  position: relative; }\n  .ball-spin-fade-loader > div:nth-child(1) {\n    top: 25px;\n    left: 0;\n    -webkit-animation: ball-spin-fade-loader 1s 0s infinite linear;\n            animation: ball-spin-fade-loader 1s 0s infinite linear; }\n  .ball-spin-fade-loader > div:nth-child(2) {\n    top: 17.04545px;\n    left: 17.04545px;\n    -webkit-animation: ball-spin-fade-loader 1s 0.12s infinite linear;\n            animation: ball-spin-fade-loader 1s 0.12s infinite linear; }\n  .ball-spin-fade-loader > div:nth-child(3) {\n    top: 0;\n    left: 25px;\n    -webkit-animation: ball-spin-fade-loader 1s 0.24s infinite linear;\n            animation: ball-spin-fade-loader 1s 0.24s infinite linear; }\n  .ball-spin-fade-loader > div:nth-child(4) {\n    top: -17.04545px;\n    left: 17.04545px;\n    -webkit-animation: ball-spin-fade-loader 1s 0.36s infinite linear;\n            animation: ball-spin-fade-loader 1s 0.36s infinite linear; }\n  .ball-spin-fade-loader > div:nth-child(5) {\n    top: -25px;\n    left: 0;\n    -webkit-animation: ball-spin-fade-loader 1s 0.48s infinite linear;\n            animation: ball-spin-fade-loader 1s 0.48s infinite linear; }\n  .ball-spin-fade-loader > div:nth-child(6) {\n    top: -17.04545px;\n    left: -17.04545px;\n    -webkit-animation: ball-spin-fade-loader 1s 0.6s infinite linear;\n            animation: ball-spin-fade-loader 1s 0.6s infinite linear; }\n  .ball-spin-fade-loader > div:nth-child(7) {\n    top: 0;\n    left: -25px;\n    -webkit-animation: ball-spin-fade-loader 1s 0.72s infinite linear;\n            animation: ball-spin-fade-loader 1s 0.72s infinite linear; }\n  .ball-spin-fade-loader > div:nth-child(8) {\n    top: 17.04545px;\n    left: -17.04545px;\n    -webkit-animation: ball-spin-fade-loader 1s 0.84s infinite linear;\n            animation: ball-spin-fade-loader 1s 0.84s infinite linear; }\n  .ball-spin-fade-loader > div {\n    background-color: #fff;\n    width: 15px;\n    height: 15px;\n    border-radius: 100%;\n    margin: 2px;\n    -webkit-animation-fill-mode: both;\n            animation-fill-mode: both;\n    position: absolute; }\n\n@-webkit-keyframes ball-spin-loader {\n  75% {\n    opacity: 0.2; }\n\n  100% {\n    opacity: 1; } }\n\n@keyframes ball-spin-loader {\n  75% {\n    opacity: 0.2; }\n\n  100% {\n    opacity: 1; } }\n\n.ball-spin-loader {\n  position: relative; }\n  .ball-spin-loader > span:nth-child(1) {\n    top: 45px;\n    left: 0;\n    -webkit-animation: ball-spin-loader 2s 0.9s infinite linear;\n            animation: ball-spin-loader 2s 0.9s infinite linear; }\n  .ball-spin-loader > span:nth-child(2) {\n    top: 30.68182px;\n    left: 30.68182px;\n    -webkit-animation: ball-spin-loader 2s 1.8s infinite linear;\n            animation: ball-spin-loader 2s 1.8s infinite linear; }\n  .ball-spin-loader > span:nth-child(3) {\n    top: 0;\n    left: 45px;\n    -webkit-animation: ball-spin-loader 2s 2.7s infinite linear;\n            animation: ball-spin-loader 2s 2.7s infinite linear; }\n  .ball-spin-loader > span:nth-child(4) {\n    top: -30.68182px;\n    left: 30.68182px;\n    -webkit-animation: ball-spin-loader 2s 3.6s infinite linear;\n            animation: ball-spin-loader 2s 3.6s infinite linear; }\n  .ball-spin-loader > span:nth-child(5) {\n    top: -45px;\n    left: 0;\n    -webkit-animation: ball-spin-loader 2s 4.5s infinite linear;\n            animation: ball-spin-loader 2s 4.5s infinite linear; }\n  .ball-spin-loader > span:nth-child(6) {\n    top: -30.68182px;\n    left: -30.68182px;\n    -webkit-animation: ball-spin-loader 2s 5.4s infinite linear;\n            animation: ball-spin-loader 2s 5.4s infinite linear; }\n  .ball-spin-loader > span:nth-child(7) {\n    top: 0;\n    left: -45px;\n    -webkit-animation: ball-spin-loader 2s 6.3s infinite linear;\n            animation: ball-spin-loader 2s 6.3s infinite linear; }\n  .ball-spin-loader > span:nth-child(8) {\n    top: 30.68182px;\n    left: -30.68182px;\n    -webkit-animation: ball-spin-loader 2s 7.2s infinite linear;\n            animation: ball-spin-loader 2s 7.2s infinite linear; }\n  .ball-spin-loader > div {\n    -webkit-animation-fill-mode: both;\n            animation-fill-mode: both;\n    position: absolute;\n    width: 15px;\n    height: 15px;\n    border-radius: 100%;\n    background: green; }\n\n@-webkit-keyframes ball-zig {\n  33% {\n    -webkit-transform: translate(-15px, -30px);\n            transform: translate(-15px, -30px); }\n\n  66% {\n    -webkit-transform: translate(15px, -30px);\n            transform: translate(15px, -30px); }\n\n  100% {\n    -webkit-transform: translate(0, 0);\n            transform: translate(0, 0); } }\n\n@keyframes ball-zig {\n  33% {\n    -webkit-transform: translate(-15px, -30px);\n            transform: translate(-15px, -30px); }\n\n  66% {\n    -webkit-transform: translate(15px, -30px);\n            transform: translate(15px, -30px); }\n\n  100% {\n    -webkit-transform: translate(0, 0);\n            transform: translate(0, 0); } }\n\n@-webkit-keyframes ball-zag {\n  33% {\n    -webkit-transform: translate(15px, 30px);\n            transform: translate(15px, 30px); }\n\n  66% {\n    -webkit-transform: translate(-15px, 30px);\n            transform: translate(-15px, 30px); }\n\n  100% {\n    -webkit-transform: translate(0, 0);\n            transform: translate(0, 0); } }\n\n@keyframes ball-zag {\n  33% {\n    -webkit-transform: translate(15px, 30px);\n            transform: translate(15px, 30px); }\n\n  66% {\n    -webkit-transform: translate(-15px, 30px);\n            transform: translate(-15px, 30px); }\n\n  100% {\n    -webkit-transform: translate(0, 0);\n            transform: translate(0, 0); } }\n\n.ball-zig-zag {\n  position: relative;\n  -webkit-transform: translate(-15px, -15px);\n      -ms-transform: translate(-15px, -15px);\n          transform: translate(-15px, -15px); }\n  .ball-zig-zag > div {\n    background-color: #fff;\n    width: 15px;\n    height: 15px;\n    border-radius: 100%;\n    margin: 2px;\n    -webkit-animation-fill-mode: both;\n            animation-fill-mode: both;\n    position: absolute;\n    margin-left: 15px;\n    top: 30px;\n    left: 30px; }\n    .ball-zig-zag > div:first-child {\n      -webkit-animation: ball-zig 0.7s 0s infinite linear;\n              animation: ball-zig 0.7s 0s infinite linear; }\n    .ball-zig-zag > div:last-child {\n      -webkit-animation: ball-zag 0.7s 0s infinite linear;\n              animation: ball-zag 0.7s 0s infinite linear; }\n\n@-webkit-keyframes ball-zig-deflect {\n  17% {\n    -webkit-transform: translate(-15px, -30px);\n            transform: translate(-15px, -30px); }\n\n  34% {\n    -webkit-transform: translate(15px, -30px);\n            transform: translate(15px, -30px); }\n\n  50% {\n    -webkit-transform: translate(0, 0);\n            transform: translate(0, 0); }\n\n  67% {\n    -webkit-transform: translate(15px, -30px);\n            transform: translate(15px, -30px); }\n\n  84% {\n    -webkit-transform: translate(-15px, -30px);\n            transform: translate(-15px, -30px); }\n\n  100% {\n    -webkit-transform: translate(0, 0);\n            transform: translate(0, 0); } }\n\n@keyframes ball-zig-deflect {\n  17% {\n    -webkit-transform: translate(-15px, -30px);\n            transform: translate(-15px, -30px); }\n\n  34% {\n    -webkit-transform: translate(15px, -30px);\n            transform: translate(15px, -30px); }\n\n  50% {\n    -webkit-transform: translate(0, 0);\n            transform: translate(0, 0); }\n\n  67% {\n    -webkit-transform: translate(15px, -30px);\n            transform: translate(15px, -30px); }\n\n  84% {\n    -webkit-transform: translate(-15px, -30px);\n            transform: translate(-15px, -30px); }\n\n  100% {\n    -webkit-transform: translate(0, 0);\n            transform: translate(0, 0); } }\n\n@-webkit-keyframes ball-zag-deflect {\n  17% {\n    -webkit-transform: translate(15px, 30px);\n            transform: translate(15px, 30px); }\n\n  34% {\n    -webkit-transform: translate(-15px, 30px);\n            transform: translate(-15px, 30px); }\n\n  50% {\n    -webkit-transform: translate(0, 0);\n            transform: translate(0, 0); }\n\n  67% {\n    -webkit-transform: translate(-15px, 30px);\n            transform: translate(-15px, 30px); }\n\n  84% {\n    -webkit-transform: translate(15px, 30px);\n            transform: translate(15px, 30px); }\n\n  100% {\n    -webkit-transform: translate(0, 0);\n            transform: translate(0, 0); } }\n\n@keyframes ball-zag-deflect {\n  17% {\n    -webkit-transform: translate(15px, 30px);\n            transform: translate(15px, 30px); }\n\n  34% {\n    -webkit-transform: translate(-15px, 30px);\n            transform: translate(-15px, 30px); }\n\n  50% {\n    -webkit-transform: translate(0, 0);\n            transform: translate(0, 0); }\n\n  67% {\n    -webkit-transform: translate(-15px, 30px);\n            transform: translate(-15px, 30px); }\n\n  84% {\n    -webkit-transform: translate(15px, 30px);\n            transform: translate(15px, 30px); }\n\n  100% {\n    -webkit-transform: translate(0, 0);\n            transform: translate(0, 0); } }\n\n.ball-zig-zag-deflect {\n  position: relative;\n  -webkit-transform: translate(-15px, -15px);\n      -ms-transform: translate(-15px, -15px);\n          transform: translate(-15px, -15px); }\n  .ball-zig-zag-deflect > div {\n    background-color: #fff;\n    width: 15px;\n    height: 15px;\n    border-radius: 100%;\n    margin: 2px;\n    -webkit-animation-fill-mode: both;\n            animation-fill-mode: both;\n    position: absolute;\n    margin-left: 15px;\n    top: 30px;\n    left: 30px; }\n    .ball-zig-zag-deflect > div:first-child {\n      -webkit-animation: ball-zig-deflect 1.5s 0s infinite linear;\n              animation: ball-zig-deflect 1.5s 0s infinite linear; }\n    .ball-zig-zag-deflect > div:last-child {\n      -webkit-animation: ball-zag-deflect 1.5s 0s infinite linear;\n              animation: ball-zag-deflect 1.5s 0s infinite linear; }\n\n/**\n * Lines\n */\n@-webkit-keyframes line-scale {\n  0% {\n    -webkit-transform: scaley(1);\n            transform: scaley(1); }\n\n  50% {\n    -webkit-transform: scaley(0.4);\n            transform: scaley(0.4); }\n\n  100% {\n    -webkit-transform: scaley(1);\n            transform: scaley(1); } }\n@keyframes line-scale {\n  0% {\n    -webkit-transform: scaley(1);\n            transform: scaley(1); }\n\n  50% {\n    -webkit-transform: scaley(0.4);\n            transform: scaley(0.4); }\n\n  100% {\n    -webkit-transform: scaley(1);\n            transform: scaley(1); } }\n\n.line-scale > div:nth-child(1) {\n  -webkit-animation: line-scale 1s 0.1s infinite cubic-bezier(.2, .68, .18, 1.08);\n          animation: line-scale 1s 0.1s infinite cubic-bezier(.2, .68, .18, 1.08); }\n.line-scale > div:nth-child(2) {\n  -webkit-animation: line-scale 1s 0.2s infinite cubic-bezier(.2, .68, .18, 1.08);\n          animation: line-scale 1s 0.2s infinite cubic-bezier(.2, .68, .18, 1.08); }\n.line-scale > div:nth-child(3) {\n  -webkit-animation: line-scale 1s 0.3s infinite cubic-bezier(.2, .68, .18, 1.08);\n          animation: line-scale 1s 0.3s infinite cubic-bezier(.2, .68, .18, 1.08); }\n.line-scale > div:nth-child(4) {\n  -webkit-animation: line-scale 1s 0.4s infinite cubic-bezier(.2, .68, .18, 1.08);\n          animation: line-scale 1s 0.4s infinite cubic-bezier(.2, .68, .18, 1.08); }\n.line-scale > div:nth-child(5) {\n  -webkit-animation: line-scale 1s 0.5s infinite cubic-bezier(.2, .68, .18, 1.08);\n          animation: line-scale 1s 0.5s infinite cubic-bezier(.2, .68, .18, 1.08); }\n.line-scale > div {\n  background-color: #fff;\n  width: 4px;\n  height: 35px;\n  border-radius: 2px;\n  margin: 2px;\n  -webkit-animation-fill-mode: both;\n          animation-fill-mode: both;\n  display: inline-block; }\n\n@-webkit-keyframes line-scale-party {\n  0% {\n    -webkit-transform: scale(1);\n            transform: scale(1); }\n\n  50% {\n    -webkit-transform: scale(0.5);\n            transform: scale(0.5); }\n\n  100% {\n    -webkit-transform: scale(1);\n            transform: scale(1); } }\n\n@keyframes line-scale-party {\n  0% {\n    -webkit-transform: scale(1);\n            transform: scale(1); }\n\n  50% {\n    -webkit-transform: scale(0.5);\n            transform: scale(0.5); }\n\n  100% {\n    -webkit-transform: scale(1);\n            transform: scale(1); } }\n\n.line-scale-party > div:nth-child(1) {\n  -webkit-animation-delay: 0.77s;\n          animation-delay: 0.77s;\n  -webkit-animation-duration: 1.26s;\n          animation-duration: 1.26s; }\n.line-scale-party > div:nth-child(2) {\n  -webkit-animation-delay: 0.29s;\n          animation-delay: 0.29s;\n  -webkit-animation-duration: 0.43s;\n          animation-duration: 0.43s; }\n.line-scale-party > div:nth-child(3) {\n  -webkit-animation-delay: 0.28s;\n          animation-delay: 0.28s;\n  -webkit-animation-duration: 1.01s;\n          animation-duration: 1.01s; }\n.line-scale-party > div:nth-child(4) {\n  -webkit-animation-delay: 0.74s;\n          animation-delay: 0.74s;\n  -webkit-animation-duration: 0.73s;\n          animation-duration: 0.73s; }\n.line-scale-party > div {\n  background-color: #fff;\n  width: 4px;\n  height: 35px;\n  border-radius: 2px;\n  margin: 2px;\n  -webkit-animation-fill-mode: both;\n          animation-fill-mode: both;\n  display: inline-block;\n  -webkit-animation-name: line-scale-party;\n          animation-name: line-scale-party;\n  -webkit-animation-iteration-count: infinite;\n          animation-iteration-count: infinite;\n  -webkit-animation-delay: 0;\n          animation-delay: 0; }\n\n@-webkit-keyframes line-scale-pulse-out {\n  0% {\n    -webkit-transform: scaley(1);\n            transform: scaley(1); }\n\n  50% {\n    -webkit-transform: scaley(0.4);\n            transform: scaley(0.4); }\n\n  100% {\n    -webkit-transform: scaley(1);\n            transform: scaley(1); } }\n\n@keyframes line-scale-pulse-out {\n  0% {\n    -webkit-transform: scaley(1);\n            transform: scaley(1); }\n\n  50% {\n    -webkit-transform: scaley(0.4);\n            transform: scaley(0.4); }\n\n  100% {\n    -webkit-transform: scaley(1);\n            transform: scaley(1); } }\n\n.line-scale-pulse-out > div {\n  background-color: #fff;\n  width: 4px;\n  height: 35px;\n  border-radius: 2px;\n  margin: 2px;\n  -webkit-animation-fill-mode: both;\n          animation-fill-mode: both;\n  display: inline-block;\n  -webkit-animation: line-scale-pulse-out 0.9s 0s infinite cubic-bezier(.85, .25, .37, .85);\n          animation: line-scale-pulse-out 0.9s 0s infinite cubic-bezier(.85, .25, .37, .85); }\n  .line-scale-pulse-out > div:nth-child(2), .line-scale-pulse-out > div:nth-child(4) {\n    -webkit-animation-delay: 0.2s !important;\n            animation-delay: 0.2s !important; }\n  .line-scale-pulse-out > div:nth-child(1), .line-scale-pulse-out > div:nth-child(5) {\n    -webkit-animation-delay: 0.4s !important;\n            animation-delay: 0.4s !important; }\n\n@-webkit-keyframes line-scale-pulse-out-rapid {\n  0% {\n    -webkit-transform: scaley(1);\n            transform: scaley(1); }\n\n  80% {\n    -webkit-transform: scaley(0.3);\n            transform: scaley(0.3); }\n\n  90% {\n    -webkit-transform: scaley(1);\n            transform: scaley(1); } }\n\n@keyframes line-scale-pulse-out-rapid {\n  0% {\n    -webkit-transform: scaley(1);\n            transform: scaley(1); }\n\n  80% {\n    -webkit-transform: scaley(0.3);\n            transform: scaley(0.3); }\n\n  90% {\n    -webkit-transform: scaley(1);\n            transform: scaley(1); } }\n\n.line-scale-pulse-out-rapid > div {\n  background-color: #fff;\n  width: 4px;\n  height: 35px;\n  border-radius: 2px;\n  margin: 2px;\n  -webkit-animation-fill-mode: both;\n          animation-fill-mode: both;\n  display: inline-block;\n  -webkit-animation: line-scale-pulse-out-rapid 0.9s 0s infinite cubic-bezier(.11, .49, .38, .78);\n          animation: line-scale-pulse-out-rapid 0.9s 0s infinite cubic-bezier(.11, .49, .38, .78); }\n  .line-scale-pulse-out-rapid > div:nth-child(2), .line-scale-pulse-out-rapid > div:nth-child(4) {\n    -webkit-animation-delay: 0.25s !important;\n            animation-delay: 0.25s !important; }\n  .line-scale-pulse-out-rapid > div:nth-child(1), .line-scale-pulse-out-rapid > div:nth-child(5) {\n    -webkit-animation-delay: 0.5s !important;\n            animation-delay: 0.5s !important; }\n\n@-webkit-keyframes line-spin-fade-loader {\n  50% {\n    opacity: 0.3; }\n\n  100% {\n    opacity: 1; } }\n\n@keyframes line-spin-fade-loader {\n  50% {\n    opacity: 0.3; }\n\n  100% {\n    opacity: 1; } }\n\n.line-spin-fade-loader {\n  position: relative; }\n  .line-spin-fade-loader > div:nth-child(1) {\n    top: 20px;\n    left: 0;\n    -webkit-animation: line-spin-fade-loader 1.2s 0.12s infinite ease-in-out;\n            animation: line-spin-fade-loader 1.2s 0.12s infinite ease-in-out; }\n  .line-spin-fade-loader > div:nth-child(2) {\n    top: 13.63636px;\n    left: 13.63636px;\n    -webkit-transform: rotate(-45deg);\n        -ms-transform: rotate(-45deg);\n            transform: rotate(-45deg);\n    -webkit-animation: line-spin-fade-loader 1.2s 0.24s infinite ease-in-out;\n            animation: line-spin-fade-loader 1.2s 0.24s infinite ease-in-out; }\n  .line-spin-fade-loader > div:nth-child(3) {\n    top: 0;\n    left: 20px;\n    -webkit-transform: rotate(90deg);\n        -ms-transform: rotate(90deg);\n            transform: rotate(90deg);\n    -webkit-animation: line-spin-fade-loader 1.2s 0.36s infinite ease-in-out;\n            animation: line-spin-fade-loader 1.2s 0.36s infinite ease-in-out; }\n  .line-spin-fade-loader > div:nth-child(4) {\n    top: -13.63636px;\n    left: 13.63636px;\n    -webkit-transform: rotate(45deg);\n        -ms-transform: rotate(45deg);\n            transform: rotate(45deg);\n    -webkit-animation: line-spin-fade-loader 1.2s 0.48s infinite ease-in-out;\n            animation: line-spin-fade-loader 1.2s 0.48s infinite ease-in-out; }\n  .line-spin-fade-loader > div:nth-child(5) {\n    top: -20px;\n    left: 0;\n    -webkit-animation: line-spin-fade-loader 1.2s 0.6s infinite ease-in-out;\n            animation: line-spin-fade-loader 1.2s 0.6s infinite ease-in-out; }\n  .line-spin-fade-loader > div:nth-child(6) {\n    top: -13.63636px;\n    left: -13.63636px;\n    -webkit-transform: rotate(-45deg);\n        -ms-transform: rotate(-45deg);\n            transform: rotate(-45deg);\n    -webkit-animation: line-spin-fade-loader 1.2s 0.72s infinite ease-in-out;\n            animation: line-spin-fade-loader 1.2s 0.72s infinite ease-in-out; }\n  .line-spin-fade-loader > div:nth-child(7) {\n    top: 0;\n    left: -20px;\n    -webkit-transform: rotate(90deg);\n        -ms-transform: rotate(90deg);\n            transform: rotate(90deg);\n    -webkit-animation: line-spin-fade-loader 1.2s 0.84s infinite ease-in-out;\n            animation: line-spin-fade-loader 1.2s 0.84s infinite ease-in-out; }\n  .line-spin-fade-loader > div:nth-child(8) {\n    top: 13.63636px;\n    left: -13.63636px;\n    -webkit-transform: rotate(45deg);\n        -ms-transform: rotate(45deg);\n            transform: rotate(45deg);\n    -webkit-animation: line-spin-fade-loader 1.2s 0.96s infinite ease-in-out;\n            animation: line-spin-fade-loader 1.2s 0.96s infinite ease-in-out; }\n  .line-spin-fade-loader > div {\n    background-color: #fff;\n    width: 4px;\n    height: 35px;\n    border-radius: 2px;\n    margin: 2px;\n    -webkit-animation-fill-mode: both;\n            animation-fill-mode: both;\n    position: absolute;\n    width: 5px;\n    height: 15px; }\n\n/**\n * Misc\n */\n@-webkit-keyframes triangle-skew-spin {\n  25% {\n    -webkit-transform: perspective(100px) rotateX(180deg) rotateY(0);\n            transform: perspective(100px) rotateX(180deg) rotateY(0); }\n\n  50% {\n    -webkit-transform: perspective(100px) rotateX(180deg) rotateY(180deg);\n            transform: perspective(100px) rotateX(180deg) rotateY(180deg); }\n\n  75% {\n    -webkit-transform: perspective(100px) rotateX(0) rotateY(180deg);\n            transform: perspective(100px) rotateX(0) rotateY(180deg); }\n\n  100% {\n    -webkit-transform: perspective(100px) rotateX(0) rotateY(0);\n            transform: perspective(100px) rotateX(0) rotateY(0); } }\n@keyframes triangle-skew-spin {\n  25% {\n    -webkit-transform: perspective(100px) rotateX(180deg) rotateY(0);\n            transform: perspective(100px) rotateX(180deg) rotateY(0); }\n\n  50% {\n    -webkit-transform: perspective(100px) rotateX(180deg) rotateY(180deg);\n            transform: perspective(100px) rotateX(180deg) rotateY(180deg); }\n\n  75% {\n    -webkit-transform: perspective(100px) rotateX(0) rotateY(180deg);\n            transform: perspective(100px) rotateX(0) rotateY(180deg); }\n\n  100% {\n    -webkit-transform: perspective(100px) rotateX(0) rotateY(0);\n            transform: perspective(100px) rotateX(0) rotateY(0); } }\n\n.triangle-skew-spin > div {\n  -webkit-animation-fill-mode: both;\n          animation-fill-mode: both;\n  width: 0;\n  height: 0;\n  border-left: 20px solid transparent;\n  border-right: 20px solid transparent;\n  border-bottom: 20px solid #fff;\n  -webkit-animation: triangle-skew-spin 3s 0s cubic-bezier(.09, .57, .49, .9) infinite;\n          animation: triangle-skew-spin 3s 0s cubic-bezier(.09, .57, .49, .9) infinite; }\n\n@-webkit-keyframes square-spin {\n  25% {\n    -webkit-transform: perspective(100px) rotateX(180deg) rotateY(0);\n            transform: perspective(100px) rotateX(180deg) rotateY(0); }\n\n  50% {\n    -webkit-transform: perspective(100px) rotateX(180deg) rotateY(180deg);\n            transform: perspective(100px) rotateX(180deg) rotateY(180deg); }\n\n  75% {\n    -webkit-transform: perspective(100px) rotateX(0) rotateY(180deg);\n            transform: perspective(100px) rotateX(0) rotateY(180deg); }\n\n  100% {\n    -webkit-transform: perspective(100px) rotateX(0) rotateY(0);\n            transform: perspective(100px) rotateX(0) rotateY(0); } }\n\n@keyframes square-spin {\n  25% {\n    -webkit-transform: perspective(100px) rotateX(180deg) rotateY(0);\n            transform: perspective(100px) rotateX(180deg) rotateY(0); }\n\n  50% {\n    -webkit-transform: perspective(100px) rotateX(180deg) rotateY(180deg);\n            transform: perspective(100px) rotateX(180deg) rotateY(180deg); }\n\n  75% {\n    -webkit-transform: perspective(100px) rotateX(0) rotateY(180deg);\n            transform: perspective(100px) rotateX(0) rotateY(180deg); }\n\n  100% {\n    -webkit-transform: perspective(100px) rotateX(0) rotateY(0);\n            transform: perspective(100px) rotateX(0) rotateY(0); } }\n\n.square-spin > div {\n  -webkit-animation-fill-mode: both;\n          animation-fill-mode: both;\n  width: 50px;\n  height: 50px;\n  background: #fff;\n  border: 1px solid red;\n  -webkit-animation: square-spin 3s 0s cubic-bezier(.09, .57, .49, .9) infinite;\n          animation: square-spin 3s 0s cubic-bezier(.09, .57, .49, .9) infinite; }\n\n@-webkit-keyframes rotate_pacman_half_up {\n  0% {\n    -webkit-transform: rotate(270deg);\n            transform: rotate(270deg); }\n\n  50% {\n    -webkit-transform: rotate(360deg);\n            transform: rotate(360deg); }\n\n  100% {\n    -webkit-transform: rotate(270deg);\n            transform: rotate(270deg); } }\n\n@keyframes rotate_pacman_half_up {\n  0% {\n    -webkit-transform: rotate(270deg);\n            transform: rotate(270deg); }\n\n  50% {\n    -webkit-transform: rotate(360deg);\n            transform: rotate(360deg); }\n\n  100% {\n    -webkit-transform: rotate(270deg);\n            transform: rotate(270deg); } }\n\n@-webkit-keyframes rotate_pacman_half_down {\n  0% {\n    -webkit-transform: rotate(90deg);\n            transform: rotate(90deg); }\n\n  50% {\n    -webkit-transform: rotate(0deg);\n            transform: rotate(0deg); }\n\n  100% {\n    -webkit-transform: rotate(90deg);\n            transform: rotate(90deg); } }\n\n@keyframes rotate_pacman_half_down {\n  0% {\n    -webkit-transform: rotate(90deg);\n            transform: rotate(90deg); }\n\n  50% {\n    -webkit-transform: rotate(0deg);\n            transform: rotate(0deg); }\n\n  100% {\n    -webkit-transform: rotate(90deg);\n            transform: rotate(90deg); } }\n\n@-webkit-keyframes pacman-balls {\n  75% {\n    opacity: 0.7; }\n\n  100% {\n    -webkit-transform: translate(-100px, -6.25px);\n            transform: translate(-100px, -6.25px); } }\n\n@keyframes pacman-balls {\n  75% {\n    opacity: 0.7; }\n\n  100% {\n    -webkit-transform: translate(-100px, -6.25px);\n            transform: translate(-100px, -6.25px); } }\n\n.pacman {\n  position: relative; }\n  .pacman > div:nth-child(2) {\n    -webkit-animation: pacman-balls 1s 0s infinite linear;\n            animation: pacman-balls 1s 0s infinite linear; }\n  .pacman > div:nth-child(3) {\n    -webkit-animation: pacman-balls 1s 0.33s infinite linear;\n            animation: pacman-balls 1s 0.33s infinite linear; }\n  .pacman > div:nth-child(4) {\n    -webkit-animation: pacman-balls 1s 0.66s infinite linear;\n            animation: pacman-balls 1s 0.66s infinite linear; }\n  .pacman > div:nth-child(5) {\n    -webkit-animation: pacman-balls 1s 0.99s infinite linear;\n            animation: pacman-balls 1s 0.99s infinite linear; }\n  .pacman > div:first-of-type {\n    width: 0px;\n    height: 0px;\n    border-right: 25px solid transparent;\n    border-top: 25px solid #fff;\n    border-left: 25px solid #fff;\n    border-bottom: 25px solid #fff;\n    border-radius: 25px;\n    -webkit-animation: rotate_pacman_half_up 0.5s 0s infinite;\n            animation: rotate_pacman_half_up 0.5s 0s infinite; }\n  .pacman > div:nth-child(2) {\n    width: 0px;\n    height: 0px;\n    border-right: 25px solid transparent;\n    border-top: 25px solid #fff;\n    border-left: 25px solid #fff;\n    border-bottom: 25px solid #fff;\n    border-radius: 25px;\n    -webkit-animation: rotate_pacman_half_down 0.5s 0s infinite;\n            animation: rotate_pacman_half_down 0.5s 0s infinite;\n    margin-top: -50px; }\n  .pacman > div:nth-child(3), .pacman > div:nth-child(4), .pacman > div:nth-child(5), .pacman > div:nth-child(6) {\n    background-color: #fff;\n    width: 15px;\n    height: 15px;\n    border-radius: 100%;\n    margin: 2px;\n    width: 10px;\n    height: 10px;\n    position: absolute;\n    -webkit-transform: translate(0, -6.25px);\n        -ms-transform: translate(0, -6.25px);\n            transform: translate(0, -6.25px);\n    top: 25px;\n    left: 100px; }\n\n@-webkit-keyframes cube-transition {\n  25% {\n    -webkit-transform: translateX(50px) scale(0.5) rotate(-90deg);\n            transform: translateX(50px) scale(0.5) rotate(-90deg); }\n\n  50% {\n    -webkit-transform: translate(50px, 50px) rotate(-180deg);\n            transform: translate(50px, 50px) rotate(-180deg); }\n\n  75% {\n    -webkit-transform: translateY(50px) scale(0.5) rotate(-270deg);\n            transform: translateY(50px) scale(0.5) rotate(-270deg); }\n\n  100% {\n    -webkit-transform: rotate(-360deg);\n            transform: rotate(-360deg); } }\n\n@keyframes cube-transition {\n  25% {\n    -webkit-transform: translateX(50px) scale(0.5) rotate(-90deg);\n            transform: translateX(50px) scale(0.5) rotate(-90deg); }\n\n  50% {\n    -webkit-transform: translate(50px, 50px) rotate(-180deg);\n            transform: translate(50px, 50px) rotate(-180deg); }\n\n  75% {\n    -webkit-transform: translateY(50px) scale(0.5) rotate(-270deg);\n            transform: translateY(50px) scale(0.5) rotate(-270deg); }\n\n  100% {\n    -webkit-transform: rotate(-360deg);\n            transform: rotate(-360deg); } }\n\n.cube-transition {\n  position: relative;\n  -webkit-transform: translate(-25px, -25px);\n      -ms-transform: translate(-25px, -25px);\n          transform: translate(-25px, -25px); }\n  .cube-transition > div {\n    -webkit-animation-fill-mode: both;\n            animation-fill-mode: both;\n    width: 10px;\n    height: 10px;\n    position: absolute;\n    top: 0;\n    left: 0;\n    background-color: #fff;\n    -webkit-animation: cube-transition 1.6s 0s infinite ease-in-out;\n            animation: cube-transition 1.6s 0s infinite ease-in-out; }\n    .cube-transition > div:last-child {\n      -webkit-animation-delay: -0.8s;\n              animation-delay: -0.8s; }\n\n@-webkit-keyframes spin-rotate {\n  0% {\n    -webkit-transform: rotate(0deg);\n            transform: rotate(0deg); }\n\n  50% {\n    -webkit-transform: rotate(180deg);\n            transform: rotate(180deg); }\n\n  100% {\n    -webkit-transform: rotate(360deg);\n            transform: rotate(360deg); } }\n\n@keyframes spin-rotate {\n  0% {\n    -webkit-transform: rotate(0deg);\n            transform: rotate(0deg); }\n\n  50% {\n    -webkit-transform: rotate(180deg);\n            transform: rotate(180deg); }\n\n  100% {\n    -webkit-transform: rotate(360deg);\n            transform: rotate(360deg); } }\n\n.semi-circle-spin {\n  position: relative;\n  width: 35px;\n  height: 35px;\n  overflow: hidden; }\n  .semi-circle-spin > div {\n    position: absolute;\n    border-width: 0px;\n    border-radius: 100%;\n    -webkit-animation: spin-rotate 0.6s 0s infinite linear;\n            animation: spin-rotate 0.6s 0s infinite linear;\n    background-image: -webkit-linear-gradient(transparent 0%, transparent 70%, #fff 30%, #fff 100%);\n    background-image: linear-gradient(transparent 0%, transparent 70%, #fff 30%, #fff 100%);\n    width: 100%;\n    height: 100%; }\n"
  },
  {
    "path": "src/main/resources/static/plugins/pace/pace.css",
    "content": ".pace {\n    -webkit-pointer-events: none;\n    pointer-events: none;\n    -webkit-user-select: none;\n    -moz-user-select: none;\n    user-select: none;\n}\n\n.pace-inactive {\n    display: none;\n}\n\n.pace .pace-progress {\n    background: #fff;\n    position: fixed;\n    z-index: 2000;\n    top: 0;\n    right: 100%;\n    width: 100%;\n    height: 2px;\n}\n\n.pace .pace-progress-inner {\n    display: block;\n    position: absolute;\n    right: 0px;\n    width: 100px;\n    height: 100%;\n    box-shadow: 0 0 10px #fff, 0 0 5px #fff;\n    opacity: 1.0;\n    -webkit-transform: rotate(3deg) translate(0px, -4px);\n    -moz-transform: rotate(3deg) translate(0px, -4px);\n    -ms-transform: rotate(3deg) translate(0px, -4px);\n    -o-transform: rotate(3deg) translate(0px, -4px);\n    transform: rotate(3deg) translate(0px, -4px);\n}\n\n.pace .pace-activity {\n    display: block;\n    position: fixed;\n    z-index: 2000;\n    top: 15px;\n    right: 50%;\n    width: 14px;\n    height: 14px;\n    border: solid 2px transparent;\n    border-top-color: #fff;\n    border-left-color: #fff;\n    border-radius: 10px;\n    -webkit-animation: pace-spinner 400ms linear infinite;\n    -moz-animation: pace-spinner 400ms linear infinite;\n    -ms-animation: pace-spinner 400ms linear infinite;\n    -o-animation: pace-spinner 400ms linear infinite;\n    animation: pace-spinner 400ms linear infinite;\n}\n\n@media (max-width: 767px) {\n    .pace .pace-activity {\n        top: 15px;\n        right: 15px;\n        width: 14px;\n        height: 14px;\n    }\n}\n\n@-webkit-keyframes pace-spinner {\n    0% { -webkit-transform: rotate(0deg); transform: rotate(0deg); }\n    100% { -webkit-transform: rotate(360deg); transform: rotate(360deg); }\n}\n@-moz-keyframes pace-spinner {\n    0% { -moz-transform: rotate(0deg); transform: rotate(0deg); }\n    100% { -moz-transform: rotate(360deg); transform: rotate(360deg); }\n}\n@-o-keyframes pace-spinner {\n    0% { -o-transform: rotate(0deg); transform: rotate(0deg); }\n    100% { -o-transform: rotate(360deg); transform: rotate(360deg); }\n}\n@-ms-keyframes pace-spinner {\n    0% { -ms-transform: rotate(0deg); transform: rotate(0deg); }\n    100% { -ms-transform: rotate(360deg); transform: rotate(360deg); }\n}\n@keyframes pace-spinner {\n    0% { transform: rotate(0deg); transform: rotate(0deg); }\n    100% { transform: rotate(360deg); transform: rotate(360deg); }\n"
  },
  {
    "path": "src/main/resources/static/plugins/pace/pace.js",
    "content": "(function() {\n    var AjaxMonitor, Bar, DocumentMonitor, ElementMonitor, ElementTracker, EventLagMonitor, Evented, Events, NoTargetError, Pace, RequestIntercept, SOURCE_KEYS, Scaler, SocketRequestTracker, XHRRequestTracker, animation, avgAmplitude, bar, cancelAnimation, cancelAnimationFrame, defaultOptions, extend, extendNative, getFromDOM, getIntercept, handlePushState, ignoreStack, init, now, options, requestAnimationFrame, result, runAnimation, scalers, shouldIgnoreURL, shouldTrack, source, sources, uniScaler, _WebSocket, _XDomainRequest, _XMLHttpRequest, _i, _intercept, _len, _pushState, _ref, _ref1, _replaceState,\n        __slice = [].slice,\n        __hasProp = {}.hasOwnProperty,\n        __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n        __indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; };\n\n    defaultOptions = {\n        catchupTime: 100,\n        initialRate: .03,\n        minTime: 250,\n        ghostTime: 100,\n        maxProgressPerFrame: 20,\n        easeFactor: 1.25,\n        startOnPageLoad: true,\n        restartOnPushState: true,\n        restartOnRequestAfter: 500,\n        target: 'body',\n        elements: {\n            checkInterval: 100,\n            selectors: ['body']\n        },\n        eventLag: {\n            minSamples: 10,\n            sampleCount: 3,\n            lagThreshold: 3\n        },\n        ajax: {\n            trackMethods: ['GET'],\n            trackWebSockets: true,\n            ignoreURLs: []\n        }\n    };\n\n    now = function() {\n        var _ref;\n        return (_ref = typeof performance !== \"undefined\" && performance !== null ? typeof performance.now === \"function\" ? performance.now() : void 0 : void 0) != null ? _ref : +(new Date);\n    };\n\n    requestAnimationFrame = window.requestAnimationFrame || window.mozRequestAnimationFrame || window.webkitRequestAnimationFrame || window.msRequestAnimationFrame;\n\n    cancelAnimationFrame = window.cancelAnimationFrame || window.mozCancelAnimationFrame;\n\n    if (requestAnimationFrame == null) {\n        requestAnimationFrame = function(fn) {\n            return setTimeout(fn, 50);\n        };\n        cancelAnimationFrame = function(id) {\n            return clearTimeout(id);\n        };\n    }\n\n    runAnimation = function(fn) {\n        var last, tick;\n        last = now();\n        tick = function() {\n            var diff;\n            diff = now() - last;\n            if (diff >= 33) {\n                last = now();\n                return fn(diff, function() {\n                    return requestAnimationFrame(tick);\n                });\n            } else {\n                return setTimeout(tick, 33 - diff);\n            }\n        };\n        return tick();\n    };\n\n    result = function() {\n        var args, key, obj;\n        obj = arguments[0], key = arguments[1], args = 3 <= arguments.length ? __slice.call(arguments, 2) : [];\n        if (typeof obj[key] === 'function') {\n            return obj[key].apply(obj, args);\n        } else {\n            return obj[key];\n        }\n    };\n\n    extend = function() {\n        var key, out, source, sources, val, _i, _len;\n        out = arguments[0], sources = 2 <= arguments.length ? __slice.call(arguments, 1) : [];\n        for (_i = 0, _len = sources.length; _i < _len; _i++) {\n            source = sources[_i];\n            if (source) {\n                for (key in source) {\n                    if (!__hasProp.call(source, key)) continue;\n                    val = source[key];\n                    if ((out[key] != null) && typeof out[key] === 'object' && (val != null) && typeof val === 'object') {\n                        extend(out[key], val);\n                    } else {\n                        out[key] = val;\n                    }\n                }\n            }\n        }\n        return out;\n    };\n\n    avgAmplitude = function(arr) {\n        var count, sum, v, _i, _len;\n        sum = count = 0;\n        for (_i = 0, _len = arr.length; _i < _len; _i++) {\n            v = arr[_i];\n            sum += Math.abs(v);\n            count++;\n        }\n        return sum / count;\n    };\n\n    getFromDOM = function(key, json) {\n        var data, e, el;\n        if (key == null) {\n            key = 'options';\n        }\n        if (json == null) {\n            json = true;\n        }\n        el = document.querySelector(\"[data-pace-\" + key + \"]\");\n        if (!el) {\n            return;\n        }\n        data = el.getAttribute(\"data-pace-\" + key);\n        if (!json) {\n            return data;\n        }\n        try {\n            return JSON.parse(data);\n        } catch (_error) {\n            e = _error;\n            return typeof console !== \"undefined\" && console !== null ? console.error(\"Error parsing inline pace options\", e) : void 0;\n        }\n    };\n\n    Evented = (function() {\n        function Evented() {}\n\n        Evented.prototype.on = function(event, handler, ctx, once) {\n            var _base;\n            if (once == null) {\n                once = false;\n            }\n            if (this.bindings == null) {\n                this.bindings = {};\n            }\n            if ((_base = this.bindings)[event] == null) {\n                _base[event] = [];\n            }\n            return this.bindings[event].push({\n                handler: handler,\n                ctx: ctx,\n                once: once\n            });\n        };\n\n        Evented.prototype.once = function(event, handler, ctx) {\n            return this.on(event, handler, ctx, true);\n        };\n\n        Evented.prototype.off = function(event, handler) {\n            var i, _ref, _results;\n            if (((_ref = this.bindings) != null ? _ref[event] : void 0) == null) {\n                return;\n            }\n            if (handler == null) {\n                return delete this.bindings[event];\n            } else {\n                i = 0;\n                _results = [];\n                while (i < this.bindings[event].length) {\n                    if (this.bindings[event][i].handler === handler) {\n                        _results.push(this.bindings[event].splice(i, 1));\n                    } else {\n                        _results.push(i++);\n                    }\n                }\n                return _results;\n            }\n        };\n\n        Evented.prototype.trigger = function() {\n            var args, ctx, event, handler, i, once, _ref, _ref1, _results;\n            event = arguments[0], args = 2 <= arguments.length ? __slice.call(arguments, 1) : [];\n            if ((_ref = this.bindings) != null ? _ref[event] : void 0) {\n                i = 0;\n                _results = [];\n                while (i < this.bindings[event].length) {\n                    _ref1 = this.bindings[event][i], handler = _ref1.handler, ctx = _ref1.ctx, once = _ref1.once;\n                    handler.apply(ctx != null ? ctx : this, args);\n                    if (once) {\n                        _results.push(this.bindings[event].splice(i, 1));\n                    } else {\n                        _results.push(i++);\n                    }\n                }\n                return _results;\n            }\n        };\n\n        return Evented;\n\n    })();\n\n    Pace = window.Pace || {};\n\n    window.Pace = Pace;\n\n    extend(Pace, Evented.prototype);\n\n    options = Pace.options = extend({}, defaultOptions, window.paceOptions, getFromDOM());\n\n    _ref = ['ajax', 'document', 'eventLag', 'elements'];\n    for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n        source = _ref[_i];\n        if (options[source] === true) {\n            options[source] = defaultOptions[source];\n        }\n    }\n\n    NoTargetError = (function(_super) {\n        __extends(NoTargetError, _super);\n\n        function NoTargetError() {\n            _ref1 = NoTargetError.__super__.constructor.apply(this, arguments);\n            return _ref1;\n        }\n\n        return NoTargetError;\n\n    })(Error);\n\n    Bar = (function() {\n        function Bar() {\n            this.progress = 0;\n        }\n\n        Bar.prototype.getElement = function() {\n            var targetElement;\n            if (this.el == null) {\n                targetElement = document.querySelector(options.target);\n                if (!targetElement) {\n                    throw new NoTargetError;\n                }\n                this.el = document.createElement('div');\n                this.el.className = \"pace pace-active\";\n                document.body.className = document.body.className.replace(/pace-done/g, '');\n                document.body.className += ' pace-running';\n                this.el.innerHTML = '<div class=\"pace-progress\">\\n  <div class=\"pace-progress-inner\"></div>\\n</div>\\n<div class=\"pace-activity\"></div>';\n                if (targetElement.firstChild != null) {\n                    targetElement.insertBefore(this.el, targetElement.firstChild);\n                } else {\n                    targetElement.appendChild(this.el);\n                }\n            }\n            return this.el;\n        };\n\n        Bar.prototype.finish = function() {\n            var el;\n            el = this.getElement();\n            el.className = el.className.replace('pace-active', '');\n            el.className += ' pace-inactive';\n            document.body.className = document.body.className.replace('pace-running', '');\n            return document.body.className += ' pace-done';\n        };\n\n        Bar.prototype.update = function(prog) {\n            this.progress = prog;\n            return this.render();\n        };\n\n        Bar.prototype.destroy = function() {\n            try {\n                this.getElement().parentNode.removeChild(this.getElement());\n            } catch (_error) {\n                NoTargetError = _error;\n            }\n            return this.el = void 0;\n        };\n\n        Bar.prototype.render = function() {\n            var el, key, progressStr, transform, _j, _len1, _ref2;\n            if (document.querySelector(options.target) == null) {\n                return false;\n            }\n            el = this.getElement();\n            transform = \"translate3d(\" + this.progress + \"%, 0, 0)\";\n            _ref2 = ['webkitTransform', 'msTransform', 'transform'];\n            for (_j = 0, _len1 = _ref2.length; _j < _len1; _j++) {\n                key = _ref2[_j];\n                el.children[0].style[key] = transform;\n            }\n            if (!this.lastRenderedProgress || this.lastRenderedProgress | 0 !== this.progress | 0) {\n                el.children[0].setAttribute('data-progress-text', \"\" + (this.progress | 0) + \"%\");\n                if (this.progress >= 100) {\n                    progressStr = '99';\n                } else {\n                    progressStr = this.progress < 10 ? \"0\" : \"\";\n                    progressStr += this.progress | 0;\n                }\n                el.children[0].setAttribute('data-progress', \"\" + progressStr);\n            }\n            return this.lastRenderedProgress = this.progress;\n        };\n\n        Bar.prototype.done = function() {\n            return this.progress >= 100;\n        };\n\n        return Bar;\n\n    })();\n\n    Events = (function() {\n        function Events() {\n            this.bindings = {};\n        }\n\n        Events.prototype.trigger = function(name, val) {\n            var binding, _j, _len1, _ref2, _results;\n            if (this.bindings[name] != null) {\n                _ref2 = this.bindings[name];\n                _results = [];\n                for (_j = 0, _len1 = _ref2.length; _j < _len1; _j++) {\n                    binding = _ref2[_j];\n                    _results.push(binding.call(this, val));\n                }\n                return _results;\n            }\n        };\n\n        Events.prototype.on = function(name, fn) {\n            var _base;\n            if ((_base = this.bindings)[name] == null) {\n                _base[name] = [];\n            }\n            return this.bindings[name].push(fn);\n        };\n\n        return Events;\n\n    })();\n\n    _XMLHttpRequest = window.XMLHttpRequest;\n\n    _XDomainRequest = window.XDomainRequest;\n\n    _WebSocket = window.WebSocket;\n\n    extendNative = function(to, from) {\n        var e, key, _results;\n        _results = [];\n        for (key in from.prototype) {\n            try {\n                if ((to[key] == null) && typeof from[key] !== 'function') {\n                    if (typeof Object.defineProperty === 'function') {\n                        _results.push(Object.defineProperty(to, key, {\n                            get: function() {\n                                return from.prototype[key];\n                            },\n                            configurable: true,\n                            enumerable: true\n                        }));\n                    } else {\n                        _results.push(to[key] = from.prototype[key]);\n                    }\n                } else {\n                    _results.push(void 0);\n                }\n            } catch (_error) {\n                e = _error;\n            }\n        }\n        return _results;\n    };\n\n    ignoreStack = [];\n\n    Pace.ignore = function() {\n        var args, fn, ret;\n        fn = arguments[0], args = 2 <= arguments.length ? __slice.call(arguments, 1) : [];\n        ignoreStack.unshift('ignore');\n        ret = fn.apply(null, args);\n        ignoreStack.shift();\n        return ret;\n    };\n\n    Pace.track = function() {\n        var args, fn, ret;\n        fn = arguments[0], args = 2 <= arguments.length ? __slice.call(arguments, 1) : [];\n        ignoreStack.unshift('track');\n        ret = fn.apply(null, args);\n        ignoreStack.shift();\n        return ret;\n    };\n\n    shouldTrack = function(method) {\n        var _ref2;\n        if (method == null) {\n            method = 'GET';\n        }\n        if (ignoreStack[0] === 'track') {\n            return 'force';\n        }\n        if (!ignoreStack.length && options.ajax) {\n            if (method === 'socket' && options.ajax.trackWebSockets) {\n                return true;\n            } else if (_ref2 = method.toUpperCase(), __indexOf.call(options.ajax.trackMethods, _ref2) >= 0) {\n                return true;\n            }\n        }\n        return false;\n    };\n\n    RequestIntercept = (function(_super) {\n        __extends(RequestIntercept, _super);\n\n        function RequestIntercept() {\n            var monitorXHR,\n                _this = this;\n            RequestIntercept.__super__.constructor.apply(this, arguments);\n            monitorXHR = function(req) {\n                var _open;\n                _open = req.open;\n                return req.open = function(type, url, async) {\n                    if (shouldTrack(type)) {\n                        _this.trigger('request', {\n                            type: type,\n                            url: url,\n                            request: req\n                        });\n                    }\n                    return _open.apply(req, arguments);\n                };\n            };\n            window.XMLHttpRequest = function(flags) {\n                var req;\n                req = new _XMLHttpRequest(flags);\n                monitorXHR(req);\n                return req;\n            };\n            try {\n                extendNative(window.XMLHttpRequest, _XMLHttpRequest);\n            } catch (_error) {}\n            if (_XDomainRequest != null) {\n                window.XDomainRequest = function() {\n                    var req;\n                    req = new _XDomainRequest;\n                    monitorXHR(req);\n                    return req;\n                };\n                try {\n                    extendNative(window.XDomainRequest, _XDomainRequest);\n                } catch (_error) {}\n            }\n            if ((_WebSocket != null) && options.ajax.trackWebSockets) {\n                window.WebSocket = function(url, protocols) {\n                    var req;\n                    if (protocols != null) {\n                        req = new _WebSocket(url, protocols);\n                    } else {\n                        req = new _WebSocket(url);\n                    }\n                    if (shouldTrack('socket')) {\n                        _this.trigger('request', {\n                            type: 'socket',\n                            url: url,\n                            protocols: protocols,\n                            request: req\n                        });\n                    }\n                    return req;\n                };\n                try {\n                    extendNative(window.WebSocket, _WebSocket);\n                } catch (_error) {}\n            }\n        }\n\n        return RequestIntercept;\n\n    })(Events);\n\n    _intercept = null;\n\n    getIntercept = function() {\n        if (_intercept == null) {\n            _intercept = new RequestIntercept;\n        }\n        return _intercept;\n    };\n\n    shouldIgnoreURL = function(url) {\n        var pattern, _j, _len1, _ref2;\n        _ref2 = options.ajax.ignoreURLs;\n        for (_j = 0, _len1 = _ref2.length; _j < _len1; _j++) {\n            pattern = _ref2[_j];\n            if (typeof pattern === 'string') {\n                if (url.indexOf(pattern) !== -1) {\n                    return true;\n                }\n            } else {\n                if (pattern.test(url)) {\n                    return true;\n                }\n            }\n        }\n        return false;\n    };\n\n    getIntercept().on('request', function(_arg) {\n        var after, args, request, type, url;\n        type = _arg.type, request = _arg.request, url = _arg.url;\n        if (shouldIgnoreURL(url)) {\n            return;\n        }\n        if (!Pace.running && (options.restartOnRequestAfter !== false || shouldTrack(type) === 'force')) {\n            args = arguments;\n            after = options.restartOnRequestAfter || 0;\n            if (typeof after === 'boolean') {\n                after = 0;\n            }\n            return setTimeout(function() {\n                var stillActive, _j, _len1, _ref2, _ref3, _results;\n                if (type === 'socket') {\n                    stillActive = request.readyState < 2;\n                } else {\n                    stillActive = (0 < (_ref2 = request.readyState) && _ref2 < 4);\n                }\n                if (stillActive) {\n                    Pace.restart();\n                    _ref3 = Pace.sources;\n                    _results = [];\n                    for (_j = 0, _len1 = _ref3.length; _j < _len1; _j++) {\n                        source = _ref3[_j];\n                        if (source instanceof AjaxMonitor) {\n                            source.watch.apply(source, args);\n                            break;\n                        } else {\n                            _results.push(void 0);\n                        }\n                    }\n                    return _results;\n                }\n            }, after);\n        }\n    });\n\n    AjaxMonitor = (function() {\n        function AjaxMonitor() {\n            var _this = this;\n            this.elements = [];\n            getIntercept().on('request', function() {\n                return _this.watch.apply(_this, arguments);\n            });\n        }\n\n        AjaxMonitor.prototype.watch = function(_arg) {\n            var request, tracker, type, url;\n            type = _arg.type, request = _arg.request, url = _arg.url;\n            if (shouldIgnoreURL(url)) {\n                return;\n            }\n            if (type === 'socket') {\n                tracker = new SocketRequestTracker(request);\n            } else {\n                tracker = new XHRRequestTracker(request);\n            }\n            return this.elements.push(tracker);\n        };\n\n        return AjaxMonitor;\n\n    })();\n\n    XHRRequestTracker = (function() {\n        function XHRRequestTracker(request) {\n            var event, size, _j, _len1, _onreadystatechange, _ref2,\n                _this = this;\n            this.progress = 0;\n            if (window.ProgressEvent != null) {\n                size = null;\n                request.addEventListener('progress', function(evt) {\n                    if (evt.lengthComputable) {\n                        return _this.progress = 100 * evt.loaded / evt.total;\n                    } else {\n                        return _this.progress = _this.progress + (100 - _this.progress) / 2;\n                    }\n                }, false);\n                _ref2 = ['load', 'abort', 'timeout', 'error'];\n                for (_j = 0, _len1 = _ref2.length; _j < _len1; _j++) {\n                    event = _ref2[_j];\n                    request.addEventListener(event, function() {\n                        return _this.progress = 100;\n                    }, false);\n                }\n            } else {\n                _onreadystatechange = request.onreadystatechange;\n                request.onreadystatechange = function() {\n                    var _ref3;\n                    if ((_ref3 = request.readyState) === 0 || _ref3 === 4) {\n                        _this.progress = 100;\n                    } else if (request.readyState === 3) {\n                        _this.progress = 50;\n                    }\n                    return typeof _onreadystatechange === \"function\" ? _onreadystatechange.apply(null, arguments) : void 0;\n                };\n            }\n        }\n\n        return XHRRequestTracker;\n\n    })();\n\n    SocketRequestTracker = (function() {\n        function SocketRequestTracker(request) {\n            var event, _j, _len1, _ref2,\n                _this = this;\n            this.progress = 0;\n            _ref2 = ['error', 'open'];\n            for (_j = 0, _len1 = _ref2.length; _j < _len1; _j++) {\n                event = _ref2[_j];\n                request.addEventListener(event, function() {\n                    return _this.progress = 100;\n                }, false);\n            }\n        }\n\n        return SocketRequestTracker;\n\n    })();\n\n    ElementMonitor = (function() {\n        function ElementMonitor(options) {\n            var selector, _j, _len1, _ref2;\n            if (options == null) {\n                options = {};\n            }\n            this.elements = [];\n            if (options.selectors == null) {\n                options.selectors = [];\n            }\n            _ref2 = options.selectors;\n            for (_j = 0, _len1 = _ref2.length; _j < _len1; _j++) {\n                selector = _ref2[_j];\n                this.elements.push(new ElementTracker(selector));\n            }\n        }\n\n        return ElementMonitor;\n\n    })();\n\n    ElementTracker = (function() {\n        function ElementTracker(selector) {\n            this.selector = selector;\n            this.progress = 0;\n            this.check();\n        }\n\n        ElementTracker.prototype.check = function() {\n            var _this = this;\n            if (document.querySelector(this.selector)) {\n                return this.done();\n            } else {\n                return setTimeout((function() {\n                    return _this.check();\n                }), options.elements.checkInterval);\n            }\n        };\n\n        ElementTracker.prototype.done = function() {\n            return this.progress = 100;\n        };\n\n        return ElementTracker;\n\n    })();\n\n    DocumentMonitor = (function() {\n        DocumentMonitor.prototype.states = {\n            loading: 0,\n            interactive: 50,\n            complete: 100\n        };\n\n        function DocumentMonitor() {\n            var _onreadystatechange, _ref2,\n                _this = this;\n            this.progress = (_ref2 = this.states[document.readyState]) != null ? _ref2 : 100;\n            _onreadystatechange = document.onreadystatechange;\n            document.onreadystatechange = function() {\n                if (_this.states[document.readyState] != null) {\n                    _this.progress = _this.states[document.readyState];\n                }\n                return typeof _onreadystatechange === \"function\" ? _onreadystatechange.apply(null, arguments) : void 0;\n            };\n        }\n\n        return DocumentMonitor;\n\n    })();\n\n    EventLagMonitor = (function() {\n        function EventLagMonitor() {\n            var avg, interval, last, points, samples,\n                _this = this;\n            this.progress = 0;\n            avg = 0;\n            samples = [];\n            points = 0;\n            last = now();\n            interval = setInterval(function() {\n                var diff;\n                diff = now() - last - 50;\n                last = now();\n                samples.push(diff);\n                if (samples.length > options.eventLag.sampleCount) {\n                    samples.shift();\n                }\n                avg = avgAmplitude(samples);\n                if (++points >= options.eventLag.minSamples && avg < options.eventLag.lagThreshold) {\n                    _this.progress = 100;\n                    return clearInterval(interval);\n                } else {\n                    return _this.progress = 100 * (3 / (avg + 3));\n                }\n            }, 50);\n        }\n\n        return EventLagMonitor;\n\n    })();\n\n    Scaler = (function() {\n        function Scaler(source) {\n            this.source = source;\n            this.last = this.sinceLastUpdate = 0;\n            this.rate = options.initialRate;\n            this.catchup = 0;\n            this.progress = this.lastProgress = 0;\n            if (this.source != null) {\n                this.progress = result(this.source, 'progress');\n            }\n        }\n\n        Scaler.prototype.tick = function(frameTime, val) {\n            var scaling;\n            if (val == null) {\n                val = result(this.source, 'progress');\n            }\n            if (val >= 100) {\n                this.done = true;\n            }\n            if (val === this.last) {\n                this.sinceLastUpdate += frameTime;\n            } else {\n                if (this.sinceLastUpdate) {\n                    this.rate = (val - this.last) / this.sinceLastUpdate;\n                }\n                this.catchup = (val - this.progress) / options.catchupTime;\n                this.sinceLastUpdate = 0;\n                this.last = val;\n            }\n            if (val > this.progress) {\n                this.progress += this.catchup * frameTime;\n            }\n            scaling = 1 - Math.pow(this.progress / 100, options.easeFactor);\n            this.progress += scaling * this.rate * frameTime;\n            this.progress = Math.min(this.lastProgress + options.maxProgressPerFrame, this.progress);\n            this.progress = Math.max(0, this.progress);\n            this.progress = Math.min(100, this.progress);\n            this.lastProgress = this.progress;\n            return this.progress;\n        };\n\n        return Scaler;\n\n    })();\n\n    sources = null;\n\n    scalers = null;\n\n    bar = null;\n\n    uniScaler = null;\n\n    animation = null;\n\n    cancelAnimation = null;\n\n    Pace.running = false;\n\n    handlePushState = function() {\n        if (options.restartOnPushState) {\n            return Pace.restart();\n        }\n    };\n\n    if (window.history.pushState != null) {\n        _pushState = window.history.pushState;\n        window.history.pushState = function() {\n            handlePushState();\n            return _pushState.apply(window.history, arguments);\n        };\n    }\n\n    if (window.history.replaceState != null) {\n        _replaceState = window.history.replaceState;\n        window.history.replaceState = function() {\n            handlePushState();\n            return _replaceState.apply(window.history, arguments);\n        };\n    }\n\n    SOURCE_KEYS = {\n        ajax: AjaxMonitor,\n        elements: ElementMonitor,\n        document: DocumentMonitor,\n        eventLag: EventLagMonitor\n    };\n\n    (init = function() {\n        var type, _j, _k, _len1, _len2, _ref2, _ref3, _ref4;\n        Pace.sources = sources = [];\n        _ref2 = ['ajax', 'elements', 'document', 'eventLag'];\n        for (_j = 0, _len1 = _ref2.length; _j < _len1; _j++) {\n            type = _ref2[_j];\n            if (options[type] !== false) {\n                sources.push(new SOURCE_KEYS[type](options[type]));\n            }\n        }\n        _ref4 = (_ref3 = options.extraSources) != null ? _ref3 : [];\n        for (_k = 0, _len2 = _ref4.length; _k < _len2; _k++) {\n            source = _ref4[_k];\n            sources.push(new source(options));\n        }\n        Pace.bar = bar = new Bar;\n        scalers = [];\n        return uniScaler = new Scaler;\n    })();\n\n    Pace.stop = function() {\n        Pace.trigger('stop');\n        Pace.running = false;\n        bar.destroy();\n        cancelAnimation = true;\n        if (animation != null) {\n            if (typeof cancelAnimationFrame === \"function\") {\n                cancelAnimationFrame(animation);\n            }\n            animation = null;\n        }\n        return init();\n    };\n\n    Pace.restart = function() {\n        Pace.trigger('restart');\n        Pace.stop();\n        return Pace.start();\n    };\n\n    Pace.go = function() {\n        var start;\n        Pace.running = true;\n        bar.render();\n        start = now();\n        cancelAnimation = false;\n        return animation = runAnimation(function(frameTime, enqueueNextFrame) {\n            var avg, count, done, element, elements, i, j, remaining, scaler, scalerList, sum, _j, _k, _len1, _len2, _ref2;\n            remaining = 100 - bar.progress;\n            count = sum = 0;\n            done = true;\n            for (i = _j = 0, _len1 = sources.length; _j < _len1; i = ++_j) {\n                source = sources[i];\n                scalerList = scalers[i] != null ? scalers[i] : scalers[i] = [];\n                elements = (_ref2 = source.elements) != null ? _ref2 : [source];\n                for (j = _k = 0, _len2 = elements.length; _k < _len2; j = ++_k) {\n                    element = elements[j];\n                    scaler = scalerList[j] != null ? scalerList[j] : scalerList[j] = new Scaler(element);\n                    done &= scaler.done;\n                    if (scaler.done) {\n                        continue;\n                    }\n                    count++;\n                    sum += scaler.tick(frameTime);\n                }\n            }\n            avg = sum / count;\n            bar.update(uniScaler.tick(frameTime, avg));\n            if (bar.done() || done || cancelAnimation) {\n                bar.update(100);\n                Pace.trigger('done');\n                return setTimeout(function() {\n                    bar.finish();\n                    Pace.running = false;\n                    return Pace.trigger('hide');\n                }, Math.max(options.ghostTime, Math.max(options.minTime - (now() - start), 0)));\n            } else {\n                return enqueueNextFrame();\n            }\n        });\n    };\n\n    Pace.start = function(_options) {\n        extend(options, _options);\n        Pace.running = true;\n        try {\n            bar.render();\n        } catch (_error) {\n            NoTargetError = _error;\n        }\n        if (!document.querySelector('.pace')) {\n            return setTimeout(Pace.start, 50);\n        } else {\n            Pace.trigger('start');\n            return Pace.go();\n        }\n    };\n\n    if (typeof define === 'function' && define.amd) {\n        define(['pace'], function() {\n            return Pace;\n        });\n    } else if (typeof exports === 'object') {\n        module.exports = Pace;\n    } else {\n        if (options.startOnPageLoad) {\n            Pace.start();\n        }\n    }\n\n"
  },
  {
    "path": "src/main/resources/static/plugins/pjax/jquery.pjax.js",
    "content": "/*!\n * Copyright 2012, Chris Wanstrath\n * Released under the MIT License\n * https://github.com/defunkt/jquery-pjax\n */\n\n(function($){\n\n// When called on a container with a selector, fetches the href with\n// ajax into the container or with the data-pjax attribute on the link\n// itself.\n//\n// Tries to make sure the back button and ctrl+click work the way\n// you'd expect.\n//\n// Exported as $.fn.pjax\n//\n// Accepts a jQuery ajax options object that may include these\n// pjax specific options:\n//\n//\n// container - String selector for the element where to place the response body.\n//      push - Whether to pushState the URL. Defaults to true (of course).\n//   replace - Want to use replaceState instead? That's cool.\n//\n// For convenience the second parameter can be either the container or\n// the options object.\n//\n// Returns the jQuery object\nfunction fnPjax(selector, container, options) {\n  options = optionsFor(container, options)\n  return this.on('click.pjax', selector, function(event) {\n    var opts = options\n    if (!opts.container) {\n      opts = $.extend({}, options)\n      opts.container = $(this).attr('data-pjax')\n    }\n    handleClick(event, opts)\n  })\n}\n\n// Public: pjax on click handler\n//\n// Exported as $.pjax.click.\n//\n// event   - \"click\" jQuery.Event\n// options - pjax options\n//\n// Examples\n//\n//   $(document).on('click', 'a', $.pjax.click)\n//   // is the same as\n//   $(document).pjax('a')\n//\n// Returns nothing.\nfunction handleClick(event, container, options) {\n  options = optionsFor(container, options)\n\n  var link = event.currentTarget\n  var $link = $(link)\n\n  if (link.tagName.toUpperCase() !== 'A')\n    throw \"$.fn.pjax or $.pjax.click requires an anchor element\"\n\n  // Middle click, cmd click, and ctrl click should open\n  // links in a new tab as normal.\n  if ( event.which > 1 || event.metaKey || event.ctrlKey || event.shiftKey || event.altKey )\n    return\n\n  // Ignore cross origin links\n  if ( location.protocol !== link.protocol || location.hostname !== link.hostname )\n    return\n\n  // Ignore case when a hash is being tacked on the current URL\n  if ( link.href.indexOf('#') > -1 && stripHash(link) == stripHash(location) )\n    return\n\n  // Ignore event with default prevented\n  if (event.isDefaultPrevented())\n    return\n\n  var defaults = {\n    url: link.href,\n    container: $link.attr('data-pjax'),\n    target: link\n  }\n\n  var opts = $.extend({}, defaults, options)\n  var clickEvent = $.Event('pjax:click')\n  $link.trigger(clickEvent, [opts])\n\n  if (!clickEvent.isDefaultPrevented()) {\n    pjax(opts)\n    event.preventDefault()\n    $link.trigger('pjax:clicked', [opts])\n  }\n}\n\n// Public: pjax on form submit handler\n//\n// Exported as $.pjax.submit\n//\n// event   - \"click\" jQuery.Event\n// options - pjax options\n//\n// Examples\n//\n//  $(document).on('submit', 'form', function(event) {\n//    $.pjax.submit(event, '[data-pjax-container]')\n//  })\n//\n// Returns nothing.\nfunction handleSubmit(event, container, options) {\n  options = optionsFor(container, options)\n\n  var form = event.currentTarget\n  var $form = $(form)\n\n  if (form.tagName.toUpperCase() !== 'FORM')\n    throw \"$.pjax.submit requires a form element\"\n\n  var defaults = {\n    type: ($form.attr('method') || 'GET').toUpperCase(),\n    url: $form.attr('action'),\n    container: $form.attr('data-pjax'),\n    target: form\n  }\n\n  if (defaults.type !== 'GET' && window.FormData !== undefined) {\n    defaults.data = new FormData(form)\n    defaults.processData = false\n    defaults.contentType = false\n  } else {\n    // Can't handle file uploads, exit\n    if ($form.find(':file').length) {\n      return\n    }\n\n    // Fallback to manually serializing the fields\n    defaults.data = $form.serializeArray()\n  }\n\n  pjax($.extend({}, defaults, options))\n\n  event.preventDefault()\n}\n\n// Loads a URL with ajax, puts the response body inside a container,\n// then pushState()'s the loaded URL.\n//\n// Works just like $.ajax in that it accepts a jQuery ajax\n// settings object (with keys like url, type, data, etc).\n//\n// Accepts these extra keys:\n//\n// container - String selector for where to stick the response body.\n//      push - Whether to pushState the URL. Defaults to true (of course).\n//   replace - Want to use replaceState instead? That's cool.\n//\n// Use it just like $.ajax:\n//\n//   var xhr = $.pjax({ url: this.href, container: '#main' })\n//   console.log( xhr.readyState )\n//\n// Returns whatever $.ajax returns.\nfunction pjax(options) {\n  options = $.extend(true, {}, $.ajaxSettings, pjax.defaults, options)\n\n  if ($.isFunction(options.url)) {\n    options.url = options.url()\n  }\n\n  var hash = parseURL(options.url).hash\n\n  var containerType = $.type(options.container)\n  if (containerType !== 'string') {\n    throw \"expected string value for 'container' option; got \" + containerType\n  }\n  var context = options.context = $(options.container)\n  if (!context.length) {\n    throw \"the container selector '\" + options.container + \"' did not match anything\"\n  }\n\n  // We want the browser to maintain two separate internal caches: one\n  // for pjax'd partial page loads and one for normal page loads.\n  // Without adding this secret parameter, some browsers will often\n  // confuse the two.\n  if (!options.data) options.data = {}\n  if ($.isArray(options.data)) {\n    options.data.push({name: '_pjax', value: options.container})\n  } else {\n    options.data._pjax = options.container\n  }\n\n  function fire(type, args, props) {\n    if (!props) props = {}\n    props.relatedTarget = options.target\n    var event = $.Event(type, props)\n    context.trigger(event, args)\n    return !event.isDefaultPrevented()\n  }\n\n  var timeoutTimer\n\n  options.beforeSend = function(xhr, settings) {\n    // No timeout for non-GET requests\n    // Its not safe to request the resource again with a fallback method.\n    if (settings.type !== 'GET') {\n      settings.timeout = 0\n    }\n\n    xhr.setRequestHeader('X-PJAX', 'true')\n    xhr.setRequestHeader('X-PJAX-Container', options.container)\n\n    if (!fire('pjax:beforeSend', [xhr, settings]))\n      return false\n\n    if (settings.timeout > 0) {\n      timeoutTimer = setTimeout(function() {\n        if (fire('pjax:timeout', [xhr, options]))\n          xhr.abort('timeout')\n      }, settings.timeout)\n\n      // Clear timeout setting so jquerys internal timeout isn't invoked\n      settings.timeout = 0\n    }\n\n    var url = parseURL(settings.url)\n    if (hash) url.hash = hash\n    options.requestUrl = stripInternalParams(url)\n  }\n\n  options.complete = function(xhr, textStatus) {\n    if (timeoutTimer)\n      clearTimeout(timeoutTimer)\n\n    fire('pjax:complete', [xhr, textStatus, options])\n\n    fire('pjax:end', [xhr, options])\n  }\n\n  options.error = function(xhr, textStatus, errorThrown) {\n    var container = extractContainer(\"\", xhr, options)\n\n    var allowed = fire('pjax:error', [xhr, textStatus, errorThrown, options])\n    if (options.type == 'GET' && textStatus !== 'abort' && allowed) {\n      locationReplace(container.url)\n    }\n  }\n\n  options.success = function(data, status, xhr) {\n    var previousState = pjax.state\n\n    // If $.pjax.defaults.version is a function, invoke it first.\n    // Otherwise it can be a static string.\n    var currentVersion = typeof $.pjax.defaults.version === 'function' ?\n      $.pjax.defaults.version() :\n      $.pjax.defaults.version\n\n    var latestVersion = xhr.getResponseHeader('X-PJAX-Version')\n\n    var container = extractContainer(data, xhr, options)\n\n    var url = parseURL(container.url)\n    if (hash) {\n      url.hash = hash\n      container.url = url.href\n    }\n\n    // If there is a layout version mismatch, hard load the new url\n    if (currentVersion && latestVersion && currentVersion !== latestVersion) {\n      locationReplace(container.url)\n      return\n    }\n\n    // If the new response is missing a body, hard load the page\n    if (!container.contents) {\n      locationReplace(container.url)\n      return\n    }\n\n    pjax.state = {\n      id: options.id || uniqueId(),\n      url: container.url,\n      title: container.title,\n      container: options.container,\n      fragment: options.fragment,\n      timeout: options.timeout\n    }\n\n    if (options.push || options.replace) {\n      window.history.replaceState(pjax.state, container.title, container.url)\n    }\n\n    // Only blur the focus if the focused element is within the container.\n    var blurFocus = $.contains(context, document.activeElement)\n\n    // Clear out any focused controls before inserting new page contents.\n    if (blurFocus) {\n      try {\n        document.activeElement.blur()\n      } catch (e) { /* ignore */ }\n    }\n\n    if (container.title) document.title = container.title\n\n    fire('pjax:beforeReplace', [container.contents, options], {\n      state: pjax.state,\n      previousState: previousState\n    })\n    context.html(container.contents)\n\n    // FF bug: Won't autofocus fields that are inserted via JS.\n    // This behavior is incorrect. So if theres no current focus, autofocus\n    // the last field.\n    //\n    // http://www.w3.org/html/wg/drafts/html/master/forms.html\n    var autofocusEl = context.find('input[autofocus], textarea[autofocus]').last()[0]\n    if (autofocusEl && document.activeElement !== autofocusEl) {\n      autofocusEl.focus()\n    }\n\n    executeScriptTags(container.scripts)\n\n    var scrollTo = options.scrollTo\n\n    // Ensure browser scrolls to the element referenced by the URL anchor\n    if (hash) {\n      var name = decodeURIComponent(hash.slice(1))\n      var target = document.getElementById(name) || document.getElementsByName(name)[0]\n      if (target) scrollTo = $(target).offset().top\n    }\n\n    if (typeof scrollTo == 'number') $(window).scrollTop(scrollTo)\n\n    fire('pjax:success', [data, status, xhr, options])\n  }\n\n\n  // Initialize pjax.state for the initial page load. Assume we're\n  // using the container and options of the link we're loading for the\n  // back button to the initial page. This ensures good back button\n  // behavior.\n  if (!pjax.state) {\n    pjax.state = {\n      id: uniqueId(),\n      url: window.location.href,\n      title: document.title,\n      container: options.container,\n      fragment: options.fragment,\n      timeout: options.timeout\n    }\n    window.history.replaceState(pjax.state, document.title)\n  }\n\n  // Cancel the current request if we're already pjaxing\n  abortXHR(pjax.xhr)\n\n  pjax.options = options\n  var xhr = pjax.xhr = $.ajax(options)\n\n  if (xhr.readyState > 0) {\n    if (options.push && !options.replace) {\n      // Cache current container element before replacing it\n      cachePush(pjax.state.id, [options.container, cloneContents(context)])\n\n      window.history.pushState(null, \"\", options.requestUrl)\n    }\n\n    fire('pjax:start', [xhr, options])\n    fire('pjax:send', [xhr, options])\n  }\n\n  return pjax.xhr\n}\n\n// Public: Reload current page with pjax.\n//\n// Returns whatever $.pjax returns.\nfunction pjaxReload(container, options) {\n  var defaults = {\n    url: window.location.href,\n    push: false,\n    replace: true,\n    scrollTo: false\n  }\n\n  return pjax($.extend(defaults, optionsFor(container, options)))\n}\n\n// Internal: Hard replace current state with url.\n//\n// Work for around WebKit\n//   https://bugs.webkit.org/show_bug.cgi?id=93506\n//\n// Returns nothing.\nfunction locationReplace(url) {\n  window.history.replaceState(null, \"\", pjax.state.url)\n  window.location.replace(url)\n}\n\n\nvar initialPop = true\nvar initialURL = window.location.href\nvar initialState = window.history.state\n\n// Initialize $.pjax.state if possible\n// Happens when reloading a page and coming forward from a different\n// session history.\nif (initialState && initialState.container) {\n  pjax.state = initialState\n}\n\n// Non-webkit browsers don't fire an initial popstate event\nif ('state' in window.history) {\n  initialPop = false\n}\n\n// popstate handler takes care of the back and forward buttons\n//\n// You probably shouldn't use pjax on pages with other pushState\n// stuff yet.\nfunction onPjaxPopstate(event) {\n\n  // Hitting back or forward should override any pending PJAX request.\n  if (!initialPop) {\n    abortXHR(pjax.xhr)\n  }\n\n  var previousState = pjax.state\n  var state = event.state\n  var direction\n\n  if (state && state.container) {\n    // When coming forward from a separate history session, will get an\n    // initial pop with a state we are already at. Skip reloading the current\n    // page.\n    if (initialPop && initialURL == state.url) return\n\n    if (previousState) {\n      // If popping back to the same state, just skip.\n      // Could be clicking back from hashchange rather than a pushState.\n      if (previousState.id === state.id) return\n\n      // Since state IDs always increase, we can deduce the navigation direction\n      direction = previousState.id < state.id ? 'forward' : 'back'\n    }\n\n    var cache = cacheMapping[state.id] || []\n    var containerSelector = cache[0] || state.container\n    var container = $(containerSelector), contents = cache[1]\n\n    if (container.length) {\n      if (previousState) {\n        // Cache current container before replacement and inform the\n        // cache which direction the history shifted.\n        cachePop(direction, previousState.id, [containerSelector, cloneContents(container)])\n      }\n\n      var popstateEvent = $.Event('pjax:popstate', {\n        state: state,\n        direction: direction\n      })\n      container.trigger(popstateEvent)\n\n      var options = {\n        id: state.id,\n        url: state.url,\n        container: containerSelector,\n        push: false,\n        fragment: state.fragment,\n        timeout: state.timeout,\n        scrollTo: false\n      }\n\n      if (contents) {\n        container.trigger('pjax:start', [null, options])\n\n        pjax.state = state\n        if (state.title) document.title = state.title\n        var beforeReplaceEvent = $.Event('pjax:beforeReplace', {\n          state: state,\n          previousState: previousState\n        })\n        container.trigger(beforeReplaceEvent, [contents, options])\n        container.html(contents)\n\n        container.trigger('pjax:end', [null, options])\n      } else {\n        pjax(options)\n      }\n\n      // Force reflow/relayout before the browser tries to restore the\n      // scroll position.\n      container[0].offsetHeight // eslint-disable-line no-unused-expressions\n    } else {\n      locationReplace(location.href)\n    }\n  }\n  initialPop = false\n}\n\n// Fallback version of main pjax function for browsers that don't\n// support pushState.\n//\n// Returns nothing since it retriggers a hard form submission.\nfunction fallbackPjax(options) {\n  var url = $.isFunction(options.url) ? options.url() : options.url,\n      method = options.type ? options.type.toUpperCase() : 'GET'\n\n  var form = $('<form>', {\n    method: method === 'GET' ? 'GET' : 'POST',\n    action: url,\n    style: 'display:none'\n  })\n\n  if (method !== 'GET' && method !== 'POST') {\n    form.append($('<input>', {\n      type: 'hidden',\n      name: '_method',\n      value: method.toLowerCase()\n    }))\n  }\n\n  var data = options.data\n  if (typeof data === 'string') {\n    $.each(data.split('&'), function(index, value) {\n      var pair = value.split('=')\n      form.append($('<input>', {type: 'hidden', name: pair[0], value: pair[1]}))\n    })\n  } else if ($.isArray(data)) {\n    $.each(data, function(index, value) {\n      form.append($('<input>', {type: 'hidden', name: value.name, value: value.value}))\n    })\n  } else if (typeof data === 'object') {\n    var key\n    for (key in data)\n      form.append($('<input>', {type: 'hidden', name: key, value: data[key]}))\n  }\n\n  $(document.body).append(form)\n  form.submit()\n}\n\n// Internal: Abort an XmlHttpRequest if it hasn't been completed,\n// also removing its event handlers.\nfunction abortXHR(xhr) {\n  if ( xhr && xhr.readyState < 4) {\n    xhr.onreadystatechange = $.noop\n    xhr.abort()\n  }\n}\n\n// Internal: Generate unique id for state object.\n//\n// Use a timestamp instead of a counter since ids should still be\n// unique across page loads.\n//\n// Returns Number.\nfunction uniqueId() {\n  return (new Date).getTime()\n}\n\nfunction cloneContents(container) {\n  var cloned = container.clone()\n  // Unmark script tags as already being eval'd so they can get executed again\n  // when restored from cache. HAXX: Uses jQuery internal method.\n  cloned.find('script').each(function(){\n    if (!this.src) $._data(this, 'globalEval', false)\n  })\n  return cloned.contents()\n}\n\n// Internal: Strip internal query params from parsed URL.\n//\n// Returns sanitized url.href String.\nfunction stripInternalParams(url) {\n  url.search = url.search.replace(/([?&])(_pjax|_)=[^&]*/g, '').replace(/^&/, '')\n  return url.href.replace(/\\?($|#)/, '$1')\n}\n\n// Internal: Parse URL components and returns a Locationish object.\n//\n// url - String URL\n//\n// Returns HTMLAnchorElement that acts like Location.\nfunction parseURL(url) {\n  var a = document.createElement('a')\n  a.href = url\n  return a\n}\n\n// Internal: Return the `href` component of given URL object with the hash\n// portion removed.\n//\n// location - Location or HTMLAnchorElement\n//\n// Returns String\nfunction stripHash(location) {\n  return location.href.replace(/#.*/, '')\n}\n\n// Internal: Build options Object for arguments.\n//\n// For convenience the first parameter can be either the container or\n// the options object.\n//\n// Examples\n//\n//   optionsFor('#container')\n//   // => {container: '#container'}\n//\n//   optionsFor('#container', {push: true})\n//   // => {container: '#container', push: true}\n//\n//   optionsFor({container: '#container', push: true})\n//   // => {container: '#container', push: true}\n//\n// Returns options Object.\nfunction optionsFor(container, options) {\n  if (container && options) {\n    options = $.extend({}, options)\n    options.container = container\n    return options\n  } else if ($.isPlainObject(container)) {\n    return container\n  } else {\n    return {container: container}\n  }\n}\n\n// Internal: Filter and find all elements matching the selector.\n//\n// Where $.fn.find only matches descendants, findAll will test all the\n// top level elements in the jQuery object as well.\n//\n// elems    - jQuery object of Elements\n// selector - String selector to match\n//\n// Returns a jQuery object.\nfunction findAll(elems, selector) {\n  return elems.filter(selector).add(elems.find(selector))\n}\n\nfunction parseHTML(html) {\n  return $.parseHTML(html, document, true)\n}\n\n// Internal: Extracts container and metadata from response.\n//\n// 1. Extracts X-PJAX-URL header if set\n// 2. Extracts inline <title> tags\n// 3. Builds response Element and extracts fragment if set\n//\n// data    - String response data\n// xhr     - XHR response\n// options - pjax options Object\n//\n// Returns an Object with url, title, and contents keys.\nfunction extractContainer(data, xhr, options) {\n  var obj = {}, fullDocument = /<html/i.test(data)\n\n  // Prefer X-PJAX-URL header if it was set, otherwise fallback to\n  // using the original requested url.\n  var serverUrl = xhr.getResponseHeader('X-PJAX-URL')\n  obj.url = serverUrl ? stripInternalParams(parseURL(serverUrl)) : options.requestUrl\n\n  var $head, $body\n  // Attempt to parse response html into elements\n  if (fullDocument) {\n    $body = $(parseHTML(data.match(/<body[^>]*>([\\s\\S.]*)<\\/body>/i)[0]))\n    var head = data.match(/<head[^>]*>([\\s\\S.]*)<\\/head>/i)\n    $head = head != null ? $(parseHTML(head[0])) : $body\n  } else {\n    $head = $body = $(parseHTML(data))\n  }\n\n  // If response data is empty, return fast\n  if ($body.length === 0)\n    return obj\n\n  // If there's a <title> tag in the header, use it as\n  // the page's title.\n  obj.title = findAll($head, 'title').last().text()\n\n  if (options.fragment) {\n    var $fragment = $body\n    // If they specified a fragment, look for it in the response\n    // and pull it out.\n    if (options.fragment !== 'body') {\n      $fragment = findAll($fragment, options.fragment).first()\n    }\n\n    if ($fragment.length) {\n      obj.contents = options.fragment === 'body' ? $fragment : $fragment.contents()\n\n      // If there's no title, look for data-title and title attributes\n      // on the fragment\n      if (!obj.title)\n        obj.title = $fragment.attr('title') || $fragment.data('title')\n    }\n\n  } else if (!fullDocument) {\n    obj.contents = $body\n  }\n\n  // Clean up any <title> tags\n  if (obj.contents) {\n    // Remove any parent title elements\n    obj.contents = obj.contents.not(function() { return $(this).is('title') })\n\n    // Then scrub any titles from their descendants\n    obj.contents.find('title').remove()\n\n    // Gather all script[src] elements\n    obj.scripts = findAll(obj.contents, 'script[src]').remove()\n    obj.contents = obj.contents.not(obj.scripts)\n  }\n\n  // Trim any whitespace off the title\n  if (obj.title) obj.title = $.trim(obj.title)\n\n  return obj\n}\n\n// Load an execute scripts using standard script request.\n//\n// Avoids jQuery's traditional $.getScript which does a XHR request and\n// globalEval.\n//\n// scripts - jQuery object of script Elements\n//\n// Returns nothing.\nfunction executeScriptTags(scripts) {\n  if (!scripts) return\n\n  var existingScripts = $('script[src]')\n\n  scripts.each(function() {\n    var src = this.src\n    var matchedScripts = existingScripts.filter(function() {\n      return this.src === src\n    })\n    if (matchedScripts.length) return\n\n    var script = document.createElement('script')\n    var type = $(this).attr('type')\n    if (type) script.type = type\n    script.src = $(this).attr('src')\n    document.head.appendChild(script)\n  })\n}\n\n// Internal: History DOM caching class.\nvar cacheMapping      = {}\nvar cacheForwardStack = []\nvar cacheBackStack    = []\n\n// Push previous state id and container contents into the history\n// cache. Should be called in conjunction with `pushState` to save the\n// previous container contents.\n//\n// id    - State ID Number\n// value - DOM Element to cache\n//\n// Returns nothing.\nfunction cachePush(id, value) {\n  cacheMapping[id] = value\n  cacheBackStack.push(id)\n\n  // Remove all entries in forward history stack after pushing a new page.\n  trimCacheStack(cacheForwardStack, 0)\n\n  // Trim back history stack to max cache length.\n  trimCacheStack(cacheBackStack, pjax.defaults.maxCacheLength)\n}\n\n// Shifts cache from directional history cache. Should be\n// called on `popstate` with the previous state id and container\n// contents.\n//\n// direction - \"forward\" or \"back\" String\n// id        - State ID Number\n// value     - DOM Element to cache\n//\n// Returns nothing.\nfunction cachePop(direction, id, value) {\n  var pushStack, popStack\n  cacheMapping[id] = value\n\n  if (direction === 'forward') {\n    pushStack = cacheBackStack\n    popStack  = cacheForwardStack\n  } else {\n    pushStack = cacheForwardStack\n    popStack  = cacheBackStack\n  }\n\n  pushStack.push(id)\n  id = popStack.pop()\n  if (id) delete cacheMapping[id]\n\n  // Trim whichever stack we just pushed to to max cache length.\n  trimCacheStack(pushStack, pjax.defaults.maxCacheLength)\n}\n\n// Trim a cache stack (either cacheBackStack or cacheForwardStack) to be no\n// longer than the specified length, deleting cached DOM elements as necessary.\n//\n// stack  - Array of state IDs\n// length - Maximum length to trim to\n//\n// Returns nothing.\nfunction trimCacheStack(stack, length) {\n  while (stack.length > length)\n    delete cacheMapping[stack.shift()]\n}\n\n// Public: Find version identifier for the initial page load.\n//\n// Returns String version or undefined.\nfunction findVersion() {\n  return $('meta').filter(function() {\n    var name = $(this).attr('http-equiv')\n    return name && name.toUpperCase() === 'X-PJAX-VERSION'\n  }).attr('content')\n}\n\n// Install pjax functions on $.pjax to enable pushState behavior.\n//\n// Does nothing if already enabled.\n//\n// Examples\n//\n//     $.pjax.enable()\n//\n// Returns nothing.\nfunction enable() {\n  $.fn.pjax = fnPjax\n  $.pjax = pjax\n  $.pjax.enable = $.noop\n  $.pjax.disable = disable\n  $.pjax.click = handleClick\n  $.pjax.submit = handleSubmit\n  $.pjax.reload = pjaxReload\n  $.pjax.defaults = {\n    timeout: 650,\n    push: true,\n    replace: false,\n    type: 'GET',\n    dataType: 'html',\n    scrollTo: 0,\n    maxCacheLength: 20,\n    version: findVersion\n  }\n  $(window).on('popstate.pjax', onPjaxPopstate)\n}\n\n// Disable pushState behavior.\n//\n// This is the case when a browser doesn't support pushState. It is\n// sometimes useful to disable pushState for debugging on a modern\n// browser.\n//\n// Examples\n//\n//     $.pjax.disable()\n//\n// Returns nothing.\nfunction disable() {\n  $.fn.pjax = function() { return this }\n  $.pjax = fallbackPjax\n  $.pjax.enable = enable\n  $.pjax.disable = $.noop\n  $.pjax.click = $.noop\n  $.pjax.submit = $.noop\n  $.pjax.reload = function() { window.location.reload() }\n\n  $(window).off('popstate.pjax', onPjaxPopstate)\n}\n\n\n// Add the state property to jQuery's event object so we can use it in\n// $(window).bind('popstate')\nif ($.event.props && $.inArray('state', $.event.props) < 0) {\n  $.event.props.push('state')\n} else if (!('state' in $.Event.prototype)) {\n  $.event.addProp('state')\n}\n\n// Is pjax supported by this browser?\n$.support.pjax =\n  window.history && window.history.pushState && window.history.replaceState &&\n  // pushState isn't reliable on iOS until 5.\n  !navigator.userAgent.match(/((iPod|iPhone|iPad).+\\bOS\\s+[1-4]\\D|WebApps\\/.+CFNetwork)/)\n\nif ($.support.pjax) {\n  enable()\n} else {\n  disable()\n}\n\n})(jQuery)\n"
  },
  {
    "path": "src/main/resources/static/plugins/pretty-checkbox/pretty-checkbox.css",
    "content": "/**\n * pretty-checkbox.css\n *\n * A pure CSS library to beautify checkbox and radio buttons\n *\n * Source: https://github.com/lokesh-coder/pretty-checkbox\n * Demo: https://lokesh-coder.github.io/pretty-checkbox\n *\n * Copyright (c) 2017 Lokesh rajendran\n */\n\n.pretty * {\n  box-sizing: border-box;\n}\n\n.pretty input:not([type='checkbox']):not([type='radio']) {\n  display: none;\n}\n\n.pretty {\n  position: relative;\n  display: inline-block;\n  margin-right: 1em;\n  white-space: nowrap;\n  line-height: 1;\n}\n\n.pretty input {\n  position: absolute;\n  left: 0;\n  top: 0;\n  min-width: 1em;\n  width: 100%;\n  height: 100%;\n  z-index: 2;\n  opacity: 0;\n  margin: 0;\n  padding: 0;\n  cursor: pointer;\n}\n\n.pretty .state label {\n  position: initial;\n  display: inline-block;\n  font-weight: normal;\n  margin: 0;\n  text-indent: 1.5em;\n  min-width: calc(1em + 2px);\n}\n\n.pretty .state label:before,\n.pretty .state label:after {\n  content: '';\n  width: calc(1em + 2px);\n  height: calc(1em + 2px);\n  display: block;\n  box-sizing: border-box;\n  border-radius: 0;\n  border: 1px solid transparent;\n  z-index: 0;\n  position: absolute;\n  left: 0;\n  top: calc((0% - (100% - 1em)) - 8%);\n  background-color: transparent;\n}\n\n.pretty .state label:before {\n  border-color: #bdc3c7;\n}\n\n.pretty .state.p-is-hover,\n.pretty .state.p-is-indeterminate {\n  display: none;\n}\n\n@-webkit-keyframes zoom {\n  0% {\n    opacity: 0;\n    -webkit-transform: scale(0);\n    transform: scale(0);\n  }\n}\n\n@keyframes zoom {\n  0% {\n    opacity: 0;\n    -webkit-transform: scale(0);\n    transform: scale(0);\n  }\n}\n\n@-webkit-keyframes tada {\n  0% {\n    -webkit-animation-timing-function: ease-in;\n    animation-timing-function: ease-in;\n    opacity: 0;\n    -webkit-transform: scale(7);\n    transform: scale(7);\n  }\n  38% {\n    -webkit-animation-timing-function: ease-out;\n    animation-timing-function: ease-out;\n    opacity: 1;\n    -webkit-transform: scale(1);\n    transform: scale(1);\n  }\n  55% {\n    -webkit-animation-timing-function: ease-in;\n    animation-timing-function: ease-in;\n    -webkit-transform: scale(1.5);\n    transform: scale(1.5);\n  }\n  72% {\n    -webkit-animation-timing-function: ease-out;\n    animation-timing-function: ease-out;\n    -webkit-transform: scale(1);\n    transform: scale(1);\n  }\n  81% {\n    -webkit-animation-timing-function: ease-in;\n    animation-timing-function: ease-in;\n    -webkit-transform: scale(1.24);\n    transform: scale(1.24);\n  }\n  89% {\n    -webkit-animation-timing-function: ease-out;\n    animation-timing-function: ease-out;\n    -webkit-transform: scale(1);\n    transform: scale(1);\n  }\n  95% {\n    -webkit-animation-timing-function: ease-in;\n    animation-timing-function: ease-in;\n    -webkit-transform: scale(1.04);\n    transform: scale(1.04);\n  }\n  100% {\n    -webkit-animation-timing-function: ease-out;\n    animation-timing-function: ease-out;\n    -webkit-transform: scale(1);\n    transform: scale(1);\n  }\n}\n\n@keyframes tada {\n  0% {\n    -webkit-animation-timing-function: ease-in;\n    animation-timing-function: ease-in;\n    opacity: 0;\n    -webkit-transform: scale(7);\n    transform: scale(7);\n  }\n  38% {\n    -webkit-animation-timing-function: ease-out;\n    animation-timing-function: ease-out;\n    opacity: 1;\n    -webkit-transform: scale(1);\n    transform: scale(1);\n  }\n  55% {\n    -webkit-animation-timing-function: ease-in;\n    animation-timing-function: ease-in;\n    -webkit-transform: scale(1.5);\n    transform: scale(1.5);\n  }\n  72% {\n    -webkit-animation-timing-function: ease-out;\n    animation-timing-function: ease-out;\n    -webkit-transform: scale(1);\n    transform: scale(1);\n  }\n  81% {\n    -webkit-animation-timing-function: ease-in;\n    animation-timing-function: ease-in;\n    -webkit-transform: scale(1.24);\n    transform: scale(1.24);\n  }\n  89% {\n    -webkit-animation-timing-function: ease-out;\n    animation-timing-function: ease-out;\n    -webkit-transform: scale(1);\n    transform: scale(1);\n  }\n  95% {\n    -webkit-animation-timing-function: ease-in;\n    animation-timing-function: ease-in;\n    -webkit-transform: scale(1.04);\n    transform: scale(1.04);\n  }\n  100% {\n    -webkit-animation-timing-function: ease-out;\n    animation-timing-function: ease-out;\n    -webkit-transform: scale(1);\n    transform: scale(1);\n  }\n}\n\n@-webkit-keyframes jelly {\n  0% {\n    -webkit-transform: scale3d(1, 1, 1);\n    transform: scale3d(1, 1, 1);\n  }\n  30% {\n    -webkit-transform: scale3d(0.75, 1.25, 1);\n    transform: scale3d(0.75, 1.25, 1);\n  }\n  40% {\n    -webkit-transform: scale3d(1.25, 0.75, 1);\n    transform: scale3d(1.25, 0.75, 1);\n  }\n  50% {\n    -webkit-transform: scale3d(0.85, 1.15, 1);\n    transform: scale3d(0.85, 1.15, 1);\n  }\n  65% {\n    -webkit-transform: scale3d(1.05, 0.95, 1);\n    transform: scale3d(1.05, 0.95, 1);\n  }\n  75% {\n    -webkit-transform: scale3d(0.95, 1.05, 1);\n    transform: scale3d(0.95, 1.05, 1);\n  }\n  100% {\n    -webkit-transform: scale3d(1, 1, 1);\n    transform: scale3d(1, 1, 1);\n  }\n}\n\n@keyframes jelly {\n  0% {\n    -webkit-transform: scale3d(1, 1, 1);\n    transform: scale3d(1, 1, 1);\n  }\n  30% {\n    -webkit-transform: scale3d(0.75, 1.25, 1);\n    transform: scale3d(0.75, 1.25, 1);\n  }\n  40% {\n    -webkit-transform: scale3d(1.25, 0.75, 1);\n    transform: scale3d(1.25, 0.75, 1);\n  }\n  50% {\n    -webkit-transform: scale3d(0.85, 1.15, 1);\n    transform: scale3d(0.85, 1.15, 1);\n  }\n  65% {\n    -webkit-transform: scale3d(1.05, 0.95, 1);\n    transform: scale3d(1.05, 0.95, 1);\n  }\n  75% {\n    -webkit-transform: scale3d(0.95, 1.05, 1);\n    transform: scale3d(0.95, 1.05, 1);\n  }\n  100% {\n    -webkit-transform: scale3d(1, 1, 1);\n    transform: scale3d(1, 1, 1);\n  }\n}\n\n@-webkit-keyframes rotate {\n  0% {\n    opacity: 0;\n    -webkit-transform: translateZ(-200px) rotate(-45deg);\n    transform: translateZ(-200px) rotate(-45deg);\n  }\n  100% {\n    opacity: 1;\n    -webkit-transform: translateZ(0) rotate(0);\n    transform: translateZ(0) rotate(0);\n  }\n}\n\n@keyframes rotate {\n  0% {\n    opacity: 0;\n    -webkit-transform: translateZ(-200px) rotate(-45deg);\n    transform: translateZ(-200px) rotate(-45deg);\n  }\n  100% {\n    opacity: 1;\n    -webkit-transform: translateZ(0) rotate(0);\n    transform: translateZ(0) rotate(0);\n  }\n}\n\n@-webkit-keyframes pulse {\n  0% {\n    box-shadow: 0px 0px 0px 0px #bdc3c7;\n  }\n  100% {\n    box-shadow: 0px 0px 0px 1.5em rgba(189, 195, 199, 0);\n  }\n}\n\n@keyframes pulse {\n  0% {\n    box-shadow: 0px 0px 0px 0px #bdc3c7;\n  }\n  100% {\n    box-shadow: 0px 0px 0px 1.5em rgba(189, 195, 199, 0);\n  }\n}\n\n.pretty.p-default.p-fill .state label:after {\n  -webkit-transform: scale(1);\n  -ms-transform: scale(1);\n  transform: scale(1);\n}\n\n.pretty.p-default .state label:after {\n  -webkit-transform: scale(0.6);\n  -ms-transform: scale(0.6);\n  transform: scale(0.6);\n}\n\n.pretty.p-default input:checked ~ .state label:after {\n  background-color: #bdc3c7 !important;\n}\n\n.pretty.p-default.p-thick .state label:before,\n.pretty.p-default.p-thick .state label:after {\n  border-width: calc(1em / 7);\n}\n\n.pretty.p-default.p-thick .state label:after {\n  -webkit-transform: scale(0.4) !important;\n  -ms-transform: scale(0.4) !important;\n  transform: scale(0.4) !important;\n}\n\n.pretty.p-icon .state .icon {\n  position: absolute;\n  font-size: 1em;\n  width: calc(1em + 2px);\n  height: calc(1em + 2px);\n  left: 0;\n  z-index: 1;\n  text-align: center;\n  line-height: normal;\n  top: calc((0% - (100% - 1em)) - 8%);\n  border: 1px solid transparent;\n  opacity: 0;\n}\n\n.pretty.p-icon .state .icon:before {\n  margin: 0;\n  width: 100%;\n  height: 100%;\n  text-align: center;\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-flex: 1;\n  -ms-flex: 1;\n  flex: 1;\n  -webkit-box-pack: center;\n  -ms-flex-pack: center;\n  justify-content: center;\n  -webkit-box-align: center;\n  -ms-flex-align: center;\n  align-items: center;\n  line-height: 1;\n}\n\n.pretty.p-icon input:checked ~ .state .icon {\n  opacity: 1;\n}\n\n.pretty.p-icon input:checked ~ .state label:before {\n  border-color: #5a656b;\n}\n\n.pretty.p-svg .state .svg {\n  position: absolute;\n  font-size: 1em;\n  width: calc(1em + 2px);\n  height: calc(1em + 2px);\n  left: 0;\n  z-index: 1;\n  text-align: center;\n  line-height: normal;\n  top: calc((0% - (100% - 1em)) - 8%);\n  border: 1px solid transparent;\n  opacity: 0;\n}\n\n.pretty.p-svg .state svg {\n  margin: 0;\n  width: 100%;\n  height: 100%;\n  text-align: center;\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-flex: 1;\n  -ms-flex: 1;\n  flex: 1;\n  -webkit-box-pack: center;\n  -ms-flex-pack: center;\n  justify-content: center;\n  -webkit-box-align: center;\n  -ms-flex-align: center;\n  align-items: center;\n  line-height: 1;\n}\n\n.pretty.p-svg input:checked ~ .state .svg {\n  opacity: 1;\n}\n\n.pretty.p-image .state img {\n  opacity: 0;\n  position: absolute;\n  width: calc(1em + 2px);\n  height: calc(1em + 2px);\n  top: 0;\n  top: calc((0% - (100% - 1em)) - 8%);\n  left: 0;\n  z-index: 0;\n  text-align: center;\n  line-height: normal;\n  -webkit-transform: scale(0.8);\n  -ms-transform: scale(0.8);\n  transform: scale(0.8);\n}\n\n.pretty.p-image input:checked ~ .state img {\n  opacity: 1;\n}\n\n.pretty.p-switch input {\n  min-width: 2em;\n}\n\n.pretty.p-switch .state {\n  position: relative;\n}\n\n.pretty.p-switch .state:before {\n  content: '';\n  border: 1px solid #bdc3c7;\n  border-radius: 60px;\n  width: 2em;\n  box-sizing: unset;\n  height: calc(1em + 2px);\n  position: absolute;\n  top: 0;\n  top: calc((0% - (100% - 1em)) - 16%);\n  z-index: 0;\n  transition: all 0.5s ease;\n}\n\n.pretty.p-switch .state label {\n  text-indent: 2.5em;\n}\n\n.pretty.p-switch .state label:before,\n.pretty.p-switch .state label:after {\n  transition: all 0.5s ease;\n  border-radius: 100%;\n  left: 0;\n  border-color: transparent;\n  -webkit-transform: scale(0.8);\n  -ms-transform: scale(0.8);\n  transform: scale(0.8);\n}\n\n.pretty.p-switch .state label:after {\n  background-color: #bdc3c7 !important;\n}\n\n.pretty.p-switch input:checked ~ .state:before {\n  border-color: #5a656b;\n}\n\n.pretty.p-switch input:checked ~ .state label:before {\n  opacity: 0;\n}\n\n.pretty.p-switch input:checked ~ .state label:after {\n  background-color: #5a656b !important;\n  left: 1em;\n}\n\n.pretty.p-switch.p-fill input:checked ~ .state:before {\n  border-color: #5a656b;\n  background-color: #5a656b !important;\n}\n\n.pretty.p-switch.p-fill input:checked ~ .state label:before {\n  opacity: 0;\n}\n\n.pretty.p-switch.p-fill input:checked ~ .state label:after {\n  background-color: #fff !important;\n  left: 1em;\n}\n\n.pretty.p-switch.p-slim .state:before {\n  height: 0.1em;\n  background: #bdc3c7 !important;\n  top: calc(50% - 0.1em);\n}\n\n.pretty.p-switch.p-slim input:checked ~ .state:before {\n  border-color: #5a656b;\n  background-color: #5a656b !important;\n}\n\n.pretty.p-has-hover input:hover ~ .state:not(.p-is-hover) {\n  display: none;\n}\n\n.pretty.p-has-hover input:hover ~ .state.p-is-hover {\n  display: block;\n}\n\n.pretty.p-has-hover input:hover ~ .state.p-is-hover .icon {\n  display: block;\n}\n\n.pretty.p-has-focus input:focus ~ .state label:before {\n  box-shadow: 0px 0px 3px 0px #bdc3c7;\n}\n\n.pretty.p-has-indeterminate input[type='checkbox']:indeterminate ~ .state:not(.p-is-indeterminate) {\n  display: none;\n}\n\n.pretty.p-has-indeterminate input[type='checkbox']:indeterminate ~ .state.p-is-indeterminate {\n  display: block;\n}\n\n.pretty.p-has-indeterminate input[type='checkbox']:indeterminate ~ .state.p-is-indeterminate .icon {\n  display: block;\n  opacity: 1;\n}\n\n.pretty.p-toggle .state.p-on {\n  opacity: 0;\n  display: none;\n}\n\n.pretty.p-toggle .state.p-off,\n.pretty.p-toggle .state .icon,\n.pretty.p-toggle .state .svg,\n.pretty.p-toggle .state img {\n  opacity: 1;\n  display: inherit;\n}\n\n.pretty.p-toggle .state.p-off .icon {\n  color: #bdc3c7;\n}\n\n.pretty.p-toggle input:checked ~ .state.p-on {\n  opacity: 1;\n  display: inherit;\n}\n\n.pretty.p-toggle input:checked ~ .state.p-off {\n  opacity: 0;\n  display: none;\n}\n\n.pretty.p-plain input:checked ~ .state label:before,\n.pretty.p-plain.p-toggle .state label:before {\n  content: none;\n}\n\n.pretty.p-plain.p-plain .icon {\n  -webkit-transform: scale(1.1);\n  -ms-transform: scale(1.1);\n  transform: scale(1.1);\n}\n\n.pretty.p-round .state label:before,\n.pretty.p-round .state label:after {\n  border-radius: 100%;\n}\n\n.pretty.p-round.p-icon .state .icon {\n  border-radius: 100%;\n  overflow: hidden;\n}\n\n.pretty.p-round.p-icon .state .icon:before {\n  -webkit-transform: scale(0.8);\n  -ms-transform: scale(0.8);\n  transform: scale(0.8);\n}\n\n.pretty.p-curve .state label:before,\n.pretty.p-curve .state label:after {\n  border-radius: 20%;\n}\n\n.pretty.p-smooth label:before,\n.pretty.p-smooth label:after,\n.pretty.p-smooth .icon,\n.pretty.p-smooth .svg {\n  transition: all 0.5s ease;\n}\n\n.pretty.p-smooth input:checked + .state label:after {\n  transition: all 0.3s ease;\n}\n\n.pretty.p-smooth input:checked + .state .icon,\n.pretty.p-smooth input:checked + .state .svg,\n.pretty.p-smooth input:checked + .state img {\n  -webkit-animation: zoom 0.2s ease;\n  animation: zoom 0.2s ease;\n}\n\n.pretty.p-smooth.p-default input:checked + .state label:after {\n  -webkit-animation: zoom 0.2s ease;\n  animation: zoom 0.2s ease;\n}\n\n.pretty.p-smooth.p-plain input:checked + .state label:before {\n  content: '';\n  -webkit-transform: scale(0);\n  -ms-transform: scale(0);\n  transform: scale(0);\n  transition: all 0.5s ease;\n}\n\n.pretty.p-tada:not(.p-default) input:checked + .state .icon,\n.pretty.p-tada:not(.p-default) input:checked + .state .svg,\n.pretty.p-tada:not(.p-default) input:checked + .state img,\n.pretty.p-tada:not(.p-default) input:checked + .state label:before,\n.pretty.p-tada:not(.p-default) input:checked + .state label:after {\n  -webkit-animation: tada 0.7s cubic-bezier(0.25, 0.46, 0.45, 0.94) 1 alternate;\n  animation: tada 0.7s cubic-bezier(0.25, 0.46, 0.45, 0.94) 1 alternate;\n  opacity: 1;\n}\n\n.pretty.p-jelly:not(.p-default) input:checked + .state .icon,\n.pretty.p-jelly:not(.p-default) input:checked + .state .svg,\n.pretty.p-jelly:not(.p-default) input:checked + .state img,\n.pretty.p-jelly:not(.p-default) input:checked + .state label:before,\n.pretty.p-jelly:not(.p-default) input:checked + .state label:after {\n  -webkit-animation: jelly 0.7s cubic-bezier(0.25, 0.46, 0.45, 0.94);\n  animation: jelly 0.7s cubic-bezier(0.25, 0.46, 0.45, 0.94);\n  opacity: 1;\n}\n\n.pretty.p-jelly:not(.p-default) input:checked + .state label:before {\n  border-color: transparent;\n}\n\n.pretty.p-rotate:not(.p-default) input:checked ~ .state .icon,\n.pretty.p-rotate:not(.p-default) input:checked ~ .state .svg,\n.pretty.p-rotate:not(.p-default) input:checked ~ .state img,\n.pretty.p-rotate:not(.p-default) input:checked ~ .state label:before,\n.pretty.p-rotate:not(.p-default) input:checked ~ .state label:after {\n  -webkit-animation: rotate 0.7s cubic-bezier(0.25, 0.46, 0.45, 0.94);\n  animation: rotate 0.7s cubic-bezier(0.25, 0.46, 0.45, 0.94);\n  opacity: 1;\n}\n\n.pretty.p-rotate:not(.p-default) input:checked ~ .state label:before {\n  border-color: transparent;\n}\n\n.pretty.p-pulse:not(.p-switch) input:checked ~ .state label:before {\n  -webkit-animation: pulse 1s;\n  animation: pulse 1s;\n}\n\n.pretty input[disabled] {\n  cursor: not-allowed;\n  display: none;\n}\n\n.pretty input[disabled] ~ * {\n  opacity: .5;\n}\n\n.pretty.p-locked input {\n  display: none;\n  cursor: not-allowed;\n}\n\n.pretty input:checked ~ .state.p-primary label:after,\n.pretty.p-toggle .state.p-primary label:after {\n  background-color: #428bca !important;\n}\n\n.pretty input:checked ~ .state.p-primary .icon,\n.pretty input:checked ~ .state.p-primary .svg,\n.pretty.p-toggle .state.p-primary .icon,\n.pretty.p-toggle .state.p-primary .svg {\n  color: #fff;\n  stroke: #fff;\n}\n\n.pretty input:checked ~ .state.p-primary-o label:before,\n.pretty.p-toggle .state.p-primary-o label:before {\n  border-color: #428bca;\n}\n\n.pretty input:checked ~ .state.p-primary-o label:after,\n.pretty.p-toggle .state.p-primary-o label:after {\n  background-color: transparent;\n}\n\n.pretty input:checked ~ .state.p-primary-o .icon,\n.pretty input:checked ~ .state.p-primary-o .svg,\n.pretty input:checked ~ .state.p-primary-o svg,\n.pretty.p-toggle .state.p-primary-o .icon,\n.pretty.p-toggle .state.p-primary-o .svg,\n.pretty.p-toggle .state.p-primary-o svg {\n  color: #428bca;\n  stroke: #428bca;\n}\n\n.pretty.p-default:not(.p-fill) input:checked ~ .state.p-primary-o label:after {\n  background-color: #428bca !important;\n}\n\n.pretty.p-switch input:checked ~ .state.p-primary:before {\n  border-color: #428bca;\n}\n\n.pretty.p-switch.p-fill input:checked ~ .state.p-primary:before {\n  background-color: #428bca !important;\n}\n\n.pretty.p-switch.p-slim input:checked ~ .state.p-primary:before {\n  border-color: #245682;\n  background-color: #245682 !important;\n}\n\n.pretty input:checked ~ .state.p-info label:after,\n.pretty.p-toggle .state.p-info label:after {\n  background-color: #5bc0de !important;\n}\n\n.pretty input:checked ~ .state.p-info .icon,\n.pretty input:checked ~ .state.p-info .svg,\n.pretty.p-toggle .state.p-info .icon,\n.pretty.p-toggle .state.p-info .svg {\n  color: #fff;\n  stroke: #fff;\n}\n\n.pretty input:checked ~ .state.p-info-o label:before,\n.pretty.p-toggle .state.p-info-o label:before {\n  border-color: #5bc0de;\n}\n\n.pretty input:checked ~ .state.p-info-o label:after,\n.pretty.p-toggle .state.p-info-o label:after {\n  background-color: transparent;\n}\n\n.pretty input:checked ~ .state.p-info-o .icon,\n.pretty input:checked ~ .state.p-info-o .svg,\n.pretty input:checked ~ .state.p-info-o svg,\n.pretty.p-toggle .state.p-info-o .icon,\n.pretty.p-toggle .state.p-info-o .svg,\n.pretty.p-toggle .state.p-info-o svg {\n  color: #5bc0de;\n  stroke: #5bc0de;\n}\n\n.pretty.p-default:not(.p-fill) input:checked ~ .state.p-info-o label:after {\n  background-color: #5bc0de !important;\n}\n\n.pretty.p-switch input:checked ~ .state.p-info:before {\n  border-color: #5bc0de;\n}\n\n.pretty.p-switch.p-fill input:checked ~ .state.p-info:before {\n  background-color: #5bc0de !important;\n}\n\n.pretty.p-switch.p-slim input:checked ~ .state.p-info:before {\n  border-color: #2390b0;\n  background-color: #2390b0 !important;\n}\n\n.pretty input:checked ~ .state.p-success label:after,\n.pretty.p-toggle .state.p-success label:after {\n  background-color: #5cb85c !important;\n}\n\n.pretty input:checked ~ .state.p-success .icon,\n.pretty input:checked ~ .state.p-success .svg,\n.pretty.p-toggle .state.p-success .icon,\n.pretty.p-toggle .state.p-success .svg {\n  color: #fff;\n  stroke: #fff;\n}\n\n.pretty input:checked ~ .state.p-success-o label:before,\n.pretty.p-toggle .state.p-success-o label:before {\n  border-color: #5cb85c;\n}\n\n.pretty input:checked ~ .state.p-success-o label:after,\n.pretty.p-toggle .state.p-success-o label:after {\n  background-color: transparent;\n}\n\n.pretty input:checked ~ .state.p-success-o .icon,\n.pretty input:checked ~ .state.p-success-o .svg,\n.pretty input:checked ~ .state.p-success-o svg,\n.pretty.p-toggle .state.p-success-o .icon,\n.pretty.p-toggle .state.p-success-o .svg,\n.pretty.p-toggle .state.p-success-o svg {\n  color: #5cb85c;\n  stroke: #5cb85c;\n}\n\n.pretty.p-default:not(.p-fill) input:checked ~ .state.p-success-o label:after {\n  background-color: #5cb85c !important;\n}\n\n.pretty.p-switch input:checked ~ .state.p-success:before {\n  border-color: #5cb85c;\n}\n\n.pretty.p-switch.p-fill input:checked ~ .state.p-success:before {\n  background-color: #5cb85c !important;\n}\n\n.pretty.p-switch.p-slim input:checked ~ .state.p-success:before {\n  border-color: #357935;\n  background-color: #357935 !important;\n}\n\n.pretty input:checked ~ .state.p-warning label:after,\n.pretty.p-toggle .state.p-warning label:after {\n  background-color: #f0ad4e !important;\n}\n\n.pretty input:checked ~ .state.p-warning .icon,\n.pretty input:checked ~ .state.p-warning .svg,\n.pretty.p-toggle .state.p-warning .icon,\n.pretty.p-toggle .state.p-warning .svg {\n  color: #fff;\n  stroke: #fff;\n}\n\n.pretty input:checked ~ .state.p-warning-o label:before,\n.pretty.p-toggle .state.p-warning-o label:before {\n  border-color: #f0ad4e;\n}\n\n.pretty input:checked ~ .state.p-warning-o label:after,\n.pretty.p-toggle .state.p-warning-o label:after {\n  background-color: transparent;\n}\n\n.pretty input:checked ~ .state.p-warning-o .icon,\n.pretty input:checked ~ .state.p-warning-o .svg,\n.pretty input:checked ~ .state.p-warning-o svg,\n.pretty.p-toggle .state.p-warning-o .icon,\n.pretty.p-toggle .state.p-warning-o .svg,\n.pretty.p-toggle .state.p-warning-o svg {\n  color: #f0ad4e;\n  stroke: #f0ad4e;\n}\n\n.pretty.p-default:not(.p-fill) input:checked ~ .state.p-warning-o label:after {\n  background-color: #f0ad4e !important;\n}\n\n.pretty.p-switch input:checked ~ .state.p-warning:before {\n  border-color: #f0ad4e;\n}\n\n.pretty.p-switch.p-fill input:checked ~ .state.p-warning:before {\n  background-color: #f0ad4e !important;\n}\n\n.pretty.p-switch.p-slim input:checked ~ .state.p-warning:before {\n  border-color: #c77c11;\n  background-color: #c77c11 !important;\n}\n\n.pretty input:checked ~ .state.p-danger label:after,\n.pretty.p-toggle .state.p-danger label:after {\n  background-color: #d9534f !important;\n}\n\n.pretty input:checked ~ .state.p-danger .icon,\n.pretty input:checked ~ .state.p-danger .svg,\n.pretty.p-toggle .state.p-danger .icon,\n.pretty.p-toggle .state.p-danger .svg {\n  color: #fff;\n  stroke: #fff;\n}\n\n.pretty input:checked ~ .state.p-danger-o label:before,\n.pretty.p-toggle .state.p-danger-o label:before {\n  border-color: #d9534f;\n}\n\n.pretty input:checked ~ .state.p-danger-o label:after,\n.pretty.p-toggle .state.p-danger-o label:after {\n  background-color: transparent;\n}\n\n.pretty input:checked ~ .state.p-danger-o .icon,\n.pretty input:checked ~ .state.p-danger-o .svg,\n.pretty input:checked ~ .state.p-danger-o svg,\n.pretty.p-toggle .state.p-danger-o .icon,\n.pretty.p-toggle .state.p-danger-o .svg,\n.pretty.p-toggle .state.p-danger-o svg {\n  color: #d9534f;\n  stroke: #d9534f;\n}\n\n.pretty.p-default:not(.p-fill) input:checked ~ .state.p-danger-o label:after {\n  background-color: #d9534f !important;\n}\n\n.pretty.p-switch input:checked ~ .state.p-danger:before {\n  border-color: #d9534f;\n}\n\n.pretty.p-switch.p-fill input:checked ~ .state.p-danger:before {\n  background-color: #d9534f !important;\n}\n\n.pretty.p-switch.p-slim input:checked ~ .state.p-danger:before {\n  border-color: #a02622;\n  background-color: #a02622 !important;\n}\n\n.pretty.p-bigger label:before,\n.pretty.p-bigger label:after,\n.pretty.p-bigger .icon,\n.pretty.p-bigger .svg,\n.pretty.p-bigger .img {\n  font-size: 1.2em !important;\n  top: calc((0% - (100% - 1em)) - 35%) !important;\n}\n\n.pretty.p-bigger label {\n  text-indent: 1.7em;\n}\n\n@media print {\n  .pretty .state:before,\n  .pretty .state label:before,\n  .pretty .state label:after,\n  .pretty .state .icon {\n    color-adjust: exact;\n    /* stylelint-disable */\n    -webkit-print-color-adjust: exact;\n    print-color-adjust: exact;\n  }\n}\n"
  },
  {
    "path": "src/main/resources/需要前端代码联系博主.txt",
    "content": "本项目为原创开发\n目前只无偿开源后端代码\n需要完整前端代码联系博主\n"
  }
]