Full Code of 527515025/springBoot for AI

master 8fadfc312409 cached
492 files
928.0 KB
261.3k tokens
1617 symbols
1 requests
Download .txt
Showing preview only (1,073K chars total). Download the full file or copy to clipboard to get everything.
Repository: 527515025/springBoot
Branch: master
Commit: 8fadfc312409
Files: 492
Total size: 928.0 KB

Directory structure:
gitextract_rd5xf_h5/

├── .gitignore
├── README.md
├── abel-parent/
│   └── pom.xml
├── abel-util/
│   ├── pom.xml
│   └── src/
│       └── main/
│           └── java/
│               └── cn/
│                   └── abel/
│                       ├── code/
│                       │   └── InfoCode.java
│                       ├── exception/
│                       │   ├── AppRuntimeException.java
│                       │   ├── HttpExeption.java
│                       │   └── ServiceException.java
│                       ├── response/
│                       │   └── ResponseEntity.java
│                       └── utils/
│                           └── DateTimeUtils.java
├── springWebSocket/
│   ├── pom.xml
│   └── src/
│       └── main/
│           ├── java/
│           │   └── com/
│           │       └── us/
│           │           └── example/
│           │               ├── Application.java
│           │               ├── bean/
│           │               │   ├── Message.java
│           │               │   └── Response.java
│           │               ├── config/
│           │               │   ├── WebSecurityConfig.java
│           │               │   └── WebSocketConfig.java
│           │               ├── controller/
│           │               │   └── WebSocketController.java
│           │               └── service/
│           │                   └── WebSocketService.java
│           └── resources/
│               ├── application.properties
│               ├── static/
│               │   └── jquery.js
│               └── templates/
│                   ├── chat.html
│                   ├── login.html
│                   └── ws.html
├── springboot-Cache/
│   ├── pom.xml
│   └── src/
│       └── main/
│           ├── java/
│           │   └── com/
│           │       └── us/
│           │           └── example/
│           │               ├── Application.java
│           │               ├── bean/
│           │               │   └── Person.java
│           │               ├── config/
│           │               │   ├── DBConfig.java
│           │               │   ├── JpaConfig.java
│           │               │   └── RedisConfig.java
│           │               ├── controller/
│           │               │   └── CacheController.java
│           │               ├── dao/
│           │               │   └── PersonRepository.java
│           │               └── service/
│           │                   ├── DemoService.java
│           │                   └── Impl/
│           │                       └── DemoServiceImpl.java
│           └── resources/
│               ├── application.properties
│               └── ehcache.xml
├── springboot-Cache2/
│   ├── pom.xml
│   └── src/
│       └── main/
│           ├── java/
│           │   └── com/
│           │       └── us/
│           │           └── example/
│           │               ├── Application.java
│           │               ├── bean/
│           │               │   └── Person.java
│           │               ├── config/
│           │               │   ├── CacheConfig.java
│           │               │   ├── DBConfig.java
│           │               │   └── JpaConfig.java
│           │               ├── controller/
│           │               │   └── CacheController.java
│           │               ├── dao/
│           │               │   └── PersonRepository.java
│           │               └── service/
│           │                   ├── DemoService.java
│           │                   └── PersonService.java
│           └── resources/
│               └── application.properties
├── springboot-Quartz/
│   ├── pom.xml
│   └── src/
│       └── main/
│           ├── java/
│           │   └── com/
│           │       └── abel/
│           │           └── quartz/
│           │               ├── Application.java
│           │               ├── config/
│           │               │   ├── InvokingJobDetailFactory.java
│           │               │   └── QuartzConfig.java
│           │               └── job/
│           │                   └── ExecuteJob.java
│           └── resources/
│               ├── application.properties
│               ├── banner.txt
│               └── logback-spring.xml
├── springboot-SpringSecurity0/
│   ├── pom.xml
│   └── src/
│       └── main/
│           ├── java/
│           │   └── com/
│           │       └── us/
│           │           └── example/
│           │               ├── Application.java
│           │               ├── config/
│           │               │   ├── DBconfig.java
│           │               │   ├── MyBatisConfig.java
│           │               │   ├── MyBatisScannerConfig.java
│           │               │   ├── TransactionConfig.java
│           │               │   ├── WebMvcConfig.java
│           │               │   └── WebSecurityConfig.java
│           │               ├── controller/
│           │               │   └── HomeController.java
│           │               ├── dao/
│           │               │   └── UserDao.java
│           │               ├── domain/
│           │               │   ├── Msg.java
│           │               │   ├── SysRole.java
│           │               │   └── SysUser.java
│           │               ├── security/
│           │               │   └── CustomUserService.java
│           │               └── util/
│           │                   └── MD5Util.java
│           └── resources/
│               ├── application.properties
│               ├── mapper/
│               │   └── UserDaoMapper.xml
│               └── templates/
│                   ├── home.html
│                   └── login.html
├── springboot-SpringSecurity1/
│   ├── pom.xml
│   └── src/
│       └── main/
│           ├── java/
│           │   └── com/
│           │       └── us/
│           │           └── example/
│           │               ├── Application.java
│           │               ├── config/
│           │               │   ├── DBconfig.java
│           │               │   ├── MyBatisConfig.java
│           │               │   ├── MyBatisScannerConfig.java
│           │               │   ├── TransactionConfig.java
│           │               │   └── WebSecurityConfig.java
│           │               ├── controller/
│           │               │   └── HomeController.java
│           │               ├── dao/
│           │               │   ├── PermissionDao.java
│           │               │   └── UserDao.java
│           │               ├── domain/
│           │               │   ├── Msg.java
│           │               │   ├── Permission.java
│           │               │   ├── SysRole.java
│           │               │   └── SysUser.java
│           │               └── service/
│           │                   ├── CustomUserService.java
│           │                   ├── MyAccessDecisionManager.java
│           │                   ├── MyFilterSecurityInterceptor.java
│           │                   └── MyInvocationSecurityMetadataSourceService.java
│           └── resources/
│               ├── application.properties
│               ├── mapper/
│               │   ├── PermissionDaoMapper.xml
│               │   └── UserDaoMapper.xml
│               └── templates/
│                   ├── home.html
│                   └── login.html
├── springboot-dubbo/
│   ├── README.md
│   ├── abel-user-api/
│   │   ├── pom.xml
│   │   └── src/
│   │       └── main/
│   │           └── java/
│   │               └── cn/
│   │                   └── abel/
│   │                       └── user/
│   │                           ├── models/
│   │                           │   ├── Permission.java
│   │                           │   ├── Role.java
│   │                           │   └── User.java
│   │                           └── service/
│   │                               ├── PermissionService.java
│   │                               ├── RoleService.java
│   │                               └── UserService.java
│   └── abel-user-provider/
│       ├── doc/
│       │   └── user.sql
│       ├── pom.xml
│       └── src/
│           └── main/
│               ├── java/
│               │   └── cn/
│               │       └── abel/
│               │           └── user/
│               │               ├── UserProviderApplication.java
│               │               ├── constants/
│               │               │   └── Constants.java
│               │               ├── dao/
│               │               │   ├── PermissionDao.java
│               │               │   ├── RoleDao.java
│               │               │   └── UserDao.java
│               │               ├── exception/
│               │               │   ├── JsonExceptionMapper.java
│               │               │   ├── ReaderExceptionMapper.java
│               │               │   ├── RestExceptionMapper.java
│               │               │   ├── ServiceExceptionMapper.java
│               │               │   └── ValidationExceptionMapper.java
│               │               ├── filter/
│               │               │   ├── RestFilter.java
│               │               │   └── RestInterceptor.java
│               │               ├── service/
│               │               │   └── impl/
│               │               │       ├── PermissionServiceImpl.java
│               │               │       ├── RoleServiceImpl.java
│               │               │       └── UserServiceImpl.java
│               │               └── utils/
│               │                   └── CommentUtils.java
│               ├── resources/
│               │   ├── META-INF/
│               │   │   └── spring/
│               │   │       └── provider.xml
│               │   ├── dev/
│               │   │   ├── application.properties
│               │   │   ├── banner.txt
│               │   │   └── logback-spring.xml
│               │   ├── local/
│               │   │   ├── application.properties
│               │   │   ├── banner.txt
│               │   │   └── logback-spring.xml
│               │   └── mapper/
│               │       ├── PermissionDaoMapper.xml
│               │       ├── RoleDaoMapper.xml
│               │       └── UserDaoMapper.xml
│               └── test/
│                   └── cn/
│                       └── abel/
│                           └── user/
│                               ├── BaseTest.java
│                               └── service/
│                                   └── impl/
│                                       └── PermissionServiceImplTest.java
├── springboot-dynamicDataSource/
│   ├── pom.xml
│   ├── sql/
│   │   ├── news.sql
│   │   └── user.sql
│   └── src/
│       ├── main/
│       │   ├── java/
│       │   │   └── cn/
│       │   │       └── abel/
│       │   │           ├── Application.java
│       │   │           ├── bean/
│       │   │           │   ├── News.java
│       │   │           │   └── User.java
│       │   │           ├── config/
│       │   │           │   ├── DynamicDataSource.java
│       │   │           │   ├── DynamicDataSourceConfig.java
│       │   │           │   ├── DynamicDataSourceContextHolder.java
│       │   │           │   └── HikariConfig.java
│       │   │           ├── dao/
│       │   │           │   ├── NewsDao.java
│       │   │           │   └── UserDao.java
│       │   │           ├── enums/
│       │   │           │   └── DatabaseTypeEnum.java
│       │   │           └── service/
│       │   │               ├── NewsService.java
│       │   │               └── UserService.java
│       │   └── resources/
│       │       ├── local/
│       │       │   ├── application.properties
│       │       │   ├── banner.txt
│       │       │   └── logback-spring.xml
│       │       └── mapper/
│       │           ├── NewsDaoMapper.xml
│       │           └── UserDaoMapper.xml
│       └── test/
│           └── java/
│               └── cn/
│                   └── abel/
│                       ├── BaseTest.java
│                       └── service/
│                           └── ServiceTest.java
├── springboot-elasticsearch/
│   ├── README.md
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   ├── java/
│       │   │   └── cn/
│       │   │       └── abel/
│       │   │           ├── Application.java
│       │   │           ├── bean/
│       │   │           │   └── User.java
│       │   │           ├── config/
│       │   │           │   ├── ESRestClient2Config.java
│       │   │           │   └── ESRestClientConfig.java
│       │   │           ├── constants/
│       │   │           │   └── Constants.java
│       │   │           ├── dao/
│       │   │           │   └── UserDao.java
│       │   │           └── service/
│       │   │               └── UserService.java
│       │   └── resources/
│       │       ├── local/
│       │       │   ├── application.properties
│       │       │   ├── banner.txt
│       │       │   └── logback-spring.xml
│       │       └── mapper/
│       │           └── UserDaoMapper.xml
│       └── test/
│           └── java/
│               └── cn/
│                   └── abel/
│                       ├── BaseTest.java
│                       └── service/
│                           └── ServiceTest.java
├── springboot-jpa/
│   ├── pom.xml
│   └── src/
│       └── main/
│           ├── java/
│           │   └── com/
│           │       └── us/
│           │           └── example/
│           │               ├── Application.java
│           │               ├── bean/
│           │               │   └── User.java
│           │               ├── config/
│           │               │   ├── DBConfig.java
│           │               │   └── JpaConfig.java
│           │               ├── controller/
│           │               │   └── UserController.java
│           │               ├── dao/
│           │               │   └── UserJpaDao.java
│           │               ├── service/
│           │               │   └── UserService.java
│           │               ├── serviceImpl/
│           │               │   └── UserServiceImpl.java
│           │               └── util/
│           │                   └── CommonUtil.java
│           └── resources/
│               └── application.properties
├── springboot-kafka/
│   ├── pom.xml
│   └── src/
│       └── main/
│           ├── java/
│           │   └── cn/
│           │       └── abel/
│           │           ├── Application.java
│           │           ├── config/
│           │           │   └── KafkaConfig.java
│           │           └── service/
│           │               └── prehandle/
│           │                   ├── KafkaConsumerService.java
│           │                   └── SplitService.java
│           └── resources/
│               └── local/
│                   ├── application.properties
│                   ├── banner.txt
│                   └── logback-spring.xml
├── springboot-mybatis/
│   ├── docker-it.sh
│   ├── env/
│   │   ├── dev/
│   │   │   ├── application.properties
│   │   │   ├── env.properties
│   │   │   └── log4j.properties
│   │   └── local/
│   │       ├── application.properties
│   │       ├── env.properties
│   │       └── log4j.properties
│   ├── package.sh
│   ├── pom.xml
│   ├── scripts/
│   │   ├── docker/
│   │   │   ├── common/
│   │   │   │   ├── common-env.sh
│   │   │   │   ├── install-cluster.sh
│   │   │   │   ├── install-single.sh
│   │   │   │   ├── install.sh
│   │   │   │   └── package.xml
│   │   │   └── manager/
│   │   │       ├── check-os.sh
│   │   │       ├── setenv.sh
│   │   │       ├── start.sh
│   │   │       └── stop.sh
│   │   └── springboot/
│   │       ├── common/
│   │       │   ├── common-env.sh
│   │       │   ├── install-cluster.sh
│   │       │   ├── install-single.sh
│   │       │   ├── install.sh
│   │       │   └── package.xml
│   │       └── manager/
│   │           ├── setenv.sh
│   │           ├── start.sh
│   │           └── stop.sh
│   ├── src/
│   │   ├── main/
│   │   │   ├── java/
│   │   │   │   └── com/
│   │   │   │       └── us/
│   │   │   │           └── example/
│   │   │   │               ├── Application.java
│   │   │   │               ├── bean/
│   │   │   │               │   └── User.java
│   │   │   │               ├── config/
│   │   │   │               │   ├── DBConfig.java
│   │   │   │               │   ├── MyBatisConfig.java
│   │   │   │               │   ├── MyBatisScannerConfig.java
│   │   │   │               │   └── TransactionConfig.java
│   │   │   │               ├── controller/
│   │   │   │               │   └── UserController.java
│   │   │   │               ├── dao/
│   │   │   │               │   └── UserDao.java
│   │   │   │               ├── service/
│   │   │   │               │   ├── Impl/
│   │   │   │               │   │   └── UserServiceImpl.java
│   │   │   │               │   └── UserService.java
│   │   │   │               └── util/
│   │   │   │                   └── CommonUtil.java
│   │   │   └── resources/
│   │   │       └── mapper/
│   │   │           └── UserDaoMapper.xml
│   │   └── test/
│   │       └── java/
│   │           └── com/
│   │               └── us/
│   │                   └── example/
│   │                       ├── BaseTest.java
│   │                       └── service/
│   │                           └── UserServiceTest.java
│   ├── tar-it.sh
│   └── war-it.sh
├── springboot-mybatis2/
│   ├── pom.xml
│   ├── sql/
│   │   └── user.sql
│   └── src/
│       ├── main/
│       │   ├── java/
│       │   │   └── cn/
│       │   │       └── abel/
│       │   │           ├── Application.java
│       │   │           ├── bean/
│       │   │           │   └── User.java
│       │   │           ├── dao/
│       │   │           │   └── UserDao.java
│       │   │           └── service/
│       │   │               └── UserService.java
│       │   └── resources/
│       │       ├── local/
│       │       │   ├── application.properties
│       │       │   ├── banner.txt
│       │       │   └── logback-spring.xml
│       │       └── mapper/
│       │           ├── NewsDaoMapper.xml
│       │           └── UserDaoMapper.xml
│       └── test/
│           └── java/
│               └── cn/
│                   └── abel/
│                       ├── BaseTest.java
│                       └── service/
│                           └── ServiceTest.java
├── springboot-neo4j/
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   ├── java/
│       │   │   └── cn/
│       │   │       └── abel/
│       │   │           └── neo4j/
│       │   │               ├── Application.java
│       │   │               ├── bean/
│       │   │               │   ├── King.java
│       │   │               │   ├── Person.java
│       │   │               │   ├── Queen.java
│       │   │               │   └── relation/
│       │   │               │       └── FatherAndSonRelation.java
│       │   │               ├── controller/
│       │   │               │   └── KingController.java
│       │   │               ├── dao/
│       │   │               │   ├── KingDao.java
│       │   │               │   ├── Neo4jDao.java
│       │   │               │   └── Neo4jSession.java
│       │   │               ├── dto/
│       │   │               │   └── GraphDTO.java
│       │   │               └── service/
│       │   │                   └── KingService.java
│       │   └── resources/
│       │       ├── application.properties
│       │       ├── banner.txt
│       │       └── logback-spring.xml
│       └── test/
│           └── java/
│               └── cn/
│                   └── abel/
│                       └── neo4j/
│                           ├── BaseTest.java
│                           └── service/
│                               ├── InitData.java
│                               └── KingServiceTest.java
├── springboot-redis-queue/
│   ├── pom.xml
│   └── src/
│       └── main/
│           ├── java/
│           │   └── cn/
│           │       └── abel/
│           │           └── queue/
│           │               ├── Application.java
│           │               ├── config/
│           │               │   └── RedisConfig.java
│           │               ├── controller/
│           │               │   └── PublisherController.java
│           │               └── service/
│           │                   ├── ProducerService.java
│           │                   └── ReceiverService.java
│           └── resources/
│               └── local/
│                   ├── application.properties
│                   ├── banner.txt
│                   └── logback-spring.xml
├── springboot-rocketmq/
│   ├── pom.xml
│   └── src/
│       └── main/
│           ├── java/
│           │   └── cn/
│           │       └── abel/
│           │           └── queue/
│           │               ├── Application.java
│           │               ├── config/
│           │               │   └── JmsConfig.java
│           │               ├── controller/
│           │               │   └── PublisherController.java
│           │               └── service/
│           │                   ├── ProducerService.java
│           │                   └── ReceiverService.java
│           └── resources/
│               └── local/
│                   ├── application.properties
│                   ├── banner.txt
│                   └── logback-spring.xml
├── springboot-rocketmq-ali/
│   ├── pom.xml
│   └── src/
│       └── main/
│           ├── java/
│           │   └── cn/
│           │       └── abel/
│           │           └── queue/
│           │               ├── Application.java
│           │               ├── config/
│           │               │   ├── ALiConsumerClient.java
│           │               │   ├── ALiMqConfig.java
│           │               │   └── ALiProducerClient.java
│           │               └── service/
│           │                   ├── MessageHandler.java
│           │                   └── ProducerService.java
│           └── resources/
│               └── local/
│                   ├── application.properties
│                   ├── banner.txt
│                   └── logback-spring.xml
├── springboot-shiro/
│   ├── pom.xml
│   └── src/
│       └── main/
│           ├── java/
│           │   └── com/
│           │       └── us/
│           │           ├── Application.java
│           │           ├── bean/
│           │           │   ├── Event.java
│           │           │   ├── Permission.java
│           │           │   ├── Role.java
│           │           │   └── User.java
│           │           ├── config/
│           │           │   ├── DataSourceConfig.java
│           │           │   ├── MapperScannerConfig.java
│           │           │   ├── MyBatisConfig.java
│           │           │   └── TransactionConfig.java
│           │           ├── controller/
│           │           │   ├── EventController.java
│           │           │   ├── LoginController.java
│           │           │   └── UserController.java
│           │           ├── dao/
│           │           │   ├── EventDao.java
│           │           │   ├── PermissionDao.java
│           │           │   ├── RoleDao.java
│           │           │   └── UserDao.java
│           │           ├── service/
│           │           │   ├── EventService.java
│           │           │   ├── PermissionService.java
│           │           │   ├── RoleService.java
│           │           │   └── UserService.java
│           │           └── shiro/
│           │               ├── ShiroConfiguration.java
│           │               └── ShiroRealm.java
│           └── resources/
│               ├── application.properties
│               ├── log4j.properties
│               └── mapper/
│                   ├── EventDaoMapper.xml
│                   ├── PermissionDaoMapper.xml
│                   ├── RoleDaoMapper.xml
│                   └── UserDaoMapper.xml
├── springboot-shiro2/
│   ├── README.md
│   ├── pom.xml
│   └── src/
│       └── main/
│           ├── java/
│           │   └── cn/
│           │       └── abel/
│           │           └── rest/
│           │               ├── ShiroRestApplication.java
│           │               ├── config/
│           │               │   └── RedisConfig.java
│           │               ├── constants/
│           │               │   └── Constants.java
│           │               ├── controller/
│           │               │   └── LoginController.java
│           │               ├── exception/
│           │               │   ├── DefaultErrorController.java
│           │               │   └── DefaultExceptionHandler.java
│           │               ├── freemarker/
│           │               │   ├── CustomFreeMarkerView.java
│           │               │   └── FreeMarkerConfig.java
│           │               ├── shiro/
│           │               │   ├── HttpHeaderSessionManager.java
│           │               │   ├── RedisSessionDao.java
│           │               │   ├── ShiroConfig.java
│           │               │   ├── ShiroProperty.java
│           │               │   ├── ShiroRealm.java
│           │               │   ├── ShiroRedisCacheManager.java
│           │               │   ├── ShiroUser.java
│           │               │   ├── UuidSessionIdGenerator.java
│           │               │   ├── credentials/
│           │               │   │   ├── PasswordHelper.java
│           │               │   │   ├── RetryLimitHashedCredentialsMatcher.java
│           │               │   │   └── ThirdPartySupportedToken.java
│           │               │   ├── ext/
│           │               │   │   ├── QuartzSessionValidationJob.java
│           │               │   │   └── QuartzSessionValidationScheduler.java
│           │               │   └── filter/
│           │               │       ├── ShiroFormAuthenticationFilter.java
│           │               │       └── ShiroLogoutFilter.java
│           │               └── utils/
│           │                   ├── ServletKit.java
│           │                   └── SpringContextKit.java
│           └── resources/
│               ├── META-INF/
│               │   └── spring/
│               │       └── consumer.xml
│               ├── dev/
│               │   ├── application.properties
│               │   ├── banner.txt
│               │   └── logback-spring.xml
│               └── local/
│                   ├── application.properties
│                   ├── banner.txt
│                   └── logback-spring.xml
├── springboot-springCloud/
│   ├── config/
│   │   ├── pom.xml
│   │   ├── src/
│   │   │   └── main/
│   │   │       ├── java/
│   │   │       │   └── com/
│   │   │       │       └── abel/
│   │   │       │           └── ConfigApplication.java
│   │   │       └── resources/
│   │   │           ├── application.yml
│   │   │           ├── bootstrap.yml
│   │   │           └── config/
│   │   │               ├── person.yml
│   │   │               └── some.yml
│   │   └── target/
│   │       └── classes/
│   │           ├── application.yml
│   │           ├── bootstrap.yml
│   │           └── config/
│   │               ├── person.yml
│   │               └── some.yml
│   ├── discovery/
│   │   ├── pom.xml
│   │   ├── src/
│   │   │   └── main/
│   │   │       ├── java/
│   │   │       │   └── com/
│   │   │       │       └── abel/
│   │   │       │           └── DiscoveryApplication.java
│   │   │       └── resources/
│   │   │           └── application.yml
│   │   └── target/
│   │       └── classes/
│   │           └── application.yml
│   ├── monitor/
│   │   ├── pom.xml
│   │   ├── src/
│   │   │   └── main/
│   │   │       ├── java/
│   │   │       │   └── com/
│   │   │       │       └── abel/
│   │   │       │           └── MonitorApplication.java
│   │   │       └── resources/
│   │   │           ├── application.yml
│   │   │           └── bootstrap.yml
│   │   └── target/
│   │       └── classes/
│   │           ├── application.yml
│   │           └── bootstrap.yml
│   ├── person/
│   │   ├── pom.xml
│   │   ├── src/
│   │   │   └── main/
│   │   │       ├── java/
│   │   │       │   └── com/
│   │   │       │       └── abel/
│   │   │       │           ├── PersonApplication.java
│   │   │       │           ├── bean/
│   │   │       │           │   └── Person.java
│   │   │       │           ├── controller/
│   │   │       │           │   └── PersonController.java
│   │   │       │           └── dao/
│   │   │       │               └── PersonRepository.java
│   │   │       └── resources/
│   │   │           ├── application.yml
│   │   │           └── bootstrap.yml
│   │   └── target/
│   │       └── classes/
│   │           ├── application.yml
│   │           └── bootstrap.yml
│   ├── pom.xml
│   ├── some/
│   │   ├── pom.xml
│   │   ├── src/
│   │   │   └── main/
│   │   │       ├── java/
│   │   │       │   └── com/
│   │   │       │       └── abel/
│   │   │       │           └── SomeApplication.java
│   │   │       └── resources/
│   │   │           ├── application.yml
│   │   │           └── bootstrap.yml
│   │   └── target/
│   │       └── classes/
│   │           ├── application.yml
│   │           └── bootstrap.yml
│   └── ui/
│       ├── pom.xml
│       ├── src/
│       │   └── main/
│       │       ├── java/
│       │       │   └── com/
│       │       │       └── abel/
│       │       │           ├── UiApplication.java
│       │       │           ├── bean/
│       │       │           │   └── Person.java
│       │       │           ├── controller/
│       │       │           │   └── UiController.java
│       │       │           └── service/
│       │       │               ├── PersonHystrixService.java
│       │       │               ├── PersonService.java
│       │       │               └── SomeHystrixService.java
│       │       └── resources/
│       │           ├── application.yml
│       │           ├── bootstrap.yml
│       │           └── static/
│       │               ├── css/
│       │               │   └── application.css
│       │               ├── index.html
│       │               ├── js/
│       │               │   └── app.js
│       │               └── tpl/
│       │                   ├── person.html
│       │                   └── some.html
│       └── target/
│           └── classes/
│               ├── application.yml
│               ├── bootstrap.yml
│               └── static/
│                   ├── css/
│                   │   └── application.css
│                   ├── index.html
│                   ├── js/
│                   │   └── app.js
│                   └── tpl/
│                       ├── person.html
│                       └── some.html
├── springboot-springSecurity2/
│   ├── pom.xml
│   └── src/
│       └── main/
│           ├── java/
│           │   └── com/
│           │       └── us/
│           │           └── example/
│           │               ├── Application.java
│           │               ├── config/
│           │               │   ├── DBconfig.java
│           │               │   ├── MyBatisConfig.java
│           │               │   ├── MyBatisScannerConfig.java
│           │               │   ├── TransactionConfig.java
│           │               │   └── WebSecurityConfig.java
│           │               ├── controller/
│           │               │   ├── HomeController.java
│           │               │   └── LoginController.java
│           │               ├── dao/
│           │               │   └── UserDao.java
│           │               ├── domain/
│           │               │   ├── SysRole.java
│           │               │   └── SysUser.java
│           │               ├── security/
│           │               │   └── CustomUserService.java
│           │               ├── service/
│           │               │   └── UserService.java
│           │               └── util/
│           │                   ├── BCryptPasswordEncoderTest.java
│           │                   └── MD5Util.java
│           └── resources/
│               ├── application.properties
│               └── mapper/
│                   └── UserDaoMapper.xml
├── springboot-springSecurity3/
│   ├── pom.xml
│   └── src/
│       └── main/
│           ├── java/
│           │   └── com/
│           │       └── us/
│           │           └── example/
│           │               ├── Application.java
│           │               ├── config/
│           │               │   ├── DBconfig.java
│           │               │   ├── MyBatisConfig.java
│           │               │   ├── MyBatisScannerConfig.java
│           │               │   ├── TransactionConfig.java
│           │               │   ├── WebMvcConfig.java
│           │               │   └── WebSecurityConfig.java
│           │               ├── controller/
│           │               │   └── HomeController.java
│           │               ├── dao/
│           │               │   ├── PermissionDao.java
│           │               │   └── UserDao.java
│           │               ├── domain/
│           │               │   ├── Msg.java
│           │               │   ├── Permission.java
│           │               │   ├── SysRole.java
│           │               │   └── SysUser.java
│           │               └── service/
│           │                   ├── CustomUserService.java
│           │                   ├── MyAccessDecisionManager.java
│           │                   ├── MyFilterSecurityInterceptor.java
│           │                   ├── MyGrantedAuthority.java
│           │                   └── MyInvocationSecurityMetadataSourceService.java
│           └── resources/
│               ├── application.properties
│               ├── mapper/
│               │   ├── PermissionDaoMapper.xml
│               │   └── UserDaoMapper.xml
│               └── templates/
│                   ├── home.html
│                   └── login.html
├── springboot-springSecurity4/
│   ├── pom.xml
│   └── src/
│       └── main/
│           ├── java/
│           │   └── com/
│           │       └── yy/
│           │           └── example/
│           │               ├── Application.java
│           │               ├── bean/
│           │               │   ├── Permission.java
│           │               │   ├── Role.java
│           │               │   └── User.java
│           │               ├── config/
│           │               │   ├── DataSourceConfig.java
│           │               │   ├── MapperScannerConfig.java
│           │               │   ├── MyBatisConfig.java
│           │               │   ├── MyBatisScannerConfig.java
│           │               │   ├── TransactionConfig.java
│           │               │   └── WebSecurityConfig.java
│           │               ├── controller/
│           │               │   ├── LoginController.java
│           │               │   └── UserController.java
│           │               ├── dao/
│           │               │   ├── PermissionDao.java
│           │               │   └── UserDao.java
│           │               ├── security/
│           │               │   ├── UrlAccessDecisionManager.java
│           │               │   ├── UrlConfigAttribute.java
│           │               │   ├── UrlFilterSecurityInterceptor.java
│           │               │   ├── UrlGrantedAuthority.java
│           │               │   ├── UrlMetadataSourceService.java
│           │               │   └── UrlUserService.java
│           │               ├── service/
│           │               │   └── UserService.java
│           │               └── utils/
│           │                   └── MD5Util.java
│           └── resources/
│               ├── application.properties
│               └── com/
│                   └── yy/
│                       └── example/
│                           └── mapper/
│                               ├── PermissionDaoMapper.xml
│                               └── UserDaoMapper.xml
└── springboot-swagger-ui/
    ├── pom.xml
    └── src/
        └── main/
            ├── java/
            │   └── com/
            │       └── abel/
            │           └── example/
            │               ├── Application.java
            │               ├── Swagger2.java
            │               ├── bean/
            │               │   └── User.java
            │               ├── config/
            │               │   ├── DBConfig.java
            │               │   └── JpaConfig.java
            │               ├── controller/
            │               │   └── UserController.java
            │               ├── dao/
            │               │   └── UserJpaDao.java
            │               ├── service/
            │               │   └── UserService.java
            │               ├── serviceImpl/
            │               │   └── UserServiceImpl.java
            │               └── util/
            │                   └── CommonUtil.java
            └── resources/
                └── application.properties

================================================
FILE CONTENTS
================================================

================================================
FILE: .gitignore
================================================

/.settings
/bin
*/target/*
/logs
*/out/

# filter config files, except .gitignore
*.MF
!.gitignore
*.iml
*.exe
# eclipse ignore
.project
.classpath
# IDEA ignore
.idea
.class
*.class
*.log
!application.properties


================================================
FILE: README.md
================================================
## 致歉
由于自己懒以及身体对issuse 解决的不及时。请大家以后提issuse 的时候写清楚 模块名 比如“springboot-SpringSecurity4” 和问题,我会抽时间抓紧解决。

## springboot-SpringSecurity0  

包含两部分代码:

* 第一是  博客 springboot+mybatis+SpringSecurity 实现用户角色数据库管理   地址:http://blog.csdn.net/u012373815/article/details/54632176

* 第二是  博客 springBoot+springSecurity验证密码MD5加密  地址:http://blog.csdn.net/u012373815/article/details/54927070

## springboot-SpringSecurity1  

*  博客 springBoot+springSecurity 数据库动态管理用户、角色、权限(二)   地址:http://blog.csdn.net/u012373815/article/details/54633046

## springboot-SpringSecurity2

*  博客  springboot+security restful权限控制官方推荐(五)   地址:http://blog.csdn.net/u012373815/article/details/59749385

## springboot-SpringSecurity3

*  博客  springBoot+springSecurity 动态管理Restful风格权限(三) 地址:http://blog.csdn.net/u012373815/article/details/55225079  

## springboot-SpringSecurity4
* 实战,项目中正在用

## springboot-WebSocket  

包含三部分代码,三部分代码有交合:

* 第一是  博客 spring boot +WebSocket 广播式(一)地址:http://blog.csdn.net/u012373815/article/details/54375195  中所示代码

* 第二是  博客 spring boot +WebSocket 广播式(二)地址:http://blog.csdn.net/u012373815/article/details/54377937   中所示代码
 
* 第三是  博客 spring boot +WebSocket(三) 点对点式 地址: http://blog.csdn.net/u012373815/article/details/54380476  中所示代码



## springboot-Cache

包含两部分代码:

* 第一部分是 博客 springboot的缓存技术 地址: http://blog.csdn.net/u012373815/article/details/54564076  

* 第二部分是 博客 springboot缓存篇(二)-redis 做缓存 地址:http://blog.csdn.net/u012373815/article/details/54572687

## springboot-Cache2

* 是  博客  springboot缓存 之 GuavaCacheManager   地址:http://blog.csdn.net/u012373815/article/details/60468033



## springboot-shiro

* 是博客  springboot集成shiro 实现权限控制   地址:http://blog.csdn.net/u012373815/article/details/57532292

##springboot-shior2

是使用shior 框架调取用户权限服务,进行登录权限验证的例子,其中的用户权限服务没有写,都是用TODO 标示出来了,使用时可以根据各自的用户权限服务进行编码替换

springboot-shiro2 也是和dubbo 的结合例子是 消费者的示例。

## springboot-swagger-ui
* 博客 spring boot +Swagger-ui 自动生成API文档 地址: https://blog.csdn.net/u012373815/article/details/82685962

## springBoot-Quartz
* 博客 springBoot-Quartz 定时任务 地址: https://abelyang.blog.csdn.net/article/details/86740625

## springboot 整合mybatis2
* springboot 整合mybatis2 更简便的整合方式地址: https://abelyang.blog.csdn.net/article/details/89296273

## springboot+Kafka
* kafka 与 sprigboot 的结合,springboot 从Kafka中读取数据的小例子地址: https://abelyang.blog.csdn.net/article/details/89296305

## springboot+es
* Elasticsearch 与 sprigboot 的结合,springboot 操作es的小例子地址: https://abelyang.blog.csdn.net/article/details/89296320

## Springboot多数据源切换
* springboot 多个数据源的配置, 一个springboot 项目操作多个数据库的数据:https://abelyang.blog.csdn.net/article/details/89296341

##springboot-dubbo

该项目是Springboot 和 dubbo 结合的例子,是provider 的示例,提供服务。简单的写了一些用户和权限的接口没有写的很完整,主要是为了提现dubbo 服务
Springboot-shiro2 也是和dubbo 的结合例子是 消费者的示例。



##未完待续。。。


================================================
FILE: abel-parent/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>cn.abel</groupId>
    <artifactId>abel-parent</artifactId>
    <packaging>pom</packaging>
    <version>1.0.0-SNAPSHOT</version>
    
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.4.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <shiro.version>1.4.0</shiro.version>
        <mysql.version>5.1.47</mysql.version>
    </properties>
    
    <dependencyManagement>
        <dependencies>
            <!--<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-devtools</artifactId>
                <optional>true</optional>
                <scope>runtime</scope>
            </dependency>-->
            
            <dependency>
                <groupId>org.apache.commons</groupId>
                <artifactId>commons-lang3</artifactId>
                <version>3.7</version>
            </dependency>
            <dependency>
                <groupId>org.apache.commons</groupId>
                <artifactId>commons-collections4</artifactId>
                <version>4.2</version>
            </dependency>
            <dependency>
                <groupId>org.apache.commons</groupId>
                <artifactId>commons-pool2</artifactId>
                <version>2.6.0</version>
            </dependency>
            
            <dependency>
                <groupId>dom4j</groupId>
                <artifactId>dom4j</artifactId>
                <version>1.6.1</version>
            </dependency>
            
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>${mysql.version}</version>
                <scope>runtime</scope>
            </dependency>
            
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>druid</artifactId>
                <version>1.1.10</version>
            </dependency>
            
            <dependency>
                <groupId>org.apache.shiro</groupId>
                <artifactId>shiro-spring</artifactId>
                <version>${shiro.version}</version>
            </dependency>
            <dependency>
                <groupId>org.apache.shiro</groupId>
                <artifactId>shiro-ehcache</artifactId>
                <version>${shiro.version}</version>
            </dependency>
            <dependency>
                <groupId>org.apache.shiro</groupId>
                <artifactId>shiro-quartz</artifactId>
                <version>${shiro.version}</version>
                <exclusions>
                    <exclusion>
                        <groupId>org.opensymphony.quartz</groupId>
                        <artifactId>quartz</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
            <dependency>
                <groupId>net.mingsoft</groupId>
                <artifactId>shiro-freemarker-tags</artifactId>
                <version>1.0.0</version>
            </dependency>
            
            <dependency>
                <groupId>org.hibernate</groupId>
                <artifactId>hibernate-core</artifactId>
                <version>5.3.4.Final</version>
            </dependency>
			
			<dependency>
			    <groupId>com.fasterxml.jackson.core</groupId>
			    <artifactId>jackson-core</artifactId>
			    <version>2.9.7</version>
			</dependency>
			<dependency>
			    <groupId>com.fasterxml.jackson.core</groupId>
			    <artifactId>jackson-databind</artifactId>
			    <version>2.9.9.1</version>
			</dependency>
    
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>fastjson</artifactId>
                <version>1.2.58</version>
            </dependency>

            <!--<dependency>
                <groupId>redis.clients</groupId>
                <artifactId>jedis</artifactId>
                <version>2.9.0</version>
            </dependency>-->
            <dependency>
                <groupId>org.mybatis.spring.boot</groupId>
                <artifactId>mybatis-spring-boot-starter</artifactId>
                <version>1.3.2</version>
            </dependency>
            <dependency>
                <groupId>com.github.pagehelper</groupId>
                <artifactId>pagehelper-spring-boot-starter</artifactId>
                <version>1.2.5</version>
            </dependency>
			
			<dependency>
			    <groupId>org.quartz-scheduler</groupId>
			    <artifactId>quartz</artifactId>
			    <version>2.2.1</version>
			</dependency>
    
            <!-- dubbo log4j替换为logback -->
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>dubbo</artifactId>
                <version>2.8.4</version>
                <exclusions>
                    <exclusion>
                        <groupId>log4j</groupId>
                        <artifactId>log4j</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
            <dependency>
                <groupId>org.slf4j</groupId>
                <artifactId>log4j-over-slf4j</artifactId>
                <version>1.7.25</version>
            </dependency>
            <dependency>
                <groupId>org.apache.zookeeper</groupId>
                <artifactId>zookeeper</artifactId>
                <version>3.4.13</version>
                <exclusions>
                    <exclusion>
                        <groupId>org.slf4j</groupId>
                        <artifactId>slf4j-log4j12</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>log4j</groupId>
                        <artifactId>log4j</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
            
            <!--dubbox-->
            <dependency>
                <groupId>org.jboss.resteasy</groupId>
                <artifactId>resteasy-jaxrs</artifactId>
                <version>3.0.26.Final</version>
            </dependency>
            <dependency>
                <groupId>org.jboss.resteasy</groupId>
                <artifactId>resteasy-client</artifactId>
                <version>3.0.26.Final</version>
            </dependency>
            <dependency>
                <groupId>org.jboss.resteasy</groupId>
                <artifactId>resteasy-jackson-provider</artifactId>
                <version>3.0.26.Final</version>
            </dependency>
            <dependency>
                <groupId>javax.validation</groupId>
                <artifactId>validation-api</artifactId>
                <version>2.0.1.Final</version>
            </dependency>
            <dependency>
                <groupId>org.hibernate.validator</groupId>
                <artifactId>hibernate-validator</artifactId>
                <version>6.0.13.Final</version>
            </dependency>
            <dependency>
                <groupId>com.101tec</groupId>
                <artifactId>zkclient</artifactId>
                <version>0.10</version>
            </dependency>
			
			<!-- 阿里大于回调 -->
			<dependency>
			    <groupId>com.google.code.gson</groupId>
			    <artifactId>gson</artifactId>
			    <version>2.8.5</version>
			</dependency>
			<dependency>
			    <groupId>org.apache.httpcomponents</groupId>
			    <artifactId>httpcore</artifactId>
			    <version>4.4.10</version>
			</dependency>
			<dependency>
			    <groupId>org.apache.httpcomponents</groupId>
			    <artifactId>httpcore-nio</artifactId>
			    <version>4.4.10</version>
			</dependency>
			<dependency>
			    <groupId>org.apache.httpcomponents</groupId>
			    <artifactId>httpclient</artifactId>
			    <version>4.5.6</version>
			</dependency>
			<dependency>
			    <groupId>org.apache.httpcomponents</groupId>
			    <artifactId>httpasyncclient</artifactId>
			    <version>4.1.4</version>
			</dependency>
    
            <dependency>
                <groupId>com.aliyun.oss</groupId>
                <artifactId>aliyun-sdk-oss</artifactId>
                <version>3.3.0</version>
            </dependency>
            <dependency>
                <groupId>com.aliyun</groupId>
                <artifactId>aliyun-java-sdk-sts</artifactId>
                <version>3.0.0</version>
            </dependency>
    
            <dependency>
                <groupId>com.aliyun</groupId>
                <artifactId>aliyun-java-sdk-core</artifactId>
                <version>4.2.0</version>
            </dependency>
            <dependency>
                <groupId>com.aliyun</groupId>
                <artifactId>aliyun-java-sdk-dysmsapi</artifactId>
                <version>1.1.0</version>
            </dependency>
            <dependency>
                <groupId>com.aliyun.mns</groupId>
                <artifactId>aliyun-sdk-mns</artifactId>
                <version>1.1.8.6</version>
            </dependency>
			
            
            <!-- Mapping映射 -->
            <dependency>
                <groupId>org.mapstruct</groupId>
                <artifactId>mapstruct-jdk8</artifactId>
                <version>1.1.0.Final</version>
            </dependency>
        </dependencies>
    </dependencyManagement>
    
    <distributionManagement>
        <repository>
            <id>Releases</id>
            <url>http://maven.aliyun.com/nexus/content/groups/public/releases</url>
        </repository>
        <snapshotRepository>
            <id>Snapshots</id>
            <url>http://maven.aliyun.com/nexus/content/groups/public/snapshots</url>
        </snapshotRepository>
    </distributionManagement>
    
    <profiles>
        <profile>
            <id>local</id>
            <properties>
                <package.environment>local</package.environment>
            </properties>
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
        </profile>
        <profile>
            <id>dev</id>
            <properties>
                <package.environment>dev</package.environment>
            </properties>
        </profile>
        <profile>
            <id>online</id>
            <properties>
                <package.environment>online</package.environment>
            </properties>
        </profile>
        <profile>
            <id>test</id>
            <properties>
                <package.environment>test</package.environment>
            </properties>
        </profile>
        <profile>
            <id>test-ali</id>
            <properties>
                <package.environment>test-ali</package.environment>
            </properties>
        </profile>
    </profiles>
    
    <build>
        <finalName>${project.artifactId}-${project.version}</finalName>
        <resources>
            <resource>
                <directory>src/main/resources/${package.environment}</directory>
                <includes>
                    <include>*.*</include>
                </includes>
            </resource>
            <resource>
                <directory>src/main/resources</directory>
                <excludes>
                    <exclude>local/**</exclude>
                    <exclude>dev/**</exclude>
                    <exclude>test/**</exclude>
                    <exclude>test-ali/**</exclude>
                    <exclude>online/**</exclude>
                </excludes>
            </resource>
        </resources>
        <pluginManagement>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                    <configuration>
                        <!--允许包含本地包-->
                        <includeSystemScope>true</includeSystemScope>
                        <!--fork:如果没有该项配置devtools不会起作用,即应用不会restart -->
                        <fork>true</fork>
                        <!--支持静态文件热部署-->
                        <addResources>true</addResources>
                    </configuration>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>3.6.0</version>
                    <configuration>
                        <encoding>UTF-8</encoding>
                        <source>1.8</source>
                        <target>1.8</target>
                        <annotationProcessorPaths>
                            <path>
                                <groupId>org.mapstruct</groupId>
                                <artifactId>mapstruct-processor</artifactId>
                                <version>1.1.0.Final</version>
                            </path>
                        </annotationProcessorPaths>
                    </configuration>
                </plugin>
            </plugins>
        </pluginManagement>
    </build>

</project>


================================================
FILE: abel-util/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>cn.abel</groupId>
    <artifactId>abel-util</artifactId>
    <version>1.0.0-SNAPSHOT</version>
    <packaging>jar</packaging>
    <parent>
        <groupId>cn.abel</groupId>
        <artifactId>abel-parent</artifactId>
        <version>1.0.0-SNAPSHOT</version>
    </parent>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-collections4</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
            <version>5.1.3.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <version>2.0.4.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.9.8</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>4.0.1</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>

    </dependencies>
</project>

================================================
FILE: abel-util/src/main/java/cn/abel/code/InfoCode.java
================================================
package cn.abel.code;

import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;

/**
 * 返回响应 Created by liyunfeng
 */
public enum InfoCode {

    //系统错误从200~10000
    SUCCESS(200, "OK"),
    TIME_OUT(300, "超时"),

    //业务相关从10000自增
    // 10000开始
    INVALID_REQUEST(10000, "不支持的请求方式"),

    //用户相关(20000自增)
    REQUEST_PARAM_ERROR(20000, "传入参数错误"),
    REGISTER_TYPE_ERROR(20001, "不支持的注册类型"),
    INVALID_SIGN(20002, "签名无效"),
    USER_LOGIN_EXIST(20003, "用户已存在"),
    USER_LOGIN_NOT_EXIST(20008, "用户不存在"),
    PASSWORD_ERROR(20009, "用户名或密码错误"),
    INVALID_TOKEN(20010, "无效token"),
    INVALID_LOGIN(20011, "登录失效,重新登录"),
    PASSWORD_SAME(20017, "密码重复"),
    OLD_PASSWORD_ERROR(20018, "密码错误,不能修改"),
    LOGIN_FAIL(20024, "登录失败"),
    VISITOR_REGISTER_FAIL(20025, "游客注册失败"),
    TOKEN_EXIST(20033, "token重复"),
    LOGIN_TYPE_EXIST(20034, "登录方式已存在"),
    USER_PROFILE_SEARCH_ERROR(20035, "用户查询失败"),
    USER_PROFILE_LOCK(20036, "用户已锁定"),
    ACCOUNT_SEARCH_FAIL(20037, "账号查询失败"),
    LOGIN_NAME_TYPE_ERROR(20038, "登录名不为空时,登录方式不能为空"),
    PASSWORD_SIMPLE_ERROR(20042, "密码错误,长度应为6-18,包含字母、数字和特殊字符"),
    PASSWORD_ERROR_MORE_THAN(20043,"用户名密码连续错误已达5次,请15分钟后再试"),
    LOGIN_TYPE_ERROR(20044, "不支持的登录类型"),
    SERVICE_UNAVAILABLE(50000, "操作失败,请重试");

    private int status;

    private String msg;

    private InfoCode(int status, String msg) {
        this.status = status;
        this.msg = msg;
    }

    public int getStatus() {
        return status;
    }

    public String getMsg() {
        return msg;
    }

    @Override
    public String toString() {
        return ToStringBuilder.reflectionToString(this, ToStringStyle.SHORT_PREFIX_STYLE);
    }
}


================================================
FILE: abel-util/src/main/java/cn/abel/exception/AppRuntimeException.java
================================================
package cn.abel.exception;


import cn.abel.code.InfoCode;

/**
 * 接口服务抛出的异常
 *
 */
public class AppRuntimeException extends RuntimeException {

	private static final long serialVersionUID = 2963760410777899525L;
	private InfoCode infoCode;

	public AppRuntimeException() {
		infoCode = InfoCode.SERVICE_UNAVAILABLE;
		
	}

	public AppRuntimeException(InfoCode infoCode) {
		this.infoCode = infoCode;
	}
	
	public AppRuntimeException(InfoCode infoCode, String message) {
	    super(message);
	    this.infoCode = infoCode;
	}

	public InfoCode getInfoCode() {
		return infoCode;
	}

}


================================================
FILE: abel-util/src/main/java/cn/abel/exception/HttpExeption.java
================================================
package cn.abel.exception;

public class HttpExeption extends Exception {
	
	private static final long serialVersionUID = -4707210535385221192L;

	public HttpExeption() {
	}

	public HttpExeption(String msg) {
		super(msg);
	}

	public HttpExeption(String msg, Throwable e) {
		super(msg, e);
	}

	public HttpExeption(Throwable e) {
		super(e);
	}
}

================================================
FILE: abel-util/src/main/java/cn/abel/exception/ServiceException.java
================================================
package cn.abel.exception;

import cn.abel.code.*;

/**
 * 服务异常类
 *
 */
@SuppressWarnings("serial")
public class ServiceException extends Exception {

    //默认的错误码
    private int errorCode = 500;

    private String errorCodes;

    public ServiceException() {
    }

    public ServiceException(Throwable e) {
        super(e);
    }

    public ServiceException(int errorCode) {
        this.errorCode = errorCode;
    }

    public int getErrorCode() {
        return errorCode;
    }

    public String getErrorCodes() {
        return errorCodes;
    }

    public ServiceException(InfoCode infoCode){
        super(infoCode.getMsg());
        this.errorCode = infoCode.getStatus();
    }

    public ServiceException(int errorCode, String msg) {
        super(msg);
        this.errorCode = errorCode;
    }

    public ServiceException(String errorCode, String msg) {
        super(msg);
        this.errorCodes = errorCode;
    }

    public ServiceException(int errorCode, String msg, Throwable e) {
        super(msg, e);
        this.errorCode = errorCode;
    }

    public ServiceException(int errorCode, Throwable e) {
        super(e);
        this.errorCode = errorCode;
    }
}


================================================
FILE: abel-util/src/main/java/cn/abel/response/ResponseEntity.java
================================================
package cn.abel.response;


import cn.abel.code.*;

import java.util.HashMap;

/**
 * Created by guoshan on 2018/3/21.
 * <p>
 * 服务端返回给前端或客户端使用
 */
public class ResponseEntity {
    int status = 200;

    String message = "ok";

    Object data = new HashMap();


    private ResponseEntity() {
    }

    public static ResponseEntity ok(Object data) {
        ResponseEntity ResponseEntity = new ResponseEntity();
        ResponseEntity.setData(data);
        return ResponseEntity;
    }

    public static ResponseEntity error(InfoCode infoCode) {
        ResponseEntity ResponseEntity = new ResponseEntity();
        ResponseEntity.setStatus(infoCode.getStatus());
        ResponseEntity.setMessage(infoCode.getMsg());
        return ResponseEntity;
    }

    public static ResponseEntity ok() {
        ResponseEntity ResponseEntity = new ResponseEntity();
        return ResponseEntity;
    }

    public static ResponseEntity error(int code, String msg) {
        ResponseEntity ResponseEntity = new ResponseEntity();
        ResponseEntity.setStatus(code);
        ResponseEntity.setMessage(msg);
        return ResponseEntity;
    }

    public int getStatus() {
        return status;
    }

    public void setStatus(int status) {
        this.status = status;
    }

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }

    public Object getData() {
        return data == null ? new HashMap() : data;
    }

    public void setData(Object data) {
        this.data = data;
    }
}


================================================
FILE: abel-util/src/main/java/cn/abel/utils/DateTimeUtils.java
================================================
package cn.abel.utils;

import cn.abel.exception.ServiceException;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.time.DateFormatUtils;
import org.apache.commons.lang3.time.DateUtils;

import java.text.ParseException;
import java.time.Instant;
import java.time.LocalDate;
import java.time.ZoneId;
import java.util.Calendar;
import java.util.Date;

/**
 * 日期util。
 */
public class DateTimeUtils {

    /**
     * 一分钟。
     */
    public static final int ONE_MINUTE = 60 * 1000;

    /**
     * 一小时。
     */
    public static final int ONE_HOUR = 60 * ONE_MINUTE;

    /**
     * 一天。
     */
    public static final int ONE_DAY = 24 * ONE_HOUR;


    public static final String DEFAULT_DATETIME_PATTERN = "yyyy-MM-dd HH:mm:ss";
    public static final String DEFAULT_DATE_PATTERN = "yyyy-MM-dd";
    private static final int ARG_ERROR_CODE = 400;
    private static final String ARG_ERROR = "输入的参数有误";


    /**
     * 根据给定的格式将时间转为字符串。
     *
     * @param dateTime
     * @param pattern
     * @return
     */
    public static String format(Date dateTime, String pattern) {
        if (dateTime == null || pattern == null) {
            return StringUtils.EMPTY;
        }

        return DateFormatUtils.format(dateTime, pattern);
    }

    /**
     * 将时间转为默认格式的字符串。
     *
     * @param dateTime
     * @return
     */
    public static String format(Date dateTime) {
        return format(dateTime, DEFAULT_DATETIME_PATTERN);
    }

    /**
     * 根据给定的格式获取当前日期的字符串。
     *
     * @param pattern
     * @return
     */
    public static String formatCurrent(String pattern) {
        return format(new Date(), pattern);
    }

    /**
     * 获取当前日期的字符串。
     *
     * @return
     */
    public static String formatCurrent() {
        return format(new Date(), DEFAULT_DATE_PATTERN);
    }

    /**
     * 去除时间中的时分秒毫秒,只保留日期部分。
     *
     * @param dateTime
     * @return
     */
    public static Date removeTime(Date dateTime) {
        if (dateTime == null) {
            return null;
        }
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(dateTime);
        calendar.set(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DATE), 0, 0, 0);
        calendar.set(Calendar.MILLISECOND, 0);
        return calendar.getTime();
    }

    /**
     * 获取明天的日期。
     *
     * @return
     */
    public static Date getTomorrowDate() {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(new Date());
        calendar.set(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DATE), 0, 0, 0);
        calendar.set(Calendar.MILLISECOND, 0);
        calendar.add(Calendar.DATE, 1);
        return calendar.getTime();
    }

    /**
     * 获取昨天的日期。
     *
     * @return
     */
    public static Date getYesterdayDate() {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(new Date());
        calendar.set(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DATE), 0, 0, 0);
        calendar.set(Calendar.MILLISECOND, 0);
        calendar.add(Calendar.DATE, -1);
        return calendar.getTime();
    }

    /**
     * 根据给定的格式将时间字符串转化成{@link Date}对象。
     *
     * @param dateTimeStr
     * @param pattern
     * @return
     * @throws ServiceException
     */
    public static Date parse(String dateTimeStr, String pattern) throws ServiceException {
        if (dateTimeStr == null || pattern == null) {
            return null;
        }
        try {
            return DateUtils.parseDate(dateTimeStr, pattern);
        } catch (ParseException e) {
            throw new ServiceException(ARG_ERROR_CODE, ARG_ERROR);
        }
    }

    /**
     * 将时间字符串根据默认格式转换成{@link Date}对象。
     *
     * @param dateTimeStr
     * @return
     * @throws ServiceException
     */
    public static Date parse(String dateTimeStr) throws ServiceException {
        return parse(dateTimeStr, DEFAULT_DATETIME_PATTERN);
    }

    /**
     * 获取日期中的月份。
     *
     * @param date
     * @return
     */
    public static int getMonth(Date date) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        return calendar.get(Calendar.MONTH) + 1;
    }

    /**
     * 获取日期中的年份。
     *
     * @param date
     * @return
     */
    public static int getYear(Date date) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        return calendar.get(Calendar.YEAR);
    }

    /**
     * 增加日期。
     *
     * @param date
     * @param days
     * @return
     * @throws ServiceException
     */
    public static Date dateAdd(Date date, int days) throws ServiceException {
        if (date == null) {
            throw new ServiceException(ARG_ERROR_CODE, ARG_ERROR);
        }
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        calendar.add(Calendar.DATE, days);
        return calendar.getTime();
    }

    /**
     * 增加月份。
     *
     * @param date
     * @param months
     * @return
     * @throws ServiceException
     */
    public static Date monthAdd(Date date, int months) throws ServiceException {
        if (date == null) {
            throw new ServiceException(ARG_ERROR_CODE, ARG_ERROR);
        }
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        calendar.add(Calendar.MONTH, months);
        return calendar.getTime();
    }

    /**
     * 获取两个日期之间的差值。
     *
     * @param one
     * @param two
     * @return
     * @throws ServiceException
     */
    public static int dateDiff(Date one, Date two) throws ServiceException {
        if (one == null || two == null) {
            throw new ServiceException(ARG_ERROR_CODE, ARG_ERROR);
        }
        long diff = Math.abs((one.getTime() - two.getTime()) / (1000 * 3600 * 24));
        return new Long(diff).intValue();
    }


    /**
     * 计算几天前的时间
     *
     * @param date 当前时间
     * @param day  几天前
     * @return
     */
    public static Date getDateBefore(Date date, int day) {
        Calendar now = Calendar.getInstance();
        now.setTime(date);
        now.set(Calendar.DATE, now.get(Calendar.DATE) - day);
        return now.getTime();
    }

    /**
     * 获取当前月第一天
     *
     * @return Date
     * @throws ParseException
     */
    public static Date getFirstAndLastOfMonth() {
        LocalDate today = LocalDate.now();
        LocalDate firstDay = LocalDate.of(today.getYear(),today.getMonth(),1);
        ZoneId zone = ZoneId.systemDefault();
        Instant instant = firstDay.atStartOfDay().atZone(zone).toInstant();
        return Date.from(instant);
    }

    /**
     * 获取当前周第一天
     *
     * @return Date
     * @throws ParseException
     */
    public static Date getWeekFirstDate(){
        Calendar cal = Calendar.getInstance();
        cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
        cal.set(Calendar.HOUR_OF_DAY, 0);
        cal.set(Calendar.MINUTE, 0);
        cal.set(Calendar.SECOND, 0);
        cal.set(Calendar.MILLISECOND, 0);
        Date date = cal.getTime();
        return date;
    }
    
}


================================================
FILE: springWebSocket/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.us.example</groupId>
    <artifactId>springWebSocket</artifactId>
    <version>1.0-SNAPSHOT</version>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.3.0.RELEASE</version>
    </parent>

    <properties>
        <start-class>com.us.example.Application</start-class>
        <maven.compiler.target>1.8</maven.compiler.target>
        <maven.compiler.source>1.8</maven.compiler.source>
    </properties>

    <dependencies>

        <!-- 核心模块,包括自动配置支持、日志和YAML -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>

        <!-- 测试模块,包括JUnit、Hamcrest、Mockito -->
        <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>

        <!-- 引入Web模块 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <!-- SpringWebSocket依赖 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-websocket</artifactId>
        </dependency>

        <!-- 引入security模块 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-security</artifactId>
        </dependency>

    </dependencies>
    <build>
        <plugins>
            <!--&lt;!&ndash;打依赖包&ndash;&gt;-->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-shade-plugin</artifactId>
                <version>2.3</version>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>shade</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>

================================================
FILE: springWebSocket/src/main/java/com/us/example/Application.java
================================================
package com.us.example;

/**
 * Created by yangyibo on 16/12/29.
 */
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.scheduling.annotation.EnableScheduling;

import static org.springframework.boot.SpringApplication.run;

@ComponentScan(basePackages ="com.us.example")
@SpringBootApplication
@EnableScheduling
public class Application {

    public static void main(String[] args) {
        ConfigurableApplicationContext run = run(Application.class, args);
    }
}

================================================
FILE: springWebSocket/src/main/java/com/us/example/bean/Message.java
================================================
package com.us.example.bean;

/**
 * Created by yangyibo on 16/12/29.
 * 浏览器向服务器发送的消息使用此类接受
 */
public class Message {
    private String name;

    public String getName(){
        return name;
    }
}

================================================
FILE: springWebSocket/src/main/java/com/us/example/bean/Response.java
================================================
package com.us.example.bean;

/**
 * Created by yangyibo on 16/12/29.
 * 服务器向浏览器发送的此类消息。
 */
public class Response {
    public void setResponseMessage(String responseMessage) {
        this.responseMessage = responseMessage;
    }

    private String responseMessage;
    public Response(String responseMessage){
        this.responseMessage = responseMessage;
    }
    public String getResponseMessage(){
        return responseMessage;
    }
}

================================================
FILE: springWebSocket/src/main/java/com/us/example/config/WebSecurityConfig.java
================================================
package com.us.example.config;

import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.builders.WebSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;

@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter{
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
                .authorizeRequests()
                .antMatchers("/","/login").permitAll()//根路径和/login路径不拦截
                .anyRequest().authenticated()
                .and()
                .formLogin()
                .loginPage("/login") //2登陆页面路径为/login
                .defaultSuccessUrl("/chat") //3登陆成功转向chat页面
                .permitAll()
                .and()
                .logout()
                .permitAll();
    }

    //4在内存中配置两个用户 wyf 和 wisely ,密码和用户名一致,角色是 USER
    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
    		auth
                .inMemoryAuthentication()
                .withUser("admin").password("admin").roles("USER")
                .and()
                .withUser("abel").password("abel").roles("USER");
    }
    //5忽略静态资源的拦截
    @Override
    public void configure(WebSecurity web) throws Exception {
        web.ignoring().antMatchers("/resources/static/**");
    }

}

================================================
FILE: springWebSocket/src/main/java/com/us/example/config/WebSocketConfig.java
================================================
package com.us.example.config;

import org.springframework.context.annotation.Configuration;
import org.springframework.messaging.simp.config.MessageBrokerRegistry;
import org.springframework.web.socket.config.annotation.AbstractWebSocketMessageBrokerConfigurer;
import org.springframework.web.socket.config.annotation.EnableWebSocketMessageBroker;
import org.springframework.web.socket.config.annotation.StompEndpointRegistry;

/**
 * Created by yangyibo on 16/12/29.
 */
@Configuration
@EnableWebSocketMessageBroker
//通过EnableWebSocketMessageBroker 开启使用STOMP协议来传输基于代理(message broker)的消息,此时浏览器支持使用@MessageMapping 就像支持@RequestMapping一样。
public class WebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer{


    @Override
    public void registerStompEndpoints(StompEndpointRegistry registry) { //endPoint 注册协议节点,并映射指定的URl

        //注册一个Stomp 协议的endpoint,并指定 SockJS协议
        registry.addEndpoint("/endpointWisely").withSockJS();

        //注册一个名字为"endpointChat" 的endpoint,并指定 SockJS协议。   点对点-用
        registry.addEndpoint("/endpointChat").withSockJS();
    }


    @Override
    public void configureMessageBroker(MessageBrokerRegistry registry) {//配置消息代理(message broker)
        //广播式应配置一个/topic 消息代理
        registry.enableSimpleBroker("/topic");

        //点对点式增加一个/queue 消息代理
        registry.enableSimpleBroker("/queue","/topic");

    }
}


================================================
FILE: springWebSocket/src/main/java/com/us/example/controller/WebSocketController.java
================================================
package com.us.example.controller;



import com.us.example.bean.Message;
import com.us.example.bean.Response;
import com.us.example.service.WebSocketService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.messaging.handler.annotation.MessageMapping;
import org.springframework.messaging.handler.annotation.SendTo;
import org.springframework.messaging.simp.SimpMessagingTemplate;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import java.security.Principal;

/**
 * Created by yangyibo on 16/12/29.
 *
 */
@CrossOrigin
@Controller
public class WebSocketController {
    @Autowired
    private WebSocketService ws;
    @Autowired
    private SimpMessagingTemplate messagingTemplate;


    @RequestMapping(value = "/login")
    public String login(){
        return  "login";
    }
    @RequestMapping(value = "/ws")
    public String ws(){
        return  "ws";
    }
    @RequestMapping(value = "/chat")
    public String chat(){
        return  "chat";
    }
    //http://localhost:8080/ws
    @MessageMapping("/welcome")//浏览器发送请求通过@messageMapping 映射/welcome 这个地址。
    @SendTo("/topic/getResponse")//服务器端有消息时,会订阅@SendTo 中的路径的浏览器发送消息。
    public Response say(Message message) throws Exception {
        Thread.sleep(1000);
        return new Response("Welcome, " + message.getName() + "!");
    }

    //http://localhost:8080/Welcome1
    @RequestMapping("/Welcome1")
    @ResponseBody
    public String say2()throws Exception
    {
        ws.sendMessage();
        return "is ok";
    }

    @MessageMapping("/chat")
    //在springmvc 中可以直接获得principal,principal 中包含当前用户的信息
    public void handleChat(Principal principal, Message message) {

        /**
         * 此处是一段硬编码。如果发送人是wyf 则发送给 wisely 如果发送人是wisely 就发送给 wyf。
         * 通过当前用户,然后查找消息,如果查找到未读消息,则发送给当前用户。
         */
        if (principal.getName().equals("admin")) {
            //通过convertAndSendToUser 向用户发送信息,
            // 第一个参数是接收消息的用户,第二个参数是浏览器订阅的地址,第三个参数是消息本身

            messagingTemplate.convertAndSendToUser("abel",
                    "/queue/notifications", principal.getName() + "-send:"
                            + message.getName());
            /**
             * 72 行操作相等于 
             * messagingTemplate.convertAndSend("/user/abel/queue/notifications",principal.getName() + "-send:"
             + message.getName());
             */
        } else {
            messagingTemplate.convertAndSendToUser("admin",
                    "/queue/notifications", principal.getName() + "-send:"
                            + message.getName());
        }
    }
}


================================================
FILE: springWebSocket/src/main/java/com/us/example/service/WebSocketService.java
================================================
package com.us.example.service;

/**
 * Created by yangyibo on 17/1/12.
 */

import com.us.example.bean.Response;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.messaging.simp.SimpMessagingTemplate;
import org.springframework.stereotype.Service;

@Service
public class WebSocketService {

    @Autowired
    //使用SimpMessagingTemplate 向浏览器发送消息
    private SimpMessagingTemplate template;

    public void sendMessage() throws Exception{
        for(int i=0;i<10;i++)
        {
            Thread.sleep(1000);
            template.convertAndSend("/topic/getResponse",new Response("Welcome,yangyibo !"+i));
            System.out.println("----------------------yangyibo"+i);
        }
    }

}


================================================
FILE: springWebSocket/src/main/resources/application.properties
================================================
server.port=8090


================================================
FILE: springWebSocket/src/main/resources/static/jquery.js
================================================
/*!
 * jQuery JavaScript Library v1.6.1
 * http://jquery.com/
 *
 * Copyright 2011, John Resig
 * Dual licensed under the MIT or GPL Version 2 licenses.
 * http://jquery.org/license
 *
 * Includes Sizzle.js
 * http://sizzlejs.com/
 * Copyright 2011, The Dojo Foundation
 * Released under the MIT, BSD, and GPL Licenses.
 *
 * Date: Thu May 12 15:04:36 2011 -0400
 */
(function( window, undefined ) {

// Use the correct document accordingly with window argument (sandbox)
var document = window.document,
	navigator = window.navigator,
	location = window.location;
var jQuery = (function() {

// Define a local copy of jQuery
var jQuery = function( selector, context ) {
		// The jQuery object is actually just the init constructor 'enhanced'
		return new jQuery.fn.init( selector, context, rootjQuery );
	},

	// Map over jQuery in case of overwrite
	_jQuery = window.jQuery,

	// Map over the $ in case of overwrite
	_$ = window.$,

	// A central reference to the root jQuery(document)
	rootjQuery,

	// A simple way to check for HTML strings or ID strings
	// (both of which we optimize for)
	quickExpr = /^(?:[^<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,

	// Check if a string has a non-whitespace character in it
	rnotwhite = /\S/,

	// Used for trimming whitespace
	trimLeft = /^\s+/,
	trimRight = /\s+$/,

	// Check for digits
	rdigit = /\d/,

	// Match a standalone tag
	rsingleTag = /^<(\w+)\s*\/?>(?:<\/\1>)?$/,

	// JSON RegExp
	rvalidchars = /^[\],:{}\s]*$/,
	rvalidescape = /\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,
	rvalidtokens = /"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,
	rvalidbraces = /(?:^|:|,)(?:\s*\[)+/g,

	// Useragent RegExp
	rwebkit = /(webkit)[ \/]([\w.]+)/,
	ropera = /(opera)(?:.*version)?[ \/]([\w.]+)/,
	rmsie = /(msie) ([\w.]+)/,
	rmozilla = /(mozilla)(?:.*? rv:([\w.]+))?/,

	// Keep a UserAgent string for use with jQuery.browser
	userAgent = navigator.userAgent,

	// For matching the engine and version of the browser
	browserMatch,

	// The deferred used on DOM ready
	readyList,

	// The ready event handler
	DOMContentLoaded,

	// Save a reference to some core methods
	toString = Object.prototype.toString,
	hasOwn = Object.prototype.hasOwnProperty,
	push = Array.prototype.push,
	slice = Array.prototype.slice,
	trim = String.prototype.trim,
	indexOf = Array.prototype.indexOf,

	// [[Class]] -> type pairs
	class2type = {};

jQuery.fn = jQuery.prototype = {
	constructor: jQuery,
	init: function( selector, context, rootjQuery ) {
		var match, elem, ret, doc;

		// Handle $(""), $(null), or $(undefined)
		if ( !selector ) {
			return this;
		}

		// Handle $(DOMElement)
		if ( selector.nodeType ) {
			this.context = this[0] = selector;
			this.length = 1;
			return this;
		}

		// The body element only exists once, optimize finding it
		if ( selector === "body" && !context && document.body ) {
			this.context = document;
			this[0] = document.body;
			this.selector = selector;
			this.length = 1;
			return this;
		}

		// Handle HTML strings
		if ( typeof selector === "string" ) {
			// Are we dealing with HTML string or an ID?
			if ( selector.charAt(0) === "<" && selector.charAt( selector.length - 1 ) === ">" && selector.length >= 3 ) {
				// Assume that strings that start and end with <> are HTML and skip the regex check
				match = [ null, selector, null ];

			} else {
				match = quickExpr.exec( selector );
			}

			// Verify a match, and that no context was specified for #id
			if ( match && (match[1] || !context) ) {

				// HANDLE: $(html) -> $(array)
				if ( match[1] ) {
					context = context instanceof jQuery ? context[0] : context;
					doc = (context ? context.ownerDocument || context : document);

					// If a single string is passed in and it's a single tag
					// just do a createElement and skip the rest
					ret = rsingleTag.exec( selector );

					if ( ret ) {
						if ( jQuery.isPlainObject( context ) ) {
							selector = [ document.createElement( ret[1] ) ];
							jQuery.fn.attr.call( selector, context, true );

						} else {
							selector = [ doc.createElement( ret[1] ) ];
						}

					} else {
						ret = jQuery.buildFragment( [ match[1] ], [ doc ] );
						selector = (ret.cacheable ? jQuery.clone(ret.fragment) : ret.fragment).childNodes;
					}

					return jQuery.merge( this, selector );

				// HANDLE: $("#id")
				} else {
					elem = document.getElementById( match[2] );

					// Check parentNode to catch when Blackberry 4.6 returns
					// nodes that are no longer in the document #6963
					if ( elem && elem.parentNode ) {
						// Handle the case where IE and Opera return items
						// by name instead of ID
						if ( elem.id !== match[2] ) {
							return rootjQuery.find( selector );
						}

						// Otherwise, we inject the element directly into the jQuery object
						this.length = 1;
						this[0] = elem;
					}

					this.context = document;
					this.selector = selector;
					return this;
				}

			// HANDLE: $(expr, $(...))
			} else if ( !context || context.jquery ) {
				return (context || rootjQuery).find( selector );

			// HANDLE: $(expr, context)
			// (which is just equivalent to: $(context).find(expr)
			} else {
				return this.constructor( context ).find( selector );
			}

		// HANDLE: $(function)
		// Shortcut for document ready
		} else if ( jQuery.isFunction( selector ) ) {
			return rootjQuery.ready( selector );
		}

		if (selector.selector !== undefined) {
			this.selector = selector.selector;
			this.context = selector.context;
		}

		return jQuery.makeArray( selector, this );
	},

	// Start with an empty selector
	selector: "",

	// The current version of jQuery being used
	jquery: "1.6.1",

	// The default length of a jQuery object is 0
	length: 0,

	// The number of elements contained in the matched element set
	size: function() {
		return this.length;
	},

	toArray: function() {
		return slice.call( this, 0 );
	},

	// Get the Nth element in the matched element set OR
	// Get the whole matched element set as a clean array
	get: function( num ) {
		return num == null ?

			// Return a 'clean' array
			this.toArray() :

			// Return just the object
			( num < 0 ? this[ this.length + num ] : this[ num ] );
	},

	// Take an array of elements and push it onto the stack
	// (returning the new matched element set)
	pushStack: function( elems, name, selector ) {
		// Build a new jQuery matched element set
		var ret = this.constructor();

		if ( jQuery.isArray( elems ) ) {
			push.apply( ret, elems );

		} else {
			jQuery.merge( ret, elems );
		}

		// Add the old object onto the stack (as a reference)
		ret.prevObject = this;

		ret.context = this.context;

		if ( name === "find" ) {
			ret.selector = this.selector + (this.selector ? " " : "") + selector;
		} else if ( name ) {
			ret.selector = this.selector + "." + name + "(" + selector + ")";
		}

		// Return the newly-formed element set
		return ret;
	},

	// Execute a callback for every element in the matched set.
	// (You can seed the arguments with an array of args, but this is
	// only used internally.)
	each: function( callback, args ) {
		return jQuery.each( this, callback, args );
	},

	ready: function( fn ) {
		// Attach the listeners
		jQuery.bindReady();

		// Add the callback
		readyList.done( fn );

		return this;
	},

	eq: function( i ) {
		return i === -1 ?
			this.slice( i ) :
			this.slice( i, +i + 1 );
	},

	first: function() {
		return this.eq( 0 );
	},

	last: function() {
		return this.eq( -1 );
	},

	slice: function() {
		return this.pushStack( slice.apply( this, arguments ),
			"slice", slice.call(arguments).join(",") );
	},

	map: function( callback ) {
		return this.pushStack( jQuery.map(this, function( elem, i ) {
			return callback.call( elem, i, elem );
		}));
	},

	end: function() {
		return this.prevObject || this.constructor(null);
	},

	// For internal use only.
	// Behaves like an Array's method, not like a jQuery method.
	push: push,
	sort: [].sort,
	splice: [].splice
};

// Give the init function the jQuery prototype for later instantiation
jQuery.fn.init.prototype = jQuery.fn;

jQuery.extend = jQuery.fn.extend = function() {
	var options, name, src, copy, copyIsArray, clone,
		target = arguments[0] || {},
		i = 1,
		length = arguments.length,
		deep = false;

	// Handle a deep copy situation
	if ( typeof target === "boolean" ) {
		deep = target;
		target = arguments[1] || {};
		// skip the boolean and the target
		i = 2;
	}

	// Handle case when target is a string or something (possible in deep copy)
	if ( typeof target !== "object" && !jQuery.isFunction(target) ) {
		target = {};
	}

	// extend jQuery itself if only one argument is passed
	if ( length === i ) {
		target = this;
		--i;
	}

	for ( ; i < length; i++ ) {
		// Only deal with non-null/undefined values
		if ( (options = arguments[ i ]) != null ) {
			// Extend the base object
			for ( name in options ) {
				src = target[ name ];
				copy = options[ name ];

				// Prevent never-ending loop
				if ( target === copy ) {
					continue;
				}

				// Recurse if we're merging plain objects or arrays
				if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) {
					if ( copyIsArray ) {
						copyIsArray = false;
						clone = src && jQuery.isArray(src) ? src : [];

					} else {
						clone = src && jQuery.isPlainObject(src) ? src : {};
					}

					// Never move original objects, clone them
					target[ name ] = jQuery.extend( deep, clone, copy );

				// Don't bring in undefined values
				} else if ( copy !== undefined ) {
					target[ name ] = copy;
				}
			}
		}
	}

	// Return the modified object
	return target;
};

jQuery.extend({
	noConflict: function( deep ) {
		if ( window.$ === jQuery ) {
			window.$ = _$;
		}

		if ( deep && window.jQuery === jQuery ) {
			window.jQuery = _jQuery;
		}

		return jQuery;
	},

	// Is the DOM ready to be used? Set to true once it occurs.
	isReady: false,

	// A counter to track how many items to wait for before
	// the ready event fires. See #6781
	readyWait: 1,

	// Hold (or release) the ready event
	holdReady: function( hold ) {
		if ( hold ) {
			jQuery.readyWait++;
		} else {
			jQuery.ready( true );
		}
	},

	// Handle when the DOM is ready
	ready: function( wait ) {
		// Either a released hold or an DOMready/load event and not yet ready
		if ( (wait === true && !--jQuery.readyWait) || (wait !== true && !jQuery.isReady) ) {
			// Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).
			if ( !document.body ) {
				return setTimeout( jQuery.ready, 1 );
			}

			// Remember that the DOM is ready
			jQuery.isReady = true;

			// If a normal DOM Ready event fired, decrement, and wait if need be
			if ( wait !== true && --jQuery.readyWait > 0 ) {
				return;
			}

			// If there are functions bound, to execute
			readyList.resolveWith( document, [ jQuery ] );

			// Trigger any bound ready events
			if ( jQuery.fn.trigger ) {
				jQuery( document ).trigger( "ready" ).unbind( "ready" );
			}
		}
	},

	bindReady: function() {
		if ( readyList ) {
			return;
		}

		readyList = jQuery._Deferred();

		// Catch cases where $(document).ready() is called after the
		// browser event has already occurred.
		if ( document.readyState === "complete" ) {
			// Handle it asynchronously to allow scripts the opportunity to delay ready
			return setTimeout( jQuery.ready, 1 );
		}

		// Mozilla, Opera and webkit nightlies currently support this event
		if ( document.addEventListener ) {
			// Use the handy event callback
			document.addEventListener( "DOMContentLoaded", DOMContentLoaded, false );

			// A fallback to window.onload, that will always work
			window.addEventListener( "load", jQuery.ready, false );

		// If IE event model is used
		} else if ( document.attachEvent ) {
			// ensure firing before onload,
			// maybe late but safe also for iframes
			document.attachEvent( "onreadystatechange", DOMContentLoaded );

			// A fallback to window.onload, that will always work
			window.attachEvent( "onload", jQuery.ready );

			// If IE and not a frame
			// continually check to see if the document is ready
			var toplevel = false;

			try {
				toplevel = window.frameElement == null;
			} catch(e) {}

			if ( document.documentElement.doScroll && toplevel ) {
				doScrollCheck();
			}
		}
	},

	// See test/unit/core.js for details concerning isFunction.
	// Since version 1.3, DOM methods and functions like alert
	// aren't supported. They return false on IE (#2968).
	isFunction: function( obj ) {
		return jQuery.type(obj) === "function";
	},

	isArray: Array.isArray || function( obj ) {
		return jQuery.type(obj) === "array";
	},

	// A crude way of determining if an object is a window
	isWindow: function( obj ) {
		return obj && typeof obj === "object" && "setInterval" in obj;
	},

	isNaN: function( obj ) {
		return obj == null || !rdigit.test( obj ) || isNaN( obj );
	},

	type: function( obj ) {
		return obj == null ?
			String( obj ) :
			class2type[ toString.call(obj) ] || "object";
	},

	isPlainObject: function( obj ) {
		// Must be an Object.
		// Because of IE, we also have to check the presence of the constructor property.
		// Make sure that DOM nodes and window objects don't pass through, as well
		if ( !obj || jQuery.type(obj) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) {
			return false;
		}

		// Not own constructor property must be Object
		if ( obj.constructor &&
			!hasOwn.call(obj, "constructor") &&
			!hasOwn.call(obj.constructor.prototype, "isPrototypeOf") ) {
			return false;
		}

		// Own properties are enumerated firstly, so to speed up,
		// if last one is own, then all properties are own.

		var key;
		for ( key in obj ) {}

		return key === undefined || hasOwn.call( obj, key );
	},

	isEmptyObject: function( obj ) {
		for ( var name in obj ) {
			return false;
		}
		return true;
	},

	error: function( msg ) {
		throw msg;
	},

	parseJSON: function( data ) {
		if ( typeof data !== "string" || !data ) {
			return null;
		}

		// Make sure leading/trailing whitespace is removed (IE can't handle it)
		data = jQuery.trim( data );

		// Attempt to parse using the native JSON parser first
		if ( window.JSON && window.JSON.parse ) {
			return window.JSON.parse( data );
		}

		// Make sure the incoming data is actual JSON
		// Logic borrowed from http://json.org/json2.js
		if ( rvalidchars.test( data.replace( rvalidescape, "@" )
			.replace( rvalidtokens, "]" )
			.replace( rvalidbraces, "")) ) {

			return (new Function( "return " + data ))();

		}
		jQuery.error( "Invalid JSON: " + data );
	},

	// Cross-browser xml parsing
	// (xml & tmp used internally)
	parseXML: function( data , xml , tmp ) {

		if ( window.DOMParser ) { // Standard
			tmp = new DOMParser();
			xml = tmp.parseFromString( data , "text/xml" );
		} else { // IE
			xml = new ActiveXObject( "Microsoft.XMLDOM" );
			xml.async = "false";
			xml.loadXML( data );
		}

		tmp = xml.documentElement;

		if ( ! tmp || ! tmp.nodeName || tmp.nodeName === "parsererror" ) {
			jQuery.error( "Invalid XML: " + data );
		}

		return xml;
	},

	noop: function() {},

	// Evaluates a script in a global context
	// Workarounds based on findings by Jim Driscoll
	// http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context
	globalEval: function( data ) {
		if ( data && rnotwhite.test( data ) ) {
			// We use execScript on Internet Explorer
			// We use an anonymous function so that context is window
			// rather than jQuery in Firefox
			( window.execScript || function( data ) {
				window[ "eval" ].call( window, data );
			} )( data );
		}
	},

	nodeName: function( elem, name ) {
		return elem.nodeName && elem.nodeName.toUpperCase() === name.toUpperCase();
	},

	// args is for internal usage only
	each: function( object, callback, args ) {
		var name, i = 0,
			length = object.length,
			isObj = length === undefined || jQuery.isFunction( object );

		if ( args ) {
			if ( isObj ) {
				for ( name in object ) {
					if ( callback.apply( object[ name ], args ) === false ) {
						break;
					}
				}
			} else {
				for ( ; i < length; ) {
					if ( callback.apply( object[ i++ ], args ) === false ) {
						break;
					}
				}
			}

		// A special, fast, case for the most common use of each
		} else {
			if ( isObj ) {
				for ( name in object ) {
					if ( callback.call( object[ name ], name, object[ name ] ) === false ) {
						break;
					}
				}
			} else {
				for ( ; i < length; ) {
					if ( callback.call( object[ i ], i, object[ i++ ] ) === false ) {
						break;
					}
				}
			}
		}

		return object;
	},

	// Use native String.trim function wherever possible
	trim: trim ?
		function( text ) {
			return text == null ?
				"" :
				trim.call( text );
		} :

		// Otherwise use our own trimming functionality
		function( text ) {
			return text == null ?
				"" :
				text.toString().replace( trimLeft, "" ).replace( trimRight, "" );
		},

	// results is for internal usage only
	makeArray: function( array, results ) {
		var ret = results || [];

		if ( array != null ) {
			// The window, strings (and functions) also have 'length'
			// The extra typeof function check is to prevent crashes
			// in Safari 2 (See: #3039)
			// Tweaked logic slightly to handle Blackberry 4.7 RegExp issues #6930
			var type = jQuery.type( array );

			if ( array.length == null || type === "string" || type === "function" || type === "regexp" || jQuery.isWindow( array ) ) {
				push.call( ret, array );
			} else {
				jQuery.merge( ret, array );
			}
		}

		return ret;
	},

	inArray: function( elem, array ) {

		if ( indexOf ) {
			return indexOf.call( array, elem );
		}

		for ( var i = 0, length = array.length; i < length; i++ ) {
			if ( array[ i ] === elem ) {
				return i;
			}
		}

		return -1;
	},

	merge: function( first, second ) {
		var i = first.length,
			j = 0;

		if ( typeof second.length === "number" ) {
			for ( var l = second.length; j < l; j++ ) {
				first[ i++ ] = second[ j ];
			}

		} else {
			while ( second[j] !== undefined ) {
				first[ i++ ] = second[ j++ ];
			}
		}

		first.length = i;

		return first;
	},

	grep: function( elems, callback, inv ) {
		var ret = [], retVal;
		inv = !!inv;

		// Go through the array, only saving the items
		// that pass the validator function
		for ( var i = 0, length = elems.length; i < length; i++ ) {
			retVal = !!callback( elems[ i ], i );
			if ( inv !== retVal ) {
				ret.push( elems[ i ] );
			}
		}

		return ret;
	},

	// arg is for internal usage only
	map: function( elems, callback, arg ) {
		var value, key, ret = [],
			i = 0,
			length = elems.length,
			// jquery objects are treated as arrays
			isArray = elems instanceof jQuery || length !== undefined && typeof length === "number" && ( ( length > 0 && elems[ 0 ] && elems[ length -1 ] ) || length === 0 || jQuery.isArray( elems ) ) ;

		// Go through the array, translating each of the items to their
		if ( isArray ) {
			for ( ; i < length; i++ ) {
				value = callback( elems[ i ], i, arg );

				if ( value != null ) {
					ret[ ret.length ] = value;
				}
			}

		// Go through every key on the object,
		} else {
			for ( key in elems ) {
				value = callback( elems[ key ], key, arg );

				if ( value != null ) {
					ret[ ret.length ] = value;
				}
			}
		}

		// Flatten any nested arrays
		return ret.concat.apply( [], ret );
	},

	// A global GUID counter for objects
	guid: 1,

	// Bind a function to a context, optionally partially applying any
	// arguments.
	proxy: function( fn, context ) {
		if ( typeof context === "string" ) {
			var tmp = fn[ context ];
			context = fn;
			fn = tmp;
		}

		// Quick check to determine if target is callable, in the spec
		// this throws a TypeError, but we will just return undefined.
		if ( !jQuery.isFunction( fn ) ) {
			return undefined;
		}

		// Simulated bind
		var args = slice.call( arguments, 2 ),
			proxy = function() {
				return fn.apply( context, args.concat( slice.call( arguments ) ) );
			};

		// Set the guid of unique handler to the same of original handler, so it can be removed
		proxy.guid = fn.guid = fn.guid || proxy.guid || jQuery.guid++;

		return proxy;
	},

	// Mutifunctional method to get and set values to a collection
	// The value/s can be optionally by executed if its a function
	access: function( elems, key, value, exec, fn, pass ) {
		var length = elems.length;

		// Setting many attributes
		if ( typeof key === "object" ) {
			for ( var k in key ) {
				jQuery.access( elems, k, key[k], exec, fn, value );
			}
			return elems;
		}

		// Setting one attribute
		if ( value !== undefined ) {
			// Optionally, function values get executed if exec is true
			exec = !pass && exec && jQuery.isFunction(value);

			for ( var i = 0; i < length; i++ ) {
				fn( elems[i], key, exec ? value.call( elems[i], i, fn( elems[i], key ) ) : value, pass );
			}

			return elems;
		}

		// Getting an attribute
		return length ? fn( elems[0], key ) : undefined;
	},

	now: function() {
		return (new Date()).getTime();
	},

	// Use of jQuery.browser is frowned upon.
	// More details: http://docs.jquery.com/Utilities/jQuery.browser
	uaMatch: function( ua ) {
		ua = ua.toLowerCase();

		var match = rwebkit.exec( ua ) ||
			ropera.exec( ua ) ||
			rmsie.exec( ua ) ||
			ua.indexOf("compatible") < 0 && rmozilla.exec( ua ) ||
			[];

		return { browser: match[1] || "", version: match[2] || "0" };
	},

	sub: function() {
		function jQuerySub( selector, context ) {
			return new jQuerySub.fn.init( selector, context );
		}
		jQuery.extend( true, jQuerySub, this );
		jQuerySub.superclass = this;
		jQuerySub.fn = jQuerySub.prototype = this();
		jQuerySub.fn.constructor = jQuerySub;
		jQuerySub.sub = this.sub;
		jQuerySub.fn.init = function init( selector, context ) {
			if ( context && context instanceof jQuery && !(context instanceof jQuerySub) ) {
				context = jQuerySub( context );
			}

			return jQuery.fn.init.call( this, selector, context, rootjQuerySub );
		};
		jQuerySub.fn.init.prototype = jQuerySub.fn;
		var rootjQuerySub = jQuerySub(document);
		return jQuerySub;
	},

	browser: {}
});

// Populate the class2type map
jQuery.each("Boolean Number String Function Array Date RegExp Object".split(" "), function(i, name) {
	class2type[ "[object " + name + "]" ] = name.toLowerCase();
});

browserMatch = jQuery.uaMatch( userAgent );
if ( browserMatch.browser ) {
	jQuery.browser[ browserMatch.browser ] = true;
	jQuery.browser.version = browserMatch.version;
}

// Deprecated, use jQuery.browser.webkit instead
if ( jQuery.browser.webkit ) {
	jQuery.browser.safari = true;
}

// IE doesn't match non-breaking spaces with \s
if ( rnotwhite.test( "\xA0" ) ) {
	trimLeft = /^[\s\xA0]+/;
	trimRight = /[\s\xA0]+$/;
}

// All jQuery objects should point back to these
rootjQuery = jQuery(document);

// Cleanup functions for the document ready method
if ( document.addEventListener ) {
	DOMContentLoaded = function() {
		document.removeEventListener( "DOMContentLoaded", DOMContentLoaded, false );
		jQuery.ready();
	};

} else if ( document.attachEvent ) {
	DOMContentLoaded = function() {
		// Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).
		if ( document.readyState === "complete" ) {
			document.detachEvent( "onreadystatechange", DOMContentLoaded );
			jQuery.ready();
		}
	};
}

// The DOM ready check for Internet Explorer
function doScrollCheck() {
	if ( jQuery.isReady ) {
		return;
	}

	try {
		// If IE is used, use the trick by Diego Perini
		// http://javascript.nwbox.com/IEContentLoaded/
		document.documentElement.doScroll("left");
	} catch(e) {
		setTimeout( doScrollCheck, 1 );
		return;
	}

	// and execute any waiting functions
	jQuery.ready();
}

// Expose jQuery to the global object
return jQuery;

})();


var // Promise methods
	promiseMethods = "done fail isResolved isRejected promise then always pipe".split( " " ),
	// Static reference to slice
	sliceDeferred = [].slice;

jQuery.extend({
	// Create a simple deferred (one callbacks list)
	_Deferred: function() {
		var // callbacks list
			callbacks = [],
			// stored [ context , args ]
			fired,
			// to avoid firing when already doing so
			firing,
			// flag to know if the deferred has been cancelled
			cancelled,
			// the deferred itself
			deferred  = {

				// done( f1, f2, ...)
				done: function() {
					if ( !cancelled ) {
						var args = arguments,
							i,
							length,
							elem,
							type,
							_fired;
						if ( fired ) {
							_fired = fired;
							fired = 0;
						}
						for ( i = 0, length = args.length; i < length; i++ ) {
							elem = args[ i ];
							type = jQuery.type( elem );
							if ( type === "array" ) {
								deferred.done.apply( deferred, elem );
							} else if ( type === "function" ) {
								callbacks.push( elem );
							}
						}
						if ( _fired ) {
							deferred.resolveWith( _fired[ 0 ], _fired[ 1 ] );
						}
					}
					return this;
				},

				// resolve with given context and args
				resolveWith: function( context, args ) {
					if ( !cancelled && !fired && !firing ) {
						// make sure args are available (#8421)
						args = args || [];
						firing = 1;
						try {
							while( callbacks[ 0 ] ) {
								callbacks.shift().apply( context, args );
							}
						}
						finally {
							fired = [ context, args ];
							firing = 0;
						}
					}
					return this;
				},

				// resolve with this as context and given arguments
				resolve: function() {
					deferred.resolveWith( this, arguments );
					return this;
				},

				// Has this deferred been resolved?
				isResolved: function() {
					return !!( firing || fired );
				},

				// Cancel
				cancel: function() {
					cancelled = 1;
					callbacks = [];
					return this;
				}
			};

		return deferred;
	},

	// Full fledged deferred (two callbacks list)
	Deferred: function( func ) {
		var deferred = jQuery._Deferred(),
			failDeferred = jQuery._Deferred(),
			promise;
		// Add errorDeferred methods, then and promise
		jQuery.extend( deferred, {
			then: function( doneCallbacks, failCallbacks ) {
				deferred.done( doneCallbacks ).fail( failCallbacks );
				return this;
			},
			always: function() {
				return deferred.done.apply( deferred, arguments ).fail.apply( this, arguments );
			},
			fail: failDeferred.done,
			rejectWith: failDeferred.resolveWith,
			reject: failDeferred.resolve,
			isRejected: failDeferred.isResolved,
			pipe: function( fnDone, fnFail ) {
				return jQuery.Deferred(function( newDefer ) {
					jQuery.each( {
						done: [ fnDone, "resolve" ],
						fail: [ fnFail, "reject" ]
					}, function( handler, data ) {
						var fn = data[ 0 ],
							action = data[ 1 ],
							returned;
						if ( jQuery.isFunction( fn ) ) {
							deferred[ handler ](function() {
								returned = fn.apply( this, arguments );
								if ( returned && jQuery.isFunction( returned.promise ) ) {
									returned.promise().then( newDefer.resolve, newDefer.reject );
								} else {
									newDefer[ action ]( returned );
								}
							});
						} else {
							deferred[ handler ]( newDefer[ action ] );
						}
					});
				}).promise();
			},
			// Get a promise for this deferred
			// If obj is provided, the promise aspect is added to the object
			promise: function( obj ) {
				if ( obj == null ) {
					if ( promise ) {
						return promise;
					}
					promise = obj = {};
				}
				var i = promiseMethods.length;
				while( i-- ) {
					obj[ promiseMethods[i] ] = deferred[ promiseMethods[i] ];
				}
				return obj;
			}
		});
		// Make sure only one callback list will be used
		deferred.done( failDeferred.cancel ).fail( deferred.cancel );
		// Unexpose cancel
		delete deferred.cancel;
		// Call given func if any
		if ( func ) {
			func.call( deferred, deferred );
		}
		return deferred;
	},

	// Deferred helper
	when: function( firstParam ) {
		var args = arguments,
			i = 0,
			length = args.length,
			count = length,
			deferred = length <= 1 && firstParam && jQuery.isFunction( firstParam.promise ) ?
				firstParam :
				jQuery.Deferred();
		function resolveFunc( i ) {
			return function( value ) {
				args[ i ] = arguments.length > 1 ? sliceDeferred.call( arguments, 0 ) : value;
				if ( !( --count ) ) {
					// Strange bug in FF4:
					// Values changed onto the arguments object sometimes end up as undefined values
					// outside the $.when method. Cloning the object into a fresh array solves the issue
					deferred.resolveWith( deferred, sliceDeferred.call( args, 0 ) );
				}
			};
		}
		if ( length > 1 ) {
			for( ; i < length; i++ ) {
				if ( args[ i ] && jQuery.isFunction( args[ i ].promise ) ) {
					args[ i ].promise().then( resolveFunc(i), deferred.reject );
				} else {
					--count;
				}
			}
			if ( !count ) {
				deferred.resolveWith( deferred, args );
			}
		} else if ( deferred !== firstParam ) {
			deferred.resolveWith( deferred, length ? [ firstParam ] : [] );
		}
		return deferred.promise();
	}
});



jQuery.support = (function() {

	var div = document.createElement( "div" ),
		documentElement = document.documentElement,
		all,
		a,
		select,
		opt,
		input,
		marginDiv,
		support,
		fragment,
		body,
		bodyStyle,
		tds,
		events,
		eventName,
		i,
		isSupported;

	// Preliminary tests
	div.setAttribute("className", "t");
	div.innerHTML = "   <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/>";

	all = div.getElementsByTagName( "*" );
	a = div.getElementsByTagName( "a" )[ 0 ];

	// Can't get basic test support
	if ( !all || !all.length || !a ) {
		return {};
	}

	// First batch of supports tests
	select = document.createElement( "select" );
	opt = select.appendChild( document.createElement("option") );
	input = div.getElementsByTagName( "input" )[ 0 ];

	support = {
		// IE strips leading whitespace when .innerHTML is used
		leadingWhitespace: ( div.firstChild.nodeType === 3 ),

		// Make sure that tbody elements aren't automatically inserted
		// IE will insert them into empty tables
		tbody: !div.getElementsByTagName( "tbody" ).length,

		// Make sure that link elements get serialized correctly by innerHTML
		// This requires a wrapper element in IE
		htmlSerialize: !!div.getElementsByTagName( "link" ).length,

		// Get the style information from getAttribute
		// (IE uses .cssText instead)
		style: /top/.test( a.getAttribute("style") ),

		// Make sure that URLs aren't manipulated
		// (IE normalizes it by default)
		hrefNormalized: ( a.getAttribute( "href" ) === "/a" ),

		// Make sure that element opacity exists
		// (IE uses filter instead)
		// Use a regex to work around a WebKit issue. See #5145
		opacity: /^0.55$/.test( a.style.opacity ),

		// Verify style float existence
		// (IE uses styleFloat instead of cssFloat)
		cssFloat: !!a.style.cssFloat,

		// Make sure that if no value is specified for a checkbox
		// that it defaults to "on".
		// (WebKit defaults to "" instead)
		checkOn: ( input.value === "on" ),

		// Make sure that a selected-by-default option has a working selected property.
		// (WebKit defaults to false instead of true, IE too, if it's in an optgroup)
		optSelected: opt.selected,

		// Test setAttribute on camelCase class. If it works, we need attrFixes when doing get/setAttribute (ie6/7)
		getSetAttribute: div.className !== "t",

		// Will be defined later
		submitBubbles: true,
		changeBubbles: true,
		focusinBubbles: false,
		deleteExpando: true,
		noCloneEvent: true,
		inlineBlockNeedsLayout: false,
		shrinkWrapBlocks: false,
		reliableMarginRight: true
	};

	// Make sure checked status is properly cloned
	input.checked = true;
	support.noCloneChecked = input.cloneNode( true ).checked;

	// Make sure that the options inside disabled selects aren't marked as disabled
	// (WebKit marks them as disabled)
	select.disabled = true;
	support.optDisabled = !opt.disabled;

	// Test to see if it's possible to delete an expando from an element
	// Fails in Internet Explorer
	try {
		delete div.test;
	} catch( e ) {
		support.deleteExpando = false;
	}

	if ( !div.addEventListener && div.attachEvent && div.fireEvent ) {
		div.attachEvent( "onclick", function click() {
			// Cloning a node shouldn't copy over any
			// bound event handlers (IE does this)
			support.noCloneEvent = false;
			div.detachEvent( "onclick", click );
		});
		div.cloneNode( true ).fireEvent( "onclick" );
	}

	// Check if a radio maintains it's value
	// after being appended to the DOM
	input = document.createElement("input");
	input.value = "t";
	input.setAttribute("type", "radio");
	support.radioValue = input.value === "t";

	input.setAttribute("checked", "checked");
	div.appendChild( input );
	fragment = document.createDocumentFragment();
	fragment.appendChild( div.firstChild );

	// WebKit doesn't clone checked state correctly in fragments
	support.checkClone = fragment.cloneNode( true ).cloneNode( true ).lastChild.checked;

	div.innerHTML = "";

	// Figure out if the W3C box model works as expected
	div.style.width = div.style.paddingLeft = "1px";

	// We use our own, invisible, body
	body = document.createElement( "body" );
	bodyStyle = {
		visibility: "hidden",
		width: 0,
		height: 0,
		border: 0,
		margin: 0,
		// Set background to avoid IE crashes when removing (#9028)
		background: "none"
	};
	for ( i in bodyStyle ) {
		body.style[ i ] = bodyStyle[ i ];
	}
	body.appendChild( div );
	documentElement.insertBefore( body, documentElement.firstChild );

	// Check if a disconnected checkbox will retain its checked
	// value of true after appended to the DOM (IE6/7)
	support.appendChecked = input.checked;

	support.boxModel = div.offsetWidth === 2;

	if ( "zoom" in div.style ) {
		// Check if natively block-level elements act like inline-block
		// elements when setting their display to 'inline' and giving
		// them layout
		// (IE < 8 does this)
		div.style.display = "inline";
		div.style.zoom = 1;
		support.inlineBlockNeedsLayout = ( div.offsetWidth === 2 );

		// Check if elements with layout shrink-wrap their children
		// (IE 6 does this)
		div.style.display = "";
		div.innerHTML = "<div style='width:4px;'></div>";
		support.shrinkWrapBlocks = ( div.offsetWidth !== 2 );
	}

	div.innerHTML = "<table><tr><td style='padding:0;border:0;display:none'></td><td>t</td></tr></table>";
	tds = div.getElementsByTagName( "td" );

	// Check if table cells still have offsetWidth/Height when they are set
	// to display:none and there are still other visible table cells in a
	// table row; if so, offsetWidth/Height are not reliable for use when
	// determining if an element has been hidden directly using
	// display:none (it is still safe to use offsets if a parent element is
	// hidden; don safety goggles and see bug #4512 for more information).
	// (only IE 8 fails this test)
	isSupported = ( tds[ 0 ].offsetHeight === 0 );

	tds[ 0 ].style.display = "";
	tds[ 1 ].style.display = "none";

	// Check if empty table cells still have offsetWidth/Height
	// (IE < 8 fail this test)
	support.reliableHiddenOffsets = isSupported && ( tds[ 0 ].offsetHeight === 0 );
	div.innerHTML = "";

	// Check if div with explicit width and no margin-right incorrectly
	// gets computed margin-right based on width of container. For more
	// info see bug #3333
	// Fails in WebKit before Feb 2011 nightlies
	// WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right
	if ( document.defaultView && document.defaultView.getComputedStyle ) {
		marginDiv = document.createElement( "div" );
		marginDiv.style.width = "0";
		marginDiv.style.marginRight = "0";
		div.appendChild( marginDiv );
		support.reliableMarginRight =
			( parseInt( ( document.defaultView.getComputedStyle( marginDiv, null ) || { marginRight: 0 } ).marginRight, 10 ) || 0 ) === 0;
	}

	// Remove the body element we added
	body.innerHTML = "";
	documentElement.removeChild( body );

	// Technique from Juriy Zaytsev
	// http://thinkweb2.com/projects/prototype/detecting-event-support-without-browser-sniffing/
	// We only care about the case where non-standard event systems
	// are used, namely in IE. Short-circuiting here helps us to
	// avoid an eval call (in setAttribute) which can cause CSP
	// to go haywire. See: https://developer.mozilla.org/en/Security/CSP
	if ( div.attachEvent ) {
		for( i in {
			submit: 1,
			change: 1,
			focusin: 1
		} ) {
			eventName = "on" + i;
			isSupported = ( eventName in div );
			if ( !isSupported ) {
				div.setAttribute( eventName, "return;" );
				isSupported = ( typeof div[ eventName ] === "function" );
			}
			support[ i + "Bubbles" ] = isSupported;
		}
	}

	return support;
})();

// Keep track of boxModel
jQuery.boxModel = jQuery.support.boxModel;




var rbrace = /^(?:\{.*\}|\[.*\])$/,
	rmultiDash = /([a-z])([A-Z])/g;

jQuery.extend({
	cache: {},

	// Please use with caution
	uuid: 0,

	// Unique for each copy of jQuery on the page
	// Non-digits removed to match rinlinejQuery
	expando: "jQuery" + ( jQuery.fn.jquery + Math.random() ).replace( /\D/g, "" ),

	// The following elements throw uncatchable exceptions if you
	// attempt to add expando properties to them.
	noData: {
		"embed": true,
		// Ban all objects except for Flash (which handle expandos)
		"object": "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",
		"applet": true
	},

	hasData: function( elem ) {
		elem = elem.nodeType ? jQuery.cache[ elem[jQuery.expando] ] : elem[ jQuery.expando ];

		return !!elem && !isEmptyDataObject( elem );
	},

	data: function( elem, name, data, pvt /* Internal Use Only */ ) {
		if ( !jQuery.acceptData( elem ) ) {
			return;
		}

		var internalKey = jQuery.expando, getByName = typeof name === "string", thisCache,

			// We have to handle DOM nodes and JS objects differently because IE6-7
			// can't GC object references properly across the DOM-JS boundary
			isNode = elem.nodeType,

			// Only DOM nodes need the global jQuery cache; JS object data is
			// attached directly to the object so GC can occur automatically
			cache = isNode ? jQuery.cache : elem,

			// Only defining an ID for JS objects if its cache already exists allows
			// the code to shortcut on the same path as a DOM node with no cache
			id = isNode ? elem[ jQuery.expando ] : elem[ jQuery.expando ] && jQuery.expando;

		// Avoid doing any more work than we need to when trying to get data on an
		// object that has no data at all
		if ( (!id || (pvt && id && !cache[ id ][ internalKey ])) && getByName && data === undefined ) {
			return;
		}

		if ( !id ) {
			// Only DOM nodes need a new unique ID for each element since their data
			// ends up in the global cache
			if ( isNode ) {
				elem[ jQuery.expando ] = id = ++jQuery.uuid;
			} else {
				id = jQuery.expando;
			}
		}

		if ( !cache[ id ] ) {
			cache[ id ] = {};

			// TODO: This is a hack for 1.5 ONLY. Avoids exposing jQuery
			// metadata on plain JS objects when the object is serialized using
			// JSON.stringify
			if ( !isNode ) {
				cache[ id ].toJSON = jQuery.noop;
			}
		}

		// An object can be passed to jQuery.data instead of a key/value pair; this gets
		// shallow copied over onto the existing cache
		if ( typeof name === "object" || typeof name === "function" ) {
			if ( pvt ) {
				cache[ id ][ internalKey ] = jQuery.extend(cache[ id ][ internalKey ], name);
			} else {
				cache[ id ] = jQuery.extend(cache[ id ], name);
			}
		}

		thisCache = cache[ id ];

		// Internal jQuery data is stored in a separate object inside the object's data
		// cache in order to avoid key collisions between internal data and user-defined
		// data
		if ( pvt ) {
			if ( !thisCache[ internalKey ] ) {
				thisCache[ internalKey ] = {};
			}

			thisCache = thisCache[ internalKey ];
		}

		if ( data !== undefined ) {
			thisCache[ jQuery.camelCase( name ) ] = data;
		}

		// TODO: This is a hack for 1.5 ONLY. It will be removed in 1.6. Users should
		// not attempt to inspect the internal events object using jQuery.data, as this
		// internal data object is undocumented and subject to change.
		if ( name === "events" && !thisCache[name] ) {
			return thisCache[ internalKey ] && thisCache[ internalKey ].events;
		}

		return getByName ? thisCache[ jQuery.camelCase( name ) ] : thisCache;
	},

	removeData: function( elem, name, pvt /* Internal Use Only */ ) {
		if ( !jQuery.acceptData( elem ) ) {
			return;
		}

		var internalKey = jQuery.expando, isNode = elem.nodeType,

			// See jQuery.data for more information
			cache = isNode ? jQuery.cache : elem,

			// See jQuery.data for more information
			id = isNode ? elem[ jQuery.expando ] : jQuery.expando;

		// If there is already no cache entry for this object, there is no
		// purpose in continuing
		if ( !cache[ id ] ) {
			return;
		}

		if ( name ) {
			var thisCache = pvt ? cache[ id ][ internalKey ] : cache[ id ];

			if ( thisCache ) {
				delete thisCache[ name ];

				// If there is no data left in the cache, we want to continue
				// and let the cache object itself get destroyed
				if ( !isEmptyDataObject(thisCache) ) {
					return;
				}
			}
		}

		// See jQuery.data for more information
		if ( pvt ) {
			delete cache[ id ][ internalKey ];

			// Don't destroy the parent cache unless the internal data object
			// had been the only thing left in it
			if ( !isEmptyDataObject(cache[ id ]) ) {
				return;
			}
		}

		var internalCache = cache[ id ][ internalKey ];

		// Browsers that fail expando deletion also refuse to delete expandos on
		// the window, but it will allow it on all other JS objects; other browsers
		// don't care
		if ( jQuery.support.deleteExpando || cache != window ) {
			delete cache[ id ];
		} else {
			cache[ id ] = null;
		}

		// We destroyed the entire user cache at once because it's faster than
		// iterating through each key, but we need to continue to persist internal
		// data if it existed
		if ( internalCache ) {
			cache[ id ] = {};
			// TODO: This is a hack for 1.5 ONLY. Avoids exposing jQuery
			// metadata on plain JS objects when the object is serialized using
			// JSON.stringify
			if ( !isNode ) {
				cache[ id ].toJSON = jQuery.noop;
			}

			cache[ id ][ internalKey ] = internalCache;

		// Otherwise, we need to eliminate the expando on the node to avoid
		// false lookups in the cache for entries that no longer exist
		} else if ( isNode ) {
			// IE does not allow us to delete expando properties from nodes,
			// nor does it have a removeAttribute function on Document nodes;
			// we must handle all of these cases
			if ( jQuery.support.deleteExpando ) {
				delete elem[ jQuery.expando ];
			} else if ( elem.removeAttribute ) {
				elem.removeAttribute( jQuery.expando );
			} else {
				elem[ jQuery.expando ] = null;
			}
		}
	},

	// For internal use only.
	_data: function( elem, name, data ) {
		return jQuery.data( elem, name, data, true );
	},

	// A method for determining if a DOM node can handle the data expando
	acceptData: function( elem ) {
		if ( elem.nodeName ) {
			var match = jQuery.noData[ elem.nodeName.toLowerCase() ];

			if ( match ) {
				return !(match === true || elem.getAttribute("classid") !== match);
			}
		}

		return true;
	}
});

jQuery.fn.extend({
	data: function( key, value ) {
		var data = null;

		if ( typeof key === "undefined" ) {
			if ( this.length ) {
				data = jQuery.data( this[0] );

				if ( this[0].nodeType === 1 ) {
			    var attr = this[0].attributes, name;
					for ( var i = 0, l = attr.length; i < l; i++ ) {
						name = attr[i].name;

						if ( name.indexOf( "data-" ) === 0 ) {
							name = jQuery.camelCase( name.substring(5) );

							dataAttr( this[0], name, data[ name ] );
						}
					}
				}
			}

			return data;

		} else if ( typeof key === "object" ) {
			return this.each(function() {
				jQuery.data( this, key );
			});
		}

		var parts = key.split(".");
		parts[1] = parts[1] ? "." + parts[1] : "";

		if ( value === undefined ) {
			data = this.triggerHandler("getData" + parts[1] + "!", [parts[0]]);

			// Try to fetch any internally stored data first
			if ( data === undefined && this.length ) {
				data = jQuery.data( this[0], key );
				data = dataAttr( this[0], key, data );
			}

			return data === undefined && parts[1] ?
				this.data( parts[0] ) :
				data;

		} else {
			return this.each(function() {
				var $this = jQuery( this ),
					args = [ parts[0], value ];

				$this.triggerHandler( "setData" + parts[1] + "!", args );
				jQuery.data( this, key, value );
				$this.triggerHandler( "changeData" + parts[1] + "!", args );
			});
		}
	},

	removeData: function( key ) {
		return this.each(function() {
			jQuery.removeData( this, key );
		});
	}
});

function dataAttr( elem, key, data ) {
	// If nothing was found internally, try to fetch any
	// data from the HTML5 data-* attribute
	if ( data === undefined && elem.nodeType === 1 ) {
		var name = "data-" + key.replace( rmultiDash, "$1-$2" ).toLowerCase();

		data = elem.getAttribute( name );

		if ( typeof data === "string" ) {
			try {
				data = data === "true" ? true :
				data === "false" ? false :
				data === "null" ? null :
				!jQuery.isNaN( data ) ? parseFloat( data ) :
					rbrace.test( data ) ? jQuery.parseJSON( data ) :
					data;
			} catch( e ) {}

			// Make sure we set the data so it isn't changed later
			jQuery.data( elem, key, data );

		} else {
			data = undefined;
		}
	}

	return data;
}

// TODO: This is a hack for 1.5 ONLY to allow objects with a single toJSON
// property to be considered empty objects; this property always exists in
// order to make sure JSON.stringify does not expose internal metadata
function isEmptyDataObject( obj ) {
	for ( var name in obj ) {
		if ( name !== "toJSON" ) {
			return false;
		}
	}

	return true;
}




function handleQueueMarkDefer( elem, type, src ) {
	var deferDataKey = type + "defer",
		queueDataKey = type + "queue",
		markDataKey = type + "mark",
		defer = jQuery.data( elem, deferDataKey, undefined, true );
	if ( defer &&
		( src === "queue" || !jQuery.data( elem, queueDataKey, undefined, true ) ) &&
		( src === "mark" || !jQuery.data( elem, markDataKey, undefined, true ) ) ) {
		// Give room for hard-coded callbacks to fire first
		// and eventually mark/queue something else on the element
		setTimeout( function() {
			if ( !jQuery.data( elem, queueDataKey, undefined, true ) &&
				!jQuery.data( elem, markDataKey, undefined, true ) ) {
				jQuery.removeData( elem, deferDataKey, true );
				defer.resolve();
			}
		}, 0 );
	}
}

jQuery.extend({

	_mark: function( elem, type ) {
		if ( elem ) {
			type = (type || "fx") + "mark";
			jQuery.data( elem, type, (jQuery.data(elem,type,undefined,true) || 0) + 1, true );
		}
	},

	_unmark: function( force, elem, type ) {
		if ( force !== true ) {
			type = elem;
			elem = force;
			force = false;
		}
		if ( elem ) {
			type = type || "fx";
			var key = type + "mark",
				count = force ? 0 : ( (jQuery.data( elem, key, undefined, true) || 1 ) - 1 );
			if ( count ) {
				jQuery.data( elem, key, count, true );
			} else {
				jQuery.removeData( elem, key, true );
				handleQueueMarkDefer( elem, type, "mark" );
			}
		}
	},

	queue: function( elem, type, data ) {
		if ( elem ) {
			type = (type || "fx") + "queue";
			var q = jQuery.data( elem, type, undefined, true );
			// Speed up dequeue by getting out quickly if this is just a lookup
			if ( data ) {
				if ( !q || jQuery.isArray(data) ) {
					q = jQuery.data( elem, type, jQuery.makeArray(data), true );
				} else {
					q.push( data );
				}
			}
			return q || [];
		}
	},

	dequeue: function( elem, type ) {
		type = type || "fx";

		var queue = jQuery.queue( elem, type ),
			fn = queue.shift(),
			defer;

		// If the fx queue is dequeued, always remove the progress sentinel
		if ( fn === "inprogress" ) {
			fn = queue.shift();
		}

		if ( fn ) {
			// Add a progress sentinel to prevent the fx queue from being
			// automatically dequeued
			if ( type === "fx" ) {
				queue.unshift("inprogress");
			}

			fn.call(elem, function() {
				jQuery.dequeue(elem, type);
			});
		}

		if ( !queue.length ) {
			jQuery.removeData( elem, type + "queue", true );
			handleQueueMarkDefer( elem, type, "queue" );
		}
	}
});

jQuery.fn.extend({
	queue: function( type, data ) {
		if ( typeof type !== "string" ) {
			data = type;
			type = "fx";
		}

		if ( data === undefined ) {
			return jQuery.queue( this[0], type );
		}
		return this.each(function() {
			var queue = jQuery.queue( this, type, data );

			if ( type === "fx" && queue[0] !== "inprogress" ) {
				jQuery.dequeue( this, type );
			}
		});
	},
	dequeue: function( type ) {
		return this.each(function() {
			jQuery.dequeue( this, type );
		});
	},
	// Based off of the plugin by Clint Helfers, with permission.
	// http://blindsignals.com/index.php/2009/07/jquery-delay/
	delay: function( time, type ) {
		time = jQuery.fx ? jQuery.fx.speeds[time] || time : time;
		type = type || "fx";

		return this.queue( type, function() {
			var elem = this;
			setTimeout(function() {
				jQuery.dequeue( elem, type );
			}, time );
		});
	},
	clearQueue: function( type ) {
		return this.queue( type || "fx", [] );
	},
	// Get a promise resolved when queues of a certain type
	// are emptied (fx is the type by default)
	promise: function( type, object ) {
		if ( typeof type !== "string" ) {
			object = type;
			type = undefined;
		}
		type = type || "fx";
		var defer = jQuery.Deferred(),
			elements = this,
			i = elements.length,
			count = 1,
			deferDataKey = type + "defer",
			queueDataKey = type + "queue",
			markDataKey = type + "mark",
			tmp;
		function resolve() {
			if ( !( --count ) ) {
				defer.resolveWith( elements, [ elements ] );
			}
		}
		while( i-- ) {
			if (( tmp = jQuery.data( elements[ i ], deferDataKey, undefined, true ) ||
					( jQuery.data( elements[ i ], queueDataKey, undefined, true ) ||
						jQuery.data( elements[ i ], markDataKey, undefined, true ) ) &&
					jQuery.data( elements[ i ], deferDataKey, jQuery._Deferred(), true ) )) {
				count++;
				tmp.done( resolve );
			}
		}
		resolve();
		return defer.promise();
	}
});




var rclass = /[\n\t\r]/g,
	rspace = /\s+/,
	rreturn = /\r/g,
	rtype = /^(?:button|input)$/i,
	rfocusable = /^(?:button|input|object|select|textarea)$/i,
	rclickable = /^a(?:rea)?$/i,
	rboolean = /^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,
	rinvalidChar = /\:/,
	formHook, boolHook;

jQuery.fn.extend({
	attr: function( name, value ) {
		return jQuery.access( this, name, value, true, jQuery.attr );
	},

	removeAttr: function( name ) {
		return this.each(function() {
			jQuery.removeAttr( this, name );
		});
	},
	
	prop: function( name, value ) {
		return jQuery.access( this, name, value, true, jQuery.prop );
	},
	
	removeProp: function( name ) {
		name = jQuery.propFix[ name ] || name;
		return this.each(function() {
			// try/catch handles cases where IE balks (such as removing a property on window)
			try {
				this[ name ] = undefined;
				delete this[ name ];
			} catch( e ) {}
		});
	},

	addClass: function( value ) {
		if ( jQuery.isFunction( value ) ) {
			return this.each(function(i) {
				var self = jQuery(this);
				self.addClass( value.call(this, i, self.attr("class") || "") );
			});
		}

		if ( value && typeof value === "string" ) {
			var classNames = (value || "").split( rspace );

			for ( var i = 0, l = this.length; i < l; i++ ) {
				var elem = this[i];

				if ( elem.nodeType === 1 ) {
					if ( !elem.className ) {
						elem.className = value;

					} else {
						var className = " " + elem.className + " ",
							setClass = elem.className;

						for ( var c = 0, cl = classNames.length; c < cl; c++ ) {
							if ( className.indexOf( " " + classNames[c] + " " ) < 0 ) {
								setClass += " " + classNames[c];
							}
						}
						elem.className = jQuery.trim( setClass );
					}
				}
			}
		}

		return this;
	},

	removeClass: function( value ) {
		if ( jQuery.isFunction(value) ) {
			return this.each(function(i) {
				var self = jQuery(this);
				self.removeClass( value.call(this, i, self.attr("class")) );
			});
		}

		if ( (value && typeof value === "string") || value === undefined ) {
			var classNames = (value || "").split( rspace );

			for ( var i = 0, l = this.length; i < l; i++ ) {
				var elem = this[i];

				if ( elem.nodeType === 1 && elem.className ) {
					if ( value ) {
						var className = (" " + elem.className + " ").replace(rclass, " ");
						for ( var c = 0, cl = classNames.length; c < cl; c++ ) {
							className = className.replace(" " + classNames[c] + " ", " ");
						}
						elem.className = jQuery.trim( className );

					} else {
						elem.className = "";
					}
				}
			}
		}

		return this;
	},

	toggleClass: function( value, stateVal ) {
		var type = typeof value,
			isBool = typeof stateVal === "boolean";

		if ( jQuery.isFunction( value ) ) {
			return this.each(function(i) {
				var self = jQuery(this);
				self.toggleClass( value.call(this, i, self.attr("class"), stateVal), stateVal );
			});
		}

		return this.each(function() {
			if ( type === "string" ) {
				// toggle individual class names
				var className,
					i = 0,
					self = jQuery( this ),
					state = stateVal,
					classNames = value.split( rspace );

				while ( (className = classNames[ i++ ]) ) {
					// check each className given, space seperated list
					state = isBool ? state : !self.hasClass( className );
					self[ state ? "addClass" : "removeClass" ]( className );
				}

			} else if ( type === "undefined" || type === "boolean" ) {
				if ( this.className ) {
					// store className if set
					jQuery._data( this, "__className__", this.className );
				}

				// toggle whole className
				this.className = this.className || value === false ? "" : jQuery._data( this, "__className__" ) || "";
			}
		});
	},

	hasClass: function( selector ) {
		var className = " " + selector + " ";
		for ( var i = 0, l = this.length; i < l; i++ ) {
			if ( (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) > -1 ) {
				return true;
			}
		}

		return false;
	},

	val: function( value ) {
		var hooks, ret,
			elem = this[0];
		
		if ( !arguments.length ) {
			if ( elem ) {
				hooks = jQuery.valHooks[ elem.nodeName.toLowerCase() ] || jQuery.valHooks[ elem.type ];

				if ( hooks && "get" in hooks && (ret = hooks.get( elem, "value" )) !== undefined ) {
					return ret;
				}

				return (elem.value || "").replace(rreturn, "");
			}

			return undefined;
		}

		var isFunction = jQuery.isFunction( value );

		return this.each(function( i ) {
			var self = jQuery(this), val;

			if ( this.nodeType !== 1 ) {
				return;
			}

			if ( isFunction ) {
				val = value.call( this, i, self.val() );
			} else {
				val = value;
			}

			// Treat null/undefined as ""; convert numbers to string
			if ( val == null ) {
				val = "";
			} else if ( typeof val === "number" ) {
				val += "";
			} else if ( jQuery.isArray( val ) ) {
				val = jQuery.map(val, function ( value ) {
					return value == null ? "" : value + "";
				});
			}

			hooks = jQuery.valHooks[ this.nodeName.toLowerCase() ] || jQuery.valHooks[ this.type ];

			// If set returns undefined, fall back to normal setting
			if ( !hooks || !("set" in hooks) || hooks.set( this, val, "value" ) === undefined ) {
				this.value = val;
			}
		});
	}
});

jQuery.extend({
	valHooks: {
		option: {
			get: function( elem ) {
				// attributes.value is undefined in Blackberry 4.7 but
				// uses .value. See #6932
				var val = elem.attributes.value;
				return !val || val.specified ? elem.value : elem.text;
			}
		},
		select: {
			get: function( elem ) {
				var value,
					index = elem.selectedIndex,
					values = [],
					options = elem.options,
					one = elem.type === "select-one";

				// Nothing was selected
				if ( index < 0 ) {
					return null;
				}

				// Loop through all the selected options
				for ( var i = one ? index : 0, max = one ? index + 1 : options.length; i < max; i++ ) {
					var option = options[ i ];

					// Don't return options that are disabled or in a disabled optgroup
					if ( option.selected && (jQuery.support.optDisabled ? !option.disabled : option.getAttribute("disabled") === null) &&
							(!option.parentNode.disabled || !jQuery.nodeName( option.parentNode, "optgroup" )) ) {

						// Get the specific value for the option
						value = jQuery( option ).val();

						// We don't need an array for one selects
						if ( one ) {
							return value;
						}

						// Multi-Selects return an array
						values.push( value );
					}
				}

				// Fixes Bug #2551 -- select.val() broken in IE after form.reset()
				if ( one && !values.length && options.length ) {
					return jQuery( options[ index ] ).val();
				}

				return values;
			},

			set: function( elem, value ) {
				var values = jQuery.makeArray( value );

				jQuery(elem).find("option").each(function() {
					this.selected = jQuery.inArray( jQuery(this).val(), values ) >= 0;
				});

				if ( !values.length ) {
					elem.selectedIndex = -1;
				}
				return values;
			}
		}
	},

	attrFn: {
		val: true,
		css: true,
		html: true,
		text: true,
		data: true,
		width: true,
		height: true,
		offset: true
	},
	
	attrFix: {
		// Always normalize to ensure hook usage
		tabindex: "tabIndex"
	},
	
	attr: function( elem, name, value, pass ) {
		var nType = elem.nodeType;
		
		// don't get/set attributes on text, comment and attribute nodes
		if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {
			return undefined;
		}

		if ( pass && name in jQuery.attrFn ) {
			return jQuery( elem )[ name ]( value );
		}

		// Fallback to prop when attributes are not supported
		if ( !("getAttribute" in elem) ) {
			return jQuery.prop( elem, name, value );
		}

		var ret, hooks,
			notxml = nType !== 1 || !jQuery.isXMLDoc( elem );

		// Normalize the name if needed
		name = notxml && jQuery.attrFix[ name ] || name;

		hooks = jQuery.attrHooks[ name ];

		if ( !hooks ) {
			// Use boolHook for boolean attributes
			if ( rboolean.test( name ) &&
				(typeof value === "boolean" || value === undefined || value.toLowerCase() === name.toLowerCase()) ) {

				hooks = boolHook;

			// Use formHook for forms and if the name contains certain characters
			} else if ( formHook && (jQuery.nodeName( elem, "form" ) || rinvalidChar.test( name )) ) {
				hooks = formHook;
			}
		}

		if ( value !== undefined ) {

			if ( value === null ) {
				jQuery.removeAttr( elem, name );
				return undefined;

			} else if ( hooks && "set" in hooks && notxml && (ret = hooks.set( elem, value, name )) !== undefined ) {
				return ret;

			} else {
				elem.setAttribute( name, "" + value );
				return value;
			}

		} else if ( hooks && "get" in hooks && notxml ) {
			return hooks.get( elem, name );

		} else {

			ret = elem.getAttribute( name );

			// Non-existent attributes return null, we normalize to undefined
			return ret === null ?
				undefined :
				ret;
		}
	},

	removeAttr: function( elem, name ) {
		var propName;
		if ( elem.nodeType === 1 ) {
			name = jQuery.attrFix[ name ] || name;
		
			if ( jQuery.support.getSetAttribute ) {
				// Use removeAttribute in browsers that support it
				elem.removeAttribute( name );
			} else {
				jQuery.attr( elem, name, "" );
				elem.removeAttributeNode( elem.getAttributeNode( name ) );
			}

			// Set corresponding property to false for boolean attributes
			if ( rboolean.test( name ) && (propName = jQuery.propFix[ name ] || name) in elem ) {
				elem[ propName ] = false;
			}
		}
	},

	attrHooks: {
		type: {
			set: function( elem, value ) {
				// We can't allow the type property to be changed (since it causes problems in IE)
				if ( rtype.test( elem.nodeName ) && elem.parentNode ) {
					jQuery.error( "type property can't be changed" );
				} else if ( !jQuery.support.radioValue && value === "radio" && jQuery.nodeName(elem, "input") ) {
					// Setting the type on a radio button after the value resets the value in IE6-9
					// Reset value to it's default in case type is set after value
					// This is for element creation
					var val = elem.value;
					elem.setAttribute( "type", value );
					if ( val ) {
						elem.value = val;
					}
					return value;
				}
			}
		},
		tabIndex: {
			get: function( elem ) {
				// elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set
				// http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/
				var attributeNode = elem.getAttributeNode("tabIndex");

				return attributeNode && attributeNode.specified ?
					parseInt( attributeNode.value, 10 ) :
					rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ?
						0 :
						undefined;
			}
		}
	},

	propFix: {
		tabindex: "tabIndex",
		readonly: "readOnly",
		"for": "htmlFor",
		"class": "className",
		maxlength: "maxLength",
		cellspacing: "cellSpacing",
		cellpadding: "cellPadding",
		rowspan: "rowSpan",
		colspan: "colSpan",
		usemap: "useMap",
		frameborder: "frameBorder",
		contenteditable: "contentEditable"
	},
	
	prop: function( elem, name, value ) {
		var nType = elem.nodeType;

		// don't get/set properties on text, comment and attribute nodes
		if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {
			return undefined;
		}

		var ret, hooks,
			notxml = nType !== 1 || !jQuery.isXMLDoc( elem );

		// Try to normalize/fix the name
		name = notxml && jQuery.propFix[ name ] || name;
		
		hooks = jQuery.propHooks[ name ];

		if ( value !== undefined ) {
			if ( hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) {
				return ret;

			} else {
				return (elem[ name ] = value);
			}

		} else {
			if ( hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== undefined ) {
				return ret;

			} else {
				return elem[ name ];
			}
		}
	},
	
	propHooks: {}
});

// Hook for boolean attributes
boolHook = {
	get: function( elem, name ) {
		// Align boolean attributes with corresponding properties
		return elem[ jQuery.propFix[ name ] || name ] ?
			name.toLowerCase() :
			undefined;
	},
	set: function( elem, value, name ) {
		var propName;
		if ( value === false ) {
			// Remove boolean attributes when set to false
			jQuery.removeAttr( elem, name );
		} else {
			// value is true since we know at this point it's type boolean and not false
			// Set boolean attributes to the same name and set the DOM property
			propName = jQuery.propFix[ name ] || name;
			if ( propName in elem ) {
				// Only set the IDL specifically if it already exists on the element
				elem[ propName ] = value;
			}

			elem.setAttribute( name, name.toLowerCase() );
		}
		return name;
	}
};

// Use the value property for back compat
// Use the formHook for button elements in IE6/7 (#1954)
jQuery.attrHooks.value = {
	get: function( elem, name ) {
		if ( formHook && jQuery.nodeName( elem, "button" ) ) {
			return formHook.get( elem, name );
		}
		return elem.value;
	},
	set: function( elem, value, name ) {
		if ( formHook && jQuery.nodeName( elem, "button" ) ) {
			return formHook.set( elem, value, name );
		}
		// Does not return so that setAttribute is also used
		elem.value = value;
	}
};

// IE6/7 do not support getting/setting some attributes with get/setAttribute
if ( !jQuery.support.getSetAttribute ) {

	// propFix is more comprehensive and contains all fixes
	jQuery.attrFix = jQuery.propFix;
	
	// Use this for any attribute on a form in IE6/7
	formHook = jQuery.attrHooks.name = jQuery.valHooks.button = {
		get: function( elem, name ) {
			var ret;
			ret = elem.getAttributeNode( name );
			// Return undefined if nodeValue is empty string
			return ret && ret.nodeValue !== "" ?
				ret.nodeValue :
				undefined;
		},
		set: function( elem, value, name ) {
			// Check form objects in IE (multiple bugs related)
			// Only use nodeValue if the attribute node exists on the form
			var ret = elem.getAttributeNode( name );
			if ( ret ) {
				ret.nodeValue = value;
				return value;
			}
		}
	};

	// Set width and height to auto instead of 0 on empty string( Bug #8150 )
	// This is for removals
	jQuery.each([ "width", "height" ], function( i, name ) {
		jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], {
			set: function( elem, value ) {
				if ( value === "" ) {
					elem.setAttribute( name, "auto" );
					return value;
				}
			}
		});
	});
}


// Some attributes require a special call on IE
if ( !jQuery.support.hrefNormalized ) {
	jQuery.each([ "href", "src", "width", "height" ], function( i, name ) {
		jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], {
			get: function( elem ) {
				var ret = elem.getAttribute( name, 2 );
				return ret === null ? undefined : ret;
			}
		});
	});
}

if ( !jQuery.support.style ) {
	jQuery.attrHooks.style = {
		get: function( elem ) {
			// Return undefined in the case of empty string
			// Normalize to lowercase since IE uppercases css property names
			return elem.style.cssText.toLowerCase() || undefined;
		},
		set: function( elem, value ) {
			return (elem.style.cssText = "" + value);
		}
	};
}

// Safari mis-reports the default selected property of an option
// Accessing the parent's selectedIndex property fixes it
if ( !jQuery.support.optSelected ) {
	jQuery.propHooks.selected = jQuery.extend( jQuery.propHooks.selected, {
		get: function( elem ) {
			var parent = elem.parentNode;

			if ( parent ) {
				parent.selectedIndex;

				// Make sure that it also works with optgroups, see #5701
				if ( parent.parentNode ) {
					parent.parentNode.selectedIndex;
				}
			}
		}
	});
}

// Radios and checkboxes getter/setter
if ( !jQuery.support.checkOn ) {
	jQuery.each([ "radio", "checkbox" ], function() {
		jQuery.valHooks[ this ] = {
			get: function( elem ) {
				// Handle the case where in Webkit "" is returned instead of "on" if a value isn't specified
				return elem.getAttribute("value") === null ? "on" : elem.value;
			}
		};
	});
}
jQuery.each([ "radio", "checkbox" ], function() {
	jQuery.valHooks[ this ] = jQuery.extend( jQuery.valHooks[ this ], {
		set: function( elem, value ) {
			if ( jQuery.isArray( value ) ) {
				return (elem.checked = jQuery.inArray( jQuery(elem).val(), value ) >= 0);
			}
		}
	});
});




var hasOwn = Object.prototype.hasOwnProperty,
	rnamespaces = /\.(.*)$/,
	rformElems = /^(?:textarea|input|select)$/i,
	rperiod = /\./g,
	rspaces = / /g,
	rescape = /[^\w\s.|`]/g,
	fcleanup = function( nm ) {
		return nm.replace(rescape, "\\$&");
	};

/*
 * A number of helper functions used for managing events.
 * Many of the ideas behind this code originated from
 * Dean Edwards' addEvent library.
 */
jQuery.event = {

	// Bind an event to an element
	// Original by Dean Edwards
	add: function( elem, types, handler, data ) {
		if ( elem.nodeType === 3 || elem.nodeType === 8 ) {
			return;
		}

		if ( handler === false ) {
			handler = returnFalse;
		} else if ( !handler ) {
			// Fixes bug #7229. Fix recommended by jdalton
			return;
		}

		var handleObjIn, handleObj;

		if ( handler.handler ) {
			handleObjIn = handler;
			handler = handleObjIn.handler;
		}

		// Make sure that the function being executed has a unique ID
		if ( !handler.guid ) {
			handler.guid = jQuery.guid++;
		}

		// Init the element's event structure
		var elemData = jQuery._data( elem );

		// If no elemData is found then we must be trying to bind to one of the
		// banned noData elements
		if ( !elemData ) {
			return;
		}

		var events = elemData.events,
			eventHandle = elemData.handle;

		if ( !events ) {
			elemData.events = events = {};
		}

		if ( !eventHandle ) {
			elemData.handle = eventHandle = function( e ) {
				// Discard the second event of a jQuery.event.trigger() and
				// when an event is called after a page has unloaded
				return typeof jQuery !== "undefined" && (!e || jQuery.event.triggered !== e.type) ?
					jQuery.event.handle.apply( eventHandle.elem, arguments ) :
					undefined;
			};
		}

		// Add elem as a property of the handle function
		// This is to prevent a memory leak with non-native events in IE.
		eventHandle.elem = elem;

		// Handle multiple events separated by a space
		// jQuery(...).bind("mouseover mouseout", fn);
		types = types.split(" ");

		var type, i = 0, namespaces;

		while ( (type = types[ i++ ]) ) {
			handleObj = handleObjIn ?
				jQuery.extend({}, handleObjIn) :
				{ handler: handler, data: data };

			// Namespaced event handlers
			if ( type.indexOf(".") > -1 ) {
				namespaces = type.split(".");
				type = namespaces.shift();
				handleObj.namespace = namespaces.slice(0).sort().join(".");

			} else {
				namespaces = [];
				handleObj.namespace = "";
			}

			handleObj.type = type;
			if ( !handleObj.guid ) {
				handleObj.guid = handler.guid;
			}

			// Get the current list of functions bound to this event
			var handlers = events[ type ],
				special = jQuery.event.special[ type ] || {};

			// Init the event handler queue
			if ( !handlers ) {
				handlers = events[ type ] = [];

				// Check for a special event handler
				// Only use addEventListener/attachEvent if the special
				// events handler returns false
				if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) {
					// Bind the global event handler to the element
					if ( elem.addEventListener ) {
						elem.addEventListener( type, eventHandle, false );

					} else if ( elem.attachEvent ) {
						elem.attachEvent( "on" + type, eventHandle );
					}
				}
			}

			if ( special.add ) {
				special.add.call( elem, handleObj );

				if ( !handleObj.handler.guid ) {
					handleObj.handler.guid = handler.guid;
				}
			}

			// Add the function to the element's handler list
			handlers.push( handleObj );

			// Keep track of which events have been used, for event optimization
			jQuery.event.global[ type ] = true;
		}

		// Nullify elem to prevent memory leaks in IE
		elem = null;
	},

	global: {},

	// Detach an event or set of events from an element
	remove: function( elem, types, handler, pos ) {
		// don't do events on text and comment nodes
		if ( elem.nodeType === 3 || elem.nodeType === 8 ) {
			return;
		}

		if ( handler === false ) {
			handler = returnFalse;
		}

		var ret, type, fn, j, i = 0, all, namespaces, namespace, special, eventType, handleObj, origType,
			elemData = jQuery.hasData( elem ) && jQuery._data( elem ),
			events = elemData && elemData.events;

		if ( !elemData || !events ) {
			return;
		}

		// types is actually an event object here
		if ( types && types.type ) {
			handler = types.handler;
			types = types.type;
		}

		// Unbind all events for the element
		if ( !types || typeof types === "string" && types.charAt(0) === "." ) {
			types = types || "";

			for ( type in events ) {
				jQuery.event.remove( elem, type + types );
			}

			return;
		}

		// Handle multiple events separated by a space
		// jQuery(...).unbind("mouseover mouseout", fn);
		types = types.split(" ");

		while ( (type = types[ i++ ]) ) {
			origType = type;
			handleObj = null;
			all = type.indexOf(".") < 0;
			namespaces = [];

			if ( !all ) {
				// Namespaced event handlers
				namespaces = type.split(".");
				type = namespaces.shift();

				namespace = new RegExp("(^|\\.)" +
					jQuery.map( namespaces.slice(0).sort(), fcleanup ).join("\\.(?:.*\\.)?") + "(\\.|$)");
			}

			eventType = events[ type ];

			if ( !eventType ) {
				continue;
			}

			if ( !handler ) {
				for ( j = 0; j < eventType.length; j++ ) {
					handleObj = eventType[ j ];

					if ( all || namespace.test( handleObj.namespace ) ) {
						jQuery.event.remove( elem, origType, handleObj.handler, j );
						eventType.splice( j--, 1 );
					}
				}

				continue;
			}

			special = jQuery.event.special[ type ] || {};

			for ( j = pos || 0; j < eventType.length; j++ ) {
				handleObj = eventType[ j ];

				if ( handler.guid === handleObj.guid ) {
					// remove the given handler for the given type
					if ( all || namespace.test( handleObj.namespace ) ) {
						if ( pos == null ) {
							eventType.splice( j--, 1 );
						}

						if ( special.remove ) {
							special.remove.call( elem, handleObj );
						}
					}

					if ( pos != null ) {
						break;
					}
				}
			}

			// remove generic event handler if no more handlers exist
			if ( eventType.length === 0 || pos != null && eventType.length === 1 ) {
				if ( !special.teardown || special.teardown.call( elem, namespaces ) === false ) {
					jQuery.removeEvent( elem, type, elemData.handle );
				}

				ret = null;
				delete events[ type ];
			}
		}

		// Remove the expando if it's no longer used
		if ( jQuery.isEmptyObject( events ) ) {
			var handle = elemData.handle;
			if ( handle ) {
				handle.elem = null;
			}

			delete elemData.events;
			delete elemData.handle;

			if ( jQuery.isEmptyObject( elemData ) ) {
				jQuery.removeData( elem, undefined, true );
			}
		}
	},
	
	// Events that are safe to short-circuit if no handlers are attached.
	// Native DOM events should not be added, they may have inline handlers.
	customEvent: {
		"getData": true,
		"setData": true,
		"changeData": true
	},

	trigger: function( event, data, elem, onlyHandlers ) {
		// Event object or event type
		var type = event.type || event,
			namespaces = [],
			exclusive;

		if ( type.indexOf("!") >= 0 ) {
			// Exclusive events trigger only for the exact event (no namespaces)
			type = type.slice(0, -1);
			exclusive = true;
		}

		if ( type.indexOf(".") >= 0 ) {
			// Namespaced trigger; create a regexp to match event type in handle()
			namespaces = type.split(".");
			type = namespaces.shift();
			namespaces.sort();
		}

		if ( (!elem || jQuery.event.customEvent[ type ]) && !jQuery.event.global[ type ] ) {
			// No jQuery handlers for this event type, and it can't have inline handlers
			return;
		}

		// Caller can pass in an Event, Object, or just an event type string
		event = typeof event === "object" ?
			// jQuery.Event object
			event[ jQuery.expando ] ? event :
			// Object literal
			new jQuery.Event( type, event ) :
			// Just the event type (string)
			new jQuery.Event( type );

		event.type = type;
		event.exclusive = exclusive;
		event.namespace = namespaces.join(".");
		event.namespace_re = new RegExp("(^|\\.)" + namespaces.join("\\.(?:.*\\.)?") + "(\\.|$)");
		
		// triggerHandler() and global events don't bubble or run the default action
		if ( onlyHandlers || !elem ) {
			event.preventDefault();
			event.stopPropagation();
		}

		// Handle a global trigger
		if ( !elem ) {
			// TODO: Stop taunting the data cache; remove global events and always attach to document
			jQuery.each( jQuery.cache, function() {
				// internalKey variable is just used to make it easier to find
				// and potentially change this stuff later; currently it just
				// points to jQuery.expando
				var internalKey = jQuery.expando,
					internalCache = this[ internalKey ];
				if ( internalCache && internalCache.events && internalCache.events[ type ] ) {
					jQuery.event.trigger( event, data, internalCache.handle.elem );
				}
			});
			return;
		}

		// Don't do events on text and comment nodes
		if ( elem.nodeType === 3 || elem.nodeType === 8 ) {
			return;
		}

		// Clean up the event in case it is being reused
		event.result = undefined;
		event.target = elem;

		// Clone any incoming data and prepend the event, creating the handler arg list
		data = data ? jQuery.makeArray( data ) : [];
		data.unshift( event );

		var cur = elem,
			// IE doesn't like method names with a colon (#3533, #8272)
			ontype = type.indexOf(":") < 0 ? "on" + type : "";

		// Fire event on the current element, then bubble up the DOM tree
		do {
			var handle = jQuery._data( cur, "handle" );

			event.currentTarget = cur;
			if ( handle ) {
				handle.apply( cur, data );
			}

			// Trigger an inline bound script
			if ( ontype && jQuery.acceptData( cur ) && cur[ ontype ] && cur[ ontype ].apply( cur, data ) === false ) {
				event.result = false;
				event.preventDefault();
			}

			// Bubble up to document, then to window
			cur = cur.parentNode || cur.ownerDocument || cur === event.target.ownerDocument && window;
		} while ( cur && !event.isPropagationStopped() );

		// If nobody prevented the default action, do it now
		if ( !event.isDefaultPrevented() ) {
			var old,
				special = jQuery.event.special[ type ] || {};

			if ( (!special._default || special._default.call( elem.ownerDocument, event ) === false) &&
				!(type === "click" && jQuery.nodeName( elem, "a" )) && jQuery.acceptData( elem ) ) {

				// Call a native DOM method on the target with the same name name as the event.
				// Can't use an .isFunction)() check here because IE6/7 fails that test.
				// IE<9 dies on focus to hidden element (#1486), may want to revisit a try/catch.
				try {
					if ( ontype && elem[ type ] ) {
						// Don't re-trigger an onFOO event when we call its FOO() method
						old = elem[ ontype ];

						if ( old ) {
							elem[ ontype ] = null;
						}

						jQuery.event.triggered = type;
						elem[ type ]();
					}
				} catch ( ieError ) {}

				if ( old ) {
					elem[ ontype ] = old;
				}

				jQuery.event.triggered = undefined;
			}
		}
		
		return event.result;
	},

	handle: function( event ) {
		event = jQuery.event.fix( event || window.event );
		// Snapshot the handlers list since a called handler may add/remove events.
		var handlers = ((jQuery._data( this, "events" ) || {})[ event.type ] || []).slice(0),
			run_all = !event.exclusive && !event.namespace,
			args = Array.prototype.slice.call( arguments, 0 );

		// Use the fix-ed Event rather than the (read-only) native event
		args[0] = event;
		event.currentTarget = this;

		for ( var j = 0, l = handlers.length; j < l; j++ ) {
			var handleObj = handlers[ j ];

			// Triggered event must 1) be non-exclusive and have no namespace, or
			// 2) have namespace(s) a subset or equal to those in the bound event.
			if ( run_all || event.namespace_re.test( handleObj.namespace ) ) {
				// Pass in a reference to the handler function itself
				// So that we can later remove it
				event.handler = handleObj.handler;
				event.data = handleObj.data;
				event.handleObj = handleObj;

				var ret = handleObj.handler.apply( this, args );

				if ( ret !== undefined ) {
					event.result = ret;
					if ( ret === false ) {
						event.preventDefault();
						event.stopPropagation();
					}
				}

				if ( event.isImmediatePropagationStopped() ) {
					break;
				}
			}
		}
		return event.result;
	},

	props: "altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode layerX layerY metaKey newValue offsetX offsetY pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),

	fix: function( event ) {
		if ( event[ jQuery.expando ] ) {
			return event;
		}

		// store a copy of the original event object
		// and "clone" to set read-only properties
		var originalEvent = event;
		event = jQuery.Event( originalEvent );

		for ( var i = this.props.length, prop; i; ) {
			prop = this.props[ --i ];
			event[ prop ] = originalEvent[ prop ];
		}

		// Fix target property, if necessary
		if ( !event.target ) {
			// Fixes #1925 where srcElement might not be defined either
			event.target = event.srcElement || document;
		}

		// check if target is a textnode (safari)
		if ( event.target.nodeType === 3 ) {
			event.target = event.target.parentNode;
		}

		// Add relatedTarget, if necessary
		if ( !event.relatedTarget && event.fromElement ) {
			event.relatedTarget = event.fromElement === event.target ? event.toElement : event.fromElement;
		}

		// Calculate pageX/Y if missing and clientX/Y available
		if ( event.pageX == null && event.clientX != null ) {
			var eventDocument = event.target.ownerDocument || document,
				doc = eventDocument.documentElement,
				body = eventDocument.body;

			event.pageX = event.clientX + (doc && doc.scrollLeft || body && body.scrollLeft || 0) - (doc && doc.clientLeft || body && body.clientLeft || 0);
			event.pageY = event.clientY + (doc && doc.scrollTop  || body && body.scrollTop  || 0) - (doc && doc.clientTop  || body && body.clientTop  || 0);
		}

		// Add which for key events
		if ( event.which == null && (event.charCode != null || event.keyCode != null) ) {
			event.which = event.charCode != null ? event.charCode : event.keyCode;
		}

		// Add metaKey to non-Mac browsers (use ctrl for PC's and Meta for Macs)
		if ( !event.metaKey && event.ctrlKey ) {
			event.metaKey = event.ctrlKey;
		}

		// Add which for click: 1 === left; 2 === middle; 3 === right
		// Note: button is not normalized, so don't use it
		if ( !event.which && event.button !== undefined ) {
			event.which = (event.button & 1 ? 1 : ( event.button & 2 ? 3 : ( event.button & 4 ? 2 : 0 ) ));
		}

		return event;
	},

	// Deprecated, use jQuery.guid instead
	guid: 1E8,

	// Deprecated, use jQuery.proxy instead
	proxy: jQuery.proxy,

	special: {
		ready: {
			// Make sure the ready event is setup
			setup: jQuery.bindReady,
			teardown: jQuery.noop
		},

		live: {
			add: function( handleObj ) {
				jQuery.event.add( this,
					liveConvert( handleObj.origType, handleObj.selector ),
					jQuery.extend({}, handleObj, {handler: liveHandler, guid: handleObj.handler.guid}) );
			},

			remove: function( handleObj ) {
				jQuery.event.remove( this, liveConvert( handleObj.origType, handleObj.selector ), handleObj );
			}
		},

		beforeunload: {
			setup: function( data, namespaces, eventHandle ) {
				// We only want to do this special case on windows
				if ( jQuery.isWindow( this ) ) {
					this.onbeforeunload = eventHandle;
				}
			},

			teardown: function( namespaces, eventHandle ) {
				if ( this.onbeforeunload === eventHandle ) {
					this.onbeforeunload = null;
				}
			}
		}
	}
};

jQuery.removeEvent = document.removeEventListener ?
	function( elem, type, handle ) {
		if ( elem.removeEventListener ) {
			elem.removeEventListener( type, handle, false );
		}
	} :
	function( elem, type, handle ) {
		if ( elem.detachEvent ) {
			elem.detachEvent( "on" + type, handle );
		}
	};

jQuery.Event = function( src, props ) {
	// Allow instantiation without the 'new' keyword
	if ( !this.preventDefault ) {
		return new jQuery.Event( src, props );
	}

	// Event object
	if ( src && src.type ) {
		this.originalEvent = src;
		this.type = src.type;

		// Events bubbling up the document may have been marked as prevented
		// by a handler lower down the tree; reflect the correct value.
		this.isDefaultPrevented = (src.defaultPrevented || src.returnValue === false ||
			src.getPreventDefault && src.getPreventDefault()) ? returnTrue : returnFalse;

	// Event type
	} else {
		this.type = src;
	}

	// Put explicitly provided properties onto the event object
	if ( props ) {
		jQuery.extend( this, props );
	}

	// timeStamp is buggy for some events on Firefox(#3843)
	// So we won't rely on the native value
	this.timeStamp = jQuery.now();

	// Mark it as fixed
	this[ jQuery.expando ] = true;
};

function returnFalse() {
	return false;
}
function returnTrue() {
	return true;
}

// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding
// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html
jQuery.Event.prototype = {
	preventDefault: function() {
		this.isDefaultPrevented = returnTrue;

		var e = this.originalEvent;
		if ( !e ) {
			return;
		}

		// if preventDefault exists run it on the original event
		if ( e.preventDefault ) {
			e.preventDefault();

		// otherwise set the returnValue property of the original event to false (IE)
		} else {
			e.returnValue = false;
		}
	},
	stopPropagation: function() {
		this.isPropagationStopped = returnTrue;

		var e = this.originalEvent;
		if ( !e ) {
			return;
		}
		// if stopPropagation exists run it on the original event
		if ( e.stopPropagation ) {
			e.stopPropagation();
		}
		// otherwise set the cancelBubble property of the original event to true (IE)
		e.cancelBubble = true;
	},
	stopImmediatePropagation: function() {
		this.isImmediatePropagationStopped = returnTrue;
		this.stopPropagation();
	},
	isDefaultPrevented: returnFalse,
	isPropagationStopped: returnFalse,
	isImmediatePropagationStopped: returnFalse
};

// Checks if an event happened on an element within another element
// Used in jQuery.event.special.mouseenter and mouseleave handlers
var withinElement = function( event ) {
	// Check if mouse(over|out) are still within the same parent element
	var parent = event.relatedTarget;

	// set the correct event type
	event.type = event.data;

	// Firefox sometimes assigns relatedTarget a XUL element
	// which we cannot access the parentNode property of
	try {

		// Chrome does something similar, the parentNode property
		// can be accessed but is null.
		if ( parent && parent !== document && !parent.parentNode ) {
			return;
		}

		// Traverse up the tree
		while ( parent && parent !== this ) {
			parent = parent.parentNode;
		}

		if ( parent !== this ) {
			// handle event if we actually just moused on to a non sub-element
			jQuery.event.handle.apply( this, arguments );
		}

	// assuming we've left the element since we most likely mousedover a xul element
	} catch(e) { }
},

// In case of event delegation, we only need to rename the event.type,
// liveHandler will take care of the rest.
delegate = function( event ) {
	event.type = event.data;
	jQuery.event.handle.apply( this, arguments );
};

// Create mouseenter and mouseleave events
jQuery.each({
	mouseenter: "mouseover",
	mouseleave: "mouseout"
}, function( orig, fix ) {
	jQuery.event.special[ orig ] = {
		setup: function( data ) {
			jQuery.event.add( this, fix, data && data.selector ? delegate : withinElement, orig );
		},
		teardown: function( data ) {
			jQuery.event.remove( this, fix, data && data.selector ? delegate : withinElement );
		}
	};
});

// submit delegation
if ( !jQuery.support.submitBubbles ) {

	jQuery.event.special.submit = {
		setup: function( data, namespaces ) {
			if ( !jQuery.nodeName( this, "form" ) ) {
				jQuery.event.add(this, "click.specialSubmit", function( e ) {
					var elem = e.target,
						type = elem.type;

					if ( (type === "submit" || type === "image") && jQuery( elem ).closest("form").length ) {
						trigger( "submit", this, arguments );
					}
				});

				jQuery.event.add(this, "keypress.specialSubmit", function( e ) {
					var elem = e.target,
						type = elem.type;

					if ( (type === "text" || type === "password") && jQuery( elem ).closest("form").length && e.keyCode === 13 ) {
						trigger( "submit", this, arguments );
					}
				});

			} else {
				return false;
			}
		},

		teardown: function( namespaces ) {
			jQuery.event.remove( this, ".specialSubmit" );
		}
	};

}

// change delegation, happens here so we have bind.
if ( !jQuery.support.changeBubbles ) {

	var changeFilters,

	getVal = function( elem ) {
		var type = elem.type, val = elem.value;

		if ( type === "radio" || type === "checkbox" ) {
			val = elem.checked;

		} else if ( type === "select-multiple" ) {
			val = elem.selectedIndex > -1 ?
				jQuery.map( elem.options, function( elem ) {
					return elem.selected;
				}).join("-") :
				"";

		} else if ( jQuery.nodeName( elem, "select" ) ) {
			val = elem.selectedIndex;
		}

		return val;
	},

	testChange = function testChange( e ) {
		var elem = e.target, data, val;

		if ( !rformElems.test( elem.nodeName ) || elem.readOnly ) {
			return;
		}

		data = jQuery._data( elem, "_change_data" );
		val = getVal(elem);

		// the current data will be also retrieved by beforeactivate
		if ( e.type !== "focusout" || elem.type !== "radio" ) {
			jQuery._data( elem, "_change_data", val );
		}

		if ( data === undefined || val === data ) {
			return;
		}

		if ( data != null || val ) {
			e.type = "change";
			e.liveFired = undefined;
			jQuery.event.trigger( e, arguments[1], elem );
		}
	};

	jQuery.event.special.change = {
		filters: {
			focusout: testChange,

			beforedeactivate: testChange,

			click: function( e ) {
				var elem = e.target, type = jQuery.nodeName( elem, "input" ) ? elem.type : "";

				if ( type === "radio" || type === "checkbox" || jQuery.nodeName( elem, "select" ) ) {
					testChange.call( this, e );
				}
			},

			// Change has to be called before submit
			// Keydown will be called before keypress, which is used in submit-event delegation
			keydown: function( e ) {
				var elem = e.target, type = jQuery.nodeName( elem, "input" ) ? elem.type : "";

				if ( (e.keyCode === 13 && !jQuery.nodeName( elem, "textarea" ) ) ||
					(e.keyCode === 32 && (type === "checkbox" || type === "radio")) ||
					type === "select-multiple" ) {
					testChange.call( this, e );
				}
			},

			// Beforeactivate happens also before the previous element is blurred
			// with this event you can't trigger a change event, but you can store
			// information
			beforeactivate: function( e ) {
				var elem = e.target;
				jQuery._data( elem, "_change_data", getVal(elem) );
			}
		},

		setup: function( data, namespaces ) {
			if ( this.type === "file" ) {
				return false;
			}

			for ( var type in changeFilters ) {
				jQuery.event.add( this, type + ".specialChange", changeFilters[type] );
			}

			return rformElems.test( this.nodeName );
		},

		teardown: function( namespaces ) {
			jQuery.event.remove( this, ".specialChange" );

			return rformElems.test( this.nodeName );
		}
	};

	changeFilters = jQuery.event.special.change.filters;

	// Handle when the input is .focus()'d
	changeFilters.focus = changeFilters.beforeactivate;
}

function trigger( type, elem, args ) {
	// Piggyback on a donor event to simulate a different one.
	// Fake originalEvent to avoid donor's stopPropagation, but if the
	// simulated event prevents default then we do the same on the donor.
	// Don't pass args or remember liveFired; they apply to the donor event.
	var event = jQuery.extend( {}, args[ 0 ] );
	event.type = type;
	event.originalEvent = {};
	event.liveFired = undefined;
	jQuery.event.handle.call( elem, event );
	if ( event.isDefaultPrevented() ) {
		args[ 0 ].preventDefault();
	}
}

// Create "bubbling" focus and blur events
if ( !jQuery.support.focusinBubbles ) {
	jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) {

		// Attach a single capturing handler while someone wants focusin/focusout
		var attaches = 0;

		jQuery.event.special[ fix ] = {
			setup: function() {
				if ( attaches++ === 0 ) {
					document.addEventListener( orig, handler, true );
				}
			},
			teardown: function() {
				if ( --attaches === 0 ) {
					document.removeEventListener( orig, handler, true );
				}
			}
		};

		function handler( donor ) {
			// Donor event is always a native one; fix it and switch its type.
			// Let focusin/out handler cancel the donor focus/blur event.
			var e = jQuery.event.fix( donor );
			e.type = fix;
			e.originalEvent = {};
			jQuery.event.trigger( e, null, e.target );
			if ( e.isDefaultPrevented() ) {
				donor.preventDefault();
			}
		}
	});
}

jQuery.each(["bind", "one"], function( i, name ) {
	jQuery.fn[ name ] = function( type, data, fn ) {
		var handler;

		// Handle object literals
		if ( typeof type === "object" ) {
			for ( var key in type ) {
				this[ name ](key, data, type[key], fn);
			}
			return this;
		}

		if ( arguments.length === 2 || data === false ) {
			fn = data;
			data = undefined;
		}

		if ( name === "one" ) {
			handler = function( event ) {
				jQuery( this ).unbind( event, handler );
				return fn.apply( this, arguments );
			};
			handler.guid = fn.guid || jQuery.guid++;
		} else {
			handler = fn;
		}

		if ( type === "unload" && name !== "one" ) {
			this.one( type, data, fn );

		} else {
			for ( var i = 0, l = this.length; i < l; i++ ) {
				jQuery.event.add( this[i], type, handler, data );
			}
		}

		return this;
	};
});

jQuery.fn.extend({
	unbind: function( type, fn ) {
		// Handle object literals
		if ( typeof type === "object" && !type.preventDefault ) {
			for ( var key in type ) {
				this.unbind(key, type[key]);
			}

		} else {
			for ( var i = 0, l = this.length; i < l; i++ ) {
				jQuery.event.remove( this[i], type, fn );
			}
		}

		return this;
	},

	delegate: function( selector, types, data, fn ) {
		return this.live( types, data, fn, selector );
	},

	undelegate: function( selector, types, fn ) {
		if ( arguments.length === 0 ) {
			return this.unbind( "live" );

		} else {
			return this.die( types, null, fn, selector );
		}
	},

	trigger: function( type, data ) {
		return this.each(function() {
			jQuery.event.trigger( type, data, this );
		});
	},

	triggerHandler: function( type, data ) {
		if ( this[0] ) {
			return jQuery.event.trigger( type, data, this[0], true );
		}
	},

	toggle: function( fn ) {
		// Save reference to arguments for access in closure
		var args = arguments,
			guid = fn.guid || jQuery.guid++,
			i = 0,
			toggler = function( event ) {
				// Figure out which function to execute
				var lastToggle = ( jQuery.data( this, "lastToggle" + fn.guid ) || 0 ) % i;
				jQuery.data( this, "lastToggle" + fn.guid, lastToggle + 1 );

				// Make sure that clicks stop
				event.preventDefault();

				// and execute the function
				return args[ lastToggle ].apply( this, arguments ) || false;
			};

		// link all the functions, so any of them can unbind this click handler
		toggler.guid = guid;
		while ( i < args.length ) {
			args[ i++ ].guid = guid;
		}

		return this.click( toggler );
	},

	hover: function( fnOver, fnOut ) {
		return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );
	}
});

var liveMap = {
	focus: "focusin",
	blur: "focusout",
	mouseenter: "mouseover",
	mouseleave: "mouseout"
};

jQuery.each(["live", "die"], function( i, name ) {
	jQuery.fn[ name ] = function( types, data, fn, origSelector /* Internal Use Only */ ) {
		var type, i = 0, match, namespaces, preType,
			selector = origSelector || this.selector,
			context = origSelector ? this : jQuery( this.context );

		if ( typeof types === "object" && !types.preventDefault ) {
			for ( var key in types ) {
				context[ name ]( key, data, types[key], selector );
			}

			return this;
		}

		if ( name === "die" && !types &&
					origSelector && origSelector.charAt(0) === "." ) {

			context.unbind( origSelector );

			return this;
		}

		if ( data === false || jQuery.isFunction( data ) ) {
			fn = data || returnFalse;
			data = undefined;
		}

		types = (types || "").split(" ");

		while ( (type = types[ i++ ]) != null ) {
			match = rnamespaces.exec( type );
			namespaces = "";

			if ( match )  {
				namespaces = match[0];
				type = type.replace( rnamespaces, "" );
			}

			if ( type === "hover" ) {
				types.push( "mouseenter" + namespaces, "mouseleave" + namespaces );
				continue;
			}

			preType = type;

			if ( liveMap[ type ] ) {
				types.push( liveMap[ type ] + namespaces );
				type = type + namespaces;

			} else {
				type = (liveMap[ type ] || type) + namespaces;
			}

			if ( name === "live" ) {
				// bind live handler
				for ( var j = 0, l = context.length; j < l; j++ ) {
					jQuery.event.add( context[j], "live." + liveConvert( type, selector ),
						{ data: data, selector: selector, handler: fn, origType: type, origHandler: fn, preType: preType } );
				}

			} else {
				// unbind live handler
				context.unbind( "live." + liveConvert( type, selector ), fn );
			}
		}

		return this;
	};
});

function liveHandler( event ) {
	var stop, maxLevel, related, match, handleObj, elem, j, i, l, data, close, namespace, ret,
		elems = [],
		selectors = [],
		events = jQuery._data( this, "events" );

	// Make sure we avoid non-left-click bubbling in Firefox (#3861) and disabled elements in IE (#6911)
	if ( event.liveFired === this || !events || !events.live || event.target.disabled || event.button && event.type === "click" ) {
		return;
	}

	if ( event.namespace ) {
		namespace = new RegExp("(^|\\.)" + event.namespace.split(".").join("\\.(?:.*\\.)?") + "(\\.|$)");
	}

	event.liveFired = this;

	var live = events.live.slice(0);

	for ( j = 0; j < live.length; j++ ) {
		handleObj = live[j];

		if ( handleObj.origType.replace( rnamespaces, "" ) === event.type ) {
			selectors.push( handleObj.selector );

		} else {
			live.splice( j--, 1 );
		}
	}

	match = jQuery( event.target ).closest( selectors, event.currentTarget );

	for ( i = 0, l = match.length; i < l; i++ ) {
		close = match[i];

		for ( j = 0; j < live.length; j++ ) {
			handleObj = live[j];

			if ( close.selector === handleObj.selector && (!namespace || namespace.test( handleObj.namespace )) && !close.elem.disabled ) {
				elem = close.elem;
				related = null;

				// Those two events require additional checking
				if ( handleObj.preType === "mouseenter" || handleObj.preType === "mouseleave" ) {
					event.type = handleObj.preType;
					related = jQuery( event.relatedTarget ).closest( handleObj.selector )[0];

					// Make sure not to accidentally match a child element with the same selector
					if ( related && jQuery.contains( elem, related ) ) {
						related = elem;
					}
				}

				if ( !related || related !== elem ) {
					elems.push({ elem: elem, handleObj: handleObj, level: close.level });
				}
			}
		}
	}

	for ( i = 0, l = elems.length; i < l; i++ ) {
		match = elems[i];

		if ( maxLevel && match.level > maxLevel ) {
			break;
		}

		event.currentTarget = match.elem;
		event.data = match.handleObj.data;
		event.handleObj = match.handleObj;

		ret = match.handleObj.origHandler.apply( match.elem, arguments );

		if ( ret === false || event.isPropagationStopped() ) {
			maxLevel = match.level;

			if ( ret === false ) {
				stop = false;
			}
			if ( event.isImmediatePropagationStopped() ) {
				break;
			}
		}
	}

	return stop;
}

function liveConvert( type, selector ) {
	return (type && type !== "*" ? type + "." : "") + selector.replace(rperiod, "`").replace(rspaces, "&");
}

jQuery.each( ("blur focus focusin focusout load resize scroll unload click dblclick " +
	"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " +
	"change select submit keydown keypress keyup error").split(" "), function( i, name ) {

	// Handle event binding
	jQuery.fn[ name ] = function( data, fn ) {
		if ( fn == null ) {
			fn = data;
			data = null;
		}

		return arguments.length > 0 ?
			this.bind( name, data, fn ) :
			this.trigger( name );
	};

	if ( jQuery.attrFn ) {
		jQuery.attrFn[ name ] = true;
	}
});



/*!
 * Sizzle CSS Selector Engine
 *  Copyright 2011, The Dojo Foundation
 *  Released under the MIT, BSD, and GPL Licenses.
 *  More information: http://sizzlejs.com/
 */
(function(){

var chunker = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,
	done = 0,
	toString = Object.prototype.toString,
	hasDuplicate = false,
	baseHasDuplicate = true,
	rBackslash = /\\/g,
	rNonWord = /\W/;

// Here we check if the JavaScript engine is using some sort of
// optimization where it does not always call our comparision
// function. If that is the case, discard the hasDuplicate value.
//   Thus far that includes Google Chrome.
[0, 0].sort(function() {
	baseHasDuplicate = false;
	return 0;
});

var Sizzle = function( selector, context, results, seed ) {
	results = results || [];
	context = context || document;

	var origContext = context;

	if ( context.nodeType !== 1 && context.nodeType !== 9 ) {
		return [];
	}
	
	if ( !selector || typeof selector !== "string" ) {
		return results;
	}

	var m, set, checkSet, extra, ret, cur, pop, i,
		prune = true,
		contextXML = Sizzle.isXML( context ),
		parts = [],
		soFar = selector;
	
	// Reset the position of the chunker regexp (start from head)
	do {
		chunker.exec( "" );
		m = chunker.exec( soFar );

		if ( m ) {
			soFar = m[3];
		
			parts.push( m[1] );
		
			if ( m[2] ) {
				extra = m[3];
				break;
			}
		}
	} while ( m );

	if ( parts.length > 1 && origPOS.exec( selector ) ) {

		if ( parts.length === 2 && Expr.relative[ parts[0] ] ) {
			set = posProcess( parts[0] + parts[1], context );

		} else {
			set = Expr.relative[ parts[0] ] ?
				[ context ] :
				Sizzle( parts.shift(), context );

			while ( parts.length ) {
				selector = parts.shift();

				if ( Expr.relative[ selector ] ) {
					selector += parts.shift();
				}
				
				set = posProcess( selector, set );
			}
		}

	} else {
		// Take a shortcut and set the context if the root selector is an ID
		// (but not if it'll be faster if the inner selector is an ID)
		if ( !seed && parts.length > 1 && context.nodeType === 9 && !contextXML &&
				Expr.match.ID.test(parts[0]) && !Expr.match.ID.test(parts[parts.length - 1]) ) {

			ret = Sizzle.find( parts.shift(), context, contextXML );
			context = ret.expr ?
				Sizzle.filter( ret.expr, ret.set )[0] :
				ret.set[0];
		}

		if ( context ) {
			ret = seed ?
				{ expr: parts.pop(), set: makeArray(seed) } :
				Sizzle.find( parts.pop(), parts.length === 1 && (parts[0] === "~" || parts[0] === "+") && context.parentNode ? context.parentNode : context, contextXML );

			set = ret.expr ?
				Sizzle.filter( ret.expr, ret.set ) :
				ret.set;

			if ( parts.length > 0 ) {
				checkSet = makeArray( set );

			} else {
				prune = false;
			}

			while ( parts.length ) {
				cur = parts.pop();
				pop = cur;

				if ( !Expr.relative[ cur ] ) {
					cur = "";
				} else {
					pop = parts.pop();
				}

				if ( pop == null ) {
					pop = context;
				}

				Expr.relative[ cur ]( checkSet, pop, contextXML );
			}

		} else {
			checkSet = parts = [];
		}
	}

	if ( !checkSet ) {
		checkSet = set;
	}

	if ( !checkSet ) {
		Sizzle.error( cur || selector );
	}

	if ( toString.call(checkSet) === "[object Array]" ) {
		if ( !prune ) {
			results.push.apply( results, checkSet );

		} else if ( context && context.nodeType === 1 ) {
			for ( i = 0; checkSet[i] != null; i++ ) {
				if ( checkSet[i] && (checkSet[i] === true || checkSet[i].nodeType === 1 && Sizzle.contains(context, checkSet[i])) ) {
					results.push( set[i] );
				}
			}

		} else {
			for ( i = 0; checkSet[i] != null; i++ ) {
				if ( checkSet[i] && checkSet[i].nodeType === 1 ) {
					results.push( set[i] );
				}
			}
		}

	} else {
		makeArray( checkSet, results );
	}

	if ( extra ) {
		Sizzle( extra, origContext, results, seed );
		Sizzle.uniqueSort( results );
	}

	return results;
};

Sizzle.uniqueSort = function( results ) {
	if ( sortOrder ) {
		hasDuplicate = baseHasDuplicate;
		results.sort( sortOrder );

		if ( hasDuplicate ) {
			for ( var i = 1; i < results.length; i++ ) {
				if ( results[i] === results[ i - 1 ] ) {
					results.splice( i--, 1 );
				}
			}
		}
	}

	return results;
};

Sizzle.matches = function( expr, set ) {
	return Sizzle( expr, null, null, set );
};

Sizzle.matchesSelector = function( node, expr ) {
	return Sizzle( expr, null, null, [node] ).length > 0;
};

Sizzle.find = function( expr, context, isXML ) {
	var set;

	if ( !expr ) {
		return [];
	}

	for ( var i = 0, l = Expr.order.length; i < l; i++ ) {
		var match,
			type = Expr.order[i];
		
		if ( (match = Expr.leftMatch[ type ].exec( expr )) ) {
			var left = match[1];
			match.splice( 1, 1 );

			if ( left.substr( left.length - 1 ) !== "\\" ) {
				match[1] = (match[1] || "").replace( rBackslash, "" );
				set = Expr.find[ type ]( match, context, isXML );

				if ( set != null ) {
					expr = expr.replace( Expr.match[ type ], "" );
					break;
				}
			}
		}
	}

	if ( !set ) {
		set = typeof context.getElementsByTagName !== "undefined" ?
			context.getElementsByTagName( "*" ) :
			[];
	}

	return { set: set, expr: expr };
};

Sizzle.filter = function( expr, set, inplace, not ) {
	var match, anyFound,
		old = expr,
		result = [],
		curLoop = set,
		isXMLFilter = set && set[0] && Sizzle.isXML( set[0] );

	while ( expr && set.length ) {
		for ( var type in Expr.filter ) {
			if ( (match = Expr.leftMatch[ type ].exec( expr )) != null && match[2] ) {
				var found, item,
					filter = Expr.filter[ type ],
					left = match[1];

				anyFound = false;

				match.splice(1,1);

				if ( left.substr( left.length - 1 ) === "\\" ) {
					continue;
				}

				if ( curLoop === result ) {
					result = [];
				}

				if ( Expr.preFilter[ type ] ) {
					match = Expr.preFilter[ type ]( match, curLoop, inplace, result, not, isXMLFilter );

					if ( !match ) {
						anyFound = found = true;

					} else if ( match === true ) {
						continue;
					}
				}

				if ( match ) {
					for ( var i = 0; (item = curLoop[i]) != null; i++ ) {
						if ( item ) {
							found = filter( item, match, i, curLoop );
							var pass = not ^ !!found;

							if ( inplace && found != null ) {
								if ( pass ) {
									anyFound = true;

								} else {
									curLoop[i] = false;
								}

							} else if ( pass ) {
								result.push( item );
								anyFound = true;
							}
						}
					}
				}

				if ( found !== undefined ) {
					if ( !inplace ) {
						curLoop = result;
					}

					expr = expr.replace( Expr.match[ type ], "" );

					if ( !anyFound ) {
						return [];
					}

					break;
				}
			}
		}

		// Improper expression
		if ( expr === old ) {
			if ( anyFound == null ) {
				Sizzle.error( expr );

			} else {
				break;
			}
		}

		old = expr;
	}

	return curLoop;
};

Sizzle.error = function( msg ) {
	throw "Syntax error, unrecognized expression: " + msg;
};

var Expr = Sizzle.selectors = {
	order: [ "ID", "NAME", "TAG" ],

	match: {
		ID: /#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,
		CLASS: /\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,
		NAME: /\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,
		ATTR: /\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/,
		TAG: /^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,
		CHILD: /:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/,
		POS: /:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,
		PSEUDO: /:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/
	},

	leftMatch: {},

	attrMap: {
		"class": "className",
		"for": "htmlFor"
	},

	attrHandle: {
		href: function( elem ) {
			return elem.getAttribute( "href" );
		},
		type: function( elem ) {
			return elem.getAttribute( "type" );
		}
	},

	relative: {
		"+": function(checkSet, part){
			var isPartStr = typeof part === "string",
				isTag = isPartStr && !rNonWord.test( part ),
				isPartStrNotTag = isPartStr && !isTag;

			if ( isTag ) {
				part = part.toLowerCase();
			}

			for ( var i = 0, l = checkSet.length, elem; i < l; i++ ) {
				if ( (elem = checkSet[i]) ) {
					while ( (elem = elem.previousSibling) && elem.nodeType !== 1 ) {}

					checkSet[i] = isPartStrNotTag || elem && elem.nodeName.toLowerCase() === part ?
						elem || false :
						elem === part;
				}
			}

			if ( isPartStrNotTag ) {
				Sizzle.filter( part, checkSet, true );
			}
		},

		">": function( checkSet, part ) {
			var elem,
				isPartStr = typeof part === "string",
				i = 0,
				l = checkSet.length;

			if ( isPartStr && !rNonWord.test( part ) ) {
				part = part.toLowerCase();

				for ( ; i < l; i++ ) {
					elem = checkSet[i];

					if ( elem ) {
						var parent = elem.parentNode;
						checkSet[i] = parent.nodeName.toLowerCase() === part ? parent : false;
					}
				}

			} else {
				for ( ; i < l; i++ ) {
					elem = checkSet[i];

					if ( elem ) {
						checkSet[i] = isPartStr ?
							elem.parentNode :
							elem.parentNode === part;
					}
				}

				if ( isPartStr ) {
					Sizzle.filter( part, checkSet, true );
				}
			}
		},

		"": function(checkSet, part, isXML){
			var nodeCheck,
				doneName = done++,
				checkFn = dirCheck;

			if ( typeof part === "string" && !rNonWord.test( part ) ) {
				part = part.toLowerCase();
				nodeCheck = part;
				checkFn = dirNodeCheck;
			}

			checkFn( "parentNode", part, doneName, checkSet, nodeCheck, isXML );
		},

		"~": function( checkSet, part, isXML ) {
			var nodeCheck,
				doneName = done++,
				checkFn = dirCheck;

			if ( typeof part === "string" && !rNonWord.test( part ) ) {
				part = part.toLowerCase();
				nodeCheck = part;
				checkFn = dirNodeCheck;
			}

			checkFn( "previousSibling", part, doneName, checkSet, nodeCheck, isXML );
		}
	},

	find: {
		ID: function( match, context, isXML ) {
			if ( typeof context.getElementById !== "undefined" && !isXML ) {
				var m = context.getElementById(match[1]);
				// Check parentNode to catch when Blackberry 4.6 returns
				// nodes that are no longer in the document #6963
				return m && m.parentNode ? [m] : [];
			}
		},

		NAME: function( match, context ) {
			if ( typeof context.getElementsByName !== "undefined" ) {
				var ret = [],
					results = context.getElementsByName( match[1] );

				for ( var i = 0, l = results.length; i < l; i++ ) {
					if ( results[i].getAttribute("name") === match[1] ) {
						ret.push( results[i] );
					}
				}

				return ret.length === 0 ? null : ret;
			}
		},

		TAG: function( match, context ) {
			if ( typeof context.getElementsByTagName !== "undefined" ) {
				return context.getElementsByTagName( match[1] );
			}
		}
	},
	preFilter: {
		CLASS: function( match, curLoop, inplace, result, not, isXML ) {
			match = " " + match[1].replace( rBackslash, "" ) + " ";

			if ( isXML ) {
				return match;
			}

			for ( var i = 0, elem; (elem = curLoop[i]) != null; i++ ) {
				if ( elem ) {
					if ( not ^ (elem.className && (" " + elem.className + " ").replace(/[\t\n\r]/g, " ").indexOf(match) >= 0) ) {
						if ( !inplace ) {
							result.push( elem );
						}

					} else if ( inplace ) {
						curLoop[i] = false;
					}
				}
			}

			return false;
		},

		ID: function( match ) {
			return match[1].replace( rBackslash, "" );
		},

		TAG: function( match, curLoop ) {
			return match[1].replace( rBackslash, "" ).toLowerCase();
		},

		CHILD: function( match ) {
			if ( match[1] === "nth" ) {
				if ( !match[2] ) {
					Sizzle.error( match[0] );
				}

				match[2] = match[2].replace(/^\+|\s*/g, '');

				// parse equations like 'even', 'odd', '5', '2n', '3n+2', '4n-1', '-n+6'
				var test = /(-?)(\d*)(?:n([+\-]?\d*))?/.exec(
					match[2] === "even" && "2n" || match[2] === "odd" && "2n+1" ||
					!/\D/.test( match[2] ) && "0n+" + match[2] || match[2]);

				// calculate the numbers (first)n+(last) including if they are negative
				match[2] = (test[1] + (test[2] || 1)) - 0;
				match[3] = test[3] - 0;
			}
			else if ( match[2] ) {
				Sizzle.error( match[0] );
			}

			// TODO: Move to normal caching system
			match[0] = done++;

			return match;
		},

		ATTR: function( match, curLoop, inplace, result, not, isXML ) {
			var name = match[1] = match[1].replace( rBackslash, "" );
			
			if ( !isXML && Expr.attrMap[name] ) {
				match[1] = Expr.attrMap[name];
			}

			// Handle if an un-quoted value was used
			match[4] = ( match[4] || match[5] || "" ).replace( rBackslash, "" );

			if ( match[2] === "~=" ) {
				match[4] = " " + match[4] + " ";
			}

			return match;
		},

		PSEUDO: function( match, curLoop, inplace, result, not ) {
			if ( match[1] === "not" ) {
				// If we're dealing with a complex expression, or a simple one
				if ( ( chunker.exec(match[3]) || "" ).length > 1 || /^\w/.test(match[3]) ) {
					match[3] = Sizzle(match[3], null, null, curLoop);

				} else {
					var ret = Sizzle.filter(match[3], curLoop, inplace, true ^ not);

					if ( !inplace ) {
						result.push.apply( result, ret );
					}

					return false;
				}

			} else if ( Expr.match.POS.test( match[0] ) || Expr.match.CHILD.test( match[0] ) ) {
				return true;
			}
			
			return match;
		},

		POS: function( match ) {
			match.unshift( true );

			return match;
		}
	},
	
	filters: {
		enabled: function( elem ) {
			return elem.disabled === false && elem.type !== "hidden";
		},

		disabled: function( elem ) {
			return elem.disabled === true;
		},

		checked: function( elem ) {
			return elem.checked === true;
		},
		
		selected: function( elem ) {
			// Accessing this property makes selected-by-default
			// options in Safari work properly
			if ( elem.parentNode ) {
				elem.parentNode.selectedIndex;
			}
			
			return elem.selected === true;
		},

		parent: function( elem ) {
			return !!elem.firstChild;
		},

		empty: function( elem ) {
			return !elem.firstChild;
		},

		has: function( elem, i, match ) {
			return !!Sizzle( match[3], elem ).length;
		},

		header: function( elem ) {
			return (/h\d/i).test( elem.nodeName );
		},

		text: function( elem ) {
			var attr = elem.getAttribute( "type" ), type = elem.type;
			// IE6 and 7 will map elem.type to 'text' for new HTML5 types (search, etc) 
			// use getAttribute instead to test this case
			return elem.nodeName.toLowerCase() === "input" && "text" === type && ( attr === type || attr === null );
		},

		radio: function( elem ) {
			return elem.nodeName.toLowerCase() === "input" && "radio" === elem.type;
		},

		checkbox: function( elem ) {
			return elem.nodeName.toLowerCase() === "input" && "checkbox" === elem.type;
		},

		file: function( elem ) {
			return elem.nodeName.toLowerCase() === "input" && "file" === elem.type;
		},

		password: function( elem ) {
			return elem.nodeName.toLowerCase() === "input" && "password" === elem.type;
		},

		submit: function( elem ) {
			var name = elem.nodeName.toLowerCase();
			return (name === "input" || name === "button") && "submit" === elem.type;
		},

		image: function( elem ) {
			return elem.nodeName.toLowerCase() === "input" && "image" === elem.type;
		},

		reset: function( elem ) {
			var name = elem.nodeName.toLowerCase();
			return (name === "input" || name === "button") && "reset" === elem.type;
		},

		button: function( elem ) {
			var name = elem.nodeName.toLowerCase();
			return name === "input" && "button" === elem.type || name === "button";
		},

		input: function( elem ) {
			return (/input|select|textarea|button/i).test( elem.nodeName );
		},

		focus: function( elem ) {
			return elem === elem.ownerDocument.activeElement;
		}
	},
	setFilters: {
		first: function( elem, i ) {
			return i === 0;
		},

		last: function( elem, i, match, array ) {
			return i === array.length - 1;
		},

		even: function( elem, i ) {
			return i % 2 === 0;
		},

		odd: function( elem, i ) {
			return i % 2 === 1;
		},

		lt: function( elem, i, match ) {
			return i < match[3] - 0;
		},

		gt: function( elem, i, match ) {
			return i > match[3] - 0;
		},

		nth: function( elem, i, match ) {
			return match[3] - 0 === i;
		},

		eq: function( elem, i, match ) {
			return match[3] - 0 === i;
		}
	},
	filter: {
		PSEUDO: function( elem, match, i, array ) {
			var name = match[1],
				filter = Expr.filters[ name ];

			if ( filter ) {
				return filter( elem, i, match, array );

			} else if ( name === "contains" ) {
				return (elem.textContent || elem.innerText || Sizzle.getText([ elem ]) || "").indexOf(match[3]) >= 0;

			} else if ( name === "not" ) {
				var not = match[3];

				for ( var j = 0, l = not.length; j < l; j++ ) {
					if ( not[j] === elem ) {
						return false;
					}
				}

				return true;

			} else {
				Sizzle.error( name );
			}
		},

		CHILD: function( elem, match ) {
			var type = match[1],
				node = elem;

			switch ( type ) {
				case "only":
				case "first":
					while ( (node = node.previousSibling) )	 {
						if ( node.nodeType === 1 ) { 
							return false; 
						}
					}

					if ( type === "first" ) { 
						return true; 
					}

					node = elem;

				case "last":
					while ( (node = node.nextSibling) )	 {
						if ( node.nodeType === 1 ) { 
							return false; 
						}
					}

					return true;

				case "nth":
					var first = match[2],
						last = match[3];

					if ( first === 1 && last === 0 ) {
						return true;
					}
					
					var doneName = match[0],
						parent = elem.parentNode;
	
					if ( parent && (parent.sizcache !== doneName || !elem.nodeIndex) ) {
						var count = 0;
						
						for ( node = parent.firstChild; node; node = node.nextSibling ) {
							if ( node.nodeType === 1 ) {
								node.nodeIndex = ++count;
							}
						} 

						parent.sizcache = doneName;
					}
					
					var diff = elem.nodeIndex - last;

					if ( first === 0 ) {
						return diff === 0;

					} else {
						return ( diff % first === 0 && diff / first >= 0 );
					}
			}
		},

		ID: function( elem, match ) {
			return elem.nodeType === 1 && elem.getAttribute("id") === match;
		},

		TAG: function( elem, match ) {
			return (match === "*" && elem.nodeType === 1) || elem.nodeName.toLowerCase() === match;
		},
		
		CLASS: function( elem, match ) {
			return (" " + (elem.className || elem.getAttribute("class")) + " ")
				.indexOf( match ) > -1;
		},

		ATTR: function( elem, match ) {
			var name = match[1],
				result = Expr.attrHandle[ name ] ?
					Expr.attrHandle[ name ]( elem ) :
					elem[ name ] != null ?
						elem[ name ] :
						elem.getAttribute( name ),
				value = result + "",
				type = match[2],
				check = match[4];

			return result == null ?
				type === "!=" :
				type === "=" ?
				value === check :
				type === "*=" ?
				value.indexOf(check) >= 0 :
				type === "~=" ?
				(" " + value + " ").indexOf(check) >= 0 :
				!check ?
				value && result !== false :
				type === "!=" ?
				value !== check :
				type === "^=" ?
				value.indexOf(check) === 0 :
				type === "$=" ?
				value.substr(value.length - check.length) === check :
				type === "|=" ?
				value === check || value.substr(0, check.length + 1) === check + "-" :
				false;
		},

		POS: function( elem, match, i, array ) {
			var name = match[2],
				filter = Expr.setFilters[ name ];

			if ( filter ) {
				return filter( elem, i, match, array );
			}
		}
	}
};

var origPOS = Expr.match.POS,
	fescape = function(all, num){
		return "\\" + (num - 0 + 1);
	};

for ( var type in Expr.match ) {
	Expr.match[ type ] = new RegExp( Expr.match[ type ].source + (/(?![^\[]*\])(?![^\(]*\))/.source) );
	Expr.leftMatch[ type ] = new RegExp( /(^(?:.|\r|\n)*?)/.source + Expr.match[ type ].source.replace(/\\(\d+)/g, fescape) );
}

var makeArray = function( array, results ) {
	array = Array.prototype.slice.call( array, 0 );

	if ( results ) {
		results.push.apply( results, array );
		return results;
	}
	
	return array;
};

// Perform a simple check to determine if the browser is capable of
// converting a NodeList to an array using builtin methods.
// Also verifies that the returned array holds DOM nodes
// (which is not the case in the Blackberry browser)
try {
	Array.prototype.slice.call( document.documentElement.childNodes, 0 )[0].nodeType;

// Provide a fallback method if it does not work
} catch( e ) {
	makeArray = function( array, results ) {
		var i = 0,
			ret = results || [];

		if ( toString.call(array) === "[object Array]" ) {
			Array.prototype.push.apply( ret, array );

		} else {
			if ( typeof array.length === "number" ) {
				for ( var l = array.length; i < l; i++ ) {
					ret.push( array[i] );
				}

			} else {
				for ( ; array[i]; i++ ) {
					ret.push( array[i] );
				}
			}
		}

		return ret;
	};
}

var sortOrder, siblingCheck;

if ( document.documentElement.compareDocumentPosition ) {
	sortOrder = function( a, b ) {
		if ( a === b ) {
			hasDuplicate = true;
			return 0;
		}

		if ( !a.compareDocumentPosition || !b.compareDocumentPosition ) {
			return a.compareDocumentPosition ? -1 : 1;
		}

		return a.compareDocumentPosition(b) & 4 ? -1 : 1;
	};

} else {
	sortOrder = function( a, b ) {
		// The nodes are identical, we can exit early
		if ( a === b ) {
			hasDuplicate = true;
			return 0;

		// Fallback to using sourceIndex (in IE) if it's available on both nodes
		} else if ( a.sourceIndex && b.sourceIndex ) {
			return a.sourceIndex - b.sourceIndex;
		}

		var al, bl,
			ap = [],
			bp = [],
			aup = a.parentNode,
			bup = b.parentNode,
			cur = aup;

		// If the nodes are siblings (or identical) we can do a quick check
		if ( aup === bup ) {
			return siblingCheck( a, b );

		// If no parents were found then the nodes are disconnected
		} else if ( !aup ) {
			return -1;

		} else if ( !bup ) {
			return 1;
		}

		// Otherwise they're somewhere else in the tree so we need
		// to build up a full list of the parentNodes for comparison
		while ( cur ) {
			ap.unshift( cur );
			cur = cur.parentNode;
		}

		cur = bup;

		while ( cur ) {
			bp.unshift( cur );
			cur = cur.parentNode;
		}

		al = ap.length;
		bl = bp.length;

		// Start walking down the tree looking for a discrepancy
		for ( var i = 0; i < al && i < bl; i++ ) {
			if ( ap[i] !== bp[i] ) {
				return siblingCheck( ap[i], bp[i] );
			}
		}

		// We ended someplace up the tree so do a sibling check
		return i === al ?
			siblingCheck( a, bp[i], -1 ) :
			siblingCheck( ap[i], b, 1 );
	};

	siblingCheck = function( a, b, ret ) {
		if ( a === b ) {
			return ret;
		}

		var cur = a.nextSibling;

		while ( cur ) {
			if ( cur === b ) {
				return -1;
			}

			cur = cur.nextSibling;
		}

		return 1;
	};
}

// Utility function for retreiving the text value of an array of DOM nodes
Sizzle.getText = function( elems ) {
	var ret = "", elem;

	for ( var i = 0; elems[i]; i++ ) {
		elem = elems[i];

		// Get the text from text nodes and CDATA nodes
		if ( elem.nodeType === 3 || elem.nodeType === 4 ) {
			ret += elem.nodeValue;

		// Traverse everything else, except comment nodes
		} else if ( elem.nodeType !== 8 ) {
			ret += Sizzle.getText( elem.childNodes );
		}
	}

	return ret;
};

// Check to see if the browser returns elements by name when
// querying by getElementById (and provide a workaround)
(function(){
	// We're going to inject a fake input element with a specified name
	var form = document.createElement("div"),
		id = "script" + (new Date()).getTime(),
		root = document.documentElement;

	form.innerHTML = "<a name='" + id + "'/>";

	// Inject it into the root element, check its status, and remove it quickly
	root.insertBefore( form, root.firstChild );

	// The workaround has to do additional checks after a getElementById
	// Which slows things down for other browsers (hence the branching)
	if ( document.getElementById( id ) ) {
		Expr.find.ID = function( match, context, isXML ) {
			if ( typeof context.getElementById !== "undefined" && !isXML ) {
				var m = context.getElementById(match[1]);

				return m ?
					m.id === match[1] || typeof m.getAttributeNode !== "undefined" && m.getAttributeNode("id").nodeValue === match[1] ?
						[m] :
						undefined :
					[];
			}
		};

		Expr.filter.ID = function( elem, match ) {
			var node = typeof elem.getAttributeNode !== "undefined" && elem.getAttributeNode("id");

			return elem.nodeType === 1 && node && node.nodeValue === match;
		};
	}

	root.removeChild( form );

	// release memory in IE
	root = form = null;
})();

(function(){
	// Check to see if the browser returns only elements
	// when doing getElementsByTagName("*")

	// Create a fake element
	var div = document.createElement("div");
	div.appendChild( document.createComment("") );

	// Make sure no comments are found
	if ( div.getElementsByTagName("*").length > 0 ) {
		Expr.find.TAG = function( match, context ) {
			var results = context.getElementsByTagName( match[1] );

			// Filter out possible comments
			if ( match[1] === "*" ) {
				var tmp = [];

				for ( var i = 0; results[i]; i++ ) {
					if ( results[i].nodeType === 1 ) {
						tmp.push( results[i] );
					}
				}

				results = tmp;
			}

			return results;
		};
	}

	// Check to see if an attribute returns normalized href attributes
	div.innerHTML = "<a href='#'></a>";

	if ( div.firstChild && typeof div.firstChild.getAttribute !== "undefined" &&
			div.firstChild.getAttribute("href") !== "#" ) {

		Expr.attrHandle.href = function( elem ) {
			return elem.getAttribute( "href", 2 );
		};
	}

	// release memory in IE
	div = null;
})();

if ( document.querySelectorAll ) {
	(function(){
		var oldSizzle = Sizzle,
			div = document.createElement("div"),
			id = "__sizzle__";

		div.innerHTML = "<p class='TEST'></p>";

		// Safari can't handle uppercase or unicode characters when
		// in quirks mode.
		if ( div.querySelectorAll && div.querySelectorAll(".TEST").length === 0 ) {
			return;
		}
	
		Sizzle = function( query, context, extra, seed ) {
			context = context || document;

			// Only use querySelectorAll on non-XML documents
			// (ID selectors don't work in non-HTML documents)
			if ( !seed && !Sizzle.isXML(context) ) {
				// See if we find a selector to speed up
				var match = /^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec( query );
				
				if ( match && (context.nodeType === 1 || context.nodeType === 9) ) {
					// Speed-up: Sizzle("TAG")
					if ( match[1] ) {
						return makeArray( context.getElementsByTagName( query ), extra );
					
					// Speed-up: Sizzle(".CLASS")
					} else if ( match[2] && Expr.find.CLASS && context.getElementsByClassName ) {
						return makeArray( context.getElementsByClassName( match[2] ), extra );
					}
				}
				
				if ( context.nodeType === 9 ) {
					// Speed-up: Sizzle("body")
					// The body element only exists once, optimize finding it
					if ( query === "body" && context.body ) {
						return makeArray( [ context.body ], extra );
						
					// Speed-up: Sizzle("#ID")
					} else if ( match && match[3] ) {
						var elem = context.getElementById( match[3] );

						// Check parentNode to catch when Blackberry 4.6 returns
						// nodes that are no longer in the document #6963
						if ( elem && elem.parentNode ) {
							// Handle the case where IE and Opera return items
							// by name instead of ID
							if ( elem.id === match[3] ) {
								return makeArray( [ elem ], extra );
							}
							
						} else {
							return makeArray( [], extra );
						}
					}
					
					try {
						return makeArray( context.querySelectorAll(query), extra );
					} catch(qsaError) {}

				// qSA works strangely on Element-rooted queries
				// We can work around this by specifying an extra ID on the root
				// and working up from there (Thanks to Andrew Dupont for the technique)
				// IE 8 doesn't work on object elements
				} else if ( context.nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) {
					var oldContext = context,
						old = context.getAttribute( "id" ),
						nid = old || id,
						hasParent = context.parentNode,
						relativeHierarchySelector = /^\s*[+~]/.test( query );

					if ( !old ) {
						context.setAttribute( "id", nid );
					} else {
						nid = nid.replace( /'/g, "\\$&" );
					}
					if ( relativeHierarchySelector && hasParent ) {
						context = context.parentNode;
					}

					try {
						if ( !relativeHierarchySelector || hasParent ) {
							return makeArray( context.querySelectorAll( "[id='" + nid + "'] " + query ), extra );
						}

					} catch(pseudoError) {
					} finally {
						if ( !old ) {
							oldContext.removeAttribute( "id" );
						}
					}
				}
			}
		
			return oldSizzle(query, context, extra, seed);
		};

		for ( var prop in oldSizzle ) {
			Sizzle[ prop ] = oldSizzle[ prop ];
		}

		// release memory in IE
		div = null;
	})();
}

(function(){
	var html = document.documentElement,
		matches = html.matchesSelector || html.mozMatchesSelector || html.webkitMatchesSelector || html.msMatchesSelector;

	if ( matches ) {
		// Check to see if it's possible to do matchesSelector
		// on a disconnected node (IE 9 fails this)
		var disconnectedMatch = !matches.call( document.createElement( "div" ), "div" ),
			pseudoWorks = false;

		try {
			// This should fail with an exception
			// Gecko does not error, returns false instead
			matches.call( document.documentElement, "[test!='']:sizzle" );
	
		} catch( pseudoError ) {
			pseudoWorks = true;
		}

		Sizzle.matchesSelector = function( node, expr ) {
			// Make sure that attribute selectors are quoted
			expr = expr.replace(/\=\s*([^'"\]]*)\s*\]/g, "='$1']");

			if ( !Sizzle.isXML( node ) ) {
				try { 
					if ( pseudoWorks || !Expr.match.PSEUDO.test( expr ) && !/!=/.test( expr ) ) {
						var ret = matches.call( node, expr );

						// IE 9's matchesSelector returns false on disconnected nodes
						if ( ret || !disconnectedMatch ||
								// As well, disconnected nodes are said to be in a document
								// fragment in IE 9, so check for that
								node.document && node.document.nodeType !== 11 ) {
							return ret;
						}
					}
				} catch(e) {}
			}

			return Sizzle(expr, null, null, [node]).length > 0;
		};
	}
})();

(function(){
	var div = document.createElement("div");

	div.innerHTML = "<div class='test e'></div><div class='test'></div>";

	// Opera can't find a second classname (in 9.6)
	// Also, make sure that getElementsByClassName actually exists
	if ( !div.getElementsByClassName || div.getElementsByClassName("e").length === 0 ) {
		return;
	}

	// Safari caches class attributes, doesn't catch changes (in 3.2)
	div.lastChild.className = "e";

	if ( div.getElementsByClassName("e").length === 1 ) {
		return;
	}
	
	Expr.order.splice(1, 0, "CLASS");
	Expr.find.CLASS = function( match, context, isXML ) {
		if ( typeof context.getElementsByClassName !== "undefined" && !isXML ) {
			return context.getElementsByClassName(match[1]);
		}
	};

	// release memory in IE
	div = null;
})();

function dirNodeCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {
	for ( var i = 0, l = checkSet.length; i < l; i++ ) {
		var elem = checkSet[i];

		if ( elem ) {
			var match = false;

			elem = elem[dir];

			while ( elem ) {
				if ( elem.sizcache === doneName ) {
					match = checkSet[elem.sizset];
					break;
				}

				if ( elem.nodeType === 1 && !isXML ){
					elem.sizcache = doneName;
					elem.sizset = i;
				}

				if ( elem.nodeName.toLowerCase() === cur ) {
					match = elem;
					break;
				}

				elem = elem[dir];
			}

			checkSet[i] = match;
		}
	}
}

function dirCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {
	for ( var i = 0, l = checkSet.length; i < l; i++ ) {
		var elem = checkSet[i];

		if ( elem ) {
			var match = false;
			
			elem = elem[dir];

			while ( elem ) {
				if ( elem.sizcache === doneName ) {
					match = checkSet[elem.sizset];
					break;
				}

				if ( elem.nodeType === 1 ) {
					if ( !isXML ) {
						elem.sizcache = doneName;
						elem.sizset = i;
					}

					if ( typeof cur !== "string" ) {
						if ( elem === cur ) {
							match = true;
							break;
						}

					} else if ( Sizzle.filter( cur, [elem] ).length > 0 ) {
						match = elem;
						break;
					}
				}

				elem = elem[dir];
			}

			checkSet[i] = match;
		}
	}
}

if ( document.documentElement.contains ) {
	Sizzle.contains = function( a, b ) {
		return a !== b && (a.contains ? a.contains(b) : true);
	};

} else if ( document.documentElement.compareDocumentPosition ) {
	Sizzle.contains = function( a, b ) {
		return !!(a.compareDocumentPosition(b) & 16);
	};

} else {
	Sizzle.contains = function() {
		return false;
	};
}

Sizzle.isXML = function( elem ) {
	// documentElement is verified for cases where it doesn't yet exist
	// (such as loading iframes in IE - #4833) 
	var documentElement = (elem ? elem.ownerDocument || elem : 0).documentElement;

	return documentElement ? documentElement.nodeName !== "HTML" : false;
};

var posProcess = function( selector, context ) {
	var match,
		tmpSet = [],
		later = "",
		root = context.nodeType ? [context] : context;

	// Position selectors must be done after the filter
	// And so must :not(positional) so we move all PSEUDOs to the end
	while ( (match = Expr.match.PSEUDO.exec( selector )) ) {
		later += match[0];
		selector = selector.replace( Expr.match.PSEUDO, "" );
	}

	selector = Expr.relative[selector] ? selector + "*" : selector;

	for ( var i = 0, l = root.length; i < l; i++ ) {
		Sizzle( selector, root[i], tmpSet );
	}

	return Sizzle.filter( later, tmpSet );
};

// EXPOSE
jQuery.find = Sizzle;
jQuery.expr = Sizzle.selectors;
jQuery.expr[":"] = jQuery.expr.filters;
jQuery.unique = Sizzle.uniqueSort;
jQuery.text = Sizzle.getText;
jQuery.isXMLDoc = Sizzle.isXML;
jQuery.contains = Sizzle.contains;


})();


var runtil = /Until$/,
	rparentsprev = /^(?:parents|prevUntil|prevAll)/,
	// Note: This RegExp should be improved, or likely pulled from Sizzle
	rmultiselector = /,/,
	isSimple = /^.[^:#\[\.,]*$/,
	slice = Array.prototype.slice,
	POS = jQuery.expr.match.POS,
	// methods guaranteed to produce a unique set when starting from a unique set
	guaranteedUnique = {
		children: true,
		contents: true,
		next: true,
		prev: true
	};

jQuery.fn.extend({
	find: function( selector ) {
		var self = this,
			i, l;

		if ( typeof selector !== "string" ) {
			return jQuery( selector ).filter(function() {
				for ( i = 0, l = self.length; i < l; i++ ) {
					if ( jQuery.contains( self[ i ], this ) ) {
						return true;
					}
				}
			});
		}

		var ret = this.pushStack( "", "find", selector ),
			length, n, r;

		for ( i = 0, l = this.length; i < l; i++ ) {
			length = ret.length;
			jQuery.find( selector, this[i], ret );

			if ( i > 0 ) {
				// Make sure that the results are unique
				for ( n = length; n < ret.length; n++ ) {
					for ( r = 0; r < length; r++ ) {
						if ( ret[r] === ret[n] ) {
							ret.splice(n--, 1);
							break;
						}
					}
				}
			}
		}

		return ret;
	},

	has: function( target ) {
		var targets = jQuery( target );
		return this.filter(function() {
			for ( var i = 0, l = targets.length; i < l; i++ ) {
				if ( jQuery.contains( this, targets[i] ) ) {
					return true;
				}
			}
		});
	},

	not: function( selector ) {
		return this.pushStack( winnow(this, selector, false), "not", selector);
	},

	filter: function( selector ) {
		return this.pushStack( winnow(this, selector, true), "filter", selector );
	},

	is: function( selector ) {
		return !!selector && ( typeof selector === "string" ?
			jQuery.filter( selector, this ).length > 0 :
			this.filter( selector ).length > 0 );
	},

	closest: function( selectors, context ) {
		var ret = [], i, l, cur = this[0];
		
		// Array
		if ( jQuery.isArray( selectors ) ) {
			var match, selector,
				matches = {},
				level = 1;

			if ( cur && selectors.length ) {
				for ( i = 0, l = selectors.length; i < l; i++ ) {
					selector = selectors[i];

					if ( !matches[ selector ] ) {
						matches[ selector ] = POS.test( selector ) ?
							jQuery( selector, context || this.context ) :
							selector;
					}
				}

				while ( cur && cur.ownerDocument && cur !== context ) {
					for ( selector in matches ) {
						match = matches[ selector ];

						if ( match.jquery ? match.index( cur ) > -1 : jQuery( cur ).is( match ) ) {
							ret.push({ selector: selector, elem: cur, level: level });
						}
					}

					cur = cur.parentNode;
					level++;
				}
			}

			return ret;
		}

		// String
		var pos = POS.test( selectors ) || typeof selectors !== "string" ?
				jQuery( selectors, context || this.context ) :
				0;

		for ( i = 0, l = this.length; i < l; i++ ) {
			cur = this[i];

			while ( cur ) {
				if ( pos ? pos.index(cur) > -1 : jQuery.find.matchesSelector(cur, selectors) ) {
					ret.push( cur );
					break;

				} else {
					cur = cur.parentNode;
					if ( !cur || !cur.ownerDocument || cur === context || cur.nodeType === 11 ) {
						break;
					}
				}
			}
		}

		ret = ret.length > 1 ? jQuery.unique( ret ) : ret;

		return this.pushStack( ret, "closest", selectors );
	},

	// Determine the position of an element within
	// the matched set of elements
	index: function( elem ) {
		if ( !elem || typeof elem === "string" ) {
			return jQuery.inArray( this[0],
				// If it receives a string, the selector is used
				// If it receives nothing, the siblings are used
				elem ? jQuery( elem ) : this.parent().children() );
		}
		// Locate the position of the desired element
		return jQuery.inArray(
			// If it receives a jQuery object, the first element is used
			elem.jquery ? elem[0] : elem, this );
	},

	add: function( selector, context ) {
		var set = typeof selector === "string" ?
				jQuery( selector, context ) :
				jQuery.makeArray( selector && selector.nodeType ? [ selector ] : selector ),
			all = jQuery.merge( this.get(), set );

		return this.pushStack( isDisconnected( set[0] ) || isDisconnected( all[0] ) ?
			all :
			jQuery.unique( all ) );
	},

	andSelf: function() {
		return this.add( this.prevObject );
	}
});

// A painfully simple check to see if an element is disconnected
// from a document (should be improved, where feasible).
function isDisconnected( node ) {
	return !node || !node.parentNode || node.parentNode.nodeType === 11;
}

jQuery.each({
	parent: function( elem ) {
		var parent = elem.parentNode;
		return parent && parent.nodeType !== 11 ? parent : null;
	},
	parents: function( elem ) {
		return jQuery.dir( elem, "parentNode" );
	},
	parentsUntil: function( elem, i, until ) {
		return jQuery.dir( elem, "parentNode", until );
	},
	next: function( elem ) {
		return jQuery.nth( elem, 2, "nextSibling" );
	},
	prev: function( elem ) {
		return jQuery.nth( elem, 2, "previousSibling" );
	},
	nextAll: function( elem ) {
		return jQuery.dir( elem, "nextSibling" );
	},
	prevAll: function( elem ) {
		return jQuery.dir( elem, "previousSibling" );
	},
	nextUntil: function( elem, i, until ) {
		return jQuery.dir( elem, "nextSibling", until );
	},
	prevUntil: function( elem, i, until ) {
		return jQuery.dir( elem, "previousSibling", until );
	},
	siblings: function( elem ) {
		return jQuery.sibling( elem.parentNode.firstChild, elem );
	},
	children: function( elem ) {
		return jQuery.sibling( elem.firstChild );
	},
	contents: function( elem ) {
		return jQuery.nodeName( elem, "iframe" ) ?
			elem.contentDocument || elem.contentWindow.document :
			jQuery.makeArray( elem.childNodes );
	}
}, function( name, fn ) {
	jQuery.fn[ name ] = function( until, selector ) {
		var ret = jQuery.map( this, fn, until ),
			// The variable 'args' was introduced in
			// https://github.com/jquery/jquery/commit/52a0238
			// to work around a bug in Chrome 10 (Dev) and should be removed when the bug is fixed.
			// http://code.google.com/p/v8/issues/detail?id=1050
			args = slice.call(arguments);

		if ( !runtil.test( name ) ) {
			selector = until;
		}

		if ( selector && typeof selector === "string" ) {
			ret = jQuery.filter( selector, ret );
		}

		ret = this.length > 1 && !guaranteedUnique[ name ] ? jQuery.unique( ret ) : ret;

		if ( (this.length > 1 || rmultiselector.test( selector )) && rparentsprev.test( name ) ) {
			ret = ret.reverse();
		}

		return this.pushStack( ret, name, args.join(",") );
	};
});

jQuery.extend({
	filter: function( expr, elems, not ) {
		if ( not ) {
			expr = ":not(" + expr + ")";
		}

		return elems.length === 1 ?
			jQuery.find.matchesSelector(elems[0], expr) ? [ elems[0] ] : [] :
			jQuery.find.matches(expr, elems);
	},

	dir: function( elem, dir, until ) {
		var matched = [],
			cur = elem[ dir ];

		while ( cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery( cur ).is( until )) ) {
			if ( cur.nodeType === 1 ) {
				matched.push( cur );
			}
			cur = cur[dir];
		}
		return matched;
	},

	nth: function( cur, result, dir, elem ) {
		result = result || 1;
		var num = 0;

		for ( ; cur; cur = cur[dir] ) {
			if ( cur.nodeType === 1 && ++num === result ) {
				break;
			}
		}

		return cur;
	},

	sibling: function( n, elem ) {
		var r = [];

		for ( ; n; n = n.nextSibling ) {
			if ( n.nodeType === 1 && n !== elem ) {
				r.push( n );
			}
		}

		return r;
	}
});

// Implement the identical functionality for filter and not
function winnow( elements, qualifier, keep ) {

	// Can't pass null or undefined to indexOf in Firefox 4
	// Set to 0 to skip string check
	qualifier = qualifier || 0;

	if ( jQuery.isFunction( qualifier ) ) {
		return jQuery.grep(elements, function( elem, i ) {
			var retVal = !!qualifier.call( elem, i, elem );
			return retVal === keep;
		});

	} else if ( qualifier.nodeType ) {
		return jQuery.grep(elements, function( elem, i ) {
			return (elem === qualifier) === keep;
		});

	} else if ( typeof qualifier === "string" ) {
		var filtered = jQuery.grep(elements, function( elem ) {
			return elem.nodeType === 1;
		});

		if ( isSimple.test( qualifier ) ) {
			return jQuery.filter(qualifier, filtered, !keep);
		} else {
			qualifier = jQuery.filter( qualifier, filtered );
		}
	}

	return jQuery.grep(elements, function( elem, i ) {
		return (jQuery.inArray( elem, qualifier ) >= 0) === keep;
	});
}




var rinlinejQuery = / jQuery\d+="(?:\d+|null)"/g,
	rleadingWhitespace = /^\s+/,
	rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,
	rtagName = /<([\w:]+)/,
	rtbody = /<tbody/i,
	rhtml = /<|&#?\w+;/,
	rnocache = /<(?:script|object|embed|option|style)/i,
	// checked="checked" or checked
	rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i,
	rscriptType = /\/(java|ecma)script/i,
	rcleanScript = /^\s*<!(?:\[CDATA\[|\-\-)/,
	wrapMap = {
		option: [ 1, "<select multiple='multiple'>", "</select>" ],
		legend: [ 1, "<fieldset>", "</fieldset>" ],
		thead: [ 1, "<table>", "</table>" ],
		tr: [ 2, "<table><tbody>", "</tbody></table>" ],
		td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ],
		col: [ 2, "<table><tbody></tbody><colgroup>", "</colgroup></table>" ],
		area: [ 1, "<map>", "</map>" ],
		_default: [ 0, "", "" ]
	};

wrapMap.optgroup = wrapMap.option;
wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;
wrapMap.th = wrapMap.td;

// IE can't serialize <link> and <script> tags normally
if ( !jQuery.support.htmlSerialize ) {
	wrapMap._default = [ 1, "div<div>", "</div>" ];
}

jQuery.fn.extend({
	text: function( text ) {
		if ( jQuery.isFunction(text) ) {
			return this.each(function(i) {
				var self = jQuery( this );

				self.text( text.call(this, i, self.text()) );
			});
		}

		if ( typeof text !== "object" && text !== undefined ) {
			return this.empty().append( (this[0] && this[0].ownerDocument || document).createTextNode( text ) );
		}

		return jQuery.text( this );
	},

	wrapAll: function( html ) {
		if ( jQuery.isFunction( html ) ) {
			return this.each(function(i) {
				jQuery(this).wrapAll( html.call(this, i) );
			});
		}

		if ( this[0] ) {
			// The elements to wrap the target around
			var wrap = jQuery( html, this[0].ownerDocument ).eq(0).clone(true);

			if ( this[0].parentNode ) {
				wrap.insertBefore( this[0] );
			}

			wrap.map(function() {
				var elem = this;

				while ( elem.firstChild && elem.firstChild.nodeType === 1 ) {
					elem = elem.firstChild;
				}

				return elem;
			}).append( this );
		}

		return this;
	},

	wrapInner: function( html ) {
		if ( jQuery.isFunction( html ) ) {
			return this.each(function(i) {
				jQuery(this).wrapInner( html.call(this, i) );
			});
		}

		return this.each(function() {
			var self = jQuery( this ),
				contents = self.contents();

			if ( contents.length ) {
				contents.wrapAll( html );

			} else {
				self.append( html );
			}
		});
	},

	wrap: function( html ) {
		return this.each(function() {
			jQuery( this ).wrapAll( html );
		});
	},

	unwrap: function() {
		return this.parent().each(function() {
			if ( !jQuery.nodeName( this, "body" ) ) {
				jQuery( this ).replaceWith( this.childNodes );
			}
		}).end();
	},

	append: function() {
		return this.domManip(arguments, true, function( elem ) {
			if ( this.nodeType === 1 ) {
				this.appendChild( elem );
			}
		});
	},

	prepend: function() {
		return this.domManip(arguments, true, function( elem ) {
			if ( this.nodeType === 1 ) {
				this.insertBefore( elem, this.firstChild );
			}
		});
	},

	before: function() {
		if ( this[0] && this[0].parentNode ) {
			return this.domManip(arguments, false, function( elem ) {
				this.parentNode.insertBefore( elem, this );
			});
		} else if ( arguments.length ) {
			var set = jQuery(arguments[0]);
			set.push.apply( set, this.toArray() );
			return this.pushStack( set, "before", arguments );
		}
	},

	after: function() {
		if ( this[0] && this[0].parentNode ) {
			return this.domManip(arguments, false, function( elem ) {
				this.parentNode.insertBefore( elem, this.nextSibling );
			});
		} else if ( arguments.length ) {
			var set = this.pushStack( this, "after", arguments );
			set.push.apply( set, jQuery(arguments[0]).toArray() );
			return set;
		}
	},

	// keepData is for internal use only--do not document
	remove: function( selector, keepData ) {
		for ( var i = 0, elem; (elem = this[i]) != null; i++ ) {
			if ( !selector || jQuery.filter( selector, [ elem ] ).length ) {
				if ( !keepData && elem.nodeType === 1 ) {
					jQuery.cleanData( elem.getElementsByTagName("*") );
					jQuery.cleanData( [ elem ] );
				}

				if ( elem.parentNode ) {
					elem.parentNode.removeChild( elem );
				}
			}
		}

		return this;
	},

	empty: function() {
		for ( var i = 0, elem; (elem = this[i]) != null; i++ ) {
			// Remove element nodes and prevent memory leaks
			if ( elem.nodeType === 1 ) {
				jQuery.cleanData( elem.getElementsByTagName("*") );
			}

			// Remove any remaining nodes
			while ( elem.firstChild ) {
				elem.removeChild( elem.firstChild );
			}
		}

		return this;
	},

	clone: function( dataAndEvents, deepDataAndEvents ) {
		dataAndEvents = dataAndEvents == null ? false : dataAndEvents;
		deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;

		return this.map( function () {
			return jQuery.clone( this, dataAndEvents, deepDataAndEvents );
		});
	},

	html: function( value ) {
		if ( value === undefined ) {
			return this[0] && this[0].nodeType === 1 ?
				this[0].innerHTML.replace(rinlinejQuery, "") :
				null;

		// See if we can take a shortcut and just use innerHTML
		} else if ( typeof value === "string" && !rnocache.test( value ) &&
			(jQuery.support.leadingWhitespace || !rleadingWhitespace.test( value )) &&
			!wrapMap[ (rtagName.exec( value ) || ["", ""])[1].toLowerCase() ] ) {

			value = value.replace(rxhtmlTag, "<$1></$2>");

			try {
				for ( var i = 0, l = this.length; i < l; i++ ) {
					// Remove element nodes and prevent memory leaks
					if ( this[i].nodeType === 1 ) {
						jQuery.cleanData( this[i].getElementsByTagName("*") );
						this[i].innerHTML = value;
					}
				}

			// If using innerHTML throws an exception, use the fallback method
			} catch(e) {
				this.empty().append( value );
			}

		} else if ( jQuery.isFunction( value ) ) {
			this.each(function(i){
				var self = jQuery( this );

				self.html( value.call(this, i, self.html()) );
			});

		} else {
			this.empty().append( value );
		}

		return this;
	},

	replaceWith: function( value ) {
		if ( this[0] && this[0].parentNode ) {
			// Make sure that the elements are removed from the DOM before they are inserted
			// this can help fix replacing a parent with child elements
			if ( jQuery.isFunction( value ) ) {
				return this.each(function(i) {
					var self = jQuery(this), old = self.html();
					self.replaceWith( value.call( this, i, old ) );
				});
			}

			if ( typeof value !== "string" ) {
				value = jQuery( value ).detach();
			}

			return this.each(function() {
				var next = this.nextSibling,
					parent = this.parentNode;

				jQuery( this ).remove();

				if ( next ) {
					jQuery(next).before( value );
				} else {
					jQuery(parent).append( value );
				}
			});
		} else {
			return this.length ?
				this.pushStack( jQuery(jQuery.isFunction(value) ? value() : value), "replaceWith", value ) :
				this;
		}
	},

	detach: function( selector ) {
		return this.remove( selector, true );
	},

	domManip: function( args, table, callback ) {
		var results, first, fragment, parent,
			value = args[0],
			scripts = [];

		// We can't cloneNode fragments that contain checked, in WebKit
		if ( !jQuery.support.checkClone && arguments.length === 3 && typeof value === "string" && rchecked.test( value ) ) {
			return this.each(function() {
				jQuery(this).domManip( args, table, callback, true );
			});
		}

		if ( jQuery.isFunction(value) ) {
			return this.each(function(i) {
				var self = jQuery(this);
				args[0] = value.call(this, i, table ? self.html() : undefined);
				self.domManip( args, table, callback );
			});
		}

		if ( this[0] ) {
			parent = value && value.parentNode;

			// If we're in a fragment, just use that instead of building a new one
			if ( jQuery.support.parentNode && parent && parent.nodeType === 11 && parent.childNodes.length === this.length ) {
				results = { fragment: parent };

			} else {
				results = jQuery.buildFragment( args, this, scripts );
			}

			fragment = results.fragment;

			if ( fragment.childNodes.length === 1 ) {
				first = fragment = fragment.firstChild;
			} else {
				first = fragment.firstChild;
			}

			if ( first ) {
				table = table && jQuery.nodeName( first, "tr" );

				for ( var i = 0, l = this.length, lastIndex = l - 1; i < l; i++ ) {
					callback.call(
						table ?
							root(this[i], first) :
							this[i],
						// Make sure that we do not leak memory by inadvertently discarding
						// the original fragment (which might have attached data) instead of
						// using it; in addition, use the original fragment object for the last
						// item instead of first because it can end up being emptied incorrectly
						// in certain situations (Bug #8070).
						// Fragments from the fragment cache must always be cloned and never used
						// in place.
						results.cacheable || (l > 1 && i < lastIndex) ?
							jQuery.clone( fragment, true, true ) :
							fragment
					);
				}
			}

			if ( scripts.length ) {
				jQuery.each( scripts, evalScript );
			}
		}

		return this;
	}
});

function root( elem, cur ) {
	return jQuery.nodeName(elem, "table") ?
		(elem.getElementsByTagName("tbody")[0] ||
		elem.appendChild(elem.ownerDocument.createElement("tbody"))) :
		elem;
}

function cloneCopyEvent( src, dest ) {

	if ( dest.nodeType !== 1 || !jQuery.hasData( src ) ) {
		return;
	}

	var internalKey = jQuery.expando,
		oldData = jQuery.data( src ),
		curData = jQuery.data( dest, oldData );

	// Switch to use the internal data object, if it exists, for the next
	// stage of data copying
	if ( (oldData = oldData[ internalKey ]) ) {
		var events = oldData.events;
				curData = curData[ internalKey ] = jQuery.extend({}, oldData);

		if ( events ) {
			delete curData.handle;
			curData.events = {};

			for ( var type in events ) {
				for ( var i = 0, l = events[ type ].length; i < l; i++ ) {
					jQuery.event.add( dest, type + ( events[ type ][ i ].namespace ? "." : "" ) + events[ type ][ i ].namespace, events[ type ][ i ], events[ type ][ i ].data );
				}
			}
		}
	}
}

function cloneFixAttributes( src, dest ) {
	var nodeName;

	// We do not need to do anything for non-Elements
	if ( dest.nodeType !== 1 ) {
		return;
	}

	// clearAttributes removes the attributes, which we don't want,
	// but also removes the attachEvent events, which we *do* want
	if ( dest.clearAttributes ) {
		dest.clearAttributes();
	}

	// mergeAttributes, in contrast, only merges back on the
	// original attributes, not the events
	if ( dest.mergeAttributes ) {
		dest.mergeAttributes( src );
	}

	nodeName = dest.nodeName.toLowerCase();

	// IE6-8 fail to clone children inside object elements that use
	// the proprietary classid attribute value (rather than the type
	// attribute) to identify the type of content to display
	if ( nodeName === "object" ) {
		dest.outerHTML = src.outerHTML;

	} else if ( nodeName === "input" && (src.type === "checkbox" || src.type === "radio") ) {
		// IE6-8 fails to persist the checked state of a cloned checkbox
		// or radio button. Worse, IE6-7 fail to give the cloned element
		// a checked appearance if the defaultChecked value isn't also set
		if ( src.checked ) {
			dest.defaultChecked = dest.checked = src.checked;
		}

		// IE6-7 get confused and end up setting the value of a cloned
		// checkbox/radio button to an empty string instead of "on"
		if ( dest.value !== src.value ) {
			dest.value = src.value;
		}

	// IE6-8 fails to return the selected option to the default selected
	// state when cloning options
	} else if ( nodeName === "option" ) {
		dest.selected = src.defaultSelected;

	// IE6-8 fails to set the defaultValue to the correct value when
	// cloning other types of input fields
	} else if ( nodeName === "input" || nodeName === "textarea" ) {
		dest.defaultValue = src.defaultValue;
	}

	// Event data gets referenced instead of copied if the expando
	// gets copied too
	dest.removeAttribute( jQuery.expando );
}

jQuery.buildFragment = function( args, nodes, scripts ) {
	var fragment, cacheable, cacheresults,
		doc = (nodes && nodes[0] ? nodes[0].ownerDocument || nodes[0] : document);

	// Only cache "small" (1/2 KB) HTML strings that are associated with the main document
	// Cloning options loses the selected state, so don't cache them
	// IE 6 doesn't like it when you put <object> or <embed> elements in a fragment
	// Also, WebKit does not clone 'checked' attributes on cloneNode, so don't cache
	if ( args.length === 1 && typeof args[0] === "string" && args[0].length < 512 && doc === document &&
		args[0].charAt(0) === "<" && !rnocache.test( args[0] ) && (jQuery.support.checkClone || !rchecked.test( args[0] )) ) {

		cacheable = true;

		cacheresults = jQuery.fragments[ args[0] ];
		if ( cacheresults && cacheresults !== 1 ) {
			fragment = cacheresults;
		}
	}

	if ( !fragment ) {
		fragment = doc.createDocumentFragment();
		jQuery.clean( args, doc, fragment, scripts );
	}

	if ( cacheable ) {
		jQuery.fragments[ args[0] ] = cacheresults ? fragment : 1;
	}

	return { fragment: fragment, cacheable: cacheable };
};

jQuery.fragments = {};

jQuery.each({
	appendTo: "append",
	prependTo: "prepend",
	insertBefore: "before",
	insertAfter: "after",
	replaceAll: "replaceWith"
}, function( name, original ) {
	jQuery.fn[ name ] = function( selector ) {
		var ret = [],
			insert = jQuery( selector ),
			parent = this.length === 1 && this[0].parentNode;

		if ( parent && parent.nodeType === 11 && parent.childNodes.length === 1 && insert.length === 1 ) {
			insert[ original ]( this[0] );
			return this;

		} else {
			for ( var i = 0, l = insert.length; i < l; i++ ) {
				var elems = (i > 0 ? this.clone(true) : this).get();
				jQuery( insert[i] )[ original ]( elems );
				ret = ret.concat( elems );
			}

			return this.pu
Download .txt
gitextract_rd5xf_h5/

├── .gitignore
├── README.md
├── abel-parent/
│   └── pom.xml
├── abel-util/
│   ├── pom.xml
│   └── src/
│       └── main/
│           └── java/
│               └── cn/
│                   └── abel/
│                       ├── code/
│                       │   └── InfoCode.java
│                       ├── exception/
│                       │   ├── AppRuntimeException.java
│                       │   ├── HttpExeption.java
│                       │   └── ServiceException.java
│                       ├── response/
│                       │   └── ResponseEntity.java
│                       └── utils/
│                           └── DateTimeUtils.java
├── springWebSocket/
│   ├── pom.xml
│   └── src/
│       └── main/
│           ├── java/
│           │   └── com/
│           │       └── us/
│           │           └── example/
│           │               ├── Application.java
│           │               ├── bean/
│           │               │   ├── Message.java
│           │               │   └── Response.java
│           │               ├── config/
│           │               │   ├── WebSecurityConfig.java
│           │               │   └── WebSocketConfig.java
│           │               ├── controller/
│           │               │   └── WebSocketController.java
│           │               └── service/
│           │                   └── WebSocketService.java
│           └── resources/
│               ├── application.properties
│               ├── static/
│               │   └── jquery.js
│               └── templates/
│                   ├── chat.html
│                   ├── login.html
│                   └── ws.html
├── springboot-Cache/
│   ├── pom.xml
│   └── src/
│       └── main/
│           ├── java/
│           │   └── com/
│           │       └── us/
│           │           └── example/
│           │               ├── Application.java
│           │               ├── bean/
│           │               │   └── Person.java
│           │               ├── config/
│           │               │   ├── DBConfig.java
│           │               │   ├── JpaConfig.java
│           │               │   └── RedisConfig.java
│           │               ├── controller/
│           │               │   └── CacheController.java
│           │               ├── dao/
│           │               │   └── PersonRepository.java
│           │               └── service/
│           │                   ├── DemoService.java
│           │                   └── Impl/
│           │                       └── DemoServiceImpl.java
│           └── resources/
│               ├── application.properties
│               └── ehcache.xml
├── springboot-Cache2/
│   ├── pom.xml
│   └── src/
│       └── main/
│           ├── java/
│           │   └── com/
│           │       └── us/
│           │           └── example/
│           │               ├── Application.java
│           │               ├── bean/
│           │               │   └── Person.java
│           │               ├── config/
│           │               │   ├── CacheConfig.java
│           │               │   ├── DBConfig.java
│           │               │   └── JpaConfig.java
│           │               ├── controller/
│           │               │   └── CacheController.java
│           │               ├── dao/
│           │               │   └── PersonRepository.java
│           │               └── service/
│           │                   ├── DemoService.java
│           │                   └── PersonService.java
│           └── resources/
│               └── application.properties
├── springboot-Quartz/
│   ├── pom.xml
│   └── src/
│       └── main/
│           ├── java/
│           │   └── com/
│           │       └── abel/
│           │           └── quartz/
│           │               ├── Application.java
│           │               ├── config/
│           │               │   ├── InvokingJobDetailFactory.java
│           │               │   └── QuartzConfig.java
│           │               └── job/
│           │                   └── ExecuteJob.java
│           └── resources/
│               ├── application.properties
│               ├── banner.txt
│               └── logback-spring.xml
├── springboot-SpringSecurity0/
│   ├── pom.xml
│   └── src/
│       └── main/
│           ├── java/
│           │   └── com/
│           │       └── us/
│           │           └── example/
│           │               ├── Application.java
│           │               ├── config/
│           │               │   ├── DBconfig.java
│           │               │   ├── MyBatisConfig.java
│           │               │   ├── MyBatisScannerConfig.java
│           │               │   ├── TransactionConfig.java
│           │               │   ├── WebMvcConfig.java
│           │               │   └── WebSecurityConfig.java
│           │               ├── controller/
│           │               │   └── HomeController.java
│           │               ├── dao/
│           │               │   └── UserDao.java
│           │               ├── domain/
│           │               │   ├── Msg.java
│           │               │   ├── SysRole.java
│           │               │   └── SysUser.java
│           │               ├── security/
│           │               │   └── CustomUserService.java
│           │               └── util/
│           │                   └── MD5Util.java
│           └── resources/
│               ├── application.properties
│               ├── mapper/
│               │   └── UserDaoMapper.xml
│               └── templates/
│                   ├── home.html
│                   └── login.html
├── springboot-SpringSecurity1/
│   ├── pom.xml
│   └── src/
│       └── main/
│           ├── java/
│           │   └── com/
│           │       └── us/
│           │           └── example/
│           │               ├── Application.java
│           │               ├── config/
│           │               │   ├── DBconfig.java
│           │               │   ├── MyBatisConfig.java
│           │               │   ├── MyBatisScannerConfig.java
│           │               │   ├── TransactionConfig.java
│           │               │   └── WebSecurityConfig.java
│           │               ├── controller/
│           │               │   └── HomeController.java
│           │               ├── dao/
│           │               │   ├── PermissionDao.java
│           │               │   └── UserDao.java
│           │               ├── domain/
│           │               │   ├── Msg.java
│           │               │   ├── Permission.java
│           │               │   ├── SysRole.java
│           │               │   └── SysUser.java
│           │               └── service/
│           │                   ├── CustomUserService.java
│           │                   ├── MyAccessDecisionManager.java
│           │                   ├── MyFilterSecurityInterceptor.java
│           │                   └── MyInvocationSecurityMetadataSourceService.java
│           └── resources/
│               ├── application.properties
│               ├── mapper/
│               │   ├── PermissionDaoMapper.xml
│               │   └── UserDaoMapper.xml
│               └── templates/
│                   ├── home.html
│                   └── login.html
├── springboot-dubbo/
│   ├── README.md
│   ├── abel-user-api/
│   │   ├── pom.xml
│   │   └── src/
│   │       └── main/
│   │           └── java/
│   │               └── cn/
│   │                   └── abel/
│   │                       └── user/
│   │                           ├── models/
│   │                           │   ├── Permission.java
│   │                           │   ├── Role.java
│   │                           │   └── User.java
│   │                           └── service/
│   │                               ├── PermissionService.java
│   │                               ├── RoleService.java
│   │                               └── UserService.java
│   └── abel-user-provider/
│       ├── doc/
│       │   └── user.sql
│       ├── pom.xml
│       └── src/
│           └── main/
│               ├── java/
│               │   └── cn/
│               │       └── abel/
│               │           └── user/
│               │               ├── UserProviderApplication.java
│               │               ├── constants/
│               │               │   └── Constants.java
│               │               ├── dao/
│               │               │   ├── PermissionDao.java
│               │               │   ├── RoleDao.java
│               │               │   └── UserDao.java
│               │               ├── exception/
│               │               │   ├── JsonExceptionMapper.java
│               │               │   ├── ReaderExceptionMapper.java
│               │               │   ├── RestExceptionMapper.java
│               │               │   ├── ServiceExceptionMapper.java
│               │               │   └── ValidationExceptionMapper.java
│               │               ├── filter/
│               │               │   ├── RestFilter.java
│               │               │   └── RestInterceptor.java
│               │               ├── service/
│               │               │   └── impl/
│               │               │       ├── PermissionServiceImpl.java
│               │               │       ├── RoleServiceImpl.java
│               │               │       └── UserServiceImpl.java
│               │               └── utils/
│               │                   └── CommentUtils.java
│               ├── resources/
│               │   ├── META-INF/
│               │   │   └── spring/
│               │   │       └── provider.xml
│               │   ├── dev/
│               │   │   ├── application.properties
│               │   │   ├── banner.txt
│               │   │   └── logback-spring.xml
│               │   ├── local/
│               │   │   ├── application.properties
│               │   │   ├── banner.txt
│               │   │   └── logback-spring.xml
│               │   └── mapper/
│               │       ├── PermissionDaoMapper.xml
│               │       ├── RoleDaoMapper.xml
│               │       └── UserDaoMapper.xml
│               └── test/
│                   └── cn/
│                       └── abel/
│                           └── user/
│                               ├── BaseTest.java
│                               └── service/
│                                   └── impl/
│                                       └── PermissionServiceImplTest.java
├── springboot-dynamicDataSource/
│   ├── pom.xml
│   ├── sql/
│   │   ├── news.sql
│   │   └── user.sql
│   └── src/
│       ├── main/
│       │   ├── java/
│       │   │   └── cn/
│       │   │       └── abel/
│       │   │           ├── Application.java
│       │   │           ├── bean/
│       │   │           │   ├── News.java
│       │   │           │   └── User.java
│       │   │           ├── config/
│       │   │           │   ├── DynamicDataSource.java
│       │   │           │   ├── DynamicDataSourceConfig.java
│       │   │           │   ├── DynamicDataSourceContextHolder.java
│       │   │           │   └── HikariConfig.java
│       │   │           ├── dao/
│       │   │           │   ├── NewsDao.java
│       │   │           │   └── UserDao.java
│       │   │           ├── enums/
│       │   │           │   └── DatabaseTypeEnum.java
│       │   │           └── service/
│       │   │               ├── NewsService.java
│       │   │               └── UserService.java
│       │   └── resources/
│       │       ├── local/
│       │       │   ├── application.properties
│       │       │   ├── banner.txt
│       │       │   └── logback-spring.xml
│       │       └── mapper/
│       │           ├── NewsDaoMapper.xml
│       │           └── UserDaoMapper.xml
│       └── test/
│           └── java/
│               └── cn/
│                   └── abel/
│                       ├── BaseTest.java
│                       └── service/
│                           └── ServiceTest.java
├── springboot-elasticsearch/
│   ├── README.md
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   ├── java/
│       │   │   └── cn/
│       │   │       └── abel/
│       │   │           ├── Application.java
│       │   │           ├── bean/
│       │   │           │   └── User.java
│       │   │           ├── config/
│       │   │           │   ├── ESRestClient2Config.java
│       │   │           │   └── ESRestClientConfig.java
│       │   │           ├── constants/
│       │   │           │   └── Constants.java
│       │   │           ├── dao/
│       │   │           │   └── UserDao.java
│       │   │           └── service/
│       │   │               └── UserService.java
│       │   └── resources/
│       │       ├── local/
│       │       │   ├── application.properties
│       │       │   ├── banner.txt
│       │       │   └── logback-spring.xml
│       │       └── mapper/
│       │           └── UserDaoMapper.xml
│       └── test/
│           └── java/
│               └── cn/
│                   └── abel/
│                       ├── BaseTest.java
│                       └── service/
│                           └── ServiceTest.java
├── springboot-jpa/
│   ├── pom.xml
│   └── src/
│       └── main/
│           ├── java/
│           │   └── com/
│           │       └── us/
│           │           └── example/
│           │               ├── Application.java
│           │               ├── bean/
│           │               │   └── User.java
│           │               ├── config/
│           │               │   ├── DBConfig.java
│           │               │   └── JpaConfig.java
│           │               ├── controller/
│           │               │   └── UserController.java
│           │               ├── dao/
│           │               │   └── UserJpaDao.java
│           │               ├── service/
│           │               │   └── UserService.java
│           │               ├── serviceImpl/
│           │               │   └── UserServiceImpl.java
│           │               └── util/
│           │                   └── CommonUtil.java
│           └── resources/
│               └── application.properties
├── springboot-kafka/
│   ├── pom.xml
│   └── src/
│       └── main/
│           ├── java/
│           │   └── cn/
│           │       └── abel/
│           │           ├── Application.java
│           │           ├── config/
│           │           │   └── KafkaConfig.java
│           │           └── service/
│           │               └── prehandle/
│           │                   ├── KafkaConsumerService.java
│           │                   └── SplitService.java
│           └── resources/
│               └── local/
│                   ├── application.properties
│                   ├── banner.txt
│                   └── logback-spring.xml
├── springboot-mybatis/
│   ├── docker-it.sh
│   ├── env/
│   │   ├── dev/
│   │   │   ├── application.properties
│   │   │   ├── env.properties
│   │   │   └── log4j.properties
│   │   └── local/
│   │       ├── application.properties
│   │       ├── env.properties
│   │       └── log4j.properties
│   ├── package.sh
│   ├── pom.xml
│   ├── scripts/
│   │   ├── docker/
│   │   │   ├── common/
│   │   │   │   ├── common-env.sh
│   │   │   │   ├── install-cluster.sh
│   │   │   │   ├── install-single.sh
│   │   │   │   ├── install.sh
│   │   │   │   └── package.xml
│   │   │   └── manager/
│   │   │       ├── check-os.sh
│   │   │       ├── setenv.sh
│   │   │       ├── start.sh
│   │   │       └── stop.sh
│   │   └── springboot/
│   │       ├── common/
│   │       │   ├── common-env.sh
│   │       │   ├── install-cluster.sh
│   │       │   ├── install-single.sh
│   │       │   ├── install.sh
│   │       │   └── package.xml
│   │       └── manager/
│   │           ├── setenv.sh
│   │           ├── start.sh
│   │           └── stop.sh
│   ├── src/
│   │   ├── main/
│   │   │   ├── java/
│   │   │   │   └── com/
│   │   │   │       └── us/
│   │   │   │           └── example/
│   │   │   │               ├── Application.java
│   │   │   │               ├── bean/
│   │   │   │               │   └── User.java
│   │   │   │               ├── config/
│   │   │   │               │   ├── DBConfig.java
│   │   │   │               │   ├── MyBatisConfig.java
│   │   │   │               │   ├── MyBatisScannerConfig.java
│   │   │   │               │   └── TransactionConfig.java
│   │   │   │               ├── controller/
│   │   │   │               │   └── UserController.java
│   │   │   │               ├── dao/
│   │   │   │               │   └── UserDao.java
│   │   │   │               ├── service/
│   │   │   │               │   ├── Impl/
│   │   │   │               │   │   └── UserServiceImpl.java
│   │   │   │               │   └── UserService.java
│   │   │   │               └── util/
│   │   │   │                   └── CommonUtil.java
│   │   │   └── resources/
│   │   │       └── mapper/
│   │   │           └── UserDaoMapper.xml
│   │   └── test/
│   │       └── java/
│   │           └── com/
│   │               └── us/
│   │                   └── example/
│   │                       ├── BaseTest.java
│   │                       └── service/
│   │                           └── UserServiceTest.java
│   ├── tar-it.sh
│   └── war-it.sh
├── springboot-mybatis2/
│   ├── pom.xml
│   ├── sql/
│   │   └── user.sql
│   └── src/
│       ├── main/
│       │   ├── java/
│       │   │   └── cn/
│       │   │       └── abel/
│       │   │           ├── Application.java
│       │   │           ├── bean/
│       │   │           │   └── User.java
│       │   │           ├── dao/
│       │   │           │   └── UserDao.java
│       │   │           └── service/
│       │   │               └── UserService.java
│       │   └── resources/
│       │       ├── local/
│       │       │   ├── application.properties
│       │       │   ├── banner.txt
│       │       │   └── logback-spring.xml
│       │       └── mapper/
│       │           ├── NewsDaoMapper.xml
│       │           └── UserDaoMapper.xml
│       └── test/
│           └── java/
│               └── cn/
│                   └── abel/
│                       ├── BaseTest.java
│                       └── service/
│                           └── ServiceTest.java
├── springboot-neo4j/
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   ├── java/
│       │   │   └── cn/
│       │   │       └── abel/
│       │   │           └── neo4j/
│       │   │               ├── Application.java
│       │   │               ├── bean/
│       │   │               │   ├── King.java
│       │   │               │   ├── Person.java
│       │   │               │   ├── Queen.java
│       │   │               │   └── relation/
│       │   │               │       └── FatherAndSonRelation.java
│       │   │               ├── controller/
│       │   │               │   └── KingController.java
│       │   │               ├── dao/
│       │   │               │   ├── KingDao.java
│       │   │               │   ├── Neo4jDao.java
│       │   │               │   └── Neo4jSession.java
│       │   │               ├── dto/
│       │   │               │   └── GraphDTO.java
│       │   │               └── service/
│       │   │                   └── KingService.java
│       │   └── resources/
│       │       ├── application.properties
│       │       ├── banner.txt
│       │       └── logback-spring.xml
│       └── test/
│           └── java/
│               └── cn/
│                   └── abel/
│                       └── neo4j/
│                           ├── BaseTest.java
│                           └── service/
│                               ├── InitData.java
│                               └── KingServiceTest.java
├── springboot-redis-queue/
│   ├── pom.xml
│   └── src/
│       └── main/
│           ├── java/
│           │   └── cn/
│           │       └── abel/
│           │           └── queue/
│           │               ├── Application.java
│           │               ├── config/
│           │               │   └── RedisConfig.java
│           │               ├── controller/
│           │               │   └── PublisherController.java
│           │               └── service/
│           │                   ├── ProducerService.java
│           │                   └── ReceiverService.java
│           └── resources/
│               └── local/
│                   ├── application.properties
│                   ├── banner.txt
│                   └── logback-spring.xml
├── springboot-rocketmq/
│   ├── pom.xml
│   └── src/
│       └── main/
│           ├── java/
│           │   └── cn/
│           │       └── abel/
│           │           └── queue/
│           │               ├── Application.java
│           │               ├── config/
│           │               │   └── JmsConfig.java
│           │               ├── controller/
│           │               │   └── PublisherController.java
│           │               └── service/
│           │                   ├── ProducerService.java
│           │                   └── ReceiverService.java
│           └── resources/
│               └── local/
│                   ├── application.properties
│                   ├── banner.txt
│                   └── logback-spring.xml
├── springboot-rocketmq-ali/
│   ├── pom.xml
│   └── src/
│       └── main/
│           ├── java/
│           │   └── cn/
│           │       └── abel/
│           │           └── queue/
│           │               ├── Application.java
│           │               ├── config/
│           │               │   ├── ALiConsumerClient.java
│           │               │   ├── ALiMqConfig.java
│           │               │   └── ALiProducerClient.java
│           │               └── service/
│           │                   ├── MessageHandler.java
│           │                   └── ProducerService.java
│           └── resources/
│               └── local/
│                   ├── application.properties
│                   ├── banner.txt
│                   └── logback-spring.xml
├── springboot-shiro/
│   ├── pom.xml
│   └── src/
│       └── main/
│           ├── java/
│           │   └── com/
│           │       └── us/
│           │           ├── Application.java
│           │           ├── bean/
│           │           │   ├── Event.java
│           │           │   ├── Permission.java
│           │           │   ├── Role.java
│           │           │   └── User.java
│           │           ├── config/
│           │           │   ├── DataSourceConfig.java
│           │           │   ├── MapperScannerConfig.java
│           │           │   ├── MyBatisConfig.java
│           │           │   └── TransactionConfig.java
│           │           ├── controller/
│           │           │   ├── EventController.java
│           │           │   ├── LoginController.java
│           │           │   └── UserController.java
│           │           ├── dao/
│           │           │   ├── EventDao.java
│           │           │   ├── PermissionDao.java
│           │           │   ├── RoleDao.java
│           │           │   └── UserDao.java
│           │           ├── service/
│           │           │   ├── EventService.java
│           │           │   ├── PermissionService.java
│           │           │   ├── RoleService.java
│           │           │   └── UserService.java
│           │           └── shiro/
│           │               ├── ShiroConfiguration.java
│           │               └── ShiroRealm.java
│           └── resources/
│               ├── application.properties
│               ├── log4j.properties
│               └── mapper/
│                   ├── EventDaoMapper.xml
│                   ├── PermissionDaoMapper.xml
│                   ├── RoleDaoMapper.xml
│                   └── UserDaoMapper.xml
├── springboot-shiro2/
│   ├── README.md
│   ├── pom.xml
│   └── src/
│       └── main/
│           ├── java/
│           │   └── cn/
│           │       └── abel/
│           │           └── rest/
│           │               ├── ShiroRestApplication.java
│           │               ├── config/
│           │               │   └── RedisConfig.java
│           │               ├── constants/
│           │               │   └── Constants.java
│           │               ├── controller/
│           │               │   └── LoginController.java
│           │               ├── exception/
│           │               │   ├── DefaultErrorController.java
│           │               │   └── DefaultExceptionHandler.java
│           │               ├── freemarker/
│           │               │   ├── CustomFreeMarkerView.java
│           │               │   └── FreeMarkerConfig.java
│           │               ├── shiro/
│           │               │   ├── HttpHeaderSessionManager.java
│           │               │   ├── RedisSessionDao.java
│           │               │   ├── ShiroConfig.java
│           │               │   ├── ShiroProperty.java
│           │               │   ├── ShiroRealm.java
│           │               │   ├── ShiroRedisCacheManager.java
│           │               │   ├── ShiroUser.java
│           │               │   ├── UuidSessionIdGenerator.java
│           │               │   ├── credentials/
│           │               │   │   ├── PasswordHelper.java
│           │               │   │   ├── RetryLimitHashedCredentialsMatcher.java
│           │               │   │   └── ThirdPartySupportedToken.java
│           │               │   ├── ext/
│           │               │   │   ├── QuartzSessionValidationJob.java
│           │               │   │   └── QuartzSessionValidationScheduler.java
│           │               │   └── filter/
│           │               │       ├── ShiroFormAuthenticationFilter.java
│           │               │       └── ShiroLogoutFilter.java
│           │               └── utils/
│           │                   ├── ServletKit.java
│           │                   └── SpringContextKit.java
│           └── resources/
│               ├── META-INF/
│               │   └── spring/
│               │       └── consumer.xml
│               ├── dev/
│               │   ├── application.properties
│               │   ├── banner.txt
│               │   └── logback-spring.xml
│               └── local/
│                   ├── application.properties
│                   ├── banner.txt
│                   └── logback-spring.xml
├── springboot-springCloud/
│   ├── config/
│   │   ├── pom.xml
│   │   ├── src/
│   │   │   └── main/
│   │   │       ├── java/
│   │   │       │   └── com/
│   │   │       │       └── abel/
│   │   │       │           └── ConfigApplication.java
│   │   │       └── resources/
│   │   │           ├── application.yml
│   │   │           ├── bootstrap.yml
│   │   │           └── config/
│   │   │               ├── person.yml
│   │   │               └── some.yml
│   │   └── target/
│   │       └── classes/
│   │           ├── application.yml
│   │           ├── bootstrap.yml
│   │           └── config/
│   │               ├── person.yml
│   │               └── some.yml
│   ├── discovery/
│   │   ├── pom.xml
│   │   ├── src/
│   │   │   └── main/
│   │   │       ├── java/
│   │   │       │   └── com/
│   │   │       │       └── abel/
│   │   │       │           └── DiscoveryApplication.java
│   │   │       └── resources/
│   │   │           └── application.yml
│   │   └── target/
│   │       └── classes/
│   │           └── application.yml
│   ├── monitor/
│   │   ├── pom.xml
│   │   ├── src/
│   │   │   └── main/
│   │   │       ├── java/
│   │   │       │   └── com/
│   │   │       │       └── abel/
│   │   │       │           └── MonitorApplication.java
│   │   │       └── resources/
│   │   │           ├── application.yml
│   │   │           └── bootstrap.yml
│   │   └── target/
│   │       └── classes/
│   │           ├── application.yml
│   │           └── bootstrap.yml
│   ├── person/
│   │   ├── pom.xml
│   │   ├── src/
│   │   │   └── main/
│   │   │       ├── java/
│   │   │       │   └── com/
│   │   │       │       └── abel/
│   │   │       │           ├── PersonApplication.java
│   │   │       │           ├── bean/
│   │   │       │           │   └── Person.java
│   │   │       │           ├── controller/
│   │   │       │           │   └── PersonController.java
│   │   │       │           └── dao/
│   │   │       │               └── PersonRepository.java
│   │   │       └── resources/
│   │   │           ├── application.yml
│   │   │           └── bootstrap.yml
│   │   └── target/
│   │       └── classes/
│   │           ├── application.yml
│   │           └── bootstrap.yml
│   ├── pom.xml
│   ├── some/
│   │   ├── pom.xml
│   │   ├── src/
│   │   │   └── main/
│   │   │       ├── java/
│   │   │       │   └── com/
│   │   │       │       └── abel/
│   │   │       │           └── SomeApplication.java
│   │   │       └── resources/
│   │   │           ├── application.yml
│   │   │           └── bootstrap.yml
│   │   └── target/
│   │       └── classes/
│   │           ├── application.yml
│   │           └── bootstrap.yml
│   └── ui/
│       ├── pom.xml
│       ├── src/
│       │   └── main/
│       │       ├── java/
│       │       │   └── com/
│       │       │       └── abel/
│       │       │           ├── UiApplication.java
│       │       │           ├── bean/
│       │       │           │   └── Person.java
│       │       │           ├── controller/
│       │       │           │   └── UiController.java
│       │       │           └── service/
│       │       │               ├── PersonHystrixService.java
│       │       │               ├── PersonService.java
│       │       │               └── SomeHystrixService.java
│       │       └── resources/
│       │           ├── application.yml
│       │           ├── bootstrap.yml
│       │           └── static/
│       │               ├── css/
│       │               │   └── application.css
│       │               ├── index.html
│       │               ├── js/
│       │               │   └── app.js
│       │               └── tpl/
│       │                   ├── person.html
│       │                   └── some.html
│       └── target/
│           └── classes/
│               ├── application.yml
│               ├── bootstrap.yml
│               └── static/
│                   ├── css/
│                   │   └── application.css
│                   ├── index.html
│                   ├── js/
│                   │   └── app.js
│                   └── tpl/
│                       ├── person.html
│                       └── some.html
├── springboot-springSecurity2/
│   ├── pom.xml
│   └── src/
│       └── main/
│           ├── java/
│           │   └── com/
│           │       └── us/
│           │           └── example/
│           │               ├── Application.java
│           │               ├── config/
│           │               │   ├── DBconfig.java
│           │               │   ├── MyBatisConfig.java
│           │               │   ├── MyBatisScannerConfig.java
│           │               │   ├── TransactionConfig.java
│           │               │   └── WebSecurityConfig.java
│           │               ├── controller/
│           │               │   ├── HomeController.java
│           │               │   └── LoginController.java
│           │               ├── dao/
│           │               │   └── UserDao.java
│           │               ├── domain/
│           │               │   ├── SysRole.java
│           │               │   └── SysUser.java
│           │               ├── security/
│           │               │   └── CustomUserService.java
│           │               ├── service/
│           │               │   └── UserService.java
│           │               └── util/
│           │                   ├── BCryptPasswordEncoderTest.java
│           │                   └── MD5Util.java
│           └── resources/
│               ├── application.properties
│               └── mapper/
│                   └── UserDaoMapper.xml
├── springboot-springSecurity3/
│   ├── pom.xml
│   └── src/
│       └── main/
│           ├── java/
│           │   └── com/
│           │       └── us/
│           │           └── example/
│           │               ├── Application.java
│           │               ├── config/
│           │               │   ├── DBconfig.java
│           │               │   ├── MyBatisConfig.java
│           │               │   ├── MyBatisScannerConfig.java
│           │               │   ├── TransactionConfig.java
│           │               │   ├── WebMvcConfig.java
│           │               │   └── WebSecurityConfig.java
│           │               ├── controller/
│           │               │   └── HomeController.java
│           │               ├── dao/
│           │               │   ├── PermissionDao.java
│           │               │   └── UserDao.java
│           │               ├── domain/
│           │               │   ├── Msg.java
│           │               │   ├── Permission.java
│           │               │   ├── SysRole.java
│           │               │   └── SysUser.java
│           │               └── service/
│           │                   ├── CustomUserService.java
│           │                   ├── MyAccessDecisionManager.java
│           │                   ├── MyFilterSecurityInterceptor.java
│           │                   ├── MyGrantedAuthority.java
│           │                   └── MyInvocationSecurityMetadataSourceService.java
│           └── resources/
│               ├── application.properties
│               ├── mapper/
│               │   ├── PermissionDaoMapper.xml
│               │   └── UserDaoMapper.xml
│               └── templates/
│                   ├── home.html
│                   └── login.html
├── springboot-springSecurity4/
│   ├── pom.xml
│   └── src/
│       └── main/
│           ├── java/
│           │   └── com/
│           │       └── yy/
│           │           └── example/
│           │               ├── Application.java
│           │               ├── bean/
│           │               │   ├── Permission.java
│           │               │   ├── Role.java
│           │               │   └── User.java
│           │               ├── config/
│           │               │   ├── DataSourceConfig.java
│           │               │   ├── MapperScannerConfig.java
│           │               │   ├── MyBatisConfig.java
│           │               │   ├── MyBatisScannerConfig.java
│           │               │   ├── TransactionConfig.java
│           │               │   └── WebSecurityConfig.java
│           │               ├── controller/
│           │               │   ├── LoginController.java
│           │               │   └── UserController.java
│           │               ├── dao/
│           │               │   ├── PermissionDao.java
│           │               │   └── UserDao.java
│           │               ├── security/
│           │               │   ├── UrlAccessDecisionManager.java
│           │               │   ├── UrlConfigAttribute.java
│           │               │   ├── UrlFilterSecurityInterceptor.java
│           │               │   ├── UrlGrantedAuthority.java
│           │               │   ├── UrlMetadataSourceService.java
│           │               │   └── UrlUserService.java
│           │               ├── service/
│           │               │   └── UserService.java
│           │               └── utils/
│           │                   └── MD5Util.java
│           └── resources/
│               ├── application.properties
│               └── com/
│                   └── yy/
│                       └── example/
│                           └── mapper/
│                               ├── PermissionDaoMapper.xml
│                               └── UserDaoMapper.xml
└── springboot-swagger-ui/
    ├── pom.xml
    └── src/
        └── main/
            ├── java/
            │   └── com/
            │       └── abel/
            │           └── example/
            │               ├── Application.java
            │               ├── Swagger2.java
            │               ├── bean/
            │               │   └── User.java
            │               ├── config/
            │               │   ├── DBConfig.java
            │               │   └── JpaConfig.java
            │               ├── controller/
            │               │   └── UserController.java
            │               ├── dao/
            │               │   └── UserJpaDao.java
            │               ├── service/
            │               │   └── UserService.java
            │               ├── serviceImpl/
            │               │   └── UserServiceImpl.java
            │               └── util/
            │                   └── CommonUtil.java
            └── resources/
                └── application.properties
Download .txt
SYMBOL INDEX (1617 symbols across 307 files)

FILE: abel-util/src/main/java/cn/abel/code/InfoCode.java
  type InfoCode (line 9) | public enum InfoCode {
    method InfoCode (line 47) | private InfoCode(int status, String msg) {
    method getStatus (line 52) | public int getStatus() {
    method getMsg (line 56) | public String getMsg() {
    method toString (line 60) | @Override

FILE: abel-util/src/main/java/cn/abel/exception/AppRuntimeException.java
  class AppRuntimeException (line 10) | public class AppRuntimeException extends RuntimeException {
    method AppRuntimeException (line 15) | public AppRuntimeException() {
    method AppRuntimeException (line 20) | public AppRuntimeException(InfoCode infoCode) {
    method AppRuntimeException (line 24) | public AppRuntimeException(InfoCode infoCode, String message) {
    method getInfoCode (line 29) | public InfoCode getInfoCode() {

FILE: abel-util/src/main/java/cn/abel/exception/HttpExeption.java
  class HttpExeption (line 3) | public class HttpExeption extends Exception {
    method HttpExeption (line 7) | public HttpExeption() {
    method HttpExeption (line 10) | public HttpExeption(String msg) {
    method HttpExeption (line 14) | public HttpExeption(String msg, Throwable e) {
    method HttpExeption (line 18) | public HttpExeption(Throwable e) {

FILE: abel-util/src/main/java/cn/abel/exception/ServiceException.java
  class ServiceException (line 9) | @SuppressWarnings("serial")
    method ServiceException (line 17) | public ServiceException() {
    method ServiceException (line 20) | public ServiceException(Throwable e) {
    method ServiceException (line 24) | public ServiceException(int errorCode) {
    method getErrorCode (line 28) | public int getErrorCode() {
    method getErrorCodes (line 32) | public String getErrorCodes() {
    method ServiceException (line 36) | public ServiceException(InfoCode infoCode){
    method ServiceException (line 41) | public ServiceException(int errorCode, String msg) {
    method ServiceException (line 46) | public ServiceException(String errorCode, String msg) {
    method ServiceException (line 51) | public ServiceException(int errorCode, String msg, Throwable e) {
    method ServiceException (line 56) | public ServiceException(int errorCode, Throwable e) {

FILE: abel-util/src/main/java/cn/abel/response/ResponseEntity.java
  class ResponseEntity (line 13) | public class ResponseEntity {
    method ResponseEntity (line 21) | private ResponseEntity() {
    method ok (line 24) | public static ResponseEntity ok(Object data) {
    method error (line 30) | public static ResponseEntity error(InfoCode infoCode) {
    method ok (line 37) | public static ResponseEntity ok() {
    method error (line 42) | public static ResponseEntity error(int code, String msg) {
    method getStatus (line 49) | public int getStatus() {
    method setStatus (line 53) | public void setStatus(int status) {
    method getMessage (line 57) | public String getMessage() {
    method setMessage (line 61) | public void setMessage(String message) {
    method getData (line 65) | public Object getData() {
    method setData (line 69) | public void setData(Object data) {

FILE: abel-util/src/main/java/cn/abel/utils/DateTimeUtils.java
  class DateTimeUtils (line 18) | public class DateTimeUtils {
    method format (line 49) | public static String format(Date dateTime, String pattern) {
    method format (line 63) | public static String format(Date dateTime) {
    method formatCurrent (line 73) | public static String formatCurrent(String pattern) {
    method formatCurrent (line 82) | public static String formatCurrent() {
    method removeTime (line 92) | public static Date removeTime(Date dateTime) {
    method getTomorrowDate (line 108) | public static Date getTomorrowDate() {
    method getYesterdayDate (line 122) | public static Date getYesterdayDate() {
    method parse (line 139) | public static Date parse(String dateTimeStr, String pattern) throws Se...
    method parse (line 157) | public static Date parse(String dateTimeStr) throws ServiceException {
    method getMonth (line 167) | public static int getMonth(Date date) {
    method getYear (line 179) | public static int getYear(Date date) {
    method dateAdd (line 193) | public static Date dateAdd(Date date, int days) throws ServiceException {
    method monthAdd (line 211) | public static Date monthAdd(Date date, int months) throws ServiceExcep...
    method dateDiff (line 229) | public static int dateDiff(Date one, Date two) throws ServiceException {
    method getDateBefore (line 245) | public static Date getDateBefore(Date date, int day) {
    method getFirstAndLastOfMonth (line 258) | public static Date getFirstAndLastOfMonth() {
    method getWeekFirstDate (line 272) | public static Date getWeekFirstDate(){

FILE: springWebSocket/src/main/java/com/us/example/Application.java
  class Application (line 13) | @ComponentScan(basePackages ="com.us.example")
    method main (line 18) | public static void main(String[] args) {

FILE: springWebSocket/src/main/java/com/us/example/bean/Message.java
  class Message (line 7) | public class Message {
    method getName (line 10) | public String getName(){

FILE: springWebSocket/src/main/java/com/us/example/bean/Response.java
  class Response (line 7) | public class Response {
    method setResponseMessage (line 8) | public void setResponseMessage(String responseMessage) {
    method Response (line 13) | public Response(String responseMessage){
    method getResponseMessage (line 16) | public String getResponseMessage(){

FILE: springWebSocket/src/main/java/com/us/example/config/WebSecurityConfig.java
  class WebSecurityConfig (line 10) | @Configuration
    method configure (line 13) | @Override
    method configure (line 30) | @Override
    method configure (line 39) | @Override

FILE: springWebSocket/src/main/java/com/us/example/config/WebSocketConfig.java
  class WebSocketConfig (line 12) | @Configuration
    method registerStompEndpoints (line 18) | @Override
    method configureMessageBroker (line 29) | @Override

FILE: springWebSocket/src/main/java/com/us/example/controller/WebSocketController.java
  class WebSocketController (line 23) | @CrossOrigin
    method login (line 32) | @RequestMapping(value = "/login")
    method ws (line 36) | @RequestMapping(value = "/ws")
    method chat (line 40) | @RequestMapping(value = "/chat")
    method say (line 45) | @MessageMapping("/welcome")//浏览器发送请求通过@messageMapping 映射/welcome 这个地址。
    method say2 (line 53) | @RequestMapping("/Welcome1")
    method handleChat (line 61) | @MessageMapping("/chat")

FILE: springWebSocket/src/main/java/com/us/example/service/WebSocketService.java
  class WebSocketService (line 12) | @Service
    method sendMessage (line 19) | public void sendMessage() throws Exception{

FILE: springWebSocket/src/main/resources/static/jquery.js
  function jQuerySub (line 849) | function jQuerySub( selector, context ) {
  function doScrollCheck (line 915) | function doScrollCheck() {
  function resolveFunc (line 1106) | function resolveFunc( i ) {
  function dataAttr (line 1661) | function dataAttr( elem, key, data ) {
  function isEmptyDataObject (line 1693) | function isEmptyDataObject( obj ) {
  function handleQueueMarkDefer (line 1706) | function handleQueueMarkDefer( elem, type, src ) {
  function resolve (line 1856) | function resolve() {
  function returnFalse (line 3094) | function returnFalse() {
  function returnTrue (line 3097) | function returnTrue() {
  function trigger (line 3346) | function trigger( type, elem, args ) {
  function handler (line 3381) | function handler( donor ) {
  function liveHandler (line 3585) | function liveHandler( event ) {
  function liveConvert (line 3673) | function liveConvert( type, selector ) {
  function dirNodeCheck (line 4988) | function dirNodeCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {
  function dirCheck (line 5021) | function dirCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {
  function isDisconnected (line 5296) | function isDisconnected( node ) {
  function winnow (line 5418) | function winnow( elements, qualifier, keep ) {
  function root (line 5798) | function root( elem, cur ) {
  function cloneCopyEvent (line 5805) | function cloneCopyEvent( src, dest ) {
  function cloneFixAttributes (line 5834) | function cloneFixAttributes( src, dest ) {
  function getAll (line 5953) | function getAll( elem ) {
  function fixDefaultChecked (line 5966) | function fixDefaultChecked( elem ) {
  function findInputs (line 5972) | function findInputs( elem ) {
  function evalScript (line 6186) | function evalScript( i, elem ) {
  function getWH (line 6543) | function getWH( elem, name, extra ) {
  function addToPrefiltersOrTransports (line 6643) | function addToPrefiltersOrTransports( structure ) {
  function inspectPrefiltersOrTransports (line 6679) | function inspectPrefiltersOrTransports( structure, options, originalOpti...
  function done (line 7045) | function done( status, statusText, responses, headers ) {
  function buildParams (line 7357) | function buildParams( prefix, obj, traditional, add ) {
  function ajaxHandleResponses (line 7407) | function ajaxHandleResponses( s, jqXHR, responses ) {
  function ajaxConvert (line 7472) | function ajaxConvert( s, response ) {
  function createStandardXHR (line 7738) | function createStandardXHR() {
  function createActiveXHR (line 7744) | function createActiveXHR() {
  function createFxNow (line 8226) | function createFxNow() {
  function clearFxNow (line 8231) | function clearFxNow() {
  function genFx (line 8236) | function genFx( type, num ) {
  function t (line 8347) | function t( gotoEnd ) {
  function defaultDisplay (line 8515) | function defaultDisplay( nodeName ) {
  function getWindow (line 8859) | function getWindow( elem ) {

FILE: springboot-Cache/src/main/java/com/us/example/Application.java
  class Application (line 14) | @ComponentScan(basePackages ="com.us.example")
    method main (line 18) | public static void main(String[] args) {

FILE: springboot-Cache/src/main/java/com/us/example/bean/Person.java
  class Person (line 11) | @Entity
    method Person (line 27) | public Person() {
    method Person (line 30) | public Person(Long id, String name, Integer age, String address) {
    method getId (line 37) | public Long getId() {
    method setId (line 40) | public void setId(Long id) {
    method getName (line 43) | public String getName() {
    method setName (line 46) | public void setName(String name) {
    method getAge (line 49) | public Integer getAge() {
    method setAge (line 52) | public void setAge(Integer age) {
    method getAddress (line 55) | public String getAddress() {
    method setAddress (line 58) | public void setAddress(String address) {

FILE: springboot-Cache/src/main/java/com/us/example/config/DBConfig.java
  class DBConfig (line 14) | @Configuration
    method dataSource (line 19) | @Bean(name="dataSource")

FILE: springboot-Cache/src/main/java/com/us/example/config/JpaConfig.java
  class JpaConfig (line 24) | @Configuration
    method entityManagerFactory (line 32) | @Bean
    method transactionManager (line 54) | @Bean

FILE: springboot-Cache/src/main/java/com/us/example/config/RedisConfig.java
  class RedisConfig (line 21) | @Configuration
    method redisConnectionFactory (line 29) | @Bean
    method redisTemplate (line 37) | @Bean
    method cacheManager (line 44) | @Bean
    method errorHandler (line 51) | public CacheErrorHandler errorHandler() {

FILE: springboot-Cache/src/main/java/com/us/example/controller/CacheController.java
  class CacheController (line 13) | @RestController
    method put (line 20) | @RequestMapping("/put")
    method cacheable (line 27) | @RequestMapping("/able")
    method evit (line 37) | @RequestMapping("/evit")

FILE: springboot-Cache/src/main/java/com/us/example/dao/PersonRepository.java
  type PersonRepository (line 9) | public interface PersonRepository extends JpaRepository<Person, Long> {

FILE: springboot-Cache/src/main/java/com/us/example/service/DemoService.java
  type DemoService (line 8) | public  interface DemoService {
    method save (line 9) | public Person save(Person person);
    method remove (line 11) | public void remove(Long id);
    method findOne (line 13) | public Person findOne(Person person);

FILE: springboot-Cache/src/main/java/com/us/example/service/Impl/DemoServiceImpl.java
  class DemoServiceImpl (line 15) | @Service
    method save (line 21) | @Override
    method remove (line 30) | @Override
    method findOne (line 38) | @Override

FILE: springboot-Cache2/src/main/java/com/us/example/Application.java
  class Application (line 14) | @ComponentScan(basePackages ="com.us.example")
    method main (line 18) | public static void main(String[] args) {

FILE: springboot-Cache2/src/main/java/com/us/example/bean/Person.java
  class Person (line 12) | @Entity
    method Person (line 28) | public Person() {
    method getId (line 32) | public Long getId() {
    method setId (line 36) | public void setId(Long id) {
    method getName (line 40) | public String getName() {
    method setName (line 44) | public void setName(String name) {
    method getAge (line 48) | public Integer getAge() {
    method setAge (line 52) | public void setAge(Integer age) {
    method getAddress (line 56) | public String getAddress() {
    method setAddress (line 60) | public void setAddress(String address) {
    method Person (line 64) | public Person(Long id, String name, Integer age, String address) {
    method toString (line 72) | @Override

FILE: springboot-Cache2/src/main/java/com/us/example/config/CacheConfig.java
  class CacheConfig (line 18) | @Configuration
    method getCacheManager (line 24) | @Bean

FILE: springboot-Cache2/src/main/java/com/us/example/config/DBConfig.java
  class DBConfig (line 14) | @Configuration
    method dataSource (line 19) | @Bean(name="dataSource")

FILE: springboot-Cache2/src/main/java/com/us/example/config/JpaConfig.java
  class JpaConfig (line 24) | @Configuration
    method entityManagerFactory (line 32) | @Bean
    method transactionManager (line 54) | @Bean

FILE: springboot-Cache2/src/main/java/com/us/example/controller/CacheController.java
  class CacheController (line 10) | @RestController
    method put (line 18) | @RequestMapping(method = RequestMethod.POST)
    method cacheable (line 26) | @RequestMapping(value ="/{id}" ,method = RequestMethod.GET)

FILE: springboot-Cache2/src/main/java/com/us/example/dao/PersonRepository.java
  type PersonRepository (line 9) | public interface PersonRepository extends JpaRepository<Person, Long> {

FILE: springboot-Cache2/src/main/java/com/us/example/service/DemoService.java
  class DemoService (line 13) | @Service
    method findAll (line 20) | public List<Person> findAll() {

FILE: springboot-Cache2/src/main/java/com/us/example/service/PersonService.java
  class PersonService (line 13) | @Service
    method findOne (line 22) | public Person findOne(Long id) {
    method save (line 34) | public Person save(Person person) {
    method getCache (line 40) | public Person getCache(Long id, CacheManager cacheManager) {

FILE: springboot-Quartz/src/main/java/com/abel/quartz/Application.java
  class Application (line 10) | @SpringBootApplication
    method main (line 13) | public static void main(String[] args) {

FILE: springboot-Quartz/src/main/java/com/abel/quartz/config/InvokingJobDetailFactory.java
  class InvokingJobDetailFactory (line 13) | public class InvokingJobDetailFactory extends QuartzJobBean {
    method executeInternal (line 27) | @Override
    method setApplicationContext (line 46) | public void setApplicationContext(ApplicationContext applicationContex...
    method setTargetObject (line 50) | public void setTargetObject(String targetObject) {
    method setTargetMethod (line 54) | public void setTargetMethod(String targetMethod) {

FILE: springboot-Quartz/src/main/java/com/abel/quartz/config/QuartzConfig.java
  class QuartzConfig (line 24) | @Configuration
    method quartzProperties (line 56) | private Properties quartzProperties() throws IOException {
    method createDataSource (line 111) | @Bean
    method cronTriggerFactoryBean (line 130) | private static CronTriggerFactoryBean cronTriggerFactoryBean(JobDetail...
    method schedulerFactoryBean (line 150) | @Bean
    method executeJobTrigger (line 180) | @Bean(name = "executeJobTrigger")
    method executeJobDetail (line 195) | @Bean
    method createJobDetail (line 210) | private static JobDetailFactoryBean createJobDetail(Class<? extends Jo...

FILE: springboot-Quartz/src/main/java/com/abel/quartz/job/ExecuteJob.java
  class ExecuteJob (line 10) | @Service
    method execute (line 17) | public void execute() {

FILE: springboot-SpringSecurity0/src/main/java/com/us/example/Application.java
  class Application (line 13) | @ComponentScan(basePackages ="com.us.example")
    method main (line 16) | public static void main(String[] args) {

FILE: springboot-SpringSecurity0/src/main/java/com/us/example/config/DBconfig.java
  class DBconfig (line 13) | @Configuration
    method dataSource (line 18) | @Bean(name="dataSource")

FILE: springboot-SpringSecurity0/src/main/java/com/us/example/config/MyBatisConfig.java
  class MyBatisConfig (line 12) | @Configuration
    method sqlSessionFactory (line 19) | @Bean(name = "sqlSessionFactory")

FILE: springboot-SpringSecurity0/src/main/java/com/us/example/config/MyBatisScannerConfig.java
  class MyBatisScannerConfig (line 7) | @Configuration
    method MapperScannerConfigurer (line 9) | @Bean

FILE: springboot-SpringSecurity0/src/main/java/com/us/example/config/TransactionConfig.java
  class TransactionConfig (line 13) | @Configuration
    method annotationDrivenTransactionManager (line 19) | @Bean(name = "transactionManager")

FILE: springboot-SpringSecurity0/src/main/java/com/us/example/config/WebMvcConfig.java
  class WebMvcConfig (line 9) | @Configuration
    method addViewControllers (line 13) | @Override

FILE: springboot-SpringSecurity0/src/main/java/com/us/example/config/WebSecurityConfig.java
  class WebSecurityConfig (line 19) | @Configuration
    method customUserService (line 23) | @Bean
    method configure (line 28) | @Override
    method configure (line 43) | @Override

FILE: springboot-SpringSecurity0/src/main/java/com/us/example/controller/HomeController.java
  class HomeController (line 11) | @Controller
    method index (line 14) | @RequestMapping("/")

FILE: springboot-SpringSecurity0/src/main/java/com/us/example/dao/UserDao.java
  type UserDao (line 6) | public interface UserDao {
    method findByUserName (line 7) | public SysUser findByUserName(String username);

FILE: springboot-SpringSecurity0/src/main/java/com/us/example/domain/Msg.java
  class Msg (line 7) | public class Msg {
    method Msg (line 12) | public Msg(String title, String content, String etraInfo) {
    method getTitle (line 18) | public String getTitle() {
    method setTitle (line 21) | public void setTitle(String title) {
    method getContent (line 24) | public String getContent() {
    method setContent (line 27) | public void setContent(String content) {
    method getEtraInfo (line 30) | public String getEtraInfo() {
    method setEtraInfo (line 33) | public void setEtraInfo(String etraInfo) {

FILE: springboot-SpringSecurity0/src/main/java/com/us/example/domain/SysRole.java
  class SysRole (line 7) | public class SysRole {
    method getId (line 11) | public Integer getId() {
    method setId (line 14) | public void setId(Integer id) {
    method getName (line 17) | public String getName() {
    method setName (line 20) | public void setName(String name) {

FILE: springboot-SpringSecurity0/src/main/java/com/us/example/domain/SysUser.java
  class SysUser (line 9) | public class SysUser {
    method getId (line 16) | public Integer getId() {
    method setId (line 20) | public void setId(Integer id) {
    method getUsername (line 24) | public String getUsername() {
    method setUsername (line 28) | public void setUsername(String username) {
    method getPassword (line 32) | public String getPassword() {
    method setPassword (line 36) | public void setPassword(String password) {
    method getRoles (line 40) | public List<SysRole> getRoles() {
    method setRoles (line 44) | public void setRoles(List<SysRole> roles) {

FILE: springboot-SpringSecurity0/src/main/java/com/us/example/security/CustomUserService.java
  class CustomUserService (line 19) | @Service
    method loadUserByUsername (line 25) | @Override

FILE: springboot-SpringSecurity0/src/main/java/com/us/example/util/MD5Util.java
  class MD5Util (line 11) | public class MD5Util {
    method encode (line 15) | public static String encode(String password) {
    method main (line 41) | public static void main(String[] args) {

FILE: springboot-SpringSecurity1/src/main/java/com/us/example/Application.java
  class Application (line 13) | @ComponentScan(basePackages ="com.us.example")
    method main (line 16) | public static void main(String[] args) {

FILE: springboot-SpringSecurity1/src/main/java/com/us/example/config/DBconfig.java
  class DBconfig (line 13) | @Configuration
    method dataSource (line 18) | @Bean(name="dataSource")

FILE: springboot-SpringSecurity1/src/main/java/com/us/example/config/MyBatisConfig.java
  class MyBatisConfig (line 12) | @Configuration
    method sqlSessionFactory (line 19) | @Bean(name = "sqlSessionFactory")

FILE: springboot-SpringSecurity1/src/main/java/com/us/example/config/MyBatisScannerConfig.java
  class MyBatisScannerConfig (line 7) | @Configuration
    method MapperScannerConfigurer (line 9) | @Bean

FILE: springboot-SpringSecurity1/src/main/java/com/us/example/config/TransactionConfig.java
  class TransactionConfig (line 13) | @Configuration
    method annotationDrivenTransactionManager (line 19) | @Bean(name = "transactionManager")

FILE: springboot-SpringSecurity1/src/main/java/com/us/example/config/WebSecurityConfig.java
  class WebSecurityConfig (line 20) | @Configuration
    method configure (line 30) | @Override
    method configure (line 36) | @Override

FILE: springboot-SpringSecurity1/src/main/java/com/us/example/controller/HomeController.java
  class HomeController (line 12) | @Controller
    method index (line 15) | @RequestMapping("/")
    method login (line 22) | @RequestMapping("/login")
    method hello (line 27) | @RequestMapping("/admin")

FILE: springboot-SpringSecurity1/src/main/java/com/us/example/dao/PermissionDao.java
  type PermissionDao (line 10) | public interface PermissionDao {
    method findAll (line 11) | public List<Permission> findAll();
    method findByAdminUserId (line 12) | public List<Permission> findByAdminUserId(int userId);

FILE: springboot-SpringSecurity1/src/main/java/com/us/example/dao/UserDao.java
  type UserDao (line 6) | public interface UserDao {
    method findByUserName (line 7) | public SysUser findByUserName(String username);

FILE: springboot-SpringSecurity1/src/main/java/com/us/example/domain/Msg.java
  class Msg (line 7) | public class Msg {
    method Msg (line 12) | public Msg(String title, String content, String etraInfo) {
    method getTitle (line 18) | public String getTitle() {
    method setTitle (line 21) | public void setTitle(String title) {
    method getContent (line 24) | public String getContent() {
    method setContent (line 27) | public void setContent(String content) {
    method getEtraInfo (line 30) | public String getEtraInfo() {
    method setEtraInfo (line 33) | public void setEtraInfo(String etraInfo) {

FILE: springboot-SpringSecurity1/src/main/java/com/us/example/domain/Permission.java
  class Permission (line 6) | public class Permission {
    method getId (line 21) | public int getId() {
    method setId (line 25) | public void setId(int id) {
    method getName (line 29) | public String getName() {
    method setName (line 33) | public void setName(String name) {
    method getDescritpion (line 37) | public String getDescritpion() {
    method setDescritpion (line 41) | public void setDescritpion(String descritpion) {
    method getUrl (line 45) | public String getUrl() {
    method setUrl (line 49) | public void setUrl(String url) {
    method getPid (line 53) | public int getPid() {
    method setPid (line 57) | public void setPid(int pid) {

FILE: springboot-SpringSecurity1/src/main/java/com/us/example/domain/SysRole.java
  class SysRole (line 7) | public class SysRole {
    method getId (line 11) | public Integer getId() {
    method setId (line 14) | public void setId(Integer id) {
    method getName (line 17) | public String getName() {
    method setName (line 20) | public void setName(String name) {

FILE: springboot-SpringSecurity1/src/main/java/com/us/example/domain/SysUser.java
  class SysUser (line 9) | public class SysUser {
    method getId (line 16) | public Integer getId() {
    method setId (line 20) | public void setId(Integer id) {
    method getUsername (line 24) | public String getUsername() {
    method setUsername (line 28) | public void setUsername(String username) {
    method getPassword (line 32) | public String getPassword() {
    method setPassword (line 36) | public void setPassword(String password) {
    method getRoles (line 40) | public List<SysRole> getRoles() {
    method setRoles (line 44) | public void setRoles(List<SysRole> roles) {

FILE: springboot-SpringSecurity1/src/main/java/com/us/example/service/CustomUserService.java
  class CustomUserService (line 23) | @Service
    method loadUserByUsername (line 31) | public UserDetails loadUserByUsername(String username) {

FILE: springboot-SpringSecurity1/src/main/java/com/us/example/service/MyAccessDecisionManager.java
  class MyAccessDecisionManager (line 17) | @Service
    method decide (line 19) | @Override
    method supports (line 41) | @Override
    method supports (line 46) | @Override

FILE: springboot-SpringSecurity1/src/main/java/com/us/example/service/MyFilterSecurityInterceptor.java
  class MyFilterSecurityInterceptor (line 23) | @Service
    method setMyAccessDecisionManager (line 30) | @Autowired
    method init (line 36) | @Override
    method doFilter (line 41) | @Override
    method invoke (line 49) | public void invoke(FilterInvocation fi) throws IOException, ServletExc...
    method destroy (line 63) | @Override
    method getSecureObjectClass (line 68) | @Override
    method obtainSecurityMetadataSource (line 74) | @Override

FILE: springboot-SpringSecurity1/src/main/java/com/us/example/service/MyInvocationSecurityMetadataSourceService.java
  class MyInvocationSecurityMetadataSourceService (line 19) | @Service
    method loadResourceDefine (line 31) | public void loadResourceDefine(){
    method getAttributes (line 45) | @Override
    method getAllConfigAttributes (line 61) | @Override
    method supports (line 66) | @Override

FILE: springboot-dubbo/abel-user-api/src/main/java/cn/abel/user/models/Permission.java
  class Permission (line 6) | public class Permission implements Serializable {
    method getId (line 15) | public Integer getId() {
    method setId (line 19) | public void setId(Integer id) {
    method getName (line 23) | public String getName() {
    method setName (line 27) | public void setName(String name) {
    method getPermissionUrl (line 31) | public String getPermissionUrl() {
    method setPermissionUrl (line 35) | public void setPermissionUrl(String permissionUrl) {
    method getMethod (line 39) | public String getMethod() {
    method setMethod (line 43) | public void setMethod(String method) {
    method getDescription (line 47) | public String getDescription() {
    method setDescription (line 51) | public void setDescription(String description) {
    method toString (line 55) | @Override

FILE: springboot-dubbo/abel-user-api/src/main/java/cn/abel/user/models/Role.java
  class Role (line 6) | public class Role implements Serializable {
    method getId (line 14) | public Integer getId() {
    method setId (line 18) | public void setId(Integer id) {
    method getName (line 22) | public String getName() {
    method setName (line 26) | public void setName(String name) {
    method getRoleLevel (line 30) | public Integer getRoleLevel() {
    method setRoleLevel (line 34) | public void setRoleLevel(Integer roleLevel) {
    method getDescription (line 38) | public String getDescription() {
    method setDescription (line 42) | public void setDescription(String description) {
    method toString (line 46) | @Override

FILE: springboot-dubbo/abel-user-api/src/main/java/cn/abel/user/models/User.java
  class User (line 9) | public class User implements Serializable {
    method getId (line 24) | public Integer getId() {
    method setId (line 28) | public void setId(Integer id) {
    method getCnname (line 32) | public String getCnname() {
    method setCnname (line 36) | public void setCnname(String cnname) {
    method getUsername (line 40) | public String getUsername() {
    method getPassword (line 44) | public String getPassword() {
    method setPassword (line 48) | public void setPassword(String password) {
    method getEmail (line 52) | public String getEmail() {
    method setEmail (line 56) | public void setEmail(String email) {
    method getMobilePhone (line 61) | public String getMobilePhone() {
    method setMobilePhone (line 65) | public void setMobilePhone(String mobilePhone) {
    method getRoles (line 69) | public List<Role> getRoles() {
    method setRoles (line 73) | public void setRoles(List<Role> roles) {
    method toString (line 77) | @Override

FILE: springboot-dubbo/abel-user-api/src/main/java/cn/abel/user/service/PermissionService.java
  type PermissionService (line 8) | public interface PermissionService {
    method getByMap (line 10) | List<Permission> getByMap(Map<String, Object> map);
    method getById (line 12) | Permission getById(Integer id);
    method create (line 14) | Permission create(Permission permission);
    method update (line 17) | Permission update(Permission permission);
    method delete (line 19) | int delete(Integer id);

FILE: springboot-dubbo/abel-user-api/src/main/java/cn/abel/user/service/RoleService.java
  type RoleService (line 9) | public interface RoleService {
    method getByMap (line 12) | List<Role> getByMap(Map<String, Object> map);
    method getById (line 14) | Role getById(Integer id);
    method create (line 16) | Role create(Role role);
    method update (line 18) | Role update(Role role);
    method delete (line 20) | int delete(Integer id);

FILE: springboot-dubbo/abel-user-api/src/main/java/cn/abel/user/service/UserService.java
  type UserService (line 8) | public interface UserService {
    method getByMap (line 10) | List<User> getByMap(Map<String, Object> map);
    method getById (line 12) | User getById(Integer id);
    method create (line 14) | User create(User user);
    method update (line 16) | User update(User user);
    method delete (line 18) | int delete(Integer id);
    method getByUserName (line 20) | User getByUserName(String userName);

FILE: springboot-dubbo/abel-user-provider/doc/user.sql
  type `permission` (line 24) | CREATE TABLE `permission` (
  type `role` (line 38) | CREATE TABLE `role` (
  type `role_permission` (line 51) | CREATE TABLE `role_permission` (
  type `user` (line 61) | CREATE TABLE `user` (
  type `user_role` (line 77) | CREATE TABLE `user_role` (

FILE: springboot-dubbo/abel-user-provider/src/main/java/cn/abel/user/UserProviderApplication.java
  class UserProviderApplication (line 7) | @SpringBootApplication
    method main (line 11) | public static void main(String[] args) {

FILE: springboot-dubbo/abel-user-provider/src/main/java/cn/abel/user/constants/Constants.java
  type Constants (line 6) | public interface Constants {

FILE: springboot-dubbo/abel-user-provider/src/main/java/cn/abel/user/dao/PermissionDao.java
  type PermissionDao (line 11) | @Repository
    method getByMap (line 15) | List<Permission> getByMap(Map<String, Object> map);
    method getById (line 17) | Permission getById(Integer id);
    method create (line 19) | Integer create(Permission permission);
    method update (line 21) | int update(Permission permission);
    method delete (line 23) | int delete(Integer id);
    method getList (line 25) | List<Permission> getList();
    method getByUserId (line 27) | List<Permission> getByUserId(Integer userId);

FILE: springboot-dubbo/abel-user-provider/src/main/java/cn/abel/user/dao/RoleDao.java
  type RoleDao (line 11) | @Repository
    method getByMap (line 15) | List<Role> getByMap(Map<String, Object> map);
    method getById (line 16) | Role getById(Integer id);
    method create (line 17) | Integer create(Role role);
    method update (line 18) | int update(Role role);
    method delete (line 19) | int delete(Integer id);

FILE: springboot-dubbo/abel-user-provider/src/main/java/cn/abel/user/dao/UserDao.java
  type UserDao (line 10) | @Repository
    method getByMap (line 14) | List<User> getByMap(Map<String, Object> map);
    method getById (line 15) | User getById(Integer id);
    method create (line 16) | Integer create(User user);
    method update (line 17) | int update(User user);
    method delete (line 18) | int delete(Integer id);
    method getByUserName (line 19) | User getByUserName(String userName);

FILE: springboot-dubbo/abel-user-provider/src/main/java/cn/abel/user/exception/JsonExceptionMapper.java
  class JsonExceptionMapper (line 19) | public class JsonExceptionMapper implements ExceptionMapper<JsonProcessi...
    method toResponse (line 24) | @Override

FILE: springboot-dubbo/abel-user-provider/src/main/java/cn/abel/user/exception/ReaderExceptionMapper.java
  class ReaderExceptionMapper (line 19) | public class ReaderExceptionMapper implements ExceptionMapper<ReaderExce...
    method toResponse (line 24) | @Override

FILE: springboot-dubbo/abel-user-provider/src/main/java/cn/abel/user/exception/RestExceptionMapper.java
  class RestExceptionMapper (line 19) | public class RestExceptionMapper implements ExceptionMapper<WebApplicati...
    method toResponse (line 24) | @Override

FILE: springboot-dubbo/abel-user-provider/src/main/java/cn/abel/user/exception/ServiceExceptionMapper.java
  class ServiceExceptionMapper (line 18) | public class ServiceExceptionMapper implements ExceptionMapper<ServiceEx...
    method toResponse (line 23) | @Override

FILE: springboot-dubbo/abel-user-provider/src/main/java/cn/abel/user/exception/ValidationExceptionMapper.java
  class ValidationExceptionMapper (line 18) | public class ValidationExceptionMapper extends RpcExceptionMapper {
    method handleConstraintViolationException (line 20) | @Override

FILE: springboot-dubbo/abel-user-provider/src/main/java/cn/abel/user/filter/RestFilter.java
  class RestFilter (line 28) | @Priority(900)
    method filter (line 36) | @Override
    method filter (line 41) | @Override
    method filter (line 46) | @Override
    method filter (line 51) | @Override
    method logHttpHeaders (line 57) | protected void logHttpHeaders(MultivaluedMap<String, String> headers) {

FILE: springboot-dubbo/abel-user-provider/src/main/java/cn/abel/user/filter/RestInterceptor.java
  class RestInterceptor (line 24) | public class RestInterceptor implements WriterInterceptor, ReaderInterce...
    method aroundReadFrom (line 29) | @Override
    method aroundWriteTo (line 37) | @Override
    class OutputStreamWrapper (line 46) | protected static class OutputStreamWrapper extends OutputStream {
      method OutputStreamWrapper (line 51) | private OutputStreamWrapper(OutputStream output) {
      method write (line 55) | @Override
      method write (line 61) | @Override
      method write (line 67) | @Override
      method flush (line 73) | @Override
      method close (line 78) | @Override
      method getBytes (line 83) | public byte[] getBytes() {

FILE: springboot-dubbo/abel-user-provider/src/main/java/cn/abel/user/service/impl/PermissionServiceImpl.java
  class PermissionServiceImpl (line 12) | @Service(protocol = {"dubbo"}, validation = "false")
    method getByMap (line 17) | @Override
    method getById (line 22) | @Override
    method create (line 27) | @Override
    method update (line 33) | @Override
    method delete (line 39) | @Override

FILE: springboot-dubbo/abel-user-provider/src/main/java/cn/abel/user/service/impl/RoleServiceImpl.java
  class RoleServiceImpl (line 13) | @Service(protocol = {"dubbo"}, validation = "false")
    method getByMap (line 17) | @Override
    method getById (line 21) | @Override
    method create (line 25) | @Override
    method update (line 30) | @Override
    method delete (line 35) | @Override

FILE: springboot-dubbo/abel-user-provider/src/main/java/cn/abel/user/service/impl/UserServiceImpl.java
  class UserServiceImpl (line 12) | @Service(protocol = {"dubbo"}, validation = "false")
    method getByMap (line 17) | @Override
    method getById (line 22) | @Override
    method create (line 27) | @Override
    method update (line 33) | @Override
    method delete (line 39) | @Override
    method getByUserName (line 44) | @Override

FILE: springboot-dubbo/abel-user-provider/src/main/java/cn/abel/user/utils/CommentUtils.java
  class CommentUtils (line 13) | public class CommentUtils {
    method copyList (line 21) | public static <T> List copyList(List<T> list) {

FILE: springboot-dubbo/abel-user-provider/src/main/test/cn/abel/user/BaseTest.java
  class BaseTest (line 17) | @RunWith(SpringRunner.class)
    class ComponentScanConfig (line 22) | @Configuration
    method contextLoads (line 29) | @Test

FILE: springboot-dubbo/abel-user-provider/src/main/test/cn/abel/user/service/impl/PermissionServiceImplTest.java
  class PermissionServiceImplTest (line 15) | public class PermissionServiceImplTest extends BaseTest {
    method getByMap (line 18) | @Test
    method getById (line 23) | @Test
    method create (line 29) | @Test
    method update (line 39) | @Test
    method delete (line 50) | @Test

FILE: springboot-dynamicDataSource/sql/news.sql
  type `news` (line 24) | CREATE TABLE `news` (

FILE: springboot-dynamicDataSource/sql/user.sql
  type `user` (line 24) | CREATE TABLE `user` (

FILE: springboot-dynamicDataSource/src/main/java/cn/abel/Application.java
  class Application (line 10) | @SpringBootApplication
    method main (line 12) | public static void main(String[] args) {

FILE: springboot-dynamicDataSource/src/main/java/cn/abel/bean/News.java
  class News (line 4) | public class News {
    method getId (line 11) | public Integer getId() {
    method setId (line 15) | public void setId(Integer id) {
    method getTitle (line 19) | public String getTitle() {
    method setTitle (line 23) | public void setTitle(String title) {
    method getContent (line 27) | public String getContent() {
    method setContent (line 31) | public void setContent(String content) {
    method getImagePath (line 35) | public String getImagePath() {
    method setImagePath (line 39) | public void setImagePath(String imagePath) {
    method getReadSum (line 43) | public Integer getReadSum() {
    method setReadSum (line 47) | public void setReadSum(Integer readSum) {

FILE: springboot-dynamicDataSource/src/main/java/cn/abel/bean/User.java
  class User (line 6) | public class User {
    method getId (line 15) | public Integer getId() {
    method setId (line 19) | public void setId(Integer id) {
    method getName (line 23) | public String getName() {
    method setName (line 27) | public void setName(String name) {
    method getAddress (line 31) | public String getAddress() {
    method setAddress (line 35) | public void setAddress(String address) {
    method getMobile (line 39) | public String getMobile() {
    method setMobile (line 43) | public void setMobile(String mobile) {
    method getEmail (line 47) | public String getEmail() {
    method setEmail (line 51) | public void setEmail(String email) {
    method getCreateTime (line 55) | public Date getCreateTime() {
    method setCreateTime (line 59) | public void setCreateTime(Date createTime) {
    method getRole (line 63) | public Integer getRole() {
    method setRole (line 67) | public void setRole(Integer role) {

FILE: springboot-dynamicDataSource/src/main/java/cn/abel/config/DynamicDataSource.java
  class DynamicDataSource (line 9) | public class DynamicDataSource extends AbstractRoutingDataSource {
    method determineCurrentLookupKey (line 10) | @Override

FILE: springboot-dynamicDataSource/src/main/java/cn/abel/config/DynamicDataSourceConfig.java
  class DynamicDataSourceConfig (line 23) | @Configuration
    method getPrimaryDataSource (line 41) | @Primary
    method getUserDataSource (line 47) | @Bean(name = "userDataSource")
    method dynamicDataSource (line 60) | @Bean("dynamicDataSource")
    method sqlSessionFactory (line 76) | @Bean

FILE: springboot-dynamicDataSource/src/main/java/cn/abel/config/DynamicDataSourceContextHolder.java
  class DynamicDataSourceContextHolder (line 9) | public class DynamicDataSourceContextHolder {
    method setDatabaseType (line 12) | public static void setDatabaseType(DatabaseTypeEnum type){
    method getDatabaseType (line 16) | public static DatabaseTypeEnum getDatabaseType(){
    method resetDatabaseType (line 20) | public static void resetDatabaseType() {

FILE: springboot-dynamicDataSource/src/main/java/cn/abel/config/HikariConfig.java
  class HikariConfig (line 11) | @Service
    method getHikariDataSource (line 42) | public HikariDataSource getHikariDataSource(String url) {
    method getHikariDataSource (line 66) | public HikariDataSource getHikariDataSource(String url, String userNam...

FILE: springboot-dynamicDataSource/src/main/java/cn/abel/dao/NewsDao.java
  type NewsDao (line 10) | @Repository
    method getByMap (line 14) | List<News> getByMap(Map<String, Object> map);
    method getById (line 16) | News getById(Integer id);
    method create (line 18) | Integer create(News news);
    method update (line 20) | int update(News news);
    method delete (line 22) | int delete(Integer id);

FILE: springboot-dynamicDataSource/src/main/java/cn/abel/dao/UserDao.java
  type UserDao (line 10) | @Repository
    method getByMap (line 14) | List<User> getByMap(Map<String, Object> map);
    method getById (line 16) | User getById(Integer id);
    method create (line 18) | Integer create(User user);
    method update (line 20) | int update(User user);
    method delete (line 22) | int delete(Integer id);

FILE: springboot-dynamicDataSource/src/main/java/cn/abel/enums/DatabaseTypeEnum.java
  type DatabaseTypeEnum (line 7) | public enum DatabaseTypeEnum {
    method DatabaseTypeEnum (line 12) | DatabaseTypeEnum(String code) {
    method getCode (line 16) | public String getCode() {
    method setCode (line 20) | public void setCode(String code) {
    method getDatabaseTypeEnum (line 24) | public static DatabaseTypeEnum getDatabaseTypeEnum(String code) {

FILE: springboot-dynamicDataSource/src/main/java/cn/abel/service/NewsService.java
  class NewsService (line 15) | @Service
    method getByMap (line 20) | public List<News> getByMap(Map<String, Object> map) {
    method getById (line 25) | public News getById(Integer id) {
    method create (line 30) | public News create(News news) {
    method update (line 36) | public News update(News news) {
    method delete (line 42) | public int delete(Integer id) {

FILE: springboot-dynamicDataSource/src/main/java/cn/abel/service/UserService.java
  class UserService (line 14) | @Service
    method getByMap (line 19) | public List<User> getByMap(Map<String,Object> map){
    method getById (line 24) | public User getById(Integer id){
    method create (line 29) | public User create(User user){
    method update (line 35) | public User update(User user){
    method delete (line 41) | public int delete(Integer id){

FILE: springboot-dynamicDataSource/src/test/java/cn/abel/BaseTest.java
  class BaseTest (line 16) | @RunWith(SpringRunner.class)
    class ComponentScanConfig (line 21) | @Configuration
    method contextLoads (line 28) | @Test

FILE: springboot-dynamicDataSource/src/test/java/cn/abel/service/ServiceTest.java
  class ServiceTest (line 15) | public class ServiceTest extends BaseTest {
    method dynamicDataSourceTest (line 22) | @Test

FILE: springboot-elasticsearch/src/main/java/cn/abel/Application.java
  class Application (line 10) | @SpringBootApplication
    method main (line 12) | public static void main(String[] args) {

FILE: springboot-elasticsearch/src/main/java/cn/abel/bean/User.java
  class User (line 6) | public class User {
    method getId (line 18) | public Integer getId() {
    method setId (line 22) | public void setId(Integer id) {
    method getName (line 26) | public String getName() {
    method setName (line 30) | public void setName(String name) {
    method getAddress (line 34) | public String getAddress() {
    method setAddress (line 38) | public void setAddress(String address) {
    method getMobile (line 42) | public String getMobile() {
    method setMobile (line 46) | public void setMobile(String mobile) {
    method getEmail (line 50) | public String getEmail() {
    method setEmail (line 54) | public void setEmail(String email) {
    method getCreateTime (line 58) | public Date getCreateTime() {
    method setCreateTime (line 62) | public void setCreateTime(Date createTime) {
    method getRole (line 66) | public Integer getRole() {
    method setRole (line 70) | public void setRole(Integer role) {
    method getIdCard (line 74) | public String getIdCard() {
    method setIdCard (line 78) | public void setIdCard(String idCard) {
    method getType (line 82) | public int getType() {
    method setType (line 86) | public void setType(int type) {

FILE: springboot-elasticsearch/src/main/java/cn/abel/config/ESRestClient2Config.java
  class ESRestClient2Config (line 20) | @Configuration
    method getRestClient (line 33) | @Bean(name = NAME, destroyMethod = "close")

FILE: springboot-elasticsearch/src/main/java/cn/abel/config/ESRestClientConfig.java
  class ESRestClientConfig (line 20) | @Configuration
    method getRestClient (line 33) | @Bean(name = NAME, destroyMethod = "close")

FILE: springboot-elasticsearch/src/main/java/cn/abel/constants/Constants.java
  class Constants (line 7) | public class Constants {

FILE: springboot-elasticsearch/src/main/java/cn/abel/dao/UserDao.java
  type UserDao (line 10) | @Repository
    method getByMap (line 14) | List<User> getByMap(Map<String, Object> map);
    method getById (line 16) | User getById(Integer id);
    method create (line 18) | Integer create(User user);
    method update (line 20) | int update(User user);
    method delete (line 22) | int delete(Integer id);

FILE: springboot-elasticsearch/src/main/java/cn/abel/service/UserService.java
  class UserService (line 37) | @Service
    method getByMap (line 60) | public List<User> getByMap(Map<String, Object> map) {
    method getById (line 64) | public User getById(Integer id) throws Exception {
    method getList (line 88) | public JSONObject getList(String keyword, Integer type, String startTi...
    method create (line 112) | public User create(User user) {
    method update (line 117) | public User update(User user) {
    method delete (line 122) | public int delete(Integer id) {
    method searchListQuery (line 133) | private JSONObject searchListQuery(String keyword, Integer type, Strin...
    method esSearch (line 192) | public JsonNode esSearch(JSONObject search, String endpoint, RestClien...
    method setPage (line 226) | public static JSONObject setPage(Integer pageIndex, Integer pageSize, ...
    method getJSONObject (line 240) | public static JSONObject getJSONObject(String key, Object value) {

FILE: springboot-elasticsearch/src/test/java/cn/abel/BaseTest.java
  class BaseTest (line 16) | @RunWith(SpringRunner.class)
    class ComponentScanConfig (line 21) | @Configuration
    method contextLoads (line 28) | @Test

FILE: springboot-elasticsearch/src/test/java/cn/abel/service/ServiceTest.java
  class ServiceTest (line 13) | public class ServiceTest extends BaseTest {
    method dynamicDataSourceTest (line 19) | @Test

FILE: springboot-jpa/src/main/java/com/us/example/Application.java
  class Application (line 14) | @ComponentScan(basePackages ="com.us.example")
    method main (line 18) | public static void main(String[] args) {

FILE: springboot-jpa/src/main/java/com/us/example/bean/User.java
  class User (line 13) | @Entity
    method getName (line 52) | public String getName() {
    method setName (line 56) | public void setName(String name) {
    method getPassword (line 60) | @JsonIgnore
    method setPassword (line 65) | public void setPassword(String password) {
    method getUsername (line 69) | public String getUsername() {
    method setUsername (line 73) | public void setUsername(String username) {
    method getDivisionId (line 77) | public Integer getDivisionId() {
    method setDivisionId (line 81) | public void setDivisionId(Integer divisionId) {
    method getEmail (line 85) | public String getEmail() {
    method setEmail (line 89) | public void setEmail(String email) {
    method getGender (line 93) | public String getGender() {
    method setGender (line 97) | public void setGender(String gender) {
    method getMobilephone (line 101) | public String getMobilephone() {
    method setMobilephone (line 105) | public void setMobilephone(String mobilephone) {
    method getTelephone (line 109) | public String getTelephone() {
    method setTelephone (line 113) | public void setTelephone(String telephone) {
    method getUserType (line 117) | public Integer getUserType() {
    method setUserType (line 121) | public void setUserType(Integer userType) {
    method getCreateBy (line 125) | public String getCreateBy() {
    method setCreateBy (line 129) | public void setCreateBy(String createBy) {
    method getCreateTime (line 133) | public Date getCreateTime() {
    method setCreateTime (line 137) | public void setCreateTime(Date createTime) {
    method getUpdateBy (line 141) | public String getUpdateBy() {
    method setUpdateBy (line 145) | public void setUpdateBy(String updateBy) {
    method getUpdateTime (line 149) | public Date getUpdateTime() {
    method setUpdateTime (line 153) | public void setUpdateTime(Date updateTime) {
    method getDisabled (line 157) | public Integer getDisabled() {
    method setDisabled (line 161) | public void setDisabled(Integer disabled) {
    method getTheme (line 165) | public String getTheme() {
    method setTheme (line 169) | public void setTheme(String theme) {
    method getIsLdap (line 173) | public Integer getIsLdap() {
    method setIsLdap (line 177) | public void setIsLdap(Integer isLdap) {
    method getId (line 181) | public Integer getId() {
    method setId (line 185) | public void setId(Integer id) {

FILE: springboot-jpa/src/main/java/com/us/example/config/DBConfig.java
  class DBConfig (line 12) | @Configuration
    method dataSource (line 18) | @Bean(name="dataSource")

FILE: springboot-jpa/src/main/java/com/us/example/config/JpaConfig.java
  class JpaConfig (line 20) | @Configuration
    method entityManagerFactory (line 29) | @Bean
    method transactionManager (line 51) | @Bean

FILE: springboot-jpa/src/main/java/com/us/example/controller/UserController.java
  class UserController (line 20) | @Controller
    method getUser (line 36) | @RequestMapping(value = "/byname", method = RequestMethod.GET)

FILE: springboot-jpa/src/main/java/com/us/example/dao/UserJpaDao.java
  type UserJpaDao (line 11) | public interface UserJpaDao extends JpaRepository<User, Long> {
    method findByName (line 19) | User findByName(String name);

FILE: springboot-jpa/src/main/java/com/us/example/service/UserService.java
  type UserService (line 10) | public interface UserService {
    method getUserByName (line 18) | public User getUserByName(String username);

FILE: springboot-jpa/src/main/java/com/us/example/serviceImpl/UserServiceImpl.java
  class UserServiceImpl (line 18) | @Service
    method getUserByName (line 27) | @Override

FILE: springboot-jpa/src/main/java/com/us/example/util/CommonUtil.java
  class CommonUtil (line 11) | public  class CommonUtil {
    method getParameterMap (line 19) | public static Map<String, Object> getParameterMap(HttpServletRequest r...

FILE: springboot-kafka/src/main/java/cn/abel/Application.java
  class Application (line 10) | @SpringBootApplication(exclude = KafkaAutoConfiguration.class)
    method main (line 12) | public static void main(String[] args) {

FILE: springboot-kafka/src/main/java/cn/abel/config/KafkaConfig.java
  class KafkaConfig (line 20) | @Configuration
    method batchFactory (line 56) | @Bean(name = "kafkaListenerContainerFactory")
    method consumerFactory (line 67) | @Bean
    method consumerConfigs (line 71) | @Bean

FILE: springboot-kafka/src/main/java/cn/abel/service/prehandle/KafkaConsumerService.java
  class KafkaConsumerService (line 14) | @Component
    method processMessage (line 20) | @KafkaListener(topics = "${log.statistical.kafka.topic}", containerFac...

FILE: springboot-kafka/src/main/java/cn/abel/service/prehandle/SplitService.java
  class SplitService (line 14) | @Service
    method saveAndSplitLog (line 20) | public void saveAndSplitLog(String message) {

FILE: springboot-mybatis/src/main/java/com/us/example/Application.java
  class Application (line 12) | @ComponentScan(basePackages ="com.us.example,com.jf")
    method main (line 16) | public static void main(String[] args) {

FILE: springboot-mybatis/src/main/java/com/us/example/bean/User.java
  class User (line 3) | public class User  {
    method getId (line 55) | public Integer getId() {
    method setId (line 59) | public void setId(Integer id) {
    method getName (line 68) | public String getName() {
    method setName (line 77) | public void setName(String name) {
    method getRePassword (line 86) | public String getRePassword()
    method setRePassword (line 96) | public void setRePassword(String rePassword)
    method getPassword (line 106) | public String getPassword() {
    method setPassword (line 115) | public void setPassword(String password) {
    method getUsername (line 124) | public String getUsername() {
    method setUsername (line 133) | public void setUsername(String username) {
    method getDivisionId (line 142) | public Integer getDivisionId() {
    method setDivisionId (line 151) | public void setDivisionId(Integer divisionId) {
    method getEmail (line 160) | public String getEmail() {
    method setEmail (line 169) | public void setEmail(String email) {
    method getGender (line 178) | public String getGender() {
    method setGender (line 187) | public void setGender(String gender) {
    method getMobilephone (line 196) | public String getMobilephone() {
    method setMobilephone (line 205) | public void setMobilephone(String mobilephone) {
    method getTelephone (line 214) | public String getTelephone() {
    method setTelephone (line 223) | public void setTelephone(String telephone) {
    method getUserType (line 232) | public Integer getUserType() {
    method setUserType (line 241) | public void setUserType(Integer userType) {
    method getCreateBy (line 250) | public String getCreateBy() {
    method setCreateBy (line 259) | public void setCreateBy(String createBy) {
    method getCreateTime (line 268) | public Date getCreateTime() {
    method setCreateTime (line 277) | public void setCreateTime(Date createTime) {
    method getUpdateBy (line 286) | public String getUpdateBy() {
    method setUpdateBy (line 295) | public void setUpdateBy(String updateBy) {
    method getUpdateTime (line 304) | public Date getUpdateTime() {
    method setUpdateTime (line 313) | public void setUpdateTime(Date updateTime) {
    method getDisabled (line 322) | public Integer getDisabled() {
    method setDisabled (line 331) | public void setDisabled(Integer disabled) {
    method getTheme (line 340) | public String getTheme() {
    method setTheme (line 349) | public void setTheme(String theme) {
    method getIsLdap (line 358) | public Integer getIsLdap()
    method setIsLdap (line 368) | public void setIsLdap(Integer isLdap)

FILE: springboot-mybatis/src/main/java/com/us/example/config/DBConfig.java
  class DBConfig (line 12) | @Configuration
    method dataSource (line 17) | @Bean(name="dataSource")

FILE: springboot-mybatis/src/main/java/com/us/example/config/MyBatisConfig.java
  class MyBatisConfig (line 13) | @Configuration
    method sqlSessionFactory (line 20) | @Bean(name = "sqlSessionFactory")

FILE: springboot-mybatis/src/main/java/com/us/example/config/MyBatisScannerConfig.java
  class MyBatisScannerConfig (line 7) | @Configuration
    method MapperScannerConfigurer (line 9) | @Bean

FILE: springboot-mybatis/src/main/java/com/us/example/config/TransactionConfig.java
  class TransactionConfig (line 13) | @Configuration
    method annotationDrivenTransactionManager (line 19) | @Bean(name = "transactionManager")

FILE: springboot-mybatis/src/main/java/com/us/example/controller/UserController.java
  class UserController (line 24) | @Controller
    method list (line 39) | @RequestMapping(method = RequestMethod.GET, produces = "application/js...

FILE: springboot-mybatis/src/main/java/com/us/example/dao/UserDao.java
  type UserDao (line 8) | public interface UserDao {
    method getList (line 9) | List<User> getList(Map<String,Object> map);

FILE: springboot-mybatis/src/main/java/com/us/example/service/Impl/UserServiceImpl.java
  class UserServiceImpl (line 23) | @Service
    method getList (line 34) | @Page
    method printName (line 41) | @Scheduled(cron = "0/30 * * * * ?")

FILE: springboot-mybatis/src/main/java/com/us/example/service/UserService.java
  type UserService (line 10) | public interface UserService {
    method getList (line 18) | Object getList(Map<String, Object> map);
    method printName (line 20) | void printName();

FILE: springboot-mybatis/src/main/java/com/us/example/util/CommonUtil.java
  class CommonUtil (line 13) | public  class CommonUtil {
    method getParameterMap (line 21) | public static Map<String, Object> getParameterMap(HttpServletRequest r...

FILE: springboot-mybatis/src/test/java/com/us/example/BaseTest.java
  class BaseTest (line 19) | @RunWith(SpringJUnit4ClassRunner.class)
    class ComponentScanConfig (line 23) | @Configuration
    method assertNotNull (line 29) | public void assertNotNull(Object obj) {

FILE: springboot-mybatis/src/test/java/com/us/example/service/UserServiceTest.java
  class UserServiceTest (line 13) | public class UserServiceTest extends BaseTest {
    method getListTest (line 17) | @Test

FILE: springboot-mybatis2/sql/user.sql
  type `user` (line 24) | CREATE TABLE `user` (

FILE: springboot-mybatis2/src/main/java/cn/abel/Application.java
  class Application (line 10) | @SpringBootApplication
    method main (line 12) | public static void main(String[] args) {

FILE: springboot-mybatis2/src/main/java/cn/abel/bean/User.java
  class User (line 6) | public class User {
    method getId (line 15) | public Integer getId() {
    method setId (line 19) | public void setId(Integer id) {
    method getName (line 23) | public String getName() {
    method setName (line 27) | public void setName(String name) {
    method getAddress (line 31) | public String getAddress() {
    method setAddress (line 35) | public void setAddress(String address) {
    method getMobile (line 39) | public String getMobile() {
    method setMobile (line 43) | public void setMobile(String mobile) {
    method getEmail (line 47) | public String getEmail() {
    method setEmail (line 51) | public void setEmail(String email) {
    method getCreateTime (line 55) | public Date getCreateTime() {
    method setCreateTime (line 59) | public void setCreateTime(Date createTime) {
    method getRole (line 63) | public Integer getRole() {
    method setRole (line 67) | public void setRole(Integer role) {

FILE: springboot-mybatis2/src/main/java/cn/abel/dao/UserDao.java
  type UserDao (line 10) | @Repository
    method getByMap (line 14) | List<User> getByMap(Map<String, Object> map);
    method getById (line 16) | User getById(Integer id);
    method create (line 18) | Integer create(User user);
    method update (line 20) | int update(User user);
    method delete (line 22) | int delete(Integer id);

FILE: springboot-mybatis2/src/main/java/cn/abel/service/UserService.java
  class UserService (line 12) | @Service
    method getByMap (line 17) | public List<User> getByMap(Map<String,Object> map){
    method getById (line 21) | public User getById(Integer id){
    method create (line 25) | public User create(User user){
    method update (line 30) | public User update(User user){
    method delete (line 35) | public int delete(Integer id){

FILE: springboot-mybatis2/src/test/java/cn/abel/BaseTest.java
  class BaseTest (line 16) | @RunWith(SpringRunner.class)
    class ComponentScanConfig (line 21) | @Configuration
    method contextLoads (line 28) | @Test

FILE: springboot-mybatis2/src/test/java/cn/abel/service/ServiceTest.java
  class ServiceTest (line 14) | public class ServiceTest extends BaseTest {
    method dynamicDataSourceTest (line 20) | @Test

FILE: springboot-neo4j/src/main/java/cn/abel/neo4j/Application.java
  class Application (line 11) | @SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
    method main (line 13) | public static void main(String[] args) {

FILE: springboot-neo4j/src/main/java/cn/abel/neo4j/bean/King.java
  class King (line 18) | @NodeEntity(label = "King")
    method getName (line 59) | public String getName() {
    method setName (line 63) | public void setName(String name) {
    method getClan (line 67) | public String getClan() {
    method setClan (line 71) | public void setClan(String clan) {
    method getTimes (line 75) | public String getTimes() {
    method setTimes (line 79) | public void setTimes(String times) {
    method getPosthumousTitle (line 83) | public String getPosthumousTitle() {
    method setPosthumousTitle (line 87) | public void setPosthumousTitle(String posthumousTitle) {
    method getTempleNumber (line 91) | public String getTempleNumber() {
    method setTempleNumber (line 95) | public void setTempleNumber(String templeNumber) {
    method getTomb (line 99) | public String getTomb() {
    method setTomb (line 103) | public void setTomb(String tomb) {
    method getRemark (line 107) | public String getRemark() {
    method setRemark (line 111) | public void setRemark(String remark) {
    method getSuccessor (line 115) | public King getSuccessor() {
    method setSuccessor (line 119) | public void setSuccessor(King successor) {
    method getSons (line 123) | public List<FatherAndSonRelation> getSons() {
    method setSons (line 127) | public void setSons(List<FatherAndSonRelation> sons) {
    method addRelation (line 135) | public void addRelation(FatherAndSonRelation fatherAndSonRelation){

FILE: springboot-neo4j/src/main/java/cn/abel/neo4j/bean/Person.java
  class Person (line 11) | public class Person {
    method getId (line 18) | public long getId() {
    method setId (line 22) | public void setId(long id) {

FILE: springboot-neo4j/src/main/java/cn/abel/neo4j/bean/Queen.java
  class Queen (line 11) | public class Queen extends Person {
    method getName (line 48) | public String getName() {
    method setName (line 52) | public void setName(String name) {
    method getClan (line 56) | public String getClan() {
    method setClan (line 60) | public void setClan(String clan) {
    method getTimes (line 64) | public String getTimes() {
    method setTimes (line 68) | public void setTimes(String times) {
    method getTempleNumber (line 72) | public String getTempleNumber() {
    method setTempleNumber (line 76) | public void setTempleNumber(String templeNumber) {
    method getPosthumousTitle (line 80) | public String getPosthumousTitle() {
    method setPosthumousTitle (line 84) | public void setPosthumousTitle(String posthumousTitle) {
    method getSon (line 88) | public String getSon() {
    method setSon (line 92) | public void setSon(String son) {
    method getRemark (line 96) | public String getRemark() {
    method setRemark (line 100) | public void setRemark(String remark) {
    method getKing (line 104) | public King getKing() {
    method setKing (line 108) | public void setKing(King king) {

FILE: springboot-neo4j/src/main/java/cn/abel/neo4j/bean/relation/FatherAndSonRelation.java
  class FatherAndSonRelation (line 14) | @RelationshipEntity(type = "father_son")
    method getId (line 26) | public long getId() {
    method setId (line 30) | public void setId(long id) {
    method getFrom (line 34) | public King getFrom() {
    method setFrom (line 38) | public void setFrom(King from) {
    method getTo (line 42) | public King getTo() {
    method setTo (line 46) | public void setTo(King to) {

FILE: springboot-neo4j/src/main/java/cn/abel/neo4j/controller/KingController.java
  class KingController (line 20) | @Controller
    method save (line 26) | @RequestMapping(value = "/save/{id}", method = RequestMethod.GET)

FILE: springboot-neo4j/src/main/java/cn/abel/neo4j/dao/KingDao.java
  type KingDao (line 17) | @Repository
    method findByName (line 27) | King findByName(String name);
    method getKings (line 36) | @Query("match p=(a:King)-[r:`传位`*0..]->(b:King) where a.name={0} retur...

FILE: springboot-neo4j/src/main/java/cn/abel/neo4j/dao/Neo4jDao.java
  class Neo4jDao (line 17) | @Repository
    method open (line 34) | public Neo4jSession open() {
    method getSessionFactory (line 40) | private synchronized SessionFactory getSessionFactory() {

FILE: springboot-neo4j/src/main/java/cn/abel/neo4j/dao/Neo4jSession.java
  class Neo4jSession (line 16) | public class Neo4jSession {
    method Neo4jSession (line 21) | public Neo4jSession(SessionFactory factory) {
    method exec (line 32) | public Iterator<Map<String, Object>> exec(String cypher) {
    method execSave (line 46) | public void execSave(Object o) {
    method clear (line 56) | public void clear() {

FILE: springboot-neo4j/src/main/java/cn/abel/neo4j/dto/GraphDTO.java
  class GraphDTO (line 10) | public class GraphDTO {
    method getNodes (line 14) | public List<Object> getNodes() {
    method setNodes (line 18) | public void setNodes(List<Object> nodes) {
    method getLinks (line 22) | public List<Object> getLinks() {
    method setLinks (line 26) | public void setLinks(List<Object> links) {

FILE: springboot-neo4j/src/main/java/cn/abel/neo4j/service/KingService.java
  class KingService (line 26) | @Service
    method saveKing (line 39) | public void saveKing(List<King> list) {
    method saveQueen (line 51) | public void saveQueen(List<Queen> list) {
    method getKingAndQueen (line 64) | public GraphDTO getKingAndQueen(String kingName) {
    method mapToGraph (line 75) | private GraphDTO mapToGraph(
    method findByName (line 117) | public King findByName(String name) {
    method getKings (line 129) | public List<King> getKings(String name) {
    method saveRelation (line 141) | public void saveRelation(String fatherName, String sonName) {

FILE: springboot-neo4j/src/test/java/cn/abel/neo4j/BaseTest.java
  class BaseTest (line 16) | @RunWith(SpringRunner.class)
    class ComponentScanConfig (line 21) | @Configuration
    method contextLoads (line 28) | @Test

FILE: springboot-neo4j/src/test/java/cn/abel/neo4j/service/InitData.java
  class InitData (line 13) | public class InitData {
    method initKing (line 15) | public static List<King> initKing() {
    method initQueen (line 220) | public static List<Queen> initQueen() {

FILE: springboot-neo4j/src/test/java/cn/abel/neo4j/service/KingServiceTest.java
  class KingServiceTest (line 18) | public class KingServiceTest extends BaseTest {
    method saveKing (line 25) | @Test
    method saveQueen (line 31) | @Test
    method saveRelation (line 37) | @Test
    method getOneKing (line 42) | @Test
    method getKingAndQueen (line 49) | @Test

FILE: springboot-redis-queue/src/main/java/cn/abel/queue/Application.java
  class Application (line 10) | @SpringBootApplication
    method main (line 12) | public static void main(String[] args) {

FILE: springboot-redis-queue/src/main/java/cn/abel/queue/config/RedisConfig.java
  class RedisConfig (line 31) | @Configuration
    method keyGenerator (line 62) | @Override
    method redisTemplate (line 76) | @Bean(name = "redisTemplate")
    method redisConnectionFactory (line 81) | private RedisConnectionFactory redisConnectionFactory() {
    method connectionFactory (line 100) | private RedisConnectionFactory connectionFactory(Integer maxActive,
    method getTemplate (line 135) | private RedisTemplate<Object, Object> getTemplate(RedisConnectionFacto...
    method jackson2JsonRedisSerializer (line 153) | private Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerialize...

FILE: springboot-redis-queue/src/main/java/cn/abel/queue/controller/PublisherController.java
  class PublisherController (line 16) | @RestController
    method sendMessage (line 24) | @RequestMapping(value = "{name}",method = RequestMethod.GET)
    method getMessage (line 30) | @RequestMapping(value = "/get",method =RequestMethod.GET )

FILE: springboot-redis-queue/src/main/java/cn/abel/queue/service/ProducerService.java
  class ProducerService (line 13) | @Service
    method sendMessage (line 18) | public String sendMessage(String name) {

FILE: springboot-redis-queue/src/main/java/cn/abel/queue/service/ReceiverService.java
  class ReceiverService (line 11) | @Service
    method getMessage (line 16) | public String getMessage() {

FILE: springboot-rocketmq-ali/src/main/java/cn/abel/queue/Application.java
  class Application (line 10) | @SpringBootApplication
    method main (line 12) | public static void main(String[] args) {

FILE: springboot-rocketmq-ali/src/main/java/cn/abel/queue/config/ALiConsumerClient.java
  class ALiConsumerClient (line 24) | @Configuration
    method buildConsumer (line 53) | @Bean(initMethod = "start", destroyMethod = "shutdown")
    method ALiConsumerClient (line 75) | @Autowired

FILE: springboot-rocketmq-ali/src/main/java/cn/abel/queue/config/ALiMqConfig.java
  class ALiMqConfig (line 13) | @Component
    method getMqProperties (line 23) | public Properties getMqProperties() {
    method getAccessKey (line 32) | public String getAccessKey() {
    method setAccessKey (line 36) | public void setAccessKey(String accessKey) {
    method getSecretKey (line 40) | public String getSecretKey() {
    method setSecretKey (line 44) | public void setSecretKey(String secretKey) {
    method getNameSrvAddr (line 48) | public String getNameSrvAddr() {
    method setNameSrvAddr (line 52) | public void setNameSrvAddr(String nameSrvAddr) {
    method getTestTopic (line 56) | public String getTestTopic() {
    method setTestTopic (line 60) | public void setTestTopic(String testTopic) {
    method getTestGroupId (line 64) | public String getTestGroupId() {
    method setTestGroupId (line 68) | public void setTestGroupId(String testGroupId) {
    method getTestTag (line 72) | public String getTestTag() {
    method setTestTag (line 76) | public void setTestTag(String testTag) {

FILE: springboot-rocketmq-ali/src/main/java/cn/abel/queue/config/ALiProducerClient.java
  class ALiProducerClient (line 12) | @Component
    method build (line 17) | @Bean(name = "producer", initMethod = "start", destroyMethod = "shutdo...
    method ALiProducerClient (line 24) | @Autowired

FILE: springboot-rocketmq-ali/src/main/java/cn/abel/queue/service/MessageHandler.java
  class MessageHandler (line 17) | @Component
    method consume (line 21) | @Override

FILE: springboot-rocketmq-ali/src/main/java/cn/abel/queue/service/ProducerService.java
  class ProducerService (line 24) | @Service
    method sendMessage (line 37) | public void sendMessage(Object o) {
    method sendAsync (line 50) | private static void sendAsync(Predicate<ProducerBean> predicate, Produ...

FILE: springboot-rocketmq/src/main/java/cn/abel/queue/Application.java
  class Application (line 10) | @SpringBootApplication
    method main (line 12) | public static void main(String[] args) {

FILE: springboot-rocketmq/src/main/java/cn/abel/queue/config/JmsConfig.java
  class JmsConfig (line 7) | public class JmsConfig {

FILE: springboot-rocketmq/src/main/java/cn/abel/queue/controller/PublisherController.java
  class PublisherController (line 22) | @RestController
    method PublisherController (line 35) | public PublisherController() {
    method callback (line 45) | @RequestMapping("/text/rocketmq")

FILE: springboot-rocketmq/src/main/java/cn/abel/queue/service/ProducerService.java
  class ProducerService (line 15) | @Service
    method ProducerService (line 21) | public ProducerService(){
    method start (line 33) | public void start(){
    method getProducer (line 41) | public DefaultMQProducer getProducer(){
    method shutdown (line 47) | public void shutdown(){

FILE: springboot-rocketmq/src/main/java/cn/abel/queue/service/ReceiverService.java
  class ReceiverService (line 18) | @Service
    method ReceiverService (line 31) | public ReceiverService() throws MQClientException {

FILE: springboot-shiro/src/main/java/com/us/Application.java
  class Application (line 13) | @ComponentScan(basePackages ="com.us")
    method main (line 16) | public static void main(String[] args) {

FILE: springboot-shiro/src/main/java/com/us/bean/Event.java
  class Event (line 6) | public class Event {
    method getId (line 30) | public Integer getId() {
    method setId (line 33) | public void setId(Integer id) {
    method getRawEventId (line 36) | public Integer getRawEventId() {
    method setRawEventId (line 39) | public void setRawEventId(Integer rawEventId) {
    method getHost (line 42) | public String getHost() {
    method setHost (line 45) | public void setHost(String host) {
    method getIp (line 48) | public String getIp() {
    method setIp (line 51) | public void setIp(String ip) {
    method getSource (line 54) | public String getSource() {
    method setSource (line 57) | public void setSource(String source) {
    method getType (line 60) | public String getType() {
    method setType (line 63) | public void setType(String type) {
    method getStartTime (line 66) | public Date getStartTime() {
    method setStartTime (line 69) | public void setStartTime(Date startTime) {
    method getEndTime (line 72) | public Date getEndTime() {
    method setEndTime (line 75) | public void setEndTime(Date endTime) {
    method getContent (line 78) | public String getContent() {
    method setContent (line 81) | public void setContent(String content) {
    method getDataType (line 84) | public String getDataType() {
    method setDataType (line 87) | public void setDataType(String dataType) {
    method getSuggest (line 90) | public String getSuggest() {
    method setSuggest (line 93) | public void setSuggest(String suggest) {
    method getBusinessSystemId (line 96) | public Integer getBusinessSystemId() {
    method setBusinessSystemId (line 99) | public void setBusinessSystemId(Integer businessSystemId) {
    method getDepartmentId (line 102) | public Integer getDepartmentId() {
    method setDepartmentId (line 105) | public void setDepartmentId(Integer departmentId) {
    method getStatus (line 108) | public String getStatus() {
    method setStatus (line 111) | public void setStatus(String status) {
    method getOccurCount (line 114) | public Integer getOccurCount() {
    method setOccurCount (line 117) | public void setOccurCount(Integer occurCount) {
    method getOwner (line 120) | public String getOwner() {
    method setOwner (line 123) | public void setOwner(String owner) {
    method getResponsedTime (line 126) | public Date getResponsedTime() {
    method setResponsedTime (line 129) | public void setResponsedTime(Date responsedTime) {
    method getResponsedBy (line 132) | public String getResponsedBy() {
    method setResponsedBy (line 135) | public void setResponsedBy(String responsedBy) {
    method getResolvedTime (line 138) | public Date getResolvedTime() {
    method setResolvedTime (line 141) | public void setResolvedTime(Date resolvedTime) {
    method getResolvedBy (line 144) | public String getResolvedBy() {
    method setResolvedBy (line 147) | public void setResolvedBy(String resolvedBy) {
    method getClosedTime (line 150) | public Date getClosedTime() {
    method setClosedTime (line 153) | public void setClosedTime(Date closedTime) {
    method getClosedBy (line 156) | public String getClosedBy() {
    method setClosedBy (line 159) | public void setClosedBy(String closedBy) {
    method toString (line 162) | @Override

FILE: springboot-shiro/src/main/java/com/us/bean/Permission.java
  class Permission (line 4) | public class Permission {
    method getId (line 11) | public Integer getId() {
    method setId (line 15) | public void setId(Integer id) {
    method getName (line 19) | public String getName() {
    method setName (line 23) | public void setName(String name) {
    method getPermissionUrl (line 27) | public String getPermissionUrl() {
    method setPermissionUrl (line 31) | public void setPermissionUrl(String permissionUrl) {
    method getMethod (line 35) | public String getMethod() {
    method setMethod (line 39) | public void setMethod(String method) {
    method getDescription (line 43) | public String getDescription() {
    method setDescription (line 47) | public void setDescription(String description) {
    method toString (line 51) | @Override

FILE: springboot-shiro/src/main/java/com/us/bean/Role.java
  class Role (line 5) | public class Role {
    method getId (line 11) | public Integer getId() {
    method setId (line 14) | public void setId(Integer id) {
    method getName (line 17) | public String getName() {
    method setName (line 20) | public void setName(String name) {
    method getRoleLevel (line 23) | public Integer getRoleLevel() {
    method setRoleLevel (line 26) | public void setRoleLevel(Integer roleLevel) {
    method getDescription (line 29) | public String getDescription() {
    method setDescription (line 32) | public void setDescription(String description) {
    method toString (line 35) | @Override

FILE: springboot-shiro/src/main/java/com/us/bean/User.java
  class User (line 6) | public class User   {
    method getId (line 22) | public Integer getId() {
    method setId (line 25) | public void setId(Integer id) {
    method getCnname (line 28) | public String getCnname() {
    method setCnname (line 31) | public void setCnname(String cnname) {
    method getUsername (line 34) | public String getUsername() {
    method getPassword (line 37) | public String getPassword() {
    method setPassword (line 40) | public void setPassword(String password) {
    method getEmail (line 43) | public String getEmail() {
    method setEmail (line 46) | public void setEmail(String email) {
    method getTelephone (line 49) | public String getTelephone() {
    method setTelephone (line 52) | public void setTelephone(String telephone) {
    method getMobilePhone (line 55) | public String getMobilePhone() {
    method setMobilePhone (line 58) | public void setMobilePhone(String mobilePhone) {
    method getWechatId (line 61) | public String getWechatId() {
    method setWechatId (line 64) | public void setWechatId(String wechatId) {
    method getSkill (line 67) | public String getSkill() {
    method setSkill (line 70) | public void setSkill(String skill) {
    method getDepartmentId (line 73) | public Integer getDepartmentId() {
    method setDepartmentId (line 76) | public void setDepartmentId(Integer departmentId) {
    method getLoginCount (line 79) | public Integer getLoginCount() {
    method setLoginCount (line 82) | public void setLoginCount(Integer loginCount) {
    method getRoles (line 86) | public List<Role> getRoles() {
    method setRoles (line 90) | public void setRoles(List<Role> roles) {
    method toString (line 93) | @Override

FILE: springboot-shiro/src/main/java/com/us/config/DataSourceConfig.java
  class DataSourceConfig (line 11) | @Configuration
    method dataSource (line 16) | @Bean(name="dataSource")

FILE: springboot-shiro/src/main/java/com/us/config/MapperScannerConfig.java
  class MapperScannerConfig (line 7) | @Configuration
    method mapperScannerConfigurer (line 10) | @Bean

FILE: springboot-shiro/src/main/java/com/us/config/MyBatisConfig.java
  class MyBatisConfig (line 14) | @Configuration
    method sqlSessionFactory (line 20) | @Bean(name = "sqlSessionFactory")

FILE: springboot-shiro/src/main/java/com/us/config/TransactionConfig.java
  class TransactionConfig (line 12) | @Configuration
    method annotationDrivenTransactionManager (line 18) | @Override

FILE: springboot-shiro/src/main/java/com/us/controller/EventController.java
  class EventController (line 11) | @RequestMapping(value = "/events")
    method list (line 19) | @RequestMapping(method = RequestMethod.GET)
    method detail (line 24) | @RequestMapping(value = "/{id}", method = RequestMethod.GET)
    method create (line 29) | @RequestMapping(method = RequestMethod.POST)
    method update (line 34) | @RequestMapping(method = RequestMethod.PUT)
    method delete (line 39) | @RequestMapping(value = "/{id}", method = RequestMethod.DELETE)

FILE: springboot-shiro/src/main/java/com/us/controller/LoginController.java
  class LoginController (line 20) | @RestController
    method login (line 24) | @RequestMapping(value = "/login", method = RequestMethod.POST)
    method index (line 45) | @RequestMapping("/")

FILE: springboot-shiro/src/main/java/com/us/controller/UserController.java
  class UserController (line 12) | @RequestMapping(value = "/users")
    method list (line 20) | @RequestMapping(method = RequestMethod.GET)
    method detail (line 25) | @RequestMapping(value = "/{id}", method = RequestMethod.GET)
    method create (line 30) | @RequestMapping(method = RequestMethod.POST)
    method update (line 35) | @RequestMapping(method = RequestMethod.PUT)
    method delete (line 40) | @RequestMapping(value = "/{id}", method = RequestMethod.DELETE)

FILE: springboot-shiro/src/main/java/com/us/dao/EventDao.java
  type EventDao (line 8) | public interface EventDao {
    method getByMap (line 10) | List<Event> getByMap(Map<String, Object> map);
    method getById (line 11) | Event getById(Integer id);
    method create (line 12) | Integer create(Event event);
    method update (line 13) | int update(Event event);
    method delete (line 14) | int delete(Integer id);

FILE: springboot-shiro/src/main/java/com/us/dao/PermissionDao.java
  type PermissionDao (line 8) | public interface PermissionDao {
    method getByMap (line 10) | List<Permission> getByMap(Map<String, Object> map);
    method getById (line 12) | Permission getById(Integer id);
    method create (line 14) | Integer create(Permission permission);
    method update (line 16) | int update(Permission permission);
    method delete (line 18) | int delete(Integer id);
    method getList (line 20) | List<Permission> getList();
    method getByUserId (line 22) | List<Permission> getByUserId(Integer userId);

FILE: springboot-shiro/src/main/java/com/us/dao/RoleDao.java
  type RoleDao (line 9) | public interface RoleDao {
    method getByMap (line 11) | List<Role> getByMap(Map<String, Object> map);
    method getById (line 12) | Role getById(Integer id);
    method create (line 13) | Integer create(Role role);
    method update (line 14) | int update(Role role);
    method delete (line 15) | int delete(Integer id);

FILE: springboot-shiro/src/main/java/com/us/dao/UserDao.java
  type UserDao (line 8) | public interface UserDao {
    method getByMap (line 10) | List<User> getByMap(Map<String, Object> map);
    method getById (line 11) | User getById(Integer id);
    method create (line 12) | Integer create(User user);
    method update (line 13) | int update(User user);
    method delete (line 14) | int delete(Integer id);
    method getByUserName (line 15) | User getByUserName(String userName);

FILE: springboot-shiro/src/main/java/com/us/service/EventService.java
  class EventService (line 11) | @Service
    method getByMap (line 16) | public List<Event> getByMap(Map<String,Object> map) {
    method getById (line 20) | public Event getById(Integer id) {
    method create (line 24) | public Event create(Event event) {
    method update (line 29) | public Event update(Event event) {
    method delete (line 34) | public int delete(Integer id) {

FILE: springboot-shiro/src/main/java/com/us/service/PermissionService.java
  class PermissionService (line 11) | @Service
    method getByMap (line 16) | public List<Permission> getByMap(Map<String,Object> map) {
    method getById (line 20) | public Permission getById(Integer id) {
    method create (line 24) | public Permission create(Permission permission) {
    method update (line 29) | public Permission update(Permission permission) {
    method delete (line 34) | public int delete(Integer id) {

FILE: springboot-shiro/src/main/java/com/us/service/RoleService.java
  class RoleService (line 12) | @Service
    method getByMap (line 17) | public List<Role> getByMap(Map<String,Object> map) {
    method getById (line 21) | public Role getById(Integer id) {
    method create (line 25) | public Role create(Role role) {
    method update (line 30) | public Role update(Role role) {
    method delete (line 35) | public int delete(Integer id) {

FILE: springboot-shiro/src/main/java/com/us/service/UserService.java
  class UserService (line 11) | @Service
    method getByMap (line 16) | public List<User> getByMap(Map<String,Object> map) {
    method getById (line 20) | public User getById(Integer id) {
    method create (line 24) | public User create(User user) {
    method update (line 29) | public User update(User user) {
    method delete (line 34) | public int delete(Integer id) {
    method getByUserName (line 38) | public User getByUserName(String userName) {

FILE: springboot-shiro/src/main/java/com/us/shiro/ShiroConfiguration.java
  class ShiroConfiguration (line 25) | @Configuration
    method lifecycleBeanPostProcessor (line 32) | @Bean(name = "lifecycleBeanPostProcessor")
    method hashedCredentialsMatcher (line 42) | @Bean(name = "hashedCredentialsMatcher")
    method shiroRealm (line 55) | @Bean(name = "shiroRealm")
    method securityManager (line 77) | @Bean(name = "securityManager")
    method shiroFilterFactoryBean (line 89) | @Bean(name = "shiroFilter")
    method defaultAdvisorAutoProxyCreator (line 117) | @Bean
    method authorizationAttributeSourceAdvisor (line 129) | @Bean

FILE: springboot-shiro/src/main/java/com/us/shiro/ShiroRealm.java
  class ShiroRealm (line 23) | public class ShiroRealm extends AuthorizingRealm {
    method doGetAuthorizationInfo (line 30) | @Override
    method doGetAuthenticationInfo (line 55) | @Override

FILE: springboot-shiro2/src/main/java/cn/abel/rest/ShiroRestApplication.java
  class ShiroRestApplication (line 12) | @SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
    method main (line 16) | public static void main(String[] args) {

FILE: springboot-shiro2/src/main/java/cn/abel/rest/config/RedisConfig.java
  class RedisConfig (line 42) | @Configuration
    method keyGenerator (line 77) | @Override
    method cacheManager (line 94) | @Override
    method redisTemplate (line 129) | @Bean(name = "redisTemplate")
    method stringRedisTemplate (line 135) | @Bean(name = "stringRedisTemplate")
    method redisConnectionFactory (line 140) | private RedisConnectionFactory redisConnectionFactory() {
    method connectionFactory (line 144) | private RedisConnectionFactory connectionFactory(Integer maxActive,
    method getTemplate (line 174) | private RedisTemplate<String, Object> getTemplate(RedisConnectionFacto...
    method jackson2JsonRedisSerializer (line 188) | private RedisSerializer<Object> jackson2JsonRedisSerializer() {

FILE: springboot-shiro2/src/main/java/cn/abel/rest/constants/Constants.java
  type Constants (line 4) | public interface Constants {

FILE: springboot-shiro2/src/main/java/cn/abel/rest/controller/LoginController.java
  class LoginController (line 24) | @RestController
    method login (line 38) | @RequestMapping(value = "/login", method = RequestMethod.POST)
    method loginInfo (line 51) | @GetMapping("/logininfo")
    method logout (line 72) | @PostMapping("/logout")

FILE: springboot-shiro2/src/main/java/cn/abel/rest/exception/DefaultErrorController.java
  class DefaultErrorController (line 22) | @Controller
    method DefaultErrorController (line 25) | public DefaultErrorController(ServerProperties serverProperties) {
    method error (line 32) | @Override
    method errorHtml (line 48) | @Override

FILE: springboot-shiro2/src/main/java/cn/abel/rest/exception/DefaultExceptionHandler.java
  class DefaultExceptionHandler (line 25) | @ControllerAdvice
    method handleMethodArgumentNotValidException (line 44) | @ResponseBody
    method handleConstraintViolationException (line 65) | @ResponseBody
    method processServiceException (line 84) | @ExceptionHandler({ServiceException.class})
    method processUnauthorizedException (line 102) | @ExceptionHandler({UnauthorizedException.class})
    method processException (line 116) | @ExceptionHandler({RuntimeException.class})
    method processException (line 130) | @ExceptionHandler({Exception.class})

FILE: springboot-shiro2/src/main/java/cn/abel/rest/freemarker/CustomFreeMarkerView.java
  class CustomFreeMarkerView (line 14) | public class CustomFreeMarkerView extends FreeMarkerView {
    method exposeHelpers (line 18) | @Override

FILE: springboot-shiro2/src/main/java/cn/abel/rest/freemarker/FreeMarkerConfig.java
  class FreeMarkerConfig (line 16) | @Configuration
    method setSharedVariable (line 26) | @PostConstruct

FILE: springboot-shiro2/src/main/java/cn/abel/rest/shiro/HttpHeaderSessionManager.java
  class HttpHeaderSessionManager (line 12) | public class HttpHeaderSessionManager extends DefaultWebSessionManager {
    method getSessionId (line 16) | @Override

FILE: springboot-shiro2/src/main/java/cn/abel/rest/shiro/RedisSessionDao.java
  class RedisSessionDao (line 19) | public class RedisSessionDao extends EnterpriseCacheSessionDAO {
    method cache (line 24) | private Cache cache() {
    method doCreate (line 35) | @Override
    method doReadSession (line 48) | @Override
    method doUpdate (line 73) | @Override
    method doDelete (line 94) | @Override

FILE: springboot-shiro2/src/main/java/cn/abel/rest/shiro/ShiroConfig.java
  class ShiroConfig (line 40) | @Configuration
    method shiroFilter (line 50) | @Bean(name = "shiroFilter")
    method shiroRedisCacheManager (line 82) | @Bean(name = "shiroRedisCacheManager")
    method realm (line 98) | @Bean
    method sessionValidationScheduler (line 119) | @Bean(name = "sessionValidationScheduler")
    method sessionDAO (line 137) | @Bean
    method sessionIdCookie (line 150) | @Bean
    method rememberMeCookie (line 163) | @Bean
    method sessionManager (line 177) | @Bean
    method securityManager (line 199) | @Bean
    method rememberMeManager (line 215) | @Bean
    method credentialsMatcher (line 229) | @Bean(name = "credentialsMatcher")
    method methodInvokingFactoryBean (line 241) | @Bean
    method lifecycleBeanPostProcessor (line 254) | @Bean
    method formAuthenticationFilter (line 259) | public ShiroFormAuthenticationFilter formAuthenticationFilter() {
    method advisorAutoProxyCreator (line 276) | @Bean
    method authorizationAttributeSourceAdvisor (line 292) | @Bean

FILE: springboot-shiro2/src/main/java/cn/abel/rest/shiro/ShiroProperty.java
  class ShiroProperty (line 9) | @Configuration
    method getShiroRetryExpireTimeRedis (line 24) | public int getShiroRetryExpireTimeRedis() {
    method setShiroRetryExpireTimeRedis (line 28) | public void setShiroRetryExpireTimeRedis(int shiroRetryExpireTimeRedis) {
    method getShiroAuthorizationExpireTimeRedis (line 32) | public int getShiroAuthorizationExpireTimeRedis() {
    method setShiroAuthorizationExpireTimeRedis (line 36) | public void setShiroAuthorizationExpireTimeRedis(int shiroAuthorizatio...
    method getShiroRetryMax (line 40) | public int getShiroRetryMax() {
    method setShiroRetryMax (line 44) | public void setShiroRetryMax(int shiroRetryMax) {
    method getShiroSessionExpireTimeRedis (line 48) | public Integer getShiroSessionExpireTimeRedis() {
    method setShiroSessionExpireTimeRedis (line 52) | public void setShiroSessionExpireTimeRedis(Integer shiroSessionExpireT...

FILE: springboot-shiro2/src/main/java/cn/abel/rest/shiro/ShiroRealm.java
  class ShiroRealm (line 34) | @Component
    method doGetAuthenticationInfo (line 53) | @Override
    method doGetAuthorizationInfo (line 72) | @Override
    method clearCachedAuthorizationInfo (line 110) | @Override
    method clearCachedAuthenticationInfo (line 116) | @Override
    method clearCache (line 122) | @Override
    method clearAllCachedAuthorizationInfo (line 128) | public void clearAllCachedAuthorizationInfo() {
    method clearAllCachedAuthenticationInfo (line 134) | public void clearAllCachedAuthenticationInfo() {
    method clearAllCache (line 141) | public void clearAllCache() {

FILE: springboot-shiro2/src/main/java/cn/abel/rest/shiro/ShiroRedisCacheManager.java
  class ShiroRedisCacheManager (line 22) | @Component
    method getCache (line 36) | @Override
    class ShiroRedisCache (line 49) | public class ShiroRedisCache<K, V> implements Cache<K, V> {
      method ShiroRedisCache (line 56) | public ShiroRedisCache(String cacheKey, long expireTime) {
      method get (line 61) | @Override
      method put (line 68) | @Override
      method remove (line 78) | @Override
      method clear (line 93) | @Override
      method size (line 98) | @Override
      method keys (line 104) | @Override
      method values (line 110) | @Override
      method hashKey (line 116) | protected Object hashKey(K key) {

FILE: springboot-shiro2/src/main/java/cn/abel/rest/shiro/ShiroUser.java
  class ShiroUser (line 11) | public class ShiroUser implements Serializable {
    method getUserId (line 23) | public Long getUserId() {
    method setUserId (line 27) | public void setUserId(Long userId) {
    method getLoginName (line 31) | public String getLoginName() {
    method setLoginName (line 35) | public void setLoginName(String loginName) {
    method setNickName (line 39) | public void setNickName(String nickName) {
    method ShiroUser (line 43) | public ShiroUser(Long userId, String loginName, String nickName) {
    method getNickName (line 49) | public String getNickName() {
    method getToken (line 53) | public String getToken() {
    method setToken (line 57) | public void setToken(String token) {
    method toString (line 64) | @Override
    method hashCode (line 72) | @Override
    method equals (line 80) | @Override

FILE: springboot-shiro2/src/main/java/cn/abel/rest/shiro/UuidSessionIdGenerator.java
  class UuidSessionIdGenerator (line 14) | public class UuidSessionIdGenerator implements SessionIdGenerator {
    method generateId (line 16) | @Override

FILE: springboot-shiro2/src/main/java/cn/abel/rest/shiro/credentials/PasswordHelper.java
  class PasswordHelper (line 10) | public class PasswordHelper {
    method setAlgorithmName (line 15) | public void setAlgorithmName(String algorithmName) {
    method setHashIterations (line 19) | public void setHashIterations(int hashIterations) {
    method encryptPassword (line 23) | public static String encryptPassword(String userName, String password) {

FILE: springboot-shiro2/src/main/java/cn/abel/rest/shiro/credentials/RetryLimitHashedCredentialsMatcher.java
  class RetryLimitHashedCredentialsMatcher (line 23) | public class RetryLimitHashedCredentialsMatcher extends HashedCredential...
    method RetryLimitHashedCredentialsMatcher (line 33) | public RetryLimitHashedCredentialsMatcher(CacheManager cacheManager) {
    method doCredentialsMatch (line 37) | @Override

FILE: springboot-shiro2/src/main/java/cn/abel/rest/shiro/credentials/ThirdPartySupportedToken.java
  class ThirdPartySupportedToken (line 9) | public class ThirdPartySupportedToken extends UsernamePasswordToken {
    method ThirdPartySupportedToken (line 20) | public ThirdPartySupportedToken(
    method getUsername (line 29) | @Override
    method setUsername (line 34) | @Override
    method getPassword (line 39) | @Override
    method setPassword (line 44) | @Override
    method getPrincipal (line 49) | @Override
    method getCredentials (line 54) | @Override
    method getHost (line 59) | @Override
    method setHost (line 64) | @Override
    method isRememberMe (line 69) | @Override
    method setRememberMe (line 74) | @Override
    method getAccessToken (line 79) | public String getAccessToken() {
    method setAccessToken (line 83) | public void setAccessToken(String accessToken) {
    method clear (line 87) | @Override

FILE: springboot-shiro2/src/main/java/cn/abel/rest/shiro/ext/QuartzSessionValidationJob.java
  class QuartzSessionValidationJob (line 16) | public class QuartzSessionValidationJob implements Job {
    method execute (line 46) | @Override

FILE: springboot-shiro2/src/main/java/cn/abel/rest/shiro/ext/QuartzSessionValidationScheduler.java
  class QuartzSessionValidationScheduler (line 23) | public class QuartzSessionValidationScheduler implements SessionValidati...
    method QuartzSessionValidationScheduler (line 37) | public QuartzSessionValidationScheduler() {
    method QuartzSessionValidationScheduler (line 40) | public QuartzSessionValidationScheduler(ValidatingSessionManager sessi...
    method getScheduler (line 44) | protected Scheduler getScheduler() throws SchedulerException {
    method setScheduler (line 52) | public void setScheduler(Scheduler scheduler) {
    method setSessionManager (line 56) | public void setSessionManager(ValidatingSessionManager sessionManager) {
    method isEnabled (line 60) | @Override
    method setSessionValidationInterval (line 65) | public void setSessionValidationInterval(long sessionValidationInterva...
    method enableSessionValidation (line 69) | @Override
    method disableSessionValidation (line 104) | @Override

FILE: springboot-shiro2/src/main/java/cn/abel/rest/shiro/filter/ShiroFormAuthenticationFilter.java
  class ShiroFormAuthenticationFilter (line 28) | public class ShiroFormAuthenticationFilter extends FormAuthenticationFil...
    method onPreHandle (line 31) | @Override
    method onAccessDenied (line 52) | @Override
    method onLoginFailure (line 74) | @Override
    method onLoginSuccess (line 106) | @Override
    method createToken (line 124) | @Override
    method responseDirectly (line 143) | private boolean responseDirectly(HttpServletResponse response, Respons...

FILE: springboot-shiro2/src/main/java/cn/abel/rest/shiro/filter/ShiroLogoutFilter.java
  class ShiroLogoutFilter (line 16) | public class ShiroLogoutFilter extends LogoutFilter {
    method preHandle (line 20) | @Override

FILE: springboot-shiro2/src/main/java/cn/abel/rest/utils/ServletKit.java
  class ServletKit (line 14) | public class ServletKit {
    method getRequest (line 21) | public static HttpServletRequest getRequest() {
    method isStaticFile (line 31) | public static boolean isStaticFile(String uri) {

FILE: springboot-shiro2/src/main/java/cn/abel/rest/utils/SpringContextKit.java
  class SpringContextKit (line 16) | @Component
    method setApplicationContext (line 23) | @Override
    method getApplicationContext (line 28) | public static ApplicationContext getApplicationContext() {
    method getBean (line 32) | public static Object getBean(String name) throws BeansException {
    method getBean (line 36) | public static Object getBean(String name, Class requiredType) throws B...
    method getBean (line 41) | public static <T> T getBean(Class<T> clazz) throws BeansException {
    method containsBean (line 45) | public static boolean containsBean(String name) {
    method isSingleton (line 49) | public static boolean isSingleton(String name) throws NoSuchBeanDefini...
    method getType (line 53) | public static Class getType(String name) throws NoSuchBeanDefinitionEx...
    method getAliases (line 57) | public static String[] getAliases(String name) throws NoSuchBeanDefini...

FILE: springboot-springCloud/config/src/main/java/com/abel/ConfigApplication.java
  class ConfigApplication (line 12) | @SpringBootApplication
    method main (line 18) | public static void main(String[] args) {

FILE: springboot-springCloud/discovery/src/main/java/com/abel/DiscoveryApplication.java
  class DiscoveryApplication (line 11) | @SpringBootApplication
    method main (line 14) | public static void main(String[] args) {

FILE: springboot-springCloud/monitor/src/main/java/com/abel/MonitorApplication.java
  class MonitorApplication (line 11) | @SpringBootApplication
    method main (line 17) | public static void main(String[] args) {

FILE: springboot-springCloud/person/src/main/java/com/abel/PersonApplication.java
  class PersonApplication (line 9) | @SpringBootApplication
    method main (line 11) | public static void main(String[] args) {

FILE: springboot-springCloud/person/src/main/java/com/abel/bean/Person.java
  class Person (line 10) | @Entity
    method Person (line 18) | public Person() {
    method Person (line 22) | public Person(String name) {
    method getId (line 27) | public Long getId() {
    method setId (line 31) | public void setId(Long id) {
    method getName (line 35) | public String getName() {
    method setName (line 39) | public void setName(String name) {

FILE: springboot-springCloud/person/src/main/java/com/abel/controller/PersonController.java
  class PersonController (line 17) | @RestController
    method savePerson (line 22) | @RequestMapping(value = "/save", method = RequestMethod.POST)

FILE: springboot-springCloud/person/src/main/java/com/abel/dao/PersonRepository.java
  type PersonRepository (line 8) | public interface PersonRepository extends JpaRepository<Person, Long>{

FILE: springboot-springCloud/some/src/main/java/com/abel/SomeApplication.java
  class SomeApplication (line 13) | @SpringBootApplication
    method getsome (line 20) | @RequestMapping(value = "/getsome")
    method main (line 24) | public static void main(String[] args) {

FILE: springboot-springCloud/ui/src/main/java/com/abel/UiApplication.java
  class UiApplication (line 13) | @SpringBootApplication
    method main (line 19) | public static void main(String[] args) {

FILE: springboot-springCloud/ui/src/main/java/com/abel/bean/Person.java
  class Person (line 6) | public class Person {
    method Person (line 12) | public Person() {
    method Person (line 16) | public Person(String name) {
    method getId (line 21) | public Long getId() {
    method setId (line 25) | public void setId(Long id) {
    method getName (line 29) | public String getName() {
    method setName (line 33) | public void setName(String name) {

FILE: springboot-springCloud/ui/src/main/java/com/abel/controller/UiController.java
  class UiController (line 17) | @RestController
    method sendMessage (line 25) | @RequestMapping("/dispatch")
    method getSome (line 30) | @RequestMapping(value = "/getsome",produces={MediaType.TEXT_PLAIN_VALUE})

FILE: springboot-springCloud/ui/src/main/java/com/abel/service/PersonHystrixService.java
  class PersonHystrixService (line 14) | @Service
    method save (line 20) | @HystrixCommand(fallbackMethod = "fallbackSave") //使用HystrixCommand的fa...
    method fallbackSave (line 25) | public List<Person> fallbackSave(String name){

FILE: springboot-springCloud/ui/src/main/java/com/abel/service/PersonService.java
  type PersonService (line 18) | @FeignClient("person")
    method save (line 20) | @RequestMapping(method = RequestMethod.POST, value = "/save",

FILE: springboot-springCloud/ui/src/main/java/com/abel/service/SomeHystrixService.java
  class SomeHystrixService (line 12) | @Service
    method getSome (line 18) | @HystrixCommand(fallbackMethod = "fallbackSome") //HystrixCommand 的参数指...
    method fallbackSome (line 23) | public String fallbackSome(){

FILE: springboot-springSecurity2/src/main/java/com/us/example/Application.java
  class Application (line 13) | @ComponentScan(basePackages ="com.us.example")
    method main (line 16) | public static void main(String[] args) {

FILE: springboot-springSecurity2/src/main/java/com/us/example/config/DBconfig.java
  class DBconfig (line 13) | @Configuration
    method dataSource (line 18) | @Bean(name="dataSource")

FILE: springboot-springSecurity2/src/main/java/com/us/example/config/MyBatisConfig.java
  class MyBatisConfig (line 12) | @Configuration
    method sqlSessionFactory (line 19) | @Bean(name = "sqlSessionFactory")

FILE: springboot-springSecurity2/src/main/java/com/us/example/config/MyBatisScannerConfig.java
  class MyBatisScannerConfig (line 7) | @Configuration
    method MapperScannerConfigurer (line 9) | @Bean

FILE: springboot-springSecurity2/src/main/java/com/us/example/config/TransactionConfig.java
  class TransactionConfig (line 13) | @Configuration
    method annotationDrivenTransactionManager (line 19) | @Bean(name = "transactionManager")

FILE: springboot-springSecurity2/src/main/java/com/us/example/config/WebSecurityConfig.java
  class WebSecurityConfig (line 17) | @Configuration
    method configure (line 26) | @Autowired
    method configure (line 31) | @Override

FILE: springboot-springSecurity2/src/main/java/com/us/example/controller/HomeController.java
  class HomeController (line 17) | @Controller
    method getUsers (line 23) | @RequestMapping(method = RequestMethod.GET)
    method save (line 29) | @Secured({"ROLE_ADMIN","ROLE_USER"})
    method update (line 37) | @Secured("ROLE_ADMIN")
    method delete (line 45) | @Secured("ROLE_ADMIN")

FILE: springboot-springSecurity2/src/main/java/com/us/example/controller/LoginController.java
  class LoginController (line 14) | @RestController
    method login (line 17) | @RequestMapping(value = "/login")

FILE: springboot-springSecurity2/src/main/java/com/us/example/dao/UserDao.java
  type UserDao (line 6) | public interface UserDao {
    method findByUserName (line 7) | SysUser findByUserName(String username);
    method create (line 9) | int create (SysUser sysUser);

FILE: springboot-springSecurity2/src/main/java/com/us/example/domain/SysRole.java
  class SysRole (line 7) | public class SysRole {
    method getId (line 11) | public Integer getId() {
    method setId (line 14) | public void setId(Integer id) {
    method getName (line 17) | public String getName() {
    method setName (line 20) | public void setName(String name) {

FILE: springboot-springSecurity2/src/main/java/com/us/example/domain/SysUser.java
  class SysUser (line 14) | public class SysUser implements UserDetails {  // implements UserDetails...
    method getId (line 25) | public Integer getId() {
    method setId (line 29) | public void setId(Integer id) {
    method getUsername (line 33) | public String getUsername() {
    method setUsername (line 37) | public void setUsername(String username) {
    method getPassword (line 41) | public String getPassword() {
    method setPassword (line 45) | public void setPassword(String password) {
    method getRoles (line 49) | public List<SysRole> getRoles() {
    method setRoles (line 53) | public void setRoles(List<SysRole> roles) {
    method getRawPassword (line 57) | public String getRawPassword() {
    method setRawPassword (line 61) | public void setRawPassword(String rawPassword) {
    method isAccountNonExpired (line 66) | @JsonIgnore
    method isAccountNonLocked (line 72) | @JsonIgnore
    method isCredentialsNonExpired (line 78) | @JsonIgnore
    method isEnabled (line 85) | @JsonIgnore
    method getAuthorities (line 91) | @JsonIgnore
    method setGrantedAuthorities (line 97) | public void setGrantedAuthorities(List<? extends GrantedAuthority> aut...

FILE: springboot-springSecurity2/src/main/java/com/us/example/security/CustomUserService.java
  class CustomUserService (line 20) | @Service
    method loadUserByUsername (line 27) | @Override

FILE: springboot-springSecurity2/src/main/java/com/us/example/service/UserService.java
  class UserService (line 13) | @Service
    method create (line 18) | public SysUser create(SysUser sysUser){

FILE: springboot-springSecurity2/src/main/java/com/us/example/util/BCryptPasswordEncoderTest.java
  class BCryptPasswordEncoderTest (line 8) | public class BCryptPasswordEncoderTest {
    method main (line 9) | public static void main(String[] args) {

FILE: springboot-springSecurity2/src/main/java/com/us/example/util/MD5Util.java
  class MD5Util (line 8) | public class MD5Util {
    method encode (line 11) | public static String encode(String password) {
    method processEncode (line 16) | public static String processEncode(String password) {
    method main (line 41) | public static void main(String[] args) {

FILE: springboot-springSecurity3/src/main/java/com/us/example/Application.java
  class Application (line 13) | @ComponentScan(basePackages ="com.us.example")
    method main (line 16) | public static void main(String[] args) {

FILE: springboot-springSecurity3/src/main/java/com/us/example/config/DBconfig.java
  class DBconfig (line 13) | @Configuration
    method dataSource (line 18) | @Bean(name="dataSource")

FILE: springboot-springSecurity3/src/main/java/com/us/example/config/MyBatisConfig.java
  class MyBatisConfig (line 12) | @Configuration
    method sqlSessionFactory (line 19) | @Bean(name = "sqlSessionFactory")

FILE: springboot-springSecurity3/src/main/java/com/us/example/config/MyBatisScannerConfig.java
  class MyBatisScannerConfig (line 7) | @Configuration
    method MapperScannerConfigurer (line 9) | @Bean

FILE: springboot-springSecurity3/src/main/java/com/us/example/config/TransactionConfig.java
  class TransactionConfig (line 13) | @Configuration
    method annotationDrivenTransactionManager (line 19) | @Bean(name = "transactionManager")

FILE: springboot-springSecurity3/src/main/java/com/us/example/config/WebMvcConfig.java
  class WebMvcConfig (line 9) | @Configuration
    method addViewControllers (line 13) | @Override

FILE: springboot-springSecurity3/src/main/java/com/us/example/config/WebSecurityConfig.java
  class WebSecurityConfig (line 20) | @Configuration
    method customUserService (line 28) | @Bean
    method configure (line 33) | @Override
    method configure (line 39) | @Override

FILE: springboot-springSecurity3/src/main/java/com/us/example/controller/HomeController.java
  class HomeController (line 13) | @Controller
    method index (line 16) | @RequestMapping("/")
    method hello (line 24) | @RequestMapping("/admin")
    method login (line 30) | @RequestMapping("/login")
    method getList (line 35) | @RequestMapping(value = "/user", method = RequestMethod.GET)
    method save (line 42) | @RequestMapping(value = "/user", method = RequestMethod.POST)
    method update (line 49) | @RequestMapping(value = "/user", method = RequestMethod.PUT)

FILE: springboot-springSecurity3/src/main/java/com/us/example/dao/PermissionDao.java
  type PermissionDao (line 10) | public interface PermissionDao {
    method findAll (line 11) | public List<Permission> findAll();
    method findByAdminUserId (line 12) | public List<Permission> findByAdminUserId(int userId);

FILE: springboot-springSecurity3/src/main/java/com/us/example/dao/UserDao.java
  type UserDao (line 6) | public interface UserDao {
    method findByUserName (line 7) | public SysUser findByUserName(String username);

FILE: springboot-springSecurity3/src/main/java/com/us/example/domain/Msg.java
  class Msg (line 7) | public class Msg {
    method Msg (line 12) | public Msg(String title, String content, String etraInfo) {
    method getTitle (line 18) | public String getTitle() {
    method setTitle (line 21) | public void setTitle(String title) {
    method getContent (line 24) | public String getContent() {
    method setContent (line 27) | public void setContent(String content) {
    method getEtraInfo (line 30) | public String getEtraInfo() {
    method setEtraInfo (line 33) | public void setEtraInfo(String etraInfo) {

FILE: springboot-springSecurity3/src/main/java/com/us/example/domain/Permission.java
  class Permission (line 6) | public class Permission {
    method getId (line 24) | public int getId() {
    method setId (line 28) | public void setId(int id) {
    method getName (line 32) | public String getName() {
    method setName (line 36) | public void setName(String name) {
    method getDescritpion (line 40) | public String getDescritpion() {
    method setDescritpion (line 44) | public void setDescritpion(String descritpion) {
    method getUrl (line 48) | public String getUrl() {
    method setUrl (line 52) | public void setUrl(String url) {
    method getPid (line 56) | public int getPid() {
    method setPid (line 60) | public void setPid(int pid) {
    method getMethod (line 64) | public String getMethod() {
    method setMethod (line 68) | public void setMethod(String method) {

FILE: springboot-springSecurity3/src/main/java/com/us/example/domain/SysRole.java
  class SysRole (line 7) | public class SysRole {
    method getId (line 11) | public Integer getId() {
    method setId (line 14) | public void setId(Integer id) {
    method getName (line 17) | public String getName() {
    method setName (line 20) | public void setName(String name) {

FILE: springboot-springSecurity3/src/main/java/com/us/example/domain/SysUser.java
  class SysUser (line 9) | public class SysUser {
    method getId (line 16) | public Integer getId() {
    method setId (line 20) | public void setId(Integer id) {
    method getUsername (line 24) | public String getUsername() {
    method setUsername (line 28) | public void setUsername(String username) {
    method getPassword (line 32) | public String getPassword() {
    method setPassword (line 36) | public void setPassword(String password) {
    method getRoles (line 40) | public List<SysRole> getRoles() {
    method setRoles (line 44) | public void setRoles(List<SysRole> roles) {

FILE: springboot-springSecurity3/src/main/java/com/us/example/service/CustomUserService.java
  class CustomUserService (line 23) | @Service
    method loadUserByUsername (line 31) | public UserDetails loadUserByUsername(String username) {

FILE: springboot-springSecurity3/src/main/java/com/us/example/service/MyAccessDecisionManager.java
  class MyAccessDecisionManager (line 20) | @Service
    method decide (line 24) | @Override
    method supports (line 54) | @Override
    method supports (line 59) | @Override

FILE: springboot-springSecurity3/src/main/java/com/us/example/service/MyFilterSecurityInterceptor.java
  class MyFilterSecurityInterceptor (line 23) | @Service
    method setMyAccessDecisionManager (line 30) | @Autowired
    method init (line 36) | @Override
    method doFilter (line 41) | @Override
    method invoke (line 49) | public void invoke(FilterInvocation fi) throws IOException, ServletExc...
    method destroy (line 63) | @Override
    method getSecureObjectClass (line 68) | @Override
    method obtainSecurityMetadataSource (line 74) | @Override

FILE: springboot-springSecurity3/src/main/java/com/us/example/service/MyGrantedAuthority.java
  class MyGrantedAuthority (line 8) | public class MyGrantedAuthority implements GrantedAuthority {
    method getPermissionUrl (line 13) | public String getPermissionUrl() {
    method setPermissionUrl (line 17) | public void setPermissionUrl(String permissionUrl) {
    method getMethod (line 21) | public String getMethod() {
    method setMethod (line 25) | public void setMethod(String method) {
    method MyGrantedAuthority (line 29) | public MyGrantedAuthority(String url, String method) {
    method getAuthority (line 34) | @Override

FILE: springboot-springSecurity3/src/main/java/com/us/example/service/MyInvocationSecurityMetadataSourceService.java
  class MyInvocationSecurityMetadataSourceService (line 19) | @Service
    method getAttributes (line 27) | @Override
    method getAllConfigAttributes (line 34) | @Override
    method supports (line 39) | @Override

FILE: springboot-springSecurity4/src/main/java/com/yy/example/Application.java
  class Application (line 13) | @ComponentScan(basePackages ="com.yy.example")
    method main (line 16) | public static void main(String[] args) {

FILE: springboot-springSecurity4/src/main/java/com/yy/example/bean/Permission.java
  class Permission (line 4) | public class Permission {
    method getId (line 11) | public Integer getId() {
    method setId (line 15) | public void setId(Integer id) {
    method getName (line 19) | public String getName() {
    method setName (line 23) | public void setName(String name) {
    method getPermissionUrl (line 27) | public String getPermissionUrl() {
    method setPermissionUrl (line 31) | public void setPermissionUrl(String permissionUrl) {
    method getMethod (line 35) | public String getMethod() {
    method setMethod (line 39) | public void setMethod(String method) {
    method getDescription (line 43) | public String getDescription() {
    method setDescription (line 47) | public void setDescription(String description) {
    method toString (line 51) | @Override

FILE: springboot-springSecurity4/src/main/java/com/yy/example/bean/Role.java
  class Role (line 5) | public class Role implements Comparable<Role>{
    method getId (line 12) | public Integer getId() {
    method setId (line 15) | public void setId(Integer id) {
    method getName (line 18) | public String getName() {
    method setName (line 21) | public void setName(String name) {
    method getRoleLevel (line 24) | public Integer getRoleLevel() {
    method setRoleLevel (line 27) | public void setRoleLevel(Integer roleLevel) {
    method getDescription (line 30) | public String getDescription() {
    method setDescription (line 33) | public void setDescription(String description) {
    method getMenuItems (line 36) | public String getMenuItems() {
    method setMenuItems (line 40) | public void setMenuItems(String menuItems) {
    method compareTo (line 44) | @Override
    method equals (line 55) | @Override
    method toString (line 65) | @Override

FILE: springboot-springSecurity4/src/main/java/com/yy/example/bean/User.java
  class User (line 10) | public class User implements UserDetails {
    method isAccountNonExpired (line 27) | @Override
    method isAccountNonLocked (line 33) | @Override
    method isCredentialsNonExpired (line 39) | @Override
    method isEnabled (line 45) | @Override
    method setUsername (line 51) | public void setUsername(String username) {
    method getAuthorities (line 55) | @JsonIgnore
    method setGrantedAuthorities (line 60) | public void setGrantedAuthorities(List<? extends GrantedAuthority> aut...
    method getId (line 64) | public Integer getId() {
    method setId (line 68) | public void setId(Integer id) {
    method getCnname (line 72) | public String getCnname() {
    method setCnname (line 76) | public void setCnname(String cnname) {
    method getUsername (line 80) | public String getUsername() {
    method getPassword (line 84) | public String getPassword() {
    method setPassword (line 88) | public void setPassword(String password) {
    method getEmail (line 92) | public String getEmail() {
    method setEmail (line 96) | public void setEmail(String email) {
    method getTelephone (line 100) | public String getTelephone() {
    method setTelephone (line 104) | public void setTelephone(String telephone) {
    method getMobilePhone (line 108) | public String getMobilePhone() {
    method setMobilePhone (line 112) | public void setMobilePhone(String mobilePhone) {
    method getRePassword (line 116) | public String getRePassword() {
    method setRePassword (line 120) | public void setRePassword(String rePassword) {
    method getHistoryPassword (line 124) | public String getHistoryPassword() {
    method setHistoryPassword (line 128) | public void setHistoryPassword(String historyPassword) {
    method getRole (line 132) | public Role getRole() {
    method setRole (line 136) | public void setRole(Role role) {
    method getRoleId (line 140) | public Integer getRoleId() {
    method setRoleId (line 144) | public void setRoleId(Integer roleId) {
    method toString (line 147) | @Override

FILE: springboot-springSecurity4/src/main/java/com/yy/example/config/DataSourceConfig.java
  class DataSourceConfig (line 11) | @Configuration
    method dataSource (line 16) | @Bean(name="dataSource")

FILE: springboot-springSecurity4/src/main/java/com/yy/example/config/MapperScannerConfig.java
  class MapperScannerConfig (line 7) | @Configuration
    method mapperScannerConfigurer (line 10) | @Bean

FILE: springboot-springSecurity4/src/main/java/com/yy/example/config/MyBatisConfig.java
  class MyBatisConfig (line 12) | @Configuration
    method sqlSessionFactory (line 18) | @Bean(name = "sqlSessionFactory")

FILE: springboot-springSecurity4/src/main/java/com/yy/example/config/MyBatisScannerConfig.java
  class MyBatisScannerConfig (line 7) | @Configuration
    method MapperScannerConfigurer (line 9) | @Bean

FILE: springboot-springSecurity4/src/main/java/com/yy/example/config/TransactionConfig.java
  class TransactionConfig (line 13) | @Configuration
    method annotationDrivenTransactionManager (line 19) | @Bean(name = "transactionManager")

FILE: springboot-springSecurity4/src/main/java/com/yy/example/config/WebSecurityConfig.java
  class WebSecurityConfig (line 26) | @Configuration
    method configure (line 35) | @Override
    method configure (line 60) | @Override
    method getSessionRegistry (line 76) | @Bean

FILE: springboot-springSecurity4/src/main/java/com/yy/example/controller/LoginController.java
  class LoginController (line 14) | @Controller
    method login (line 19) | @RequestMapping(value = "/login")

FILE: springboot-springSecurity4/src/main/java/com/yy/example/controller/UserController.java
  class UserController (line 7) | @RequestMapping(value = "/users")
    method list (line 12) | @RequestMapping(method = RequestMethod.GET)
    method detail (line 19) | @RequestMapping(value = "/{id}", method = RequestMethod.GET)
    method create (line 25) | @RequestMapping(method = RequestMethod.POST)
    method update (line 31) | @RequestMapping(method = RequestMethod.PUT)

FILE: springboot-springSecurity4/src/main/java/com/yy/example/dao/PermissionDao.java
  type PermissionDao (line 9) | public interface PermissionDao {
    method getByMap (line 11) | List<Permission> getByMap(Map<String, Object> map);
    method getById (line 13) | Permission getById(Integer id);
    method create (line 15) | Integer create(Permission permission);
    method update (line 17) | int update(Permission permission);
    method getByUserId (line 19) | List<Permission> getByUserId(Integer userId);

FILE: springboot-springSecurity4/src/main/java/com/yy/example/dao/UserDao.java
  type UserDao (line 9) | public interface UserDao {
    method getByMap (line 11) | List<User> getByMap(Map<String, Object> map);
    method getByRoleId (line 12) | List<User> getByRoleId(Map<String, Object> map);
    method getById (line 13) | User getById(Integer id);
    method create (line 14) | Integer create(User user);
    method update (line 15) | int update(User user);
    method getByUserName (line 16) | User getByUserName(String userName);

FILE: springboot-springSecurity4/src/main/java/com/yy/example/security/UrlAccessDecisionManager.java
  class UrlAccessDecisionManager (line 21) | @Service
    method decide (line 23) | @Override
    method supports (line 55) | @Override
    method supports (line 60) | @Override
    method matchers (line 66) | private boolean matchers(String url, HttpServletRequest request) {

FILE: springboot-springSecurity4/src/main/java/com/yy/example/security/UrlConfigAttribute.java
  class UrlConfigAttribute (line 10) | public class UrlConfigAttribute implements ConfigAttribute {
    method UrlConfigAttribute (line 14) | public UrlConfigAttribute(HttpServletRequest httpServletRequest) {
    method getAttribute (line 19) | @Override
    method getHttpServletRequest (line 24) | public HttpServletRequest getHttpServletRequest() {

FILE: springboot-springSecurity4/src/main/java/com/yy/example/security/UrlFilterSecurityInterceptor.java
  class UrlFilterSecurityInterceptor (line 17) | @Service
    method setUrlAccessDecisionManager (line 24) | @Autowired
    method init (line 30) | @Override
    method doFilter (line 35) | @Override
    method invoke (line 43) | public void invoke(FilterInvocation fi) throws IOException, ServletExc...
    method destroy (line 57) | @Override
    method getSecureObjectClass (line 62) | @Override
    method obtainSecurityMetadataSource (line 68) | @Override

FILE: springboot-springSecurity4/src/main/java/com/yy/example/security/UrlGrantedAuthority.java
  class UrlGrantedAuthority (line 8) | public class UrlGrantedAuthority implements GrantedAuthority {
    method getPermissionUrl (line 13) | public String getPermissionUrl() {
    method setPermissionUrl (line 17) | public void setPermissionUrl(String permissionUrl) {
    method getMethod (line 21) | public String getMethod() {
    method setMethod (line 25) | public void setMethod(String method) {
    method UrlGrantedAuthority (line 29) | public UrlGrantedAuthority (String permissionUrl, String method) {
    method getAuthority (line 34) | @Override

FILE: springboot-springSecurity4/src/main/java/com/yy/example/security/UrlMetadataSourceService.java
  class UrlMetadataSourceService (line 16) | @Service
    method getAttributes (line 20) | @Override
    method getAllConfigAttributes (line 29) | @Override
    method supports (line 34) | @Override

FILE: springboot-springSecurity4/src/main/java/com/yy/example/security/UrlUserService.java
  class UrlUserService (line 20) | @Service
    method loadUserByUsername (line 26) | @Override

FILE: springboot-springSecurity4/src/main/java/com/yy/example/service/UserService.java
  class UserService (line 11) | @Service
    method getById (line 19) | public User getById(Integer id) {

FILE: springboot-springSecurity4/src/main/java/com/yy/example/utils/MD5Util.java
  class MD5Util (line 12) | public class MD5Util {
    method encode (line 18) | public static String encode(String password) {
    method wechatEncode (line 26) | public static String wechatEncode(String password){
    method wehcatValidation (line 31) | public static boolean wehcatValidation(String str, String token){
    method processEncode (line 39) | public static String processEncode(String password) {
    method main (line 65) | public static void main(String[] args) {

FILE: springboot-swagger-ui/src/main/java/com/abel/example/Application.java
  class Application (line 14) | @ComponentScan(basePackages ="com.abel.example")
    method main (line 18) | public static void main(String[] args) {

FILE: springboot-swagger-ui/src/main/java/com/abel/example/Swagger2.java
  class Swagger2 (line 17) | @Configuration
    method createRestApi (line 28) | @Bean
    method apiInfo (line 43) | private ApiInfo apiInfo() {

FILE: springboot-swagger-ui/src/main/java/com/abel/example/bean/User.java
  class User (line 13) | @Entity
    method getName (line 45) | public String getName() {
    method setName (line 49) | public void setName(String name) {
    method getPassword (line 53) | @JsonIgnore
    method setPassword (line 58) | public void setPassword(String password) {
    method getUsername (line 62) | public String getUsername() {
    method setUsername (line 66) | public void setUsername(String username) {
    method getEmail (line 70) | public String getEmail() {
    method setEmail (line 74) | public void setEmail(String email) {
    method getMobilephone (line 78) | public String getMobilephone() {
    method setMobilephone (line 82) | public void setMobilephone(String mobilephone) {
    method getTelephone (line 86) | public String getTelephone() {
    method setTelephone (line 90) | public void setTelephone(String telephone) {
    method getUserType (line 94) | public Integer getUserType() {
    method setUserType (line 98) | public void setUserType(Integer userType) {
    method getCreateBy (line 102) | public String getCreateBy() {
    method setCreateBy (line 106) | public void setCreateBy(String createBy) {
    method getCreateTime (line 110) | public Date getCreateTime() {
    method setCreateTime (line 114) | public void setCreateTime(Date createTime) {
    method getUpdateBy (line 118) | public String getUpdateBy() {
    method setUpdateBy (line 122) | public void setUpdateBy(String updateBy) {
    method getUpdateTime (line 126) | public Date getUpdateTime() {
    method setUpdateTime (line 130) | public void setUpdateTime(Date updateTime) {
    method getDisabled (line 134) | public Integer getDisabled() {
    method setDisabled (line 138) | public void setDisabled(Integer disabled) {
    method getId (line 142) | public Long getId() {
    method setId (line 146) | public void setId(Long id) {

FILE: springboot-swagger-ui/src/main/java/com/abel/example/config/DBConfig.java
  class DBConfig (line 12) | @Configuration
    method dataSource (line 18) | @Bean(name="dataSource")

FILE: springboot-swagger-ui/src/main/java/com/abel/example/config/JpaConfig.java
  class JpaConfig (line 20) | @Configuration
    method entityManagerFactory (line 29) | @Bean
    method transactionManager (line 51) | @Bean

FILE: springboot-swagger-ui/src/main/java/com/abel/example/controller/UserController.java
  class UserController (line 20) | @Controller
    method findAll (line 34) | @RequestMapping(method = RequestMethod.GET)
    method getUserById (line 47) | @RequestMapping(value = "/{id}", method = RequestMethod.GET)
    method getUserByUserName (line 62) | @RequestMapping(value = "/byname", method = RequestMethod.GET)
    method getUsers (line 79) | @RequestMapping(value = "/byUserNameContain", method = RequestMethod.GET)
    method saveUser (line 97) | @RequestMapping(method = RequestMethod.POST)
    method updateUser (line 111) | @RequestMapping(method = RequestMethod.PUT)
    method deleteUser (line 125) | @RequestMapping(value = "/{id}", method = RequestMethod.DELETE)

FILE: springboot-swagger-ui/src/main/java/com/abel/example/dao/UserJpaDao.java
  type UserJpaDao (line 16) | public interface UserJpaDao extends JpaRepository<User, Long> {
    method findByName (line 24) | User findByName(String name);
    method getOne (line 26) | User getOne(Long id);
    method findByUsernameContaining (line 28) | List<User> findByUsernameContaining(String username);
    method getByUsernameIs (line 30) | User getByUsernameIs(String username);
    method findByNameLike (line 32) | @Query("select s from User s where name like CONCAT('%',:name,'%')")

FILE: springboot-swagger-ui/src/main/java/com/abel/example/service/UserService.java
  type UserService (line 10) | public interface UserService {
    method getUserByUserName (line 18) | public User getUserByUserName(String username);
    method getByUsernameContaining (line 20) | public List<User> getByUsernameContaining(String username);
    method saveUser (line 27) | User saveUser(User user);
    method removeUser (line 34) | int removeUser(Long id);
    method updateUser (line 41) | User updateUser(User user);
    method getUserById (line 48) | User getUserById(Long id);
    method listUsers (line 54) | List<User> listUsers();

FILE: springboot-swagger-ui/src/main/java/com/abel/example/serviceImpl/UserServiceImpl.java
  class UserServiceImpl (line 16) | @Service
    method getUserByUserName (line 25) | @Override
    method getByUsernameContaining (line 30) | @Override
    method saveUser (line 35) | @Override
    method removeUser (line 40) | @Override
    method updateUser (line 50) | @Override
    method getUserById (line 55) | @Override
    method listUsers (line 60) | @Override

FILE: springboot-swagger-ui/src/main/java/com/abel/example/util/CommonUtil.java
  class CommonUtil (line 11) | public  class CommonUtil {
    method getParameterMap (line 19) | public static Map<String, Object> getParameterMap(HttpServletRequest r...
Condensed preview — 492 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (1,067K chars).
[
  {
    "path": ".gitignore",
    "chars": 214,
    "preview": "\n/.settings\n/bin\n*/target/*\n/logs\n*/out/\n\n# filter config files, except .gitignore\n*.MF\n!.gitignore\n*.iml\n*.exe\n# eclips"
  },
  {
    "path": "README.md",
    "chars": 2736,
    "preview": "## 致歉\n由于自己懒以及身体对issuse 解决的不及时。请大家以后提issuse 的时候写清楚 模块名 比如“springboot-SpringSecurity4” 和问题,我会抽时间抓紧解决。\n\n## springboot-Sprin"
  },
  {
    "path": "abel-parent/pom.xml",
    "chars": 13833,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\"\n         xmlns:xsi=\"http://www"
  },
  {
    "path": "abel-util/pom.xml",
    "chars": 2168,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\"\n         xmlns:xsi=\"http://www"
  },
  {
    "path": "abel-util/src/main/java/cn/abel/code/InfoCode.java",
    "chars": 1717,
    "preview": "package cn.abel.code;\n\nimport org.apache.commons.lang3.builder.ToStringBuilder;\nimport org.apache.commons.lang3.builder."
  },
  {
    "path": "abel-util/src/main/java/cn/abel/exception/AppRuntimeException.java",
    "chars": 585,
    "preview": "package cn.abel.exception;\n\n\nimport cn.abel.code.InfoCode;\n\n/**\n * 接口服务抛出的异常\n *\n */\npublic class AppRuntimeException ext"
  },
  {
    "path": "abel-util/src/main/java/cn/abel/exception/HttpExeption.java",
    "chars": 349,
    "preview": "package cn.abel.exception;\n\npublic class HttpExeption extends Exception {\n\t\n\tprivate static final long serialVersionUID "
  },
  {
    "path": "abel-util/src/main/java/cn/abel/exception/ServiceException.java",
    "chars": 1196,
    "preview": "package cn.abel.exception;\n\nimport cn.abel.code.*;\n\n/**\n * 服务异常类\n *\n */\n@SuppressWarnings(\"serial\")\npublic class Service"
  },
  {
    "path": "abel-util/src/main/java/cn/abel/response/ResponseEntity.java",
    "chars": 1590,
    "preview": "package cn.abel.response;\n\n\nimport cn.abel.code.*;\n\nimport java.util.HashMap;\n\n/**\n * Created by guoshan on 2018/3/21.\n "
  },
  {
    "path": "abel-util/src/main/java/cn/abel/utils/DateTimeUtils.java",
    "chars": 7151,
    "preview": "package cn.abel.utils;\n\nimport cn.abel.exception.ServiceException;\nimport org.apache.commons.lang3.StringUtils;\nimport o"
  },
  {
    "path": "springWebSocket/pom.xml",
    "chars": 2651,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\"\n         xmlns:xsi=\"http://www"
  },
  {
    "path": "springWebSocket/src/main/java/com/us/example/Application.java",
    "chars": 640,
    "preview": "package com.us.example;\n\n/**\n * Created by yangyibo on 16/12/29.\n */\nimport org.springframework.boot.autoconfigure.Sprin"
  },
  {
    "path": "springWebSocket/src/main/java/com/us/example/bean/Message.java",
    "chars": 202,
    "preview": "package com.us.example.bean;\n\n/**\n * Created by yangyibo on 16/12/29.\n * 浏览器向服务器发送的消息使用此类接受\n */\npublic class Message {\n "
  },
  {
    "path": "springWebSocket/src/main/java/com/us/example/bean/Response.java",
    "chars": 447,
    "preview": "package com.us.example.bean;\n\n/**\n * Created by yangyibo on 16/12/29.\n * 服务器向浏览器发送的此类消息。\n */\npublic class Response {\n   "
  },
  {
    "path": "springWebSocket/src/main/java/com/us/example/config/WebSecurityConfig.java",
    "chars": 1755,
    "preview": "package com.us.example.config;\r\n\r\nimport org.springframework.context.annotation.Configuration;\r\nimport org.springframewo"
  },
  {
    "path": "springWebSocket/src/main/java/com/us/example/config/WebSocketConfig.java",
    "chars": 1358,
    "preview": "package com.us.example.config;\n\nimport org.springframework.context.annotation.Configuration;\nimport org.springframework."
  },
  {
    "path": "springWebSocket/src/main/java/com/us/example/controller/WebSocketController.java",
    "chars": 2770,
    "preview": "package com.us.example.controller;\n\n\n\nimport com.us.example.bean.Message;\nimport com.us.example.bean.Response;\nimport co"
  },
  {
    "path": "springWebSocket/src/main/java/com/us/example/service/WebSocketService.java",
    "chars": 734,
    "preview": "package com.us.example.service;\n\n/**\n * Created by yangyibo on 17/1/12.\n */\n\nimport com.us.example.bean.Response;\nimport"
  },
  {
    "path": "springWebSocket/src/main/resources/application.properties",
    "chars": 17,
    "preview": "server.port=8090\n"
  },
  {
    "path": "springWebSocket/src/main/resources/static/jquery.js",
    "chars": 234995,
    "preview": "/*!\n * jQuery JavaScript Library v1.6.1\n * http://jquery.com/\n *\n * Copyright 2011, John Resig\n * Dual licensed under th"
  },
  {
    "path": "springWebSocket/src/main/resources/templates/chat.html",
    "chars": 1427,
    "preview": "<!DOCTYPE html>\r\n\r\n<html xmlns:th=\"http://www.thymeleaf.org\">\r\n<meta charset=\"UTF-8\" />\r\n<head>\r\n    <title>Home</title>"
  },
  {
    "path": "springWebSocket/src/main/resources/templates/login.html",
    "chars": 624,
    "preview": "<!DOCTYPE html>\r\n<html xmlns=\"http://www.w3.org/1999/xhtml\" xmlns:th=\"http://www.thymeleaf.org\"\r\n      xmlns:sec=\"http:/"
  },
  {
    "path": "springWebSocket/src/main/resources/templates/ws.html",
    "chars": 2326,
    "preview": "<!DOCTYPE html>\r\n<html xmlns:th=\"http://www.thymeleaf.org\">\r\n<head>\r\n    <meta charset=\"UTF-8\" />\r\n    <title>Spring Boo"
  },
  {
    "path": "springboot-Cache/pom.xml",
    "chars": 2574,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\"\n         xmlns:xsi=\"http://www"
  },
  {
    "path": "springboot-Cache/src/main/java/com/us/example/Application.java",
    "chars": 628,
    "preview": "package com.us.example;\n\nimport org.springframework.boot.autoconfigure.SpringBootApplication;\nimport org.springframework"
  },
  {
    "path": "springboot-Cache/src/main/java/com/us/example/bean/Person.java",
    "chars": 1276,
    "preview": "package com.us.example.bean;\nimport javax.persistence.Entity;\nimport javax.persistence.GeneratedValue;\nimport javax.pers"
  },
  {
    "path": "springboot-Cache/src/main/java/com/us/example/config/DBConfig.java",
    "chars": 1214,
    "preview": "package com.us.example.config;\n\n/**\n * Created by yangyibo on 17/1/13.\n */\nimport java.beans.PropertyVetoException;\n\nimp"
  },
  {
    "path": "springboot-Cache/src/main/java/com/us/example/config/JpaConfig.java",
    "chars": 2197,
    "preview": "package com.us.example.config;\n\nimport java.util.HashMap;\nimport java.util.Map;\n\nimport javax.persistence.EntityManagerF"
  },
  {
    "path": "springboot-Cache/src/main/java/com/us/example/config/RedisConfig.java",
    "chars": 3010,
    "preview": "package com.us.example.config;\n\nimport org.slf4j.Logger;\nimport org.slf4j.LoggerFactory;\nimport org.springframework.bean"
  },
  {
    "path": "springboot-Cache/src/main/java/com/us/example/controller/CacheController.java",
    "chars": 1085,
    "preview": "package com.us.example.controller;\nimport com.us.example.bean.Person;\nimport com.us.example.service.DemoService;\nimport "
  },
  {
    "path": "springboot-Cache/src/main/java/com/us/example/dao/PersonRepository.java",
    "chars": 245,
    "preview": "package com.us.example.dao;\n\nimport com.us.example.bean.Person;\nimport org.springframework.data.jpa.repository.JpaReposi"
  },
  {
    "path": "springboot-Cache/src/main/java/com/us/example/service/DemoService.java",
    "chars": 263,
    "preview": "package com.us.example.service;\n\nimport com.us.example.bean.Person;\n\n/**\n * Created by yangyibo on 17/1/13.\n */\npublic  "
  },
  {
    "path": "springboot-Cache/src/main/java/com/us/example/service/Impl/DemoServiceImpl.java",
    "chars": 1445,
    "preview": "package com.us.example.service.Impl;\n\nimport com.us.example.bean.Person;\nimport com.us.example.dao.PersonRepository;\nimp"
  },
  {
    "path": "springboot-Cache/src/main/resources/application.properties",
    "chars": 446,
    "preview": "ms.db.driverClassName=com.mysql.jdbc.Driver\r\nms.db.url=jdbc:mysql://localhost:3306/cache?prepStmtCacheSize=517&cachePrep"
  },
  {
    "path": "springboot-Cache/src/main/resources/ehcache.xml",
    "chars": 142,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n<ehcache>\r\n    <!--切换为ehcache 缓存时使用-->\r\n<cache name=\"people\" maxElementsInMemory"
  },
  {
    "path": "springboot-Cache2/pom.xml",
    "chars": 2178,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\"\n         xmlns:xsi=\"http://www"
  },
  {
    "path": "springboot-Cache2/src/main/java/com/us/example/Application.java",
    "chars": 628,
    "preview": "package com.us.example;\n\nimport org.springframework.boot.autoconfigure.SpringBootApplication;\nimport org.springframework"
  },
  {
    "path": "springboot-Cache2/src/main/java/com/us/example/bean/Person.java",
    "chars": 1523,
    "preview": "package com.us.example.bean;\n\nimport javax.persistence.Entity;\nimport javax.persistence.GeneratedValue;\nimport javax.per"
  },
  {
    "path": "springboot-Cache2/src/main/java/com/us/example/config/CacheConfig.java",
    "chars": 1614,
    "preview": "package com.us.example.config;\n\nimport com.us.example.bean.Person;\nimport com.us.example.service.DemoService;\nimport org"
  },
  {
    "path": "springboot-Cache2/src/main/java/com/us/example/config/DBConfig.java",
    "chars": 1214,
    "preview": "package com.us.example.config;\n\n/**\n * Created by yangyibo on 17/1/13.\n */\nimport java.beans.PropertyVetoException;\n\nimp"
  },
  {
    "path": "springboot-Cache2/src/main/java/com/us/example/config/JpaConfig.java",
    "chars": 2197,
    "preview": "package com.us.example.config;\n\nimport java.util.HashMap;\nimport java.util.Map;\n\nimport javax.persistence.EntityManagerF"
  },
  {
    "path": "springboot-Cache2/src/main/java/com/us/example/controller/CacheController.java",
    "chars": 791,
    "preview": "package com.us.example.controller;\nimport com.us.example.bean.Person;\nimport com.us.example.service.PersonService;\nimpor"
  },
  {
    "path": "springboot-Cache2/src/main/java/com/us/example/dao/PersonRepository.java",
    "chars": 245,
    "preview": "package com.us.example.dao;\n\nimport com.us.example.bean.Person;\nimport org.springframework.data.jpa.repository.JpaReposi"
  },
  {
    "path": "springboot-Cache2/src/main/java/com/us/example/service/DemoService.java",
    "chars": 478,
    "preview": "package com.us.example.service;\n\nimport com.us.example.bean.Person;\nimport com.us.example.dao.PersonRepository;\nimport o"
  },
  {
    "path": "springboot-Cache2/src/main/java/com/us/example/service/PersonService.java",
    "chars": 1320,
    "preview": "package com.us.example.service;\n\nimport com.us.example.bean.Person;\nimport com.us.example.dao.PersonRepository;\nimport o"
  },
  {
    "path": "springboot-Cache2/src/main/resources/application.properties",
    "chars": 291,
    "preview": "ms.db.driverClassName=com.mysql.jdbc.Driver\r\nms.db.url=jdbc:mysql://localhost:3306/cache?prepStmtCacheSize=517&cachePrep"
  },
  {
    "path": "springboot-Quartz/pom.xml",
    "chars": 2653,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\"\n         xmlns:xsi=\"http://www"
  },
  {
    "path": "springboot-Quartz/src/main/java/com/abel/quartz/Application.java",
    "chars": 466,
    "preview": "package com.abel.quartz;\n\nimport org.springframework.boot.SpringApplication;\nimport org.springframework.boot.autoconfigu"
  },
  {
    "path": "springboot-Quartz/src/main/java/com/abel/quartz/config/InvokingJobDetailFactory.java",
    "chars": 1494,
    "preview": "package com.abel.quartz.config;\n\nimport org.quartz.JobExecutionContext;\nimport org.quartz.JobExecutionException;\nimport "
  },
  {
    "path": "springboot-Quartz/src/main/java/com/abel/quartz/config/QuartzConfig.java",
    "chars": 7771,
    "preview": "package com.abel.quartz.config;\n\nimport java.beans.PropertyVetoException;\nimport java.io.IOException;\nimport java.util.H"
  },
  {
    "path": "springboot-Quartz/src/main/java/com/abel/quartz/job/ExecuteJob.java",
    "chars": 416,
    "preview": "package com.abel.quartz.job;\n\nimport org.slf4j.Logger;\nimport org.slf4j.LoggerFactory;\nimport org.springframework.stereo"
  },
  {
    "path": "springboot-Quartz/src/main/resources/application.properties",
    "chars": 2935,
    "preview": "## tomcat\\u914D\\u7F6E\nserver.port=8090\n#server.tomcat.maxHttpHeaderSize=8192\nserver.tomcat.uri-encoding=UTF-8\nspring.htt"
  },
  {
    "path": "springboot-Quartz/src/main/resources/banner.txt",
    "chars": 284,
    "preview": "########################################################\n#                                                      #\n#     "
  },
  {
    "path": "springboot-Quartz/src/main/resources/logback-spring.xml",
    "chars": 1604,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<configuration>\n    <contextName>springboot-quartz</contextName>\n\n    <!-- 控制台输入日"
  },
  {
    "path": "springboot-SpringSecurity0/pom.xml",
    "chars": 2681,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\"\n         xmlns:xsi=\"http://www"
  },
  {
    "path": "springboot-SpringSecurity0/src/main/java/com/us/example/Application.java",
    "chars": 556,
    "preview": "package com.us.example;\n\nimport org.springframework.boot.autoconfigure.SpringBootApplication;\nimport org.springframework"
  },
  {
    "path": "springboot-SpringSecurity0/src/main/java/com/us/example/config/DBconfig.java",
    "chars": 1212,
    "preview": "package com.us.example.config;\n\nimport java.beans.PropertyVetoException;\n\nimport org.springframework.beans.factory.annot"
  },
  {
    "path": "springboot-SpringSecurity0/src/main/java/com/us/example/config/MyBatisConfig.java",
    "chars": 1011,
    "preview": "package com.us.example.config;\n\nimport org.mybatis.spring.SqlSessionFactoryBean;\nimport org.springframework.beans.factor"
  },
  {
    "path": "springboot-SpringSecurity0/src/main/java/com/us/example/config/MyBatisScannerConfig.java",
    "chars": 618,
    "preview": "package com.us.example.config;\n\nimport org.mybatis.spring.mapper.MapperScannerConfigurer;\nimport org.springframework.con"
  },
  {
    "path": "springboot-SpringSecurity0/src/main/java/com/us/example/config/TransactionConfig.java",
    "chars": 878,
    "preview": "package com.us.example.config;\n\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframewor"
  },
  {
    "path": "springboot-SpringSecurity0/src/main/java/com/us/example/config/WebMvcConfig.java",
    "chars": 534,
    "preview": "package com.us.example.config;\n\nimport org.springframework.context.annotation.Configuration;\nimport org.springframework."
  },
  {
    "path": "springboot-SpringSecurity0/src/main/java/com/us/example/config/WebSecurityConfig.java",
    "chars": 2197,
    "preview": "package com.us.example.config;\n\nimport com.us.example.security.CustomUserService;\nimport com.us.example.util.MD5Util;\nim"
  },
  {
    "path": "springboot-SpringSecurity0/src/main/java/com/us/example/controller/HomeController.java",
    "chars": 499,
    "preview": "package com.us.example.controller;\n\nimport com.us.example.domain.Msg;\nimport org.springframework.stereotype.Controller;\n"
  },
  {
    "path": "springboot-SpringSecurity0/src/main/java/com/us/example/dao/UserDao.java",
    "chars": 150,
    "preview": "package com.us.example.dao;\n\nimport com.us.example.domain.SysUser;\n\n\npublic interface UserDao {\n    public SysUser findB"
  },
  {
    "path": "springboot-SpringSecurity0/src/main/java/com/us/example/domain/Msg.java",
    "chars": 911,
    "preview": "package com.us.example.domain;\n\n/**\n * Created by yangyibo on 17/1/17.\n */\n\n    public class Msg {\n        private Strin"
  },
  {
    "path": "springboot-SpringSecurity0/src/main/java/com/us/example/domain/SysRole.java",
    "chars": 400,
    "preview": "package com.us.example.domain;\n\n/**\n * Created by yangyibo on 17/1/17.\n */\n\npublic class SysRole {\n\n    private Integer "
  },
  {
    "path": "springboot-SpringSecurity0/src/main/java/com/us/example/domain/SysUser.java",
    "chars": 820,
    "preview": "package com.us.example.domain;\n\nimport java.util.List;\n\n/**\n * Created by yangyibo on 17/1/17.\n */\n\npublic class SysUser"
  },
  {
    "path": "springboot-SpringSecurity0/src/main/java/com/us/example/security/CustomUserService.java",
    "chars": 1507,
    "preview": "package com.us.example.security;\n\nimport com.us.example.dao.UserDao;\nimport com.us.example.domain.SysRole;\nimport com.us"
  },
  {
    "path": "springboot-SpringSecurity0/src/main/java/com/us/example/util/MD5Util.java",
    "chars": 1180,
    "preview": "package com.us.example.util;\n\n/**\n * Created by yangyibo on 17/2/7.\n */\nimport java.security.MessageDigest;\n/**\n * MD5加密"
  },
  {
    "path": "springboot-SpringSecurity0/src/main/resources/application.properties",
    "chars": 275,
    "preview": "ms.db.driverClassName=com.mysql.jdbc.Driver\r\nms.db.url=jdbc:mysql://localhost:3306/cache?characterEncoding=utf-8&useSSL="
  },
  {
    "path": "springboot-SpringSecurity0/src/main/resources/mapper/UserDaoMapper.xml",
    "chars": 870,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n<!DOCTYPE mapper PUBLIC \"-//mybatis.org//DTD Mapper 3.0//EN\" \"http://mybatis.org"
  },
  {
    "path": "springboot-SpringSecurity0/src/main/resources/templates/home.html",
    "chars": 1476,
    "preview": "<!DOCTYPE html>\n<html xmlns:th=\"http://www.thymeleaf.org\" \n\t  xmlns:sec=\"http://www.thymeleaf.org/thymeleaf-extras-sprin"
  },
  {
    "path": "springboot-SpringSecurity0/src/main/resources/templates/login.html",
    "chars": 1547,
    "preview": "<!DOCTYPE html>\n<html xmlns:th=\"http://www.thymeleaf.org\">\n<head>\n<meta content=\"text/html;charset=UTF-8\"/>\n<title>登录页面<"
  },
  {
    "path": "springboot-SpringSecurity1/pom.xml",
    "chars": 3227,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\"\n         xmlns:xsi=\"http://www"
  },
  {
    "path": "springboot-SpringSecurity1/src/main/java/com/us/example/Application.java",
    "chars": 556,
    "preview": "package com.us.example;\n\nimport org.springframework.boot.autoconfigure.SpringBootApplication;\nimport org.springframework"
  },
  {
    "path": "springboot-SpringSecurity1/src/main/java/com/us/example/config/DBconfig.java",
    "chars": 1213,
    "preview": "package com.us.example.config;\n\nimport java.beans.PropertyVetoException;\n\nimport org.springframework.beans.factory.annot"
  },
  {
    "path": "springboot-SpringSecurity1/src/main/java/com/us/example/config/MyBatisConfig.java",
    "chars": 1011,
    "preview": "package com.us.example.config;\n\nimport org.mybatis.spring.SqlSessionFactoryBean;\nimport org.springframework.beans.factor"
  },
  {
    "path": "springboot-SpringSecurity1/src/main/java/com/us/example/config/MyBatisScannerConfig.java",
    "chars": 618,
    "preview": "package com.us.example.config;\n\nimport org.mybatis.spring.mapper.MapperScannerConfigurer;\nimport org.springframework.con"
  },
  {
    "path": "springboot-SpringSecurity1/src/main/java/com/us/example/config/TransactionConfig.java",
    "chars": 878,
    "preview": "package com.us.example.config;\n\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframewor"
  },
  {
    "path": "springboot-SpringSecurity1/src/main/java/com/us/example/config/WebSecurityConfig.java",
    "chars": 1948,
    "preview": "package com.us.example.config;\n\nimport com.us.example.service.CustomUserService;\nimport com.us.example.service.MyFilterS"
  },
  {
    "path": "springboot-SpringSecurity1/src/main/java/com/us/example/controller/HomeController.java",
    "chars": 776,
    "preview": "package com.us.example.controller;\n\nimport com.us.example.domain.Msg;\nimport org.springframework.stereotype.Controller;\n"
  },
  {
    "path": "springboot-SpringSecurity1/src/main/java/com/us/example/dao/PermissionDao.java",
    "chars": 271,
    "preview": "package com.us.example.dao;\n\nimport com.us.example.domain.Permission;\n\nimport java.util.List;\n\n/**\n * Created by yangyib"
  },
  {
    "path": "springboot-SpringSecurity1/src/main/java/com/us/example/dao/UserDao.java",
    "chars": 150,
    "preview": "package com.us.example.dao;\n\nimport com.us.example.domain.SysUser;\n\n\npublic interface UserDao {\n    public SysUser findB"
  },
  {
    "path": "springboot-SpringSecurity1/src/main/java/com/us/example/domain/Msg.java",
    "chars": 911,
    "preview": "package com.us.example.domain;\n\n/**\n * Created by yangyibo on 17/1/17.\n */\n\n    public class Msg {\n        private Strin"
  },
  {
    "path": "springboot-SpringSecurity1/src/main/java/com/us/example/domain/Permission.java",
    "chars": 932,
    "preview": "package com.us.example.domain;\n\n/**\n * Created by yangyibo on 17/1/20.\n */\npublic class Permission {\n\n    private int id"
  },
  {
    "path": "springboot-SpringSecurity1/src/main/java/com/us/example/domain/SysRole.java",
    "chars": 400,
    "preview": "package com.us.example.domain;\n\n/**\n * Created by yangyibo on 17/1/17.\n */\n\npublic class SysRole {\n\n    private Integer "
  },
  {
    "path": "springboot-SpringSecurity1/src/main/java/com/us/example/domain/SysUser.java",
    "chars": 820,
    "preview": "package com.us.example.domain;\n\nimport java.util.List;\n\n/**\n * Created by yangyibo on 17/1/17.\n */\n\npublic class SysUser"
  },
  {
    "path": "springboot-SpringSecurity1/src/main/java/com/us/example/service/CustomUserService.java",
    "chars": 1877,
    "preview": "package com.us.example.service;\n\nimport com.us.example.dao.PermissionDao;\nimport com.us.example.dao.UserDao;\nimport com."
  },
  {
    "path": "springboot-SpringSecurity1/src/main/java/com/us/example/service/MyAccessDecisionManager.java",
    "chars": 1628,
    "preview": "package com.us.example.service;\n\nimport org.springframework.security.access.AccessDecisionManager;\nimport org.springfram"
  },
  {
    "path": "springboot-SpringSecurity1/src/main/java/com/us/example/service/MyFilterSecurityInterceptor.java",
    "chars": 2314,
    "preview": "package com.us.example.service;\n\nimport javax.servlet.Filter;\nimport javax.servlet.FilterChain;\nimport javax.servlet.Fil"
  },
  {
    "path": "springboot-SpringSecurity1/src/main/java/com/us/example/service/MyInvocationSecurityMetadataSourceService.java",
    "chars": 2234,
    "preview": "package com.us.example.service;\n\nimport com.us.example.dao.PermissionDao;\nimport com.us.example.domain.Permission;\nimpor"
  },
  {
    "path": "springboot-SpringSecurity1/src/main/resources/application.properties",
    "chars": 261,
    "preview": "ms.db.driverClassName=com.mysql.jdbc.Driver\r\nms.db.url=jdbc:mysql://localhost:3306/cache?characterEncoding=utf-8&useSSL="
  },
  {
    "path": "springboot-SpringSecurity1/src/main/resources/mapper/PermissionDaoMapper.xml",
    "chars": 739,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n<!DOCTYPE mapper PUBLIC \"-//mybatis.org//DTD Mapper 3.0//EN\" \"http://mybatis.org"
  },
  {
    "path": "springboot-SpringSecurity1/src/main/resources/mapper/UserDaoMapper.xml",
    "chars": 870,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n<!DOCTYPE mapper PUBLIC \"-//mybatis.org//DTD Mapper 3.0//EN\" \"http://mybatis.org"
  },
  {
    "path": "springboot-SpringSecurity1/src/main/resources/templates/home.html",
    "chars": 1607,
    "preview": "<!DOCTYPE html>\n<html xmlns:th=\"http://www.thymeleaf.org\" \n\t  xmlns:sec=\"http://www.thymeleaf.org/thymeleaf-extras-sprin"
  },
  {
    "path": "springboot-SpringSecurity1/src/main/resources/templates/login.html",
    "chars": 1623,
    "preview": "<!DOCTYPE html>\n<html xmlns:th=\"http://www.thymeleaf.org\"\n      xmlns:sec=\"http://www.thymeleaf.org/thymeleaf-extras-spr"
  },
  {
    "path": "springboot-dubbo/README.md",
    "chars": 242,
    "preview": "##springboot-dubbo\n\n该项目是Springboot 和 dubbo 结合的例子,是provider 的示例,提供服务。简单的写了一些用户和权限的接口没有写的很完整,主要是为了提现dubbo 服务\nSpringboot-sh"
  },
  {
    "path": "springboot-dubbo/abel-user-api/pom.xml",
    "chars": 1627,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\"\n         xmlns:xsi=\"http://www"
  },
  {
    "path": "springboot-dubbo/abel-user-api/src/main/java/cn/abel/user/models/Permission.java",
    "chars": 1383,
    "preview": "package cn.abel.user.models;\n\n\nimport java.io.Serializable;\n\npublic class Permission implements Serializable {\n\n    priv"
  },
  {
    "path": "springboot-dubbo/abel-user-api/src/main/java/cn/abel/user/models/Role.java",
    "chars": 1131,
    "preview": "package cn.abel.user.models;\n\n\nimport java.io.Serializable;\n\npublic class Role implements Serializable {\n\n    private st"
  },
  {
    "path": "springboot-dubbo/abel-user-api/src/main/java/cn/abel/user/models/User.java",
    "chars": 1744,
    "preview": "package cn.abel.user.models;\n\n\nimport com.fasterxml.jackson.annotation.JsonIgnore;\n\nimport java.io.Serializable;\nimport "
  },
  {
    "path": "springboot-dubbo/abel-user-api/src/main/java/cn/abel/user/service/PermissionService.java",
    "chars": 374,
    "preview": "package cn.abel.user.service;\n\nimport cn.abel.user.models.Permission;\n\nimport java.util.List;\nimport java.util.Map;\n\npub"
  },
  {
    "path": "springboot-dubbo/abel-user-api/src/main/java/cn/abel/user/service/RoleService.java",
    "chars": 315,
    "preview": "package cn.abel.user.service;\n\n\nimport cn.abel.user.models.Role;\n\nimport java.util.List;\nimport java.util.Map;\n\npublic i"
  },
  {
    "path": "springboot-dubbo/abel-user-api/src/main/java/cn/abel/user/service/UserService.java",
    "chars": 354,
    "preview": "package cn.abel.user.service;\n\nimport cn.abel.user.models.User;\n\nimport java.util.List;\nimport java.util.Map;\n\npublic in"
  },
  {
    "path": "springboot-dubbo/abel-user-provider/doc/user.sql",
    "chars": 2720,
    "preview": "/*\n Navicat Premium Data Transfer\n\n Source Server         : localhost\n Source Server Type    : MySQL\n Source Server Vers"
  },
  {
    "path": "springboot-dubbo/abel-user-provider/pom.xml",
    "chars": 5962,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\"\n         xmlns:xsi=\"http://www"
  },
  {
    "path": "springboot-dubbo/abel-user-provider/src/main/java/cn/abel/user/UserProviderApplication.java",
    "chars": 442,
    "preview": "package cn.abel.user;\n\nimport org.springframework.boot.SpringApplication;\nimport org.springframework.boot.autoconfigure."
  },
  {
    "path": "springboot-dubbo/abel-user-provider/src/main/java/cn/abel/user/constants/Constants.java",
    "chars": 83,
    "preview": "package cn.abel.user.constants;\n\n/**\n * 公用的常量类。\n */\npublic interface Constants {\n}\n"
  },
  {
    "path": "springboot-dubbo/abel-user-provider/src/main/java/cn/abel/user/dao/PermissionDao.java",
    "chars": 555,
    "preview": "package cn.abel.user.dao;\n\n\nimport cn.abel.user.models.Permission;\nimport org.apache.ibatis.annotations.Mapper;\nimport o"
  },
  {
    "path": "springboot-dubbo/abel-user-provider/src/main/java/cn/abel/user/dao/RoleDao.java",
    "chars": 403,
    "preview": "package cn.abel.user.dao;\n\n\n\nimport cn.abel.user.models.Role;\nimport org.apache.ibatis.annotations.Mapper;\nimport org.sp"
  },
  {
    "path": "springboot-dubbo/abel-user-provider/src/main/java/cn/abel/user/dao/UserDao.java",
    "chars": 440,
    "preview": "package cn.abel.user.dao;\n\n\nimport cn.abel.user.models.User;\nimport org.apache.ibatis.annotations.Mapper;\nimport org.spr"
  },
  {
    "path": "springboot-dubbo/abel-user-provider/src/main/java/cn/abel/user/exception/JsonExceptionMapper.java",
    "chars": 900,
    "preview": "package cn.abel.user.exception;\n\nimport javax.ws.rs.core.MediaType;\nimport javax.ws.rs.core.Response;\nimport javax.ws.rs"
  },
  {
    "path": "springboot-dubbo/abel-user-provider/src/main/java/cn/abel/user/exception/ReaderExceptionMapper.java",
    "chars": 882,
    "preview": "package cn.abel.user.exception;\n\nimport javax.ws.rs.core.MediaType;\nimport javax.ws.rs.core.Response;\nimport javax.ws.rs"
  },
  {
    "path": "springboot-dubbo/abel-user-provider/src/main/java/cn/abel/user/exception/RestExceptionMapper.java",
    "chars": 1138,
    "preview": "package cn.abel.user.exception;\n\nimport javax.ws.rs.NotAllowedException;\nimport javax.ws.rs.NotFoundException;\nimport ja"
  },
  {
    "path": "springboot-dubbo/abel-user-provider/src/main/java/cn/abel/user/exception/ServiceExceptionMapper.java",
    "chars": 894,
    "preview": "package cn.abel.user.exception;\n\nimport javax.ws.rs.core.MediaType;\nimport javax.ws.rs.core.Response;\nimport javax.ws.rs"
  },
  {
    "path": "springboot-dubbo/abel-user-provider/src/main/java/cn/abel/user/exception/ValidationExceptionMapper.java",
    "chars": 1402,
    "preview": "package cn.abel.user.exception;\n\nimport javax.validation.ConstraintViolation;\nimport javax.validation.ConstraintViolatio"
  },
  {
    "path": "springboot-dubbo/abel-user-provider/src/main/java/cn/abel/user/filter/RestFilter.java",
    "chars": 2397,
    "preview": "package cn.abel.user.filter;\n\nimport java.io.IOException;\nimport java.util.List;\nimport java.util.Map;\n\nimport javax.ann"
  },
  {
    "path": "springboot-dubbo/abel-user-provider/src/main/java/cn/abel/user/filter/RestInterceptor.java",
    "chars": 2719,
    "preview": "package cn.abel.user.filter;\n\nimport java.io.ByteArrayInputStream;\nimport java.io.ByteArrayOutputStream;\nimport java.io."
  },
  {
    "path": "springboot-dubbo/abel-user-provider/src/main/java/cn/abel/user/service/impl/PermissionServiceImpl.java",
    "chars": 1122,
    "preview": "package cn.abel.user.service.impl;\n\nimport cn.abel.user.dao.PermissionDao;\nimport cn.abel.user.models.Permission;\nimport"
  },
  {
    "path": "springboot-dubbo/abel-user-provider/src/main/java/cn/abel/user/service/impl/RoleServiceImpl.java",
    "chars": 889,
    "preview": "package cn.abel.user.service.impl;\n\n\nimport cn.abel.user.dao.RoleDao;\nimport cn.abel.user.models.Role;\nimport cn.abel.us"
  },
  {
    "path": "springboot-dubbo/abel-user-provider/src/main/java/cn/abel/user/service/impl/UserServiceImpl.java",
    "chars": 1096,
    "preview": "package cn.abel.user.service.impl;\n\nimport cn.abel.user.dao.UserDao;\nimport cn.abel.user.models.User;\nimport cn.abel.use"
  },
  {
    "path": "springboot-dubbo/abel-user-provider/src/main/java/cn/abel/user/utils/CommentUtils.java",
    "chars": 551,
    "preview": "package cn.abel.user.utils;\n\nimport com.alibaba.fastjson.JSON;\nimport org.apache.commons.collections4.CollectionUtils;\n\n"
  },
  {
    "path": "springboot-dubbo/abel-user-provider/src/main/resources/META-INF/spring/provider.xml",
    "chars": 1700,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<beans xmlns=\"http://www.springframework.org/schema/beans\"\n       xmlns:xsi=\"http"
  },
  {
    "path": "springboot-dubbo/abel-user-provider/src/main/resources/dev/application.properties",
    "chars": 1709,
    "preview": "#application\nspring.application.name=abel-user-provider\napplication.main=cn.abel.user.UserProviderApplication\nserver.por"
  },
  {
    "path": "springboot-dubbo/abel-user-provider/src/main/resources/dev/banner.txt",
    "chars": 284,
    "preview": "########################################################\n#                                                      #\n#     "
  },
  {
    "path": "springboot-dubbo/abel-user-provider/src/main/resources/dev/logback-spring.xml",
    "chars": 1554,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<configuration>\n    <contextName>abel_user</contextName>\n\n    <!-- 控制台输入日志信息 -->\n"
  },
  {
    "path": "springboot-dubbo/abel-user-provider/src/main/resources/local/application.properties",
    "chars": 1711,
    "preview": "#application\nspring.application.name=abel-user-provider\napplication.main=cn.abel.user.UserProviderApplication\nserver.por"
  },
  {
    "path": "springboot-dubbo/abel-user-provider/src/main/resources/local/banner.txt",
    "chars": 284,
    "preview": "########################################################\n#                                                      #\n#     "
  },
  {
    "path": "springboot-dubbo/abel-user-provider/src/main/resources/local/logback-spring.xml",
    "chars": 1592,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<configuration>\n    <contextName>abel_user</contextName>\n\n    <!-- 控制台输入日志信息 -->\n"
  },
  {
    "path": "springboot-dubbo/abel-user-provider/src/main/resources/mapper/PermissionDaoMapper.xml",
    "chars": 2478,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n<!DOCTYPE mapper PUBLIC \"-//mybatis.org//DTD Mapper 3.0//EN\" \"http://mybatis.org"
  },
  {
    "path": "springboot-dubbo/abel-user-provider/src/main/resources/mapper/RoleDaoMapper.xml",
    "chars": 1810,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>  \n<!DOCTYPE mapper PUBLIC \"-//mybatis.org//DTD Mapper 3.0//EN\" \"http://mybatis.o"
  },
  {
    "path": "springboot-dubbo/abel-user-provider/src/main/resources/mapper/UserDaoMapper.xml",
    "chars": 2810,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>  \n<!DOCTYPE mapper PUBLIC \"-//mybatis.org//DTD Mapper 3.0//EN\" \"http://mybatis.o"
  },
  {
    "path": "springboot-dubbo/abel-user-provider/src/main/test/cn/abel/user/BaseTest.java",
    "chars": 911,
    "preview": "package cn.abel.user;\n\n/**\n * @author yyb\n * @time 2020/3/9\n */\n\nimport org.junit.Test;\nimport org.junit.runner.RunWith;"
  },
  {
    "path": "springboot-dubbo/abel-user-provider/src/main/test/cn/abel/user/service/impl/PermissionServiceImplTest.java",
    "chars": 1475,
    "preview": "package cn.abel.user.service.impl;\n\nimport cn.abel.user.BaseTest;\nimport cn.abel.user.models.Permission;\nimport cn.abel."
  },
  {
    "path": "springboot-dynamicDataSource/pom.xml",
    "chars": 1984,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\"\n         xmlns:xsi=\"http://www"
  },
  {
    "path": "springboot-dynamicDataSource/sql/news.sql",
    "chars": 767,
    "preview": "/*\n Navicat Premium Data Transfer\n\n Source Server         : localhost\n Source Server Type    : MySQL\n Source Server Vers"
  },
  {
    "path": "springboot-dynamicDataSource/sql/user.sql",
    "chars": 882,
    "preview": "/*\n Navicat Premium Data Transfer\n\n Source Server         : localhost\n Source Server Type    : MySQL\n Source Server Vers"
  },
  {
    "path": "springboot-dynamicDataSource/src/main/java/cn/abel/Application.java",
    "chars": 341,
    "preview": "package cn.abel;\n\nimport org.springframework.boot.SpringApplication;\nimport org.springframework.boot.autoconfigure.Sprin"
  },
  {
    "path": "springboot-dynamicDataSource/src/main/java/cn/abel/bean/News.java",
    "chars": 896,
    "preview": "package cn.abel.bean;\n\n\npublic class News {\n    private Integer id;\n    private String title;\n    private String content"
  },
  {
    "path": "springboot-dynamicDataSource/src/main/java/cn/abel/bean/User.java",
    "chars": 1224,
    "preview": "package cn.abel.bean;\n\nimport java.util.Date;\n\n\npublic class User {\n    private Integer id;\n    private String name;\n   "
  },
  {
    "path": "springboot-dynamicDataSource/src/main/java/cn/abel/config/DynamicDataSource.java",
    "chars": 351,
    "preview": "package cn.abel.config;\n\nimport org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;\n\n/**\n * @author yy"
  },
  {
    "path": "springboot-dynamicDataSource/src/main/java/cn/abel/config/DynamicDataSourceConfig.java",
    "chars": 3037,
    "preview": "package cn.abel.config;\n\nimport cn.abel.enums.DatabaseTypeEnum;\nimport org.apache.ibatis.session.SqlSessionFactory;\nimpo"
  },
  {
    "path": "springboot-dynamicDataSource/src/main/java/cn/abel/config/DynamicDataSourceContextHolder.java",
    "chars": 552,
    "preview": "package cn.abel.config;\n\nimport cn.abel.enums.DatabaseTypeEnum;\n\n/**\n * @author yyb\n * @time 2019/3/27\n */\npublic class "
  },
  {
    "path": "springboot-dynamicDataSource/src/main/java/cn/abel/config/HikariConfig.java",
    "chars": 2844,
    "preview": "package cn.abel.config;\n\nimport com.zaxxer.hikari.HikariDataSource;\nimport org.springframework.beans.factory.annotation."
  },
  {
    "path": "springboot-dynamicDataSource/src/main/java/cn/abel/dao/NewsDao.java",
    "chars": 409,
    "preview": "package cn.abel.dao;\n\nimport java.util.List;\nimport java.util.Map;\n\nimport cn.abel.bean.News;\nimport org.apache.ibatis.a"
  },
  {
    "path": "springboot-dynamicDataSource/src/main/java/cn/abel/dao/UserDao.java",
    "chars": 409,
    "preview": "package cn.abel.dao;\n\nimport java.util.List;\nimport java.util.Map;\n\nimport cn.abel.bean.User;\nimport org.apache.ibatis.a"
  },
  {
    "path": "springboot-dynamicDataSource/src/main/java/cn/abel/enums/DatabaseTypeEnum.java",
    "chars": 653,
    "preview": "package cn.abel.enums;\n\n/**\n * @author yyb\n * @time 2019/3/27\n */\npublic enum DatabaseTypeEnum {\n    PRIMARY(\"1\"), USER("
  },
  {
    "path": "springboot-dynamicDataSource/src/main/java/cn/abel/service/NewsService.java",
    "chars": 1204,
    "preview": "package cn.abel.service;\n\nimport java.util.List;\nimport java.util.Map;\n\nimport cn.abel.config.DynamicDataSource;\nimport "
  },
  {
    "path": "springboot-dynamicDataSource/src/main/java/cn/abel/service/UserService.java",
    "chars": 1156,
    "preview": "package cn.abel.service;\n\nimport java.util.List;\nimport java.util.Map;\n\nimport cn.abel.config.DynamicDataSourceContextHo"
  },
  {
    "path": "springboot-dynamicDataSource/src/main/resources/local/application.properties",
    "chars": 2320,
    "preview": "## tomcat\\u914D\\u7F6E\nserver.port=8009\n#server.tomcat.maxHttpHeaderSize=8192\nserver.tomcat.uri-encoding=UTF-8\nspring.htt"
  },
  {
    "path": "springboot-dynamicDataSource/src/main/resources/local/banner.txt",
    "chars": 284,
    "preview": "########################################################\n#                                                      #\n#     "
  },
  {
    "path": "springboot-dynamicDataSource/src/main/resources/local/logback-spring.xml",
    "chars": 1608,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<configuration>\n    <contextName>springboot-dataSource</contextName>\n\n    <!-- 控制"
  },
  {
    "path": "springboot-dynamicDataSource/src/main/resources/mapper/NewsDaoMapper.xml",
    "chars": 1945,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>  \n<!DOCTYPE mapper PUBLIC \"-//mybatis.org//DTD Mapper 3.0//EN\" \"http://mybatis.o"
  },
  {
    "path": "springboot-dynamicDataSource/src/main/resources/mapper/UserDaoMapper.xml",
    "chars": 2115,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>  \n<!DOCTYPE mapper PUBLIC \"-//mybatis.org//DTD Mapper 3.0//EN\" \"http://mybatis.o"
  },
  {
    "path": "springboot-dynamicDataSource/src/test/java/cn/abel/BaseTest.java",
    "chars": 889,
    "preview": "package cn.abel;\n\nimport org.junit.Test;\nimport org.junit.runner.RunWith;\nimport org.springframework.boot.test.context.S"
  },
  {
    "path": "springboot-dynamicDataSource/src/test/java/cn/abel/service/ServiceTest.java",
    "chars": 698,
    "preview": "package cn.abel.service;\n\nimport cn.abel.BaseTest;\nimport cn.abel.bean.News;\nimport cn.abel.bean.User;\nimport org.junit."
  },
  {
    "path": "springboot-elasticsearch/README.md",
    "chars": 250,
    "preview": "\n## springboot-elasticsearch\n \n* 本项目是speingboot结合es 的小李子。\n* 演示了同一个项目配置多个es 数据源\n* es操作是用es的rest api 进行操作,操作语句是 通过 JSONObj"
  },
  {
    "path": "springboot-elasticsearch/pom.xml",
    "chars": 2369,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\"\n         xmlns:xsi=\"http://www"
  },
  {
    "path": "springboot-elasticsearch/src/main/java/cn/abel/Application.java",
    "chars": 341,
    "preview": "package cn.abel;\n\nimport org.springframework.boot.SpringApplication;\nimport org.springframework.boot.autoconfigure.Sprin"
  },
  {
    "path": "springboot-elasticsearch/src/main/java/cn/abel/bean/User.java",
    "chars": 1540,
    "preview": "package cn.abel.bean;\n\nimport java.util.Date;\n\n\npublic class User {\n    private Integer id;\n    private String name;\n   "
  },
  {
    "path": "springboot-elasticsearch/src/main/java/cn/abel/config/ESRestClient2Config.java",
    "chars": 1863,
    "preview": "package cn.abel.config;\n\nimport org.apache.http.HttpHost;\nimport org.apache.http.auth.AuthScope;\nimport org.apache.http."
  },
  {
    "path": "springboot-elasticsearch/src/main/java/cn/abel/config/ESRestClientConfig.java",
    "chars": 1862,
    "preview": "package cn.abel.config;\n\nimport org.apache.http.HttpHost;\nimport org.apache.http.auth.AuthScope;\nimport org.apache.http."
  },
  {
    "path": "springboot-elasticsearch/src/main/java/cn/abel/constants/Constants.java",
    "chars": 655,
    "preview": "package cn.abel.constants;\n\n/**\n * @author yangyibo\n * @time 2019/4/3\n */\npublic class Constants {\n\n    /**\n     * es 查询"
  },
  {
    "path": "springboot-elasticsearch/src/main/java/cn/abel/dao/UserDao.java",
    "chars": 409,
    "preview": "package cn.abel.dao;\n\nimport java.util.List;\nimport java.util.Map;\n\nimport cn.abel.bean.User;\nimport org.apache.ibatis.a"
  },
  {
    "path": "springboot-elasticsearch/src/main/java/cn/abel/service/UserService.java",
    "chars": 7815,
    "preview": "package cn.abel.service;\n\nimport java.io.IOException;\nimport java.util.Collections;\nimport java.util.List;\nimport java.u"
  },
  {
    "path": "springboot-elasticsearch/src/main/resources/local/application.properties",
    "chars": 2498,
    "preview": "## tomcat\\u914D\\u7F6E\nserver.port=8009\n#server.tomcat.maxHttpHeaderSize=8192\nserver.tomcat.uri-encoding=UTF-8\nspring.htt"
  },
  {
    "path": "springboot-elasticsearch/src/main/resources/local/banner.txt",
    "chars": 284,
    "preview": "########################################################\n#                                                      #\n#     "
  },
  {
    "path": "springboot-elasticsearch/src/main/resources/local/logback-spring.xml",
    "chars": 1600,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<configuration>\n    <contextName>springboot-es</contextName>\n\n    <!-- 控制台输入日志信息 "
  },
  {
    "path": "springboot-elasticsearch/src/main/resources/mapper/UserDaoMapper.xml",
    "chars": 2115,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>  \n<!DOCTYPE mapper PUBLIC \"-//mybatis.org//DTD Mapper 3.0//EN\" \"http://mybatis.o"
  },
  {
    "path": "springboot-elasticsearch/src/test/java/cn/abel/BaseTest.java",
    "chars": 889,
    "preview": "package cn.abel;\n\nimport org.junit.Test;\nimport org.junit.runner.RunWith;\nimport org.springframework.boot.test.context.S"
  },
  {
    "path": "springboot-elasticsearch/src/test/java/cn/abel/service/ServiceTest.java",
    "chars": 491,
    "preview": "package cn.abel.service;\n\nimport cn.abel.BaseTest;\nimport cn.abel.bean.User;\nimport org.junit.Test;\nimport org.springfra"
  },
  {
    "path": "springboot-jpa/pom.xml",
    "chars": 1987,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\"\n         xmlns:xsi=\"http://www"
  },
  {
    "path": "springboot-jpa/src/main/java/com/us/example/Application.java",
    "chars": 629,
    "preview": "package com.us.example;\n\nimport org.springframework.boot.autoconfigure.SpringBootApplication;\nimport org.springframework"
  },
  {
    "path": "springboot-jpa/src/main/java/com/us/example/bean/User.java",
    "chars": 3918,
    "preview": "package com.us.example.bean;\n\nimport java.util.Date;\n\nimport javax.persistence.Column;\nimport javax.persistence.Entity;\n"
  },
  {
    "path": "springboot-jpa/src/main/java/com/us/example/config/DBConfig.java",
    "chars": 1173,
    "preview": "package com.us.example.config;\n\nimport java.beans.PropertyVetoException;\n\nimport org.springframework.beans.factory.annot"
  },
  {
    "path": "springboot-jpa/src/main/java/com/us/example/config/JpaConfig.java",
    "chars": 2167,
    "preview": "package com.us.example.config;\n\nimport java.util.HashMap;\nimport java.util.Map;\n\nimport javax.persistence.EntityManagerF"
  },
  {
    "path": "springboot-jpa/src/main/java/com/us/example/controller/UserController.java",
    "chars": 1345,
    "preview": "package com.us.example.controller;\n\nimport javax.servlet.http.HttpServletRequest;\nimport java.util.Map;\n\nimport org.apac"
  },
  {
    "path": "springboot-jpa/src/main/java/com/us/example/dao/UserJpaDao.java",
    "chars": 377,
    "preview": "package com.us.example.dao;\n\nimport org.springframework.data.jpa.repository.JpaRepository;\n\nimport com.us.example.bean.U"
  },
  {
    "path": "springboot-jpa/src/main/java/com/us/example/service/UserService.java",
    "chars": 315,
    "preview": "package com.us.example.service;\n\nimport java.util.Map;\n\nimport com.us.example.bean.User;\n\n/**\n * The Interface UserServi"
  },
  {
    "path": "springboot-jpa/src/main/java/com/us/example/serviceImpl/UserServiceImpl.java",
    "chars": 623,
    "preview": "package com.us.example.serviceImpl;\n\nimport java.util.Map;\n\nimport org.springframework.beans.factory.annotation.Autowire"
  },
  {
    "path": "springboot-jpa/src/main/java/com/us/example/util/CommonUtil.java",
    "chars": 1548,
    "preview": "package com.us.example.util;\n\nimport java.util.HashMap;\nimport java.util.Map;\nimport java.util.Set;\n\nimport javax.servle"
  },
  {
    "path": "springboot-jpa/src/main/resources/application.properties",
    "chars": 278,
    "preview": "server.port=8099\r\n\r\nms.db.driverClassName=com.mysql.jdbc.Driver\r\nms.db.url=jdbc:mysql://localhost:3306/msm?prepStmtCache"
  },
  {
    "path": "springboot-kafka/pom.xml",
    "chars": 1678,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\"\n         xmlns:xsi=\"http://www"
  },
  {
    "path": "springboot-kafka/src/main/java/cn/abel/Application.java",
    "chars": 455,
    "preview": "package cn.abel;\n\nimport org.springframework.boot.SpringApplication;\nimport org.springframework.boot.autoconfigure.Sprin"
  },
  {
    "path": "springboot-kafka/src/main/java/cn/abel/config/KafkaConfig.java",
    "chars": 3069,
    "preview": "package cn.abel.config;\n\nimport org.apache.kafka.clients.consumer.ConsumerConfig;\nimport org.apache.kafka.common.seriali"
  },
  {
    "path": "springboot-kafka/src/main/java/cn/abel/service/prehandle/KafkaConsumerService.java",
    "chars": 795,
    "preview": "package cn.abel.service.prehandle;\n\nimport org.apache.kafka.clients.consumer.ConsumerRecord;\nimport org.springframework."
  },
  {
    "path": "springboot-kafka/src/main/java/cn/abel/service/prehandle/SplitService.java",
    "chars": 597,
    "preview": "package cn.abel.service.prehandle;\n\n\nimport com.alibaba.fastjson.JSONObject;\nimport lombok.extern.slf4j.Slf4j;\n\nimport o"
  },
  {
    "path": "springboot-kafka/src/main/resources/local/application.properties",
    "chars": 472,
    "preview": "server.port=8090\nspring.kafka.bootstrap-servers=127.0.0.1:9092\nspring.kafka.consumer.group-id=springboot-kafka\nspring.ka"
  },
  {
    "path": "springboot-kafka/src/main/resources/local/banner.txt",
    "chars": 284,
    "preview": "########################################################\n#                                                      #\n#     "
  },
  {
    "path": "springboot-kafka/src/main/resources/local/logback-spring.xml",
    "chars": 1295,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<configuration>\n    <contextName>springboot-kafka</contextName>\n\n    <!-- 控制台输入日志"
  },
  {
    "path": "springboot-mybatis/docker-it.sh",
    "chars": 2443,
    "preview": "#!/bin/sh\n\n#########################\n# based on docker bin\n\npackageName=$1\nimageVersion=$2\ndockerDestFolder=$3\nenv=$4\npa"
  },
  {
    "path": "springboot-mybatis/env/dev/application.properties",
    "chars": 278,
    "preview": "# EMBEDDED SERVER CONFIGURATION (ServerProperties) \r\nserver.port=8099\r\n\r\n\r\nms.db.driverClassName=com.mysql.jdbc.Driver\r\n"
  },
  {
    "path": "springboot-mybatis/env/dev/env.properties",
    "chars": 2708,
    "preview": "#dev\n\n################\n##this property file is used to export shell session-scoped variables by command 'source *.proper"
  },
  {
    "path": "springboot-mybatis/env/dev/log4j.properties",
    "chars": 1083,
    "preview": "# Output pattern : date [thread] priority category - message\r\nlog4j.rootLogger=INFO, Console, R\r\n\r\n#Console\r\nlog4j.appen"
  },
  {
    "path": "springboot-mybatis/env/local/application.properties",
    "chars": 278,
    "preview": "# EMBEDDED SERVER CONFIGURATION (ServerProperties) \r\nserver.port=8099\r\n\r\n\r\nms.db.driverClassName=com.mysql.jdbc.Driver\r\n"
  },
  {
    "path": "springboot-mybatis/env/local/env.properties",
    "chars": 2649,
    "preview": "#local\n\n################\n##this property file is used to export shell session-scoped variables by command 'source *.prop"
  },
  {
    "path": "springboot-mybatis/env/local/log4j.properties",
    "chars": 1083,
    "preview": "# Output pattern : date [thread] priority category - message\r\nlog4j.rootLogger=INFO, Console, R\r\n\r\n#Console\r\nlog4j.appen"
  },
  {
    "path": "springboot-mybatis/package.sh",
    "chars": 2978,
    "preview": "#!/bin/bash\n\n#####################\n# bash only\n# usage ./package.sh\n#####################\n\n#declare -a: define an array\n"
  },
  {
    "path": "springboot-mybatis/pom.xml",
    "chars": 8468,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\"\n         xmlns:xsi=\"http://www"
  },
  {
    "path": "springboot-mybatis/scripts/docker/common/common-env.sh",
    "chars": 2140,
    "preview": "#ident  \"%W%\"\n#!/bin/sh -x\n\n#SCRIPT_PATH must be defined firstly by calling script\necho \"[INFO] calling common-env.sh\"\ni"
  }
]

// ... and 292 more files (download for full content)

About this extraction

This page contains the full source code of the 527515025/springBoot GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 492 files (928.0 KB), approximately 261.3k tokens, and a symbol index with 1617 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.

Copied to clipboard!