gitextract_lp5z54zp/ ├── .editorconfig ├── .gitee/ │ ├── ISSUE_TEMPLATE.zh-CN.md │ └── PULL_REQUEST_TEMPLATE.zh-CN.md ├── .github/ │ ├── FUNDING.yml │ ├── ISSUE_TEMPLATE.md │ ├── PULL_REQUEST_TEMPLATE.md │ └── codeql-analysis.yml ├── .gitignore ├── .travis.yml ├── CHANGELOG.md ├── CHANGELOG_5.0-5.7.md ├── LICENSE ├── README-EN.md ├── README.md ├── SECURITY.md ├── bin/ │ ├── check_dependency_updates.sh │ ├── cobertura.sh │ ├── commit.sh │ ├── deploy.sh │ ├── fast_install.sh │ ├── install.sh │ ├── javadoc.sh │ ├── logo.sh │ ├── package.sh │ ├── push_dev.sh │ ├── push_master.sh │ ├── replaceVersion.sh │ ├── simple_install.sh │ ├── sync.sh │ ├── test.sh │ ├── update_version.sh │ └── version.txt ├── docs/ │ ├── .nojekyll │ ├── apidocs/ │ │ └── index.html │ └── js/ │ └── version.js ├── hutool-ai/ │ ├── pom.xml │ └── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── hutool/ │ │ │ └── ai/ │ │ │ ├── AIException.java │ │ │ ├── AIServiceFactory.java │ │ │ ├── AIUtil.java │ │ │ ├── ModelName.java │ │ │ ├── Models.java │ │ │ ├── core/ │ │ │ │ ├── AIConfig.java │ │ │ │ ├── AIConfigBuilder.java │ │ │ │ ├── AIConfigRegistry.java │ │ │ │ ├── AIService.java │ │ │ │ ├── AIServiceProvider.java │ │ │ │ ├── BaseAIService.java │ │ │ │ ├── BaseConfig.java │ │ │ │ ├── Message.java │ │ │ │ └── package-info.java │ │ │ ├── model/ │ │ │ │ ├── deepseek/ │ │ │ │ │ ├── DeepSeekCommon.java │ │ │ │ │ ├── DeepSeekConfig.java │ │ │ │ │ ├── DeepSeekProvider.java │ │ │ │ │ ├── DeepSeekService.java │ │ │ │ │ ├── DeepSeekServiceImpl.java │ │ │ │ │ └── package-info.java │ │ │ │ ├── doubao/ │ │ │ │ │ ├── DoubaoCommon.java │ │ │ │ │ ├── DoubaoConfig.java │ │ │ │ │ ├── DoubaoProvider.java │ │ │ │ │ ├── DoubaoService.java │ │ │ │ │ ├── DoubaoServiceImpl.java │ │ │ │ │ └── package-info.java │ │ │ │ ├── gemini/ │ │ │ │ │ ├── GeminiCommon.java │ │ │ │ │ ├── GeminiConfig.java │ │ │ │ │ ├── GeminiProvider.java │ │ │ │ │ ├── GeminiService.java │ │ │ │ │ ├── GeminiServiceImpl.java │ │ │ │ │ └── package-info.java │ │ │ │ ├── grok/ │ │ │ │ │ ├── GrokCommon.java │ │ │ │ │ ├── GrokConfig.java │ │ │ │ │ ├── GrokProvider.java │ │ │ │ │ ├── GrokService.java │ │ │ │ │ ├── GrokServiceImpl.java │ │ │ │ │ └── package-info.java │ │ │ │ ├── hutool/ │ │ │ │ │ ├── HutoolCommon.java │ │ │ │ │ ├── HutoolConfig.java │ │ │ │ │ ├── HutoolProvider.java │ │ │ │ │ ├── HutoolService.java │ │ │ │ │ ├── HutoolServiceImpl.java │ │ │ │ │ └── package-info.java │ │ │ │ ├── ollama/ │ │ │ │ │ ├── OllamaCommon.java │ │ │ │ │ ├── OllamaConfig.java │ │ │ │ │ ├── OllamaProvider.java │ │ │ │ │ ├── OllamaService.java │ │ │ │ │ ├── OllamaServiceImpl.java │ │ │ │ │ └── package-info.java │ │ │ │ ├── openai/ │ │ │ │ │ ├── OpenaiCommon.java │ │ │ │ │ ├── OpenaiConfig.java │ │ │ │ │ ├── OpenaiProvider.java │ │ │ │ │ ├── OpenaiService.java │ │ │ │ │ ├── OpenaiServiceImpl.java │ │ │ │ │ └── package-info.java │ │ │ │ └── package-info.java │ │ │ └── package-info.java │ │ └── resources/ │ │ └── META-INF/ │ │ └── services/ │ │ ├── cn.hutool.ai.core.AIConfig │ │ └── cn.hutool.ai.core.AIServiceProvider │ └── test/ │ └── java/ │ ├── AIServiceFactoryTest.java │ ├── AIUtilTest.java │ └── cn/ │ └── hutool/ │ └── ai/ │ └── model/ │ ├── deepseek/ │ │ └── DeepSeekServiceTest.java │ ├── doubao/ │ │ └── DoubaoServiceTest.java │ ├── gemini/ │ │ └── GeminiServiceTest.java │ ├── grok/ │ │ └── GrokServiceTest.java │ ├── hutool/ │ │ └── HutoolServiceTest.java │ ├── ollama/ │ │ └── OllamaServiceTest.java │ └── openai/ │ ├── OpenaiProxyServiceTest.java │ └── OpenaiServiceTest.java ├── hutool-all/ │ ├── pom.xml │ └── src/ │ └── main/ │ └── java/ │ └── cn/ │ └── hutool/ │ ├── Hutool.java │ └── package-info.java ├── hutool-aop/ │ ├── pom.xml │ └── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── hutool/ │ │ │ └── aop/ │ │ │ ├── ProxyUtil.java │ │ │ ├── aspects/ │ │ │ │ ├── Aspect.java │ │ │ │ ├── SimpleAspect.java │ │ │ │ ├── TimeIntervalAspect.java │ │ │ │ └── package-info.java │ │ │ ├── interceptor/ │ │ │ │ ├── CglibInterceptor.java │ │ │ │ ├── JdkInterceptor.java │ │ │ │ ├── SpringCglibInterceptor.java │ │ │ │ └── package-info.java │ │ │ ├── package-info.java │ │ │ └── proxy/ │ │ │ ├── CglibProxyFactory.java │ │ │ ├── JdkProxyFactory.java │ │ │ ├── ProxyFactory.java │ │ │ ├── SpringCglibProxyFactory.java │ │ │ └── package-info.java │ │ └── resources/ │ │ └── META-INF/ │ │ └── services/ │ │ └── cn.hutool.aop.proxy.ProxyFactory │ └── test/ │ └── java/ │ └── cn/ │ └── hutool/ │ └── aop/ │ └── test/ │ ├── AopTest.java │ ├── IssueI74EX7Test.java │ └── IssueIBF20ZTest.java ├── hutool-bloomFilter/ │ ├── pom.xml │ └── src/ │ ├── main/ │ │ └── java/ │ │ └── cn/ │ │ └── hutool/ │ │ └── bloomfilter/ │ │ ├── BitMapBloomFilter.java │ │ ├── BitSetBloomFilter.java │ │ ├── BloomFilter.java │ │ ├── BloomFilterUtil.java │ │ ├── bitMap/ │ │ │ ├── BitMap.java │ │ │ ├── IntMap.java │ │ │ ├── LongMap.java │ │ │ └── package-info.java │ │ ├── filter/ │ │ │ ├── AbstractFilter.java │ │ │ ├── DefaultFilter.java │ │ │ ├── ELFFilter.java │ │ │ ├── FNVFilter.java │ │ │ ├── FuncFilter.java │ │ │ ├── HfFilter.java │ │ │ ├── HfIpFilter.java │ │ │ ├── JSFilter.java │ │ │ ├── PJWFilter.java │ │ │ ├── RSFilter.java │ │ │ ├── SDBMFilter.java │ │ │ ├── TianlFilter.java │ │ │ └── package-info.java │ │ └── package-info.java │ └── test/ │ └── java/ │ └── cn/ │ └── hutool/ │ └── bloomfilter/ │ ├── AbstractFilterTest.java │ ├── BitMapBloomFilterTest.java │ └── BitSetBloomFilterTest.java ├── hutool-bom/ │ └── pom.xml ├── hutool-cache/ │ ├── pom.xml │ └── src/ │ ├── main/ │ │ └── java/ │ │ └── cn/ │ │ └── hutool/ │ │ └── cache/ │ │ ├── Cache.java │ │ ├── CacheListener.java │ │ ├── CacheUtil.java │ │ ├── GlobalPruneTimer.java │ │ ├── file/ │ │ │ ├── AbstractFileCache.java │ │ │ ├── LFUFileCache.java │ │ │ ├── LRUFileCache.java │ │ │ └── package-info.java │ │ ├── impl/ │ │ │ ├── AbstractCache.java │ │ │ ├── CacheObj.java │ │ │ ├── CacheObjIterator.java │ │ │ ├── CacheValuesIterator.java │ │ │ ├── FIFOCache.java │ │ │ ├── LFUCache.java │ │ │ ├── LRUCache.java │ │ │ ├── NoCache.java │ │ │ ├── ReentrantCache.java │ │ │ ├── StampedCache.java │ │ │ ├── TimedCache.java │ │ │ ├── WeakCache.java │ │ │ └── package-info.java │ │ └── package-info.java │ └── test/ │ └── java/ │ └── cn/ │ └── hutool/ │ └── cache/ │ ├── CacheConcurrentTest.java │ ├── CacheTest.java │ ├── FileCacheTest.java │ ├── Issue3618Test.java │ ├── IssueI8MEIXTest.java │ ├── LRUCacheTest.java │ └── WeakCacheTest.java ├── hutool-captcha/ │ ├── pom.xml │ └── src/ │ ├── main/ │ │ └── java/ │ │ └── cn/ │ │ └── hutool/ │ │ └── captcha/ │ │ ├── AbstractCaptcha.java │ │ ├── CaptchaUtil.java │ │ ├── CircleCaptcha.java │ │ ├── GifCaptcha.java │ │ ├── ICaptcha.java │ │ ├── LineCaptcha.java │ │ ├── ShearCaptcha.java │ │ ├── generator/ │ │ │ ├── AbstractGenerator.java │ │ │ ├── CodeGenerator.java │ │ │ ├── MathGenerator.java │ │ │ ├── RandomGenerator.java │ │ │ └── package-info.java │ │ └── package-info.java │ └── test/ │ └── java/ │ └── cn/ │ └── hutool/ │ └── captcha/ │ ├── CaptchaTest.java │ ├── CaptchaUtilTest.java │ ├── GeneratorTest.java │ ├── GifCaptchaUtilTest.java │ └── ShearCaptchaTest.java ├── hutool-core/ │ ├── README.md │ ├── pom.xml │ └── src/ │ ├── main/ │ │ └── java/ │ │ └── cn/ │ │ └── hutool/ │ │ └── core/ │ │ ├── annotation/ │ │ │ ├── AbstractAnnotationSynthesizer.java │ │ │ ├── AbstractLinkAnnotationPostProcessor.java │ │ │ ├── AbstractWrappedAnnotationAttribute.java │ │ │ ├── AggregateAnnotation.java │ │ │ ├── Alias.java │ │ │ ├── AliasAnnotationPostProcessor.java │ │ │ ├── AliasFor.java │ │ │ ├── AliasLinkAnnotationPostProcessor.java │ │ │ ├── AliasedAnnotationAttribute.java │ │ │ ├── AnnotationAttribute.java │ │ │ ├── AnnotationAttributeValueProvider.java │ │ │ ├── AnnotationProxy.java │ │ │ ├── AnnotationSynthesizer.java │ │ │ ├── AnnotationUtil.java │ │ │ ├── CacheableAnnotationAttribute.java │ │ │ ├── CacheableSynthesizedAnnotationAttributeProcessor.java │ │ │ ├── CombinationAnnotationElement.java │ │ │ ├── ForceAliasFor.java │ │ │ ├── ForceAliasedAnnotationAttribute.java │ │ │ ├── GenericSynthesizedAggregateAnnotation.java │ │ │ ├── GenericSynthesizedAnnotation.java │ │ │ ├── Hierarchical.java │ │ │ ├── Link.java │ │ │ ├── MirrorFor.java │ │ │ ├── MirrorLinkAnnotationPostProcessor.java │ │ │ ├── MirroredAnnotationAttribute.java │ │ │ ├── PropIgnore.java │ │ │ ├── RelationType.java │ │ │ ├── SynthesizedAggregateAnnotation.java │ │ │ ├── SynthesizedAnnotation.java │ │ │ ├── SynthesizedAnnotationAttributeProcessor.java │ │ │ ├── SynthesizedAnnotationPostProcessor.java │ │ │ ├── SynthesizedAnnotationProxy.java │ │ │ ├── SynthesizedAnnotationSelector.java │ │ │ ├── WrappedAnnotationAttribute.java │ │ │ ├── package-info.java │ │ │ └── scanner/ │ │ │ ├── AbstractTypeAnnotationScanner.java │ │ │ ├── AnnotationScanner.java │ │ │ ├── ElementAnnotationScanner.java │ │ │ ├── EmptyAnnotationScanner.java │ │ │ ├── FieldAnnotationScanner.java │ │ │ ├── GenericAnnotationScanner.java │ │ │ ├── MetaAnnotationScanner.java │ │ │ ├── MethodAnnotationScanner.java │ │ │ ├── TypeAnnotationScanner.java │ │ │ └── package-info.java │ │ ├── bean/ │ │ │ ├── BeanDesc.java │ │ │ ├── BeanDescCache.java │ │ │ ├── BeanException.java │ │ │ ├── BeanInfoCache.java │ │ │ ├── BeanPath.java │ │ │ ├── BeanUtil.java │ │ │ ├── DynaBean.java │ │ │ ├── NullWrapperBean.java │ │ │ ├── PropDesc.java │ │ │ ├── RecordUtil.java │ │ │ ├── copier/ │ │ │ │ ├── AbsCopier.java │ │ │ │ ├── BeanCopier.java │ │ │ │ ├── BeanToBeanCopier.java │ │ │ │ ├── BeanToMapCopier.java │ │ │ │ ├── CopyOptions.java │ │ │ │ ├── IJSONTypeConverter.java │ │ │ │ ├── MapToBeanCopier.java │ │ │ │ ├── MapToMapCopier.java │ │ │ │ ├── ValueProvider.java │ │ │ │ ├── ValueProviderToBeanCopier.java │ │ │ │ ├── package-info.java │ │ │ │ └── provider/ │ │ │ │ ├── BeanValueProvider.java │ │ │ │ ├── DynaBeanValueProvider.java │ │ │ │ ├── MapValueProvider.java │ │ │ │ └── package-info.java │ │ │ └── package-info.java │ │ ├── builder/ │ │ │ ├── Builder.java │ │ │ ├── CompareToBuilder.java │ │ │ ├── EqualsBuilder.java │ │ │ ├── GenericBuilder.java │ │ │ ├── HashCodeBuilder.java │ │ │ ├── IDKey.java │ │ │ └── package-info.java │ │ ├── clone/ │ │ │ ├── CloneRuntimeException.java │ │ │ ├── CloneSupport.java │ │ │ ├── Cloneable.java │ │ │ ├── DefaultCloneable.java │ │ │ └── package-info.java │ │ ├── codec/ │ │ │ ├── BCD.java │ │ │ ├── Base16Codec.java │ │ │ ├── Base32.java │ │ │ ├── Base32Codec.java │ │ │ ├── Base58.java │ │ │ ├── Base58Codec.java │ │ │ ├── Base62.java │ │ │ ├── Base62Codec.java │ │ │ ├── Base64.java │ │ │ ├── Base64Decoder.java │ │ │ ├── Base64Encoder.java │ │ │ ├── Caesar.java │ │ │ ├── Decoder.java │ │ │ ├── Encoder.java │ │ │ ├── Hashids.java │ │ │ ├── Morse.java │ │ │ ├── PercentCodec.java │ │ │ ├── PunyCode.java │ │ │ ├── Rot.java │ │ │ └── package-info.java │ │ ├── collection/ │ │ │ ├── ArrayIter.java │ │ │ ├── AvgPartition.java │ │ │ ├── BoundedPriorityQueue.java │ │ │ ├── CollStreamUtil.java │ │ │ ├── CollUtil.java │ │ │ ├── CollectionUtil.java │ │ │ ├── ComputeIter.java │ │ │ ├── ConcurrentHashSet.java │ │ │ ├── CopiedIter.java │ │ │ ├── EnumerationIter.java │ │ │ ├── FilterIter.java │ │ │ ├── IterChain.java │ │ │ ├── IterUtil.java │ │ │ ├── IterableIter.java │ │ │ ├── IteratorEnumeration.java │ │ │ ├── LineIter.java │ │ │ ├── ListUtil.java │ │ │ ├── NodeListIter.java │ │ │ ├── Partition.java │ │ │ ├── PartitionIter.java │ │ │ ├── RandomAccessAvgPartition.java │ │ │ ├── RandomAccessPartition.java │ │ │ ├── ResettableIter.java │ │ │ ├── RingIndexUtil.java │ │ │ ├── SpliteratorUtil.java │ │ │ ├── TransCollection.java │ │ │ ├── TransIter.java │ │ │ ├── TransSpliterator.java │ │ │ ├── UniqueKeySet.java │ │ │ └── package-info.java │ │ ├── comparator/ │ │ │ ├── BaseFieldComparator.java │ │ │ ├── ComparableComparator.java │ │ │ ├── ComparatorChain.java │ │ │ ├── ComparatorException.java │ │ │ ├── CompareUtil.java │ │ │ ├── FieldComparator.java │ │ │ ├── FieldsComparator.java │ │ │ ├── FuncComparator.java │ │ │ ├── IndexedComparator.java │ │ │ ├── InstanceComparator.java │ │ │ ├── LengthComparator.java │ │ │ ├── NullComparator.java │ │ │ ├── PinyinComparator.java │ │ │ ├── PropertyComparator.java │ │ │ ├── ReverseComparator.java │ │ │ ├── VersionComparator.java │ │ │ ├── WindowsExplorerStringComparator.java │ │ │ └── package-info.java │ │ ├── compiler/ │ │ │ ├── CompilerException.java │ │ │ ├── CompilerUtil.java │ │ │ ├── DiagnosticUtil.java │ │ │ ├── JavaClassFileManager.java │ │ │ ├── JavaClassFileObject.java │ │ │ ├── JavaFileObjectUtil.java │ │ │ ├── JavaSourceCompiler.java │ │ │ ├── JavaSourceFileObject.java │ │ │ └── package-info.java │ │ ├── compress/ │ │ │ ├── Deflate.java │ │ │ ├── Gzip.java │ │ │ ├── ZipCopyVisitor.java │ │ │ ├── ZipReader.java │ │ │ ├── ZipWriter.java │ │ │ └── package-info.java │ │ ├── convert/ │ │ │ ├── AbstractConverter.java │ │ │ ├── BasicType.java │ │ │ ├── CastUtil.java │ │ │ ├── Convert.java │ │ │ ├── ConvertException.java │ │ │ ├── Converter.java │ │ │ ├── ConverterRegistry.java │ │ │ ├── NumberChineseFormatter.java │ │ │ ├── NumberWithFormat.java │ │ │ ├── NumberWordFormatter.java │ │ │ ├── TypeConverter.java │ │ │ ├── impl/ │ │ │ │ ├── ArrayConverter.java │ │ │ │ ├── AtomicBooleanConverter.java │ │ │ │ ├── AtomicIntegerArrayConverter.java │ │ │ │ ├── AtomicLongArrayConverter.java │ │ │ │ ├── AtomicReferenceConverter.java │ │ │ │ ├── BeanConverter.java │ │ │ │ ├── BooleanConverter.java │ │ │ │ ├── CalendarConverter.java │ │ │ │ ├── CastConverter.java │ │ │ │ ├── CharacterConverter.java │ │ │ │ ├── CharsetConverter.java │ │ │ │ ├── ClassConverter.java │ │ │ │ ├── CollectionConverter.java │ │ │ │ ├── CurrencyConverter.java │ │ │ │ ├── DateConverter.java │ │ │ │ ├── DurationConverter.java │ │ │ │ ├── EntryConverter.java │ │ │ │ ├── EnumConverter.java │ │ │ │ ├── LocaleConverter.java │ │ │ │ ├── MapConverter.java │ │ │ │ ├── NumberConverter.java │ │ │ │ ├── OptConverter.java │ │ │ │ ├── OptionalConverter.java │ │ │ │ ├── PairConverter.java │ │ │ │ ├── PathConverter.java │ │ │ │ ├── PeriodConverter.java │ │ │ │ ├── PrimitiveConverter.java │ │ │ │ ├── RecordConverter.java │ │ │ │ ├── ReferenceConverter.java │ │ │ │ ├── StackTraceElementConverter.java │ │ │ │ ├── StringConverter.java │ │ │ │ ├── TemporalAccessorConverter.java │ │ │ │ ├── TimeZoneConverter.java │ │ │ │ ├── URIConverter.java │ │ │ │ ├── URLConverter.java │ │ │ │ ├── UUIDConverter.java │ │ │ │ └── package-info.java │ │ │ └── package-info.java │ │ ├── date/ │ │ │ ├── BetweenFormatter.java │ │ │ ├── CalendarUtil.java │ │ │ ├── ChineseDate.java │ │ │ ├── DateBetween.java │ │ │ ├── DateException.java │ │ │ ├── DateField.java │ │ │ ├── DateModifier.java │ │ │ ├── DatePattern.java │ │ │ ├── DateRange.java │ │ │ ├── DateTime.java │ │ │ ├── DateUnit.java │ │ │ ├── DateUtil.java │ │ │ ├── GroupTimeInterval.java │ │ │ ├── LocalDateTimeUtil.java │ │ │ ├── Month.java │ │ │ ├── Quarter.java │ │ │ ├── StopWatch.java │ │ │ ├── SystemClock.java │ │ │ ├── TemporalAccessorUtil.java │ │ │ ├── TemporalUtil.java │ │ │ ├── TimeInterval.java │ │ │ ├── TimeZoneUtil.java │ │ │ ├── Week.java │ │ │ ├── YearQuarter.java │ │ │ ├── Zodiac.java │ │ │ ├── ZoneUtil.java │ │ │ ├── chinese/ │ │ │ │ ├── ChineseMonth.java │ │ │ │ ├── GanZhi.java │ │ │ │ ├── LunarFestival.java │ │ │ │ ├── LunarInfo.java │ │ │ │ ├── SolarTerms.java │ │ │ │ └── package-info.java │ │ │ ├── format/ │ │ │ │ ├── AbstractDateBasic.java │ │ │ │ ├── DateBasic.java │ │ │ │ ├── DateParser.java │ │ │ │ ├── DatePrinter.java │ │ │ │ ├── FastDateFormat.java │ │ │ │ ├── FastDateParser.java │ │ │ │ ├── FastDatePrinter.java │ │ │ │ ├── FormatCache.java │ │ │ │ ├── GlobalCustomFormat.java │ │ │ │ └── package-info.java │ │ │ └── package-info.java │ │ ├── exceptions/ │ │ │ ├── CheckedUtil.java │ │ │ ├── DependencyException.java │ │ │ ├── ExceptionUtil.java │ │ │ ├── InvocationTargetRuntimeException.java │ │ │ ├── NotInitedException.java │ │ │ ├── StatefulException.java │ │ │ ├── UtilException.java │ │ │ ├── ValidateException.java │ │ │ └── package-info.java │ │ ├── getter/ │ │ │ ├── ArrayTypeGetter.java │ │ │ ├── BasicTypeGetter.java │ │ │ ├── GroupedTypeGetter.java │ │ │ ├── ListTypeGetter.java │ │ │ ├── OptArrayTypeGetter.java │ │ │ ├── OptBasicTypeGetter.java │ │ │ ├── OptNullBasicTypeFromObjectGetter.java │ │ │ ├── OptNullBasicTypeFromStringGetter.java │ │ │ ├── OptNullBasicTypeGetter.java │ │ │ └── package-info.java │ │ ├── img/ │ │ │ ├── BackgroundRemoval.java │ │ │ ├── ColorUtil.java │ │ │ ├── FontUtil.java │ │ │ ├── GraphicsUtil.java │ │ │ ├── Img.java │ │ │ ├── ImgUtil.java │ │ │ ├── LabColor.java │ │ │ ├── ScaleType.java │ │ │ ├── gif/ │ │ │ │ ├── AnimatedGifEncoder.java │ │ │ │ ├── GifDecoder.java │ │ │ │ ├── LZWEncoder.java │ │ │ │ ├── NeuQuant.java │ │ │ │ └── package-info.java │ │ │ └── package-info.java │ │ ├── io/ │ │ │ ├── AppendableWriter.java │ │ │ ├── BOMInputStream.java │ │ │ ├── BomReader.java │ │ │ ├── BufferUtil.java │ │ │ ├── CharsetDetector.java │ │ │ ├── FastByteArrayOutputStream.java │ │ │ ├── FastByteBuffer.java │ │ │ ├── FastStringWriter.java │ │ │ ├── FileMagicNumber.java │ │ │ ├── FileTypeUtil.java │ │ │ ├── FileUtil.java │ │ │ ├── IORuntimeException.java │ │ │ ├── IoUtil.java │ │ │ ├── LimitedInputStream.java │ │ │ ├── LineHandler.java │ │ │ ├── ManifestUtil.java │ │ │ ├── NioUtil.java │ │ │ ├── NullOutputStream.java │ │ │ ├── StreamProgress.java │ │ │ ├── ValidateObjectInputStream.java │ │ │ ├── checksum/ │ │ │ │ ├── CRC16.java │ │ │ │ ├── CRC8.java │ │ │ │ ├── crc16/ │ │ │ │ │ ├── CRC16Ansi.java │ │ │ │ │ ├── CRC16CCITT.java │ │ │ │ │ ├── CRC16CCITTFalse.java │ │ │ │ │ ├── CRC16Checksum.java │ │ │ │ │ ├── CRC16DNP.java │ │ │ │ │ ├── CRC16IBM.java │ │ │ │ │ ├── CRC16Maxim.java │ │ │ │ │ ├── CRC16Modbus.java │ │ │ │ │ ├── CRC16USB.java │ │ │ │ │ ├── CRC16X25.java │ │ │ │ │ ├── CRC16XModem.java │ │ │ │ │ └── package-info.java │ │ │ │ └── package-info.java │ │ │ ├── copy/ │ │ │ │ ├── ChannelCopier.java │ │ │ │ ├── IoCopier.java │ │ │ │ ├── ReaderWriterCopier.java │ │ │ │ ├── StreamCopier.java │ │ │ │ └── package-info.java │ │ │ ├── file/ │ │ │ │ ├── FileAppender.java │ │ │ │ ├── FileCopier.java │ │ │ │ ├── FileMode.java │ │ │ │ ├── FileNameUtil.java │ │ │ │ ├── FileReader.java │ │ │ │ ├── FileSystemUtil.java │ │ │ │ ├── FileWrapper.java │ │ │ │ ├── FileWriter.java │ │ │ │ ├── LineReadWatcher.java │ │ │ │ ├── LineSeparator.java │ │ │ │ ├── PathMover.java │ │ │ │ ├── PathUtil.java │ │ │ │ ├── Tailer.java │ │ │ │ ├── package-info.java │ │ │ │ └── visitor/ │ │ │ │ ├── CopyVisitor.java │ │ │ │ ├── DelVisitor.java │ │ │ │ ├── MoveVisitor.java │ │ │ │ └── package-info.java │ │ │ ├── package-info.java │ │ │ ├── resource/ │ │ │ │ ├── BytesResource.java │ │ │ │ ├── CharSequenceResource.java │ │ │ │ ├── ClassPathResource.java │ │ │ │ ├── FileObjectResource.java │ │ │ │ ├── FileResource.java │ │ │ │ ├── InputStreamResource.java │ │ │ │ ├── MultiFileResource.java │ │ │ │ ├── MultiResource.java │ │ │ │ ├── NoResourceException.java │ │ │ │ ├── Resource.java │ │ │ │ ├── ResourceUtil.java │ │ │ │ ├── StringResource.java │ │ │ │ ├── UrlResource.java │ │ │ │ ├── VfsResource.java │ │ │ │ ├── WebAppResource.java │ │ │ │ └── package-info.java │ │ │ ├── unit/ │ │ │ │ ├── DataSize.java │ │ │ │ ├── DataSizeUtil.java │ │ │ │ ├── DataUnit.java │ │ │ │ └── package-info.java │ │ │ └── watch/ │ │ │ ├── SimpleWatcher.java │ │ │ ├── WatchAction.java │ │ │ ├── WatchException.java │ │ │ ├── WatchKind.java │ │ │ ├── WatchMonitor.java │ │ │ ├── WatchServer.java │ │ │ ├── WatchUtil.java │ │ │ ├── Watcher.java │ │ │ ├── package-info.java │ │ │ └── watchers/ │ │ │ ├── DelayWatcher.java │ │ │ ├── IgnoreWatcher.java │ │ │ ├── WatcherChain.java │ │ │ └── package-info.java │ │ ├── lang/ │ │ │ ├── Assert.java │ │ │ ├── Chain.java │ │ │ ├── ClassScanner.java │ │ │ ├── ConsistentHash.java │ │ │ ├── Console.java │ │ │ ├── ConsoleTable.java │ │ │ ├── DefaultSegment.java │ │ │ ├── Dict.java │ │ │ ├── Editor.java │ │ │ ├── EnumItem.java │ │ │ ├── Filter.java │ │ │ ├── JarClassLoader.java │ │ │ ├── Matcher.java │ │ │ ├── ObjectId.java │ │ │ ├── Opt.java │ │ │ ├── Pair.java │ │ │ ├── ParameterizedTypeImpl.java │ │ │ ├── PatternPool.java │ │ │ ├── Pid.java │ │ │ ├── Range.java │ │ │ ├── RegexPool.java │ │ │ ├── Replacer.java │ │ │ ├── ResourceClassLoader.java │ │ │ ├── Segment.java │ │ │ ├── SimpleCache.java │ │ │ ├── Singleton.java │ │ │ ├── Snowflake.java │ │ │ ├── Tuple.java │ │ │ ├── TypeReference.java │ │ │ ├── UUID.java │ │ │ ├── Validator.java │ │ │ ├── Version.java │ │ │ ├── WeightListRandom.java │ │ │ ├── WeightRandom.java │ │ │ ├── ansi/ │ │ │ │ ├── Ansi8BitColor.java │ │ │ │ ├── AnsiBackground.java │ │ │ │ ├── AnsiColor.java │ │ │ │ ├── AnsiColorWrapper.java │ │ │ │ ├── AnsiColors.java │ │ │ │ ├── AnsiElement.java │ │ │ │ ├── AnsiEncoder.java │ │ │ │ ├── AnsiStyle.java │ │ │ │ ├── ForeOrBack.java │ │ │ │ └── package-info.java │ │ │ ├── caller/ │ │ │ │ ├── Caller.java │ │ │ │ ├── CallerUtil.java │ │ │ │ ├── SecurityManagerCaller.java │ │ │ │ ├── StackTraceCaller.java │ │ │ │ └── package-info.java │ │ │ ├── copier/ │ │ │ │ ├── Copier.java │ │ │ │ ├── SrcToDestCopier.java │ │ │ │ └── package-info.java │ │ │ ├── func/ │ │ │ │ ├── Consumer3.java │ │ │ │ ├── Func.java │ │ │ │ ├── Func0.java │ │ │ │ ├── Func1.java │ │ │ │ ├── LambdaUtil.java │ │ │ │ ├── Supplier1.java │ │ │ │ ├── Supplier2.java │ │ │ │ ├── Supplier3.java │ │ │ │ ├── Supplier4.java │ │ │ │ ├── Supplier5.java │ │ │ │ ├── VoidFunc.java │ │ │ │ ├── VoidFunc0.java │ │ │ │ ├── VoidFunc1.java │ │ │ │ └── package-info.java │ │ │ ├── generator/ │ │ │ │ ├── Generator.java │ │ │ │ ├── ObjectGenerator.java │ │ │ │ ├── ObjectIdGenerator.java │ │ │ │ ├── SnowflakeGenerator.java │ │ │ │ ├── UUIDGenerator.java │ │ │ │ └── package-info.java │ │ │ ├── hash/ │ │ │ │ ├── CityHash.java │ │ │ │ ├── Hash.java │ │ │ │ ├── Hash128.java │ │ │ │ ├── Hash32.java │ │ │ │ ├── Hash64.java │ │ │ │ ├── KetamaHash.java │ │ │ │ ├── MetroHash.java │ │ │ │ ├── MurmurHash.java │ │ │ │ ├── Number128.java │ │ │ │ └── package-info.java │ │ │ ├── id/ │ │ │ │ ├── IdConstants.java │ │ │ │ ├── NanoId.java │ │ │ │ └── package-info.java │ │ │ ├── intern/ │ │ │ │ ├── InternUtil.java │ │ │ │ ├── Interner.java │ │ │ │ ├── JdkStringInterner.java │ │ │ │ ├── WeakInterner.java │ │ │ │ └── package-info.java │ │ │ ├── loader/ │ │ │ │ ├── AtomicLoader.java │ │ │ │ ├── LazyFunLoader.java │ │ │ │ ├── LazyLoader.java │ │ │ │ ├── Loader.java │ │ │ │ └── package-info.java │ │ │ ├── mutable/ │ │ │ │ ├── Mutable.java │ │ │ │ ├── MutableBool.java │ │ │ │ ├── MutableByte.java │ │ │ │ ├── MutableDouble.java │ │ │ │ ├── MutableFloat.java │ │ │ │ ├── MutableInt.java │ │ │ │ ├── MutableLong.java │ │ │ │ ├── MutableObj.java │ │ │ │ ├── MutablePair.java │ │ │ │ ├── MutableShort.java │ │ │ │ └── package-info.java │ │ │ ├── package-info.java │ │ │ ├── ref/ │ │ │ │ ├── PhantomObj.java │ │ │ │ ├── Ref.java │ │ │ │ ├── ReferenceType.java │ │ │ │ ├── SoftObj.java │ │ │ │ ├── StrongObj.java │ │ │ │ ├── WeakObj.java │ │ │ │ └── package-info.java │ │ │ ├── reflect/ │ │ │ │ ├── ActualTypeMapperPool.java │ │ │ │ ├── LookupFactory.java │ │ │ │ ├── MethodHandleUtil.java │ │ │ │ └── package-info.java │ │ │ └── tree/ │ │ │ ├── Node.java │ │ │ ├── Tree.java │ │ │ ├── TreeBuilder.java │ │ │ ├── TreeNode.java │ │ │ ├── TreeNodeConfig.java │ │ │ ├── TreeUtil.java │ │ │ ├── package-info.java │ │ │ └── parser/ │ │ │ ├── DefaultNodeParser.java │ │ │ └── NodeParser.java │ │ ├── map/ │ │ │ ├── AbsEntry.java │ │ │ ├── BiMap.java │ │ │ ├── CamelCaseLinkedMap.java │ │ │ ├── CamelCaseMap.java │ │ │ ├── CaseInsensitiveLinkedMap.java │ │ │ ├── CaseInsensitiveMap.java │ │ │ ├── CaseInsensitiveTreeMap.java │ │ │ ├── CustomKeyMap.java │ │ │ ├── FixedLinkedHashMap.java │ │ │ ├── ForestMap.java │ │ │ ├── FuncKeyMap.java │ │ │ ├── FuncMap.java │ │ │ ├── LinkedForestMap.java │ │ │ ├── MapBuilder.java │ │ │ ├── MapProxy.java │ │ │ ├── MapUtil.java │ │ │ ├── MapWrapper.java │ │ │ ├── ReferenceConcurrentMap.java │ │ │ ├── SafeConcurrentHashMap.java │ │ │ ├── TableMap.java │ │ │ ├── TolerantMap.java │ │ │ ├── TransMap.java │ │ │ ├── TreeEntry.java │ │ │ ├── WeakConcurrentMap.java │ │ │ ├── multi/ │ │ │ │ ├── AbsCollValueMap.java │ │ │ │ ├── AbsTable.java │ │ │ │ ├── CollectionValueMap.java │ │ │ │ ├── ListValueMap.java │ │ │ │ ├── RowKeyTable.java │ │ │ │ ├── SetValueMap.java │ │ │ │ ├── Table.java │ │ │ │ └── package-info.java │ │ │ ├── package-info.java │ │ │ └── reference/ │ │ │ ├── ReferenceConcurrentMap.java │ │ │ ├── SoftConcurrentMap.java │ │ │ ├── WeakKeyConcurrentMap.java │ │ │ ├── WeakKeyValueConcurrentMap.java │ │ │ └── package-info.java │ │ ├── math/ │ │ │ ├── Arrangement.java │ │ │ ├── BitStatusUtil.java │ │ │ ├── Calculator.java │ │ │ ├── Combination.java │ │ │ ├── MathUtil.java │ │ │ ├── Money.java │ │ │ └── package-info.java │ │ ├── net/ │ │ │ ├── DefaultTrustManager.java │ │ │ ├── FormUrlencoded.java │ │ │ ├── Ipv4Util.java │ │ │ ├── LocalPortGenerater.java │ │ │ ├── MaskBit.java │ │ │ ├── NetUtil.java │ │ │ ├── PassAuth.java │ │ │ ├── ProxySocketFactory.java │ │ │ ├── RFC3986.java │ │ │ ├── SSLContextBuilder.java │ │ │ ├── SSLProtocols.java │ │ │ ├── SSLUtil.java │ │ │ ├── URLDecoder.java │ │ │ ├── URLEncodeUtil.java │ │ │ ├── URLEncoder.java │ │ │ ├── UserPassAuthenticator.java │ │ │ ├── multipart/ │ │ │ │ ├── MultipartFormData.java │ │ │ │ ├── MultipartRequestInputStream.java │ │ │ │ ├── UploadFile.java │ │ │ │ ├── UploadFileHeader.java │ │ │ │ ├── UploadSetting.java │ │ │ │ └── package-info.java │ │ │ ├── package-info.java │ │ │ └── url/ │ │ │ ├── UrlBuilder.java │ │ │ ├── UrlPath.java │ │ │ ├── UrlQuery.java │ │ │ └── package-info.java │ │ ├── package-info.java │ │ ├── stream/ │ │ │ ├── CollectorUtil.java │ │ │ ├── SimpleCollector.java │ │ │ ├── StreamUtil.java │ │ │ └── package-info.java │ │ ├── swing/ │ │ │ ├── DesktopUtil.java │ │ │ ├── RobotUtil.java │ │ │ ├── ScreenUtil.java │ │ │ ├── clipboard/ │ │ │ │ ├── ClipboardListener.java │ │ │ │ ├── ClipboardMonitor.java │ │ │ │ ├── ClipboardUtil.java │ │ │ │ ├── ImageSelection.java │ │ │ │ ├── StrClipboardListener.java │ │ │ │ └── package-info.java │ │ │ └── package-info.java │ │ ├── text/ │ │ │ ├── ASCIIStrCache.java │ │ │ ├── AntPathMatcher.java │ │ │ ├── CharPool.java │ │ │ ├── CharSequenceUtil.java │ │ │ ├── NamingCase.java │ │ │ ├── PasswdStrength.java │ │ │ ├── Simhash.java │ │ │ ├── StrBuilder.java │ │ │ ├── StrFormatter.java │ │ │ ├── StrJoiner.java │ │ │ ├── StrMatcher.java │ │ │ ├── StrPool.java │ │ │ ├── StrSplitter.java │ │ │ ├── TextSimilarity.java │ │ │ ├── UnicodeUtil.java │ │ │ ├── csv/ │ │ │ │ ├── CsvBaseReader.java │ │ │ │ ├── CsvConfig.java │ │ │ │ ├── CsvData.java │ │ │ │ ├── CsvParser.java │ │ │ │ ├── CsvReadConfig.java │ │ │ │ ├── CsvReader.java │ │ │ │ ├── CsvRow.java │ │ │ │ ├── CsvRowHandler.java │ │ │ │ ├── CsvTokener.java │ │ │ │ ├── CsvUtil.java │ │ │ │ ├── CsvWriteConfig.java │ │ │ │ ├── CsvWriter.java │ │ │ │ └── package-info.java │ │ │ ├── escape/ │ │ │ │ ├── Html4Escape.java │ │ │ │ ├── Html4Unescape.java │ │ │ │ ├── InternalEscapeUtil.java │ │ │ │ ├── NumericEntityUnescaper.java │ │ │ │ ├── XmlEscape.java │ │ │ │ ├── XmlUnescape.java │ │ │ │ └── package-info.java │ │ │ ├── finder/ │ │ │ │ ├── CharFinder.java │ │ │ │ ├── CharMatcherFinder.java │ │ │ │ ├── Finder.java │ │ │ │ ├── LengthFinder.java │ │ │ │ ├── PatternFinder.java │ │ │ │ ├── StrFinder.java │ │ │ │ ├── TextFinder.java │ │ │ │ └── package-info.java │ │ │ ├── package-info.java │ │ │ ├── replacer/ │ │ │ │ ├── LookupReplacer.java │ │ │ │ ├── ReplacerChain.java │ │ │ │ ├── StrReplacer.java │ │ │ │ └── package-info.java │ │ │ └── split/ │ │ │ └── SplitIter.java │ │ ├── thread/ │ │ │ ├── AsyncUtil.java │ │ │ ├── BlockPolicy.java │ │ │ ├── ConcurrencyTester.java │ │ │ ├── DelegatedExecutorService.java │ │ │ ├── ExecutorBuilder.java │ │ │ ├── FinalizableDelegatedExecutorService.java │ │ │ ├── GlobalThreadPool.java │ │ │ ├── NamedThreadFactory.java │ │ │ ├── RecyclableBatchThreadPoolExecutor.java │ │ │ ├── RejectPolicy.java │ │ │ ├── SemaphoreRunnable.java │ │ │ ├── SyncFinisher.java │ │ │ ├── ThreadException.java │ │ │ ├── ThreadFactoryBuilder.java │ │ │ ├── ThreadUtil.java │ │ │ ├── lock/ │ │ │ │ ├── LockUtil.java │ │ │ │ ├── NoLock.java │ │ │ │ ├── NoReadWriteLock.java │ │ │ │ ├── SegmentLock.java │ │ │ │ └── package-info.java │ │ │ ├── package-info.java │ │ │ └── threadlocal/ │ │ │ ├── NamedInheritableThreadLocal.java │ │ │ ├── NamedThreadLocal.java │ │ │ └── package-info.java │ │ └── util/ │ │ ├── ArrayUtil.java │ │ ├── BooleanUtil.java │ │ ├── ByteUtil.java │ │ ├── CharUtil.java │ │ ├── CharsetUtil.java │ │ ├── ClassLoaderUtil.java │ │ ├── ClassUtil.java │ │ ├── CoordinateUtil.java │ │ ├── CreditCodeUtil.java │ │ ├── DesensitizedUtil.java │ │ ├── EnumUtil.java │ │ ├── EscapeUtil.java │ │ ├── HashUtil.java │ │ ├── HexUtil.java │ │ ├── IdUtil.java │ │ ├── IdcardUtil.java │ │ ├── JAXBUtil.java │ │ ├── JNDIUtil.java │ │ ├── JdkUtil.java │ │ ├── ModifierUtil.java │ │ ├── NumberUtil.java │ │ ├── ObjUtil.java │ │ ├── ObjectUtil.java │ │ ├── PageUtil.java │ │ ├── PhoneUtil.java │ │ ├── PrimitiveArrayUtil.java │ │ ├── RadixUtil.java │ │ ├── RandomUtil.java │ │ ├── ReUtil.java │ │ ├── ReferenceUtil.java │ │ ├── ReflectUtil.java │ │ ├── RuntimeUtil.java │ │ ├── SerializeUtil.java │ │ ├── ServiceLoaderUtil.java │ │ ├── StrUtil.java │ │ ├── SystemPropsUtil.java │ │ ├── TypeUtil.java │ │ ├── URLUtil.java │ │ ├── VersionUtil.java │ │ ├── XmlUtil.java │ │ ├── ZipUtil.java │ │ └── package-info.java │ └── test/ │ ├── java/ │ │ └── cn/ │ │ └── hutool/ │ │ └── core/ │ │ ├── annotation/ │ │ │ ├── AbstractWrappedAnnotationAttributeTest.java │ │ │ ├── AliasAnnotationPostProcessorTest.java │ │ │ ├── AliasLinkAnnotationPostProcessorTest.java │ │ │ ├── AliasedAnnotationAttributeTest.java │ │ │ ├── AnnotationForTest.java │ │ │ ├── AnnotationUtilTest.java │ │ │ ├── CacheableAnnotationAttributeTest.java │ │ │ ├── CacheableSynthesizedAnnotationAttributeProcessorTest.java │ │ │ ├── ForceAliasedAnnotationAttributeTest.java │ │ │ ├── GenericSynthesizedAggregateAnnotationTest.java │ │ │ ├── MirrorLinkAnnotationPostProcessorTest.java │ │ │ ├── MirroredAnnotationAttributeTest.java │ │ │ ├── RepeatAnnotationForTest.java │ │ │ ├── SynthesizedAnnotationSelectorTest.java │ │ │ ├── TestIssueI8CLBJ.java │ │ │ └── scanner/ │ │ │ ├── AnnotationForScannerTest.java │ │ │ ├── ElementAnnotationScannerTest.java │ │ │ ├── FieldAnnotationScannerTest.java │ │ │ ├── GenericAnnotationScannerTest.java │ │ │ ├── MateAnnotationScannerTest.java │ │ │ ├── MethodAnnotationScannerTest.java │ │ │ └── TypeAnnotationScannerTest.java │ │ ├── bean/ │ │ │ ├── BeanCopyMappingTest.java │ │ │ ├── BeanDescTest.java │ │ │ ├── BeanPathTest.java │ │ │ ├── BeanUtilTest.java │ │ │ ├── DynaBeanTest.java │ │ │ ├── Issue1687Test.java │ │ │ ├── Issue2009Test.java │ │ │ ├── Issue2082Test.java │ │ │ ├── Issue2202Test.java │ │ │ ├── Issue2697Test.java │ │ │ ├── Issue3091Test.java │ │ │ ├── Issue3452Test.java │ │ │ ├── Issue3497Test.java │ │ │ ├── Issue3645Test.java │ │ │ ├── Issue3702Test.java │ │ │ ├── IssueI80FP4Test.java │ │ │ ├── IssueI8JASOTest.java │ │ │ ├── IssueIAYGT0Test.java │ │ │ ├── IssueIBLTZWTest.java │ │ │ ├── IssueICHM3OTest.java │ │ │ └── copier/ │ │ │ ├── BeanCopierTest.java │ │ │ └── Issue2718Test.java │ │ ├── builder/ │ │ │ └── GenericBuilderTest.java │ │ ├── clone/ │ │ │ ├── CloneTest.java │ │ │ └── DefaultCloneTest.java │ │ ├── codec/ │ │ │ ├── BCDTest.java │ │ │ ├── Base32Test.java │ │ │ ├── Base58Test.java │ │ │ ├── Base62Test.java │ │ │ ├── Base64Test.java │ │ │ ├── CaesarTest.java │ │ │ ├── HashidsTest.java │ │ │ ├── MorseTest.java │ │ │ ├── PunyCodeTest.java │ │ │ └── RotTest.java │ │ ├── collection/ │ │ │ ├── CollStreamUtilTest.java │ │ │ ├── CollUtilTest.java │ │ │ ├── FilterIterTest.java │ │ │ ├── IterUtilTest.java │ │ │ ├── ListUtilTest.java │ │ │ ├── MapProxyTest.java │ │ │ ├── PartitionIterTest.java │ │ │ ├── RingIndexUtilTest.java │ │ │ └── UniqueKeySetTest.java │ │ ├── comparator/ │ │ │ ├── ArrayIndexedComparator.java │ │ │ ├── CompareUtilTest.java │ │ │ ├── IndexedComparatorTest.java │ │ │ ├── Issue3259Test.java │ │ │ ├── PropertyComparatorTest.java │ │ │ ├── VersionComparatorTest.java │ │ │ └── WindowsExplorerStringComparatorTest.java │ │ ├── compiler/ │ │ │ └── JavaSourceCompilerTest.java │ │ ├── compress/ │ │ │ ├── IssueI5DRU0Test.java │ │ │ ├── IssueIAGYDGTest.java │ │ │ ├── ZipReaderTest.java │ │ │ └── ZipWriterTest.java │ │ ├── convert/ │ │ │ ├── CastUtilTest.java │ │ │ ├── ConvertOtherTest.java │ │ │ ├── ConvertTest.java │ │ │ ├── ConvertToArrayTest.java │ │ │ ├── ConvertToBeanTest.java │ │ │ ├── ConvertToBooleanTest.java │ │ │ ├── ConvertToCollectionTest.java │ │ │ ├── ConvertToNumberTest.java │ │ │ ├── ConvertToSBCAndDBCTest.java │ │ │ ├── ConverterRegistryTest.java │ │ │ ├── DateConvertTest.java │ │ │ ├── EnumConvertTest.java │ │ │ ├── Issue2611Test.java │ │ │ ├── Issue3241Test.java │ │ │ ├── IssueI7WJHHTest.java │ │ │ ├── IssueIALV38Test.java │ │ │ ├── MapConvertTest.java │ │ │ ├── NumberChineseFormatterTest.java │ │ │ ├── NumberConverterTest.java │ │ │ ├── NumberWordFormatTest.java │ │ │ ├── NumberWordFormatterTest.java │ │ │ ├── PrimitiveConvertTest.java │ │ │ ├── StringConvertTest.java │ │ │ ├── TemporalAccessorConverterTest.java │ │ │ └── ToBytesTest.java │ │ ├── date/ │ │ │ ├── BetweenFormatterTest.java │ │ │ ├── CalendarUtilTest.java │ │ │ ├── ChineseDateTest.java │ │ │ ├── DateBetweenTest.java │ │ │ ├── DateFieldTest.java │ │ │ ├── DateModifierTest.java │ │ │ ├── DateRangeTest.java │ │ │ ├── DateTimeTest.java │ │ │ ├── DateUtilTest.java │ │ │ ├── FastDateFormatTest.java │ │ │ ├── GanzhiTest.java │ │ │ ├── Issue2612Test.java │ │ │ ├── Issue2981Test.java │ │ │ ├── Issue3011Test.java │ │ │ ├── Issue3036Test.java │ │ │ ├── Issue3301Test.java │ │ │ ├── Issue3348Test.java │ │ │ ├── Issue3608Test.java │ │ │ ├── Issue3798Test.java │ │ │ ├── IssueI7QI6RTest.java │ │ │ ├── IssueI7XMYWTest.java │ │ │ ├── IssueI82Y1LTest.java │ │ │ ├── IssueI97WU6Test.java │ │ │ ├── IssueI9C2D4Test.java │ │ │ ├── IssueIB8OFSTest.java │ │ │ ├── IssueIB9NPUTest.java │ │ │ ├── IssueIBB6I5Test.java │ │ │ ├── IssueIC00HGTest.java │ │ │ ├── IssueIDFMXJTest.java │ │ │ ├── LocalDateTimeUtilTest.java │ │ │ ├── MonthTest.java │ │ │ ├── QuarterTest.java │ │ │ ├── TemporalAccessorUtilTest.java │ │ │ ├── TimeIntervalTest.java │ │ │ ├── TimeZoneTest.java │ │ │ ├── WeekTest.java │ │ │ ├── YearQuarterTest.java │ │ │ ├── ZodiacTest.java │ │ │ ├── ZoneUtilTest.java │ │ │ └── chinese/ │ │ │ ├── IssueI5YB1ATest.java │ │ │ ├── IssueICL1BTTest.java │ │ │ └── SolarTermsTest.java │ │ ├── exceptions/ │ │ │ ├── CheckedUtilTest.java │ │ │ └── ExceptionUtilTest.java │ │ ├── img/ │ │ │ ├── FontUtilTest.java │ │ │ ├── ImgTest.java │ │ │ ├── ImgUtilTest.java │ │ │ ├── Issue2735Test.java │ │ │ └── IssueI8L8UATest.java │ │ ├── io/ │ │ │ ├── BufferUtilTest.java │ │ │ ├── CharsetDetectorTest.java │ │ │ ├── ClassPathResourceTest.java │ │ │ ├── FileCopierTest.java │ │ │ ├── FileReaderTest.java │ │ │ ├── FileTypeUtilTest.java │ │ │ ├── FileUtilTest.java │ │ │ ├── IoUtilTest.java │ │ │ ├── Issue3846Test.java │ │ │ ├── ManifestUtilTest.java │ │ │ ├── WatchMonitorTest.java │ │ │ ├── checksum/ │ │ │ │ ├── CRC16Test.java │ │ │ │ └── CrcTest.java │ │ │ ├── file/ │ │ │ │ ├── FileNameUtilTest.java │ │ │ │ ├── FileSystemUtilTest.java │ │ │ │ ├── FileWriterTest.java │ │ │ │ ├── Issue3557Test.java │ │ │ │ ├── IssueIAB65VTest.java │ │ │ │ ├── PathUtilTest.java │ │ │ │ └── TailerTest.java │ │ │ ├── resource/ │ │ │ │ └── ResourceUtilTest.java │ │ │ └── unit/ │ │ │ └── DataSizeUtilTest.java │ │ ├── lang/ │ │ │ ├── AssertTest.java │ │ │ ├── ClassScanerTest.java │ │ │ ├── ConsoleTableTest.java │ │ │ ├── ConsoleTest.java │ │ │ ├── DictTest.java │ │ │ ├── IssueIAOGDRTest.java │ │ │ ├── NanoIdTest.java │ │ │ ├── ObjectIdTest.java │ │ │ ├── OptTest.java │ │ │ ├── RangeTest.java │ │ │ ├── SimhashTest.java │ │ │ ├── SimpleCacheTest.java │ │ │ ├── SingletonTest.java │ │ │ ├── SnowflakeTest.java │ │ │ ├── StrFormatterTest.java │ │ │ ├── TupleTest.java │ │ │ ├── UUIDTest.java │ │ │ ├── ValidatorTest.java │ │ │ ├── WeightListRandomTest.java │ │ │ ├── WeightRandomTest.java │ │ │ ├── ansi/ │ │ │ │ └── AnsiEncoderTest.java │ │ │ ├── caller/ │ │ │ │ ├── CallerTest.java │ │ │ │ └── CallerUtilTest.java │ │ │ ├── func/ │ │ │ │ └── LambdaUtilTest.java │ │ │ ├── hash/ │ │ │ │ ├── CityHashTest.java │ │ │ │ ├── MetroHashTest.java │ │ │ │ └── MurmurHashTest.java │ │ │ ├── intern/ │ │ │ │ └── InternUtilTest.java │ │ │ ├── loader/ │ │ │ │ └── LazyFunLoaderTest.java │ │ │ ├── reflect/ │ │ │ │ ├── ActualTypeMapperPoolTest.java │ │ │ │ └── MethodHandleUtilTest.java │ │ │ ├── test/ │ │ │ │ └── bean/ │ │ │ │ ├── ExamInfoDict.java │ │ │ │ ├── UserInfoDict.java │ │ │ │ └── UserInfoRedundCount.java │ │ │ └── tree/ │ │ │ ├── Issue2279Test.java │ │ │ ├── IssueI795INTest.java │ │ │ ├── IssueI9PDVFTest.java │ │ │ ├── IssueIAUSHRTest.java │ │ │ ├── Issues2538Test.java │ │ │ ├── TreeBuilderTest.java │ │ │ ├── TreeSearchTest.java │ │ │ └── TreeTest.java │ │ ├── map/ │ │ │ ├── BiMapTest.java │ │ │ ├── CamelCaseMapTest.java │ │ │ ├── CaseInsensitiveMapTest.java │ │ │ ├── CollValueMapTest.java │ │ │ ├── FuncMapTest.java │ │ │ ├── IssueI88R5MTest.java │ │ │ ├── LinkedForestMapTest.java │ │ │ ├── MapBuilderTest.java │ │ │ ├── MapUtilTest.java │ │ │ ├── RowKeyTableTest.java │ │ │ ├── TableMapTest.java │ │ │ ├── TolerantMapTest.java │ │ │ └── WeakConcurrentMapTest.java │ │ ├── math/ │ │ │ ├── ArrangementTest.java │ │ │ ├── CalculatorTest.java │ │ │ ├── CombinationTest.java │ │ │ └── MoneyTest.java │ │ ├── net/ │ │ │ ├── FormUrlencodedTest.java │ │ │ ├── Ipv4UtilTest.java │ │ │ ├── IssueI70UPUTest.java │ │ │ ├── NetUtilTest.java │ │ │ ├── RFC3986Test.java │ │ │ ├── UrlBuilderTest.java │ │ │ ├── UrlDecoderTest.java │ │ │ └── UrlQueryTest.java │ │ ├── stream/ │ │ │ ├── CollectorUtilTest.java │ │ │ └── StreamUtilTest.java │ │ ├── swing/ │ │ │ ├── ClipboardMonitorTest.java │ │ │ ├── ClipboardUtilTest.java │ │ │ ├── DesktopUtilTest.java │ │ │ └── RobotUtilTest.java │ │ ├── text/ │ │ │ ├── AntPathMatcherTest.java │ │ │ ├── CharSequenceUtilTest.java │ │ │ ├── IssueI96LWHTest.java │ │ │ ├── NamingCaseTest.java │ │ │ ├── PasswdStrengthTest.java │ │ │ ├── StrBuilderTest.java │ │ │ ├── StrJoinerTest.java │ │ │ ├── StrMatcherTest.java │ │ │ ├── TextSimilarityTest.java │ │ │ ├── UnicodeUtilTest.java │ │ │ ├── csv/ │ │ │ │ ├── CsvParserTest.java │ │ │ │ ├── CsvReaderTest.java │ │ │ │ ├── CsvUtilTest.java │ │ │ │ ├── CsvWriterTest.java │ │ │ │ ├── Issue3705Test.java │ │ │ │ ├── IssueI91VF1Test.java │ │ │ │ ├── IssueIA8WE0Test.java │ │ │ │ ├── IssueIB5UQ8Test.java │ │ │ │ ├── IssueICRMKATest.java │ │ │ │ └── Pr1244Test.java │ │ │ ├── finder/ │ │ │ │ └── CharFinderTest.java │ │ │ └── split/ │ │ │ ├── SplitIterTest.java │ │ │ └── StrSplitterTest.java │ │ ├── thread/ │ │ │ ├── AsyncUtilTest.java │ │ │ ├── ConcurrencyTesterTest.java │ │ │ ├── ExecutorBuilderTest.java │ │ │ ├── RecyclableBatchThreadPoolExecutorTest.java │ │ │ ├── SegmentLockTest.java │ │ │ ├── SyncFinisherTest.java │ │ │ └── ThreadUtilTest.java │ │ └── util/ │ │ ├── ArrayUtilTest.java │ │ ├── BooleanUtilTest.java │ │ ├── ByteUtilTest.java │ │ ├── CharUtilTest.java │ │ ├── ClassLoaderUtilTest.java │ │ ├── ClassUtilTest.java │ │ ├── CoordinateUtilTest.java │ │ ├── CreditCodeUtilTest.java │ │ ├── DesensitizedUtilTest.java │ │ ├── EnumUtilTest.java │ │ ├── EscapeUtilTest.java │ │ ├── HashUtilTest.java │ │ ├── HexUtilTest.java │ │ ├── IdUtilTest.java │ │ ├── IdcardUtilTest.java │ │ ├── Issue3136Test.java │ │ ├── Issue3423Test.java │ │ ├── Issue3516Test.java │ │ ├── Issue3660Test.java │ │ ├── Issue3809Test.java │ │ ├── IssueI7CRIWTest.java │ │ ├── IssueI9IDAGTest.java │ │ ├── IssueI9K494Test.java │ │ ├── IssueI9NSZ4Test.java │ │ ├── IssueI9UK5VTest.java │ │ ├── IssueIAQ16ETest.java │ │ ├── IssueIB95X4Test.java │ │ ├── IssueIBP6T1Test.java │ │ ├── IssueICA9S5Test.java │ │ ├── IssueICOJVZTest.java │ │ ├── JAXBUtilTest.java │ │ ├── JNDIUtilTest.java │ │ ├── ModifierUtilTest.java │ │ ├── NumberUtilTest.java │ │ ├── ObjectUtilTest.java │ │ ├── PageUtilTest.java │ │ ├── PhoneUtilTest.java │ │ ├── RadixUtilTest.java │ │ ├── RandomUtilTest.java │ │ ├── ReUtilTest.java │ │ ├── ReferenceUtilTest.java │ │ ├── ReflectUtilTest.java │ │ ├── RuntimeUtilTest.java │ │ ├── StrUtilTest.java │ │ ├── TypeUtilTest.java │ │ ├── URLUtilTest.java │ │ ├── VersionUtilTest.java │ │ ├── XmlUtilTest.java │ │ └── ZipUtilTest.java │ └── resources/ │ ├── 1_psi_index_0.txt │ ├── issueI91VF1.csv │ ├── issueIA8WE0.csv │ ├── issueICRMKA.csv │ ├── test-compile/ │ │ ├── a/ │ │ │ └── A.java │ │ ├── b/ │ │ │ └── B.java │ │ ├── c/ │ │ │ └── C.java │ │ └── error/ │ │ └── ErrorClazz.java │ ├── test-zip/ │ │ ├── addFile.txt │ │ └── test-add/ │ │ └── test.txt │ ├── test.csv │ ├── test.properties │ ├── test.xml │ ├── test_bean.csv │ ├── test_lines.csv │ ├── test_lines_cr.csv │ ├── test_lines_crlf.csv │ └── text.txt ├── hutool-cron/ │ ├── pom.xml │ └── src/ │ ├── main/ │ │ └── java/ │ │ └── cn/ │ │ └── hutool/ │ │ └── cron/ │ │ ├── CronConfig.java │ │ ├── CronException.java │ │ ├── CronTimer.java │ │ ├── CronUtil.java │ │ ├── Scheduler.java │ │ ├── TaskExecutor.java │ │ ├── TaskExecutorManager.java │ │ ├── TaskLauncher.java │ │ ├── TaskLauncherManager.java │ │ ├── TaskTable.java │ │ ├── listener/ │ │ │ ├── SimpleTaskListener.java │ │ │ ├── TaskListener.java │ │ │ ├── TaskListenerManager.java │ │ │ └── package-info.java │ │ ├── package-info.java │ │ ├── pattern/ │ │ │ ├── CronPattern.java │ │ │ ├── CronPatternBuilder.java │ │ │ ├── CronPatternUtil.java │ │ │ ├── Part.java │ │ │ ├── PatternUtil.java │ │ │ ├── matcher/ │ │ │ │ ├── AlwaysTrueMatcher.java │ │ │ │ ├── BoolArrayMatcher.java │ │ │ │ ├── DayOfMonthMatcher.java │ │ │ │ ├── PartMatcher.java │ │ │ │ ├── PatternMatcher.java │ │ │ │ ├── YearValueMatcher.java │ │ │ │ └── package-info.java │ │ │ ├── package-info.java │ │ │ └── parser/ │ │ │ ├── PartParser.java │ │ │ ├── PatternParser.java │ │ │ └── package-info.java │ │ ├── task/ │ │ │ ├── CronTask.java │ │ │ ├── InvokeTask.java │ │ │ ├── RunnableTask.java │ │ │ ├── Task.java │ │ │ └── package-info.java │ │ └── timingwheel/ │ │ ├── SystemTimer.java │ │ ├── TimerTask.java │ │ ├── TimerTaskList.java │ │ ├── TimingWheel.java │ │ └── package-info.java │ └── test/ │ ├── java/ │ │ └── cn/ │ │ └── hutool/ │ │ └── cron/ │ │ ├── TaskTableTest.java │ │ ├── demo/ │ │ │ ├── AddAndRemoveMainTest.java │ │ │ ├── CronTest.java │ │ │ ├── DeamonMainTest.java │ │ │ ├── JobMainTest.java │ │ │ ├── TestJob.java │ │ │ └── TestJob2.java │ │ ├── pattern/ │ │ │ ├── CronPatternBuilderTest.java │ │ │ ├── CronPatternNextMatchTest.java │ │ │ ├── CronPatternTest.java │ │ │ ├── CronPatternUtilTest.java │ │ │ ├── Issue3685Test.java │ │ │ ├── Issue4006Test.java │ │ │ ├── Issue4056Test.java │ │ │ ├── IssueI7SMP7Test.java │ │ │ ├── IssueI82CSHTest.java │ │ │ └── IssueI9FQUATest.java │ │ └── timingwheel/ │ │ └── Issue3090Test.java │ └── resources/ │ └── config/ │ └── cron.setting ├── hutool-crypto/ │ ├── pom.xml │ └── src/ │ ├── main/ │ │ └── java/ │ │ └── cn/ │ │ └── hutool/ │ │ └── crypto/ │ │ ├── ASN1Util.java │ │ ├── BCUtil.java │ │ ├── CipherMode.java │ │ ├── CipherWrapper.java │ │ ├── CryptoException.java │ │ ├── ECKeyUtil.java │ │ ├── GlobalBouncyCastleProvider.java │ │ ├── KeyUtil.java │ │ ├── Mode.java │ │ ├── OpensslKeyUtil.java │ │ ├── Padding.java │ │ ├── PemUtil.java │ │ ├── ProviderFactory.java │ │ ├── SecureUtil.java │ │ ├── SignUtil.java │ │ ├── SmUtil.java │ │ ├── SpecUtil.java │ │ ├── asymmetric/ │ │ │ ├── AbstractAsymmetricCrypto.java │ │ │ ├── AsymmetricAlgorithm.java │ │ │ ├── AsymmetricCrypto.java │ │ │ ├── AsymmetricDecryptor.java │ │ │ ├── AsymmetricEncryptor.java │ │ │ ├── BaseAsymmetric.java │ │ │ ├── ECIES.java │ │ │ ├── KeyType.java │ │ │ ├── RSA.java │ │ │ ├── SM2.java │ │ │ ├── Sign.java │ │ │ ├── SignAlgorithm.java │ │ │ └── package-info.java │ │ ├── digest/ │ │ │ ├── Argon2.java │ │ │ ├── BCrypt.java │ │ │ ├── DigestAlgorithm.java │ │ │ ├── DigestUtil.java │ │ │ ├── Digester.java │ │ │ ├── DigesterFactory.java │ │ │ ├── HMac.java │ │ │ ├── HmacAlgorithm.java │ │ │ ├── MD5.java │ │ │ ├── SM3.java │ │ │ ├── mac/ │ │ │ │ ├── BCHMacEngine.java │ │ │ │ ├── BCMacEngine.java │ │ │ │ ├── CBCBlockCipherMacEngine.java │ │ │ │ ├── DefaultHMacEngine.java │ │ │ │ ├── Mac.java │ │ │ │ ├── MacEngine.java │ │ │ │ ├── MacEngineFactory.java │ │ │ │ ├── SM4MacEngine.java │ │ │ │ └── package-info.java │ │ │ ├── otp/ │ │ │ │ ├── HOTP.java │ │ │ │ ├── TOTP.java │ │ │ │ └── package-info.java │ │ │ └── package-info.java │ │ ├── package-info.java │ │ └── symmetric/ │ │ ├── AES.java │ │ ├── ChaCha20.java │ │ ├── DES.java │ │ ├── DESede.java │ │ ├── PBKDF2.java │ │ ├── RC4.java │ │ ├── SM4.java │ │ ├── SymmetricAlgorithm.java │ │ ├── SymmetricCrypto.java │ │ ├── SymmetricDecryptor.java │ │ ├── SymmetricEncryptor.java │ │ ├── Vigenere.java │ │ ├── XXTEA.java │ │ ├── ZUC.java │ │ ├── fpe/ │ │ │ └── FPE.java │ │ └── package-info.java │ └── test/ │ ├── java/ │ │ └── cn/ │ │ └── hutool/ │ │ └── crypto/ │ │ ├── BCUtilTest.java │ │ ├── Issue3512Test.java │ │ ├── KeyUtilTest.java │ │ ├── OpensslKeyUtilTest.java │ │ ├── PemUtilTest.java │ │ ├── SecureUtilTest.java │ │ ├── SmTest.java │ │ ├── asymmetric/ │ │ │ ├── ECIESTest.java │ │ │ ├── Issue3925Test.java │ │ │ ├── IssueI6OQJATest.java │ │ │ ├── IssueID1EIKTest.java │ │ │ ├── RSATest.java │ │ │ ├── SM2Test.java │ │ │ └── SignTest.java │ │ ├── digest/ │ │ │ ├── Argon2Test.java │ │ │ ├── BCryptTest.java │ │ │ ├── CBCBlockCipherMacEngineTest.java │ │ │ ├── DigestTest.java │ │ │ ├── HmacTest.java │ │ │ ├── Md5Test.java │ │ │ └── OTPTest.java │ │ └── symmetric/ │ │ ├── AESTest.java │ │ ├── ChaCha20Test.java │ │ ├── DesTest.java │ │ ├── PBKDF2Test.java │ │ ├── RC4Test.java │ │ ├── Sm4StreamTest.java │ │ ├── SymmetricTest.java │ │ ├── TEATest.java │ │ ├── ZucTest.java │ │ └── fpe/ │ │ └── FPETest.java │ └── resources/ │ ├── asn1.key │ ├── test_ec_certificate.cer │ ├── test_ec_certificate_request.csr │ ├── test_ec_encrypted_private_key.key │ ├── test_ec_pkcs8_private_key.key │ ├── test_ec_public_key.pem │ ├── test_ec_sec1_private_key.pem │ ├── test_private_key.pem │ └── test_public_key.csr ├── hutool-db/ │ ├── pom.xml │ └── src/ │ ├── main/ │ │ └── java/ │ │ └── cn/ │ │ └── hutool/ │ │ └── db/ │ │ ├── AbstractDb.java │ │ ├── ActiveEntity.java │ │ ├── DaoTemplate.java │ │ ├── Db.java │ │ ├── DbRuntimeException.java │ │ ├── DbUtil.java │ │ ├── DialectRunner.java │ │ ├── Entity.java │ │ ├── GlobalDbConfig.java │ │ ├── Page.java │ │ ├── PageResult.java │ │ ├── Session.java │ │ ├── SqlConnRunner.java │ │ ├── StatementUtil.java │ │ ├── ThreadLocalConnection.java │ │ ├── dialect/ │ │ │ ├── Dialect.java │ │ │ ├── DialectFactory.java │ │ │ ├── DialectName.java │ │ │ ├── DriverNamePool.java │ │ │ ├── DriverUtil.java │ │ │ ├── impl/ │ │ │ │ ├── AnsiSqlDialect.java │ │ │ │ ├── DmDialect.java │ │ │ │ ├── H2Dialect.java │ │ │ │ ├── HanaDialect.java │ │ │ │ ├── MysqlDialect.java │ │ │ │ ├── OracleDialect.java │ │ │ │ ├── PhoenixDialect.java │ │ │ │ ├── PostgresqlDialect.java │ │ │ │ ├── SqlServer2012Dialect.java │ │ │ │ ├── Sqlite3Dialect.java │ │ │ │ └── package-info.java │ │ │ └── package-info.java │ │ ├── ds/ │ │ │ ├── AbstractDSFactory.java │ │ │ ├── DSFactory.java │ │ │ ├── DataSourceWrapper.java │ │ │ ├── GlobalDSFactory.java │ │ │ ├── bee/ │ │ │ │ ├── BeeDSFactory.java │ │ │ │ └── package-info.java │ │ │ ├── c3p0/ │ │ │ │ ├── C3p0DSFactory.java │ │ │ │ └── package-info.java │ │ │ ├── dbcp/ │ │ │ │ ├── DbcpDSFactory.java │ │ │ │ └── package-info.java │ │ │ ├── druid/ │ │ │ │ ├── DruidDSFactory.java │ │ │ │ └── package-info.java │ │ │ ├── hikari/ │ │ │ │ ├── HikariDSFactory.java │ │ │ │ └── package-info.java │ │ │ ├── jndi/ │ │ │ │ ├── JndiDSFactory.java │ │ │ │ └── package-info.java │ │ │ ├── package-info.java │ │ │ ├── pooled/ │ │ │ │ ├── ConnectionWraper.java │ │ │ │ ├── DbConfig.java │ │ │ │ ├── DbSetting.java │ │ │ │ ├── PooledConnection.java │ │ │ │ ├── PooledDSFactory.java │ │ │ │ ├── PooledDataSource.java │ │ │ │ └── package-info.java │ │ │ ├── simple/ │ │ │ │ ├── AbstractDataSource.java │ │ │ │ ├── SimpleDSFactory.java │ │ │ │ ├── SimpleDataSource.java │ │ │ │ └── package-info.java │ │ │ └── tomcat/ │ │ │ ├── TomcatDSFactory.java │ │ │ └── package-info.java │ │ ├── handler/ │ │ │ ├── BeanHandler.java │ │ │ ├── BeanListHandler.java │ │ │ ├── EntityHandler.java │ │ │ ├── EntityListHandler.java │ │ │ ├── EntitySetHandler.java │ │ │ ├── HandleHelper.java │ │ │ ├── NumberHandler.java │ │ │ ├── PageResultHandler.java │ │ │ ├── RsHandler.java │ │ │ ├── StringHandler.java │ │ │ ├── ValueListHandler.java │ │ │ └── package-info.java │ │ ├── meta/ │ │ │ ├── Column.java │ │ │ ├── ColumnIndexInfo.java │ │ │ ├── IndexInfo.java │ │ │ ├── JdbcType.java │ │ │ ├── MetaUtil.java │ │ │ ├── Table.java │ │ │ ├── TableType.java │ │ │ └── package-info.java │ │ ├── nosql/ │ │ │ ├── mongo/ │ │ │ │ ├── MongoDS.java │ │ │ │ ├── MongoFactory.java │ │ │ │ └── package-info.java │ │ │ ├── package-info.java │ │ │ └── redis/ │ │ │ ├── RedisDS.java │ │ │ └── package-info.java │ │ ├── package-info.java │ │ ├── sql/ │ │ │ ├── Condition.java │ │ │ ├── ConditionBuilder.java │ │ │ ├── ConditionGroup.java │ │ │ ├── Direction.java │ │ │ ├── LogicalOperator.java │ │ │ ├── NamedSql.java │ │ │ ├── Order.java │ │ │ ├── Query.java │ │ │ ├── SqlBuilder.java │ │ │ ├── SqlExecutor.java │ │ │ ├── SqlFormatter.java │ │ │ ├── SqlLog.java │ │ │ ├── SqlUtil.java │ │ │ ├── StatementWrapper.java │ │ │ ├── Wrapper.java │ │ │ └── package-info.java │ │ └── transaction/ │ │ ├── TransactionLevel.java │ │ └── package-info.java │ └── test/ │ ├── java/ │ │ └── cn/ │ │ └── hutool/ │ │ └── db/ │ │ ├── CRUDTest.java │ │ ├── ConcurentTest.java │ │ ├── DbTest.java │ │ ├── DerbyTest.java │ │ ├── DmTest.java │ │ ├── DsTest.java │ │ ├── EntityTest.java │ │ ├── FindBeanTest.java │ │ ├── GlobalDbConfigTest.java │ │ ├── H2Test.java │ │ ├── HanaTest.java │ │ ├── HsqldbTest.java │ │ ├── IssueI73770Test.java │ │ ├── IssueI9BANETest.java │ │ ├── MySQLTest.java │ │ ├── NamedSqlTest.java │ │ ├── OracleTest.java │ │ ├── PageResultTest.java │ │ ├── PageTest.java │ │ ├── PicTransferTest.java │ │ ├── PostgreTest.java │ │ ├── SessionTest.java │ │ ├── SqlServerTest.java │ │ ├── UpdateTest.java │ │ ├── WrapperTest.java │ │ ├── dialect/ │ │ │ ├── DialectFactoryTest.java │ │ │ └── DriverUtilTest.java │ │ ├── ds/ │ │ │ ├── DataSourceWrapperTest.java │ │ │ └── IssueI70J95Test.java │ │ ├── meta/ │ │ │ └── MetaUtilTest.java │ │ ├── nosql/ │ │ │ ├── MongoDBTest.java │ │ │ └── RedisDSTest.java │ │ ├── pojo/ │ │ │ └── User.java │ │ └── sql/ │ │ ├── ConditionBuilderTest.java │ │ ├── ConditionGroupTest.java │ │ ├── ConditionTest.java │ │ ├── Issue4066Test.java │ │ ├── Issue4200Test.java │ │ ├── SqlBuilderTest.java │ │ └── SqlFormatterTest.java │ └── resources/ │ ├── config/ │ │ ├── db.setting │ │ ├── example/ │ │ │ ├── db-example-c3p0.setting │ │ │ ├── db-example-dbcp.setting │ │ │ ├── db-example-druid.setting │ │ │ ├── db-example-hikari.setting │ │ │ ├── db-example-tomcat.setting │ │ │ └── mongo-example.setting │ │ ├── mongo.setting │ │ └── redis.setting │ ├── logback.xml │ └── simplelogger.properties ├── hutool-dfa/ │ ├── pom.xml │ └── src/ │ ├── main/ │ │ └── java/ │ │ └── cn/ │ │ └── hutool/ │ │ └── dfa/ │ │ ├── FoundWord.java │ │ ├── SensitiveProcessor.java │ │ ├── SensitiveUtil.java │ │ ├── StopChar.java │ │ ├── WordTree.java │ │ └── package-info.java │ └── test/ │ └── java/ │ └── cn/ │ └── hutool/ │ └── dfa/ │ ├── DfaTest.java │ └── SensitiveUtilTest.java ├── hutool-extra/ │ ├── pom.xml │ └── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── hutool/ │ │ │ └── extra/ │ │ │ ├── cglib/ │ │ │ │ ├── BeanCopierCache.java │ │ │ │ ├── CglibUtil.java │ │ │ │ └── package-info.java │ │ │ ├── compress/ │ │ │ │ ├── CompressException.java │ │ │ │ ├── CompressUtil.java │ │ │ │ ├── archiver/ │ │ │ │ │ ├── Archiver.java │ │ │ │ │ ├── SevenZArchiver.java │ │ │ │ │ ├── StreamArchiver.java │ │ │ │ │ └── package-info.java │ │ │ │ ├── extractor/ │ │ │ │ │ ├── Extractor.java │ │ │ │ │ ├── Seven7EntryInputStream.java │ │ │ │ │ ├── SevenZExtractor.java │ │ │ │ │ ├── StreamExtractor.java │ │ │ │ │ └── package-info.java │ │ │ │ └── package-info.java │ │ │ ├── emoji/ │ │ │ │ ├── EmojiUtil.java │ │ │ │ └── package-info.java │ │ │ ├── expression/ │ │ │ │ ├── ExpressionEngine.java │ │ │ │ ├── ExpressionException.java │ │ │ │ ├── ExpressionUtil.java │ │ │ │ ├── engine/ │ │ │ │ │ ├── ExpressionFactory.java │ │ │ │ │ ├── aviator/ │ │ │ │ │ │ ├── AviatorEngine.java │ │ │ │ │ │ └── package-info.java │ │ │ │ │ ├── jexl/ │ │ │ │ │ │ ├── JexlEngine.java │ │ │ │ │ │ └── package-info.java │ │ │ │ │ ├── jfireel/ │ │ │ │ │ │ ├── JfireELEngine.java │ │ │ │ │ │ └── package-info.java │ │ │ │ │ ├── mvel/ │ │ │ │ │ │ ├── MvelEngine.java │ │ │ │ │ │ └── package-info.java │ │ │ │ │ ├── package-info.java │ │ │ │ │ ├── qlexpress/ │ │ │ │ │ │ ├── QLExpressEngine.java │ │ │ │ │ │ └── package-info.java │ │ │ │ │ ├── rhino/ │ │ │ │ │ │ ├── RhinoEngine.java │ │ │ │ │ │ └── package-info.java │ │ │ │ │ └── spel/ │ │ │ │ │ ├── SpELEngine.java │ │ │ │ │ └── package-info.java │ │ │ │ └── package-info.java │ │ │ ├── ftp/ │ │ │ │ ├── AbstractFtp.java │ │ │ │ ├── Ftp.java │ │ │ │ ├── FtpConfig.java │ │ │ │ ├── FtpException.java │ │ │ │ ├── FtpMode.java │ │ │ │ ├── SimpleFtpServer.java │ │ │ │ └── package-info.java │ │ │ ├── mail/ │ │ │ │ ├── GlobalMailAccount.java │ │ │ │ ├── InternalMailUtil.java │ │ │ │ ├── JakartaInternalMailUtil.java │ │ │ │ ├── JakartaMail.java │ │ │ │ ├── JakartaMailUtil.java │ │ │ │ ├── JakartaUserPassAuthenticator.java │ │ │ │ ├── Mail.java │ │ │ │ ├── MailAccount.java │ │ │ │ ├── MailException.java │ │ │ │ ├── MailUtil.java │ │ │ │ ├── UserPassAuthenticator.java │ │ │ │ └── package-info.java │ │ │ ├── package-info.java │ │ │ ├── pinyin/ │ │ │ │ ├── PinyinEngine.java │ │ │ │ ├── PinyinException.java │ │ │ │ ├── PinyinUtil.java │ │ │ │ ├── engine/ │ │ │ │ │ ├── PinyinFactory.java │ │ │ │ │ ├── bopomofo4j/ │ │ │ │ │ │ ├── Bopomofo4jEngine.java │ │ │ │ │ │ └── package-info.java │ │ │ │ │ ├── houbbpinyin/ │ │ │ │ │ │ ├── HoubbPinyinEngine.java │ │ │ │ │ │ └── package-info.java │ │ │ │ │ ├── jpinyin/ │ │ │ │ │ │ ├── JPinyinEngine.java │ │ │ │ │ │ └── package-info.java │ │ │ │ │ ├── package-info.java │ │ │ │ │ ├── pinyin4j/ │ │ │ │ │ │ ├── Pinyin4jEngine.java │ │ │ │ │ │ └── package-info.java │ │ │ │ │ └── tinypinyin/ │ │ │ │ │ ├── TinyPinyinEngine.java │ │ │ │ │ └── package-info.java │ │ │ │ └── package-info.java │ │ │ ├── qrcode/ │ │ │ │ ├── BufferedImageLuminanceSource.java │ │ │ │ ├── QrCodeException.java │ │ │ │ ├── QrCodeUtil.java │ │ │ │ ├── QrConfig.java │ │ │ │ └── package-info.java │ │ │ ├── servlet/ │ │ │ │ ├── JakartaServletUtil.java │ │ │ │ ├── ServletUtil.java │ │ │ │ └── package-info.java │ │ │ ├── spring/ │ │ │ │ ├── EnableSpringUtil.java │ │ │ │ ├── SpringUtil.java │ │ │ │ └── package-info.java │ │ │ ├── ssh/ │ │ │ │ ├── ChannelType.java │ │ │ │ ├── Connector.java │ │ │ │ ├── GanymedUtil.java │ │ │ │ ├── JschRuntimeException.java │ │ │ │ ├── JschSessionPool.java │ │ │ │ ├── JschUtil.java │ │ │ │ ├── Sftp.java │ │ │ │ ├── SshjSftp.java │ │ │ │ └── package-info.java │ │ │ ├── template/ │ │ │ │ ├── AbstractTemplate.java │ │ │ │ ├── Template.java │ │ │ │ ├── TemplateConfig.java │ │ │ │ ├── TemplateEngine.java │ │ │ │ ├── TemplateException.java │ │ │ │ ├── TemplateUtil.java │ │ │ │ ├── engine/ │ │ │ │ │ ├── TemplateFactory.java │ │ │ │ │ ├── beetl/ │ │ │ │ │ │ ├── BeetlEngine.java │ │ │ │ │ │ ├── BeetlTemplate.java │ │ │ │ │ │ └── package-info.java │ │ │ │ │ ├── enjoy/ │ │ │ │ │ │ ├── EnjoyEngine.java │ │ │ │ │ │ ├── EnjoyTemplate.java │ │ │ │ │ │ └── package-info.java │ │ │ │ │ ├── freemarker/ │ │ │ │ │ │ ├── FreemarkerEngine.java │ │ │ │ │ │ ├── FreemarkerTemplate.java │ │ │ │ │ │ ├── SimpleStringTemplateLoader.java │ │ │ │ │ │ └── package-info.java │ │ │ │ │ ├── jetbrick/ │ │ │ │ │ │ ├── JetbrickEngine.java │ │ │ │ │ │ ├── JetbrickTemplate.java │ │ │ │ │ │ ├── loader/ │ │ │ │ │ │ │ ├── StringResourceLoader.java │ │ │ │ │ │ │ └── package-info.java │ │ │ │ │ │ └── package-info.java │ │ │ │ │ ├── package-info.java │ │ │ │ │ ├── rythm/ │ │ │ │ │ │ ├── RythmEngine.java │ │ │ │ │ │ ├── RythmTemplate.java │ │ │ │ │ │ └── package-info.java │ │ │ │ │ ├── thymeleaf/ │ │ │ │ │ │ ├── ThymeleafEngine.java │ │ │ │ │ │ ├── ThymeleafTemplate.java │ │ │ │ │ │ └── package-info.java │ │ │ │ │ ├── velocity/ │ │ │ │ │ │ ├── SimpleStringResourceLoader.java │ │ │ │ │ │ ├── VelocityEngine.java │ │ │ │ │ │ ├── VelocityTemplate.java │ │ │ │ │ │ └── package-info.java │ │ │ │ │ └── wit/ │ │ │ │ │ ├── WitEngine.java │ │ │ │ │ ├── WitTemplate.java │ │ │ │ │ └── package-info.java │ │ │ │ └── package-info.java │ │ │ ├── tokenizer/ │ │ │ │ ├── AbstractResult.java │ │ │ │ ├── Result.java │ │ │ │ ├── TokenizerEngine.java │ │ │ │ ├── TokenizerException.java │ │ │ │ ├── TokenizerUtil.java │ │ │ │ ├── Word.java │ │ │ │ ├── engine/ │ │ │ │ │ ├── TokenizerFactory.java │ │ │ │ │ ├── analysis/ │ │ │ │ │ │ ├── AnalysisEngine.java │ │ │ │ │ │ ├── AnalysisResult.java │ │ │ │ │ │ ├── AnalysisWord.java │ │ │ │ │ │ ├── SmartcnEngine.java │ │ │ │ │ │ └── package-info.java │ │ │ │ │ ├── ansj/ │ │ │ │ │ │ ├── AnsjEngine.java │ │ │ │ │ │ ├── AnsjResult.java │ │ │ │ │ │ ├── AnsjWord.java │ │ │ │ │ │ └── package-info.java │ │ │ │ │ ├── hanlp/ │ │ │ │ │ │ ├── HanLPEngine.java │ │ │ │ │ │ ├── HanLPResult.java │ │ │ │ │ │ ├── HanLPWord.java │ │ │ │ │ │ └── package-info.java │ │ │ │ │ ├── ikanalyzer/ │ │ │ │ │ │ ├── IKAnalyzerEngine.java │ │ │ │ │ │ ├── IKAnalyzerResult.java │ │ │ │ │ │ ├── IKAnalyzerWord.java │ │ │ │ │ │ └── package-info.java │ │ │ │ │ ├── jcseg/ │ │ │ │ │ │ ├── JcsegEngine.java │ │ │ │ │ │ ├── JcsegResult.java │ │ │ │ │ │ ├── JcsegWord.java │ │ │ │ │ │ └── package-info.java │ │ │ │ │ ├── jieba/ │ │ │ │ │ │ ├── JiebaEngine.java │ │ │ │ │ │ ├── JiebaResult.java │ │ │ │ │ │ ├── JiebaWord.java │ │ │ │ │ │ └── package-info.java │ │ │ │ │ ├── mmseg/ │ │ │ │ │ │ ├── MmsegEngine.java │ │ │ │ │ │ ├── MmsegResult.java │ │ │ │ │ │ ├── MmsegWord.java │ │ │ │ │ │ └── package-info.java │ │ │ │ │ ├── mynlp/ │ │ │ │ │ │ ├── MynlpEngine.java │ │ │ │ │ │ ├── MynlpResult.java │ │ │ │ │ │ ├── MynlpWord.java │ │ │ │ │ │ └── package-info.java │ │ │ │ │ ├── package-info.java │ │ │ │ │ └── word/ │ │ │ │ │ ├── WordEngine.java │ │ │ │ │ ├── WordResult.java │ │ │ │ │ ├── WordWord.java │ │ │ │ │ └── package-info.java │ │ │ │ └── package-info.java │ │ │ └── validation/ │ │ │ ├── BeanValidationResult.java │ │ │ ├── ValidationUtil.java │ │ │ └── package-info.java │ │ └── resources/ │ │ └── META-INF/ │ │ ├── services/ │ │ │ ├── cn.hutool.extra.expression.ExpressionEngine │ │ │ ├── cn.hutool.extra.pinyin.PinyinEngine │ │ │ ├── cn.hutool.extra.template.TemplateEngine │ │ │ └── cn.hutool.extra.tokenizer.TokenizerEngine │ │ ├── spring/ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ └── spring.factories │ └── test/ │ ├── java/ │ │ └── cn/ │ │ └── hutool/ │ │ └── extra/ │ │ ├── cglib/ │ │ │ └── CglibUtilTest.java │ │ ├── compress/ │ │ │ ├── ArchiverTest.java │ │ │ ├── ExtractorTest.java │ │ │ └── IssueI7PMJ0Test.java │ │ ├── emoji/ │ │ │ └── EmojiUtilTest.java │ │ ├── expression/ │ │ │ ├── AviatorTest.java │ │ │ └── ExpressionUtilTest.java │ │ ├── ftp/ │ │ │ ├── FtpTest.java │ │ │ └── SimpleFtpServerTest.java │ │ ├── mail/ │ │ │ ├── JakartaMailTest.java │ │ │ ├── MailAccountTest.java │ │ │ └── MailTest.java │ │ ├── pinyin/ │ │ │ ├── Bopomofo4jTest.java │ │ │ ├── HoubbPinyinTest.java │ │ │ ├── JpinyinTest.java │ │ │ ├── Pinyin4jTest.java │ │ │ ├── PinyinUtilTest.java │ │ │ └── TinyPinyinTest.java │ │ ├── qrcode/ │ │ │ ├── IssueI7RUIVTest.java │ │ │ └── QrCodeUtilTest.java │ │ ├── servlet/ │ │ │ └── ServletUtilTest.java │ │ ├── spring/ │ │ │ ├── EnableSpringUtilTest.java │ │ │ ├── SpringUtilTest.java │ │ │ └── SpringUtilWithAutoConfigTest.java │ │ ├── ssh/ │ │ │ ├── JschUtilTest.java │ │ │ ├── SftpTest.java │ │ │ └── SshjSftpTest.java │ │ ├── template/ │ │ │ ├── Issue3488Test.java │ │ │ ├── JetbrickTest.java │ │ │ ├── TemplateUtilTest.java │ │ │ ├── ThymeleafTest.java │ │ │ └── VelocityTest.java │ │ ├── tokenizer/ │ │ │ └── TokenizerUtilTest.java │ │ └── validation/ │ │ └── BeanValidatorUtilTest.java │ └── resources/ │ ├── beetl.properties │ ├── config/ │ │ └── mail.setting │ ├── example/ │ │ ├── beetl-example.properties │ │ ├── mail-example.setting │ │ └── velocity-example.vm │ └── templates/ │ ├── beetl_test.btl │ ├── enjoy_test.etl │ ├── freemarker_test.ftl │ ├── issue3488.ftl │ ├── jetbrick_test.jetx │ ├── rythm_test.tmpl │ ├── thymeleaf_test.ttl │ ├── velocity_test.vtl │ ├── velocity_test_gbk.vtl │ └── wit_test.wit ├── hutool-http/ │ ├── pom.xml │ └── src/ │ ├── main/ │ │ └── java/ │ │ └── cn/ │ │ └── hutool/ │ │ └── http/ │ │ ├── ContentType.java │ │ ├── GlobalHeaders.java │ │ ├── GlobalInterceptor.java │ │ ├── HTMLFilter.java │ │ ├── Header.java │ │ ├── HtmlUtil.java │ │ ├── HttpBase.java │ │ ├── HttpConfig.java │ │ ├── HttpConnection.java │ │ ├── HttpDownloader.java │ │ ├── HttpException.java │ │ ├── HttpGlobalConfig.java │ │ ├── HttpInputStream.java │ │ ├── HttpInterceptor.java │ │ ├── HttpRequest.java │ │ ├── HttpResource.java │ │ ├── HttpResponse.java │ │ ├── HttpStatus.java │ │ ├── HttpUtil.java │ │ ├── Method.java │ │ ├── MultipartOutputStream.java │ │ ├── Status.java │ │ ├── body/ │ │ │ ├── BytesBody.java │ │ │ ├── FormUrlEncodedBody.java │ │ │ ├── MultipartBody.java │ │ │ ├── RequestBody.java │ │ │ ├── ResourceBody.java │ │ │ └── package-info.java │ │ ├── cookie/ │ │ │ ├── GlobalCookieManager.java │ │ │ ├── ThreadLocalCookieStore.java │ │ │ └── package-info.java │ │ ├── package-info.java │ │ ├── server/ │ │ │ ├── HttpExchangeWrapper.java │ │ │ ├── HttpServerBase.java │ │ │ ├── HttpServerRequest.java │ │ │ ├── HttpServerResponse.java │ │ │ ├── SimpleServer.java │ │ │ ├── action/ │ │ │ │ ├── Action.java │ │ │ │ ├── RootAction.java │ │ │ │ └── package-info.java │ │ │ ├── filter/ │ │ │ │ ├── DefaultExceptionFilter.java │ │ │ │ ├── ExceptionFilter.java │ │ │ │ ├── HttpFilter.java │ │ │ │ ├── SimpleFilter.java │ │ │ │ └── package-info.java │ │ │ ├── handler/ │ │ │ │ ├── ActionHandler.java │ │ │ │ └── package-info.java │ │ │ └── package-info.java │ │ ├── ssl/ │ │ │ ├── AndroidSupportSSLFactory.java │ │ │ ├── CustomProtocolsSSLFactory.java │ │ │ ├── DefaultSSLFactory.java │ │ │ ├── DefaultSSLInfo.java │ │ │ ├── SSLSocketFactoryBuilder.java │ │ │ ├── TrustAnyHostnameVerifier.java │ │ │ └── package-info.java │ │ ├── useragent/ │ │ │ ├── Browser.java │ │ │ ├── Engine.java │ │ │ ├── OS.java │ │ │ ├── Platform.java │ │ │ ├── UserAgent.java │ │ │ ├── UserAgentInfo.java │ │ │ ├── UserAgentParser.java │ │ │ ├── UserAgentUtil.java │ │ │ └── package-info.java │ │ └── webservice/ │ │ ├── JakartaSoapClient.java │ │ ├── JakartaSoapProtocol.java │ │ ├── JakartaSoapUtil.java │ │ ├── SoapClient.java │ │ ├── SoapProtocol.java │ │ ├── SoapRuntimeException.java │ │ ├── SoapUtil.java │ │ └── package-info.java │ └── test/ │ ├── java/ │ │ └── cn/ │ │ └── hutool/ │ │ └── http/ │ │ ├── ContentTypeTest.java │ │ ├── DownloadTest.java │ │ ├── HTMLFilterTest.java │ │ ├── HtmlUtilTest.java │ │ ├── HttpGlobalConfigTest.java │ │ ├── HttpRequestTest.java │ │ ├── HttpUtilTest.java │ │ ├── HttpsTest.java │ │ ├── Issue2658Test.java │ │ ├── Issue3074Test.java │ │ ├── Issue3197Test.java │ │ ├── Issue3314Test.java │ │ ├── Issue3536Test.java │ │ ├── IssueI5TPSYTest.java │ │ ├── IssueI6RE7JTest.java │ │ ├── IssueI7EHSETest.java │ │ ├── IssueI7WZEOTest.java │ │ ├── IssueI7ZRJUTest.java │ │ ├── IssueI8YV0KTest.java │ │ ├── IssueIB7REWTest.java │ │ ├── IssueIBQIYQTest.java │ │ ├── IssueIBRVE4Test.java │ │ ├── RestTest.java │ │ ├── UploadTest.java │ │ ├── body/ │ │ │ └── MultipartBodyTest.java │ │ ├── server/ │ │ │ ├── BlankServerTest.java │ │ │ ├── DocServerTest.java │ │ │ ├── ExceptionServerTest.java │ │ │ ├── Issue3343Test.java │ │ │ ├── Issue3568Test.java │ │ │ ├── Issue3723Test.java │ │ │ ├── RedirectServerTest.java │ │ │ └── SimpleServerTest.java │ │ ├── useragent/ │ │ │ ├── IssueIB3SJFTest.java │ │ │ └── UserAgentUtilTest.java │ │ └── webservice/ │ │ ├── JakartaSoapClientTest.java │ │ └── SoapClientTest.java │ └── resources/ │ └── html/ │ ├── formForUpload.html │ └── index.html ├── hutool-json/ │ ├── pom.xml │ └── src/ │ ├── main/ │ │ └── java/ │ │ └── cn/ │ │ └── hutool/ │ │ └── json/ │ │ ├── InternalJSONUtil.java │ │ ├── JSON.java │ │ ├── JSONArray.java │ │ ├── JSONBeanParser.java │ │ ├── JSONConfig.java │ │ ├── JSONConverter.java │ │ ├── JSONException.java │ │ ├── JSONGetter.java │ │ ├── JSONNull.java │ │ ├── JSONObject.java │ │ ├── JSONObjectIter.java │ │ ├── JSONParser.java │ │ ├── JSONStrFormatter.java │ │ ├── JSONString.java │ │ ├── JSONSupport.java │ │ ├── JSONTokener.java │ │ ├── JSONUtil.java │ │ ├── ObjectMapper.java │ │ ├── XML.java │ │ ├── XMLTokener.java │ │ ├── package-info.java │ │ ├── serialize/ │ │ │ ├── GlobalSerializeMapping.java │ │ │ ├── JSONArraySerializer.java │ │ │ ├── JSONDeserializer.java │ │ │ ├── JSONObjectSerializer.java │ │ │ ├── JSONSerializer.java │ │ │ ├── JSONWriter.java │ │ │ ├── TemporalAccessorSerializer.java │ │ │ └── package-info.java │ │ └── xml/ │ │ ├── JSONXMLParser.java │ │ ├── JSONXMLSerializer.java │ │ ├── ParseConfig.java │ │ └── package-info.java │ └── test/ │ ├── java/ │ │ └── cn/ │ │ └── hutool/ │ │ └── json/ │ │ ├── BeanToJsonTest.java │ │ ├── CustomSerializeTest.java │ │ ├── Issue1075Test.java │ │ ├── Issue1101Test.java │ │ ├── Issue1200Test.java │ │ ├── Issue2090Test.java │ │ ├── Issue2131Test.java │ │ ├── Issue2223Test.java │ │ ├── Issue2365Test.java │ │ ├── Issue2369Test.java │ │ ├── Issue2377Test.java │ │ ├── Issue2447Test.java │ │ ├── Issue2555Test.java │ │ ├── Issue2572Test.java │ │ ├── Issue2746Test.java │ │ ├── Issue2749Test.java │ │ ├── Issue2953Test.java │ │ ├── Issue2997Test.java │ │ ├── Issue3051Test.java │ │ ├── Issue3086Test.java │ │ ├── Issue3139Test.java │ │ ├── Issue3274Test.java │ │ ├── Issue3289Test.java │ │ ├── Issue3504Test.java │ │ ├── Issue3506Test.java │ │ ├── Issue3541Test.java │ │ ├── Issue3588Test.java │ │ ├── Issue3619Test.java │ │ ├── Issue3649Test.java │ │ ├── Issue3713Test.java │ │ ├── Issue3759Test.java │ │ ├── Issue3790Test.java │ │ ├── Issue3795Test.java │ │ ├── Issue4197Test.java │ │ ├── Issue4210Test.java │ │ ├── Issue4214Test.java │ │ ├── Issue488Test.java │ │ ├── Issue644Test.java │ │ ├── Issue677Test.java │ │ ├── Issue867Test.java │ │ ├── IssueI1AU86Test.java │ │ ├── IssueI1F8M2.java │ │ ├── IssueI1H2VN.java │ │ ├── IssueI3BS4S.java │ │ ├── IssueI3EGJP.java │ │ ├── IssueI49VZBTest.java │ │ ├── IssueI4RBZ4Test.java │ │ ├── IssueI4XFMWTest.java │ │ ├── IssueI50EGGTest.java │ │ ├── IssueI59LW4Test.java │ │ ├── IssueI5OMSCTest.java │ │ ├── IssueI676IT.java │ │ ├── IssueI6H0XFTest.java │ │ ├── IssueI6SZYBTest.java │ │ ├── IssueI6TPIFTest.java │ │ ├── IssueI6YN2ATest.java │ │ ├── IssueI71BE6Test.java │ │ ├── IssueI7FQ29Test.java │ │ ├── IssueI7GPGXTest.java │ │ ├── IssueI7M2GZTest.java │ │ ├── IssueI82AM8Test.java │ │ ├── IssueI84V6ITest.java │ │ ├── IssueI8NMP7Test.java │ │ ├── IssueI8PC9FTest.java │ │ ├── IssueI90ADXTest.java │ │ ├── IssueIA5YOETest.java │ │ ├── IssueIALQ0NTest.java │ │ ├── IssueIAOPI9Test.java │ │ ├── IssueIAP4GMTest.java │ │ ├── IssueIB9MH0Test.java │ │ ├── IssueID418BTest.java │ │ ├── IssueID61QRTest.java │ │ ├── Issues1881Test.java │ │ ├── IssuesI44E4HTest.java │ │ ├── IssuesI4V14NTest.java │ │ ├── JSONArrayTest.java │ │ ├── JSONBeanParserTest.java │ │ ├── JSONConvertTest.java │ │ ├── JSONNullTest.java │ │ ├── JSONObjectTest.java │ │ ├── JSONPathTest.java │ │ ├── JSONStrFormatterTest.java │ │ ├── JSONSupportTest.java │ │ ├── JSONUtilTest.java │ │ ├── ParseBeanTest.java │ │ ├── Pr1431Test.java │ │ ├── Pr192Test.java │ │ ├── TransientTest.java │ │ ├── issueIVMD5/ │ │ │ ├── BaseResult.java │ │ │ ├── IssueIVMD5Test.java │ │ │ └── StudentInfo.java │ │ ├── test/ │ │ │ └── bean/ │ │ │ ├── ADT.java │ │ │ ├── Data.java │ │ │ ├── Exam.java │ │ │ ├── ExamInfoDict.java │ │ │ ├── JSONBean.java │ │ │ ├── JsonNode.java │ │ │ ├── KeyBean.java │ │ │ ├── PerfectEvaluationProductResVo.java │ │ │ ├── Price.java │ │ │ ├── ProductResBase.java │ │ │ ├── ResultBean.java │ │ │ ├── ResultDto.java │ │ │ ├── Seq.java │ │ │ ├── TokenAuthResponse.java │ │ │ ├── TokenAuthWarp.java │ │ │ ├── TokenAuthWarp2.java │ │ │ ├── UUMap.java │ │ │ ├── UserA.java │ │ │ ├── UserB.java │ │ │ ├── UserC.java │ │ │ ├── UserInfoDict.java │ │ │ ├── UserInfoRedundCount.java │ │ │ ├── UserWithMap.java │ │ │ └── report/ │ │ │ ├── CaseReport.java │ │ │ ├── EnvSettingInfo.java │ │ │ ├── StepReport.java │ │ │ └── SuiteReport.java │ │ └── xml/ │ │ ├── Issue2748Test.java │ │ ├── Issue3560Test.java │ │ ├── IssueID0HP2Test.java │ │ └── XMLTest.java │ └── resources/ │ ├── evaluation.json │ ├── exam_test.json │ ├── issue1200.json │ ├── issue488.json │ ├── issue488Array.json │ ├── issueI5OMSC.json │ ├── issueI676IT.json │ ├── issueI82AM8.json │ ├── issueIVMD5.json │ └── suiteReport.json ├── hutool-jwt/ │ ├── pom.xml │ └── src/ │ ├── main/ │ │ └── java/ │ │ └── cn/ │ │ └── hutool/ │ │ └── jwt/ │ │ ├── Claims.java │ │ ├── JWT.java │ │ ├── JWTException.java │ │ ├── JWTHeader.java │ │ ├── JWTPayload.java │ │ ├── JWTUtil.java │ │ ├── JWTValidator.java │ │ ├── RegisteredPayload.java │ │ ├── package-info.java │ │ └── signers/ │ │ ├── AlgorithmUtil.java │ │ ├── AsymmetricJWTSigner.java │ │ ├── EllipticCurveJWTSigner.java │ │ ├── HMacJWTSigner.java │ │ ├── JWTSigner.java │ │ ├── JWTSignerUtil.java │ │ ├── NoneJWTSigner.java │ │ └── package-info.java │ └── test/ │ └── java/ │ └── cn/ │ └── hutool/ │ └── jwt/ │ ├── Issue3205Test.java │ ├── Issue3732Test.java │ ├── Issue4105Test.java │ ├── IssueI5QRUOTest.java │ ├── IssueI6IS5BTest.java │ ├── JWTSignerTest.java │ ├── JWTTest.java │ ├── JWTUtilTest.java │ └── JWTValidatorTest.java ├── hutool-log/ │ ├── pom.xml │ └── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── hutool/ │ │ │ └── log/ │ │ │ ├── AbstractLog.java │ │ │ ├── GlobalLogFactory.java │ │ │ ├── Log.java │ │ │ ├── LogFactory.java │ │ │ ├── StaticLog.java │ │ │ ├── dialect/ │ │ │ │ ├── commons/ │ │ │ │ │ ├── ApacheCommonsLog.java │ │ │ │ │ ├── ApacheCommonsLog4JLog.java │ │ │ │ │ ├── ApacheCommonsLogFactory.java │ │ │ │ │ └── package-info.java │ │ │ │ ├── console/ │ │ │ │ │ ├── ConsoleColorLog.java │ │ │ │ │ ├── ConsoleColorLogFactory.java │ │ │ │ │ ├── ConsoleLog.java │ │ │ │ │ ├── ConsoleLogFactory.java │ │ │ │ │ └── package-info.java │ │ │ │ ├── jboss/ │ │ │ │ │ ├── JbossLog.java │ │ │ │ │ ├── JbossLogFactory.java │ │ │ │ │ └── package-info.java │ │ │ │ ├── jdk/ │ │ │ │ │ ├── JdkLog.java │ │ │ │ │ ├── JdkLogFactory.java │ │ │ │ │ └── package-info.java │ │ │ │ ├── log4j/ │ │ │ │ │ ├── Log4jLog.java │ │ │ │ │ ├── Log4jLogFactory.java │ │ │ │ │ └── package-info.java │ │ │ │ ├── log4j2/ │ │ │ │ │ ├── Log4j2Log.java │ │ │ │ │ ├── Log4j2LogFactory.java │ │ │ │ │ └── package-info.java │ │ │ │ ├── logtube/ │ │ │ │ │ ├── LogTubeLog.java │ │ │ │ │ ├── LogTubeLogFactory.java │ │ │ │ │ └── package-info.java │ │ │ │ ├── package-info.java │ │ │ │ ├── slf4j/ │ │ │ │ │ ├── Slf4jLog.java │ │ │ │ │ ├── Slf4jLogFactory.java │ │ │ │ │ └── package-info.java │ │ │ │ └── tinylog/ │ │ │ │ ├── TinyLog.java │ │ │ │ ├── TinyLog2.java │ │ │ │ ├── TinyLog2Factory.java │ │ │ │ ├── TinyLogFactory.java │ │ │ │ └── package-info.java │ │ │ ├── level/ │ │ │ │ ├── DebugLog.java │ │ │ │ ├── ErrorLog.java │ │ │ │ ├── InfoLog.java │ │ │ │ ├── Level.java │ │ │ │ ├── TraceLog.java │ │ │ │ ├── WarnLog.java │ │ │ │ └── package-info.java │ │ │ └── package-info.java │ │ └── resources/ │ │ └── META-INF/ │ │ └── services/ │ │ └── cn.hutool.log.LogFactory │ └── test/ │ ├── java/ │ │ └── cn/ │ │ └── hutool/ │ │ └── log/ │ │ └── test/ │ │ ├── CustomLogTest.java │ │ ├── LogTest.java │ │ ├── LogTubeTest.java │ │ └── StaticLogTest.java │ └── resources/ │ ├── example/ │ │ └── log4j2.xml │ ├── log4j.properties │ ├── log4j2.xml │ ├── logback.xml │ ├── logging.properties │ ├── logtube.properties │ └── tinylog.properties ├── hutool-poi/ │ ├── pom.xml │ └── src/ │ ├── main/ │ │ └── java/ │ │ └── cn/ │ │ └── hutool/ │ │ └── poi/ │ │ ├── GlobalPoiConfig.java │ │ ├── PoiChecker.java │ │ ├── excel/ │ │ │ ├── BigExcelWriter.java │ │ │ ├── ExcelBase.java │ │ │ ├── ExcelDateUtil.java │ │ │ ├── ExcelExtractorUtil.java │ │ │ ├── ExcelFileUtil.java │ │ │ ├── ExcelPicUtil.java │ │ │ ├── ExcelReader.java │ │ │ ├── ExcelUtil.java │ │ │ ├── ExcelWriter.java │ │ │ ├── RowUtil.java │ │ │ ├── StyleSet.java │ │ │ ├── WorkbookUtil.java │ │ │ ├── cell/ │ │ │ │ ├── CellEditor.java │ │ │ │ ├── CellHandler.java │ │ │ │ ├── CellLocation.java │ │ │ │ ├── CellSetter.java │ │ │ │ ├── CellUtil.java │ │ │ │ ├── CellValue.java │ │ │ │ ├── FormulaCellValue.java │ │ │ │ ├── NullCell.java │ │ │ │ ├── package-info.java │ │ │ │ ├── setters/ │ │ │ │ │ ├── BooleanCellSetter.java │ │ │ │ │ ├── CalendarCellSetter.java │ │ │ │ │ ├── CellSetterFactory.java │ │ │ │ │ ├── CharSequenceCellSetter.java │ │ │ │ │ ├── DateCellSetter.java │ │ │ │ │ ├── EscapeStrCellSetter.java │ │ │ │ │ ├── HyperlinkCellSetter.java │ │ │ │ │ ├── NullCellSetter.java │ │ │ │ │ ├── NumberCellSetter.java │ │ │ │ │ ├── RichTextCellSetter.java │ │ │ │ │ ├── TemporalAccessorCellSetter.java │ │ │ │ │ └── package-info.java │ │ │ │ └── values/ │ │ │ │ ├── ErrorCellValue.java │ │ │ │ └── NumericCellValue.java │ │ │ ├── editors/ │ │ │ │ ├── NumericToIntEditor.java │ │ │ │ ├── TrimEditor.java │ │ │ │ └── package-info.java │ │ │ ├── package-info.java │ │ │ ├── reader/ │ │ │ │ ├── AbstractSheetReader.java │ │ │ │ ├── BeanSheetReader.java │ │ │ │ ├── ColumnSheetReader.java │ │ │ │ ├── ListSheetReader.java │ │ │ │ ├── MapSheetReader.java │ │ │ │ ├── SheetReader.java │ │ │ │ └── package-info.java │ │ │ ├── sax/ │ │ │ │ ├── AttributeName.java │ │ │ │ ├── CellDataType.java │ │ │ │ ├── ElementName.java │ │ │ │ ├── Excel03SaxReader.java │ │ │ │ ├── Excel07SaxReader.java │ │ │ │ ├── ExcelSaxReader.java │ │ │ │ ├── ExcelSaxUtil.java │ │ │ │ ├── SheetDataSaxHandler.java │ │ │ │ ├── SheetRidReader.java │ │ │ │ ├── StopReadException.java │ │ │ │ ├── handler/ │ │ │ │ │ ├── AbstractRowHandler.java │ │ │ │ │ ├── BeanRowHandler.java │ │ │ │ │ ├── MapRowHandler.java │ │ │ │ │ ├── RowHandler.java │ │ │ │ │ └── package-info.java │ │ │ │ └── package-info.java │ │ │ └── style/ │ │ │ ├── Align.java │ │ │ ├── StyleUtil.java │ │ │ └── package-info.java │ │ ├── exceptions/ │ │ │ ├── POIException.java │ │ │ └── package-info.java │ │ ├── ofd/ │ │ │ ├── OfdWriter.java │ │ │ └── package-info.java │ │ ├── package-info.java │ │ └── word/ │ │ ├── DocUtil.java │ │ ├── PicType.java │ │ ├── TableUtil.java │ │ ├── Word07Writer.java │ │ ├── WordUtil.java │ │ └── package-info.java │ └── test/ │ ├── java/ │ │ └── cn/ │ │ └── hutool/ │ │ └── poi/ │ │ ├── IssueI5Q1TWTest.java │ │ ├── excel/ │ │ │ ├── BigExcelWriteTest.java │ │ │ ├── CellEditorTest.java │ │ │ ├── CellUtilTest.java │ │ │ ├── ExcelFileUtilTest.java │ │ │ ├── ExcelReadTest.java │ │ │ ├── ExcelReaderToWriterTest.java │ │ │ ├── ExcelUtilTest.java │ │ │ ├── ExcelWriteBeanTest.java │ │ │ ├── ExcelWriteTest.java │ │ │ ├── Issue1729Test.java │ │ │ ├── Issue2221Test.java │ │ │ ├── Issue2706Test.java │ │ │ ├── Issue2899Test.java │ │ │ ├── Issue2941Test.java │ │ │ ├── Issue3048Test.java │ │ │ ├── Issue3698Test.java │ │ │ ├── Issue3965Test.java │ │ │ ├── Issue4146Test.java │ │ │ ├── IssueI53OSTTest.java │ │ │ ├── IssueI64P2KTest.java │ │ │ ├── IssueI6MBS5Test.java │ │ │ ├── IssueI6URF3Test.java │ │ │ ├── IssueIB0EJ9Test.java │ │ │ ├── NumericCellValueTest.java │ │ │ ├── OrderExcel.java │ │ │ ├── TestBean.java │ │ │ ├── WorkbookUtilTest.java │ │ │ ├── WriteNumberToStringTest.java │ │ │ ├── WriteStyleTest.java │ │ │ └── sax/ │ │ │ ├── ExcelSaxReadTest.java │ │ │ └── Issue4195Test.java │ │ ├── ofd/ │ │ │ └── OfdWriterTest.java │ │ └── word/ │ │ └── WordWriterTest.java │ └── resources/ │ ├── 1899bug_demo.xlsx │ ├── I5Q1TW.xlsx │ ├── UserProjectDO.xlsx │ ├── aaa.xls │ ├── aaa.xlsx │ ├── alias.xlsx │ ├── blankAndDateTest.xlsx │ ├── cell_editor_test.xlsx │ ├── data_for_sax_test.xls │ ├── data_for_sax_test.xlsx │ ├── formula_test.xlsx │ ├── merge_test.xlsx │ ├── null_cell_test.xlsx │ ├── priceIndex.xls │ ├── readBySax.xls │ ├── read_row_npe.xlsx │ └── test.xls ├── hutool-script/ │ ├── pom.xml │ └── src/ │ ├── main/ │ │ └── java/ │ │ └── cn/ │ │ └── hutool/ │ │ └── script/ │ │ ├── FullSupportScriptEngine.java │ │ ├── JavaScriptEngine.java │ │ ├── ScriptRuntimeException.java │ │ ├── ScriptUtil.java │ │ └── package-info.java │ └── test/ │ ├── java/ │ │ └── cn/ │ │ └── hutool/ │ │ └── script/ │ │ └── test/ │ │ ├── NashornDeepTest.java │ │ └── ScriptUtilTest.java │ └── resources/ │ └── filter1.js ├── hutool-setting/ │ ├── pom.xml │ └── src/ │ ├── main/ │ │ └── java/ │ │ └── cn/ │ │ └── hutool/ │ │ └── setting/ │ │ ├── AbsSetting.java │ │ ├── GroupedMap.java │ │ ├── GroupedSet.java │ │ ├── Setting.java │ │ ├── SettingLoader.java │ │ ├── SettingRuntimeException.java │ │ ├── SettingUtil.java │ │ ├── dialect/ │ │ │ ├── Props.java │ │ │ ├── PropsUtil.java │ │ │ └── package-info.java │ │ ├── package-info.java │ │ ├── profile/ │ │ │ ├── GlobalProfile.java │ │ │ ├── Profile.java │ │ │ └── package-info.java │ │ └── yaml/ │ │ ├── YamlUtil.java │ │ └── package-info.java │ └── test/ │ ├── java/ │ │ └── cn/ │ │ └── hutool/ │ │ └── setting/ │ │ ├── Issue3008Test.java │ │ ├── IssueI7G34ETest.java │ │ ├── PropsTest.java │ │ ├── PropsUtilTest.java │ │ ├── SettingTest.java │ │ ├── SettingUtilTest.java │ │ └── yaml/ │ │ └── YamlUtilTest.java │ └── resources/ │ ├── example/ │ │ ├── example.set │ │ ├── example.setting │ │ └── group-set-example.set │ ├── issue3008.properties │ ├── test.properties │ ├── test.setting │ ├── test.yaml │ ├── test_with_bom.setting │ └── to_bean_test.properties ├── hutool-socket/ │ ├── pom.xml │ └── src/ │ ├── main/ │ │ └── java/ │ │ └── cn/ │ │ └── hutool/ │ │ └── socket/ │ │ ├── ChannelUtil.java │ │ ├── SocketConfig.java │ │ ├── SocketRuntimeException.java │ │ ├── SocketUtil.java │ │ ├── aio/ │ │ │ ├── AcceptHandler.java │ │ │ ├── AioClient.java │ │ │ ├── AioServer.java │ │ │ ├── AioSession.java │ │ │ ├── IoAction.java │ │ │ ├── ReadHandler.java │ │ │ ├── SimpleIoAction.java │ │ │ └── package-info.java │ │ ├── nio/ │ │ │ ├── AcceptHandler.java │ │ │ ├── ChannelHandler.java │ │ │ ├── NioClient.java │ │ │ ├── NioServer.java │ │ │ ├── NioUtil.java │ │ │ ├── Operation.java │ │ │ └── package-info.java │ │ ├── package-info.java │ │ └── protocol/ │ │ ├── MsgDecoder.java │ │ ├── MsgEncoder.java │ │ ├── Protocol.java │ │ └── package-info.java │ └── test/ │ └── java/ │ └── cn/ │ └── hutool/ │ └── socket/ │ ├── aio/ │ │ ├── AioClientTest.java │ │ └── AioServerTest.java │ └── nio/ │ ├── NioClientTest.java │ └── NioServerTest.java ├── hutool-system/ │ ├── pom.xml │ └── src/ │ ├── main/ │ │ └── java/ │ │ └── cn/ │ │ └── hutool/ │ │ └── system/ │ │ ├── HostInfo.java │ │ ├── JavaInfo.java │ │ ├── JavaRuntimeInfo.java │ │ ├── JavaSpecInfo.java │ │ ├── JvmInfo.java │ │ ├── JvmSpecInfo.java │ │ ├── OsInfo.java │ │ ├── RuntimeInfo.java │ │ ├── SystemPropsKeys.java │ │ ├── SystemUtil.java │ │ ├── UserInfo.java │ │ ├── oshi/ │ │ │ ├── CpuInfo.java │ │ │ ├── CpuTicks.java │ │ │ ├── OshiUtil.java │ │ │ └── package-info.java │ │ └── package-info.java │ └── test/ │ └── java/ │ └── cn/ │ └── hutool/ │ └── system/ │ ├── OshiPrintTest.java │ ├── OshiTest.java │ └── SystemUtilTest.java ├── hutool.sh └── pom.xml