Showing preview only (1,761K chars total). Download the full file or copy to clipboard to get everything.
Repository: alibaba/tac
Branch: master
Commit: 80f8f6126ed6
Files: 225
Total size: 1.6 MB
Directory structure:
gitextract_shwv98fg/
├── .gitignore
├── LICENSE
├── README-ch.md
├── README.md
├── docs/
│ ├── arch_design.md
│ ├── configs.md
│ ├── custom_data_source.md
│ ├── gitlab.md
│ └── ide_source_start.md
├── extendlibs/
│ └── tac-custom-datasource-demo-0.0.4-SNAPSHOT.jar
├── override.properties
├── pom.xml
├── tac-console/
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── alibaba/
│ │ │ └── tac/
│ │ │ └── console/
│ │ │ ├── ConsoleApplication.java
│ │ │ ├── ConsoleBeanConfig.java
│ │ │ ├── ConsoleConstants.java
│ │ │ ├── TacApplicationContext.java
│ │ │ ├── error/
│ │ │ │ ├── ConsoleError.java
│ │ │ │ └── IErrorCode.java
│ │ │ ├── sdk/
│ │ │ │ └── MenuOptionHandler.java
│ │ │ └── web/
│ │ │ ├── HomeController.java
│ │ │ ├── InstFileRO.java
│ │ │ ├── TacInstController.java
│ │ │ ├── TacMsController.java
│ │ │ └── ro/
│ │ │ └── InstTestRO.java
│ │ └── resources/
│ │ ├── application-admin.properties
│ │ ├── application-simple.properties
│ │ ├── application.properties
│ │ ├── static/
│ │ │ ├── css/
│ │ │ │ └── app.797406e2fb84b15ea0b383ad60572f28.css
│ │ │ ├── js/
│ │ │ │ ├── app.606b53e74ca0c7067159.js
│ │ │ │ ├── manifest.58ce01f7a6fd036b4f8d.js
│ │ │ │ └── vendor.8940c3c560d73d0a0b28.js
│ │ │ └── main.css
│ │ ├── tac-console.properties
│ │ └── templates/
│ │ └── index.html
│ └── test/
│ └── java/
│ └── com/
│ └── alibaba/
│ └── tac/
│ └── console/
│ ├── MenuOptionHandlerTest.java
│ └── test/
│ ├── LancherTest.java
│ ├── TacConsoleTest.java
│ └── TestApplication.java
├── tac-console-web/
│ ├── .babelrc
│ ├── .editorconfig
│ ├── .eslintignore
│ ├── .eslintrc.js
│ ├── .gitignore
│ ├── .postcssrc.js
│ ├── README.md
│ ├── build/
│ │ ├── build.js
│ │ ├── check-versions.js
│ │ ├── dev-client.js
│ │ ├── dev-server.js
│ │ ├── utils.js
│ │ ├── vue-loader.conf.js
│ │ ├── webpack.base.conf.js
│ │ ├── webpack.dev.conf.js
│ │ └── webpack.prod.conf.js
│ ├── config/
│ │ ├── dev.env.js
│ │ ├── index.js
│ │ └── prod.env.js
│ ├── index.html
│ ├── package.json
│ ├── src/
│ │ ├── App.vue
│ │ ├── components/
│ │ │ ├── Hello.vue
│ │ │ ├── Home.vue
│ │ │ ├── TacConsole.vue
│ │ │ ├── TacInst.vue
│ │ │ ├── TacInstPublish.vue
│ │ │ ├── TacInstPublishCheck.vue
│ │ │ ├── TacJSONEditor.vue
│ │ │ ├── TacMs.vue
│ │ │ ├── TacMsEdit.vue
│ │ │ └── TacMsList.vue
│ │ ├── main.js
│ │ └── router/
│ │ └── index.js
│ └── static/
│ ├── .gitkeep
│ └── main.css
├── tac-container/
│ ├── pom.xml
│ └── src/
│ └── main/
│ ├── java/
│ │ └── com/
│ │ └── alibaba/
│ │ └── tac/
│ │ └── container/
│ │ ├── ContainerApplication.java
│ │ ├── ContainerBeanConfig.java
│ │ └── web/
│ │ └── TacApiController.java
│ └── resources/
│ └── application.properties
├── tac-custom-datasource-demo/
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ └── java/
│ │ └── com/
│ │ └── tmall/
│ │ └── itemcenter/
│ │ ├── ItemDO.java
│ │ └── TmallItemService.java
│ └── test/
│ └── java/
│ └── com/
│ └── alibaba/
│ └── tac/
│ └── AppTest.java
├── tac-dev-source-demo/
│ ├── pom.xml
│ └── src/
│ └── main/
│ └── java/
│ └── com/
│ └── alibaba/
│ └── tac/
│ └── biz/
│ └── processor/
│ └── HelloWorldTac.java
├── tac-engine/
│ ├── extendlibs/
│ │ ├── gson-2.8.2.jar
│ │ └── tac-dev-source-0.0.1-SNAPSHOT.jar
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── alibaba/
│ │ │ └── tac/
│ │ │ └── engine/
│ │ │ ├── autoconfigure/
│ │ │ │ └── TacAutoConfiguration.java
│ │ │ ├── bootlaucher/
│ │ │ │ └── BootJarLaucherUtils.java
│ │ │ ├── code/
│ │ │ │ ├── CodeCompileService.java
│ │ │ │ ├── CodeLoadService.java
│ │ │ │ ├── CustomerClassLoader.java
│ │ │ │ ├── SpringClassLoader.java
│ │ │ │ └── TacFileService.java
│ │ │ ├── common/
│ │ │ │ ├── DefaultTacIDGenerator.java
│ │ │ │ ├── SequenceCounter.java
│ │ │ │ ├── TacIDGenerator.java
│ │ │ │ └── redis/
│ │ │ │ └── RedisSequenceCounter.java
│ │ │ ├── compile/
│ │ │ │ ├── IJdkCompiler.java
│ │ │ │ ├── InstCodeInfo.java
│ │ │ │ ├── JavaSourceCode.java
│ │ │ │ ├── JdkCompilerImpl.java
│ │ │ │ └── TacJavaFileObject.java
│ │ │ ├── event/
│ │ │ │ └── domain/
│ │ │ │ ├── AbstractMsEvent.java
│ │ │ │ ├── GetAllMsEvent.java
│ │ │ │ ├── MsOfflineEvent.java
│ │ │ │ ├── MsPublishEvent.java
│ │ │ │ └── MsReceivePublishEvent.java
│ │ │ ├── git/
│ │ │ │ └── GitRepoService.java
│ │ │ ├── inst/
│ │ │ │ ├── domain/
│ │ │ │ │ ├── TacInst.java
│ │ │ │ │ ├── TacInstStatus.java
│ │ │ │ │ └── TacInstanceInfo.java
│ │ │ │ └── service/
│ │ │ │ ├── DevMsInstFileService.java
│ │ │ │ ├── IMsInstFileService.java
│ │ │ │ ├── IMsInstService.java
│ │ │ │ ├── LocalMsInstFileService.java
│ │ │ │ └── redis/
│ │ │ │ ├── RedisMsInstFileService.java
│ │ │ │ └── RedisMsInstService.java
│ │ │ ├── ms/
│ │ │ │ ├── domain/
│ │ │ │ │ ├── TacMs.java
│ │ │ │ │ ├── TacMsDO.java
│ │ │ │ │ ├── TacMsPublishMeta.java
│ │ │ │ │ └── TacMsStatus.java
│ │ │ │ └── service/
│ │ │ │ ├── AbstractDefaultMsPublisher.java
│ │ │ │ ├── DefaultMsEventHandlers.java
│ │ │ │ ├── IMsPublisher.java
│ │ │ │ ├── IMsService.java
│ │ │ │ ├── IMsSubscriber.java
│ │ │ │ └── redis/
│ │ │ │ ├── RedisMsPublisher.java
│ │ │ │ ├── RedisMsService.java
│ │ │ │ └── RedisMsSubscriber.java
│ │ │ ├── properties/
│ │ │ │ ├── TacDataPathProperties.java
│ │ │ │ ├── TacGitlabProperties.java
│ │ │ │ ├── TacMsConstants.java
│ │ │ │ └── TacRedisConfigProperties.java
│ │ │ ├── service/
│ │ │ │ ├── DefaultTacEngineService.java
│ │ │ │ ├── EngineBeansConfig.java
│ │ │ │ ├── RedisBeansConfig.java
│ │ │ │ ├── TacEngineService.java
│ │ │ │ ├── TacInstRunService.java
│ │ │ │ ├── TacInstanceContainerService.java
│ │ │ │ ├── TacInstanceLoadService.java
│ │ │ │ └── TacPublishTestService.java
│ │ │ └── util/
│ │ │ ├── Bytes.java
│ │ │ ├── CollectionUtils.java
│ │ │ ├── HConstants.java
│ │ │ ├── IterableUtils.java
│ │ │ ├── TacCompressUtils.java
│ │ │ ├── TacLogUtils.java
│ │ │ ├── ThreadPoolUtils.java
│ │ │ └── ThreadUtils.java
│ │ └── resources/
│ │ ├── META-INF/
│ │ │ └── spring.factories
│ │ └── tac/
│ │ └── default-logback-spring.xml
│ └── test/
│ ├── java/
│ │ └── com/
│ │ └── alibaba/
│ │ └── tac/
│ │ ├── engine/
│ │ │ ├── common/
│ │ │ │ └── redis/
│ │ │ │ └── RedisSequenceCounterTest.java
│ │ │ ├── inst/
│ │ │ │ └── service/
│ │ │ │ └── redis/
│ │ │ │ ├── RedisMsInstFileServiceTest.java
│ │ │ │ └── RedisMsInstServiceTest.java
│ │ │ ├── ms/
│ │ │ │ └── service/
│ │ │ │ └── redis/
│ │ │ │ ├── RedisMsPublisherTest.java
│ │ │ │ └── RedisMsServiceTest.java
│ │ │ ├── service/
│ │ │ │ ├── GitLabFeatureTest.java
│ │ │ │ ├── JdkCompilerTest.java
│ │ │ │ └── TacInstanceLoadServiceTest.java
│ │ │ ├── test/
│ │ │ │ ├── TacEnginTest.java
│ │ │ │ └── TestApplication.java
│ │ │ └── utils/
│ │ │ └── TacFileUtilTest.java
│ │ └── test/
│ │ ├── http/
│ │ │ └── HttpClientTest.java
│ │ └── redis/
│ │ ├── RedisConfig.java
│ │ ├── StringDataRedisTest.java
│ │ └── TacRedisMessageListener.java
│ ├── resources/
│ │ └── test.properties
│ └── source/
│ └── test1/
│ └── com/
│ └── alibaba/
│ └── tac/
│ └── biz/
│ └── processor/
│ └── HelloTac.java
├── tac-infrastructure/
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ └── java/
│ │ └── com/
│ │ └── alibaba/
│ │ └── tac/
│ │ └── infrastracture/
│ │ └── logger/
│ │ ├── TacLogConsts.java
│ │ └── TacLoggerImpl.java
│ └── test/
│ └── java/
│ └── com/
│ └── alibaba/
│ └── tac/
│ └── AppTest.java
└── tac-sdk/
├── pom.xml
└── src/
└── main/
└── java/
└── com/
└── alibaba/
└── tac/
└── sdk/
├── common/
│ ├── TacContants.java
│ ├── TacParams.java
│ ├── TacResult.java
│ └── TacThreadLocals.java
├── domain/
│ ├── Context.java
│ └── TacRequestContext.java
├── error/
│ ├── ErrorCode.java
│ ├── IError.java
│ └── ServiceException.java
├── factory/
│ ├── AbstractServiceFactory.java
│ └── TacInfrasFactory.java
├── handler/
│ ├── DisposableHandler.java
│ ├── InitializingHandler.java
│ └── TacHandler.java
├── infrastracture/
│ └── TacLogger.java
├── tangram4tac/
│ ├── Cell.java
│ ├── Container.java
│ ├── FieldExcluder.java
│ ├── FieldNameMapper.java
│ ├── Style.java
│ ├── lib/
│ │ ├── BannerContainer.java
│ │ ├── BannerStyle.java
│ │ ├── CellType.java
│ │ ├── FiveColumnContainer.java
│ │ ├── FixContainer.java
│ │ ├── FixStyle.java
│ │ ├── FloatContainer.java
│ │ ├── FlowContainer.java
│ │ ├── FlowStyle.java
│ │ ├── FourColumnContainer.java
│ │ ├── OneChildContainer.java
│ │ ├── OneColumnContainer.java
│ │ ├── OnePlusNContainer.java
│ │ ├── OnePlusNStyle.java
│ │ ├── ScrollContainer.java
│ │ ├── ScrollFixBannerContainer.java
│ │ ├── ScrollFixContainer.java
│ │ ├── ScrollStyle.java
│ │ ├── StickyContainer.java
│ │ ├── StickyStyle.java
│ │ ├── ThreeColumnContainer.java
│ │ ├── TwoColumnContainer.java
│ │ ├── WaterFallContainer.java
│ │ └── WaterFallStyle.java
│ ├── render/
│ │ ├── DefaultRender.java
│ │ └── IRender.java
│ └── utils/
│ ├── Pair.java
│ └── Utils.java
└── utils/
└── TacIPUtils.java
================================================
FILE CONTENTS
================================================
================================================
FILE: .gitignore
================================================
target/
!.mvn/wrapper/maven-wrapper.jar
### STS ###
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
### IntelliJ IDEA ###
.idea
*.iws
*.iml
*.ipr
### NetBeans ###
nbproject/private/
nbbuild/
dist/
nbdist/
bin/
================================================
FILE: LICENSE
================================================
MIT License
Copyright (c) 2016 Alibaba Group
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
================================================
FILE: README-ch.md
================================================
- [TAC](#tac)
- [What is TAC ?](#what-is-tac-%EF%BC%9F)
- [Features](#features)
- [Why TAC?](#why-tac%EF%BC%9F)
- [TAC 之前](#tac-%E4%B9%8B%E5%89%8D)
- [TAC 之后](#tac-%E4%B9%8B%E5%90%8E)
- [Quick Start](#quick-start)
- [安装redis](#%E5%AE%89%E8%A3%85redis)
- [运行 container](#%E8%BF%90%E8%A1%8C-container)
- [运行 console 控制台](#%E8%BF%90%E8%A1%8C-console-%E6%8E%A7%E5%88%B6%E5%8F%B0)
- [代码开发](#%E4%BB%A3%E7%A0%81%E5%BC%80%E5%8F%91)
- [本地编译、打包](#%E6%9C%AC%E5%9C%B0%E7%BC%96%E8%AF%91%E3%80%81%E6%89%93%E5%8C%85)
- [预发布](#%E9%A2%84%E5%8F%91%E5%B8%83)
- [正式发布](#%E6%AD%A3%E5%BC%8F%E5%8F%91%E5%B8%83)
- [启动配置参数](#%E5%90%AF%E5%8A%A8%E9%85%8D%E7%BD%AE%E5%8F%82%E6%95%B0)
- [接入你自己的数据源](#%E6%8E%A5%E5%85%A5%E4%BD%A0%E8%87%AA%E5%B7%B1%E7%9A%84%E6%95%B0%E6%8D%AE%E6%BA%90)
# TAC
## What is TAC ?
* TAC (Tiny API Cloud ) 是与 tangram 配套的服务端解决方案。当然也支持脱离 tangram 使用;
* TAC 不是平台,也不是框架,而是一种开发模式;
## Features
* 快速发布;
* 无需部署;
* 灵活修改;
* 快速添加数据源;
* 客户端开发人员直接参与服务端逻辑;
## Why TAC?
### TAC 之前
* 在 TAC 诞生之前,天猫 app 大多数页面服务端的开发模式是这样的 。以首页为例:
* 1.客户端与服务端同学约定接口数据类型,字段;
* 2.服务端提供 mock 接口,两端并行开发;
* 3.测试、部署、发布。
* 这种模式的弊端在于,由于页面依赖了各种数据源,发布是一个漫长的过程,如果遇到字段修改,整个应用重新编译、打包部署流程太长;不同的页面部署在不同的应用中,无法共享数据源
### TAC 之后
* TAC 接入各个常用数据源;
* 客户端同学直接在 TAC 上提交源码,编译、测试、并发布生效;
* 客户端页面开发不需要服务端同学参与,免去沟通过程;
* 服务端同学专注开发业务逻辑;

## Quick Start
### 安装[redis](https://redis.io/)
### 运行 container
```
java -jar tac-container.jar
```
### 运行 console 控制台
```
java -jar tac-console.jar --admin
```
* 成功后可打开控制台
```
http://localhost:7001/#/tacMs/list
```
### 代码开发
* 仓库地址 [oss.sonatype.org](https://oss.sonatype.org/#nexus-search;quick~tac-sdk)
* 添加 SDK 依赖
```
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>tac-sdk</artifactId>
<version>${project.version}</version>
</dependency>
```
* 编写代码
```java
public class HelloWorldTac implements TacHandler<Object> {
/**
* 引入日志服务
*/
private TacLogger tacLogger = TacInfrasFactory.getLogger();
/**
* 编写一个实现TacHandler接口的类
*
* @param context
* @return
* @throws Exception
*/
@Override
public TacResult<Object> execute(Context context) throws Exception {
// 执行逻辑
tacLogger.info("Hello World");
Map<String, Object> data = new HashMap<>();
data.put("name", "hellotac");
data.put("platform", "iPhone");
data.put("clientVersion", "7.0.2");
data.put("userName", "tac-userName");
return TacResult.newResult(data);
}
}
```
### 本地编译、打包
```bash
cd tac-dev-source
java -jar tac-console.jar --package --msCode=helloworld
```

### 预发布
* 预发布
* 测试预发布

### 正式发布
* 线上验证
```
curl http://localhost:8001/api/tac/execute/helloworld -s|json
```
* 结果
```json
{
"success": true,
"msgCode": null,
"msgInfo": null,
"data": {
"helloworld": {
"data": {
"name": "hellotac",
"clientVersion": "7.0.2",
"userName": "tac-userName",
"platform": "iPhone"
},
"success": true,
"msCode": "helloworld"
}
},
"hasMore": null,
"ip": "127.0.0.1"
}
```
## [启动配置参数](/docs/configs.md)
## [接入你自己的数据源](/docs/custom_data_source.md)
## [与gitlab集成](/docs/gitlab.md)
## [IDE源码启动——quickstart](/docs/ide_source_start.md)
================================================
FILE: README.md
================================================
* [TAC](#tac)
* [What is TAC ?](#what-is-tac-%EF%BC%9F)
* [Features](#features)
* [Why TAC?](#why-tac%EF%BC%9F)
* [Before TAC](#before-tac)
* [After TAC](#after-tac)
* [Quick Start](#quick-start)
* [Install redis](#install-redis)
* [Run container](#run-container)
* [Run console](#run-console)
* [Code Develop](#code-develop)
* [compile and package](#compile-and-package)
* [Pre-Publish](#pre-publish)
* [Online-Publish](#online-publish)
* [The start params config](#the-start-params-config)
* [Add your own datasource](#add-your-own-datasource)
# [中文文档](README-ch.md)
# TAC
## What is TAC ?
+ The TAC (Tiny API Cloud) is a server-side solution with tangram. Of course, it also supports the use of secession from tangram; TAC is not a platform, nor a framework, but a development model.
## Features
* Quick publish;
* Without deploy;
* Flexible modification
* Quickly add data sources
* Client developers directly participate in server-side logic;
## Why TAC?
### Before TAC
* Before the birth of TAC, the development mode of most app server-side on Tmall app was like this. Take the home page as an example:
* Client and server developer discuss the interface data types, fields;
* The server developer provides a mock interface with parallel development at both ends.
* Test, deploy, release.
- The disadvantage of this model is that since the page relies on various data sources, publishing is a long process. If the field is modified, the entire application will be recompiled and packaged. The deployment process is too long; different pages are deployed in different applications. unable to share data source
### After TAC
* TAC access to various commonly used data sources;
* Clients submit source code directly on TAC, compile, test, and publish;
* Client development does not require the participation of server-side developer, eliminating the need for communication.
* Server-side developer focus on developing business logic;

## Quick Start
### Install [redis](https://redis.io/)
### Run container
```
java -jar tac-container.jar
```
### Run console
```
java -jar tac-console.jar --admin
```
* open console when succes
```
http://localhost:7001/#/tacMs/list
```
### Code Develop
* Repo Address [oss.sonatype.org](https://oss.sonatype.org/#nexus-search;quick~tac-sdk)
* Add SDK Dependency
```
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>tac-sdk</artifactId>
<version>${project.version}</version>
</dependency>
```
* Write your code
```java
public class HelloWorldTac implements TacHandler<Object> {
/**
* 引入日志服务
*/
private TacLogger tacLogger = TacInfrasFactory.getLogger();
/**
* 编写一个实现TacHandler接口的类
*
* @param context
* @return
* @throws Exception
*/
@Override
public TacResult<Object> execute(Context context) throws Exception {
// 执行逻辑
tacLogger.info("Hello World");
Map<String, Object> data = new HashMap<>();
data.put("name", "hellotac");
data.put("platform", "iPhone");
data.put("clientVersion", "7.0.2");
data.put("userName", "tac-userName");
return TacResult.newResult(data);
}
}
```
### compile and package
```bash
cd tac-dev-source
java -jar tac-console.jar --package --msCode=helloworld
```

### Pre-Publish
* Pre-Publish
* Test-Pre-Publish

### Online-Publish
* online check
```
curl http://localhost:8001/api/tac/execute/helloworld -s|json
```
* Result
```json
{
"success": true,
"msgCode": null,
"msgInfo": null,
"data": {
"helloworld": {
"data": {
"name": "hellotac",
"clientVersion": "7.0.2",
"userName": "tac-userName",
"platform": "iPhone"
},
"success": true,
"msCode": "helloworld"
}
},
"hasMore": null,
"ip": "127.0.0.1"
}
```
## [The start params config](/docs/configs.md)
## [Add your own datasource](/docs/custom_data_source.md)
## [Use with gitlab](/docs/gitlab.md)
================================================
FILE: docs/arch_design.md
================================================
================================================
FILE: docs/configs.md
================================================
# TAC 配置
* TAC 使用 springboot 构建,可是用 springboot 的标准配置文件来替换其默认配置;
* 如 启动参数 --spring.config.location=file:/override.properties
## 通用配置
```properties
# http 服务器端口
server.port=8001
# endpoint 配置
management.port=8002
# 使用的存储 redis
tac.default.store=redis
# 扩展点扫描的包名 逗号分隔
scan.package.name=com.tmall.tac.test
# 扩展jar包路径
tac.extend.lib=extendlibs
# 日志路径
logging.config=classpath:tac/default-logback-spring.xml
# 编译相关
# 参考类 TacDataPathProperties
# 编译结果路径 默认值 不建议修改
tac.data.path.outputPathPrefix=${user.home}/tac/data/classes
# 运行时加载的类路径 不建议修改
tac.data.path.classLoadPathPrefix=${user.home}/tac/data/ms
# 编译代码的包名 修改成自定义包名
tac.data.path.pkgPrefix=com.alibaba.tac.biz;
# redis存储相关配置 参考类 TacRedisConfigProperties 以下配置不建议修改
# msInst元数据路径
tac.redis.config.msInstMetaDataPath=com.alibaba.tac.msInstMetaData
# ms元数据路径
tac.redis.config.msMetaDataPath=com.alibaba.tac.msMetaData
# 数据路径的前缀
tac.redis.config.dataPathPrefix=msInstFile
# 服务列表的路径
tac.redis.config.msListPath=msPublishedList
# 发布时候订阅的channel
tac.redis.config.publishEventChannel=tac.inst.publish.channel
```
## tac-console 配置
```properties
# tac-container的http接口 在线上验证时使用
tac.container.web.api=http://localhost:8001/api/tac/execute
```
## gitlab配置
```properties
# gitlab服务器地址
tac.gitlab.config.hostURL=http://127.0.0.1
# gitlab帐号token
tac.gitlab.config.token=xxxxx
# gitlab仓库groupName
tac.gitlab.config.groupName=tac-admin
# gitlab仓库帐号名
tac.gitlab.config.userName=tac-admin
# gitlab仓库帐号密码
tac.gitlab.config.password=tac-admin
# gitlab代码下载存储路径 (各微服务代码会下载到这个路径下)
tac.gitlab.config.basePath=/home/admin/tac/git_codes
```
================================================
FILE: docs/custom_data_source.md
================================================
## 接入你自己的数据源
* 以下以 idea 为例,描述 tac 源码级别添加数据源步骤
### 代码拉取
```
git clone git@github.com:alibaba/tac.git
```
###
### 打开工程
* 为了方便大家理解,demo 模块加了 demo 字样;
* 在这里我们添加天猫商品服务(当然是 mock 的)

```java
package com.alibaba.tac.infrastracture.demo.itemcenter;
import org.springframework.stereotype.Service;
/**
*
*/
@Service
public class TmallItemService {
/**
* get a item
*
* @param id
* @return
*/
public ItemDO getItem(Long id) {
// mock data 这里可以进行PRC、HTTP 调用 和自己的业务系统交互
return new ItemDO(id, "A Song of Ice and Fire", "¥222.00");
}
}
```
### 安装 jar 包到本地仓库
```plain
mvn clean -Dmaven.test.skip=true package install
```
### 在微服务里引用新的数据源
* 在 仍然以 tac-dev-source 为例 【注意】在新的 pom 文件中引入了刚刚打包的 jar 包 tac-custom-datasource-demo

* 实例代码
```java
package com.alibaba.tac.biz.processor;
import com.alibaba.tac.sdk.common.TacResult;
import com.alibaba.tac.sdk.domain.Context;
import com.alibaba.tac.sdk.factory.TacInfrasFactory;
import com.alibaba.tac.sdk.handler.TacHandler;
import com.alibaba.tac.sdk.infrastracture.TacLogger;
import com.tmall.itemcenter.ItemDO;
import com.tmall.itemcenter.TmallItemService;
import java.util.HashMap;
import java.util.Map;
/**
* @author jinshuan.li
*/
public class HelloWorldTac implements TacHandler<Object> {
/**
* get the logger service
*/
private TacLogger tacLogger = TacInfrasFactory.getLogger();
private TmallItemService tmallItemService = TacInfrasFactory.getServiceBean(TmallItemService.class);
/**
* implement a class which implements TacHandler interface {@link TacHandler}
*
* @param context
* @return
* @throws Exception
*/
@Override
public TacResult<Object> execute(Context context) throws Exception {
// the code
tacLogger.info("Hello World22");
Map<String, Object> data = new HashMap<>();
data.put("name", "hellotac");
data.put("platform", "iPhone");
data.put("clientVersion", "7.0.2");
data.put("userName", "tac-userName");
ItemDO item = tmallItemService.getItem(1L);
data.put("item", item);
return TacResult.newResult(data);
}
}
```
### 从 IDEA 源码运行
* 在 tac-infrastructure 的 pom 文件中加入依赖 (理论上来说任意一个 pom 都行,保证在 classpath 里)
```xml
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>tac-custom-datasource-demo</artifactId>
<version>0.0.4-SNAPSHOT</version>
</dependency>
```

* 修改加载路径,让新的 bean 能改被加载

* 源码启动 console [参考](ide_source_start.md)
* 像打包 helloworld 一样打包新实例代码 mvn clean -Dmaven.test.skip=true package
* 正常预发布测试

### 从 Jar 包执行
* 为了实现对源码无侵入,tac 改造了 classloader 的顺序以支持从外部加载数据源的 jar 包;
* 只需将数据源 jar 包放入 extendlibs 中即可


* 运行 java -jar tac-console-0.0.4.jar --admin
================================================
FILE: docs/gitlab.md
================================================
# 与 gitlab 集成
* 用户可以将 gitlab 与 tac 集成,方便管理微服务;
## Step 1 新建帐号
* tac 使用专门的 gitlab 帐号来管理相关代码;联系对应的 gitlab 服务器管理员,新建名如 tac-admin 的用户,并获取其 api token、userName、password.
## Step 2 tac 启动参数配置
* 在 tac 启动时配置如下参数
```properties
# gitlab服务器地址
tac.gitlab.config.hostURL=http://127.0.0.1
# gitlab帐号token
tac.gitlab.config.token=xxxxx
# gitlab仓库groupName
tac.gitlab.config.groupName=tac-admin
# gitlab仓库帐号名
tac.gitlab.config.userName=tac-admin
# gitlab仓库帐号密码
tac.gitlab.config.password=tac-admin
# gitlab代码下载存储路径 (各微服务代码会下载到这个路径下)
tac.gitlab.config.basePath=/home/admin/tac/git_codes
```
## Step 3 修改微服务的代码仓库地址
* 如下图所示,修改该微服务的仓库地址

## Step 4 置顶实例分支并发布

================================================
FILE: docs/ide_source_start.md
================================================
# 源码启动详细步骤
* 以下以 idea 为例,描述 tac 源码从 idea 启动步骤
### 代码拉取
```
git clone git@github.com:alibaba/tac.git
```
### 打开工程
* 项目通过 springboot 编写 依赖 jdk1.8
* 使用了 lombok 包,idea 需要安装 lombok 插件;

### 安装并启动 redis (本地默认配置)
* ip : 127.0.0.1
* port : 6379
### 启动 console
* com.alibaba.tac.console.ConsoleApplication 带上 --admin 参数启动

* 成功后打开控制台 http://localhost:7001/#/tacMs/list
### 新建服务

### 编写代码
* 参考 tac-dev-source

```java
package com.alibaba.tac.biz.processor;
import com.alibaba.tac.sdk.common.TacResult;
import com.alibaba.tac.sdk.domain.Context;
import com.alibaba.tac.sdk.factory.TacInfrasFactory;
import com.alibaba.tac.sdk.handler.TacHandler;
import com.alibaba.tac.sdk.infrastracture.TacLogger;
import java.util.HashMap;
import java.util.Map;
/**
* @author jinshuan.li
*/
public class HelloWorldTac implements TacHandler<Object> {
/**
* get the logger service
*/
private TacLogger tacLogger = TacInfrasFactory.getLogger();
/**
* implement a class which implements TacHandler interface
* {@link TacHandler}
* @param context
* @return
* @throws Exception
*/
@Override
public TacResult<Object> execute(Context context) throws Exception {
// the code
tacLogger.info("Hello World22");
Map<String, Object> data = new HashMap<>();
data.put("name", "hellotac");
data.put("platform", "iPhone");
data.put("clientVersion", "7.0.2");
data.put("userName", "tac-userName");
return TacResult.newResult(data);
}
}
```
### 代码打包
```
cd tac-dev-source
mvn clean -Dmaven.test.skip=true package
```
### 上传 jar 包

### 预发布
### 预发布测试

## 正式发布
### 运行
* com.alibaba.tac.container.ContainerApplication
### 控制台操作发布

================================================
FILE: override.properties
================================================
scan.package.name=com.tmall.itemcenter
================================================
FILE: pom.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.alibaba</groupId>
<artifactId>tac</artifactId>
<version>0.0.4</version>
<packaging>pom</packaging>
<modules>
<module>tac-sdk</module>
<module>tac-console</module>
<module>tac-container</module>
<module>tac-engine</module>
<module>tac-infrastructure</module>
</modules>
<name>tac</name>
<description>Tangram App Container</description>
<url>https://github.com/alibaba/tac</url>
<inceptionYear>2018</inceptionYear>
<organization>
<name>Alibaba Group</name>
<url>https://github.com/alibaba</url>
</organization>
<developers>
<developer>
<name>ljinshuan</name>
<email>ljinshuan@gmail.com</email>
<organization>alibaba</organization>
<organizationUrl>https://github.com/alibaba</organizationUrl>
</developer>
</developers>
<scm>
<url>https://github.com/alibaba/tac</url>
<connection>scm:git:https://github.com/alibaba/tac.git</connection>
<developerConnection>scm:git:https://github.com/alibaba/tac.git</developerConnection>
</scm>
<issueManagement>
<system>Github Issues</system>
<url>https://github.com/alibaba/tac/issues</url>
</issueManagement>
<licenses>
<license>
<name>The Apache License, Version 2.0</name>
<url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
</license>
</licenses>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.4.7.RELEASE</version>
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<jdk.version>1.8</jdk.version>
<thymeleaf.version>3.0.2.RELEASE</thymeleaf.version>
<thymeleaf-layout-dialect.version>2.1.1</thymeleaf-layout-dialect.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<!--self start-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>tac-console</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>tac-container</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>tac-engine</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>tac-infrastructure</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>tac-sdk</artifactId>
<version>${project.version}</version>
</dependency>
<!--self end-->
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.9.0</version>
</dependency>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>20.0</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-collections4</artifactId>
<version>4.1</version>
</dependency>
<dependency>
<groupId>commons-beanutils</groupId>
<artifactId>commons-beanutils</artifactId>
<version>1.9.3</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.7</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.39</version>
</dependency>
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.4.9</version>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</exclusion>
<exclusion>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.asynchttpclient</groupId>
<artifactId>async-http-client</artifactId>
<version>2.2.0</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-loader</artifactId>
<version>1.4.7.RELEASE</version>
</dependency>
<dependency>
<groupId>org.gitlab4j</groupId>
<artifactId>gitlab4j-api</artifactId>
<version>4.8.9</version>
</dependency>
<dependency>
<groupId>org.eclipse.jgit</groupId>
<artifactId>org.eclipse.jgit</artifactId>
<version>4.5.0.201609210915-r</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.6</version>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>${jdk.version}</source>
<target>${jdk.version}</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<configuration>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
</plugins>
</pluginManagement>
</build>
<distributionManagement>
<snapshotRepository>
<id>ossrh</id>
<url>https://oss.sonatype.org/content/repositories/snapshots</url>
</snapshotRepository>
<repository>
<id>ossrh</id>
<name>Maven Central Staging Repository</name>
<url>https://oss.sonatype.org/service/local/staging/deploy/maven2/</url>
</repository>
</distributionManagement>
<profiles>
<profile>
<id>release</id>
<build>
<plugins>
<plugin>
<groupId>org.sonatype.plugins</groupId>
<artifactId>nexus-staging-maven-plugin</artifactId>
<version>1.6.7</version>
<extensions>true</extensions>
<configuration>
<serverId>ossrh</serverId>
<nexusUrl>https://oss.sonatype.org/</nexusUrl>
<autoReleaseAfterClose>true</autoReleaseAfterClose>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-release-plugin</artifactId>
<configuration>
<autoVersionSubmodules>true</autoVersionSubmodules>
<useReleaseProfile>false</useReleaseProfile>
<releaseProfiles>release</releaseProfiles>
<goals>deploy</goals>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>${jdk.version}</source>
<target>${jdk.version}</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<!--sign-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-gpg-plugin</artifactId>
<version>1.5</version>
<executions>
<execution>
<id>sign-artifacts</id>
<phase>verify</phase>
<goals>
<goal>sign</goal>
</goals>
</execution>
</executions>
</plugin>
<!--code-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>3.0.1</version>
<executions>
<execution>
<id>attach-sources</id>
<goals>
<goal>jar-no-fork</goal>
</goals>
</execution>
</executions>
</plugin>
<!--javadoc-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<version>3.0.0</version>
<executions>
<execution>
<id>attach-javadocs</id>
<goals>
<goal>jar</goal>
</goals>
<configuration>
<additionalOptions>
-Xdoclint:none
</additionalOptions>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
</profiles>
</project>
================================================
FILE: tac-console/pom.xml
================================================
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>tac</artifactId>
<groupId>com.alibaba</groupId>
<version>0.0.4</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>tac-console</artifactId>
<packaging>jar</packaging>
<name>tac-console</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>tac-engine</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>${jdk.version}</source>
<target>${jdk.version}</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<configuration>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
</plugins>
</build>
</project>
================================================
FILE: tac-console/src/main/java/com/alibaba/tac/console/ConsoleApplication.java
================================================
/*
* MIT License
*
* Copyright (c) 2016 Alibaba Group
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
package com.alibaba.tac.console;
import com.alibaba.tac.console.sdk.MenuOptionHandler;
import com.alibaba.tac.engine.bootlaucher.BootJarLaucherUtils;
import com.alibaba.tac.engine.code.CodeLoadService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.*;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.context.event.ApplicationEnvironmentPreparedEvent;
import org.springframework.boot.loader.jar.JarFile;
import org.springframework.context.ApplicationListener;
import org.springframework.context.annotation.*;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
import javax.annotation.Resource;
/**
* @author jinshuan.li 07/02/2018 11:18
*/
@SpringBootApplication(scanBasePackages = "${tac.app.scan.packages}")
@PropertySources({@PropertySource("application.properties"), @PropertySource("tac-console.properties")})
@EnableAspectJAutoProxy(proxyTargetClass = true)
@Import(ConsoleBeanConfig.class)
@Slf4j
public class ConsoleApplication implements CommandLineRunner {
@Resource
private ApplicationArguments applicationArguments;
@Resource
private MenuOptionHandler menuOptionHandler;
public static void main(String[] args)
throws Exception {
// parse the args
ApplicationArguments arguments = new DefaultApplicationArguments(args);
boolean help = arguments.containsOption(ConsoleConstants.MENU_HELP);
if (help) {
MenuOptionHandler.printUsage();
return;
}
// the code must execute before spring start
JarFile bootJarFile = BootJarLaucherUtils.getBootJarFile();
if (bootJarFile != null) {
BootJarLaucherUtils.unpackBootLibs(bootJarFile);
log.debug("the temp tac lib folder:{}", BootJarLaucherUtils.getTempUnpackFolder());
}
// get command args and start spring boot
Boolean webEnv = false;
String additionProfile = ConsoleConstants.ADDDITION_PROFILE_SIMPLE;
if (arguments.containsOption(ConsoleConstants.OPTION_ADMIN)) {
webEnv = true;
additionProfile = ConsoleConstants.ADDDITION_PROFILE_ADMIN;
}
SpringApplication springApplication = new SpringApplication(ConsoleApplication.class);
springApplication.setWebEnvironment(webEnv);
springApplication.setBannerMode(Banner.Mode.OFF);
if (!webEnv) {
// command model
springApplication.setAdditionalProfiles(additionProfile);
} else {
// web model
springApplication.setAdditionalProfiles(additionProfile);
}
springApplication.addListeners(new ApplicationListener<ApplicationEnvironmentPreparedEvent>() {
@Override
public void onApplicationEvent(ApplicationEnvironmentPreparedEvent event) {
CodeLoadService.changeClassLoader(event.getEnvironment());
}
});
springApplication.run(args);
}
@Bean
public WebMvcConfigurer webMvcConfigurer() {
return new WebMvcConfigurerAdapter() {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/api/**").allowedMethods("GET", "POST", "PUT", "DELETE");
}
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
super.addResourceHandlers(registry);
registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/");
}
};
}
@Bean
public ExitCodeGenerator exitCodeGenerator() {
return new ExitCodeGenerator() {
@Override
public int getExitCode() {
return 0;
}
};
}
@Override
public void run(String... args) throws Exception {
// handle the command
Boolean webEnv = false;
if (applicationArguments.containsOption(ConsoleConstants.OPTION_ADMIN)) {
webEnv = true;
}
if (!webEnv) {
menuOptionHandler.handleMenuOption();
}
}
}
================================================
FILE: tac-console/src/main/java/com/alibaba/tac/console/ConsoleBeanConfig.java
================================================
/*
* MIT License
*
* Copyright (c) 2016 Alibaba Group
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
package com.alibaba.tac.console;
import com.alibaba.tac.engine.service.EngineBeansConfig;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.context.annotation.*;
/**
* @author jinshuan.li 01/03/2018 17:21
*
* this class is used to scan extend packages you can set the scan.package.name value from properties
*/
@Slf4j
@ConditionalOnProperty(name = "scan.package.name")
@Configuration
@ComponentScan(basePackages = "${scan.package.name}")
@Import(EngineBeansConfig.class)
public class ConsoleBeanConfig {
}
================================================
FILE: tac-console/src/main/java/com/alibaba/tac/console/ConsoleConstants.java
================================================
/*
* MIT License
*
* Copyright (c) 2016 Alibaba Group
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
package com.alibaba.tac.console;
/**
* @author jinshuan.li 27/02/2018 21:00
*/
public class ConsoleConstants {
public static final String MENU_HELP = "help";
public static final String MENU_PACKAGE = "package";
public static final String MENU_PUBLISH = "publish";
public static final String OPTION_ADMIN = "admin";
public static final String ADDDITION_PROFILE_SIMPLE = "simple";
public static final String ADDDITION_PROFILE_ADMIN = "admin";
public static final String ADDDITION_PROFILE_CONSOLE = "debug";
}
================================================
FILE: tac-console/src/main/java/com/alibaba/tac/console/TacApplicationContext.java
================================================
/*
* MIT License
*
* Copyright (c) 2016 Alibaba Group
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
package com.alibaba.tac.console;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext;
/**
* @author jinshuan.li 06/03/2018 20:51
*/
@Slf4j
@Deprecated
public class TacApplicationContext extends AnnotationConfigEmbeddedWebApplicationContext {
public TacApplicationContext() throws Exception {
super();
}
}
================================================
FILE: tac-console/src/main/java/com/alibaba/tac/console/error/ConsoleError.java
================================================
/*
* MIT License
*
* Copyright (c) 2016 Alibaba Group
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
package com.alibaba.tac.console.error;
/**
* @author jinshuan.li 06/03/2018 12:19
*/
public enum ConsoleError implements IErrorCode {
/**
* system error
*/
SYSTEM_ERROR("SYSTEM_ERROR", "system error");
private ConsoleError(String code, String msg) {
this.code = code;
this.msg = msg;
}
private String code;
private String msg;
@Override
public String getCode() {
return code;
}
@Override
public String getMessage() {
return msg;
}
}
================================================
FILE: tac-console/src/main/java/com/alibaba/tac/console/error/IErrorCode.java
================================================
/*
* MIT License
*
* Copyright (c) 2016 Alibaba Group
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
package com.alibaba.tac.console.error;
/**
* @author jinshuan.li 06/03/2018 12:18
*/
public interface IErrorCode {
String getCode();
String getMessage();
}
================================================
FILE: tac-console/src/main/java/com/alibaba/tac/console/sdk/MenuOptionHandler.java
================================================
/*
* MIT License
*
* Copyright (c) 2016 Alibaba Group
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
package com.alibaba.tac.console.sdk;
import com.alibaba.tac.console.ConsoleConstants;
import com.alibaba.tac.engine.code.CodeCompileService;
import com.alibaba.tac.engine.code.TacFileService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.boot.ApplicationArguments;
import org.springframework.stereotype.Service;
import javax.annotation.PostConstruct;
import javax.annotation.Resource;
import java.io.File;
import java.io.IOException;
import java.util.List;
/**
* @author jinshuan.li 27/02/2018 21:05
*/
@Slf4j
@Service
public class MenuOptionHandler {
@Resource
private ApplicationArguments arguments;
@Resource
private CodeCompileService codeCompileService;
@Resource
private TacFileService tacFileService;
@PostConstruct
public void init() {
}
/**
* handle the menu option
* <p>
* the is just a package command
*
* @throws IOException
*/
public void handleMenuOption() throws IOException {
if (CollectionUtils.isEmpty(arguments.getOptionNames())) {
printUsage();
return;
}
if (arguments.containsOption(ConsoleConstants.MENU_PACKAGE)) {
System.out.println("handleo pacakge");
handlePackage();
}
if (arguments.containsOption(ConsoleConstants.MENU_PUBLISH)) {
//handlePublish();
}
}
/**
* handle compile and package source
*/
protected void handlePackage() {
String msCode = "";
List<String> msCodes = arguments.getOptionValues("msCode");
List<String> srcDirs = arguments.getOptionValues("sourceDir");
if (CollectionUtils.isEmpty(msCodes)) {
printUsage();
return;
}
msCode = msCodes.get(0);
String srcDir = "";
if (CollectionUtils.isEmpty(srcDirs)) {
String absolutePath = new File("").getAbsolutePath();
srcDir = absolutePath;
} else {
srcDir = srcDirs.get(0);
}
try {
// compile
Boolean compile = codeCompileService.compile(msCode, srcDir);
// package
codeCompileService.getJarFile(msCode);
log.info("package success . file:{}", tacFileService.getClassFileOutputPath(msCode) + ".zip");
} catch (Exception e) {
log.error(e.getMessage(), e);
}
}
public static void printUsage() {
System.out.println("useage:");
System.out.println("--package --msCode=${msCode} --sourceDir=${sourceDir}");
// System.out.println("--publish --msCode=${msCode} --zipFile=${zipFile}");
}
}
================================================
FILE: tac-console/src/main/java/com/alibaba/tac/console/web/HomeController.java
================================================
/*
* MIT License
*
* Copyright (c) 2016 Alibaba Group
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
package com.alibaba.tac.console.web;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
/**
* @author jinshuan.li 07/03/2018 17:18
*/
@Controller
@RequestMapping
public class HomeController {
@GetMapping("/")
public String index() {
return "index";
}
}
================================================
FILE: tac-console/src/main/java/com/alibaba/tac/console/web/InstFileRO.java
================================================
/*
* MIT License
*
* Copyright (c) 2016 Alibaba Group
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
package com.alibaba.tac.console.web;
import lombok.Data;
import org.springframework.web.multipart.MultipartFile;
import java.io.Serializable;
/**
* @author jinshuan.li 05/03/2018 20:16
*/
@Data
public class InstFileRO implements Serializable{
private static final long serialVersionUID = -7650755238417075767L;
private String name;
private MultipartFile file;
private Integer age;
}
================================================
FILE: tac-console/src/main/java/com/alibaba/tac/console/web/TacInstController.java
================================================
/*
* MIT License
*
* Copyright (c) 2016 Alibaba Group
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
package com.alibaba.tac.console.web;
import com.alibaba.tac.console.error.ConsoleError;
import com.alibaba.tac.console.web.ro.InstTestRO;
import com.alibaba.tac.engine.inst.domain.TacInst;
import com.alibaba.tac.engine.inst.service.IMsInstFileService;
import com.alibaba.tac.engine.inst.service.IMsInstService;
import com.alibaba.tac.engine.ms.domain.TacMsDO;
import com.alibaba.tac.engine.ms.service.IMsPublisher;
import com.alibaba.tac.engine.ms.service.IMsService;
import com.alibaba.tac.engine.service.TacPublishTestService;
import com.alibaba.tac.engine.code.TacFileService;
import com.alibaba.tac.sdk.common.TacResult;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import java.util.List;
import java.util.Map;
import java.util.Optional;
/**
* @author jinshuan.li 05/03/2018 20:14
*/
@Slf4j
@RestController
@RequestMapping("/api/inst")
public class TacInstController {
@Resource
private IMsService msService;
@Resource
private IMsInstService msInstService;
@Resource
private IMsPublisher msPublisher;
@Resource
private TacPublishTestService tacPublishTestService;
@Resource(name = "prePublishMsInstFileService")
private IMsInstFileService prePublishMsInstFileService;
@PostMapping(value = "/uploadFile")
public TacResult<List<TacMsDO>> uploadFile(@RequestParam("file") MultipartFile instFileRO,
@RequestParam("msCode") String msCode) {
return TacResult.newResult(null);
}
@GetMapping(value = "/info/{msCode}")
public TacResult<TacInst> getMsInst(@PathVariable("msCode") String msCode) {
try {
TacMsDO ms = msService.getMs(msCode);
if (ms == null) {
throw new IllegalArgumentException("the service is not exist");
}
TacInst tacInst = this.getExistTacInst(ms, "");
return TacResult.newResult(tacInst);
} catch (Exception e) {
return TacResult.errorResult(ConsoleError.SYSTEM_ERROR.getCode(), e.getMessage());
}
}
@PostMapping("/create")
public TacResult<TacMsDO> create(@RequestBody TacInst tacInst) {
String msCode = tacInst.getMsCode();
try {
if (StringUtils.isEmpty(msCode)) {
throw new IllegalArgumentException("invalid params");
}
TacMsDO ms = msService.getMs(msCode);
if (ms == null) {
throw new IllegalStateException("the service with code " + msCode + " not exist");
}
String name = tacInst.getName();
String gitBranch = tacInst.getGitBranch();
if (StringUtils.isEmpty(name) || StringUtils.isEmpty(gitBranch)) {
throw new IllegalArgumentException("invalid params");
}
msInstService.createGitTacMsInst(msCode, name, gitBranch);
return TacResult.newResult(ms);
} catch (Exception e) {
return TacResult.errorResult(ConsoleError.SYSTEM_ERROR.getCode(), e.getMessage());
}
}
@PostMapping("/update")
public TacResult<TacMsDO> update(@RequestBody TacInst tacInst) {
String msCode = tacInst.getMsCode();
long instId = tacInst.getId();
try {
if (StringUtils.isEmpty(msCode)) {
throw new IllegalArgumentException("invalid params");
}
TacMsDO ms = msService.getMs(msCode);
if (ms == null) {
throw new IllegalStateException("the service with code " + msCode + " not exist");
}
TacInst tacMsInst = msInstService.getTacMsInst(instId);
if (tacMsInst == null) {
throw new IllegalStateException("inst not exist");
}
String name = tacInst.getName();
String gitBranch = tacInst.getGitBranch();
if (StringUtils.isEmpty(name) || StringUtils.isEmpty(gitBranch)) {
throw new IllegalArgumentException("invalid params");
}
tacMsInst.setGitBranch(gitBranch);
tacMsInst.setName(name);
msInstService.updateTacMsInst(instId, tacMsInst);
return TacResult.newResult(ms);
} catch (Exception e) {
return TacResult.errorResult(ConsoleError.SYSTEM_ERROR.getCode(), e.getMessage());
}
}
@GetMapping(value = "/list/{msCode}")
public TacResult<List<TacInst>> getMsInstList(@PathVariable("msCode") String msCode) {
try {
TacMsDO ms = msService.getMs(msCode);
if (ms == null) {
throw new IllegalArgumentException("the service is not exist");
}
List<TacInst> msInsts = msInstService.getMsInsts(msCode);
Optional.ofNullable(msInsts).ifPresent(items -> {
items.stream().forEach(d -> {
if (d.getStatus() == null) {
d.setStatus(TacInst.STATUS_NEW);
}
});
});
return TacResult.newResult(msInsts);
} catch (Exception e) {
return TacResult.errorResult(ConsoleError.SYSTEM_ERROR.getCode(), e.getMessage());
}
}
private TacInst getExistTacInst(TacMsDO ms, String jarVersion) {
String msCode = ms.getCode();
Long publishedInstId = ms.getPublishedInstId();
TacInst tacMsInst = null;
if (publishedInstId == null || publishedInstId.equals(0)) {
tacMsInst = msInstService.createTacMsInst(msCode, ms.getName(), jarVersion);
// update service data
ms.setPublishedInstId(tacMsInst.getId());
msService.updateMs(msCode, ms);
publishedInstId = ms.getPublishedInstId();
}
tacMsInst = msInstService.getTacMsInst(publishedInstId);
if (tacMsInst == null) {
throw new IllegalStateException("can't find the instance " + publishedInstId);
}
return tacMsInst;
}
@PostMapping(value = "/prePublish")
public TacResult<TacInst> prePublish(@RequestParam("file") MultipartFile instFileRO,
@RequestParam("msCode") String msCode,
@RequestParam(value = "instId", required = false) Long instId) {
try {
byte[] bytes = instFileRO.getBytes();
String md5 = TacFileService.getMd5(bytes);
TacMsDO ms = msService.getMs(msCode);
if (ms == null) {
throw new IllegalArgumentException("the service is not exist");
}
TacInst tacMsInst = this.getExistTacInst(ms, md5);
// prepublish
msPublisher.prePublish(tacMsInst, bytes);
return TacResult.newResult(msInstService.getTacMsInst(tacMsInst.getId()));
} catch (Exception e) {
return TacResult.errorResult(ConsoleError.SYSTEM_ERROR.getCode(), e.getMessage());
}
}
@PostMapping(value = "/publish")
public TacResult<TacInst> publish(@RequestParam("msCode") String msCode,
@RequestParam(value = "instId") Long instId) {
try {
TacInst tacMsInst = msInstService.getTacMsInst(instId);
if (tacMsInst == null) {
throw new IllegalArgumentException("the instance is not exist " + instId);
}
if (!StringUtils.equalsIgnoreCase(tacMsInst.getMsCode(), msCode)) {
throw new IllegalArgumentException("the msCode is not match");
}
// 取预发布的数据
byte[] instanceFile = prePublishMsInstFileService.getInstanceFile(instId);
if (instanceFile == null) {
throw new IllegalStateException("can't find prePublish data");
}
// 正式发布
msPublisher.publish(tacMsInst, instanceFile);
} catch (Exception e) {
return TacResult.errorResult(ConsoleError.SYSTEM_ERROR.getCode(), e.getMessage());
}
return TacResult.newResult(null);
}
@PostMapping(value = "/preTest")
public TacResult<Object> preTest(@RequestBody InstTestRO instTestRO) {
Long instId = instTestRO.getInstId();
Map<String, Object> params = instTestRO.getParams();
try {
TacResult<Object> result = tacPublishTestService.prePublishTest(instId, instTestRO.getMsCode(),
params);
TacResult<Object> response = new TacResult<>(result);
return response;
} catch (Exception e) {
log.info("preTest error. {} {}", instTestRO, e.getMessage(), e);
return TacResult.errorResult(ConsoleError.SYSTEM_ERROR.getCode(), e.getMessage());
}
}
@PostMapping(value = "/onlineTest")
public TacResult<?> onlineTest(@RequestBody InstTestRO instTestRO) {
Long instId = instTestRO.getInstId();
Map<String, Object> params = instTestRO.getParams();
try {
TacResult<?> result = tacPublishTestService.onlinePublishTest(instId, instTestRO.getMsCode(), params);
return result;
} catch (Exception e) {
log.info("preTest error. {} {}", instTestRO, e.getMessage(), e);
return TacResult.errorResult(ConsoleError.SYSTEM_ERROR.getCode(), e.getMessage());
}
}
@GetMapping(value = "/gitPrePublish")
public TacResult<TacInst> prePublish(@RequestParam(value = "instId") Long instId) {
try {
TacInst tacMsInst = msInstService.getTacMsInst(instId);
if (tacMsInst == null) {
throw new IllegalArgumentException("inst not exist");
}
TacMsDO ms = msService.getMs(tacMsInst.getMsCode());
if (ms == null) {
throw new IllegalArgumentException("ms not eist");
}
tacMsInst = msPublisher.gitPrePublish(ms, tacMsInst);
return TacResult.newResult(tacMsInst);
} catch (Exception e) {
return TacResult.errorResult(ConsoleError.SYSTEM_ERROR.getCode(), e.getMessage());
}
}
}
================================================
FILE: tac-console/src/main/java/com/alibaba/tac/console/web/TacMsController.java
================================================
/*
* MIT License
*
* Copyright (c) 2016 Alibaba Group
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
package com.alibaba.tac.console.web;
import com.alibaba.tac.console.error.ConsoleError;
import com.alibaba.tac.engine.ms.domain.TacMsDO;
import com.alibaba.tac.engine.ms.service.IMsService;
import com.alibaba.tac.sdk.common.TacResult;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.List;
/**
* @author jinshuan.li 05/03/2018 19:30
*/
@RestController
@RequestMapping("/api/ms")
public class TacMsController {
@Resource
private IMsService msService;
@GetMapping("/list")
public TacResult<List<TacMsDO>> list() {
List<TacMsDO> allMs = msService.getAllMs();
return TacResult.newResult(allMs);
}
@PostMapping("/create")
public TacResult<TacMsDO> create(@RequestBody TacMsDO tacMsDO) {
try {
TacMsDO ms = msService.getMs(tacMsDO.getCode());
if (ms != null) {
throw new IllegalStateException("the service with code " + tacMsDO.getCode() + " already exist");
}
ms = msService.createMs(tacMsDO);
return TacResult.newResult(ms);
} catch (Exception e) {
return TacResult.errorResult(ConsoleError.SYSTEM_ERROR.getCode(), e.getMessage());
}
}
@PostMapping("/update")
public TacResult<TacMsDO> update(@RequestBody TacMsDO tacMsDO) {
try {
msService.checkMsDO(tacMsDO);
TacMsDO ms = msService.getMs(tacMsDO.getCode());
if (ms == null) {
throw new IllegalStateException("该服务不存在");
}
ms.setName(tacMsDO.getName());
ms.setGitSupport(tacMsDO.getGitSupport());
ms.setGitRepo(tacMsDO.getGitRepo());
msService.updateMs(tacMsDO.getCode(), ms);
return TacResult.newResult(tacMsDO);
} catch (Exception e) {
return TacResult.errorResult("system", e.getMessage());
}
}
@PostMapping("/offline")
public TacResult<Boolean> offline(@RequestParam("msCode") String msCode) {
throw new UnsupportedOperationException("不支持该功能");
}
}
================================================
FILE: tac-console/src/main/java/com/alibaba/tac/console/web/ro/InstTestRO.java
================================================
/*
* MIT License
*
* Copyright (c) 2016 Alibaba Group
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
package com.alibaba.tac.console.web.ro;
import lombok.Data;
import java.io.Serializable;
import java.util.Map;
/**
* @author jinshuan.li 06/03/2018 14:21
*/
@Data
public class InstTestRO implements Serializable {
private Long instId;
private String msCode;
private Map<String, Object> params;
}
================================================
FILE: tac-console/src/main/resources/application-admin.properties
================================================
# the properites when run in admin model
name.simple=tac-admin
# the scan packages , don't change it if necessary
tac.app.scan.packages=com.alibaba.tac
================================================
FILE: tac-console/src/main/resources/application-simple.properties
================================================
# the properites when run in command model
name.simple=tac-simple
# the scan packages , don't change it if necessary
tac.app.scan.packages=com.alibaba.tac.console.sdk,com.alibaba.tac.engine.code,com.alibaba.tac.engine.compile
================================================
FILE: tac-console/src/main/resources/application.properties
================================================
# the port when use web model
server.port=7001
# scan the extend package names
scan.package.name=com.tmall.itemcenter
# the location of extend jars
tac.extend.lib=extendlibs
# the default store , when use "redis" you should install and config redis server , use "zookeeper" you should install and config zookeeper server
tac.default.store=redis
# the location of logback config file
logging.config=classpath:tac/default-logback-spring.xml
# the http url prefix when you run the tac-container, the is used to online publish check;
tac.container.web.api=http://localhost:8001/api/tac/execute
tac.app.scan.packages=com.alibaba.tac
================================================
FILE: tac-console/src/main/resources/static/css/app.797406e2fb84b15ea0b383ad60572f28.css
================================================
#app{font-family:Avenir,Helvetica,Arial,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-align:center;color:#2c3e50}h1[data-v-afa07f3c],h2[data-v-afa07f3c]{font-weight:400}ul[data-v-afa07f3c]{list-style-type:none;padding:0}li[data-v-afa07f3c]{display:inline-block;margin:0 10px}a[data-v-afa07f3c]{color:#42b983}.tacMs[data-v-7b1ca360]{text-align:left}.tacInst[data-v-3bfbdc0d]{text-align:left;padding:30px}.logResult[data-v-13be33e9]{background-color:#000;color:#ff0;padding:30px;max-height:600px;overflow:scroll}/*!
* Bootstrap v4.0.0 (https://getbootstrap.com)
* Copyright 2011-2018 The Bootstrap Authors
* Copyright 2011-2018 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
*/:root{--blue:#007bff;--indigo:#6610f2;--purple:#6f42c1;--pink:#e83e8c;--red:#dc3545;--orange:#fd7e14;--yellow:#ffc107;--green:#28a745;--teal:#20c997;--cyan:#17a2b8;--white:#fff;--gray:#6c757d;--gray-dark:#343a40;--primary:#007bff;--secondary:#6c757d;--success:#28a745;--info:#17a2b8;--warning:#ffc107;--danger:#dc3545;--light:#f8f9fa;--dark:#343a40;--breakpoint-xs:0;--breakpoint-sm:576px;--breakpoint-md:768px;--breakpoint-lg:992px;--breakpoint-xl:1200px;--font-family-sans-serif:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";--font-family-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace}*,:after,:before{box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;-ms-overflow-style:scrollbar;-webkit-tap-highlight-color:transparent}@-ms-viewport{width:device-width}article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif;font-size:1rem;font-weight:400;line-height:1.5;color:#212529;text-align:left;background-color:#fff}[tabindex="-1"]:focus{outline:0!important}hr{box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem}p{margin-top:0;margin-bottom:1rem}abbr[data-original-title],abbr[title]{text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;border-bottom:0}address{font-style:normal;line-height:inherit}address,dl,ol,ul{margin-bottom:1rem}dl,ol,ul{margin-top:0}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}dfn{font-style:italic}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#007bff;text-decoration:none;background-color:transparent;-webkit-text-decoration-skip:objects}a:hover{color:#0056b3;text-decoration:underline}a:not([href]):not([tabindex]),a:not([href]):not([tabindex]):focus,a:not([href]):not([tabindex]):hover{color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus{outline:0}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}pre{margin-top:0;margin-bottom:1rem;overflow:auto;-ms-overflow-style:scrollbar}figure{margin:0 0 1rem}img{vertical-align:middle;border-style:none}svg:not(:root){overflow:hidden}table{border-collapse:collapse}caption{padding-top:.75rem;padding-bottom:.75rem;color:#6c757d;text-align:left;caption-side:bottom}th{text-align:inherit}label{display:inline-block;margin-bottom:.5rem}button{border-radius:0}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}[type=reset],[type=submit],button,html [type=button]{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{padding:0;border-style:none}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=date],input[type=datetime-local],input[type=month],input[type=time]{-webkit-appearance:listbox}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;max-width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}progress{vertical-align:baseline}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:none}[type=search]::-webkit-search-cancel-button,[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item;cursor:pointer}template{display:none}[hidden]{display:none!important}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{margin-bottom:.5rem;font-family:inherit;font-weight:500;line-height:1.2;color:inherit}.h1,h1{font-size:2.5rem}.h2,h2{font-size:2rem}.h3,h3{font-size:1.75rem}.h4,h4{font-size:1.5rem}.h5,h5{font-size:1.25rem}.h6,h6{font-size:1rem}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:6rem}.display-1,.display-2{font-weight:300;line-height:1.2}.display-2{font-size:5.5rem}.display-3{font-size:4.5rem}.display-3,.display-4{font-weight:300;line-height:1.2}.display-4{font-size:3.5rem}hr{margin-top:1rem;margin-bottom:1rem;border:0;border-top:1px solid rgba(0,0,0,.1)}.small,small{font-size:80%;font-weight:400}.mark,mark{padding:.2em;background-color:#fcf8e3}.list-inline,.list-unstyled{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:90%;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.25rem}.blockquote-footer{display:block;font-size:80%;color:#6c757d}.blockquote-footer:before{content:"\2014 \A0"}.img-fluid,.img-thumbnail{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:#fff;border:1px solid #dee2e6;border-radius:.25rem}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:90%;color:#6c757d}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}code{font-size:87.5%;color:#e83e8c;word-break:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:87.5%;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:100%;font-weight:700}pre{display:block;font-size:87.5%;color:#212529}pre code{font-size:inherit;color:inherit;word-break:normal}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:576px){.container{max-width:540px}}@media (min-width:768px){.container{max-width:720px}}@media (min-width:992px){.container{max-width:960px}}@media (min-width:1200px){.container{max-width:1140px}}.container-fluid{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-15px;margin-left:-15px}.no-gutters{margin-right:0;margin-left:0}.no-gutters>.col,.no-gutters>[class*=col-]{padding-right:0;padding-left:0}.col,.col-1,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-10,.col-11,.col-12,.col-auto,.col-lg,.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,.col-lg-auto,.col-md,.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,.col-md-auto,.col-sm,.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,.col-sm-auto,.col-xl,.col-xl-1,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl-auto{position:relative;width:100%;min-height:1px;padding-right:15px;padding-left:15px}.col{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-1,.col-auto{-webkit-box-flex:0}.col-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-2,.col-3{-webkit-box-flex:0}.col-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-4,.col-5{-webkit-box-flex:0}.col-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-6,.col-7{-webkit-box-flex:0}.col-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-8,.col-9{-webkit-box-flex:0}.col-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-10,.col-11{-webkit-box-flex:0}.col-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-first{-ms-flex-order:-1;order:-1}.order-last{-ms-flex-order:13;order:13}.order-0{-ms-flex-order:0;order:0}.order-1{-ms-flex-order:1;order:1}.order-2{-ms-flex-order:2;order:2}.order-3{-ms-flex-order:3;order:3}.order-4{-ms-flex-order:4;order:4}.order-5{-ms-flex-order:5;order:5}.order-6{-ms-flex-order:6;order:6}.order-7{-ms-flex-order:7;order:7}.order-8{-ms-flex-order:8;order:8}.order-9{-ms-flex-order:9;order:9}.order-10{-ms-flex-order:10;order:10}.order-11{-ms-flex-order:11;order:11}.order-12{-ms-flex-order:12;order:12}.offset-1{margin-left:8.333333%}.offset-2{margin-left:16.666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.333333%}.offset-5{margin-left:41.666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.333333%}.offset-8{margin-left:66.666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.333333%}.offset-11{margin-left:91.666667%}@media (min-width:576px){.col-sm{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-sm-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-sm-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-sm-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-sm-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-sm-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-sm-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-sm-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-sm-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-sm-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-sm-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-sm-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-sm-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-sm-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-sm-first{-ms-flex-order:-1;order:-1}.order-sm-last{-ms-flex-order:13;order:13}.order-sm-0{-ms-flex-order:0;order:0}.order-sm-1{-ms-flex-order:1;order:1}.order-sm-2{-ms-flex-order:2;order:2}.order-sm-3{-ms-flex-order:3;order:3}.order-sm-4{-ms-flex-order:4;order:4}.order-sm-5{-ms-flex-order:5;order:5}.order-sm-6{-ms-flex-order:6;order:6}.order-sm-7{-ms-flex-order:7;order:7}.order-sm-8{-ms-flex-order:8;order:8}.order-sm-9{-ms-flex-order:9;order:9}.order-sm-10{-ms-flex-order:10;order:10}.order-sm-11{-ms-flex-order:11;order:11}.order-sm-12{-ms-flex-order:12;order:12}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.333333%}.offset-sm-2{margin-left:16.666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.333333%}.offset-sm-5{margin-left:41.666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.333333%}.offset-sm-8{margin-left:66.666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.333333%}.offset-sm-11{margin-left:91.666667%}}@media (min-width:768px){.col-md{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-md-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-md-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-md-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-md-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-md-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-md-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-md-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-md-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-md-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-md-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-md-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-md-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-md-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-md-first{-ms-flex-order:-1;order:-1}.order-md-last{-ms-flex-order:13;order:13}.order-md-0{-ms-flex-order:0;order:0}.order-md-1{-ms-flex-order:1;order:1}.order-md-2{-ms-flex-order:2;order:2}.order-md-3{-ms-flex-order:3;order:3}.order-md-4{-ms-flex-order:4;order:4}.order-md-5{-ms-flex-order:5;order:5}.order-md-6{-ms-flex-order:6;order:6}.order-md-7{-ms-flex-order:7;order:7}.order-md-8{-ms-flex-order:8;order:8}.order-md-9{-ms-flex-order:9;order:9}.order-md-10{-ms-flex-order:10;order:10}.order-md-11{-ms-flex-order:11;order:11}.order-md-12{-ms-flex-order:12;order:12}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.333333%}.offset-md-2{margin-left:16.666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.333333%}.offset-md-5{margin-left:41.666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.333333%}.offset-md-8{margin-left:66.666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.333333%}.offset-md-11{margin-left:91.666667%}}@media (min-width:992px){.col-lg{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-lg-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-lg-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-lg-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-lg-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-lg-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-lg-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-lg-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-lg-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-lg-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-lg-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-lg-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-lg-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-lg-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-lg-first{-ms-flex-order:-1;order:-1}.order-lg-last{-ms-flex-order:13;order:13}.order-lg-0{-ms-flex-order:0;order:0}.order-lg-1{-ms-flex-order:1;order:1}.order-lg-2{-ms-flex-order:2;order:2}.order-lg-3{-ms-flex-order:3;order:3}.order-lg-4{-ms-flex-order:4;order:4}.order-lg-5{-ms-flex-order:5;order:5}.order-lg-6{-ms-flex-order:6;order:6}.order-lg-7{-ms-flex-order:7;order:7}.order-lg-8{-ms-flex-order:8;order:8}.order-lg-9{-ms-flex-order:9;order:9}.order-lg-10{-ms-flex-order:10;order:10}.order-lg-11{-ms-flex-order:11;order:11}.order-lg-12{-ms-flex-order:12;order:12}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.333333%}.offset-lg-2{margin-left:16.666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.333333%}.offset-lg-5{margin-left:41.666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.333333%}.offset-lg-8{margin-left:66.666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.333333%}.offset-lg-11{margin-left:91.666667%}}@media (min-width:1200px){.col-xl{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-xl-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-xl-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-xl-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-xl-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-xl-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-xl-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-xl-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-xl-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-xl-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-xl-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-xl-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-xl-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-xl-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-xl-first{-ms-flex-order:-1;order:-1}.order-xl-last{-ms-flex-order:13;order:13}.order-xl-0{-ms-flex-order:0;order:0}.order-xl-1{-ms-flex-order:1;order:1}.order-xl-2{-ms-flex-order:2;order:2}.order-xl-3{-ms-flex-order:3;order:3}.order-xl-4{-ms-flex-order:4;order:4}.order-xl-5{-ms-flex-order:5;order:5}.order-xl-6{-ms-flex-order:6;order:6}.order-xl-7{-ms-flex-order:7;order:7}.order-xl-8{-ms-flex-order:8;order:8}.order-xl-9{-ms-flex-order:9;order:9}.order-xl-10{-ms-flex-order:10;order:10}.order-xl-11{-ms-flex-order:11;order:11}.order-xl-12{-ms-flex-order:12;order:12}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.333333%}.offset-xl-2{margin-left:16.666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.333333%}.offset-xl-5{margin-left:41.666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.333333%}.offset-xl-8{margin-left:66.666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.333333%}.offset-xl-11{margin-left:91.666667%}}.table{width:100%;max-width:100%;margin-bottom:1rem;background-color:transparent}.table td,.table th{padding:.75rem;vertical-align:top;border-top:1px solid #dee2e6}.table thead th{vertical-align:bottom;border-bottom:2px solid #dee2e6}.table tbody+tbody{border-top:2px solid #dee2e6}.table .table{background-color:#fff}.table-sm td,.table-sm th{padding:.3rem}.table-bordered,.table-bordered td,.table-bordered th{border:1px solid #dee2e6}.table-bordered thead td,.table-bordered thead th{border-bottom-width:2px}.table-striped tbody tr:nth-of-type(odd){background-color:rgba(0,0,0,.05)}.table-hover tbody tr:hover{background-color:rgba(0,0,0,.075)}.table-primary,.table-primary>td,.table-primary>th{background-color:#b8daff}.table-hover .table-primary:hover,.table-hover .table-primary:hover>td,.table-hover .table-primary:hover>th{background-color:#9fcdff}.table-secondary,.table-secondary>td,.table-secondary>th{background-color:#d6d8db}.table-hover .table-secondary:hover,.table-hover .table-secondary:hover>td,.table-hover .table-secondary:hover>th{background-color:#c8cbcf}.table-success,.table-success>td,.table-success>th{background-color:#c3e6cb}.table-hover .table-success:hover,.table-hover .table-success:hover>td,.table-hover .table-success:hover>th{background-color:#b1dfbb}.table-info,.table-info>td,.table-info>th{background-color:#bee5eb}.table-hover .table-info:hover,.table-hover .table-info:hover>td,.table-hover .table-info:hover>th{background-color:#abdde5}.table-warning,.table-warning>td,.table-warning>th{background-color:#ffeeba}.table-hover .table-warning:hover,.table-hover .table-warning:hover>td,.table-hover .table-warning:hover>th{background-color:#ffe8a1}.table-danger,.table-danger>td,.table-danger>th{background-color:#f5c6cb}.table-hover .table-danger:hover,.table-hover .table-danger:hover>td,.table-hover .table-danger:hover>th{background-color:#f1b0b7}.table-light,.table-light>td,.table-light>th{background-color:#fdfdfe}.table-hover .table-light:hover,.table-hover .table-light:hover>td,.table-hover .table-light:hover>th{background-color:#ececf6}.table-dark,.table-dark>td,.table-dark>th{background-color:#c6c8ca}.table-hover .table-dark:hover,.table-hover .table-dark:hover>td,.table-hover .table-dark:hover>th{background-color:#b9bbbe}.table-active,.table-active>td,.table-active>th,.table-hover .table-active:hover,.table-hover .table-active:hover>td,.table-hover .table-active:hover>th{background-color:rgba(0,0,0,.075)}.table .thead-dark th{color:#fff;background-color:#212529;border-color:#32383e}.table .thead-light th{color:#495057;background-color:#e9ecef;border-color:#dee2e6}.table-dark{color:#fff;background-color:#212529}.table-dark td,.table-dark th,.table-dark thead th{border-color:#32383e}.table-dark.table-bordered{border:0}.table-dark.table-striped tbody tr:nth-of-type(odd){background-color:hsla(0,0%,100%,.05)}.table-dark.table-hover tbody tr:hover{background-color:hsla(0,0%,100%,.075)}@media (max-width:575.98px){.table-responsive-sm{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-sm>.table-bordered{border:0}}@media (max-width:767.98px){.table-responsive-md{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-md>.table-bordered{border:0}}@media (max-width:991.98px){.table-responsive-lg{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-lg>.table-bordered{border:0}}@media (max-width:1199.98px){.table-responsive-xl{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-xl>.table-bordered{border:0}}.table-responsive{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive>.table-bordered{border:0}.form-control{display:block;width:100%;padding:.375rem .75rem;font-size:1rem;line-height:1.5;color:#495057;background-color:#fff;background-clip:padding-box;border:1px solid #ced4da;border-radius:.25rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}.form-control::-ms-expand{background-color:transparent;border:0}.form-control:focus{color:#495057;background-color:#fff;border-color:#80bdff;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.form-control::-webkit-input-placeholder{color:#6c757d;opacity:1}.form-control:-ms-input-placeholder,.form-control::-ms-input-placeholder{color:#6c757d;opacity:1}.form-control::placeholder{color:#6c757d;opacity:1}.form-control:disabled,.form-control[readonly]{background-color:#e9ecef;opacity:1}select.form-control:not([size]):not([multiple]){height:calc(2.25rem + 2px)}select.form-control:focus::-ms-value{color:#495057;background-color:#fff}.form-control-file,.form-control-range{display:block;width:100%}.col-form-label{padding-top:calc(.375rem + 1px);padding-bottom:calc(.375rem + 1px);margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(.5rem + 1px);padding-bottom:calc(.5rem + 1px);font-size:1.25rem;line-height:1.5}.col-form-label-sm{padding-top:calc(.25rem + 1px);padding-bottom:calc(.25rem + 1px);font-size:.875rem;line-height:1.5}.form-control-plaintext{display:block;width:100%;padding-top:.375rem;padding-bottom:.375rem;margin-bottom:0;line-height:1.5;background-color:transparent;border:solid transparent;border-width:1px 0}.form-control-plaintext.form-control-lg,.form-control-plaintext.form-control-sm,.input-group-lg>.form-control-plaintext.form-control,.input-group-lg>.input-group-append>.form-control-plaintext.btn,.input-group-lg>.input-group-append>.form-control-plaintext.input-group-text,.input-group-lg>.input-group-prepend>.form-control-plaintext.btn,.input-group-lg>.input-group-prepend>.form-control-plaintext.input-group-text,.input-group-sm>.form-control-plaintext.form-control,.input-group-sm>.input-group-append>.form-control-plaintext.btn,.input-group-sm>.input-group-append>.form-control-plaintext.input-group-text,.input-group-sm>.input-group-prepend>.form-control-plaintext.btn,.input-group-sm>.input-group-prepend>.form-control-plaintext.input-group-text{padding-right:0;padding-left:0}.form-control-sm,.input-group-sm>.form-control,.input-group-sm>.input-group-append>.btn,.input-group-sm>.input-group-append>.input-group-text,.input-group-sm>.input-group-prepend>.btn,.input-group-sm>.input-group-prepend>.input-group-text{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.input-group-sm>.input-group-append>select.btn:not([size]):not([multiple]),.input-group-sm>.input-group-append>select.input-group-text:not([size]):not([multiple]),.input-group-sm>.input-group-prepend>select.btn:not([size]):not([multiple]),.input-group-sm>.input-group-prepend>select.input-group-text:not([size]):not([multiple]),.input-group-sm>select.form-control:not([size]):not([multiple]),select.form-control-sm:not([size]):not([multiple]){height:calc(1.8125rem + 2px)}.form-control-lg,.input-group-lg>.form-control,.input-group-lg>.input-group-append>.btn,.input-group-lg>.input-group-append>.input-group-text,.input-group-lg>.input-group-prepend>.btn,.input-group-lg>.input-group-prepend>.input-group-text{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.input-group-lg>.input-group-append>select.btn:not([size]):not([multiple]),.input-group-lg>.input-group-append>select.input-group-text:not([size]):not([multiple]),.input-group-lg>.input-group-prepend>select.btn:not([size]):not([multiple]),.input-group-lg>.input-group-prepend>select.input-group-text:not([size]):not([multiple]),.input-group-lg>select.form-control:not([size]):not([multiple]),select.form-control-lg:not([size]):not([multiple]){height:calc(2.875rem + 2px)}.form-group{margin-bottom:1rem}.form-text{display:block;margin-top:.25rem}.form-row{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-5px;margin-left:-5px}.form-row>.col,.form-row>[class*=col-]{padding-right:5px;padding-left:5px}.form-check{position:relative;display:block;padding-left:1.25rem}.form-check-input{position:absolute;margin-top:.3rem;margin-left:-1.25rem}.form-check-input:disabled~.form-check-label{color:#6c757d}.form-check-label{margin-bottom:0}.form-check-inline{display:-ms-inline-flexbox;display:inline-flex;-ms-flex-align:center;align-items:center;padding-left:0;margin-right:.75rem}.form-check-inline .form-check-input{position:static;margin-top:0;margin-right:.3125rem;margin-left:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#28a745}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.5rem;margin-top:.1rem;font-size:.875rem;line-height:1;color:#fff;background-color:rgba(40,167,69,.8);border-radius:.2rem}.custom-select.is-valid,.form-control.is-valid,.was-validated .custom-select:valid,.was-validated .form-control:valid{border-color:#28a745}.custom-select.is-valid:focus,.form-control.is-valid:focus,.was-validated .custom-select:valid:focus,.was-validated .form-control:valid:focus{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.custom-select.is-valid~.valid-feedback,.custom-select.is-valid~.valid-tooltip,.form-control.is-valid~.valid-feedback,.form-control.is-valid~.valid-tooltip,.was-validated .custom-select:valid~.valid-feedback,.was-validated .custom-select:valid~.valid-tooltip,.was-validated .form-control:valid~.valid-feedback,.was-validated .form-control:valid~.valid-tooltip{display:block}.form-check-input.is-valid~.form-check-label,.was-validated .form-check-input:valid~.form-check-label{color:#28a745}.form-check-input.is-valid~.valid-feedback,.form-check-input.is-valid~.valid-tooltip,.was-validated .form-check-input:valid~.valid-feedback,.was-validated .form-check-input:valid~.valid-tooltip{display:block}.custom-control-input.is-valid~.custom-control-label,.was-validated .custom-control-input:valid~.custom-control-label{color:#28a745}.custom-control-input.is-valid~.custom-control-label:before,.was-validated .custom-control-input:valid~.custom-control-label:before{background-color:#71dd8a}.custom-control-input.is-valid~.valid-feedback,.custom-control-input.is-valid~.valid-tooltip,.was-validated .custom-control-input:valid~.valid-feedback,.was-validated .custom-control-input:valid~.valid-tooltip{display:block}.custom-control-input.is-valid:checked~.custom-control-label:before,.was-validated .custom-control-input:valid:checked~.custom-control-label:before{background-color:#34ce57}.custom-control-input.is-valid:focus~.custom-control-label:before,.was-validated .custom-control-input:valid:focus~.custom-control-label:before{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(40,167,69,.25)}.custom-file-input.is-valid~.custom-file-label,.was-validated .custom-file-input:valid~.custom-file-label{border-color:#28a745}.custom-file-input.is-valid~.custom-file-label:before,.was-validated .custom-file-input:valid~.custom-file-label:before{border-color:inherit}.custom-file-input.is-valid~.valid-feedback,.custom-file-input.is-valid~.valid-tooltip,.was-validated .custom-file-input:valid~.valid-feedback,.was-validated .custom-file-input:valid~.valid-tooltip{display:block}.custom-file-input.is-valid:focus~.custom-file-label,.was-validated .custom-file-input:valid:focus~.custom-file-label{box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#dc3545}.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.5rem;margin-top:.1rem;font-size:.875rem;line-height:1;color:#fff;background-color:rgba(220,53,69,.8);border-radius:.2rem}.custom-select.is-invalid,.form-control.is-invalid,.was-validated .custom-select:invalid,.was-validated .form-control:invalid{border-color:#dc3545}.custom-select.is-invalid:focus,.form-control.is-invalid:focus,.was-validated .custom-select:invalid:focus,.was-validated .form-control:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.custom-select.is-invalid~.invalid-feedback,.custom-select.is-invalid~.invalid-tooltip,.form-control.is-invalid~.invalid-feedback,.form-control.is-invalid~.invalid-tooltip,.was-validated .custom-select:invalid~.invalid-feedback,.was-validated .custom-select:invalid~.invalid-tooltip,.was-validated .form-control:invalid~.invalid-feedback,.was-validated .form-control:invalid~.invalid-tooltip{display:block}.form-check-input.is-invalid~.form-check-label,.was-validated .form-check-input:invalid~.form-check-label{color:#dc3545}.form-check-input.is-invalid~.invalid-feedback,.form-check-input.is-invalid~.invalid-tooltip,.was-validated .form-check-input:invalid~.invalid-feedback,.was-validated .form-check-input:invalid~.invalid-tooltip{display:block}.custom-control-input.is-invalid~.custom-control-label,.was-validated .custom-control-input:invalid~.custom-control-label{color:#dc3545}.custom-control-input.is-invalid~.custom-control-label:before,.was-validated .custom-control-input:invalid~.custom-control-label:before{background-color:#efa2a9}.custom-control-input.is-invalid~.invalid-feedback,.custom-control-input.is-invalid~.invalid-tooltip,.was-validated .custom-control-input:invalid~.invalid-feedback,.was-validated .custom-control-input:invalid~.invalid-tooltip{display:block}.custom-control-input.is-invalid:checked~.custom-control-label:before,.was-validated .custom-control-input:invalid:checked~.custom-control-label:before{background-color:#e4606d}.custom-control-input.is-invalid:focus~.custom-control-label:before,.was-validated .custom-control-input:invalid:focus~.custom-control-label:before{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(220,53,69,.25)}.custom-file-input.is-invalid~.custom-file-label,.was-validated .custom-file-input:invalid~.custom-file-label{border-color:#dc3545}.custom-file-input.is-invalid~.custom-file-label:before,.was-validated .custom-file-input:invalid~.custom-file-label:before{border-color:inherit}.custom-file-input.is-invalid~.invalid-feedback,.custom-file-input.is-invalid~.invalid-tooltip,.was-validated .custom-file-input:invalid~.invalid-feedback,.was-validated .custom-file-input:invalid~.invalid-tooltip{display:block}.custom-file-input.is-invalid:focus~.custom-file-label,.was-validated .custom-file-input:invalid:focus~.custom-file-label{box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.form-inline{display:-ms-flexbox;display:flex;-ms-flex-flow:row wrap;flex-flow:row wrap;-ms-flex-align:center;align-items:center}.form-inline .form-check{width:100%}@media (min-width:576px){.form-inline label{-ms-flex-align:center;-ms-flex-pack:center;justify-content:center}.form-inline .form-group,.form-inline label{display:-ms-flexbox;display:flex;align-items:center;margin-bottom:0}.form-inline .form-group{-ms-flex:0 0 auto;flex:0 0 auto;-ms-flex-flow:row wrap;flex-flow:row wrap;-ms-flex-align:center}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-plaintext{display:inline-block}.form-inline .input-group{width:auto}.form-inline .form-check{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;width:auto;padding-left:0}.form-inline .form-check-input{position:relative;margin-top:0;margin-right:.25rem;margin-left:0}.form-inline .custom-control{-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center}.form-inline .custom-control-label{margin-bottom:0}}.btn{display:inline-block;font-weight:400;text-align:center;white-space:nowrap;vertical-align:middle;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;border:1px solid transparent;padding:.375rem .75rem;font-size:1rem;line-height:1.5;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}.btn:focus,.btn:hover{text-decoration:none}.btn.focus,.btn:focus{outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.btn.disabled,.btn:disabled{opacity:.65}.btn:not(:disabled):not(.disabled){cursor:pointer}.btn:not(:disabled):not(.disabled).active,.btn:not(:disabled):not(.disabled):active{background-image:none}a.btn.disabled,fieldset:disabled a.btn{pointer-events:none}.btn-primary{color:#fff;background-color:#007bff;border-color:#007bff}.btn-primary:hover{color:#fff;background-color:#0069d9;border-color:#0062cc}.btn-primary.focus,.btn-primary:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-primary.disabled,.btn-primary:disabled{color:#fff;background-color:#007bff;border-color:#007bff}.btn-primary:not(:disabled):not(.disabled).active,.btn-primary:not(:disabled):not(.disabled):active,.show>.btn-primary.dropdown-toggle{color:#fff;background-color:#0062cc;border-color:#005cbf}.btn-primary:not(:disabled):not(.disabled).active:focus,.btn-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-secondary{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:hover{color:#fff;background-color:#5a6268;border-color:#545b62}.btn-secondary.focus,.btn-secondary:focus{box-shadow:0 0 0 .2rem hsla(208,7%,46%,.5)}.btn-secondary.disabled,.btn-secondary:disabled{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:not(:disabled):not(.disabled).active,.btn-secondary:not(:disabled):not(.disabled):active,.show>.btn-secondary.dropdown-toggle{color:#fff;background-color:#545b62;border-color:#4e555b}.btn-secondary:not(:disabled):not(.disabled).active:focus,.btn-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem hsla(208,7%,46%,.5)}.btn-success{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success:hover{color:#fff;background-color:#218838;border-color:#1e7e34}.btn-success.focus,.btn-success:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-success.disabled,.btn-success:disabled{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success:not(:disabled):not(.disabled).active,.btn-success:not(:disabled):not(.disabled):active,.show>.btn-success.dropdown-toggle{color:#fff;background-color:#1e7e34;border-color:#1c7430}.btn-success:not(:disabled):not(.disabled).active:focus,.btn-success:not(:disabled):not(.disabled):active:focus,.show>.btn-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-info{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:hover{color:#fff;background-color:#138496;border-color:#117a8b}.btn-info.focus,.btn-info:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-info.disabled,.btn-info:disabled{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:not(:disabled):not(.disabled).active,.btn-info:not(:disabled):not(.disabled):active,.show>.btn-info.dropdown-toggle{color:#fff;background-color:#117a8b;border-color:#10707f}.btn-info:not(:disabled):not(.disabled).active:focus,.btn-info:not(:disabled):not(.disabled):active:focus,.show>.btn-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-warning{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:hover{color:#212529;background-color:#e0a800;border-color:#d39e00}.btn-warning.focus,.btn-warning:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-warning.disabled,.btn-warning:disabled{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:not(:disabled):not(.disabled).active,.btn-warning:not(:disabled):not(.disabled):active,.show>.btn-warning.dropdown-toggle{color:#212529;background-color:#d39e00;border-color:#c69500}.btn-warning:not(:disabled):not(.disabled).active:focus,.btn-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-danger{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:hover{color:#fff;background-color:#c82333;border-color:#bd2130}.btn-danger.focus,.btn-danger:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-danger.disabled,.btn-danger:disabled{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:not(:disabled):not(.disabled).active,.btn-danger:not(:disabled):not(.disabled):active,.show>.btn-danger.dropdown-toggle{color:#fff;background-color:#bd2130;border-color:#b21f2d}.btn-danger:not(:disabled):not(.disabled).active:focus,.btn-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-light{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:hover{color:#212529;background-color:#e2e6ea;border-color:#dae0e5}.btn-light.focus,.btn-light:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-light.disabled,.btn-light:disabled{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:not(:disabled):not(.disabled).active,.btn-light:not(:disabled):not(.disabled):active,.show>.btn-light.dropdown-toggle{color:#212529;background-color:#dae0e5;border-color:#d3d9df}.btn-light:not(:disabled):not(.disabled).active:focus,.btn-light:not(:disabled):not(.disabled):active:focus,.show>.btn-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-dark{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:hover{color:#fff;background-color:#23272b;border-color:#1d2124}.btn-dark.focus,.btn-dark:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-dark.disabled,.btn-dark:disabled{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:not(:disabled):not(.disabled).active,.btn-dark:not(:disabled):not(.disabled):active,.show>.btn-dark.dropdown-toggle{color:#fff;background-color:#1d2124;border-color:#171a1d}.btn-dark:not(:disabled):not(.disabled).active:focus,.btn-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-outline-primary{color:#007bff;background-color:transparent;background-image:none;border-color:#007bff}.btn-outline-primary:hover{color:#fff;background-color:#007bff;border-color:#007bff}.btn-outline-primary.focus,.btn-outline-primary:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-outline-primary.disabled,.btn-outline-primary:disabled{color:#007bff;background-color:transparent}.btn-outline-primary:not(:disabled):not(.disabled).active,.btn-outline-primary:not(:disabled):not(.disabled):active,.show>.btn-outline-primary.dropdown-toggle{color:#fff;background-color:#007bff;border-color:#007bff}.btn-outline-primary:not(:disabled):not(.disabled).active:focus,.btn-outline-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-outline-secondary{color:#6c757d;background-color:transparent;background-image:none;border-color:#6c757d}.btn-outline-secondary:hover{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary.focus,.btn-outline-secondary:focus{box-shadow:0 0 0 .2rem hsla(208,7%,46%,.5)}.btn-outline-secondary.disabled,.btn-outline-secondary:disabled{color:#6c757d;background-color:transparent}.btn-outline-secondary:not(:disabled):not(.disabled).active,.btn-outline-secondary:not(:disabled):not(.disabled):active,.show>.btn-outline-secondary.dropdown-toggle{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary:not(:disabled):not(.disabled).active:focus,.btn-outline-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem hsla(208,7%,46%,.5)}.btn-outline-success{color:#28a745;background-color:transparent;background-image:none;border-color:#28a745}.btn-outline-success:hover{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success.focus,.btn-outline-success:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-success.disabled,.btn-outline-success:disabled{color:#28a745;background-color:transparent}.btn-outline-success:not(:disabled):not(.disabled).active,.btn-outline-success:not(:disabled):not(.disabled):active,.show>.btn-outline-success.dropdown-toggle{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success:not(:disabled):not(.disabled).active:focus,.btn-outline-success:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-info{color:#17a2b8;background-color:transparent;background-image:none;border-color:#17a2b8}.btn-outline-info:hover{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info.focus,.btn-outline-info:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-info.disabled,.btn-outline-info:disabled{color:#17a2b8;background-color:transparent}.btn-outline-info:not(:disabled):not(.disabled).active,.btn-outline-info:not(:disabled):not(.disabled):active,.show>.btn-outline-info.dropdown-toggle{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info:not(:disabled):not(.disabled).active:focus,.btn-outline-info:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-warning{color:#ffc107;background-color:transparent;background-image:none;border-color:#ffc107}.btn-outline-warning:hover{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning.focus,.btn-outline-warning:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-warning.disabled,.btn-outline-warning:disabled{color:#ffc107;background-color:transparent}.btn-outline-warning:not(:disabled):not(.disabled).active,.btn-outline-warning:not(:disabled):not(.disabled):active,.show>.btn-outline-warning.dropdown-toggle{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning:not(:disabled):not(.disabled).active:focus,.btn-outline-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-danger{color:#dc3545;background-color:transparent;background-image:none;border-color:#dc3545}.btn-outline-danger:hover{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger.focus,.btn-outline-danger:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-outline-danger.disabled,.btn-outline-danger:disabled{color:#dc3545;background-color:transparent}.btn-outline-danger:not(:disabled):not(.disabled).active,.btn-outline-danger:not(:disabled):not(.disabled):active,.show>.btn-outline-danger.dropdown-toggle{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger:not(:disabled):not(.disabled).active:focus,.btn-outline-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-outline-light{color:#f8f9fa;background-color:transparent;background-image:none;border-color:#f8f9fa}.btn-outline-light:hover{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light.focus,.btn-outline-light:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-light.disabled,.btn-outline-light:disabled{color:#f8f9fa;background-color:transparent}.btn-outline-light:not(:disabled):not(.disabled).active,.btn-outline-light:not(:disabled):not(.disabled):active,.show>.btn-outline-light.dropdown-toggle{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:not(:disabled):not(.disabled).active:focus,.btn-outline-light:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-dark{color:#343a40;background-color:transparent;background-image:none;border-color:#343a40}.btn-outline-dark:hover{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark.focus,.btn-outline-dark:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-outline-dark.disabled,.btn-outline-dark:disabled{color:#343a40;background-color:transparent}.btn-outline-dark:not(:disabled):not(.disabled).active,.btn-outline-dark:not(:disabled):not(.disabled):active,.show>.btn-outline-dark.dropdown-toggle{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark:not(:disabled):not(.disabled).active:focus,.btn-outline-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-link{font-weight:400;color:#007bff}.btn-link,.btn-link:hover{background-color:transparent}.btn-link:hover{color:#0056b3}.btn-link.focus,.btn-link:focus,.btn-link:hover{text-decoration:underline;border-color:transparent}.btn-link.focus,.btn-link:focus{box-shadow:none}.btn-link.disabled,.btn-link:disabled{color:#6c757d}.btn-group-lg>.btn,.btn-lg{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.btn-group-sm>.btn,.btn-sm{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:.5rem}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{opacity:0;transition:opacity .15s linear}.fade.show{opacity:1}.collapse{display:none}.collapse.show{display:block}tr.collapse.show{display:table-row}tbody.collapse.show{display:table-row-group}.collapsing{height:0;overflow:hidden;transition:height .35s ease}.collapsing,.dropdown,.dropup{position:relative}.dropdown-toggle:after{display:inline-block;width:0;height:0;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent}.dropdown-toggle:empty:after{margin-left:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:10rem;padding:.5rem 0;margin:.125rem 0 0;font-size:1rem;color:#212529;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.15);border-radius:.25rem}.dropup .dropdown-menu{margin-top:0;margin-bottom:.125rem}.dropup .dropdown-toggle:after{display:inline-block;width:0;height:0;margin-left:.255em;vertical-align:.255em;content:"";border-top:0;border-right:.3em solid transparent;border-bottom:.3em solid;border-left:.3em solid transparent}.dropup .dropdown-toggle:empty:after{margin-left:0}.dropright .dropdown-menu{margin-top:0;margin-left:.125rem}.dropright .dropdown-toggle:after{display:inline-block;width:0;height:0;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-bottom:.3em solid transparent;border-left:.3em solid}.dropright .dropdown-toggle:empty:after{margin-left:0}.dropright .dropdown-toggle:after{vertical-align:0}.dropleft .dropdown-menu{margin-top:0;margin-right:.125rem}.dropleft .dropdown-toggle:after{display:inline-block;width:0;height:0;margin-left:.255em;vertical-align:.255em;content:"";display:none}.dropleft .dropdown-toggle:before{display:inline-block;width:0;height:0;margin-right:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:.3em solid;border-bottom:.3em solid transparent}.dropleft .dropdown-toggle:empty:after{margin-left:0}.dropleft .dropdown-toggle:before{vertical-align:0}.dropdown-divider{height:0;margin:.5rem 0;overflow:hidden;border-top:1px solid #e9ecef}.dropdown-item{display:block;width:100%;padding:.25rem 1.5rem;clear:both;font-weight:400;color:#212529;text-align:inherit;white-space:nowrap;background-color:transparent;border:0}.dropdown-item:focus,.dropdown-item:hover{color:#16181b;text-decoration:none;background-color:#f8f9fa}.dropdown-item.active,.dropdown-item:active{color:#fff;text-decoration:none;background-color:#007bff}.dropdown-item.disabled,.dropdown-item:disabled{color:#6c757d;background-color:transparent}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:.5rem 1.5rem;margin-bottom:0;font-size:.875rem;color:#6c757d;white-space:nowrap}.btn-group,.btn-group-vertical{position:relative;display:-ms-inline-flexbox;display:inline-flex;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;-ms-flex:0 1 auto;flex:0 1 auto}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:1}.btn-group-vertical .btn+.btn,.btn-group-vertical .btn+.btn-group,.btn-group-vertical .btn-group+.btn,.btn-group-vertical .btn-group+.btn-group,.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-pack:start;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn-group:not(:last-child)>.btn,.btn-group>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:not(:first-child)>.btn,.btn-group>.btn:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}.dropdown-toggle-split:after{margin-left:0}.btn-group-sm>.btn+.dropdown-toggle-split,.btn-sm+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.btn-group-lg>.btn+.dropdown-toggle-split,.btn-lg+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-group-vertical{-ms-flex-direction:column;flex-direction:column;-ms-flex-align:start;align-items:flex-start;-ms-flex-pack:center;justify-content:center}.btn-group-vertical .btn,.btn-group-vertical .btn-group{width:100%}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn-group:not(:last-child)>.btn,.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child)>.btn,.btn-group-vertical>.btn:not(:first-child){border-top-left-radius:0;border-top-right-radius:0}.btn-group-toggle>.btn,.btn-group-toggle>.btn-group>.btn{margin-bottom:0}.btn-group-toggle>.btn-group>.btn input[type=checkbox],.btn-group-toggle>.btn-group>.btn input[type=radio],.btn-group-toggle>.btn input[type=checkbox],.btn-group-toggle>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:stretch;align-items:stretch;width:100%}.input-group>.custom-file,.input-group>.custom-select,.input-group>.form-control{position:relative;-ms-flex:1 1 auto;flex:1 1 auto;width:1%;margin-bottom:0}.input-group>.custom-file:focus,.input-group>.custom-select:focus,.input-group>.form-control:focus{z-index:3}.input-group>.custom-file+.custom-file,.input-group>.custom-file+.custom-select,.input-group>.custom-file+.form-control,.input-group>.custom-select+.custom-file,.input-group>.custom-select+.custom-select,.input-group>.custom-select+.form-control,.input-group>.form-control+.custom-file,.input-group>.form-control+.custom-select,.input-group>.form-control+.form-control{margin-left:-1px}.input-group>.custom-select:not(:last-child),.input-group>.form-control:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-select:not(:first-child),.input-group>.form-control:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.input-group>.custom-file{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center}.input-group>.custom-file:not(:last-child) .custom-file-label,.input-group>.custom-file:not(:last-child) .custom-file-label:before{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-file:not(:first-child) .custom-file-label,.input-group>.custom-file:not(:first-child) .custom-file-label:before{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-append,.input-group-prepend{display:-ms-flexbox;display:flex}.input-group-append .btn,.input-group-prepend .btn{position:relative;z-index:2}.input-group-append .btn+.btn,.input-group-append .btn+.input-group-text,.input-group-append .input-group-text+.btn,.input-group-append .input-group-text+.input-group-text,.input-group-prepend .btn+.btn,.input-group-prepend .btn+.input-group-text,.input-group-prepend .input-group-text+.btn,.input-group-prepend .input-group-text+.input-group-text{margin-left:-1px}.input-group-prepend{margin-right:-1px}.input-group-append{margin-left:-1px}.input-group-text{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;padding:.375rem .75rem;margin-bottom:0;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;text-align:center;white-space:nowrap;background-color:#e9ecef;border:1px solid #ced4da;border-radius:.25rem}.input-group-text input[type=checkbox],.input-group-text input[type=radio]{margin-top:0}.input-group>.input-group-append:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group>.input-group-append:last-child>.input-group-text:not(:last-child),.input-group>.input-group-append:not(:last-child)>.btn,.input-group>.input-group-append:not(:last-child)>.input-group-text,.input-group>.input-group-prepend>.btn,.input-group>.input-group-prepend>.input-group-text{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.input-group-append>.btn,.input-group>.input-group-append>.input-group-text,.input-group>.input-group-prepend:first-child>.btn:not(:first-child),.input-group>.input-group-prepend:first-child>.input-group-text:not(:first-child),.input-group>.input-group-prepend:not(:first-child)>.btn,.input-group>.input-group-prepend:not(:first-child)>.input-group-text{border-top-left-radius:0;border-bottom-left-radius:0}.custom-control{position:relative;display:block;min-height:1.5rem;padding-left:1.5rem}.custom-control-inline{display:-ms-inline-flexbox;display:inline-flex;margin-right:1rem}.custom-control-input{position:absolute;z-index:-1;opacity:0}.custom-control-input:checked~.custom-control-label:before{color:#fff;background-color:#007bff}.custom-control-input:focus~.custom-control-label:before{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-control-input:active~.custom-control-label:before{color:#fff;background-color:#b3d7ff}.custom-control-input:disabled~.custom-control-label{color:#6c757d}.custom-control-input:disabled~.custom-control-label:before{background-color:#e9ecef}.custom-control-label{margin-bottom:0}.custom-control-label:before{pointer-events:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:#dee2e6}.custom-control-label:after,.custom-control-label:before{position:absolute;top:.25rem;left:0;display:block;width:1rem;height:1rem;content:""}.custom-control-label:after{background-repeat:no-repeat;background-position:50%;background-size:50% 50%}.custom-checkbox .custom-control-label:before{border-radius:.25rem}.custom-checkbox .custom-control-input:checked~.custom-control-label:before{background-color:#007bff}.custom-checkbox .custom-control-input:checked~.custom-control-label:after{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26 2.974 7.25 8 2.193z'/%3E%3C/svg%3E")}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label:before{background-color:#007bff}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label:after{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 4'%3E%3Cpath stroke='%23fff' d='M0 2h4'/%3E%3C/svg%3E")}.custom-checkbox .custom-control-input:disabled:checked~.custom-control-label:before{background-color:rgba(0,123,255,.5)}.custom-checkbox .custom-control-input:disabled:indeterminate~.custom-control-label:before{background-color:rgba(0,123,255,.5)}.custom-radio .custom-control-label:before{border-radius:50%}.custom-radio .custom-control-input:checked~.custom-control-label:before{background-color:#007bff}.custom-radio .custom-control-input:checked~.custom-control-label:after{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3E%3Ccircle r='3' fill='%23fff'/%3E%3C/svg%3E")}.custom-radio .custom-control-input:disabled:checked~.custom-control-label:before{background-color:rgba(0,123,255,.5)}.custom-select{display:inline-block;width:100%;height:calc(2.25rem + 2px);padding:.375rem 1.75rem .375rem .75rem;line-height:1.5;color:#495057;vertical-align:middle;background:#fff url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3E%3Cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E") no-repeat right .75rem center;background-size:8px 10px;border:1px solid #ced4da;border-radius:.25rem;-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-select:focus{border-color:#80bdff;outline:0;box-shadow:inset 0 1px 2px rgba(0,0,0,.075),0 0 5px rgba(128,189,255,.5)}.custom-select:focus::-ms-value{color:#495057;background-color:#fff}.custom-select[multiple],.custom-select[size]:not([size="1"]){height:auto;padding-right:.75rem;background-image:none}.custom-select:disabled{color:#6c757d;background-color:#e9ecef}.custom-select::-ms-expand{opacity:0}.custom-select-sm{height:calc(1.8125rem + 2px);font-size:75%}.custom-select-lg,.custom-select-sm{padding-top:.375rem;padding-bottom:.375rem}.custom-select-lg{height:calc(2.875rem + 2px);font-size:125%}.custom-file{display:inline-block;margin-bottom:0}.custom-file,.custom-file-input{position:relative;width:100%;height:calc(2.25rem + 2px)}.custom-file-input{z-index:2;margin:0;opacity:0}.custom-file-input:focus~.custom-file-control{border-color:#80bdff;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.custom-file-input:focus~.custom-file-control:before{border-color:#80bdff}.custom-file-input:lang(en)~.custom-file-label:after{content:"Browse"}.custom-file-label{left:0;z-index:1;height:calc(2.25rem + 2px);background-color:#fff;border:1px solid #ced4da;border-radius:.25rem}.custom-file-label,.custom-file-label:after{position:absolute;top:0;right:0;padding:.375rem .75rem;line-height:1.5;color:#495057}.custom-file-label:after{bottom:0;z-index:3;display:block;height:calc((2.25rem + 2px) - 1px * 2);content:"Browse";background-color:#e9ecef;border-left:1px solid #ced4da;border-radius:0 .25rem .25rem 0}.nav{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:.5rem 1rem}.nav-link:focus,.nav-link:hover{text-decoration:none}.nav-link.disabled{color:#6c757d}.nav-tabs{border-bottom:1px solid #dee2e6}.nav-tabs .nav-item{margin-bottom:-1px}.nav-tabs .nav-link{border:1px solid transparent;border-top-left-radius:.25rem;border-top-right-radius:.25rem}.nav-tabs .nav-link:focus,.nav-tabs .nav-link:hover{border-color:#e9ecef #e9ecef #dee2e6}.nav-tabs .nav-link.disabled{color:#6c757d;background-color:transparent;border-color:transparent}.nav-tabs .nav-item.show .nav-link,.nav-tabs .nav-link.active{color:#495057;background-color:#fff;border-color:#dee2e6 #dee2e6 #fff}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.nav-pills .nav-link{border-radius:.25rem}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:#fff;background-color:#007bff}.nav-fill .nav-item{-ms-flex:1 1 auto;flex:1 1 auto;text-align:center}.nav-justified .nav-item{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;text-align:center}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{position:relative;padding:.5rem 1rem}.navbar,.navbar>.container,.navbar>.container-fluid{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between}.navbar-brand{display:inline-block;padding-top:.3125rem;padding-bottom:.3125rem;margin-right:1rem;font-size:1.25rem;line-height:inherit;white-space:nowrap}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-nav{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-nav .dropdown-menu{position:static;float:none}.navbar-text{display:inline-block;padding-top:.5rem;padding-bottom:.5rem}.navbar-collapse{-ms-flex-preferred-size:100%;flex-basis:100%;-ms-flex-positive:1;flex-grow:1;-ms-flex-align:center;align-items:center}.navbar-toggler{padding:.25rem .75rem;font-size:1.25rem;line-height:1;background-color:transparent;border:1px solid transparent;border-radius:.25rem}.navbar-toggler:focus,.navbar-toggler:hover{text-decoration:none}.navbar-toggler:not(:disabled):not(.disabled){cursor:pointer}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;content:"";background:no-repeat 50%;background-size:100% 100%}@media (max-width:575.98px){.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:576px){.navbar-expand-sm{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-sm .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .dropdown-menu-right{right:0;left:auto}.navbar-expand-sm .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-sm .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}.navbar-expand-sm .dropup .dropdown-menu{top:auto;bottom:100%}}@media (max-width:767.98px){.navbar-expand-md>.container,.navbar-expand-md>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:768px){.navbar-expand-md{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-md .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .dropdown-menu-right{right:0;left:auto}.navbar-expand-md .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-md>.container,.navbar-expand-md>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-md .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}.navbar-expand-md .dropup .dropdown-menu{top:auto;bottom:100%}}@media (max-width:991.98px){.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:992px){.navbar-expand-lg{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-lg .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .dropdown-menu-right{right:0;left:auto}.navbar-expand-lg .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-lg .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}.navbar-expand-lg .dropup .dropdown-menu{top:auto;bottom:100%}}@media (max-width:1199.98px){.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:1200px){.navbar-expand-xl{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-xl .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .dropdown-menu-right{right:0;left:auto}.navbar-expand-xl .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-xl .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}.navbar-expand-xl .dropup .dropdown-menu{top:auto;bottom:100%}}.navbar-expand{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand>.container,.navbar-expand>.container-fluid{padding-right:0;padding-left:0}.navbar-expand .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .dropdown-menu-right{right:0;left:auto}.navbar-expand .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand>.container,.navbar-expand>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-expand .dropup .dropdown-menu{top:auto;bottom:100%}.navbar-light .navbar-brand,.navbar-light .navbar-brand:focus,.navbar-light .navbar-brand:hover{color:rgba(0,0,0,.9)}.navbar-light .navbar-nav .nav-link{color:rgba(0,0,0,.5)}.navbar-light .navbar-nav .nav-link:focus,.navbar-light .navbar-nav .nav-link:hover{color:rgba(0,0,0,.7)}.navbar-light .navbar-nav .nav-link.disabled{color:rgba(0,0,0,.3)}.navbar-light .navbar-nav .active>.nav-link,.navbar-light .navbar-nav .nav-link.active,.navbar-light .navbar-nav .nav-link.show,.navbar-light .navbar-nav .show>.nav-link{color:rgba(0,0,0,.9)}.navbar-light .navbar-toggler{color:rgba(0,0,0,.5);border-color:rgba(0,0,0,.1)}.navbar-light .navbar-toggler-icon{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(0, 0, 0, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E")}.navbar-light .navbar-text{color:rgba(0,0,0,.5)}.navbar-light .navbar-text a,.navbar-light .navbar-text a:focus,.navbar-light .navbar-text a:hover{color:rgba(0,0,0,.9)}.navbar-dark .navbar-brand,.navbar-dark .navbar-brand:focus,.navbar-dark .navbar-brand:hover{color:#fff}.navbar-dark .navbar-nav .nav-link{color:hsla(0,0%,100%,.5)}.navbar-dark .navbar-nav .nav-link:focus,.navbar-dark .navbar-nav .nav-link:hover{color:hsla(0,0%,100%,.75)}.navbar-dark .navbar-nav .nav-link.disabled{color:hsla(0,0%,100%,.25)}.navbar-dark .navbar-nav .active>.nav-link,.navbar-dark .navbar-nav .nav-link.active,.navbar-dark .navbar-nav .nav-link.show,.navbar-dark .navbar-nav .show>.nav-link{color:#fff}.navbar-dark .navbar-toggler{color:hsla(0,0%,100%,.5);border-color:hsla(0,0%,100%,.1)}.navbar-dark .navbar-toggler-icon{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(255, 255, 255, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E")}.navbar-dark .navbar-text{color:hsla(0,0%,100%,.5)}.navbar-dark .navbar-text a,.navbar-dark .navbar-text a:focus,.navbar-dark .navbar-text a:hover{color:#fff}.card{position:relative;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;min-width:0;word-wrap:break-word;background-color:#fff;background-clip:border-box;border:1px solid rgba(0,0,0,.125);border-radius:.25rem}.card>hr{margin-right:0;margin-left:0}.card>.list-group:first-child .list-group-item:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.card>.list-group:last-child .list-group-item:last-child{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.card-body{-ms-flex:1 1 auto;flex:1 1 auto;padding:1.25rem}.card-title{margin-bottom:.75rem}.card-subtitle{margin-top:-.375rem}.card-subtitle,.card-text:last-child{margin-bottom:0}.card-link:hover{text-decoration:none}.card-link+.card-link{margin-left:1.25rem}.card-header{padding:.75rem 1.25rem;margin-bottom:0;background-color:rgba(0,0,0,.03);border-bottom:1px solid rgba(0,0,0,.125)}.card-header:first-child{border-radius:calc(.25rem - 1px) calc(.25rem - 1px) 0 0}.card-header+.list-group .list-group-item:first-child{border-top:0}.card-footer{padding:.75rem 1.25rem;background-color:rgba(0,0,0,.03);border-top:1px solid rgba(0,0,0,.125)}.card-footer:last-child{border-radius:0 0 calc(.25rem - 1px) calc(.25rem - 1px)}.card-header-tabs{margin-bottom:-.75rem;border-bottom:0}.card-header-pills,.card-header-tabs{margin-right:-.625rem;margin-left:-.625rem}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1.25rem}.card-img{width:100%;border-radius:calc(.25rem - 1px)}.card-img-top{width:100%;border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.card-img-bottom{width:100%;border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.card-deck{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}.card-deck .card{margin-bottom:15px}@media (min-width:576px){.card-deck{-ms-flex-flow:row wrap;flex-flow:row wrap;margin-right:-15px;margin-left:-15px}.card-deck .card{display:-ms-flexbox;display:flex;-ms-flex:1 0 0%;flex:1 0 0%;-ms-flex-direction:column;flex-direction:column;margin-right:15px;margin-bottom:0;margin-left:15px}}.card-group{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}.card-group>.card{margin-bottom:15px}@media (min-width:576px){.card-group{-ms-flex-flow:row wrap;flex-flow:row wrap}.card-group>.card{-ms-flex:1 0 0%;flex:1 0 0%;margin-bottom:0}.card-group>.card+.card{margin-left:0;border-left:0}.card-group>.card:first-child{border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:first-child .card-header,.card-group>.card:first-child .card-img-top{border-top-right-radius:0}.card-group>.card:first-child .card-footer,.card-group>.card:first-child .card-img-bottom{border-bottom-right-radius:0}.card-group>.card:last-child{border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:last-child .card-header,.card-group>.card:last-child .card-img-top{border-top-left-radius:0}.card-group>.card:last-child .card-footer,.card-group>.card:last-child .card-img-bottom{border-bottom-left-radius:0}.card-group>.card:only-child{border-radius:.25rem}.card-group>.card:only-child .card-header,.card-group>.card:only-child .card-img-top{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.card-group>.card:only-child .card-footer,.card-group>.card:only-child .card-img-bottom{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.card-group>.card:not(:first-child):not(:last-child):not(:only-child),.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-footer,.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-header,.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-img-bottom,.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-img-top{border-radius:0}}.card-columns .card{margin-bottom:.75rem}@media (min-width:576px){.card-columns{-webkit-column-count:3;column-count:3;-webkit-column-gap:1.25rem;column-gap:1.25rem}.card-columns .card{display:inline-block;width:100%}}.breadcrumb{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:.75rem 1rem;margin-bottom:1rem;list-style:none;background-color:#e9ecef;border-radius:.25rem}.breadcrumb-item+.breadcrumb-item:before{display:inline-block;padding-right:.5rem;padding-left:.5rem;color:#6c757d;content:"/"}.breadcrumb-item+.breadcrumb-item:hover:before{text-decoration:underline;text-decoration:none}.breadcrumb-item.active{color:#6c757d}.pagination{display:-ms-flexbox;display:flex;padding-left:0;list-style:none;border-radius:.25rem}.page-link{position:relative;display:block;padding:.5rem .75rem;margin-left:-1px;line-height:1.25;color:#007bff;background-color:#fff;border:1px solid #dee2e6}.page-link:hover{color:#0056b3;text-decoration:none;background-color:#e9ecef;border-color:#dee2e6}.page-link:focus{z-index:2;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.page-link:not(:disabled):not(.disabled){cursor:pointer}.page-item:first-child .page-link{margin-left:0;border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.page-item:last-child .page-link{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.page-item.active .page-link{z-index:1;color:#fff;background-color:#007bff;border-color:#007bff}.page-item.disabled .page-link{color:#6c757d;pointer-events:none;cursor:auto;background-color:#fff;border-color:#dee2e6}.pagination-lg .page-link{padding:.75rem 1.5rem;font-size:1.25rem;line-height:1.5}.pagination-lg .page-item:first-child .page-link{border-top-left-radius:.3rem;border-bottom-left-radius:.3rem}.pagination-lg .page-item:last-child .page-link{border-top-right-radius:.3rem;border-bottom-right-radius:.3rem}.pagination-sm .page-link{padding:.25rem .5rem;font-size:.875rem;line-height:1.5}.pagination-sm .page-item:first-child .page-link{border-top-left-radius:.2rem;border-bottom-left-radius:.2rem}.pagination-sm .page-item:last-child .page-link{border-top-right-radius:.2rem;border-bottom-right-radius:.2rem}.badge{display:inline-block;padding:.25em .4em;font-size:75%;font-weight:700;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.badge-pill{padding-right:.6em;padding-left:.6em;border-radius:10rem}.badge-primary{color:#fff;background-color:#007bff}.badge-primary[href]:focus,.badge-primary[href]:hover{color:#fff;text-decoration:none;background-color:#0062cc}.badge-secondary{color:#fff;background-color:#6c757d}.badge-secondary[href]:focus,.badge-secondary[href]:hover{color:#fff;text-decoration:none;background-color:#545b62}.badge-success{color:#fff;background-color:#28a745}.badge-success[href]:focus,.badge-success[href]:hover{color:#fff;text-decoration:none;background-color:#1e7e34}.badge-info{color:#fff;background-color:#17a2b8}.badge-info[href]:focus,.badge-info[href]:hover{color:#fff;text-decoration:none;background-color:#117a8b}.badge-warning{color:#212529;background-color:#ffc107}.badge-warning[href]:focus,.badge-warning[href]:hover{color:#212529;text-decoration:none;background-color:#d39e00}.badge-danger{color:#fff;background-color:#dc3545}.badge-danger[href]:focus,.badge-danger[href]:hover{color:#fff;text-decoration:none;background-color:#bd2130}.badge-light{color:#212529;background-color:#f8f9fa}.badge-light[href]:focus,.badge-light[href]:hover{color:#212529;text-decoration:none;background-color:#dae0e5}.badge-dark{color:#fff;background-color:#343a40}.badge-dark[href]:focus,.badge-dark[href]:hover{color:#fff;text-decoration:none;background-color:#1d2124}.jumbotron{padding:2rem 1rem;margin-bottom:2rem;background-color:#e9ecef;border-radius:.3rem}@media (min-width:576px){.jumbotron{padding:4rem 2rem}}.jumbotron-fluid{padding-right:0;padding-left:0;border-radius:0}.alert{position:relative;padding:.75rem 1.25rem;margin-bottom:1rem;border:1px solid transparent;border-radius:.25rem}.alert-heading{color:inherit}.alert-link{font-weight:700}.alert-dismissible{padding-right:4rem}.alert-dismissible .close{position:absolute;top:0;right:0;padding:.75rem 1.25rem;color:inherit}.alert-primary{color:#004085;background-color:#cce5ff;border-color:#b8daff}.alert-primary hr{border-top-color:#9fcdff}.alert-primary .alert-link{color:#002752}.alert-secondary{color:#383d41;background-color:#e2e3e5;border-color:#d6d8db}.alert-secondary hr{border-top-color:#c8cbcf}.alert-secondary .alert-link{color:#202326}.alert-success{color:#155724;background-color:#d4edda;border-color:#c3e6cb}.alert-success hr{border-top-color:#b1dfbb}.alert-success .alert-link{color:#0b2e13}.alert-info{color:#0c5460;background-color:#d1ecf1;border-color:#bee5eb}.alert-info hr{border-top-color:#abdde5}.alert-info .alert-link{color:#062c33}.alert-warning{color:#856404;background-color:#fff3cd;border-color:#ffeeba}.alert-warning hr{border-top-color:#ffe8a1}.alert-warning .alert-link{color:#533f03}.alert-danger{color:#721c24;background-color:#f8d7da;border-color:#f5c6cb}.alert-danger hr{border-top-color:#f1b0b7}.alert-danger .alert-link{color:#491217}.alert-light{color:#818182;background-color:#fefefe;border-color:#fdfdfe}.alert-light hr{border-top-color:#ececf6}.alert-light .alert-link{color:#686868}.alert-dark{color:#1b1e21;background-color:#d6d8d9;border-color:#c6c8ca}.alert-dark hr{border-top-color:#b9bbbe}.alert-dark .alert-link{color:#040505}@keyframes progress-bar-stripes{0%{background-position:1rem 0}to{background-position:0 0}}.progress{height:1rem;overflow:hidden;font-size:.75rem;background-color:#e9ecef;border-radius:.25rem}.progress,.progress-bar{display:-ms-flexbox;display:flex}.progress-bar{-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:center;justify-content:center;color:#fff;text-align:center;background-color:#007bff;transition:width .6s ease}.progress-bar-striped{background-image:linear-gradient(45deg,hsla(0,0%,100%,.15) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.15) 0,hsla(0,0%,100%,.15) 75%,transparent 0,transparent);background-size:1rem 1rem}.progress-bar-animated{animation:progress-bar-stripes 1s linear infinite}.media{display:-ms-flexbox;display:flex;-ms-flex-align:start;align-items:flex-start}.media-body{-ms-flex:1;flex:1}.list-group{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0}.list-group-item-action{width:100%;color:#495057;text-align:inherit}.list-group-item-action:focus,.list-group-item-action:hover{color:#495057;text-decoration:none;background-color:#f8f9fa}.list-group-item-action:active{color:#212529;background-color:#e9ecef}.list-group-item{position:relative;display:block;padding:.75rem 1.25rem;margin-bottom:-1px;background-color:#fff;border:1px solid rgba(0,0,0,.125)}.list-group-item:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.list-group-item:focus,.list-group-item:hover{z-index:1;text-decoration:none}.list-group-item.disabled,.list-group-item:disabled{color:#6c757d;background-color:#fff}.list-group-item.active{z-index:2;color:#fff;background-color:#007bff;border-color:#007bff}.list-group-flush .list-group-item{border-right:0;border-left:0;border-radius:0}.list-group-flush:first-child .list-group-item:first-child{border-top:0}.list-group-flush:last-child .list-group-item:last-child{border-bottom:0}.list-group-item-primary{color:#004085;background-color:#b8daff}.list-group-item-primary.list-group-item-action:focus,.list-group-item-primary.list-group-item-action:hover{color:#004085;background-color:#9fcdff}.list-group-item-primary.list-group-item-action.active{color:#fff;background-color:#004085;border-color:#004085}.list-group-item-secondary{color:#383d41;background-color:#d6d8db}.list-group-item-secondary.list-group-item-action:focus,.list-group-item-secondary.list-group-item-action:hover{color:#383d41;background-color:#c8cbcf}.list-group-item-secondary.list-group-item-action.active{color:#fff;background-color:#383d41;border-color:#383d41}.list-group-item-success{color:#155724;background-color:#c3e6cb}.list-group-item-success.list-group-item-action:focus,.list-group-item-success.list-group-item-action:hover{color:#155724;background-color:#b1dfbb}.list-group-item-success.list-group-item-action.active{color:#fff;background-color:#155724;border-color:#155724}.list-group-item-info{color:#0c5460;background-color:#bee5eb}.list-group-item-info.list-group-item-action:focus,.list-group-item-info.list-group-item-action:hover{color:#0c5460;background-color:#abdde5}.list-group-item-info.list-group-item-action.active{color:#fff;background-color:#0c5460;border-color:#0c5460}.list-group-item-warning{color:#856404;background-color:#ffeeba}.list-group-item-warning.list-group-item-action:focus,.list-group-item-warning.list-group-item-action:hover{color:#856404;background-color:#ffe8a1}.list-group-item-warning.list-group-item-action.active{color:#fff;background-color:#856404;border-color:#856404}.list-group-item-danger{color:#721c24;background-color:#f5c6cb}.list-group-item-danger.list-group-item-action:focus,.list-group-item-danger.list-group-item-action:hover{color:#721c24;background-color:#f1b0b7}.list-group-item-danger.list-group-item-action.active{color:#fff;background-color:#721c24;border-color:#721c24}.list-group-item-light{color:#818182;background-color:#fdfdfe}.list-group-item-light.list-group-item-action:focus,.list-group-item-light.list-group-item-action:hover{color:#818182;background-color:#ececf6}.list-group-item-light.list-group-item-action.active{color:#fff;background-color:#818182;border-color:#818182}.list-group-item-dark{color:#1b1e21;background-color:#c6c8ca}.list-group-item-dark.list-group-item-action:focus,.list-group-item-dark.list-group-item-action:hover{color:#1b1e21;background-color:#b9bbbe}.list-group-item-dark.list-group-item-action.active{color:#fff;background-color:#1b1e21;border-color:#1b1e21}.close{float:right;font-size:1.5rem;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.5}.close:focus,.close:hover{color:#000;text-decoration:none;opacity:.75}.close:not(:disabled):not(.disabled){cursor:pointer}button.close{padding:0;background-color:transparent;border:0;-webkit-appearance:none}.modal,.modal-open{overflow:hidden}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;display:none;outline:0}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:.5rem;pointer-events:none}.modal.fade .modal-dialog{transition:transform .3s ease-out;transform:translateY(-25%)}.modal.show .modal-dialog{transform:translate(0)}.modal-dialog-centered{-ms-flex-align:center;align-items:center;min-height:calc(100% - 1rem)}.modal-content,.modal-dialog-centered{display:-ms-flexbox;display:flex}.modal-content{position:relative;-ms-flex-direction:column;flex-direction:column;width:100%;pointer-events:auto;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem;outline:0}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:.5}.modal-header{display:-ms-flexbox;display:flex;-ms-flex-align:start;align-items:flex-start;-ms-flex-pack:justify;justify-content:space-between;padding:1rem;border-bottom:1px solid #e9ecef;border-top-left-radius:.3rem;border-top-right-radius:.3rem}.modal-header .close{padding:1rem;margin:-1rem -1rem -1rem auto}.modal-title{margin-bottom:0;line-height:1.5}.modal-body{position:relative;-ms-flex:1 1 auto;flex:1 1 auto;padding:1rem}.modal-footer{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:end;justify-content:flex-end;padding:1rem;border-top:1px solid #e9ecef}.modal-footer>:not(:first-child){margin-left:.25rem}.modal-footer>:not(:last-child){margin-right:.25rem}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:576px){.modal-dialog{max-width:500px;margin:1.75rem auto}.modal-dialog-centered{min-height:calc(100% - 3.5rem)}.modal-sm{max-width:300px}}@media (min-width:992px){.modal-lg{max-width:800px}}.tooltip{position:absolute;z-index:1070;display:block;margin:0;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif;font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;opacity:0}.tooltip.show{opacity:.9}.tooltip .arrow{position:absolute;display:block;width:.8rem;height:.4rem}.tooltip .arrow:before{position:absolute;content:"";border-color:transparent;border-style:solid}.bs-tooltip-auto[x-placement^=top],.bs-tooltip-top{padding:.4rem 0}.bs-tooltip-auto[x-placement^=top] .arrow,.bs-tooltip-top .arrow{bottom:0}.bs-tooltip-auto[x-placement^=top] .arrow:before,.bs-tooltip-top .arrow:before{top:0;border-width:.4rem .4rem 0;border-top-color:#000}.bs-tooltip-auto[x-placement^=right],.bs-tooltip-right{padding:0 .4rem}.bs-tooltip-auto[x-placement^=right] .arrow,.bs-tooltip-right .arrow{left:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=right] .arrow:before,.bs-tooltip-right .arrow:before{right:0;border-width:.4rem .4rem .4rem 0;border-right-color:#000}.bs-tooltip-auto[x-placement^=bottom],.bs-tooltip-bottom{padding:.4rem 0}.bs-tooltip-auto[x-placement^=bottom] .arrow,.bs-tooltip-bottom .arrow{top:0}.bs-tooltip-auto[x-placement^=bottom] .arrow:before,.bs-tooltip-bottom .arrow:before{bottom:0;border-width:0 .4rem .4rem;border-bottom-color:#000}.bs-tooltip-auto[x-placement^=left],.bs-tooltip-left{padding:0 .4rem}.bs-tooltip-auto[x-placement^=left] .arrow,.bs-tooltip-left .arrow{right:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=left] .arrow:before,.bs-tooltip-left .arrow:before{left:0;border-width:.4rem 0 .4rem .4rem;border-left-color:#000}.tooltip-inner{max-width:200px;padding:.25rem .5rem;color:#fff;text-align:center;background-color:#000;border-radius:.25rem}.popover{top:0;left:0;z-index:1060;max-width:276px;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif;font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem}.popover,.popover .arrow{position:absolute;display:block}.popover .arrow{width:1rem;height:.5rem;margin:0 .3rem}.popover .arrow:after,.popover .arrow:before{position:absolute;display:block;content:"";border-color:transparent;border-style:solid}.bs-popover-auto[x-placement^=top],.bs-popover-top{margin-bottom:.5rem}.bs-popover-auto[x-placement^=top] .arrow,.bs-popover-top .arrow{bottom:calc((.5rem + 1px) * -1)}.bs-popover-auto[x-placement^=top] .arrow:after,.bs-popover-auto[x-placement^=top] .arrow:before,.bs-popover-top .arrow:after,.bs-popover-top .arrow:before{border-width:.5rem .5rem 0}.bs-popover-auto[x-placement^=top] .arrow:before,.bs-popover-top .arrow:before{bottom:0;border-top-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=top] .arrow:after,.bs-popover-top .arrow:after{bottom:1px;border-top-color:#fff}.bs-popover-auto[x-placement^=right],.bs-popover-right{margin-left:.5rem}.bs-popover-auto[x-placement^=right] .arrow,.bs-popover-right .arrow{left:calc((.5rem + 1px) * -1);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=right] .arrow:after,.bs-popover-auto[x-placement^=right] .arrow:before,.bs-popover-right .arrow:after,.bs-popover-right .arrow:before{border-width:.5rem .5rem .5rem 0}.bs-popover-auto[x-placement^=right] .arrow:before,.bs-popover-right .arrow:before{left:0;border-right-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=right] .arrow:after,.bs-popover-right .arrow:after{left:1px;border-right-color:#fff}.bs-popover-auto[x-placement^=bottom],.bs-popover-bottom{margin-top:.5rem}.bs-popover-auto[x-placement^=bottom] .arrow,.bs-popover-bottom .arrow{top:calc((.5rem + 1px) * -1)}.bs-popover-auto[x-placement^=bottom] .arrow:after,.bs-popover-auto[x-placement^=bottom] .arrow:before,.bs-popover-bottom .arrow:after,.bs-popover-bottom .arrow:before{border-width:0 .5rem .5rem}.bs-popover-auto[x-placement^=bottom] .arrow:before,.bs-popover-bottom .arrow:before{top:0;border-bottom-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=bottom] .arrow:after,.bs-popover-bottom .arrow:after{top:1px;border-bottom-color:#fff}.bs-popover-auto[x-placement^=bottom] .popover-header:before,.bs-popover-bottom .popover-header:before{position:absolute;top:0;left:50%;display:block;width:1rem;margin-left:-.5rem;content:"";border-bottom:1px solid #f7f7f7}.bs-popover-auto[x-placement^=left],.bs-popover-left{margin-right:.5rem}.bs-popover-auto[x-placement^=left] .arrow,.bs-popover-left .arrow{right:calc((.5rem + 1px) * -1);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=left] .arrow:after,.bs-popover-auto[x-placement^=left] .arrow:before,.bs-popover-left .arrow:after,.bs-popover-left .arrow:before{border-width:.5rem 0 .5rem .5rem}.bs-popover-auto[x-placement^=left] .arrow:before,.bs-popover-left .arrow:before{right:0;border-left-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=left] .arrow:after,.bs-popover-left .arrow:after{right:1px;border-left-color:#fff}.popover-header{padding:.5rem .75rem;margin-bottom:0;font-size:1rem;color:inherit;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.popover-header:empty{display:none}.popover-body{padding:.5rem .75rem;color:#212529}.carousel{position:relative}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-item{position:relative;display:none;-ms-flex-align:center;align-items:center;width:100%;transition:transform .6s ease;-webkit-backface-visibility:hidden;backface-visibility:hidden;perspective:1000px}.carousel-item-next,.carousel-item-prev,.carousel-item.active{display:block}.carousel-item-next,.carousel-item-prev{position:absolute;top:0}.carousel-item-next.carousel-item-left,.carousel-item-prev.carousel-item-right{transform:translateX(0)}@supports ((-webkit-transform-style:preserve-3d) or (transform-style:preserve-3d)){.carousel-item-next.carousel-item-left,.carousel-item-prev.carousel-item-right{transform:translateZ(0)}}.active.carousel-item-right,.carousel-item-next{transform:translateX(100%)}@supports ((-webkit-transform-style:preserve-3d) or (transform-style:preserve-3d)){.active.carousel-item-right,.carousel-item-next{transform:translate3d(100%,0,0)}}.active.carousel-item-left,.carousel-item-prev{transform:translateX(-100%)}@supports ((-webkit-transform-style:preserve-3d) or (transform-style:preserve-3d)){.active.carousel-item-left,.carousel-item-prev{transform:translate3d(-100%,0,0)}}.carousel-control-next,.carousel-control-prev{position:absolute;top:0;bottom:0;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;width:15%;color:#fff;text-align:center;opacity:.5}.carousel-control-next:focus,.carousel-control-next:hover,.carousel-control-prev:focus,.carousel-control-prev:hover{color:#fff;text-decoration:none;outline:0;opacity:.9}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-next-icon,.carousel-control-prev-icon{display:inline-block;width:20px;height:20px;background:transparent no-repeat 50%;background-size:100% 100%}.carousel-control-prev-icon{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3E%3Cpath d='M5.25 0l-4 4 4 4 1.5-1.5-2.5-2.5 2.5-2.5-1.5-1.5z'/%3E%3C/svg%3E")}.carousel-control-next-icon{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3E%3Cpath d='M2.75 0l-1.5 1.5 2.5 2.5-2.5 2.5 1.5 1.5 4-4-4-4z'/%3E%3C/svg%3E")}.carousel-indicators{position:absolute;right:0;bottom:10px;left:0;z-index:15;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;padding-left:0;margin-right:15%;margin-left:15%;list-style:none}.carousel-indicators li{position:relative;-ms-flex:0 1 auto;flex:0 1 auto;width:30px;height:3px;margin-right:3px;margin-left:3px;text-indent:-999px;background-color:hsla(0,0%,100%,.5)}.carousel-indicators li:before{top:-10px}.carousel-indicators li:after,.carousel-indicators li:before{position:absolute;left:0;display:inline-block;width:100%;height:10px;content:""}.carousel-indicators li:after{bottom:-10px}.carousel-indicators .active{background-color:#fff}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center}.align-baseline{vertical-align:baseline!important}.align-top{vertical-align:top!important}.align-middle{vertical-align:middle!important}.align-bottom{vertical-align:bottom!important}.align-text-bottom{vertical-align:text-bottom!important}.align-text-top{vertical-align:text-top!important}.bg-primary{background-color:#007bff!important}a.bg-primary:focus,a.bg-primary:hover,button.bg-primary:focus,button.bg-primary:hover{background-color:#0062cc!important}.bg-secondary{background-color:#6c757d!important}a.bg-secondary:focus,a.bg-secondary:hover,button.bg-secondary:focus,button.bg-secondary:hover{background-color:#545b62!important}.bg-success{background-color:#28a745!important}a.bg-success:focus,a.bg-success:hover,button.bg-success:focus,button.bg-success:hover{background-color:#1e7e34!important}.bg-info{background-color:#17a2b8!important}a.bg-info:focus,a.bg-info:hover,button.bg-info:focus,button.bg-info:hover{background-color:#117a8b!important}.bg-warning{background-color:#ffc107!important}a.bg-warning:focus,a.bg-warning:hover,button.bg-warning:focus,button.bg-warning:hover{background-color:#d39e00!important}.bg-danger{background-color:#dc3545!important}a.bg-danger:focus,a.bg-danger:hover,button.bg-danger:focus,button.bg-danger:hover{background-color:#bd2130!important}.bg-light{background-color:#f8f9fa!important}a.bg-light:focus,a.bg-light:hover,button.bg-light:focus,button.bg-light:hover{background-color:#dae0e5!important}.bg-dark{background-color:#343a40!important}a.bg-dark:focus,a.bg-dark:hover,button.bg-dark:focus,button.bg-dark:hover{background-color:#1d2124!important}.bg-white{background-color:#fff!important}.bg-transparent{background-color:transparent!important}.border{border:1px solid #dee2e6!important}.border-top{border-top:1px solid #dee2e6!important}.border-right{border-right:1px solid #dee2e6!important}.border-bottom{border-bottom:1px solid #dee2e6!important}.border-left{border-left:1px solid #dee2e6!important}.border-0{border:0!important}.border-top-0{border-top:0!important}.border-right-0{border-right:0!important}.border-bottom-0{border-bottom:0!important}.border-left-0{border-left:0!important}.border-primary{border-color:#007bff!important}.border-secondary{border-color:#6c757d!important}.border-success{border-color:#28a745!important}.border-info{border-color:#17a2b8!important}.border-warning{border-color:#ffc107!important}.border-danger{border-color:#dc3545!important}.border-light{border-color:#f8f9fa!important}.border-dark{border-color:#343a40!important}.border-white{border-color:#fff!important}.rounded{border-radius:.25rem!important}.rounded-top{border-top-left-radius:.25rem!important}.rounded-right,.rounded-top{border-top-right-radius:.25rem!important}.rounded-bottom,.rounded-right{border-bottom-right-radius:.25rem!important}.rounded-bottom,.rounded-left{border-bottom-left-radius:.25rem!important}.rounded-left{border-top-left-radius:.25rem!important}.rounded-circle{border-radius:50%!important}.rounded-0{border-radius:0!important}.clearfix:after{display:block;clear:both;content:""}.d-none{display:none!important}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-table{display:table!important}.d-table-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex{display:-ms-flexbox!important;display:flex!important}.d-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}@media (min-width:576px){.d-sm-none{display:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:-ms-flexbox!important;display:flex!important}.d-sm-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:768px){.d-md-none{display:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:-ms-flexbox!important;display:flex!important}.d-md-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:992px){.d-lg-none{display:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:-ms-flexbox!important;display:flex!important}.d-lg-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:1200px){.d-xl-none{display:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:-ms-flexbox!important;display:flex!important}.d-xl-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media print{.d-print-none{display:none!important}.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:-ms-flexbox!important;display:flex!important}.d-print-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}.embed-responsive{position:relative;display:block;width:100%;padding:0;overflow:hidden}.embed-responsive:before{display:block;content:""}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-21by9:before{padding-top:42.857143%}.embed-responsive-16by9:before{padding-top:56.25%}.embed-responsive-4by3:before{padding-top:75%}.embed-responsive-1by1:before{padding-top:100%}.flex-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.justify-content-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-center{-ms-flex-align:center!important;align-items:center!important}.align-items-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}@media (min-width:576px){.flex-sm-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-sm-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-sm-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-sm-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-sm-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-sm-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-sm-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.justify-content-sm-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-sm-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-sm-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-sm-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-sm-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-sm-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-sm-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-sm-center{-ms-flex-align:center!important;align-items:center!important}.align-items-sm-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-sm-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-sm-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-sm-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-sm-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-sm-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-sm-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-sm-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-sm-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-sm-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-sm-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-sm-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-sm-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-sm-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:768px){.flex-md-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-md-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-md-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-md-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-md-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-md-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-md-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.justify-content-md-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-md-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-md-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-md-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-md-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-md-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-md-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-md-center{-ms-flex-align:center!important;align-items:center!important}.align-items-md-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-md-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-md-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-md-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-md-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-md-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-md-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-md-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-md-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-md-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-md-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-md-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-md-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-md-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:992px){.flex-lg-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-lg-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-lg-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-lg-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-lg-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-lg-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-lg-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.justify-content-lg-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-lg-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-lg-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-lg-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-lg-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-lg-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-lg-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-lg-center{-ms-flex-align:center!important;align-items:center!important}.align-items-lg-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-lg-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-lg-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-lg-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-lg-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-lg-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-lg-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-lg-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-lg-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-lg-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-lg-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-lg-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-lg-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-lg-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:1200px){.flex-xl-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-xl-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-xl-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-xl-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-xl-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-xl-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-xl-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.justify-content-xl-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-xl-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-xl-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-xl-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-xl-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-xl-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-xl-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-xl-center{-ms-flex-align:center!important;align-items:center!important}.align-items-xl-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-xl-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-xl-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-xl-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-xl-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-xl-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-xl-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-xl-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-xl-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-xl-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-xl-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-xl-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-xl-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-xl-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}.float-left{float:left!important}.float-right{float:right!important}.float-none{float:none!important}@media (min-width:576px){.float-sm-left{float:left!important}.float-sm-right{float:right!important}.float-sm-none{float:none!important}}@media (min-width:768px){.float-md-left{float:left!important}.float-md-right{float:right!important}.float-md-none{float:none!important}}@media (min-width:992px){.float-lg-left{float:left!important}.float-lg-right{float:right!important}.float-lg-none{float:none!important}}@media (min-width:1200px){.float-xl-left{float:left!important}.float-xl-right{float:right!important}.float-xl-none{float:none!important}}.position-static{position:static!important}.position-relative{position:relative!important}.position-absolute{position:absolute!important}.position-fixed{position:fixed!important}.position-sticky{position:-webkit-sticky!important;position:sticky!important}.fixed-top{top:0}.fixed-bottom,.fixed-top{position:fixed;right:0;left:0;z-index:1030}.fixed-bottom{bottom:0}@supports ((position:-webkit-sticky) or (position:sticky)){.sticky-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}.sr-only{position:absolute;width:1px;height:1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;-webkit-clip-path:inset(50%);clip-path:inset(50%);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;overflow:visible;clip:auto;white-space:normal;-webkit-clip-path:none;clip-path:none}.w-25{width:25%!important}.w-50{width:50%!important}.w-75{width:75%!important}.w-100{width:100%!important}.h-25{height:25%!important}.h-50{height:50%!important}.h-75{height:75%!important}.h-100{height:100%!important}.mw-100{max-width:100%!important}.mh-100{max-height:100%!important}.m-0{margin:0!important}.mt-0,.my-0{margin-top:0!important}.mr-0,.mx-0{margin-right:0!important}.mb-0,.my-0{margin-bottom:0!important}.ml-0,.mx-0{margin-left:0!important}.m-1{margin:.25rem!important}.mt-1,.my-1{margin-top:.25rem!important}.mr-1,.mx-1{margin-right:.25rem!important}.mb-1,.my-1{margin-bottom:.25rem!important}.ml-1,.mx-1{margin-left:.25rem!important}.m-2{margin:.5rem!important}.mt-2,.my-2{margin-top:.5rem!important}.mr-2,.mx-2{margin-right:.5rem!important}.mb-2,.my-2{margin-bottom:.5rem!important}.ml-2,.mx-2{margin-left:.5rem!important}.m-3{margin:1rem!important}.mt-3,.my-3{margin-top:1rem!important}.mr-3,.mx-3{margin-right:1rem!important}.mb-3,.my-3{margin-bottom:1rem!important}.ml-3,.mx-3{margin-left:1rem!important}.m-4{margin:1.5rem!important}.mt-4,.my-4{margin-top:1.5rem!important}.mr-4,.mx-4{margin-right:1.5rem!important}.mb-4,.my-4{margin-bottom:1.5rem!important}.ml-4,.mx-4{margin-left:1.5rem!important}.m-5{margin:3rem!important}.mt-5,.my-5{margin-top:3rem!important}.mr-5,.mx-5{margin-right:3rem!important}.mb-5,.my-5{margin-bottom:3rem!important}.ml-5,.mx-5{margin-left:3rem!important}.p-0{padding:0!important}.pt-0,.py-0{padding-top:0!important}.pr-0,.px-0{padding-right:0!important}.pb-0,.py-0{padding-bottom:0!important}.pl-0,.px-0{padding-left:0!important}.p-1{padding:.25rem!important}.pt-1,.py-1{padding-top:.25rem!important}.pr-1,.px-1{padding-right:.25rem!important}.pb-1,.py-1{padding-bottom:.25rem!important}.pl-1,.px-1{padding-left:.25rem!important}.p-2{padding:.5rem!important}.pt-2,.py-2{padding-top:.5rem!important}.pr-2,.px-2{padding-right:.5rem!important}.pb-2,.py-2{padding-bottom:.5rem!important}.pl-2,.px-2{padding-left:.5rem!important}.p-3{padding:1rem!important}.pt-3,.py-3{padding-top:1rem!important}.pr-3,.px-3{padding-right:1rem!important}.pb-3,.py-3{padding-bottom:1rem!important}.pl-3,.px-3{padding-left:1rem!important}.p-4{padding:1.5rem!important}.pt-4,.py-4{padding-top:1.5rem!important}.pr-4,.px-4{padding-right:1.5rem!important}.pb-4,.py-4{padding-bottom:1.5rem!important}.pl-4,.px-4{padding-left:1.5rem!important}.p-5{padding:3rem!important}.pt-5,.py-5{padding-top:3rem!important}.pr-5,.px-5{padding-right:3rem!important}.pb-5,.py-5{padding-bottom:3rem!important}.pl-5,.px-5{padding-left:3rem!important}.m-auto{margin:auto!important}.mt-auto,.my-auto{margin-top:auto!important}.mr-auto,.mx-auto{margin-right:auto!important}.mb-auto,.my-auto{margin-bottom:auto!important}.ml-auto,.mx-auto{margin-left:auto!important}@media (min-width:576px){.m-sm-0{margin:0!important}.mt-sm-0,.my-sm-0{margin-top:0!important}.mr-sm-0,.mx-sm-0{margin-right:0!important}.mb-sm-0,.my-sm-0{margin-bottom:0!important}.ml-sm-0,.mx-sm-0{margin-left:0!important}.m-sm-1{margin:.25rem!important}.mt-sm-1,.my-sm-1{margin-top:.25rem!important}.mr-sm-1,.mx-sm-1{margin-right:.25rem!important}.mb-sm-1,.my-sm-1{margin-bottom:.25rem!important}.ml-sm-1,.mx-sm-1{margin-left:.25rem!important}.m-sm-2{margin:.5rem!important}.mt-sm-2,.my-sm-2{margin-top:.5rem!important}.mr-sm-2,.mx-sm-2{margin-right:.5rem!important}.mb-sm-2,.my-sm-2{margin-bottom:.5rem!important}.ml-sm-2,.mx-sm-2{margin-left:.5rem!important}.m-sm-3{margin:1rem!important}.mt-sm-3,.my-sm-3{margin-top:1rem!important}.mr-sm-3,.mx-sm-3{margin-right:1rem!important}.mb-sm-3,.my-sm-3{margin-bottom:1rem!important}.ml-sm-3,.mx-sm-3{margin-left:1rem!important}.m-sm-4{margin:1.5rem!important}.mt-sm-4,.my-sm-4{margin-top:1.5rem!important}.mr-sm-4,.mx-sm-4{margin-right:1.5rem!important}.mb-sm-4,.my-sm-4{margin-bottom:1.5rem!important}.ml-sm-4,.mx-sm-4{margin-left:1.5rem!important}.m-sm-5{margin:3rem!important}.mt-sm-5,.my-sm-5{margin-top:3rem!important}.mr-sm-5,.mx-sm-5{margin-right:3rem!important}.mb-sm-5,.my-sm-5{margin-bottom:3rem!important}.ml-sm-5,.mx-sm-5{margin-left:3rem!important}.p-sm-0{padding:0!important}.pt-sm-0,.py-sm-0{padding-top:0!important}.pr-sm-0,.px-sm-0{padding-right:0!important}.pb-sm-0,.py-sm-0{padding-bottom:0!important}.pl-sm-0,.px-sm-0{padding-left:0!important}.p-sm-1{padding:.25rem!important}.pt-sm-1,.py-sm-1{padding-top:.25rem!important}.pr-sm-1,.px-sm-1{padding-right:.25rem!important}.pb-sm-1,.py-sm-1{padding-bottom:.25rem!important}.pl-sm-1,.px-sm-1{padding-left:.25rem!important}.p-sm-2{padding:.5rem!important}.pt-sm-2,.py-sm-2{padding-top:.5rem!important}.pr-sm-2,.px-sm-2{padding-right:.5rem!important}.pb-sm-2,.py-sm-2{padding-bottom:.5rem!important}.pl-sm-2,.px-sm-2{padding-left:.5rem!important}.p-sm-3{padding:1rem!important}.pt-sm-3,.py-sm-3{padding-top:1rem!important}.pr-sm-3,.px-sm-3{padding-right:1rem!important}.pb-sm-3,.py-sm-3{padding-bottom:1rem!important}.pl-sm-3,.px-sm-3{padding-left:1rem!important}.p-sm-4{padding:1.5rem!important}.pt-sm-4,.py-sm-4{padding-top:1.5rem!important}.pr-sm-4,.px-sm-4{padding-right:1.5rem!important}.pb-sm-4,.py-sm-4{padding-bottom:1.5rem!important}.pl-sm-4,.px-sm-4{padding-left:1.5rem!important}.p-sm-5{padding:3rem!important}.pt-sm-5,.py-sm-5{padding-top:3rem!important}.pr-sm-5,.px-sm-5{padding-right:3rem!important}.pb-sm-5,.py-sm-5{padding-bottom:3rem!important}.pl-sm-5,.px-sm-5{padding-left:3rem!important}.m-sm-auto{margin:auto!important}.mt-sm-auto,.my-sm-auto{margin-top:auto!important}.mr-sm-auto,.mx-sm-auto{margin-right:auto!important}.mb-sm-auto,.my-sm-auto{margin-bottom:auto!important}.ml-sm-auto,.mx-sm-auto{margin-left:auto!important}}@media (min-width:768px){.m-md-0{margin:0!important}.mt-md-0,.my-md-0{margin-top:0!important}.mr-md-0,.mx-md-0{margin-right:0!important}.mb-md-0,.my-md-0{margin-bottom:0!important}.ml-md-0,.mx-md-0{margin-left:0!important}.m-md-1{margin:.25rem!important}.mt-md-1,.my-md-1{margin-top:.25rem!important}.mr-md-1,.mx-md-1{margin-right:.25rem!important}.mb-md-1,.my-md-1{margin-bottom:.25rem!important}.ml-md-1,.mx-md-1{margin-left:.25rem!important}.m-md-2{margin:.5rem!important}.mt-md-2,.my-md-2{margin-top:.5rem!important}.mr-md-2,.mx-md-2{margin-right:.5rem!important}.mb-md-2,.my-md-2{margin-bottom:.5rem!important}.ml-md-2,.mx-md-2{margin-left:.5rem!important}.m-md-3{margin:1rem!important}.mt-md-3,.my-md-3{margin-top:1rem!important}.mr-md-3,.mx-md-3{margin-right:1rem!important}.mb-md-3,.my-md-3{margin-bottom:1rem!important}.ml-md-3,.mx-md-3{margin-left:1rem!important}.m-md-4{margin:1.5rem!important}.mt-md-4,.my-md-4{margin-top:1.5rem!important}.mr-md-4,.mx-md-4{margin-right:1.5rem!important}.mb-md-4,.my-md-4{margin-bottom:1.5rem!important}.ml-md-4,.mx-md-4{margin-left:1.5rem!important}.m-md-5{margin:3rem!important}.mt-md-5,.my-md-5{margin-top:3rem!important}.mr-md-5,.mx-md-5{margin-right:3rem!important}.mb-md-5,.my-md-5{margin-bottom:3rem!important}.ml-md-5,.mx-md-5{margin-left:3rem!important}.p-md-0{padding:0!important}.pt-md-0,.py-md-0{padding-top:0!important}.pr-md-0,.px-md-0{padding-right:0!important}.pb-md-0,.py-md-0{padding-bottom:0!important}.pl-md-0,.px-md-0{padding-left:0!important}.p-md-1{padding:.25rem!important}.pt-md-1,.py-md-1{padding-top:.25rem!important}.pr-md-1,.px-md-1{padding-right:.25rem!important}.pb-md-1,.py-md-1{padding-bottom:.25rem!important}.pl-md-1,.px-md-1{padding-left:.25rem!important}.p-md-2{padding:.5rem!important}.pt-md-2,.py-md-2{padding-top:.5rem!important}.pr-md-2,.px-md-2{padding-right:.5rem!important}.pb-md-2,.py-md-2{padding-bottom:.5rem!important}.pl-md-2,.px-md-2{padding-left:.5rem!important}.p-md-3{padding:1rem!important}.pt-md-3,.py-md-3{padding-top:1rem!important}.pr-md-3,.px-md-3{padding-right:1rem!important}.pb-md-3,.py-md-3{padding-bottom:1rem!important}.pl-md-3,.px-md-3{padding-left:1rem!important}.p-md-4{padding:1.5rem!important}.pt-md-4,.py-md-4{padding-top:1.5rem!important}.pr-md-4,.px-md-4{padding-right:1.5rem!important}.pb-md-4,.py-md-4{padding-bottom:1.5rem!important}.pl-md-4,.px-md-4{padding-left:1.5rem!important}.p-md-5{padding:3rem!important}.pt-md-5,.py-md-5{padding-top:3rem!important}.pr-md-5,.px-md-5{padding-right:3rem!important}.pb-md-5,.py-md-5{padding-bottom:3rem!important}.pl-md-5,.px-md-5{padding-left:3rem!important}.m-md-auto{margin:auto!important}.mt-md-auto,.my-md-auto{margin-top:auto!important}.mr-md-auto,.mx-md-auto{margin-right:auto!important}.mb-md-auto,.my-md-auto{margin-bottom:auto!important}.ml-md-auto,.mx-md-auto{margin-left:auto!important}}@media (min-width:992px){.m-lg-0{margin:0!important}.mt-lg-0,.my-lg-0{margin-top:0!important}.mr-lg-0,.mx-lg-0{margin-right:0!important}.mb-lg-0,.my-lg-0{margin-bottom:0!important}.ml-lg-0,.mx-lg-0{margin-left:0!important}.m-lg-1{margin:.25rem!important}.mt-lg-1,.my-lg-1{margin-top:.25rem!important}.mr-lg-1,.mx-lg-1{margin-right:.25rem!important}.mb-lg-1,.my-lg-1{margin-bottom:.25rem!important}.ml-lg-1,.mx-lg-1{margin-left:.25rem!important}.m-lg-2{margin:.5rem!important}.mt-lg-2,.my-lg-2{margin-top:.5rem!important}.mr-lg-2,.mx-lg-2{margin-right:.5rem!important}.mb-lg-2,.my-lg-2{margin-bottom:.5rem!important}.ml-lg-2,.mx-lg-2{margin-left:.5rem!important}.m-lg-3{margin:1rem!important}.mt-lg-3,.my-lg-3{margin-top:1rem!important}.mr-lg-3,.mx-lg-3{margin-right:1rem!important}.mb-lg-3,.my-lg-3{margin-bottom:1rem!important}.ml-lg-3,.mx-lg-3{margin-left:1rem!important}.m-lg-4{marg
gitextract_shwv98fg/
├── .gitignore
├── LICENSE
├── README-ch.md
├── README.md
├── docs/
│ ├── arch_design.md
│ ├── configs.md
│ ├── custom_data_source.md
│ ├── gitlab.md
│ └── ide_source_start.md
├── extendlibs/
│ └── tac-custom-datasource-demo-0.0.4-SNAPSHOT.jar
├── override.properties
├── pom.xml
├── tac-console/
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── alibaba/
│ │ │ └── tac/
│ │ │ └── console/
│ │ │ ├── ConsoleApplication.java
│ │ │ ├── ConsoleBeanConfig.java
│ │ │ ├── ConsoleConstants.java
│ │ │ ├── TacApplicationContext.java
│ │ │ ├── error/
│ │ │ │ ├── ConsoleError.java
│ │ │ │ └── IErrorCode.java
│ │ │ ├── sdk/
│ │ │ │ └── MenuOptionHandler.java
│ │ │ └── web/
│ │ │ ├── HomeController.java
│ │ │ ├── InstFileRO.java
│ │ │ ├── TacInstController.java
│ │ │ ├── TacMsController.java
│ │ │ └── ro/
│ │ │ └── InstTestRO.java
│ │ └── resources/
│ │ ├── application-admin.properties
│ │ ├── application-simple.properties
│ │ ├── application.properties
│ │ ├── static/
│ │ │ ├── css/
│ │ │ │ └── app.797406e2fb84b15ea0b383ad60572f28.css
│ │ │ ├── js/
│ │ │ │ ├── app.606b53e74ca0c7067159.js
│ │ │ │ ├── manifest.58ce01f7a6fd036b4f8d.js
│ │ │ │ └── vendor.8940c3c560d73d0a0b28.js
│ │ │ └── main.css
│ │ ├── tac-console.properties
│ │ └── templates/
│ │ └── index.html
│ └── test/
│ └── java/
│ └── com/
│ └── alibaba/
│ └── tac/
│ └── console/
│ ├── MenuOptionHandlerTest.java
│ └── test/
│ ├── LancherTest.java
│ ├── TacConsoleTest.java
│ └── TestApplication.java
├── tac-console-web/
│ ├── .babelrc
│ ├── .editorconfig
│ ├── .eslintignore
│ ├── .eslintrc.js
│ ├── .gitignore
│ ├── .postcssrc.js
│ ├── README.md
│ ├── build/
│ │ ├── build.js
│ │ ├── check-versions.js
│ │ ├── dev-client.js
│ │ ├── dev-server.js
│ │ ├── utils.js
│ │ ├── vue-loader.conf.js
│ │ ├── webpack.base.conf.js
│ │ ├── webpack.dev.conf.js
│ │ └── webpack.prod.conf.js
│ ├── config/
│ │ ├── dev.env.js
│ │ ├── index.js
│ │ └── prod.env.js
│ ├── index.html
│ ├── package.json
│ ├── src/
│ │ ├── App.vue
│ │ ├── components/
│ │ │ ├── Hello.vue
│ │ │ ├── Home.vue
│ │ │ ├── TacConsole.vue
│ │ │ ├── TacInst.vue
│ │ │ ├── TacInstPublish.vue
│ │ │ ├── TacInstPublishCheck.vue
│ │ │ ├── TacJSONEditor.vue
│ │ │ ├── TacMs.vue
│ │ │ ├── TacMsEdit.vue
│ │ │ └── TacMsList.vue
│ │ ├── main.js
│ │ └── router/
│ │ └── index.js
│ └── static/
│ ├── .gitkeep
│ └── main.css
├── tac-container/
│ ├── pom.xml
│ └── src/
│ └── main/
│ ├── java/
│ │ └── com/
│ │ └── alibaba/
│ │ └── tac/
│ │ └── container/
│ │ ├── ContainerApplication.java
│ │ ├── ContainerBeanConfig.java
│ │ └── web/
│ │ └── TacApiController.java
│ └── resources/
│ └── application.properties
├── tac-custom-datasource-demo/
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ └── java/
│ │ └── com/
│ │ └── tmall/
│ │ └── itemcenter/
│ │ ├── ItemDO.java
│ │ └── TmallItemService.java
│ └── test/
│ └── java/
│ └── com/
│ └── alibaba/
│ └── tac/
│ └── AppTest.java
├── tac-dev-source-demo/
│ ├── pom.xml
│ └── src/
│ └── main/
│ └── java/
│ └── com/
│ └── alibaba/
│ └── tac/
│ └── biz/
│ └── processor/
│ └── HelloWorldTac.java
├── tac-engine/
│ ├── extendlibs/
│ │ ├── gson-2.8.2.jar
│ │ └── tac-dev-source-0.0.1-SNAPSHOT.jar
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── alibaba/
│ │ │ └── tac/
│ │ │ └── engine/
│ │ │ ├── autoconfigure/
│ │ │ │ └── TacAutoConfiguration.java
│ │ │ ├── bootlaucher/
│ │ │ │ └── BootJarLaucherUtils.java
│ │ │ ├── code/
│ │ │ │ ├── CodeCompileService.java
│ │ │ │ ├── CodeLoadService.java
│ │ │ │ ├── CustomerClassLoader.java
│ │ │ │ ├── SpringClassLoader.java
│ │ │ │ └── TacFileService.java
│ │ │ ├── common/
│ │ │ │ ├── DefaultTacIDGenerator.java
│ │ │ │ ├── SequenceCounter.java
│ │ │ │ ├── TacIDGenerator.java
│ │ │ │ └── redis/
│ │ │ │ └── RedisSequenceCounter.java
│ │ │ ├── compile/
│ │ │ │ ├── IJdkCompiler.java
│ │ │ │ ├── InstCodeInfo.java
│ │ │ │ ├── JavaSourceCode.java
│ │ │ │ ├── JdkCompilerImpl.java
│ │ │ │ └── TacJavaFileObject.java
│ │ │ ├── event/
│ │ │ │ └── domain/
│ │ │ │ ├── AbstractMsEvent.java
│ │ │ │ ├── GetAllMsEvent.java
│ │ │ │ ├── MsOfflineEvent.java
│ │ │ │ ├── MsPublishEvent.java
│ │ │ │ └── MsReceivePublishEvent.java
│ │ │ ├── git/
│ │ │ │ └── GitRepoService.java
│ │ │ ├── inst/
│ │ │ │ ├── domain/
│ │ │ │ │ ├── TacInst.java
│ │ │ │ │ ├── TacInstStatus.java
│ │ │ │ │ └── TacInstanceInfo.java
│ │ │ │ └── service/
│ │ │ │ ├── DevMsInstFileService.java
│ │ │ │ ├── IMsInstFileService.java
│ │ │ │ ├── IMsInstService.java
│ │ │ │ ├── LocalMsInstFileService.java
│ │ │ │ └── redis/
│ │ │ │ ├── RedisMsInstFileService.java
│ │ │ │ └── RedisMsInstService.java
│ │ │ ├── ms/
│ │ │ │ ├── domain/
│ │ │ │ │ ├── TacMs.java
│ │ │ │ │ ├── TacMsDO.java
│ │ │ │ │ ├── TacMsPublishMeta.java
│ │ │ │ │ └── TacMsStatus.java
│ │ │ │ └── service/
│ │ │ │ ├── AbstractDefaultMsPublisher.java
│ │ │ │ ├── DefaultMsEventHandlers.java
│ │ │ │ ├── IMsPublisher.java
│ │ │ │ ├── IMsService.java
│ │ │ │ ├── IMsSubscriber.java
│ │ │ │ └── redis/
│ │ │ │ ├── RedisMsPublisher.java
│ │ │ │ ├── RedisMsService.java
│ │ │ │ └── RedisMsSubscriber.java
│ │ │ ├── properties/
│ │ │ │ ├── TacDataPathProperties.java
│ │ │ │ ├── TacGitlabProperties.java
│ │ │ │ ├── TacMsConstants.java
│ │ │ │ └── TacRedisConfigProperties.java
│ │ │ ├── service/
│ │ │ │ ├── DefaultTacEngineService.java
│ │ │ │ ├── EngineBeansConfig.java
│ │ │ │ ├── RedisBeansConfig.java
│ │ │ │ ├── TacEngineService.java
│ │ │ │ ├── TacInstRunService.java
│ │ │ │ ├── TacInstanceContainerService.java
│ │ │ │ ├── TacInstanceLoadService.java
│ │ │ │ └── TacPublishTestService.java
│ │ │ └── util/
│ │ │ ├── Bytes.java
│ │ │ ├── CollectionUtils.java
│ │ │ ├── HConstants.java
│ │ │ ├── IterableUtils.java
│ │ │ ├── TacCompressUtils.java
│ │ │ ├── TacLogUtils.java
│ │ │ ├── ThreadPoolUtils.java
│ │ │ └── ThreadUtils.java
│ │ └── resources/
│ │ ├── META-INF/
│ │ │ └── spring.factories
│ │ └── tac/
│ │ └── default-logback-spring.xml
│ └── test/
│ ├── java/
│ │ └── com/
│ │ └── alibaba/
│ │ └── tac/
│ │ ├── engine/
│ │ │ ├── common/
│ │ │ │ └── redis/
│ │ │ │ └── RedisSequenceCounterTest.java
│ │ │ ├── inst/
│ │ │ │ └── service/
│ │ │ │ └── redis/
│ │ │ │ ├── RedisMsInstFileServiceTest.java
│ │ │ │ └── RedisMsInstServiceTest.java
│ │ │ ├── ms/
│ │ │ │ └── service/
│ │ │ │ └── redis/
│ │ │ │ ├── RedisMsPublisherTest.java
│ │ │ │ └── RedisMsServiceTest.java
│ │ │ ├── service/
│ │ │ │ ├── GitLabFeatureTest.java
│ │ │ │ ├── JdkCompilerTest.java
│ │ │ │ └── TacInstanceLoadServiceTest.java
│ │ │ ├── test/
│ │ │ │ ├── TacEnginTest.java
│ │ │ │ └── TestApplication.java
│ │ │ └── utils/
│ │ │ └── TacFileUtilTest.java
│ │ └── test/
│ │ ├── http/
│ │ │ └── HttpClientTest.java
│ │ └── redis/
│ │ ├── RedisConfig.java
│ │ ├── StringDataRedisTest.java
│ │ └── TacRedisMessageListener.java
│ ├── resources/
│ │ └── test.properties
│ └── source/
│ └── test1/
│ └── com/
│ └── alibaba/
│ └── tac/
│ └── biz/
│ └── processor/
│ └── HelloTac.java
├── tac-infrastructure/
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ └── java/
│ │ └── com/
│ │ └── alibaba/
│ │ └── tac/
│ │ └── infrastracture/
│ │ └── logger/
│ │ ├── TacLogConsts.java
│ │ └── TacLoggerImpl.java
│ └── test/
│ └── java/
│ └── com/
│ └── alibaba/
│ └── tac/
│ └── AppTest.java
└── tac-sdk/
├── pom.xml
└── src/
└── main/
└── java/
└── com/
└── alibaba/
└── tac/
└── sdk/
├── common/
│ ├── TacContants.java
│ ├── TacParams.java
│ ├── TacResult.java
│ └── TacThreadLocals.java
├── domain/
│ ├── Context.java
│ └── TacRequestContext.java
├── error/
│ ├── ErrorCode.java
│ ├── IError.java
│ └── ServiceException.java
├── factory/
│ ├── AbstractServiceFactory.java
│ └── TacInfrasFactory.java
├── handler/
│ ├── DisposableHandler.java
│ ├── InitializingHandler.java
│ └── TacHandler.java
├── infrastracture/
│ └── TacLogger.java
├── tangram4tac/
│ ├── Cell.java
│ ├── Container.java
│ ├── FieldExcluder.java
│ ├── FieldNameMapper.java
│ ├── Style.java
│ ├── lib/
│ │ ├── BannerContainer.java
│ │ ├── BannerStyle.java
│ │ ├── CellType.java
│ │ ├── FiveColumnContainer.java
│ │ ├── FixContainer.java
│ │ ├── FixStyle.java
│ │ ├── FloatContainer.java
│ │ ├── FlowContainer.java
│ │ ├── FlowStyle.java
│ │ ├── FourColumnContainer.java
│ │ ├── OneChildContainer.java
│ │ ├── OneColumnContainer.java
│ │ ├── OnePlusNContainer.java
│ │ ├── OnePlusNStyle.java
│ │ ├── ScrollContainer.java
│ │ ├── ScrollFixBannerContainer.java
│ │ ├── ScrollFixContainer.java
│ │ ├── ScrollStyle.java
│ │ ├── StickyContainer.java
│ │ ├── StickyStyle.java
│ │ ├── ThreeColumnContainer.java
│ │ ├── TwoColumnContainer.java
│ │ ├── WaterFallContainer.java
│ │ └── WaterFallStyle.java
│ ├── render/
│ │ ├── DefaultRender.java
│ │ └── IRender.java
│ └── utils/
│ ├── Pair.java
│ └── Utils.java
└── utils/
└── TacIPUtils.java
SYMBOL INDEX (1751 symbols across 158 files)
FILE: tac-console-web/build/check-versions.js
function exec (line 5) | function exec (cmd) {
FILE: tac-console-web/build/utils.js
function generateLoaders (line 24) | function generateLoaders (loader, loaderOptions) {
FILE: tac-console-web/build/webpack.base.conf.js
function resolve (line 6) | function resolve (dir) {
FILE: tac-console/src/main/java/com/alibaba/tac/console/ConsoleApplication.java
class ConsoleApplication (line 47) | @SpringBootApplication(scanBasePackages = "${tac.app.scan.packages}")
method main (line 60) | public static void main(String[] args)
method webMvcConfigurer (line 111) | @Bean
method exitCodeGenerator (line 127) | @Bean
method run (line 138) | @Override
FILE: tac-console/src/main/java/com/alibaba/tac/console/ConsoleBeanConfig.java
class ConsoleBeanConfig (line 37) | @Slf4j
FILE: tac-console/src/main/java/com/alibaba/tac/console/ConsoleConstants.java
class ConsoleConstants (line 30) | public class ConsoleConstants {
FILE: tac-console/src/main/java/com/alibaba/tac/console/TacApplicationContext.java
class TacApplicationContext (line 33) | @Slf4j
method TacApplicationContext (line 37) | public TacApplicationContext() throws Exception {
FILE: tac-console/src/main/java/com/alibaba/tac/console/error/ConsoleError.java
type ConsoleError (line 31) | public enum ConsoleError implements IErrorCode {
method ConsoleError (line 37) | private ConsoleError(String code, String msg) {
method getCode (line 47) | @Override
method getMessage (line 52) | @Override
FILE: tac-console/src/main/java/com/alibaba/tac/console/error/IErrorCode.java
type IErrorCode (line 30) | public interface IErrorCode {
method getCode (line 32) | String getCode();
method getMessage (line 34) | String getMessage();
FILE: tac-console/src/main/java/com/alibaba/tac/console/sdk/MenuOptionHandler.java
class MenuOptionHandler (line 44) | @Slf4j
method init (line 57) | @PostConstruct
method handleMenuOption (line 69) | public void handleMenuOption() throws IOException {
method handlePackage (line 90) | protected void handlePackage() {
method printUsage (line 129) | public static void printUsage() {
FILE: tac-console/src/main/java/com/alibaba/tac/console/web/HomeController.java
class HomeController (line 34) | @Controller
method index (line 38) | @GetMapping("/")
FILE: tac-console/src/main/java/com/alibaba/tac/console/web/InstFileRO.java
class InstFileRO (line 35) | @Data
FILE: tac-console/src/main/java/com/alibaba/tac/console/web/TacInstController.java
class TacInstController (line 52) | @Slf4j
method uploadFile (line 72) | @PostMapping(value = "/uploadFile")
method getMsInst (line 80) | @GetMapping(value = "/info/{msCode}")
method create (line 99) | @PostMapping("/create")
method update (line 128) | @PostMapping("/update")
method getMsInstList (line 170) | @GetMapping(value = "/list/{msCode}")
method getExistTacInst (line 196) | private TacInst getExistTacInst(TacMsDO ms, String jarVersion) {
method prePublish (line 219) | @PostMapping(value = "/prePublish")
method publish (line 247) | @PostMapping(value = "/publish")
method preTest (line 278) | @PostMapping(value = "/preTest")
method onlineTest (line 301) | @PostMapping(value = "/onlineTest")
method prePublish (line 322) | @GetMapping(value = "/gitPrePublish")
FILE: tac-console/src/main/java/com/alibaba/tac/console/web/TacMsController.java
class TacMsController (line 39) | @RestController
method list (line 46) | @GetMapping("/list")
method create (line 54) | @PostMapping("/create")
method update (line 71) | @PostMapping("/update")
method offline (line 95) | @PostMapping("/offline")
FILE: tac-console/src/main/java/com/alibaba/tac/console/web/ro/InstTestRO.java
class InstTestRO (line 36) | @Data
FILE: tac-console/src/main/resources/static/js/app.606b53e74ca0c7067159.js
function s (line 1) | function s(t){n("kllW")}
function s (line 1) | function s(t){n("KJjl")}
function s (line 1) | function s(t){n("LJGJ")}
function s (line 1) | function s(t){n("JhBm")}
function s (line 1) | function s(t){n("2Y9o")}
function s (line 1) | function s(t){n("Qzvh")}
function s (line 1) | function s(t){n("UJD0")}
function s (line 1) | function s(t){n("wJiV")}
function s (line 1) | function s(t){n("mbCN")}
function s (line 1) | function s(t){n("wpUF")}
FILE: tac-console/src/main/resources/static/js/manifest.58ce01f7a6fd036b4f8d.js
function n (line 1) | function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{...
function r (line 1) | function r(){u.onerror=u.onload=null,clearTimeout(a);var n=o[e];0!==n&&(...
FILE: tac-console/src/main/resources/static/js/vendor.8940c3c560d73d0a0b28.js
function i (line 1) | function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enume...
function i (line 1) | function i(){return{enumerable:!0,configurable:!1,writable:!1}}
function i (line 1) | function i(e,t){}
function r (line 1) | function r(e){return Object.prototype.toString.call(e).indexOf("Error")>-1}
function o (line 1) | function o(e,t){switch(typeof t){case"undefined":return;case"object":ret...
function s (line 1) | function s(e,t){for(var n in t)e[n]=t[n];return e}
function a (line 1) | function a(e,t,n){void 0===t&&(t={});var i,r=n||l;try{i=r(e||"")}catch(e...
function l (line 1) | function l(e){var t={};return(e=e.trim().replace(/^(\?|#|&)/,""))?(e.spl...
function c (line 1) | function c(e){var t=e?Object.keys(e).map(function(t){var n=e[t];if(void ...
function u (line 1) | function u(e,t,n,i){var r=i&&i.options.stringifyQuery,o=t.query||{};try{...
function h (line 1) | function h(e){if(Array.isArray(e))return e.map(h);if(e&&"object"==typeof...
function d (line 1) | function d(e){for(var t=[];e;)t.unshift(e),e=e.parent;return t}
function f (line 1) | function f(e,t){var n=e.path,i=e.query;void 0===i&&(i={});var r=e.hash;v...
function p (line 1) | function p(e,t){return t===Ve?e===t:!!t&&(e.path&&t.path?e.path.replace(...
function m (line 1) | function m(e,t){if(void 0===e&&(e={}),void 0===t&&(t={}),!e||!t)return e...
function g (line 1) | function g(e,t){return 0===e.path.replace(He,"/").indexOf(t.path.replace...
function v (line 1) | function v(e,t){for(var n in t)if(!(n in e))return!1;return!0}
function y (line 1) | function y(e){if(!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey||e.default...
function b (line 1) | function b(e){if(e)for(var t,n=0;n<e.length;n++){if(t=e[n],"a"===t.tag)r...
function w (line 1) | function w(e){if(!w.installed||Oe!==e){w.installed=!0,Oe=e;var t=functio...
function C (line 1) | function C(e,t,n){var i=e.charAt(0);if("/"===i)return e;if("?"===i||"#"=...
function A (line 1) | function A(e){var t="",n="",i=e.indexOf("#");i>=0&&(t=e.slice(i),e=e.sli...
function E (line 1) | function E(e){return e.replace(/\/\//g,"/")}
function x (line 1) | function x(e,t){for(var n,i=[],r=0,o=0,s="",a=t&&t.delimiter||"/";null!=...
function F (line 1) | function F(e,t){return k(x(e,t))}
function S (line 1) | function S(e){return encodeURI(e).replace(/[\/?#]/g,function(e){return"%...
function $ (line 1) | function $(e){return encodeURI(e).replace(/[?#]/g,function(e){return"%"+...
function k (line 1) | function k(e){for(var t=new Array(e.length),n=0;n<e.length;n++)"object"=...
function _ (line 1) | function _(e){return e.replace(/([.+*?=^!:${}()[\]|\/\\])/g,"\\$1")}
function B (line 1) | function B(e){return e.replace(/([=!:$\/()])/g,"\\$1")}
function D (line 1) | function D(e,t){return e.keys=t,e}
function T (line 1) | function T(e){return e.sensitive?"":"i"}
function L (line 1) | function L(e,t){var n=e.source.match(/\((?!\?)/g);if(n)for(var i=0;i<n.l...
function O (line 1) | function O(e,t,n){for(var i=[],r=0;r<e.length;r++)i.push(M(e[r],t,n).sou...
function R (line 1) | function R(e,t,n){return P(x(e,n),t,n)}
function P (line 1) | function P(e,t,n){qe(t)||(n=t||n,t=[]),n=n||{};for(var i=n.strict,r=!1!=...
function M (line 1) | function M(e,t,n){return qe(t)||(n=t||n,t=[]),n=n||{},e instanceof RegEx...
function I (line 1) | function I(e,t,n){try{return(et[e]||(et[e]=Ge.compile(e)))(t||{},{pretty...
function j (line 1) | function j(e,t,n,i){var r=t||[],o=n||Object.create(null),s=i||Object.cre...
function N (line 1) | function N(e,t,n,i,r,o){var s=i.path,a=i.name,l=i.pathToRegexpOptions||{...
function H (line 1) | function H(e,t){var n=Ge(e,[],t);return n}
function V (line 1) | function V(e,t,n){return n||(e=e.replace(/\/$/,"")),"/"===e[0]?e:null==t...
function W (line 1) | function W(e,t,n,i){var r="string"==typeof e?{path:e}:e;if(r.name||r._no...
function z (line 1) | function z(e,t){for(var n in t)e[n]=t[n];return e}
function U (line 1) | function U(e,t){function n(e){j(e,l,c,h)}function i(e,n,i){var r=W(e,n,!...
function K (line 1) | function K(e,t,n){var i=t.match(e);if(!i)return!1;if(!n)return!0;for(var...
function q (line 1) | function q(e,t){return C(e,t.parent?t.parent.path:"/",!0)}
function G (line 1) | function G(){window.history.replaceState({key:oe()},""),window.addEventL...
function J (line 1) | function J(e,t,n,i){if(e.app){var r=e.options.scrollBehavior;r&&e.app.$n...
function Q (line 1) | function Q(){var e=oe();e&&(tt[e]={x:window.pageXOffset,y:window.pageYOf...
function Y (line 1) | function Y(){var e=oe();if(e)return tt[e]}
function X (line 1) | function X(e,t){var n=document.documentElement,i=n.getBoundingClientRect...
function Z (line 1) | function Z(e){return ne(e.x)||ne(e.y)}
function ee (line 1) | function ee(e){return{x:ne(e.x)?e.x:window.pageXOffset,y:ne(e.y)?e.y:win...
function te (line 1) | function te(e){return{x:ne(e.x)?e.x:0,y:ne(e.y)?e.y:0}}
function ne (line 1) | function ne(e){return"number"==typeof e}
function ie (line 1) | function ie(e,t){var n="object"==typeof e;if(n&&"string"==typeof e.selec...
function re (line 1) | function re(){return it.now().toFixed(3)}
function oe (line 1) | function oe(){return rt}
function se (line 1) | function se(e){rt=e}
function ae (line 1) | function ae(e,t){Q();var n=window.history;try{t?n.replaceState({key:rt},...
function le (line 1) | function le(e){ae(e,!0)}
function ce (line 1) | function ce(e,t,n){var i=function(r){r>=e.length?n():e[r]?t(e[r],functio...
function ue (line 1) | function ue(e){return function(t,n,i){var o=!1,s=0,a=null;he(e,function(...
function he (line 1) | function he(e,t){return de(e.map(function(e){return Object.keys(e.compon...
function de (line 1) | function de(e){return Array.prototype.concat.apply([],e)}
function fe (line 1) | function fe(e){return e.__esModule||ot&&"Module"===e[Symbol.toStringTag]}
function pe (line 1) | function pe(e){var t=!1;return function(){for(var n=[],i=arguments.lengt...
function me (line 1) | function me(e){if(!e)if(Ke){var t=document.querySelector("base");e=t&&t....
function ge (line 1) | function ge(e,t){var n,i=Math.max(e.length,t.length);for(n=0;n<i&&e[n]==...
function ve (line 1) | function ve(e,t,n,i){var r=he(e,function(e,i,r,o){var s=ye(e,t);if(s)ret...
function ye (line 1) | function ye(e,t){return"function"!=typeof e&&(e=Oe.extend(e)),e.options[t]}
function be (line 1) | function be(e){return ve(e,"beforeRouteLeave",Ce,!0)}
function we (line 1) | function we(e){return ve(e,"beforeRouteUpdate",Ce)}
function Ce (line 1) | function Ce(e,t){if(t)return function(){return e.apply(t,arguments)}}
function Ae (line 1) | function Ae(e,t,n){return ve(e,"beforeRouteEnter",function(e,i,r,o){retu...
function Ee (line 1) | function Ee(e,t,n,i,r){return function(o,s,a){return e(o,s,function(e){a...
function xe (line 1) | function xe(e,t,n,i){t[n]?e(t[n]):i()&&setTimeout(function(){xe(e,t,n,i)...
function Fe (line 1) | function Fe(e){var t=window.location.pathname;return e&&0===t.indexOf(e)...
function Se (line 1) | function Se(e){var t=Fe(e);if(!/^\/#/.test(t))return window.location.rep...
function $e (line 1) | function $e(){var e=ke();return"/"===e.charAt(0)||(De("/"+e),!1)}
function ke (line 1) | function ke(){var e=window.location.href,t=e.indexOf("#");return-1===t?"...
function _e (line 1) | function _e(e){var t=window.location.href,n=t.indexOf("#");return(n>=0?t...
function Be (line 1) | function Be(e){nt?ae(_e(e)):window.location.hash=e}
function De (line 1) | function De(e){nt?le(_e(e)):window.location.replace(_e(e))}
function Te (line 1) | function Te(e,t){return e.push(t),function(){var n=e.indexOf(t);n>-1&&e....
function Le (line 1) | function Le(e,t,n){var i="hash"===n?"#"+t:t;return e?E(e+"/"+i):i}
function t (line 1) | function t(t,n){var i=this;e.call(this,t,n);var r=t.options.scrollBehavi...
function t (line 1) | function t(t,n,i){e.call(this,t,n),i&&Se(this.base)||$e()}
function t (line 1) | function t(t,n){e.call(this,t,n),this.stack=[],this.index=-1}
function i (line 1) | function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enume...
function i (line 1) | function i(e,t,n,s,a,l,c,u,h){if(n&&"object"==typeof n&&!Array.isArray(n...
function r (line 1) | function r(e){return e.replace(/~/g,"~0").replace(/\//g,"~1")}
function i (line 1) | function i(e,t){this._id=e,this._clearFn=t}
function i (line 1) | function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enume...
function i (line 1) | function i(){for(var e,t,n={},i=arguments.length;i--;)for(var o=0,s=Obje...
function i (line 1) | function i(e,t){var n=this;this.editor=e,this.timeout=void 0,this.delay=...
function i (line 1) | function i(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t<e.len...
function i (line 1) | function i(e){for(var t=e.rules,n=0;n<t.length;n++)if(r(t[n]))return!0}
function r (line 1) | function r(t){return void 0!==e.schema[t.keyword]||t.implements&&o(t)}
function o (line 1) | function o(t){for(var n=t.implements,i=0;i<n.length;i++)if(void 0!==e.sc...
function i (line 1) | function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a ...
function e (line 1) | function e(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.en...
function e (line 1) | function e(t){var o=arguments.length>1&&void 0!==arguments[1]?arguments[...
function i (line 1) | function i(e,t,i,s){var a=n.i(r.b)(t.modifiers||{}).filter(function(e){r...
function i (line 1) | function i(e,t){return e+n.i(r.a)(t)}
function i (line 1) | function i(e){return void 0===e||null===e}
function r (line 1) | function r(e){return void 0!==e&&null!==e}
function o (line 1) | function o(e){return!0===e}
function s (line 1) | function s(e){return!1===e}
function a (line 1) | function a(e){return"string"==typeof e||"number"==typeof e||"symbol"==ty...
function l (line 1) | function l(e){return null!==e&&"object"==typeof e}
function c (line 1) | function c(e){return"[object Object]"===no.call(e)}
function u (line 1) | function u(e){return"[object RegExp]"===no.call(e)}
function h (line 1) | function h(e){var t=parseFloat(String(e));return t>=0&&Math.floor(t)===t...
function d (line 1) | function d(e){return null==e?"":"object"==typeof e?JSON.stringify(e,null...
function f (line 1) | function f(e){var t=parseFloat(e);return isNaN(t)?e:t}
function p (line 1) | function p(e,t){for(var n=Object.create(null),i=e.split(","),r=0;r<i.len...
function m (line 1) | function m(e,t){if(e.length){var n=e.indexOf(t);if(n>-1)return e.splice(...
function g (line 1) | function g(e,t){return oo.call(e,t)}
function v (line 1) | function v(e){var t=Object.create(null);return function(n){return t[n]||...
function y (line 1) | function y(e,t){function n(n){var i=arguments.length;return i?i>1?e.appl...
function b (line 1) | function b(e,t){t=t||0;for(var n=e.length-t,i=new Array(n);n--;)i[n]=e[n...
function w (line 1) | function w(e,t){for(var n in t)e[n]=t[n];return e}
function C (line 1) | function C(e){for(var t={},n=0;n<e.length;n++)e[n]&&w(t,e[n]);return t}
function A (line 1) | function A(e,t,n){}
function E (line 1) | function E(e,t){if(e===t)return!0;var n=l(e),i=l(t);if(!n||!i)return!n&&...
function x (line 1) | function x(e,t){for(var n=0;n<e.length;n++)if(E(e[n],t))return n;return-1}
function F (line 1) | function F(e){var t=!1;return function(){t||(t=!0,e.apply(this,arguments...
function S (line 1) | function S(e){var t=(e+"").charCodeAt(0);return 36===t||95===t}
function $ (line 1) | function $(e,t,n,i){Object.defineProperty(e,t,{value:n,enumerable:!!i,wr...
function k (line 1) | function k(e){if(!yo.test(e)){var t=e.split(".");return function(e){for(...
function _ (line 1) | function _(e){return"function"==typeof e&&/native code/.test(e.toString())}
function B (line 1) | function B(e){jo.target&&No.push(jo.target),jo.target=e}
function D (line 1) | function D(){jo.target=No.pop()}
function T (line 1) | function T(e){return new Ho(void 0,void 0,void 0,String(e))}
function L (line 1) | function L(e,t){var n=e.componentOptions,i=new Ho(e.tag,e.data,e.childre...
function O (line 1) | function O(e,t){for(var n=e.length,i=new Array(n),r=0;r<n;r++)i[r]=L(e[r...
function R (line 1) | function R(e,t,n){e.__proto__=t}
function P (line 1) | function P(e,t,n){for(var i=0,r=n.length;i<r;i++){var o=n[i];$(e,o,t[o])}}
function M (line 1) | function M(e,t){if(l(e)&&!(e instanceof Ho)){var n;return g(e,"__ob__")&...
function I (line 1) | function I(e,t,n,i,r){var o=new jo,s=Object.getOwnPropertyDescriptor(e,t...
function j (line 1) | function j(e,t,n){if(Array.isArray(e)&&h(t))return e.length=Math.max(e.l...
function N (line 1) | function N(e,t){if(Array.isArray(e)&&h(t))return void e.splice(t,1);var ...
function H (line 1) | function H(e){for(var t=void 0,n=0,i=e.length;n<i;n++)t=e[n],t&&t.__ob__...
function V (line 1) | function V(e,t){if(!t)return e;for(var n,i,r,o=Object.keys(t),s=0;s<o.le...
function W (line 1) | function W(e,t,n){return n?function(){var i="function"==typeof t?t.call(...
function z (line 1) | function z(e,t){return t?e?e.concat(t):Array.isArray(t)?t:[t]:e}
function U (line 1) | function U(e,t,n,i){var r=Object.create(e||null);return t?w(r,t):r}
function K (line 1) | function K(e,t){var n=e.props;if(n){var i,r,o,s={};if(Array.isArray(n))f...
function q (line 1) | function q(e,t){var n=e.inject;if(n){var i=e.inject={};if(Array.isArray(...
function G (line 1) | function G(e){var t=e.directives;if(t)for(var n in t){var i=t[n];"functi...
function J (line 1) | function J(e,t,n){function i(i){var r=Jo[i]||Xo;l[i]=r(e[i],t[i],n,i)}"f...
function Q (line 1) | function Q(e,t,n,i){if("string"==typeof n){var r=e[t];if(g(r,n))return r...
function Y (line 1) | function Y(e,t,n,i){var r=t[e],o=!g(n,e),s=n[e];if(ee(Boolean,r.type)&&(...
function X (line 1) | function X(e,t,n){if(g(t,"default")){var i=t.default;return e&&e.$option...
function Z (line 1) | function Z(e){var t=e&&e.toString().match(/^\s*function (\w+)/);return t...
function ee (line 1) | function ee(e,t){if(!Array.isArray(t))return Z(t)===Z(e);for(var n=0,i=t...
function te (line 1) | function te(e,t,n){if(t)for(var i=t;i=i.$parent;){var r=i.$options.error...
function ne (line 1) | function ne(e,t,n){if(vo.errorHandler)try{return vo.errorHandler.call(nu...
function ie (line 1) | function ie(e,t,n){if(!wo&&!Co||"undefined"==typeof console)throw e;cons...
function re (line 1) | function re(){es=!1;var e=Zo.slice(0);Zo.length=0;for(var t=0;t<e.length...
function oe (line 1) | function oe(e){return e._withTask||(e._withTask=function(){ts=!0;var t=e...
function se (line 1) | function se(e,t){var n;if(Zo.push(function(){if(e)try{e.call(t)}catch(e)...
function ae (line 1) | function ae(e){le(e,ss),ss.clear()}
function le (line 1) | function le(e,t){var n,i,r=Array.isArray(e);if((r||l(e))&&!Object.isFroz...
function ce (line 1) | function ce(e){function t(){var e=arguments,n=t.fns;if(!Array.isArray(n)...
function ue (line 1) | function ue(e,t,n,r,o){var s,a,l,c;for(s in e)a=e[s],l=t[s],c=as(s),i(a)...
function he (line 1) | function he(e,t,n){function s(){n.apply(this,arguments),m(a.fns,s)}e ins...
function de (line 1) | function de(e,t,n){var o=t.options.props;if(!i(o)){var s={},a=e.attrs,l=...
function fe (line 1) | function fe(e,t,n,i,o){if(r(t)){if(g(t,n))return e[n]=t[n],o||delete t[n...
function pe (line 1) | function pe(e){for(var t=0;t<e.length;t++)if(Array.isArray(e[t]))return ...
function me (line 1) | function me(e){return a(e)?[T(e)]:Array.isArray(e)?ve(e):void 0}
function ge (line 1) | function ge(e){return r(e)&&r(e.text)&&s(e.isComment)}
function ve (line 1) | function ve(e,t){var n,s,l,c,u=[];for(n=0;n<e.length;n++)s=e[n],i(s)||"b...
function ye (line 1) | function ye(e,t){return(e.__esModule||Po&&"Module"===e[Symbol.toStringTa...
function be (line 1) | function be(e,t,n,i,r){var o=Wo();return o.asyncFactory=e,o.asyncMeta={d...
function we (line 1) | function we(e,t,n){if(o(e.error)&&r(e.errorComp))return e.errorComp;if(r...
function Ce (line 1) | function Ce(e){return e.isComment&&e.asyncFactory}
function Ae (line 1) | function Ae(e){if(Array.isArray(e))for(var t=0;t<e.length;t++){var n=e[t...
function Ee (line 1) | function Ee(e){e._events=Object.create(null),e._hasHookEvent=!1;var t=e....
function xe (line 1) | function xe(e,t,n){n?os.$once(e,t):os.$on(e,t)}
function Fe (line 1) | function Fe(e,t){os.$off(e,t)}
function Se (line 1) | function Se(e,t,n){os=e,ue(t,n||{},xe,Fe,e),os=void 0}
function $e (line 1) | function $e(e,t){var n={};if(!e)return n;for(var i=0,r=e.length;i<r;i++)...
function ke (line 1) | function ke(e){return e.isComment&&!e.asyncFactory||" "===e.text}
function _e (line 1) | function _e(e,t){t=t||{};for(var n=0;n<e.length;n++)Array.isArray(e[n])?...
function Be (line 1) | function Be(e){var t=e.$options,n=t.parent;if(n&&!t.abstract){for(;n.$op...
function De (line 1) | function De(e,t,n){e.$el=t,e.$options.render||(e.$options.render=Wo),Pe(...
function Te (line 1) | function Te(e,t,n,i,r){var o=!!(r||e.$options._renderChildren||i.data.sc...
function Le (line 1) | function Le(e){for(;e&&(e=e.$parent);)if(e._inactive)return!0;return!1}
function Oe (line 1) | function Oe(e,t){if(t){if(e._directInactive=!1,Le(e))return}else if(e._d...
function Re (line 1) | function Re(e,t){if(!(t&&(e._directInactive=!0,Le(e))||e._inactive)){e._...
function Pe (line 1) | function Pe(e,t){var n=e.$options[t];if(n)for(var i=0,r=n.length;i<r;i++...
function Me (line 1) | function Me(){ps=cs.length=us.length=0,hs={},ds=fs=!1}
function Ie (line 1) | function Ie(){fs=!0;var e,t;for(cs.sort(function(e,t){return e.id-t.id})...
function je (line 1) | function je(e){for(var t=e.length;t--;){var n=e[t],i=n.vm;i._watcher===n...
function Ne (line 1) | function Ne(e){e._inactive=!1,us.push(e)}
function He (line 1) | function He(e){for(var t=0;t<e.length;t++)e[t]._inactive=!0,Oe(e[t],!0)}
function Ve (line 1) | function Ve(e){var t=e.id;if(null==hs[t]){if(hs[t]=!0,fs){for(var n=cs.l...
function We (line 1) | function We(e,t,n){vs.get=function(){return this[t][n]},vs.set=function(...
function ze (line 1) | function ze(e){e._watchers=[];var t=e.$options;t.props&&Ue(e,t.props),t....
function Ue (line 1) | function Ue(e,t){var n=e.$options.propsData||{},i=e._props={},r=e.$optio...
function Ke (line 1) | function Ke(e){var t=e.$options.data;t=e._data="function"==typeof t?qe(t...
function qe (line 1) | function qe(e,t){try{return e.call(t,t)}catch(e){return te(e,t,"data()")...
function Ge (line 1) | function Ge(e,t){var n=e._computedWatchers=Object.create(null),i=Oo();fo...
function Je (line 1) | function Je(e,t,n){var i=!Oo();"function"==typeof n?(vs.get=i?Qe(t):n,vs...
function Qe (line 1) | function Qe(e){return function(){var t=this._computedWatchers&&this._com...
function Ye (line 1) | function Ye(e,t){e.$options.props;for(var n in t)e[n]=null==t[n]?A:y(t[n...
function Xe (line 1) | function Xe(e,t){for(var n in t){var i=t[n];if(Array.isArray(i))for(var ...
function Ze (line 1) | function Ze(e,t,n,i){return c(n)&&(i=n,n=n.handler),"string"==typeof n&&...
function et (line 1) | function et(e){var t=e.$options.provide;t&&(e._provided="function"==type...
function tt (line 1) | function tt(e){var t=nt(e.$options.inject,e);t&&(qo.shouldConvert=!1,Obj...
function nt (line 1) | function nt(e,t){if(e){for(var n=Object.create(null),i=Po?Reflect.ownKey...
function it (line 1) | function it(e,t){var n,i,o,s,a;if(Array.isArray(e)||"string"==typeof e)f...
function rt (line 1) | function rt(e,t,n,i){var r,o=this.$scopedSlots[e];if(o)n=n||{},i&&(n=w(w...
function ot (line 1) | function ot(e){return Q(this.$options,"filters",e,!0)||fo}
function st (line 1) | function st(e,t,n,i){var r=vo.keyCodes[t]||n;return r?Array.isArray(r)?-...
function at (line 1) | function at(e,t,n,i,r){if(n)if(l(n)){Array.isArray(n)&&(n=C(n));var o;fo...
function lt (line 1) | function lt(e,t){var n=this._staticTrees||(this._staticTrees=[]),i=n[e];...
function ct (line 1) | function ct(e,t,n){return ut(e,"__once__"+t+(n?"_"+n:""),!0),e}
function ut (line 1) | function ut(e,t,n){if(Array.isArray(e))for(var i=0;i<e.length;i++)e[i]&&...
function ht (line 1) | function ht(e,t,n){e.isStatic=!0,e.key=t,e.isOnce=n}
function dt (line 1) | function dt(e,t){if(t)if(c(t)){var n=e.on=e.on?w({},e.on):{};for(var i i...
function ft (line 1) | function ft(e){e._o=ct,e._n=f,e._s=d,e._l=it,e._t=rt,e._q=E,e._i=x,e._m=...
function pt (line 1) | function pt(e,t,n,i,r){var s=r.options;this.data=e,this.props=t,this.chi...
function mt (line 1) | function mt(e,t,n,i,o){var s=e.options,a={},l=s.props;if(r(l))for(var c ...
function gt (line 1) | function gt(e,t){for(var n in t)e[ao(n)]=t[n]}
function vt (line 1) | function vt(e,t,n,s,a){if(!i(e)){var c=n.$options._base;if(l(e)&&(e=c.ex...
function yt (line 1) | function yt(e,t,n,i){var o={_isComponent:!0,parent:t,_parentVnode:e,_par...
function bt (line 1) | function bt(e){e.hook||(e.hook={});for(var t=0;t<ws.length;t++){var n=ws...
function wt (line 1) | function wt(e,t){return function(n,i,r,o){e(n,i,r,o),t(n,i,r,o)}}
function Ct (line 1) | function Ct(e,t){var n=e.model&&e.model.prop||"value",i=e.model&&e.model...
function At (line 1) | function At(e,t,n,i,r,s){return(Array.isArray(n)||a(n))&&(r=i,i=n,n=void...
function Et (line 1) | function Et(e,t,n,i,o){if(r(n)&&r(n.__ob__))return Wo();if(r(n)&&r(n.is)...
function xt (line 1) | function xt(e,t,n){if(e.ns=t,"foreignObject"===e.tag&&(t=void 0,n=!0),r(...
function Ft (line 1) | function Ft(e){e._vnode=null,e._staticTrees=null;var t=e.$options,n=e.$v...
function St (line 1) | function St(e,t){var n=e.$options=Object.create(e.constructor.options),i...
function $t (line 1) | function $t(e){var t=e.options;if(e.super){var n=$t(e.super);if(n!==e.su...
function kt (line 1) | function kt(e){var t,n=e.options,i=e.extendOptions,r=e.sealedOptions;for...
function _t (line 1) | function _t(e,t,n){if(Array.isArray(e)){var i=[];n=Array.isArray(n)?n:[n...
function Bt (line 1) | function Bt(e){this._init(e)}
function Dt (line 1) | function Dt(e){e.use=function(e){var t=this._installedPlugins||(this._in...
function Tt (line 1) | function Tt(e){e.mixin=function(e){return this.options=J(this.options,e)...
function Lt (line 1) | function Lt(e){e.cid=0;var t=1;e.extend=function(e){e=e||{};var n=this,i...
function Ot (line 1) | function Ot(e){var t=e.options.props;for(var n in t)We(e.prototype,"_pro...
function Rt (line 1) | function Rt(e){var t=e.options.computed;for(var n in t)Je(e.prototype,n,...
function Pt (line 1) | function Pt(e){mo.forEach(function(t){e[t]=function(e,n){return n?("comp...
function Mt (line 1) | function Mt(e){return e&&(e.Ctor.options.name||e.tag)}
function It (line 1) | function It(e,t){return Array.isArray(e)?e.indexOf(t)>-1:"string"==typeo...
function jt (line 1) | function jt(e,t){var n=e.cache,i=e.keys,r=e._vnode;for(var o in n){var s...
function Nt (line 1) | function Nt(e,t,n,i){var r=e[t];!r||i&&r.tag===i.tag||r.componentInstanc...
function Ht (line 1) | function Ht(e){for(var t=e.data,n=e,i=e;r(i.componentInstance);)(i=i.com...
function Vt (line 1) | function Vt(e,t){return{staticClass:zt(e.staticClass,t.staticClass),clas...
function Wt (line 1) | function Wt(e,t){return r(e)||r(t)?zt(e,Ut(t)):""}
function zt (line 1) | function zt(e,t){return e?t?e+" "+t:e:t||""}
function Ut (line 1) | function Ut(e){return Array.isArray(e)?Kt(e):l(e)?qt(e):"string"==typeof...
function Kt (line 1) | function Kt(e){for(var t,n="",i=0,o=e.length;i<o;i++)r(t=Ut(e[i]))&&""!=...
function qt (line 1) | function qt(e){var t="";for(var n in e)e[n]&&(t&&(t+=" "),t+=n);return t}
function Gt (line 1) | function Gt(e){return qs(e)?"svg":"math"===e?"math":void 0}
function Jt (line 1) | function Jt(e){if(!wo)return!0;if(Js(e))return!1;if(e=e.toLowerCase(),nu...
function Qt (line 1) | function Qt(e){if("string"==typeof e){var t=document.querySelector(e);re...
function Yt (line 1) | function Yt(e,t){var n=document.createElement(e);return"select"!==e?n:(t...
function Xt (line 1) | function Xt(e,t){return document.createElementNS(Us[e],t)}
function Zt (line 1) | function Zt(e){return document.createTextNode(e)}
function en (line 1) | function en(e){return document.createComment(e)}
function tn (line 1) | function tn(e,t,n){e.insertBefore(t,n)}
function nn (line 1) | function nn(e,t){e.removeChild(t)}
function rn (line 1) | function rn(e,t){e.appendChild(t)}
function on (line 1) | function on(e){return e.parentNode}
function sn (line 1) | function sn(e){return e.nextSibling}
function an (line 1) | function an(e){return e.tagName}
function ln (line 1) | function ln(e,t){e.textContent=t}
function cn (line 1) | function cn(e,t,n){e.setAttribute(t,n)}
function un (line 1) | function un(e,t){var n=e.data.ref;if(n){var i=e.context,r=e.componentIns...
function hn (line 1) | function hn(e,t){return e.key===t.key&&(e.tag===t.tag&&e.isComment===t.i...
function dn (line 1) | function dn(e,t){if("input"!==e.tag)return!0;var n,i=r(n=e.data)&&r(n=n....
function fn (line 1) | function fn(e,t,n){var i,o,s={};for(i=t;i<=n;++i)o=e[i].key,r(o)&&(s[o]=...
function pn (line 1) | function pn(e,t){(e.data.directives||t.data.directives)&&mn(e,t)}
function mn (line 1) | function mn(e,t){var n,i,r,o=e===ea,s=t===ea,a=gn(e.data.directives,e.co...
function gn (line 1) | function gn(e,t){var n=Object.create(null);if(!e)return n;var i,r;for(i=...
function vn (line 1) | function vn(e){return e.rawName||e.name+"."+Object.keys(e.modifiers||{})...
function yn (line 1) | function yn(e,t,n,i,r){var o=e.def&&e.def[t];if(o)try{o(n.elm,e,n,i,r)}c...
function bn (line 1) | function bn(e,t){var n=t.componentOptions;if(!(r(n)&&!1===n.Ctor.options...
function wn (line 1) | function wn(e,t,n){if(Ns(t))zs(n)?e.removeAttribute(t):(n="allowfullscre...
function Cn (line 1) | function Cn(e,t){var n=t.elm,o=t.data,s=e.data;if(!(i(o.staticClass)&&i(...
function An (line 1) | function An(e){function t(){(s||(s=[])).push(e.slice(p,r).trim()),p=r+1}...
function En (line 1) | function En(e,t){var n=t.indexOf("(");return n<0?'_f("'+t+'")('+e+")":'_...
function xn (line 1) | function xn(e){console.error("[Vue compiler]: "+e)}
function Fn (line 1) | function Fn(e,t){return e?e.map(function(e){return e[t]}).filter(functio...
function Sn (line 1) | function Sn(e,t,n){(e.props||(e.props=[])).push({name:t,value:n}),e.plai...
function $n (line 1) | function $n(e,t,n){(e.attrs||(e.attrs=[])).push({name:t,value:n}),e.plai...
function kn (line 1) | function kn(e,t,n){e.attrsMap[t]=n,e.attrsList.push({name:t,value:n})}
function _n (line 1) | function _n(e,t,n,i,r,o){(e.directives||(e.directives=[])).push({name:t,...
function Bn (line 1) | function Bn(e,t,n,i,r,o){i=i||to,i.capture&&(delete i.capture,t="!"+t),i...
function Dn (line 1) | function Dn(e,t,n){var i=Tn(e,":"+t)||Tn(e,"v-bind:"+t);if(null!=i)retur...
function Tn (line 1) | function Tn(e,t,n){var i;if(null!=(i=e.attrsMap[t]))for(var r=e.attrsLis...
function Ln (line 1) | function Ln(e,t,n){var i=n||{},r=i.number,o=i.trim,s="$$v";o&&(s="(typeo...
function On (line 1) | function On(e,t){var n=Rn(e);return null===n.key?e+"="+t:"$set("+n.exp+"...
function Rn (line 1) | function Rn(e){if($s=e.length,e.indexOf("[")<0||e.lastIndexOf("]")<$s-1)...
function Pn (line 1) | function Pn(){return ks.charCodeAt(++Bs)}
function Mn (line 1) | function Mn(){return Bs>=$s}
function In (line 1) | function In(e){return 34===e||39===e}
function jn (line 1) | function jn(e){var t=1;for(Ds=Bs;!Mn();)if(e=Pn(),In(e))Nn(e);else if(91...
function Nn (line 1) | function Nn(e){for(var t=e;!Mn()&&(e=Pn())!==t;);}
function Hn (line 1) | function Hn(e,t,n){Ls=n;var i=t.value,r=t.modifiers,o=e.tag,s=e.attrsMap...
function Vn (line 1) | function Vn(e,t,n){var i=n&&n.number,r=Dn(e,"value")||"null",o=Dn(e,"tru...
function Wn (line 1) | function Wn(e,t,n){var i=n&&n.number,r=Dn(e,"value")||"null";r=i?"_n("+r...
function zn (line 1) | function zn(e,t,n){var i=n&&n.number,r='Array.prototype.filter.call($eve...
function Un (line 1) | function Un(e,t,n){var i=e.attrsMap.type,r=n||{},o=r.lazy,s=r.number,a=r...
function Kn (line 1) | function Kn(e){if(r(e[la])){var t=xo?"change":"input";e[t]=[].concat(e[l...
function qn (line 1) | function qn(e,t,n){var i=Os;return function r(){null!==e.apply(null,argu...
function Gn (line 1) | function Gn(e,t,n,i,r){t=oe(t),n&&(t=qn(t,e,i)),Os.addEventListener(e,t,...
function Jn (line 1) | function Jn(e,t,n,i){(i||Os).removeEventListener(e,t._withTask||t,n)}
function Qn (line 1) | function Qn(e,t){if(!i(e.data.on)||!i(t.data.on)){var n=t.data.on||{},r=...
function Yn (line 1) | function Yn(e,t){if(!i(e.data.domProps)||!i(t.data.domProps)){var n,o,s=...
function Xn (line 1) | function Xn(e,t){return!e.composing&&("OPTION"===e.tagName||Zn(e,t)||ei(...
function Zn (line 1) | function Zn(e,t){var n=!0;try{n=document.activeElement!==e}catch(e){}ret...
function ei (line 1) | function ei(e,t){var n=e.value,i=e._vModifiers;if(r(i)){if(i.lazy)return...
function ti (line 1) | function ti(e){var t=ni(e.style);return e.staticStyle?w(e.staticStyle,t):t}
function ni (line 1) | function ni(e){return Array.isArray(e)?C(e):"string"==typeof e?da(e):e}
function ii (line 1) | function ii(e,t){var n,i={};if(t)for(var r=e;r.componentInstance;)(r=r.c...
function ri (line 1) | function ri(e,t){var n=t.data,o=e.data;if(!(i(n.staticStyle)&&i(n.style)...
function oi (line 1) | function oi(e,t){if(t&&(t=t.trim()))if(e.classList)t.indexOf(" ")>-1?t.s...
function si (line 1) | function si(e,t){if(t&&(t=t.trim()))if(e.classList)t.indexOf(" ")>-1?t.s...
function ai (line 1) | function ai(e){if(e){if("object"==typeof e){var t={};return!1!==e.css&&w...
function li (line 1) | function li(e){$a(function(){$a(e)})}
function ci (line 1) | function ci(e,t){var n=e._transitionClasses||(e._transitionClasses=[]);n...
function ui (line 1) | function ui(e,t){e._transitionClasses&&m(e._transitionClasses,t),si(e,t)}
function hi (line 1) | function hi(e,t,n){var i=di(e,t),r=i.type,o=i.timeout,s=i.propCount;if(!...
function di (line 1) | function di(e,t){var n,i=window.getComputedStyle(e),r=i[Ea+"Delay"].spli...
function fi (line 1) | function fi(e,t){for(;e.length<t.length;)e=e.concat(e);return Math.max.a...
function pi (line 1) | function pi(e){return 1e3*Number(e.slice(0,-1))}
function mi (line 1) | function mi(e,t){var n=e.elm;r(n._leaveCb)&&(n._leaveCb.cancelled=!0,n._...
function gi (line 1) | function gi(e,t){function n(){E.cancelled||(e.data.show||((o.parentNode....
function vi (line 1) | function vi(e){return"number"==typeof e&&!isNaN(e)}
function yi (line 1) | function yi(e){if(i(e))return!1;var t=e.fns;return r(t)?yi(Array.isArray...
function bi (line 1) | function bi(e,t){!0!==t.data.show&&mi(t)}
function wi (line 1) | function wi(e,t,n){Ci(e,t,n),(xo||So)&&setTimeout(function(){Ci(e,t,n)},0)}
function Ci (line 1) | function Ci(e,t,n){var i=t.value,r=e.multiple;if(!r||Array.isArray(i)){f...
function Ai (line 1) | function Ai(e,t){return t.every(function(t){return!E(t,e)})}
function Ei (line 1) | function Ei(e){return"_value"in e?e._value:e.value}
function xi (line 1) | function xi(e){e.target.composing=!0}
function Fi (line 1) | function Fi(e){e.target.composing&&(e.target.composing=!1,Si(e.target,"i...
function Si (line 1) | function Si(e,t){var n=document.createEvent("HTMLEvents");n.initEvent(t,...
function $i (line 1) | function $i(e){return!e.componentInstance||e.data&&e.data.transition?e:$...
function ki (line 1) | function ki(e){var t=e&&e.componentOptions;return t&&t.Ctor.options.abst...
function _i (line 1) | function _i(e){var t={},n=e.$options;for(var i in n.propsData)t[i]=e[i];...
function Bi (line 1) | function Bi(e,t){if(/\d-keep-alive$/.test(t.tag))return e("keep-alive",{...
function Di (line 1) | function Di(e){for(;e=e.parent;)if(e.data.transition)return!0}
function Ti (line 1) | function Ti(e,t){return t.key===e.key&&t.tag===e.tag}
function Li (line 1) | function Li(e){e.elm._moveCb&&e.elm._moveCb(),e.elm._enterCb&&e.elm._ent...
function Oi (line 1) | function Oi(e){e.data.newPos=e.elm.getBoundingClientRect()}
function Ri (line 1) | function Ri(e){var t=e.data.pos,n=e.data.newPos,i=t.left-n.left,r=t.top-...
function Pi (line 1) | function Pi(e,t){var n=t?za(t):Va;if(n.test(e)){for(var i,r,o,s=[],a=[],...
function Mi (line 1) | function Mi(e,t){var n=(t.warn,Tn(e,"class"));n&&(e.staticClass=JSON.str...
function Ii (line 1) | function Ii(e){var t="";return e.staticClass&&(t+="staticClass:"+e.stati...
function ji (line 1) | function ji(e,t){var n=(t.warn,Tn(e,"style"));if(n){e.staticStyle=JSON.s...
function Ni (line 1) | function Ni(e){var t="";return e.staticStyle&&(t+="staticStyle:"+e.stati...
function Hi (line 1) | function Hi(e,t){var n=t?Al:Cl;return e.replace(n,function(e){return wl[...
function Vi (line 1) | function Vi(e,t){function n(t){u+=t,e=e.substring(t)}function i(e,n,i){v...
function Wi (line 1) | function Wi(e,t,n){return{type:1,tag:e,attrsList:t,attrsMap:lr(t),parent...
function zi (line 1) | function zi(e,t){function n(e){e.pre&&(a=!1),dl(e.tag)&&(l=!1);for(var n...
function Ui (line 1) | function Ui(e){null!=Tn(e,"v-pre")&&(e.pre=!0)}
function Ki (line 1) | function Ki(e){var t=e.attrsList.length;if(t)for(var n=e.attrs=new Array...
function qi (line 1) | function qi(e,t){Gi(e),e.plain=!e.key&&!e.attrsList.length,Ji(e),ir(e),r...
function Gi (line 1) | function Gi(e){var t=Dn(e,"key");t&&(e.key=t)}
function Ji (line 1) | function Ji(e){var t=Dn(e,"ref");t&&(e.ref=t,e.refInFor=sr(e))}
function Qi (line 1) | function Qi(e){var t;if(t=Tn(e,"v-for")){var n=Yi(t);n&&w(e,n)}}
function Yi (line 1) | function Yi(e){var t=e.match($l);if(t){var n={};n.for=t[2].trim();var i=...
function Xi (line 1) | function Xi(e){var t=Tn(e,"v-if");if(t)e.if=t,tr(e,{exp:t,block:e});else...
function Zi (line 1) | function Zi(e,t){var n=er(t.children);n&&n.if&&tr(n,{exp:e.elseif,block:...
function er (line 1) | function er(e){for(var t=e.length;t--;){if(1===e[t].type)return e[t];e.p...
function tr (line 1) | function tr(e,t){e.ifConditions||(e.ifConditions=[]),e.ifConditions.push...
function nr (line 1) | function nr(e){null!=Tn(e,"v-once")&&(e.once=!0)}
function ir (line 1) | function ir(e){if("slot"===e.tag)e.slotName=Dn(e,"name");else{var t;"tem...
function rr (line 1) | function rr(e){var t;(t=Dn(e,"is"))&&(e.component=t),null!=Tn(e,"inline-...
function or (line 1) | function or(e){var t,n,i,r,o,s,a,l=e.attrsList;for(t=0,n=l.length;t<n;t+...
function sr (line 1) | function sr(e){for(var t=e;t;){if(void 0!==t.for)return!0;t=t.parent}ret...
function ar (line 1) | function ar(e){var t=e.match(Tl);if(t){var n={};return t.forEach(functio...
function lr (line 1) | function lr(e){for(var t={},n=0,i=e.length;n<i;n++)t[e[n].name]=e[n].val...
function cr (line 1) | function cr(e){return"script"===e.tag||"style"===e.tag}
function ur (line 1) | function ur(e){return"style"===e.tag||"script"===e.tag&&(!e.attrsMap.typ...
function hr (line 1) | function hr(e){for(var t=[],n=0;n<e.length;n++){var i=e[n];Ol.test(i.nam...
function dr (line 1) | function dr(e,t){if("input"===e.tag){var n=e.attrsMap;if(n["v-model"]&&(...
function fr (line 1) | function fr(e){return Wi(e.tag,e.attrsList.slice(),e.parent)}
function pr (line 1) | function pr(e,t){t.value&&Sn(e,"textContent","_s("+t.value+")")}
function mr (line 1) | function mr(e,t){t.value&&Sn(e,"innerHTML","_s("+t.value+")")}
function gr (line 1) | function gr(e,t){e&&(ml=Nl(t.staticKeys||""),gl=t.isReservedTag||ho,yr(e...
function vr (line 1) | function vr(e){return p("type,tag,attrsList,attrsMap,plain,parent,childr...
function yr (line 1) | function yr(e){if(e.static=wr(e),1===e.type){if(!gl(e.tag)&&"slot"!==e.t...
function br (line 1) | function br(e,t){if(1===e.type){if((e.static||e.once)&&(e.staticInFor=t)...
function wr (line 1) | function wr(e){return 2!==e.type&&(3===e.type||!(!e.pre&&(e.hasBindings|...
function Cr (line 1) | function Cr(e){for(;e.parent;){if(e=e.parent,"template"!==e.tag)return!1...
function Ar (line 1) | function Ar(e,t,n){var i=t?"nativeOn:{":"on:{";for(var r in e)i+='"'+r+'...
function Er (line 1) | function Er(e,t){if(!t)return"function(){}";if(Array.isArray(t))return"[...
function xr (line 1) | function xr(e){return"if(!('button' in $event)&&"+e.map(Fr).join("&&")+"...
function Fr (line 1) | function Fr(e){var t=parseInt(e,10);if(t)return"$event.keyCode!=="+t;var...
function Sr (line 1) | function Sr(e,t){e.wrapListeners=function(e){return"_g("+e+","+t.value+"...
function $r (line 1) | function $r(e,t){e.wrapData=function(n){return"_b("+n+",'"+e.tag+"',"+t....
function kr (line 1) | function kr(e,t){var n=new ql(t);return{render:"with(this){return "+(e?_...
function _r (line 1) | function _r(e,t){if(e.staticRoot&&!e.staticProcessed)return Br(e,t);if(e...
function Br (line 1) | function Br(e,t){return e.staticProcessed=!0,t.staticRenderFns.push("wit...
function Dr (line 1) | function Dr(e,t){if(e.onceProcessed=!0,e.if&&!e.ifProcessed)return Tr(e,...
function Tr (line 1) | function Tr(e,t,n,i){return e.ifProcessed=!0,Lr(e.ifConditions.slice(),t...
function Lr (line 1) | function Lr(e,t,n,i){function r(e){return n?n(e,t):e.once?Dr(e,t):_r(e,t...
function Or (line 1) | function Or(e,t,n,i){var r=e.for,o=e.alias,s=e.iterator1?","+e.iterator1...
function Rr (line 1) | function Rr(e,t){var n="{",i=Pr(e,t);i&&(n+=i+","),e.key&&(n+="key:"+e.k...
function Pr (line 1) | function Pr(e,t){var n=e.directives;if(n){var i,r,o,s,a="directives:[",l...
function Mr (line 1) | function Mr(e,t){var n=e.children[0];if(1===n.type){var i=kr(n,t.options...
function Ir (line 1) | function Ir(e,t){return"scopedSlots:_u(["+Object.keys(e).map(function(n)...
function jr (line 1) | function jr(e,t,n){return t.for&&!t.forProcessed?Nr(e,t,n):"{key:"+e+",f...
function Nr (line 1) | function Nr(e,t,n){var i=t.for,r=t.alias,o=t.iterator1?","+t.iterator1:"...
function Hr (line 1) | function Hr(e,t,n,i,r){var o=e.children;if(o.length){var s=o[0];if(1===o...
function Vr (line 1) | function Vr(e,t){for(var n=0,i=0;i<e.length;i++){var r=e[i];if(1===r.typ...
function Wr (line 1) | function Wr(e){return void 0!==e.for||"template"===e.tag||"slot"===e.tag}
function zr (line 1) | function zr(e,t){return 1===e.type?_r(e,t):3===e.type&&e.isComment?Kr(e)...
function Ur (line 1) | function Ur(e){return"_v("+(2===e.type?e.expression:Qr(JSON.stringify(e....
function Kr (line 1) | function Kr(e){return"_e("+JSON.stringify(e.text)+")"}
function qr (line 1) | function qr(e,t){var n=e.slotName||'"default"',i=Hr(e,t),r="_t("+n+(i?",...
function Gr (line 1) | function Gr(e,t,n){var i=t.inlineTemplate?null:Hr(t,n,!0);return"_c("+e+...
function Jr (line 1) | function Jr(e){for(var t="",n=0;n<e.length;n++){var i=e[n];t+='"'+i.name...
function Qr (line 1) | function Qr(e){return e.replace(/\u2028/g,"\\u2028").replace(/\u2029/g,"...
function Yr (line 1) | function Yr(e,t){try{return new Function(e)}catch(n){return t.push({err:...
function Xr (line 1) | function Xr(e){var t=Object.create(null);return function(n,i,r){i=w({},i...
function Zr (line 1) | function Zr(e){return vl=vl||document.createElement("div"),vl.innerHTML=...
function eo (line 1) | function eo(e){if(e.outerHTML)return e.outerHTML;var t=document.createEl...
function e (line 6) | function e(){this.set=Object.create(null)}
function n (line 6) | function n(){i.$off(e,n),t.apply(i,arguments)}
function t (line 6) | function t(e){return new Ho(D.tagName(e).toLowerCase(),{},[],void 0,e)}
function n (line 6) | function n(e,t){function n(){0==--n.listeners&&s(e)}return n.listeners=t,n}
function s (line 6) | function s(e){var t=D.parentNode(e);r(t)&&D.removeChild(t,e)}
function l (line 6) | function l(e,t,n,i,s){if(e.isRootInsert=!s,!c(e,t,n,i)){var a=e.data,l=e...
function c (line 6) | function c(e,t,n,i){var s=e.data;if(r(s)){var a=r(e.componentInstance)&&...
function u (line 6) | function u(e,t){r(e.data.pendingInsert)&&(t.push.apply(t,e.data.pendingI...
function h (line 6) | function h(e,t,n,i){for(var o,s=e;s.componentInstance;)if(s=s.componentI...
function d (line 6) | function d(e,t,n){r(e)&&(r(n)?n.parentNode===e&&D.insertBefore(e,t,n):D....
function f (line 6) | function f(e,t,n){if(Array.isArray(t))for(var i=0;i<t.length;++i)l(t[i],...
function m (line 6) | function m(e){for(;e.componentInstance;)e=e.componentInstance._vnode;ret...
function g (line 6) | function g(e,t){for(var n=0;n<_.create.length;++n)_.create[n](ea,e);$=e....
function v (line 6) | function v(e){var t;if(r(t=e.fnScopeId))D.setAttribute(e.elm,t,"");else ...
function y (line 6) | function y(e,t,n,i,r,o){for(;i<=r;++i)l(n[i],o,e,t)}
function b (line 6) | function b(e){var t,n,i=e.data;if(r(i))for(r(t=i.hook)&&r(t=t.destroy)&&...
function w (line 6) | function w(e,t,n,i){for(;n<=i;++n){var o=t[n];r(o)&&(r(o.tag)?(C(o),b(o)...
function C (line 6) | function C(e,t){if(r(t)||r(e.data)){var i,o=_.remove.length+1;for(r(t)?t...
function A (line 6) | function A(e,t,n,o,s){for(var a,c,u,h,d=0,f=0,p=t.length-1,m=t[0],g=t[p]...
function E (line 6) | function E(e,t,n,i){for(var o=n;o<i;o++){var s=t[o];if(r(s)&&hn(e,s))ret...
function x (line 6) | function x(e,t,n,s){if(e!==t){var a=t.elm=e.elm;if(o(e.isAsyncPlaceholde...
function F (line 6) | function F(e,t,n){if(o(n)&&r(e.parent))e.parent.data.pendingInsert=t;els...
function S (line 6) | function S(e,t,n,i){var s,a=t.tag,l=t.data,c=t.children;if(i=i||l&&l.pre...
function n (line 6) | function n(n,i){var r=Object.create(t),o=[],s=[];if(r.warn=function(e,t)...
function i (line 6) | function i(e,t,n,s){function C(){var e=H.validate,t=e.apply(null,argumen...
function r (line 6) | function r(e,t,n){var i=s.call(this,e,t,n);return i>=0?{index:i,compilin...
function o (line 6) | function o(e,t,n){var i=s.call(this,e,t,n);i>=0&&this._compilations.spli...
function s (line 6) | function s(e,t,n){for(var i=0;i<this._compilations.length;i++){var r=thi...
function a (line 6) | function a(e,t){return"var pattern"+e+" = new RegExp("+f.toQuotedString(...
function l (line 6) | function l(e){return"var default"+e+" = defaults["+e+"];"}
function c (line 6) | function c(e,t){return void 0===t[e]?"":"var refVal"+e+" = refVal["+e+"];"}
function u (line 6) | function u(e){return"var customRule"+e+" = customRules["+e+"];"}
function h (line 6) | function h(e,t){if(!e.length)return"";for(var n="",i=0;i<e.length;i++)n+...
function i (line 6) | function i(e){console.warn("[Bootstrap-Vue warn]: "+e)}
function i (line 6) | function i(e){return"string"!=typeof e&&(e=String(e)),e.charAt(0).toUppe...
function i (line 6) | function i(e){this.state=ae,this.value=void 0,this.deferred=[];var t=thi...
function r (line 6) | function r(e,t){e instanceof Promise?this.promise=e:this.promise=new Pro...
function o (line 6) | function o(e){var t=e.config,n=e.nextTick;ue=n,me=t.debug||!t.silent}
function s (line 6) | function s(e){"undefined"!=typeof console&&me&&console.warn("[VueResourc...
function a (line 6) | function a(e){"undefined"!=typeof console&&console.error(e)}
function l (line 6) | function l(e,t){return ue(e,t)}
function c (line 6) | function c(e){return e?e.replace(/^\s*|\s*$/g,""):""}
function u (line 6) | function u(e,t){return e&&void 0===t?e.replace(/\s+$/,""):e&&t?e.replace...
function h (line 6) | function h(e){return e?e.toLowerCase():""}
function d (line 6) | function d(e){return e?e.toUpperCase():""}
function f (line 6) | function f(e){return"string"==typeof e}
function p (line 6) | function p(e){return"function"==typeof e}
function m (line 6) | function m(e){return null!==e&&"object"==typeof e}
function g (line 6) | function g(e){return m(e)&&Object.getPrototypeOf(e)==Object.prototype}
function v (line 6) | function v(e){return"undefined"!=typeof Blob&&e instanceof Blob}
function y (line 6) | function y(e){return"undefined"!=typeof FormData&&e instanceof FormData}
function b (line 6) | function b(e,t,n){var i=r.resolve(e);return arguments.length<2?i:i.then(...
function w (line 6) | function w(e,t,n){return n=n||{},p(n)&&(n=n.call(t)),A(e.bind({$vm:t,$op...
function C (line 6) | function C(e,t){var n,i;if(ve(e))for(n=0;n<e.length;n++)t.call(e[n],e[n]...
function A (line 6) | function A(e){return pe.call(arguments,1).forEach(function(t){F(e,t,!0)}...
function E (line 6) | function E(e){return pe.call(arguments,1).forEach(function(t){for(var n ...
function x (line 6) | function x(e){return pe.call(arguments,1).forEach(function(t){F(e,t)}),e}
function F (line 6) | function F(e,t,n){for(var i in t)n&&(g(t[i])||ve(t[i]))?(g(t[i])&&!g(e[i...
function S (line 6) | function S(e,t){var n=t(e);return f(e.root)&&!/^(https?:)?\//.test(n)&&(...
function $ (line 6) | function $(e,t){var n=Object.keys(P.options.params),i={},r=t(e);return C...
function k (line 6) | function k(e,t,n){var i=_(e),r=i.expand(t);return n&&n.push.apply(n,i.va...
function _ (line 6) | function _(e){var t=["+","#",".","/",";","?","&"],n=[];return{vars:n,exp...
function B (line 6) | function B(e,t,n,i){var r=e[n],o=[];if(D(r)&&""!==r)if("string"==typeof ...
function D (line 6) | function D(e){return void 0!==e&&null!==e}
function T (line 6) | function T(e){return";"===e||"&"===e||"?"===e}
function L (line 6) | function L(e,t,n){return t="+"===e||"#"===e?O(t):encodeURIComponent(t),n...
function O (line 6) | function O(e){return e.split(/(%[0-9A-Fa-f]{2})/g).map(function(e){retur...
function R (line 6) | function R(e){var t=[],n=k(e.url,e.params,t);return t.forEach(function(t...
function P (line 6) | function P(e,t){var n,i=this||{},r=e;return f(e)&&(r={url:e,params:t}),r...
function M (line 6) | function M(e,t,n){return function(i){return e.call(n,i,t)}}
function I (line 6) | function I(e,t,n){var i,r=ve(t),o=g(t);C(t,function(t,s){i=m(t)||ve(t),n...
function j (line 6) | function j(e){return new r(function(t){var n=new XDomainRequest,i=functi...
function N (line 6) | function N(e){if(ge){var t=P.parse(location.href),n=P.parse(e.getUrl());...
function H (line 6) | function H(e){y(e.body)?e.headers.delete("Content-Type"):m(e.body)&&e.em...
function V (line 6) | function V(e){var t=e.headers.get("Content-Type")||"";return m(e.body)&&...
function W (line 6) | function W(e){var t=e.match(/^\s*(\[|\{)/),n={"[":/]\s*$/,"{":/}\s*$/};r...
function z (line 6) | function z(e){return new r(function(t){var n,i,r=e.jsonp||"callback",o=e...
function U (line 6) | function U(e){"JSONP"==e.method&&(e.client=z)}
function K (line 6) | function K(e){p(e.before)&&e.before.call(this,e)}
function q (line 6) | function q(e){e.emulateHTTP&&/^(PUT|PATCH|DELETE)$/i.test(e.method)&&(e....
function G (line 6) | function G(e){C(ye({},ie.headers.common,e.crossOrigin?{}:ie.headers.cust...
function J (line 6) | function J(e){return new r(function(t){var n=new XMLHttpRequest,i=functi...
function Q (line 6) | function Q(e){var t=n(0);return new r(function(n){var i,r=e.getUrl(),o=e...
function Y (line 6) | function Y(e){function t(t){for(;n.length;){var o=n.pop();if(p(o)){var a...
function X (line 6) | function X(e){return(e.client||(ge?J:Q))(e)}
function Z (line 6) | function Z(e,t){return Object.keys(e).reduce(function(e,n){return h(t)==...
function ee (line 6) | function ee(e){if(/[^a-z0-9\-#$%&'*+.^_`|~]/i.test(e))throw new TypeErro...
function te (line 6) | function te(e){return new r(function(t){var n=new FileReader;n.readAsTex...
function ne (line 6) | function ne(e){return 0===e.type.indexOf("text")||-1!==e.type.indexOf("j...
function ie (line 6) | function ie(e){var t=this||{},n=Y(t.$vm);return E(e||{},t.$options,ie.op...
function re (line 6) | function re(e,t,n,i){var r=this||{},o={};return n=ye({},re.actions,n),C(...
function oe (line 6) | function oe(e,t){var n,i=ye({},e),r={};switch(t.length){case 2:r=t[0],n=...
function se (line 6) | function se(e){se.installed||(o(e),e.url=P,e.http=ie,e.resource=re,e.Pro...
function i (line 11) | function i(e,t,n){var o=this._refs[n];if("string"==typeof o){if(!this._r...
function r (line 11) | function r(e,t){var n=m.parse(t,!1,!0),i=h(n),r=u(this._getId(e.schema))...
function o (line 11) | function o(e,t,n){var i=r.call(this,e,t);if(i){var o=i.schema,a=i.baseId...
function s (line 11) | function s(e,t,n,i){if(e.hash=e.hash||"","#/"==e.hash.slice(0,2)){for(va...
function a (line 11) | function a(e,t){return!1!==t&&(void 0===t||!0===t?l(e):t?c(e)<=t:void 0)}
function l (line 11) | function l(e){var t;if(Array.isArray(e)){for(var n=0;n<e.length;n++)if("...
function c (line 11) | function c(e){var t,n=0;if(Array.isArray(e)){for(var i=0;i<e.length;i++)...
function u (line 11) | function u(e,t){return!1!==t&&(e=d(e)),h(m.parse(e,!1,!0))}
function h (line 11) | function h(e){var t=e.protocol||"//"==e.href.slice(0,2)?"//":"";return(e...
function d (line 11) | function d(e){return e?e.replace(A,""):""}
function f (line 11) | function f(e,t){return t=d(t),m.resolve(e,t)}
function p (line 11) | function p(e){var t=d(this._getId(e)),n={"":t},i={"":u(t,!1)},r={},o=thi...
function i (line 11) | function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a ...
function r (line 11) | function r(e){return"__BV_"+e+"_"+w+++"__"}
function e (line 11) | function e(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.en...
function e (line 11) | function e(t,n,o){i(this,e),this.$isEnabled=!0,this.$fadeTimeout=null,th...
function i (line 11) | function i(e,t){t=t||{};for(var n in e)t[n]=e[n];return t}
function r (line 11) | function r(e,t,n){var i=n?" !== ":" === ",r=n?" || ":" && ",o=n?"!":"",s...
function o (line 11) | function o(e,t){switch(e.length){case 1:return r(e[0],t,!0);default:var ...
function s (line 11) | function s(e,t){if(Array.isArray(t)){for(var n=[],i=0;i<t.length;i++){va...
function a (line 11) | function a(e){for(var t={},n=0;n<e.length;n++)t[e[n]]=!0;return t}
function l (line 11) | function l(e){return"number"==typeof e?"["+e+"]":S.test(e)?"."+e:"['"+c(...
function c (line 11) | function c(e){return e.replace($,"\\$&").replace(/\n/g,"\\n").replace(/\...
function u (line 11) | function u(e,t){t+="[^0-9]";var n=e.match(new RegExp(t,"g"));return n?n....
function h (line 11) | function h(e,t,n){return t+="([^0-9])",n=n.replace(/\$/g,"$$$$"),e.repla...
function d (line 11) | function d(e){return e.replace(k,"").replace(_,"").replace(B,"if (!($1))")}
function f (line 11) | function f(e,t){var n=e.match(D);return n&&2==n.length&&(e=t?e.replace(L...
function p (line 11) | function p(e,t){if("boolean"==typeof e)return!e;for(var n in e)if(t[n])r...
function m (line 11) | function m(e,t,n){if("boolean"==typeof e)return!e&&"not"!=n;for(var i in...
function g (line 11) | function g(e){return"'"+c(e)+"'"}
function v (line 11) | function v(e,t,n,i){return w(e,n?"'/' + "+t+(i?"":".replace(/~/g, '~0')....
function y (line 11) | function y(e,t,n){return w(e,g(n?"/"+E(t):l(t)))}
function b (line 11) | function b(e,t,n){var i,r,o,s;if(""===e)return"rootData";if("/"==e[0]){i...
function w (line 11) | function w(e,t){return'""'==e?t:(e+" + "+t).replace(/' \+ '/g,"")}
function C (line 11) | function C(e){return x(decodeURIComponent(e))}
function A (line 11) | function A(e){return encodeURIComponent(E(e))}
function E (line 11) | function E(e){return e.replace(/~/g,"~0").replace(/\//g,"~1")}
function x (line 11) | function x(e){return e.replace(/~1/g,"/").replace(/~0/g,"~")}
function i (line 11) | function i(e){return null!==e&&"object"===(void 0===e?"undefined":a(e))}
function r (line 11) | function r(e,t){if(e===t)return!0;var a=i(e),l=i(t);if(!a||!l)return!a&&...
function e (line 11) | function e(e){t._onEvent&&t._onEvent(e)}
function t (line 11) | function t(e){return void 0!==e.field?e._escapeHTML(e.field):isNaN(e.ind...
function i (line 11) | function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enume...
function r (line 11) | function r(e){"focusin"===e.type?n.i(c.b)(e.target,"focus"):"focusout"==...
function i (line 11) | function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enume...
function n (line 11) | function n(e,t){var n=e[1]||"",r=e[3];if(!r)return n;if(t&&"function"==t...
function i (line 11) | function i(e){return"/*# sourceMappingURL=data:application/json;charset=...
function i (line 11) | function i(e,t){return n.i(r.a)(t).map(function(t,n){return{number:n+e,c...
function i (line 11) | function i(e){var t={};"string"==typeof e.value?t.content=e.value:"funct...
function r (line 11) | function r(e,t,r){if(h)return s.a?void(e[d]?e[d].updateConfig(i(t)):e[d]...
function o (line 11) | function o(e){h&&e[d]&&(e[d].destroy(),e[d]=null,delete e[d])}
function i (line 11) | function i(e){this.editor=e,this.history=[],this.index=-1,this.clear(),t...
function i (line 11) | function i(e,t,i){var s=window.MutationObserver||window.WebKitMutationOb...
function i (line 11) | function i(){return Array.prototype.concat.apply([],arguments)}
function i (line 11) | function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enume...
function t (line 11) | function t(){e.preventDefault(),e.stopPropagation()}
function t (line 11) | function t(){e.preventDefault(),e.stopPropagation()}
function s (line 11) | function s(e){throw new RangeError(T[e])}
function a (line 11) | function a(e,t){for(var n=e.length,i=[];n--;)i[n]=t(e[n]);return i}
function l (line 11) | function l(e,t){var n=e.split("@"),i="";return n.length>1&&(i=n[0]+"@",e...
function c (line 11) | function c(e){for(var t,n,i=[],r=0,o=e.length;r<o;)t=e.charCodeAt(r++),t...
function u (line 11) | function u(e){return a(e,function(e){var t="";return e>65535&&(e-=65536,...
function h (line 11) | function h(e){return e-48<10?e-22:e-65<26?e-65:e-97<26?e-97:C}
function d (line 11) | function d(e,t){return e+22+75*(e<26)-((0!=t)<<5)}
function f (line 11) | function f(e,t,n){var i=0;for(e=n?O(e/F):e>>1,e+=O(e/t);e>L*E>>1;i+=C)e=...
function p (line 11) | function p(e){var t,n,i,r,o,a,l,c,d,p,m=[],g=e.length,v=0,y=$,b=S;for(n=...
function m (line 11) | function m(e){var t,n,i,r,o,a,l,u,h,p,m,g,v,y,b,x=[];for(e=c(e),g=e.leng...
function g (line 11) | function g(e){return l(e,function(e){return _.test(e)?p(e.slice(4).toLow...
function v (line 11) | function v(e){return l(e,function(e){return B.test(e)?"xn--"+m(e):e})}
function i (line 11) | function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enume...
function i (line 11) | function i(){this.locked=!1}
function i (line 11) | function i(e,t,n){function o(e){var t=e.$schema;return t&&!a.getSchema(t...
function t (line 11) | function t(){return e.charAt(s)}
function n (line 11) | function n(){return e.charAt(s+1)}
function i (line 11) | function i(){return e.charAt(s-1)}
function r (line 11) | function r(n){o.push('"'),s++;for(var r=t();s<e.length&&r!==n;)'"'===r&&...
function e (line 11) | function e(e){e.hasOwnProperty("remove")||Object.defineProperty(e,"remov...
function i (line 11) | function i(e,t){return t+(e?n.i(r.a)(e):"")}
function t (line 11) | function t(){var e;return e=n.lexer.lex()||1,"number"!=typeof e&&(e=n.sy...
function i (line 11) | function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a ...
function r (line 11) | function r(e,t){if(!e)throw new ReferenceError("this hasn't been initial...
function o (line 11) | function o(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("S...
function e (line 11) | function e(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.en...
function t (line 11) | function t(){return i(this,t),r(this,(t.__proto__||Object.getPrototypeOf...
function i (line 11) | function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enume...
function i (line 11) | function i(e){return e}
function i (line 11) | function i(){this.protocol=null,this.slashes=null,this.auth=null,this.ho...
function r (line 11) | function r(e,t,n){if(e&&c.isObject(e)&&e instanceof i)return e;var r=new...
function o (line 11) | function o(e){return c.isString(e)&&(e=r(e)),e instanceof i?e.format():i...
function s (line 11) | function s(e,t){return r(e,!1,!0).resolve(t)}
function a (line 11) | function a(e,t){return e?r(e,!1,!0).resolveObject(t):t}
function i (line 11) | function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enume...
function r (line 11) | function r(){return{type:[Boolean,String,Number],default:!1}}
function o (line 11) | function o(){return{type:[String,Number],default:null}}
function i (line 11) | function i(e){return e?e instanceof Object?n.i(f.b)(e).map(function(t){r...
function r (line 11) | function r(e){return e instanceof Object?i(n.i(f.b)(e).reduce(function(t...
function o (line 11) | function o(e,t,n){return"number"==typeof e[n]&&"number"==typeof t[n]?e[n...
function s (line 11) | function s(e,t){var i=null;return"string"==typeof t?i={key:e,label:t}:"f...
function n (line 11) | function n(){throw new Error("setTimeout has not been defined")}
function i (line 11) | function i(){throw new Error("clearTimeout has not been defined")}
function r (line 11) | function r(e){if(u===setTimeout)return setTimeout(e,0);if((u===n||!u)&&s...
function o (line 11) | function o(e){if(h===clearTimeout)return clearTimeout(e);if((h===i||!h)&...
function s (line 11) | function s(){m&&f&&(m=!1,f.length?p=f.concat(p):g=-1,p.length&&a())}
function a (line 11) | function a(){if(!m){var e=r(s);m=!0;for(var t=p.length;t;){for(f=p,p=[];...
function l (line 11) | function l(e,t){this.fun=e,this.array=t}
function c (line 11) | function c(){}
function i (line 11) | function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enume...
function i (line 11) | function i(e,t){return e.map(function(e,t){return[t,e]}).sort(function(e...
function i (line 11) | function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enume...
function i (line 11) | function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enume...
function e (line 11) | function e(){r.curserInfoElements.countVal.innerText!==i&&(r.curserInfoE...
function i (line 11) | function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enume...
function n (line 11) | function n(e){var t=!1;return function(){t||(t=!0,window.Promise.resolve...
function i (line 11) | function i(e){var t=!1;return function(){t||(t=!0,setTimeout(function(){...
function r (line 11) | function r(e){var t={};return e&&"[object Function]"===t.toString.call(e)}
function o (line 11) | function o(e,t){if(1!==e.nodeType)return[];var n=getComputedStyle(e,null...
function s (line 11) | function s(e){return"HTML"===e.nodeName?e:e.parentNode||e.host}
function a (line 11) | function a(e){if(!e)return document.body;switch(e.nodeName){case"HTML":c...
function l (line 11) | function l(e){var t=e&&e.offsetParent,n=t&&t.nodeName;return n&&"BODY"!=...
function c (line 11) | function c(e){var t=e.nodeName;return"BODY"!==t&&("HTML"===t||l(e.firstE...
function u (line 11) | function u(e){return null!==e.parentNode?u(e.parentNode):e}
function h (line 11) | function h(e,t){if(!(e&&e.nodeType&&t&&t.nodeType))return document.docum...
function d (line 11) | function d(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[...
function f (line 11) | function f(e,t){var n=arguments.length>2&&void 0!==arguments[2]&&argumen...
function p (line 11) | function p(e,t){var n="x"===t?"Left":"Top",i="Left"===n?"Right":"Bottom"...
function m (line 11) | function m(e,t,n,i){return Math.max(t["offset"+e],t["scroll"+e],n["clien...
function g (line 11) | function g(){var e=document.body,t=document.documentElement,n=pe()&&getC...
function v (line 11) | function v(e){return ye({},e,{right:e.left+e.width,bottom:e.top+e.height})}
function y (line 11) | function y(e){var t={};if(pe())try{t=e.getBoundingClientRect();var n=d(e...
function b (line 11) | function b(e,t){var n=pe(),i="HTML"===t.nodeName,r=y(e),s=y(t),l=a(e),c=...
function w (line 11) | function w(e){var t=e.ownerDocument.documentElement,n=b(e,t),i=Math.max(...
function C (line 11) | function C(e){var t=e.nodeName;return"BODY"!==t&&"HTML"!==t&&("fixed"===...
function A (line 11) | function A(e,t,n,i){var r={top:0,left:0},o=h(e,t);if("viewport"===i)r=w(...
function E (line 11) | function E(e){return e.width*e.height}
function x (line 11) | function x(e,t,n,i,r){var o=arguments.length>5&&void 0!==arguments[5]?ar...
function F (line 11) | function F(e,t,n){return b(n,h(t,n))}
function S (line 11) | function S(e){var t=getComputedStyle(e),n=parseFloat(t.marginTop)+parseF...
function $ (line 11) | function $(e){var t={left:"right",right:"left",bottom:"top",top:"bottom"...
function k (line 11) | function k(e,t,n){n=n.split("-")[0];var i=S(e),r={width:i.width,height:i...
function _ (line 11) | function _(e,t){return Array.prototype.find?e.find(t):e.filter(t)[0]}
function B (line 11) | function B(e,t,n){if(Array.prototype.findIndex)return e.findIndex(functi...
function D (line 11) | function D(e,t,n){return(void 0===n?e:e.slice(0,B(e,"name",n))).forEach(...
function T (line 11) | function T(){if(!this.state.isDestroyed){var e={instance:this,styles:{},...
function L (line 11) | function L(e,t){return e.some(function(e){var n=e.name;return e.enabled&...
function O (line 11) | function O(e){for(var t=[!1,"ms","Webkit","Moz","O"],n=e.charAt(0).toUpp...
function R (line 11) | function R(){return this.state.isDestroyed=!0,L(this.modifiers,"applySty...
function P (line 11) | function P(e){var t=e.ownerDocument;return t?t.defaultView:window}
function M (line 11) | function M(e,t,n,i){var r="BODY"===e.nodeName,o=r?e.ownerDocument.defaul...
function I (line 11) | function I(e,t,n,i){n.updateBound=i,P(e).addEventListener("resize",n.upd...
function j (line 11) | function j(){this.state.eventsEnabled||(this.state=I(this.reference,this...
function N (line 11) | function N(e,t){return P(e).removeEventListener("resize",t.updateBound),...
function H (line 11) | function H(){this.state.eventsEnabled&&(cancelAnimationFrame(this.schedu...
function V (line 11) | function V(e){return""!==e&&!isNaN(parseFloat(e))&&isFinite(e)}
function W (line 11) | function W(e,t){Object.keys(t).forEach(function(n){var i="";-1!==["width...
function z (line 11) | function z(e,t){Object.keys(t).forEach(function(n){!1!==t[n]?e.setAttrib...
function U (line 11) | function U(e){return W(e.instance.popper,e.styles),z(e.instance.popper,e...
function K (line 11) | function K(e,t,n,i,r){var o=F(r,t,e),s=x(n.placement,o,t,e,n.modifiers.f...
function q (line 11) | function q(e,t){var n=t.x,i=t.y,r=e.offsets.popper,o=_(e.instance.modifi...
function G (line 11) | function G(e,t,n){var i=_(e,function(e){return e.name===t}),r=!!i&&e.som...
function J (line 11) | function J(e,t){var n;if(!G(e.instance.modifiers,"arrow","keepTogether")...
function Q (line 11) | function Q(e){return"end"===e?"start":"start"===e?"end":e}
function Y (line 11) | function Y(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments...
function X (line 11) | function X(e,t){if(L(e.instance.modifiers,"inner"))return e;if(e.flipped...
function Z (line 11) | function Z(e){var t=e.offsets,n=t.popper,i=t.reference,r=e.placement.spl...
function ee (line 11) | function ee(e,t,n,i){var r=e.match(/((?:\-|\+)?\d*\.?\d*)(.*)/),o=+r[1],...
function te (line 11) | function te(e,t,n,i){var r=[0,0],o=-1!==["right","left"].indexOf(i),s=e....
function ne (line 11) | function ne(e,t){var n=t.offset,i=e.placement,r=e.offsets,o=r.popper,s=r...
function ie (line 11) | function ie(e,t){var n=t.boundariesElement||l(e.instance.popper);e.insta...
function re (line 11) | function re(e){var t=e.placement,n=t.split("-")[0],i=t.split("-")[1];if(...
function oe (line 11) | function oe(e){if(!G(e.instance.modifiers,"hide","preventOverflow"))retu...
function se (line 11) | function se(e){var t=e.placement,n=t.split("-")[0],i=e.offsets,r=i.poppe...
function e (line 11) | function e(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.en...
function e (line 11) | function e(t,n){var i=this,o=arguments.length>2&&void 0!==arguments[2]?a...
function i (line 11) | function i(e){var t=n.i(r.f)(null);return function(){var n=JSON.stringif...
function i (line 11) | function i(e,t){return n.i(r.a)(t.replace(e,""))}
function i (line 11) | function i(e){this.message="validation failed",this.errors=e,this.ajv=th...
function r (line 11) | function r(e,t,n){this.message=n||r.message(e,t),this.missingRef=s.url(e...
function o (line 11) | function o(e){return e.prototype=Object.create(Error.prototype),e.protot...
function i (line 11) | function i(e){return(e||[]).filter(h.f)}
function i (line 11) | function i(){return{href:{type:String,default:null},rel:{type:String,def...
function r (line 11) | function r(e){var t=i();return e=n.i(u.c)(e),n.i(c.b)(t).reduce(function...
function o (line 11) | function o(e,t){return Boolean(t.$router)&&e.to&&!e.disabled?"router-lin...
function s (line 11) | function s(e,t){var n=(e.disabled,e.href),i=e.to;if("router-link"!==t){i...
function a (line 11) | function a(e){var t=e.target,n=e.rel;return"_blank"===t&&null===n?"noope...
function l (line 11) | function l(e){var t=e.disabled,n=e.tag,i=e.href,r=e.suppliedHandler,o=e....
function i (line 11) | function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enume...
function t (line 11) | function t(i){if(n[i])return n[i].exports;var r=n[i]={exports:{},id:i,lo...
function i (line 11) | function i(e){return e&&e.__esModule?e:{default:e}}
function t (line 11) | function t(){return e.apply(this,arguments)}
function i (line 11) | function i(e){return e&&e.__esModule?e:{default:e}}
function i (line 11) | function i(e){return e="full"==e?"full":"fast",u.copy(i[e])}
function r (line 11) | function r(e){var t=e.match(h);if(!t)return!1;var n=+t[1],i=+t[2];return...
function o (line 11) | function o(e,t){var n=e.match(f);if(!n)return!1;var i=n[1],r=n[2],o=n[3]...
function s (line 11) | function s(e){var t=e.split(A);return 2==t.length&&r(t[0])&&o(t[1],!0)}
function a (line 11) | function a(e){return e.length<=255&&p.test(e)}
function l (line 11) | function l(e){return E.test(e)&&m.test(e)}
function c (line 11) | function c(e){if(x.test(e))return!1;try{return new RegExp(e),!0}catch(e)...
function i (line 11) | function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enume...
function i (line 11) | function i(e){if(!(this instanceof i))return new i(e);e=this._opts=j.cop...
function r (line 11) | function r(e,t){var n;if("string"==typeof e){if(!(n=this.getSchema(e)))t...
function o (line 11) | function o(e,t){var n=this._addSchema(e,void 0,t);return n.validate||thi...
function s (line 11) | function s(e,t,n,i){if(Array.isArray(e)){for(var r=0;r<e.length;r++)this...
function a (line 11) | function a(e,t,n){return this.addSchema(e,t,n,!0),this}
function l (line 11) | function l(e,t){var n=e.$schema;if(void 0!==n&&"string"!=typeof n)throw ...
function c (line 11) | function c(e){var t=e._opts.meta;return e._opts.defaultMeta="object"==ty...
function u (line 11) | function u(e){var t=d(this,e);switch(typeof t){case"object":return t.val...
function h (line 11) | function h(e,t){var n=D.schema.call(e,{schema:{}},t);if(n){var i=n.schem...
function d (line 11) | function d(e,t){return t=D.normalizeId(t),e._schemas[t]||e._refs[t]||e._...
function f (line 11) | function f(e){if(e instanceof RegExp)return p(this,this._schemas,e),p(th...
function p (line 11) | function p(e,t,n){for(var i in t){var r=t[i];r.meta||n&&!n.test(i)||(e._...
function m (line 11) | function m(e,t,n,i){if("object"!=typeof e&&"boolean"!=typeof e)throw new...
function g (line 11) | function g(e,t){function n(){var t=e.validate,i=t.apply(null,arguments);...
function v (line 11) | function v(e){switch(e.schemaId){case"$id":return b;case"id":return y;de...
function y (line 11) | function y(e){return e.$id&&this.logger.warn("schema $id ignored",e.$id)...
function b (line 11) | function b(e){return e.id&&this.logger.warn("schema id ignored",e.id),e....
function w (line 11) | function w(e){if(e.$id&&e.id&&e.$id!=e.id)throw new Error("schema $id is...
function C (line 11) | function C(e,t){if(!(e=e||this.errors))return"No errors";t=t||{};for(var...
function A (line 11) | function A(e,t){return"string"==typeof t&&(t=new RegExp(t)),this._format...
function E (line 11) | function E(e){var t;if(e._opts.$data&&(t=n("68Sp"),e.addMetaSchema(t,t.$...
function x (line 11) | function x(e){var t=e._opts.schemas;if(t)if(Array.isArray(t))e.addSchema...
function F (line 11) | function F(e){for(var t in e._opts.formats){var n=e._opts.formats[t];e.a...
function S (line 11) | function S(e,t){if(e._schemas[t]||e._refs[t])throw new Error('schema wit...
function $ (line 11) | function $(e){for(var t=j.copy(e._opts),n=0;n<z.length;n++)delete t[z[n]...
function k (line 11) | function k(e){var t=e._opts.logger;if(!1===t)e.logger={log:_,warn:_,erro...
function _ (line 11) | function _(){}
function i (line 11) | function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enume...
function r (line 11) | function r(e,t,n){return"data:image/svg+xml;charset=UTF-8,"+encodeURICom...
function i (line 11) | function i(e,t){var i=arguments.length>2&&void 0!==arguments[2]?argument...
function i (line 11) | function i(e){function t(e){this.editor=e,this.dom={}}return t.prototype...
function i (line 11) | function i(e,t,n){if(!(this instanceof i))throw new Error('JSONEditor co...
function i (line 11) | function i(e){function t(e){var t,n;document.createRange?(t=document.cre...
function i (line 11) | function i(e,t){return Object.prototype.hasOwnProperty.call(e,t)}
function i (line 11) | function i(e){return(e.global?"g":"")+(e.ignoreCase?"i":"")+(e.multiline...
function r (line 11) | function r(e,t,n){if(Array.prototype.indexOf)return e.indexOf(t,n);for(v...
function i (line 11) | function i(){}
function r (line 11) | function r(e){try{return Object.defineProperty(e,"sentinel",{}),"sentine...
function o (line 11) | function o(e){return e=+e,e!==e?e=0:0!==e&&e!==1/0&&e!==-1/0&&(e=(e>0||-...
function e (line 11) | function e(e){var t=new Array(e+2);return t[0]=t[1]=0,t}
function i (line 11) | function i(e,t,n){var i=c(t);if(!s.isMac&&a){if(t.getModifierState&&(t.g...
function r (line 11) | function r(){a=Object.create(null)}
function r (line 11) | function r(e){n&&n(e),i&&i(e),t.removeListener(document,"mousemove",n,!0...
function o (line 11) | function o(e){if(0!==t.getButton(e)?h=0:e.detail>1?++h>4&&(h=1):h=1,s.is...
function a (line 11) | function a(e){h=2,u&&clearTimeout(u),u=setTimeout(function(){u=null},n[h...
function n (line 11) | function n(e){if(!y){if(y=!0,S)t=0,n=e?0:f.value.length-1;else var t=4,n...
function h (line 11) | function h(){y||(f.value=p,r.isWebKit&&E.schedule())}
function d (line 11) | function d(){clearTimeout(j),j=setTimeout(function(){b&&(f.style.cssText...
function n (line 11) | function n(e){if(!g){if(g=!0,x)var t=0,n=e?0:d.value.length-1;else var t...
function u (line 11) | function u(){g||(d.value=f,r.isWebKit&&C.schedule())}
function h (line 11) | function h(){clearTimeout(M),M=setTimeout(function(){v&&(d.style.cssText...
function i (line 11) | function i(e){e.$clickSelection=null;var t=e.editor;t.setDefaultHandler(...
function r (line 11) | function r(e,t,n,i){return Math.sqrt(Math.pow(n-e,2)+Math.pow(i-t,2))}
function o (line 11) | function o(e,t){if(e.start.row==e.end.row)var n=2*t.column-e.start.colum...
function i (line 11) | function i(e){this.isOpen=!1,this.$element=null,this.$parentNode=e}
function i (line 11) | function i(e){function t(){var t=h.getDocumentPosition().row,r=l.$annota...
function r (line 11) | function r(e){l.call(this,e)}
function i (line 11) | function i(e){function t(e,t){var n=Date.now(),i=!t||e.row!=t.row,o=!t||...
function r (line 11) | function r(e,t,n,i){return Math.sqrt(Math.pow(n-e,2)+Math.pow(i-t,2))}
function i (line 11) | function i(e){"undefined"!=typeof console&&console.warn&&console.warn.ap...
function r (line 11) | function r(e,t){var n=new Error(e);n.data=t,"object"==typeof console&&co...
function r (line 11) | function r(r){if(c&&c.document){u.packaged=r||e.packaged||i.packaged||c....
function o (line 11) | function o(e){return e.replace(/-(.)/g,function(e,t){return t.toUpperCas...
function i (line 11) | function i(e){e.on("click",function(t){var n=t.getDocumentPosition(),i=e...
function i (line 11) | function i(e,t,n,i){var r=a?p:f,m=null,g=null,v=null,y=0,b=null,w=-1,E=n...
function r (line 11) | function r(e,t,n){if(!(l<e)){if(1==e&&a==m&&!h)return void n.reverse();f...
function o (line 11) | function o(e,t,n,i){var r,o,s,l,f=t[i];switch(f){case g:case v:c=!1;case...
function s (line 11) | function s(e){var t=e.charCodeAt(0),n=t>>8;return 0==n?t>191?g:R[t]:5==n...
function n (line 11) | function n(o){var s=r[o];s.processed=!0;for(var a=0;a<s.length;a++){var ...
function r (line 11) | function r(e){for(var t=n;t<=i;t++)e(o.getLine(t),t)}
function e (line 11) | function e(e,t,n){var i=n?e.column<=t.column:e.column<t.column;return e....
function t (line 11) | function t(t,n,i){var r="insert"==t.action,o=(r?1:-1)*(t.end.row-t.start...
function i (line 11) | function i(e,t){this.foldData=e,Array.isArray(t)?this.folds=t:t=this.fol...
function i (line 11) | function i(e,t){e.row-=t.row,0==e.row&&(e.column-=t.column)}
function r (line 11) | function r(e,t){i(e.start,t),i(e.end,t)}
function o (line 11) | function o(e,t){0==e.row&&(e.column+=t.column),e.row+=t.row}
function s (line 11) | function s(e,t){o(e.start,t),o(e.end,t)}
function i (line 11) | function i(){this.getFoldAt=function(e,t,n){var i=this.getFoldLine(e);if...
function i (line 11) | function i(){this.findMatchingBracket=function(e,t){if(0==e.column)retur...
function e (line 11) | function e(e){return!(e<4352)&&(e>=4352&&e<=4447||e>=4515&&e<=4519||e>=4...
function i (line 11) | function i(e){return t?"insert"!==e.action:"insert"===e.action}
function s (line 11) | function s(){var t=0;if(0===g)return t;if(m)for(var n=0;n<e.length;n++){...
function a (line 11) | function a(t){var n=e.slice(d,t),i=n.length;n.join("").replace(/12/g,fun...
function i (line 11) | function i(e,t){function n(e){return/\w/.test(e)||t.regExp?"\\b":""}retu...
function i (line 11) | function i(e,t){this.platform=t||(s.isMac?"mac":"win"),this.commands={},...
function r (line 11) | function r(e,t){i.call(this,e,t),this.$singleCommand=!1}
function e (line 11) | function e(e){return"object"==typeof e&&e.bindKey&&e.bindKey.position||(...
function i (line 11) | function i(e,t){return{win:e,mac:t}}
function e (line 11) | function e(e){return{action:e.action,start:e.start,end:e.end,lines:1==e....
function t (line 11) | function t(e){return{action:e.action,start:e.start,end:e.end,lines:e.lin...
function n (line 11) | function n(e,t){for(var n=new Array(e.length),i=0;i<e.length;i++){for(va...
function e (line 11) | function e(e,t,n,i){return(e?1:0)|(t?2:0)|(n?4:0)|(i?8:0)}
function n (line 11) | function n(e,t,n){for(var i=0,o=0;o+e[i].value.length<t;)if(o+=e[i].valu...
function n (line 11) | function n(n){if(i.$themeId!=e)return t&&t();if(!n||!n.cssClass)throw ne...
function i (line 11) | function i(e,t){var n=t.src;s.qualifyURL(e);try{return new Blob([n],{typ...
function r (line 11) | function r(e,t){var n=i(e,t),r=window.URL||window.webkitURL,o=r.createOb...
function i (line 11) | function i(e,t){return e.row==t.row&&e.column==t.column}
function r (line 11) | function r(e){var t=e.domEvent,n=t.altKey,r=t.shiftKey,a=t.ctrlKey,l=e.g...
function i (line 11) | function i(e,t,n){return m.$options.wrap=!0,m.$options.needle=t,m.$optio...
function r (line 11) | function r(e,t){return e.row==t.row&&e.column==t.column}
function o (line 11) | function o(e){e.$multiselectOnSessionChange||(e.$onAddRange=e.$onAddRang...
function s (line 11) | function s(e){function t(t){i&&(e.renderer.setMouseCursor(""),i=!1)}var ...
function n (line 11) | function n(e){return d.stringRepeat(" ",e)}
function i (line 11) | function i(e){return e[2]?n(s)+e[2]+n(a-e[2].length+l)+e[4].replace(/^([...
function r (line 11) | function r(e){return e[2]?n(s+a-e[2].length)+e[2]+n(l," ")+e[4].replace(...
function o (line 11) | function o(e){return e[2]?n(s)+e[2]+n(l)+e[4].replace(/^([=:])\s+/,"$1 "...
function i (line 11) | function i(e){this.session=e,this.session.widgetManager=this,this.sessio...
function i (line 11) | function i(e,t,n){for(var i=0,r=e.length-1;i<=r;){var o=i+r>>1,s=n(t,e[o...
function r (line 11) | function r(e,t,n){var r=e.getAnnotations().sort(a.comparePoints);if(r.le...
function i (line 11) | function i(e){return"string"!=typeof e&&(e=String(e)),e.charAt(0).toLowe...
function i (line 11) | function i(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[...
function i (line 11) | function i(e){for(var t in c)if(void 0!==e.style[t])return c[t];return n...
function i (line 11) | function i(e,t){this.editor=e,this.dom={},this.expanded=!1,t&&t instance...
function i (line 11) | function i(e){var t={};"string"==typeof e.value?t.title=e.value:"functio...
function r (line 11) | function r(e,t,r){if(h)return s.a?void(e[d]?e[d].updateConfig(i(t)):e[d]...
function o (line 11) | function o(e){h&&e[d]&&(e[d].destroy(),e[d]=null,delete e[d])}
function i (line 11) | function i(e){"function"!=typeof e&&(e=new Function(""+e));for(var t=new...
function r (line 11) | function r(e){delete c[e]}
function o (line 11) | function o(e){var t=e.callback,i=e.args;switch(i.length){case 0:t();brea...
function s (line 11) | function s(e){if(u)setTimeout(s,0,e);else{var t=c[e];if(t){u=!0;try{o(t)...
function i (line 11) | function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enume...
function i (line 11) | function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enume...
function n (line 11) | function n(e,t,n,i){var r=-1,o=e?e.length:0;for(i&&o&&(n=e[++r]);++r<o;)...
function i (line 11) | function i(e){return e.split("")}
function r (line 11) | function r(e){return e.match(w)||[]}
function o (line 11) | function o(e){return H.test(e)}
function s (line 11) | function s(e){return V.test(e)}
function a (line 11) | function a(e){return o(e)?l(e):i(e)}
function l (line 11) | function l(e){return e.match(j)||[]}
function c (line 11) | function c(e){return e.match(N)||[]}
function u (line 11) | function u(e,t,n){var i=-1,r=e.length;t<0&&(t=-t>r?0:r+t),n=n>r?r:n,n<0&...
function h (line 11) | function h(e){if("string"==typeof e)return e;if(p(e))return X?X.call(e):...
function d (line 11) | function d(e,t,n){var i=e.length;return n=void 0===n?i:n,!t&&n>=i?e:u(e,...
function f (line 11) | function f(e){return!!e&&"object"==typeof e}
function p (line 11) | function p(e){return"symbol"==typeof e||f(e)&&J.call(e)==b}
function m (line 11) | function m(e){return null==e?"":h(e)}
function g (line 11) | function g(e){return(e=m(e))&&e.replace(C,q).replace(I,"")}
function v (line 11) | function v(e,t,n){return e=m(e),t=n?void 0:t,void 0===t?s(e)?c(e):r(e):e...
function i (line 11) | function i(e){return e.getRootNode&&e.getRootNode()||window}
function r (line 11) | function r(e,t){function n(e,t,r){r.forEach(function(r){if("separator"==...
function i (line 11) | function i(e,t,n){e._bootstrap_vue_components_=e._bootstrap_vue_componen...
function r (line 11) | function r(e,t){for(var n in t)i(e,n,t[n])}
function o (line 11) | function o(e,t,n){e._bootstrap_vue_directives_=e._bootstrap_vue_directiv...
function s (line 11) | function s(e,t){for(var n in t)o(e,n,t[n])}
function a (line 11) | function a(e){"undefined"!=typeof window&&window.Vue&&window.Vue.use(e)}
function i (line 11) | function i(e){for(var t=0;t<e.length;t++){var n=e[t],i=u[n.id];if(i){i.r...
function r (line 11) | function r(){var e=document.createElement("style");return e.type="text/c...
function o (line 11) | function o(e){var t,n,i=document.querySelector("style["+v+'~="'+e.id+'"]...
function s (line 11) | function s(e,t,n,i){var r=n?"":i.css;if(e.styleSheet)e.styleSheet.cssTex...
function a (line 11) | function a(e,t){var n=t.css,i=t.media,r=t.sourceMap;if(i&&e.setAttribute...
function i (line 11) | function i(e,t){function n(e,t,n){for(var i,o=0;o<r.length;o++){var s=r[...
function r (line 11) | function r(e){var t=this.RULES.custom[e];return t?t.definition:this.RULE...
function o (line 11) | function o(e){var t=this.RULES;delete t.keywords[e],delete t.all[e],dele...
function i (line 11) | function i(e){e&&(this.path=document.createElement("div"),this.path.clas...
function t (line 11) | function t(e){this.selectionCallback&&this.selectionCallback(e)}
function n (line 11) | function n(e,t){this.contextMenuCallback&&this.contextMenuCallback(e,t)}
function n (line 11) | function n(e){var t=this,n=h.call(arguments,1);return new Promise(functi...
function i (line 11) | function i(e){return e?a(e)?e:c(e)||l(e)?n.call(this,e):"function"==type...
function r (line 11) | function r(e){var t=this;return new Promise(function(n,i){e.call(t,funct...
function o (line 11) | function o(e){return Promise.all(e.map(i,this))}
function s (line 11) | function s(e){for(var t=new e.constructor,n=Object.keys(e),r=[],o=0;o<n....
function a (line 11) | function a(e){return"function"==typeof e.then}
function l (line 11) | function l(e){return"function"==typeof e.next&&"function"==typeof e.throw}
function c (line 11) | function c(e){var t=e.constructor;return!!t&&("GeneratorFunction"===t.na...
function u (line 11) | function u(e){return Object==e.constructor}
function t (line 11) | function t(){return n.call(this,e.apply(this,arguments))}
function i (line 11) | function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enume...
function i (line 11) | function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a ...
function r (line 11) | function r(e){return{}.toString.call(e).match(/\s([a-zA-Z]+)/)[1].toLowe...
function o (line 11) | function o(e,t,i){for(var o in i)if(Object.prototype.hasOwnProperty.call...
function e (line 11) | function e(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.en...
function e (line 11) | function e(t,n,r){i(this,e),this.$el=t,this.$scroller=null,this.$selecto...
function i (line 11) | function i(e){return e&&"[object Object]"==={}.toString.call(e)}
function i (line 11) | function i(e,t){if(e.map)return e.map(t);for(var n=[],i=0;i<e.length;i++...
function i (line 11) | function i(e){r.copy(e,this)}
function i (line 11) | function i(e,t,n,i){for(var o={code:{text:"Code",title:"Switch to code h...
function i (line 11) | function i(e){var t={};return e.arg&&(t.element="#"+e.arg),n.i(a.b)(e.mo...
function r (line 11) | function r(e,t,n){if(!u){var r=i(t);return e[h]?e[h].updateConfig(r,n.co...
function o (line 11) | function o(e){e[h]&&(e[h].dispose(),e[h]=null)}
FILE: tac-console/src/test/java/com/alibaba/tac/console/MenuOptionHandlerTest.java
class MenuOptionHandlerTest (line 13) | public class MenuOptionHandlerTest extends TacConsoleTest {
FILE: tac-console/src/test/java/com/alibaba/tac/console/test/LancherTest.java
class LancherTest (line 24) | public class LancherTest {
method test (line 40) | @Test
method test1 (line 65) | @Test
method test3 (line 83) | @Test
method createArchive (line 88) | protected final Archive createArchive() throws Exception {
method isNestedArchive (line 105) | protected boolean isNestedArchive(Archive.Entry entry) {
method getUnpackedNestedArchive (line 113) | private Archive getUnpackedNestedArchive(JarEntry jarEntry) throws IOE...
method getTempUnpackFolder (line 124) | private File getTempUnpackFolder() {
method createUnpackFolder (line 132) | private File createUnpackFolder(File parent) {
method unpack (line 146) | private void unpack(JarEntry entry, File file) throws IOException {
FILE: tac-console/src/test/java/com/alibaba/tac/console/test/TacConsoleTest.java
class TacConsoleTest (line 10) | @RunWith(SpringRunner.class)
FILE: tac-console/src/test/java/com/alibaba/tac/console/test/TestApplication.java
class TestApplication (line 10) | @SpringBootApplication(scanBasePackages = {"com.alibaba.tac"})
FILE: tac-container/src/main/java/com/alibaba/tac/container/ContainerApplication.java
class ContainerApplication (line 44) | @SpringBootApplication(scanBasePackages = {"com.alibaba.tac"})
method main (line 51) | public static void main(String[] args) throws Exception {
method webMvcConfigurer (line 73) | @Bean
FILE: tac-container/src/main/java/com/alibaba/tac/container/ContainerBeanConfig.java
class ContainerBeanConfig (line 36) | @ConditionalOnProperty(name = "scan.package.name")
FILE: tac-container/src/main/java/com/alibaba/tac/container/web/TacApiController.java
class TacApiController (line 44) | @RestController
method execute (line 52) | @GetMapping("/execute/{msCode}")
method executePost (line 74) | @PostMapping("/execute/{msCode}")
FILE: tac-custom-datasource-demo/src/main/java/com/tmall/itemcenter/ItemDO.java
class ItemDO (line 8) | @Data
method ItemDO (line 26) | public ItemDO(Long id, String name, String price) {
FILE: tac-custom-datasource-demo/src/main/java/com/tmall/itemcenter/TmallItemService.java
class TmallItemService (line 8) | @Service
method getItem (line 17) | public ItemDO getItem(Long id) {
FILE: tac-custom-datasource-demo/src/test/java/com/alibaba/tac/AppTest.java
class AppTest (line 10) | public class AppTest
method AppTest (line 18) | public AppTest( String testName )
method suite (line 26) | public static Test suite()
method testApp (line 34) | public void testApp()
FILE: tac-dev-source-demo/src/main/java/com/alibaba/tac/biz/processor/HelloWorldTac.java
class HelloWorldTac (line 17) | public class HelloWorldTac implements TacHandler<Object> {
method execute (line 34) | @Override
FILE: tac-engine/src/main/java/com/alibaba/tac/engine/autoconfigure/TacAutoConfiguration.java
class TacAutoConfiguration (line 39) | @Configuration
FILE: tac-engine/src/main/java/com/alibaba/tac/engine/bootlaucher/BootJarLaucherUtils.java
class BootJarLaucherUtils (line 45) | public class BootJarLaucherUtils {
method unpackBootLibs (line 59) | public static Integer unpackBootLibs(JarFile jarFile) throws IOExcepti...
method getUnpackedNestedArchive (line 81) | private static Archive getUnpackedNestedArchive(JarFile jarFile, JarEn...
method getTempUnpackFolder (line 93) | public static File getTempUnpackFolder() {
method createUnpackFolder (line 106) | private static File createUnpackFolder(File parent) {
method unpack (line 131) | private static void unpack(JarFile jarFile, JarEntry entry, File file)...
method getBootJarFile (line 156) | public final static JarFile getBootJarFile() throws Exception {
FILE: tac-engine/src/main/java/com/alibaba/tac/engine/code/CodeCompileService.java
class CodeCompileService (line 53) | @Service
method compile (line 81) | public Boolean compile(Long instId, String sourceFileDicPath) throws S...
method compile (line 112) | public Boolean compile(String msCode, String sourceFileDicPath) throws...
method getProcessCodeInfo (line 141) | private InstCodeInfo getProcessCodeInfo(List<File> codeFiles) {
method getCodeInfo (line 180) | private JavaSourceCode getCodeInfo(String content) {
method getJarFile (line 198) | public byte[] getJarFile(Long instId) throws IOException {
method getJarFile (line 209) | public byte[] getJarFile(String msCode) throws IOException {
FILE: tac-engine/src/main/java/com/alibaba/tac/engine/code/CodeLoadService.java
class CodeLoadService (line 51) | @Slf4j
method init (line 57) | @PostConstruct
method changeClassLoader (line 79) | public static void changeClassLoader(Environment environment) {
method changeClassLoader (line 96) | public static ClassLoader changeClassLoader(String path) throws Illega...
method getAppClassLoader (line 140) | private static ClassLoader getAppClassLoader() {
method changeClassLoader (line 159) | public static ClassLoader changeClassLoader() throws NoSuchFieldExcept...
method loadCustomerDirectory (line 168) | private void loadCustomerDirectory() {
method loadHandlerClass (line 207) | public <T> Class<T> loadHandlerClass(Long instId, Class<T> interfaceCl...
FILE: tac-engine/src/main/java/com/alibaba/tac/engine/code/CustomerClassLoader.java
class CustomerClassLoader (line 35) | public class CustomerClassLoader extends URLClassLoader {
method CustomerClassLoader (line 45) | public CustomerClassLoader(URL[] urls) {
method CustomerClassLoader (line 49) | public CustomerClassLoader(File file) throws MalformedURLException {
method CustomerClassLoader (line 53) | public CustomerClassLoader(URL[] urls, ClassLoader parent) {
method CustomerClassLoader (line 57) | public CustomerClassLoader(File file, ClassLoader parent) throws Malfo...
method loadClass (line 70) | @Override
FILE: tac-engine/src/main/java/com/alibaba/tac/engine/code/SpringClassLoader.java
class SpringClassLoader (line 33) | public class SpringClassLoader extends URLClassLoader {
method SpringClassLoader (line 35) | public SpringClassLoader(URL[] urls, ClassLoader parent) {
method loadClass (line 39) | @Override
FILE: tac-engine/src/main/java/com/alibaba/tac/engine/code/TacFileService.java
class TacFileService (line 43) | @Service
method getLoadClassFilePath (line 49) | public String getLoadClassFilePath(Long processID) {
method getClassFileOutputPath (line 62) | public String getClassFileOutputPath(Long processID) {
method getClassFileOutputPath (line 67) | public String getClassFileOutputPath(String suffix) {
method getOutPutFilePath (line 81) | public String getOutPutFilePath(Long processID) {
method getOutPutFilePath (line 86) | public String getOutPutFilePath(String suffix) {
method listAllFiles (line 97) | public static List<File> listAllFiles(File directory) {
method deleteRecursively (line 110) | public static void deleteRecursively(File file) throws IOException {
method getFileBytes (line 125) | public static byte[] getFileBytes(File zipFile) throws IOException {
method getMd5 (line 137) | public static String getMd5(byte[] data) {
FILE: tac-engine/src/main/java/com/alibaba/tac/engine/common/DefaultTacIDGenerator.java
class DefaultTacIDGenerator (line 34) | @Service
method getNextId (line 40) | @Override
FILE: tac-engine/src/main/java/com/alibaba/tac/engine/common/SequenceCounter.java
type SequenceCounter (line 30) | public interface SequenceCounter {
method set (line 36) | void set(long value);
method get (line 42) | Long get();
method incrementAndGet (line 49) | long incrementAndGet();
method increBy (line 57) | long increBy(long delta);
FILE: tac-engine/src/main/java/com/alibaba/tac/engine/common/TacIDGenerator.java
type TacIDGenerator (line 30) | public interface TacIDGenerator {
method getNextId (line 37) | Long getNextId();
FILE: tac-engine/src/main/java/com/alibaba/tac/engine/common/redis/RedisSequenceCounter.java
class RedisSequenceCounter (line 45) | @Slf4j
method RedisSequenceCounter (line 57) | public RedisSequenceCounter(String counterKey) {
method set (line 63) | @Override
method get (line 69) | @Override
method incrementAndGet (line 80) | @Override
method increBy (line 91) | @Override
FILE: tac-engine/src/main/java/com/alibaba/tac/engine/compile/IJdkCompiler.java
type IJdkCompiler (line 33) | public interface IJdkCompiler {
method compile (line 42) | boolean compile(InstCodeInfo codeInfo, StringWriter compileInfo) throw...
method compileWithMsCode (line 53) | boolean compileWithMsCode(InstCodeInfo codeInfo, StringWriter compileI...
method addClassPath (line 60) | void addClassPath(File file);
FILE: tac-engine/src/main/java/com/alibaba/tac/engine/compile/InstCodeInfo.java
class InstCodeInfo (line 35) | @Data
FILE: tac-engine/src/main/java/com/alibaba/tac/engine/compile/JavaSourceCode.java
class JavaSourceCode (line 32) | @Data
method getFullClassName (line 52) | public String getFullClassName() {
FILE: tac-engine/src/main/java/com/alibaba/tac/engine/compile/JdkCompilerImpl.java
class JdkCompilerImpl (line 51) | public class JdkCompilerImpl implements IJdkCompiler, InitializingBean {
method init (line 75) | @PostConstruct
method compile (line 84) | @Override
method compileWithMsCode (line 90) | @Override
method addClassPath (line 96) | @Override
method compile (line 102) | private boolean compile(InstCodeInfo codeInfo, StringWriter compileInf...
method afterPropertiesSet (line 142) | @Override
method addBootLibJars (line 159) | private void addBootLibJars() {
method addClassLoaderClassPath (line 180) | private void addClassLoaderClassPath(ClassLoader classLoader) {
method initTacDict (line 199) | private void initTacDict() {
FILE: tac-engine/src/main/java/com/alibaba/tac/engine/compile/TacJavaFileObject.java
class TacJavaFileObject (line 31) | public class TacJavaFileObject extends SimpleJavaFileObject {
method TacJavaFileObject (line 35) | protected TacJavaFileObject(String name, String content) {
method getCharContent (line 41) | @Override
FILE: tac-engine/src/main/java/com/alibaba/tac/engine/event/domain/AbstractMsEvent.java
class AbstractMsEvent (line 37) | @Data
method AbstractMsEvent (line 47) | public AbstractMsEvent() {
method AbstractMsEvent (line 53) | public AbstractMsEvent(String msCode) {
FILE: tac-engine/src/main/java/com/alibaba/tac/engine/event/domain/GetAllMsEvent.java
class GetAllMsEvent (line 34) | @Data
method GetAllMsEvent (line 40) | public GetAllMsEvent(){
method GetAllMsEvent (line 44) | public GetAllMsEvent(List<String> msCodes) {
FILE: tac-engine/src/main/java/com/alibaba/tac/engine/event/domain/MsOfflineEvent.java
class MsOfflineEvent (line 33) | @Data
method MsOfflineEvent (line 38) | public MsOfflineEvent(TacInst tacInst) {
FILE: tac-engine/src/main/java/com/alibaba/tac/engine/event/domain/MsPublishEvent.java
class MsPublishEvent (line 33) | @Data
FILE: tac-engine/src/main/java/com/alibaba/tac/engine/event/domain/MsReceivePublishEvent.java
class MsReceivePublishEvent (line 33) | @Data
method MsReceivePublishEvent (line 36) | public MsReceivePublishEvent(TacInst tacInst) {
FILE: tac-engine/src/main/java/com/alibaba/tac/engine/git/GitRepoService.java
class GitRepoService (line 19) | @Slf4j
method pullInstanceCode (line 38) | public String pullInstanceCode(String gitURL, String projectName, Stri...
method change2Http (line 60) | private String change2Http(String gitURL) {
method pullRepo (line 94) | private String pullRepo(String groupName, String projectName, String b...
method cloneRepo (line 144) | private String cloneRepo(String groupName, String projectName, String ...
method localRepoExists (line 181) | public Boolean localRepoExists(String groupName, String projectName, S...
method getLocalPath (line 199) | private String getLocalPath(String groupName, String projectName, Stri...
FILE: tac-engine/src/main/java/com/alibaba/tac/engine/inst/domain/TacInst.java
class TacInst (line 34) | @Data
FILE: tac-engine/src/main/java/com/alibaba/tac/engine/inst/domain/TacInstStatus.java
type TacInstStatus (line 32) | public enum TacInstStatus {
method TacInstStatus (line 44) | private TacInstStatus(int code) {
method code (line 51) | public Integer code() {
FILE: tac-engine/src/main/java/com/alibaba/tac/engine/inst/domain/TacInstanceInfo.java
class TacInstanceInfo (line 35) | @Data
FILE: tac-engine/src/main/java/com/alibaba/tac/engine/inst/service/DevMsInstFileService.java
class DevMsInstFileService (line 39) | @Slf4j
method getInstanceFile (line 42) | @Override
method getInstanceFile (line 51) | public byte[] getInstanceFile(String msCode){
method saveInstanceFile (line 72) | @Override
method getInstanceFileData (line 83) | public byte[] getInstanceFileData(String filePath) {
FILE: tac-engine/src/main/java/com/alibaba/tac/engine/inst/service/IMsInstFileService.java
type IMsInstFileService (line 32) | public interface IMsInstFileService {
method getInstanceFile (line 40) | byte[] getInstanceFile(long instId);
method saveInstanceFile (line 48) | Boolean saveInstanceFile(TacInst tacInst, byte[] data);
FILE: tac-engine/src/main/java/com/alibaba/tac/engine/inst/service/IMsInstService.java
type IMsInstService (line 34) | public interface IMsInstService {
method getAllTacMsInsts (line 41) | List<TacInst> getAllTacMsInsts();
method getTacMsInst (line 49) | TacInst getTacMsInst(Long msInstId);
method createTacMsInst (line 57) | TacInst createTacMsInst(TacInst tacInst);
method updateTacMsInst (line 66) | Boolean updateTacMsInst(Long instId, TacInst tacInst);
method removeMsInst (line 74) | Boolean removeMsInst(Long instId);
method getMsInsts (line 81) | List<TacInst> getMsInsts(String code);
method createTacMsInst (line 91) | default TacInst createTacMsInst(String msCode, String name, String jar...
method createGitTacMsInst (line 107) | default TacInst createGitTacMsInst(String msCode, String name, String ...
FILE: tac-engine/src/main/java/com/alibaba/tac/engine/inst/service/LocalMsInstFileService.java
class LocalMsInstFileService (line 43) | @Slf4j
method getInstanceFile (line 52) | @Override
method saveInstanceFile (line 76) | @Override
FILE: tac-engine/src/main/java/com/alibaba/tac/engine/inst/service/redis/RedisMsInstFileService.java
class RedisMsInstFileService (line 46) | @Slf4j
method init (line 62) | @PostConstruct
method RedisMsInstFileService (line 69) | public RedisMsInstFileService(Boolean prePublish) {
method getInstanceFile (line 73) | @Override
method saveInstanceFile (line 99) | @Override
method getDataPath (line 149) | private String getDataPath(Long instId, String jarVersion) {
FILE: tac-engine/src/main/java/com/alibaba/tac/engine/inst/service/redis/RedisMsInstService.java
class RedisMsInstService (line 43) | @Slf4j
method getAllTacMsInsts (line 61) | @Override
method getTacMsInst (line 68) | @Override
method createTacMsInst (line 78) | @Override
method updateTacMsInst (line 98) | @Override
method removeMsInst (line 110) | @Override
method getMsInsts (line 123) | @Override
method checkInst (line 129) | private void checkInst(TacInst tacInst) {
method getMainKey (line 140) | private String getMainKey() {
FILE: tac-engine/src/main/java/com/alibaba/tac/engine/ms/domain/TacMs.java
class TacMs (line 37) | @Data
FILE: tac-engine/src/main/java/com/alibaba/tac/engine/ms/domain/TacMsDO.java
class TacMsDO (line 34) | @Data
FILE: tac-engine/src/main/java/com/alibaba/tac/engine/ms/domain/TacMsPublishMeta.java
class TacMsPublishMeta (line 38) | @Data
method TacMsPublishMeta (line 46) | public TacMsPublishMeta() {
method TacMsPublishMeta (line 49) | public TacMsPublishMeta(TacInst tacInst, Integer status) {
method TacMsPublishMeta (line 54) | public TacMsPublishMeta(TacInst tacInst) {
FILE: tac-engine/src/main/java/com/alibaba/tac/engine/ms/domain/TacMsStatus.java
type TacMsStatus (line 32) | public enum TacMsStatus {
method TacMsStatus (line 43) | private TacMsStatus(int code) {
method code (line 50) | public Integer code() {
FILE: tac-engine/src/main/java/com/alibaba/tac/engine/ms/service/AbstractDefaultMsPublisher.java
class AbstractDefaultMsPublisher (line 36) | public abstract class AbstractDefaultMsPublisher implements IMsPublisher {
method publish (line 41) | @Override
method prePublish (line 61) | @Override
FILE: tac-engine/src/main/java/com/alibaba/tac/engine/ms/service/DefaultMsEventHandlers.java
class DefaultMsEventHandlers (line 48) | @Slf4j
method init (line 58) | @PostConstruct
method getAllMsEventApplicationListener (line 63) | @Bean
method msReceivePublishEventApplicationListener (line 74) | @Bean
method msOfflineEventApplicationListener (line 92) | @Bean
method getPublisher (line 106) | public ApplicationEventPublisher getPublisher() {
method setApplicationEventPublisher (line 110) | @Override
FILE: tac-engine/src/main/java/com/alibaba/tac/engine/ms/service/IMsPublisher.java
type IMsPublisher (line 38) | public interface IMsPublisher {
method publish (line 46) | Boolean publish(TacInst tacInst);
method publish (line 55) | Boolean publish(TacInst tacInst, byte[] data);
method prePublish (line 64) | Boolean prePublish(TacInst tacInst, byte[] data);
method gitPrePublish (line 72) | TacInst gitPrePublish(TacMsDO tacMsDO,TacInst tacInst);
method offline (line 79) | Boolean offline(TacInst tacInst);
method checkSign (line 87) | default void checkSign(TacInst tacInst, byte[] instanceFile) {
FILE: tac-engine/src/main/java/com/alibaba/tac/engine/ms/service/IMsService.java
type IMsService (line 35) | public interface IMsService {
method createMs (line 43) | TacMsDO createMs(TacMsDO tacMsDO);
method removeMs (line 51) | Boolean removeMs(String msCode);
method invalidMs (line 59) | Boolean invalidMs(String msCode);
method updateMs (line 68) | Boolean updateMs(String msCode, TacMsDO tacMsDO);
method getMs (line 76) | TacMsDO getMs(String msCode);
method getAllMs (line 83) | List<TacMsDO> getAllMs();
method checkMsDO (line 85) | default void checkMsDO(TacMsDO tacMsDO) {
FILE: tac-engine/src/main/java/com/alibaba/tac/engine/ms/service/IMsSubscriber.java
type IMsSubscriber (line 30) | public interface IMsSubscriber {
method subscribe (line 35) | void subscribe();
FILE: tac-engine/src/main/java/com/alibaba/tac/engine/ms/service/redis/RedisMsPublisher.java
class RedisMsPublisher (line 51) | @Slf4j
method publish (line 87) | @Override
method offline (line 133) | @Override
method getMainKey (line 149) | private String getMainKey() {
method getPublishChannel (line 154) | private String getPublishChannel() {
method prePublish (line 159) | @Override
method gitPrePublish (line 177) | @Override
FILE: tac-engine/src/main/java/com/alibaba/tac/engine/ms/service/redis/RedisMsService.java
class RedisMsService (line 44) | @Slf4j
method createMs (line 56) | @Override
method removeMs (line 66) | @Override
method invalidMs (line 74) | @Override
method updateMs (line 87) | @Override
method getMs (line 96) | @Override
method getAllMs (line 102) | @Override
method getMainKey (line 107) | private String getMainKey() {
FILE: tac-engine/src/main/java/com/alibaba/tac/engine/ms/service/redis/RedisMsSubscriber.java
class RedisMsSubscriber (line 58) | @Slf4j
method loadAllMsCode (line 81) | public void loadAllMsCode() {
method handleOnePublish (line 110) | private void handleOnePublish(TacMsPublishMeta publishMeta, Boolean is...
method subscribe (line 127) | @Override
method receiveMessage (line 143) | public void receiveMessage(String message, String channel) {
method getMainKey (line 157) | private String getMainKey() {
method getPublishChannel (line 162) | private String getPublishChannel() {
FILE: tac-engine/src/main/java/com/alibaba/tac/engine/properties/TacDataPathProperties.java
class TacDataPathProperties (line 35) | @Component
method setSourcePathPrefix (line 48) | public void setSourcePathPrefix(String sourcePathPrefix) {
method getSourcePathPrefix (line 52) | public String getSourcePathPrefix() {
method getOutputPathPrefix (line 56) | public String getOutputPathPrefix() {
method setOutputPathPrefix (line 60) | public void setOutputPathPrefix(String outputPathPrefix) {
method getClassLoadPathPrefix (line 64) | public String getClassLoadPathPrefix() {
method setClassLoadPathPrefix (line 68) | public void setClassLoadPathPrefix(String classLoadPathPrefix) {
method getPkgPrefix (line 72) | public String getPkgPrefix() {
method setPkgPrefix (line 76) | public void setPkgPrefix(String pkgPrefix) {
FILE: tac-engine/src/main/java/com/alibaba/tac/engine/properties/TacGitlabProperties.java
class TacGitlabProperties (line 10) | @Data
FILE: tac-engine/src/main/java/com/alibaba/tac/engine/properties/TacMsConstants.java
class TacMsConstants (line 30) | public class TacMsConstants {
FILE: tac-engine/src/main/java/com/alibaba/tac/engine/properties/TacRedisConfigProperties.java
class TacRedisConfigProperties (line 35) | @Data
FILE: tac-engine/src/main/java/com/alibaba/tac/engine/service/DefaultTacEngineService.java
class DefaultTacEngineService (line 52) | @Service
method execute (line 65) | @Override
method setCommonFields (line 161) | private void setCommonFields(Map<String, Object> singleDateMap, String...
method setTacContext (line 178) | private void setTacContext(TacRequestContext context, TacParams params) {
method getOrder (line 186) | @Override
FILE: tac-engine/src/main/java/com/alibaba/tac/engine/service/EngineBeansConfig.java
class EngineBeansConfig (line 40) | @Configuration
method jdkCompiler (line 46) | @Bean
FILE: tac-engine/src/main/java/com/alibaba/tac/engine/service/RedisBeansConfig.java
class RedisBeansConfig (line 53) | @ConditionalOnProperty(name = "tac.default.store",havingValue = "redis")
method redisTemplate (line 57) | @Bean
method counterRedisTemplate (line 64) | @Bean(name = "counterRedisTemplate")
method getRedisTemplate (line 70) | public static RedisTemplate getRedisTemplate(JedisConnectionFactory je...
method getCounterRedisTemplate (line 81) | public static RedisTemplate getCounterRedisTemplate(JedisConnectionFac...
method redisMessageListenerContainer (line 89) | @Bean
method listenerAdapter (line 98) | @Bean(name = "redisSubscribMessageAdapter")
method msInstIdCounter (line 110) | @Bean(name = "msInstIdCounter")
method redisMsInstFileService (line 115) | @Bean(name = "remoteMsInstFileService")
method redisPrePublishMsInstFileService (line 121) | @Bean(name = "prePublishMsInstFileService")
method redisMsInstService (line 127) | @Bean
method redisMsPublisher (line 133) | @Bean
method redisMsService (line 139) | @Bean
method redisMsSubscriber (line 144) | @Bean
FILE: tac-engine/src/main/java/com/alibaba/tac/engine/service/TacEngineService.java
type TacEngineService (line 37) | public interface TacEngineService {
method execute (line 45) | TacResult<Map<String, Object>> execute(String msCode, TacParams params);
FILE: tac-engine/src/main/java/com/alibaba/tac/engine/service/TacInstRunService.java
class TacInstRunService (line 46) | @Service
method runWithLoad (line 58) | public TacResult<Object> runWithLoad(String msCode, Long instId, Map<S...
method getRunLog (line 120) | public String getRunLog() {
FILE: tac-engine/src/main/java/com/alibaba/tac/engine/service/TacInstanceContainerService.java
class TacInstanceContainerService (line 51) | @Service
method init (line 76) | public void init() {
method getInstanceFromCache (line 92) | public TacInstanceInfo getInstanceFromCache(String msCode) {
method loadTacInstance (line 101) | public TacInstanceInfo loadTacInstance(TacInst tacInst) throws Excepti...
method disposeInstance (line 154) | private void disposeInstance(TacInstanceInfo oldTacInstanceInfo) {
method onApplicationEvent (line 170) | @Override
method offlineMs (line 189) | public void offlineMs(String msCode) {
FILE: tac-engine/src/main/java/com/alibaba/tac/engine/service/TacInstanceLoadService.java
class TacInstanceLoadService (line 44) | @Service
method loadTacHandler (line 58) | public TacInstanceInfo loadTacHandler(TacInst tacInst) throws Exception {
FILE: tac-engine/src/main/java/com/alibaba/tac/engine/service/TacPublishTestService.java
class TacPublishTestService (line 56) | @Slf4j
method prePublishTest (line 86) | public TacResult<Object> prePublishTest(Long instId, String msCode, Ma...
method onlinePublishTest (line 118) | public TacResult<?> onlinePublishTest(Long instId, String msCode, Map<...
method onlinePublishTestHttp (line 139) | private TacResult<?> onlinePublishTestHttp(Long instId, String msCode,...
FILE: tac-engine/src/main/java/com/alibaba/tac/engine/util/Bytes.java
class Bytes (line 50) | public class Bytes {
method putBytes (line 112) | public static int putBytes(byte[] tgtBytes, int tgtOffset, byte[] srcB...
method putByte (line 126) | public static int putByte(byte[] bytes, int offset, byte b) {
method toBytes (line 137) | public static byte[] toBytes(ByteBuffer bb) {
method toString (line 148) | public static String toString(final byte[] b) {
method toString (line 162) | public static String toString(final byte[] b1,
method toString (line 175) | public static String toString(ByteBuffer buf) {
method toString (line 189) | public static String toString(final byte[] b, int off, int len) {
method toStringBinary (line 211) | public static String toStringBinary(final byte[] b) {
method toStringBinary (line 223) | public static String toStringBinary(ByteBuffer buf) {
method toStringBinary (line 237) | public static String toStringBinary(final byte[] b, int off, int len) {
method isHexDigit (line 258) | private static boolean isHexDigit(char c) {
method toBinaryFromHex (line 270) | public static byte toBinaryFromHex(byte ch) {
method toBytesBinary (line 276) | public static byte[] toBytesBinary(String in) {
method toBytes (line 318) | public static byte[] toBytes(String s) {
method toBytes (line 333) | public static byte[] toBytes(final boolean b) {
method toBoolean (line 343) | public static boolean toBoolean(final byte[] b) {
method toBytes (line 356) | public static byte[] toBytes(long val) {
method toLong (line 372) | public static long toLong(byte[] bytes) {
method toLong (line 383) | public static long toLong(byte[] bytes, int offset) {
method toLong (line 397) | public static long toLong(byte[] bytes, int offset, final int length) {
method explainWrongLengthOrOffset (line 413) | private static IllegalArgumentException
method putLong (line 437) | public static int putLong(byte[] bytes, int offset, long val) {
method putLongUnsafe (line 462) | public static int putLongUnsafe(byte[] bytes, int offset, long val) {
method toFloat (line 477) | public static float toFloat(byte[] bytes) {
method toFloat (line 488) | public static float toFloat(byte[] bytes, int offset) {
method putFloat (line 498) | public static int putFloat(byte[] bytes, int offset, float f) {
method toBytes (line 506) | public static byte[] toBytes(final float f) {
method toDouble (line 515) | public static double toDouble(final byte[] bytes) {
method toDouble (line 524) | public static double toDouble(final byte[] bytes, final int offset) {
method putDouble (line 534) | public static int putDouble(byte[] bytes, int offset, double d) {
method toBytes (line 544) | public static byte[] toBytes(final double d) {
method toBytes (line 555) | public static byte[] toBytes(int val) {
method toInt (line 571) | public static int toInt(byte[] bytes) {
method toInt (line 582) | public static int toInt(byte[] bytes, int offset) {
method toInt (line 596) | public static int toInt(byte[] bytes, int offset, final int length) {
method toIntUnsafe (line 619) | public static int toIntUnsafe(byte[] bytes, int offset) {
method toShortUnsafe (line 636) | public static short toShortUnsafe(byte[] bytes, int offset) {
method toLongUnsafe (line 653) | public static long toLongUnsafe(byte[] bytes, int offset) {
method putInt (line 672) | public static int putInt(byte[] bytes, int offset, int val) {
method putIntUnsafe (line 697) | public static int putIntUnsafe(byte[] bytes, int offset, int val) {
method toBytes (line 712) | public static byte[] toBytes(short val) {
method toShort (line 726) | public static short toShort(byte[] bytes) {
method toShort (line 737) | public static short toShort(byte[] bytes, int offset) {
method toShort (line 751) | public static short toShort(byte[] bytes, int offset, final int length) {
method getBytes (line 772) | public static byte[] getBytes(ByteBuffer buf) {
method putShort (line 789) | public static int putShort(byte[] bytes, int offset, short val) {
method putShortUnsafe (line 812) | public static int putShortUnsafe(byte[] bytes, int offset, short val) {
method toBytes (line 827) | public static byte[] toBytes(BigDecimal val) {
method toBigDecimal (line 841) | public static BigDecimal toBigDecimal(byte[] bytes) {
method toBigDecimal (line 853) | public static BigDecimal toBigDecimal(byte[] bytes, int offset, final ...
method putBigDecimal (line 873) | public static int putBigDecimal(byte[] bytes, int offset, BigDecimal v...
method compareTo (line 889) | public static int compareTo(final byte[] left, final byte[] right) {
method compareTo (line 910) | public static int compareTo(byte[] buffer1, int offset1, int length1,
type Comparer (line 916) | interface Comparer<T> {
method compareTo (line 917) | abstract public int compareTo(T buffer1, int offset1, int length1,
method lexicographicalComparerJavaImpl (line 921) | @VisibleForTesting
class LexicographicalComparerHolder (line 932) | static class LexicographicalComparerHolder {
method getBestComparer (line 941) | static Comparer<byte[]> getBestComparer() {
type PureJavaComparer (line 955) | enum PureJavaComparer implements Comparer<byte[]> {
method compareTo (line 961) | @Override
type UnsafeComparer (line 984) | @VisibleForTesting
method run (line 1001) | @Override
method lessThanUnsignedLong (line 1031) | static boolean lessThanUnsignedLong(long x1, long x2) {
method lessThanUnsignedInt (line 1038) | static boolean lessThanUnsignedInt(int x1, int x2) {
method lessThanUnsignedShort (line 1045) | static boolean lessThanUnsignedShort(short x1, short x2) {
method isAvailable (line 1054) | public static boolean isAvailable() {
method compareTo (line 1069) | @Override
method equals (line 1144) | public static boolean equals(final byte[] left, final byte[] right) {
method equals (line 1160) | public static boolean equals(final byte[] left, int leftOffset, int le...
method startsWith (line 1188) | public static boolean startsWith(byte[] bytes, byte[] prefix) {
method add (line 1200) | public static byte[] add(final byte[] a, final byte[] b) {
method add (line 1210) | public static byte[] add(final byte[] a, final byte[] b, final byte[] ...
method merge (line 1223) | public static byte[][] merge(final byte[][] a, final byte[][] b) {
method head (line 1253) | public static byte[] head(final byte[] a, final int length) {
method tail (line 1267) | public static byte[] tail(final byte[] a, final int length) {
method padHead (line 1281) | public static byte[] padHead(final byte[] a, final int length) {
method padTail (line 1294) | public static byte[] padTail(final byte[] a, final int length) {
method split (line 1311) | public static byte[][] split(final byte[] a, final byte[] b, final int...
method split (line 1327) | public static byte[][] split(final byte[] a, final byte[] b,
method iterateOnSplits (line 1342) | public static Iterable<byte[]> iterateOnSplits(final byte[] a,
method iterateOnSplits (line 1350) | public static Iterable<byte[]> iterateOnSplits(
method hashCode (line 1431) | public static int hashCode(byte[] bytes, int offset, int length) {
method toByteArrays (line 1441) | public static byte[][] toByteArrays(final String[] t) {
method toByteArrays (line 1453) | public static byte[][] toByteArrays(final String column) {
method toByteArrays (line 1461) | public static byte[][] toByteArrays(final byte[] column) {
method incrementBytes (line 1474) | public static byte[] incrementBytes(byte[] value, long amount) {
method binaryIncrementPos (line 1499) | private static byte[] binaryIncrementPos(byte[] value, long amount) {
method binaryIncrementNeg (line 1524) | private static byte[] binaryIncrementNeg(byte[] value, long amount) {
method writeStringFixedSize (line 1551) | public static void writeStringFixedSize(final DataOutput out, String s,
method readStringFixedSize (line 1566) | public static String readStringFixedSize(final DataInput in, int size)
method unsignedBinarySearch (line 1586) | public static int unsignedBinarySearch(byte[] a, int fromIndex, int to...
method unsignedCopyAndIncrement (line 1613) | public static byte[] unsignedCopyAndIncrement(final byte[] input) {
method copy (line 1640) | public static byte[] copy(byte[] bytes) {
method getUtf8ByteArrays (line 1647) | public static List<byte[]> getUtf8ByteArrays(List<String> strings) {
method isSorted (line 1655) | public static boolean isSorted(Collection<byte[]> arrays) {
method equals (line 1666) | public static boolean equals(List<byte[]> a, List<byte[]> b) {
method toStringCollection (line 1691) | public static Collection<String> toStringCollection(final byte[][] b) {
method createMaxByteArray (line 1710) | public static byte[] createMaxByteArray(int maxByteCount) {
method multiple (line 1725) | public static byte[] multiple(byte[] srcBytes, int multiNum) {
FILE: tac-engine/src/main/java/com/alibaba/tac/engine/util/CollectionUtils.java
class CollectionUtils (line 30) | public class CollectionUtils {
method nullSafe (line 35) | @SuppressWarnings("unchecked")
method nullSafeSize (line 45) | public static <T> int nullSafeSize(Collection<T> collection) {
method nullSafeSameSize (line 52) | public static <A, B> boolean nullSafeSameSize(Collection<A> a, Collect...
method isEmpty (line 58) | public static <T> boolean isEmpty(Collection<T> collection) {
method notEmpty (line 62) | public static <T> boolean notEmpty(Collection<T> collection) {
method getFirst (line 68) | public static <T> T getFirst(Collection<T> collection) {
method getLastIndex (line 82) | public static int getLastIndex(List<?> list) {
method isLastIndex (line 95) | public static boolean isLastIndex(List<?> list, int index) {
method getLast (line 99) | public static <T> T getLast(List<T> list) {
FILE: tac-engine/src/main/java/com/alibaba/tac/engine/util/HConstants.java
class HConstants (line 25) | public final class HConstants {
method HConstants (line 37) | private HConstants() {
FILE: tac-engine/src/main/java/com/alibaba/tac/engine/util/IterableUtils.java
class IterableUtils (line 28) | public class IterableUtils {
method nullSafe (line 33) | @SuppressWarnings("unchecked")
FILE: tac-engine/src/main/java/com/alibaba/tac/engine/util/TacCompressUtils.java
class TacCompressUtils (line 14) | public class TacCompressUtils {
method compress (line 30) | public static void compress(File srcFile, File destFile) throws Except...
method compress (line 51) | public static void compress(File srcFile, String destPath) throws Exce...
method compress (line 63) | private static void compress(File srcFile, ZipOutputStream zos,
method compress (line 78) | public static void compress(String srcPath, String destPath)
method compressDir (line 93) | private static void compressDir(File dir, ZipOutputStream zos,
method compressFile (line 118) | private static void compressFile(File file, ZipOutputStream zos, Strin...
FILE: tac-engine/src/main/java/com/alibaba/tac/engine/util/TacLogUtils.java
class TacLogUtils (line 35) | public class TacLogUtils {
method infoRate (line 44) | public static void infoRate(Logger logger, String format, Object... ar...
method warnRate (line 57) | public static void warnRate(Logger logger, String format, Object... ar...
method traceRate (line 68) | public static void traceRate(Logger logger, String format, Object... a...
FILE: tac-engine/src/main/java/com/alibaba/tac/engine/util/ThreadPoolUtils.java
class ThreadPoolUtils (line 33) | public class ThreadPoolUtils {
method createThreadPool (line 41) | public static ExecutorService createThreadPool(int nThreads, String th...
FILE: tac-engine/src/main/java/com/alibaba/tac/engine/util/ThreadUtils.java
class ThreadUtils (line 36) | public class ThreadUtils {
method runWaitCompleteTask (line 47) | public static <T> List<T> runWaitCompleteTask(List<Callable<T>> tasks,...
method runAsync (line 73) | public static <T> Future<T> runAsync(Callable<T> task) {
method runAsync (line 77) | public static <T> Future<T> runAsync(ExecutorService executor, Callabl...
method sleep (line 81) | public static void sleep(long time) {
FILE: tac-engine/src/test/java/com/alibaba/tac/engine/common/redis/RedisSequenceCounterTest.java
class RedisSequenceCounterTest (line 16) | public class RedisSequenceCounterTest extends TacEnginTest {
method setUp (line 22) | @Before
method set (line 27) | @Test
method get (line 36) | @Test
method incrementAndGet (line 42) | @Test
method increBy (line 52) | @Test
FILE: tac-engine/src/test/java/com/alibaba/tac/engine/inst/service/redis/RedisMsInstFileServiceTest.java
class RedisMsInstFileServiceTest (line 16) | public class RedisMsInstFileServiceTest extends TacEnginTest {
method setUp (line 26) | @Before
method getInstanceFile (line 36) | @Test
method saveInstanceFile (line 44) | @Test
FILE: tac-engine/src/test/java/com/alibaba/tac/engine/inst/service/redis/RedisMsInstServiceTest.java
class RedisMsInstServiceTest (line 16) | public class RedisMsInstServiceTest extends TacEnginTest {
method before (line 24) | @Before
method getAllTacMsInsts (line 32) | @Test
method getTacMsInst (line 40) | @Test
method createTacMsInst (line 47) | @Test
method removeMsInst (line 55) | @Test
FILE: tac-engine/src/test/java/com/alibaba/tac/engine/ms/service/redis/RedisMsPublisherTest.java
class RedisMsPublisherTest (line 17) | public class RedisMsPublisherTest extends TacEnginTest {
method publish (line 30) | @Test
method offline (line 42) | @Test
FILE: tac-engine/src/test/java/com/alibaba/tac/engine/ms/service/redis/RedisMsServiceTest.java
class RedisMsServiceTest (line 18) | public class RedisMsServiceTest extends TacEnginTest {
method setUp (line 25) | @Before
method createMs (line 33) | @Test
method removeMs (line 43) | @Test
method invalidMs (line 53) | @Test
method updateMs (line 63) | @Test
method getMs (line 74) | @Test
method getAllMs (line 82) | @Test
FILE: tac-engine/src/test/java/com/alibaba/tac/engine/service/GitLabFeatureTest.java
class GitLabFeatureTest (line 25) | public class GitLabFeatureTest extends TacEnginTest {
method createMs (line 46) | @Test
method getMs (line 60) | @Test
method createMsInst (line 68) | @Test
method prePublishTest (line 80) | @Test
FILE: tac-engine/src/test/java/com/alibaba/tac/engine/service/JdkCompilerTest.java
class JdkCompilerTest (line 20) | public class JdkCompilerTest extends TacEnginTest {
method beforeTest (line 32) | @Before
method testCompiler (line 37) | @Test
method testPackage (line 44) | @Test
method runCodeTest (line 52) | @Test
method getCurrentPath (line 61) | String getCurrentPath() {
FILE: tac-engine/src/test/java/com/alibaba/tac/engine/service/TacInstanceLoadServiceTest.java
class TacInstanceLoadServiceTest (line 19) | @RunWith(SpringRunner.class)
method loadTacHandler (line 29) | @Test
FILE: tac-engine/src/test/java/com/alibaba/tac/engine/test/TacEnginTest.java
class TacEnginTest (line 12) | @Slf4j
FILE: tac-engine/src/test/java/com/alibaba/tac/engine/test/TestApplication.java
class TestApplication (line 10) | @SpringBootApplication(
FILE: tac-engine/src/test/java/com/alibaba/tac/engine/utils/TacFileUtilTest.java
class TacFileUtilTest (line 12) | public class TacFileUtilTest extends TacEnginTest {
method getClassFileOutputPath (line 17) | @Test
FILE: tac-engine/src/test/java/com/alibaba/tac/test/http/HttpClientTest.java
class HttpClientTest (line 20) | public class HttpClientTest {
method test (line 22) | @Test
FILE: tac-engine/src/test/java/com/alibaba/tac/test/redis/RedisConfig.java
class RedisConfig (line 17) | @Configuration("testRedisConfig")
method redisMessageListenerContainer (line 20) | @Bean
method listenerAdapter (line 32) | @Bean
method counterRedisTemplate (line 40) | @Bean(name = "counterRedisTemplate")
method redisSequenceCounter (line 46) | @Bean
FILE: tac-engine/src/test/java/com/alibaba/tac/test/redis/StringDataRedisTest.java
class StringDataRedisTest (line 22) | @SpringBootApplication(scanBasePackages = {"com.alibaba.tac.engine.redis"})
method test (line 42) | @Test
method sendMessage (line 52) | @Test
method sendMessage2 (line 60) | @Test
method testSub1 (line 70) | @Test
method testSub2 (line 77) | @Test
method saveTest (line 84) | public <T extends Serializable> T saveTest(String key, T value) {
method testIncre (line 94) | @Test
method testIncre2 (line 110) | @Test
method testIncre3 (line 121) | @Test
FILE: tac-engine/src/test/java/com/alibaba/tac/test/redis/TacRedisMessageListener.java
class TacRedisMessageListener (line 9) | @Slf4j
method receiveMessage (line 19) | public void receiveMessage(String message, String channel) {
FILE: tac-engine/src/test/source/test1/com/alibaba/tac/biz/processor/HelloTac.java
class HelloTac (line 10) | public class HelloTac implements TacHandler<Integer> {
method execute (line 11) | @Override
FILE: tac-infrastructure/src/main/java/com/alibaba/tac/infrastracture/logger/TacLogConsts.java
class TacLogConsts (line 6) | public final class TacLogConsts {
FILE: tac-infrastructure/src/main/java/com/alibaba/tac/infrastracture/logger/TacLoggerImpl.java
class TacLoggerImpl (line 22) | @Service
method debug (line 49) | @Override
method info (line 58) | @Override
method rateInfo (line 67) | @Override
method warn (line 78) | @Override
method rateWarn (line 87) | @Override
method error (line 98) | @Override
method ttLog (line 114) | @Override
method getContent (line 121) | @Override
method isDebugEnabled (line 130) | @Override
method isInfoEnabled (line 135) | @Override
method isWarnEnabled (line 140) | @Override
method isErrorEnabled (line 145) | @Override
method appendToStringBuilder (line 150) | private void appendToStringBuilder(String log) {
method isDebugInvoke (line 170) | private Boolean isDebugInvoke() {
method appendToStringBuilder (line 182) | private void appendToStringBuilder(String log, Throwable t, StringWrit...
FILE: tac-infrastructure/src/test/java/com/alibaba/tac/AppTest.java
class AppTest (line 10) | public class AppTest
method AppTest (line 18) | public AppTest( String testName )
method suite (line 26) | public static Test suite()
method testApp (line 34) | public void testApp()
FILE: tac-sdk/src/main/java/com/alibaba/tac/sdk/common/TacContants.java
class TacContants (line 8) | public final class TacContants {
FILE: tac-sdk/src/main/java/com/alibaba/tac/sdk/common/TacParams.java
class TacParams (line 10) | @Data
method TacParams (line 34) | public TacParams(String appName, String msCodes) {
method getParamValue (line 39) | public String getParamValue(String paramKey) {
method addPara (line 50) | public void addPara(String key, Object value) {
FILE: tac-sdk/src/main/java/com/alibaba/tac/sdk/common/TacResult.java
class TacResult (line 12) | @Data
method TacResult (line 49) | public TacResult(T data) {
method TacResult (line 61) | public TacResult(String msgCode, String msgInfo, T data) {
method newResult (line 68) | public static final <T> TacResult<T> newResult(T data) {
method newResult (line 73) | public static final <T> TacResult<T> newResult(T data, boolean hasMore) {
method errorResult (line 86) | public static final <T> TacResult<T> errorResult(String msgCode, Strin...
method errorResult (line 100) | public static final <T> TacResult<T> errorResult(String msgCode) {
FILE: tac-sdk/src/main/java/com/alibaba/tac/sdk/common/TacThreadLocals.java
class TacThreadLocals (line 5) | public class TacThreadLocals {
method clear (line 20) | public static void clear() {
FILE: tac-sdk/src/main/java/com/alibaba/tac/sdk/domain/Context.java
type Context (line 9) | public interface Context extends Serializable {
method getMsCode (line 16) | String getMsCode();
method getInstId (line 23) | long getInstId();
method getAppName (line 29) | String getAppName();
method get (line 34) | Object get(String key);
method containsKey (line 41) | boolean containsKey(String key);
method getParams (line 47) | Map<String, Object> getParams();
FILE: tac-sdk/src/main/java/com/alibaba/tac/sdk/domain/TacRequestContext.java
class TacRequestContext (line 6) | public class TacRequestContext implements Context {
method getAppName (line 15) | @Override
method setAppName (line 20) | public void setAppName(String appName) {
method setMsCode (line 24) | public void setMsCode(String msCode) {
method setInstId (line 28) | public void setInstId(long instId) {
method setParamMap (line 32) | public void setParamMap(Map<String, Object> paramMap) {
method getMsCode (line 38) | @Override
method getInstId (line 43) | @Override
method get (line 48) | @Override
method containsKey (line 53) | @Override
method getParams (line 58) | @Override
method getParamMap (line 63) | public Map<String, Object> getParamMap() {
method putAll (line 67) | public void putAll(Map<String, Object> paramMap) {
FILE: tac-sdk/src/main/java/com/alibaba/tac/sdk/error/ErrorCode.java
class ErrorCode (line 3) | public class ErrorCode {
FILE: tac-sdk/src/main/java/com/alibaba/tac/sdk/error/IError.java
type IError (line 6) | public interface IError {
method getCode (line 12) | int getCode();
method getMessage (line 18) | String getMessage();
FILE: tac-sdk/src/main/java/com/alibaba/tac/sdk/error/ServiceException.java
class ServiceException (line 6) | public class ServiceException extends Exception {
method ServiceException (line 18) | public ServiceException(int errorCode, String message) {
method getErrorCode (line 24) | public int getErrorCode() {
method setErrorCode (line 28) | public void setErrorCode(int errorCode) {
method getMessage (line 32) | @Override
method setMessage (line 37) | public void setMessage(String message) {
method throwException (line 48) | public static ServiceException throwException(IError error) throws Ser...
method throwException (line 61) | public static ServiceException throwException(Integer errorCode, Strin...
method throwException (line 74) | public static ServiceException throwException(IError error, String err...
method newException (line 86) | public static ServiceException newException(Integer errorCode, String ...
FILE: tac-sdk/src/main/java/com/alibaba/tac/sdk/factory/AbstractServiceFactory.java
class AbstractServiceFactory (line 11) | public abstract class AbstractServiceFactory implements ApplicationConte...
method setApplicationContext (line 20) | @Override
method getServiceBean (line 36) | protected static <T> T getServiceBean(String beanId) {
method getServiceBean (line 43) | public static <T> T getServiceBean(Class<T> clazz) {
method checkNull (line 52) | private static void checkNull(Object bean, Class<?> clazz) {
FILE: tac-sdk/src/main/java/com/alibaba/tac/sdk/factory/TacInfrasFactory.java
class TacInfrasFactory (line 9) | @Service
method getLogger (line 17) | public static TacLogger getLogger() {
FILE: tac-sdk/src/main/java/com/alibaba/tac/sdk/handler/DisposableHandler.java
type DisposableHandler (line 7) | public interface DisposableHandler {
method destroy (line 9) | void destroy() throws Exception;
FILE: tac-sdk/src/main/java/com/alibaba/tac/sdk/handler/InitializingHandler.java
type InitializingHandler (line 7) | public interface InitializingHandler {
method afterPropertiesSet (line 9) | void afterPropertiesSet() throws Exception;
FILE: tac-sdk/src/main/java/com/alibaba/tac/sdk/handler/TacHandler.java
type TacHandler (line 11) | public interface TacHandler<T> {
method execute (line 19) | TacResult<T> execute(Context context) throws Exception;
FILE: tac-sdk/src/main/java/com/alibaba/tac/sdk/infrastracture/TacLogger.java
type TacLogger (line 8) | public interface TacLogger {
method debug (line 10) | public void debug(String log);
method info (line 12) | public void info(String log);
method rateInfo (line 14) | public void rateInfo(String log);
method warn (line 16) | public void warn(String log);
method rateWarn (line 18) | public void rateWarn(String log);
method error (line 20) | public void error(String log, Throwable t);
method ttLog (line 22) | public void ttLog(String log);
method getContent (line 24) | public String getContent();
method isDebugEnabled (line 27) | boolean isDebugEnabled();
method isInfoEnabled (line 30) | boolean isInfoEnabled();
method isWarnEnabled (line 32) | boolean isWarnEnabled();
method isErrorEnabled (line 34) | boolean isErrorEnabled();
FILE: tac-sdk/src/main/java/com/alibaba/tac/sdk/tangram4tac/Cell.java
class Cell (line 9) | public abstract class Cell<T extends Style> {
method Cell (line 22) | public Cell() {
method setId (line 27) | public void setId(String id) {
method setReuseId (line 31) | public void setReuseId(String reuseId) {
method getId (line 35) | public String getId() {
method setStyle (line 39) | public void setStyle(T style) {
method getStyle (line 43) | public T getStyle() {
method getReuseId (line 47) | public String getReuseId() {
method setRender (line 51) | public void setRender(IRender mRender) {
method getType (line 55) | public abstract String getType();
method render (line 57) | public Object render() {
FILE: tac-sdk/src/main/java/com/alibaba/tac/sdk/tangram4tac/Container.java
class Container (line 9) | public abstract class Container<T extends Style> extends Cell<T> {
method Container (line 25) | public Container() {
method getBusinessType (line 30) | public String getBusinessType() {
method setBusinessType (line 34) | public void setBusinessType(String businessType) {
method getHeader (line 38) | public Cell getHeader() {
method setHeader (line 42) | public void setHeader(Cell header) {
method getFooter (line 46) | public Cell getFooter() {
method setFooter (line 50) | public void setFooter(Cell footer) {
method setLoad (line 54) | public void setLoad(String load) {
method setLoadType (line 58) | public void setLoadType(int loadType) {
method getLoad (line 62) | public String getLoad() {
method getLoadType (line 66) | public int getLoadType() {
method addChild (line 70) | public void addChild(Cell child) {
method addChild (line 74) | public void addChild(Cell child, int index) {
method addChildren (line 86) | public void addChildren(List<Cell> children) {
method addChildren (line 90) | public void addChildren(List<Cell> children, int index) {
method getChildAt (line 102) | public Cell getChildAt(int index) {
method getChildIndex (line 110) | public int getChildIndex(Cell child) {
method removeChild (line 118) | public void removeChild(Cell child) {
method removeAllChildren (line 124) | public void removeAllChildren() {
method removeChildAt (line 128) | public void removeChildAt(int index) {
method getItems (line 134) | public List<Cell> getItems() {
FILE: tac-sdk/src/main/java/com/alibaba/tac/sdk/tangram4tac/Style.java
class Style (line 6) | public class Style {
method Style (line 38) | public Style() {
method setMargin (line 41) | public void setMargin(float top, float right, float bottom, float left) {
method setPadding (line 51) | public void setPadding(float top, float right, float bottom, float lef...
method setBackgroundColor (line 61) | public void setBackgroundColor(String backgroundColor) {
method setBackgroundImage (line 65) | public void setBackgroundImage(String backgroundImage) {
method setWidth (line 69) | public void setWidth(int width) {
method setHeight (line 73) | public void setHeight(int height) {
method setzIndex (line 77) | public void setzIndex(int zIndex) {
method setDisplay (line 81) | public void setDisplay(String display) {
method setCols (line 85) | public void setCols(float[] cols) {
method setAspectRatio (line 89) | public void setAspectRatio(float aspectRatio) {
method getBackgroundColor (line 93) | public String getBackgroundColor() {
method getBackgroundImage (line 97) | public String getBackgroundImage() {
method getWidth (line 101) | public float getWidth() {
method getHeight (line 105) | public float getHeight() {
method getzIndex (line 109) | public int getzIndex() {
method getDisplay (line 113) | public String getDisplay() {
method getMargin (line 117) | public float[] getMargin() {
method getPadding (line 121) | public float[] getPadding() {
method getCols (line 125) | public float[] getCols() {
method getAspectRatio (line 129) | public float getAspectRatio() {
method getRatio (line 133) | public float getRatio() {
method setRatio (line 137) | public void setRatio(float ratio) {
method isSlidable (line 141) | public boolean isSlidable() {
method setSlidable (line 145) | public void setSlidable(boolean slidable) {
method getForLabel (line 149) | public String getForLabel() {
method setForLabel (line 153) | public void setForLabel(String forLabel) {
method isDisableReuse (line 157) | public boolean isDisableReuse() {
method setDisableReuse (line 161) | public void setDisableReuse(boolean disableReuse) {
FILE: tac-sdk/src/main/java/com/alibaba/tac/sdk/tangram4tac/lib/BannerContainer.java
class BannerContainer (line 8) | public class BannerContainer extends Container<BannerStyle> {
method BannerContainer (line 10) | public BannerContainer() {
method getType (line 13) | @Override
FILE: tac-sdk/src/main/java/com/alibaba/tac/sdk/tangram4tac/lib/BannerStyle.java
class BannerStyle (line 10) | public class BannerStyle extends Style {
method isAutoScroll (line 50) | public boolean isAutoScroll() {
method setAutoScroll (line 54) | public void setAutoScroll(boolean autoScroll) {
method getSpecialInterval (line 58) | public Map<String, Object> getSpecialInterval() {
method setSpecialInterval (line 62) | public void setSpecialInterval(Map<String, Object> specialInterval) {
method isInfinite (line 66) | public boolean isInfinite() {
method setInfinite (line 70) | public void setInfinite(boolean infinite) {
method getIndicatorImg1 (line 74) | public String getIndicatorImg1() {
method setIndicatorImg1 (line 78) | public void setIndicatorImg1(String indicatorImg1) {
method getIndicatorImg2 (line 82) | public String getIndicatorImg2() {
method setIndicatorImg2 (line 86) | public void setIndicatorImg2(String indicatorImg2) {
method getIndicatorGravity (line 90) | public String getIndicatorGravity() {
method setIndicatorGravity (line 94) | public void setIndicatorGravity(String indicatorGravity) {
method getIndicatorPosition (line 98) | public String getIndicatorPosition() {
method setIndicatorPosition (line 102) | public void setIndicatorPosition(String indicatorPosition) {
method getIndicatorGap (line 106) | public float getIndicatorGap() {
method setIndicatorGap (line 110) | public void setIndicatorGap(float indicatorGap) {
method getIndicatorHeight (line 114) | public float getIndicatorHeight() {
method setIndicatorHeight (line 118) | public void setIndicatorHeight(float indicatorHeight) {
method getIndicatorMargin (line 122) | public float getIndicatorMargin() {
method setIndicatorMargin (line 126) | public void setIndicatorMargin(float indicatorMargin) {
method getInfiniteMinCount (line 130) | public int getInfiniteMinCount() {
method setInfiniteMinCount (line 134) | public void setInfiniteMinCount(int infiniteMinCount) {
method getPageRatio (line 138) | public float getPageRatio() {
method setPageRatio (line 142) | public void setPageRatio(float pageRatio) {
method gethGap (line 146) | public float gethGap() {
method sethGap (line 150) | public void sethGap(float hGap) {
method getScrollMarginLeft (line 154) | public float getScrollMarginLeft() {
method setScrollMarginLeft (line 158) | public void setScrollMarginLeft(float scrollMarginLeft) {
method getScrollMarginRight (line 162) | public float getScrollMarginRight() {
method setScrollMarginRight (line 166) | public void setScrollMarginRight(float scrollMarginRight) {
method getItemRatio (line 170) | public float getItemRatio() {
method setItemRatio (line 174) | public void setItemRatio(float itemRatio) {
method getIndicatorRadius (line 178) | public float getIndicatorRadius() {
method setIndicatorRadius (line 182) | public void setIndicatorRadius(float indicatorRadius) {
method getIndicatorColor (line 186) | public String getIndicatorColor() {
method setIndicatorColor (line 190) | public void setIndicatorColor(String indicatorColor) {
method getDefaultIndicatorColor (line 194) | public String getDefaultIndicatorColor() {
method setDefaultIndicatorColor (line 198) | public void setDefaultIndicatorColor(String defaultIndicatorColor) {
FILE: tac-sdk/src/main/java/com/alibaba/tac/sdk/tangram4tac/lib/CellType.java
class CellType (line 6) | public class CellType {
FILE: tac-sdk/src/main/java/com/alibaba/tac/sdk/tangram4tac/lib/FiveColumnContainer.java
class FiveColumnContainer (line 8) | public class FiveColumnContainer extends Container<FlowStyle> {
method FiveColumnContainer (line 10) | public FiveColumnContainer() {
method getType (line 13) | @Override
FILE: tac-sdk/src/main/java/com/alibaba/tac/sdk/tangram4tac/lib/FixContainer.java
class FixContainer (line 6) | public class FixContainer extends OneChildContainer<FixStyle> {
method FixContainer (line 8) | public FixContainer() {
method getType (line 12) | @Override
FILE: tac-sdk/src/main/java/com/alibaba/tac/sdk/tangram4tac/lib/FixStyle.java
class FixStyle (line 8) | public class FixStyle extends Style {
method getX (line 18) | public float getX() {
method setX (line 22) | public void setX(float x) {
method getY (line 26) | public float getY() {
method setY (line 30) | public void setY(float y) {
method getAlign (line 34) | public String getAlign() {
method setAlign (line 38) | public void setAlign(String align) {
method getShowType (line 42) | public String getShowType() {
method setShowType (line 46) | public void setShowType(String showType) {
FILE: tac-sdk/src/main/java/com/alibaba/tac/sdk/tangram4tac/lib/FloatContainer.java
class FloatContainer (line 6) | public class FloatContainer extends OneChildContainer<FixStyle> {
method getType (line 8) | @Override
FILE: tac-sdk/src/main/java/com/alibaba/tac/sdk/tangram4tac/lib/FlowContainer.java
class FlowContainer (line 8) | public class FlowContainer extends Container<FlowStyle> {
method FlowContainer (line 10) | public FlowContainer() {
method getType (line 13) | @Override
FILE: tac-sdk/src/main/java/com/alibaba/tac/sdk/tangram4tac/lib/FlowStyle.java
class FlowStyle (line 8) | public class FlowStyle extends Style {
method getColumn (line 18) | public int getColumn() {
method setColumn (line 22) | public void setColumn(int column) {
method getvGap (line 26) | public float getvGap() {
method setvGap (line 30) | public void setvGap(int vGap) {
method setvGap (line 34) | public void setvGap(float vGap) {
method gethGap (line 38) | public float gethGap() {
method sethGap (line 42) | public void sethGap(int hGap) {
method sethGap (line 46) | public void sethGap(float hGap) {
method isAutoExpand (line 50) | public boolean isAutoExpand() {
method setAutoExpand (line 54) | public void setAutoExpand(boolean autoExpand) {
FILE: tac-sdk/src/main/java/com/alibaba/tac/sdk/tangram4tac/lib/FourColumnContainer.java
class FourColumnContainer (line 8) | public class FourColumnContainer extends Container<FlowStyle> {
method FourColumnContainer (line 10) | public FourColumnContainer() {
method getType (line 13) | @Override
FILE: tac-sdk/src/main/java/com/alibaba/tac/sdk/tangram4tac/lib/OneChildContainer.java
class OneChildContainer (line 12) | public abstract class OneChildContainer<T extends Style> extends Contain...
method addChild (line 14) | public void addChild(Cell child) {
method addChild (line 18) | public void addChild(Cell child, int index) {
method addChildren (line 30) | public void addChildren(List<Cell> children) {
method addChildren (line 34) | public void addChildren(List<Cell> children, int index) {
FILE: tac-sdk/src/main/java/com/alibaba/tac/sdk/tangram4tac/lib/OneColumnContainer.java
class OneColumnContainer (line 8) | public class OneColumnContainer extends Container<FlowStyle> {
method OneColumnContainer (line 10) | public OneColumnContainer() {
method getType (line 13) | @Override
FILE: tac-sdk/src/main/java/com/alibaba/tac/sdk/tangram4tac/lib/OnePlusNContainer.java
class OnePlusNContainer (line 8) | public class OnePlusNContainer extends Container<OnePlusNStyle> {
method OnePlusNContainer (line 10) | public OnePlusNContainer() {
method getType (line 13) | @Override
FILE: tac-sdk/src/main/java/com/alibaba/tac/sdk/tangram4tac/lib/OnePlusNStyle.java
class OnePlusNStyle (line 8) | public class OnePlusNStyle extends Style {
method setRows (line 12) | public void setRows(float[] rows) {
method getRows (line 16) | public float[] getRows() {
FILE: tac-sdk/src/main/java/com/alibaba/tac/sdk/tangram4tac/lib/ScrollContainer.java
class ScrollContainer (line 8) | public class ScrollContainer extends Container<ScrollStyle> {
method ScrollContainer (line 10) | public ScrollContainer() {
method getType (line 13) | @Override
FILE: tac-sdk/src/main/java/com/alibaba/tac/sdk/tangram4tac/lib/ScrollFixBannerContainer.java
class ScrollFixBannerContainer (line 8) | public class ScrollFixBannerContainer extends Container<FixStyle> {
method getType (line 10) | @Override
FILE: tac-sdk/src/main/java/com/alibaba/tac/sdk/tangram4tac/lib/ScrollFixContainer.java
class ScrollFixContainer (line 6) | public class ScrollFixContainer extends OneChildContainer<FixStyle> {
method getType (line 8) | @Override
FILE: tac-sdk/src/main/java/com/alibaba/tac/sdk/tangram4tac/lib/ScrollStyle.java
class ScrollStyle (line 8) | public class ScrollStyle extends Style {
method getPageWidth (line 24) | public float getPageWidth() {
method setPageWidth (line 28) | public void setPageWidth(float pageWidth) {
method getPageHeight (line 32) | public float getPageHeight() {
method setPageHeight (line 36) | public void setPageHeight(float pageHeight) {
method getDefaultIndicatorColor (line 40) | public String getDefaultIndicatorColor() {
method setDefaultIndicatorColor (line 44) | public void setDefaultIndicatorColor(String defaultIndicatorColor) {
method getIndicatorColor (line 48) | public String getIndicatorColor() {
method setIndicatorColor (line 52) | public void setIndicatorColor(String indicatorColor) {
method isHasIndicator (line 56) | public boolean isHasIndicator() {
method setHasIndicator (line 60) | public void setHasIndicator(boolean hasIndicator) {
method getFooterType (line 64) | public String getFooterType() {
method setFooterType (line 68) | public void setFooterType(String footerType) {
method isRetainScrollState (line 72) | public boolean isRetainScrollState() {
method setRetainScrollState (line 76) | public void setRetainScrollState(boolean retainScrollState) {
FILE: tac-sdk/src/main/java/com/alibaba/tac/sdk/tangram4tac/lib/StickyContainer.java
class StickyContainer (line 6) | public class StickyContainer extends OneChildContainer<StickyStyle> {
method StickyContainer (line 8) | public StickyContainer() {
method getType (line 11) | @Override
FILE: tac-sdk/src/main/java/com/alibaba/tac/sdk/tangram4tac/lib/StickyStyle.java
class StickyStyle (line 8) | public class StickyStyle extends Style {
method getSticky (line 12) | public String getSticky() {
method setSticky (line 16) | public void setSticky(String sticky) {
FILE: tac-sdk/src/main/java/com/alibaba/tac/sdk/tangram4tac/lib/ThreeColumnContainer.java
class ThreeColumnContainer (line 8) | public class ThreeColumnContainer extends Container<FlowStyle> {
method ThreeColumnContainer (line 10) | public ThreeColumnContainer() {
method getType (line 13) | @Override
FILE: tac-sdk/src/main/java/com/alibaba/tac/sdk/tangram4tac/lib/TwoColumnContainer.java
class TwoColumnContainer (line 8) | public class TwoColumnContainer extends Container<FlowStyle> {
method TwoColumnContainer (line 10) | public TwoColumnContainer() {
method getType (line 13) | @Override
FILE: tac-sdk/src/main/java/com/alibaba/tac/sdk/tangram4tac/lib/WaterFallContainer.java
class WaterFallContainer (line 8) | public class WaterFallContainer extends Container {
method WaterFallContainer (line 10) | public WaterFallContainer() {
method getType (line 13) | @Override
FILE: tac-sdk/src/main/java/com/alibaba/tac/sdk/tangram4tac/lib/WaterFallStyle.java
class WaterFallStyle (line 8) | public class WaterFallStyle extends Style {
method getvGap (line 18) | public float getvGap() {
method setvGap (line 22) | public void setvGap(float vGap) {
method gethGap (line 26) | public float gethGap() {
method sethGap (line 30) | public void sethGap(float hGap) {
method getGap (line 34) | public float getGap() {
method setGap (line 38) | public void setGap(float gap) {
method getColumn (line 44) | public int getColumn() {
method setColumn (line 48) | public void setColumn(int column) {
FILE: tac-sdk/src/main/java/com/alibaba/tac/sdk/tangram4tac/render/DefaultRender.java
class DefaultRender (line 14) | public class DefaultRender implements IRender<Cell, Map<String, Object>> {
method DefaultRender (line 24) | public DefaultRender() {
method renderTo (line 28) | @Override
method internalRenderForClass (line 33) | private Map<String, Object> internalRenderForClass(Object object) {
method internalRenderFields (line 46) | private void internalRenderFields(Object object, Class clazz, Map<Stri...
method internalRenderField (line 91) | private void internalRenderField(String name, Object object, Map<Strin...
method getFieldValue (line 100) | private Object getFieldValue(Object object) {
method lookupCellTypes (line 166) | private List<Class<?>> lookupCellTypes(Class<?> selfClass) {
method isBasicType (line 180) | private boolean isBasicType(Object object) {
method getNonDefaultValueFromBasicType (line 190) | private Object getNonDefaultValueFromBasicType(Object object) {
FILE: tac-sdk/src/main/java/com/alibaba/tac/sdk/tangram4tac/render/IRender.java
type IRender (line 6) | public interface IRender<I, O> {
method renderTo (line 8) | O renderTo(I input);
FILE: tac-sdk/src/main/java/com/alibaba/tac/sdk/tangram4tac/utils/Pair.java
class Pair (line 6) | public class Pair<F, S> {
method Pair (line 10) | public Pair(F first, S second) {
method equals (line 15) | public boolean equals(Object o) {
method objectsEqual (line 24) | private static boolean objectsEqual(Object a, Object b) {
method hashCode (line 28) | public int hashCode() {
method create (line 32) | public static <A, B> Pair<A, B> create(A a, B b) {
FILE: tac-sdk/src/main/java/com/alibaba/tac/sdk/tangram4tac/utils/Utils.java
class Utils (line 15) | public class Utils {
method format (line 17) | public static String format (
method parse (line 34) | public static List <Pair<String, String>> parse (final URI uri, final ...
method parse (line 47) | public static void parse (
method createURI (line 72) | public static URI createURI(
method decode (line 111) | private static String decode (final String content, final String encod...
method encode (line 120) | private static String encode (final String content, final String encod...
FILE: tac-sdk/src/main/java/com/alibaba/tac/sdk/utils/TacIPUtils.java
class TacIPUtils (line 12) | public class TacIPUtils {
method getLocalHostName (line 37) | public static String getLocalHostName() {
method getLocalIp (line 41) | public static String getLocalIp() {
method getAllHostAddress (line 46) | @Deprecated
method getAllIpv4NoLoopbackAddresses (line 67) | @Deprecated
method getFirstNoLoopbackAddress (line 78) | @Deprecated
Condensed preview — 225 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (1,771K chars).
[
{
"path": ".gitignore",
"chars": 237,
"preview": "target/\n!.mvn/wrapper/maven-wrapper.jar\n\n### STS ###\n.apt_generated\n.classpath\n.factorypath\n.project\n.settings\n.springBe"
},
{
"path": "LICENSE",
"chars": 1070,
"preview": "MIT License\n\nCopyright (c) 2016 Alibaba Group\n\nPermission is hereby granted, free of charge, to any person obtaining a c"
},
{
"path": "README-ch.md",
"chars": 3385,
"preview": "- [TAC](#tac)\n - [What is TAC ?](#what-is-tac-%EF%BC%9F)\n - [Features](#features)\n - [Why TAC?](#why-tac%EF%BC%9F)\n "
},
{
"path": "README.md",
"chars": 4180,
"preview": "\n\n* [TAC](#tac)\n * [What is TAC ?](#what-is-tac-%EF%BC%9F)\n * [Features](#features)\n * [Why TAC?](#why-tac%EF%BC%9F)\n"
},
{
"path": "docs/arch_design.md",
"chars": 0,
"preview": ""
},
{
"path": "docs/configs.md",
"chars": 1598,
"preview": "# TAC 配置\n\n* TAC 使用 springboot 构建,可是用 springboot 的标准配置文件来替换其默认配置;\n* 如 启动参数 --spring.config.location=file:/override.proper"
},
{
"path": "docs/custom_data_source.md",
"chars": 3516,
"preview": "## 接入你自己的数据源\n\n* 以下以 idea 为例,描述 tac 源码级别添加数据源步骤\n\n### 代码拉取\n\n```\ngit clone git@github.com:alibaba/tac.git\n```\n\n###\n\n### 打开工"
},
{
"path": "docs/gitlab.md",
"chars": 728,
"preview": "# 与 gitlab 集成\n\n* 用户可以将 gitlab 与 tac 集成,方便管理微服务;\n\n## Step 1 新建帐号\n\n* tac 使用专门的 gitlab 帐号来管理相关代码;联系对应的 gitlab 服务器管理员,新建名如 t"
},
{
"path": "docs/ide_source_start.md",
"chars": 2349,
"preview": "# 源码启动详细步骤\n\n* 以下以 idea 为例,描述 tac 源码从 idea 启动步骤\n\n### 代码拉取\n\n```\ngit clone git@github.com:alibaba/tac.git\n```\n\n### 打开工程\n\n* "
},
{
"path": "override.properties",
"chars": 40,
"preview": "\n\nscan.package.name=com.tmall.itemcenter"
},
{
"path": "pom.xml",
"chars": 12097,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2"
},
{
"path": "tac-console/pom.xml",
"chars": 2992,
"preview": "<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n xsi:sc"
},
{
"path": "tac-console/src/main/java/com/alibaba/tac/console/ConsoleApplication.java",
"chars": 5593,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2016 Alibaba Group\n *\n * Permission is hereby granted, free of charge, to an"
},
{
"path": "tac-console/src/main/java/com/alibaba/tac/console/ConsoleBeanConfig.java",
"chars": 1776,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2016 Alibaba Group\n *\n * Permission is hereby granted, free of charge, to an"
},
{
"path": "tac-console/src/main/java/com/alibaba/tac/console/ConsoleConstants.java",
"chars": 1717,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2016 Alibaba Group\n *\n * Permission is hereby granted, free of charge, to an"
},
{
"path": "tac-console/src/main/java/com/alibaba/tac/console/TacApplicationContext.java",
"chars": 1578,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2016 Alibaba Group\n *\n * Permission is hereby granted, free of charge, to an"
},
{
"path": "tac-console/src/main/java/com/alibaba/tac/console/error/ConsoleError.java",
"chars": 1704,
"preview": "\n/*\n * MIT License\n *\n * Copyright (c) 2016 Alibaba Group\n *\n * Permission is hereby granted, free of charge, to a"
},
{
"path": "tac-console/src/main/java/com/alibaba/tac/console/error/IErrorCode.java",
"chars": 1340,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2016 Alibaba Group\n *\n * Permission is hereby granted, free of charge, to an"
},
{
"path": "tac-console/src/main/java/com/alibaba/tac/console/sdk/MenuOptionHandler.java",
"chars": 3916,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2016 Alibaba Group\n *\n * Permission is hereby granted, free of charge, to an"
},
{
"path": "tac-console/src/main/java/com/alibaba/tac/console/web/HomeController.java",
"chars": 1571,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2016 Alibaba Group\n *\n * Permission is hereby granted, free of charge, to an"
},
{
"path": "tac-console/src/main/java/com/alibaba/tac/console/web/InstFileRO.java",
"chars": 1580,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2016 Alibaba Group\n *\n * Permission is hereby granted, free of charge, to an"
},
{
"path": "tac-console/src/main/java/com/alibaba/tac/console/web/TacInstController.java",
"chars": 11563,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2016 Alibaba Group\n *\n * Permission is hereby granted, free of charge, to an"
},
{
"path": "tac-console/src/main/java/com/alibaba/tac/console/web/TacMsController.java",
"chars": 3297,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2016 Alibaba Group\n *\n * Permission is hereby granted, free of charge, to an"
},
{
"path": "tac-console/src/main/java/com/alibaba/tac/console/web/ro/InstTestRO.java",
"chars": 1488,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2016 Alibaba Group\n *\n * Permission is hereby granted, free of charge, to an"
},
{
"path": "tac-console/src/main/resources/application-admin.properties",
"chars": 157,
"preview": "\n# the properites when run in admin model\n\n\nname.simple=tac-admin\n\n\n# the scan packages , don't change it if necessary\n"
},
{
"path": "tac-console/src/main/resources/application-simple.properties",
"chars": 231,
"preview": "\n\n# the properites when run in command model\n\nname.simple=tac-simple\n\n\n# the scan packages , don't change it if necessa"
},
{
"path": "tac-console/src/main/resources/application.properties",
"chars": 642,
"preview": "\n\n# the port when use web model\nserver.port=7001\n\n\n# scan the extend package names\nscan.package.name=com.tmall.itemcente"
},
{
"path": "tac-console/src/main/resources/static/css/app.797406e2fb84b15ea0b383ad60572f28.css",
"chars": 164591,
"preview": "#app{font-family:Avenir,Helvetica,Arial,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;"
},
{
"path": "tac-console/src/main/resources/static/js/app.606b53e74ca0c7067159.js",
"chars": 22466,
"preview": "webpackJsonp([1],{\"/lMo\":function(t,e,n){\"use strict\";e.a={name:\"TacMs\",data:function(){return{}}}},0:function(t,e){},\"1"
},
{
"path": "tac-console/src/main/resources/static/js/manifest.58ce01f7a6fd036b4f8d.js",
"chars": 1511,
"preview": "!function(e){function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.e"
},
{
"path": "tac-console/src/main/resources/static/js/vendor.8940c3c560d73d0a0b28.js",
"chars": 1017385,
"preview": "webpackJsonp([0],{\"+7mA\":function(e,t,n){\"use strict\";e.exports=function(e,t,n){var i=\" \",r=e.level,o=e.dataLevel,s=e.sc"
},
{
"path": "tac-console/src/main/resources/static/main.css",
"chars": 39,
"preview": ".spanButton {\n margin-left: 10px;\n}\n"
},
{
"path": "tac-console/src/main/resources/tac-console.properties",
"chars": 2,
"preview": "\n\n"
},
{
"path": "tac-console/src/main/resources/templates/index.html",
"chars": 497,
"preview": "<!DOCTYPE html>\n<html>\n<head>\n <meta charset=\"utf-8\">\n <title>tac-console-web</title>\n <link href=\"/static/css/"
},
{
"path": "tac-console/src/test/java/com/alibaba/tac/console/MenuOptionHandlerTest.java",
"chars": 462,
"preview": "package com.alibaba.tac.console;\n\nimport com.alibaba.tac.console.sdk.MenuOptionHandler;\nimport com.alibaba.tac.console.t"
},
{
"path": "tac-console/src/test/java/com/alibaba/tac/console/test/LancherTest.java",
"chars": 5480,
"preview": "package com.alibaba.tac.console.test;\n\nimport com.alibaba.tac.engine.bootlaucher.BootJarLaucherUtils;\nimport org.junit.T"
},
{
"path": "tac-console/src/test/java/com/alibaba/tac/console/test/TacConsoleTest.java",
"chars": 406,
"preview": "package com.alibaba.tac.console.test;\n\nimport org.junit.runner.RunWith;\nimport org.springframework.boot.test.context.Spr"
},
{
"path": "tac-console/src/test/java/com/alibaba/tac/console/test/TestApplication.java",
"chars": 445,
"preview": "package com.alibaba.tac.console.test;\n\nimport org.springframework.boot.autoconfigure.SpringBootApplication;\nimport org.s"
},
{
"path": "tac-console-web/.babelrc",
"chars": 312,
"preview": "{\n \"presets\": [\n [\"env\", {\n \"modules\": false,\n \"targets\": {\n \"browsers\": [\"> 1%\", \"last 2 versions\""
},
{
"path": "tac-console-web/.editorconfig",
"chars": 147,
"preview": "root = true\n\n[*]\ncharset = utf-8\nindent_style = space\nindent_size = 4\nend_of_line = lf\ninsert_final_newline = true\ntrim_"
},
{
"path": "tac-console-web/.eslintignore",
"chars": 23,
"preview": "build/*.js\nconfig/*.js\n"
},
{
"path": "tac-console-web/.eslintrc.js",
"chars": 411,
"preview": "// http://eslint.org/docs/user-guide/configuring\n\nmodule.exports = {\n root: true,\n parser: 'babel-eslint',\n parserOpt"
},
{
"path": "tac-console-web/.gitignore",
"chars": 145,
"preview": ".DS_Store\nnode_modules/\ndist/\nnpm-debug.log*\nyarn-debug.log*\nyarn-error.log*\n\n# Editor directories and files\n.idea\n*.suo"
},
{
"path": "tac-console-web/.postcssrc.js",
"chars": 197,
"preview": "// https://github.com/michael-ciniawsky/postcss-load-config\n\nmodule.exports = {\n \"plugins\": {\n // to edit target bro"
},
{
"path": "tac-console-web/README.md",
"chars": 469,
"preview": "# tac-console-web\n\n> A Vue.js project\n\n## Build Setup\n\n``` bash\n# install dependencies\nnpm install\n\n# serve with hot rel"
},
{
"path": "tac-console-web/build/build.js",
"chars": 1073,
"preview": "require('./check-versions')()\n\nprocess.env.NODE_ENV = 'production'\n\nvar ora = require('ora')\nvar rm = require('rimraf')\n"
},
{
"path": "tac-console-web/build/check-versions.js",
"chars": 1256,
"preview": "var chalk = require('chalk')\nvar semver = require('semver')\nvar packageConfig = require('../package.json')\nvar shell = r"
},
{
"path": "tac-console-web/build/dev-client.js",
"chars": 245,
"preview": "/* eslint-disable */\nrequire('eventsource-polyfill')\nvar hotClient = require('webpack-hot-middleware/client?noInfo=true&"
},
{
"path": "tac-console-web/build/dev-server.js",
"chars": 2460,
"preview": "require('./check-versions')()\n\nvar config = require('../config')\nif (!process.env.NODE_ENV) {\n process.env.NODE_ENV = J"
},
{
"path": "tac-console-web/build/utils.js",
"chars": 1949,
"preview": "var path = require('path')\nvar config = require('../config')\nvar ExtractTextPlugin = require('extract-text-webpack-plugi"
},
{
"path": "tac-console-web/build/vue-loader.conf.js",
"chars": 413,
"preview": "var utils = require('./utils')\nvar config = require('../config')\nvar isProduction = process.env.NODE_ENV === 'production"
},
{
"path": "tac-console-web/build/webpack.base.conf.js",
"chars": 1772,
"preview": "var path = require('path')\nvar utils = require('./utils')\nvar config = require('../config')\nvar vueLoaderConfig = requir"
},
{
"path": "tac-console-web/build/webpack.dev.conf.js",
"chars": 1225,
"preview": "var utils = require('./utils')\nvar webpack = require('webpack')\nvar config = require('../config')\nvar merge = require('w"
},
{
"path": "tac-console-web/build/webpack.prod.conf.js",
"chars": 4365,
"preview": "var path = require('path');\nvar utils = require('./utils');\nvar webpack = require('webpack');\nvar config = require('../c"
},
{
"path": "tac-console-web/config/dev.env.js",
"chars": 139,
"preview": "var merge = require('webpack-merge')\nvar prodEnv = require('./prod.env')\n\nmodule.exports = merge(prodEnv, {\n NODE_ENV: "
},
{
"path": "tac-console-web/config/index.js",
"chars": 1692,
"preview": "// see http://vuejs-templates.github.io/webpack for documentation.\nvar path = require('path');\n\nmodule.exports = {\n b"
},
{
"path": "tac-console-web/config/prod.env.js",
"chars": 48,
"preview": "module.exports = {\n NODE_ENV: '\"production\"'\n}\n"
},
{
"path": "tac-console-web/index.html",
"chars": 205,
"preview": "<!DOCTYPE html>\n<html>\n\n<head>\n <meta charset=\"utf-8\">\n <title>tac-console-web</title>\n</head>\n\n<body>\n <div id"
},
{
"path": "tac-console-web/package.json",
"chars": 2073,
"preview": "{\n \"name\": \"tac-console-web\",\n \"version\": \"1.0.0\",\n \"description\": \"A Vue.js project\",\n \"author\": \"jinshuan.li\",\n \""
},
{
"path": "tac-console-web/src/App.vue",
"chars": 341,
"preview": "\n<template>\n <div id=\"app\">\n <TacConsole></TacConsole>\n </div>\n</template>\n\n<script>\nexport default {\n nam"
},
{
"path": "tac-console-web/src/components/Hello.vue",
"chars": 1354,
"preview": "<template>\n <div class=\"hello\">\n <h1>{{ msg }}</h1>\n <h2>Essential Links</h2>\n <ul>\n <li><a href=\"https:/"
},
{
"path": "tac-console-web/src/components/Home.vue",
"chars": 353,
"preview": "<template>\n <b-jumbotron header=\"TAC-Console\" lead=\"The Tangram App Container\">\n\n <router-link to=\"/tacMs\" cla"
},
{
"path": "tac-console-web/src/components/TacConsole.vue",
"chars": 1707,
"preview": "<template>\n <div class=\"\">\n <b-navbar toggleable=\"md\" type=\"dark\" variant=\"info\">\n\n <b-navbar-toggl"
},
{
"path": "tac-console-web/src/components/TacInst.vue",
"chars": 735,
"preview": "<template>\n <div class=\"tacInst\">\n <h1>发布流程</h1>\n <div>\n <b-alert show variant=\"primary\">\n "
},
{
"path": "tac-console-web/src/components/TacInstPublish.vue",
"chars": 10389,
"preview": "<template>\n <div class=\"tacInstPublish\">\n\n <b-row>\n\n <b-col>\n <h3>服务编码:{{msCode}} 实例"
},
{
"path": "tac-console-web/src/components/TacInstPublishCheck.vue",
"chars": 3019,
"preview": "\n<script>\nimport TacJSONEditor from '@/components/TacJSONEditor';\n\nexport default {\n name: 'TacInstPublishCheck',\n mou"
},
{
"path": "tac-console-web/src/components/TacJSONEditor.vue",
"chars": 865,
"preview": "<template>\n <div ref=\"jsoneditor\" :style=\"styleObj\"></div>\n</template>\n\n\n<script>\nimport JSONEditor from 'JSONEditor'"
},
{
"path": "tac-console-web/src/components/TacMs.vue",
"chars": 258,
"preview": "<template>\n <b-container class=\"tacMs\">\n <router-view></router-view>\n </b-container>\n\n</template>\n\n\n<script"
},
{
"path": "tac-console-web/src/components/TacMsEdit.vue",
"chars": 2993,
"preview": "<template>\n <div>\n <b-form @submit=\"onSubmit\" @reset=\"onReset\" v-if=\"show\">\n <b-form-group label=\"服"
},
{
"path": "tac-console-web/src/components/TacMsList.vue",
"chars": 1920,
"preview": "<template>\n <div>\n <div class=\"panel panel-warning\">\n <div class=\"panel-heading\">\n <"
},
{
"path": "tac-console-web/src/main.js",
"chars": 954,
"preview": "// The Vue build version to load with the `import` command\n// (runtime-only or standalone) has been set in webpack.base."
},
{
"path": "tac-console-web/src/router/index.js",
"chars": 1786,
"preview": "import Vue from 'vue';\nimport Router from 'vue-router';\nimport TacConsole from '@/components/TacConsole';\nimport Home fr"
},
{
"path": "tac-console-web/static/.gitkeep",
"chars": 0,
"preview": ""
},
{
"path": "tac-console-web/static/main.css",
"chars": 39,
"preview": ".spanButton {\n margin-left: 10px;\n}\n"
},
{
"path": "tac-container/pom.xml",
"chars": 2826,
"preview": "<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n xsi:sc"
},
{
"path": "tac-container/src/main/java/com/alibaba/tac/container/ContainerApplication.java",
"chars": 3513,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2016 Alibaba Group\n *\n * Permission is hereby granted, free of charge, to an"
},
{
"path": "tac-container/src/main/java/com/alibaba/tac/container/ContainerBeanConfig.java",
"chars": 1759,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2016 Alibaba Group\n *\n * Permission is hereby granted, free of charge, to an"
},
{
"path": "tac-container/src/main/java/com/alibaba/tac/container/web/TacApiController.java",
"chars": 3287,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2016 Alibaba Group\n *\n * Permission is hereby granted, free of charge, to an"
},
{
"path": "tac-container/src/main/resources/application.properties",
"chars": 308,
"preview": "project.name=tac-container\n\n\n# http port\nserver.port=8001\n# endpoint port\nmanagement.port=8002\n\n\n\n\ntac.default.store=red"
},
{
"path": "tac-custom-datasource-demo/pom.xml",
"chars": 930,
"preview": "<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n xsi:sc"
},
{
"path": "tac-custom-datasource-demo/src/main/java/com/tmall/itemcenter/ItemDO.java",
"chars": 442,
"preview": "package com.tmall.itemcenter;\n\nimport lombok.Data;\n\n/**\n * @author jinshuan.li 10/03/2018 15:43\n */\n@Data\npublic class I"
},
{
"path": "tac-custom-datasource-demo/src/main/java/com/tmall/itemcenter/TmallItemService.java",
"chars": 378,
"preview": "package com.tmall.itemcenter;\n\nimport org.springframework.stereotype.Service;\n\n/**\n * @author jinshuan.li 10/03/2018 15:"
},
{
"path": "tac-custom-datasource-demo/src/test/java/com/alibaba/tac/AppTest.java",
"chars": 643,
"preview": "package com.alibaba.tac;\n\nimport junit.framework.Test;\nimport junit.framework.TestCase;\nimport junit.framework.TestSuite"
},
{
"path": "tac-dev-source-demo/pom.xml",
"chars": 1795,
"preview": "<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n xsi:sc"
},
{
"path": "tac-dev-source-demo/src/main/java/com/alibaba/tac/biz/processor/HelloWorldTac.java",
"chars": 1394,
"preview": "package com.alibaba.tac.biz.processor;\n\nimport com.alibaba.tac.sdk.common.TacResult;\nimport com.alibaba.tac.sdk.domain.C"
},
{
"path": "tac-engine/pom.xml",
"chars": 2105,
"preview": "<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n xsi:sc"
},
{
"path": "tac-engine/src/main/java/com/alibaba/tac/engine/autoconfigure/TacAutoConfiguration.java",
"chars": 1754,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2016 Alibaba Group\n *\n * Permission is hereby granted, free of charge, to an"
},
{
"path": "tac-engine/src/main/java/com/alibaba/tac/engine/bootlaucher/BootJarLaucherUtils.java",
"chars": 6214,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2016 Alibaba Group\n *\n * Permission is hereby granted, free of charge, to an"
},
{
"path": "tac-engine/src/main/java/com/alibaba/tac/engine/code/CodeCompileService.java",
"chars": 8760,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2016 Alibaba Group\n *\n * Permission is hereby granted, free of charge, to an"
},
{
"path": "tac-engine/src/main/java/com/alibaba/tac/engine/code/CodeLoadService.java",
"chars": 7869,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2016 Alibaba Group\n *\n * Permission is hereby granted, free of charge, to an"
},
{
"path": "tac-engine/src/main/java/com/alibaba/tac/engine/code/CustomerClassLoader.java",
"chars": 3754,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2016 Alibaba Group\n *\n * Permission is hereby granted, free of charge, to an"
},
{
"path": "tac-engine/src/main/java/com/alibaba/tac/engine/code/SpringClassLoader.java",
"chars": 1817,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2016 Alibaba Group\n *\n * Permission is hereby granted, free of charge, to an"
},
{
"path": "tac-engine/src/main/java/com/alibaba/tac/engine/code/TacFileService.java",
"chars": 4376,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2016 Alibaba Group\n *\n * Permission is hereby granted, free of charge, to an"
},
{
"path": "tac-engine/src/main/java/com/alibaba/tac/engine/common/DefaultTacIDGenerator.java",
"chars": 1603,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2016 Alibaba Group\n *\n * Permission is hereby granted, free of charge, to an"
},
{
"path": "tac-engine/src/main/java/com/alibaba/tac/engine/common/SequenceCounter.java",
"chars": 1647,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2016 Alibaba Group\n *\n * Permission is hereby granted, free of charge, to an"
},
{
"path": "tac-engine/src/main/java/com/alibaba/tac/engine/common/TacIDGenerator.java",
"chars": 1375,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2016 Alibaba Group\n *\n * Permission is hereby granted, free of charge, to an"
},
{
"path": "tac-engine/src/main/java/com/alibaba/tac/engine/common/redis/RedisSequenceCounter.java",
"chars": 3122,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2016 Alibaba Group\n *\n * Permission is hereby granted, free of charge, to an"
},
{
"path": "tac-engine/src/main/java/com/alibaba/tac/engine/compile/IJdkCompiler.java",
"chars": 1962,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2016 Alibaba Group\n *\n * Permission is hereby granted, free of charge, to an"
},
{
"path": "tac-engine/src/main/java/com/alibaba/tac/engine/compile/InstCodeInfo.java",
"chars": 1654,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2016 Alibaba Group\n *\n * Permission is hereby granted, free of charge, to an"
},
{
"path": "tac-engine/src/main/java/com/alibaba/tac/engine/compile/JavaSourceCode.java",
"chars": 1730,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2016 Alibaba Group\n *\n * Permission is hereby granted, free of charge, to an"
},
{
"path": "tac-engine/src/main/java/com/alibaba/tac/engine/compile/JdkCompilerImpl.java",
"chars": 7732,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2016 Alibaba Group\n *\n * Permission is hereby granted, free of charge, to an"
},
{
"path": "tac-engine/src/main/java/com/alibaba/tac/engine/compile/TacJavaFileObject.java",
"chars": 1750,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2016 Alibaba Group\n *\n * Permission is hereby granted, free of charge, to an"
},
{
"path": "tac-engine/src/main/java/com/alibaba/tac/engine/event/domain/AbstractMsEvent.java",
"chars": 1834,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2016 Alibaba Group\n *\n * Permission is hereby granted, free of charge, to an"
},
{
"path": "tac-engine/src/main/java/com/alibaba/tac/engine/event/domain/GetAllMsEvent.java",
"chars": 1531,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2016 Alibaba Group\n *\n * Permission is hereby granted, free of charge, to an"
},
{
"path": "tac-engine/src/main/java/com/alibaba/tac/engine/event/domain/MsOfflineEvent.java",
"chars": 1550,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2016 Alibaba Group\n *\n * Permission is hereby granted, free of charge, to an"
},
{
"path": "tac-engine/src/main/java/com/alibaba/tac/engine/event/domain/MsPublishEvent.java",
"chars": 1429,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2016 Alibaba Group\n *\n * Permission is hereby granted, free of charge, to an"
},
{
"path": "tac-engine/src/main/java/com/alibaba/tac/engine/event/domain/MsReceivePublishEvent.java",
"chars": 1564,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2016 Alibaba Group\n *\n * Permission is hereby granted, free of charge, to an"
},
{
"path": "tac-engine/src/main/java/com/alibaba/tac/engine/git/GitRepoService.java",
"chars": 6431,
"preview": "package com.alibaba.tac.engine.git;\n\nimport com.alibaba.tac.engine.properties.TacGitlabProperties;\nimport lombok.extern."
},
{
"path": "tac-engine/src/main/java/com/alibaba/tac/engine/inst/domain/TacInst.java",
"chars": 2117,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2016 Alibaba Group\n *\n * Permission is hereby granted, free of charge, to an"
},
{
"path": "tac-engine/src/main/java/com/alibaba/tac/engine/inst/domain/TacInstStatus.java",
"chars": 1578,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2016 Alibaba Group\n *\n * Permission is hereby granted, free of charge, to an"
},
{
"path": "tac-engine/src/main/java/com/alibaba/tac/engine/inst/domain/TacInstanceInfo.java",
"chars": 1713,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2016 Alibaba Group\n *\n * Permission is hereby granted, free of charge, to an"
},
{
"path": "tac-engine/src/main/java/com/alibaba/tac/engine/inst/service/DevMsInstFileService.java",
"chars": 2962,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2016 Alibaba Group\n *\n * Permission is hereby granted, free of charge, to an"
},
{
"path": "tac-engine/src/main/java/com/alibaba/tac/engine/inst/service/IMsInstFileService.java",
"chars": 1632,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2016 Alibaba Group\n *\n * Permission is hereby granted, free of charge, to an"
},
{
"path": "tac-engine/src/main/java/com/alibaba/tac/engine/inst/service/IMsInstService.java",
"chars": 2974,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2016 Alibaba Group\n *\n * Permission is hereby granted, free of charge, to an"
},
{
"path": "tac-engine/src/main/java/com/alibaba/tac/engine/inst/service/LocalMsInstFileService.java",
"chars": 3778,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2016 Alibaba Group\n *\n * Permission is hereby granted, free of charge, to an"
},
{
"path": "tac-engine/src/main/java/com/alibaba/tac/engine/inst/service/redis/RedisMsInstFileService.java",
"chars": 5281,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2016 Alibaba Group\n *\n * Permission is hereby granted, free of charge, to an"
},
{
"path": "tac-engine/src/main/java/com/alibaba/tac/engine/inst/service/redis/RedisMsInstService.java",
"chars": 4513,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2016 Alibaba Group\n *\n * Permission is hereby granted, free of charge, to an"
},
{
"path": "tac-engine/src/main/java/com/alibaba/tac/engine/ms/domain/TacMs.java",
"chars": 1785,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2016 Alibaba Group\n *\n * Permission is hereby granted, free of charge, to an"
},
{
"path": "tac-engine/src/main/java/com/alibaba/tac/engine/ms/domain/TacMsDO.java",
"chars": 1867,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2016 Alibaba Group\n *\n * Permission is hereby granted, free of charge, to an"
},
{
"path": "tac-engine/src/main/java/com/alibaba/tac/engine/ms/domain/TacMsPublishMeta.java",
"chars": 1936,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2016 Alibaba Group\n *\n * Permission is hereby granted, free of charge, to an"
},
{
"path": "tac-engine/src/main/java/com/alibaba/tac/engine/ms/domain/TacMsStatus.java",
"chars": 1571,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2016 Alibaba Group\n *\n * Permission is hereby granted, free of charge, to an"
},
{
"path": "tac-engine/src/main/java/com/alibaba/tac/engine/ms/service/AbstractDefaultMsPublisher.java",
"chars": 2218,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2016 Alibaba Group\n *\n * Permission is hereby granted, free of charge, to an"
},
{
"path": "tac-engine/src/main/java/com/alibaba/tac/engine/ms/service/DefaultMsEventHandlers.java",
"chars": 4074,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2016 Alibaba Group\n *\n * Permission is hereby granted, free of charge, to an"
},
{
"path": "tac-engine/src/main/java/com/alibaba/tac/engine/ms/service/IMsPublisher.java",
"chars": 2733,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2016 Alibaba Group\n *\n * Permission is hereby granted, free of charge, to an"
},
{
"path": "tac-engine/src/main/java/com/alibaba/tac/engine/ms/service/IMsService.java",
"chars": 2460,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2016 Alibaba Group\n *\n * Permission is hereby granted, free of charge, to an"
},
{
"path": "tac-engine/src/main/java/com/alibaba/tac/engine/ms/service/IMsSubscriber.java",
"chars": 1368,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2016 Alibaba Group\n *\n * Permission is hereby granted, free of charge, to an"
},
{
"path": "tac-engine/src/main/java/com/alibaba/tac/engine/ms/service/redis/RedisMsPublisher.java",
"chars": 6769,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2016 Alibaba Group\n *\n * Permission is hereby granted, free of charge, to an"
},
{
"path": "tac-engine/src/main/java/com/alibaba/tac/engine/ms/service/redis/RedisMsService.java",
"chars": 3276,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2016 Alibaba Group\n *\n * Permission is hereby granted, free of charge, to an"
},
{
"path": "tac-engine/src/main/java/com/alibaba/tac/engine/ms/service/redis/RedisMsSubscriber.java",
"chars": 5645,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2016 Alibaba Group\n *\n * Permission is hereby granted, free of charge, to an"
},
{
"path": "tac-engine/src/main/java/com/alibaba/tac/engine/properties/TacDataPathProperties.java",
"chars": 2586,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2016 Alibaba Group\n *\n * Permission is hereby granted, free of charge, to an"
},
{
"path": "tac-engine/src/main/java/com/alibaba/tac/engine/properties/TacGitlabProperties.java",
"chars": 644,
"preview": "package com.alibaba.tac.engine.properties;\n\nimport lombok.Data;\nimport org.springframework.boot.context.properties.Confi"
},
{
"path": "tac-engine/src/main/java/com/alibaba/tac/engine/properties/TacMsConstants.java",
"chars": 1651,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2016 Alibaba Group\n *\n * Permission is hereby granted, free of charge, to an"
},
{
"path": "tac-engine/src/main/java/com/alibaba/tac/engine/properties/TacRedisConfigProperties.java",
"chars": 2050,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2016 Alibaba Group\n *\n * Permission is hereby granted, free of charge, to an"
},
{
"path": "tac-engine/src/main/java/com/alibaba/tac/engine/service/DefaultTacEngineService.java",
"chars": 7990,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2016 Alibaba Group\n *\n * Permission is hereby granted, free of charge, to an"
},
{
"path": "tac-engine/src/main/java/com/alibaba/tac/engine/service/EngineBeansConfig.java",
"chars": 1890,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2016 Alibaba Group\n *\n * Permission is hereby granted, free of charge, to an"
},
{
"path": "tac-engine/src/main/java/com/alibaba/tac/engine/service/RedisBeansConfig.java",
"chars": 5552,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2016 Alibaba Group\n *\n * Permission is hereby granted, free of charge, to an"
},
{
"path": "tac-engine/src/main/java/com/alibaba/tac/engine/service/TacEngineService.java",
"chars": 1601,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2016 Alibaba Group\n *\n * Permission is hereby granted, free of charge, to an"
},
{
"path": "tac-engine/src/main/java/com/alibaba/tac/engine/service/TacInstRunService.java",
"chars": 4589,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2016 Alibaba Group\n *\n * Permission is hereby granted, free of charge, to an"
},
{
"path": "tac-engine/src/main/java/com/alibaba/tac/engine/service/TacInstanceContainerService.java",
"chars": 6707,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2016 Alibaba Group\n *\n * Permission is hereby granted, free of charge, to an"
},
{
"path": "tac-engine/src/main/java/com/alibaba/tac/engine/service/TacInstanceLoadService.java",
"chars": 4411,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2016 Alibaba Group\n *\n * Permission is hereby granted, free of charge, to an"
},
{
"path": "tac-engine/src/main/java/com/alibaba/tac/engine/service/TacPublishTestService.java",
"chars": 5472,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2016 Alibaba Group\n *\n * Permission is hereby granted, free of charge, to an"
},
{
"path": "tac-engine/src/main/java/com/alibaba/tac/engine/util/Bytes.java",
"chars": 59402,
"preview": "/**\n * Copyright 2010 The Apache Software Foundation\n * <p>\n * Licensed to the Apache Software Foundation (ASF) under on"
},
{
"path": "tac-engine/src/main/java/com/alibaba/tac/engine/util/CollectionUtils.java",
"chars": 3023,
"preview": "/**\n * Copyright The Apache Software Foundation\n *\n * Licensed to the Apache Software Foundation (ASF) under one or more"
},
{
"path": "tac-engine/src/main/java/com/alibaba/tac/engine/util/HConstants.java",
"chars": 1291,
"preview": "/**\n * Copyright 2010 The Apache Software Foundation\n *\n * Licensed to the Apache Software Foundation (ASF) under one\n *"
},
{
"path": "tac-engine/src/main/java/com/alibaba/tac/engine/util/IterableUtils.java",
"chars": 1353,
"preview": "/**\n * Copyright The Apache Software Foundation\n *\n * Licensed to the Apache Software Foundation (ASF) under one or more"
},
{
"path": "tac-engine/src/main/java/com/alibaba/tac/engine/util/TacCompressUtils.java",
"chars": 3427,
"preview": "package com.alibaba.tac.engine.util;\n\nimport java.io.BufferedInputStream;\nimport java.io.File;\nimport java.io.FileInputS"
},
{
"path": "tac-engine/src/main/java/com/alibaba/tac/engine/util/TacLogUtils.java",
"chars": 1975,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2016 Alibaba Group\n *\n * Permission is hereby granted, free of charge, to an"
},
{
"path": "tac-engine/src/main/java/com/alibaba/tac/engine/util/ThreadPoolUtils.java",
"chars": 2016,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2016 Alibaba Group\n *\n * Permission is hereby granted, free of charge, to an"
},
{
"path": "tac-engine/src/main/java/com/alibaba/tac/engine/util/ThreadUtils.java",
"chars": 2799,
"preview": "/*\n * MIT License\n *\n * Copyright (c) 2016 Alibaba Group\n *\n * Permission is hereby granted, free of charge, to an"
},
{
"path": "tac-engine/src/main/resources/META-INF/spring.factories",
"chars": 142,
"preview": "# Auto Configure\norg.springframework.boot.autoconfigure.EnableAutoConfiguration=\\\n com.alibaba.tac.engine.autoconfigure"
},
{
"path": "tac-engine/src/main/resources/tac/default-logback-spring.xml",
"chars": 2839,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<configuration>\n <!-- https://github.com/spring-projects/spring-boot/blob/v1.4"
},
{
"path": "tac-engine/src/test/java/com/alibaba/tac/engine/common/redis/RedisSequenceCounterTest.java",
"chars": 1015,
"preview": "package com.alibaba.tac.engine.common.redis;\n\nimport com.alibaba.tac.engine.test.TacEnginTest;\nimport org.junit.Before;\n"
},
{
"path": "tac-engine/src/test/java/com/alibaba/tac/engine/inst/service/redis/RedisMsInstFileServiceTest.java",
"chars": 1271,
"preview": "package com.alibaba.tac.engine.inst.service.redis;\n\nimport com.alibaba.tac.engine.inst.domain.TacInst;\nimport com.alibab"
},
{
"path": "tac-engine/src/test/java/com/alibaba/tac/engine/inst/service/redis/RedisMsInstServiceTest.java",
"chars": 1393,
"preview": "package com.alibaba.tac.engine.inst.service.redis;\n\nimport com.alibaba.tac.engine.inst.domain.TacInst;\nimport com.alibab"
},
{
"path": "tac-engine/src/test/java/com/alibaba/tac/engine/ms/service/redis/RedisMsPublisherTest.java",
"chars": 1321,
"preview": "package com.alibaba.tac.engine.ms.service.redis;\n\nimport com.alibaba.tac.engine.inst.domain.TacInst;\nimport com.alibaba."
},
{
"path": "tac-engine/src/test/java/com/alibaba/tac/engine/ms/service/redis/RedisMsServiceTest.java",
"chars": 1898,
"preview": "package com.alibaba.tac.engine.ms.service.redis;\n\nimport com.alibaba.tac.engine.ms.domain.TacMsDO;\nimport com.alibaba.ta"
},
{
"path": "tac-engine/src/test/java/com/alibaba/tac/engine/service/GitLabFeatureTest.java",
"chars": 2480,
"preview": "package com.alibaba.tac.engine.service;\n\nimport com.alibaba.tac.engine.code.CodeCompileService;\nimport com.alibaba.tac.e"
},
{
"path": "tac-engine/src/test/java/com/alibaba/tac/engine/service/JdkCompilerTest.java",
"chars": 1427,
"preview": "package com.alibaba.tac.engine.service;\n\nimport com.alibaba.tac.engine.code.CodeCompileService;\nimport com.alibaba.tac.e"
},
{
"path": "tac-engine/src/test/java/com/alibaba/tac/engine/service/TacInstanceLoadServiceTest.java",
"chars": 1077,
"preview": "package com.alibaba.tac.engine.service;\n\nimport com.alibaba.tac.engine.inst.domain.TacInst;\nimport com.alibaba.tac.engin"
},
{
"path": "tac-engine/src/test/java/com/alibaba/tac/engine/test/TacEnginTest.java",
"chars": 689,
"preview": "package com.alibaba.tac.engine.test;\n\nimport com.alibaba.tac.engine.code.CodeLoadService;\nimport lombok.extern.slf4j.Slf"
},
{
"path": "tac-engine/src/test/java/com/alibaba/tac/engine/test/TestApplication.java",
"chars": 534,
"preview": "package com.alibaba.tac.engine.test;\n\nimport org.springframework.boot.autoconfigure.SpringBootApplication;\nimport org.sp"
},
{
"path": "tac-engine/src/test/java/com/alibaba/tac/engine/utils/TacFileUtilTest.java",
"chars": 550,
"preview": "package com.alibaba.tac.engine.utils;\n\nimport com.alibaba.tac.engine.test.TacEnginTest;\nimport com.alibaba.tac.engine.co"
},
{
"path": "tac-engine/src/test/java/com/alibaba/tac/test/http/HttpClientTest.java",
"chars": 1419,
"preview": "package com.alibaba.tac.test.http;\n\nimport com.alibaba.fastjson.JSONObject;\nimport com.alibaba.tac.sdk.common.TacResult;"
},
{
"path": "tac-engine/src/test/java/com/alibaba/tac/test/redis/RedisConfig.java",
"chars": 1922,
"preview": "package com.alibaba.tac.test.redis;\n\nimport com.alibaba.tac.engine.common.redis.RedisSequenceCounter;\nimport org.springf"
},
{
"path": "tac-engine/src/test/java/com/alibaba/tac/test/redis/StringDataRedisTest.java",
"chars": 3468,
"preview": "package com.alibaba.tac.test.redis;\n\nimport com.alibaba.tac.engine.inst.domain.TacInst;\nimport com.alibaba.tac.engine.ut"
},
{
"path": "tac-engine/src/test/java/com/alibaba/tac/test/redis/TacRedisMessageListener.java",
"chars": 403,
"preview": "package com.alibaba.tac.test.redis;\n\nimport lombok.extern.slf4j.Slf4j;\nimport org.springframework.stereotype.Service;\n\n/"
},
{
"path": "tac-engine/src/test/resources/test.properties",
"chars": 28,
"preview": "\n\n\n\n\ntac.default.store=redis"
},
{
"path": "tac-engine/src/test/source/test1/com/alibaba/tac/biz/processor/HelloTac.java",
"chars": 493,
"preview": "package com.alibaba.tac.biz.processor;\n\nimport com.alibaba.tac.sdk.common.TacResult;\nimport com.alibaba.tac.sdk.domain.C"
},
{
"path": "tac-infrastructure/pom.xml",
"chars": 3503,
"preview": "<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n xsi:sc"
},
{
"path": "tac-infrastructure/src/main/java/com/alibaba/tac/infrastracture/logger/TacLogConsts.java",
"chars": 424,
"preview": "package com.alibaba.tac.infrastracture.logger;\n\n/**\n * Created by huchangkun on 2018/1/29.\n */\npublic final class TacLog"
},
{
"path": "tac-infrastructure/src/main/java/com/alibaba/tac/infrastracture/logger/TacLoggerImpl.java",
"chars": 6082,
"preview": "package com.alibaba.tac.infrastracture.logger;\n\nimport com.alibaba.tac.sdk.common.TacContants;\nimport com.alibaba.tac.sd"
},
{
"path": "tac-infrastructure/src/test/java/com/alibaba/tac/AppTest.java",
"chars": 643,
"preview": "package com.alibaba.tac;\n\nimport junit.framework.Test;\nimport junit.framework.TestCase;\nimport junit.framework.TestSuite"
},
{
"path": "tac-sdk/pom.xml",
"chars": 2929,
"preview": "<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n xsi:sc"
},
{
"path": "tac-sdk/src/main/java/com/alibaba/tac/sdk/common/TacContants.java",
"chars": 1218,
"preview": "\n\npackage com.alibaba.tac.sdk.common;\n\n/**\n * Created by changkun.hck on 2016/12/20.\n */\npublic final class TacContants "
},
{
"path": "tac-sdk/src/main/java/com/alibaba/tac/sdk/common/TacParams.java",
"chars": 1221,
"preview": "package com.alibaba.tac.sdk.common;\n\nimport lombok.Data;\nimport org.apache.commons.lang3.StringUtils;\n\nimport java.io.Se"
},
{
"path": "tac-sdk/src/main/java/com/alibaba/tac/sdk/common/TacResult.java",
"chars": 2459,
"preview": "package com.alibaba.tac.sdk.common;\n\nimport lombok.Data;\n\nimport java.io.Serializable;\nimport java.net.Inet4Address;\nimp"
},
{
"path": "tac-sdk/src/main/java/com/alibaba/tac/sdk/common/TacThreadLocals.java",
"chars": 536,
"preview": "package com.alibaba.tac.sdk.common;\n\nimport java.util.Map;\n\npublic class TacThreadLocals {\n\n /**\n * the log data\n"
},
{
"path": "tac-sdk/src/main/java/com/alibaba/tac/sdk/domain/Context.java",
"chars": 685,
"preview": "package com.alibaba.tac.sdk.domain;\n\nimport java.io.Serializable;\nimport java.util.Map;\n\n/**\n * @author jinshuan.li 12/0"
},
{
"path": "tac-sdk/src/main/java/com/alibaba/tac/sdk/domain/TacRequestContext.java",
"chars": 1410,
"preview": "package com.alibaba.tac.sdk.domain;\n\nimport java.util.HashMap;\nimport java.util.Map;\n\npublic class TacRequestContext imp"
},
{
"path": "tac-sdk/src/main/java/com/alibaba/tac/sdk/error/ErrorCode.java",
"chars": 750,
"preview": "package com.alibaba.tac.sdk.error;\n\npublic class ErrorCode {\n /**\n * ALREADY_EXIST\n */\n public static fina"
},
{
"path": "tac-sdk/src/main/java/com/alibaba/tac/sdk/error/IError.java",
"chars": 268,
"preview": "package com.alibaba.tac.sdk.error;\n\n/**\n * @author jinshuan.li 2017/12/28 下午3:03\n */\npublic interface IError {\n\n /**\n"
},
{
"path": "tac-sdk/src/main/java/com/alibaba/tac/sdk/error/ServiceException.java",
"chars": 1989,
"preview": "package com.alibaba.tac.sdk.error;\n\n/**\n * the service exception class\n */\npublic class ServiceException extends Excepti"
},
{
"path": "tac-sdk/src/main/java/com/alibaba/tac/sdk/factory/AbstractServiceFactory.java",
"chars": 1549,
"preview": "package com.alibaba.tac.sdk.factory;\n\nimport org.springframework.beans.BeansException;\nimport org.springframework.contex"
},
{
"path": "tac-sdk/src/main/java/com/alibaba/tac/sdk/factory/TacInfrasFactory.java",
"chars": 423,
"preview": "package com.alibaba.tac.sdk.factory;\n\nimport com.alibaba.tac.sdk.infrastracture.TacLogger;\nimport org.springframework.st"
},
{
"path": "tac-sdk/src/main/java/com/alibaba/tac/sdk/handler/DisposableHandler.java",
"chars": 185,
"preview": "package com.alibaba.tac.sdk.handler;\n\n/**\n * TacHandler destroy\n * Created by huchangkun on 2017/5/23.\n */\npublic inter"
},
{
"path": "tac-sdk/src/main/java/com/alibaba/tac/sdk/handler/InitializingHandler.java",
"chars": 194,
"preview": "package com.alibaba.tac.sdk.handler;\n\n/**\n * TacHandler init\n * Created by huchangkun on 2017/5/23.\n */\npublic interfac"
},
{
"path": "tac-sdk/src/main/java/com/alibaba/tac/sdk/handler/TacHandler.java",
"chars": 423,
"preview": "package com.alibaba.tac.sdk.handler;\n\nimport com.alibaba.tac.sdk.common.TacResult;\nimport com.alibaba.tac.sdk.domain.Con"
},
{
"path": "tac-sdk/src/main/java/com/alibaba/tac/sdk/infrastracture/TacLogger.java",
"chars": 538,
"preview": "package com.alibaba.tac.sdk.infrastracture;\n\n\n/**\n * tac log\n *\n */\npublic interface TacLogger {\n\n public void debug("
},
{
"path": "tac-sdk/src/main/java/com/alibaba/tac/sdk/tangram4tac/Cell.java",
"chars": 1177,
"preview": "package com.alibaba.tac.sdk.tangram4tac;\n\nimport com.alibaba.tac.sdk.tangram4tac.render.DefaultRender;\nimport com.alibab"
},
{
"path": "tac-sdk/src/main/java/com/alibaba/tac/sdk/tangram4tac/Container.java",
"chars": 2941,
"preview": "package com.alibaba.tac.sdk.tangram4tac;\n\nimport java.util.ArrayList;\nimport java.util.List;\n\n/**\n * Created by longeria"
},
{
"path": "tac-sdk/src/main/java/com/alibaba/tac/sdk/tangram4tac/FieldExcluder.java",
"chars": 377,
"preview": "package com.alibaba.tac.sdk.tangram4tac;\n\nimport java.lang.annotation.ElementType;\nimport java.lang.annotation.Retention"
},
{
"path": "tac-sdk/src/main/java/com/alibaba/tac/sdk/tangram4tac/FieldNameMapper.java",
"chars": 421,
"preview": "package com.alibaba.tac.sdk.tangram4tac;\n\nimport java.lang.annotation.ElementType;\nimport java.lang.annotation.Retention"
},
{
"path": "tac-sdk/src/main/java/com/alibaba/tac/sdk/tangram4tac/Style.java",
"chars": 3276,
"preview": "package com.alibaba.tac.sdk.tangram4tac;\n\n/**\n * Created by longerian on 2017/11/5.\n */\npublic class Style {\n\n @Field"
},
{
"path": "tac-sdk/src/main/java/com/alibaba/tac/sdk/tangram4tac/lib/BannerContainer.java",
"chars": 345,
"preview": "package com.alibaba.tac.sdk.tangram4tac.lib;\n\nimport com.alibaba.tac.sdk.tangram4tac.Container;\n\n/**\n * Created by longe"
},
{
"path": "tac-sdk/src/main/java/com/alibaba/tac/sdk/tangram4tac/lib/BannerStyle.java",
"chars": 4468,
"preview": "package com.alibaba.tac.sdk.tangram4tac.lib;\n\nimport com.alibaba.tac.sdk.tangram4tac.Style;\n\nimport java.util.Map;\n\n/**\n"
},
{
"path": "tac-sdk/src/main/java/com/alibaba/tac/sdk/tangram4tac/lib/CellType.java",
"chars": 1308,
"preview": "package com.alibaba.tac.sdk.tangram4tac.lib;\n\n/**\n * Created by longerian on 2017/11/5.\n */\npublic class CellType {\n\n "
},
{
"path": "tac-sdk/src/main/java/com/alibaba/tac/sdk/tangram4tac/lib/FiveColumnContainer.java",
"chars": 350,
"preview": "package com.alibaba.tac.sdk.tangram4tac.lib;\n\nimport com.alibaba.tac.sdk.tangram4tac.Container;\n\n/**\n * Created by longe"
},
{
"path": "tac-sdk/src/main/java/com/alibaba/tac/sdk/tangram4tac/lib/FixContainer.java",
"chars": 321,
"preview": "package com.alibaba.tac.sdk.tangram4tac.lib;\n\n/**\n * Created by longerian on 2017/11/5.\n */\npublic class FixContainer ex"
},
{
"path": "tac-sdk/src/main/java/com/alibaba/tac/sdk/tangram4tac/lib/FixStyle.java",
"chars": 799,
"preview": "package com.alibaba.tac.sdk.tangram4tac.lib;\n\nimport com.alibaba.tac.sdk.tangram4tac.Style;\n\n/**\n * Created by longerian"
},
{
"path": "tac-sdk/src/main/java/com/alibaba/tac/sdk/tangram4tac/lib/FloatContainer.java",
"chars": 257,
"preview": "package com.alibaba.tac.sdk.tangram4tac.lib;\n\n/**\n * Created by longerian on 2017/11/5.\n */\npublic class FloatContainer "
}
]
// ... and 25 more files (download for full content)
About this extraction
This page contains the full source code of the alibaba/tac GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 225 files (1.6 MB), approximately 505.2k tokens, and a symbol index with 1751 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.