From 52b4651f1aad11ab4519a04651b39c1196ed4b4d Mon Sep 17 00:00:00 2001 From: Merith-TK Date: Tue, 9 Aug 2022 23:00:29 -0700 Subject: [PATCH] try new-method --- Readme.md | 5 + cfr.jar | Bin 0 -> 2162315 bytes etc/decompiled.zip | Bin 2273705 -> 0 bytes etc/{source.jar => skaiacraft_v3.jar} | Bin src/{main => }/Log4j-config.xsd | 0 src/{main => }/Log4j-events.dtd | 0 src/{main => }/Log4j-events.xsd | 0 src/{main => }/Log4j-levels.xsd | 0 src/{main => }/META-INF/MANIFEST.MF | 0 src/{main => }/Minecraft_Logo.png | Bin src/{main => }/cakehoohoohoo.png | Bin .../mc/nbt/error/TagNotFoundException.java | 27 + .../nbt/error/UnexpectedTagTypeException.java | 27 + .../evilco/mc/nbt/stream/NbtInputStream.java | 46 + .../evilco/mc/nbt/stream/NbtOutputStream.java | 21 + src/com/evilco/mc/nbt/tag/AbstractTag.java | 86 + .../mc/nbt/tag/IAnonymousTagContainer.java | 21 + .../evilco/mc/nbt/tag/INamedTagContainer.java | 24 + src/com/evilco/mc/nbt/tag/ITag.java | 29 + src/com/evilco/mc/nbt/tag/ITagContainer.java | 12 + src/com/evilco/mc/nbt/tag/TagByte.java | 45 + src/com/evilco/mc/nbt/tag/TagByteArray.java | 51 + src/com/evilco/mc/nbt/tag/TagCompound.java | 184 + src/com/evilco/mc/nbt/tag/TagDouble.java | 45 + src/com/evilco/mc/nbt/tag/TagFloat.java | 45 + src/com/evilco/mc/nbt/tag/TagInteger.java | 45 + .../evilco/mc/nbt/tag/TagIntegerArray.java | 55 + src/com/evilco/mc/nbt/tag/TagList.java | 96 + src/com/evilco/mc/nbt/tag/TagLong.java | 45 + src/com/evilco/mc/nbt/tag/TagShort.java | 45 + src/com/evilco/mc/nbt/tag/TagString.java | 51 + src/com/evilco/mc/nbt/tag/TagType.java | 55 + src/com/google/common/annotations/Beta.java | 18 + .../common/annotations/GwtCompatible.java | 20 + .../common/annotations/GwtIncompatible.java | 19 + .../common/annotations/VisibleForTesting.java | 10 + src/com/google/common/base/Absent.java | 88 + .../google/common/base/AbstractIterator.java | 74 + src/com/google/common/base/Ascii.java | 169 + src/com/google/common/base/CaseFormat.java | 179 + src/com/google/common/base/CharMatcher.java | 1018 +++++ src/com/google/common/base/Charsets.java | 26 + src/com/google/common/base/Converter.java | 305 ++ src/com/google/common/base/Defaults.java | 40 + src/com/google/common/base/Enums.java | 115 + src/com/google/common/base/Equivalence.java | 199 + .../base/FinalizablePhantomReference.java | 17 + .../common/base/FinalizableReference.java | 8 + .../base/FinalizableReferenceQueue.java | 182 + .../common/base/FinalizableSoftReference.java | 17 + .../common/base/FinalizableWeakReference.java | 17 + src/com/google/common/base/Function.java | 15 + .../common/base/FunctionalEquivalence.java | 59 + src/com/google/common/base/Functions.java | 299 ++ src/com/google/common/base/Joiner.java | 267 ++ src/com/google/common/base/MoreObjects.java | 160 + src/com/google/common/base/Objects.java | 168 + src/com/google/common/base/Optional.java | 89 + .../common/base/PairwiseEquivalence.java | 60 + src/com/google/common/base/Platform.java | 29 + src/com/google/common/base/Preconditions.java | 154 + src/com/google/common/base/Predicate.java | 14 + src/com/google/common/base/Predicates.java | 526 +++ src/com/google/common/base/Present.java | 87 + .../google/common/base/SmallCharMatcher.java | 100 + src/com/google/common/base/Splitter.java | 308 ++ .../common/base/StandardSystemProperty.java | 62 + src/com/google/common/base/Stopwatch.java | 136 + src/com/google/common/base/Strings.java | 108 + src/com/google/common/base/Supplier.java | 11 + src/com/google/common/base/Suppliers.java | 248 ++ src/com/google/common/base/Throwables.java | 70 + src/com/google/common/base/Ticker.java | 29 + src/com/google/common/base/Utf8.java | 104 + src/com/google/common/base/Verify.java | 38 + .../google/common/base/VerifyException.java | 20 + .../common/base/internal/Finalizer.java | 107 + src/com/google/common/base/package-info.java | 8 + .../google/common/cache/AbstractCache.java | 160 + .../common/cache/AbstractLoadingCache.java | 51 + src/com/google/common/cache/Cache.java | 43 + src/com/google/common/cache/CacheBuilder.java | 402 ++ .../google/common/cache/CacheBuilderSpec.java | 378 ++ src/com/google/common/cache/CacheLoader.java | 125 + src/com/google/common/cache/CacheStats.java | 113 + .../google/common/cache/ForwardingCache.java | 103 + .../common/cache/ForwardingLoadingCache.java | 62 + src/com/google/common/cache/LoadingCache.java | 33 + src/com/google/common/cache/LocalCache.java | 3939 +++++++++++++++++ src/com/google/common/cache/LongAddable.java | 15 + src/com/google/common/cache/LongAddables.java | 68 + src/com/google/common/cache/LongAdder.java | 117 + src/com/google/common/cache/RemovalCause.java | 54 + .../google/common/cache/RemovalListener.java | 14 + .../google/common/cache/RemovalListeners.java | 34 + .../common/cache/RemovalNotification.java | 77 + src/com/google/common/cache/Striped64.java | 224 + src/com/google/common/cache/Weigher.java | 13 + src/com/google/common/cache/package-info.java | 8 + .../google/common/collect/AbstractBiMap.java | 382 ++ .../collect/AbstractIndexedListIterator.java | 64 + .../common/collect/AbstractIterator.java | 76 + .../common/collect/AbstractListMultimap.java | 62 + .../collect/AbstractMapBasedMultimap.java | 1336 ++++++ .../collect/AbstractMapBasedMultiset.java | 237 + .../common/collect/AbstractMapEntry.java | 49 + .../common/collect/AbstractMultimap.java | 222 + .../common/collect/AbstractMultiset.java | 183 + .../common/collect/AbstractNavigableMap.java | 187 + .../common/collect/AbstractRangeSet.java | 90 + .../collect/AbstractSequentialIterator.java | 43 + .../common/collect/AbstractSetMultimap.java | 67 + .../AbstractSortedKeySortedSetMultimap.java | 33 + .../collect/AbstractSortedMultiset.java | 127 + .../collect/AbstractSortedSetMultimap.java | 63 + .../google/common/collect/AbstractTable.java | 211 + .../common/collect/AllEqualOrdering.java | 51 + .../common/collect/ArrayListMultimap.java | 87 + src/com/google/common/collect/ArrayTable.java | 503 +++ src/com/google/common/collect/BiMap.java | 26 + .../common/collect/BinaryTreeTraverser.java | 174 + src/com/google/common/collect/BoundType.java | 32 + .../common/collect/ByFunctionOrdering.java | 53 + .../google/common/collect/CartesianList.java | 100 + .../common/collect/ClassToInstanceMap.java | 16 + .../common/collect/CollectPreconditions.java | 37 + .../google/common/collect/Collections2.java | 462 ++ .../common/collect/ComparatorOrdering.java | 48 + .../common/collect/ComparisonChain.java | 145 + .../common/collect/CompoundOrdering.java | 58 + .../common/collect/ComputationException.java | 17 + .../collect/ComputingConcurrentHashMap.java | 365 ++ .../collect/ConcurrentHashMultiset.java | 383 ++ src/com/google/common/collect/Constraint.java | 13 + .../google/common/collect/Constraints.java | 260 ++ .../google/common/collect/ContiguousSet.java | 112 + src/com/google/common/collect/Count.java | 54 + src/com/google/common/collect/Cut.java | 421 ++ .../common/collect/DenseImmutableTable.java | 280 ++ .../DescendingImmutableSortedMultiset.java | 70 + .../collect/DescendingImmutableSortedSet.java | 97 + .../common/collect/DescendingMultiset.java | 144 + .../google/common/collect/DiscreteDomain.java | 175 + .../common/collect/EmptyContiguousSet.java | 152 + .../common/collect/EmptyImmutableBiMap.java | 69 + .../collect/EmptyImmutableListMultimap.java | 23 + .../common/collect/EmptyImmutableSet.java | 91 + .../collect/EmptyImmutableSetMultimap.java | 23 + .../collect/EmptyImmutableSortedMap.java | 99 + .../collect/EmptyImmutableSortedMultiset.java | 103 + .../collect/EmptyImmutableSortedSet.java | 125 + src/com/google/common/collect/EnumBiMap.java | 96 + .../google/common/collect/EnumHashBiMap.java | 77 + .../google/common/collect/EnumMultiset.java | 64 + .../google/common/collect/EvictingQueue.java | 77 + .../common/collect/ExplicitOrdering.java | 67 + .../common/collect/FilteredEntryMultimap.java | 382 ++ .../collect/FilteredEntrySetMultimap.java | 52 + .../collect/FilteredKeyListMultimap.java | 40 + .../common/collect/FilteredKeyMultimap.java | 217 + .../collect/FilteredKeySetMultimap.java | 71 + .../common/collect/FilteredMultimap.java | 17 + .../collect/FilteredMultimapValues.java | 71 + .../common/collect/FilteredSetMultimap.java | 16 + .../google/common/collect/FluentIterable.java | 233 + .../collect/ForwardingBlockingDeque.java | 94 + .../common/collect/ForwardingCollection.java | 141 + .../collect/ForwardingConcurrentMap.java | 39 + .../common/collect/ForwardingDeque.java | 103 + .../ForwardingImmutableCollection.java | 12 + .../collect/ForwardingImmutableList.java | 12 + .../collect/ForwardingImmutableMap.java | 12 + .../collect/ForwardingImmutableSet.java | 12 + .../common/collect/ForwardingIterator.java | 34 + .../google/common/collect/ForwardingList.java | 130 + .../collect/ForwardingListIterator.java | 49 + .../collect/ForwardingListMultimap.java | 36 + .../google/common/collect/ForwardingMap.java | 169 + .../common/collect/ForwardingMapEntry.java | 68 + .../common/collect/ForwardingMultimap.java | 124 + .../common/collect/ForwardingMultiset.java | 155 + .../collect/ForwardingNavigableMap.java | 254 ++ .../collect/ForwardingNavigableSet.java | 135 + .../common/collect/ForwardingObject.java | 18 + .../common/collect/ForwardingQueue.java | 72 + .../google/common/collect/ForwardingSet.java | 46 + .../common/collect/ForwardingSetMultimap.java | 39 + .../common/collect/ForwardingSortedMap.java | 96 + .../collect/ForwardingSortedMultiset.java | 138 + .../common/collect/ForwardingSortedSet.java | 104 + .../collect/ForwardingSortedSetMultimap.java | 42 + .../common/collect/ForwardingTable.java | 127 + .../google/common/collect/GeneralRange.java | 192 + .../common/collect/GenericMapMaker.java | 74 + .../google/common/collect/GwtTransient.java | 7 +- .../google/common/collect/HashBasedTable.java | 92 + src/com/google/common/collect/HashBiMap.java | 632 +++ .../google/common/collect/HashMultimap.java | 78 + .../google/common/collect/HashMultiset.java | 59 + src/com/google/common/collect/Hashing.java | 37 + .../common/collect/ImmutableAsList.java | 67 + .../google/common/collect/ImmutableBiMap.java | 131 + .../collect/ImmutableClassToInstanceMap.java | 79 + .../common/collect/ImmutableCollection.java | 216 + .../google/common/collect/ImmutableEntry.java | 40 + .../common/collect/ImmutableEnumMap.java | 140 + .../common/collect/ImmutableEnumSet.java | 101 + .../google/common/collect/ImmutableList.java | 434 ++ .../common/collect/ImmutableListMultimap.java | 227 + .../google/common/collect/ImmutableMap.java | 371 ++ .../common/collect/ImmutableMapEntry.java | 51 + .../common/collect/ImmutableMapEntrySet.java | 62 + .../common/collect/ImmutableMapKeySet.java | 84 + .../common/collect/ImmutableMapValues.java | 86 + .../common/collect/ImmutableMultimap.java | 456 ++ .../common/collect/ImmutableMultiset.java | 374 ++ .../common/collect/ImmutableRangeMap.java | 233 + .../common/collect/ImmutableRangeSet.java | 485 ++ .../google/common/collect/ImmutableSet.java | 263 ++ .../common/collect/ImmutableSetMultimap.java | 340 ++ .../common/collect/ImmutableSortedAsList.java | 57 + .../common/collect/ImmutableSortedMap.java | 367 ++ .../ImmutableSortedMapFauxverideShim.java | 43 + .../collect/ImmutableSortedMultiset.java | 276 ++ ...ImmutableSortedMultisetFauxverideShim.java | 53 + .../common/collect/ImmutableSortedSet.java | 365 ++ .../ImmutableSortedSetFauxverideShim.java | 53 + .../google/common/collect/ImmutableTable.java | 215 + src/com/google/common/collect/Interner.java | 11 + src/com/google/common/collect/Interners.java | 93 + src/com/google/common/collect/Iterables.java | 532 +++ src/com/google/common/collect/Iterators.java | 714 +++ .../collect/LexicographicalOrdering.java | 61 + .../common/collect/LinkedHashMultimap.java | 443 ++ .../common/collect/LinkedHashMultiset.java | 59 + .../common/collect/LinkedListMultimap.java | 659 +++ .../google/common/collect/ListMultimap.java | 30 + src/com/google/common/collect/Lists.java | 679 +++ .../google/common/collect/MapConstraint.java | 16 + .../google/common/collect/MapConstraints.java | 680 +++ .../google/common/collect/MapDifference.java | 35 + src/com/google/common/collect/MapMaker.java | 450 ++ .../common/collect/MapMakerInternalMap.java | 3192 +++++++++++++ src/com/google/common/collect/Maps.java | 2691 +++++++++++ .../common/collect/MinMaxPriorityQueue.java | 570 +++ src/com/google/common/collect/Multimap.java | 54 + .../common/collect/MultimapBuilder.java | 330 ++ src/com/google/common/collect/Multimaps.java | 1190 +++++ src/com/google/common/collect/Multiset.java | 69 + src/com/google/common/collect/Multisets.java | 810 ++++ .../collect/MutableClassToInstanceMap.java | 50 + .../common/collect/NaturalOrdering.java | 41 + .../common/collect/NullsFirstOrdering.java | 71 + .../common/collect/NullsLastOrdering.java | 71 + .../google/common/collect/ObjectArrays.java | 126 + src/com/google/common/collect/Ordering.java | 385 ++ .../common/collect/PeekingIterator.java | 19 + src/com/google/common/collect/Platform.java | 55 + src/com/google/common/collect/Queues.java | 183 + src/com/google/common/collect/Range.java | 301 ++ src/com/google/common/collect/RangeMap.java | 38 + src/com/google/common/collect/RangeSet.java | 46 + .../common/collect/RegularContiguousSet.java | 203 + .../collect/RegularImmutableAsList.java | 52 + .../common/collect/RegularImmutableBiMap.java | 308 ++ .../common/collect/RegularImmutableList.java | 85 + .../common/collect/RegularImmutableMap.java | 155 + .../collect/RegularImmutableMultiset.java | 63 + .../common/collect/RegularImmutableSet.java | 82 + .../collect/RegularImmutableSortedMap.java | 120 + .../RegularImmutableSortedMultiset.java | 90 + .../collect/RegularImmutableSortedSet.java | 248 ++ .../common/collect/RegularImmutableTable.java | 162 + .../collect/ReverseNaturalOrdering.java | 84 + .../common/collect/ReverseOrdering.java | 94 + .../google/common/collect/RowSortedTable.java | 22 + .../google/common/collect/Serialization.java | 130 + .../google/common/collect/SetMultimap.java | 33 + src/com/google/common/collect/Sets.java | 972 ++++ .../collect/SingletonImmutableBiMap.java | 81 + .../collect/SingletonImmutableList.java | 103 + .../common/collect/SingletonImmutableSet.java | 91 + .../collect/SingletonImmutableTable.java | 62 + .../google/common/collect/SortedIterable.java | 17 + .../common/collect/SortedIterables.java | 39 + .../google/common/collect/SortedLists.java | 157 + .../common/collect/SortedMapDifference.java | 24 + .../google/common/collect/SortedMultiset.java | 49 + .../common/collect/SortedMultisetBridge.java | 13 + .../common/collect/SortedMultisets.java | 143 + .../common/collect/SortedSetMultimap.java | 30 + .../common/collect/SparseImmutableTable.java | 105 + .../collect/StandardRowSortedTable.java | 97 + .../google/common/collect/StandardTable.java | 898 ++++ .../google/common/collect/Synchronized.java | 2471 +++++++++++ src/com/google/common/collect/Table.java | 67 + src/com/google/common/collect/Tables.java | 466 ++ .../common/collect/TransformedIterator.java | 35 + .../collect/TransformedListIterator.java | 52 + .../google/common/collect/TreeBasedTable.java | 245 + .../google/common/collect/TreeMultimap.java | 144 + .../google/common/collect/TreeMultiset.java | 869 ++++ .../google/common/collect/TreeRangeMap.java | 526 +++ .../google/common/collect/TreeRangeSet.java | 694 +++ .../google/common/collect/TreeTraverser.java | 158 + .../common/collect/UnmodifiableIterator.java | 20 + .../collect/UnmodifiableListIterator.java | 28 + .../collect/UnmodifiableSortedMultiset.java | 92 + .../common/collect/UsingToStringOrdering.java | 32 + .../google/common/collect/WellBehavedMap.java | 81 + .../google/common/collect/package-info.java | 8 + .../common/escape/ArrayBasedCharEscaper.java | 62 + .../common/escape/ArrayBasedEscaperMap.java | 44 + .../escape/ArrayBasedUnicodeEscaper.java | 81 + src/com/google/common/escape/CharEscaper.java | 81 + .../common/escape/CharEscaperBuilder.java | 74 + src/com/google/common/escape/Escaper.java | 29 + src/com/google/common/escape/Escapers.java | 147 + src/com/google/common/escape/Platform.java | 24 + .../google/common/escape/UnicodeEscaper.java | 119 + .../google/common/escape/package-info.java | 8 + .../eventbus/AllowConcurrentEvents.java | 16 + .../eventbus/AnnotatedSubscriberFinder.java | 114 + .../google/common/eventbus/AsyncEventBus.java | 60 + src/com/google/common/eventbus/DeadEvent.java | 26 + src/com/google/common/eventbus/EventBus.java | 214 + .../common/eventbus/EventSubscriber.java | 69 + src/com/google/common/eventbus/Subscribe.java | 16 + .../eventbus/SubscriberExceptionContext.java | 38 + .../eventbus/SubscriberExceptionHandler.java | 10 + .../eventbus/SubscriberFindingStrategy.java | 11 + .../eventbus/SynchronizedEventSubscriber.java | 26 + .../common/hash/AbstractByteHasher.java | 94 + .../hash/AbstractCompositeHashFunction.java | 146 + .../google/common/hash/AbstractHasher.java | 42 + .../AbstractNonStreamingHashFunction.java | 156 + .../hash/AbstractStreamingHashFunction.java | 195 + src/com/google/common/hash/BloomFilter.java | 213 + .../common/hash/BloomFilterStrategies.java | 164 + .../common/hash/ChecksumHashFunction.java | 71 + .../common/hash/Crc32cHashFunction.java | 49 + src/com/google/common/hash/Funnel.java | 14 + src/com/google/common/hash/Funnels.java | 220 + src/com/google/common/hash/HashCode.java | 267 ++ src/com/google/common/hash/HashFunction.java | 33 + src/com/google/common/hash/Hasher.java | 54 + src/com/google/common/hash/Hashing.java | 331 ++ .../common/hash/HashingInputStream.java | 60 + .../common/hash/HashingOutputStream.java | 45 + .../hash/MessageDigestHashFunction.java | 143 + .../common/hash/Murmur3_128HashFunction.java | 182 + .../common/hash/Murmur3_32HashFunction.java | 146 + src/com/google/common/hash/PrimitiveSink.java | 34 + .../google/common/hash/SipHashFunction.java | 134 + src/com/google/common/hash/package-info.java | 8 + src/com/google/common/html/HtmlEscapers.java | 22 + src/com/google/common/html/package-info.java | 8 + .../google/common/io/AppendableWriter.java | 88 + src/com/google/common/io/BaseEncoding.java | 610 +++ .../google/common/io/ByteArrayDataInput.java | 54 + .../google/common/io/ByteArrayDataOutput.java | 54 + src/com/google/common/io/ByteProcessor.java | 14 + src/com/google/common/io/ByteSink.java | 86 + src/com/google/common/io/ByteSource.java | 452 ++ src/com/google/common/io/ByteStreams.java | 593 +++ .../google/common/io/CharSequenceReader.java | 106 + src/com/google/common/io/CharSink.java | 80 + src/com/google/common/io/CharSource.java | 291 ++ src/com/google/common/io/CharStreams.java | 183 + src/com/google/common/io/Closeables.java | 56 + src/com/google/common/io/Closer.java | 144 + .../google/common/io/CountingInputStream.java | 68 + .../common/io/CountingOutputStream.java | 41 + .../common/io/FileBackedOutputStream.java | 157 + src/com/google/common/io/FileWriteMode.java | 9 + src/com/google/common/io/Files.java | 457 ++ src/com/google/common/io/Flushables.java | 39 + src/com/google/common/io/GwtWorkarounds.java | 190 + src/com/google/common/io/InputSupplier.java | 11 + src/com/google/common/io/LineBuffer.java | 59 + src/com/google/common/io/LineProcessor.java | 14 + src/com/google/common/io/LineReader.java | 48 + .../io/LittleEndianDataInputStream.java | 126 + .../io/LittleEndianDataOutputStream.java | 95 + .../google/common/io/MultiInputStream.java | 98 + src/com/google/common/io/MultiReader.java | 77 + src/com/google/common/io/OutputSupplier.java | 11 + .../common/io/PatternFilenameFilter.java | 30 + src/com/google/common/io/Resources.java | 97 + src/com/google/common/io/package-info.java | 8 + .../google/common/math/BigIntegerMath.java | 277 ++ src/com/google/common/math/DoubleMath.java | 260 ++ src/com/google/common/math/DoubleUtils.java | 71 + src/com/google/common/math/IntMath.java | 343 ++ src/com/google/common/math/LongMath.java | 414 ++ .../google/common/math/MathPreconditions.java | 95 + src/com/google/common/math/package-info.java | 8 + src/com/google/common/net/HostAndPort.java | 158 + src/com/google/common/net/HostSpecifier.java | 85 + src/com/google/common/net/HttpHeaders.java | 98 + src/com/google/common/net/InetAddresses.java | 480 ++ .../google/common/net/InternetDomainName.java | 179 + src/com/google/common/net/MediaType.java | 398 ++ src/com/google/common/net/PercentEscaper.java | 125 + src/com/google/common/net/UrlEscapers.java | 34 + src/com/google/common/net/package-info.java | 8 + .../google/common/primitives/Booleans.java | 290 ++ src/com/google/common/primitives/Bytes.java | 240 + src/com/google/common/primitives/Chars.java | 338 ++ src/com/google/common/primitives/Doubles.java | 371 ++ src/com/google/common/primitives/Floats.java | 356 ++ src/com/google/common/primitives/Ints.java | 438 ++ src/com/google/common/primitives/Longs.java | 389 ++ .../common/primitives/ParseRequest.java | 40 + .../google/common/primitives/Primitives.java | 63 + src/com/google/common/primitives/Shorts.java | 373 ++ .../google/common/primitives/SignedBytes.java | 93 + .../common/primitives/UnsignedBytes.java | 227 + .../common/primitives/UnsignedInteger.java | 125 + .../common/primitives/UnsignedInts.java | 132 + .../common/primitives/UnsignedLong.java | 137 + .../common/primitives/UnsignedLongs.java | 205 + .../common/primitives/package-info.java | 8 + .../reflect/AbstractInvocationHandler.java | 59 + src/com/google/common/reflect/ClassPath.java | 342 ++ src/com/google/common/reflect/Element.java | 138 + .../reflect/ImmutableTypeToInstanceMap.java | 81 + src/com/google/common/reflect/Invokable.java | 236 + .../reflect/MutableTypeToInstanceMap.java | 134 + src/com/google/common/reflect/Parameter.java | 95 + src/com/google/common/reflect/Reflection.java | 42 + .../google/common/reflect/TypeCapture.java | 19 + .../google/common/reflect/TypeParameter.java | 39 + .../google/common/reflect/TypeResolver.java | 374 ++ .../common/reflect/TypeToInstanceMap.java | 25 + src/com/google/common/reflect/TypeToken.java | 898 ++++ .../google/common/reflect/TypeVisitor.java | 68 + src/com/google/common/reflect/Types.java | 491 ++ .../google/common/reflect/package-info.java | 8 + .../concurrent/AbstractCheckedFuture.java | 58 + .../AbstractExecutionThreadService.java | 156 + .../util/concurrent/AbstractFuture.java | 185 + .../util/concurrent/AbstractIdleService.java | 145 + .../AbstractListeningExecutorService.java | 40 + .../concurrent/AbstractScheduledService.java | 334 ++ .../util/concurrent/AbstractService.java | 479 ++ .../common/util/concurrent/AsyncFunction.java | 10 + .../util/concurrent/AsyncSettableFuture.java | 59 + .../common/util/concurrent/AtomicDouble.java | 105 + .../util/concurrent/AtomicDoubleArray.java | 115 + .../common/util/concurrent/AtomicLongMap.java | 216 + .../common/util/concurrent/Atomics.java | 29 + .../common/util/concurrent/Callables.java | 85 + .../common/util/concurrent/CheckedFuture.java | 17 + .../concurrent/CycleDetectingLockFactory.java | 603 +++ .../util/concurrent/ExecutionError.java | 28 + .../common/util/concurrent/ExecutionList.java | 88 + .../util/concurrent/FakeTimeLimiter.java | 28 + .../concurrent/ForwardingBlockingQueue.java | 54 + .../concurrent/ForwardingCheckedFuture.java | 44 + .../concurrent/ForwardingExecutorService.java | 89 + .../util/concurrent/ForwardingFuture.java | 60 + .../ForwardingListenableFuture.java | 38 + .../ForwardingListeningExecutorService.java | 34 + .../util/concurrent/FutureCallback.java | 12 + .../util/concurrent/FutureFallback.java | 12 + .../common/util/concurrent/Futures.java | 931 ++++ .../util/concurrent/JdkFutureAdapters.java | 90 + .../util/concurrent/ListenableFuture.java | 12 + .../util/concurrent/ListenableFutureTask.java | 43 + .../concurrent/ListenableScheduledFuture.java | 14 + .../util/concurrent/ListenerCallQueue.java | 121 + .../concurrent/ListeningExecutorService.java | 27 + .../ListeningScheduledExecutorService.java | 24 + .../common/util/concurrent/Monitor.java | 599 +++ .../common/util/concurrent/MoreExecutors.java | 632 +++ .../common/util/concurrent/RateLimiter.java | 191 + .../common/util/concurrent/Runnables.java | 25 + .../util/concurrent/SerializingExecutor.java | 116 + .../common/util/concurrent/Service.java | 104 + .../util/concurrent/ServiceManager.java | 528 +++ .../util/concurrent/SettableFuture.java | 27 + .../util/concurrent/SimpleTimeLimiter.java | 137 + .../util/concurrent/SmoothRateLimiter.java | 121 + .../common/util/concurrent/Striped.java | 301 ++ .../util/concurrent/ThreadFactoryBuilder.java | 78 + .../common/util/concurrent/TimeLimiter.java | 15 + .../concurrent/UncaughtExceptionHandlers.java | 45 + .../UncheckedExecutionException.java | 28 + .../concurrent/UncheckedTimeoutException.java | 26 + .../util/concurrent/Uninterruptibles.java | 250 ++ .../concurrent/WrappingExecutorService.java | 117 + .../WrappingScheduledExecutorService.java | 41 + .../common/util/concurrent/package-info.java | 8 + src/com/google/common/xml/XmlEscapers.java | 51 + src/com/google/common/xml/package-info.java | 8 + .../google/gson/DefaultDateTypeAdapter.java | 114 + src/com/google/gson/ExclusionStrategy.java | 15 + src/com/google/gson/FieldAttributes.java | 59 + src/com/google/gson/FieldNamingPolicy.java | 83 + src/com/google/gson/FieldNamingStrategy.java | 10 + src/com/google/gson/Gson.java | 514 +++ src/com/google/gson/GsonBuilder.java | 204 + src/com/google/gson/InstanceCreator.java | 13 + src/com/google/gson/JsonArray.java | 158 + .../gson/JsonDeserializationContext.java | 15 + src/com/google/gson/JsonDeserializer.java | 16 + src/com/google/gson/JsonElement.java | 128 + src/com/google/gson/JsonIOException.java | 23 + src/com/google/gson/JsonNull.java | 27 + src/com/google/gson/JsonObject.java | 92 + src/com/google/gson/JsonParseException.java | 21 + src/com/google/gson/JsonParser.java | 60 + src/com/google/gson/JsonPrimitive.java | 180 + .../google/gson/JsonSerializationContext.java | 13 + src/com/google/gson/JsonSerializer.java | 15 + src/com/google/gson/JsonStreamParser.java | 78 + src/com/google/gson/JsonSyntaxException.java | 23 + .../google/gson/LongSerializationPolicy.java | 29 + src/com/google/gson/TreeTypeAdapter.java | 109 + src/com/google/gson/TypeAdapter.java | 90 + src/com/google/gson/TypeAdapterFactory.java | 15 + src/com/google/gson/annotations/Expose.java | 17 + .../gson/annotations/SerializedName.java | 15 + src/com/google/gson/annotations/Since.java | 15 + src/com/google/gson/annotations/Until.java | 15 + .../gson/internal/ConstructorConstructor.java | 208 + src/com/google/gson/internal/Excluder.java | 198 + .../internal/JsonReaderInternalAccess.java | 13 + .../gson/internal/LazilyParsedNumber.java | 55 + .../google/gson/internal/LinkedTreeMap.java | 540 +++ .../gson/internal/ObjectConstructor.java | 11 + src/com/google/gson/internal/Primitives.java | 60 + src/com/google/gson/internal/Streams.java | 96 + .../google/gson/internal/UnsafeAllocator.java | 71 + .../gson/internal/bind/ArrayTypeAdapter.java | 81 + .../bind/CollectionTypeAdapterFactory.java | 88 + .../gson/internal/bind/DateTypeAdapter.java | 81 + .../gson/internal/bind/JsonTreeReader.java | 211 + .../gson/internal/bind/JsonTreeWriter.java | 174 + .../internal/bind/MapTypeAdapterFactory.java | 176 + .../gson/internal/bind/ObjectTypeAdapter.java | 91 + .../bind/ReflectiveTypeAdapterFactory.java | 189 + .../internal/bind/SqlDateTypeAdapter.java | 53 + .../gson/internal/bind/TimeTypeAdapter.java | 54 + .../bind/TypeAdapterRuntimeTypeWrapper.java | 53 + .../gson/internal/bind/TypeAdapters.java | 838 ++++ src/com/google/gson/reflect/TypeToken.java | 181 + src/com/google/gson/stream/JsonReader.java | 1127 +++++ src/com/google/gson/stream/JsonScope.java | 18 + src/com/google/gson/stream/JsonToken.java | 21 + src/com/google/gson/stream/JsonWriter.java | 337 ++ .../gson/stream/MalformedJsonException.java | 24 + .../publicsuffix/PublicSuffixPatterns.java | 21 + .../publicsuffix/PublicSuffixType.java | 41 + .../thirdparty/publicsuffix/TrieParser.java | 71 + src/com/mojang/UUIDTypeAdapter.java | 31 + src/com/mojang/authlib/Agent.java | 28 + .../mojang/authlib/AuthenticationService.java | 17 + .../authlib/BaseAuthenticationService.java | 10 + .../authlib/BaseUserAuthentication.java | 246 + src/com/mojang/authlib/GameProfile.java | 68 + .../mojang/authlib/GameProfileRepository.java | 11 + .../authlib/HttpAuthenticationService.java | 176 + .../authlib/HttpUserAuthentication.java | 19 + .../mojang/authlib/ProfileLookupCallback.java | 12 + .../mojang/authlib/UserAuthentication.java | 44 + src/com/mojang/authlib/UserType.java | 34 + .../exceptions/AuthenticationException.java | 22 + .../AuthenticationUnavailableException.java | 24 + .../InvalidCredentialsException.java | 24 + .../exceptions/UserMigratedException.java | 24 + .../legacy/LegacyAuthenticationService.java | 38 + .../legacy/LegacyMinecraftSessionService.java | 75 + .../legacy/LegacyUserAuthentication.java | 108 + .../BaseMinecraftSessionService.java | 20 + .../HttpMinecraftSessionService.java | 19 + .../minecraft/InsecureTextureException.java | 49 + .../minecraft/MinecraftProfileTexture.java | 45 + .../minecraft/MinecraftSessionService.java | 20 + .../mojang/authlib/properties/Property.java | 62 + .../authlib/properties/PropertyMap.java | 80 + .../yggdrasil/ProfileIncompleteException.java | 22 + .../yggdrasil/ProfileNotFoundException.java | 22 + .../YggdrasilAuthenticationService.java | 156 + .../YggdrasilGameProfileRepository.java | 89 + .../YggdrasilMinecraftSessionService.java | 169 + .../YggdrasilUserAuthentication.java | 226 + .../request/AuthenticationRequest.java | 22 + .../yggdrasil/request/InvalidateRequest.java | 16 + .../request/JoinMinecraftServerRequest.java | 12 + .../yggdrasil/request/RefreshRequest.java | 24 + .../yggdrasil/request/ValidateRequest.java | 16 + .../response/AuthenticationResponse.java | 37 + .../HasJoinedMinecraftServerResponse.java | 22 + .../MinecraftProfilePropertiesResponse.java | 27 + .../response/MinecraftTexturesPayload.java | 36 + .../ProfileSearchResultsResponse.java | 50 + .../yggdrasil/response/RefreshResponse.java | 37 + .../authlib/yggdrasil/response/Response.java | 34 + .../authlib/yggdrasil/response/User.java | 19 + src/com/mojang/launcher/Http.java | 62 + src/com/mojang/launcher/Launcher.java | 87 + .../launcher/LegacyPropertyMapSerializer.java | 30 + src/com/mojang/launcher/OperatingSystem.java | 112 + .../launcher/SharedLauncherConstants.java | 9 + src/com/mojang/launcher/UserInterface.java | 28 + .../events/GameOutputLogProcessor.java | 10 + .../events/RefreshedVersionsListener.java | 10 + .../launcher/game/GameInstanceStatus.java | 27 + .../game/process/AbstractGameProcess.java | 44 + .../launcher/game/process/GameProcess.java | 27 + .../game/process/GameProcessBuilder.java | 86 + .../game/process/GameProcessFactory.java | 12 + .../game/process/GameProcessRunnable.java | 10 + .../process/direct/DirectGameProcess.java | 68 + .../direct/DirectGameProcessFactory.java | 20 + .../direct/DirectProcessInputMonitor.java | 55 + .../game/runner/AbstractGameRunner.java | 229 + .../launcher/game/runner/GameRunner.java | 18 + .../game/runner/GameRunnerListener.java | 11 + .../launcher/updater/DateTypeAdapter.java | 84 + .../launcher/updater/DownloadProgress.java | 34 + .../ExceptionalThreadPoolExecutor.java | 80 + .../launcher/updater/FileTypeAdapter.java | 31 + .../LowerCaseEnumTypeAdapterFactory.java | 54 + .../launcher/updater/VersionFilter.java | 55 + .../launcher/updater/VersionManager.java | 49 + .../launcher/updater/VersionSyncInfo.java | 70 + .../download/ChecksummedDownloadable.java | 118 + .../updater/download/DownloadJob.java | 172 + .../updater/download/DownloadListener.java | 12 + .../updater/download/Downloadable.java | 192 + .../updater/download/EtagDownloadable.java | 75 + .../download/MonitoringInputStream.java | 55 + .../updater/download/ProgressContainer.java | 63 + .../download/assets/AssetDownloadable.java | 142 + .../updater/download/assets/AssetIndex.java | 95 + .../launcher/versions/CompatibilityRule.java | 112 + .../launcher/versions/CompleteVersion.java | 33 + .../launcher/versions/ExtractRules.java | 41 + .../mojang/launcher/versions/ReleaseType.java | 8 + .../versions/ReleaseTypeAdapterFactory.java | 30 + .../launcher/versions/ReleaseTypeFactory.java | 15 + src/com/mojang/launcher/versions/Version.java | 17 + src/com/mojang/util/QueueLogAppender.java | 77 + src/com/mojang/util/UUIDTypeAdapter.java | 31 + src/{main => }/dirt.png | Bin src/{main => }/favicon.png | Bin src/javax/annotation/CheckForNull.java | 18 + src/javax/annotation/CheckForSigned.java | 18 + src/javax/annotation/CheckReturnValue.java | 18 + src/javax/annotation/Detainted.java | 18 + src/javax/annotation/MatchesPattern.java | 38 + src/javax/annotation/Nonnegative.java | 46 + src/javax/annotation/Nonnull.java | 32 + src/javax/annotation/Nullable.java | 18 + .../OverridingMethodsMustInvokeSuper.java | 16 + .../ParametersAreNonnullByDefault.java | 18 + .../ParametersAreNullableByDefault.java | 18 + src/javax/annotation/PropertyKey.java | 17 + src/javax/annotation/RegEx.java | 42 + src/javax/annotation/Signed.java | 18 + src/javax/annotation/Syntax.java | 19 + src/javax/annotation/Tainted.java | 18 + src/javax/annotation/Untainted.java | 17 + src/javax/annotation/WillClose.java | 13 + src/javax/annotation/WillCloseWhenClosed.java | 13 + src/javax/annotation/WillNotClose.java | 13 + .../annotation/concurrent/GuardedBy.java | 15 + .../annotation/concurrent/Immutable.java | 16 + .../annotation/concurrent/NotThreadSafe.java | 16 + .../annotation/concurrent/ThreadSafe.java | 16 + src/javax/annotation/meta/Exclusive.java | 13 + src/javax/annotation/meta/Exhaustive.java | 13 + src/javax/annotation/meta/TypeQualifier.java | 20 + .../annotation/meta/TypeQualifierDefault.java | 17 + .../meta/TypeQualifierNickname.java | 13 + .../meta/TypeQualifierValidator.java | 16 + src/javax/annotation/meta/When.java | 15 + src/javax/xml/namespace/QName.java | 90 + src/joptsimple/AbstractOptionSpec.java | 134 + src/joptsimple/AlternativeLongOptionSpec.java | 30 + .../ArgumentAcceptingOptionSpec.java | 186 + src/joptsimple/ArgumentList.java | 31 + src/joptsimple/BuiltinHelpFormatter.java | 200 + src/joptsimple/HelpFormatter.java | 14 + .../IllegalOptionSpecificationException.java | 20 + .../MissingRequiredOptionException.java | 24 + .../MultipleArgumentsForOptionException.java | 24 + src/joptsimple/NoArgumentOptionSpec.java | 65 + src/joptsimple/NonOptionArgumentSpec.java | 95 + .../OptionArgumentConversionException.java | 28 + src/joptsimple/OptionDescriptor.java | 30 + src/joptsimple/OptionException.java | 57 + ...ptionMissingRequiredArgumentException.java | 24 + src/joptsimple/OptionParser.java | 297 ++ src/joptsimple/OptionParserState.java | 60 + src/joptsimple/OptionSet.java | 154 + src/joptsimple/OptionSpec.java | 21 + src/joptsimple/OptionSpecBuilder.java | 66 + src/joptsimple/OptionSpecTokenizer.java | 95 + .../OptionalArgumentOptionSpec.java | 49 + src/joptsimple/ParserRules.java | 60 + .../RequiredArgumentOptionSpec.java | 33 + ...acceptableNumberOfNonOptionsException.java | 26 + .../UnconfiguredOptionException.java | 29 + .../UnrecognizedOptionException.java | 20 + src/joptsimple/ValueConversionException.java | 17 + src/joptsimple/ValueConverter.java | 15 + src/joptsimple/internal/AbbreviationMap.java | 139 + src/joptsimple/internal/Classes.java | 38 + src/joptsimple/internal/Columns.java | 77 + .../ConstructorInvokingValueConverter.java | 35 + .../MethodInvokingValueConverter.java | 37 + src/joptsimple/internal/Objects.java | 16 + src/joptsimple/internal/Reflection.java | 98 + .../internal/ReflectionException.java | 13 + src/joptsimple/internal/Row.java | 29 + src/joptsimple/internal/Rows.java | 73 + src/joptsimple/internal/Strings.java | 52 + src/joptsimple/util/DateConverter.java | 60 + src/joptsimple/util/InetAddressConverter.java | 35 + src/joptsimple/util/KeyValuePair.java | 40 + src/joptsimple/util/RegexMatcher.java | 42 + src/{main => }/langs/cs.yml | 0 src/{main => }/langs/de.yml | 0 src/{main => }/langs/ea.yml | 0 src/{main => }/langs/en.yml | 0 src/{main => }/langs/es.yml | 0 src/{main => }/langs/et.yml | 0 src/{main => }/langs/fi.yml | 0 src/{main => }/langs/fr.yml | 0 src/{main => }/langs/hr.yml | 0 src/{main => }/langs/hu.yml | 0 src/{main => }/langs/it.yml | 0 src/{main => }/langs/pl.yml | 0 src/{main => }/langs/pt.yml | 0 src/{main => }/langs/ru.yml | 0 src/{main => }/langs/tl.yml | 0 src/{main => }/langs/tr.yml | 0 src/{main => }/langs/vi.yml | 0 src/{main => }/launcher_properties.json | 0 src/{main => }/log4j2.xml | 0 .../mc/nbt/error/TagNotFoundException.java | 23 - .../nbt/error/UnexpectedTagTypeException.java | 23 - .../evilco/mc/nbt/stream/NbtInputStream.java | 40 - .../evilco/mc/nbt/stream/NbtOutputStream.java | 17 - .../com/evilco/mc/nbt/tag/AbstractTag.java | 76 - .../mc/nbt/tag/IAnonymousTagContainer.java | 15 - .../evilco/mc/nbt/tag/INamedTagContainer.java | 18 - src/main/com/evilco/mc/nbt/tag/ITag.java | 25 - .../com/evilco/mc/nbt/tag/ITagContainer.java | 7 - src/main/com/evilco/mc/nbt/tag/TagByte.java | 37 - .../com/evilco/mc/nbt/tag/TagByteArray.java | 43 - .../com/evilco/mc/nbt/tag/TagCompound.java | 175 - src/main/com/evilco/mc/nbt/tag/TagDouble.java | 37 - src/main/com/evilco/mc/nbt/tag/TagFloat.java | 37 - .../com/evilco/mc/nbt/tag/TagInteger.java | 37 - .../evilco/mc/nbt/tag/TagIntegerArray.java | 54 - src/main/com/evilco/mc/nbt/tag/TagList.java | 90 - src/main/com/evilco/mc/nbt/tag/TagLong.java | 37 - src/main/com/evilco/mc/nbt/tag/TagShort.java | 37 - src/main/com/evilco/mc/nbt/tag/TagString.java | 42 - src/main/com/evilco/mc/nbt/tag/TagType.java | 45 - .../com/google/common/annotations/Beta.java | 14 - .../common/annotations/GwtCompatible.java | 17 - .../common/annotations/GwtIncompatible.java | 15 - .../common/annotations/VisibleForTesting.java | 5 - src/main/com/google/common/base/Absent.java | 69 - .../google/common/base/AbstractIterator.java | 67 - src/main/com/google/common/base/Ascii.java | 183 - .../com/google/common/base/CaseFormat.java | 154 - .../com/google/common/base/CharMatcher.java | 988 ----- src/main/com/google/common/base/Charsets.java | 25 - .../com/google/common/base/Converter.java | 272 -- src/main/com/google/common/base/Defaults.java | 36 - src/main/com/google/common/base/Enums.java | 108 - .../com/google/common/base/Equivalence.java | 175 - .../base/FinalizablePhantomReference.java | 10 - .../common/base/FinalizableReference.java | 5 - .../base/FinalizableReferenceQueue.java | 179 - .../common/base/FinalizableSoftReference.java | 10 - .../common/base/FinalizableWeakReference.java | 10 - src/main/com/google/common/base/Function.java | 12 - .../common/base/FunctionalEquivalence.java | 48 - .../com/google/common/base/Functions.java | 277 -- src/main/com/google/common/base/Joiner.java | 269 -- .../com/google/common/base/MoreObjects.java | 170 - src/main/com/google/common/base/Objects.java | 180 - src/main/com/google/common/base/Optional.java | 81 - .../common/base/PairwiseEquivalence.java | 60 - src/main/com/google/common/base/Platform.java | 25 - .../com/google/common/base/Preconditions.java | 161 - .../com/google/common/base/Predicate.java | 11 - .../com/google/common/base/Predicates.java | 536 --- src/main/com/google/common/base/Present.java | 69 - .../google/common/base/SmallCharMatcher.java | 106 - src/main/com/google/common/base/Splitter.java | 310 -- .../common/base/StandardSystemProperty.java | 59 - .../com/google/common/base/Stopwatch.java | 123 - src/main/com/google/common/base/Strings.java | 119 - src/main/com/google/common/base/Supplier.java | 8 - .../com/google/common/base/Suppliers.java | 213 - .../com/google/common/base/Throwables.java | 68 - src/main/com/google/common/base/Ticker.java | 23 - src/main/com/google/common/base/Utf8.java | 123 - src/main/com/google/common/base/Verify.java | 33 - .../google/common/base/VerifyException.java | 16 - .../common/base/internal/Finalizer.java | 103 - .../com/google/common/base/package-info.java | 8 - .../google/common/cache/AbstractCache.java | 148 - .../common/cache/AbstractLoadingCache.java | 45 - src/main/com/google/common/cache/Cache.java | 39 - .../com/google/common/cache/CacheBuilder.java | 388 -- .../google/common/cache/CacheBuilderSpec.java | 325 -- .../com/google/common/cache/CacheLoader.java | 108 - .../com/google/common/cache/CacheStats.java | 111 - .../google/common/cache/ForwardingCache.java | 81 - .../common/cache/ForwardingLoadingCache.java | 47 - .../com/google/common/cache/LoadingCache.java | 26 - .../com/google/common/cache/LocalCache.java | 3792 ---------------- .../com/google/common/cache/LongAddable.java | 12 - .../com/google/common/cache/LongAddables.java | 58 - .../com/google/common/cache/LongAdder.java | 117 - .../com/google/common/cache/RemovalCause.java | 44 - .../google/common/cache/RemovalListener.java | 10 - .../google/common/cache/RemovalListeners.java | 25 - .../common/cache/RemovalNotification.java | 68 - .../com/google/common/cache/Striped64.java | 229 - src/main/com/google/common/cache/Weigher.java | 10 - .../com/google/common/cache/package-info.java | 8 - .../google/common/collect/AbstractBiMap.java | 364 -- .../collect/AbstractIndexedListIterator.java | 55 - .../common/collect/AbstractIterator.java | 71 - .../common/collect/AbstractListMultimap.java | 46 - .../collect/AbstractMapBasedMultimap.java | 1183 ----- .../collect/AbstractMapBasedMultiset.java | 222 - .../common/collect/AbstractMapEntry.java | 38 - .../common/collect/AbstractMultimap.java | 198 - .../common/collect/AbstractMultiset.java | 149 - .../common/collect/AbstractNavigableMap.java | 155 - .../common/collect/AbstractRangeSet.java | 84 - .../collect/AbstractSequentialIterator.java | 35 - .../common/collect/AbstractSetMultimap.java | 51 - .../AbstractSortedKeySortedSetMultimap.java | 25 - .../collect/AbstractSortedMultiset.java | 104 - .../collect/AbstractSortedSetMultimap.java | 45 - .../google/common/collect/AbstractTable.java | 176 - .../common/collect/AllEqualOrdering.java | 38 - .../common/collect/ArrayListMultimap.java | 86 - .../com/google/common/collect/ArrayTable.java | 460 -- src/main/com/google/common/collect/BiMap.java | 19 - .../common/collect/BinaryTreeTraverser.java | 156 - .../com/google/common/collect/BoundType.java | 31 - .../common/collect/ByFunctionOrdering.java | 47 - .../google/common/collect/CartesianList.java | 102 - .../common/collect/ClassToInstanceMap.java | 12 - .../common/collect/CollectPreconditions.java | 31 - .../google/common/collect/Collections2.java | 424 -- .../common/collect/ComparatorOrdering.java | 42 - .../common/collect/ComparisonChain.java | 130 - .../common/collect/CompoundOrdering.java | 54 - .../common/collect/ComputationException.java | 13 - .../collect/ComputingConcurrentHashMap.java | 339 -- .../collect/ConcurrentHashMultiset.java | 393 -- .../com/google/common/collect/Constraint.java | 10 - .../google/common/collect/Constraints.java | 220 - .../google/common/collect/ContiguousSet.java | 96 - src/main/com/google/common/collect/Count.java | 50 - src/main/com/google/common/collect/Cut.java | 358 -- .../common/collect/DenseImmutableTable.java | 249 -- .../DescendingImmutableSortedMultiset.java | 51 - .../collect/DescendingImmutableSortedSet.java | 73 - .../common/collect/DescendingMultiset.java | 103 - .../google/common/collect/DiscreteDomain.java | 142 - .../common/collect/EmptyContiguousSet.java | 125 - .../common/collect/EmptyImmutableBiMap.java | 55 - .../collect/EmptyImmutableListMultimap.java | 19 - .../common/collect/EmptyImmutableSet.java | 75 - .../collect/EmptyImmutableSetMultimap.java | 20 - .../collect/EmptyImmutableSortedMap.java | 77 - .../collect/EmptyImmutableSortedMultiset.java | 79 - .../collect/EmptyImmutableSortedSet.java | 101 - .../com/google/common/collect/EnumBiMap.java | 89 - .../google/common/collect/EnumHashBiMap.java | 67 - .../google/common/collect/EnumMultiset.java | 58 - .../google/common/collect/EvictingQueue.java | 67 - .../common/collect/ExplicitOrdering.java | 67 - .../common/collect/FilteredEntryMultimap.java | 336 -- .../collect/FilteredEntrySetMultimap.java | 37 - .../collect/FilteredKeyListMultimap.java | 29 - .../common/collect/FilteredKeyMultimap.java | 166 - .../collect/FilteredKeySetMultimap.java | 52 - .../common/collect/FilteredMultimap.java | 12 - .../collect/FilteredMultimapValues.java | 62 - .../common/collect/FilteredSetMultimap.java | 8 - .../google/common/collect/FluentIterable.java | 217 - .../collect/ForwardingBlockingDeque.java | 72 - .../common/collect/ForwardingCollection.java | 121 - .../collect/ForwardingConcurrentMap.java | 28 - .../common/collect/ForwardingDeque.java | 79 - .../ForwardingImmutableCollection.java | 11 - .../collect/ForwardingImmutableList.java | 11 - .../collect/ForwardingImmutableMap.java | 11 - .../collect/ForwardingImmutableSet.java | 11 - .../common/collect/ForwardingIterator.java | 24 - .../google/common/collect/ForwardingList.java | 110 - .../collect/ForwardingListIterator.java | 36 - .../collect/ForwardingListMultimap.java | 25 - .../google/common/collect/ForwardingMap.java | 150 - .../common/collect/ForwardingMapEntry.java | 57 - .../common/collect/ForwardingMultimap.java | 96 - .../common/collect/ForwardingMultiset.java | 137 - .../collect/ForwardingNavigableMap.java | 221 - .../collect/ForwardingNavigableSet.java | 113 - .../common/collect/ForwardingObject.java | 15 - .../common/collect/ForwardingQueue.java | 57 - .../google/common/collect/ForwardingSet.java | 35 - .../common/collect/ForwardingSetMultimap.java | 27 - .../common/collect/ForwardingSortedMap.java | 73 - .../collect/ForwardingSortedMultiset.java | 121 - .../common/collect/ForwardingSortedSet.java | 85 - .../collect/ForwardingSortedSetMultimap.java | 30 - .../common/collect/ForwardingTable.java | 98 - .../google/common/collect/GeneralRange.java | 204 - .../common/collect/GenericMapMaker.java | 68 - .../google/common/collect/HashBasedTable.java | 76 - .../com/google/common/collect/HashBiMap.java | 586 --- .../google/common/collect/HashMultimap.java | 73 - .../google/common/collect/HashMultiset.java | 53 - .../com/google/common/collect/Hashing.java | 37 - .../common/collect/ImmutableAsList.java | 55 - .../google/common/collect/ImmutableBiMap.java | 116 - .../collect/ImmutableClassToInstanceMap.java | 80 - .../common/collect/ImmutableCollection.java | 218 - .../google/common/collect/ImmutableEntry.java | 33 - .../common/collect/ImmutableEnumMap.java | 119 - .../common/collect/ImmutableEnumSet.java | 89 - .../google/common/collect/ImmutableList.java | 393 -- .../common/collect/ImmutableListMultimap.java | 225 - .../google/common/collect/ImmutableMap.java | 341 -- .../common/collect/ImmutableMapEntry.java | 42 - .../common/collect/ImmutableMapEntrySet.java | 51 - .../common/collect/ImmutableMapKeySet.java | 66 - .../common/collect/ImmutableMapValues.java | 66 - .../common/collect/ImmutableMultimap.java | 427 -- .../common/collect/ImmutableMultiset.java | 356 -- .../common/collect/ImmutableRangeMap.java | 218 - .../common/collect/ImmutableRangeSet.java | 476 -- .../google/common/collect/ImmutableSet.java | 244 - .../common/collect/ImmutableSetMultimap.java | 339 -- .../common/collect/ImmutableSortedAsList.java | 43 - .../common/collect/ImmutableSortedMap.java | 328 -- .../ImmutableSortedMapFauxverideShim.java | 39 - .../collect/ImmutableSortedMultiset.java | 247 -- ...ImmutableSortedMultisetFauxverideShim.java | 51 - .../common/collect/ImmutableSortedSet.java | 330 -- .../ImmutableSortedSetFauxverideShim.java | 51 - .../google/common/collect/ImmutableTable.java | 191 - .../com/google/common/collect/Interner.java | 8 - .../com/google/common/collect/Interners.java | 92 - .../com/google/common/collect/Iterables.java | 504 --- .../com/google/common/collect/Iterators.java | 694 --- .../collect/LexicographicalOrdering.java | 62 - .../common/collect/LinkedHashMultimap.java | 428 -- .../common/collect/LinkedHashMultiset.java | 53 - .../common/collect/LinkedListMultimap.java | 615 --- .../google/common/collect/ListMultimap.java | 20 - src/main/com/google/common/collect/Lists.java | 622 --- .../google/common/collect/MapConstraint.java | 13 - .../google/common/collect/MapConstraints.java | 568 --- .../google/common/collect/MapDifference.java | 32 - .../com/google/common/collect/MapMaker.java | 429 -- .../common/collect/MapMakerInternalMap.java | 2988 ------------- src/main/com/google/common/collect/Maps.java | 2323 ---------- .../common/collect/MinMaxPriorityQueue.java | 621 --- .../com/google/common/collect/Multimap.java | 51 - .../common/collect/MultimapBuilder.java | 280 -- .../com/google/common/collect/Multimaps.java | 1013 ----- .../com/google/common/collect/Multiset.java | 56 - .../com/google/common/collect/Multisets.java | 753 ---- .../collect/MutableClassToInstanceMap.java | 38 - .../common/collect/NaturalOrdering.java | 34 - .../common/collect/NullsFirstOrdering.java | 59 - .../common/collect/NullsLastOrdering.java | 59 - .../google/common/collect/ObjectArrays.java | 133 - .../com/google/common/collect/Ordering.java | 422 -- .../common/collect/PeekingIterator.java | 13 - .../com/google/common/collect/Platform.java | 52 - .../com/google/common/collect/Queues.java | 191 - src/main/com/google/common/collect/Range.java | 302 -- .../com/google/common/collect/RangeMap.java | 35 - .../com/google/common/collect/RangeSet.java | 42 - .../common/collect/RegularContiguousSet.java | 168 - .../collect/RegularImmutableAsList.java | 42 - .../common/collect/RegularImmutableBiMap.java | 287 -- .../common/collect/RegularImmutableList.java | 79 - .../common/collect/RegularImmutableMap.java | 148 - .../collect/RegularImmutableMultiset.java | 47 - .../common/collect/RegularImmutableSet.java | 73 - .../collect/RegularImmutableSortedMap.java | 94 - .../RegularImmutableSortedMultiset.java | 71 - .../collect/RegularImmutableSortedSet.java | 221 - .../common/collect/RegularImmutableTable.java | 143 - .../collect/ReverseNaturalOrdering.java | 66 - .../common/collect/ReverseOrdering.java | 79 - .../google/common/collect/RowSortedTable.java | 15 - .../google/common/collect/Serialization.java | 148 - .../google/common/collect/SetMultimap.java | 23 - src/main/com/google/common/collect/Sets.java | 862 ---- .../collect/SingletonImmutableBiMap.java | 64 - .../collect/SingletonImmutableList.java | 85 - .../common/collect/SingletonImmutableSet.java | 78 - .../collect/SingletonImmutableTable.java | 47 - .../google/common/collect/SortedIterable.java | 12 - .../common/collect/SortedIterables.java | 38 - .../google/common/collect/SortedLists.java | 151 - .../common/collect/SortedMapDifference.java | 15 - .../google/common/collect/SortedMultiset.java | 38 - .../common/collect/SortedMultisetBridge.java | 7 - .../common/collect/SortedMultisets.java | 117 - .../common/collect/SortedSetMultimap.java | 21 - .../common/collect/SparseImmutableTable.java | 109 - .../collect/StandardRowSortedTable.java | 81 - .../google/common/collect/StandardTable.java | 884 ---- .../google/common/collect/Synchronized.java | 1562 ------- src/main/com/google/common/collect/Table.java | 64 - .../com/google/common/collect/Tables.java | 379 -- .../common/collect/TransformedIterator.java | 28 - .../collect/TransformedListIterator.java | 39 - .../google/common/collect/TreeBasedTable.java | 224 - .../google/common/collect/TreeMultimap.java | 127 - .../google/common/collect/TreeMultiset.java | 877 ---- .../google/common/collect/TreeRangeMap.java | 496 --- .../google/common/collect/TreeRangeSet.java | 650 --- .../google/common/collect/TreeTraverser.java | 141 - .../common/collect/UnmodifiableIterator.java | 16 - .../collect/UnmodifiableListIterator.java | 22 - .../collect/UnmodifiableSortedMultiset.java | 72 - .../common/collect/UsingToStringOrdering.java | 27 - .../google/common/collect/WellBehavedMap.java | 64 - .../google/common/collect/package-info.java | 8 - .../common/escape/ArrayBasedCharEscaper.java | 58 - .../common/escape/ArrayBasedEscaperMap.java | 46 - .../escape/ArrayBasedUnicodeEscaper.java | 83 - .../com/google/common/escape/CharEscaper.java | 85 - .../common/escape/CharEscaperBuilder.java | 80 - .../com/google/common/escape/Escaper.java | 24 - .../com/google/common/escape/Escapers.java | 159 - .../com/google/common/escape/Platform.java | 21 - .../google/common/escape/UnicodeEscaper.java | 127 - .../google/common/escape/package-info.java | 8 - .../eventbus/AllowConcurrentEvents.java | 13 - .../eventbus/AnnotatedSubscriberFinder.java | 121 - .../google/common/eventbus/AsyncEventBus.java | 52 - .../com/google/common/eventbus/DeadEvent.java | 23 - .../com/google/common/eventbus/EventBus.java | 209 - .../common/eventbus/EventSubscriber.java | 67 - .../com/google/common/eventbus/Subscribe.java | 13 - .../eventbus/SubscriberExceptionContext.java | 34 - .../eventbus/SubscriberExceptionHandler.java | 5 - .../eventbus/SubscriberFindingStrategy.java | 7 - .../eventbus/SynchronizedEventSubscriber.java | 16 - .../common/hash/AbstractByteHasher.java | 78 - .../hash/AbstractCompositeHashFunction.java | 193 - .../google/common/hash/AbstractHasher.java | 31 - .../AbstractNonStreamingHashFunction.java | 127 - .../hash/AbstractStreamingHashFunction.java | 176 - .../com/google/common/hash/BloomFilter.java | 217 - .../common/hash/BloomFilterStrategies.java | 178 - .../common/hash/ChecksumHashFunction.java | 58 - .../common/hash/Crc32cHashFunction.java | 29 - src/main/com/google/common/hash/Funnel.java | 9 - src/main/com/google/common/hash/Funnels.java | 199 - src/main/com/google/common/hash/HashCode.java | 250 -- .../com/google/common/hash/HashFunction.java | 27 - src/main/com/google/common/hash/Hasher.java | 35 - src/main/com/google/common/hash/Hashing.java | 326 -- .../common/hash/HashingInputStream.java | 50 - .../common/hash/HashingOutputStream.java | 35 - .../hash/MessageDigestHashFunction.java | 133 - .../common/hash/Murmur3_128HashFunction.java | 156 - .../common/hash/Murmur3_32HashFunction.java | 135 - .../com/google/common/hash/PrimitiveSink.java | 31 - .../google/common/hash/SipHashFunction.java | 122 - .../com/google/common/hash/package-info.java | 8 - .../com/google/common/html/HtmlEscapers.java | 19 - .../com/google/common/html/package-info.java | 8 - .../google/common/io/AppendableWriter.java | 77 - .../com/google/common/io/BaseEncoding.java | 589 --- .../google/common/io/ByteArrayDataInput.java | 35 - .../google/common/io/ByteArrayDataOutput.java | 37 - .../com/google/common/io/ByteProcessor.java | 11 - src/main/com/google/common/io/ByteSink.java | 84 - src/main/com/google/common/io/ByteSource.java | 441 -- .../com/google/common/io/ByteStreams.java | 544 --- .../google/common/io/CharSequenceReader.java | 99 - src/main/com/google/common/io/CharSink.java | 80 - src/main/com/google/common/io/CharSource.java | 290 -- .../com/google/common/io/CharStreams.java | 163 - src/main/com/google/common/io/Closeables.java | 51 - src/main/com/google/common/io/Closer.java | 136 - .../google/common/io/CountingInputStream.java | 61 - .../common/io/CountingOutputStream.java | 34 - .../common/io/FileBackedOutputStream.java | 172 - .../com/google/common/io/FileWriteMode.java | 5 - src/main/com/google/common/io/Files.java | 474 -- src/main/com/google/common/io/Flushables.java | 37 - .../com/google/common/io/GwtWorkarounds.java | 170 - .../com/google/common/io/InputSupplier.java | 9 - src/main/com/google/common/io/LineBuffer.java | 53 - .../com/google/common/io/LineProcessor.java | 11 - src/main/com/google/common/io/LineReader.java | 48 - .../io/LittleEndianDataInputStream.java | 107 - .../io/LittleEndianDataOutputStream.java | 79 - .../google/common/io/MultiInputStream.java | 85 - .../com/google/common/io/MultiReader.java | 70 - .../com/google/common/io/OutputSupplier.java | 9 - .../common/io/PatternFilenameFilter.java | 25 - src/main/com/google/common/io/Resources.java | 92 - .../com/google/common/io/package-info.java | 8 - .../google/common/math/BigIntegerMath.java | 280 -- .../com/google/common/math/DoubleMath.java | 281 -- .../com/google/common/math/DoubleUtils.java | 68 - src/main/com/google/common/math/IntMath.java | 327 -- src/main/com/google/common/math/LongMath.java | 407 -- .../google/common/math/MathPreconditions.java | 94 - .../com/google/common/math/package-info.java | 8 - .../com/google/common/net/HostAndPort.java | 171 - .../com/google/common/net/HostSpecifier.java | 101 - .../com/google/common/net/HttpHeaders.java | 95 - .../com/google/common/net/InetAddresses.java | 551 --- .../google/common/net/InternetDomainName.java | 190 - src/main/com/google/common/net/MediaType.java | 498 --- .../com/google/common/net/PercentEscaper.java | 145 - .../com/google/common/net/UrlEscapers.java | 30 - .../com/google/common/net/package-info.java | 8 - .../google/common/primitives/Booleans.java | 318 -- .../com/google/common/primitives/Bytes.java | 259 -- .../com/google/common/primitives/Chars.java | 366 -- .../com/google/common/primitives/Doubles.java | 391 -- .../com/google/common/primitives/Floats.java | 375 -- .../com/google/common/primitives/Ints.java | 464 -- .../com/google/common/primitives/Longs.java | 417 -- .../common/primitives/ParseRequest.java | 41 - .../google/common/primitives/Primitives.java | 60 - .../com/google/common/primitives/Shorts.java | 394 -- .../google/common/primitives/SignedBytes.java | 97 - .../common/primitives/UnsignedBytes.java | 229 - .../common/primitives/UnsignedInteger.java | 117 - .../common/primitives/UnsignedInts.java | 147 - .../common/primitives/UnsignedLong.java | 130 - .../common/primitives/UnsignedLongs.java | 236 - .../common/primitives/package-info.java | 8 - .../reflect/AbstractInvocationHandler.java | 50 - .../com/google/common/reflect/ClassPath.java | 388 -- .../com/google/common/reflect/Element.java | 124 - .../reflect/ImmutableTypeToInstanceMap.java | 80 - .../com/google/common/reflect/Invokable.java | 218 - .../reflect/MutableTypeToInstanceMap.java | 115 - .../com/google/common/reflect/Parameter.java | 95 - .../com/google/common/reflect/Reflection.java | 44 - .../google/common/reflect/TypeCapture.java | 13 - .../google/common/reflect/TypeParameter.java | 35 - .../google/common/reflect/TypeResolver.java | 356 -- .../common/reflect/TypeToInstanceMap.java | 20 - .../com/google/common/reflect/TypeToken.java | 876 ---- .../google/common/reflect/TypeVisitor.java | 69 - src/main/com/google/common/reflect/Types.java | 490 -- .../google/common/reflect/package-info.java | 8 - .../concurrent/AbstractCheckedFuture.java | 42 - .../AbstractExecutionThreadService.java | 129 - .../util/concurrent/AbstractFuture.java | 169 - .../util/concurrent/AbstractIdleService.java | 115 - .../AbstractListeningExecutorService.java | 29 - .../concurrent/AbstractScheduledService.java | 293 -- .../util/concurrent/AbstractService.java | 423 -- .../common/util/concurrent/AsyncFunction.java | 5 - .../util/concurrent/AsyncSettableFuture.java | 56 - .../common/util/concurrent/AtomicDouble.java | 104 - .../util/concurrent/AtomicDoubleArray.java | 128 - .../common/util/concurrent/AtomicLongMap.java | 268 -- .../common/util/concurrent/Atomics.java | 26 - .../common/util/concurrent/Callables.java | 74 - .../common/util/concurrent/CheckedFuture.java | 12 - .../concurrent/CycleDetectingLockFactory.java | 602 --- .../util/concurrent/ExecutionError.java | 24 - .../common/util/concurrent/ExecutionList.java | 84 - .../util/concurrent/FakeTimeLimiter.java | 21 - .../concurrent/ForwardingBlockingQueue.java | 41 - .../concurrent/ForwardingCheckedFuture.java | 32 - .../concurrent/ForwardingExecutorService.java | 70 - .../util/concurrent/ForwardingFuture.java | 47 - .../ForwardingListenableFuture.java | 27 - .../ForwardingListeningExecutorService.java | 22 - .../util/concurrent/FutureCallback.java | 9 - .../util/concurrent/FutureFallback.java | 8 - .../common/util/concurrent/Futures.java | 947 ---- .../util/concurrent/JdkFutureAdapters.java | 76 - .../util/concurrent/ListenableFuture.java | 8 - .../util/concurrent/ListenableFutureTask.java | 34 - .../concurrent/ListenableScheduledFuture.java | 8 - .../util/concurrent/ListenerCallQueue.java | 126 - .../concurrent/ListeningExecutorService.java | 20 - .../ListeningScheduledExecutorService.java | 17 - .../common/util/concurrent/Monitor.java | 607 --- .../common/util/concurrent/MoreExecutors.java | 578 --- .../common/util/concurrent/RateLimiter.java | 165 - .../common/util/concurrent/Runnables.java | 20 - .../util/concurrent/SerializingExecutor.java | 137 - .../common/util/concurrent/Service.java | 91 - .../util/concurrent/ServiceManager.java | 553 --- .../util/concurrent/SettableFuture.java | 20 - .../util/concurrent/SimpleTimeLimiter.java | 135 - .../util/concurrent/SmoothRateLimiter.java | 124 - .../common/util/concurrent/Striped.java | 300 -- .../util/concurrent/ThreadFactoryBuilder.java | 78 - .../common/util/concurrent/TimeLimiter.java | 12 - .../concurrent/UncaughtExceptionHandlers.java | 37 - .../UncheckedExecutionException.java | 24 - .../concurrent/UncheckedTimeoutException.java | 22 - .../util/concurrent/Uninterruptibles.java | 242 - .../concurrent/WrappingExecutorService.java | 103 - .../WrappingScheduledExecutorService.java | 31 - .../common/util/concurrent/package-info.java | 8 - .../com/google/common/xml/XmlEscapers.java | 51 - .../com/google/common/xml/package-info.java | 8 - .../google/gson/DefaultDateTypeAdapter.java | 95 - .../com/google/gson/ExclusionStrategy.java | 7 - src/main/com/google/gson/FieldAttributes.java | 53 - .../com/google/gson/FieldNamingPolicy.java | 80 - .../com/google/gson/FieldNamingStrategy.java | 7 - src/main/com/google/gson/Gson.java | 483 -- src/main/com/google/gson/GsonBuilder.java | 211 - src/main/com/google/gson/InstanceCreator.java | 7 - src/main/com/google/gson/JsonArray.java | 151 - .../gson/JsonDeserializationContext.java | 7 - .../com/google/gson/JsonDeserializer.java | 7 - src/main/com/google/gson/JsonElement.java | 124 - src/main/com/google/gson/JsonIOException.java | 17 - src/main/com/google/gson/JsonNull.java | 17 - src/main/com/google/gson/JsonObject.java | 86 - .../com/google/gson/JsonParseException.java | 17 - src/main/com/google/gson/JsonParser.java | 51 - src/main/com/google/gson/JsonPrimitive.java | 184 - .../google/gson/JsonSerializationContext.java | 9 - src/main/com/google/gson/JsonSerializer.java | 7 - .../com/google/gson/JsonStreamParser.java | 62 - .../com/google/gson/JsonSyntaxException.java | 17 - .../google/gson/LongSerializationPolicy.java | 24 - src/main/com/google/gson/TreeTypeAdapter.java | 95 - src/main/com/google/gson/TypeAdapter.java | 79 - .../com/google/gson/TypeAdapterFactory.java | 7 - .../com/google/gson/annotations/Expose.java | 14 - .../gson/annotations/SerializedName.java | 12 - .../com/google/gson/annotations/Since.java | 12 - .../com/google/gson/annotations/Until.java | 12 - .../gson/internal/$Gson$Preconditions.java | 17 - .../com/google/gson/internal/$Gson$Types.java | 445 -- .../gson/internal/ConstructorConstructor.java | 168 - .../com/google/gson/internal/Excluder.java | 226 - .../internal/JsonReaderInternalAccess.java | 10 - .../gson/internal/LazilyParsedNumber.java | 48 - .../google/gson/internal/LinkedTreeMap.java | 544 --- .../gson/internal/ObjectConstructor.java | 5 - .../com/google/gson/internal/Primitives.java | 53 - .../com/google/gson/internal/Streams.java | 92 - .../google/gson/internal/UnsafeAllocator.java | 55 - .../gson/internal/bind/ArrayTypeAdapter.java | 79 - .../bind/CollectionTypeAdapterFactory.java | 82 - .../gson/internal/bind/DateTypeAdapter.java | 74 - .../gson/internal/bind/JsonTreeReader.java | 210 - .../gson/internal/bind/JsonTreeWriter.java | 186 - .../internal/bind/MapTypeAdapterFactory.java | 185 - .../gson/internal/bind/ObjectTypeAdapter.java | 83 - .../bind/ReflectiveTypeAdapterFactory.java | 192 - .../internal/bind/SqlDateTypeAdapter.java | 42 - .../gson/internal/bind/TimeTypeAdapter.java | 43 - .../bind/TypeAdapterRuntimeTypeWrapper.java | 51 - .../gson/internal/bind/TypeAdapters.java | 818 ---- .../com/google/gson/reflect/TypeToken.java | 202 - .../com/google/gson/stream/JsonReader.java | 1179 ----- .../com/google/gson/stream/JsonScope.java | 12 - .../com/google/gson/stream/JsonToken.java | 14 - .../com/google/gson/stream/JsonWriter.java | 352 -- .../gson/stream/MalformedJsonException.java | 20 - .../publicsuffix/PublicSuffixPatterns.java | 16 - .../publicsuffix/PublicSuffixType.java | 43 - .../thirdparty/publicsuffix/TrieParser.java | 86 - src/main/com/mojang/UUIDTypeAdapter.java | 25 - src/main/com/mojang/authlib/Agent.java | 25 - .../mojang/authlib/AuthenticationService.java | 11 - .../authlib/BaseAuthenticationService.java | 4 - .../authlib/BaseUserAuthentication.java | 259 -- src/main/com/mojang/authlib/GameProfile.java | 79 - .../mojang/authlib/GameProfileRepository.java | 5 - .../authlib/HttpAuthenticationService.java | 183 - .../authlib/HttpUserAuthentication.java | 11 - .../mojang/authlib/ProfileLookupCallback.java | 7 - .../mojang/authlib/UserAuthentication.java | 39 - src/main/com/mojang/authlib/UserType.java | 35 - .../exceptions/AuthenticationException.java | 18 - .../AuthenticationUnavailableException.java | 18 - .../InvalidCredentialsException.java | 18 - .../exceptions/UserMigratedException.java | 18 - .../legacy/LegacyAuthenticationService.java | 30 - .../legacy/LegacyMinecraftSessionService.java | 65 - .../legacy/LegacyUserAuthentication.java | 92 - .../BaseMinecraftSessionService.java | 15 - .../HttpMinecraftSessionService.java | 13 - .../minecraft/InsecureTextureException.java | 42 - .../minecraft/MinecraftProfileTexture.java | 38 - .../minecraft/MinecraftSessionService.java | 16 - .../mojang/authlib/properties/Property.java | 57 - .../authlib/properties/PropertyMap.java | 87 - .../yggdrasil/ProfileIncompleteException.java | 18 - .../yggdrasil/ProfileNotFoundException.java | 18 - .../YggdrasilAuthenticationService.java | 144 - .../YggdrasilGameProfileRepository.java | 111 - .../YggdrasilMinecraftSessionService.java | 160 - .../YggdrasilUserAuthentication.java | 215 - .../request/AuthenticationRequest.java | 19 - .../yggdrasil/request/InvalidateRequest.java | 13 - .../request/JoinMinecraftServerRequest.java | 9 - .../yggdrasil/request/RefreshRequest.java | 22 - .../yggdrasil/request/ValidateRequest.java | 13 - .../response/AuthenticationResponse.java | 31 - .../HasJoinedMinecraftServerResponse.java | 17 - .../MinecraftProfilePropertiesResponse.java | 22 - .../response/MinecraftTexturesPayload.java | 33 - .../ProfileSearchResultsResponse.java | 41 - .../yggdrasil/response/RefreshResponse.java | 31 - .../authlib/yggdrasil/response/Response.java | 31 - .../authlib/yggdrasil/response/User.java | 16 - src/main/com/mojang/launcher/Http.java | 66 - src/main/com/mojang/launcher/Launcher.java | 84 - .../launcher/LegacyPropertyMapSerializer.java | 34 - .../com/mojang/launcher/OperatingSystem.java | 112 - .../launcher/SharedLauncherConstants.java | 6 - .../com/mojang/launcher/UserInterface.java | 25 - .../events/GameOutputLogProcessor.java | 7 - .../events/RefreshedVersionsListener.java | 7 - .../launcher/game/GameInstanceStatus.java | 24 - .../game/process/AbstractGameProcess.java | 35 - .../launcher/game/process/GameProcess.java | 23 - .../game/process/GameProcessBuilder.java | 81 - .../game/process/GameProcessFactory.java | 7 - .../game/process/GameProcessRunnable.java | 5 - .../process/direct/DirectGameProcess.java | 57 - .../direct/DirectGameProcessFactory.java | 14 - .../direct/DirectProcessInputMonitor.java | 49 - .../game/runner/AbstractGameRunner.java | 225 - .../launcher/game/runner/GameRunner.java | 15 - .../game/runner/GameRunnerListener.java | 7 - .../launcher/updater/DateTypeAdapter.java | 79 - .../launcher/updater/DownloadProgress.java | 31 - .../ExceptionalThreadPoolExecutor.java | 70 - .../launcher/updater/FileTypeAdapter.java | 27 - .../LowerCaseEnumTypeAdapterFactory.java | 55 - .../launcher/updater/VersionFilter.java | 58 - .../launcher/updater/VersionManager.java | 44 - .../launcher/updater/VersionSyncInfo.java | 60 - .../download/ChecksummedDownloadable.java | 110 - .../updater/download/DownloadJob.java | 190 - .../updater/download/DownloadListener.java | 7 - .../updater/download/Downloadable.java | 185 - .../updater/download/EtagDownloadable.java | 70 - .../download/MonitoringInputStream.java | 50 - .../updater/download/ProgressContainer.java | 59 - .../download/assets/AssetDownloadable.java | 151 - .../updater/download/assets/AssetIndex.java | 109 - .../launcher/versions/CompatibilityRule.java | 107 - .../launcher/versions/CompleteVersion.java | 23 - .../launcher/versions/ExtractRules.java | 49 - .../mojang/launcher/versions/ReleaseType.java | 5 - .../versions/ReleaseTypeAdapterFactory.java | 22 - .../launcher/versions/ReleaseTypeFactory.java | 9 - .../com/mojang/launcher/versions/Version.java | 13 - .../com/mojang/util/QueueLogAppender.java | 77 - src/main/com/mojang/util/UUIDTypeAdapter.java | 25 - src/main/javax/annotation/CheckForNull.java | 16 - src/main/javax/annotation/CheckForSigned.java | 16 - .../javax/annotation/CheckReturnValue.java | 15 - src/main/javax/annotation/Detainted.java | 16 - src/main/javax/annotation/MatchesPattern.java | 28 - src/main/javax/annotation/Nonnegative.java | 39 - src/main/javax/annotation/Nonnull.java | 21 - src/main/javax/annotation/Nullable.java | 16 - .../OverridingMethodsMustInvokeSuper.java | 13 - .../ParametersAreNonnullByDefault.java | 14 - .../ParametersAreNullableByDefault.java | 14 - src/main/javax/annotation/PropertyKey.java | 14 - src/main/javax/annotation/RegEx.java | 34 - src/main/javax/annotation/Signed.java | 16 - src/main/javax/annotation/Syntax.java | 18 - src/main/javax/annotation/Tainted.java | 16 - src/main/javax/annotation/Untainted.java | 14 - src/main/javax/annotation/WillClose.java | 10 - .../javax/annotation/WillCloseWhenClosed.java | 10 - src/main/javax/annotation/WillNotClose.java | 10 - .../annotation/concurrent/GuardedBy.java | 12 - .../annotation/concurrent/Immutable.java | 13 - .../annotation/concurrent/NotThreadSafe.java | 13 - .../annotation/concurrent/ThreadSafe.java | 13 - src/main/javax/annotation/meta/Exclusive.java | 10 - .../javax/annotation/meta/Exhaustive.java | 10 - .../javax/annotation/meta/TypeQualifier.java | 14 - .../annotation/meta/TypeQualifierDefault.java | 14 - .../meta/TypeQualifierNickname.java | 10 - .../meta/TypeQualifierValidator.java | 9 - src/main/javax/annotation/meta/When.java | 8 - src/main/javax/xml/namespace/QName.java | 90 - src/main/joptsimple/AbstractOptionSpec.java | 118 - .../joptsimple/AlternativeLongOptionSpec.java | 18 - .../ArgumentAcceptingOptionSpec.java | 176 - src/main/joptsimple/ArgumentList.java | 29 - src/main/joptsimple/BuiltinHelpFormatter.java | 215 - src/main/joptsimple/HelpFormatter.java | 7 - .../IllegalOptionSpecificationException.java | 15 - .../MissingRequiredOptionException.java | 15 - .../MultipleArgumentsForOptionException.java | 15 - src/main/joptsimple/NoArgumentOptionSpec.java | 47 - .../joptsimple/NonOptionArgumentSpec.java | 76 - .../OptionArgumentConversionException.java | 19 - src/main/joptsimple/OptionDescriptor.java | 24 - src/main/joptsimple/OptionException.java | 52 - ...ptionMissingRequiredArgumentException.java | 15 - src/main/joptsimple/OptionParser.java | 331 -- src/main/joptsimple/OptionParserState.java | 48 - src/main/joptsimple/OptionSet.java | 154 - src/main/joptsimple/OptionSpec.java | 14 - src/main/joptsimple/OptionSpecBuilder.java | 64 - src/main/joptsimple/OptionSpecTokenizer.java | 94 - .../OptionalArgumentOptionSpec.java | 39 - src/main/joptsimple/ParserRules.java | 60 - .../RequiredArgumentOptionSpec.java | 21 - ...acceptableNumberOfNonOptionsException.java | 21 - .../UnconfiguredOptionException.java | 20 - .../UnrecognizedOptionException.java | 15 - .../joptsimple/ValueConversionException.java | 13 - src/main/joptsimple/ValueConverter.java | 9 - .../joptsimple/internal/AbbreviationMap.java | 161 - src/main/joptsimple/internal/Classes.java | 32 - src/main/joptsimple/internal/Columns.java | 78 - .../ConstructorInvokingValueConverter.java | 24 - .../MethodInvokingValueConverter.java | 26 - src/main/joptsimple/internal/Objects.java | 13 - src/main/joptsimple/internal/Reflection.java | 80 - .../internal/ReflectionException.java | 9 - src/main/joptsimple/internal/Row.java | 26 - src/main/joptsimple/internal/Rows.java | 81 - src/main/joptsimple/internal/Strings.java | 51 - src/main/joptsimple/util/DateConverter.java | 53 - .../joptsimple/util/InetAddressConverter.java | 24 - src/main/joptsimple/util/KeyValuePair.java | 39 - src/main/joptsimple/util/RegexMatcher.java | 33 - src/main/net/mc/main/DarkTheme.java | 56 - src/main/net/mc/main/InstallDirSettings.java | 68 - src/main/net/mc/main/Main.java | 244 - src/main/net/mc/main/Util.java | 185 - src/main/net/miginfocom/layout/AC.java | 261 -- src/main/net/miginfocom/layout/BoundSize.java | 157 - src/main/net/miginfocom/layout/CC.java | 784 ---- .../miginfocom/layout/ComponentWrapper.java | 80 - .../miginfocom/layout/ConstraintParser.java | 1316 ------ .../miginfocom/layout/ContainerWrapper.java | 13 - .../net/miginfocom/layout/DimConstraint.java | 211 - src/main/net/miginfocom/layout/Grid.java | 2397 ---------- .../miginfocom/layout/InCellGapProvider.java | 5 - src/main/net/miginfocom/layout/LC.java | 433 -- .../net/miginfocom/layout/LayoutCallback.java | 14 - .../net/miginfocom/layout/LayoutUtil.java | 358 -- .../net/miginfocom/layout/LinkHandler.java | 150 - .../miginfocom/layout/PlatformDefaults.java | 439 -- .../miginfocom/layout/ResizeConstraint.java | 44 - .../net/miginfocom/layout/UnitConverter.java | 7 - src/main/net/miginfocom/layout/UnitValue.java | 452 -- src/main/net/miginfocom/swing/MigLayout.java | 582 --- .../swing/SwingComponentWrapper.java | 391 -- .../swing/SwingContainerWrapper.java | 66 - .../minecraft/launcher/CompatibilityRule.java | 142 - .../launcher/CurrentLaunchFeatureMatcher.java | 21 - src/main/net/minecraft/launcher/Language.java | 103 - src/main/net/minecraft/launcher/Launcher.java | 597 --- .../minecraft/launcher/LauncherConstants.java | 136 - .../launcher/MinecraftUserInterface.java | 15 - .../minecraft/launcher/NetLauncherMain.java | 102 - .../minecraft/launcher/OptionsManager.java | 105 - .../net/minecraft/launcher/PackageEditor.java | 57 - .../net/minecraft/launcher/ServerManager.java | 74 - .../minecraft/launcher/StorageManager.java | 216 - .../launcher/SwingUserInterface.java | 310 -- .../launcher/game/GameLaunchDispatcher.java | 203 - .../launcher/game/MinecraftGameRunner.java | 525 --- .../launcher/game/MinecraftReleaseType.java | 59 - .../game/MinecraftReleaseTypeFactory.java | 29 - .../net/minecraft/launcher/game/SkaiaNet.java | 7 - .../profile/AuthenticationDatabase.java | 189 - .../profile/LauncherVisibilityRule.java | 21 - .../minecraft/launcher/profile/Profile.java | 176 - .../launcher/profile/ProfileManager.java | 274 -- .../profile/RefreshedProfilesListener.java | 5 - .../launcher/profile/UserChangedListener.java | 5 - .../minecraft/launcher/ui/BottomBarPanel.java | 61 - .../minecraft/launcher/ui/LauncherPanel.java | 114 - .../minecraft/launcher/ui/TexturedPanel.java | 71 - .../ui/bottombar/PlayButtonPanel.java | 118 - .../ui/bottombar/PlayerInfoPanel.java | 150 - .../ui/bottombar/ProfileSelectionPanel.java | 169 - .../ui/bottombar/SidebarGridForm.java | 32 - .../ui/bottombar/StatusPanelForm.java | 56 - .../ui/popups/login/AuthErrorForm.java | 101 - .../launcher/ui/popups/login/ComboItem.java | 23 - .../ui/popups/login/ExistingUserListForm.java | 163 - .../launcher/ui/popups/login/LogInForm.java | 380 -- .../launcher/ui/popups/login/LogInPopup.java | 125 - .../ui/popups/profile/ProfileEditorPopup.java | 137 - .../ui/popups/profile/ProfileInfoPanel.java | 257 -- .../ui/popups/profile/ProfileJavaPanel.java | 155 - .../popups/profile/ProfileVersionPanel.java | 229 - .../launcher/ui/tabs/ConsoleTab.java | 90 - .../launcher/ui/tabs/GameOutputTab.java | 121 - .../launcher/ui/tabs/LauncherTabPanel.java | 67 - .../launcher/ui/tabs/ProfileListTab.java | 252 -- .../launcher/ui/tabs/ServerListTab.java | 253 -- .../launcher/ui/tabs/WebsiteTab.java | 91 - .../launcher/ui/tabs/website/Browser.java | 12 - .../launcher/ui/tabs/website/JFXBrowser.java | 132 - .../ui/tabs/website/LegacySwingBrowser.java | 56 - .../minecraft/launcher/updater/Argument.java | 128 - .../launcher/updater/ArgumentType.java | 6 - .../launcher/updater/AssetIndexInfo.java | 30 - .../updater/CompleteMinecraftVersion.java | 426 -- .../launcher/updater/DownloadInfo.java | 30 - .../launcher/updater/DownloadType.java | 9 - .../updater/FileBasedVersionList.java | 31 - .../minecraft/launcher/updater/Library.java | 203 - .../launcher/updater/LibraryDownloadInfo.java | 32 - .../launcher/updater/LocalVersionList.java | 132 - .../updater/MinecraftVersionManager.java | 393 -- .../launcher/updater/PartialVersion.java | 89 - .../updater/PreHashedDownloadable.java | 62 - .../launcher/updater/VersionList.java | 158 - .../apache/commons/codec/BinaryDecoder.java | 5 - .../apache/commons/codec/BinaryEncoder.java | 5 - .../apache/commons/codec/CharEncoding.java | 10 - .../org/apache/commons/codec/Charsets.java | 32 - .../org/apache/commons/codec/Decoder.java | 5 - .../commons/codec/DecoderException.java | 20 - .../org/apache/commons/codec/Encoder.java | 5 - .../commons/codec/EncoderException.java | 20 - .../apache/commons/codec/StringDecoder.java | 5 - .../apache/commons/codec/StringEncoder.java | 5 - .../codec/StringEncoderComparator.java | 32 - .../apache/commons/codec/binary/Base32.java | 249 -- .../codec/binary/Base32InputStream.java | 17 - .../codec/binary/Base32OutputStream.java | 17 - .../apache/commons/codec/binary/Base64.java | 292 -- .../codec/binary/Base64InputStream.java | 17 - .../codec/binary/Base64OutputStream.java | 17 - .../commons/codec/binary/BaseNCodec.java | 214 - .../codec/binary/BaseNCodecInputStream.java | 97 - .../codec/binary/BaseNCodecOutputStream.java | 77 - .../commons/codec/binary/BinaryCodec.java | 150 - .../codec/binary/CharSequenceUtils.java | 29 - .../org/apache/commons/codec/binary/Hex.java | 126 - .../commons/codec/binary/StringUtils.java | 101 - .../org/apache/commons/codec/digest/B64.java | 26 - .../apache/commons/codec/digest/Crypt.java | 29 - .../commons/codec/digest/DigestUtils.java | 254 -- .../commons/codec/digest/HmacAlgorithms.java | 19 - .../commons/codec/digest/HmacUtils.java | 218 - .../apache/commons/codec/digest/Md5Crypt.java | 126 - .../codec/digest/MessageDigestAlgorithms.java | 13 - .../commons/codec/digest/Sha2Crypt.java | 201 - .../commons/codec/digest/UnixCrypt.java | 213 - .../codec/language/AbstractCaverphone.java | 18 - .../commons/codec/language/Caverphone.java | 30 - .../commons/codec/language/Caverphone1.java | 71 - .../commons/codec/language/Caverphone2.java | 74 - .../codec/language/ColognePhonetic.java | 267 -- .../codec/language/DaitchMokotoffSoundex.java | 385 -- .../codec/language/DoubleMetaphone.java | 747 ---- .../language/MatchRatingApproachEncoder.java | 207 - .../commons/codec/language/Metaphone.java | 278 -- .../apache/commons/codec/language/Nysiis.java | 135 - .../codec/language/RefinedSoundex.java | 72 - .../commons/codec/language/Soundex.java | 114 - .../commons/codec/language/SoundexUtils.java | 50 - .../codec/language/bm/BeiderMorseEncoder.java | 52 - .../commons/codec/language/bm/Lang.java | 136 - .../commons/codec/language/bm/Languages.java | 230 - .../commons/codec/language/bm/NameType.java | 17 - .../codec/language/bm/PhoneticEngine.java | 349 -- .../codec/language/bm/ResourceConstants.java | 8 - .../commons/codec/language/bm/Rule.java | 515 --- .../commons/codec/language/bm/RuleType.java | 17 - .../org/apache/commons/codec/net/BCodec.java | 98 - .../org/apache/commons/codec/net/QCodec.java | 204 - .../codec/net/QuotedPrintableCodec.java | 255 -- .../commons/codec/net/RFC1522Codec.java | 77 - .../apache/commons/codec/net/URLCodec.java | 191 - .../org/apache/commons/codec/net/Utils.java | 14 - .../org/apache/commons/io/ByteOrderMark.java | 102 - src/main/org/apache/commons/io/Charsets.java | 20 - src/main/org/apache/commons/io/CopyUtils.java | 82 - .../apache/commons/io/DirectoryWalker.java | 150 - .../org/apache/commons/io/EndianUtils.java | 177 - .../org/apache/commons/io/FileCleaner.java | 49 - .../commons/io/FileCleaningTracker.java | 116 - .../apache/commons/io/FileDeleteStrategy.java | 51 - .../commons/io/FileExistsException.java | 19 - .../apache/commons/io/FileSystemUtils.java | 266 -- src/main/org/apache/commons/io/FileUtils.java | 1342 ------ .../org/apache/commons/io/FilenameUtils.java | 561 --- src/main/org/apache/commons/io/HexDump.java | 74 - src/main/org/apache/commons/io/IOCase.java | 87 - .../commons/io/IOExceptionWithCause.java | 17 - src/main/org/apache/commons/io/IOUtils.java | 816 ---- .../org/apache/commons/io/LineIterator.java | 86 - .../apache/commons/io/TaggedIOException.java | 32 - .../org/apache/commons/io/ThreadMonitor.java | 43 - .../io/comparator/AbstractFileComparator.java | 29 - .../comparator/CompositeFileComparator.java | 73 - .../io/comparator/DefaultFileComparator.java | 18 - .../comparator/DirectoryFileComparator.java | 22 - .../comparator/ExtensionFileComparator.java | 43 - .../LastModifiedFileComparator.java | 23 - .../io/comparator/NameFileComparator.java | 40 - .../io/comparator/PathFileComparator.java | 40 - .../io/comparator/ReverseComparator.java | 25 - .../io/comparator/SizeFileComparator.java | 55 - .../io/filefilter/AbstractFileFilter.java | 17 - .../commons/io/filefilter/AgeFileFilter.java | 46 - .../commons/io/filefilter/AndFileFilter.java | 109 - .../io/filefilter/CanReadFileFilter.java | 22 - .../io/filefilter/CanWriteFileFilter.java | 20 - .../io/filefilter/ConditionalFileFilter.java | 13 - .../io/filefilter/DelegateFileFilter.java | 42 - .../io/filefilter/DirectoryFileFilter.java | 20 - .../io/filefilter/EmptyFileFilter.java | 25 - .../io/filefilter/FalseFileFilter.java | 24 - .../commons/io/filefilter/FileFileFilter.java | 15 - .../io/filefilter/FileFilterUtils.java | 250 -- .../io/filefilter/HiddenFileFilter.java | 20 - .../commons/io/filefilter/IOFileFilter.java | 11 - .../io/filefilter/MagicNumberFileFilter.java | 88 - .../commons/io/filefilter/NameFileFilter.java | 98 - .../commons/io/filefilter/NotFileFilter.java | 28 - .../commons/io/filefilter/OrFileFilter.java | 101 - .../io/filefilter/PrefixFileFilter.java | 98 - .../io/filefilter/RegexFileFilter.java | 51 - .../commons/io/filefilter/SizeFileFilter.java | 32 - .../io/filefilter/SuffixFileFilter.java | 98 - .../commons/io/filefilter/TrueFileFilter.java | 24 - .../io/filefilter/WildcardFileFilter.java | 99 - .../commons/io/filefilter/WildcardFilter.java | 73 - .../io/input/AutoCloseInputStream.java | 27 - .../commons/io/input/BOMInputStream.java | 177 - .../commons/io/input/BoundedInputStream.java | 97 - .../commons/io/input/BrokenInputStream.java | 36 - .../io/input/CharSequenceInputStream.java | 130 - .../commons/io/input/CharSequenceReader.java | 76 - .../input/ClassLoaderObjectInputStream.java | 36 - .../io/input/CloseShieldInputStream.java | 13 - .../commons/io/input/ClosedInputStream.java | 11 - .../commons/io/input/CountingInputStream.java | 53 - .../commons/io/input/DemuxInputStream.java | 27 - .../commons/io/input/NullInputStream.java | 141 - .../apache/commons/io/input/NullReader.java | 132 - .../commons/io/input/ProxyInputStream.java | 101 - .../apache/commons/io/input/ProxyReader.java | 119 - .../commons/io/input/ReaderInputStream.java | 123 - .../io/input/ReversedLinesFileReader.java | 213 - .../io/input/SwappedDataInputStream.java | 81 - .../commons/io/input/TaggedInputStream.java | 27 - .../org/apache/commons/io/input/Tailer.java | 211 - .../commons/io/input/TailerListener.java | 13 - .../io/input/TailerListenerAdapter.java | 18 - .../commons/io/input/TeeInputStream.java | 59 - .../commons/io/input/XmlStreamReader.java | 358 -- .../io/input/XmlStreamReaderException.java | 45 - .../io/monitor/FileAlterationListener.java | 21 - .../FileAlterationListenerAdaptor.java | 29 - .../io/monitor/FileAlterationMonitor.java | 140 - .../io/monitor/FileAlterationObserver.java | 269 -- .../apache/commons/io/monitor/FileEntry.java | 107 - .../commons/io/output/BrokenOutputStream.java | 28 - .../io/output/ByteArrayOutputStream.java | 203 - .../io/output/CloseShieldOutputStream.java | 13 - .../commons/io/output/ClosedOutputStream.java | 12 - .../io/output/CountingOutputStream.java | 43 - .../io/output/DeferredFileOutputStream.java | 92 - .../commons/io/output/DemuxOutputStream.java | 38 - .../io/output/FileWriterWithEncoding.java | 133 - .../commons/io/output/LockableFileWriter.java | 158 - .../commons/io/output/NullOutputStream.java | 17 - .../apache/commons/io/output/NullWriter.java | 40 - .../commons/io/output/ProxyOutputStream.java | 73 - .../apache/commons/io/output/ProxyWriter.java | 145 - .../io/output/StringBuilderWriter.java | 63 - .../commons/io/output/TaggedOutputStream.java | 27 - .../commons/io/output/TeeOutputStream.java | 42 - .../io/output/ThresholdingOutputStream.java | 74 - .../commons/io/output/WriterOutputStream.java | 112 - .../commons/io/output/XmlStreamWriter.java | 117 - .../apache/commons/lang3/AnnotationUtils.java | 227 - .../org/apache/commons/lang3/ArrayUtils.java | 2684 ----------- .../org/apache/commons/lang3/BitField.java | 88 - .../apache/commons/lang3/BooleanUtils.java | 438 -- .../apache/commons/lang3/CharEncoding.java | 25 - .../org/apache/commons/lang3/CharRange.java | 180 - .../commons/lang3/CharSequenceUtils.java | 100 - .../org/apache/commons/lang3/CharSet.java | 120 - .../apache/commons/lang3/CharSetUtils.java | 108 - .../org/apache/commons/lang3/CharUtils.java | 131 - .../apache/commons/lang3/ClassPathUtils.java | 35 - .../org/apache/commons/lang3/ClassUtils.java | 653 --- .../org/apache/commons/lang3/Conversion.java | 1013 ----- .../org/apache/commons/lang3/EnumUtils.java | 156 - .../org/apache/commons/lang3/JavaVersion.java | 89 - .../org/apache/commons/lang3/LocaleUtils.java | 174 - .../lang3/NotImplementedException.java | 37 - .../org/apache/commons/lang3/ObjectUtils.java | 340 -- .../commons/lang3/RandomStringUtils.java | 114 - .../org/apache/commons/lang3/RandomUtils.java | 38 - src/main/org/apache/commons/lang3/Range.java | 204 - .../commons/lang3/SerializationException.java | 20 - .../commons/lang3/SerializationUtils.java | 158 - .../commons/lang3/StringEscapeUtils.java | 158 - .../org/apache/commons/lang3/StringUtils.java | 2805 ------------ .../org/apache/commons/lang3/SystemUtils.java | 252 -- .../org/apache/commons/lang3/Validate.java | 327 -- .../apache/commons/lang3/builder/Builder.java | 5 - .../lang3/builder/CompareToBuilder.java | 422 -- .../apache/commons/lang3/builder/Diff.java | 32 - .../commons/lang3/builder/DiffBuilder.java | 492 -- .../commons/lang3/builder/DiffResult.java | 72 - .../commons/lang3/builder/Diffable.java | 5 - .../commons/lang3/builder/EqualsBuilder.java | 466 -- .../lang3/builder/HashCodeBuilder.java | 359 -- .../apache/commons/lang3/builder/IDKey.java | 28 - .../MultilineRecursiveToStringStyle.java | 126 - .../lang3/builder/RecursiveToStringStyle.java | 27 - .../builder/ReflectionToStringBuilder.java | 191 - .../lang3/builder/StandardToStringStyle.java | 165 - .../lang3/builder/ToStringBuilder.java | 342 -- .../commons/lang3/builder/ToStringStyle.java | 1141 ----- .../lang3/concurrent/AtomicInitializer.java | 21 - .../concurrent/AtomicSafeInitializer.java | 21 - .../concurrent/BackgroundInitializer.java | 114 - .../lang3/concurrent/BasicThreadFactory.java | 143 - .../CallableBackgroundInitializer.java | 29 - .../lang3/concurrent/ConcurrentException.java | 16 - .../concurrent/ConcurrentInitializer.java | 5 - .../ConcurrentRuntimeException.java | 16 - .../lang3/concurrent/ConcurrentUtils.java | 127 - .../lang3/concurrent/ConstantInitializer.java | 39 - .../lang3/concurrent/LazyInitializer.java | 21 - .../MultiBackgroundInitializer.java | 134 - .../lang3/concurrent/TimedSemaphore.java | 138 - .../lang3/event/EventListenerSupport.java | 118 - .../commons/lang3/event/EventUtils.java | 53 - .../lang3/exception/CloneFailedException.java | 17 - .../lang3/exception/ContextedException.java | 76 - .../exception/ContextedRuntimeException.java | 76 - .../exception/DefaultExceptionContext.java | 123 - .../lang3/exception/ExceptionContext.java | 21 - .../lang3/exception/ExceptionUtils.java | 306 -- .../apache/commons/lang3/math/Fraction.java | 469 -- .../commons/lang3/math/IEEE754rUtils.java | 113 - .../commons/lang3/math/NumberUtils.java | 821 ---- .../apache/commons/lang3/mutable/Mutable.java | 7 - .../commons/lang3/mutable/MutableBoolean.java | 76 - .../commons/lang3/mutable/MutableByte.java | 103 - .../commons/lang3/mutable/MutableDouble.java | 102 - .../commons/lang3/mutable/MutableFloat.java | 101 - .../commons/lang3/mutable/MutableInt.java | 99 - .../commons/lang3/mutable/MutableLong.java | 99 - .../commons/lang3/mutable/MutableObject.java | 44 - .../commons/lang3/mutable/MutableShort.java | 103 - .../lang3/reflect/ConstructorUtils.java | 100 - .../commons/lang3/reflect/FieldUtils.java | 292 -- .../lang3/reflect/InheritanceUtils.java | 24 - .../commons/lang3/reflect/MemberUtils.java | 100 - .../commons/lang3/reflect/MethodUtils.java | 255 -- .../commons/lang3/reflect/TypeLiteral.java | 39 - .../commons/lang3/reflect/TypeUtils.java | 1079 ----- .../apache/commons/lang3/reflect/Typed.java | 7 - .../commons/lang3/text/CompositeFormat.java | 37 - .../lang3/text/ExtendedMessageFormat.java | 338 -- .../commons/lang3/text/FormatFactory.java | 8 - .../commons/lang3/text/FormattableUtils.java | 44 - .../apache/commons/lang3/text/StrBuilder.java | 1653 ------- .../apache/commons/lang3/text/StrLookup.java | 67 - .../apache/commons/lang3/text/StrMatcher.java | 147 - .../commons/lang3/text/StrSubstitutor.java | 482 -- .../commons/lang3/text/StrTokenizer.java | 518 --- .../apache/commons/lang3/text/WordUtils.java | 206 - .../text/translate/AggregateTranslator.java | 28 - .../translate/CharSequenceTranslator.java | 70 - .../text/translate/CodePointTranslator.java | 14 - .../lang3/text/translate/EntityArrays.java | 77 - .../text/translate/JavaUnicodeEscaper.java | 28 - .../text/translate/LookupTranslator.java | 59 - .../text/translate/NumericEntityEscaper.java | 51 - .../translate/NumericEntityUnescaper.java | 83 - .../lang3/text/translate/OctalUnescaper.java | 36 - .../lang3/text/translate/UnicodeEscaper.java | 62 - .../text/translate/UnicodeUnescaper.java | 35 - .../UnicodeUnpairedSurrogateRemover.java | 10 - .../commons/lang3/time/DateFormatUtils.java | 89 - .../apache/commons/lang3/time/DateParser.java | 23 - .../commons/lang3/time/DatePrinter.java | 29 - .../apache/commons/lang3/time/DateUtils.java | 675 --- .../lang3/time/DurationFormatUtils.java | 418 -- .../commons/lang3/time/FastDateFormat.java | 179 - .../commons/lang3/time/FastDateParser.java | 657 --- .../commons/lang3/time/FastDatePrinter.java | 840 ---- .../commons/lang3/time/FormatCache.java | 128 - .../apache/commons/lang3/time/StopWatch.java | 211 - .../commons/lang3/tuple/ImmutablePair.java | 28 - .../commons/lang3/tuple/ImmutableTriple.java | 30 - .../commons/lang3/tuple/MutablePair.java | 41 - .../commons/lang3/tuple/MutableTriple.java | 45 - .../org/apache/commons/lang3/tuple/Pair.java | 53 - .../apache/commons/lang3/tuple/Triple.java | 46 - .../org/apache/logging/log4j/EventLogger.java | 23 - src/main/org/apache/logging/log4j/Level.java | 152 - .../org/apache/logging/log4j/LogManager.java | 192 - src/main/org/apache/logging/log4j/Logger.java | 256 -- .../logging/log4j/LoggingException.java | 17 - src/main/org/apache/logging/log4j/Marker.java | 21 - .../apache/logging/log4j/MarkerManager.java | 320 -- .../apache/logging/log4j/ThreadContext.java | 308 -- .../logging/log4j/core/AbstractLifeCycle.java | 64 - .../logging/log4j/core/AbstractLogEvent.java | 75 - .../apache/logging/log4j/core/Appender.java | 17 - .../logging/log4j/core/ErrorHandler.java | 9 - .../org/apache/logging/log4j/core/Filter.java | 34 - .../org/apache/logging/log4j/core/Layout.java | 18 - .../apache/logging/log4j/core/LifeCycle.java | 19 - .../logging/log4j/core/LifeCycleState.java | 9 - .../apache/logging/log4j/core/LogEvent.java | 43 - .../logging/log4j/core/LogEventListener.java | 21 - .../org/apache/logging/log4j/core/Logger.java | 239 - .../logging/log4j/core/LoggerContext.java | 343 -- .../log4j/core/appender/AbstractAppender.java | 82 - .../log4j/core/appender/AbstractManager.java | 89 - .../AbstractOutputStreamAppender.java | 64 - .../appender/AppenderLoggingException.java | 19 - .../log4j/core/appender/AsyncAppender.java | 284 -- .../log4j/core/appender/ConsoleAppender.java | 167 - .../core/appender/DefaultErrorHandler.java | 53 - .../log4j/core/appender/FailoverAppender.java | 179 - .../log4j/core/appender/FailoversPlugin.java | 35 - .../log4j/core/appender/FileAppender.java | 93 - .../log4j/core/appender/FileManager.java | 132 - .../log4j/core/appender/ManagerFactory.java | 5 - .../core/appender/OutputStreamManager.java | 103 - .../appender/RandomAccessFileAppender.java | 88 - .../appender/RandomAccessFileManager.java | 163 - .../core/appender/RollingFileAppender.java | 109 - .../RollingRandomAccessFileAppender.java | 110 - .../log4j/core/appender/SmtpAppender.java | 67 - .../log4j/core/appender/SocketAppender.java | 102 - .../log4j/core/appender/SyslogAppender.java | 49 - .../log4j/core/appender/TlsSyslogFrame.java | 52 - .../appender/db/AbstractDatabaseAppender.java | 87 - .../appender/db/AbstractDatabaseManager.java | 120 - .../core/appender/db/jdbc/ColumnConfig.java | 94 - .../appender/db/jdbc/ConnectionSource.java | 10 - .../db/jdbc/DataSourceConnectionSource.java | 60 - .../jdbc/FactoryMethodConnectionSource.java | 119 - .../core/appender/db/jdbc/JdbcAppender.java | 55 - .../appender/db/jdbc/JdbcDatabaseManager.java | 200 - .../db/jpa/AbstractLogEventWrapperEntity.java | 102 - .../appender/db/jpa/BasicLogEventEntity.java | 106 - .../core/appender/db/jpa/JpaAppender.java | 69 - .../appender/db/jpa/JpaDatabaseManager.java | 139 - .../ContextMapAttributeConverter.java | 18 - .../ContextMapJsonAttributeConverter.java | 42 - .../ContextStackAttributeConverter.java | 33 - .../ContextStackJsonAttributeConverter.java | 46 - .../converter/LevelAttributeConverter.java | 19 - .../converter/MarkerAttributeConverter.java | 25 - .../converter/MessageAttributeConverter.java | 22 - .../StackTraceElementAttributeConverter.java | 48 - .../ThrowableAttributeConverter.java | 223 - .../core/appender/jms/JmsQueueAppender.java | 58 - .../core/appender/jms/JmsTopicAppender.java | 58 - .../appender/rewrite/MapRewritePolicy.java | 134 - .../rewrite/PropertiesRewritePolicy.java | 86 - .../appender/rewrite/RewriteAppender.java | 90 - .../core/appender/rewrite/RewritePolicy.java | 7 - .../rolling/AbstractRolloverStrategy.java | 8 - .../rolling/CompositeTriggeringPolicy.java | 69 - .../rolling/DefaultRolloverStrategy.java | 278 -- .../rolling/OnStartupTriggeringPolicy.java | 60 - .../appender/rolling/PatternProcessor.java | 227 - .../appender/rolling/RollingFileManager.java | 230 - .../RollingRandomAccessFileManager.java | 194 - .../appender/rolling/RolloverDescription.java | 13 - .../rolling/RolloverDescriptionImpl.java | 37 - .../appender/rolling/RolloverFrequency.java | 12 - .../appender/rolling/RolloverStrategy.java | 5 - .../rolling/SizeBasedTriggeringPolicy.java | 88 - .../rolling/TimeBasedTriggeringPolicy.java | 55 - .../appender/rolling/TriggeringPolicy.java | 9 - .../rolling/action/AbstractAction.java | 41 - .../core/appender/rolling/action/Action.java | 11 - .../rolling/action/CompositeAction.java | 69 - .../rolling/action/FileRenameAction.java | 102 - .../rolling/action/GzCompressAction.java | 64 - .../rolling/action/ZipCompressAction.java | 68 - .../log4j/core/appender/routing/Route.java | 76 - .../log4j/core/appender/routing/Routes.java | 65 - .../appender/routing/RoutingAppender.java | 188 - .../logging/log4j/core/async/AsyncLogger.java | 228 - .../log4j/core/async/AsyncLoggerConfig.java | 123 - .../core/async/AsyncLoggerConfigHelper.java | 240 - .../log4j/core/async/AsyncLoggerContext.java | 33 - .../async/AsyncLoggerContextSelector.java | 29 - .../log4j/core/async/DaemonThreadFactory.java | 29 - .../log4j/core/async/RingBufferLogEvent.java | 185 - .../core/async/RingBufferLogEventHandler.java | 24 - .../async/RingBufferLogEventTranslator.java | 47 - .../core/config/AbstractConfiguration.java | 615 --- .../log4j/core/config/AppenderControl.java | 77 - .../log4j/core/config/AppenderRef.java | 56 - .../log4j/core/config/AppendersPlugin.java | 31 - .../log4j/core/config/Configuration.java | 62 - .../core/config/ConfigurationException.java | 13 - .../core/config/ConfigurationFactory.java | 446 -- .../core/config/ConfigurationListener.java | 5 - .../core/config/ConfigurationMonitor.java | 5 - .../core/config/ConfigurationSource.java | 94 - .../log4j/core/config/Configurator.java | 85 - .../log4j/core/config/DefaultAdvertiser.java | 20 - .../core/config/DefaultConfiguration.java | 33 - .../config/DefaultConfigurationMonitor.java | 6 - .../core/config/FileConfigurationMonitor.java | 70 - .../log4j/core/config/LoggerConfig.java | 346 -- .../logging/log4j/core/config/Loggers.java | 21 - .../log4j/core/config/LoggersPlugin.java | 37 - .../logging/log4j/core/config/Node.java | 98 - .../log4j/core/config/NullConfiguration.java | 14 - .../logging/log4j/core/config/Order.java | 12 - .../log4j/core/config/PropertiesPlugin.java | 39 - .../logging/log4j/core/config/Property.java | 45 - .../log4j/core/config/Reconfigurable.java | 5 - .../core/config/json/JsonConfiguration.java | 273 -- .../config/json/JsonConfigurationFactory.java | 47 - .../log4j/core/config/plugins/Plugin.java | 24 - .../core/config/plugins/PluginAliases.java | 14 - .../core/config/plugins/PluginAttribute.java | 38 - .../plugins/PluginBuilderAttribute.java | 18 - .../config/plugins/PluginBuilderFactory.java | 13 - .../config/plugins/PluginConfiguration.java | 15 - .../core/config/plugins/PluginElement.java | 16 - .../core/config/plugins/PluginFactory.java | 13 - .../log4j/core/config/plugins/PluginNode.java | 15 - .../core/config/plugins/PluginValue.java | 16 - .../config/plugins/PluginVisitorStrategy.java | 16 - .../core/config/plugins/osgi/Activator.java | 56 - .../config/plugins/processor/PluginCache.java | 90 - .../config/plugins/processor/PluginEntry.java | 61 - .../plugins/processor/PluginProcessor.java | 156 - .../config/plugins/util/PluginBuilder.java | 252 -- .../config/plugins/util/PluginManager.java | 263 -- .../config/plugins/util/PluginRegistry.java | 46 - .../core/config/plugins/util/PluginType.java | 38 - .../config/plugins/util/ResolverUtil.java | 257 -- .../config/plugins/util/TypeConverter.java | 5 - .../config/plugins/util/TypeConverters.java | 282 -- .../visitors/AbstractPluginVisitor.java | 93 - .../visitors/PluginAttributeVisitor.java | 62 - .../PluginBuilderAttributeVisitor.java | 26 - .../visitors/PluginConfigurationVisitor.java | 26 - .../visitors/PluginElementVisitor.java | 103 - .../plugins/visitors/PluginNodeVisitor.java | 22 - .../plugins/visitors/PluginValueVisitor.java | 20 - .../plugins/visitors/PluginVisitor.java | 22 - .../plugins/visitors/PluginVisitors.java | 30 - .../config/status/StatusConfiguration.java | 175 - .../core/config/xml/XmlConfiguration.java | 324 -- .../config/xml/XmlConfigurationFactory.java | 24 - .../core/config/yaml/YamlConfiguration.java | 17 - .../config/yaml/YamlConfigurationFactory.java | 47 - .../log4j/core/filter/AbstractFilter.java | 51 - .../log4j/core/filter/AbstractFilterable.java | 77 - .../log4j/core/filter/BurstFilter.java | 152 - .../log4j/core/filter/CompositeFilter.java | 196 - .../core/filter/DynamicThresholdFilter.java | 118 - .../logging/log4j/core/filter/Filterable.java | 17 - .../logging/log4j/core/filter/MapFilter.java | 155 - .../log4j/core/filter/MarkerFilter.java | 60 - .../log4j/core/filter/RegexFilter.java | 118 - .../core/filter/StructuredDataFilter.java | 116 - .../core/filter/ThreadContextMapFilter.java | 137 - .../log4j/core/filter/ThresholdFilter.java | 58 - .../logging/log4j/core/filter/TimeFilter.java | 79 - .../log4j/core/impl/ContextAnchor.java | 10 - .../core/impl/DefaultLogEventFactory.java | 14 - .../log4j/core/impl/ExtendedClassInfo.java | 84 - .../core/impl/ExtendedStackTraceElement.java | 103 - .../log4j/core/impl/Log4jContextFactory.java | 98 - .../log4j/core/impl/Log4jLogEvent.java | 430 -- .../log4j/core/impl/LogEventFactory.java | 12 - .../impl/ReflectiveCallerClassUtility.java | 94 - .../core/impl/ThrowableFormatOptions.java | 151 - .../log4j/core/impl/ThrowableProxy.java | 504 --- .../ExtendedStackTraceElementMixIn.java | 73 - .../log4j/core/jackson/Initializers.java | 30 - .../log4j/core/jackson/JsonConstants.java | 14 - .../log4j/core/jackson/LevelMixIn.java | 18 - .../jackson/ListOfMapEntryDeserializer.java | 34 - .../jackson/ListOfMapEntrySerializer.java | 30 - .../log4j/core/jackson/Log4jJsonModule.java | 19 - .../core/jackson/Log4jJsonObjectMapper.java | 13 - .../Log4jStackTraceElementDeserializer.java | 54 - .../log4j/core/jackson/Log4jXmlModule.java | 17 - .../core/jackson/Log4jXmlObjectMapper.java | 13 - .../log4j/core/jackson/LogEventMixIn.java | 138 - .../logging/log4j/core/jackson/MapEntry.java | 83 - .../log4j/core/jackson/MarkerMixIn.java | 37 - .../log4j/core/jackson/MessageSerializer.java | 18 - ...MutableThreadContextStackDeserializer.java | 24 - .../jackson/SimpleMessageDeserializer.java | 20 - .../core/jackson/StackTraceElementMixIn.java | 41 - .../core/jackson/ThrowableProxyMixIn.java | 75 - .../log4j/core/jackson/XmlConstants.java | 19 - .../logging/log4j/core/jmx/AppenderAdmin.java | 50 - .../log4j/core/jmx/AppenderAdminMBean.java | 15 - .../log4j/core/jmx/AsyncAppenderAdmin.java | 73 - .../core/jmx/AsyncAppenderAdminMBean.java | 27 - .../log4j/core/jmx/ContextSelectorAdmin.java | 29 - .../core/jmx/ContextSelectorAdminMBean.java | 7 - .../log4j/core/jmx/LoggerConfigAdmin.java | 74 - .../core/jmx/LoggerConfigAdminMBean.java | 21 - .../log4j/core/jmx/LoggerContextAdmin.java | 201 - .../core/jmx/LoggerContextAdminMBean.java | 37 - .../log4j/core/jmx/RingBufferAdmin.java | 45 - .../log4j/core/jmx/RingBufferAdminMBean.java | 10 - .../apache/logging/log4j/core/jmx/Server.java | 279 -- .../log4j/core/jmx/StatusLoggerAdmin.java | 97 - .../core/jmx/StatusLoggerAdminMBean.java | 23 - .../core/layout/AbstractJacksonLayout.java | 32 - .../log4j/core/layout/AbstractLayout.java | 25 - .../core/layout/AbstractStringLayout.java | 30 - .../logging/log4j/core/layout/HtmlLayout.java | 370 -- .../log4j/core/layout/JacksonFactory.java | 87 - .../logging/log4j/core/layout/JsonLayout.java | 55 - .../log4j/core/layout/LoggerFields.java | 65 - .../log4j/core/layout/PatternLayout.java | 223 - .../log4j/core/layout/Rfc5424Layout.java | 669 --- .../log4j/core/layout/SerializedLayout.java | 87 - .../log4j/core/layout/SyslogLayout.java | 86 - .../logging/log4j/core/layout/XmlLayout.java | 64 - .../log4j/core/lookup/ContextMapLookup.java | 19 - .../logging/log4j/core/lookup/DateLookup.java | 42 - .../log4j/core/lookup/EnvironmentLookup.java | 18 - .../log4j/core/lookup/Interpolator.java | 123 - .../logging/log4j/core/lookup/JndiLookup.java | 48 - .../logging/log4j/core/lookup/MapLookup.java | 46 - .../core/lookup/ResourceBundleLookup.java | 37 - .../logging/log4j/core/lookup/StrLookup.java | 9 - .../logging/log4j/core/lookup/StrMatcher.java | 147 - .../log4j/core/lookup/StrSubstitutor.java | 521 --- .../core/lookup/StructuredDataLookup.java | 28 - .../core/lookup/SystemPropertiesLookup.java | 26 - .../log4j/core/net/AbstractSocketManager.java | 29 - .../logging/log4j/core/net/Advertiser.java | 9 - .../log4j/core/net/DatagramOutputStream.java | 103 - .../log4j/core/net/DatagramSocketManager.java | 71 - .../logging/log4j/core/net/Facility.java | 52 - .../log4j/core/net/MimeMessageBuilder.java | 70 - .../core/net/MulticastDnsAdvertiser.java | 182 - .../logging/log4j/core/net/Priority.java | 33 - .../logging/log4j/core/net/Protocol.java | 11 - .../logging/log4j/core/net/Severity.java | 51 - .../logging/log4j/core/net/SmtpManager.java | 309 -- .../log4j/core/net/SslSocketManager.java | 146 - .../log4j/core/net/TcpSocketManager.java | 207 - .../core/net/jms/AbstractJmsManager.java | 84 - .../core/net/jms/AbstractJmsReceiver.java | 46 - .../log4j/core/net/jms/JmsQueueManager.java | 175 - .../log4j/core/net/jms/JmsQueueReceiver.java | 64 - .../log4j/core/net/jms/JmsTopicManager.java | 175 - .../log4j/core/net/jms/JmsTopicReceiver.java | 64 - .../net/server/AbstractLogEventBridge.java | 15 - .../core/net/server/AbstractSocketServer.java | 86 - .../net/server/InputStreamLogEventBridge.java | 75 - .../server/JsonInputStreamLogEventBridge.java | 62 - .../log4j/core/net/server/LogEventBridge.java | 11 - .../ObjectInputStreamLogEventBridge.java | 21 - .../net/server/SecureTcpSocketServer.java | 11 - .../core/net/server/TcpSocketServer.java | 164 - .../core/net/server/UdpSocketServer.java | 110 - .../server/XmlInputStreamLogEventBridge.java | 30 - .../ssl/AbstractKeyStoreConfiguration.java | 68 - .../core/net/ssl/KeyStoreConfiguration.java | 34 - .../ssl/KeyStoreConfigurationException.java | 9 - .../log4j/core/net/ssl/SslConfiguration.java | 207 - .../net/ssl/SslConfigurationDefaults.java | 6 - .../net/ssl/SslConfigurationException.java | 9 - .../core/net/ssl/StoreConfiguration.java | 75 - .../net/ssl/StoreConfigurationException.java | 13 - .../core/net/ssl/TrustStoreConfiguration.java | 33 - .../ssl/TrustStoreConfigurationException.java | 9 - .../pattern/AbstractPatternConverter.java | 23 - .../pattern/AbstractStyleNameConverter.java | 214 - .../log4j/core/pattern/AnsiConverter.java | 4 - .../log4j/core/pattern/AnsiEscape.java | 115 - .../core/pattern/ArrayPatternConverter.java | 5 - .../log4j/core/pattern/CachedDateFormat.java | 142 - .../pattern/ClassNamePatternConverter.java | 31 - .../log4j/core/pattern/ConverterKeys.java | 12 - .../core/pattern/DatePatternConverter.java | 190 - .../pattern/EncodingPatternConverter.java | 79 - .../ExtendedThrowablePatternConverter.java | 61 - .../pattern/FileDatePatternConverter.java | 17 - .../pattern/FileLocationPatternConverter.java | 29 - .../log4j/core/pattern/FormattingInfo.java | 68 - .../pattern/FullLocationPatternConverter.java | 29 - .../core/pattern/HighlightConverter.java | 131 - .../core/pattern/IntegerPatternConverter.java | 44 - .../core/pattern/LevelPatternConverter.java | 93 - .../pattern/LineLocationPatternConverter.java | 29 - .../LineSeparatorPatternConverter.java | 28 - .../core/pattern/LiteralPatternConverter.java | 34 - .../pattern/LogEventPatternConverter.java | 22 - .../core/pattern/LoggerPatternConverter.java | 25 - .../core/pattern/MapPatternConverter.java | 60 - .../core/pattern/MarkerPatternConverter.java | 28 - .../core/pattern/MdcPatternConverter.java | 56 - .../core/pattern/MessagePatternConverter.java | 46 - .../MethodLocationPatternConverter.java | 29 - .../log4j/core/pattern/NameAbbreviator.java | 150 - .../core/pattern/NamePatternConverter.java | 19 - .../core/pattern/NdcPatternConverter.java | 25 - .../log4j/core/pattern/PatternConverter.java | 9 - .../log4j/core/pattern/PatternFormatter.java | 42 - .../log4j/core/pattern/PatternParser.java | 393 -- .../log4j/core/pattern/RegexReplacement.java | 46 - .../pattern/RegexReplacementConverter.java | 60 - .../pattern/RelativeTimePatternConverter.java | 36 - .../RootThrowablePatternConverter.java | 61 - .../SequenceNumberPatternConverter.java | 27 - .../log4j/core/pattern/StyleConverter.java | 98 - .../core/pattern/ThreadPatternConverter.java | 25 - .../pattern/ThrowablePatternConverter.java | 111 - .../core/pattern/UuidPatternConverter.java | 37 - .../core/selector/BasicContextSelector.java | 35 - .../selector/ClassLoaderContextSelector.java | 231 - .../log4j/core/selector/ContextSelector.java | 15 - .../core/selector/JndiContextSelector.java | 97 - .../core/selector/NamedContextSelector.java | 10 - .../logging/log4j/core/tools/Generate.java | 218 - .../logging/log4j/core/util/Assert.java | 14 - .../logging/log4j/core/util/Booleans.java | 10 - .../logging/log4j/core/util/Builder.java | 5 - .../log4j/core/util/BundleResourceLoader.java | 31 - .../logging/log4j/core/util/CachedClock.java | 36 - .../logging/log4j/core/util/Charsets.java | 31 - .../core/util/ClassLoaderResourceLoader.java | 29 - .../apache/logging/log4j/core/util/Clock.java | 5 - .../logging/log4j/core/util/ClockFactory.java | 43 - .../logging/log4j/core/util/Closer.java | 89 - .../log4j/core/util/CoarseCachedClock.java | 29 - .../logging/log4j/core/util/Constants.java | 15 - .../logging/log4j/core/util/CyclicBuffer.java | 58 - .../logging/log4j/core/util/FileUtils.java | 77 - .../logging/log4j/core/util/Integers.java | 16 - .../logging/log4j/core/util/JndiCloser.java | 21 - .../logging/log4j/core/util/KeyValuePair.java | 37 - .../logging/log4j/core/util/Loader.java | 205 - .../logging/log4j/core/util/NameUtil.java | 44 - .../logging/log4j/core/util/NetUtils.java | 48 - .../log4j/core/util/OptionConverter.java | 205 - .../logging/log4j/core/util/Patterns.java | 13 - .../log4j/core/util/ResourceLoader.java | 13 - .../log4j/core/util/SecretKeyProvider.java | 7 - .../logging/log4j/core/util/SetUtils.java | 24 - .../logging/log4j/core/util/SystemClock.java | 7 - .../logging/log4j/core/util/Throwables.java | 108 - .../logging/log4j/core/util/Transform.java | 117 - .../logging/log4j/core/util/UuidUtil.java | 151 - .../log4j/message/AbstractMessageFactory.java | 17 - .../log4j/message/BasicThreadInformation.java | 83 - .../message/ExtendedThreadInformation.java | 159 - .../log4j/message/FormattedMessage.java | 157 - .../message/FormattedMessageFactory.java | 9 - .../log4j/message/LocalizedMessage.java | 222 - .../message/LocalizedMessageFactory.java | 31 - .../log4j/message/LoggerNameAwareMessage.java | 7 - .../logging/log4j/message/MapMessage.java | 237 - .../apache/logging/log4j/message/Message.java | 13 - .../logging/log4j/message/MessageFactory.java | 9 - .../log4j/message/MessageFormatMessage.java | 120 - .../message/MessageFormatMessageFactory.java | 9 - .../log4j/message/MultiformatMessage.java | 7 - .../logging/log4j/message/ObjectMessage.java | 84 - .../log4j/message/ParameterizedMessage.java | 376 -- .../message/ParameterizedMessageFactory.java | 10 - .../logging/log4j/message/SimpleMessage.java | 64 - .../log4j/message/StringFormattedMessage.java | 119 - .../StringFormatterMessageFactory.java | 10 - .../log4j/message/StructuredDataId.java | 108 - .../log4j/message/StructuredDataMessage.java | 272 -- .../log4j/message/ThreadDumpMessage.java | 173 - .../log4j/message/ThreadInformation.java | 7 - .../log4j/message/TimestampMessage.java | 5 - .../logging/log4j/simple/SimpleLogger.java | 139 - .../log4j/simple/SimpleLoggerContext.java | 78 - .../simple/SimpleLoggerContextFactory.java | 20 - .../logging/log4j/spi/AbstractLogger.java | 706 --- .../log4j/spi/DefaultThreadContextMap.java | 120 - .../log4j/spi/DefaultThreadContextStack.java | 255 -- .../logging/log4j/spi/ExtendedLogger.java | 30 - .../log4j/spi/ExtendedLoggerWrapper.java | 44 - .../logging/log4j/spi/LoggerContext.java | 13 - .../log4j/spi/LoggerContextFactory.java | 11 - .../log4j/spi/MutableThreadContextStack.java | 188 - .../apache/logging/log4j/spi/Provider.java | 78 - .../logging/log4j/spi/StandardLevel.java | 40 - .../logging/log4j/spi/ThreadContextMap.java | 21 - .../logging/log4j/spi/ThreadContextStack.java | 6 - .../log4j/status/StatusConsoleListener.java | 71 - .../logging/log4j/status/StatusData.java | 71 - .../logging/log4j/status/StatusListener.java | 11 - .../logging/log4j/status/StatusLogger.java | 256 -- .../apache/logging/log4j/util/Activator.java | 90 - .../logging/log4j/util/EnglishEnums.java | 16 - .../apache/logging/log4j/util/LoaderUtil.java | 38 - .../logging/log4j/util/PropertiesUtil.java | 154 - .../logging/log4j/util/ProviderUtil.java | 83 - .../apache/logging/log4j/util/Strings.java | 21 - .../AbstractConnectionClosedListener.java | 13 - .../smack/AbstractConnectionListener.java | 24 - .../smack/AbstractXMPPConnection.java | 1108 ----- .../smack/ConnectionConfiguration.java | 292 -- .../smack/ConnectionCreationListener.java | 5 - .../smack/ConnectionListener.java | 17 - .../jivesoftware/smack/ExceptionCallback.java | 5 - src/main/org/jivesoftware/smack/Manager.java | 17 - .../jivesoftware/smack/MessageListener.java | 7 - .../jivesoftware/smack/PacketCollector.java | 166 - .../jivesoftware/smack/PacketListener.java | 6 - .../jivesoftware/smack/PresenceListener.java | 7 - .../smack/ReconnectionManager.java | 187 - .../smack/SASLAuthentication.java | 237 - .../smack/SmackConfiguration.java | 168 - .../jivesoftware/smack/SmackException.java | 197 - .../smack/SmackInitialization.java | 207 - .../jivesoftware/smack/StanzaListener.java | 7 - .../smack/SynchronizationPoint.java | 188 - .../jivesoftware/smack/XMPPConnection.java | 120 - .../smack/XMPPConnectionRegistry.java | 22 - .../org/jivesoftware/smack/XMPPException.java | 69 - .../smack/compress/packet/Compress.java | 70 - .../smack/compress/packet/Compressed.java | 24 - .../Java7ZlibInputOutputStream.java | 80 - .../compression/XMPPInputOutputStream.java | 33 - .../smack/debugger/AbstractDebugger.java | 129 - .../smack/debugger/ConsoleDebugger.java | 24 - .../smack/debugger/JulDebugger.java | 18 - .../debugger/ReflectionDebuggerFactory.java | 82 - .../smack/debugger/SmackDebugger.java | 22 - .../smack/debugger/SmackDebuggerFactory.java | 9 - .../smack/filter/AbstractListFilter.java | 51 - .../jivesoftware/smack/filter/AndFilter.java | 28 - .../filter/FlexibleStanzaTypeFilter.java | 27 - .../smack/filter/FromMatchesFilter.java | 50 - .../smack/filter/IQReplyFilter.java | 67 - .../smack/filter/IQResultReplyFilter.java | 22 - .../smack/filter/IQTypeFilter.java | 34 - .../smack/filter/MessageTypeFilter.java | 37 - .../smack/filter/MessageWithBodiesFilter.java | 19 - .../filter/MessageWithSubjectFilter.java | 19 - .../jivesoftware/smack/filter/NotFilter.java | 16 - .../jivesoftware/smack/filter/OrFilter.java | 28 - .../smack/filter/PacketExtensionFilter.java | 34 - .../smack/filter/PacketFilter.java | 6 - .../smack/filter/PacketIDFilter.java | 31 - .../smack/filter/PacketTypeFilter.java | 25 - .../smack/filter/PresenceTypeFilter.java | 40 - .../smack/filter/StanzaExtensionFilter.java | 32 - .../smack/filter/StanzaFilter.java | 7 - .../smack/filter/StanzaIdFilter.java | 24 - .../smack/filter/StanzaTypeFilter.java | 25 - .../smack/filter/ThreadFilter.java | 21 - .../jivesoftware/smack/filter/ToFilter.java | 21 - .../smack/initializer/SmackInitializer.java | 7 - .../smack/initializer/UrlInitializer.java | 60 - .../smack/initializer/VmArgInitializer.java | 18 - .../iqrequest/AbstractIqRequestHandler.java | 42 - .../smack/iqrequest/IQRequestHandler.java | 20 - .../smack/packet/AbstractError.java | 79 - .../org/jivesoftware/smack/packet/Bind.java | 60 - .../smack/packet/DefaultExtensionElement.java | 58 - .../jivesoftware/smack/packet/Element.java | 5 - .../smack/packet/EmptyResultIQ.java | 23 - .../jivesoftware/smack/packet/ErrorIQ.java | 14 - .../smack/packet/ExtensionElement.java | 5 - .../smack/packet/FullStreamElement.java | 4 - .../org/jivesoftware/smack/packet/IQ.java | 155 - .../jivesoftware/smack/packet/Mechanisms.java | 48 - .../jivesoftware/smack/packet/Message.java | 401 -- .../smack/packet/NamedElement.java | 5 - .../org/jivesoftware/smack/packet/Packet.java | 62 - .../smack/packet/PacketExtension.java | 6 - .../smack/packet/PlainStreamElement.java | 4 - .../jivesoftware/smack/packet/Presence.java | 143 - .../jivesoftware/smack/packet/Session.java | 47 - .../jivesoftware/smack/packet/SimpleIQ.java | 12 - .../org/jivesoftware/smack/packet/Stanza.java | 272 -- .../jivesoftware/smack/packet/StartTls.java | 37 - .../smack/packet/StreamError.java | 97 - .../jivesoftware/smack/packet/StreamOpen.java | 67 - .../smack/packet/TopLevelStreamElement.java | 4 - .../jivesoftware/smack/packet/UnparsedIQ.java | 18 - .../jivesoftware/smack/packet/XMPPError.java | 200 - .../smack/packet/id/StanzaIdUtil.java | 13 - .../parsing/ExceptionLoggingCallback.java | 13 - .../parsing/ExceptionThrowingCallback.java | 7 - .../parsing/ParsingExceptionCallback.java | 6 - .../smack/parsing/UnparsablePacket.java | 19 - .../smack/provider/AbstractProviderInfo.java | 25 - .../smack/provider/BindIQProvider.java | 53 - .../provider/EmbeddedExtensionProvider.java | 40 - .../provider/ExtensionElementProvider.java | 6 - .../smack/provider/ExtensionProviderInfo.java | 9 - .../smack/provider/IQProvider.java | 6 - .../smack/provider/IQProviderInfo.java | 9 - .../smack/provider/IntrospectionProvider.java | 144 - .../jivesoftware/smack/provider/Provider.java | 20 - .../smack/provider/ProviderFileLoader.java | 137 - .../smack/provider/ProviderLoader.java | 11 - .../smack/provider/ProviderManager.java | 135 - .../provider/StreamFeatureProviderInfo.java | 9 - .../smack/proxy/DirectSocketFactory.java | 34 - .../smack/proxy/HTTPProxySocketFactory.java | 101 - .../smack/proxy/ProxyException.java | 19 - .../jivesoftware/smack/proxy/ProxyInfo.java | 78 - .../smack/proxy/Socks4ProxySocketFactory.java | 112 - .../smack/proxy/Socks5ProxySocketFactory.java | 158 - .../smack/sasl/SASLAnonymous.java | 30 - .../jivesoftware/smack/sasl/SASLError.java | 37 - .../smack/sasl/SASLErrorException.java | 36 - .../smack/sasl/SASLMechanism.java | 109 - .../smack/sasl/core/SASLXOauth2Mechanism.java | 33 - .../smack/sasl/core/SCRAMSHA1Mechanism.java | 255 -- .../smack/sasl/packet/SaslStreamElements.java | 145 - .../util/ArrayBlockingQueueWithShutdown.java | 490 -- .../org/jivesoftware/smack/util/Async.java | 22 - .../jivesoftware/smack/util/ByteUtils.java | 11 - .../org/jivesoftware/smack/util/DNSUtil.java | 194 - .../jivesoftware/smack/util/EventManger.java | 56 - .../jivesoftware/smack/util/FileUtils.java | 133 - .../smack/util/LazyStringBuilder.java | 92 - src/main/org/jivesoftware/smack/util/MAC.java | 29 - src/main/org/jivesoftware/smack/util/MD5.java | 32 - .../org/jivesoftware/smack/util/MultiMap.java | 191 - .../jivesoftware/smack/util/NumberUtil.java | 11 - .../org/jivesoftware/smack/util/Objects.java | 11 - .../smack/util/ObservableReader.java | 82 - .../smack/util/ObservableWriter.java | 80 - .../smack/util/PacketParserUtils.java | 930 ---- .../jivesoftware/smack/util/PacketUtil.java | 30 - .../jivesoftware/smack/util/ParserUtils.java | 82 - .../smack/util/ReaderListener.java | 5 - .../org/jivesoftware/smack/util/SHA1.java | 33 - .../util/SmackExecutorThreadFactory.java | 21 - .../smack/util/StringTransformer.java | 5 - .../jivesoftware/smack/util/StringUtils.java | 176 - .../org/jivesoftware/smack/util/TLSUtils.java | 100 - .../smack/util/WriterListener.java | 5 - .../smack/util/XmlStringBuilder.java | 356 -- .../smack/util/dns/DNSResolver.java | 7 - .../smack/util/dns/HostAddress.java | 73 - .../smack/util/dns/SRVRecord.java | 41 - .../smack/util/stringencoder/Base32.java | 158 - .../smack/util/stringencoder/Base64.java | 91 - .../stringencoder/Base64UrlSafeEncoder.java | 24 - .../util/stringencoder/StringEncoder.java | 7 - src/main/org/jxmpp/jid/BareJid.java | 4 - src/main/org/jxmpp/jid/DomainBareJid.java | 4 - src/main/org/jxmpp/jid/DomainFullJid.java | 4 - src/main/org/jxmpp/jid/FullJid.java | 7 - src/main/org/jxmpp/jid/Jid.java | 73 - src/main/org/jxmpp/jid/JidWithLocalpart.java | 9 - src/main/org/jxmpp/jid/JidWithResource.java | 7 - src/main/org/jxmpp/jid/impl/AbstractJid.java | 114 - .../jid/impl/DomainAndResourcepartJid.java | 109 - .../org/jxmpp/jid/impl/DomainpartJid.java | 97 - src/main/org/jxmpp/jid/impl/JidCreate.java | 215 - .../jxmpp/jid/impl/LocalAndDomainpartJid.java | 121 - .../impl/LocalDomainAndResourcepartJid.java | 139 - src/main/org/jxmpp/jid/parts/Domainpart.java | 20 - src/main/org/jxmpp/jid/parts/Localpart.java | 16 - src/main/org/jxmpp/jid/parts/Part.java | 44 - .../org/jxmpp/jid/parts/Resourcepart.java | 18 - src/main/org/jxmpp/jid/util/JidUtil.java | 205 - .../jxmpp/stringprep/XmppStringPrepUtil.java | 75 - .../org/jxmpp/stringprep/XmppStringprep.java | 9 - .../stringprep/XmppStringprepException.java | 23 - .../simple/SimpleXmppStringprep.java | 60 - src/main/org/jxmpp/util/XmppDateTime.java | 279 -- src/main/org/jxmpp/util/XmppStringUtils.java | 244 - src/main/org/jxmpp/util/cache/Cache.java | 11 - .../org/jxmpp/util/cache/ExpirationCache.java | 169 - src/main/org/jxmpp/util/cache/LruCache.java | 109 - src/main/org/xmlpull/mxp1/MXParser.java | 2722 ------------ .../xmlpull/mxp1/MXParserCachingStrings.java | 273 -- .../org/xmlpull/mxp1/MXParserFactory.java | 43 - .../xmlpull/mxp1/MXParserNonValidating.java | 226 - .../xmlpull/mxp1_serializer/MXSerializer.java | 994 ----- src/main/org/xmlpull/v1/XmlPullParser.java | 99 - .../xmlpull/v1/XmlPullParserException.java | 45 - .../org/xmlpull/v1/XmlPullParserFactory.java | 206 - src/main/org/xmlpull/v1/XmlSerializer.java | 57 - src/main/org/xmlpull/v1/builder/Iterable.java | 7 - .../org/xmlpull/v1/builder/XmlAttribute.java | 19 - .../v1/builder/XmlBuilderException.java | 53 - .../org/xmlpull/v1/builder/XmlCharacters.java | 7 - .../org/xmlpull/v1/builder/XmlComment.java | 7 - .../org/xmlpull/v1/builder/XmlContained.java | 7 - .../org/xmlpull/v1/builder/XmlContainer.java | 4 - .../org/xmlpull/v1/builder/XmlDoctype.java | 17 - .../org/xmlpull/v1/builder/XmlDocument.java | 61 - .../org/xmlpull/v1/builder/XmlElement.java | 142 - .../xmlpull/v1/builder/XmlInfosetBuilder.java | 243 - .../org/xmlpull/v1/builder/XmlNamespace.java | 7 - .../org/xmlpull/v1/builder/XmlNotation.java | 11 - .../v1/builder/XmlProcessingInstruction.java | 13 - .../xmlpull/v1/builder/XmlSerializable.java | 8 - .../builder/XmlUnexpandedEntityReference.java | 13 - .../xmlpull/v1/builder/XmlUnparsedEntity.java | 15 - .../builder/adapter/XmlAttributeAdapter.java | 47 - .../builder/adapter/XmlDocumentAdapter.java | 149 - .../v1/builder/adapter/XmlElementAdapter.java | 423 -- .../v1/builder/impl/XmlAttributeImpl.java | 102 - .../v1/builder/impl/XmlCommentImpl.java | 25 - .../v1/builder/impl/XmlDocumentImpl.java | 235 - .../v1/builder/impl/XmlElementImpl.java | 823 ---- .../builder/impl/XmlInfosetBuilderImpl.java | 353 -- .../v1/builder/impl/XmlNamespaceImpl.java | 53 - .../v1/dom2_builder/DOM2XmlPullBuilder.java | 176 - .../v1/parser_pool/XmlPullParserPool.java | 69 - src/main/org/xmlpull/v1/sax2/Driver.java | 380 -- src/main/org/xmlpull/v1/util/XmlPullUtil.java | 150 - .../v1/wrapper/XmlPullParserWrapper.java | 42 - .../v1/wrapper/XmlPullWrapperFactory.java | 81 - .../v1/wrapper/XmlSerializerWrapper.java | 34 - .../classic/StaticXmlPullParserWrapper.java | 242 - .../classic/StaticXmlSerializerWrapper.java | 358 -- .../classic/XmlPullParserDelegate.java | 163 - .../classic/XmlSerializerDelegate.java | 114 - src/main/org/yaml/snakeyaml/Dumper.java | 26 - .../org/yaml/snakeyaml/DumperOptions.java | 317 -- .../org/yaml/snakeyaml/JavaBeanDumper.java | 93 - .../org/yaml/snakeyaml/JavaBeanLoader.java | 55 - src/main/org/yaml/snakeyaml/Loader.java | 19 - .../org/yaml/snakeyaml/LoaderOptions.java | 22 - .../org/yaml/snakeyaml/TypeDescription.java | 70 - src/main/org/yaml/snakeyaml/Yaml.java | 371 -- .../org/yaml/snakeyaml/composer/Composer.java | 190 - .../snakeyaml/composer/ComposerException.java | 12 - .../constructor/AbstractConstruct.java | 14 - .../constructor/BaseConstructor.java | 365 -- .../yaml/snakeyaml/constructor/Construct.java | 9 - .../snakeyaml/constructor/Constructor.java | 554 --- .../constructor/ConstructorException.java | 16 - .../CustomClassLoaderConstructor.java | 23 - .../constructor/SafeConstructor.java | 467 -- .../org/yaml/snakeyaml/emitter/Emitable.java | 8 - .../org/yaml/snakeyaml/emitter/Emitter.java | 1573 ------- .../snakeyaml/emitter/EmitterException.java | 11 - .../yaml/snakeyaml/emitter/EmitterState.java | 7 - .../snakeyaml/emitter/ScalarAnalysis.java | 21 - src/main/org/yaml/snakeyaml/error/Mark.java | 112 - .../snakeyaml/error/MarkedYAMLException.java | 81 - .../yaml/snakeyaml/error/YAMLException.java | 17 - .../org/yaml/snakeyaml/events/AliasEvent.java | 13 - .../snakeyaml/events/CollectionEndEvent.java | 9 - .../events/CollectionStartEvent.java | 32 - .../snakeyaml/events/DocumentEndEvent.java | 20 - .../snakeyaml/events/DocumentStartEvent.java | 34 - src/main/org/yaml/snakeyaml/events/Event.java | 52 - .../yaml/snakeyaml/events/ImplicitTuple.java | 27 - .../snakeyaml/events/MappingEndEvent.java | 13 - .../snakeyaml/events/MappingStartEvent.java | 13 - .../org/yaml/snakeyaml/events/NodeEvent.java | 20 - .../yaml/snakeyaml/events/ScalarEvent.java | 42 - .../snakeyaml/events/SequenceEndEvent.java | 13 - .../snakeyaml/events/SequenceStartEvent.java | 13 - .../yaml/snakeyaml/events/StreamEndEvent.java | 13 - .../snakeyaml/events/StreamStartEvent.java | 13 - .../compactnotation/CompactConstructor.java | 211 - .../compactnotation/CompactData.java | 32 - .../PackageCompactConstructor.java | 21 - .../external/biz/base64Coder/Base64Coder.java | 173 - .../gdata/util/common/base/Escaper.java | 7 - .../util/common/base/PercentEscaper.java | 150 - .../util/common/base/UnicodeEscaper.java | 227 - .../snakeyaml/introspector/BeanAccess.java | 7 - .../snakeyaml/introspector/FieldProperty.java | 26 - .../introspector/GenericProperty.java | 66 - .../introspector/MethodProperty.java | 38 - .../introspector/MissingProperty.java | 18 - .../yaml/snakeyaml/introspector/Property.java | 54 - .../snakeyaml/introspector/PropertyUtils.java | 184 - .../org/yaml/snakeyaml/nodes/AnchorNode.java | 18 - .../yaml/snakeyaml/nodes/CollectionNode.java | 24 - .../org/yaml/snakeyaml/nodes/MappingNode.java | 85 - src/main/org/yaml/snakeyaml/nodes/Node.java | 92 - src/main/org/yaml/snakeyaml/nodes/NodeId.java | 8 - .../org/yaml/snakeyaml/nodes/NodeTuple.java | 27 - .../org/yaml/snakeyaml/nodes/ScalarNode.java | 39 - .../yaml/snakeyaml/nodes/SequenceNode.java | 45 - src/main/org/yaml/snakeyaml/nodes/Tag.java | 137 - .../org/yaml/snakeyaml/parser/Parser.java | 11 - .../snakeyaml/parser/ParserException.java | 12 - .../org/yaml/snakeyaml/parser/ParserImpl.java | 790 ---- .../org/yaml/snakeyaml/parser/Production.java | 7 - .../snakeyaml/parser/VersionTagsTuple.java | 26 - .../snakeyaml/reader/ReaderException.java | 33 - .../yaml/snakeyaml/reader/StreamReader.java | 159 - .../yaml/snakeyaml/reader/UnicodeReader.java | 66 - .../representer/BaseRepresenter.java | 196 - .../yaml/snakeyaml/representer/Represent.java | 7 - .../snakeyaml/representer/Representer.java | 175 - .../representer/SafeRepresenter.java | 409 -- .../org/yaml/snakeyaml/resolver/Resolver.java | 128 - .../snakeyaml/resolver/ResolverTuple.java | 26 - .../org/yaml/snakeyaml/scanner/Constant.java | 61 - .../org/yaml/snakeyaml/scanner/Scanner.java | 11 - .../snakeyaml/scanner/ScannerException.java | 16 - .../yaml/snakeyaml/scanner/ScannerImpl.java | 1401 ------ .../org/yaml/snakeyaml/scanner/SimpleKey.java | 49 - .../yaml/snakeyaml/serializer/Serializer.java | 215 - .../serializer/SerializerException.java | 11 - .../org/yaml/snakeyaml/tokens/AliasToken.java | 24 - .../yaml/snakeyaml/tokens/AnchorToken.java | 24 - .../yaml/snakeyaml/tokens/BlockEndToken.java | 13 - .../snakeyaml/tokens/BlockEntryToken.java | 13 - .../tokens/BlockMappingStartToken.java | 13 - .../tokens/BlockSequenceStartToken.java | 13 - .../yaml/snakeyaml/tokens/DirectiveToken.java | 36 - .../snakeyaml/tokens/DocumentEndToken.java | 13 - .../snakeyaml/tokens/DocumentStartToken.java | 13 - .../yaml/snakeyaml/tokens/FlowEntryToken.java | 13 - .../snakeyaml/tokens/FlowMappingEndToken.java | 13 - .../tokens/FlowMappingStartToken.java | 13 - .../tokens/FlowSequenceEndToken.java | 13 - .../tokens/FlowSequenceStartToken.java | 13 - .../org/yaml/snakeyaml/tokens/KeyToken.java | 13 - .../yaml/snakeyaml/tokens/ScalarToken.java | 40 - .../yaml/snakeyaml/tokens/StreamEndToken.java | 13 - .../snakeyaml/tokens/StreamStartToken.java | 13 - .../org/yaml/snakeyaml/tokens/TagToken.java | 24 - .../org/yaml/snakeyaml/tokens/TagTuple.java | 23 - src/main/org/yaml/snakeyaml/tokens/Token.java | 67 - .../org/yaml/snakeyaml/tokens/ValueToken.java | 13 - .../org/yaml/snakeyaml/util/ArrayStack.java | 27 - .../org/yaml/snakeyaml/util/UriEncoder.java | 41 - src/net/mc/main/DarkTheme.java | 55 + src/net/mc/main/InstallDirSettings.java | 68 + src/net/mc/main/Main.java | 264 ++ src/net/mc/main/Util.java | 201 + src/net/miginfocom/layout/AC.java | 243 + src/net/miginfocom/layout/BoundSize.java | 157 + src/net/miginfocom/layout/CC.java | 838 ++++ .../miginfocom/layout/ComponentWrapper.java | 85 + .../miginfocom/layout/ConstraintParser.java | 1106 +++++ .../miginfocom/layout/ContainerWrapper.java | 19 + src/net/miginfocom/layout/DimConstraint.java | 214 + src/net/miginfocom/layout/Grid.java | 1894 ++++++++ .../miginfocom/layout/InCellGapProvider.java | 11 + src/net/miginfocom/layout/LC.java | 439 ++ src/net/miginfocom/layout/LayoutCallback.java | 21 + src/net/miginfocom/layout/LayoutUtil.java | 339 ++ src/net/miginfocom/layout/LinkHandler.java | 130 + .../miginfocom/layout/PlatformDefaults.java | 430 ++ .../miginfocom/layout/ResizeConstraint.java | 44 + src/net/miginfocom/layout/UnitConverter.java | 13 + src/net/miginfocom/layout/UnitValue.java | 461 ++ src/net/miginfocom/swing/MigLayout.java | 537 +++ .../swing/SwingComponentWrapper.java | 405 ++ .../swing/SwingContainerWrapper.java | 71 + .../minecraft/launcher/CompatibilityRule.java | 134 + .../launcher/CurrentLaunchFeatureMatcher.java | 27 + src/net/minecraft/launcher/Language.java | 112 + src/net/minecraft/launcher/Launcher.java | 511 +++ .../minecraft/launcher/LauncherConstants.java | 118 + .../launcher/MinecraftUserInterface.java | 19 + .../minecraft/launcher/NetLauncherMain.java | 108 + .../minecraft/launcher/OptionsManager.java | 121 + src/net/minecraft/launcher/PackageEditor.java | 48 + src/net/minecraft/launcher/ServerManager.java | 67 + .../minecraft/launcher/StorageManager.java | 209 + .../launcher/SwingUserInterface.java | 344 ++ .../launcher/game/GameLaunchDispatcher.java | 196 + .../launcher/game/MinecraftGameRunner.java | 490 ++ .../launcher/game/MinecraftReleaseType.java | 66 + .../game/MinecraftReleaseTypeFactory.java | 37 + src/net/minecraft/launcher/game/SkaiaNet.java | 10 + .../profile/AuthenticationDatabase.java | 158 + .../profile/LauncherVisibilityRule.java | 24 + .../minecraft/launcher/profile/Profile.java | 177 + .../launcher/profile/ProfileManager.java | 250 ++ .../profile/RefreshedProfilesListener.java | 10 + .../launcher/profile/UserChangedListener.java | 10 + .../minecraft/launcher/ui/BottomBarPanel.java | 66 + .../minecraft/launcher/ui/LauncherPanel.java | 119 + .../minecraft/launcher/ui/TexturedPanel.java | 72 + .../ui/bottombar/PlayButtonPanel.java | 133 + .../ui/bottombar/PlayerInfoPanel.java | 166 + .../ui/bottombar/ProfileSelectionPanel.java | 166 + .../ui/bottombar/SidebarGridForm.java | 36 + .../ui/bottombar/StatusPanelForm.java | 62 + .../ui/popups/login/AuthErrorForm.java | 103 + .../launcher/ui/popups/login/ComboItem.java | 26 + .../ui/popups/login/ExistingUserListForm.java | 160 + .../launcher/ui/popups/login/LogInForm.java | 379 ++ .../launcher/ui/popups/login/LogInPopup.java | 134 + .../ui/popups/profile/ProfileEditorPopup.java | 144 + .../ui/popups/profile/ProfileInfoPanel.java | 270 ++ .../ui/popups/profile/ProfileJavaPanel.java | 167 + .../popups/profile/ProfileVersionPanel.java | 210 + .../launcher/ui/tabs/ConsoleTab.java | 96 + .../launcher/ui/tabs/GameOutputTab.java | 129 + .../launcher/ui/tabs/LauncherTabPanel.java | 71 + .../launcher/ui/tabs/ProfileListTab.java | 261 ++ .../launcher/ui/tabs/ServerListTab.java | 262 ++ .../launcher/ui/tabs/WebsiteTab.java | 95 + .../launcher/ui/tabs/website/Browser.java | 15 + .../launcher/ui/tabs/website/JFXBrowser.java | 163 + .../ui/tabs/website/LegacySwingBrowser.java | 67 + .../minecraft/launcher/updater/Argument.java | 108 + .../launcher/updater/ArgumentType.java | 10 + .../launcher/updater/AssetIndexInfo.java | 35 + .../updater/CompleteMinecraftVersion.java | 364 ++ .../launcher/updater/DownloadInfo.java | 33 + .../launcher/updater/DownloadType.java | 13 + .../updater/FileBasedVersionList.java | 39 + .../minecraft/launcher/updater/Library.java | 183 + .../launcher/updater/LibraryDownloadInfo.java | 33 + .../launcher/updater/LocalVersionList.java | 114 + .../updater/MinecraftVersionManager.java | 365 ++ .../launcher/updater/PartialVersion.java | 94 + .../updater/PreHashedDownloadable.java | 63 + .../launcher/updater/RemoteVersionList.java | 138 +- .../launcher/updater/VersionList.java | 149 + .../org.jivesoftware.smack/jul.properties | 0 .../org.jivesoftware.smack/smack-config.xml | 0 src/{main => }/org.jivesoftware.smack/version | 0 .../apache/commons/codec/BinaryDecoder.java | 12 + .../apache/commons/codec/BinaryEncoder.java | 12 + .../apache/commons/codec/CharEncoding.java | 13 + src/org/apache/commons/codec/Charsets.java | 29 + src/org/apache/commons/codec/Decoder.java | 10 + .../commons/codec/DecoderException.java | 24 + src/org/apache/commons/codec/Encoder.java | 10 + .../commons/codec/EncoderException.java | 24 + .../apache/commons/codec/StringDecoder.java | 12 + .../apache/commons/codec/StringEncoder.java | 12 + .../codec/StringEncoderComparator.java | 35 + .../apache/commons/codec/binary/Base32.java | 256 ++ .../codec/binary/Base32InputStream.java | 23 + .../codec/binary/Base32OutputStream.java | 23 + .../apache/commons/codec/binary/Base64.java | 284 ++ .../codec/binary/Base64InputStream.java | 23 + .../codec/binary/Base64OutputStream.java | 23 + .../commons/codec/binary/BaseNCodec.java | 212 + .../codec/binary/BaseNCodecInputStream.java | 100 + .../codec/binary/BaseNCodecOutputStream.java | 78 + .../commons/codec/binary/BinaryCodec.java | 147 + .../codec/binary/CharSequenceUtils.java | 26 + src/org/apache/commons/codec/binary/Hex.java | 126 + .../commons/codec/binary/StringUtils.java | 111 + src/org/apache/commons/codec/digest/B64.java | 30 + .../apache/commons/codec/digest/Crypt.java | 39 + .../commons/codec/digest/DigestUtils.java | 251 ++ .../commons/codec/digest/HmacAlgorithms.java | 22 + .../commons/codec/digest/HmacUtils.java | 228 + .../apache/commons/codec/digest/Md5Crypt.java | 118 + .../codec/digest/MessageDigestAlgorithms.java | 16 + .../commons/codec/digest/Sha2Crypt.java | 181 + .../commons/codec/digest/UnixCrypt.java | 193 + .../codec/language/AbstractCaverphone.java | 22 + .../commons/codec/language/Caverphone.java | 35 + .../commons/codec/language/Caverphone1.java | 77 + .../commons/codec/language/Caverphone2.java | 80 + .../codec/language/ColognePhonetic.java | 182 + .../codec/language/DaitchMokotoffSoundex.java | 317 ++ .../codec/language/DoubleMetaphone.java | 704 +++ .../language/MatchRatingApproachEncoder.java | 181 + .../commons/codec/language/Metaphone.java | 277 ++ .../apache/commons/codec/language/Nysiis.java | 142 + .../codec/language/RefinedSoundex.java | 74 + .../commons/codec/language/Soundex.java | 104 + .../commons/codec/language/SoundexUtils.java | 47 + .../codec/language/bm/BeiderMorseEncoder.java | 59 + .../commons/codec/language/bm/Lang.java | 122 + .../commons/codec/language/bm/Languages.java | 237 + .../commons/codec/language/bm/NameType.java | 20 + .../codec/language/bm/PhoneticEngine.java | 299 ++ .../codec/language/bm/ResourceConstants.java | 14 + .../commons/codec/language/bm/Rule.java | 492 ++ .../commons/codec/language/bm/RuleType.java | 20 + .../codec/language/bm/ash_approx_any.txt | 0 .../codec/language/bm/ash_approx_common.txt | 0 .../codec/language/bm/ash_approx_cyrillic.txt | 0 .../codec/language/bm/ash_approx_english.txt | 0 .../codec/language/bm/ash_approx_french.txt | 0 .../codec/language/bm/ash_approx_german.txt | 0 .../codec/language/bm/ash_approx_hebrew.txt | 0 .../language/bm/ash_approx_hungarian.txt | 0 .../codec/language/bm/ash_approx_polish.txt | 0 .../codec/language/bm/ash_approx_romanian.txt | 0 .../codec/language/bm/ash_approx_russian.txt | 0 .../codec/language/bm/ash_approx_spanish.txt | 0 .../codec/language/bm/ash_exact_any.txt | 0 .../language/bm/ash_exact_approx_common.txt | 0 .../codec/language/bm/ash_exact_common.txt | 0 .../codec/language/bm/ash_exact_cyrillic.txt | 0 .../codec/language/bm/ash_exact_english.txt | 0 .../codec/language/bm/ash_exact_french.txt | 0 .../codec/language/bm/ash_exact_german.txt | 0 .../codec/language/bm/ash_exact_hebrew.txt | 0 .../codec/language/bm/ash_exact_hungarian.txt | 0 .../codec/language/bm/ash_exact_polish.txt | 0 .../codec/language/bm/ash_exact_romanian.txt | 0 .../codec/language/bm/ash_exact_russian.txt | 0 .../codec/language/bm/ash_exact_spanish.txt | 0 .../codec/language/bm/ash_hebrew_common.txt | 0 .../commons/codec/language/bm/ash_lang.txt | 0 .../codec/language/bm/ash_languages.txt | 0 .../codec/language/bm/ash_rules_any.txt | 0 .../codec/language/bm/ash_rules_cyrillic.txt | 0 .../codec/language/bm/ash_rules_english.txt | 0 .../codec/language/bm/ash_rules_french.txt | 0 .../codec/language/bm/ash_rules_german.txt | 0 .../codec/language/bm/ash_rules_hebrew.txt | 0 .../codec/language/bm/ash_rules_hungarian.txt | 0 .../codec/language/bm/ash_rules_polish.txt | 0 .../codec/language/bm/ash_rules_romanian.txt | 0 .../codec/language/bm/ash_rules_russian.txt | 0 .../codec/language/bm/ash_rules_spanish.txt | 0 .../codec/language/bm/gen_approx_any.txt | 0 .../codec/language/bm/gen_approx_arabic.txt | 0 .../codec/language/bm/gen_approx_common.txt | 0 .../codec/language/bm/gen_approx_cyrillic.txt | 0 .../codec/language/bm/gen_approx_czech.txt | 0 .../codec/language/bm/gen_approx_dutch.txt | 0 .../codec/language/bm/gen_approx_english.txt | 0 .../codec/language/bm/gen_approx_french.txt | 0 .../codec/language/bm/gen_approx_german.txt | 0 .../codec/language/bm/gen_approx_greek.txt | 0 .../language/bm/gen_approx_greeklatin.txt | 0 .../codec/language/bm/gen_approx_hebrew.txt | 0 .../language/bm/gen_approx_hungarian.txt | 0 .../codec/language/bm/gen_approx_italian.txt | 0 .../codec/language/bm/gen_approx_polish.txt | 0 .../language/bm/gen_approx_portuguese.txt | 0 .../codec/language/bm/gen_approx_romanian.txt | 0 .../codec/language/bm/gen_approx_russian.txt | 0 .../codec/language/bm/gen_approx_spanish.txt | 0 .../codec/language/bm/gen_approx_turkish.txt | 0 .../codec/language/bm/gen_exact_any.txt | 0 .../language/bm/gen_exact_approx_common.txt | 0 .../codec/language/bm/gen_exact_arabic.txt | 0 .../codec/language/bm/gen_exact_common.txt | 0 .../codec/language/bm/gen_exact_cyrillic.txt | 0 .../codec/language/bm/gen_exact_czech.txt | 0 .../codec/language/bm/gen_exact_dutch.txt | 0 .../codec/language/bm/gen_exact_english.txt | 0 .../codec/language/bm/gen_exact_french.txt | 0 .../codec/language/bm/gen_exact_german.txt | 0 .../codec/language/bm/gen_exact_greek.txt | 0 .../language/bm/gen_exact_greeklatin.txt | 0 .../codec/language/bm/gen_exact_hebrew.txt | 0 .../codec/language/bm/gen_exact_hungarian.txt | 0 .../codec/language/bm/gen_exact_italian.txt | 0 .../codec/language/bm/gen_exact_polish.txt | 0 .../language/bm/gen_exact_portuguese.txt | 0 .../codec/language/bm/gen_exact_romanian.txt | 0 .../codec/language/bm/gen_exact_russian.txt | 0 .../codec/language/bm/gen_exact_spanish.txt | 0 .../codec/language/bm/gen_exact_turkish.txt | 0 .../codec/language/bm/gen_hebrew_common.txt | 0 .../commons/codec/language/bm/gen_lang.txt | 0 .../codec/language/bm/gen_languages.txt | 0 .../codec/language/bm/gen_rules_any.txt | 0 .../codec/language/bm/gen_rules_arabic.txt | 0 .../codec/language/bm/gen_rules_cyrillic.txt | 0 .../codec/language/bm/gen_rules_czech.txt | 0 .../codec/language/bm/gen_rules_dutch.txt | 0 .../codec/language/bm/gen_rules_english.txt | 0 .../codec/language/bm/gen_rules_french.txt | 0 .../codec/language/bm/gen_rules_german.txt | 0 .../codec/language/bm/gen_rules_greek.txt | 0 .../language/bm/gen_rules_greeklatin.txt | 0 .../codec/language/bm/gen_rules_hebrew.txt | 0 .../codec/language/bm/gen_rules_hungarian.txt | 0 .../codec/language/bm/gen_rules_italian.txt | 0 .../codec/language/bm/gen_rules_polish.txt | 0 .../language/bm/gen_rules_portuguese.txt | 0 .../codec/language/bm/gen_rules_romanian.txt | 0 .../codec/language/bm/gen_rules_russian.txt | 0 .../codec/language/bm/gen_rules_spanish.txt | 0 .../codec/language/bm/gen_rules_turkish.txt | 0 .../apache/commons/codec/language/bm/lang.txt | 0 .../codec/language/bm/sep_approx_any.txt | 0 .../codec/language/bm/sep_approx_common.txt | 0 .../codec/language/bm/sep_approx_french.txt | 0 .../codec/language/bm/sep_approx_hebrew.txt | 0 .../codec/language/bm/sep_approx_italian.txt | 0 .../language/bm/sep_approx_portuguese.txt | 0 .../codec/language/bm/sep_approx_spanish.txt | 0 .../codec/language/bm/sep_exact_any.txt | 0 .../language/bm/sep_exact_approx_common.txt | 0 .../codec/language/bm/sep_exact_common.txt | 0 .../codec/language/bm/sep_exact_french.txt | 0 .../codec/language/bm/sep_exact_hebrew.txt | 0 .../codec/language/bm/sep_exact_italian.txt | 0 .../language/bm/sep_exact_portuguese.txt | 0 .../codec/language/bm/sep_exact_spanish.txt | 0 .../codec/language/bm/sep_hebrew_common.txt | 0 .../commons/codec/language/bm/sep_lang.txt | 0 .../codec/language/bm/sep_languages.txt | 0 .../codec/language/bm/sep_rules_any.txt | 0 .../codec/language/bm/sep_rules_french.txt | 0 .../codec/language/bm/sep_rules_hebrew.txt | 0 .../codec/language/bm/sep_rules_italian.txt | 0 .../language/bm/sep_rules_portuguese.txt | 0 .../codec/language/bm/sep_rules_spanish.txt | 0 .../apache/commons/codec/language/dmrules.txt | 0 src/org/apache/commons/codec/net/BCodec.java | 124 + src/org/apache/commons/codec/net/QCodec.java | 202 + .../codec/net/QuotedPrintableCodec.java | 269 ++ .../commons/codec/net/RFC1522Codec.java | 80 + .../apache/commons/codec/net/URLCodec.java | 198 + src/org/apache/commons/codec/net/Utils.java | 19 + src/org/apache/commons/io/ByteOrderMark.java | 90 + src/org/apache/commons/io/Charsets.java | 23 + src/org/apache/commons/io/CopyUtils.java | 82 + .../apache/commons/io/DirectoryWalker.java | 146 + src/org/apache/commons/io/EndianUtils.java | 177 + src/org/apache/commons/io/FileCleaner.java | 47 + .../commons/io/FileCleaningTracker.java | 120 + .../apache/commons/io/FileDeleteStrategy.java | 57 + .../commons/io/FileExistsException.java | 23 + .../apache/commons/io/FileSystemUtils.java | 264 ++ src/org/apache/commons/io/FileUtils.java | 1271 ++++++ src/org/apache/commons/io/FilenameUtils.java | 511 +++ src/org/apache/commons/io/HexDump.java | 66 + src/org/apache/commons/io/IOCase.java | 89 + .../commons/io/IOExceptionWithCause.java | 21 + src/org/apache/commons/io/IOUtils.java | 766 ++++ src/org/apache/commons/io/LineIterator.java | 84 + .../apache/commons/io/TaggedIOException.java | 38 + src/org/apache/commons/io/ThreadMonitor.java | 47 + .../io/comparator/AbstractFileComparator.java | 34 + .../comparator/CompositeFileComparator.java | 64 + .../io/comparator/DefaultFileComparator.java | 22 + .../comparator/DirectoryFileComparator.java | 29 + .../comparator/ExtensionFileComparator.java | 44 + .../LastModifiedFileComparator.java | 29 + .../io/comparator/NameFileComparator.java | 41 + .../io/comparator/PathFileComparator.java | 41 + .../io/comparator/ReverseComparator.java | 32 + .../io/comparator/SizeFileComparator.java | 50 + .../io/filefilter/AbstractFileFilter.java | 24 + .../commons/io/filefilter/AgeFileFilter.java | 54 + .../commons/io/filefilter/AndFileFilter.java | 100 + .../io/filefilter/CanReadFileFilter.java | 28 + .../io/filefilter/CanWriteFileFilter.java | 25 + .../io/filefilter/ConditionalFileFilter.java | 17 + .../io/filefilter/DelegateFileFilter.java | 55 + .../io/filefilter/DirectoryFileFilter.java | 28 + .../io/filefilter/EmptyFileFilter.java | 29 + .../io/filefilter/FalseFileFilter.java | 32 + .../commons/io/filefilter/FileFileFilter.java | 23 + .../io/filefilter/FileFilterUtils.java | 259 ++ .../io/filefilter/HiddenFileFilter.java | 25 + .../commons/io/filefilter/IOFileFilter.java | 18 + .../io/filefilter/MagicNumberFileFilter.java | 108 + .../commons/io/filefilter/NameFileFilter.java | 90 + .../commons/io/filefilter/NotFileFilter.java | 37 + .../commons/io/filefilter/OrFileFilter.java | 94 + .../io/filefilter/PrefixFileFilter.java | 90 + .../io/filefilter/RegexFileFilter.java | 53 + .../commons/io/filefilter/SizeFileFilter.java | 40 + .../io/filefilter/SuffixFileFilter.java | 90 + .../commons/io/filefilter/TrueFileFilter.java | 32 + .../io/filefilter/WildcardFileFilter.java | 91 + .../commons/io/filefilter/WildcardFilter.java | 63 + .../io/input/AutoCloseInputStream.java | 34 + .../commons/io/input/BOMInputStream.java | 170 + .../commons/io/input/BoundedInputStream.java | 106 + .../commons/io/input/BrokenInputStream.java | 45 + .../io/input/CharSequenceInputStream.java | 135 + .../commons/io/input/CharSequenceReader.java | 89 + .../input/ClassLoaderObjectInputStream.java | 44 + .../io/input/CloseShieldInputStream.java | 20 + .../commons/io/input/ClosedInputStream.java | 16 + .../commons/io/input/CountingInputStream.java | 57 + .../commons/io/input/DemuxInputStream.java | 35 + .../commons/io/input/NullInputStream.java | 152 + .../apache/commons/io/input/NullReader.java | 140 + .../commons/io/input/ProxyInputStream.java | 119 + .../apache/commons/io/input/ProxyReader.java | 139 + .../commons/io/input/ReaderInputStream.java | 123 + .../io/input/ReversedLinesFileReader.java | 186 + .../io/input/SwappedDataInputStream.java | 100 + .../commons/io/input/TaggedInputStream.java | 33 + src/org/apache/commons/io/input/Tailer.java | 215 + .../commons/io/input/TailerListener.java | 18 + .../io/input/TailerListenerAdapter.java | 30 + .../commons/io/input/TeeInputStream.java | 67 + .../commons/io/input/XmlStreamReader.java | 337 ++ .../io/input/XmlStreamReaderException.java | 49 + .../io/monitor/FileAlterationListener.java | 25 + .../FileAlterationListenerAdaptor.java | 43 + .../io/monitor/FileAlterationMonitor.java | 106 + .../io/monitor/FileAlterationObserver.java | 219 + .../apache/commons/io/monitor/FileEntry.java | 110 + .../commons/io/output/BrokenOutputStream.java | 35 + .../io/output/ByteArrayOutputStream.java | 187 + .../io/output/CloseShieldOutputStream.java | 20 + .../commons/io/output/ClosedOutputStream.java | 17 + .../io/output/CountingOutputStream.java | 47 + .../io/output/DeferredFileOutputStream.java | 103 + .../commons/io/output/DemuxOutputStream.java | 42 + .../io/output/FileWriterWithEncoding.java | 136 + .../commons/io/output/LockableFileWriter.java | 173 + .../commons/io/output/NullOutputStream.java | 24 + .../apache/commons/io/output/NullWriter.java | 54 + .../commons/io/output/ProxyOutputStream.java | 82 + .../apache/commons/io/output/ProxyWriter.java | 156 + .../io/output/StringBuilderWriter.java | 73 + .../commons/io/output/TaggedOutputStream.java | 33 + .../commons/io/output/TeeOutputStream.java | 55 + .../io/output/ThresholdingOutputStream.java | 83 + .../commons/io/output/WriterOutputStream.java | 111 + .../commons/io/output/XmlStreamWriter.java | 113 + .../apache/commons/lang3/AnnotationUtils.java | 231 + src/org/apache/commons/lang3/ArrayUtils.java | 2431 ++++++++++ src/org/apache/commons/lang3/BitField.java | 90 + .../apache/commons/lang3/BooleanUtils.java | 400 ++ .../apache/commons/lang3/CharEncoding.java | 28 + src/org/apache/commons/lang3/CharRange.java | 184 + .../commons/lang3/CharSequenceUtils.java | 85 + src/org/apache/commons/lang3/CharSet.java | 111 + .../apache/commons/lang3/CharSetUtils.java | 92 + src/org/apache/commons/lang3/CharUtils.java | 154 + .../apache/commons/lang3/ClassPathUtils.java | 43 + src/org/apache/commons/lang3/ClassUtils.java | 624 +++ src/org/apache/commons/lang3/Conversion.java | 896 ++++ src/org/apache/commons/lang3/EnumUtils.java | 137 + src/org/apache/commons/lang3/JavaVersion.java | 105 + src/org/apache/commons/lang3/LocaleUtils.java | 168 + .../lang3/NotImplementedException.java | 41 + src/org/apache/commons/lang3/ObjectUtils.java | 308 ++ .../commons/lang3/RandomStringUtils.java | 113 + src/org/apache/commons/lang3/RandomUtils.java | 54 + src/org/apache/commons/lang3/Range.java | 207 + .../commons/lang3/SerializationException.java | 24 + .../commons/lang3/SerializationUtils.java | 166 + .../commons/lang3/StringEscapeUtils.java | 165 + src/org/apache/commons/lang3/StringUtils.java | 2518 +++++++++++ src/org/apache/commons/lang3/SystemUtils.java | 186 + src/org/apache/commons/lang3/Validate.java | 328 ++ .../apache/commons/lang3/builder/Builder.java | 11 + .../lang3/builder/CompareToBuilder.java | 435 ++ .../apache/commons/lang3/builder/Diff.java | 41 + .../commons/lang3/builder/DiffBuilder.java | 524 +++ .../commons/lang3/builder/DiffResult.java | 74 + .../commons/lang3/builder/Diffable.java | 13 + .../commons/lang3/builder/EqualsBuilder.java | 474 ++ .../lang3/builder/HashCodeBuilder.java | 328 ++ .../apache/commons/lang3/builder/IDKey.java | 29 + .../MultilineRecursiveToStringStyle.java | 129 + .../lang3/builder/RecursiveToStringStyle.java | 37 + .../builder/ReflectionToStringBuilder.java | 185 + .../lang3/builder/StandardToStringStyle.java | 171 + .../lang3/builder/ToStringBuilder.java | 343 ++ .../commons/lang3/builder/ToStringStyle.java | 1091 +++++ .../lang3/concurrent/AtomicInitializer.java | 27 + .../concurrent/AtomicSafeInitializer.java | 29 + .../concurrent/BackgroundInitializer.java | 129 + .../lang3/concurrent/BasicThreadFactory.java | 134 + .../CallableBackgroundInitializer.java | 38 + .../lang3/concurrent/ConcurrentException.java | 22 + .../concurrent/ConcurrentInitializer.java | 13 + .../ConcurrentRuntimeException.java | 22 + .../lang3/concurrent/ConcurrentUtils.java | 147 + .../lang3/concurrent/ConstantInitializer.java | 49 + .../lang3/concurrent/LazyInitializer.java | 35 + .../MultiBackgroundInitializer.java | 136 + .../lang3/concurrent/TimedSemaphore.java | 137 + .../lang3/event/EventListenerSupport.java | 119 + .../commons/lang3/event/EventUtils.java | 65 + .../lang3/exception/CloneFailedException.java | 21 + .../lang3/exception/ContextedException.java | 93 + .../exception/ContextedRuntimeException.java | 93 + .../exception/DefaultExceptionContext.java | 115 + .../lang3/exception/ExceptionContext.java | 27 + .../lang3/exception/ExceptionUtils.java | 271 ++ .../apache/commons/lang3/math/Fraction.java | 439 ++ .../commons/lang3/math/IEEE754rUtils.java | 112 + .../commons/lang3/math/NumberUtils.java | 741 ++++ .../apache/commons/lang3/mutable/Mutable.java | 13 + .../commons/lang3/mutable/MutableBoolean.java | 89 + .../commons/lang3/mutable/MutableByte.java | 121 + .../commons/lang3/mutable/MutableDouble.java | 121 + .../commons/lang3/mutable/MutableFloat.java | 120 + .../commons/lang3/mutable/MutableInt.java | 116 + .../commons/lang3/mutable/MutableLong.java | 116 + .../commons/lang3/mutable/MutableObject.java | 56 + .../commons/lang3/mutable/MutableShort.java | 121 + .../lang3/reflect/ConstructorUtils.java | 91 + .../commons/lang3/reflect/FieldUtils.java | 280 ++ .../lang3/reflect/InheritanceUtils.java | 26 + .../commons/lang3/reflect/MemberUtils.java | 96 + .../commons/lang3/reflect/MethodUtils.java | 220 + .../commons/lang3/reflect/TypeLiteral.java | 47 + .../commons/lang3/reflect/TypeUtils.java | 947 ++++ .../apache/commons/lang3/reflect/Typed.java | 13 + .../commons/lang3/text/CompositeFormat.java | 41 + .../lang3/text/ExtendedMessageFormat.java | 326 ++ .../commons/lang3/text/FormatFactory.java | 11 + .../commons/lang3/text/FormattableUtils.java | 44 + .../apache/commons/lang3/text/StrBuilder.java | 1553 +++++++ .../apache/commons/lang3/text/StrLookup.java | 78 + .../apache/commons/lang3/text/StrMatcher.java | 167 + .../commons/lang3/text/StrSubstitutor.java | 473 ++ .../commons/lang3/text/StrTokenizer.java | 480 ++ .../apache/commons/lang3/text/WordUtils.java | 194 + .../text/translate/AggregateTranslator.java | 27 + .../translate/CharSequenceTranslator.java | 67 + .../text/translate/CodePointTranslator.java | 19 + .../lang3/text/translate/EntityArrays.java | 66 + .../text/translate/JavaUnicodeEscaper.java | 34 + .../text/translate/LookupTranslator.java | 54 + .../text/translate/NumericEntityEscaper.java | 51 + .../translate/NumericEntityUnescaper.java | 77 + .../lang3/text/translate/OctalUnescaper.java | 39 + .../lang3/text/translate/UnicodeEscaper.java | 61 + .../text/translate/UnicodeUnescaper.java | 36 + .../UnicodeUnpairedSurrogateRemover.java | 15 + .../commons/lang3/time/DateFormatUtils.java | 89 + .../apache/commons/lang3/time/DateParser.java | 26 + .../commons/lang3/time/DatePrinter.java | 32 + .../apache/commons/lang3/time/DateUtils.java | 645 +++ .../lang3/time/DurationFormatUtils.java | 386 ++ .../commons/lang3/time/FastDateFormat.java | 191 + .../commons/lang3/time/FastDateParser.java | 571 +++ .../commons/lang3/time/FastDatePrinter.java | 792 ++++ .../commons/lang3/time/FormatCache.java | 114 + .../apache/commons/lang3/time/StopWatch.java | 209 + .../commons/lang3/tuple/ImmutablePair.java | 40 + .../commons/lang3/tuple/ImmutableTriple.java | 42 + .../commons/lang3/tuple/MutablePair.java | 53 + .../commons/lang3/tuple/MutableTriple.java | 57 + src/org/apache/commons/lang3/tuple/Pair.java | 68 + .../apache/commons/lang3/tuple/Triple.java | 56 + src/org/apache/logging/log4j/EventLogger.java | 29 + src/org/apache/logging/log4j/Level.java | 142 + src/org/apache/logging/log4j/LogManager.java | 187 + src/org/apache/logging/log4j/Logger.java | 261 ++ .../logging/log4j/LoggingException.java | 21 + src/org/apache/logging/log4j/Marker.java | 25 + .../apache/logging/log4j/MarkerManager.java | 281 ++ .../apache/logging/log4j/ThreadContext.java | 316 ++ .../logging/log4j/core/AbstractLifeCycle.java | 70 + .../logging/log4j/core/AbstractLogEvent.java | 96 + .../apache/logging/log4j/core/Appender.java | 25 + .../logging/log4j/core/ErrorHandler.java | 14 + src/org/apache/logging/log4j/core/Filter.java | 42 + src/org/apache/logging/log4j/core/Layout.java | 22 + .../apache/logging/log4j/core/LifeCycle.java | 23 + .../logging/log4j/core/LifeCycleState.java | 13 + .../apache/logging/log4j/core/LogEvent.java | 47 + .../logging/log4j/core/LogEventListener.java | 28 + src/org/apache/logging/log4j/core/Logger.java | 241 + .../logging/log4j/core/LoggerContext.java | 343 ++ .../log4j/core/appender/AbstractAppender.java | 92 + .../log4j/core/appender/AbstractManager.java | 95 + .../AbstractOutputStreamAppender.java | 72 + .../appender/AppenderLoggingException.java | 23 + .../log4j/core/appender/AsyncAppender.java | 252 ++ .../log4j/core/appender/ConsoleAppender.java | 171 + .../core/appender/DefaultErrorHandler.java | 58 + .../log4j/core/appender/FailoverAppender.java | 158 + .../log4j/core/appender/FailoversPlugin.java | 31 + .../log4j/core/appender/FileAppender.java | 91 + .../log4j/core/appender/FileManager.java | 141 + .../log4j/core/appender/ManagerFactory.java | 8 + .../core/appender/OutputStreamManager.java | 112 + .../appender/RandomAccessFileAppender.java | 90 + .../appender/RandomAccessFileManager.java | 168 + .../core/appender/RollingFileAppender.java | 110 + .../RollingRandomAccessFileAppender.java | 112 + .../log4j/core/appender/SmtpAppender.java | 68 + .../log4j/core/appender/SocketAppender.java | 98 + .../log4j/core/appender/SyslogAppender.java | 50 + .../log4j/core/appender/TlsSyslogFrame.java | 55 + .../appender/db/AbstractDatabaseAppender.java | 93 + .../appender/db/AbstractDatabaseManager.java | 129 + .../core/appender/db/jdbc/ColumnConfig.java | 92 + .../appender/db/jdbc/ConnectionSource.java | 13 + .../db/jdbc/DataSourceConnectionSource.java | 61 + .../jdbc/FactoryMethodConnectionSource.java | 128 + .../core/appender/db/jdbc/JdbcAppender.java | 51 + .../appender/db/jdbc/JdbcDatabaseManager.java | 200 + .../db/jpa/AbstractLogEventWrapperEntity.java | 109 + .../appender/db/jpa/BasicLogEventEntity.java | 115 + .../core/appender/db/jpa/JpaAppender.java | 73 + .../appender/db/jpa/JpaDatabaseManager.java | 155 + .../ContextMapAttributeConverter.java | 27 + .../ContextMapJsonAttributeConverter.java | 50 + .../ContextStackAttributeConverter.java | 34 + .../ContextStackJsonAttributeConverter.java | 53 + .../converter/LevelAttributeConverter.java | 31 + .../converter/MarkerAttributeConverter.java | 33 + .../converter/MessageAttributeConverter.java | 34 + .../StackTraceElementAttributeConverter.java | 58 + .../ThrowableAttributeConverter.java | 200 + .../core/appender/jms/JmsQueueAppender.java | 56 + .../core/appender/jms/JmsTopicAppender.java | 56 + .../appender/rewrite/MapRewritePolicy.java | 118 + .../rewrite/PropertiesRewritePolicy.java | 73 + .../appender/rewrite/RewriteAppender.java | 81 + .../core/appender/rewrite/RewritePolicy.java | 10 + .../rolling/AbstractRolloverStrategy.java | 13 + .../rolling/CompositeTriggeringPolicy.java | 55 + .../rolling/DefaultRolloverStrategy.java | 247 ++ .../rolling/OnStartupTriggeringPolicy.java | 63 + .../appender/rolling/PatternProcessor.java | 214 + .../appender/rolling/RollingFileManager.java | 236 + .../RollingRandomAccessFileManager.java | 200 + .../appender/rolling/RolloverDescription.java | 16 + .../rolling/RolloverDescriptionImpl.java | 45 + .../appender/rolling/RolloverFrequency.java | 16 + .../appender/rolling/RolloverStrategy.java | 11 + .../rolling/SizeBasedTriggeringPolicy.java | 94 + .../rolling/TimeBasedTriggeringPolicy.java | 57 + .../appender/rolling/TriggeringPolicy.java | 13 + .../rolling/action/AbstractAction.java | 49 + .../core/appender/rolling/action/Action.java | 15 + .../rolling/action/CompositeAction.java | 63 + .../rolling/action/FileRenameAction.java | 108 + .../rolling/action/GzCompressAction.java | 67 + .../rolling/action/ZipCompressAction.java | 71 + .../log4j/core/appender/routing/Route.java | 71 + .../log4j/core/appender/routing/Routes.java | 58 + .../appender/routing/RoutingAppender.java | 151 + .../logging/log4j/core/async/AsyncLogger.java | 258 ++ .../log4j/core/async/AsyncLoggerConfig.java | 119 + .../core/async/AsyncLoggerConfigHelper.java | 262 ++ .../log4j/core/async/AsyncLoggerContext.java | 40 + .../async/AsyncLoggerContextSelector.java | 38 + .../log4j/core/async/DaemonThreadFactory.java | 32 + .../log4j/core/async/RingBufferLogEvent.java | 195 + .../core/async/RingBufferLogEventHandler.java | 32 + .../async/RingBufferLogEventTranslator.java | 56 + .../core/config/AbstractConfiguration.java | 562 +++ .../log4j/core/config/AppenderControl.java | 79 + .../log4j/core/config/AppenderRef.java | 54 + .../log4j/core/config/AppendersPlugin.java | 26 + .../log4j/core/config/Configuration.java | 71 + .../core/config/ConfigurationException.java | 17 + .../core/config/ConfigurationFactory.java | 347 ++ .../core/config/ConfigurationListener.java | 10 + .../core/config/ConfigurationMonitor.java | 8 + .../core/config/ConfigurationSource.java | 99 + .../log4j/core/config/Configurator.java | 91 + .../log4j/core/config/DefaultAdvertiser.java | 21 + .../core/config/DefaultConfiguration.java | 37 + .../config/DefaultConfigurationMonitor.java | 13 + .../core/config/FileConfigurationMonitor.java | 78 + .../log4j/core/config/LoggerConfig.java | 321 ++ .../logging/log4j/core/config/Loggers.java | 25 + .../log4j/core/config/LoggersPlugin.java | 31 + .../logging/log4j/core/config/Node.java | 95 + .../log4j/core/config/NullConfiguration.java | 21 + .../logging/log4j/core/config/Order.java | 15 + .../log4j/core/config/PropertiesPlugin.java | 33 + .../logging/log4j/core/config/Property.java | 43 + .../log4j/core/config/Reconfigurable.java | 10 + .../core/config/json/JsonConfiguration.java | 258 ++ .../config/json/JsonConfigurationFactory.java | 49 + .../log4j/core/config/plugins/Plugin.java | 27 + .../core/config/plugins/PluginAliases.java | 17 + .../core/config/plugins/PluginAttribute.java | 42 + .../plugins/PluginBuilderAttribute.java | 22 + .../config/plugins/PluginBuilderFactory.java | 16 + .../config/plugins/PluginConfiguration.java | 19 + .../core/config/plugins/PluginElement.java | 20 + .../core/config/plugins/PluginFactory.java | 16 + .../log4j/core/config/plugins/PluginNode.java | 19 + .../core/config/plugins/PluginValue.java | 20 + .../config/plugins/PluginVisitorStrategy.java | 19 + .../core/config/plugins/osgi/Activator.java | 64 + .../config/plugins/processor/PluginCache.java | 87 + .../config/plugins/processor/PluginEntry.java | 65 + .../plugins/processor/PluginProcessor.java | 144 + .../config/plugins/util/PluginBuilder.java | 204 + .../config/plugins/util/PluginManager.java | 239 + .../config/plugins/util/PluginRegistry.java | 47 + .../core/config/plugins/util/PluginType.java | 42 + .../config/plugins/util/ResolverUtil.java | 258 ++ .../config/plugins/util/TypeConverter.java | 8 + .../config/plugins/util/TypeConverters.java | 322 ++ .../visitors/AbstractPluginVisitor.java | 88 + .../visitors/PluginAttributeVisitor.java | 63 + .../PluginBuilderAttributeVisitor.java | 32 + .../visitors/PluginConfigurationVisitor.java | 30 + .../visitors/PluginElementVisitor.java | 81 + .../plugins/visitors/PluginNodeVisitor.java | 27 + .../plugins/visitors/PluginValueVisitor.java | 26 + .../plugins/visitors/PluginVisitor.java | 25 + .../plugins/visitors/PluginVisitors.java | 33 + .../config/status/StatusConfiguration.java | 149 + .../core/config/xml/XmlConfiguration.java | 320 ++ .../config/xml/XmlConfigurationFactory.java | 28 + .../core/config/yaml/YamlConfiguration.java | 29 + .../config/yaml/YamlConfigurationFactory.java | 49 + .../log4j/core/filter/AbstractFilter.java | 62 + .../log4j/core/filter/AbstractFilterable.java | 86 + .../log4j/core/filter/BurstFilter.java | 152 + .../log4j/core/filter/CompositeFilter.java | 169 + .../core/filter/DynamicThresholdFilter.java | 108 + .../logging/log4j/core/filter/Filterable.java | 21 + .../logging/log4j/core/filter/MapFilter.java | 130 + .../log4j/core/filter/MarkerFilter.java | 64 + .../log4j/core/filter/RegexFilter.java | 115 + .../core/filter/StructuredDataFilter.java | 109 + .../core/filter/ThreadContextMapFilter.java | 122 + .../log4j/core/filter/ThresholdFilter.java | 63 + .../logging/log4j/core/filter/TimeFilter.java | 79 + .../log4j/core/impl/ContextAnchor.java | 13 + .../core/impl/DefaultLogEventFactory.java | 21 + .../log4j/core/impl/ExtendedClassInfo.java | 74 + .../core/impl/ExtendedStackTraceElement.java | 96 + .../log4j/core/impl/Log4jContextFactory.java | 99 + .../log4j/core/impl/Log4jLogEvent.java | 363 ++ .../log4j/core/impl/LogEventFactory.java | 15 + .../impl/ReflectiveCallerClassUtility.java | 91 + .../core/impl/ThrowableFormatOptions.java | 132 + .../log4j/core/impl/ThrowableProxy.java | 452 ++ .../ExtendedStackTraceElementMixIn.java | 66 + .../log4j/core/jackson/Initializers.java | 56 + .../log4j/core/jackson/JsonConstants.java | 17 + .../log4j/core/jackson/LevelMixIn.java | 30 + .../jackson/ListOfMapEntryDeserializer.java | 40 + .../jackson/ListOfMapEntrySerializer.java | 36 + .../log4j/core/jackson/Log4jJsonModule.java | 29 + .../core/jackson/Log4jJsonObjectMapper.java | 24 + .../Log4jStackTraceElementDeserializer.java | 71 + .../log4j/core/jackson/Log4jXmlModule.java | 28 + .../core/jackson/Log4jXmlObjectMapper.java | 24 + .../log4j/core/jackson/LogEventMixIn.java | 131 + .../logging/log4j/core/jackson/MapEntry.java | 76 + .../log4j/core/jackson/MarkerMixIn.java | 40 + .../log4j/core/jackson/MessageSerializer.java | 28 + ...MutableThreadContextStackDeserializer.java | 34 + .../jackson/SimpleMessageDeserializer.java | 30 + .../core/jackson/StackTraceElementMixIn.java | 38 + .../core/jackson/ThrowableProxyMixIn.java | 64 + .../log4j/core/jackson/XmlConstants.java | 22 + .../logging/log4j/core/jmx/AppenderAdmin.java | 64 + .../log4j/core/jmx/AppenderAdminMBean.java | 18 + .../log4j/core/jmx/AsyncAppenderAdmin.java | 90 + .../core/jmx/AsyncAppenderAdminMBean.java | 30 + .../log4j/core/jmx/ContextSelectorAdmin.java | 36 + .../core/jmx/ContextSelectorAdminMBean.java | 10 + .../log4j/core/jmx/LoggerConfigAdmin.java | 86 + .../core/jmx/LoggerConfigAdminMBean.java | 24 + .../log4j/core/jmx/LoggerContextAdmin.java | 223 + .../core/jmx/LoggerContextAdminMBean.java | 40 + .../log4j/core/jmx/RingBufferAdmin.java | 56 + .../log4j/core/jmx/RingBufferAdminMBean.java | 13 + .../apache/logging/log4j/core/jmx/Server.java | 274 ++ .../log4j/core/jmx/StatusLoggerAdmin.java | 110 + .../core/jmx/StatusLoggerAdminMBean.java | 26 + .../core/layout/AbstractJacksonLayout.java | 43 + .../log4j/core/layout/AbstractLayout.java | 31 + .../core/layout/AbstractStringLayout.java | 37 + .../logging/log4j/core/layout/HtmlLayout.java | 334 ++ .../log4j/core/layout/JacksonFactory.java | 120 + .../logging/log4j/core/layout/JsonLayout.java | 62 + .../log4j/core/layout/LoggerFields.java | 58 + .../log4j/core/layout/PatternLayout.java | 204 + .../log4j/core/layout/Rfc5424Layout.java | 579 +++ .../log4j/core/layout/SerializedLayout.java | 95 + .../log4j/core/layout/SyslogLayout.java | 83 + .../logging/log4j/core/layout/XmlLayout.java | 71 + .../log4j/core/lookup/ContextMapLookup.java | 23 + .../logging/log4j/core/lookup/DateLookup.java | 45 + .../log4j/core/lookup/EnvironmentLookup.java | 22 + .../log4j/core/lookup/Interpolator.java | 117 + .../logging/log4j/core/lookup/JndiLookup.java | 52 + .../logging/log4j/core/lookup/MapLookup.java | 51 + .../core/lookup/ResourceBundleLookup.java | 39 + .../logging/log4j/core/lookup/StrLookup.java | 12 + .../logging/log4j/core/lookup/StrMatcher.java | 172 + .../log4j/core/lookup/StrSubstitutor.java | 502 +++ .../core/lookup/StructuredDataLookup.java | 33 + .../core/lookup/SystemPropertiesLookup.java | 32 + .../log4j/core/net/AbstractSocketManager.java | 34 + .../logging/log4j/core/net/Advertiser.java | 12 + .../log4j/core/net/DatagramOutputStream.java | 109 + .../log4j/core/net/DatagramSocketManager.java | 75 + .../logging/log4j/core/net/Facility.java | 55 + .../log4j/core/net/MimeMessageBuilder.java | 80 + .../core/net/MulticastDnsAdvertiser.java | 183 + .../logging/log4j/core/net/Priority.java | 38 + .../logging/log4j/core/net/Protocol.java | 15 + .../logging/log4j/core/net/Severity.java | 61 + .../logging/log4j/core/net/SmtpManager.java | 323 ++ .../log4j/core/net/SslSocketManager.java | 138 + .../log4j/core/net/TcpSocketManager.java | 230 + .../core/net/jms/AbstractJmsManager.java | 93 + .../core/net/jms/AbstractJmsReceiver.java | 58 + .../log4j/core/net/jms/JmsQueueManager.java | 189 + .../log4j/core/net/jms/JmsQueueReceiver.java | 76 + .../log4j/core/net/jms/JmsTopicManager.java | 189 + .../log4j/core/net/jms/JmsTopicReceiver.java | 76 + .../net/server/AbstractLogEventBridge.java | 21 + .../core/net/server/AbstractSocketServer.java | 96 + .../net/server/InputStreamLogEventBridge.java | 72 + .../server/JsonInputStreamLogEventBridge.java | 64 + .../log4j/core/net/server/LogEventBridge.java | 14 + .../ObjectInputStreamLogEventBridge.java | 29 + .../net/server/SecureTcpSocketServer.java | 17 + .../core/net/server/TcpSocketServer.java | 169 + .../core/net/server/UdpSocketServer.java | 114 + .../server/XmlInputStreamLogEventBridge.java | 39 + .../ssl/AbstractKeyStoreConfiguration.java | 77 + .../core/net/ssl/KeyStoreConfiguration.java | 36 + .../ssl/KeyStoreConfigurationException.java | 15 + .../log4j/core/net/ssl/SslConfiguration.java | 208 + .../net/ssl/SslConfigurationDefaults.java | 9 + .../net/ssl/SslConfigurationException.java | 13 + .../core/net/ssl/StoreConfiguration.java | 67 + .../net/ssl/StoreConfigurationException.java | 17 + .../core/net/ssl/TrustStoreConfiguration.java | 35 + .../ssl/TrustStoreConfigurationException.java | 15 + .../pattern/AbstractPatternConverter.java | 30 + .../pattern/AbstractStyleNameConverter.java | 204 + .../log4j/core/pattern/AnsiConverter.java | 7 + .../log4j/core/pattern/AnsiEscape.java | 106 + .../core/pattern/ArrayPatternConverter.java | 11 + .../log4j/core/pattern/CachedDateFormat.java | 144 + .../pattern/ClassNamePatternConverter.java | 34 + .../log4j/core/pattern/ConverterKeys.java | 15 + .../core/pattern/DatePatternConverter.java | 182 + .../pattern/EncodingPatternConverter.java | 88 + .../ExtendedThrowablePatternConverter.java | 58 + .../pattern/FileDatePatternConverter.java | 23 + .../pattern/FileLocationPatternConverter.java | 32 + .../log4j/core/pattern/FormattingInfo.java | 68 + .../pattern/FullLocationPatternConverter.java | 32 + .../core/pattern/HighlightConverter.java | 122 + .../core/pattern/IntegerPatternConverter.java | 44 + .../core/pattern/LevelPatternConverter.java | 92 + .../pattern/LineLocationPatternConverter.java | 32 + .../LineSeparatorPatternConverter.java | 31 + .../core/pattern/LiteralPatternConverter.java | 44 + .../pattern/LogEventPatternConverter.java | 27 + .../core/pattern/LoggerPatternConverter.java | 32 + .../core/pattern/MapPatternConverter.java | 58 + .../core/pattern/MarkerPatternConverter.java | 31 + .../core/pattern/MdcPatternConverter.java | 51 + .../core/pattern/MessagePatternConverter.java | 43 + .../MethodLocationPatternConverter.java | 32 + .../log4j/core/pattern/NameAbbreviator.java | 135 + .../core/pattern/NamePatternConverter.java | 21 + .../core/pattern/NdcPatternConverter.java | 29 + .../log4j/core/pattern/PatternConverter.java | 12 + .../log4j/core/pattern/PatternFormatter.java | 47 + .../log4j/core/pattern/PatternParser.java | 352 ++ .../log4j/core/pattern/RegexReplacement.java | 43 + .../pattern/RegexReplacementConverter.java | 63 + .../pattern/RelativeTimePatternConverter.java | 43 + .../RootThrowablePatternConverter.java | 58 + .../SequenceNumberPatternConverter.java | 31 + .../log4j/core/pattern/StyleConverter.java | 96 + .../core/pattern/ThreadPatternConverter.java | 29 + .../pattern/ThrowablePatternConverter.java | 103 + .../core/pattern/UuidPatternConverter.java | 39 + .../core/selector/BasicContextSelector.java | 44 + .../selector/ClassLoaderContextSelector.java | 208 + .../log4j/core/selector/ContextSelector.java | 18 + .../core/selector/JndiContextSelector.java | 102 + .../core/selector/NamedContextSelector.java | 15 + .../logging/log4j/core/tools/Generate.java | 205 + .../logging/log4j/core/util/Assert.java | 16 + .../logging/log4j/core/util/Booleans.java | 13 + .../logging/log4j/core/util/Builder.java | 8 + .../log4j/core/util/BundleResourceLoader.java | 42 + .../logging/log4j/core/util/CachedClock.java | 44 + .../logging/log4j/core/util/Charsets.java | 32 + .../core/util/ClassLoaderResourceLoader.java | 37 + .../apache/logging/log4j/core/util/Clock.java | 8 + .../logging/log4j/core/util/ClockFactory.java | 49 + .../logging/log4j/core/util/Closer.java | 92 + .../log4j/core/util/CoarseCachedClock.java | 37 + .../logging/log4j/core/util/Constants.java | 18 + .../logging/log4j/core/util/CyclicBuffer.java | 55 + .../logging/log4j/core/util/FileUtils.java | 77 + .../logging/log4j/core/util/Integers.java | 19 + .../logging/log4j/core/util/JndiCloser.java | 24 + .../logging/log4j/core/util/KeyValuePair.java | 36 + .../logging/log4j/core/util/Loader.java | 203 + .../logging/log4j/core/util/NameUtil.java | 41 + .../logging/log4j/core/util/NetUtils.java | 47 + .../log4j/core/util/OptionConverter.java | 212 + .../logging/log4j/core/util/Patterns.java | 16 + .../log4j/core/util/ResourceLoader.java | 16 + .../log4j/core/util/SecretKeyProvider.java | 10 + .../logging/log4j/core/util/SetUtils.java | 21 + .../logging/log4j/core/util/SystemClock.java | 14 + .../logging/log4j/core/util/Throwables.java | 111 + .../logging/log4j/core/util/Transform.java | 131 + .../logging/log4j/core/util/UuidUtil.java | 130 + .../log4j/message/AbstractMessageFactory.java | 29 + .../log4j/message/BasicThreadInformation.java | 73 + .../message/ExtendedThreadInformation.java | 151 + .../log4j/message/FormattedMessage.java | 158 + .../message/FormattedMessageFactory.java | 18 + .../log4j/message/LocalizedMessage.java | 221 + .../message/LocalizedMessageFactory.java | 42 + .../log4j/message/LoggerNameAwareMessage.java | 10 + .../logging/log4j/message/MapMessage.java | 215 + .../apache/logging/log4j/message/Message.java | 17 + .../logging/log4j/message/MessageFactory.java | 14 + .../log4j/message/MessageFormatMessage.java | 119 + .../message/MessageFormatMessageFactory.java | 18 + .../log4j/message/MultiformatMessage.java | 13 + .../logging/log4j/message/ObjectMessage.java | 76 + .../log4j/message/ParameterizedMessage.java | 348 ++ .../message/ParameterizedMessageFactory.java | 19 + .../logging/log4j/message/SimpleMessage.java | 59 + .../log4j/message/StringFormattedMessage.java | 118 + .../StringFormatterMessageFactory.java | 19 + .../log4j/message/StructuredDataId.java | 111 + .../log4j/message/StructuredDataMessage.java | 234 + .../log4j/message/ThreadDumpMessage.java | 151 + .../log4j/message/ThreadInformation.java | 10 + .../log4j/message/TimestampMessage.java | 8 + .../logging/log4j/simple/SimpleLogger.java | 129 + .../log4j/simple/SimpleLoggerContext.java | 87 + .../simple/SimpleLoggerContextFactory.java | 28 + .../logging/log4j/spi/AbstractLogger.java | 813 ++++ .../log4j/spi/DefaultThreadContextMap.java | 129 + .../log4j/spi/DefaultThreadContextStack.java | 281 ++ .../logging/log4j/spi/ExtendedLogger.java | 34 + .../log4j/spi/ExtendedLoggerWrapper.java | 57 + .../logging/log4j/spi/LoggerContext.java | 17 + .../log4j/spi/LoggerContextFactory.java | 15 + .../log4j/spi/MutableThreadContextStack.java | 207 + .../apache/logging/log4j/spi/Provider.java | 81 + .../logging/log4j/spi/StandardLevel.java | 43 + .../logging/log4j/spi/ThreadContextMap.java | 24 + .../logging/log4j/spi/ThreadContextStack.java | 10 + .../log4j/status/StatusConsoleListener.java | 68 + .../logging/log4j/status/StatusData.java | 68 + .../logging/log4j/status/StatusListener.java | 17 + .../logging/log4j/status/StatusLogger.java | 252 ++ .../apache/logging/log4j/util/Activator.java | 97 + .../logging/log4j/util/EnglishEnums.java | 19 + .../apache/logging/log4j/util/LoaderUtil.java | 37 + .../logging/log4j/util/PropertiesUtil.java | 205 + .../logging/log4j/util/ProviderUtil.java | 80 + .../apache/logging/log4j/util/Strings.java | 24 + .../AbstractConnectionClosedListener.java | 21 + .../smack/AbstractConnectionListener.java | 38 + .../smack/AbstractXMPPConnection.java | 1145 +++++ .../smack/ConnectionConfiguration.java | 285 ++ .../smack/ConnectionCreationListener.java | 10 + .../smack/ConnectionListener.java | 22 + .../jivesoftware/smack/ExceptionCallback.java | 8 + src/org/jivesoftware/smack/Manager.java | 21 + .../jivesoftware/smack/MessageListener.java | 10 + .../jivesoftware/smack/PacketCollector.java | 150 + .../jivesoftware/smack/PacketListener.java | 11 + .../jivesoftware/smack/PresenceListener.java | 10 + .../smack/ReconnectionManager.java | 189 + .../smack/SASLAuthentication.java | 271 ++ .../smack/SmackConfiguration.java | 154 + .../jivesoftware/smack/SmackException.java | 210 + .../smack/SmackInitialization.java | 189 + .../jivesoftware/smack/StanzaListener.java | 11 + .../smack/SynchronizationPoint.java | 191 + .../jivesoftware/smack/XMPPConnection.java | 126 + .../smack/XMPPConnectionRegistry.java | 26 + src/org/jivesoftware/smack/XMPPException.java | 79 + .../smack/compress/packet/Compress.java | 75 + .../smack/compress/packet/Compressed.java | 31 + .../Java7ZlibInputOutputStream.java | 92 + .../compression/XMPPInputOutputStream.java | 37 + .../smack/debugger/AbstractDebugger.java | 153 + .../smack/debugger/ConsoleDebugger.java | 33 + .../smack/debugger/JulDebugger.java | 24 + .../debugger/ReflectionDebuggerFactory.java | 86 + .../smack/debugger/SmackDebugger.java | 25 + .../smack/debugger/SmackDebuggerFactory.java | 13 + .../smack/filter/AbstractListFilter.java | 48 + .../jivesoftware/smack/filter/AndFilter.java | 28 + .../filter/FlexibleStanzaTypeFilter.java | 36 + .../smack/filter/FromMatchesFilter.java | 49 + .../smack/filter/IQReplyFilter.java | 75 + .../smack/filter/IQResultReplyFilter.java | 33 + .../smack/filter/IQTypeFilter.java | 35 + .../smack/filter/MessageTypeFilter.java | 36 + .../smack/filter/MessageWithBodiesFilter.java | 27 + .../filter/MessageWithSubjectFilter.java | 27 + .../jivesoftware/smack/filter/NotFilter.java | 22 + .../jivesoftware/smack/filter/OrFilter.java | 28 + .../smack/filter/PacketExtensionFilter.java | 39 + .../smack/filter/PacketFilter.java | 11 + .../smack/filter/PacketIDFilter.java | 34 + .../smack/filter/PacketTypeFilter.java | 30 + .../smack/filter/PresenceTypeFilter.java | 36 + .../smack/filter/StanzaExtensionFilter.java | 38 + .../smack/filter/StanzaFilter.java | 10 + .../smack/filter/StanzaIdFilter.java | 30 + .../smack/filter/StanzaTypeFilter.java | 31 + .../smack/filter/ThreadFilter.java | 30 + .../jivesoftware/smack/filter/ToFilter.java | 30 + .../smack/initializer/SmackInitializer.java | 10 + .../smack/initializer/UrlInitializer.java | 66 + .../smack/initializer/VmArgInitializer.java | 23 + .../iqrequest/AbstractIqRequestHandler.java | 54 + .../smack/iqrequest/IQRequestHandler.java | 24 + .../smack/packet/AbstractError.java | 62 + src/org/jivesoftware/smack/packet/Bind.java | 71 + .../smack/packet/DefaultExtensionElement.java | 66 + .../jivesoftware/smack/packet/Element.java | 8 + .../smack/packet/EmptyResultIQ.java | 29 + .../jivesoftware/smack/packet/ErrorIQ.java | 21 + .../smack/packet/ExtensionElement.java | 11 + .../smack/packet/FullStreamElement.java | 12 + src/org/jivesoftware/smack/packet/IQ.java | 153 + .../jivesoftware/smack/packet/Mechanisms.java | 51 + .../jivesoftware/smack/packet/Message.java | 345 ++ .../smack/packet/NamedElement.java | 11 + src/org/jivesoftware/smack/packet/Packet.java | 66 + .../smack/packet/PacketExtension.java | 11 + .../smack/packet/PlainStreamElement.java | 10 + .../jivesoftware/smack/packet/Presence.java | 139 + .../jivesoftware/smack/packet/Session.java | 57 + .../jivesoftware/smack/packet/SimpleIQ.java | 19 + src/org/jivesoftware/smack/packet/Stanza.java | 269 ++ .../jivesoftware/smack/packet/StartTls.java | 45 + .../smack/packet/StreamError.java | 107 + .../jivesoftware/smack/packet/StreamOpen.java | 78 + .../smack/packet/TopLevelStreamElement.java | 10 + .../jivesoftware/smack/packet/UnparsedIQ.java | 25 + .../jivesoftware/smack/packet/XMPPError.java | 203 + .../smack/packet/id/StanzaIdUtil.java | 16 + .../parsing/ExceptionLoggingCallback.java | 20 + .../parsing/ExceptionThrowingCallback.java | 15 + .../parsing/ParsingExceptionCallback.java | 11 + .../smack/parsing/UnparsablePacket.java | 22 + .../smack/provider/AbstractProviderInfo.java | 28 + .../smack/provider/BindIQProvider.java | 48 + .../provider/EmbeddedExtensionProvider.java | 39 + .../provider/ExtensionElementProvider.java | 11 + .../smack/provider/ExtensionProviderInfo.java | 15 + .../smack/provider/IQProvider.java | 11 + .../smack/provider/IQProviderInfo.java | 15 + .../smack/provider/IntrospectionProvider.java | 115 + .../jivesoftware/smack/provider/Provider.java | 23 + .../smack/provider/ProviderFileLoader.java | 131 + .../smack/provider/ProviderLoader.java | 17 + .../smack/provider/ProviderManager.java | 129 + .../provider/StreamFeatureProviderInfo.java | 15 + .../smack/proxy/DirectSocketFactory.java | 39 + .../smack/proxy/HTTPProxySocketFactory.java | 104 + .../smack/proxy/ProxyException.java | 24 + .../jivesoftware/smack/proxy/ProxyInfo.java | 90 + .../smack/proxy/Socks4ProxySocketFactory.java | 118 + .../smack/proxy/Socks5ProxySocketFactory.java | 164 + .../smack/sasl/SASLAnonymous.java | 41 + .../jivesoftware/smack/sasl/SASLError.java | 43 + .../smack/sasl/SASLErrorException.java | 40 + .../smack/sasl/SASLMechanism.java | 106 + .../smack/sasl/core/SASLXOauth2Mechanism.java | 43 + .../smack/sasl/core/SCRAMSHA1Mechanism.java | 248 ++ .../smack/sasl/packet/SaslStreamElements.java | 154 + .../util/ArrayBlockingQueueWithShutdown.java | 497 +++ src/org/jivesoftware/smack/util/Async.java | 25 + .../jivesoftware/smack/util/ByteUtils.java | 14 + src/org/jivesoftware/smack/util/DNSUtil.java | 169 + .../jivesoftware/smack/util/EventManger.java | 58 + .../jivesoftware/smack/util/FileUtils.java | 115 + .../smack/util/LazyStringBuilder.java | 90 + src/org/jivesoftware/smack/util/MAC.java | 33 + src/org/jivesoftware/smack/util/MD5.java | 37 + src/org/jivesoftware/smack/util/MultiMap.java | 163 + .../jivesoftware/smack/util/NumberUtil.java | 15 + src/org/jivesoftware/smack/util/Objects.java | 13 + .../smack/util/ObservableReader.java | 106 + .../smack/util/ObservableWriter.java | 102 + .../smack/util/PacketParserUtils.java | 765 ++++ .../jivesoftware/smack/util/PacketUtil.java | 22 + .../jivesoftware/smack/util/ParserUtils.java | 106 + .../smack/util/ReaderListener.java | 8 + src/org/jivesoftware/smack/util/SHA1.java | 38 + .../util/SmackExecutorThreadFactory.java | 26 + .../smack/util/StringTransformer.java | 8 + .../jivesoftware/smack/util/StringUtils.java | 174 + src/org/jivesoftware/smack/util/TLSUtils.java | 102 + .../smack/util/WriterListener.java | 8 + .../smack/util/XmlStringBuilder.java | 335 ++ .../smack/util/dns/DNSResolver.java | 11 + .../smack/util/dns/HostAddress.java | 72 + .../smack/util/dns/SRVRecord.java | 47 + .../smack/util/stringencoder/Base32.java | 152 + .../smack/util/stringencoder/Base64.java | 95 + .../stringencoder/Base64UrlSafeEncoder.java | 28 + .../util/stringencoder/StringEncoder.java | 10 + src/org/jxmpp/jid/BareJid.java | 12 + src/org/jxmpp/jid/DomainBareJid.java | 10 + src/org/jxmpp/jid/DomainFullJid.java | 12 + src/org/jxmpp/jid/FullJid.java | 19 + src/org/jxmpp/jid/Jid.java | 84 + src/org/jxmpp/jid/JidWithLocalpart.java | 15 + src/org/jxmpp/jid/JidWithResource.java | 12 + src/org/jxmpp/jid/impl/AbstractJid.java | 141 + .../jid/impl/DomainAndResourcepartJid.java | 135 + src/org/jxmpp/jid/impl/DomainpartJid.java | 121 + src/org/jxmpp/jid/impl/JidCreate.java | 205 + .../jxmpp/jid/impl/LocalAndDomainpartJid.java | 146 + .../impl/LocalDomainAndResourcepartJid.java | 168 + src/org/jxmpp/jid/parts/Domainpart.java | 24 + src/org/jxmpp/jid/parts/Localpart.java | 21 + src/org/jxmpp/jid/parts/Part.java | 56 + src/org/jxmpp/jid/parts/Resourcepart.java | 23 + src/org/jxmpp/jid/util/JidUtil.java | 180 + .../jxmpp/stringprep/XmppStringPrepUtil.java | 74 + src/org/jxmpp/stringprep/XmppStringprep.java | 14 + .../stringprep/XmppStringprepException.java | 27 + .../simple/SimpleXmppStringprep.java | 60 + src/org/jxmpp/util/XmppDateTime.java | 274 ++ src/org/jxmpp/util/XmppStringUtils.java | 267 ++ src/org/jxmpp/util/cache/Cache.java | 14 + src/org/jxmpp/util/cache/ExpirationCache.java | 184 + src/org/jxmpp/util/cache/LruCache.java | 133 + src/org/xmlpull/mxp1/MXParser.java | 2408 ++++++++++ .../xmlpull/mxp1/MXParserCachingStrings.java | 241 + src/org/xmlpull/mxp1/MXParserFactory.java | 45 + .../xmlpull/mxp1/MXParserNonValidating.java | 206 + .../xmlpull/mxp1_serializer/MXSerializer.java | 884 ++++ src/org/xmlpull/v1/XmlPullParser.java | 103 + .../xmlpull/v1/XmlPullParserException.java | 54 + src/org/xmlpull/v1/XmlPullParserFactory.java | 187 + src/org/xmlpull/v1/XmlSerializer.java | 60 + src/org/xmlpull/v1/builder/Iterable.java | 10 + src/org/xmlpull/v1/builder/XmlAttribute.java | 26 + .../v1/builder/XmlBuilderException.java | 66 + src/org/xmlpull/v1/builder/XmlCharacters.java | 13 + src/org/xmlpull/v1/builder/XmlComment.java | 12 + src/org/xmlpull/v1/builder/XmlContained.java | 12 + src/org/xmlpull/v1/builder/XmlContainer.java | 7 + src/org/xmlpull/v1/builder/XmlDoctype.java | 24 + src/org/xmlpull/v1/builder/XmlDocument.java | 75 + src/org/xmlpull/v1/builder/XmlElement.java | 149 + .../xmlpull/v1/builder/XmlInfosetBuilder.java | 242 + src/org/xmlpull/v1/builder/XmlNamespace.java | 10 + src/org/xmlpull/v1/builder/XmlNotation.java | 14 + .../v1/builder/XmlProcessingInstruction.java | 19 + .../xmlpull/v1/builder/XmlSerializable.java | 11 + .../builder/XmlUnexpandedEntityReference.java | 18 + .../xmlpull/v1/builder/XmlUnparsedEntity.java | 20 + .../builder/adapter/XmlAttributeAdapter.java | 51 + .../builder/adapter/XmlDocumentAdapter.java | 150 + .../v1/builder/adapter/XmlElementAdapter.java | 406 ++ .../v1/builder/impl/XmlAttributeImpl.java | 104 + .../v1/builder/impl/XmlCommentImpl.java | 29 + .../v1/builder/impl/XmlDocumentImpl.java | 228 + .../v1/builder/impl/XmlElementImpl.java | 754 ++++ .../builder/impl/XmlInfosetBuilderImpl.java | 354 ++ .../v1/builder/impl/XmlNamespaceImpl.java | 57 + .../v1/dom2_builder/DOM2XmlPullBuilder.java | 164 + .../v1/parser_pool/XmlPullParserPool.java | 74 + src/org/xmlpull/v1/sax2/Driver.java | 379 ++ src/org/xmlpull/v1/util/XmlPullUtil.java | 142 + .../v1/wrapper/XmlPullParserWrapper.java | 46 + .../v1/wrapper/XmlPullWrapperFactory.java | 81 + .../v1/wrapper/XmlSerializerWrapper.java | 38 + .../classic/StaticXmlPullParserWrapper.java | 239 + .../classic/StaticXmlSerializerWrapper.java | 342 ++ .../classic/XmlPullParserDelegate.java | 167 + .../classic/XmlSerializerDelegate.java | 118 + src/org/yaml/snakeyaml/Dumper.java | 29 + src/org/yaml/snakeyaml/DumperOptions.java | 304 ++ src/org/yaml/snakeyaml/JavaBeanDumper.java | 94 + src/org/yaml/snakeyaml/JavaBeanLoader.java | 64 + src/org/yaml/snakeyaml/Loader.java | 21 + src/org/yaml/snakeyaml/LoaderOptions.java | 26 + src/org/yaml/snakeyaml/TypeDescription.java | 76 + src/org/yaml/snakeyaml/Yaml.java | 395 ++ src/org/yaml/snakeyaml/composer/Composer.java | 173 + .../snakeyaml/composer/ComposerException.java | 16 + .../constructor/AbstractConstruct.java | 18 + .../constructor/BaseConstructor.java | 333 ++ .../yaml/snakeyaml/constructor/Construct.java | 12 + .../snakeyaml/constructor/Constructor.java | 549 +++ .../constructor/ConstructorException.java | 20 + .../CustomClassLoaderConstructor.java | 31 + .../constructor/SafeConstructor.java | 457 ++ src/org/yaml/snakeyaml/emitter/Emitable.java | 11 + src/org/yaml/snakeyaml/emitter/Emitter.java | 1335 ++++++ .../snakeyaml/emitter/EmitterException.java | 15 + .../yaml/snakeyaml/emitter/EmitterState.java | 10 + .../snakeyaml/emitter/ScalarAnalysis.java | 24 + src/org/yaml/snakeyaml/error/Mark.java | 101 + .../snakeyaml/error/MarkedYAMLException.java | 83 + .../yaml/snakeyaml/error/YAMLException.java | 21 + src/org/yaml/snakeyaml/events/AliasEvent.java | 19 + .../snakeyaml/events/CollectionEndEvent.java | 14 + .../events/CollectionStartEvent.java | 37 + .../snakeyaml/events/DocumentEndEvent.java | 25 + .../snakeyaml/events/DocumentStartEvent.java | 43 + src/org/yaml/snakeyaml/events/Event.java | 62 + .../yaml/snakeyaml/events/ImplicitTuple.java | 30 + .../snakeyaml/events/MappingEndEvent.java | 19 + .../snakeyaml/events/MappingStartEvent.java | 19 + src/org/yaml/snakeyaml/events/NodeEvent.java | 25 + .../yaml/snakeyaml/events/ScalarEvent.java | 49 + .../snakeyaml/events/SequenceEndEvent.java | 19 + .../snakeyaml/events/SequenceStartEvent.java | 19 + .../yaml/snakeyaml/events/StreamEndEvent.java | 18 + .../snakeyaml/events/StreamStartEvent.java | 18 + .../compactnotation/CompactConstructor.java | 197 + .../compactnotation/CompactData.java | 38 + .../PackageCompactConstructor.java | 32 + .../external/biz/base64Coder/Base64Coder.java | 160 + .../gdata/util/common/base/Escaper.java | 10 + .../util/common/base/PercentEscaper.java | 128 + .../util/common/base/UnicodeEscaper.java | 195 + .../snakeyaml/introspector/BeanAccess.java | 14 + .../snakeyaml/introspector/FieldProperty.java | 32 + .../introspector/GenericProperty.java | 71 + .../introspector/MethodProperty.java | 44 + .../introspector/MissingProperty.java | 30 + .../yaml/snakeyaml/introspector/Property.java | 61 + .../snakeyaml/introspector/PropertyUtils.java | 138 + src/org/yaml/snakeyaml/nodes/AnchorNode.java | 25 + .../yaml/snakeyaml/nodes/CollectionNode.java | 30 + src/org/yaml/snakeyaml/nodes/MappingNode.java | 84 + src/org/yaml/snakeyaml/nodes/Node.java | 96 + src/org/yaml/snakeyaml/nodes/NodeId.java | 15 + src/org/yaml/snakeyaml/nodes/NodeTuple.java | 31 + src/org/yaml/snakeyaml/nodes/ScalarNode.java | 45 + .../yaml/snakeyaml/nodes/SequenceNode.java | 51 + src/org/yaml/snakeyaml/nodes/Tag.java | 146 + src/org/yaml/snakeyaml/parser/Parser.java | 14 + .../snakeyaml/parser/ParserException.java | 16 + src/org/yaml/snakeyaml/parser/ParserImpl.java | 657 +++ src/org/yaml/snakeyaml/parser/Production.java | 10 + .../snakeyaml/parser/VersionTagsTuple.java | 32 + .../snakeyaml/reader/ReaderException.java | 37 + .../yaml/snakeyaml/reader/StreamReader.java | 160 + .../yaml/snakeyaml/reader/UnicodeReader.java | 69 + .../representer/BaseRepresenter.java | 176 + .../yaml/snakeyaml/representer/Represent.java | 10 + .../snakeyaml/representer/Representer.java | 163 + .../representer/SafeRepresenter.java | 437 ++ src/org/yaml/snakeyaml/resolver/Resolver.java | 107 + .../snakeyaml/resolver/ResolverTuple.java | 29 + src/org/yaml/snakeyaml/scanner/Constant.java | 61 + src/org/yaml/snakeyaml/scanner/Scanner.java | 14 + .../snakeyaml/scanner/ScannerException.java | 20 + .../yaml/snakeyaml/scanner/ScannerImpl.java | 1234 ++++++ src/org/yaml/snakeyaml/scanner/SimpleKey.java | 52 + .../yaml/snakeyaml/serializer/Serializer.java | 202 + .../serializer/SerializerException.java | 15 + src/org/yaml/snakeyaml/tokens/AliasToken.java | 29 + .../yaml/snakeyaml/tokens/AnchorToken.java | 29 + .../yaml/snakeyaml/tokens/BlockEndToken.java | 18 + .../snakeyaml/tokens/BlockEntryToken.java | 18 + .../tokens/BlockMappingStartToken.java | 18 + .../tokens/BlockSequenceStartToken.java | 18 + .../yaml/snakeyaml/tokens/DirectiveToken.java | 48 + .../snakeyaml/tokens/DocumentEndToken.java | 18 + .../snakeyaml/tokens/DocumentStartToken.java | 18 + .../yaml/snakeyaml/tokens/FlowEntryToken.java | 18 + .../snakeyaml/tokens/FlowMappingEndToken.java | 18 + .../tokens/FlowMappingStartToken.java | 18 + .../tokens/FlowSequenceEndToken.java | 18 + .../tokens/FlowSequenceStartToken.java | 18 + src/org/yaml/snakeyaml/tokens/KeyToken.java | 18 + .../yaml/snakeyaml/tokens/ScalarToken.java | 45 + .../yaml/snakeyaml/tokens/StreamEndToken.java | 18 + .../snakeyaml/tokens/StreamStartToken.java | 18 + src/org/yaml/snakeyaml/tokens/TagToken.java | 30 + src/org/yaml/snakeyaml/tokens/TagTuple.java | 25 + src/org/yaml/snakeyaml/tokens/Token.java | 76 + src/org/yaml/snakeyaml/tokens/ValueToken.java | 18 + src/org/yaml/snakeyaml/util/ArrayStack.java | 33 + src/org/yaml/snakeyaml/util/UriEncoder.java | 40 + src/{main => }/prismarine.png | Bin 3812 files changed, 228702 insertions(+), 223704 deletions(-) create mode 100644 Readme.md create mode 100644 cfr.jar delete mode 100644 etc/decompiled.zip rename etc/{source.jar => skaiacraft_v3.jar} (100%) rename src/{main => }/Log4j-config.xsd (100%) rename src/{main => }/Log4j-events.dtd (100%) rename src/{main => }/Log4j-events.xsd (100%) rename src/{main => }/Log4j-levels.xsd (100%) rename src/{main => }/META-INF/MANIFEST.MF (100%) rename src/{main => }/Minecraft_Logo.png (100%) rename src/{main => }/cakehoohoohoo.png (100%) create mode 100644 src/com/evilco/mc/nbt/error/TagNotFoundException.java create mode 100644 src/com/evilco/mc/nbt/error/UnexpectedTagTypeException.java create mode 100644 src/com/evilco/mc/nbt/stream/NbtInputStream.java create mode 100644 src/com/evilco/mc/nbt/stream/NbtOutputStream.java create mode 100644 src/com/evilco/mc/nbt/tag/AbstractTag.java create mode 100644 src/com/evilco/mc/nbt/tag/IAnonymousTagContainer.java create mode 100644 src/com/evilco/mc/nbt/tag/INamedTagContainer.java create mode 100644 src/com/evilco/mc/nbt/tag/ITag.java create mode 100644 src/com/evilco/mc/nbt/tag/ITagContainer.java create mode 100644 src/com/evilco/mc/nbt/tag/TagByte.java create mode 100644 src/com/evilco/mc/nbt/tag/TagByteArray.java create mode 100644 src/com/evilco/mc/nbt/tag/TagCompound.java create mode 100644 src/com/evilco/mc/nbt/tag/TagDouble.java create mode 100644 src/com/evilco/mc/nbt/tag/TagFloat.java create mode 100644 src/com/evilco/mc/nbt/tag/TagInteger.java create mode 100644 src/com/evilco/mc/nbt/tag/TagIntegerArray.java create mode 100644 src/com/evilco/mc/nbt/tag/TagList.java create mode 100644 src/com/evilco/mc/nbt/tag/TagLong.java create mode 100644 src/com/evilco/mc/nbt/tag/TagShort.java create mode 100644 src/com/evilco/mc/nbt/tag/TagString.java create mode 100644 src/com/evilco/mc/nbt/tag/TagType.java create mode 100644 src/com/google/common/annotations/Beta.java create mode 100644 src/com/google/common/annotations/GwtCompatible.java create mode 100644 src/com/google/common/annotations/GwtIncompatible.java create mode 100644 src/com/google/common/annotations/VisibleForTesting.java create mode 100644 src/com/google/common/base/Absent.java create mode 100644 src/com/google/common/base/AbstractIterator.java create mode 100644 src/com/google/common/base/Ascii.java create mode 100644 src/com/google/common/base/CaseFormat.java create mode 100644 src/com/google/common/base/CharMatcher.java create mode 100644 src/com/google/common/base/Charsets.java create mode 100644 src/com/google/common/base/Converter.java create mode 100644 src/com/google/common/base/Defaults.java create mode 100644 src/com/google/common/base/Enums.java create mode 100644 src/com/google/common/base/Equivalence.java create mode 100644 src/com/google/common/base/FinalizablePhantomReference.java create mode 100644 src/com/google/common/base/FinalizableReference.java create mode 100644 src/com/google/common/base/FinalizableReferenceQueue.java create mode 100644 src/com/google/common/base/FinalizableSoftReference.java create mode 100644 src/com/google/common/base/FinalizableWeakReference.java create mode 100644 src/com/google/common/base/Function.java create mode 100644 src/com/google/common/base/FunctionalEquivalence.java create mode 100644 src/com/google/common/base/Functions.java create mode 100644 src/com/google/common/base/Joiner.java create mode 100644 src/com/google/common/base/MoreObjects.java create mode 100644 src/com/google/common/base/Objects.java create mode 100644 src/com/google/common/base/Optional.java create mode 100644 src/com/google/common/base/PairwiseEquivalence.java create mode 100644 src/com/google/common/base/Platform.java create mode 100644 src/com/google/common/base/Preconditions.java create mode 100644 src/com/google/common/base/Predicate.java create mode 100644 src/com/google/common/base/Predicates.java create mode 100644 src/com/google/common/base/Present.java create mode 100644 src/com/google/common/base/SmallCharMatcher.java create mode 100644 src/com/google/common/base/Splitter.java create mode 100644 src/com/google/common/base/StandardSystemProperty.java create mode 100644 src/com/google/common/base/Stopwatch.java create mode 100644 src/com/google/common/base/Strings.java create mode 100644 src/com/google/common/base/Supplier.java create mode 100644 src/com/google/common/base/Suppliers.java create mode 100644 src/com/google/common/base/Throwables.java create mode 100644 src/com/google/common/base/Ticker.java create mode 100644 src/com/google/common/base/Utf8.java create mode 100644 src/com/google/common/base/Verify.java create mode 100644 src/com/google/common/base/VerifyException.java create mode 100644 src/com/google/common/base/internal/Finalizer.java create mode 100644 src/com/google/common/base/package-info.java create mode 100644 src/com/google/common/cache/AbstractCache.java create mode 100644 src/com/google/common/cache/AbstractLoadingCache.java create mode 100644 src/com/google/common/cache/Cache.java create mode 100644 src/com/google/common/cache/CacheBuilder.java create mode 100644 src/com/google/common/cache/CacheBuilderSpec.java create mode 100644 src/com/google/common/cache/CacheLoader.java create mode 100644 src/com/google/common/cache/CacheStats.java create mode 100644 src/com/google/common/cache/ForwardingCache.java create mode 100644 src/com/google/common/cache/ForwardingLoadingCache.java create mode 100644 src/com/google/common/cache/LoadingCache.java create mode 100644 src/com/google/common/cache/LocalCache.java create mode 100644 src/com/google/common/cache/LongAddable.java create mode 100644 src/com/google/common/cache/LongAddables.java create mode 100644 src/com/google/common/cache/LongAdder.java create mode 100644 src/com/google/common/cache/RemovalCause.java create mode 100644 src/com/google/common/cache/RemovalListener.java create mode 100644 src/com/google/common/cache/RemovalListeners.java create mode 100644 src/com/google/common/cache/RemovalNotification.java create mode 100644 src/com/google/common/cache/Striped64.java create mode 100644 src/com/google/common/cache/Weigher.java create mode 100644 src/com/google/common/cache/package-info.java create mode 100644 src/com/google/common/collect/AbstractBiMap.java create mode 100644 src/com/google/common/collect/AbstractIndexedListIterator.java create mode 100644 src/com/google/common/collect/AbstractIterator.java create mode 100644 src/com/google/common/collect/AbstractListMultimap.java create mode 100644 src/com/google/common/collect/AbstractMapBasedMultimap.java create mode 100644 src/com/google/common/collect/AbstractMapBasedMultiset.java create mode 100644 src/com/google/common/collect/AbstractMapEntry.java create mode 100644 src/com/google/common/collect/AbstractMultimap.java create mode 100644 src/com/google/common/collect/AbstractMultiset.java create mode 100644 src/com/google/common/collect/AbstractNavigableMap.java create mode 100644 src/com/google/common/collect/AbstractRangeSet.java create mode 100644 src/com/google/common/collect/AbstractSequentialIterator.java create mode 100644 src/com/google/common/collect/AbstractSetMultimap.java create mode 100644 src/com/google/common/collect/AbstractSortedKeySortedSetMultimap.java create mode 100644 src/com/google/common/collect/AbstractSortedMultiset.java create mode 100644 src/com/google/common/collect/AbstractSortedSetMultimap.java create mode 100644 src/com/google/common/collect/AbstractTable.java create mode 100644 src/com/google/common/collect/AllEqualOrdering.java create mode 100644 src/com/google/common/collect/ArrayListMultimap.java create mode 100644 src/com/google/common/collect/ArrayTable.java create mode 100644 src/com/google/common/collect/BiMap.java create mode 100644 src/com/google/common/collect/BinaryTreeTraverser.java create mode 100644 src/com/google/common/collect/BoundType.java create mode 100644 src/com/google/common/collect/ByFunctionOrdering.java create mode 100644 src/com/google/common/collect/CartesianList.java create mode 100644 src/com/google/common/collect/ClassToInstanceMap.java create mode 100644 src/com/google/common/collect/CollectPreconditions.java create mode 100644 src/com/google/common/collect/Collections2.java create mode 100644 src/com/google/common/collect/ComparatorOrdering.java create mode 100644 src/com/google/common/collect/ComparisonChain.java create mode 100644 src/com/google/common/collect/CompoundOrdering.java create mode 100644 src/com/google/common/collect/ComputationException.java create mode 100644 src/com/google/common/collect/ComputingConcurrentHashMap.java create mode 100644 src/com/google/common/collect/ConcurrentHashMultiset.java create mode 100644 src/com/google/common/collect/Constraint.java create mode 100644 src/com/google/common/collect/Constraints.java create mode 100644 src/com/google/common/collect/ContiguousSet.java create mode 100644 src/com/google/common/collect/Count.java create mode 100644 src/com/google/common/collect/Cut.java create mode 100644 src/com/google/common/collect/DenseImmutableTable.java create mode 100644 src/com/google/common/collect/DescendingImmutableSortedMultiset.java create mode 100644 src/com/google/common/collect/DescendingImmutableSortedSet.java create mode 100644 src/com/google/common/collect/DescendingMultiset.java create mode 100644 src/com/google/common/collect/DiscreteDomain.java create mode 100644 src/com/google/common/collect/EmptyContiguousSet.java create mode 100644 src/com/google/common/collect/EmptyImmutableBiMap.java create mode 100644 src/com/google/common/collect/EmptyImmutableListMultimap.java create mode 100644 src/com/google/common/collect/EmptyImmutableSet.java create mode 100644 src/com/google/common/collect/EmptyImmutableSetMultimap.java create mode 100644 src/com/google/common/collect/EmptyImmutableSortedMap.java create mode 100644 src/com/google/common/collect/EmptyImmutableSortedMultiset.java create mode 100644 src/com/google/common/collect/EmptyImmutableSortedSet.java create mode 100644 src/com/google/common/collect/EnumBiMap.java create mode 100644 src/com/google/common/collect/EnumHashBiMap.java create mode 100644 src/com/google/common/collect/EnumMultiset.java create mode 100644 src/com/google/common/collect/EvictingQueue.java create mode 100644 src/com/google/common/collect/ExplicitOrdering.java create mode 100644 src/com/google/common/collect/FilteredEntryMultimap.java create mode 100644 src/com/google/common/collect/FilteredEntrySetMultimap.java create mode 100644 src/com/google/common/collect/FilteredKeyListMultimap.java create mode 100644 src/com/google/common/collect/FilteredKeyMultimap.java create mode 100644 src/com/google/common/collect/FilteredKeySetMultimap.java create mode 100644 src/com/google/common/collect/FilteredMultimap.java create mode 100644 src/com/google/common/collect/FilteredMultimapValues.java create mode 100644 src/com/google/common/collect/FilteredSetMultimap.java create mode 100644 src/com/google/common/collect/FluentIterable.java create mode 100644 src/com/google/common/collect/ForwardingBlockingDeque.java create mode 100644 src/com/google/common/collect/ForwardingCollection.java create mode 100644 src/com/google/common/collect/ForwardingConcurrentMap.java create mode 100644 src/com/google/common/collect/ForwardingDeque.java create mode 100644 src/com/google/common/collect/ForwardingImmutableCollection.java create mode 100644 src/com/google/common/collect/ForwardingImmutableList.java create mode 100644 src/com/google/common/collect/ForwardingImmutableMap.java create mode 100644 src/com/google/common/collect/ForwardingImmutableSet.java create mode 100644 src/com/google/common/collect/ForwardingIterator.java create mode 100644 src/com/google/common/collect/ForwardingList.java create mode 100644 src/com/google/common/collect/ForwardingListIterator.java create mode 100644 src/com/google/common/collect/ForwardingListMultimap.java create mode 100644 src/com/google/common/collect/ForwardingMap.java create mode 100644 src/com/google/common/collect/ForwardingMapEntry.java create mode 100644 src/com/google/common/collect/ForwardingMultimap.java create mode 100644 src/com/google/common/collect/ForwardingMultiset.java create mode 100644 src/com/google/common/collect/ForwardingNavigableMap.java create mode 100644 src/com/google/common/collect/ForwardingNavigableSet.java create mode 100644 src/com/google/common/collect/ForwardingObject.java create mode 100644 src/com/google/common/collect/ForwardingQueue.java create mode 100644 src/com/google/common/collect/ForwardingSet.java create mode 100644 src/com/google/common/collect/ForwardingSetMultimap.java create mode 100644 src/com/google/common/collect/ForwardingSortedMap.java create mode 100644 src/com/google/common/collect/ForwardingSortedMultiset.java create mode 100644 src/com/google/common/collect/ForwardingSortedSet.java create mode 100644 src/com/google/common/collect/ForwardingSortedSetMultimap.java create mode 100644 src/com/google/common/collect/ForwardingTable.java create mode 100644 src/com/google/common/collect/GeneralRange.java create mode 100644 src/com/google/common/collect/GenericMapMaker.java rename src/{main => }/com/google/common/collect/GwtTransient.java (75%) create mode 100644 src/com/google/common/collect/HashBasedTable.java create mode 100644 src/com/google/common/collect/HashBiMap.java create mode 100644 src/com/google/common/collect/HashMultimap.java create mode 100644 src/com/google/common/collect/HashMultiset.java create mode 100644 src/com/google/common/collect/Hashing.java create mode 100644 src/com/google/common/collect/ImmutableAsList.java create mode 100644 src/com/google/common/collect/ImmutableBiMap.java create mode 100644 src/com/google/common/collect/ImmutableClassToInstanceMap.java create mode 100644 src/com/google/common/collect/ImmutableCollection.java create mode 100644 src/com/google/common/collect/ImmutableEntry.java create mode 100644 src/com/google/common/collect/ImmutableEnumMap.java create mode 100644 src/com/google/common/collect/ImmutableEnumSet.java create mode 100644 src/com/google/common/collect/ImmutableList.java create mode 100644 src/com/google/common/collect/ImmutableListMultimap.java create mode 100644 src/com/google/common/collect/ImmutableMap.java create mode 100644 src/com/google/common/collect/ImmutableMapEntry.java create mode 100644 src/com/google/common/collect/ImmutableMapEntrySet.java create mode 100644 src/com/google/common/collect/ImmutableMapKeySet.java create mode 100644 src/com/google/common/collect/ImmutableMapValues.java create mode 100644 src/com/google/common/collect/ImmutableMultimap.java create mode 100644 src/com/google/common/collect/ImmutableMultiset.java create mode 100644 src/com/google/common/collect/ImmutableRangeMap.java create mode 100644 src/com/google/common/collect/ImmutableRangeSet.java create mode 100644 src/com/google/common/collect/ImmutableSet.java create mode 100644 src/com/google/common/collect/ImmutableSetMultimap.java create mode 100644 src/com/google/common/collect/ImmutableSortedAsList.java create mode 100644 src/com/google/common/collect/ImmutableSortedMap.java create mode 100644 src/com/google/common/collect/ImmutableSortedMapFauxverideShim.java create mode 100644 src/com/google/common/collect/ImmutableSortedMultiset.java create mode 100644 src/com/google/common/collect/ImmutableSortedMultisetFauxverideShim.java create mode 100644 src/com/google/common/collect/ImmutableSortedSet.java create mode 100644 src/com/google/common/collect/ImmutableSortedSetFauxverideShim.java create mode 100644 src/com/google/common/collect/ImmutableTable.java create mode 100644 src/com/google/common/collect/Interner.java create mode 100644 src/com/google/common/collect/Interners.java create mode 100644 src/com/google/common/collect/Iterables.java create mode 100644 src/com/google/common/collect/Iterators.java create mode 100644 src/com/google/common/collect/LexicographicalOrdering.java create mode 100644 src/com/google/common/collect/LinkedHashMultimap.java create mode 100644 src/com/google/common/collect/LinkedHashMultiset.java create mode 100644 src/com/google/common/collect/LinkedListMultimap.java create mode 100644 src/com/google/common/collect/ListMultimap.java create mode 100644 src/com/google/common/collect/Lists.java create mode 100644 src/com/google/common/collect/MapConstraint.java create mode 100644 src/com/google/common/collect/MapConstraints.java create mode 100644 src/com/google/common/collect/MapDifference.java create mode 100644 src/com/google/common/collect/MapMaker.java create mode 100644 src/com/google/common/collect/MapMakerInternalMap.java create mode 100644 src/com/google/common/collect/Maps.java create mode 100644 src/com/google/common/collect/MinMaxPriorityQueue.java create mode 100644 src/com/google/common/collect/Multimap.java create mode 100644 src/com/google/common/collect/MultimapBuilder.java create mode 100644 src/com/google/common/collect/Multimaps.java create mode 100644 src/com/google/common/collect/Multiset.java create mode 100644 src/com/google/common/collect/Multisets.java create mode 100644 src/com/google/common/collect/MutableClassToInstanceMap.java create mode 100644 src/com/google/common/collect/NaturalOrdering.java create mode 100644 src/com/google/common/collect/NullsFirstOrdering.java create mode 100644 src/com/google/common/collect/NullsLastOrdering.java create mode 100644 src/com/google/common/collect/ObjectArrays.java create mode 100644 src/com/google/common/collect/Ordering.java create mode 100644 src/com/google/common/collect/PeekingIterator.java create mode 100644 src/com/google/common/collect/Platform.java create mode 100644 src/com/google/common/collect/Queues.java create mode 100644 src/com/google/common/collect/Range.java create mode 100644 src/com/google/common/collect/RangeMap.java create mode 100644 src/com/google/common/collect/RangeSet.java create mode 100644 src/com/google/common/collect/RegularContiguousSet.java create mode 100644 src/com/google/common/collect/RegularImmutableAsList.java create mode 100644 src/com/google/common/collect/RegularImmutableBiMap.java create mode 100644 src/com/google/common/collect/RegularImmutableList.java create mode 100644 src/com/google/common/collect/RegularImmutableMap.java create mode 100644 src/com/google/common/collect/RegularImmutableMultiset.java create mode 100644 src/com/google/common/collect/RegularImmutableSet.java create mode 100644 src/com/google/common/collect/RegularImmutableSortedMap.java create mode 100644 src/com/google/common/collect/RegularImmutableSortedMultiset.java create mode 100644 src/com/google/common/collect/RegularImmutableSortedSet.java create mode 100644 src/com/google/common/collect/RegularImmutableTable.java create mode 100644 src/com/google/common/collect/ReverseNaturalOrdering.java create mode 100644 src/com/google/common/collect/ReverseOrdering.java create mode 100644 src/com/google/common/collect/RowSortedTable.java create mode 100644 src/com/google/common/collect/Serialization.java create mode 100644 src/com/google/common/collect/SetMultimap.java create mode 100644 src/com/google/common/collect/Sets.java create mode 100644 src/com/google/common/collect/SingletonImmutableBiMap.java create mode 100644 src/com/google/common/collect/SingletonImmutableList.java create mode 100644 src/com/google/common/collect/SingletonImmutableSet.java create mode 100644 src/com/google/common/collect/SingletonImmutableTable.java create mode 100644 src/com/google/common/collect/SortedIterable.java create mode 100644 src/com/google/common/collect/SortedIterables.java create mode 100644 src/com/google/common/collect/SortedLists.java create mode 100644 src/com/google/common/collect/SortedMapDifference.java create mode 100644 src/com/google/common/collect/SortedMultiset.java create mode 100644 src/com/google/common/collect/SortedMultisetBridge.java create mode 100644 src/com/google/common/collect/SortedMultisets.java create mode 100644 src/com/google/common/collect/SortedSetMultimap.java create mode 100644 src/com/google/common/collect/SparseImmutableTable.java create mode 100644 src/com/google/common/collect/StandardRowSortedTable.java create mode 100644 src/com/google/common/collect/StandardTable.java create mode 100644 src/com/google/common/collect/Synchronized.java create mode 100644 src/com/google/common/collect/Table.java create mode 100644 src/com/google/common/collect/Tables.java create mode 100644 src/com/google/common/collect/TransformedIterator.java create mode 100644 src/com/google/common/collect/TransformedListIterator.java create mode 100644 src/com/google/common/collect/TreeBasedTable.java create mode 100644 src/com/google/common/collect/TreeMultimap.java create mode 100644 src/com/google/common/collect/TreeMultiset.java create mode 100644 src/com/google/common/collect/TreeRangeMap.java create mode 100644 src/com/google/common/collect/TreeRangeSet.java create mode 100644 src/com/google/common/collect/TreeTraverser.java create mode 100644 src/com/google/common/collect/UnmodifiableIterator.java create mode 100644 src/com/google/common/collect/UnmodifiableListIterator.java create mode 100644 src/com/google/common/collect/UnmodifiableSortedMultiset.java create mode 100644 src/com/google/common/collect/UsingToStringOrdering.java create mode 100644 src/com/google/common/collect/WellBehavedMap.java create mode 100644 src/com/google/common/collect/package-info.java create mode 100644 src/com/google/common/escape/ArrayBasedCharEscaper.java create mode 100644 src/com/google/common/escape/ArrayBasedEscaperMap.java create mode 100644 src/com/google/common/escape/ArrayBasedUnicodeEscaper.java create mode 100644 src/com/google/common/escape/CharEscaper.java create mode 100644 src/com/google/common/escape/CharEscaperBuilder.java create mode 100644 src/com/google/common/escape/Escaper.java create mode 100644 src/com/google/common/escape/Escapers.java create mode 100644 src/com/google/common/escape/Platform.java create mode 100644 src/com/google/common/escape/UnicodeEscaper.java create mode 100644 src/com/google/common/escape/package-info.java create mode 100644 src/com/google/common/eventbus/AllowConcurrentEvents.java create mode 100644 src/com/google/common/eventbus/AnnotatedSubscriberFinder.java create mode 100644 src/com/google/common/eventbus/AsyncEventBus.java create mode 100644 src/com/google/common/eventbus/DeadEvent.java create mode 100644 src/com/google/common/eventbus/EventBus.java create mode 100644 src/com/google/common/eventbus/EventSubscriber.java create mode 100644 src/com/google/common/eventbus/Subscribe.java create mode 100644 src/com/google/common/eventbus/SubscriberExceptionContext.java create mode 100644 src/com/google/common/eventbus/SubscriberExceptionHandler.java create mode 100644 src/com/google/common/eventbus/SubscriberFindingStrategy.java create mode 100644 src/com/google/common/eventbus/SynchronizedEventSubscriber.java create mode 100644 src/com/google/common/hash/AbstractByteHasher.java create mode 100644 src/com/google/common/hash/AbstractCompositeHashFunction.java create mode 100644 src/com/google/common/hash/AbstractHasher.java create mode 100644 src/com/google/common/hash/AbstractNonStreamingHashFunction.java create mode 100644 src/com/google/common/hash/AbstractStreamingHashFunction.java create mode 100644 src/com/google/common/hash/BloomFilter.java create mode 100644 src/com/google/common/hash/BloomFilterStrategies.java create mode 100644 src/com/google/common/hash/ChecksumHashFunction.java create mode 100644 src/com/google/common/hash/Crc32cHashFunction.java create mode 100644 src/com/google/common/hash/Funnel.java create mode 100644 src/com/google/common/hash/Funnels.java create mode 100644 src/com/google/common/hash/HashCode.java create mode 100644 src/com/google/common/hash/HashFunction.java create mode 100644 src/com/google/common/hash/Hasher.java create mode 100644 src/com/google/common/hash/Hashing.java create mode 100644 src/com/google/common/hash/HashingInputStream.java create mode 100644 src/com/google/common/hash/HashingOutputStream.java create mode 100644 src/com/google/common/hash/MessageDigestHashFunction.java create mode 100644 src/com/google/common/hash/Murmur3_128HashFunction.java create mode 100644 src/com/google/common/hash/Murmur3_32HashFunction.java create mode 100644 src/com/google/common/hash/PrimitiveSink.java create mode 100644 src/com/google/common/hash/SipHashFunction.java create mode 100644 src/com/google/common/hash/package-info.java create mode 100644 src/com/google/common/html/HtmlEscapers.java create mode 100644 src/com/google/common/html/package-info.java create mode 100644 src/com/google/common/io/AppendableWriter.java create mode 100644 src/com/google/common/io/BaseEncoding.java create mode 100644 src/com/google/common/io/ByteArrayDataInput.java create mode 100644 src/com/google/common/io/ByteArrayDataOutput.java create mode 100644 src/com/google/common/io/ByteProcessor.java create mode 100644 src/com/google/common/io/ByteSink.java create mode 100644 src/com/google/common/io/ByteSource.java create mode 100644 src/com/google/common/io/ByteStreams.java create mode 100644 src/com/google/common/io/CharSequenceReader.java create mode 100644 src/com/google/common/io/CharSink.java create mode 100644 src/com/google/common/io/CharSource.java create mode 100644 src/com/google/common/io/CharStreams.java create mode 100644 src/com/google/common/io/Closeables.java create mode 100644 src/com/google/common/io/Closer.java create mode 100644 src/com/google/common/io/CountingInputStream.java create mode 100644 src/com/google/common/io/CountingOutputStream.java create mode 100644 src/com/google/common/io/FileBackedOutputStream.java create mode 100644 src/com/google/common/io/FileWriteMode.java create mode 100644 src/com/google/common/io/Files.java create mode 100644 src/com/google/common/io/Flushables.java create mode 100644 src/com/google/common/io/GwtWorkarounds.java create mode 100644 src/com/google/common/io/InputSupplier.java create mode 100644 src/com/google/common/io/LineBuffer.java create mode 100644 src/com/google/common/io/LineProcessor.java create mode 100644 src/com/google/common/io/LineReader.java create mode 100644 src/com/google/common/io/LittleEndianDataInputStream.java create mode 100644 src/com/google/common/io/LittleEndianDataOutputStream.java create mode 100644 src/com/google/common/io/MultiInputStream.java create mode 100644 src/com/google/common/io/MultiReader.java create mode 100644 src/com/google/common/io/OutputSupplier.java create mode 100644 src/com/google/common/io/PatternFilenameFilter.java create mode 100644 src/com/google/common/io/Resources.java create mode 100644 src/com/google/common/io/package-info.java create mode 100644 src/com/google/common/math/BigIntegerMath.java create mode 100644 src/com/google/common/math/DoubleMath.java create mode 100644 src/com/google/common/math/DoubleUtils.java create mode 100644 src/com/google/common/math/IntMath.java create mode 100644 src/com/google/common/math/LongMath.java create mode 100644 src/com/google/common/math/MathPreconditions.java create mode 100644 src/com/google/common/math/package-info.java create mode 100644 src/com/google/common/net/HostAndPort.java create mode 100644 src/com/google/common/net/HostSpecifier.java create mode 100644 src/com/google/common/net/HttpHeaders.java create mode 100644 src/com/google/common/net/InetAddresses.java create mode 100644 src/com/google/common/net/InternetDomainName.java create mode 100644 src/com/google/common/net/MediaType.java create mode 100644 src/com/google/common/net/PercentEscaper.java create mode 100644 src/com/google/common/net/UrlEscapers.java create mode 100644 src/com/google/common/net/package-info.java create mode 100644 src/com/google/common/primitives/Booleans.java create mode 100644 src/com/google/common/primitives/Bytes.java create mode 100644 src/com/google/common/primitives/Chars.java create mode 100644 src/com/google/common/primitives/Doubles.java create mode 100644 src/com/google/common/primitives/Floats.java create mode 100644 src/com/google/common/primitives/Ints.java create mode 100644 src/com/google/common/primitives/Longs.java create mode 100644 src/com/google/common/primitives/ParseRequest.java create mode 100644 src/com/google/common/primitives/Primitives.java create mode 100644 src/com/google/common/primitives/Shorts.java create mode 100644 src/com/google/common/primitives/SignedBytes.java create mode 100644 src/com/google/common/primitives/UnsignedBytes.java create mode 100644 src/com/google/common/primitives/UnsignedInteger.java create mode 100644 src/com/google/common/primitives/UnsignedInts.java create mode 100644 src/com/google/common/primitives/UnsignedLong.java create mode 100644 src/com/google/common/primitives/UnsignedLongs.java create mode 100644 src/com/google/common/primitives/package-info.java create mode 100644 src/com/google/common/reflect/AbstractInvocationHandler.java create mode 100644 src/com/google/common/reflect/ClassPath.java create mode 100644 src/com/google/common/reflect/Element.java create mode 100644 src/com/google/common/reflect/ImmutableTypeToInstanceMap.java create mode 100644 src/com/google/common/reflect/Invokable.java create mode 100644 src/com/google/common/reflect/MutableTypeToInstanceMap.java create mode 100644 src/com/google/common/reflect/Parameter.java create mode 100644 src/com/google/common/reflect/Reflection.java create mode 100644 src/com/google/common/reflect/TypeCapture.java create mode 100644 src/com/google/common/reflect/TypeParameter.java create mode 100644 src/com/google/common/reflect/TypeResolver.java create mode 100644 src/com/google/common/reflect/TypeToInstanceMap.java create mode 100644 src/com/google/common/reflect/TypeToken.java create mode 100644 src/com/google/common/reflect/TypeVisitor.java create mode 100644 src/com/google/common/reflect/Types.java create mode 100644 src/com/google/common/reflect/package-info.java create mode 100644 src/com/google/common/util/concurrent/AbstractCheckedFuture.java create mode 100644 src/com/google/common/util/concurrent/AbstractExecutionThreadService.java create mode 100644 src/com/google/common/util/concurrent/AbstractFuture.java create mode 100644 src/com/google/common/util/concurrent/AbstractIdleService.java create mode 100644 src/com/google/common/util/concurrent/AbstractListeningExecutorService.java create mode 100644 src/com/google/common/util/concurrent/AbstractScheduledService.java create mode 100644 src/com/google/common/util/concurrent/AbstractService.java create mode 100644 src/com/google/common/util/concurrent/AsyncFunction.java create mode 100644 src/com/google/common/util/concurrent/AsyncSettableFuture.java create mode 100644 src/com/google/common/util/concurrent/AtomicDouble.java create mode 100644 src/com/google/common/util/concurrent/AtomicDoubleArray.java create mode 100644 src/com/google/common/util/concurrent/AtomicLongMap.java create mode 100644 src/com/google/common/util/concurrent/Atomics.java create mode 100644 src/com/google/common/util/concurrent/Callables.java create mode 100644 src/com/google/common/util/concurrent/CheckedFuture.java create mode 100644 src/com/google/common/util/concurrent/CycleDetectingLockFactory.java create mode 100644 src/com/google/common/util/concurrent/ExecutionError.java create mode 100644 src/com/google/common/util/concurrent/ExecutionList.java create mode 100644 src/com/google/common/util/concurrent/FakeTimeLimiter.java create mode 100644 src/com/google/common/util/concurrent/ForwardingBlockingQueue.java create mode 100644 src/com/google/common/util/concurrent/ForwardingCheckedFuture.java create mode 100644 src/com/google/common/util/concurrent/ForwardingExecutorService.java create mode 100644 src/com/google/common/util/concurrent/ForwardingFuture.java create mode 100644 src/com/google/common/util/concurrent/ForwardingListenableFuture.java create mode 100644 src/com/google/common/util/concurrent/ForwardingListeningExecutorService.java create mode 100644 src/com/google/common/util/concurrent/FutureCallback.java create mode 100644 src/com/google/common/util/concurrent/FutureFallback.java create mode 100644 src/com/google/common/util/concurrent/Futures.java create mode 100644 src/com/google/common/util/concurrent/JdkFutureAdapters.java create mode 100644 src/com/google/common/util/concurrent/ListenableFuture.java create mode 100644 src/com/google/common/util/concurrent/ListenableFutureTask.java create mode 100644 src/com/google/common/util/concurrent/ListenableScheduledFuture.java create mode 100644 src/com/google/common/util/concurrent/ListenerCallQueue.java create mode 100644 src/com/google/common/util/concurrent/ListeningExecutorService.java create mode 100644 src/com/google/common/util/concurrent/ListeningScheduledExecutorService.java create mode 100644 src/com/google/common/util/concurrent/Monitor.java create mode 100644 src/com/google/common/util/concurrent/MoreExecutors.java create mode 100644 src/com/google/common/util/concurrent/RateLimiter.java create mode 100644 src/com/google/common/util/concurrent/Runnables.java create mode 100644 src/com/google/common/util/concurrent/SerializingExecutor.java create mode 100644 src/com/google/common/util/concurrent/Service.java create mode 100644 src/com/google/common/util/concurrent/ServiceManager.java create mode 100644 src/com/google/common/util/concurrent/SettableFuture.java create mode 100644 src/com/google/common/util/concurrent/SimpleTimeLimiter.java create mode 100644 src/com/google/common/util/concurrent/SmoothRateLimiter.java create mode 100644 src/com/google/common/util/concurrent/Striped.java create mode 100644 src/com/google/common/util/concurrent/ThreadFactoryBuilder.java create mode 100644 src/com/google/common/util/concurrent/TimeLimiter.java create mode 100644 src/com/google/common/util/concurrent/UncaughtExceptionHandlers.java create mode 100644 src/com/google/common/util/concurrent/UncheckedExecutionException.java create mode 100644 src/com/google/common/util/concurrent/UncheckedTimeoutException.java create mode 100644 src/com/google/common/util/concurrent/Uninterruptibles.java create mode 100644 src/com/google/common/util/concurrent/WrappingExecutorService.java create mode 100644 src/com/google/common/util/concurrent/WrappingScheduledExecutorService.java create mode 100644 src/com/google/common/util/concurrent/package-info.java create mode 100644 src/com/google/common/xml/XmlEscapers.java create mode 100644 src/com/google/common/xml/package-info.java create mode 100644 src/com/google/gson/DefaultDateTypeAdapter.java create mode 100644 src/com/google/gson/ExclusionStrategy.java create mode 100644 src/com/google/gson/FieldAttributes.java create mode 100644 src/com/google/gson/FieldNamingPolicy.java create mode 100644 src/com/google/gson/FieldNamingStrategy.java create mode 100644 src/com/google/gson/Gson.java create mode 100644 src/com/google/gson/GsonBuilder.java create mode 100644 src/com/google/gson/InstanceCreator.java create mode 100644 src/com/google/gson/JsonArray.java create mode 100644 src/com/google/gson/JsonDeserializationContext.java create mode 100644 src/com/google/gson/JsonDeserializer.java create mode 100644 src/com/google/gson/JsonElement.java create mode 100644 src/com/google/gson/JsonIOException.java create mode 100644 src/com/google/gson/JsonNull.java create mode 100644 src/com/google/gson/JsonObject.java create mode 100644 src/com/google/gson/JsonParseException.java create mode 100644 src/com/google/gson/JsonParser.java create mode 100644 src/com/google/gson/JsonPrimitive.java create mode 100644 src/com/google/gson/JsonSerializationContext.java create mode 100644 src/com/google/gson/JsonSerializer.java create mode 100644 src/com/google/gson/JsonStreamParser.java create mode 100644 src/com/google/gson/JsonSyntaxException.java create mode 100644 src/com/google/gson/LongSerializationPolicy.java create mode 100644 src/com/google/gson/TreeTypeAdapter.java create mode 100644 src/com/google/gson/TypeAdapter.java create mode 100644 src/com/google/gson/TypeAdapterFactory.java create mode 100644 src/com/google/gson/annotations/Expose.java create mode 100644 src/com/google/gson/annotations/SerializedName.java create mode 100644 src/com/google/gson/annotations/Since.java create mode 100644 src/com/google/gson/annotations/Until.java create mode 100644 src/com/google/gson/internal/ConstructorConstructor.java create mode 100644 src/com/google/gson/internal/Excluder.java create mode 100644 src/com/google/gson/internal/JsonReaderInternalAccess.java create mode 100644 src/com/google/gson/internal/LazilyParsedNumber.java create mode 100644 src/com/google/gson/internal/LinkedTreeMap.java create mode 100644 src/com/google/gson/internal/ObjectConstructor.java create mode 100644 src/com/google/gson/internal/Primitives.java create mode 100644 src/com/google/gson/internal/Streams.java create mode 100644 src/com/google/gson/internal/UnsafeAllocator.java create mode 100644 src/com/google/gson/internal/bind/ArrayTypeAdapter.java create mode 100644 src/com/google/gson/internal/bind/CollectionTypeAdapterFactory.java create mode 100644 src/com/google/gson/internal/bind/DateTypeAdapter.java create mode 100644 src/com/google/gson/internal/bind/JsonTreeReader.java create mode 100644 src/com/google/gson/internal/bind/JsonTreeWriter.java create mode 100644 src/com/google/gson/internal/bind/MapTypeAdapterFactory.java create mode 100644 src/com/google/gson/internal/bind/ObjectTypeAdapter.java create mode 100644 src/com/google/gson/internal/bind/ReflectiveTypeAdapterFactory.java create mode 100644 src/com/google/gson/internal/bind/SqlDateTypeAdapter.java create mode 100644 src/com/google/gson/internal/bind/TimeTypeAdapter.java create mode 100644 src/com/google/gson/internal/bind/TypeAdapterRuntimeTypeWrapper.java create mode 100644 src/com/google/gson/internal/bind/TypeAdapters.java create mode 100644 src/com/google/gson/reflect/TypeToken.java create mode 100644 src/com/google/gson/stream/JsonReader.java create mode 100644 src/com/google/gson/stream/JsonScope.java create mode 100644 src/com/google/gson/stream/JsonToken.java create mode 100644 src/com/google/gson/stream/JsonWriter.java create mode 100644 src/com/google/gson/stream/MalformedJsonException.java create mode 100644 src/com/google/thirdparty/publicsuffix/PublicSuffixPatterns.java create mode 100644 src/com/google/thirdparty/publicsuffix/PublicSuffixType.java create mode 100644 src/com/google/thirdparty/publicsuffix/TrieParser.java create mode 100644 src/com/mojang/UUIDTypeAdapter.java create mode 100644 src/com/mojang/authlib/Agent.java create mode 100644 src/com/mojang/authlib/AuthenticationService.java create mode 100644 src/com/mojang/authlib/BaseAuthenticationService.java create mode 100644 src/com/mojang/authlib/BaseUserAuthentication.java create mode 100644 src/com/mojang/authlib/GameProfile.java create mode 100644 src/com/mojang/authlib/GameProfileRepository.java create mode 100644 src/com/mojang/authlib/HttpAuthenticationService.java create mode 100644 src/com/mojang/authlib/HttpUserAuthentication.java create mode 100644 src/com/mojang/authlib/ProfileLookupCallback.java create mode 100644 src/com/mojang/authlib/UserAuthentication.java create mode 100644 src/com/mojang/authlib/UserType.java create mode 100644 src/com/mojang/authlib/exceptions/AuthenticationException.java create mode 100644 src/com/mojang/authlib/exceptions/AuthenticationUnavailableException.java create mode 100644 src/com/mojang/authlib/exceptions/InvalidCredentialsException.java create mode 100644 src/com/mojang/authlib/exceptions/UserMigratedException.java create mode 100644 src/com/mojang/authlib/legacy/LegacyAuthenticationService.java create mode 100644 src/com/mojang/authlib/legacy/LegacyMinecraftSessionService.java create mode 100644 src/com/mojang/authlib/legacy/LegacyUserAuthentication.java create mode 100644 src/com/mojang/authlib/minecraft/BaseMinecraftSessionService.java create mode 100644 src/com/mojang/authlib/minecraft/HttpMinecraftSessionService.java create mode 100644 src/com/mojang/authlib/minecraft/InsecureTextureException.java create mode 100644 src/com/mojang/authlib/minecraft/MinecraftProfileTexture.java create mode 100644 src/com/mojang/authlib/minecraft/MinecraftSessionService.java create mode 100644 src/com/mojang/authlib/properties/Property.java create mode 100644 src/com/mojang/authlib/properties/PropertyMap.java create mode 100644 src/com/mojang/authlib/yggdrasil/ProfileIncompleteException.java create mode 100644 src/com/mojang/authlib/yggdrasil/ProfileNotFoundException.java create mode 100644 src/com/mojang/authlib/yggdrasil/YggdrasilAuthenticationService.java create mode 100644 src/com/mojang/authlib/yggdrasil/YggdrasilGameProfileRepository.java create mode 100644 src/com/mojang/authlib/yggdrasil/YggdrasilMinecraftSessionService.java create mode 100644 src/com/mojang/authlib/yggdrasil/YggdrasilUserAuthentication.java create mode 100644 src/com/mojang/authlib/yggdrasil/request/AuthenticationRequest.java create mode 100644 src/com/mojang/authlib/yggdrasil/request/InvalidateRequest.java create mode 100644 src/com/mojang/authlib/yggdrasil/request/JoinMinecraftServerRequest.java create mode 100644 src/com/mojang/authlib/yggdrasil/request/RefreshRequest.java create mode 100644 src/com/mojang/authlib/yggdrasil/request/ValidateRequest.java create mode 100644 src/com/mojang/authlib/yggdrasil/response/AuthenticationResponse.java create mode 100644 src/com/mojang/authlib/yggdrasil/response/HasJoinedMinecraftServerResponse.java create mode 100644 src/com/mojang/authlib/yggdrasil/response/MinecraftProfilePropertiesResponse.java create mode 100644 src/com/mojang/authlib/yggdrasil/response/MinecraftTexturesPayload.java create mode 100644 src/com/mojang/authlib/yggdrasil/response/ProfileSearchResultsResponse.java create mode 100644 src/com/mojang/authlib/yggdrasil/response/RefreshResponse.java create mode 100644 src/com/mojang/authlib/yggdrasil/response/Response.java create mode 100644 src/com/mojang/authlib/yggdrasil/response/User.java create mode 100644 src/com/mojang/launcher/Http.java create mode 100644 src/com/mojang/launcher/Launcher.java create mode 100644 src/com/mojang/launcher/LegacyPropertyMapSerializer.java create mode 100644 src/com/mojang/launcher/OperatingSystem.java create mode 100644 src/com/mojang/launcher/SharedLauncherConstants.java create mode 100644 src/com/mojang/launcher/UserInterface.java create mode 100644 src/com/mojang/launcher/events/GameOutputLogProcessor.java create mode 100644 src/com/mojang/launcher/events/RefreshedVersionsListener.java create mode 100644 src/com/mojang/launcher/game/GameInstanceStatus.java create mode 100644 src/com/mojang/launcher/game/process/AbstractGameProcess.java create mode 100644 src/com/mojang/launcher/game/process/GameProcess.java create mode 100644 src/com/mojang/launcher/game/process/GameProcessBuilder.java create mode 100644 src/com/mojang/launcher/game/process/GameProcessFactory.java create mode 100644 src/com/mojang/launcher/game/process/GameProcessRunnable.java create mode 100644 src/com/mojang/launcher/game/process/direct/DirectGameProcess.java create mode 100644 src/com/mojang/launcher/game/process/direct/DirectGameProcessFactory.java create mode 100644 src/com/mojang/launcher/game/process/direct/DirectProcessInputMonitor.java create mode 100644 src/com/mojang/launcher/game/runner/AbstractGameRunner.java create mode 100644 src/com/mojang/launcher/game/runner/GameRunner.java create mode 100644 src/com/mojang/launcher/game/runner/GameRunnerListener.java create mode 100644 src/com/mojang/launcher/updater/DateTypeAdapter.java create mode 100644 src/com/mojang/launcher/updater/DownloadProgress.java create mode 100644 src/com/mojang/launcher/updater/ExceptionalThreadPoolExecutor.java create mode 100644 src/com/mojang/launcher/updater/FileTypeAdapter.java create mode 100644 src/com/mojang/launcher/updater/LowerCaseEnumTypeAdapterFactory.java create mode 100644 src/com/mojang/launcher/updater/VersionFilter.java create mode 100644 src/com/mojang/launcher/updater/VersionManager.java create mode 100644 src/com/mojang/launcher/updater/VersionSyncInfo.java create mode 100644 src/com/mojang/launcher/updater/download/ChecksummedDownloadable.java create mode 100644 src/com/mojang/launcher/updater/download/DownloadJob.java create mode 100644 src/com/mojang/launcher/updater/download/DownloadListener.java create mode 100644 src/com/mojang/launcher/updater/download/Downloadable.java create mode 100644 src/com/mojang/launcher/updater/download/EtagDownloadable.java create mode 100644 src/com/mojang/launcher/updater/download/MonitoringInputStream.java create mode 100644 src/com/mojang/launcher/updater/download/ProgressContainer.java create mode 100644 src/com/mojang/launcher/updater/download/assets/AssetDownloadable.java create mode 100644 src/com/mojang/launcher/updater/download/assets/AssetIndex.java create mode 100644 src/com/mojang/launcher/versions/CompatibilityRule.java create mode 100644 src/com/mojang/launcher/versions/CompleteVersion.java create mode 100644 src/com/mojang/launcher/versions/ExtractRules.java create mode 100644 src/com/mojang/launcher/versions/ReleaseType.java create mode 100644 src/com/mojang/launcher/versions/ReleaseTypeAdapterFactory.java create mode 100644 src/com/mojang/launcher/versions/ReleaseTypeFactory.java create mode 100644 src/com/mojang/launcher/versions/Version.java create mode 100644 src/com/mojang/util/QueueLogAppender.java create mode 100644 src/com/mojang/util/UUIDTypeAdapter.java rename src/{main => }/dirt.png (100%) rename src/{main => }/favicon.png (100%) create mode 100644 src/javax/annotation/CheckForNull.java create mode 100644 src/javax/annotation/CheckForSigned.java create mode 100644 src/javax/annotation/CheckReturnValue.java create mode 100644 src/javax/annotation/Detainted.java create mode 100644 src/javax/annotation/MatchesPattern.java create mode 100644 src/javax/annotation/Nonnegative.java create mode 100644 src/javax/annotation/Nonnull.java create mode 100644 src/javax/annotation/Nullable.java create mode 100644 src/javax/annotation/OverridingMethodsMustInvokeSuper.java create mode 100644 src/javax/annotation/ParametersAreNonnullByDefault.java create mode 100644 src/javax/annotation/ParametersAreNullableByDefault.java create mode 100644 src/javax/annotation/PropertyKey.java create mode 100644 src/javax/annotation/RegEx.java create mode 100644 src/javax/annotation/Signed.java create mode 100644 src/javax/annotation/Syntax.java create mode 100644 src/javax/annotation/Tainted.java create mode 100644 src/javax/annotation/Untainted.java create mode 100644 src/javax/annotation/WillClose.java create mode 100644 src/javax/annotation/WillCloseWhenClosed.java create mode 100644 src/javax/annotation/WillNotClose.java create mode 100644 src/javax/annotation/concurrent/GuardedBy.java create mode 100644 src/javax/annotation/concurrent/Immutable.java create mode 100644 src/javax/annotation/concurrent/NotThreadSafe.java create mode 100644 src/javax/annotation/concurrent/ThreadSafe.java create mode 100644 src/javax/annotation/meta/Exclusive.java create mode 100644 src/javax/annotation/meta/Exhaustive.java create mode 100644 src/javax/annotation/meta/TypeQualifier.java create mode 100644 src/javax/annotation/meta/TypeQualifierDefault.java create mode 100644 src/javax/annotation/meta/TypeQualifierNickname.java create mode 100644 src/javax/annotation/meta/TypeQualifierValidator.java create mode 100644 src/javax/annotation/meta/When.java create mode 100644 src/javax/xml/namespace/QName.java create mode 100644 src/joptsimple/AbstractOptionSpec.java create mode 100644 src/joptsimple/AlternativeLongOptionSpec.java create mode 100644 src/joptsimple/ArgumentAcceptingOptionSpec.java create mode 100644 src/joptsimple/ArgumentList.java create mode 100644 src/joptsimple/BuiltinHelpFormatter.java create mode 100644 src/joptsimple/HelpFormatter.java create mode 100644 src/joptsimple/IllegalOptionSpecificationException.java create mode 100644 src/joptsimple/MissingRequiredOptionException.java create mode 100644 src/joptsimple/MultipleArgumentsForOptionException.java create mode 100644 src/joptsimple/NoArgumentOptionSpec.java create mode 100644 src/joptsimple/NonOptionArgumentSpec.java create mode 100644 src/joptsimple/OptionArgumentConversionException.java create mode 100644 src/joptsimple/OptionDescriptor.java create mode 100644 src/joptsimple/OptionException.java create mode 100644 src/joptsimple/OptionMissingRequiredArgumentException.java create mode 100644 src/joptsimple/OptionParser.java create mode 100644 src/joptsimple/OptionParserState.java create mode 100644 src/joptsimple/OptionSet.java create mode 100644 src/joptsimple/OptionSpec.java create mode 100644 src/joptsimple/OptionSpecBuilder.java create mode 100644 src/joptsimple/OptionSpecTokenizer.java create mode 100644 src/joptsimple/OptionalArgumentOptionSpec.java create mode 100644 src/joptsimple/ParserRules.java create mode 100644 src/joptsimple/RequiredArgumentOptionSpec.java create mode 100644 src/joptsimple/UnacceptableNumberOfNonOptionsException.java create mode 100644 src/joptsimple/UnconfiguredOptionException.java create mode 100644 src/joptsimple/UnrecognizedOptionException.java create mode 100644 src/joptsimple/ValueConversionException.java create mode 100644 src/joptsimple/ValueConverter.java create mode 100644 src/joptsimple/internal/AbbreviationMap.java create mode 100644 src/joptsimple/internal/Classes.java create mode 100644 src/joptsimple/internal/Columns.java create mode 100644 src/joptsimple/internal/ConstructorInvokingValueConverter.java create mode 100644 src/joptsimple/internal/MethodInvokingValueConverter.java create mode 100644 src/joptsimple/internal/Objects.java create mode 100644 src/joptsimple/internal/Reflection.java create mode 100644 src/joptsimple/internal/ReflectionException.java create mode 100644 src/joptsimple/internal/Row.java create mode 100644 src/joptsimple/internal/Rows.java create mode 100644 src/joptsimple/internal/Strings.java create mode 100644 src/joptsimple/util/DateConverter.java create mode 100644 src/joptsimple/util/InetAddressConverter.java create mode 100644 src/joptsimple/util/KeyValuePair.java create mode 100644 src/joptsimple/util/RegexMatcher.java rename src/{main => }/langs/cs.yml (100%) rename src/{main => }/langs/de.yml (100%) rename src/{main => }/langs/ea.yml (100%) rename src/{main => }/langs/en.yml (100%) rename src/{main => }/langs/es.yml (100%) rename src/{main => }/langs/et.yml (100%) rename src/{main => }/langs/fi.yml (100%) rename src/{main => }/langs/fr.yml (100%) rename src/{main => }/langs/hr.yml (100%) rename src/{main => }/langs/hu.yml (100%) rename src/{main => }/langs/it.yml (100%) rename src/{main => }/langs/pl.yml (100%) rename src/{main => }/langs/pt.yml (100%) rename src/{main => }/langs/ru.yml (100%) rename src/{main => }/langs/tl.yml (100%) rename src/{main => }/langs/tr.yml (100%) rename src/{main => }/langs/vi.yml (100%) rename src/{main => }/launcher_properties.json (100%) rename src/{main => }/log4j2.xml (100%) delete mode 100644 src/main/com/evilco/mc/nbt/error/TagNotFoundException.java delete mode 100644 src/main/com/evilco/mc/nbt/error/UnexpectedTagTypeException.java delete mode 100644 src/main/com/evilco/mc/nbt/stream/NbtInputStream.java delete mode 100644 src/main/com/evilco/mc/nbt/stream/NbtOutputStream.java delete mode 100644 src/main/com/evilco/mc/nbt/tag/AbstractTag.java delete mode 100644 src/main/com/evilco/mc/nbt/tag/IAnonymousTagContainer.java delete mode 100644 src/main/com/evilco/mc/nbt/tag/INamedTagContainer.java delete mode 100644 src/main/com/evilco/mc/nbt/tag/ITag.java delete mode 100644 src/main/com/evilco/mc/nbt/tag/ITagContainer.java delete mode 100644 src/main/com/evilco/mc/nbt/tag/TagByte.java delete mode 100644 src/main/com/evilco/mc/nbt/tag/TagByteArray.java delete mode 100644 src/main/com/evilco/mc/nbt/tag/TagCompound.java delete mode 100644 src/main/com/evilco/mc/nbt/tag/TagDouble.java delete mode 100644 src/main/com/evilco/mc/nbt/tag/TagFloat.java delete mode 100644 src/main/com/evilco/mc/nbt/tag/TagInteger.java delete mode 100644 src/main/com/evilco/mc/nbt/tag/TagIntegerArray.java delete mode 100644 src/main/com/evilco/mc/nbt/tag/TagList.java delete mode 100644 src/main/com/evilco/mc/nbt/tag/TagLong.java delete mode 100644 src/main/com/evilco/mc/nbt/tag/TagShort.java delete mode 100644 src/main/com/evilco/mc/nbt/tag/TagString.java delete mode 100644 src/main/com/evilco/mc/nbt/tag/TagType.java delete mode 100644 src/main/com/google/common/annotations/Beta.java delete mode 100644 src/main/com/google/common/annotations/GwtCompatible.java delete mode 100644 src/main/com/google/common/annotations/GwtIncompatible.java delete mode 100644 src/main/com/google/common/annotations/VisibleForTesting.java delete mode 100644 src/main/com/google/common/base/Absent.java delete mode 100644 src/main/com/google/common/base/AbstractIterator.java delete mode 100644 src/main/com/google/common/base/Ascii.java delete mode 100644 src/main/com/google/common/base/CaseFormat.java delete mode 100644 src/main/com/google/common/base/CharMatcher.java delete mode 100644 src/main/com/google/common/base/Charsets.java delete mode 100644 src/main/com/google/common/base/Converter.java delete mode 100644 src/main/com/google/common/base/Defaults.java delete mode 100644 src/main/com/google/common/base/Enums.java delete mode 100644 src/main/com/google/common/base/Equivalence.java delete mode 100644 src/main/com/google/common/base/FinalizablePhantomReference.java delete mode 100644 src/main/com/google/common/base/FinalizableReference.java delete mode 100644 src/main/com/google/common/base/FinalizableReferenceQueue.java delete mode 100644 src/main/com/google/common/base/FinalizableSoftReference.java delete mode 100644 src/main/com/google/common/base/FinalizableWeakReference.java delete mode 100644 src/main/com/google/common/base/Function.java delete mode 100644 src/main/com/google/common/base/FunctionalEquivalence.java delete mode 100644 src/main/com/google/common/base/Functions.java delete mode 100644 src/main/com/google/common/base/Joiner.java delete mode 100644 src/main/com/google/common/base/MoreObjects.java delete mode 100644 src/main/com/google/common/base/Objects.java delete mode 100644 src/main/com/google/common/base/Optional.java delete mode 100644 src/main/com/google/common/base/PairwiseEquivalence.java delete mode 100644 src/main/com/google/common/base/Platform.java delete mode 100644 src/main/com/google/common/base/Preconditions.java delete mode 100644 src/main/com/google/common/base/Predicate.java delete mode 100644 src/main/com/google/common/base/Predicates.java delete mode 100644 src/main/com/google/common/base/Present.java delete mode 100644 src/main/com/google/common/base/SmallCharMatcher.java delete mode 100644 src/main/com/google/common/base/Splitter.java delete mode 100644 src/main/com/google/common/base/StandardSystemProperty.java delete mode 100644 src/main/com/google/common/base/Stopwatch.java delete mode 100644 src/main/com/google/common/base/Strings.java delete mode 100644 src/main/com/google/common/base/Supplier.java delete mode 100644 src/main/com/google/common/base/Suppliers.java delete mode 100644 src/main/com/google/common/base/Throwables.java delete mode 100644 src/main/com/google/common/base/Ticker.java delete mode 100644 src/main/com/google/common/base/Utf8.java delete mode 100644 src/main/com/google/common/base/Verify.java delete mode 100644 src/main/com/google/common/base/VerifyException.java delete mode 100644 src/main/com/google/common/base/internal/Finalizer.java delete mode 100644 src/main/com/google/common/base/package-info.java delete mode 100644 src/main/com/google/common/cache/AbstractCache.java delete mode 100644 src/main/com/google/common/cache/AbstractLoadingCache.java delete mode 100644 src/main/com/google/common/cache/Cache.java delete mode 100644 src/main/com/google/common/cache/CacheBuilder.java delete mode 100644 src/main/com/google/common/cache/CacheBuilderSpec.java delete mode 100644 src/main/com/google/common/cache/CacheLoader.java delete mode 100644 src/main/com/google/common/cache/CacheStats.java delete mode 100644 src/main/com/google/common/cache/ForwardingCache.java delete mode 100644 src/main/com/google/common/cache/ForwardingLoadingCache.java delete mode 100644 src/main/com/google/common/cache/LoadingCache.java delete mode 100644 src/main/com/google/common/cache/LocalCache.java delete mode 100644 src/main/com/google/common/cache/LongAddable.java delete mode 100644 src/main/com/google/common/cache/LongAddables.java delete mode 100644 src/main/com/google/common/cache/LongAdder.java delete mode 100644 src/main/com/google/common/cache/RemovalCause.java delete mode 100644 src/main/com/google/common/cache/RemovalListener.java delete mode 100644 src/main/com/google/common/cache/RemovalListeners.java delete mode 100644 src/main/com/google/common/cache/RemovalNotification.java delete mode 100644 src/main/com/google/common/cache/Striped64.java delete mode 100644 src/main/com/google/common/cache/Weigher.java delete mode 100644 src/main/com/google/common/cache/package-info.java delete mode 100644 src/main/com/google/common/collect/AbstractBiMap.java delete mode 100644 src/main/com/google/common/collect/AbstractIndexedListIterator.java delete mode 100644 src/main/com/google/common/collect/AbstractIterator.java delete mode 100644 src/main/com/google/common/collect/AbstractListMultimap.java delete mode 100644 src/main/com/google/common/collect/AbstractMapBasedMultimap.java delete mode 100644 src/main/com/google/common/collect/AbstractMapBasedMultiset.java delete mode 100644 src/main/com/google/common/collect/AbstractMapEntry.java delete mode 100644 src/main/com/google/common/collect/AbstractMultimap.java delete mode 100644 src/main/com/google/common/collect/AbstractMultiset.java delete mode 100644 src/main/com/google/common/collect/AbstractNavigableMap.java delete mode 100644 src/main/com/google/common/collect/AbstractRangeSet.java delete mode 100644 src/main/com/google/common/collect/AbstractSequentialIterator.java delete mode 100644 src/main/com/google/common/collect/AbstractSetMultimap.java delete mode 100644 src/main/com/google/common/collect/AbstractSortedKeySortedSetMultimap.java delete mode 100644 src/main/com/google/common/collect/AbstractSortedMultiset.java delete mode 100644 src/main/com/google/common/collect/AbstractSortedSetMultimap.java delete mode 100644 src/main/com/google/common/collect/AbstractTable.java delete mode 100644 src/main/com/google/common/collect/AllEqualOrdering.java delete mode 100644 src/main/com/google/common/collect/ArrayListMultimap.java delete mode 100644 src/main/com/google/common/collect/ArrayTable.java delete mode 100644 src/main/com/google/common/collect/BiMap.java delete mode 100644 src/main/com/google/common/collect/BinaryTreeTraverser.java delete mode 100644 src/main/com/google/common/collect/BoundType.java delete mode 100644 src/main/com/google/common/collect/ByFunctionOrdering.java delete mode 100644 src/main/com/google/common/collect/CartesianList.java delete mode 100644 src/main/com/google/common/collect/ClassToInstanceMap.java delete mode 100644 src/main/com/google/common/collect/CollectPreconditions.java delete mode 100644 src/main/com/google/common/collect/Collections2.java delete mode 100644 src/main/com/google/common/collect/ComparatorOrdering.java delete mode 100644 src/main/com/google/common/collect/ComparisonChain.java delete mode 100644 src/main/com/google/common/collect/CompoundOrdering.java delete mode 100644 src/main/com/google/common/collect/ComputationException.java delete mode 100644 src/main/com/google/common/collect/ComputingConcurrentHashMap.java delete mode 100644 src/main/com/google/common/collect/ConcurrentHashMultiset.java delete mode 100644 src/main/com/google/common/collect/Constraint.java delete mode 100644 src/main/com/google/common/collect/Constraints.java delete mode 100644 src/main/com/google/common/collect/ContiguousSet.java delete mode 100644 src/main/com/google/common/collect/Count.java delete mode 100644 src/main/com/google/common/collect/Cut.java delete mode 100644 src/main/com/google/common/collect/DenseImmutableTable.java delete mode 100644 src/main/com/google/common/collect/DescendingImmutableSortedMultiset.java delete mode 100644 src/main/com/google/common/collect/DescendingImmutableSortedSet.java delete mode 100644 src/main/com/google/common/collect/DescendingMultiset.java delete mode 100644 src/main/com/google/common/collect/DiscreteDomain.java delete mode 100644 src/main/com/google/common/collect/EmptyContiguousSet.java delete mode 100644 src/main/com/google/common/collect/EmptyImmutableBiMap.java delete mode 100644 src/main/com/google/common/collect/EmptyImmutableListMultimap.java delete mode 100644 src/main/com/google/common/collect/EmptyImmutableSet.java delete mode 100644 src/main/com/google/common/collect/EmptyImmutableSetMultimap.java delete mode 100644 src/main/com/google/common/collect/EmptyImmutableSortedMap.java delete mode 100644 src/main/com/google/common/collect/EmptyImmutableSortedMultiset.java delete mode 100644 src/main/com/google/common/collect/EmptyImmutableSortedSet.java delete mode 100644 src/main/com/google/common/collect/EnumBiMap.java delete mode 100644 src/main/com/google/common/collect/EnumHashBiMap.java delete mode 100644 src/main/com/google/common/collect/EnumMultiset.java delete mode 100644 src/main/com/google/common/collect/EvictingQueue.java delete mode 100644 src/main/com/google/common/collect/ExplicitOrdering.java delete mode 100644 src/main/com/google/common/collect/FilteredEntryMultimap.java delete mode 100644 src/main/com/google/common/collect/FilteredEntrySetMultimap.java delete mode 100644 src/main/com/google/common/collect/FilteredKeyListMultimap.java delete mode 100644 src/main/com/google/common/collect/FilteredKeyMultimap.java delete mode 100644 src/main/com/google/common/collect/FilteredKeySetMultimap.java delete mode 100644 src/main/com/google/common/collect/FilteredMultimap.java delete mode 100644 src/main/com/google/common/collect/FilteredMultimapValues.java delete mode 100644 src/main/com/google/common/collect/FilteredSetMultimap.java delete mode 100644 src/main/com/google/common/collect/FluentIterable.java delete mode 100644 src/main/com/google/common/collect/ForwardingBlockingDeque.java delete mode 100644 src/main/com/google/common/collect/ForwardingCollection.java delete mode 100644 src/main/com/google/common/collect/ForwardingConcurrentMap.java delete mode 100644 src/main/com/google/common/collect/ForwardingDeque.java delete mode 100644 src/main/com/google/common/collect/ForwardingImmutableCollection.java delete mode 100644 src/main/com/google/common/collect/ForwardingImmutableList.java delete mode 100644 src/main/com/google/common/collect/ForwardingImmutableMap.java delete mode 100644 src/main/com/google/common/collect/ForwardingImmutableSet.java delete mode 100644 src/main/com/google/common/collect/ForwardingIterator.java delete mode 100644 src/main/com/google/common/collect/ForwardingList.java delete mode 100644 src/main/com/google/common/collect/ForwardingListIterator.java delete mode 100644 src/main/com/google/common/collect/ForwardingListMultimap.java delete mode 100644 src/main/com/google/common/collect/ForwardingMap.java delete mode 100644 src/main/com/google/common/collect/ForwardingMapEntry.java delete mode 100644 src/main/com/google/common/collect/ForwardingMultimap.java delete mode 100644 src/main/com/google/common/collect/ForwardingMultiset.java delete mode 100644 src/main/com/google/common/collect/ForwardingNavigableMap.java delete mode 100644 src/main/com/google/common/collect/ForwardingNavigableSet.java delete mode 100644 src/main/com/google/common/collect/ForwardingObject.java delete mode 100644 src/main/com/google/common/collect/ForwardingQueue.java delete mode 100644 src/main/com/google/common/collect/ForwardingSet.java delete mode 100644 src/main/com/google/common/collect/ForwardingSetMultimap.java delete mode 100644 src/main/com/google/common/collect/ForwardingSortedMap.java delete mode 100644 src/main/com/google/common/collect/ForwardingSortedMultiset.java delete mode 100644 src/main/com/google/common/collect/ForwardingSortedSet.java delete mode 100644 src/main/com/google/common/collect/ForwardingSortedSetMultimap.java delete mode 100644 src/main/com/google/common/collect/ForwardingTable.java delete mode 100644 src/main/com/google/common/collect/GeneralRange.java delete mode 100644 src/main/com/google/common/collect/GenericMapMaker.java delete mode 100644 src/main/com/google/common/collect/HashBasedTable.java delete mode 100644 src/main/com/google/common/collect/HashBiMap.java delete mode 100644 src/main/com/google/common/collect/HashMultimap.java delete mode 100644 src/main/com/google/common/collect/HashMultiset.java delete mode 100644 src/main/com/google/common/collect/Hashing.java delete mode 100644 src/main/com/google/common/collect/ImmutableAsList.java delete mode 100644 src/main/com/google/common/collect/ImmutableBiMap.java delete mode 100644 src/main/com/google/common/collect/ImmutableClassToInstanceMap.java delete mode 100644 src/main/com/google/common/collect/ImmutableCollection.java delete mode 100644 src/main/com/google/common/collect/ImmutableEntry.java delete mode 100644 src/main/com/google/common/collect/ImmutableEnumMap.java delete mode 100644 src/main/com/google/common/collect/ImmutableEnumSet.java delete mode 100644 src/main/com/google/common/collect/ImmutableList.java delete mode 100644 src/main/com/google/common/collect/ImmutableListMultimap.java delete mode 100644 src/main/com/google/common/collect/ImmutableMap.java delete mode 100644 src/main/com/google/common/collect/ImmutableMapEntry.java delete mode 100644 src/main/com/google/common/collect/ImmutableMapEntrySet.java delete mode 100644 src/main/com/google/common/collect/ImmutableMapKeySet.java delete mode 100644 src/main/com/google/common/collect/ImmutableMapValues.java delete mode 100644 src/main/com/google/common/collect/ImmutableMultimap.java delete mode 100644 src/main/com/google/common/collect/ImmutableMultiset.java delete mode 100644 src/main/com/google/common/collect/ImmutableRangeMap.java delete mode 100644 src/main/com/google/common/collect/ImmutableRangeSet.java delete mode 100644 src/main/com/google/common/collect/ImmutableSet.java delete mode 100644 src/main/com/google/common/collect/ImmutableSetMultimap.java delete mode 100644 src/main/com/google/common/collect/ImmutableSortedAsList.java delete mode 100644 src/main/com/google/common/collect/ImmutableSortedMap.java delete mode 100644 src/main/com/google/common/collect/ImmutableSortedMapFauxverideShim.java delete mode 100644 src/main/com/google/common/collect/ImmutableSortedMultiset.java delete mode 100644 src/main/com/google/common/collect/ImmutableSortedMultisetFauxverideShim.java delete mode 100644 src/main/com/google/common/collect/ImmutableSortedSet.java delete mode 100644 src/main/com/google/common/collect/ImmutableSortedSetFauxverideShim.java delete mode 100644 src/main/com/google/common/collect/ImmutableTable.java delete mode 100644 src/main/com/google/common/collect/Interner.java delete mode 100644 src/main/com/google/common/collect/Interners.java delete mode 100644 src/main/com/google/common/collect/Iterables.java delete mode 100644 src/main/com/google/common/collect/Iterators.java delete mode 100644 src/main/com/google/common/collect/LexicographicalOrdering.java delete mode 100644 src/main/com/google/common/collect/LinkedHashMultimap.java delete mode 100644 src/main/com/google/common/collect/LinkedHashMultiset.java delete mode 100644 src/main/com/google/common/collect/LinkedListMultimap.java delete mode 100644 src/main/com/google/common/collect/ListMultimap.java delete mode 100644 src/main/com/google/common/collect/Lists.java delete mode 100644 src/main/com/google/common/collect/MapConstraint.java delete mode 100644 src/main/com/google/common/collect/MapConstraints.java delete mode 100644 src/main/com/google/common/collect/MapDifference.java delete mode 100644 src/main/com/google/common/collect/MapMaker.java delete mode 100644 src/main/com/google/common/collect/MapMakerInternalMap.java delete mode 100644 src/main/com/google/common/collect/Maps.java delete mode 100644 src/main/com/google/common/collect/MinMaxPriorityQueue.java delete mode 100644 src/main/com/google/common/collect/Multimap.java delete mode 100644 src/main/com/google/common/collect/MultimapBuilder.java delete mode 100644 src/main/com/google/common/collect/Multimaps.java delete mode 100644 src/main/com/google/common/collect/Multiset.java delete mode 100644 src/main/com/google/common/collect/Multisets.java delete mode 100644 src/main/com/google/common/collect/MutableClassToInstanceMap.java delete mode 100644 src/main/com/google/common/collect/NaturalOrdering.java delete mode 100644 src/main/com/google/common/collect/NullsFirstOrdering.java delete mode 100644 src/main/com/google/common/collect/NullsLastOrdering.java delete mode 100644 src/main/com/google/common/collect/ObjectArrays.java delete mode 100644 src/main/com/google/common/collect/Ordering.java delete mode 100644 src/main/com/google/common/collect/PeekingIterator.java delete mode 100644 src/main/com/google/common/collect/Platform.java delete mode 100644 src/main/com/google/common/collect/Queues.java delete mode 100644 src/main/com/google/common/collect/Range.java delete mode 100644 src/main/com/google/common/collect/RangeMap.java delete mode 100644 src/main/com/google/common/collect/RangeSet.java delete mode 100644 src/main/com/google/common/collect/RegularContiguousSet.java delete mode 100644 src/main/com/google/common/collect/RegularImmutableAsList.java delete mode 100644 src/main/com/google/common/collect/RegularImmutableBiMap.java delete mode 100644 src/main/com/google/common/collect/RegularImmutableList.java delete mode 100644 src/main/com/google/common/collect/RegularImmutableMap.java delete mode 100644 src/main/com/google/common/collect/RegularImmutableMultiset.java delete mode 100644 src/main/com/google/common/collect/RegularImmutableSet.java delete mode 100644 src/main/com/google/common/collect/RegularImmutableSortedMap.java delete mode 100644 src/main/com/google/common/collect/RegularImmutableSortedMultiset.java delete mode 100644 src/main/com/google/common/collect/RegularImmutableSortedSet.java delete mode 100644 src/main/com/google/common/collect/RegularImmutableTable.java delete mode 100644 src/main/com/google/common/collect/ReverseNaturalOrdering.java delete mode 100644 src/main/com/google/common/collect/ReverseOrdering.java delete mode 100644 src/main/com/google/common/collect/RowSortedTable.java delete mode 100644 src/main/com/google/common/collect/Serialization.java delete mode 100644 src/main/com/google/common/collect/SetMultimap.java delete mode 100644 src/main/com/google/common/collect/Sets.java delete mode 100644 src/main/com/google/common/collect/SingletonImmutableBiMap.java delete mode 100644 src/main/com/google/common/collect/SingletonImmutableList.java delete mode 100644 src/main/com/google/common/collect/SingletonImmutableSet.java delete mode 100644 src/main/com/google/common/collect/SingletonImmutableTable.java delete mode 100644 src/main/com/google/common/collect/SortedIterable.java delete mode 100644 src/main/com/google/common/collect/SortedIterables.java delete mode 100644 src/main/com/google/common/collect/SortedLists.java delete mode 100644 src/main/com/google/common/collect/SortedMapDifference.java delete mode 100644 src/main/com/google/common/collect/SortedMultiset.java delete mode 100644 src/main/com/google/common/collect/SortedMultisetBridge.java delete mode 100644 src/main/com/google/common/collect/SortedMultisets.java delete mode 100644 src/main/com/google/common/collect/SortedSetMultimap.java delete mode 100644 src/main/com/google/common/collect/SparseImmutableTable.java delete mode 100644 src/main/com/google/common/collect/StandardRowSortedTable.java delete mode 100644 src/main/com/google/common/collect/StandardTable.java delete mode 100644 src/main/com/google/common/collect/Synchronized.java delete mode 100644 src/main/com/google/common/collect/Table.java delete mode 100644 src/main/com/google/common/collect/Tables.java delete mode 100644 src/main/com/google/common/collect/TransformedIterator.java delete mode 100644 src/main/com/google/common/collect/TransformedListIterator.java delete mode 100644 src/main/com/google/common/collect/TreeBasedTable.java delete mode 100644 src/main/com/google/common/collect/TreeMultimap.java delete mode 100644 src/main/com/google/common/collect/TreeMultiset.java delete mode 100644 src/main/com/google/common/collect/TreeRangeMap.java delete mode 100644 src/main/com/google/common/collect/TreeRangeSet.java delete mode 100644 src/main/com/google/common/collect/TreeTraverser.java delete mode 100644 src/main/com/google/common/collect/UnmodifiableIterator.java delete mode 100644 src/main/com/google/common/collect/UnmodifiableListIterator.java delete mode 100644 src/main/com/google/common/collect/UnmodifiableSortedMultiset.java delete mode 100644 src/main/com/google/common/collect/UsingToStringOrdering.java delete mode 100644 src/main/com/google/common/collect/WellBehavedMap.java delete mode 100644 src/main/com/google/common/collect/package-info.java delete mode 100644 src/main/com/google/common/escape/ArrayBasedCharEscaper.java delete mode 100644 src/main/com/google/common/escape/ArrayBasedEscaperMap.java delete mode 100644 src/main/com/google/common/escape/ArrayBasedUnicodeEscaper.java delete mode 100644 src/main/com/google/common/escape/CharEscaper.java delete mode 100644 src/main/com/google/common/escape/CharEscaperBuilder.java delete mode 100644 src/main/com/google/common/escape/Escaper.java delete mode 100644 src/main/com/google/common/escape/Escapers.java delete mode 100644 src/main/com/google/common/escape/Platform.java delete mode 100644 src/main/com/google/common/escape/UnicodeEscaper.java delete mode 100644 src/main/com/google/common/escape/package-info.java delete mode 100644 src/main/com/google/common/eventbus/AllowConcurrentEvents.java delete mode 100644 src/main/com/google/common/eventbus/AnnotatedSubscriberFinder.java delete mode 100644 src/main/com/google/common/eventbus/AsyncEventBus.java delete mode 100644 src/main/com/google/common/eventbus/DeadEvent.java delete mode 100644 src/main/com/google/common/eventbus/EventBus.java delete mode 100644 src/main/com/google/common/eventbus/EventSubscriber.java delete mode 100644 src/main/com/google/common/eventbus/Subscribe.java delete mode 100644 src/main/com/google/common/eventbus/SubscriberExceptionContext.java delete mode 100644 src/main/com/google/common/eventbus/SubscriberExceptionHandler.java delete mode 100644 src/main/com/google/common/eventbus/SubscriberFindingStrategy.java delete mode 100644 src/main/com/google/common/eventbus/SynchronizedEventSubscriber.java delete mode 100644 src/main/com/google/common/hash/AbstractByteHasher.java delete mode 100644 src/main/com/google/common/hash/AbstractCompositeHashFunction.java delete mode 100644 src/main/com/google/common/hash/AbstractHasher.java delete mode 100644 src/main/com/google/common/hash/AbstractNonStreamingHashFunction.java delete mode 100644 src/main/com/google/common/hash/AbstractStreamingHashFunction.java delete mode 100644 src/main/com/google/common/hash/BloomFilter.java delete mode 100644 src/main/com/google/common/hash/BloomFilterStrategies.java delete mode 100644 src/main/com/google/common/hash/ChecksumHashFunction.java delete mode 100644 src/main/com/google/common/hash/Crc32cHashFunction.java delete mode 100644 src/main/com/google/common/hash/Funnel.java delete mode 100644 src/main/com/google/common/hash/Funnels.java delete mode 100644 src/main/com/google/common/hash/HashCode.java delete mode 100644 src/main/com/google/common/hash/HashFunction.java delete mode 100644 src/main/com/google/common/hash/Hasher.java delete mode 100644 src/main/com/google/common/hash/Hashing.java delete mode 100644 src/main/com/google/common/hash/HashingInputStream.java delete mode 100644 src/main/com/google/common/hash/HashingOutputStream.java delete mode 100644 src/main/com/google/common/hash/MessageDigestHashFunction.java delete mode 100644 src/main/com/google/common/hash/Murmur3_128HashFunction.java delete mode 100644 src/main/com/google/common/hash/Murmur3_32HashFunction.java delete mode 100644 src/main/com/google/common/hash/PrimitiveSink.java delete mode 100644 src/main/com/google/common/hash/SipHashFunction.java delete mode 100644 src/main/com/google/common/hash/package-info.java delete mode 100644 src/main/com/google/common/html/HtmlEscapers.java delete mode 100644 src/main/com/google/common/html/package-info.java delete mode 100644 src/main/com/google/common/io/AppendableWriter.java delete mode 100644 src/main/com/google/common/io/BaseEncoding.java delete mode 100644 src/main/com/google/common/io/ByteArrayDataInput.java delete mode 100644 src/main/com/google/common/io/ByteArrayDataOutput.java delete mode 100644 src/main/com/google/common/io/ByteProcessor.java delete mode 100644 src/main/com/google/common/io/ByteSink.java delete mode 100644 src/main/com/google/common/io/ByteSource.java delete mode 100644 src/main/com/google/common/io/ByteStreams.java delete mode 100644 src/main/com/google/common/io/CharSequenceReader.java delete mode 100644 src/main/com/google/common/io/CharSink.java delete mode 100644 src/main/com/google/common/io/CharSource.java delete mode 100644 src/main/com/google/common/io/CharStreams.java delete mode 100644 src/main/com/google/common/io/Closeables.java delete mode 100644 src/main/com/google/common/io/Closer.java delete mode 100644 src/main/com/google/common/io/CountingInputStream.java delete mode 100644 src/main/com/google/common/io/CountingOutputStream.java delete mode 100644 src/main/com/google/common/io/FileBackedOutputStream.java delete mode 100644 src/main/com/google/common/io/FileWriteMode.java delete mode 100644 src/main/com/google/common/io/Files.java delete mode 100644 src/main/com/google/common/io/Flushables.java delete mode 100644 src/main/com/google/common/io/GwtWorkarounds.java delete mode 100644 src/main/com/google/common/io/InputSupplier.java delete mode 100644 src/main/com/google/common/io/LineBuffer.java delete mode 100644 src/main/com/google/common/io/LineProcessor.java delete mode 100644 src/main/com/google/common/io/LineReader.java delete mode 100644 src/main/com/google/common/io/LittleEndianDataInputStream.java delete mode 100644 src/main/com/google/common/io/LittleEndianDataOutputStream.java delete mode 100644 src/main/com/google/common/io/MultiInputStream.java delete mode 100644 src/main/com/google/common/io/MultiReader.java delete mode 100644 src/main/com/google/common/io/OutputSupplier.java delete mode 100644 src/main/com/google/common/io/PatternFilenameFilter.java delete mode 100644 src/main/com/google/common/io/Resources.java delete mode 100644 src/main/com/google/common/io/package-info.java delete mode 100644 src/main/com/google/common/math/BigIntegerMath.java delete mode 100644 src/main/com/google/common/math/DoubleMath.java delete mode 100644 src/main/com/google/common/math/DoubleUtils.java delete mode 100644 src/main/com/google/common/math/IntMath.java delete mode 100644 src/main/com/google/common/math/LongMath.java delete mode 100644 src/main/com/google/common/math/MathPreconditions.java delete mode 100644 src/main/com/google/common/math/package-info.java delete mode 100644 src/main/com/google/common/net/HostAndPort.java delete mode 100644 src/main/com/google/common/net/HostSpecifier.java delete mode 100644 src/main/com/google/common/net/HttpHeaders.java delete mode 100644 src/main/com/google/common/net/InetAddresses.java delete mode 100644 src/main/com/google/common/net/InternetDomainName.java delete mode 100644 src/main/com/google/common/net/MediaType.java delete mode 100644 src/main/com/google/common/net/PercentEscaper.java delete mode 100644 src/main/com/google/common/net/UrlEscapers.java delete mode 100644 src/main/com/google/common/net/package-info.java delete mode 100644 src/main/com/google/common/primitives/Booleans.java delete mode 100644 src/main/com/google/common/primitives/Bytes.java delete mode 100644 src/main/com/google/common/primitives/Chars.java delete mode 100644 src/main/com/google/common/primitives/Doubles.java delete mode 100644 src/main/com/google/common/primitives/Floats.java delete mode 100644 src/main/com/google/common/primitives/Ints.java delete mode 100644 src/main/com/google/common/primitives/Longs.java delete mode 100644 src/main/com/google/common/primitives/ParseRequest.java delete mode 100644 src/main/com/google/common/primitives/Primitives.java delete mode 100644 src/main/com/google/common/primitives/Shorts.java delete mode 100644 src/main/com/google/common/primitives/SignedBytes.java delete mode 100644 src/main/com/google/common/primitives/UnsignedBytes.java delete mode 100644 src/main/com/google/common/primitives/UnsignedInteger.java delete mode 100644 src/main/com/google/common/primitives/UnsignedInts.java delete mode 100644 src/main/com/google/common/primitives/UnsignedLong.java delete mode 100644 src/main/com/google/common/primitives/UnsignedLongs.java delete mode 100644 src/main/com/google/common/primitives/package-info.java delete mode 100644 src/main/com/google/common/reflect/AbstractInvocationHandler.java delete mode 100644 src/main/com/google/common/reflect/ClassPath.java delete mode 100644 src/main/com/google/common/reflect/Element.java delete mode 100644 src/main/com/google/common/reflect/ImmutableTypeToInstanceMap.java delete mode 100644 src/main/com/google/common/reflect/Invokable.java delete mode 100644 src/main/com/google/common/reflect/MutableTypeToInstanceMap.java delete mode 100644 src/main/com/google/common/reflect/Parameter.java delete mode 100644 src/main/com/google/common/reflect/Reflection.java delete mode 100644 src/main/com/google/common/reflect/TypeCapture.java delete mode 100644 src/main/com/google/common/reflect/TypeParameter.java delete mode 100644 src/main/com/google/common/reflect/TypeResolver.java delete mode 100644 src/main/com/google/common/reflect/TypeToInstanceMap.java delete mode 100644 src/main/com/google/common/reflect/TypeToken.java delete mode 100644 src/main/com/google/common/reflect/TypeVisitor.java delete mode 100644 src/main/com/google/common/reflect/Types.java delete mode 100644 src/main/com/google/common/reflect/package-info.java delete mode 100644 src/main/com/google/common/util/concurrent/AbstractCheckedFuture.java delete mode 100644 src/main/com/google/common/util/concurrent/AbstractExecutionThreadService.java delete mode 100644 src/main/com/google/common/util/concurrent/AbstractFuture.java delete mode 100644 src/main/com/google/common/util/concurrent/AbstractIdleService.java delete mode 100644 src/main/com/google/common/util/concurrent/AbstractListeningExecutorService.java delete mode 100644 src/main/com/google/common/util/concurrent/AbstractScheduledService.java delete mode 100644 src/main/com/google/common/util/concurrent/AbstractService.java delete mode 100644 src/main/com/google/common/util/concurrent/AsyncFunction.java delete mode 100644 src/main/com/google/common/util/concurrent/AsyncSettableFuture.java delete mode 100644 src/main/com/google/common/util/concurrent/AtomicDouble.java delete mode 100644 src/main/com/google/common/util/concurrent/AtomicDoubleArray.java delete mode 100644 src/main/com/google/common/util/concurrent/AtomicLongMap.java delete mode 100644 src/main/com/google/common/util/concurrent/Atomics.java delete mode 100644 src/main/com/google/common/util/concurrent/Callables.java delete mode 100644 src/main/com/google/common/util/concurrent/CheckedFuture.java delete mode 100644 src/main/com/google/common/util/concurrent/CycleDetectingLockFactory.java delete mode 100644 src/main/com/google/common/util/concurrent/ExecutionError.java delete mode 100644 src/main/com/google/common/util/concurrent/ExecutionList.java delete mode 100644 src/main/com/google/common/util/concurrent/FakeTimeLimiter.java delete mode 100644 src/main/com/google/common/util/concurrent/ForwardingBlockingQueue.java delete mode 100644 src/main/com/google/common/util/concurrent/ForwardingCheckedFuture.java delete mode 100644 src/main/com/google/common/util/concurrent/ForwardingExecutorService.java delete mode 100644 src/main/com/google/common/util/concurrent/ForwardingFuture.java delete mode 100644 src/main/com/google/common/util/concurrent/ForwardingListenableFuture.java delete mode 100644 src/main/com/google/common/util/concurrent/ForwardingListeningExecutorService.java delete mode 100644 src/main/com/google/common/util/concurrent/FutureCallback.java delete mode 100644 src/main/com/google/common/util/concurrent/FutureFallback.java delete mode 100644 src/main/com/google/common/util/concurrent/Futures.java delete mode 100644 src/main/com/google/common/util/concurrent/JdkFutureAdapters.java delete mode 100644 src/main/com/google/common/util/concurrent/ListenableFuture.java delete mode 100644 src/main/com/google/common/util/concurrent/ListenableFutureTask.java delete mode 100644 src/main/com/google/common/util/concurrent/ListenableScheduledFuture.java delete mode 100644 src/main/com/google/common/util/concurrent/ListenerCallQueue.java delete mode 100644 src/main/com/google/common/util/concurrent/ListeningExecutorService.java delete mode 100644 src/main/com/google/common/util/concurrent/ListeningScheduledExecutorService.java delete mode 100644 src/main/com/google/common/util/concurrent/Monitor.java delete mode 100644 src/main/com/google/common/util/concurrent/MoreExecutors.java delete mode 100644 src/main/com/google/common/util/concurrent/RateLimiter.java delete mode 100644 src/main/com/google/common/util/concurrent/Runnables.java delete mode 100644 src/main/com/google/common/util/concurrent/SerializingExecutor.java delete mode 100644 src/main/com/google/common/util/concurrent/Service.java delete mode 100644 src/main/com/google/common/util/concurrent/ServiceManager.java delete mode 100644 src/main/com/google/common/util/concurrent/SettableFuture.java delete mode 100644 src/main/com/google/common/util/concurrent/SimpleTimeLimiter.java delete mode 100644 src/main/com/google/common/util/concurrent/SmoothRateLimiter.java delete mode 100644 src/main/com/google/common/util/concurrent/Striped.java delete mode 100644 src/main/com/google/common/util/concurrent/ThreadFactoryBuilder.java delete mode 100644 src/main/com/google/common/util/concurrent/TimeLimiter.java delete mode 100644 src/main/com/google/common/util/concurrent/UncaughtExceptionHandlers.java delete mode 100644 src/main/com/google/common/util/concurrent/UncheckedExecutionException.java delete mode 100644 src/main/com/google/common/util/concurrent/UncheckedTimeoutException.java delete mode 100644 src/main/com/google/common/util/concurrent/Uninterruptibles.java delete mode 100644 src/main/com/google/common/util/concurrent/WrappingExecutorService.java delete mode 100644 src/main/com/google/common/util/concurrent/WrappingScheduledExecutorService.java delete mode 100644 src/main/com/google/common/util/concurrent/package-info.java delete mode 100644 src/main/com/google/common/xml/XmlEscapers.java delete mode 100644 src/main/com/google/common/xml/package-info.java delete mode 100644 src/main/com/google/gson/DefaultDateTypeAdapter.java delete mode 100644 src/main/com/google/gson/ExclusionStrategy.java delete mode 100644 src/main/com/google/gson/FieldAttributes.java delete mode 100644 src/main/com/google/gson/FieldNamingPolicy.java delete mode 100644 src/main/com/google/gson/FieldNamingStrategy.java delete mode 100644 src/main/com/google/gson/Gson.java delete mode 100644 src/main/com/google/gson/GsonBuilder.java delete mode 100644 src/main/com/google/gson/InstanceCreator.java delete mode 100644 src/main/com/google/gson/JsonArray.java delete mode 100644 src/main/com/google/gson/JsonDeserializationContext.java delete mode 100644 src/main/com/google/gson/JsonDeserializer.java delete mode 100644 src/main/com/google/gson/JsonElement.java delete mode 100644 src/main/com/google/gson/JsonIOException.java delete mode 100644 src/main/com/google/gson/JsonNull.java delete mode 100644 src/main/com/google/gson/JsonObject.java delete mode 100644 src/main/com/google/gson/JsonParseException.java delete mode 100644 src/main/com/google/gson/JsonParser.java delete mode 100644 src/main/com/google/gson/JsonPrimitive.java delete mode 100644 src/main/com/google/gson/JsonSerializationContext.java delete mode 100644 src/main/com/google/gson/JsonSerializer.java delete mode 100644 src/main/com/google/gson/JsonStreamParser.java delete mode 100644 src/main/com/google/gson/JsonSyntaxException.java delete mode 100644 src/main/com/google/gson/LongSerializationPolicy.java delete mode 100644 src/main/com/google/gson/TreeTypeAdapter.java delete mode 100644 src/main/com/google/gson/TypeAdapter.java delete mode 100644 src/main/com/google/gson/TypeAdapterFactory.java delete mode 100644 src/main/com/google/gson/annotations/Expose.java delete mode 100644 src/main/com/google/gson/annotations/SerializedName.java delete mode 100644 src/main/com/google/gson/annotations/Since.java delete mode 100644 src/main/com/google/gson/annotations/Until.java delete mode 100644 src/main/com/google/gson/internal/$Gson$Preconditions.java delete mode 100644 src/main/com/google/gson/internal/$Gson$Types.java delete mode 100644 src/main/com/google/gson/internal/ConstructorConstructor.java delete mode 100644 src/main/com/google/gson/internal/Excluder.java delete mode 100644 src/main/com/google/gson/internal/JsonReaderInternalAccess.java delete mode 100644 src/main/com/google/gson/internal/LazilyParsedNumber.java delete mode 100644 src/main/com/google/gson/internal/LinkedTreeMap.java delete mode 100644 src/main/com/google/gson/internal/ObjectConstructor.java delete mode 100644 src/main/com/google/gson/internal/Primitives.java delete mode 100644 src/main/com/google/gson/internal/Streams.java delete mode 100644 src/main/com/google/gson/internal/UnsafeAllocator.java delete mode 100644 src/main/com/google/gson/internal/bind/ArrayTypeAdapter.java delete mode 100644 src/main/com/google/gson/internal/bind/CollectionTypeAdapterFactory.java delete mode 100644 src/main/com/google/gson/internal/bind/DateTypeAdapter.java delete mode 100644 src/main/com/google/gson/internal/bind/JsonTreeReader.java delete mode 100644 src/main/com/google/gson/internal/bind/JsonTreeWriter.java delete mode 100644 src/main/com/google/gson/internal/bind/MapTypeAdapterFactory.java delete mode 100644 src/main/com/google/gson/internal/bind/ObjectTypeAdapter.java delete mode 100644 src/main/com/google/gson/internal/bind/ReflectiveTypeAdapterFactory.java delete mode 100644 src/main/com/google/gson/internal/bind/SqlDateTypeAdapter.java delete mode 100644 src/main/com/google/gson/internal/bind/TimeTypeAdapter.java delete mode 100644 src/main/com/google/gson/internal/bind/TypeAdapterRuntimeTypeWrapper.java delete mode 100644 src/main/com/google/gson/internal/bind/TypeAdapters.java delete mode 100644 src/main/com/google/gson/reflect/TypeToken.java delete mode 100644 src/main/com/google/gson/stream/JsonReader.java delete mode 100644 src/main/com/google/gson/stream/JsonScope.java delete mode 100644 src/main/com/google/gson/stream/JsonToken.java delete mode 100644 src/main/com/google/gson/stream/JsonWriter.java delete mode 100644 src/main/com/google/gson/stream/MalformedJsonException.java delete mode 100644 src/main/com/google/thirdparty/publicsuffix/PublicSuffixPatterns.java delete mode 100644 src/main/com/google/thirdparty/publicsuffix/PublicSuffixType.java delete mode 100644 src/main/com/google/thirdparty/publicsuffix/TrieParser.java delete mode 100644 src/main/com/mojang/UUIDTypeAdapter.java delete mode 100644 src/main/com/mojang/authlib/Agent.java delete mode 100644 src/main/com/mojang/authlib/AuthenticationService.java delete mode 100644 src/main/com/mojang/authlib/BaseAuthenticationService.java delete mode 100644 src/main/com/mojang/authlib/BaseUserAuthentication.java delete mode 100644 src/main/com/mojang/authlib/GameProfile.java delete mode 100644 src/main/com/mojang/authlib/GameProfileRepository.java delete mode 100644 src/main/com/mojang/authlib/HttpAuthenticationService.java delete mode 100644 src/main/com/mojang/authlib/HttpUserAuthentication.java delete mode 100644 src/main/com/mojang/authlib/ProfileLookupCallback.java delete mode 100644 src/main/com/mojang/authlib/UserAuthentication.java delete mode 100644 src/main/com/mojang/authlib/UserType.java delete mode 100644 src/main/com/mojang/authlib/exceptions/AuthenticationException.java delete mode 100644 src/main/com/mojang/authlib/exceptions/AuthenticationUnavailableException.java delete mode 100644 src/main/com/mojang/authlib/exceptions/InvalidCredentialsException.java delete mode 100644 src/main/com/mojang/authlib/exceptions/UserMigratedException.java delete mode 100644 src/main/com/mojang/authlib/legacy/LegacyAuthenticationService.java delete mode 100644 src/main/com/mojang/authlib/legacy/LegacyMinecraftSessionService.java delete mode 100644 src/main/com/mojang/authlib/legacy/LegacyUserAuthentication.java delete mode 100644 src/main/com/mojang/authlib/minecraft/BaseMinecraftSessionService.java delete mode 100644 src/main/com/mojang/authlib/minecraft/HttpMinecraftSessionService.java delete mode 100644 src/main/com/mojang/authlib/minecraft/InsecureTextureException.java delete mode 100644 src/main/com/mojang/authlib/minecraft/MinecraftProfileTexture.java delete mode 100644 src/main/com/mojang/authlib/minecraft/MinecraftSessionService.java delete mode 100644 src/main/com/mojang/authlib/properties/Property.java delete mode 100644 src/main/com/mojang/authlib/properties/PropertyMap.java delete mode 100644 src/main/com/mojang/authlib/yggdrasil/ProfileIncompleteException.java delete mode 100644 src/main/com/mojang/authlib/yggdrasil/ProfileNotFoundException.java delete mode 100644 src/main/com/mojang/authlib/yggdrasil/YggdrasilAuthenticationService.java delete mode 100644 src/main/com/mojang/authlib/yggdrasil/YggdrasilGameProfileRepository.java delete mode 100644 src/main/com/mojang/authlib/yggdrasil/YggdrasilMinecraftSessionService.java delete mode 100644 src/main/com/mojang/authlib/yggdrasil/YggdrasilUserAuthentication.java delete mode 100644 src/main/com/mojang/authlib/yggdrasil/request/AuthenticationRequest.java delete mode 100644 src/main/com/mojang/authlib/yggdrasil/request/InvalidateRequest.java delete mode 100644 src/main/com/mojang/authlib/yggdrasil/request/JoinMinecraftServerRequest.java delete mode 100644 src/main/com/mojang/authlib/yggdrasil/request/RefreshRequest.java delete mode 100644 src/main/com/mojang/authlib/yggdrasil/request/ValidateRequest.java delete mode 100644 src/main/com/mojang/authlib/yggdrasil/response/AuthenticationResponse.java delete mode 100644 src/main/com/mojang/authlib/yggdrasil/response/HasJoinedMinecraftServerResponse.java delete mode 100644 src/main/com/mojang/authlib/yggdrasil/response/MinecraftProfilePropertiesResponse.java delete mode 100644 src/main/com/mojang/authlib/yggdrasil/response/MinecraftTexturesPayload.java delete mode 100644 src/main/com/mojang/authlib/yggdrasil/response/ProfileSearchResultsResponse.java delete mode 100644 src/main/com/mojang/authlib/yggdrasil/response/RefreshResponse.java delete mode 100644 src/main/com/mojang/authlib/yggdrasil/response/Response.java delete mode 100644 src/main/com/mojang/authlib/yggdrasil/response/User.java delete mode 100644 src/main/com/mojang/launcher/Http.java delete mode 100644 src/main/com/mojang/launcher/Launcher.java delete mode 100644 src/main/com/mojang/launcher/LegacyPropertyMapSerializer.java delete mode 100644 src/main/com/mojang/launcher/OperatingSystem.java delete mode 100644 src/main/com/mojang/launcher/SharedLauncherConstants.java delete mode 100644 src/main/com/mojang/launcher/UserInterface.java delete mode 100644 src/main/com/mojang/launcher/events/GameOutputLogProcessor.java delete mode 100644 src/main/com/mojang/launcher/events/RefreshedVersionsListener.java delete mode 100644 src/main/com/mojang/launcher/game/GameInstanceStatus.java delete mode 100644 src/main/com/mojang/launcher/game/process/AbstractGameProcess.java delete mode 100644 src/main/com/mojang/launcher/game/process/GameProcess.java delete mode 100644 src/main/com/mojang/launcher/game/process/GameProcessBuilder.java delete mode 100644 src/main/com/mojang/launcher/game/process/GameProcessFactory.java delete mode 100644 src/main/com/mojang/launcher/game/process/GameProcessRunnable.java delete mode 100644 src/main/com/mojang/launcher/game/process/direct/DirectGameProcess.java delete mode 100644 src/main/com/mojang/launcher/game/process/direct/DirectGameProcessFactory.java delete mode 100644 src/main/com/mojang/launcher/game/process/direct/DirectProcessInputMonitor.java delete mode 100644 src/main/com/mojang/launcher/game/runner/AbstractGameRunner.java delete mode 100644 src/main/com/mojang/launcher/game/runner/GameRunner.java delete mode 100644 src/main/com/mojang/launcher/game/runner/GameRunnerListener.java delete mode 100644 src/main/com/mojang/launcher/updater/DateTypeAdapter.java delete mode 100644 src/main/com/mojang/launcher/updater/DownloadProgress.java delete mode 100644 src/main/com/mojang/launcher/updater/ExceptionalThreadPoolExecutor.java delete mode 100644 src/main/com/mojang/launcher/updater/FileTypeAdapter.java delete mode 100644 src/main/com/mojang/launcher/updater/LowerCaseEnumTypeAdapterFactory.java delete mode 100644 src/main/com/mojang/launcher/updater/VersionFilter.java delete mode 100644 src/main/com/mojang/launcher/updater/VersionManager.java delete mode 100644 src/main/com/mojang/launcher/updater/VersionSyncInfo.java delete mode 100644 src/main/com/mojang/launcher/updater/download/ChecksummedDownloadable.java delete mode 100644 src/main/com/mojang/launcher/updater/download/DownloadJob.java delete mode 100644 src/main/com/mojang/launcher/updater/download/DownloadListener.java delete mode 100644 src/main/com/mojang/launcher/updater/download/Downloadable.java delete mode 100644 src/main/com/mojang/launcher/updater/download/EtagDownloadable.java delete mode 100644 src/main/com/mojang/launcher/updater/download/MonitoringInputStream.java delete mode 100644 src/main/com/mojang/launcher/updater/download/ProgressContainer.java delete mode 100644 src/main/com/mojang/launcher/updater/download/assets/AssetDownloadable.java delete mode 100644 src/main/com/mojang/launcher/updater/download/assets/AssetIndex.java delete mode 100644 src/main/com/mojang/launcher/versions/CompatibilityRule.java delete mode 100644 src/main/com/mojang/launcher/versions/CompleteVersion.java delete mode 100644 src/main/com/mojang/launcher/versions/ExtractRules.java delete mode 100644 src/main/com/mojang/launcher/versions/ReleaseType.java delete mode 100644 src/main/com/mojang/launcher/versions/ReleaseTypeAdapterFactory.java delete mode 100644 src/main/com/mojang/launcher/versions/ReleaseTypeFactory.java delete mode 100644 src/main/com/mojang/launcher/versions/Version.java delete mode 100644 src/main/com/mojang/util/QueueLogAppender.java delete mode 100644 src/main/com/mojang/util/UUIDTypeAdapter.java delete mode 100644 src/main/javax/annotation/CheckForNull.java delete mode 100644 src/main/javax/annotation/CheckForSigned.java delete mode 100644 src/main/javax/annotation/CheckReturnValue.java delete mode 100644 src/main/javax/annotation/Detainted.java delete mode 100644 src/main/javax/annotation/MatchesPattern.java delete mode 100644 src/main/javax/annotation/Nonnegative.java delete mode 100644 src/main/javax/annotation/Nonnull.java delete mode 100644 src/main/javax/annotation/Nullable.java delete mode 100644 src/main/javax/annotation/OverridingMethodsMustInvokeSuper.java delete mode 100644 src/main/javax/annotation/ParametersAreNonnullByDefault.java delete mode 100644 src/main/javax/annotation/ParametersAreNullableByDefault.java delete mode 100644 src/main/javax/annotation/PropertyKey.java delete mode 100644 src/main/javax/annotation/RegEx.java delete mode 100644 src/main/javax/annotation/Signed.java delete mode 100644 src/main/javax/annotation/Syntax.java delete mode 100644 src/main/javax/annotation/Tainted.java delete mode 100644 src/main/javax/annotation/Untainted.java delete mode 100644 src/main/javax/annotation/WillClose.java delete mode 100644 src/main/javax/annotation/WillCloseWhenClosed.java delete mode 100644 src/main/javax/annotation/WillNotClose.java delete mode 100644 src/main/javax/annotation/concurrent/GuardedBy.java delete mode 100644 src/main/javax/annotation/concurrent/Immutable.java delete mode 100644 src/main/javax/annotation/concurrent/NotThreadSafe.java delete mode 100644 src/main/javax/annotation/concurrent/ThreadSafe.java delete mode 100644 src/main/javax/annotation/meta/Exclusive.java delete mode 100644 src/main/javax/annotation/meta/Exhaustive.java delete mode 100644 src/main/javax/annotation/meta/TypeQualifier.java delete mode 100644 src/main/javax/annotation/meta/TypeQualifierDefault.java delete mode 100644 src/main/javax/annotation/meta/TypeQualifierNickname.java delete mode 100644 src/main/javax/annotation/meta/TypeQualifierValidator.java delete mode 100644 src/main/javax/annotation/meta/When.java delete mode 100644 src/main/javax/xml/namespace/QName.java delete mode 100644 src/main/joptsimple/AbstractOptionSpec.java delete mode 100644 src/main/joptsimple/AlternativeLongOptionSpec.java delete mode 100644 src/main/joptsimple/ArgumentAcceptingOptionSpec.java delete mode 100644 src/main/joptsimple/ArgumentList.java delete mode 100644 src/main/joptsimple/BuiltinHelpFormatter.java delete mode 100644 src/main/joptsimple/HelpFormatter.java delete mode 100644 src/main/joptsimple/IllegalOptionSpecificationException.java delete mode 100644 src/main/joptsimple/MissingRequiredOptionException.java delete mode 100644 src/main/joptsimple/MultipleArgumentsForOptionException.java delete mode 100644 src/main/joptsimple/NoArgumentOptionSpec.java delete mode 100644 src/main/joptsimple/NonOptionArgumentSpec.java delete mode 100644 src/main/joptsimple/OptionArgumentConversionException.java delete mode 100644 src/main/joptsimple/OptionDescriptor.java delete mode 100644 src/main/joptsimple/OptionException.java delete mode 100644 src/main/joptsimple/OptionMissingRequiredArgumentException.java delete mode 100644 src/main/joptsimple/OptionParser.java delete mode 100644 src/main/joptsimple/OptionParserState.java delete mode 100644 src/main/joptsimple/OptionSet.java delete mode 100644 src/main/joptsimple/OptionSpec.java delete mode 100644 src/main/joptsimple/OptionSpecBuilder.java delete mode 100644 src/main/joptsimple/OptionSpecTokenizer.java delete mode 100644 src/main/joptsimple/OptionalArgumentOptionSpec.java delete mode 100644 src/main/joptsimple/ParserRules.java delete mode 100644 src/main/joptsimple/RequiredArgumentOptionSpec.java delete mode 100644 src/main/joptsimple/UnacceptableNumberOfNonOptionsException.java delete mode 100644 src/main/joptsimple/UnconfiguredOptionException.java delete mode 100644 src/main/joptsimple/UnrecognizedOptionException.java delete mode 100644 src/main/joptsimple/ValueConversionException.java delete mode 100644 src/main/joptsimple/ValueConverter.java delete mode 100644 src/main/joptsimple/internal/AbbreviationMap.java delete mode 100644 src/main/joptsimple/internal/Classes.java delete mode 100644 src/main/joptsimple/internal/Columns.java delete mode 100644 src/main/joptsimple/internal/ConstructorInvokingValueConverter.java delete mode 100644 src/main/joptsimple/internal/MethodInvokingValueConverter.java delete mode 100644 src/main/joptsimple/internal/Objects.java delete mode 100644 src/main/joptsimple/internal/Reflection.java delete mode 100644 src/main/joptsimple/internal/ReflectionException.java delete mode 100644 src/main/joptsimple/internal/Row.java delete mode 100644 src/main/joptsimple/internal/Rows.java delete mode 100644 src/main/joptsimple/internal/Strings.java delete mode 100644 src/main/joptsimple/util/DateConverter.java delete mode 100644 src/main/joptsimple/util/InetAddressConverter.java delete mode 100644 src/main/joptsimple/util/KeyValuePair.java delete mode 100644 src/main/joptsimple/util/RegexMatcher.java delete mode 100644 src/main/net/mc/main/DarkTheme.java delete mode 100644 src/main/net/mc/main/InstallDirSettings.java delete mode 100644 src/main/net/mc/main/Main.java delete mode 100644 src/main/net/mc/main/Util.java delete mode 100644 src/main/net/miginfocom/layout/AC.java delete mode 100644 src/main/net/miginfocom/layout/BoundSize.java delete mode 100644 src/main/net/miginfocom/layout/CC.java delete mode 100644 src/main/net/miginfocom/layout/ComponentWrapper.java delete mode 100644 src/main/net/miginfocom/layout/ConstraintParser.java delete mode 100644 src/main/net/miginfocom/layout/ContainerWrapper.java delete mode 100644 src/main/net/miginfocom/layout/DimConstraint.java delete mode 100644 src/main/net/miginfocom/layout/Grid.java delete mode 100644 src/main/net/miginfocom/layout/InCellGapProvider.java delete mode 100644 src/main/net/miginfocom/layout/LC.java delete mode 100644 src/main/net/miginfocom/layout/LayoutCallback.java delete mode 100644 src/main/net/miginfocom/layout/LayoutUtil.java delete mode 100644 src/main/net/miginfocom/layout/LinkHandler.java delete mode 100644 src/main/net/miginfocom/layout/PlatformDefaults.java delete mode 100644 src/main/net/miginfocom/layout/ResizeConstraint.java delete mode 100644 src/main/net/miginfocom/layout/UnitConverter.java delete mode 100644 src/main/net/miginfocom/layout/UnitValue.java delete mode 100644 src/main/net/miginfocom/swing/MigLayout.java delete mode 100644 src/main/net/miginfocom/swing/SwingComponentWrapper.java delete mode 100644 src/main/net/miginfocom/swing/SwingContainerWrapper.java delete mode 100644 src/main/net/minecraft/launcher/CompatibilityRule.java delete mode 100644 src/main/net/minecraft/launcher/CurrentLaunchFeatureMatcher.java delete mode 100644 src/main/net/minecraft/launcher/Language.java delete mode 100644 src/main/net/minecraft/launcher/Launcher.java delete mode 100644 src/main/net/minecraft/launcher/LauncherConstants.java delete mode 100644 src/main/net/minecraft/launcher/MinecraftUserInterface.java delete mode 100644 src/main/net/minecraft/launcher/NetLauncherMain.java delete mode 100644 src/main/net/minecraft/launcher/OptionsManager.java delete mode 100644 src/main/net/minecraft/launcher/PackageEditor.java delete mode 100644 src/main/net/minecraft/launcher/ServerManager.java delete mode 100644 src/main/net/minecraft/launcher/StorageManager.java delete mode 100644 src/main/net/minecraft/launcher/SwingUserInterface.java delete mode 100644 src/main/net/minecraft/launcher/game/GameLaunchDispatcher.java delete mode 100644 src/main/net/minecraft/launcher/game/MinecraftGameRunner.java delete mode 100644 src/main/net/minecraft/launcher/game/MinecraftReleaseType.java delete mode 100644 src/main/net/minecraft/launcher/game/MinecraftReleaseTypeFactory.java delete mode 100644 src/main/net/minecraft/launcher/game/SkaiaNet.java delete mode 100644 src/main/net/minecraft/launcher/profile/AuthenticationDatabase.java delete mode 100644 src/main/net/minecraft/launcher/profile/LauncherVisibilityRule.java delete mode 100644 src/main/net/minecraft/launcher/profile/Profile.java delete mode 100644 src/main/net/minecraft/launcher/profile/ProfileManager.java delete mode 100644 src/main/net/minecraft/launcher/profile/RefreshedProfilesListener.java delete mode 100644 src/main/net/minecraft/launcher/profile/UserChangedListener.java delete mode 100644 src/main/net/minecraft/launcher/ui/BottomBarPanel.java delete mode 100644 src/main/net/minecraft/launcher/ui/LauncherPanel.java delete mode 100644 src/main/net/minecraft/launcher/ui/TexturedPanel.java delete mode 100644 src/main/net/minecraft/launcher/ui/bottombar/PlayButtonPanel.java delete mode 100644 src/main/net/minecraft/launcher/ui/bottombar/PlayerInfoPanel.java delete mode 100644 src/main/net/minecraft/launcher/ui/bottombar/ProfileSelectionPanel.java delete mode 100644 src/main/net/minecraft/launcher/ui/bottombar/SidebarGridForm.java delete mode 100644 src/main/net/minecraft/launcher/ui/bottombar/StatusPanelForm.java delete mode 100644 src/main/net/minecraft/launcher/ui/popups/login/AuthErrorForm.java delete mode 100644 src/main/net/minecraft/launcher/ui/popups/login/ComboItem.java delete mode 100644 src/main/net/minecraft/launcher/ui/popups/login/ExistingUserListForm.java delete mode 100644 src/main/net/minecraft/launcher/ui/popups/login/LogInForm.java delete mode 100644 src/main/net/minecraft/launcher/ui/popups/login/LogInPopup.java delete mode 100644 src/main/net/minecraft/launcher/ui/popups/profile/ProfileEditorPopup.java delete mode 100644 src/main/net/minecraft/launcher/ui/popups/profile/ProfileInfoPanel.java delete mode 100644 src/main/net/minecraft/launcher/ui/popups/profile/ProfileJavaPanel.java delete mode 100644 src/main/net/minecraft/launcher/ui/popups/profile/ProfileVersionPanel.java delete mode 100644 src/main/net/minecraft/launcher/ui/tabs/ConsoleTab.java delete mode 100644 src/main/net/minecraft/launcher/ui/tabs/GameOutputTab.java delete mode 100644 src/main/net/minecraft/launcher/ui/tabs/LauncherTabPanel.java delete mode 100644 src/main/net/minecraft/launcher/ui/tabs/ProfileListTab.java delete mode 100644 src/main/net/minecraft/launcher/ui/tabs/ServerListTab.java delete mode 100644 src/main/net/minecraft/launcher/ui/tabs/WebsiteTab.java delete mode 100644 src/main/net/minecraft/launcher/ui/tabs/website/Browser.java delete mode 100644 src/main/net/minecraft/launcher/ui/tabs/website/JFXBrowser.java delete mode 100644 src/main/net/minecraft/launcher/ui/tabs/website/LegacySwingBrowser.java delete mode 100644 src/main/net/minecraft/launcher/updater/Argument.java delete mode 100644 src/main/net/minecraft/launcher/updater/ArgumentType.java delete mode 100644 src/main/net/minecraft/launcher/updater/AssetIndexInfo.java delete mode 100644 src/main/net/minecraft/launcher/updater/CompleteMinecraftVersion.java delete mode 100644 src/main/net/minecraft/launcher/updater/DownloadInfo.java delete mode 100644 src/main/net/minecraft/launcher/updater/DownloadType.java delete mode 100644 src/main/net/minecraft/launcher/updater/FileBasedVersionList.java delete mode 100644 src/main/net/minecraft/launcher/updater/Library.java delete mode 100644 src/main/net/minecraft/launcher/updater/LibraryDownloadInfo.java delete mode 100644 src/main/net/minecraft/launcher/updater/LocalVersionList.java delete mode 100644 src/main/net/minecraft/launcher/updater/MinecraftVersionManager.java delete mode 100644 src/main/net/minecraft/launcher/updater/PartialVersion.java delete mode 100644 src/main/net/minecraft/launcher/updater/PreHashedDownloadable.java delete mode 100644 src/main/net/minecraft/launcher/updater/VersionList.java delete mode 100644 src/main/org/apache/commons/codec/BinaryDecoder.java delete mode 100644 src/main/org/apache/commons/codec/BinaryEncoder.java delete mode 100644 src/main/org/apache/commons/codec/CharEncoding.java delete mode 100644 src/main/org/apache/commons/codec/Charsets.java delete mode 100644 src/main/org/apache/commons/codec/Decoder.java delete mode 100644 src/main/org/apache/commons/codec/DecoderException.java delete mode 100644 src/main/org/apache/commons/codec/Encoder.java delete mode 100644 src/main/org/apache/commons/codec/EncoderException.java delete mode 100644 src/main/org/apache/commons/codec/StringDecoder.java delete mode 100644 src/main/org/apache/commons/codec/StringEncoder.java delete mode 100644 src/main/org/apache/commons/codec/StringEncoderComparator.java delete mode 100644 src/main/org/apache/commons/codec/binary/Base32.java delete mode 100644 src/main/org/apache/commons/codec/binary/Base32InputStream.java delete mode 100644 src/main/org/apache/commons/codec/binary/Base32OutputStream.java delete mode 100644 src/main/org/apache/commons/codec/binary/Base64.java delete mode 100644 src/main/org/apache/commons/codec/binary/Base64InputStream.java delete mode 100644 src/main/org/apache/commons/codec/binary/Base64OutputStream.java delete mode 100644 src/main/org/apache/commons/codec/binary/BaseNCodec.java delete mode 100644 src/main/org/apache/commons/codec/binary/BaseNCodecInputStream.java delete mode 100644 src/main/org/apache/commons/codec/binary/BaseNCodecOutputStream.java delete mode 100644 src/main/org/apache/commons/codec/binary/BinaryCodec.java delete mode 100644 src/main/org/apache/commons/codec/binary/CharSequenceUtils.java delete mode 100644 src/main/org/apache/commons/codec/binary/Hex.java delete mode 100644 src/main/org/apache/commons/codec/binary/StringUtils.java delete mode 100644 src/main/org/apache/commons/codec/digest/B64.java delete mode 100644 src/main/org/apache/commons/codec/digest/Crypt.java delete mode 100644 src/main/org/apache/commons/codec/digest/DigestUtils.java delete mode 100644 src/main/org/apache/commons/codec/digest/HmacAlgorithms.java delete mode 100644 src/main/org/apache/commons/codec/digest/HmacUtils.java delete mode 100644 src/main/org/apache/commons/codec/digest/Md5Crypt.java delete mode 100644 src/main/org/apache/commons/codec/digest/MessageDigestAlgorithms.java delete mode 100644 src/main/org/apache/commons/codec/digest/Sha2Crypt.java delete mode 100644 src/main/org/apache/commons/codec/digest/UnixCrypt.java delete mode 100644 src/main/org/apache/commons/codec/language/AbstractCaverphone.java delete mode 100644 src/main/org/apache/commons/codec/language/Caverphone.java delete mode 100644 src/main/org/apache/commons/codec/language/Caverphone1.java delete mode 100644 src/main/org/apache/commons/codec/language/Caverphone2.java delete mode 100644 src/main/org/apache/commons/codec/language/ColognePhonetic.java delete mode 100644 src/main/org/apache/commons/codec/language/DaitchMokotoffSoundex.java delete mode 100644 src/main/org/apache/commons/codec/language/DoubleMetaphone.java delete mode 100644 src/main/org/apache/commons/codec/language/MatchRatingApproachEncoder.java delete mode 100644 src/main/org/apache/commons/codec/language/Metaphone.java delete mode 100644 src/main/org/apache/commons/codec/language/Nysiis.java delete mode 100644 src/main/org/apache/commons/codec/language/RefinedSoundex.java delete mode 100644 src/main/org/apache/commons/codec/language/Soundex.java delete mode 100644 src/main/org/apache/commons/codec/language/SoundexUtils.java delete mode 100644 src/main/org/apache/commons/codec/language/bm/BeiderMorseEncoder.java delete mode 100644 src/main/org/apache/commons/codec/language/bm/Lang.java delete mode 100644 src/main/org/apache/commons/codec/language/bm/Languages.java delete mode 100644 src/main/org/apache/commons/codec/language/bm/NameType.java delete mode 100644 src/main/org/apache/commons/codec/language/bm/PhoneticEngine.java delete mode 100644 src/main/org/apache/commons/codec/language/bm/ResourceConstants.java delete mode 100644 src/main/org/apache/commons/codec/language/bm/Rule.java delete mode 100644 src/main/org/apache/commons/codec/language/bm/RuleType.java delete mode 100644 src/main/org/apache/commons/codec/net/BCodec.java delete mode 100644 src/main/org/apache/commons/codec/net/QCodec.java delete mode 100644 src/main/org/apache/commons/codec/net/QuotedPrintableCodec.java delete mode 100644 src/main/org/apache/commons/codec/net/RFC1522Codec.java delete mode 100644 src/main/org/apache/commons/codec/net/URLCodec.java delete mode 100644 src/main/org/apache/commons/codec/net/Utils.java delete mode 100644 src/main/org/apache/commons/io/ByteOrderMark.java delete mode 100644 src/main/org/apache/commons/io/Charsets.java delete mode 100644 src/main/org/apache/commons/io/CopyUtils.java delete mode 100644 src/main/org/apache/commons/io/DirectoryWalker.java delete mode 100644 src/main/org/apache/commons/io/EndianUtils.java delete mode 100644 src/main/org/apache/commons/io/FileCleaner.java delete mode 100644 src/main/org/apache/commons/io/FileCleaningTracker.java delete mode 100644 src/main/org/apache/commons/io/FileDeleteStrategy.java delete mode 100644 src/main/org/apache/commons/io/FileExistsException.java delete mode 100644 src/main/org/apache/commons/io/FileSystemUtils.java delete mode 100644 src/main/org/apache/commons/io/FileUtils.java delete mode 100644 src/main/org/apache/commons/io/FilenameUtils.java delete mode 100644 src/main/org/apache/commons/io/HexDump.java delete mode 100644 src/main/org/apache/commons/io/IOCase.java delete mode 100644 src/main/org/apache/commons/io/IOExceptionWithCause.java delete mode 100644 src/main/org/apache/commons/io/IOUtils.java delete mode 100644 src/main/org/apache/commons/io/LineIterator.java delete mode 100644 src/main/org/apache/commons/io/TaggedIOException.java delete mode 100644 src/main/org/apache/commons/io/ThreadMonitor.java delete mode 100644 src/main/org/apache/commons/io/comparator/AbstractFileComparator.java delete mode 100644 src/main/org/apache/commons/io/comparator/CompositeFileComparator.java delete mode 100644 src/main/org/apache/commons/io/comparator/DefaultFileComparator.java delete mode 100644 src/main/org/apache/commons/io/comparator/DirectoryFileComparator.java delete mode 100644 src/main/org/apache/commons/io/comparator/ExtensionFileComparator.java delete mode 100644 src/main/org/apache/commons/io/comparator/LastModifiedFileComparator.java delete mode 100644 src/main/org/apache/commons/io/comparator/NameFileComparator.java delete mode 100644 src/main/org/apache/commons/io/comparator/PathFileComparator.java delete mode 100644 src/main/org/apache/commons/io/comparator/ReverseComparator.java delete mode 100644 src/main/org/apache/commons/io/comparator/SizeFileComparator.java delete mode 100644 src/main/org/apache/commons/io/filefilter/AbstractFileFilter.java delete mode 100644 src/main/org/apache/commons/io/filefilter/AgeFileFilter.java delete mode 100644 src/main/org/apache/commons/io/filefilter/AndFileFilter.java delete mode 100644 src/main/org/apache/commons/io/filefilter/CanReadFileFilter.java delete mode 100644 src/main/org/apache/commons/io/filefilter/CanWriteFileFilter.java delete mode 100644 src/main/org/apache/commons/io/filefilter/ConditionalFileFilter.java delete mode 100644 src/main/org/apache/commons/io/filefilter/DelegateFileFilter.java delete mode 100644 src/main/org/apache/commons/io/filefilter/DirectoryFileFilter.java delete mode 100644 src/main/org/apache/commons/io/filefilter/EmptyFileFilter.java delete mode 100644 src/main/org/apache/commons/io/filefilter/FalseFileFilter.java delete mode 100644 src/main/org/apache/commons/io/filefilter/FileFileFilter.java delete mode 100644 src/main/org/apache/commons/io/filefilter/FileFilterUtils.java delete mode 100644 src/main/org/apache/commons/io/filefilter/HiddenFileFilter.java delete mode 100644 src/main/org/apache/commons/io/filefilter/IOFileFilter.java delete mode 100644 src/main/org/apache/commons/io/filefilter/MagicNumberFileFilter.java delete mode 100644 src/main/org/apache/commons/io/filefilter/NameFileFilter.java delete mode 100644 src/main/org/apache/commons/io/filefilter/NotFileFilter.java delete mode 100644 src/main/org/apache/commons/io/filefilter/OrFileFilter.java delete mode 100644 src/main/org/apache/commons/io/filefilter/PrefixFileFilter.java delete mode 100644 src/main/org/apache/commons/io/filefilter/RegexFileFilter.java delete mode 100644 src/main/org/apache/commons/io/filefilter/SizeFileFilter.java delete mode 100644 src/main/org/apache/commons/io/filefilter/SuffixFileFilter.java delete mode 100644 src/main/org/apache/commons/io/filefilter/TrueFileFilter.java delete mode 100644 src/main/org/apache/commons/io/filefilter/WildcardFileFilter.java delete mode 100644 src/main/org/apache/commons/io/filefilter/WildcardFilter.java delete mode 100644 src/main/org/apache/commons/io/input/AutoCloseInputStream.java delete mode 100644 src/main/org/apache/commons/io/input/BOMInputStream.java delete mode 100644 src/main/org/apache/commons/io/input/BoundedInputStream.java delete mode 100644 src/main/org/apache/commons/io/input/BrokenInputStream.java delete mode 100644 src/main/org/apache/commons/io/input/CharSequenceInputStream.java delete mode 100644 src/main/org/apache/commons/io/input/CharSequenceReader.java delete mode 100644 src/main/org/apache/commons/io/input/ClassLoaderObjectInputStream.java delete mode 100644 src/main/org/apache/commons/io/input/CloseShieldInputStream.java delete mode 100644 src/main/org/apache/commons/io/input/ClosedInputStream.java delete mode 100644 src/main/org/apache/commons/io/input/CountingInputStream.java delete mode 100644 src/main/org/apache/commons/io/input/DemuxInputStream.java delete mode 100644 src/main/org/apache/commons/io/input/NullInputStream.java delete mode 100644 src/main/org/apache/commons/io/input/NullReader.java delete mode 100644 src/main/org/apache/commons/io/input/ProxyInputStream.java delete mode 100644 src/main/org/apache/commons/io/input/ProxyReader.java delete mode 100644 src/main/org/apache/commons/io/input/ReaderInputStream.java delete mode 100644 src/main/org/apache/commons/io/input/ReversedLinesFileReader.java delete mode 100644 src/main/org/apache/commons/io/input/SwappedDataInputStream.java delete mode 100644 src/main/org/apache/commons/io/input/TaggedInputStream.java delete mode 100644 src/main/org/apache/commons/io/input/Tailer.java delete mode 100644 src/main/org/apache/commons/io/input/TailerListener.java delete mode 100644 src/main/org/apache/commons/io/input/TailerListenerAdapter.java delete mode 100644 src/main/org/apache/commons/io/input/TeeInputStream.java delete mode 100644 src/main/org/apache/commons/io/input/XmlStreamReader.java delete mode 100644 src/main/org/apache/commons/io/input/XmlStreamReaderException.java delete mode 100644 src/main/org/apache/commons/io/monitor/FileAlterationListener.java delete mode 100644 src/main/org/apache/commons/io/monitor/FileAlterationListenerAdaptor.java delete mode 100644 src/main/org/apache/commons/io/monitor/FileAlterationMonitor.java delete mode 100644 src/main/org/apache/commons/io/monitor/FileAlterationObserver.java delete mode 100644 src/main/org/apache/commons/io/monitor/FileEntry.java delete mode 100644 src/main/org/apache/commons/io/output/BrokenOutputStream.java delete mode 100644 src/main/org/apache/commons/io/output/ByteArrayOutputStream.java delete mode 100644 src/main/org/apache/commons/io/output/CloseShieldOutputStream.java delete mode 100644 src/main/org/apache/commons/io/output/ClosedOutputStream.java delete mode 100644 src/main/org/apache/commons/io/output/CountingOutputStream.java delete mode 100644 src/main/org/apache/commons/io/output/DeferredFileOutputStream.java delete mode 100644 src/main/org/apache/commons/io/output/DemuxOutputStream.java delete mode 100644 src/main/org/apache/commons/io/output/FileWriterWithEncoding.java delete mode 100644 src/main/org/apache/commons/io/output/LockableFileWriter.java delete mode 100644 src/main/org/apache/commons/io/output/NullOutputStream.java delete mode 100644 src/main/org/apache/commons/io/output/NullWriter.java delete mode 100644 src/main/org/apache/commons/io/output/ProxyOutputStream.java delete mode 100644 src/main/org/apache/commons/io/output/ProxyWriter.java delete mode 100644 src/main/org/apache/commons/io/output/StringBuilderWriter.java delete mode 100644 src/main/org/apache/commons/io/output/TaggedOutputStream.java delete mode 100644 src/main/org/apache/commons/io/output/TeeOutputStream.java delete mode 100644 src/main/org/apache/commons/io/output/ThresholdingOutputStream.java delete mode 100644 src/main/org/apache/commons/io/output/WriterOutputStream.java delete mode 100644 src/main/org/apache/commons/io/output/XmlStreamWriter.java delete mode 100644 src/main/org/apache/commons/lang3/AnnotationUtils.java delete mode 100644 src/main/org/apache/commons/lang3/ArrayUtils.java delete mode 100644 src/main/org/apache/commons/lang3/BitField.java delete mode 100644 src/main/org/apache/commons/lang3/BooleanUtils.java delete mode 100644 src/main/org/apache/commons/lang3/CharEncoding.java delete mode 100644 src/main/org/apache/commons/lang3/CharRange.java delete mode 100644 src/main/org/apache/commons/lang3/CharSequenceUtils.java delete mode 100644 src/main/org/apache/commons/lang3/CharSet.java delete mode 100644 src/main/org/apache/commons/lang3/CharSetUtils.java delete mode 100644 src/main/org/apache/commons/lang3/CharUtils.java delete mode 100644 src/main/org/apache/commons/lang3/ClassPathUtils.java delete mode 100644 src/main/org/apache/commons/lang3/ClassUtils.java delete mode 100644 src/main/org/apache/commons/lang3/Conversion.java delete mode 100644 src/main/org/apache/commons/lang3/EnumUtils.java delete mode 100644 src/main/org/apache/commons/lang3/JavaVersion.java delete mode 100644 src/main/org/apache/commons/lang3/LocaleUtils.java delete mode 100644 src/main/org/apache/commons/lang3/NotImplementedException.java delete mode 100644 src/main/org/apache/commons/lang3/ObjectUtils.java delete mode 100644 src/main/org/apache/commons/lang3/RandomStringUtils.java delete mode 100644 src/main/org/apache/commons/lang3/RandomUtils.java delete mode 100644 src/main/org/apache/commons/lang3/Range.java delete mode 100644 src/main/org/apache/commons/lang3/SerializationException.java delete mode 100644 src/main/org/apache/commons/lang3/SerializationUtils.java delete mode 100644 src/main/org/apache/commons/lang3/StringEscapeUtils.java delete mode 100644 src/main/org/apache/commons/lang3/StringUtils.java delete mode 100644 src/main/org/apache/commons/lang3/SystemUtils.java delete mode 100644 src/main/org/apache/commons/lang3/Validate.java delete mode 100644 src/main/org/apache/commons/lang3/builder/Builder.java delete mode 100644 src/main/org/apache/commons/lang3/builder/CompareToBuilder.java delete mode 100644 src/main/org/apache/commons/lang3/builder/Diff.java delete mode 100644 src/main/org/apache/commons/lang3/builder/DiffBuilder.java delete mode 100644 src/main/org/apache/commons/lang3/builder/DiffResult.java delete mode 100644 src/main/org/apache/commons/lang3/builder/Diffable.java delete mode 100644 src/main/org/apache/commons/lang3/builder/EqualsBuilder.java delete mode 100644 src/main/org/apache/commons/lang3/builder/HashCodeBuilder.java delete mode 100644 src/main/org/apache/commons/lang3/builder/IDKey.java delete mode 100644 src/main/org/apache/commons/lang3/builder/MultilineRecursiveToStringStyle.java delete mode 100644 src/main/org/apache/commons/lang3/builder/RecursiveToStringStyle.java delete mode 100644 src/main/org/apache/commons/lang3/builder/ReflectionToStringBuilder.java delete mode 100644 src/main/org/apache/commons/lang3/builder/StandardToStringStyle.java delete mode 100644 src/main/org/apache/commons/lang3/builder/ToStringBuilder.java delete mode 100644 src/main/org/apache/commons/lang3/builder/ToStringStyle.java delete mode 100644 src/main/org/apache/commons/lang3/concurrent/AtomicInitializer.java delete mode 100644 src/main/org/apache/commons/lang3/concurrent/AtomicSafeInitializer.java delete mode 100644 src/main/org/apache/commons/lang3/concurrent/BackgroundInitializer.java delete mode 100644 src/main/org/apache/commons/lang3/concurrent/BasicThreadFactory.java delete mode 100644 src/main/org/apache/commons/lang3/concurrent/CallableBackgroundInitializer.java delete mode 100644 src/main/org/apache/commons/lang3/concurrent/ConcurrentException.java delete mode 100644 src/main/org/apache/commons/lang3/concurrent/ConcurrentInitializer.java delete mode 100644 src/main/org/apache/commons/lang3/concurrent/ConcurrentRuntimeException.java delete mode 100644 src/main/org/apache/commons/lang3/concurrent/ConcurrentUtils.java delete mode 100644 src/main/org/apache/commons/lang3/concurrent/ConstantInitializer.java delete mode 100644 src/main/org/apache/commons/lang3/concurrent/LazyInitializer.java delete mode 100644 src/main/org/apache/commons/lang3/concurrent/MultiBackgroundInitializer.java delete mode 100644 src/main/org/apache/commons/lang3/concurrent/TimedSemaphore.java delete mode 100644 src/main/org/apache/commons/lang3/event/EventListenerSupport.java delete mode 100644 src/main/org/apache/commons/lang3/event/EventUtils.java delete mode 100644 src/main/org/apache/commons/lang3/exception/CloneFailedException.java delete mode 100644 src/main/org/apache/commons/lang3/exception/ContextedException.java delete mode 100644 src/main/org/apache/commons/lang3/exception/ContextedRuntimeException.java delete mode 100644 src/main/org/apache/commons/lang3/exception/DefaultExceptionContext.java delete mode 100644 src/main/org/apache/commons/lang3/exception/ExceptionContext.java delete mode 100644 src/main/org/apache/commons/lang3/exception/ExceptionUtils.java delete mode 100644 src/main/org/apache/commons/lang3/math/Fraction.java delete mode 100644 src/main/org/apache/commons/lang3/math/IEEE754rUtils.java delete mode 100644 src/main/org/apache/commons/lang3/math/NumberUtils.java delete mode 100644 src/main/org/apache/commons/lang3/mutable/Mutable.java delete mode 100644 src/main/org/apache/commons/lang3/mutable/MutableBoolean.java delete mode 100644 src/main/org/apache/commons/lang3/mutable/MutableByte.java delete mode 100644 src/main/org/apache/commons/lang3/mutable/MutableDouble.java delete mode 100644 src/main/org/apache/commons/lang3/mutable/MutableFloat.java delete mode 100644 src/main/org/apache/commons/lang3/mutable/MutableInt.java delete mode 100644 src/main/org/apache/commons/lang3/mutable/MutableLong.java delete mode 100644 src/main/org/apache/commons/lang3/mutable/MutableObject.java delete mode 100644 src/main/org/apache/commons/lang3/mutable/MutableShort.java delete mode 100644 src/main/org/apache/commons/lang3/reflect/ConstructorUtils.java delete mode 100644 src/main/org/apache/commons/lang3/reflect/FieldUtils.java delete mode 100644 src/main/org/apache/commons/lang3/reflect/InheritanceUtils.java delete mode 100644 src/main/org/apache/commons/lang3/reflect/MemberUtils.java delete mode 100644 src/main/org/apache/commons/lang3/reflect/MethodUtils.java delete mode 100644 src/main/org/apache/commons/lang3/reflect/TypeLiteral.java delete mode 100644 src/main/org/apache/commons/lang3/reflect/TypeUtils.java delete mode 100644 src/main/org/apache/commons/lang3/reflect/Typed.java delete mode 100644 src/main/org/apache/commons/lang3/text/CompositeFormat.java delete mode 100644 src/main/org/apache/commons/lang3/text/ExtendedMessageFormat.java delete mode 100644 src/main/org/apache/commons/lang3/text/FormatFactory.java delete mode 100644 src/main/org/apache/commons/lang3/text/FormattableUtils.java delete mode 100644 src/main/org/apache/commons/lang3/text/StrBuilder.java delete mode 100644 src/main/org/apache/commons/lang3/text/StrLookup.java delete mode 100644 src/main/org/apache/commons/lang3/text/StrMatcher.java delete mode 100644 src/main/org/apache/commons/lang3/text/StrSubstitutor.java delete mode 100644 src/main/org/apache/commons/lang3/text/StrTokenizer.java delete mode 100644 src/main/org/apache/commons/lang3/text/WordUtils.java delete mode 100644 src/main/org/apache/commons/lang3/text/translate/AggregateTranslator.java delete mode 100644 src/main/org/apache/commons/lang3/text/translate/CharSequenceTranslator.java delete mode 100644 src/main/org/apache/commons/lang3/text/translate/CodePointTranslator.java delete mode 100644 src/main/org/apache/commons/lang3/text/translate/EntityArrays.java delete mode 100644 src/main/org/apache/commons/lang3/text/translate/JavaUnicodeEscaper.java delete mode 100644 src/main/org/apache/commons/lang3/text/translate/LookupTranslator.java delete mode 100644 src/main/org/apache/commons/lang3/text/translate/NumericEntityEscaper.java delete mode 100644 src/main/org/apache/commons/lang3/text/translate/NumericEntityUnescaper.java delete mode 100644 src/main/org/apache/commons/lang3/text/translate/OctalUnescaper.java delete mode 100644 src/main/org/apache/commons/lang3/text/translate/UnicodeEscaper.java delete mode 100644 src/main/org/apache/commons/lang3/text/translate/UnicodeUnescaper.java delete mode 100644 src/main/org/apache/commons/lang3/text/translate/UnicodeUnpairedSurrogateRemover.java delete mode 100644 src/main/org/apache/commons/lang3/time/DateFormatUtils.java delete mode 100644 src/main/org/apache/commons/lang3/time/DateParser.java delete mode 100644 src/main/org/apache/commons/lang3/time/DatePrinter.java delete mode 100644 src/main/org/apache/commons/lang3/time/DateUtils.java delete mode 100644 src/main/org/apache/commons/lang3/time/DurationFormatUtils.java delete mode 100644 src/main/org/apache/commons/lang3/time/FastDateFormat.java delete mode 100644 src/main/org/apache/commons/lang3/time/FastDateParser.java delete mode 100644 src/main/org/apache/commons/lang3/time/FastDatePrinter.java delete mode 100644 src/main/org/apache/commons/lang3/time/FormatCache.java delete mode 100644 src/main/org/apache/commons/lang3/time/StopWatch.java delete mode 100644 src/main/org/apache/commons/lang3/tuple/ImmutablePair.java delete mode 100644 src/main/org/apache/commons/lang3/tuple/ImmutableTriple.java delete mode 100644 src/main/org/apache/commons/lang3/tuple/MutablePair.java delete mode 100644 src/main/org/apache/commons/lang3/tuple/MutableTriple.java delete mode 100644 src/main/org/apache/commons/lang3/tuple/Pair.java delete mode 100644 src/main/org/apache/commons/lang3/tuple/Triple.java delete mode 100644 src/main/org/apache/logging/log4j/EventLogger.java delete mode 100644 src/main/org/apache/logging/log4j/Level.java delete mode 100644 src/main/org/apache/logging/log4j/LogManager.java delete mode 100644 src/main/org/apache/logging/log4j/Logger.java delete mode 100644 src/main/org/apache/logging/log4j/LoggingException.java delete mode 100644 src/main/org/apache/logging/log4j/Marker.java delete mode 100644 src/main/org/apache/logging/log4j/MarkerManager.java delete mode 100644 src/main/org/apache/logging/log4j/ThreadContext.java delete mode 100644 src/main/org/apache/logging/log4j/core/AbstractLifeCycle.java delete mode 100644 src/main/org/apache/logging/log4j/core/AbstractLogEvent.java delete mode 100644 src/main/org/apache/logging/log4j/core/Appender.java delete mode 100644 src/main/org/apache/logging/log4j/core/ErrorHandler.java delete mode 100644 src/main/org/apache/logging/log4j/core/Filter.java delete mode 100644 src/main/org/apache/logging/log4j/core/Layout.java delete mode 100644 src/main/org/apache/logging/log4j/core/LifeCycle.java delete mode 100644 src/main/org/apache/logging/log4j/core/LifeCycleState.java delete mode 100644 src/main/org/apache/logging/log4j/core/LogEvent.java delete mode 100644 src/main/org/apache/logging/log4j/core/LogEventListener.java delete mode 100644 src/main/org/apache/logging/log4j/core/Logger.java delete mode 100644 src/main/org/apache/logging/log4j/core/LoggerContext.java delete mode 100644 src/main/org/apache/logging/log4j/core/appender/AbstractAppender.java delete mode 100644 src/main/org/apache/logging/log4j/core/appender/AbstractManager.java delete mode 100644 src/main/org/apache/logging/log4j/core/appender/AbstractOutputStreamAppender.java delete mode 100644 src/main/org/apache/logging/log4j/core/appender/AppenderLoggingException.java delete mode 100644 src/main/org/apache/logging/log4j/core/appender/AsyncAppender.java delete mode 100644 src/main/org/apache/logging/log4j/core/appender/ConsoleAppender.java delete mode 100644 src/main/org/apache/logging/log4j/core/appender/DefaultErrorHandler.java delete mode 100644 src/main/org/apache/logging/log4j/core/appender/FailoverAppender.java delete mode 100644 src/main/org/apache/logging/log4j/core/appender/FailoversPlugin.java delete mode 100644 src/main/org/apache/logging/log4j/core/appender/FileAppender.java delete mode 100644 src/main/org/apache/logging/log4j/core/appender/FileManager.java delete mode 100644 src/main/org/apache/logging/log4j/core/appender/ManagerFactory.java delete mode 100644 src/main/org/apache/logging/log4j/core/appender/OutputStreamManager.java delete mode 100644 src/main/org/apache/logging/log4j/core/appender/RandomAccessFileAppender.java delete mode 100644 src/main/org/apache/logging/log4j/core/appender/RandomAccessFileManager.java delete mode 100644 src/main/org/apache/logging/log4j/core/appender/RollingFileAppender.java delete mode 100644 src/main/org/apache/logging/log4j/core/appender/RollingRandomAccessFileAppender.java delete mode 100644 src/main/org/apache/logging/log4j/core/appender/SmtpAppender.java delete mode 100644 src/main/org/apache/logging/log4j/core/appender/SocketAppender.java delete mode 100644 src/main/org/apache/logging/log4j/core/appender/SyslogAppender.java delete mode 100644 src/main/org/apache/logging/log4j/core/appender/TlsSyslogFrame.java delete mode 100644 src/main/org/apache/logging/log4j/core/appender/db/AbstractDatabaseAppender.java delete mode 100644 src/main/org/apache/logging/log4j/core/appender/db/AbstractDatabaseManager.java delete mode 100644 src/main/org/apache/logging/log4j/core/appender/db/jdbc/ColumnConfig.java delete mode 100644 src/main/org/apache/logging/log4j/core/appender/db/jdbc/ConnectionSource.java delete mode 100644 src/main/org/apache/logging/log4j/core/appender/db/jdbc/DataSourceConnectionSource.java delete mode 100644 src/main/org/apache/logging/log4j/core/appender/db/jdbc/FactoryMethodConnectionSource.java delete mode 100644 src/main/org/apache/logging/log4j/core/appender/db/jdbc/JdbcAppender.java delete mode 100644 src/main/org/apache/logging/log4j/core/appender/db/jdbc/JdbcDatabaseManager.java delete mode 100644 src/main/org/apache/logging/log4j/core/appender/db/jpa/AbstractLogEventWrapperEntity.java delete mode 100644 src/main/org/apache/logging/log4j/core/appender/db/jpa/BasicLogEventEntity.java delete mode 100644 src/main/org/apache/logging/log4j/core/appender/db/jpa/JpaAppender.java delete mode 100644 src/main/org/apache/logging/log4j/core/appender/db/jpa/JpaDatabaseManager.java delete mode 100644 src/main/org/apache/logging/log4j/core/appender/db/jpa/converter/ContextMapAttributeConverter.java delete mode 100644 src/main/org/apache/logging/log4j/core/appender/db/jpa/converter/ContextMapJsonAttributeConverter.java delete mode 100644 src/main/org/apache/logging/log4j/core/appender/db/jpa/converter/ContextStackAttributeConverter.java delete mode 100644 src/main/org/apache/logging/log4j/core/appender/db/jpa/converter/ContextStackJsonAttributeConverter.java delete mode 100644 src/main/org/apache/logging/log4j/core/appender/db/jpa/converter/LevelAttributeConverter.java delete mode 100644 src/main/org/apache/logging/log4j/core/appender/db/jpa/converter/MarkerAttributeConverter.java delete mode 100644 src/main/org/apache/logging/log4j/core/appender/db/jpa/converter/MessageAttributeConverter.java delete mode 100644 src/main/org/apache/logging/log4j/core/appender/db/jpa/converter/StackTraceElementAttributeConverter.java delete mode 100644 src/main/org/apache/logging/log4j/core/appender/db/jpa/converter/ThrowableAttributeConverter.java delete mode 100644 src/main/org/apache/logging/log4j/core/appender/jms/JmsQueueAppender.java delete mode 100644 src/main/org/apache/logging/log4j/core/appender/jms/JmsTopicAppender.java delete mode 100644 src/main/org/apache/logging/log4j/core/appender/rewrite/MapRewritePolicy.java delete mode 100644 src/main/org/apache/logging/log4j/core/appender/rewrite/PropertiesRewritePolicy.java delete mode 100644 src/main/org/apache/logging/log4j/core/appender/rewrite/RewriteAppender.java delete mode 100644 src/main/org/apache/logging/log4j/core/appender/rewrite/RewritePolicy.java delete mode 100644 src/main/org/apache/logging/log4j/core/appender/rolling/AbstractRolloverStrategy.java delete mode 100644 src/main/org/apache/logging/log4j/core/appender/rolling/CompositeTriggeringPolicy.java delete mode 100644 src/main/org/apache/logging/log4j/core/appender/rolling/DefaultRolloverStrategy.java delete mode 100644 src/main/org/apache/logging/log4j/core/appender/rolling/OnStartupTriggeringPolicy.java delete mode 100644 src/main/org/apache/logging/log4j/core/appender/rolling/PatternProcessor.java delete mode 100644 src/main/org/apache/logging/log4j/core/appender/rolling/RollingFileManager.java delete mode 100644 src/main/org/apache/logging/log4j/core/appender/rolling/RollingRandomAccessFileManager.java delete mode 100644 src/main/org/apache/logging/log4j/core/appender/rolling/RolloverDescription.java delete mode 100644 src/main/org/apache/logging/log4j/core/appender/rolling/RolloverDescriptionImpl.java delete mode 100644 src/main/org/apache/logging/log4j/core/appender/rolling/RolloverFrequency.java delete mode 100644 src/main/org/apache/logging/log4j/core/appender/rolling/RolloverStrategy.java delete mode 100644 src/main/org/apache/logging/log4j/core/appender/rolling/SizeBasedTriggeringPolicy.java delete mode 100644 src/main/org/apache/logging/log4j/core/appender/rolling/TimeBasedTriggeringPolicy.java delete mode 100644 src/main/org/apache/logging/log4j/core/appender/rolling/TriggeringPolicy.java delete mode 100644 src/main/org/apache/logging/log4j/core/appender/rolling/action/AbstractAction.java delete mode 100644 src/main/org/apache/logging/log4j/core/appender/rolling/action/Action.java delete mode 100644 src/main/org/apache/logging/log4j/core/appender/rolling/action/CompositeAction.java delete mode 100644 src/main/org/apache/logging/log4j/core/appender/rolling/action/FileRenameAction.java delete mode 100644 src/main/org/apache/logging/log4j/core/appender/rolling/action/GzCompressAction.java delete mode 100644 src/main/org/apache/logging/log4j/core/appender/rolling/action/ZipCompressAction.java delete mode 100644 src/main/org/apache/logging/log4j/core/appender/routing/Route.java delete mode 100644 src/main/org/apache/logging/log4j/core/appender/routing/Routes.java delete mode 100644 src/main/org/apache/logging/log4j/core/appender/routing/RoutingAppender.java delete mode 100644 src/main/org/apache/logging/log4j/core/async/AsyncLogger.java delete mode 100644 src/main/org/apache/logging/log4j/core/async/AsyncLoggerConfig.java delete mode 100644 src/main/org/apache/logging/log4j/core/async/AsyncLoggerConfigHelper.java delete mode 100644 src/main/org/apache/logging/log4j/core/async/AsyncLoggerContext.java delete mode 100644 src/main/org/apache/logging/log4j/core/async/AsyncLoggerContextSelector.java delete mode 100644 src/main/org/apache/logging/log4j/core/async/DaemonThreadFactory.java delete mode 100644 src/main/org/apache/logging/log4j/core/async/RingBufferLogEvent.java delete mode 100644 src/main/org/apache/logging/log4j/core/async/RingBufferLogEventHandler.java delete mode 100644 src/main/org/apache/logging/log4j/core/async/RingBufferLogEventTranslator.java delete mode 100644 src/main/org/apache/logging/log4j/core/config/AbstractConfiguration.java delete mode 100644 src/main/org/apache/logging/log4j/core/config/AppenderControl.java delete mode 100644 src/main/org/apache/logging/log4j/core/config/AppenderRef.java delete mode 100644 src/main/org/apache/logging/log4j/core/config/AppendersPlugin.java delete mode 100644 src/main/org/apache/logging/log4j/core/config/Configuration.java delete mode 100644 src/main/org/apache/logging/log4j/core/config/ConfigurationException.java delete mode 100644 src/main/org/apache/logging/log4j/core/config/ConfigurationFactory.java delete mode 100644 src/main/org/apache/logging/log4j/core/config/ConfigurationListener.java delete mode 100644 src/main/org/apache/logging/log4j/core/config/ConfigurationMonitor.java delete mode 100644 src/main/org/apache/logging/log4j/core/config/ConfigurationSource.java delete mode 100644 src/main/org/apache/logging/log4j/core/config/Configurator.java delete mode 100644 src/main/org/apache/logging/log4j/core/config/DefaultAdvertiser.java delete mode 100644 src/main/org/apache/logging/log4j/core/config/DefaultConfiguration.java delete mode 100644 src/main/org/apache/logging/log4j/core/config/DefaultConfigurationMonitor.java delete mode 100644 src/main/org/apache/logging/log4j/core/config/FileConfigurationMonitor.java delete mode 100644 src/main/org/apache/logging/log4j/core/config/LoggerConfig.java delete mode 100644 src/main/org/apache/logging/log4j/core/config/Loggers.java delete mode 100644 src/main/org/apache/logging/log4j/core/config/LoggersPlugin.java delete mode 100644 src/main/org/apache/logging/log4j/core/config/Node.java delete mode 100644 src/main/org/apache/logging/log4j/core/config/NullConfiguration.java delete mode 100644 src/main/org/apache/logging/log4j/core/config/Order.java delete mode 100644 src/main/org/apache/logging/log4j/core/config/PropertiesPlugin.java delete mode 100644 src/main/org/apache/logging/log4j/core/config/Property.java delete mode 100644 src/main/org/apache/logging/log4j/core/config/Reconfigurable.java delete mode 100644 src/main/org/apache/logging/log4j/core/config/json/JsonConfiguration.java delete mode 100644 src/main/org/apache/logging/log4j/core/config/json/JsonConfigurationFactory.java delete mode 100644 src/main/org/apache/logging/log4j/core/config/plugins/Plugin.java delete mode 100644 src/main/org/apache/logging/log4j/core/config/plugins/PluginAliases.java delete mode 100644 src/main/org/apache/logging/log4j/core/config/plugins/PluginAttribute.java delete mode 100644 src/main/org/apache/logging/log4j/core/config/plugins/PluginBuilderAttribute.java delete mode 100644 src/main/org/apache/logging/log4j/core/config/plugins/PluginBuilderFactory.java delete mode 100644 src/main/org/apache/logging/log4j/core/config/plugins/PluginConfiguration.java delete mode 100644 src/main/org/apache/logging/log4j/core/config/plugins/PluginElement.java delete mode 100644 src/main/org/apache/logging/log4j/core/config/plugins/PluginFactory.java delete mode 100644 src/main/org/apache/logging/log4j/core/config/plugins/PluginNode.java delete mode 100644 src/main/org/apache/logging/log4j/core/config/plugins/PluginValue.java delete mode 100644 src/main/org/apache/logging/log4j/core/config/plugins/PluginVisitorStrategy.java delete mode 100644 src/main/org/apache/logging/log4j/core/config/plugins/osgi/Activator.java delete mode 100644 src/main/org/apache/logging/log4j/core/config/plugins/processor/PluginCache.java delete mode 100644 src/main/org/apache/logging/log4j/core/config/plugins/processor/PluginEntry.java delete mode 100644 src/main/org/apache/logging/log4j/core/config/plugins/processor/PluginProcessor.java delete mode 100644 src/main/org/apache/logging/log4j/core/config/plugins/util/PluginBuilder.java delete mode 100644 src/main/org/apache/logging/log4j/core/config/plugins/util/PluginManager.java delete mode 100644 src/main/org/apache/logging/log4j/core/config/plugins/util/PluginRegistry.java delete mode 100644 src/main/org/apache/logging/log4j/core/config/plugins/util/PluginType.java delete mode 100644 src/main/org/apache/logging/log4j/core/config/plugins/util/ResolverUtil.java delete mode 100644 src/main/org/apache/logging/log4j/core/config/plugins/util/TypeConverter.java delete mode 100644 src/main/org/apache/logging/log4j/core/config/plugins/util/TypeConverters.java delete mode 100644 src/main/org/apache/logging/log4j/core/config/plugins/visitors/AbstractPluginVisitor.java delete mode 100644 src/main/org/apache/logging/log4j/core/config/plugins/visitors/PluginAttributeVisitor.java delete mode 100644 src/main/org/apache/logging/log4j/core/config/plugins/visitors/PluginBuilderAttributeVisitor.java delete mode 100644 src/main/org/apache/logging/log4j/core/config/plugins/visitors/PluginConfigurationVisitor.java delete mode 100644 src/main/org/apache/logging/log4j/core/config/plugins/visitors/PluginElementVisitor.java delete mode 100644 src/main/org/apache/logging/log4j/core/config/plugins/visitors/PluginNodeVisitor.java delete mode 100644 src/main/org/apache/logging/log4j/core/config/plugins/visitors/PluginValueVisitor.java delete mode 100644 src/main/org/apache/logging/log4j/core/config/plugins/visitors/PluginVisitor.java delete mode 100644 src/main/org/apache/logging/log4j/core/config/plugins/visitors/PluginVisitors.java delete mode 100644 src/main/org/apache/logging/log4j/core/config/status/StatusConfiguration.java delete mode 100644 src/main/org/apache/logging/log4j/core/config/xml/XmlConfiguration.java delete mode 100644 src/main/org/apache/logging/log4j/core/config/xml/XmlConfigurationFactory.java delete mode 100644 src/main/org/apache/logging/log4j/core/config/yaml/YamlConfiguration.java delete mode 100644 src/main/org/apache/logging/log4j/core/config/yaml/YamlConfigurationFactory.java delete mode 100644 src/main/org/apache/logging/log4j/core/filter/AbstractFilter.java delete mode 100644 src/main/org/apache/logging/log4j/core/filter/AbstractFilterable.java delete mode 100644 src/main/org/apache/logging/log4j/core/filter/BurstFilter.java delete mode 100644 src/main/org/apache/logging/log4j/core/filter/CompositeFilter.java delete mode 100644 src/main/org/apache/logging/log4j/core/filter/DynamicThresholdFilter.java delete mode 100644 src/main/org/apache/logging/log4j/core/filter/Filterable.java delete mode 100644 src/main/org/apache/logging/log4j/core/filter/MapFilter.java delete mode 100644 src/main/org/apache/logging/log4j/core/filter/MarkerFilter.java delete mode 100644 src/main/org/apache/logging/log4j/core/filter/RegexFilter.java delete mode 100644 src/main/org/apache/logging/log4j/core/filter/StructuredDataFilter.java delete mode 100644 src/main/org/apache/logging/log4j/core/filter/ThreadContextMapFilter.java delete mode 100644 src/main/org/apache/logging/log4j/core/filter/ThresholdFilter.java delete mode 100644 src/main/org/apache/logging/log4j/core/filter/TimeFilter.java delete mode 100644 src/main/org/apache/logging/log4j/core/impl/ContextAnchor.java delete mode 100644 src/main/org/apache/logging/log4j/core/impl/DefaultLogEventFactory.java delete mode 100644 src/main/org/apache/logging/log4j/core/impl/ExtendedClassInfo.java delete mode 100644 src/main/org/apache/logging/log4j/core/impl/ExtendedStackTraceElement.java delete mode 100644 src/main/org/apache/logging/log4j/core/impl/Log4jContextFactory.java delete mode 100644 src/main/org/apache/logging/log4j/core/impl/Log4jLogEvent.java delete mode 100644 src/main/org/apache/logging/log4j/core/impl/LogEventFactory.java delete mode 100644 src/main/org/apache/logging/log4j/core/impl/ReflectiveCallerClassUtility.java delete mode 100644 src/main/org/apache/logging/log4j/core/impl/ThrowableFormatOptions.java delete mode 100644 src/main/org/apache/logging/log4j/core/impl/ThrowableProxy.java delete mode 100644 src/main/org/apache/logging/log4j/core/jackson/ExtendedStackTraceElementMixIn.java delete mode 100644 src/main/org/apache/logging/log4j/core/jackson/Initializers.java delete mode 100644 src/main/org/apache/logging/log4j/core/jackson/JsonConstants.java delete mode 100644 src/main/org/apache/logging/log4j/core/jackson/LevelMixIn.java delete mode 100644 src/main/org/apache/logging/log4j/core/jackson/ListOfMapEntryDeserializer.java delete mode 100644 src/main/org/apache/logging/log4j/core/jackson/ListOfMapEntrySerializer.java delete mode 100644 src/main/org/apache/logging/log4j/core/jackson/Log4jJsonModule.java delete mode 100644 src/main/org/apache/logging/log4j/core/jackson/Log4jJsonObjectMapper.java delete mode 100644 src/main/org/apache/logging/log4j/core/jackson/Log4jStackTraceElementDeserializer.java delete mode 100644 src/main/org/apache/logging/log4j/core/jackson/Log4jXmlModule.java delete mode 100644 src/main/org/apache/logging/log4j/core/jackson/Log4jXmlObjectMapper.java delete mode 100644 src/main/org/apache/logging/log4j/core/jackson/LogEventMixIn.java delete mode 100644 src/main/org/apache/logging/log4j/core/jackson/MapEntry.java delete mode 100644 src/main/org/apache/logging/log4j/core/jackson/MarkerMixIn.java delete mode 100644 src/main/org/apache/logging/log4j/core/jackson/MessageSerializer.java delete mode 100644 src/main/org/apache/logging/log4j/core/jackson/MutableThreadContextStackDeserializer.java delete mode 100644 src/main/org/apache/logging/log4j/core/jackson/SimpleMessageDeserializer.java delete mode 100644 src/main/org/apache/logging/log4j/core/jackson/StackTraceElementMixIn.java delete mode 100644 src/main/org/apache/logging/log4j/core/jackson/ThrowableProxyMixIn.java delete mode 100644 src/main/org/apache/logging/log4j/core/jackson/XmlConstants.java delete mode 100644 src/main/org/apache/logging/log4j/core/jmx/AppenderAdmin.java delete mode 100644 src/main/org/apache/logging/log4j/core/jmx/AppenderAdminMBean.java delete mode 100644 src/main/org/apache/logging/log4j/core/jmx/AsyncAppenderAdmin.java delete mode 100644 src/main/org/apache/logging/log4j/core/jmx/AsyncAppenderAdminMBean.java delete mode 100644 src/main/org/apache/logging/log4j/core/jmx/ContextSelectorAdmin.java delete mode 100644 src/main/org/apache/logging/log4j/core/jmx/ContextSelectorAdminMBean.java delete mode 100644 src/main/org/apache/logging/log4j/core/jmx/LoggerConfigAdmin.java delete mode 100644 src/main/org/apache/logging/log4j/core/jmx/LoggerConfigAdminMBean.java delete mode 100644 src/main/org/apache/logging/log4j/core/jmx/LoggerContextAdmin.java delete mode 100644 src/main/org/apache/logging/log4j/core/jmx/LoggerContextAdminMBean.java delete mode 100644 src/main/org/apache/logging/log4j/core/jmx/RingBufferAdmin.java delete mode 100644 src/main/org/apache/logging/log4j/core/jmx/RingBufferAdminMBean.java delete mode 100644 src/main/org/apache/logging/log4j/core/jmx/Server.java delete mode 100644 src/main/org/apache/logging/log4j/core/jmx/StatusLoggerAdmin.java delete mode 100644 src/main/org/apache/logging/log4j/core/jmx/StatusLoggerAdminMBean.java delete mode 100644 src/main/org/apache/logging/log4j/core/layout/AbstractJacksonLayout.java delete mode 100644 src/main/org/apache/logging/log4j/core/layout/AbstractLayout.java delete mode 100644 src/main/org/apache/logging/log4j/core/layout/AbstractStringLayout.java delete mode 100644 src/main/org/apache/logging/log4j/core/layout/HtmlLayout.java delete mode 100644 src/main/org/apache/logging/log4j/core/layout/JacksonFactory.java delete mode 100644 src/main/org/apache/logging/log4j/core/layout/JsonLayout.java delete mode 100644 src/main/org/apache/logging/log4j/core/layout/LoggerFields.java delete mode 100644 src/main/org/apache/logging/log4j/core/layout/PatternLayout.java delete mode 100644 src/main/org/apache/logging/log4j/core/layout/Rfc5424Layout.java delete mode 100644 src/main/org/apache/logging/log4j/core/layout/SerializedLayout.java delete mode 100644 src/main/org/apache/logging/log4j/core/layout/SyslogLayout.java delete mode 100644 src/main/org/apache/logging/log4j/core/layout/XmlLayout.java delete mode 100644 src/main/org/apache/logging/log4j/core/lookup/ContextMapLookup.java delete mode 100644 src/main/org/apache/logging/log4j/core/lookup/DateLookup.java delete mode 100644 src/main/org/apache/logging/log4j/core/lookup/EnvironmentLookup.java delete mode 100644 src/main/org/apache/logging/log4j/core/lookup/Interpolator.java delete mode 100644 src/main/org/apache/logging/log4j/core/lookup/JndiLookup.java delete mode 100644 src/main/org/apache/logging/log4j/core/lookup/MapLookup.java delete mode 100644 src/main/org/apache/logging/log4j/core/lookup/ResourceBundleLookup.java delete mode 100644 src/main/org/apache/logging/log4j/core/lookup/StrLookup.java delete mode 100644 src/main/org/apache/logging/log4j/core/lookup/StrMatcher.java delete mode 100644 src/main/org/apache/logging/log4j/core/lookup/StrSubstitutor.java delete mode 100644 src/main/org/apache/logging/log4j/core/lookup/StructuredDataLookup.java delete mode 100644 src/main/org/apache/logging/log4j/core/lookup/SystemPropertiesLookup.java delete mode 100644 src/main/org/apache/logging/log4j/core/net/AbstractSocketManager.java delete mode 100644 src/main/org/apache/logging/log4j/core/net/Advertiser.java delete mode 100644 src/main/org/apache/logging/log4j/core/net/DatagramOutputStream.java delete mode 100644 src/main/org/apache/logging/log4j/core/net/DatagramSocketManager.java delete mode 100644 src/main/org/apache/logging/log4j/core/net/Facility.java delete mode 100644 src/main/org/apache/logging/log4j/core/net/MimeMessageBuilder.java delete mode 100644 src/main/org/apache/logging/log4j/core/net/MulticastDnsAdvertiser.java delete mode 100644 src/main/org/apache/logging/log4j/core/net/Priority.java delete mode 100644 src/main/org/apache/logging/log4j/core/net/Protocol.java delete mode 100644 src/main/org/apache/logging/log4j/core/net/Severity.java delete mode 100644 src/main/org/apache/logging/log4j/core/net/SmtpManager.java delete mode 100644 src/main/org/apache/logging/log4j/core/net/SslSocketManager.java delete mode 100644 src/main/org/apache/logging/log4j/core/net/TcpSocketManager.java delete mode 100644 src/main/org/apache/logging/log4j/core/net/jms/AbstractJmsManager.java delete mode 100644 src/main/org/apache/logging/log4j/core/net/jms/AbstractJmsReceiver.java delete mode 100644 src/main/org/apache/logging/log4j/core/net/jms/JmsQueueManager.java delete mode 100644 src/main/org/apache/logging/log4j/core/net/jms/JmsQueueReceiver.java delete mode 100644 src/main/org/apache/logging/log4j/core/net/jms/JmsTopicManager.java delete mode 100644 src/main/org/apache/logging/log4j/core/net/jms/JmsTopicReceiver.java delete mode 100644 src/main/org/apache/logging/log4j/core/net/server/AbstractLogEventBridge.java delete mode 100644 src/main/org/apache/logging/log4j/core/net/server/AbstractSocketServer.java delete mode 100644 src/main/org/apache/logging/log4j/core/net/server/InputStreamLogEventBridge.java delete mode 100644 src/main/org/apache/logging/log4j/core/net/server/JsonInputStreamLogEventBridge.java delete mode 100644 src/main/org/apache/logging/log4j/core/net/server/LogEventBridge.java delete mode 100644 src/main/org/apache/logging/log4j/core/net/server/ObjectInputStreamLogEventBridge.java delete mode 100644 src/main/org/apache/logging/log4j/core/net/server/SecureTcpSocketServer.java delete mode 100644 src/main/org/apache/logging/log4j/core/net/server/TcpSocketServer.java delete mode 100644 src/main/org/apache/logging/log4j/core/net/server/UdpSocketServer.java delete mode 100644 src/main/org/apache/logging/log4j/core/net/server/XmlInputStreamLogEventBridge.java delete mode 100644 src/main/org/apache/logging/log4j/core/net/ssl/AbstractKeyStoreConfiguration.java delete mode 100644 src/main/org/apache/logging/log4j/core/net/ssl/KeyStoreConfiguration.java delete mode 100644 src/main/org/apache/logging/log4j/core/net/ssl/KeyStoreConfigurationException.java delete mode 100644 src/main/org/apache/logging/log4j/core/net/ssl/SslConfiguration.java delete mode 100644 src/main/org/apache/logging/log4j/core/net/ssl/SslConfigurationDefaults.java delete mode 100644 src/main/org/apache/logging/log4j/core/net/ssl/SslConfigurationException.java delete mode 100644 src/main/org/apache/logging/log4j/core/net/ssl/StoreConfiguration.java delete mode 100644 src/main/org/apache/logging/log4j/core/net/ssl/StoreConfigurationException.java delete mode 100644 src/main/org/apache/logging/log4j/core/net/ssl/TrustStoreConfiguration.java delete mode 100644 src/main/org/apache/logging/log4j/core/net/ssl/TrustStoreConfigurationException.java delete mode 100644 src/main/org/apache/logging/log4j/core/pattern/AbstractPatternConverter.java delete mode 100644 src/main/org/apache/logging/log4j/core/pattern/AbstractStyleNameConverter.java delete mode 100644 src/main/org/apache/logging/log4j/core/pattern/AnsiConverter.java delete mode 100644 src/main/org/apache/logging/log4j/core/pattern/AnsiEscape.java delete mode 100644 src/main/org/apache/logging/log4j/core/pattern/ArrayPatternConverter.java delete mode 100644 src/main/org/apache/logging/log4j/core/pattern/CachedDateFormat.java delete mode 100644 src/main/org/apache/logging/log4j/core/pattern/ClassNamePatternConverter.java delete mode 100644 src/main/org/apache/logging/log4j/core/pattern/ConverterKeys.java delete mode 100644 src/main/org/apache/logging/log4j/core/pattern/DatePatternConverter.java delete mode 100644 src/main/org/apache/logging/log4j/core/pattern/EncodingPatternConverter.java delete mode 100644 src/main/org/apache/logging/log4j/core/pattern/ExtendedThrowablePatternConverter.java delete mode 100644 src/main/org/apache/logging/log4j/core/pattern/FileDatePatternConverter.java delete mode 100644 src/main/org/apache/logging/log4j/core/pattern/FileLocationPatternConverter.java delete mode 100644 src/main/org/apache/logging/log4j/core/pattern/FormattingInfo.java delete mode 100644 src/main/org/apache/logging/log4j/core/pattern/FullLocationPatternConverter.java delete mode 100644 src/main/org/apache/logging/log4j/core/pattern/HighlightConverter.java delete mode 100644 src/main/org/apache/logging/log4j/core/pattern/IntegerPatternConverter.java delete mode 100644 src/main/org/apache/logging/log4j/core/pattern/LevelPatternConverter.java delete mode 100644 src/main/org/apache/logging/log4j/core/pattern/LineLocationPatternConverter.java delete mode 100644 src/main/org/apache/logging/log4j/core/pattern/LineSeparatorPatternConverter.java delete mode 100644 src/main/org/apache/logging/log4j/core/pattern/LiteralPatternConverter.java delete mode 100644 src/main/org/apache/logging/log4j/core/pattern/LogEventPatternConverter.java delete mode 100644 src/main/org/apache/logging/log4j/core/pattern/LoggerPatternConverter.java delete mode 100644 src/main/org/apache/logging/log4j/core/pattern/MapPatternConverter.java delete mode 100644 src/main/org/apache/logging/log4j/core/pattern/MarkerPatternConverter.java delete mode 100644 src/main/org/apache/logging/log4j/core/pattern/MdcPatternConverter.java delete mode 100644 src/main/org/apache/logging/log4j/core/pattern/MessagePatternConverter.java delete mode 100644 src/main/org/apache/logging/log4j/core/pattern/MethodLocationPatternConverter.java delete mode 100644 src/main/org/apache/logging/log4j/core/pattern/NameAbbreviator.java delete mode 100644 src/main/org/apache/logging/log4j/core/pattern/NamePatternConverter.java delete mode 100644 src/main/org/apache/logging/log4j/core/pattern/NdcPatternConverter.java delete mode 100644 src/main/org/apache/logging/log4j/core/pattern/PatternConverter.java delete mode 100644 src/main/org/apache/logging/log4j/core/pattern/PatternFormatter.java delete mode 100644 src/main/org/apache/logging/log4j/core/pattern/PatternParser.java delete mode 100644 src/main/org/apache/logging/log4j/core/pattern/RegexReplacement.java delete mode 100644 src/main/org/apache/logging/log4j/core/pattern/RegexReplacementConverter.java delete mode 100644 src/main/org/apache/logging/log4j/core/pattern/RelativeTimePatternConverter.java delete mode 100644 src/main/org/apache/logging/log4j/core/pattern/RootThrowablePatternConverter.java delete mode 100644 src/main/org/apache/logging/log4j/core/pattern/SequenceNumberPatternConverter.java delete mode 100644 src/main/org/apache/logging/log4j/core/pattern/StyleConverter.java delete mode 100644 src/main/org/apache/logging/log4j/core/pattern/ThreadPatternConverter.java delete mode 100644 src/main/org/apache/logging/log4j/core/pattern/ThrowablePatternConverter.java delete mode 100644 src/main/org/apache/logging/log4j/core/pattern/UuidPatternConverter.java delete mode 100644 src/main/org/apache/logging/log4j/core/selector/BasicContextSelector.java delete mode 100644 src/main/org/apache/logging/log4j/core/selector/ClassLoaderContextSelector.java delete mode 100644 src/main/org/apache/logging/log4j/core/selector/ContextSelector.java delete mode 100644 src/main/org/apache/logging/log4j/core/selector/JndiContextSelector.java delete mode 100644 src/main/org/apache/logging/log4j/core/selector/NamedContextSelector.java delete mode 100644 src/main/org/apache/logging/log4j/core/tools/Generate.java delete mode 100644 src/main/org/apache/logging/log4j/core/util/Assert.java delete mode 100644 src/main/org/apache/logging/log4j/core/util/Booleans.java delete mode 100644 src/main/org/apache/logging/log4j/core/util/Builder.java delete mode 100644 src/main/org/apache/logging/log4j/core/util/BundleResourceLoader.java delete mode 100644 src/main/org/apache/logging/log4j/core/util/CachedClock.java delete mode 100644 src/main/org/apache/logging/log4j/core/util/Charsets.java delete mode 100644 src/main/org/apache/logging/log4j/core/util/ClassLoaderResourceLoader.java delete mode 100644 src/main/org/apache/logging/log4j/core/util/Clock.java delete mode 100644 src/main/org/apache/logging/log4j/core/util/ClockFactory.java delete mode 100644 src/main/org/apache/logging/log4j/core/util/Closer.java delete mode 100644 src/main/org/apache/logging/log4j/core/util/CoarseCachedClock.java delete mode 100644 src/main/org/apache/logging/log4j/core/util/Constants.java delete mode 100644 src/main/org/apache/logging/log4j/core/util/CyclicBuffer.java delete mode 100644 src/main/org/apache/logging/log4j/core/util/FileUtils.java delete mode 100644 src/main/org/apache/logging/log4j/core/util/Integers.java delete mode 100644 src/main/org/apache/logging/log4j/core/util/JndiCloser.java delete mode 100644 src/main/org/apache/logging/log4j/core/util/KeyValuePair.java delete mode 100644 src/main/org/apache/logging/log4j/core/util/Loader.java delete mode 100644 src/main/org/apache/logging/log4j/core/util/NameUtil.java delete mode 100644 src/main/org/apache/logging/log4j/core/util/NetUtils.java delete mode 100644 src/main/org/apache/logging/log4j/core/util/OptionConverter.java delete mode 100644 src/main/org/apache/logging/log4j/core/util/Patterns.java delete mode 100644 src/main/org/apache/logging/log4j/core/util/ResourceLoader.java delete mode 100644 src/main/org/apache/logging/log4j/core/util/SecretKeyProvider.java delete mode 100644 src/main/org/apache/logging/log4j/core/util/SetUtils.java delete mode 100644 src/main/org/apache/logging/log4j/core/util/SystemClock.java delete mode 100644 src/main/org/apache/logging/log4j/core/util/Throwables.java delete mode 100644 src/main/org/apache/logging/log4j/core/util/Transform.java delete mode 100644 src/main/org/apache/logging/log4j/core/util/UuidUtil.java delete mode 100644 src/main/org/apache/logging/log4j/message/AbstractMessageFactory.java delete mode 100644 src/main/org/apache/logging/log4j/message/BasicThreadInformation.java delete mode 100644 src/main/org/apache/logging/log4j/message/ExtendedThreadInformation.java delete mode 100644 src/main/org/apache/logging/log4j/message/FormattedMessage.java delete mode 100644 src/main/org/apache/logging/log4j/message/FormattedMessageFactory.java delete mode 100644 src/main/org/apache/logging/log4j/message/LocalizedMessage.java delete mode 100644 src/main/org/apache/logging/log4j/message/LocalizedMessageFactory.java delete mode 100644 src/main/org/apache/logging/log4j/message/LoggerNameAwareMessage.java delete mode 100644 src/main/org/apache/logging/log4j/message/MapMessage.java delete mode 100644 src/main/org/apache/logging/log4j/message/Message.java delete mode 100644 src/main/org/apache/logging/log4j/message/MessageFactory.java delete mode 100644 src/main/org/apache/logging/log4j/message/MessageFormatMessage.java delete mode 100644 src/main/org/apache/logging/log4j/message/MessageFormatMessageFactory.java delete mode 100644 src/main/org/apache/logging/log4j/message/MultiformatMessage.java delete mode 100644 src/main/org/apache/logging/log4j/message/ObjectMessage.java delete mode 100644 src/main/org/apache/logging/log4j/message/ParameterizedMessage.java delete mode 100644 src/main/org/apache/logging/log4j/message/ParameterizedMessageFactory.java delete mode 100644 src/main/org/apache/logging/log4j/message/SimpleMessage.java delete mode 100644 src/main/org/apache/logging/log4j/message/StringFormattedMessage.java delete mode 100644 src/main/org/apache/logging/log4j/message/StringFormatterMessageFactory.java delete mode 100644 src/main/org/apache/logging/log4j/message/StructuredDataId.java delete mode 100644 src/main/org/apache/logging/log4j/message/StructuredDataMessage.java delete mode 100644 src/main/org/apache/logging/log4j/message/ThreadDumpMessage.java delete mode 100644 src/main/org/apache/logging/log4j/message/ThreadInformation.java delete mode 100644 src/main/org/apache/logging/log4j/message/TimestampMessage.java delete mode 100644 src/main/org/apache/logging/log4j/simple/SimpleLogger.java delete mode 100644 src/main/org/apache/logging/log4j/simple/SimpleLoggerContext.java delete mode 100644 src/main/org/apache/logging/log4j/simple/SimpleLoggerContextFactory.java delete mode 100644 src/main/org/apache/logging/log4j/spi/AbstractLogger.java delete mode 100644 src/main/org/apache/logging/log4j/spi/DefaultThreadContextMap.java delete mode 100644 src/main/org/apache/logging/log4j/spi/DefaultThreadContextStack.java delete mode 100644 src/main/org/apache/logging/log4j/spi/ExtendedLogger.java delete mode 100644 src/main/org/apache/logging/log4j/spi/ExtendedLoggerWrapper.java delete mode 100644 src/main/org/apache/logging/log4j/spi/LoggerContext.java delete mode 100644 src/main/org/apache/logging/log4j/spi/LoggerContextFactory.java delete mode 100644 src/main/org/apache/logging/log4j/spi/MutableThreadContextStack.java delete mode 100644 src/main/org/apache/logging/log4j/spi/Provider.java delete mode 100644 src/main/org/apache/logging/log4j/spi/StandardLevel.java delete mode 100644 src/main/org/apache/logging/log4j/spi/ThreadContextMap.java delete mode 100644 src/main/org/apache/logging/log4j/spi/ThreadContextStack.java delete mode 100644 src/main/org/apache/logging/log4j/status/StatusConsoleListener.java delete mode 100644 src/main/org/apache/logging/log4j/status/StatusData.java delete mode 100644 src/main/org/apache/logging/log4j/status/StatusListener.java delete mode 100644 src/main/org/apache/logging/log4j/status/StatusLogger.java delete mode 100644 src/main/org/apache/logging/log4j/util/Activator.java delete mode 100644 src/main/org/apache/logging/log4j/util/EnglishEnums.java delete mode 100644 src/main/org/apache/logging/log4j/util/LoaderUtil.java delete mode 100644 src/main/org/apache/logging/log4j/util/PropertiesUtil.java delete mode 100644 src/main/org/apache/logging/log4j/util/ProviderUtil.java delete mode 100644 src/main/org/apache/logging/log4j/util/Strings.java delete mode 100644 src/main/org/jivesoftware/smack/AbstractConnectionClosedListener.java delete mode 100644 src/main/org/jivesoftware/smack/AbstractConnectionListener.java delete mode 100644 src/main/org/jivesoftware/smack/AbstractXMPPConnection.java delete mode 100644 src/main/org/jivesoftware/smack/ConnectionConfiguration.java delete mode 100644 src/main/org/jivesoftware/smack/ConnectionCreationListener.java delete mode 100644 src/main/org/jivesoftware/smack/ConnectionListener.java delete mode 100644 src/main/org/jivesoftware/smack/ExceptionCallback.java delete mode 100644 src/main/org/jivesoftware/smack/Manager.java delete mode 100644 src/main/org/jivesoftware/smack/MessageListener.java delete mode 100644 src/main/org/jivesoftware/smack/PacketCollector.java delete mode 100644 src/main/org/jivesoftware/smack/PacketListener.java delete mode 100644 src/main/org/jivesoftware/smack/PresenceListener.java delete mode 100644 src/main/org/jivesoftware/smack/ReconnectionManager.java delete mode 100644 src/main/org/jivesoftware/smack/SASLAuthentication.java delete mode 100644 src/main/org/jivesoftware/smack/SmackConfiguration.java delete mode 100644 src/main/org/jivesoftware/smack/SmackException.java delete mode 100644 src/main/org/jivesoftware/smack/SmackInitialization.java delete mode 100644 src/main/org/jivesoftware/smack/StanzaListener.java delete mode 100644 src/main/org/jivesoftware/smack/SynchronizationPoint.java delete mode 100644 src/main/org/jivesoftware/smack/XMPPConnection.java delete mode 100644 src/main/org/jivesoftware/smack/XMPPConnectionRegistry.java delete mode 100644 src/main/org/jivesoftware/smack/XMPPException.java delete mode 100644 src/main/org/jivesoftware/smack/compress/packet/Compress.java delete mode 100644 src/main/org/jivesoftware/smack/compress/packet/Compressed.java delete mode 100644 src/main/org/jivesoftware/smack/compression/Java7ZlibInputOutputStream.java delete mode 100644 src/main/org/jivesoftware/smack/compression/XMPPInputOutputStream.java delete mode 100644 src/main/org/jivesoftware/smack/debugger/AbstractDebugger.java delete mode 100644 src/main/org/jivesoftware/smack/debugger/ConsoleDebugger.java delete mode 100644 src/main/org/jivesoftware/smack/debugger/JulDebugger.java delete mode 100644 src/main/org/jivesoftware/smack/debugger/ReflectionDebuggerFactory.java delete mode 100644 src/main/org/jivesoftware/smack/debugger/SmackDebugger.java delete mode 100644 src/main/org/jivesoftware/smack/debugger/SmackDebuggerFactory.java delete mode 100644 src/main/org/jivesoftware/smack/filter/AbstractListFilter.java delete mode 100644 src/main/org/jivesoftware/smack/filter/AndFilter.java delete mode 100644 src/main/org/jivesoftware/smack/filter/FlexibleStanzaTypeFilter.java delete mode 100644 src/main/org/jivesoftware/smack/filter/FromMatchesFilter.java delete mode 100644 src/main/org/jivesoftware/smack/filter/IQReplyFilter.java delete mode 100644 src/main/org/jivesoftware/smack/filter/IQResultReplyFilter.java delete mode 100644 src/main/org/jivesoftware/smack/filter/IQTypeFilter.java delete mode 100644 src/main/org/jivesoftware/smack/filter/MessageTypeFilter.java delete mode 100644 src/main/org/jivesoftware/smack/filter/MessageWithBodiesFilter.java delete mode 100644 src/main/org/jivesoftware/smack/filter/MessageWithSubjectFilter.java delete mode 100644 src/main/org/jivesoftware/smack/filter/NotFilter.java delete mode 100644 src/main/org/jivesoftware/smack/filter/OrFilter.java delete mode 100644 src/main/org/jivesoftware/smack/filter/PacketExtensionFilter.java delete mode 100644 src/main/org/jivesoftware/smack/filter/PacketFilter.java delete mode 100644 src/main/org/jivesoftware/smack/filter/PacketIDFilter.java delete mode 100644 src/main/org/jivesoftware/smack/filter/PacketTypeFilter.java delete mode 100644 src/main/org/jivesoftware/smack/filter/PresenceTypeFilter.java delete mode 100644 src/main/org/jivesoftware/smack/filter/StanzaExtensionFilter.java delete mode 100644 src/main/org/jivesoftware/smack/filter/StanzaFilter.java delete mode 100644 src/main/org/jivesoftware/smack/filter/StanzaIdFilter.java delete mode 100644 src/main/org/jivesoftware/smack/filter/StanzaTypeFilter.java delete mode 100644 src/main/org/jivesoftware/smack/filter/ThreadFilter.java delete mode 100644 src/main/org/jivesoftware/smack/filter/ToFilter.java delete mode 100644 src/main/org/jivesoftware/smack/initializer/SmackInitializer.java delete mode 100644 src/main/org/jivesoftware/smack/initializer/UrlInitializer.java delete mode 100644 src/main/org/jivesoftware/smack/initializer/VmArgInitializer.java delete mode 100644 src/main/org/jivesoftware/smack/iqrequest/AbstractIqRequestHandler.java delete mode 100644 src/main/org/jivesoftware/smack/iqrequest/IQRequestHandler.java delete mode 100644 src/main/org/jivesoftware/smack/packet/AbstractError.java delete mode 100644 src/main/org/jivesoftware/smack/packet/Bind.java delete mode 100644 src/main/org/jivesoftware/smack/packet/DefaultExtensionElement.java delete mode 100644 src/main/org/jivesoftware/smack/packet/Element.java delete mode 100644 src/main/org/jivesoftware/smack/packet/EmptyResultIQ.java delete mode 100644 src/main/org/jivesoftware/smack/packet/ErrorIQ.java delete mode 100644 src/main/org/jivesoftware/smack/packet/ExtensionElement.java delete mode 100644 src/main/org/jivesoftware/smack/packet/FullStreamElement.java delete mode 100644 src/main/org/jivesoftware/smack/packet/IQ.java delete mode 100644 src/main/org/jivesoftware/smack/packet/Mechanisms.java delete mode 100644 src/main/org/jivesoftware/smack/packet/Message.java delete mode 100644 src/main/org/jivesoftware/smack/packet/NamedElement.java delete mode 100644 src/main/org/jivesoftware/smack/packet/Packet.java delete mode 100644 src/main/org/jivesoftware/smack/packet/PacketExtension.java delete mode 100644 src/main/org/jivesoftware/smack/packet/PlainStreamElement.java delete mode 100644 src/main/org/jivesoftware/smack/packet/Presence.java delete mode 100644 src/main/org/jivesoftware/smack/packet/Session.java delete mode 100644 src/main/org/jivesoftware/smack/packet/SimpleIQ.java delete mode 100644 src/main/org/jivesoftware/smack/packet/Stanza.java delete mode 100644 src/main/org/jivesoftware/smack/packet/StartTls.java delete mode 100644 src/main/org/jivesoftware/smack/packet/StreamError.java delete mode 100644 src/main/org/jivesoftware/smack/packet/StreamOpen.java delete mode 100644 src/main/org/jivesoftware/smack/packet/TopLevelStreamElement.java delete mode 100644 src/main/org/jivesoftware/smack/packet/UnparsedIQ.java delete mode 100644 src/main/org/jivesoftware/smack/packet/XMPPError.java delete mode 100644 src/main/org/jivesoftware/smack/packet/id/StanzaIdUtil.java delete mode 100644 src/main/org/jivesoftware/smack/parsing/ExceptionLoggingCallback.java delete mode 100644 src/main/org/jivesoftware/smack/parsing/ExceptionThrowingCallback.java delete mode 100644 src/main/org/jivesoftware/smack/parsing/ParsingExceptionCallback.java delete mode 100644 src/main/org/jivesoftware/smack/parsing/UnparsablePacket.java delete mode 100644 src/main/org/jivesoftware/smack/provider/AbstractProviderInfo.java delete mode 100644 src/main/org/jivesoftware/smack/provider/BindIQProvider.java delete mode 100644 src/main/org/jivesoftware/smack/provider/EmbeddedExtensionProvider.java delete mode 100644 src/main/org/jivesoftware/smack/provider/ExtensionElementProvider.java delete mode 100644 src/main/org/jivesoftware/smack/provider/ExtensionProviderInfo.java delete mode 100644 src/main/org/jivesoftware/smack/provider/IQProvider.java delete mode 100644 src/main/org/jivesoftware/smack/provider/IQProviderInfo.java delete mode 100644 src/main/org/jivesoftware/smack/provider/IntrospectionProvider.java delete mode 100644 src/main/org/jivesoftware/smack/provider/Provider.java delete mode 100644 src/main/org/jivesoftware/smack/provider/ProviderFileLoader.java delete mode 100644 src/main/org/jivesoftware/smack/provider/ProviderLoader.java delete mode 100644 src/main/org/jivesoftware/smack/provider/ProviderManager.java delete mode 100644 src/main/org/jivesoftware/smack/provider/StreamFeatureProviderInfo.java delete mode 100644 src/main/org/jivesoftware/smack/proxy/DirectSocketFactory.java delete mode 100644 src/main/org/jivesoftware/smack/proxy/HTTPProxySocketFactory.java delete mode 100644 src/main/org/jivesoftware/smack/proxy/ProxyException.java delete mode 100644 src/main/org/jivesoftware/smack/proxy/ProxyInfo.java delete mode 100644 src/main/org/jivesoftware/smack/proxy/Socks4ProxySocketFactory.java delete mode 100644 src/main/org/jivesoftware/smack/proxy/Socks5ProxySocketFactory.java delete mode 100644 src/main/org/jivesoftware/smack/sasl/SASLAnonymous.java delete mode 100644 src/main/org/jivesoftware/smack/sasl/SASLError.java delete mode 100644 src/main/org/jivesoftware/smack/sasl/SASLErrorException.java delete mode 100644 src/main/org/jivesoftware/smack/sasl/SASLMechanism.java delete mode 100644 src/main/org/jivesoftware/smack/sasl/core/SASLXOauth2Mechanism.java delete mode 100644 src/main/org/jivesoftware/smack/sasl/core/SCRAMSHA1Mechanism.java delete mode 100644 src/main/org/jivesoftware/smack/sasl/packet/SaslStreamElements.java delete mode 100644 src/main/org/jivesoftware/smack/util/ArrayBlockingQueueWithShutdown.java delete mode 100644 src/main/org/jivesoftware/smack/util/Async.java delete mode 100644 src/main/org/jivesoftware/smack/util/ByteUtils.java delete mode 100644 src/main/org/jivesoftware/smack/util/DNSUtil.java delete mode 100644 src/main/org/jivesoftware/smack/util/EventManger.java delete mode 100644 src/main/org/jivesoftware/smack/util/FileUtils.java delete mode 100644 src/main/org/jivesoftware/smack/util/LazyStringBuilder.java delete mode 100644 src/main/org/jivesoftware/smack/util/MAC.java delete mode 100644 src/main/org/jivesoftware/smack/util/MD5.java delete mode 100644 src/main/org/jivesoftware/smack/util/MultiMap.java delete mode 100644 src/main/org/jivesoftware/smack/util/NumberUtil.java delete mode 100644 src/main/org/jivesoftware/smack/util/Objects.java delete mode 100644 src/main/org/jivesoftware/smack/util/ObservableReader.java delete mode 100644 src/main/org/jivesoftware/smack/util/ObservableWriter.java delete mode 100644 src/main/org/jivesoftware/smack/util/PacketParserUtils.java delete mode 100644 src/main/org/jivesoftware/smack/util/PacketUtil.java delete mode 100644 src/main/org/jivesoftware/smack/util/ParserUtils.java delete mode 100644 src/main/org/jivesoftware/smack/util/ReaderListener.java delete mode 100644 src/main/org/jivesoftware/smack/util/SHA1.java delete mode 100644 src/main/org/jivesoftware/smack/util/SmackExecutorThreadFactory.java delete mode 100644 src/main/org/jivesoftware/smack/util/StringTransformer.java delete mode 100644 src/main/org/jivesoftware/smack/util/StringUtils.java delete mode 100644 src/main/org/jivesoftware/smack/util/TLSUtils.java delete mode 100644 src/main/org/jivesoftware/smack/util/WriterListener.java delete mode 100644 src/main/org/jivesoftware/smack/util/XmlStringBuilder.java delete mode 100644 src/main/org/jivesoftware/smack/util/dns/DNSResolver.java delete mode 100644 src/main/org/jivesoftware/smack/util/dns/HostAddress.java delete mode 100644 src/main/org/jivesoftware/smack/util/dns/SRVRecord.java delete mode 100644 src/main/org/jivesoftware/smack/util/stringencoder/Base32.java delete mode 100644 src/main/org/jivesoftware/smack/util/stringencoder/Base64.java delete mode 100644 src/main/org/jivesoftware/smack/util/stringencoder/Base64UrlSafeEncoder.java delete mode 100644 src/main/org/jivesoftware/smack/util/stringencoder/StringEncoder.java delete mode 100644 src/main/org/jxmpp/jid/BareJid.java delete mode 100644 src/main/org/jxmpp/jid/DomainBareJid.java delete mode 100644 src/main/org/jxmpp/jid/DomainFullJid.java delete mode 100644 src/main/org/jxmpp/jid/FullJid.java delete mode 100644 src/main/org/jxmpp/jid/Jid.java delete mode 100644 src/main/org/jxmpp/jid/JidWithLocalpart.java delete mode 100644 src/main/org/jxmpp/jid/JidWithResource.java delete mode 100644 src/main/org/jxmpp/jid/impl/AbstractJid.java delete mode 100644 src/main/org/jxmpp/jid/impl/DomainAndResourcepartJid.java delete mode 100644 src/main/org/jxmpp/jid/impl/DomainpartJid.java delete mode 100644 src/main/org/jxmpp/jid/impl/JidCreate.java delete mode 100644 src/main/org/jxmpp/jid/impl/LocalAndDomainpartJid.java delete mode 100644 src/main/org/jxmpp/jid/impl/LocalDomainAndResourcepartJid.java delete mode 100644 src/main/org/jxmpp/jid/parts/Domainpart.java delete mode 100644 src/main/org/jxmpp/jid/parts/Localpart.java delete mode 100644 src/main/org/jxmpp/jid/parts/Part.java delete mode 100644 src/main/org/jxmpp/jid/parts/Resourcepart.java delete mode 100644 src/main/org/jxmpp/jid/util/JidUtil.java delete mode 100644 src/main/org/jxmpp/stringprep/XmppStringPrepUtil.java delete mode 100644 src/main/org/jxmpp/stringprep/XmppStringprep.java delete mode 100644 src/main/org/jxmpp/stringprep/XmppStringprepException.java delete mode 100644 src/main/org/jxmpp/stringprep/simple/SimpleXmppStringprep.java delete mode 100644 src/main/org/jxmpp/util/XmppDateTime.java delete mode 100644 src/main/org/jxmpp/util/XmppStringUtils.java delete mode 100644 src/main/org/jxmpp/util/cache/Cache.java delete mode 100644 src/main/org/jxmpp/util/cache/ExpirationCache.java delete mode 100644 src/main/org/jxmpp/util/cache/LruCache.java delete mode 100644 src/main/org/xmlpull/mxp1/MXParser.java delete mode 100644 src/main/org/xmlpull/mxp1/MXParserCachingStrings.java delete mode 100644 src/main/org/xmlpull/mxp1/MXParserFactory.java delete mode 100644 src/main/org/xmlpull/mxp1/MXParserNonValidating.java delete mode 100644 src/main/org/xmlpull/mxp1_serializer/MXSerializer.java delete mode 100644 src/main/org/xmlpull/v1/XmlPullParser.java delete mode 100644 src/main/org/xmlpull/v1/XmlPullParserException.java delete mode 100644 src/main/org/xmlpull/v1/XmlPullParserFactory.java delete mode 100644 src/main/org/xmlpull/v1/XmlSerializer.java delete mode 100644 src/main/org/xmlpull/v1/builder/Iterable.java delete mode 100644 src/main/org/xmlpull/v1/builder/XmlAttribute.java delete mode 100644 src/main/org/xmlpull/v1/builder/XmlBuilderException.java delete mode 100644 src/main/org/xmlpull/v1/builder/XmlCharacters.java delete mode 100644 src/main/org/xmlpull/v1/builder/XmlComment.java delete mode 100644 src/main/org/xmlpull/v1/builder/XmlContained.java delete mode 100644 src/main/org/xmlpull/v1/builder/XmlContainer.java delete mode 100644 src/main/org/xmlpull/v1/builder/XmlDoctype.java delete mode 100644 src/main/org/xmlpull/v1/builder/XmlDocument.java delete mode 100644 src/main/org/xmlpull/v1/builder/XmlElement.java delete mode 100644 src/main/org/xmlpull/v1/builder/XmlInfosetBuilder.java delete mode 100644 src/main/org/xmlpull/v1/builder/XmlNamespace.java delete mode 100644 src/main/org/xmlpull/v1/builder/XmlNotation.java delete mode 100644 src/main/org/xmlpull/v1/builder/XmlProcessingInstruction.java delete mode 100644 src/main/org/xmlpull/v1/builder/XmlSerializable.java delete mode 100644 src/main/org/xmlpull/v1/builder/XmlUnexpandedEntityReference.java delete mode 100644 src/main/org/xmlpull/v1/builder/XmlUnparsedEntity.java delete mode 100644 src/main/org/xmlpull/v1/builder/adapter/XmlAttributeAdapter.java delete mode 100644 src/main/org/xmlpull/v1/builder/adapter/XmlDocumentAdapter.java delete mode 100644 src/main/org/xmlpull/v1/builder/adapter/XmlElementAdapter.java delete mode 100644 src/main/org/xmlpull/v1/builder/impl/XmlAttributeImpl.java delete mode 100644 src/main/org/xmlpull/v1/builder/impl/XmlCommentImpl.java delete mode 100644 src/main/org/xmlpull/v1/builder/impl/XmlDocumentImpl.java delete mode 100644 src/main/org/xmlpull/v1/builder/impl/XmlElementImpl.java delete mode 100644 src/main/org/xmlpull/v1/builder/impl/XmlInfosetBuilderImpl.java delete mode 100644 src/main/org/xmlpull/v1/builder/impl/XmlNamespaceImpl.java delete mode 100644 src/main/org/xmlpull/v1/dom2_builder/DOM2XmlPullBuilder.java delete mode 100644 src/main/org/xmlpull/v1/parser_pool/XmlPullParserPool.java delete mode 100644 src/main/org/xmlpull/v1/sax2/Driver.java delete mode 100644 src/main/org/xmlpull/v1/util/XmlPullUtil.java delete mode 100644 src/main/org/xmlpull/v1/wrapper/XmlPullParserWrapper.java delete mode 100644 src/main/org/xmlpull/v1/wrapper/XmlPullWrapperFactory.java delete mode 100644 src/main/org/xmlpull/v1/wrapper/XmlSerializerWrapper.java delete mode 100644 src/main/org/xmlpull/v1/wrapper/classic/StaticXmlPullParserWrapper.java delete mode 100644 src/main/org/xmlpull/v1/wrapper/classic/StaticXmlSerializerWrapper.java delete mode 100644 src/main/org/xmlpull/v1/wrapper/classic/XmlPullParserDelegate.java delete mode 100644 src/main/org/xmlpull/v1/wrapper/classic/XmlSerializerDelegate.java delete mode 100644 src/main/org/yaml/snakeyaml/Dumper.java delete mode 100644 src/main/org/yaml/snakeyaml/DumperOptions.java delete mode 100644 src/main/org/yaml/snakeyaml/JavaBeanDumper.java delete mode 100644 src/main/org/yaml/snakeyaml/JavaBeanLoader.java delete mode 100644 src/main/org/yaml/snakeyaml/Loader.java delete mode 100644 src/main/org/yaml/snakeyaml/LoaderOptions.java delete mode 100644 src/main/org/yaml/snakeyaml/TypeDescription.java delete mode 100644 src/main/org/yaml/snakeyaml/Yaml.java delete mode 100644 src/main/org/yaml/snakeyaml/composer/Composer.java delete mode 100644 src/main/org/yaml/snakeyaml/composer/ComposerException.java delete mode 100644 src/main/org/yaml/snakeyaml/constructor/AbstractConstruct.java delete mode 100644 src/main/org/yaml/snakeyaml/constructor/BaseConstructor.java delete mode 100644 src/main/org/yaml/snakeyaml/constructor/Construct.java delete mode 100644 src/main/org/yaml/snakeyaml/constructor/Constructor.java delete mode 100644 src/main/org/yaml/snakeyaml/constructor/ConstructorException.java delete mode 100644 src/main/org/yaml/snakeyaml/constructor/CustomClassLoaderConstructor.java delete mode 100644 src/main/org/yaml/snakeyaml/constructor/SafeConstructor.java delete mode 100644 src/main/org/yaml/snakeyaml/emitter/Emitable.java delete mode 100644 src/main/org/yaml/snakeyaml/emitter/Emitter.java delete mode 100644 src/main/org/yaml/snakeyaml/emitter/EmitterException.java delete mode 100644 src/main/org/yaml/snakeyaml/emitter/EmitterState.java delete mode 100644 src/main/org/yaml/snakeyaml/emitter/ScalarAnalysis.java delete mode 100644 src/main/org/yaml/snakeyaml/error/Mark.java delete mode 100644 src/main/org/yaml/snakeyaml/error/MarkedYAMLException.java delete mode 100644 src/main/org/yaml/snakeyaml/error/YAMLException.java delete mode 100644 src/main/org/yaml/snakeyaml/events/AliasEvent.java delete mode 100644 src/main/org/yaml/snakeyaml/events/CollectionEndEvent.java delete mode 100644 src/main/org/yaml/snakeyaml/events/CollectionStartEvent.java delete mode 100644 src/main/org/yaml/snakeyaml/events/DocumentEndEvent.java delete mode 100644 src/main/org/yaml/snakeyaml/events/DocumentStartEvent.java delete mode 100644 src/main/org/yaml/snakeyaml/events/Event.java delete mode 100644 src/main/org/yaml/snakeyaml/events/ImplicitTuple.java delete mode 100644 src/main/org/yaml/snakeyaml/events/MappingEndEvent.java delete mode 100644 src/main/org/yaml/snakeyaml/events/MappingStartEvent.java delete mode 100644 src/main/org/yaml/snakeyaml/events/NodeEvent.java delete mode 100644 src/main/org/yaml/snakeyaml/events/ScalarEvent.java delete mode 100644 src/main/org/yaml/snakeyaml/events/SequenceEndEvent.java delete mode 100644 src/main/org/yaml/snakeyaml/events/SequenceStartEvent.java delete mode 100644 src/main/org/yaml/snakeyaml/events/StreamEndEvent.java delete mode 100644 src/main/org/yaml/snakeyaml/events/StreamStartEvent.java delete mode 100644 src/main/org/yaml/snakeyaml/extensions/compactnotation/CompactConstructor.java delete mode 100644 src/main/org/yaml/snakeyaml/extensions/compactnotation/CompactData.java delete mode 100644 src/main/org/yaml/snakeyaml/extensions/compactnotation/PackageCompactConstructor.java delete mode 100644 src/main/org/yaml/snakeyaml/external/biz/base64Coder/Base64Coder.java delete mode 100644 src/main/org/yaml/snakeyaml/external/com/google/gdata/util/common/base/Escaper.java delete mode 100644 src/main/org/yaml/snakeyaml/external/com/google/gdata/util/common/base/PercentEscaper.java delete mode 100644 src/main/org/yaml/snakeyaml/external/com/google/gdata/util/common/base/UnicodeEscaper.java delete mode 100644 src/main/org/yaml/snakeyaml/introspector/BeanAccess.java delete mode 100644 src/main/org/yaml/snakeyaml/introspector/FieldProperty.java delete mode 100644 src/main/org/yaml/snakeyaml/introspector/GenericProperty.java delete mode 100644 src/main/org/yaml/snakeyaml/introspector/MethodProperty.java delete mode 100644 src/main/org/yaml/snakeyaml/introspector/MissingProperty.java delete mode 100644 src/main/org/yaml/snakeyaml/introspector/Property.java delete mode 100644 src/main/org/yaml/snakeyaml/introspector/PropertyUtils.java delete mode 100644 src/main/org/yaml/snakeyaml/nodes/AnchorNode.java delete mode 100644 src/main/org/yaml/snakeyaml/nodes/CollectionNode.java delete mode 100644 src/main/org/yaml/snakeyaml/nodes/MappingNode.java delete mode 100644 src/main/org/yaml/snakeyaml/nodes/Node.java delete mode 100644 src/main/org/yaml/snakeyaml/nodes/NodeId.java delete mode 100644 src/main/org/yaml/snakeyaml/nodes/NodeTuple.java delete mode 100644 src/main/org/yaml/snakeyaml/nodes/ScalarNode.java delete mode 100644 src/main/org/yaml/snakeyaml/nodes/SequenceNode.java delete mode 100644 src/main/org/yaml/snakeyaml/nodes/Tag.java delete mode 100644 src/main/org/yaml/snakeyaml/parser/Parser.java delete mode 100644 src/main/org/yaml/snakeyaml/parser/ParserException.java delete mode 100644 src/main/org/yaml/snakeyaml/parser/ParserImpl.java delete mode 100644 src/main/org/yaml/snakeyaml/parser/Production.java delete mode 100644 src/main/org/yaml/snakeyaml/parser/VersionTagsTuple.java delete mode 100644 src/main/org/yaml/snakeyaml/reader/ReaderException.java delete mode 100644 src/main/org/yaml/snakeyaml/reader/StreamReader.java delete mode 100644 src/main/org/yaml/snakeyaml/reader/UnicodeReader.java delete mode 100644 src/main/org/yaml/snakeyaml/representer/BaseRepresenter.java delete mode 100644 src/main/org/yaml/snakeyaml/representer/Represent.java delete mode 100644 src/main/org/yaml/snakeyaml/representer/Representer.java delete mode 100644 src/main/org/yaml/snakeyaml/representer/SafeRepresenter.java delete mode 100644 src/main/org/yaml/snakeyaml/resolver/Resolver.java delete mode 100644 src/main/org/yaml/snakeyaml/resolver/ResolverTuple.java delete mode 100644 src/main/org/yaml/snakeyaml/scanner/Constant.java delete mode 100644 src/main/org/yaml/snakeyaml/scanner/Scanner.java delete mode 100644 src/main/org/yaml/snakeyaml/scanner/ScannerException.java delete mode 100644 src/main/org/yaml/snakeyaml/scanner/ScannerImpl.java delete mode 100644 src/main/org/yaml/snakeyaml/scanner/SimpleKey.java delete mode 100644 src/main/org/yaml/snakeyaml/serializer/Serializer.java delete mode 100644 src/main/org/yaml/snakeyaml/serializer/SerializerException.java delete mode 100644 src/main/org/yaml/snakeyaml/tokens/AliasToken.java delete mode 100644 src/main/org/yaml/snakeyaml/tokens/AnchorToken.java delete mode 100644 src/main/org/yaml/snakeyaml/tokens/BlockEndToken.java delete mode 100644 src/main/org/yaml/snakeyaml/tokens/BlockEntryToken.java delete mode 100644 src/main/org/yaml/snakeyaml/tokens/BlockMappingStartToken.java delete mode 100644 src/main/org/yaml/snakeyaml/tokens/BlockSequenceStartToken.java delete mode 100644 src/main/org/yaml/snakeyaml/tokens/DirectiveToken.java delete mode 100644 src/main/org/yaml/snakeyaml/tokens/DocumentEndToken.java delete mode 100644 src/main/org/yaml/snakeyaml/tokens/DocumentStartToken.java delete mode 100644 src/main/org/yaml/snakeyaml/tokens/FlowEntryToken.java delete mode 100644 src/main/org/yaml/snakeyaml/tokens/FlowMappingEndToken.java delete mode 100644 src/main/org/yaml/snakeyaml/tokens/FlowMappingStartToken.java delete mode 100644 src/main/org/yaml/snakeyaml/tokens/FlowSequenceEndToken.java delete mode 100644 src/main/org/yaml/snakeyaml/tokens/FlowSequenceStartToken.java delete mode 100644 src/main/org/yaml/snakeyaml/tokens/KeyToken.java delete mode 100644 src/main/org/yaml/snakeyaml/tokens/ScalarToken.java delete mode 100644 src/main/org/yaml/snakeyaml/tokens/StreamEndToken.java delete mode 100644 src/main/org/yaml/snakeyaml/tokens/StreamStartToken.java delete mode 100644 src/main/org/yaml/snakeyaml/tokens/TagToken.java delete mode 100644 src/main/org/yaml/snakeyaml/tokens/TagTuple.java delete mode 100644 src/main/org/yaml/snakeyaml/tokens/Token.java delete mode 100644 src/main/org/yaml/snakeyaml/tokens/ValueToken.java delete mode 100644 src/main/org/yaml/snakeyaml/util/ArrayStack.java delete mode 100644 src/main/org/yaml/snakeyaml/util/UriEncoder.java create mode 100644 src/net/mc/main/DarkTheme.java create mode 100644 src/net/mc/main/InstallDirSettings.java create mode 100644 src/net/mc/main/Main.java create mode 100644 src/net/mc/main/Util.java create mode 100644 src/net/miginfocom/layout/AC.java create mode 100644 src/net/miginfocom/layout/BoundSize.java create mode 100644 src/net/miginfocom/layout/CC.java create mode 100644 src/net/miginfocom/layout/ComponentWrapper.java create mode 100644 src/net/miginfocom/layout/ConstraintParser.java create mode 100644 src/net/miginfocom/layout/ContainerWrapper.java create mode 100644 src/net/miginfocom/layout/DimConstraint.java create mode 100644 src/net/miginfocom/layout/Grid.java create mode 100644 src/net/miginfocom/layout/InCellGapProvider.java create mode 100644 src/net/miginfocom/layout/LC.java create mode 100644 src/net/miginfocom/layout/LayoutCallback.java create mode 100644 src/net/miginfocom/layout/LayoutUtil.java create mode 100644 src/net/miginfocom/layout/LinkHandler.java create mode 100644 src/net/miginfocom/layout/PlatformDefaults.java create mode 100644 src/net/miginfocom/layout/ResizeConstraint.java create mode 100644 src/net/miginfocom/layout/UnitConverter.java create mode 100644 src/net/miginfocom/layout/UnitValue.java create mode 100644 src/net/miginfocom/swing/MigLayout.java create mode 100644 src/net/miginfocom/swing/SwingComponentWrapper.java create mode 100644 src/net/miginfocom/swing/SwingContainerWrapper.java create mode 100644 src/net/minecraft/launcher/CompatibilityRule.java create mode 100644 src/net/minecraft/launcher/CurrentLaunchFeatureMatcher.java create mode 100644 src/net/minecraft/launcher/Language.java create mode 100644 src/net/minecraft/launcher/Launcher.java create mode 100644 src/net/minecraft/launcher/LauncherConstants.java create mode 100644 src/net/minecraft/launcher/MinecraftUserInterface.java create mode 100644 src/net/minecraft/launcher/NetLauncherMain.java create mode 100644 src/net/minecraft/launcher/OptionsManager.java create mode 100644 src/net/minecraft/launcher/PackageEditor.java create mode 100644 src/net/minecraft/launcher/ServerManager.java create mode 100644 src/net/minecraft/launcher/StorageManager.java create mode 100644 src/net/minecraft/launcher/SwingUserInterface.java create mode 100644 src/net/minecraft/launcher/game/GameLaunchDispatcher.java create mode 100644 src/net/minecraft/launcher/game/MinecraftGameRunner.java create mode 100644 src/net/minecraft/launcher/game/MinecraftReleaseType.java create mode 100644 src/net/minecraft/launcher/game/MinecraftReleaseTypeFactory.java create mode 100644 src/net/minecraft/launcher/game/SkaiaNet.java create mode 100644 src/net/minecraft/launcher/profile/AuthenticationDatabase.java create mode 100644 src/net/minecraft/launcher/profile/LauncherVisibilityRule.java create mode 100644 src/net/minecraft/launcher/profile/Profile.java create mode 100644 src/net/minecraft/launcher/profile/ProfileManager.java create mode 100644 src/net/minecraft/launcher/profile/RefreshedProfilesListener.java create mode 100644 src/net/minecraft/launcher/profile/UserChangedListener.java create mode 100644 src/net/minecraft/launcher/ui/BottomBarPanel.java create mode 100644 src/net/minecraft/launcher/ui/LauncherPanel.java create mode 100644 src/net/minecraft/launcher/ui/TexturedPanel.java create mode 100644 src/net/minecraft/launcher/ui/bottombar/PlayButtonPanel.java create mode 100644 src/net/minecraft/launcher/ui/bottombar/PlayerInfoPanel.java create mode 100644 src/net/minecraft/launcher/ui/bottombar/ProfileSelectionPanel.java create mode 100644 src/net/minecraft/launcher/ui/bottombar/SidebarGridForm.java create mode 100644 src/net/minecraft/launcher/ui/bottombar/StatusPanelForm.java create mode 100644 src/net/minecraft/launcher/ui/popups/login/AuthErrorForm.java create mode 100644 src/net/minecraft/launcher/ui/popups/login/ComboItem.java create mode 100644 src/net/minecraft/launcher/ui/popups/login/ExistingUserListForm.java create mode 100644 src/net/minecraft/launcher/ui/popups/login/LogInForm.java create mode 100644 src/net/minecraft/launcher/ui/popups/login/LogInPopup.java create mode 100644 src/net/minecraft/launcher/ui/popups/profile/ProfileEditorPopup.java create mode 100644 src/net/minecraft/launcher/ui/popups/profile/ProfileInfoPanel.java create mode 100644 src/net/minecraft/launcher/ui/popups/profile/ProfileJavaPanel.java create mode 100644 src/net/minecraft/launcher/ui/popups/profile/ProfileVersionPanel.java create mode 100644 src/net/minecraft/launcher/ui/tabs/ConsoleTab.java create mode 100644 src/net/minecraft/launcher/ui/tabs/GameOutputTab.java create mode 100644 src/net/minecraft/launcher/ui/tabs/LauncherTabPanel.java create mode 100644 src/net/minecraft/launcher/ui/tabs/ProfileListTab.java create mode 100644 src/net/minecraft/launcher/ui/tabs/ServerListTab.java create mode 100644 src/net/minecraft/launcher/ui/tabs/WebsiteTab.java create mode 100644 src/net/minecraft/launcher/ui/tabs/website/Browser.java create mode 100644 src/net/minecraft/launcher/ui/tabs/website/JFXBrowser.java create mode 100644 src/net/minecraft/launcher/ui/tabs/website/LegacySwingBrowser.java create mode 100644 src/net/minecraft/launcher/updater/Argument.java create mode 100644 src/net/minecraft/launcher/updater/ArgumentType.java create mode 100644 src/net/minecraft/launcher/updater/AssetIndexInfo.java create mode 100644 src/net/minecraft/launcher/updater/CompleteMinecraftVersion.java create mode 100644 src/net/minecraft/launcher/updater/DownloadInfo.java create mode 100644 src/net/minecraft/launcher/updater/DownloadType.java create mode 100644 src/net/minecraft/launcher/updater/FileBasedVersionList.java create mode 100644 src/net/minecraft/launcher/updater/Library.java create mode 100644 src/net/minecraft/launcher/updater/LibraryDownloadInfo.java create mode 100644 src/net/minecraft/launcher/updater/LocalVersionList.java create mode 100644 src/net/minecraft/launcher/updater/MinecraftVersionManager.java create mode 100644 src/net/minecraft/launcher/updater/PartialVersion.java create mode 100644 src/net/minecraft/launcher/updater/PreHashedDownloadable.java rename src/{main => }/net/minecraft/launcher/updater/RemoteVersionList.java (95%) create mode 100644 src/net/minecraft/launcher/updater/VersionList.java rename src/{main => }/org.jivesoftware.smack/jul.properties (100%) rename src/{main => }/org.jivesoftware.smack/smack-config.xml (100%) rename src/{main => }/org.jivesoftware.smack/version (100%) create mode 100644 src/org/apache/commons/codec/BinaryDecoder.java create mode 100644 src/org/apache/commons/codec/BinaryEncoder.java create mode 100644 src/org/apache/commons/codec/CharEncoding.java create mode 100644 src/org/apache/commons/codec/Charsets.java create mode 100644 src/org/apache/commons/codec/Decoder.java create mode 100644 src/org/apache/commons/codec/DecoderException.java create mode 100644 src/org/apache/commons/codec/Encoder.java create mode 100644 src/org/apache/commons/codec/EncoderException.java create mode 100644 src/org/apache/commons/codec/StringDecoder.java create mode 100644 src/org/apache/commons/codec/StringEncoder.java create mode 100644 src/org/apache/commons/codec/StringEncoderComparator.java create mode 100644 src/org/apache/commons/codec/binary/Base32.java create mode 100644 src/org/apache/commons/codec/binary/Base32InputStream.java create mode 100644 src/org/apache/commons/codec/binary/Base32OutputStream.java create mode 100644 src/org/apache/commons/codec/binary/Base64.java create mode 100644 src/org/apache/commons/codec/binary/Base64InputStream.java create mode 100644 src/org/apache/commons/codec/binary/Base64OutputStream.java create mode 100644 src/org/apache/commons/codec/binary/BaseNCodec.java create mode 100644 src/org/apache/commons/codec/binary/BaseNCodecInputStream.java create mode 100644 src/org/apache/commons/codec/binary/BaseNCodecOutputStream.java create mode 100644 src/org/apache/commons/codec/binary/BinaryCodec.java create mode 100644 src/org/apache/commons/codec/binary/CharSequenceUtils.java create mode 100644 src/org/apache/commons/codec/binary/Hex.java create mode 100644 src/org/apache/commons/codec/binary/StringUtils.java create mode 100644 src/org/apache/commons/codec/digest/B64.java create mode 100644 src/org/apache/commons/codec/digest/Crypt.java create mode 100644 src/org/apache/commons/codec/digest/DigestUtils.java create mode 100644 src/org/apache/commons/codec/digest/HmacAlgorithms.java create mode 100644 src/org/apache/commons/codec/digest/HmacUtils.java create mode 100644 src/org/apache/commons/codec/digest/Md5Crypt.java create mode 100644 src/org/apache/commons/codec/digest/MessageDigestAlgorithms.java create mode 100644 src/org/apache/commons/codec/digest/Sha2Crypt.java create mode 100644 src/org/apache/commons/codec/digest/UnixCrypt.java create mode 100644 src/org/apache/commons/codec/language/AbstractCaverphone.java create mode 100644 src/org/apache/commons/codec/language/Caverphone.java create mode 100644 src/org/apache/commons/codec/language/Caverphone1.java create mode 100644 src/org/apache/commons/codec/language/Caverphone2.java create mode 100644 src/org/apache/commons/codec/language/ColognePhonetic.java create mode 100644 src/org/apache/commons/codec/language/DaitchMokotoffSoundex.java create mode 100644 src/org/apache/commons/codec/language/DoubleMetaphone.java create mode 100644 src/org/apache/commons/codec/language/MatchRatingApproachEncoder.java create mode 100644 src/org/apache/commons/codec/language/Metaphone.java create mode 100644 src/org/apache/commons/codec/language/Nysiis.java create mode 100644 src/org/apache/commons/codec/language/RefinedSoundex.java create mode 100644 src/org/apache/commons/codec/language/Soundex.java create mode 100644 src/org/apache/commons/codec/language/SoundexUtils.java create mode 100644 src/org/apache/commons/codec/language/bm/BeiderMorseEncoder.java create mode 100644 src/org/apache/commons/codec/language/bm/Lang.java create mode 100644 src/org/apache/commons/codec/language/bm/Languages.java create mode 100644 src/org/apache/commons/codec/language/bm/NameType.java create mode 100644 src/org/apache/commons/codec/language/bm/PhoneticEngine.java create mode 100644 src/org/apache/commons/codec/language/bm/ResourceConstants.java create mode 100644 src/org/apache/commons/codec/language/bm/Rule.java create mode 100644 src/org/apache/commons/codec/language/bm/RuleType.java rename src/{main => }/org/apache/commons/codec/language/bm/ash_approx_any.txt (100%) rename src/{main => }/org/apache/commons/codec/language/bm/ash_approx_common.txt (100%) rename src/{main => }/org/apache/commons/codec/language/bm/ash_approx_cyrillic.txt (100%) rename src/{main => }/org/apache/commons/codec/language/bm/ash_approx_english.txt (100%) rename src/{main => }/org/apache/commons/codec/language/bm/ash_approx_french.txt (100%) rename src/{main => }/org/apache/commons/codec/language/bm/ash_approx_german.txt (100%) rename src/{main => }/org/apache/commons/codec/language/bm/ash_approx_hebrew.txt (100%) rename src/{main => }/org/apache/commons/codec/language/bm/ash_approx_hungarian.txt (100%) rename src/{main => }/org/apache/commons/codec/language/bm/ash_approx_polish.txt (100%) rename src/{main => }/org/apache/commons/codec/language/bm/ash_approx_romanian.txt (100%) rename src/{main => }/org/apache/commons/codec/language/bm/ash_approx_russian.txt (100%) rename src/{main => }/org/apache/commons/codec/language/bm/ash_approx_spanish.txt (100%) rename src/{main => }/org/apache/commons/codec/language/bm/ash_exact_any.txt (100%) rename src/{main => }/org/apache/commons/codec/language/bm/ash_exact_approx_common.txt (100%) rename src/{main => }/org/apache/commons/codec/language/bm/ash_exact_common.txt (100%) rename src/{main => }/org/apache/commons/codec/language/bm/ash_exact_cyrillic.txt (100%) rename src/{main => }/org/apache/commons/codec/language/bm/ash_exact_english.txt (100%) rename src/{main => }/org/apache/commons/codec/language/bm/ash_exact_french.txt (100%) rename src/{main => }/org/apache/commons/codec/language/bm/ash_exact_german.txt (100%) rename src/{main => }/org/apache/commons/codec/language/bm/ash_exact_hebrew.txt (100%) rename src/{main => }/org/apache/commons/codec/language/bm/ash_exact_hungarian.txt (100%) rename src/{main => }/org/apache/commons/codec/language/bm/ash_exact_polish.txt (100%) rename src/{main => }/org/apache/commons/codec/language/bm/ash_exact_romanian.txt (100%) rename src/{main => }/org/apache/commons/codec/language/bm/ash_exact_russian.txt (100%) rename src/{main => }/org/apache/commons/codec/language/bm/ash_exact_spanish.txt (100%) rename src/{main => }/org/apache/commons/codec/language/bm/ash_hebrew_common.txt (100%) rename src/{main => }/org/apache/commons/codec/language/bm/ash_lang.txt (100%) rename src/{main => }/org/apache/commons/codec/language/bm/ash_languages.txt (100%) rename src/{main => }/org/apache/commons/codec/language/bm/ash_rules_any.txt (100%) rename src/{main => }/org/apache/commons/codec/language/bm/ash_rules_cyrillic.txt (100%) rename src/{main => }/org/apache/commons/codec/language/bm/ash_rules_english.txt (100%) rename src/{main => }/org/apache/commons/codec/language/bm/ash_rules_french.txt (100%) rename src/{main => }/org/apache/commons/codec/language/bm/ash_rules_german.txt (100%) rename src/{main => }/org/apache/commons/codec/language/bm/ash_rules_hebrew.txt (100%) rename src/{main => }/org/apache/commons/codec/language/bm/ash_rules_hungarian.txt (100%) rename src/{main => }/org/apache/commons/codec/language/bm/ash_rules_polish.txt (100%) rename src/{main => }/org/apache/commons/codec/language/bm/ash_rules_romanian.txt (100%) rename src/{main => }/org/apache/commons/codec/language/bm/ash_rules_russian.txt (100%) rename src/{main => }/org/apache/commons/codec/language/bm/ash_rules_spanish.txt (100%) rename src/{main => }/org/apache/commons/codec/language/bm/gen_approx_any.txt (100%) rename src/{main => }/org/apache/commons/codec/language/bm/gen_approx_arabic.txt (100%) rename src/{main => }/org/apache/commons/codec/language/bm/gen_approx_common.txt (100%) rename src/{main => }/org/apache/commons/codec/language/bm/gen_approx_cyrillic.txt (100%) rename src/{main => }/org/apache/commons/codec/language/bm/gen_approx_czech.txt (100%) rename src/{main => }/org/apache/commons/codec/language/bm/gen_approx_dutch.txt (100%) rename src/{main => }/org/apache/commons/codec/language/bm/gen_approx_english.txt (100%) rename src/{main => }/org/apache/commons/codec/language/bm/gen_approx_french.txt (100%) rename src/{main => }/org/apache/commons/codec/language/bm/gen_approx_german.txt (100%) rename src/{main => }/org/apache/commons/codec/language/bm/gen_approx_greek.txt (100%) rename src/{main => }/org/apache/commons/codec/language/bm/gen_approx_greeklatin.txt (100%) rename src/{main => }/org/apache/commons/codec/language/bm/gen_approx_hebrew.txt (100%) rename src/{main => }/org/apache/commons/codec/language/bm/gen_approx_hungarian.txt (100%) rename src/{main => }/org/apache/commons/codec/language/bm/gen_approx_italian.txt (100%) rename src/{main => }/org/apache/commons/codec/language/bm/gen_approx_polish.txt (100%) rename src/{main => }/org/apache/commons/codec/language/bm/gen_approx_portuguese.txt (100%) rename src/{main => }/org/apache/commons/codec/language/bm/gen_approx_romanian.txt (100%) rename src/{main => }/org/apache/commons/codec/language/bm/gen_approx_russian.txt (100%) rename src/{main => }/org/apache/commons/codec/language/bm/gen_approx_spanish.txt (100%) rename src/{main => }/org/apache/commons/codec/language/bm/gen_approx_turkish.txt (100%) rename src/{main => }/org/apache/commons/codec/language/bm/gen_exact_any.txt (100%) rename src/{main => }/org/apache/commons/codec/language/bm/gen_exact_approx_common.txt (100%) rename src/{main => }/org/apache/commons/codec/language/bm/gen_exact_arabic.txt (100%) rename src/{main => }/org/apache/commons/codec/language/bm/gen_exact_common.txt (100%) rename src/{main => }/org/apache/commons/codec/language/bm/gen_exact_cyrillic.txt (100%) rename src/{main => }/org/apache/commons/codec/language/bm/gen_exact_czech.txt (100%) rename src/{main => }/org/apache/commons/codec/language/bm/gen_exact_dutch.txt (100%) rename src/{main => }/org/apache/commons/codec/language/bm/gen_exact_english.txt (100%) rename src/{main => }/org/apache/commons/codec/language/bm/gen_exact_french.txt (100%) rename src/{main => }/org/apache/commons/codec/language/bm/gen_exact_german.txt (100%) rename src/{main => }/org/apache/commons/codec/language/bm/gen_exact_greek.txt (100%) rename src/{main => }/org/apache/commons/codec/language/bm/gen_exact_greeklatin.txt (100%) rename src/{main => }/org/apache/commons/codec/language/bm/gen_exact_hebrew.txt (100%) rename src/{main => }/org/apache/commons/codec/language/bm/gen_exact_hungarian.txt (100%) rename src/{main => }/org/apache/commons/codec/language/bm/gen_exact_italian.txt (100%) rename src/{main => }/org/apache/commons/codec/language/bm/gen_exact_polish.txt (100%) rename src/{main => }/org/apache/commons/codec/language/bm/gen_exact_portuguese.txt (100%) rename src/{main => }/org/apache/commons/codec/language/bm/gen_exact_romanian.txt (100%) rename src/{main => }/org/apache/commons/codec/language/bm/gen_exact_russian.txt (100%) rename src/{main => }/org/apache/commons/codec/language/bm/gen_exact_spanish.txt (100%) rename src/{main => }/org/apache/commons/codec/language/bm/gen_exact_turkish.txt (100%) rename src/{main => }/org/apache/commons/codec/language/bm/gen_hebrew_common.txt (100%) rename src/{main => }/org/apache/commons/codec/language/bm/gen_lang.txt (100%) rename src/{main => }/org/apache/commons/codec/language/bm/gen_languages.txt (100%) rename src/{main => }/org/apache/commons/codec/language/bm/gen_rules_any.txt (100%) rename src/{main => }/org/apache/commons/codec/language/bm/gen_rules_arabic.txt (100%) rename src/{main => }/org/apache/commons/codec/language/bm/gen_rules_cyrillic.txt (100%) rename src/{main => }/org/apache/commons/codec/language/bm/gen_rules_czech.txt (100%) rename src/{main => }/org/apache/commons/codec/language/bm/gen_rules_dutch.txt (100%) rename src/{main => }/org/apache/commons/codec/language/bm/gen_rules_english.txt (100%) rename src/{main => }/org/apache/commons/codec/language/bm/gen_rules_french.txt (100%) rename src/{main => }/org/apache/commons/codec/language/bm/gen_rules_german.txt (100%) rename src/{main => }/org/apache/commons/codec/language/bm/gen_rules_greek.txt (100%) rename src/{main => }/org/apache/commons/codec/language/bm/gen_rules_greeklatin.txt (100%) rename src/{main => }/org/apache/commons/codec/language/bm/gen_rules_hebrew.txt (100%) rename src/{main => }/org/apache/commons/codec/language/bm/gen_rules_hungarian.txt (100%) rename src/{main => }/org/apache/commons/codec/language/bm/gen_rules_italian.txt (100%) rename src/{main => }/org/apache/commons/codec/language/bm/gen_rules_polish.txt (100%) rename src/{main => }/org/apache/commons/codec/language/bm/gen_rules_portuguese.txt (100%) rename src/{main => }/org/apache/commons/codec/language/bm/gen_rules_romanian.txt (100%) rename src/{main => }/org/apache/commons/codec/language/bm/gen_rules_russian.txt (100%) rename src/{main => }/org/apache/commons/codec/language/bm/gen_rules_spanish.txt (100%) rename src/{main => }/org/apache/commons/codec/language/bm/gen_rules_turkish.txt (100%) rename src/{main => }/org/apache/commons/codec/language/bm/lang.txt (100%) rename src/{main => }/org/apache/commons/codec/language/bm/sep_approx_any.txt (100%) rename src/{main => }/org/apache/commons/codec/language/bm/sep_approx_common.txt (100%) rename src/{main => }/org/apache/commons/codec/language/bm/sep_approx_french.txt (100%) rename src/{main => }/org/apache/commons/codec/language/bm/sep_approx_hebrew.txt (100%) rename src/{main => }/org/apache/commons/codec/language/bm/sep_approx_italian.txt (100%) rename src/{main => }/org/apache/commons/codec/language/bm/sep_approx_portuguese.txt (100%) rename src/{main => }/org/apache/commons/codec/language/bm/sep_approx_spanish.txt (100%) rename src/{main => }/org/apache/commons/codec/language/bm/sep_exact_any.txt (100%) rename src/{main => }/org/apache/commons/codec/language/bm/sep_exact_approx_common.txt (100%) rename src/{main => }/org/apache/commons/codec/language/bm/sep_exact_common.txt (100%) rename src/{main => }/org/apache/commons/codec/language/bm/sep_exact_french.txt (100%) rename src/{main => }/org/apache/commons/codec/language/bm/sep_exact_hebrew.txt (100%) rename src/{main => }/org/apache/commons/codec/language/bm/sep_exact_italian.txt (100%) rename src/{main => }/org/apache/commons/codec/language/bm/sep_exact_portuguese.txt (100%) rename src/{main => }/org/apache/commons/codec/language/bm/sep_exact_spanish.txt (100%) rename src/{main => }/org/apache/commons/codec/language/bm/sep_hebrew_common.txt (100%) rename src/{main => }/org/apache/commons/codec/language/bm/sep_lang.txt (100%) rename src/{main => }/org/apache/commons/codec/language/bm/sep_languages.txt (100%) rename src/{main => }/org/apache/commons/codec/language/bm/sep_rules_any.txt (100%) rename src/{main => }/org/apache/commons/codec/language/bm/sep_rules_french.txt (100%) rename src/{main => }/org/apache/commons/codec/language/bm/sep_rules_hebrew.txt (100%) rename src/{main => }/org/apache/commons/codec/language/bm/sep_rules_italian.txt (100%) rename src/{main => }/org/apache/commons/codec/language/bm/sep_rules_portuguese.txt (100%) rename src/{main => }/org/apache/commons/codec/language/bm/sep_rules_spanish.txt (100%) rename src/{main => }/org/apache/commons/codec/language/dmrules.txt (100%) create mode 100644 src/org/apache/commons/codec/net/BCodec.java create mode 100644 src/org/apache/commons/codec/net/QCodec.java create mode 100644 src/org/apache/commons/codec/net/QuotedPrintableCodec.java create mode 100644 src/org/apache/commons/codec/net/RFC1522Codec.java create mode 100644 src/org/apache/commons/codec/net/URLCodec.java create mode 100644 src/org/apache/commons/codec/net/Utils.java create mode 100644 src/org/apache/commons/io/ByteOrderMark.java create mode 100644 src/org/apache/commons/io/Charsets.java create mode 100644 src/org/apache/commons/io/CopyUtils.java create mode 100644 src/org/apache/commons/io/DirectoryWalker.java create mode 100644 src/org/apache/commons/io/EndianUtils.java create mode 100644 src/org/apache/commons/io/FileCleaner.java create mode 100644 src/org/apache/commons/io/FileCleaningTracker.java create mode 100644 src/org/apache/commons/io/FileDeleteStrategy.java create mode 100644 src/org/apache/commons/io/FileExistsException.java create mode 100644 src/org/apache/commons/io/FileSystemUtils.java create mode 100644 src/org/apache/commons/io/FileUtils.java create mode 100644 src/org/apache/commons/io/FilenameUtils.java create mode 100644 src/org/apache/commons/io/HexDump.java create mode 100644 src/org/apache/commons/io/IOCase.java create mode 100644 src/org/apache/commons/io/IOExceptionWithCause.java create mode 100644 src/org/apache/commons/io/IOUtils.java create mode 100644 src/org/apache/commons/io/LineIterator.java create mode 100644 src/org/apache/commons/io/TaggedIOException.java create mode 100644 src/org/apache/commons/io/ThreadMonitor.java create mode 100644 src/org/apache/commons/io/comparator/AbstractFileComparator.java create mode 100644 src/org/apache/commons/io/comparator/CompositeFileComparator.java create mode 100644 src/org/apache/commons/io/comparator/DefaultFileComparator.java create mode 100644 src/org/apache/commons/io/comparator/DirectoryFileComparator.java create mode 100644 src/org/apache/commons/io/comparator/ExtensionFileComparator.java create mode 100644 src/org/apache/commons/io/comparator/LastModifiedFileComparator.java create mode 100644 src/org/apache/commons/io/comparator/NameFileComparator.java create mode 100644 src/org/apache/commons/io/comparator/PathFileComparator.java create mode 100644 src/org/apache/commons/io/comparator/ReverseComparator.java create mode 100644 src/org/apache/commons/io/comparator/SizeFileComparator.java create mode 100644 src/org/apache/commons/io/filefilter/AbstractFileFilter.java create mode 100644 src/org/apache/commons/io/filefilter/AgeFileFilter.java create mode 100644 src/org/apache/commons/io/filefilter/AndFileFilter.java create mode 100644 src/org/apache/commons/io/filefilter/CanReadFileFilter.java create mode 100644 src/org/apache/commons/io/filefilter/CanWriteFileFilter.java create mode 100644 src/org/apache/commons/io/filefilter/ConditionalFileFilter.java create mode 100644 src/org/apache/commons/io/filefilter/DelegateFileFilter.java create mode 100644 src/org/apache/commons/io/filefilter/DirectoryFileFilter.java create mode 100644 src/org/apache/commons/io/filefilter/EmptyFileFilter.java create mode 100644 src/org/apache/commons/io/filefilter/FalseFileFilter.java create mode 100644 src/org/apache/commons/io/filefilter/FileFileFilter.java create mode 100644 src/org/apache/commons/io/filefilter/FileFilterUtils.java create mode 100644 src/org/apache/commons/io/filefilter/HiddenFileFilter.java create mode 100644 src/org/apache/commons/io/filefilter/IOFileFilter.java create mode 100644 src/org/apache/commons/io/filefilter/MagicNumberFileFilter.java create mode 100644 src/org/apache/commons/io/filefilter/NameFileFilter.java create mode 100644 src/org/apache/commons/io/filefilter/NotFileFilter.java create mode 100644 src/org/apache/commons/io/filefilter/OrFileFilter.java create mode 100644 src/org/apache/commons/io/filefilter/PrefixFileFilter.java create mode 100644 src/org/apache/commons/io/filefilter/RegexFileFilter.java create mode 100644 src/org/apache/commons/io/filefilter/SizeFileFilter.java create mode 100644 src/org/apache/commons/io/filefilter/SuffixFileFilter.java create mode 100644 src/org/apache/commons/io/filefilter/TrueFileFilter.java create mode 100644 src/org/apache/commons/io/filefilter/WildcardFileFilter.java create mode 100644 src/org/apache/commons/io/filefilter/WildcardFilter.java create mode 100644 src/org/apache/commons/io/input/AutoCloseInputStream.java create mode 100644 src/org/apache/commons/io/input/BOMInputStream.java create mode 100644 src/org/apache/commons/io/input/BoundedInputStream.java create mode 100644 src/org/apache/commons/io/input/BrokenInputStream.java create mode 100644 src/org/apache/commons/io/input/CharSequenceInputStream.java create mode 100644 src/org/apache/commons/io/input/CharSequenceReader.java create mode 100644 src/org/apache/commons/io/input/ClassLoaderObjectInputStream.java create mode 100644 src/org/apache/commons/io/input/CloseShieldInputStream.java create mode 100644 src/org/apache/commons/io/input/ClosedInputStream.java create mode 100644 src/org/apache/commons/io/input/CountingInputStream.java create mode 100644 src/org/apache/commons/io/input/DemuxInputStream.java create mode 100644 src/org/apache/commons/io/input/NullInputStream.java create mode 100644 src/org/apache/commons/io/input/NullReader.java create mode 100644 src/org/apache/commons/io/input/ProxyInputStream.java create mode 100644 src/org/apache/commons/io/input/ProxyReader.java create mode 100644 src/org/apache/commons/io/input/ReaderInputStream.java create mode 100644 src/org/apache/commons/io/input/ReversedLinesFileReader.java create mode 100644 src/org/apache/commons/io/input/SwappedDataInputStream.java create mode 100644 src/org/apache/commons/io/input/TaggedInputStream.java create mode 100644 src/org/apache/commons/io/input/Tailer.java create mode 100644 src/org/apache/commons/io/input/TailerListener.java create mode 100644 src/org/apache/commons/io/input/TailerListenerAdapter.java create mode 100644 src/org/apache/commons/io/input/TeeInputStream.java create mode 100644 src/org/apache/commons/io/input/XmlStreamReader.java create mode 100644 src/org/apache/commons/io/input/XmlStreamReaderException.java create mode 100644 src/org/apache/commons/io/monitor/FileAlterationListener.java create mode 100644 src/org/apache/commons/io/monitor/FileAlterationListenerAdaptor.java create mode 100644 src/org/apache/commons/io/monitor/FileAlterationMonitor.java create mode 100644 src/org/apache/commons/io/monitor/FileAlterationObserver.java create mode 100644 src/org/apache/commons/io/monitor/FileEntry.java create mode 100644 src/org/apache/commons/io/output/BrokenOutputStream.java create mode 100644 src/org/apache/commons/io/output/ByteArrayOutputStream.java create mode 100644 src/org/apache/commons/io/output/CloseShieldOutputStream.java create mode 100644 src/org/apache/commons/io/output/ClosedOutputStream.java create mode 100644 src/org/apache/commons/io/output/CountingOutputStream.java create mode 100644 src/org/apache/commons/io/output/DeferredFileOutputStream.java create mode 100644 src/org/apache/commons/io/output/DemuxOutputStream.java create mode 100644 src/org/apache/commons/io/output/FileWriterWithEncoding.java create mode 100644 src/org/apache/commons/io/output/LockableFileWriter.java create mode 100644 src/org/apache/commons/io/output/NullOutputStream.java create mode 100644 src/org/apache/commons/io/output/NullWriter.java create mode 100644 src/org/apache/commons/io/output/ProxyOutputStream.java create mode 100644 src/org/apache/commons/io/output/ProxyWriter.java create mode 100644 src/org/apache/commons/io/output/StringBuilderWriter.java create mode 100644 src/org/apache/commons/io/output/TaggedOutputStream.java create mode 100644 src/org/apache/commons/io/output/TeeOutputStream.java create mode 100644 src/org/apache/commons/io/output/ThresholdingOutputStream.java create mode 100644 src/org/apache/commons/io/output/WriterOutputStream.java create mode 100644 src/org/apache/commons/io/output/XmlStreamWriter.java create mode 100644 src/org/apache/commons/lang3/AnnotationUtils.java create mode 100644 src/org/apache/commons/lang3/ArrayUtils.java create mode 100644 src/org/apache/commons/lang3/BitField.java create mode 100644 src/org/apache/commons/lang3/BooleanUtils.java create mode 100644 src/org/apache/commons/lang3/CharEncoding.java create mode 100644 src/org/apache/commons/lang3/CharRange.java create mode 100644 src/org/apache/commons/lang3/CharSequenceUtils.java create mode 100644 src/org/apache/commons/lang3/CharSet.java create mode 100644 src/org/apache/commons/lang3/CharSetUtils.java create mode 100644 src/org/apache/commons/lang3/CharUtils.java create mode 100644 src/org/apache/commons/lang3/ClassPathUtils.java create mode 100644 src/org/apache/commons/lang3/ClassUtils.java create mode 100644 src/org/apache/commons/lang3/Conversion.java create mode 100644 src/org/apache/commons/lang3/EnumUtils.java create mode 100644 src/org/apache/commons/lang3/JavaVersion.java create mode 100644 src/org/apache/commons/lang3/LocaleUtils.java create mode 100644 src/org/apache/commons/lang3/NotImplementedException.java create mode 100644 src/org/apache/commons/lang3/ObjectUtils.java create mode 100644 src/org/apache/commons/lang3/RandomStringUtils.java create mode 100644 src/org/apache/commons/lang3/RandomUtils.java create mode 100644 src/org/apache/commons/lang3/Range.java create mode 100644 src/org/apache/commons/lang3/SerializationException.java create mode 100644 src/org/apache/commons/lang3/SerializationUtils.java create mode 100644 src/org/apache/commons/lang3/StringEscapeUtils.java create mode 100644 src/org/apache/commons/lang3/StringUtils.java create mode 100644 src/org/apache/commons/lang3/SystemUtils.java create mode 100644 src/org/apache/commons/lang3/Validate.java create mode 100644 src/org/apache/commons/lang3/builder/Builder.java create mode 100644 src/org/apache/commons/lang3/builder/CompareToBuilder.java create mode 100644 src/org/apache/commons/lang3/builder/Diff.java create mode 100644 src/org/apache/commons/lang3/builder/DiffBuilder.java create mode 100644 src/org/apache/commons/lang3/builder/DiffResult.java create mode 100644 src/org/apache/commons/lang3/builder/Diffable.java create mode 100644 src/org/apache/commons/lang3/builder/EqualsBuilder.java create mode 100644 src/org/apache/commons/lang3/builder/HashCodeBuilder.java create mode 100644 src/org/apache/commons/lang3/builder/IDKey.java create mode 100644 src/org/apache/commons/lang3/builder/MultilineRecursiveToStringStyle.java create mode 100644 src/org/apache/commons/lang3/builder/RecursiveToStringStyle.java create mode 100644 src/org/apache/commons/lang3/builder/ReflectionToStringBuilder.java create mode 100644 src/org/apache/commons/lang3/builder/StandardToStringStyle.java create mode 100644 src/org/apache/commons/lang3/builder/ToStringBuilder.java create mode 100644 src/org/apache/commons/lang3/builder/ToStringStyle.java create mode 100644 src/org/apache/commons/lang3/concurrent/AtomicInitializer.java create mode 100644 src/org/apache/commons/lang3/concurrent/AtomicSafeInitializer.java create mode 100644 src/org/apache/commons/lang3/concurrent/BackgroundInitializer.java create mode 100644 src/org/apache/commons/lang3/concurrent/BasicThreadFactory.java create mode 100644 src/org/apache/commons/lang3/concurrent/CallableBackgroundInitializer.java create mode 100644 src/org/apache/commons/lang3/concurrent/ConcurrentException.java create mode 100644 src/org/apache/commons/lang3/concurrent/ConcurrentInitializer.java create mode 100644 src/org/apache/commons/lang3/concurrent/ConcurrentRuntimeException.java create mode 100644 src/org/apache/commons/lang3/concurrent/ConcurrentUtils.java create mode 100644 src/org/apache/commons/lang3/concurrent/ConstantInitializer.java create mode 100644 src/org/apache/commons/lang3/concurrent/LazyInitializer.java create mode 100644 src/org/apache/commons/lang3/concurrent/MultiBackgroundInitializer.java create mode 100644 src/org/apache/commons/lang3/concurrent/TimedSemaphore.java create mode 100644 src/org/apache/commons/lang3/event/EventListenerSupport.java create mode 100644 src/org/apache/commons/lang3/event/EventUtils.java create mode 100644 src/org/apache/commons/lang3/exception/CloneFailedException.java create mode 100644 src/org/apache/commons/lang3/exception/ContextedException.java create mode 100644 src/org/apache/commons/lang3/exception/ContextedRuntimeException.java create mode 100644 src/org/apache/commons/lang3/exception/DefaultExceptionContext.java create mode 100644 src/org/apache/commons/lang3/exception/ExceptionContext.java create mode 100644 src/org/apache/commons/lang3/exception/ExceptionUtils.java create mode 100644 src/org/apache/commons/lang3/math/Fraction.java create mode 100644 src/org/apache/commons/lang3/math/IEEE754rUtils.java create mode 100644 src/org/apache/commons/lang3/math/NumberUtils.java create mode 100644 src/org/apache/commons/lang3/mutable/Mutable.java create mode 100644 src/org/apache/commons/lang3/mutable/MutableBoolean.java create mode 100644 src/org/apache/commons/lang3/mutable/MutableByte.java create mode 100644 src/org/apache/commons/lang3/mutable/MutableDouble.java create mode 100644 src/org/apache/commons/lang3/mutable/MutableFloat.java create mode 100644 src/org/apache/commons/lang3/mutable/MutableInt.java create mode 100644 src/org/apache/commons/lang3/mutable/MutableLong.java create mode 100644 src/org/apache/commons/lang3/mutable/MutableObject.java create mode 100644 src/org/apache/commons/lang3/mutable/MutableShort.java create mode 100644 src/org/apache/commons/lang3/reflect/ConstructorUtils.java create mode 100644 src/org/apache/commons/lang3/reflect/FieldUtils.java create mode 100644 src/org/apache/commons/lang3/reflect/InheritanceUtils.java create mode 100644 src/org/apache/commons/lang3/reflect/MemberUtils.java create mode 100644 src/org/apache/commons/lang3/reflect/MethodUtils.java create mode 100644 src/org/apache/commons/lang3/reflect/TypeLiteral.java create mode 100644 src/org/apache/commons/lang3/reflect/TypeUtils.java create mode 100644 src/org/apache/commons/lang3/reflect/Typed.java create mode 100644 src/org/apache/commons/lang3/text/CompositeFormat.java create mode 100644 src/org/apache/commons/lang3/text/ExtendedMessageFormat.java create mode 100644 src/org/apache/commons/lang3/text/FormatFactory.java create mode 100644 src/org/apache/commons/lang3/text/FormattableUtils.java create mode 100644 src/org/apache/commons/lang3/text/StrBuilder.java create mode 100644 src/org/apache/commons/lang3/text/StrLookup.java create mode 100644 src/org/apache/commons/lang3/text/StrMatcher.java create mode 100644 src/org/apache/commons/lang3/text/StrSubstitutor.java create mode 100644 src/org/apache/commons/lang3/text/StrTokenizer.java create mode 100644 src/org/apache/commons/lang3/text/WordUtils.java create mode 100644 src/org/apache/commons/lang3/text/translate/AggregateTranslator.java create mode 100644 src/org/apache/commons/lang3/text/translate/CharSequenceTranslator.java create mode 100644 src/org/apache/commons/lang3/text/translate/CodePointTranslator.java create mode 100644 src/org/apache/commons/lang3/text/translate/EntityArrays.java create mode 100644 src/org/apache/commons/lang3/text/translate/JavaUnicodeEscaper.java create mode 100644 src/org/apache/commons/lang3/text/translate/LookupTranslator.java create mode 100644 src/org/apache/commons/lang3/text/translate/NumericEntityEscaper.java create mode 100644 src/org/apache/commons/lang3/text/translate/NumericEntityUnescaper.java create mode 100644 src/org/apache/commons/lang3/text/translate/OctalUnescaper.java create mode 100644 src/org/apache/commons/lang3/text/translate/UnicodeEscaper.java create mode 100644 src/org/apache/commons/lang3/text/translate/UnicodeUnescaper.java create mode 100644 src/org/apache/commons/lang3/text/translate/UnicodeUnpairedSurrogateRemover.java create mode 100644 src/org/apache/commons/lang3/time/DateFormatUtils.java create mode 100644 src/org/apache/commons/lang3/time/DateParser.java create mode 100644 src/org/apache/commons/lang3/time/DatePrinter.java create mode 100644 src/org/apache/commons/lang3/time/DateUtils.java create mode 100644 src/org/apache/commons/lang3/time/DurationFormatUtils.java create mode 100644 src/org/apache/commons/lang3/time/FastDateFormat.java create mode 100644 src/org/apache/commons/lang3/time/FastDateParser.java create mode 100644 src/org/apache/commons/lang3/time/FastDatePrinter.java create mode 100644 src/org/apache/commons/lang3/time/FormatCache.java create mode 100644 src/org/apache/commons/lang3/time/StopWatch.java create mode 100644 src/org/apache/commons/lang3/tuple/ImmutablePair.java create mode 100644 src/org/apache/commons/lang3/tuple/ImmutableTriple.java create mode 100644 src/org/apache/commons/lang3/tuple/MutablePair.java create mode 100644 src/org/apache/commons/lang3/tuple/MutableTriple.java create mode 100644 src/org/apache/commons/lang3/tuple/Pair.java create mode 100644 src/org/apache/commons/lang3/tuple/Triple.java create mode 100644 src/org/apache/logging/log4j/EventLogger.java create mode 100644 src/org/apache/logging/log4j/Level.java create mode 100644 src/org/apache/logging/log4j/LogManager.java create mode 100644 src/org/apache/logging/log4j/Logger.java create mode 100644 src/org/apache/logging/log4j/LoggingException.java create mode 100644 src/org/apache/logging/log4j/Marker.java create mode 100644 src/org/apache/logging/log4j/MarkerManager.java create mode 100644 src/org/apache/logging/log4j/ThreadContext.java create mode 100644 src/org/apache/logging/log4j/core/AbstractLifeCycle.java create mode 100644 src/org/apache/logging/log4j/core/AbstractLogEvent.java create mode 100644 src/org/apache/logging/log4j/core/Appender.java create mode 100644 src/org/apache/logging/log4j/core/ErrorHandler.java create mode 100644 src/org/apache/logging/log4j/core/Filter.java create mode 100644 src/org/apache/logging/log4j/core/Layout.java create mode 100644 src/org/apache/logging/log4j/core/LifeCycle.java create mode 100644 src/org/apache/logging/log4j/core/LifeCycleState.java create mode 100644 src/org/apache/logging/log4j/core/LogEvent.java create mode 100644 src/org/apache/logging/log4j/core/LogEventListener.java create mode 100644 src/org/apache/logging/log4j/core/Logger.java create mode 100644 src/org/apache/logging/log4j/core/LoggerContext.java create mode 100644 src/org/apache/logging/log4j/core/appender/AbstractAppender.java create mode 100644 src/org/apache/logging/log4j/core/appender/AbstractManager.java create mode 100644 src/org/apache/logging/log4j/core/appender/AbstractOutputStreamAppender.java create mode 100644 src/org/apache/logging/log4j/core/appender/AppenderLoggingException.java create mode 100644 src/org/apache/logging/log4j/core/appender/AsyncAppender.java create mode 100644 src/org/apache/logging/log4j/core/appender/ConsoleAppender.java create mode 100644 src/org/apache/logging/log4j/core/appender/DefaultErrorHandler.java create mode 100644 src/org/apache/logging/log4j/core/appender/FailoverAppender.java create mode 100644 src/org/apache/logging/log4j/core/appender/FailoversPlugin.java create mode 100644 src/org/apache/logging/log4j/core/appender/FileAppender.java create mode 100644 src/org/apache/logging/log4j/core/appender/FileManager.java create mode 100644 src/org/apache/logging/log4j/core/appender/ManagerFactory.java create mode 100644 src/org/apache/logging/log4j/core/appender/OutputStreamManager.java create mode 100644 src/org/apache/logging/log4j/core/appender/RandomAccessFileAppender.java create mode 100644 src/org/apache/logging/log4j/core/appender/RandomAccessFileManager.java create mode 100644 src/org/apache/logging/log4j/core/appender/RollingFileAppender.java create mode 100644 src/org/apache/logging/log4j/core/appender/RollingRandomAccessFileAppender.java create mode 100644 src/org/apache/logging/log4j/core/appender/SmtpAppender.java create mode 100644 src/org/apache/logging/log4j/core/appender/SocketAppender.java create mode 100644 src/org/apache/logging/log4j/core/appender/SyslogAppender.java create mode 100644 src/org/apache/logging/log4j/core/appender/TlsSyslogFrame.java create mode 100644 src/org/apache/logging/log4j/core/appender/db/AbstractDatabaseAppender.java create mode 100644 src/org/apache/logging/log4j/core/appender/db/AbstractDatabaseManager.java create mode 100644 src/org/apache/logging/log4j/core/appender/db/jdbc/ColumnConfig.java create mode 100644 src/org/apache/logging/log4j/core/appender/db/jdbc/ConnectionSource.java create mode 100644 src/org/apache/logging/log4j/core/appender/db/jdbc/DataSourceConnectionSource.java create mode 100644 src/org/apache/logging/log4j/core/appender/db/jdbc/FactoryMethodConnectionSource.java create mode 100644 src/org/apache/logging/log4j/core/appender/db/jdbc/JdbcAppender.java create mode 100644 src/org/apache/logging/log4j/core/appender/db/jdbc/JdbcDatabaseManager.java create mode 100644 src/org/apache/logging/log4j/core/appender/db/jpa/AbstractLogEventWrapperEntity.java create mode 100644 src/org/apache/logging/log4j/core/appender/db/jpa/BasicLogEventEntity.java create mode 100644 src/org/apache/logging/log4j/core/appender/db/jpa/JpaAppender.java create mode 100644 src/org/apache/logging/log4j/core/appender/db/jpa/JpaDatabaseManager.java create mode 100644 src/org/apache/logging/log4j/core/appender/db/jpa/converter/ContextMapAttributeConverter.java create mode 100644 src/org/apache/logging/log4j/core/appender/db/jpa/converter/ContextMapJsonAttributeConverter.java create mode 100644 src/org/apache/logging/log4j/core/appender/db/jpa/converter/ContextStackAttributeConverter.java create mode 100644 src/org/apache/logging/log4j/core/appender/db/jpa/converter/ContextStackJsonAttributeConverter.java create mode 100644 src/org/apache/logging/log4j/core/appender/db/jpa/converter/LevelAttributeConverter.java create mode 100644 src/org/apache/logging/log4j/core/appender/db/jpa/converter/MarkerAttributeConverter.java create mode 100644 src/org/apache/logging/log4j/core/appender/db/jpa/converter/MessageAttributeConverter.java create mode 100644 src/org/apache/logging/log4j/core/appender/db/jpa/converter/StackTraceElementAttributeConverter.java create mode 100644 src/org/apache/logging/log4j/core/appender/db/jpa/converter/ThrowableAttributeConverter.java create mode 100644 src/org/apache/logging/log4j/core/appender/jms/JmsQueueAppender.java create mode 100644 src/org/apache/logging/log4j/core/appender/jms/JmsTopicAppender.java create mode 100644 src/org/apache/logging/log4j/core/appender/rewrite/MapRewritePolicy.java create mode 100644 src/org/apache/logging/log4j/core/appender/rewrite/PropertiesRewritePolicy.java create mode 100644 src/org/apache/logging/log4j/core/appender/rewrite/RewriteAppender.java create mode 100644 src/org/apache/logging/log4j/core/appender/rewrite/RewritePolicy.java create mode 100644 src/org/apache/logging/log4j/core/appender/rolling/AbstractRolloverStrategy.java create mode 100644 src/org/apache/logging/log4j/core/appender/rolling/CompositeTriggeringPolicy.java create mode 100644 src/org/apache/logging/log4j/core/appender/rolling/DefaultRolloverStrategy.java create mode 100644 src/org/apache/logging/log4j/core/appender/rolling/OnStartupTriggeringPolicy.java create mode 100644 src/org/apache/logging/log4j/core/appender/rolling/PatternProcessor.java create mode 100644 src/org/apache/logging/log4j/core/appender/rolling/RollingFileManager.java create mode 100644 src/org/apache/logging/log4j/core/appender/rolling/RollingRandomAccessFileManager.java create mode 100644 src/org/apache/logging/log4j/core/appender/rolling/RolloverDescription.java create mode 100644 src/org/apache/logging/log4j/core/appender/rolling/RolloverDescriptionImpl.java create mode 100644 src/org/apache/logging/log4j/core/appender/rolling/RolloverFrequency.java create mode 100644 src/org/apache/logging/log4j/core/appender/rolling/RolloverStrategy.java create mode 100644 src/org/apache/logging/log4j/core/appender/rolling/SizeBasedTriggeringPolicy.java create mode 100644 src/org/apache/logging/log4j/core/appender/rolling/TimeBasedTriggeringPolicy.java create mode 100644 src/org/apache/logging/log4j/core/appender/rolling/TriggeringPolicy.java create mode 100644 src/org/apache/logging/log4j/core/appender/rolling/action/AbstractAction.java create mode 100644 src/org/apache/logging/log4j/core/appender/rolling/action/Action.java create mode 100644 src/org/apache/logging/log4j/core/appender/rolling/action/CompositeAction.java create mode 100644 src/org/apache/logging/log4j/core/appender/rolling/action/FileRenameAction.java create mode 100644 src/org/apache/logging/log4j/core/appender/rolling/action/GzCompressAction.java create mode 100644 src/org/apache/logging/log4j/core/appender/rolling/action/ZipCompressAction.java create mode 100644 src/org/apache/logging/log4j/core/appender/routing/Route.java create mode 100644 src/org/apache/logging/log4j/core/appender/routing/Routes.java create mode 100644 src/org/apache/logging/log4j/core/appender/routing/RoutingAppender.java create mode 100644 src/org/apache/logging/log4j/core/async/AsyncLogger.java create mode 100644 src/org/apache/logging/log4j/core/async/AsyncLoggerConfig.java create mode 100644 src/org/apache/logging/log4j/core/async/AsyncLoggerConfigHelper.java create mode 100644 src/org/apache/logging/log4j/core/async/AsyncLoggerContext.java create mode 100644 src/org/apache/logging/log4j/core/async/AsyncLoggerContextSelector.java create mode 100644 src/org/apache/logging/log4j/core/async/DaemonThreadFactory.java create mode 100644 src/org/apache/logging/log4j/core/async/RingBufferLogEvent.java create mode 100644 src/org/apache/logging/log4j/core/async/RingBufferLogEventHandler.java create mode 100644 src/org/apache/logging/log4j/core/async/RingBufferLogEventTranslator.java create mode 100644 src/org/apache/logging/log4j/core/config/AbstractConfiguration.java create mode 100644 src/org/apache/logging/log4j/core/config/AppenderControl.java create mode 100644 src/org/apache/logging/log4j/core/config/AppenderRef.java create mode 100644 src/org/apache/logging/log4j/core/config/AppendersPlugin.java create mode 100644 src/org/apache/logging/log4j/core/config/Configuration.java create mode 100644 src/org/apache/logging/log4j/core/config/ConfigurationException.java create mode 100644 src/org/apache/logging/log4j/core/config/ConfigurationFactory.java create mode 100644 src/org/apache/logging/log4j/core/config/ConfigurationListener.java create mode 100644 src/org/apache/logging/log4j/core/config/ConfigurationMonitor.java create mode 100644 src/org/apache/logging/log4j/core/config/ConfigurationSource.java create mode 100644 src/org/apache/logging/log4j/core/config/Configurator.java create mode 100644 src/org/apache/logging/log4j/core/config/DefaultAdvertiser.java create mode 100644 src/org/apache/logging/log4j/core/config/DefaultConfiguration.java create mode 100644 src/org/apache/logging/log4j/core/config/DefaultConfigurationMonitor.java create mode 100644 src/org/apache/logging/log4j/core/config/FileConfigurationMonitor.java create mode 100644 src/org/apache/logging/log4j/core/config/LoggerConfig.java create mode 100644 src/org/apache/logging/log4j/core/config/Loggers.java create mode 100644 src/org/apache/logging/log4j/core/config/LoggersPlugin.java create mode 100644 src/org/apache/logging/log4j/core/config/Node.java create mode 100644 src/org/apache/logging/log4j/core/config/NullConfiguration.java create mode 100644 src/org/apache/logging/log4j/core/config/Order.java create mode 100644 src/org/apache/logging/log4j/core/config/PropertiesPlugin.java create mode 100644 src/org/apache/logging/log4j/core/config/Property.java create mode 100644 src/org/apache/logging/log4j/core/config/Reconfigurable.java create mode 100644 src/org/apache/logging/log4j/core/config/json/JsonConfiguration.java create mode 100644 src/org/apache/logging/log4j/core/config/json/JsonConfigurationFactory.java create mode 100644 src/org/apache/logging/log4j/core/config/plugins/Plugin.java create mode 100644 src/org/apache/logging/log4j/core/config/plugins/PluginAliases.java create mode 100644 src/org/apache/logging/log4j/core/config/plugins/PluginAttribute.java create mode 100644 src/org/apache/logging/log4j/core/config/plugins/PluginBuilderAttribute.java create mode 100644 src/org/apache/logging/log4j/core/config/plugins/PluginBuilderFactory.java create mode 100644 src/org/apache/logging/log4j/core/config/plugins/PluginConfiguration.java create mode 100644 src/org/apache/logging/log4j/core/config/plugins/PluginElement.java create mode 100644 src/org/apache/logging/log4j/core/config/plugins/PluginFactory.java create mode 100644 src/org/apache/logging/log4j/core/config/plugins/PluginNode.java create mode 100644 src/org/apache/logging/log4j/core/config/plugins/PluginValue.java create mode 100644 src/org/apache/logging/log4j/core/config/plugins/PluginVisitorStrategy.java create mode 100644 src/org/apache/logging/log4j/core/config/plugins/osgi/Activator.java create mode 100644 src/org/apache/logging/log4j/core/config/plugins/processor/PluginCache.java create mode 100644 src/org/apache/logging/log4j/core/config/plugins/processor/PluginEntry.java create mode 100644 src/org/apache/logging/log4j/core/config/plugins/processor/PluginProcessor.java create mode 100644 src/org/apache/logging/log4j/core/config/plugins/util/PluginBuilder.java create mode 100644 src/org/apache/logging/log4j/core/config/plugins/util/PluginManager.java create mode 100644 src/org/apache/logging/log4j/core/config/plugins/util/PluginRegistry.java create mode 100644 src/org/apache/logging/log4j/core/config/plugins/util/PluginType.java create mode 100644 src/org/apache/logging/log4j/core/config/plugins/util/ResolverUtil.java create mode 100644 src/org/apache/logging/log4j/core/config/plugins/util/TypeConverter.java create mode 100644 src/org/apache/logging/log4j/core/config/plugins/util/TypeConverters.java create mode 100644 src/org/apache/logging/log4j/core/config/plugins/visitors/AbstractPluginVisitor.java create mode 100644 src/org/apache/logging/log4j/core/config/plugins/visitors/PluginAttributeVisitor.java create mode 100644 src/org/apache/logging/log4j/core/config/plugins/visitors/PluginBuilderAttributeVisitor.java create mode 100644 src/org/apache/logging/log4j/core/config/plugins/visitors/PluginConfigurationVisitor.java create mode 100644 src/org/apache/logging/log4j/core/config/plugins/visitors/PluginElementVisitor.java create mode 100644 src/org/apache/logging/log4j/core/config/plugins/visitors/PluginNodeVisitor.java create mode 100644 src/org/apache/logging/log4j/core/config/plugins/visitors/PluginValueVisitor.java create mode 100644 src/org/apache/logging/log4j/core/config/plugins/visitors/PluginVisitor.java create mode 100644 src/org/apache/logging/log4j/core/config/plugins/visitors/PluginVisitors.java create mode 100644 src/org/apache/logging/log4j/core/config/status/StatusConfiguration.java create mode 100644 src/org/apache/logging/log4j/core/config/xml/XmlConfiguration.java create mode 100644 src/org/apache/logging/log4j/core/config/xml/XmlConfigurationFactory.java create mode 100644 src/org/apache/logging/log4j/core/config/yaml/YamlConfiguration.java create mode 100644 src/org/apache/logging/log4j/core/config/yaml/YamlConfigurationFactory.java create mode 100644 src/org/apache/logging/log4j/core/filter/AbstractFilter.java create mode 100644 src/org/apache/logging/log4j/core/filter/AbstractFilterable.java create mode 100644 src/org/apache/logging/log4j/core/filter/BurstFilter.java create mode 100644 src/org/apache/logging/log4j/core/filter/CompositeFilter.java create mode 100644 src/org/apache/logging/log4j/core/filter/DynamicThresholdFilter.java create mode 100644 src/org/apache/logging/log4j/core/filter/Filterable.java create mode 100644 src/org/apache/logging/log4j/core/filter/MapFilter.java create mode 100644 src/org/apache/logging/log4j/core/filter/MarkerFilter.java create mode 100644 src/org/apache/logging/log4j/core/filter/RegexFilter.java create mode 100644 src/org/apache/logging/log4j/core/filter/StructuredDataFilter.java create mode 100644 src/org/apache/logging/log4j/core/filter/ThreadContextMapFilter.java create mode 100644 src/org/apache/logging/log4j/core/filter/ThresholdFilter.java create mode 100644 src/org/apache/logging/log4j/core/filter/TimeFilter.java create mode 100644 src/org/apache/logging/log4j/core/impl/ContextAnchor.java create mode 100644 src/org/apache/logging/log4j/core/impl/DefaultLogEventFactory.java create mode 100644 src/org/apache/logging/log4j/core/impl/ExtendedClassInfo.java create mode 100644 src/org/apache/logging/log4j/core/impl/ExtendedStackTraceElement.java create mode 100644 src/org/apache/logging/log4j/core/impl/Log4jContextFactory.java create mode 100644 src/org/apache/logging/log4j/core/impl/Log4jLogEvent.java create mode 100644 src/org/apache/logging/log4j/core/impl/LogEventFactory.java create mode 100644 src/org/apache/logging/log4j/core/impl/ReflectiveCallerClassUtility.java create mode 100644 src/org/apache/logging/log4j/core/impl/ThrowableFormatOptions.java create mode 100644 src/org/apache/logging/log4j/core/impl/ThrowableProxy.java create mode 100644 src/org/apache/logging/log4j/core/jackson/ExtendedStackTraceElementMixIn.java create mode 100644 src/org/apache/logging/log4j/core/jackson/Initializers.java create mode 100644 src/org/apache/logging/log4j/core/jackson/JsonConstants.java create mode 100644 src/org/apache/logging/log4j/core/jackson/LevelMixIn.java create mode 100644 src/org/apache/logging/log4j/core/jackson/ListOfMapEntryDeserializer.java create mode 100644 src/org/apache/logging/log4j/core/jackson/ListOfMapEntrySerializer.java create mode 100644 src/org/apache/logging/log4j/core/jackson/Log4jJsonModule.java create mode 100644 src/org/apache/logging/log4j/core/jackson/Log4jJsonObjectMapper.java create mode 100644 src/org/apache/logging/log4j/core/jackson/Log4jStackTraceElementDeserializer.java create mode 100644 src/org/apache/logging/log4j/core/jackson/Log4jXmlModule.java create mode 100644 src/org/apache/logging/log4j/core/jackson/Log4jXmlObjectMapper.java create mode 100644 src/org/apache/logging/log4j/core/jackson/LogEventMixIn.java create mode 100644 src/org/apache/logging/log4j/core/jackson/MapEntry.java create mode 100644 src/org/apache/logging/log4j/core/jackson/MarkerMixIn.java create mode 100644 src/org/apache/logging/log4j/core/jackson/MessageSerializer.java create mode 100644 src/org/apache/logging/log4j/core/jackson/MutableThreadContextStackDeserializer.java create mode 100644 src/org/apache/logging/log4j/core/jackson/SimpleMessageDeserializer.java create mode 100644 src/org/apache/logging/log4j/core/jackson/StackTraceElementMixIn.java create mode 100644 src/org/apache/logging/log4j/core/jackson/ThrowableProxyMixIn.java create mode 100644 src/org/apache/logging/log4j/core/jackson/XmlConstants.java create mode 100644 src/org/apache/logging/log4j/core/jmx/AppenderAdmin.java create mode 100644 src/org/apache/logging/log4j/core/jmx/AppenderAdminMBean.java create mode 100644 src/org/apache/logging/log4j/core/jmx/AsyncAppenderAdmin.java create mode 100644 src/org/apache/logging/log4j/core/jmx/AsyncAppenderAdminMBean.java create mode 100644 src/org/apache/logging/log4j/core/jmx/ContextSelectorAdmin.java create mode 100644 src/org/apache/logging/log4j/core/jmx/ContextSelectorAdminMBean.java create mode 100644 src/org/apache/logging/log4j/core/jmx/LoggerConfigAdmin.java create mode 100644 src/org/apache/logging/log4j/core/jmx/LoggerConfigAdminMBean.java create mode 100644 src/org/apache/logging/log4j/core/jmx/LoggerContextAdmin.java create mode 100644 src/org/apache/logging/log4j/core/jmx/LoggerContextAdminMBean.java create mode 100644 src/org/apache/logging/log4j/core/jmx/RingBufferAdmin.java create mode 100644 src/org/apache/logging/log4j/core/jmx/RingBufferAdminMBean.java create mode 100644 src/org/apache/logging/log4j/core/jmx/Server.java create mode 100644 src/org/apache/logging/log4j/core/jmx/StatusLoggerAdmin.java create mode 100644 src/org/apache/logging/log4j/core/jmx/StatusLoggerAdminMBean.java create mode 100644 src/org/apache/logging/log4j/core/layout/AbstractJacksonLayout.java create mode 100644 src/org/apache/logging/log4j/core/layout/AbstractLayout.java create mode 100644 src/org/apache/logging/log4j/core/layout/AbstractStringLayout.java create mode 100644 src/org/apache/logging/log4j/core/layout/HtmlLayout.java create mode 100644 src/org/apache/logging/log4j/core/layout/JacksonFactory.java create mode 100644 src/org/apache/logging/log4j/core/layout/JsonLayout.java create mode 100644 src/org/apache/logging/log4j/core/layout/LoggerFields.java create mode 100644 src/org/apache/logging/log4j/core/layout/PatternLayout.java create mode 100644 src/org/apache/logging/log4j/core/layout/Rfc5424Layout.java create mode 100644 src/org/apache/logging/log4j/core/layout/SerializedLayout.java create mode 100644 src/org/apache/logging/log4j/core/layout/SyslogLayout.java create mode 100644 src/org/apache/logging/log4j/core/layout/XmlLayout.java create mode 100644 src/org/apache/logging/log4j/core/lookup/ContextMapLookup.java create mode 100644 src/org/apache/logging/log4j/core/lookup/DateLookup.java create mode 100644 src/org/apache/logging/log4j/core/lookup/EnvironmentLookup.java create mode 100644 src/org/apache/logging/log4j/core/lookup/Interpolator.java create mode 100644 src/org/apache/logging/log4j/core/lookup/JndiLookup.java create mode 100644 src/org/apache/logging/log4j/core/lookup/MapLookup.java create mode 100644 src/org/apache/logging/log4j/core/lookup/ResourceBundleLookup.java create mode 100644 src/org/apache/logging/log4j/core/lookup/StrLookup.java create mode 100644 src/org/apache/logging/log4j/core/lookup/StrMatcher.java create mode 100644 src/org/apache/logging/log4j/core/lookup/StrSubstitutor.java create mode 100644 src/org/apache/logging/log4j/core/lookup/StructuredDataLookup.java create mode 100644 src/org/apache/logging/log4j/core/lookup/SystemPropertiesLookup.java create mode 100644 src/org/apache/logging/log4j/core/net/AbstractSocketManager.java create mode 100644 src/org/apache/logging/log4j/core/net/Advertiser.java create mode 100644 src/org/apache/logging/log4j/core/net/DatagramOutputStream.java create mode 100644 src/org/apache/logging/log4j/core/net/DatagramSocketManager.java create mode 100644 src/org/apache/logging/log4j/core/net/Facility.java create mode 100644 src/org/apache/logging/log4j/core/net/MimeMessageBuilder.java create mode 100644 src/org/apache/logging/log4j/core/net/MulticastDnsAdvertiser.java create mode 100644 src/org/apache/logging/log4j/core/net/Priority.java create mode 100644 src/org/apache/logging/log4j/core/net/Protocol.java create mode 100644 src/org/apache/logging/log4j/core/net/Severity.java create mode 100644 src/org/apache/logging/log4j/core/net/SmtpManager.java create mode 100644 src/org/apache/logging/log4j/core/net/SslSocketManager.java create mode 100644 src/org/apache/logging/log4j/core/net/TcpSocketManager.java create mode 100644 src/org/apache/logging/log4j/core/net/jms/AbstractJmsManager.java create mode 100644 src/org/apache/logging/log4j/core/net/jms/AbstractJmsReceiver.java create mode 100644 src/org/apache/logging/log4j/core/net/jms/JmsQueueManager.java create mode 100644 src/org/apache/logging/log4j/core/net/jms/JmsQueueReceiver.java create mode 100644 src/org/apache/logging/log4j/core/net/jms/JmsTopicManager.java create mode 100644 src/org/apache/logging/log4j/core/net/jms/JmsTopicReceiver.java create mode 100644 src/org/apache/logging/log4j/core/net/server/AbstractLogEventBridge.java create mode 100644 src/org/apache/logging/log4j/core/net/server/AbstractSocketServer.java create mode 100644 src/org/apache/logging/log4j/core/net/server/InputStreamLogEventBridge.java create mode 100644 src/org/apache/logging/log4j/core/net/server/JsonInputStreamLogEventBridge.java create mode 100644 src/org/apache/logging/log4j/core/net/server/LogEventBridge.java create mode 100644 src/org/apache/logging/log4j/core/net/server/ObjectInputStreamLogEventBridge.java create mode 100644 src/org/apache/logging/log4j/core/net/server/SecureTcpSocketServer.java create mode 100644 src/org/apache/logging/log4j/core/net/server/TcpSocketServer.java create mode 100644 src/org/apache/logging/log4j/core/net/server/UdpSocketServer.java create mode 100644 src/org/apache/logging/log4j/core/net/server/XmlInputStreamLogEventBridge.java create mode 100644 src/org/apache/logging/log4j/core/net/ssl/AbstractKeyStoreConfiguration.java create mode 100644 src/org/apache/logging/log4j/core/net/ssl/KeyStoreConfiguration.java create mode 100644 src/org/apache/logging/log4j/core/net/ssl/KeyStoreConfigurationException.java create mode 100644 src/org/apache/logging/log4j/core/net/ssl/SslConfiguration.java create mode 100644 src/org/apache/logging/log4j/core/net/ssl/SslConfigurationDefaults.java create mode 100644 src/org/apache/logging/log4j/core/net/ssl/SslConfigurationException.java create mode 100644 src/org/apache/logging/log4j/core/net/ssl/StoreConfiguration.java create mode 100644 src/org/apache/logging/log4j/core/net/ssl/StoreConfigurationException.java create mode 100644 src/org/apache/logging/log4j/core/net/ssl/TrustStoreConfiguration.java create mode 100644 src/org/apache/logging/log4j/core/net/ssl/TrustStoreConfigurationException.java create mode 100644 src/org/apache/logging/log4j/core/pattern/AbstractPatternConverter.java create mode 100644 src/org/apache/logging/log4j/core/pattern/AbstractStyleNameConverter.java create mode 100644 src/org/apache/logging/log4j/core/pattern/AnsiConverter.java create mode 100644 src/org/apache/logging/log4j/core/pattern/AnsiEscape.java create mode 100644 src/org/apache/logging/log4j/core/pattern/ArrayPatternConverter.java create mode 100644 src/org/apache/logging/log4j/core/pattern/CachedDateFormat.java create mode 100644 src/org/apache/logging/log4j/core/pattern/ClassNamePatternConverter.java create mode 100644 src/org/apache/logging/log4j/core/pattern/ConverterKeys.java create mode 100644 src/org/apache/logging/log4j/core/pattern/DatePatternConverter.java create mode 100644 src/org/apache/logging/log4j/core/pattern/EncodingPatternConverter.java create mode 100644 src/org/apache/logging/log4j/core/pattern/ExtendedThrowablePatternConverter.java create mode 100644 src/org/apache/logging/log4j/core/pattern/FileDatePatternConverter.java create mode 100644 src/org/apache/logging/log4j/core/pattern/FileLocationPatternConverter.java create mode 100644 src/org/apache/logging/log4j/core/pattern/FormattingInfo.java create mode 100644 src/org/apache/logging/log4j/core/pattern/FullLocationPatternConverter.java create mode 100644 src/org/apache/logging/log4j/core/pattern/HighlightConverter.java create mode 100644 src/org/apache/logging/log4j/core/pattern/IntegerPatternConverter.java create mode 100644 src/org/apache/logging/log4j/core/pattern/LevelPatternConverter.java create mode 100644 src/org/apache/logging/log4j/core/pattern/LineLocationPatternConverter.java create mode 100644 src/org/apache/logging/log4j/core/pattern/LineSeparatorPatternConverter.java create mode 100644 src/org/apache/logging/log4j/core/pattern/LiteralPatternConverter.java create mode 100644 src/org/apache/logging/log4j/core/pattern/LogEventPatternConverter.java create mode 100644 src/org/apache/logging/log4j/core/pattern/LoggerPatternConverter.java create mode 100644 src/org/apache/logging/log4j/core/pattern/MapPatternConverter.java create mode 100644 src/org/apache/logging/log4j/core/pattern/MarkerPatternConverter.java create mode 100644 src/org/apache/logging/log4j/core/pattern/MdcPatternConverter.java create mode 100644 src/org/apache/logging/log4j/core/pattern/MessagePatternConverter.java create mode 100644 src/org/apache/logging/log4j/core/pattern/MethodLocationPatternConverter.java create mode 100644 src/org/apache/logging/log4j/core/pattern/NameAbbreviator.java create mode 100644 src/org/apache/logging/log4j/core/pattern/NamePatternConverter.java create mode 100644 src/org/apache/logging/log4j/core/pattern/NdcPatternConverter.java create mode 100644 src/org/apache/logging/log4j/core/pattern/PatternConverter.java create mode 100644 src/org/apache/logging/log4j/core/pattern/PatternFormatter.java create mode 100644 src/org/apache/logging/log4j/core/pattern/PatternParser.java create mode 100644 src/org/apache/logging/log4j/core/pattern/RegexReplacement.java create mode 100644 src/org/apache/logging/log4j/core/pattern/RegexReplacementConverter.java create mode 100644 src/org/apache/logging/log4j/core/pattern/RelativeTimePatternConverter.java create mode 100644 src/org/apache/logging/log4j/core/pattern/RootThrowablePatternConverter.java create mode 100644 src/org/apache/logging/log4j/core/pattern/SequenceNumberPatternConverter.java create mode 100644 src/org/apache/logging/log4j/core/pattern/StyleConverter.java create mode 100644 src/org/apache/logging/log4j/core/pattern/ThreadPatternConverter.java create mode 100644 src/org/apache/logging/log4j/core/pattern/ThrowablePatternConverter.java create mode 100644 src/org/apache/logging/log4j/core/pattern/UuidPatternConverter.java create mode 100644 src/org/apache/logging/log4j/core/selector/BasicContextSelector.java create mode 100644 src/org/apache/logging/log4j/core/selector/ClassLoaderContextSelector.java create mode 100644 src/org/apache/logging/log4j/core/selector/ContextSelector.java create mode 100644 src/org/apache/logging/log4j/core/selector/JndiContextSelector.java create mode 100644 src/org/apache/logging/log4j/core/selector/NamedContextSelector.java create mode 100644 src/org/apache/logging/log4j/core/tools/Generate.java create mode 100644 src/org/apache/logging/log4j/core/util/Assert.java create mode 100644 src/org/apache/logging/log4j/core/util/Booleans.java create mode 100644 src/org/apache/logging/log4j/core/util/Builder.java create mode 100644 src/org/apache/logging/log4j/core/util/BundleResourceLoader.java create mode 100644 src/org/apache/logging/log4j/core/util/CachedClock.java create mode 100644 src/org/apache/logging/log4j/core/util/Charsets.java create mode 100644 src/org/apache/logging/log4j/core/util/ClassLoaderResourceLoader.java create mode 100644 src/org/apache/logging/log4j/core/util/Clock.java create mode 100644 src/org/apache/logging/log4j/core/util/ClockFactory.java create mode 100644 src/org/apache/logging/log4j/core/util/Closer.java create mode 100644 src/org/apache/logging/log4j/core/util/CoarseCachedClock.java create mode 100644 src/org/apache/logging/log4j/core/util/Constants.java create mode 100644 src/org/apache/logging/log4j/core/util/CyclicBuffer.java create mode 100644 src/org/apache/logging/log4j/core/util/FileUtils.java create mode 100644 src/org/apache/logging/log4j/core/util/Integers.java create mode 100644 src/org/apache/logging/log4j/core/util/JndiCloser.java create mode 100644 src/org/apache/logging/log4j/core/util/KeyValuePair.java create mode 100644 src/org/apache/logging/log4j/core/util/Loader.java create mode 100644 src/org/apache/logging/log4j/core/util/NameUtil.java create mode 100644 src/org/apache/logging/log4j/core/util/NetUtils.java create mode 100644 src/org/apache/logging/log4j/core/util/OptionConverter.java create mode 100644 src/org/apache/logging/log4j/core/util/Patterns.java create mode 100644 src/org/apache/logging/log4j/core/util/ResourceLoader.java create mode 100644 src/org/apache/logging/log4j/core/util/SecretKeyProvider.java create mode 100644 src/org/apache/logging/log4j/core/util/SetUtils.java create mode 100644 src/org/apache/logging/log4j/core/util/SystemClock.java create mode 100644 src/org/apache/logging/log4j/core/util/Throwables.java create mode 100644 src/org/apache/logging/log4j/core/util/Transform.java create mode 100644 src/org/apache/logging/log4j/core/util/UuidUtil.java create mode 100644 src/org/apache/logging/log4j/message/AbstractMessageFactory.java create mode 100644 src/org/apache/logging/log4j/message/BasicThreadInformation.java create mode 100644 src/org/apache/logging/log4j/message/ExtendedThreadInformation.java create mode 100644 src/org/apache/logging/log4j/message/FormattedMessage.java create mode 100644 src/org/apache/logging/log4j/message/FormattedMessageFactory.java create mode 100644 src/org/apache/logging/log4j/message/LocalizedMessage.java create mode 100644 src/org/apache/logging/log4j/message/LocalizedMessageFactory.java create mode 100644 src/org/apache/logging/log4j/message/LoggerNameAwareMessage.java create mode 100644 src/org/apache/logging/log4j/message/MapMessage.java create mode 100644 src/org/apache/logging/log4j/message/Message.java create mode 100644 src/org/apache/logging/log4j/message/MessageFactory.java create mode 100644 src/org/apache/logging/log4j/message/MessageFormatMessage.java create mode 100644 src/org/apache/logging/log4j/message/MessageFormatMessageFactory.java create mode 100644 src/org/apache/logging/log4j/message/MultiformatMessage.java create mode 100644 src/org/apache/logging/log4j/message/ObjectMessage.java create mode 100644 src/org/apache/logging/log4j/message/ParameterizedMessage.java create mode 100644 src/org/apache/logging/log4j/message/ParameterizedMessageFactory.java create mode 100644 src/org/apache/logging/log4j/message/SimpleMessage.java create mode 100644 src/org/apache/logging/log4j/message/StringFormattedMessage.java create mode 100644 src/org/apache/logging/log4j/message/StringFormatterMessageFactory.java create mode 100644 src/org/apache/logging/log4j/message/StructuredDataId.java create mode 100644 src/org/apache/logging/log4j/message/StructuredDataMessage.java create mode 100644 src/org/apache/logging/log4j/message/ThreadDumpMessage.java create mode 100644 src/org/apache/logging/log4j/message/ThreadInformation.java create mode 100644 src/org/apache/logging/log4j/message/TimestampMessage.java create mode 100644 src/org/apache/logging/log4j/simple/SimpleLogger.java create mode 100644 src/org/apache/logging/log4j/simple/SimpleLoggerContext.java create mode 100644 src/org/apache/logging/log4j/simple/SimpleLoggerContextFactory.java create mode 100644 src/org/apache/logging/log4j/spi/AbstractLogger.java create mode 100644 src/org/apache/logging/log4j/spi/DefaultThreadContextMap.java create mode 100644 src/org/apache/logging/log4j/spi/DefaultThreadContextStack.java create mode 100644 src/org/apache/logging/log4j/spi/ExtendedLogger.java create mode 100644 src/org/apache/logging/log4j/spi/ExtendedLoggerWrapper.java create mode 100644 src/org/apache/logging/log4j/spi/LoggerContext.java create mode 100644 src/org/apache/logging/log4j/spi/LoggerContextFactory.java create mode 100644 src/org/apache/logging/log4j/spi/MutableThreadContextStack.java create mode 100644 src/org/apache/logging/log4j/spi/Provider.java create mode 100644 src/org/apache/logging/log4j/spi/StandardLevel.java create mode 100644 src/org/apache/logging/log4j/spi/ThreadContextMap.java create mode 100644 src/org/apache/logging/log4j/spi/ThreadContextStack.java create mode 100644 src/org/apache/logging/log4j/status/StatusConsoleListener.java create mode 100644 src/org/apache/logging/log4j/status/StatusData.java create mode 100644 src/org/apache/logging/log4j/status/StatusListener.java create mode 100644 src/org/apache/logging/log4j/status/StatusLogger.java create mode 100644 src/org/apache/logging/log4j/util/Activator.java create mode 100644 src/org/apache/logging/log4j/util/EnglishEnums.java create mode 100644 src/org/apache/logging/log4j/util/LoaderUtil.java create mode 100644 src/org/apache/logging/log4j/util/PropertiesUtil.java create mode 100644 src/org/apache/logging/log4j/util/ProviderUtil.java create mode 100644 src/org/apache/logging/log4j/util/Strings.java create mode 100644 src/org/jivesoftware/smack/AbstractConnectionClosedListener.java create mode 100644 src/org/jivesoftware/smack/AbstractConnectionListener.java create mode 100644 src/org/jivesoftware/smack/AbstractXMPPConnection.java create mode 100644 src/org/jivesoftware/smack/ConnectionConfiguration.java create mode 100644 src/org/jivesoftware/smack/ConnectionCreationListener.java create mode 100644 src/org/jivesoftware/smack/ConnectionListener.java create mode 100644 src/org/jivesoftware/smack/ExceptionCallback.java create mode 100644 src/org/jivesoftware/smack/Manager.java create mode 100644 src/org/jivesoftware/smack/MessageListener.java create mode 100644 src/org/jivesoftware/smack/PacketCollector.java create mode 100644 src/org/jivesoftware/smack/PacketListener.java create mode 100644 src/org/jivesoftware/smack/PresenceListener.java create mode 100644 src/org/jivesoftware/smack/ReconnectionManager.java create mode 100644 src/org/jivesoftware/smack/SASLAuthentication.java create mode 100644 src/org/jivesoftware/smack/SmackConfiguration.java create mode 100644 src/org/jivesoftware/smack/SmackException.java create mode 100644 src/org/jivesoftware/smack/SmackInitialization.java create mode 100644 src/org/jivesoftware/smack/StanzaListener.java create mode 100644 src/org/jivesoftware/smack/SynchronizationPoint.java create mode 100644 src/org/jivesoftware/smack/XMPPConnection.java create mode 100644 src/org/jivesoftware/smack/XMPPConnectionRegistry.java create mode 100644 src/org/jivesoftware/smack/XMPPException.java create mode 100644 src/org/jivesoftware/smack/compress/packet/Compress.java create mode 100644 src/org/jivesoftware/smack/compress/packet/Compressed.java create mode 100644 src/org/jivesoftware/smack/compression/Java7ZlibInputOutputStream.java create mode 100644 src/org/jivesoftware/smack/compression/XMPPInputOutputStream.java create mode 100644 src/org/jivesoftware/smack/debugger/AbstractDebugger.java create mode 100644 src/org/jivesoftware/smack/debugger/ConsoleDebugger.java create mode 100644 src/org/jivesoftware/smack/debugger/JulDebugger.java create mode 100644 src/org/jivesoftware/smack/debugger/ReflectionDebuggerFactory.java create mode 100644 src/org/jivesoftware/smack/debugger/SmackDebugger.java create mode 100644 src/org/jivesoftware/smack/debugger/SmackDebuggerFactory.java create mode 100644 src/org/jivesoftware/smack/filter/AbstractListFilter.java create mode 100644 src/org/jivesoftware/smack/filter/AndFilter.java create mode 100644 src/org/jivesoftware/smack/filter/FlexibleStanzaTypeFilter.java create mode 100644 src/org/jivesoftware/smack/filter/FromMatchesFilter.java create mode 100644 src/org/jivesoftware/smack/filter/IQReplyFilter.java create mode 100644 src/org/jivesoftware/smack/filter/IQResultReplyFilter.java create mode 100644 src/org/jivesoftware/smack/filter/IQTypeFilter.java create mode 100644 src/org/jivesoftware/smack/filter/MessageTypeFilter.java create mode 100644 src/org/jivesoftware/smack/filter/MessageWithBodiesFilter.java create mode 100644 src/org/jivesoftware/smack/filter/MessageWithSubjectFilter.java create mode 100644 src/org/jivesoftware/smack/filter/NotFilter.java create mode 100644 src/org/jivesoftware/smack/filter/OrFilter.java create mode 100644 src/org/jivesoftware/smack/filter/PacketExtensionFilter.java create mode 100644 src/org/jivesoftware/smack/filter/PacketFilter.java create mode 100644 src/org/jivesoftware/smack/filter/PacketIDFilter.java create mode 100644 src/org/jivesoftware/smack/filter/PacketTypeFilter.java create mode 100644 src/org/jivesoftware/smack/filter/PresenceTypeFilter.java create mode 100644 src/org/jivesoftware/smack/filter/StanzaExtensionFilter.java create mode 100644 src/org/jivesoftware/smack/filter/StanzaFilter.java create mode 100644 src/org/jivesoftware/smack/filter/StanzaIdFilter.java create mode 100644 src/org/jivesoftware/smack/filter/StanzaTypeFilter.java create mode 100644 src/org/jivesoftware/smack/filter/ThreadFilter.java create mode 100644 src/org/jivesoftware/smack/filter/ToFilter.java create mode 100644 src/org/jivesoftware/smack/initializer/SmackInitializer.java create mode 100644 src/org/jivesoftware/smack/initializer/UrlInitializer.java create mode 100644 src/org/jivesoftware/smack/initializer/VmArgInitializer.java create mode 100644 src/org/jivesoftware/smack/iqrequest/AbstractIqRequestHandler.java create mode 100644 src/org/jivesoftware/smack/iqrequest/IQRequestHandler.java create mode 100644 src/org/jivesoftware/smack/packet/AbstractError.java create mode 100644 src/org/jivesoftware/smack/packet/Bind.java create mode 100644 src/org/jivesoftware/smack/packet/DefaultExtensionElement.java create mode 100644 src/org/jivesoftware/smack/packet/Element.java create mode 100644 src/org/jivesoftware/smack/packet/EmptyResultIQ.java create mode 100644 src/org/jivesoftware/smack/packet/ErrorIQ.java create mode 100644 src/org/jivesoftware/smack/packet/ExtensionElement.java create mode 100644 src/org/jivesoftware/smack/packet/FullStreamElement.java create mode 100644 src/org/jivesoftware/smack/packet/IQ.java create mode 100644 src/org/jivesoftware/smack/packet/Mechanisms.java create mode 100644 src/org/jivesoftware/smack/packet/Message.java create mode 100644 src/org/jivesoftware/smack/packet/NamedElement.java create mode 100644 src/org/jivesoftware/smack/packet/Packet.java create mode 100644 src/org/jivesoftware/smack/packet/PacketExtension.java create mode 100644 src/org/jivesoftware/smack/packet/PlainStreamElement.java create mode 100644 src/org/jivesoftware/smack/packet/Presence.java create mode 100644 src/org/jivesoftware/smack/packet/Session.java create mode 100644 src/org/jivesoftware/smack/packet/SimpleIQ.java create mode 100644 src/org/jivesoftware/smack/packet/Stanza.java create mode 100644 src/org/jivesoftware/smack/packet/StartTls.java create mode 100644 src/org/jivesoftware/smack/packet/StreamError.java create mode 100644 src/org/jivesoftware/smack/packet/StreamOpen.java create mode 100644 src/org/jivesoftware/smack/packet/TopLevelStreamElement.java create mode 100644 src/org/jivesoftware/smack/packet/UnparsedIQ.java create mode 100644 src/org/jivesoftware/smack/packet/XMPPError.java create mode 100644 src/org/jivesoftware/smack/packet/id/StanzaIdUtil.java create mode 100644 src/org/jivesoftware/smack/parsing/ExceptionLoggingCallback.java create mode 100644 src/org/jivesoftware/smack/parsing/ExceptionThrowingCallback.java create mode 100644 src/org/jivesoftware/smack/parsing/ParsingExceptionCallback.java create mode 100644 src/org/jivesoftware/smack/parsing/UnparsablePacket.java create mode 100644 src/org/jivesoftware/smack/provider/AbstractProviderInfo.java create mode 100644 src/org/jivesoftware/smack/provider/BindIQProvider.java create mode 100644 src/org/jivesoftware/smack/provider/EmbeddedExtensionProvider.java create mode 100644 src/org/jivesoftware/smack/provider/ExtensionElementProvider.java create mode 100644 src/org/jivesoftware/smack/provider/ExtensionProviderInfo.java create mode 100644 src/org/jivesoftware/smack/provider/IQProvider.java create mode 100644 src/org/jivesoftware/smack/provider/IQProviderInfo.java create mode 100644 src/org/jivesoftware/smack/provider/IntrospectionProvider.java create mode 100644 src/org/jivesoftware/smack/provider/Provider.java create mode 100644 src/org/jivesoftware/smack/provider/ProviderFileLoader.java create mode 100644 src/org/jivesoftware/smack/provider/ProviderLoader.java create mode 100644 src/org/jivesoftware/smack/provider/ProviderManager.java create mode 100644 src/org/jivesoftware/smack/provider/StreamFeatureProviderInfo.java create mode 100644 src/org/jivesoftware/smack/proxy/DirectSocketFactory.java create mode 100644 src/org/jivesoftware/smack/proxy/HTTPProxySocketFactory.java create mode 100644 src/org/jivesoftware/smack/proxy/ProxyException.java create mode 100644 src/org/jivesoftware/smack/proxy/ProxyInfo.java create mode 100644 src/org/jivesoftware/smack/proxy/Socks4ProxySocketFactory.java create mode 100644 src/org/jivesoftware/smack/proxy/Socks5ProxySocketFactory.java create mode 100644 src/org/jivesoftware/smack/sasl/SASLAnonymous.java create mode 100644 src/org/jivesoftware/smack/sasl/SASLError.java create mode 100644 src/org/jivesoftware/smack/sasl/SASLErrorException.java create mode 100644 src/org/jivesoftware/smack/sasl/SASLMechanism.java create mode 100644 src/org/jivesoftware/smack/sasl/core/SASLXOauth2Mechanism.java create mode 100644 src/org/jivesoftware/smack/sasl/core/SCRAMSHA1Mechanism.java create mode 100644 src/org/jivesoftware/smack/sasl/packet/SaslStreamElements.java create mode 100644 src/org/jivesoftware/smack/util/ArrayBlockingQueueWithShutdown.java create mode 100644 src/org/jivesoftware/smack/util/Async.java create mode 100644 src/org/jivesoftware/smack/util/ByteUtils.java create mode 100644 src/org/jivesoftware/smack/util/DNSUtil.java create mode 100644 src/org/jivesoftware/smack/util/EventManger.java create mode 100644 src/org/jivesoftware/smack/util/FileUtils.java create mode 100644 src/org/jivesoftware/smack/util/LazyStringBuilder.java create mode 100644 src/org/jivesoftware/smack/util/MAC.java create mode 100644 src/org/jivesoftware/smack/util/MD5.java create mode 100644 src/org/jivesoftware/smack/util/MultiMap.java create mode 100644 src/org/jivesoftware/smack/util/NumberUtil.java create mode 100644 src/org/jivesoftware/smack/util/Objects.java create mode 100644 src/org/jivesoftware/smack/util/ObservableReader.java create mode 100644 src/org/jivesoftware/smack/util/ObservableWriter.java create mode 100644 src/org/jivesoftware/smack/util/PacketParserUtils.java create mode 100644 src/org/jivesoftware/smack/util/PacketUtil.java create mode 100644 src/org/jivesoftware/smack/util/ParserUtils.java create mode 100644 src/org/jivesoftware/smack/util/ReaderListener.java create mode 100644 src/org/jivesoftware/smack/util/SHA1.java create mode 100644 src/org/jivesoftware/smack/util/SmackExecutorThreadFactory.java create mode 100644 src/org/jivesoftware/smack/util/StringTransformer.java create mode 100644 src/org/jivesoftware/smack/util/StringUtils.java create mode 100644 src/org/jivesoftware/smack/util/TLSUtils.java create mode 100644 src/org/jivesoftware/smack/util/WriterListener.java create mode 100644 src/org/jivesoftware/smack/util/XmlStringBuilder.java create mode 100644 src/org/jivesoftware/smack/util/dns/DNSResolver.java create mode 100644 src/org/jivesoftware/smack/util/dns/HostAddress.java create mode 100644 src/org/jivesoftware/smack/util/dns/SRVRecord.java create mode 100644 src/org/jivesoftware/smack/util/stringencoder/Base32.java create mode 100644 src/org/jivesoftware/smack/util/stringencoder/Base64.java create mode 100644 src/org/jivesoftware/smack/util/stringencoder/Base64UrlSafeEncoder.java create mode 100644 src/org/jivesoftware/smack/util/stringencoder/StringEncoder.java create mode 100644 src/org/jxmpp/jid/BareJid.java create mode 100644 src/org/jxmpp/jid/DomainBareJid.java create mode 100644 src/org/jxmpp/jid/DomainFullJid.java create mode 100644 src/org/jxmpp/jid/FullJid.java create mode 100644 src/org/jxmpp/jid/Jid.java create mode 100644 src/org/jxmpp/jid/JidWithLocalpart.java create mode 100644 src/org/jxmpp/jid/JidWithResource.java create mode 100644 src/org/jxmpp/jid/impl/AbstractJid.java create mode 100644 src/org/jxmpp/jid/impl/DomainAndResourcepartJid.java create mode 100644 src/org/jxmpp/jid/impl/DomainpartJid.java create mode 100644 src/org/jxmpp/jid/impl/JidCreate.java create mode 100644 src/org/jxmpp/jid/impl/LocalAndDomainpartJid.java create mode 100644 src/org/jxmpp/jid/impl/LocalDomainAndResourcepartJid.java create mode 100644 src/org/jxmpp/jid/parts/Domainpart.java create mode 100644 src/org/jxmpp/jid/parts/Localpart.java create mode 100644 src/org/jxmpp/jid/parts/Part.java create mode 100644 src/org/jxmpp/jid/parts/Resourcepart.java create mode 100644 src/org/jxmpp/jid/util/JidUtil.java create mode 100644 src/org/jxmpp/stringprep/XmppStringPrepUtil.java create mode 100644 src/org/jxmpp/stringprep/XmppStringprep.java create mode 100644 src/org/jxmpp/stringprep/XmppStringprepException.java create mode 100644 src/org/jxmpp/stringprep/simple/SimpleXmppStringprep.java create mode 100644 src/org/jxmpp/util/XmppDateTime.java create mode 100644 src/org/jxmpp/util/XmppStringUtils.java create mode 100644 src/org/jxmpp/util/cache/Cache.java create mode 100644 src/org/jxmpp/util/cache/ExpirationCache.java create mode 100644 src/org/jxmpp/util/cache/LruCache.java create mode 100644 src/org/xmlpull/mxp1/MXParser.java create mode 100644 src/org/xmlpull/mxp1/MXParserCachingStrings.java create mode 100644 src/org/xmlpull/mxp1/MXParserFactory.java create mode 100644 src/org/xmlpull/mxp1/MXParserNonValidating.java create mode 100644 src/org/xmlpull/mxp1_serializer/MXSerializer.java create mode 100644 src/org/xmlpull/v1/XmlPullParser.java create mode 100644 src/org/xmlpull/v1/XmlPullParserException.java create mode 100644 src/org/xmlpull/v1/XmlPullParserFactory.java create mode 100644 src/org/xmlpull/v1/XmlSerializer.java create mode 100644 src/org/xmlpull/v1/builder/Iterable.java create mode 100644 src/org/xmlpull/v1/builder/XmlAttribute.java create mode 100644 src/org/xmlpull/v1/builder/XmlBuilderException.java create mode 100644 src/org/xmlpull/v1/builder/XmlCharacters.java create mode 100644 src/org/xmlpull/v1/builder/XmlComment.java create mode 100644 src/org/xmlpull/v1/builder/XmlContained.java create mode 100644 src/org/xmlpull/v1/builder/XmlContainer.java create mode 100644 src/org/xmlpull/v1/builder/XmlDoctype.java create mode 100644 src/org/xmlpull/v1/builder/XmlDocument.java create mode 100644 src/org/xmlpull/v1/builder/XmlElement.java create mode 100644 src/org/xmlpull/v1/builder/XmlInfosetBuilder.java create mode 100644 src/org/xmlpull/v1/builder/XmlNamespace.java create mode 100644 src/org/xmlpull/v1/builder/XmlNotation.java create mode 100644 src/org/xmlpull/v1/builder/XmlProcessingInstruction.java create mode 100644 src/org/xmlpull/v1/builder/XmlSerializable.java create mode 100644 src/org/xmlpull/v1/builder/XmlUnexpandedEntityReference.java create mode 100644 src/org/xmlpull/v1/builder/XmlUnparsedEntity.java create mode 100644 src/org/xmlpull/v1/builder/adapter/XmlAttributeAdapter.java create mode 100644 src/org/xmlpull/v1/builder/adapter/XmlDocumentAdapter.java create mode 100644 src/org/xmlpull/v1/builder/adapter/XmlElementAdapter.java create mode 100644 src/org/xmlpull/v1/builder/impl/XmlAttributeImpl.java create mode 100644 src/org/xmlpull/v1/builder/impl/XmlCommentImpl.java create mode 100644 src/org/xmlpull/v1/builder/impl/XmlDocumentImpl.java create mode 100644 src/org/xmlpull/v1/builder/impl/XmlElementImpl.java create mode 100644 src/org/xmlpull/v1/builder/impl/XmlInfosetBuilderImpl.java create mode 100644 src/org/xmlpull/v1/builder/impl/XmlNamespaceImpl.java create mode 100644 src/org/xmlpull/v1/dom2_builder/DOM2XmlPullBuilder.java create mode 100644 src/org/xmlpull/v1/parser_pool/XmlPullParserPool.java create mode 100644 src/org/xmlpull/v1/sax2/Driver.java create mode 100644 src/org/xmlpull/v1/util/XmlPullUtil.java create mode 100644 src/org/xmlpull/v1/wrapper/XmlPullParserWrapper.java create mode 100644 src/org/xmlpull/v1/wrapper/XmlPullWrapperFactory.java create mode 100644 src/org/xmlpull/v1/wrapper/XmlSerializerWrapper.java create mode 100644 src/org/xmlpull/v1/wrapper/classic/StaticXmlPullParserWrapper.java create mode 100644 src/org/xmlpull/v1/wrapper/classic/StaticXmlSerializerWrapper.java create mode 100644 src/org/xmlpull/v1/wrapper/classic/XmlPullParserDelegate.java create mode 100644 src/org/xmlpull/v1/wrapper/classic/XmlSerializerDelegate.java create mode 100644 src/org/yaml/snakeyaml/Dumper.java create mode 100644 src/org/yaml/snakeyaml/DumperOptions.java create mode 100644 src/org/yaml/snakeyaml/JavaBeanDumper.java create mode 100644 src/org/yaml/snakeyaml/JavaBeanLoader.java create mode 100644 src/org/yaml/snakeyaml/Loader.java create mode 100644 src/org/yaml/snakeyaml/LoaderOptions.java create mode 100644 src/org/yaml/snakeyaml/TypeDescription.java create mode 100644 src/org/yaml/snakeyaml/Yaml.java create mode 100644 src/org/yaml/snakeyaml/composer/Composer.java create mode 100644 src/org/yaml/snakeyaml/composer/ComposerException.java create mode 100644 src/org/yaml/snakeyaml/constructor/AbstractConstruct.java create mode 100644 src/org/yaml/snakeyaml/constructor/BaseConstructor.java create mode 100644 src/org/yaml/snakeyaml/constructor/Construct.java create mode 100644 src/org/yaml/snakeyaml/constructor/Constructor.java create mode 100644 src/org/yaml/snakeyaml/constructor/ConstructorException.java create mode 100644 src/org/yaml/snakeyaml/constructor/CustomClassLoaderConstructor.java create mode 100644 src/org/yaml/snakeyaml/constructor/SafeConstructor.java create mode 100644 src/org/yaml/snakeyaml/emitter/Emitable.java create mode 100644 src/org/yaml/snakeyaml/emitter/Emitter.java create mode 100644 src/org/yaml/snakeyaml/emitter/EmitterException.java create mode 100644 src/org/yaml/snakeyaml/emitter/EmitterState.java create mode 100644 src/org/yaml/snakeyaml/emitter/ScalarAnalysis.java create mode 100644 src/org/yaml/snakeyaml/error/Mark.java create mode 100644 src/org/yaml/snakeyaml/error/MarkedYAMLException.java create mode 100644 src/org/yaml/snakeyaml/error/YAMLException.java create mode 100644 src/org/yaml/snakeyaml/events/AliasEvent.java create mode 100644 src/org/yaml/snakeyaml/events/CollectionEndEvent.java create mode 100644 src/org/yaml/snakeyaml/events/CollectionStartEvent.java create mode 100644 src/org/yaml/snakeyaml/events/DocumentEndEvent.java create mode 100644 src/org/yaml/snakeyaml/events/DocumentStartEvent.java create mode 100644 src/org/yaml/snakeyaml/events/Event.java create mode 100644 src/org/yaml/snakeyaml/events/ImplicitTuple.java create mode 100644 src/org/yaml/snakeyaml/events/MappingEndEvent.java create mode 100644 src/org/yaml/snakeyaml/events/MappingStartEvent.java create mode 100644 src/org/yaml/snakeyaml/events/NodeEvent.java create mode 100644 src/org/yaml/snakeyaml/events/ScalarEvent.java create mode 100644 src/org/yaml/snakeyaml/events/SequenceEndEvent.java create mode 100644 src/org/yaml/snakeyaml/events/SequenceStartEvent.java create mode 100644 src/org/yaml/snakeyaml/events/StreamEndEvent.java create mode 100644 src/org/yaml/snakeyaml/events/StreamStartEvent.java create mode 100644 src/org/yaml/snakeyaml/extensions/compactnotation/CompactConstructor.java create mode 100644 src/org/yaml/snakeyaml/extensions/compactnotation/CompactData.java create mode 100644 src/org/yaml/snakeyaml/extensions/compactnotation/PackageCompactConstructor.java create mode 100644 src/org/yaml/snakeyaml/external/biz/base64Coder/Base64Coder.java create mode 100644 src/org/yaml/snakeyaml/external/com/google/gdata/util/common/base/Escaper.java create mode 100644 src/org/yaml/snakeyaml/external/com/google/gdata/util/common/base/PercentEscaper.java create mode 100644 src/org/yaml/snakeyaml/external/com/google/gdata/util/common/base/UnicodeEscaper.java create mode 100644 src/org/yaml/snakeyaml/introspector/BeanAccess.java create mode 100644 src/org/yaml/snakeyaml/introspector/FieldProperty.java create mode 100644 src/org/yaml/snakeyaml/introspector/GenericProperty.java create mode 100644 src/org/yaml/snakeyaml/introspector/MethodProperty.java create mode 100644 src/org/yaml/snakeyaml/introspector/MissingProperty.java create mode 100644 src/org/yaml/snakeyaml/introspector/Property.java create mode 100644 src/org/yaml/snakeyaml/introspector/PropertyUtils.java create mode 100644 src/org/yaml/snakeyaml/nodes/AnchorNode.java create mode 100644 src/org/yaml/snakeyaml/nodes/CollectionNode.java create mode 100644 src/org/yaml/snakeyaml/nodes/MappingNode.java create mode 100644 src/org/yaml/snakeyaml/nodes/Node.java create mode 100644 src/org/yaml/snakeyaml/nodes/NodeId.java create mode 100644 src/org/yaml/snakeyaml/nodes/NodeTuple.java create mode 100644 src/org/yaml/snakeyaml/nodes/ScalarNode.java create mode 100644 src/org/yaml/snakeyaml/nodes/SequenceNode.java create mode 100644 src/org/yaml/snakeyaml/nodes/Tag.java create mode 100644 src/org/yaml/snakeyaml/parser/Parser.java create mode 100644 src/org/yaml/snakeyaml/parser/ParserException.java create mode 100644 src/org/yaml/snakeyaml/parser/ParserImpl.java create mode 100644 src/org/yaml/snakeyaml/parser/Production.java create mode 100644 src/org/yaml/snakeyaml/parser/VersionTagsTuple.java create mode 100644 src/org/yaml/snakeyaml/reader/ReaderException.java create mode 100644 src/org/yaml/snakeyaml/reader/StreamReader.java create mode 100644 src/org/yaml/snakeyaml/reader/UnicodeReader.java create mode 100644 src/org/yaml/snakeyaml/representer/BaseRepresenter.java create mode 100644 src/org/yaml/snakeyaml/representer/Represent.java create mode 100644 src/org/yaml/snakeyaml/representer/Representer.java create mode 100644 src/org/yaml/snakeyaml/representer/SafeRepresenter.java create mode 100644 src/org/yaml/snakeyaml/resolver/Resolver.java create mode 100644 src/org/yaml/snakeyaml/resolver/ResolverTuple.java create mode 100644 src/org/yaml/snakeyaml/scanner/Constant.java create mode 100644 src/org/yaml/snakeyaml/scanner/Scanner.java create mode 100644 src/org/yaml/snakeyaml/scanner/ScannerException.java create mode 100644 src/org/yaml/snakeyaml/scanner/ScannerImpl.java create mode 100644 src/org/yaml/snakeyaml/scanner/SimpleKey.java create mode 100644 src/org/yaml/snakeyaml/serializer/Serializer.java create mode 100644 src/org/yaml/snakeyaml/serializer/SerializerException.java create mode 100644 src/org/yaml/snakeyaml/tokens/AliasToken.java create mode 100644 src/org/yaml/snakeyaml/tokens/AnchorToken.java create mode 100644 src/org/yaml/snakeyaml/tokens/BlockEndToken.java create mode 100644 src/org/yaml/snakeyaml/tokens/BlockEntryToken.java create mode 100644 src/org/yaml/snakeyaml/tokens/BlockMappingStartToken.java create mode 100644 src/org/yaml/snakeyaml/tokens/BlockSequenceStartToken.java create mode 100644 src/org/yaml/snakeyaml/tokens/DirectiveToken.java create mode 100644 src/org/yaml/snakeyaml/tokens/DocumentEndToken.java create mode 100644 src/org/yaml/snakeyaml/tokens/DocumentStartToken.java create mode 100644 src/org/yaml/snakeyaml/tokens/FlowEntryToken.java create mode 100644 src/org/yaml/snakeyaml/tokens/FlowMappingEndToken.java create mode 100644 src/org/yaml/snakeyaml/tokens/FlowMappingStartToken.java create mode 100644 src/org/yaml/snakeyaml/tokens/FlowSequenceEndToken.java create mode 100644 src/org/yaml/snakeyaml/tokens/FlowSequenceStartToken.java create mode 100644 src/org/yaml/snakeyaml/tokens/KeyToken.java create mode 100644 src/org/yaml/snakeyaml/tokens/ScalarToken.java create mode 100644 src/org/yaml/snakeyaml/tokens/StreamEndToken.java create mode 100644 src/org/yaml/snakeyaml/tokens/StreamStartToken.java create mode 100644 src/org/yaml/snakeyaml/tokens/TagToken.java create mode 100644 src/org/yaml/snakeyaml/tokens/TagTuple.java create mode 100644 src/org/yaml/snakeyaml/tokens/Token.java create mode 100644 src/org/yaml/snakeyaml/tokens/ValueToken.java create mode 100644 src/org/yaml/snakeyaml/util/ArrayStack.java create mode 100644 src/org/yaml/snakeyaml/util/UriEncoder.java rename src/{main => }/prismarine.png (100%) diff --git a/Readme.md b/Readme.md new file mode 100644 index 0000000..f2874b1 --- /dev/null +++ b/Readme.md @@ -0,0 +1,5 @@ +decompiled SkaiaCraft launcher with personal tweaks and bugfixes + +## Disclaimer +* Decompiled with [CFR](http://www.benf.org/other/cfr/) + * Made easier with [My CFR Helper](https://github.com/Merith-TK/cfr) \ No newline at end of file diff --git a/cfr.jar b/cfr.jar new file mode 100644 index 0000000000000000000000000000000000000000..7f6ddc4c749409f3f444f024d5dc27d84dd5259c GIT binary patch literal 2162315 zcmcG#1yr3$)-{~q?iwVxySux)J6zm?I|K{CJ$P_;cMa|y+}$O({G_{QCY|@|OwY{v zSqtu6i>FRi?X%CReX8n_lLQ8VdiDJWO)*6Aw=aMEfqeOt7FOb?7MBsBmHXo{h*zjD zj|o-7r`Ejuo8$GXS13O|Ce1G+E+VX`L?bN{5Wx@CNrxhI{eBT2y)TcVaaTs091Wz~ zQ!4jOsG0agW*sX9#ct=;=iZ@*g4jA{gJ@2FQ!L%!*QhDdemwKIYlLMuG}jw z#2D;N@doo0p8okt@U$XK4WdIF2NQm!K09Wc6Df9r{GhPx3)N$_wHi5#cy%o7u>!Me z$<5wmrgS5%-3^XxU3t12=yw~79mynp0p!BSaMd5m*o$Jn*&Qo|zKyeE+iC%Of1JWN zV*QV4zIp}v6B-~d)3mWO`6m$n_lfU#eSg9LU~T-1$6$Ya%+T2Ghey9d`|{s^{(Oh_ zpBBGAY6s9a0{p54#$UA1w>A5rAC#Z^A^7W7j@EVnOMt#T!03neKaUgVFWMWpIsgo9 zi~v701^cOMl7H7!-&)_&)!xkh2OB?kPw}^HSlSr=!Vb;fwqs*!VyACw`h%^XA!YfG zZQ0n;G1wUV$ef?&`Cr*&{IyNa|6-gBb^vEPGY5d(ublGV7-szc%P`a5F)a9BK=FfN zLsNjE#V>*c38ApevS zsQ$KfTYWqGACt?^Xt4f=mH;lcb^v>OGaKt4ApUuHT>rgMD>M5a^Uu#Y69KYrFNZ0=r=@|c0i%$BMj=vh>-%oVE1MzpF`#-g5@1XAh zumV^+{6K}D`Ni-bPW(IZf0Z-;Q)>Ng&)Do`i8KXR+WumsZ2#3r?G0^gfArJOgk}B@ ztvZ`o8X4-_{Ypyw{osFbkfFs7Q~o(l>HqfN>>cbJ4ILcqeyMT(zHfdo_d|sKOIiNR zqQAdV{$Tm<&{OokLEvA8Z7p9CiK&g{uNCLtcbJ2#E#OD?|Lm~8AECcn(zmv@`5vS{ z(&=Z0{--vLUNW?e6Tr^(2V(u~FS@@CtCPN+nZAMLpJx5DHKKoK&Bpd83H`H$zf#{X zxy#JK?3bOB|3&BjZ2AYrFDv4Yp8I(OWdGKTgM*!!fuqBp2J^H3N&lS{0~;HMmk`kZ zRigVV4gb#>8CvSw+Z&r%0={R=U(1}osw@6w>jf4EeQO6>8=GIPkN*}PfQuo(*5N0R zf2Q)kwPI#%4Y2!ddcPp=U(xNiIk~<_2L~IwUvmcgFWh9MZ)K7J> ze>HSN8%s-o;lHEJU)A=%O~csH`n$t_729~f8iEPH!N&Gi3hC`HTmMu;|LlQZc5SI| zWniTL3+#T`+Q!kr*708h|9w|$2+uS_9r)ENnU|d$+P@h1_l*=mV>=-`vzJwZNWk$$ z(E#jdev7(PWh>c9ITWu(*nJUD>|nfL0z5;-Lb8G6^yZj!4-EWZuf1Ap6pJPYoWO`D zLTS2I;-1kbvJLwt2A0|=X`~VBQSKe~QP+m+r`!7tbRTg`q4ZUL44ed%^$dgv|AgRG z`ZNc5Op63_8Rw(sqPtuNtGW>D)?EoPrqH@0bt2eV3=_oXG&!c@tDs&ntGpx zrYaMYEhMMnEAdQbTl*%qY{Fd|{js>U4!8R7%L0`&=clc=rQAX$F$O^q!zby)Zbl(}Z#EEI+foQmK4l4!3nKZ6xW?&kx zAfgbUz|>c^wgcapswgsjSBb>~*`Rf zZn9$p$6_t@jF0b_kKcvZ$LY=OkHOE3jYhUE`#h16L)=}{t@%-BEJ1(0MqZmeGeo;h zAZ8~yrk`&munX3ytfHJ>*&zf^cRS}Pb*H*9mAw=9i|A312AIILS;Z7XV&(cUifJ0w#SDU&j<+^1KJ7e{fP zS;QBGrP|g;&(N^3)LMUm;^ZD`M7MDk>Fht*?(L2~kivMz;(WfficSY;)!L23-sz02I#9-e^s3QhRt^oB=RDH6m1;s z3;{$UzpeYOf8;SGNm(p-8yD7P+gDf7m| z(q(3{=ubTy?dth+qTtZ2!T!Kx| z;;D6}y(e|vB0nyqdMVzq_?RkHq# zFOmMO(igp>;9AH_Oh3hI&jM#IMB!+dX_54%X5vS~Wu6%=$?>S95V6@C^r6cMt@)^TxbefMjqz^PUZ%Q7lj~b1WAugn+zXj}>t+UxZ zhZrR_etlFgHdMo|u=%nHcV12%iybRpQNFE*g9THBJQJkviOs;^FqL&XB`Zh^*Gt`O zw5nK((Dk59f2B!UX@x<7oQwG(*F5q(+G_IAnXox35F%;d*=4$Sx*&Cz;mZB9{;gX~ zgmth$aRYLlsYhLJ+H``%grxp>6QVbH`OTtPN)9S%znJmhj-D=3m7pPw{BZ_f)+G2U zn00hY2aq))g%giJk}=;IrNWktSl%ggVh_C0it0$zy;QtIr!i?huz~w0I<$KowJ%oD zpb~jOoG4qzfaTtvQpS=AvNyZ)8=%{f&(Qx0#@`5+*^BA%5{URO%O>@& zmdrmB?suYyihuu(oy1+*5xGQk6163U3jdmy&u6&F_STujlTAs#z*4VA*Oythz~DDU17xb z1?h~h72Kh1Q)7uq?<&9uzmvGb_V$YDn@3poW@}xgR0*`o0UNi_JmMC18ijz?is$`` z%rlaHxGcDlAGXhKm>o1f$1UKVPC5AQFu?ZIa{WoM*N>=HUi`2L!NHm&&)`;JfCIgA zq%H2Ppue?(>41HH*kwwX0pXep$ps$;#^X|)vt(s`kRWS9I;WGpBybP+XE&Y>H0MmexKI1Vm4CHA_&smP{wA9g&8#i{ z$QVT5zyI#dFd0tkPCk?r@SYwxkT-1nP?P0I0Hkpt0Re%`@;I+|XciqBSv!uITGXK6 zt8(%)V{0U3i4n#kC+GL}VCC&>?Sej{0w*Cg%KqZb?0vH2P-b=&OE^l#y2dB|bmI+C zwZ@;$HkewH&MfX0!)X`L@FfP47;7d1uoA2-+zYKThu;x1YMx&=7l2?OZWHeqg(Y=i#V8Jwe^BWwR6y1Dcm~$LIsts<+f8RbhtPJBxlY+{ci!&- zx-7#m*rgMg{784&#rtQNAdulD=U$lZ4e_%4{DSTOZi{p4FJWfw*6S3 z7BVt6foWb#?)|)hl|qpo3~_SM8i{0iHidN`SRFBR6<_ZY(6fxB=*I5uWfkwhSqf|e zQmPnF^A6Vz_w{uOvG?QS!sk~!o!2_`75iN~YB2~gr+pui#V#sFSPMhhA+dN2STViv z4Rty{4H*Nd#QNwpBP+-<`YgqJqCvvutT6QXuMSDsWzrVyq@ubuJ;LsC>^XBaX*H>Yk( zbU4VT_xqH0;Ff_<%seiBomtPs^1r{ttL4Z`KZ zU=Xlw-!iv>#vLjo`fW|7?uxAcW3d_L?Q%z{{-ilXqIW?N+rwucG;D;4W1fBCbMC%F^mwfW-D84P?^oP^q`zB1Z!BY zuSFs9@WO3SsWv!4Pu96#KZSU145EVC*Ar)utRA<4>VG2k%l*3VKO5$DkS;xUa%Pgk#ncv!=?(uEQl*&5XBvwqDedaM^n4 zqMNZA5Eqn|2t}F){|@L(uj1pr*@~vQBQL?~Wp8ja~9zWnKU`(xrz0H!`K` z=R%zN`^G2VSOndexB>?`cZDq6_*fq!Xb=r}xAOSw+8)7b(L#=|PLOjrzn+NL=z9Oe zaBEONyBq!pHHuZQ%keb2zmlcMK9RZ7d_Tf%1)6%O4^A`ip2?tY2M)jI_yJ}QRsYk5 zVG3EF2vG=qrM@nHrBMWYN@K#tfY!|o5u79e5qse`d?OEES#Zp^of~S8mz;~!>4#8m z@N4d2^xzc7tB&B|oVK0Fmz;E~?dcdP4y&=iHewx-z1da4VX zBHoqk?-8aeck|>{7f$t7tHj+WOzQ}`I8H1(psC?GILS4*Sj{!OSW}}gxMFon^{%`4Uiw7u+!?Wu z5)-SaXwEK9qAX65cCb+&0^-2N?rz?#RS6{>zT!@R7TLWrn%Z(#NZn;YyKSs> zuR3A5Tc~mn$)L1B`~n`ua+adj$vnQ!dItNB;A}pJ`gIvnfR+8q6!xT*Y2eA6HDTOg zsb=!4D&h!n63AJdxqn)R=@tp z?423s zt7jy8XCn3_qLVI7+C))1ZlUC7b%{AGhXpL6Y;M@c=4*RnLir8}iYfzs@G>o@!LAxL zbyJ8fN)tK&q7|GR7`Y_=9ZcF?{R7imQdQ0X1teC$Oe^_Zy28bSo zTR1yCe-*g926}D`#2F5sh=_=Uh$3==bKQHhX%X{@EkZ$t__$TbGrsTBO>w@pfqDNzhSDIF>S!W#&3g8(OB+3tCY z==zw8*n*3OlVvX^9J{@$Jr4ke1K4xjcI$yL$jNY~lB)r>|Mp&Wtw&QWsqaXcA2O5I z1mD=ODi%L2uN4R@s7nz7Lad%>f#uis)(*!ITfI~K@K)QdV&huQp3w2^w*92vyeV5t3~qBlg4V%{$S}?QNo%%^BI{CG*`KMb zcDz5I%#o`vq&!KYDl7xHmIlnTvpjftgovtGQwS?y2Z`DS%008y9Z|J}b)P|XR57|G z5brFKx<=%I`p{Sw+Jn0!7NmnLQz{?8bh zc|6yQzhI>Pg3(`{{e92f|8I<>9W5QqRQ|Cu7#I0n8Y2Wgzh3Y5|KtHmCeS5;(!hs+ z1R4y2^k@J-gXA98bAU|)3f`BINu`8>B2F*+$oSc~)w`AE6&eQR7bwqw*ZK)nD=Z@m z(W(k@{#S#R(z{26A__WlzK|QKj&C)u!s^|;7(R>W3%QgK&4N3Lrs4`iCx;3rS4}(b z??q1*a($ql%O!7KszQhs9e$c;kFV>TVxE2N+P&LZuhsTeCdIAu!MoYE%ai`L%RvaQ z+P9`FIbU#hmE4G0h_&n#+rUoIVLW6#{lEaDyY0_VK{`LSth_*__W~8i%jf^=%G%FR z3IF5BL;B^yg}%uj3tgDZ@0&C->*4BIGz2%VxOcl>pKZ&dfCzs11{_nvm{@-qnE3II z1)ir}^kWr4(Rw$J!??Ec(zmOpbEs92fX={9G=BAPR+16OrVpaC&=;l-R$ulR+(@rN zBS||F1nJ@-InC;m@3+Ni(kOLAW+C)XK2;EE*vu7sbbl(9SX$b7-bo%HX=E&m9{L7A7@i`!2uCmjv2rGno04hdNm0o`0m3<3EbbkYtJe6TuE=9UfJ z%jYeiSvZu6?p<`hXXmUGG-At z&^YUM+Q3v|=Z;KzRzGiHrXC-;?Ri&GbN{9gb(o5{2#lT+C(AsAE;~#8BQo0}9j>}; z(xTqrejw=mq35T9N)I~9eGVavojAz?9lOo1UuR7WR5f*G7+!~il-lP31e{1F6Jx@s zVpEg?qOf+WDk_)?&>$OXYWZviOF1j!7b(Ci+%J>AktZtdgUURw%^)F|rh5(Nw!wH163fYubL&V^G~e)pRdt$Gm8=Uv2RJ7}H8N z769wtQI3n!mIUHQ30yJUuQksFyqyPVZwkY@S_mOv@FUbuJeu|b95De-brEed!o2Bk zQB$?0Iw^55mKldG(%?s~M|aSD;AF6|+1Ln_Ji@`N$dfyIQ*f}67q=9>-iGSCqwkZg z2iZC}I{4_q&xjvBfzS9c1DU(@#ju|fG_@}+e zdi-k<#}^q;_fkCn)s3N_>HZt||I)#6v6`w_$|$|hf=CRIz*2-0Xl5nUasKmQWY@2v z1NjX;5E%n8S=GSp@d4}mHl%-3p|x;T-%s{>{n_KRLuR_sVQ+m7o%g+N_tr8gFxVEq zUdbcpv;Ec9p}oxZb(_}{Y&)G3@aeh;g6rZX;c@Q~9@r^EvZ~8gc&H?QCPLXj5Q8+P z-w-pV;E->q{TzrHbH$V`MJZHx%SZi{+wWND>>h)jH;mf~ZydWnWIqfDkVAxtx3C#QatzVXwUG9Loylu&6Zn^9yLmXWKI7G z)Q$>WZ`(+{FI1t|6p3M43WK4m?eb_Z3Osx71{iqITPC8h!6&^ARfB1@KK&)3kZ zL_Nm-Z4L&gTo)8W#$jVHRU!v$9FN;I^SM^ zJBy;ae=Icc9{Y>^yD`U(LE&JFSsY7}W6JB5%8js{^KM~ldTZI{%6BM2h`kDJRS z7n+T~HqdEm+)w**!_h6*X3VfncJ`LUdV|_>-73iy{Oy{y$4Bs+Hz#ZO%e}Zf?Qd@o zyeF!b+8zMK5T)ytE}fUCJ=9#R&UZF{UbKC`gkKQ9EFXa{ne103{r_1)zGpEJOMR1n z>;NjB$RhJ2crI|(U$JGV@I&7~7hVP13D9|%3YwRPNxu=Zv@&?8=C1v=+BmDFiS$hQ z{(DVt@=UgIIG(_Ql(i&j%*bi8-7=T_cy=-9{3_Wc-X~lc8Iy}ClIirT|HonmCu~L% zP^*AGOf^F~o%n&c7KJeVT3l>M_2)5Ez~?%57!_d&#N)f>S>#P?Wxw(xrT|NJYf1-! z4tSy6)6$(OF4s$qOYn?CKu^f#N4!ZFdCx3}w6^5p&P)1haET75nY42MRxE6Yz=lH7 z?&b7J6#Z0IPY(Lb`FrX>)wz9q-tF*Fz(T<{LD|}iDI5#MDJVXTAsUF@uB+#O%8$B=T*7c0(F; z5ZdxrvB#SbF4~A{35tqw)u$k`u*Hm)PrMNUu54&%6-N4CRZN~6^O(6>ypdnL87(3% zYgV{WtUoiAJ^_=4E$(`X#H6(C(?;0ugkW8ANx4Z@7-$p#M~4)eag0Z`J7%}r`Zc4@ zPcz7N@ZdYWJ|c9@PCRr#frfbL0N)F`Vs}bvuVFNy(WmsZg8qTJa)ubHE-HN8LE1<; z0M_*KwTQLVE%qd-w>WEgarTCce?th{aa0RRrF2++%_ZvHLTpAVp;w^)QyAA#Z0;e< z;ifYwNe-~KR@V7^`JyLR&=o3&GDMObm#?zaGti%@mt0)%>brVrdZFK6UEKO<0sV(= zX?ZEtPy$AU^+6C{d!OY^^a!xvo9hEIqZ5Ki1P(uJRjR8QvsQ(St5%)9_8{8;4SQo2 zPrf}k^eAJ0eBXP39ZidI>pTGZZ8+&KQqfQ>=iP@r3 z`LISCPT;;uLx__5epu1Q&T}GlM0jI=J9!6@XC}b-h%_>>X^hU7KZ;J2k`4Kws~^tS zw|ZbCm%41x2Q`{ejyKt@h0C7Nn6EFMfR5%rc&>|53L)94tgo)tzs38LOyBLyDQbVI zYD8Y3|3$?A@S@Cb8~y(}U1j*)3juOXP%lMb$~V-v5G-DP^DdDraS&((YP;~3(ab5> z=naw}-ou^nr&(V>p!rckv;zSq#wI5b2e5oW{65w`IzBx5eP)fubwgJ8wRpRG+kGZ4 zr&qa70h25tEDeK7R9ETIeu^?|sCfedST*IAG&=W>TSViB2e_Xd%u+G*X$#ymh5ess zXtfC_t^Db9-dwfzl$o)Wo#6RD3-c!Wk8^gh@JJ|tCO?eb8aYGwizpB8t4<7Op_^}GDcz`9(Sa04h!;#o-?TqJVs)}Vs7&KMZ%_~O0QLQ)nXS*4X07*r^hY3qDVO*^U%)P zCAI>A;+X2x<)uS&cYynHjG?ErufgL&;C4nmpkjM7X8j1KwC5c;X~bJPCm&_*$)1j4_=6z7^*HZ;3*chZhK@exv*;X5Ok~{g*x_6m8F{#S zd<6FaVIh>Ge=9<(BV6t?+u4k0Odm>2)GeYg6yF^>1f+seOrd57VO*I=9T-r(5nlsT zCz&K~$NcF)_}Dz4u@^S4k9ldP#BI3PEZ)!*tCjT#LlPu%)Y{mLY%j34d>nU#g_zUY zGf$xgqLS2XKDVxO3^n8g$syPm<8Cr{nDIj#kn@FG2f-);V1K6cILY9M({H&|-B1oD zPaz#7khX%-)~#q3q$GA_`NNgsh81O@l6F;QlVf1_)nE)lprJZU>Sgv_?@UW z=cSaSBqFM{ORk}A#LHP|ht#5H+f-}dhqtkYIo^Q^KQ4nvc8!1R&t8pDX;Ga%|~b|h3#d|<0DSt z#)KY&vq8AEePYf2c%u5F#I$}34PcG5JpIC0>NxYoA}da7LqGinM|AYpG+W`Qwo9`M6KYB%ri%tOy&~{qnW&!UBQ{e6XIB?;Z_dC*`Z);Gm0Wb=E3DVLop{Heu^U_yW4M4 z=9FywvJDbt-sqW`hDpN0lT0H1EKGqN{z^tR6B1cb<6pUNVGk*#fiUnF2vea%`U}He zEk@IQ4yg7zXNZG@=raT%$&(p(ba<^N2NcTUYm4RlioGesy_zZI5tzKq~`mewdgx z>mnF=^a~%86Jk!|LtUwYIu;lbSE9y07?IAOmDVpIAs5i0RS+%5bDrT^57zrtC$vzn zm4>>jMU_*`w9tCY5ET#Zc7r1w4`O@)hI}h=6O=)n$Nomp*<5j9e5x`FYd=#Z#Q-Aj zn{NR-Aepgvc2p*hswv&LK2f#GRkNlcexr6kTGZJ=M*+Q|N`EWYd?ver@dy@nm?~d< zat+j4c6h8CA!$Z>DN!GyXPr{WbY$QizZmPSf-7g&QIkdwo}|sdfO$`_@qxi1)Ib*0ruW8srM}P{qi{ZiqP)$RL7;@9_a=b>d3p}WBvDo?8*%|aHrFOt6o_3dD z-!E)rfw+Ue0~AL5M(urIsBaY;DSi@=>Q^9VRy^`h~>eW}Z!^wvf6Iv9y?OX&=*kd-KU|ps--j zllwkIJ~DS1Svb@a&UkmxT|85y;k#uUu~&(UfYl)8Ci@rH$`)X(rmiE0@J>n)I)YK8`sVwNtL?M-b$7H7Nrzjj?tGB4^HC+^|~N$bj`>o zr_?^hf7&jXtkxRDS0zKeENG;g83XKE80ED{-Vq){rRz916oBATw}~oNTO@>wYp_CR zh7hHpmx(~WvAJpw3d=V&>}|3n9D`eOP!ZxHqtR?$$1QWAnp-3dXtc07RMY;Vnja}U zc>>Q@mH9Y+A^Zl^HqFa0VK>~NO)P%4zh}3A=&Bv*9^%1wHKKHfZVBK9v}7s>FXI1c zCq%w^^G>cQyQ%#aj=#}o?aL@cI8HjXPoAkR_A@Z)6{3bi$p(0&uNuw@aT^P|x6fA} zuk6M#SuXHh4)GzdrIrzQmnWTd>i6{XZ6VD)XADQ~{U)30N|nt5@o?qdLKimIsBIFs z$S%XP?jNXtSd%ao1bY)b{o(Pz%iXjt)D=8S14XL`2=^}#Y(Bl~4qE{!y?Zz2@emXu z8_el>st0=mn#rvMj9cIac*mvgEzbv9Ndx5hDqziBj2FN1 zAgl=kZcMu70@%1P-cyKNm|Q|7f|Kz9q{YJUp6v|9vn_Mw0t>;*h`r&1Vv{UgJ;{)} z%Np5-EQm?ZFJWT{{R!!c^wK*9@!3>S3HO&zK1QMSw{T+*7`b9ek=gg1@WO8P6fGa6 z0uh3q!cf9;wfk)zez;8eU3UbXAJXN%NVudI?IG~rX2w6=9xREGwwZr9>sSHxeb46a zMfCbEDuSe>!68S>4Wb~4Pfm^;J1EkvaAq)?%I;`@CF(|994-!toHw1faG+RlT4MO) zOf>gs(?Kfc@X*tZt0%M`dU!w$*FZi>yWB8ggoy|b>t*Mdq~HM>3za3qX4279hyG4} z|7j_*f8L_%JY2+S0!=USx*>-??he@D1+l_P zRI9+Y4iyoBJ8iMhCe5yHVBRG)327Bdw?LdnZn;6G9_oV8@D}Cd{l4JsPuIV`5nZWo zz1&fFkN8sN{EsXUx3abTLx`$sDk`d?Jh8C%L*i#bqDv#vDpN&%dG!qnLf{pofGKQ^ zvc-`&Tl;ta_7D`x7DNl&O0xvrWx6%F7XgzHgd zgaQ_#ex8#C%Jdx#(pPq~t)b0xgL$eUj6Et*-zla_^e|uI`;l}Njq+e1W)bmK4fjkc zTt?MOiFox;>BO9X2TNU1Kt3dMB(2&7+72xSYu?UwFo`oNq=K4KJm|a*q)&UeQh(oK z0z*9Z8#j`+1QPxCHVeAIOZD=xuQuS?DdUP%j*&eJ^r+tipuS%os58N1ytPzGe**`^ z0}kyDL`s>vDPaP!WeK=@cTNZJl2k}Jm^sU6r&acMJa0Vvh^R@UK9^v)IIvSo`qdgU z$NK&Dc|r;(w}ZY)VES!0VN+%GJ4;2txBIR*`!}oGHRKjNCb99*xd`jePA-nCwZt0V zWR%6JG3G3va`_58-6g&>t7m@Uc=Tj`RmdF?hkS~1F&Ge9JXtF@g@|^O+44aCl_rIw z6zV|-SIKd%$usTx%A|7SqWzOX>)R@$*Jk9;DQpxC_lTWXULO8rCo#b+GV0X;3C`Jv z8;t6N_#UuAd%w4sLwE1MfX^8ZKR^ohro6pSJMHRp>^Jkp0yVZ@V3By^u_mfA; zMjK)T%uHPD9GxK}38|_5&|h?S(#XBpf=bhN*PSZTl*zCLaSVXUSv<$2aB1&FR2D$9 z5}0_Y3&6htI4JWt!mtiLhnT;GI|rKE z_Uin=5SockkWhpC_DJ|^o)pAk@9W-n<bWwld;XPu^9 z@~cw~39NoAhXrYNy>{UEVKHJAvO#rAZwW2U^8o-tFisBIpA!%ScV6a4*7%Xn0K2?y z{)-FJQ3|@mzEFakg9E-VnN{uBzWkTnk8o4=OcJu?IR?2RmrM6IhYn~JUl3}i^|L=4;IC+8MD{v zv?eN6@#T^Fiui;>*zN^{i*F?U%{R;-X8#MxG~{+KJ!&%~c3y1=QcflXBWJp) zc)Me8yd?k1YgNAk$Tul$cSae`K2O=v@5v|GQC-RLuM=*~^JXA&#)k`? z#kQE_u3zzQ%XK-MHfQZ8eL0Y?1%3!8pSJ&bi!zAm0jlanPL#aJiT`yWQFL%L_uSpf1~iL&y#ilW+>{~Pa;=U9sAa^$VW%C_ zrj{zvuja(Lv_PoWLSGp>$>x+rKm?0Avy1#g0ZdYk6q!UQVVw&Sot~KUUtm}vw;IE1 zmI&A^4thbHKOjTIP~#L`ty0Nti-94!=VB6P8Jam5qsz>u?Z%E_6nqTF0a+9i*XSIr z*^beosGT>D3qBc0BU&2%wxhhsK#QDppS1Ded_8?u5>+*ab*^%A+8u!8F{cyFaOKPw7kX}5Z@(?%6C4L!9 z=t}$TJJ4(R9-52jXVWTY9@?5y^ndMKe}AcOFm=tZ>!to~f2qHD{#$*a2>4^;utw!X z5la}ui^X3{3@%d6)U2i?eu6K(qKzs(Rs{iN5I#UclVV=75^^?>vsueL@m&w?BPsT? zPdKAjKBEM9>br+S-c{CTcpMAQtK(=Shyl4&DW{bs&lQu;*K^L!$Di7~ZXny$xq{Xp zNHlFRPQIMc}{+qlSfOs!kUYzovps zUar)ZlvtZ;z(H9ez@ch85zcfzAuc({tgRS7$vB~1aY3kQfR>$n_JO#IA~%mp6)lI6 zVc;_#k)cK|Cq<-~HQ{)hnAe7r4uw}Pu?c07`koeRCGiMR?oo=o1{1bom|uT+lL14r zBrK%ytac)y#(a6`gxefdUZT4jRRS@#S+uM(_vxJmst5b+bAP&m70dbUL2bK>o%dz$ zk%IWP*23Ai*cWvZ-nHwySb(@mvr+6|G?L@=&cuOhf#ImKJV!M^=!7?B2)MTWDuhQp5=x4~Jy|1nx`@iSv2g7Y>{X{GDdHp=hW1_|`h! z^B~6v<#q77_uJ1E0$BYdbj>TIQmdV<0=L;bCJb8=y{EXZaYqeO$ztPKhupQBmpJzK z7rh0ujHz3jtQ&%hDD=9?MhC!!AT)JUy_I(=oyh|VRhNA&q63g}DokT3s3OPF-4hZ} zS2W&-xECE-?U8dc*(EZoh!YzWmxzbx3HGPL50BLC+;S@HyfwO)eTs6QKyNO{pKtYs zgwH*t;3W+|z3}ZVqJh89!Va*7LA>g1!0oiCwyuP)h=ApKk0It6F;<7oyauwsawuTw6!iW{SXi1DULw0DbiOVH9ccn zNKH8dQbq^gb%9>s~-PGkU zOEIHnLI6-P!t&KTB#f)aEySs&8{Nb?>z~tOPIw7o>&v0uBG{`}{Qq@&G(a?aA~2B@K3M2 zW6y>h3P2?UcDqK>?6)~r8jfFHMLuBl5iTY|=#62!qt6R>0KzmvP7tMepQk1ljoDR& zk;W*rq%ph`{T@}!%(me~1=BdBRF!pbu^=%n$;553&~9`y97Vx)WpSn)VAlsN+NT^S z)o4roX$V))sH?;-FeB6U=7Vw8P>XhvWel;h17&=RiL1cgdwPQFfYI`axKYm5EGrW!13BHifU1)53dC%=xe#p&#p%sf`B+>_s#DfQVZ zV=hoOz{<$ybmM)Xo?U>8H_UN|rVYC*#OA$P|9rA5(-GA?!kua^b(0(>=sJWTW5T1@ zC1E{TbV{A!Wcn~6LPdrK?5D;Q$v5Hi{yl~chReqs3?0mRzghZb`ct$M7%IZi^2IJ7 z2CAh#O;y4B+WCcGMA(wHJBhOCTVE)4kAhJc!##o7BkThfa*e5a*=v?hrCoF}$ES2cMaVos(^jdu)Fhu^^OMWE%aXhD!Ovr~_s?&9Q_APDN!3r~<%e%RxV zeT0lp<>Dtx=H$OgcEZSI41h@Oa>xy`_16*=2Lc_lHo^q0&hDh6F5ttDej%>^98q;8 z%#cYNp_J?{IKi_Y(d8D%lmPkp8CtzGkI#aGq_=Kk8E80)6j-B0ueZZ73z!FR&&(hG^v;#tZtou4bqFSR77)9udN0$XnQDyDsftvFNFMh3H;_G2yQJ4zvs&vP}Wsc#_vfU zRpUu!Oqo2dL@`e+3(O2RLJmo;j}zUum+fg8A0EDa1NQ+m2MO@2^kQ!-XDf4!Blh|- zby}Z5#<(wXAF|<0S}kmE>(wmQj$RC>d2eFGrkZC+lq!^< zU{1{~g`Fp7cFVc3Hou7iKEBF6o=rSNn557|F~p$cOv}I2a9le%ZIq-mmn)msbNNhu zash1JxM-22GV9!IOvA|q3aPPkOmmH+?joms<|5hmRX5HI$+g$M(E?_V(m$@Usk-UD zBST!6I&bgHdNfZeBNWEebpglH%U$1Q{GjH%Yu_}CXkVpiXTe}0szpkRUpKNFR_l`} zrhk~b{TJwfxGO(S9qVXZ(=Vu6zyE1-;-JE0l~!hA4h$P zSO&ijjZ*aIK{QApz=AZ8cgv$^TrJZhQkzB|SVZ@i%@BL)BYu*u?7@Vtv*iq$H0>XN zk%SnB&bPl{Bn`rTG;ESM7vnevPf<5@;k%LwN*CFzI)jy<&IpuA$02<4N*j`o>XiuF ztE{LKe*sU94d$GP1ZC)JdUG5`kq-* zFW`S={O_;LQiL?i`Mr=j@g?I6{;#C|gUhj2-!ByPKD%R6mynXBE1kWLGuMn%g!u>w z@uf$^VEPM^&dssgQatl4cV!*(p7VJC2~Rh=*DK!GcgKz0^RZv#?D~z3t+(qKpBGwm z+q@q@%ELv~vu#=Z#1{t%!UWKSV<*(a4VlC4VH9f!k3(`#F;lq78z{haP|kunW|jy? zPMhBp#%u0W?%hdmQ5-YZ+Z|{RKbCiB%ewKiB1K{Ox86?)6=kgS(p-m02TsLD3fM3< zlck_myYPj@?@@P2DT_T7PL|r&oJ<1;4=H>^$99qU(h50$CpYH6x#7q+DdiT{2T@-p7zYz|c2CoFT+eq`%u#GcY!ss3Dp%ZkvFvWW+8@6Vq99V+{Y|nIz6-1% z>R`vA8bS*gDI>dCO1e5bk2AP>fgRtiPnC3(K&#S!}e!IRjUG zF$ID2^|#L(sJ$!|Lf)k)kNvw=#fa(^JF8s6x&4Lhnc#i#t?%PhTHEi0(*8fz&N;aA zZcF!_bjP-B+qP}<7u!z9X2-T|+qP|VY;|tlGv~~lnLD>?PTi?WDpmP&)!KWl_3Y1j zzCjq8#S8-HA}h-2z1Xy|uC2*3vl{rdhLl8>uy?_&aqwo--6hKLb@V^=hruzU4I{Ha z4xkNrZv0B;Ox5)mZtO!FQerc7qX`(adsW85&zGe;KX4xHF6Q_vtu4@gWmqD&M`H!w zq;Q}A5cSbVd~-v@VhfvszChJzwjY*mu;8rw4JTAF$IqAa1T<6l&R(3f-Uzf%pFlU#q%GoU-ZUc_DSy;5fT zKNAUAAq@%C!5`Bn(Fqx#(#hRepx}0L2cn8<7br~haksg%nz?>5aPn&Mt_9iaT`F4m#LPilob{7gDyG*bjxxc96GUI*DFmKZRh&*L!@+&M1Ut#%w?GXRpZ_)oSoE7`aGUwk8JV54eOC{dl ze+2vz4-KZ`{}mTcE1FOskk^BTo^DV-Qa9^?6INb00^~rRz+yv)Zq93a&)c1Rh4-!6 zE&3XLHw+%@p}ow$bt&-FtCnLd*>2yu7fb6ckbX-;Dcm*#(Zn?nkVaZwa3?VsgyD5G ze&4x|qKLU=A~xw=*X9eNgVxm~QWL|Mk-@8{iMjjL$}!QvW#D0RC3bR7P3hiQR8tos zAFnNGXG&A;l_$`*PNE}%^E51C!M~#ac%LDJ{vQ2je`b@V@40RNpKAVJdV$R@)93D2 zy|0A%_D$k{d_DfB7=58eUj{vYS$T^8&FAaiV%Dj)sf474{7DmNC63w)PEN_9X!+g0 zR#QuYT=hksDhEY4M~`+C5p|z*bMxo@dQ($l_UlYYmva%*VXbpfVjh$AHs?HFuG|L~ zr|iYmR+JxqhQiwE_opn+#|+2m;j0WRpU=0Y>2Htw9`H2ikbB6oYDQ#PaJ$gKDv>4Z z<%Z1QC_+FPNN*|XL*G-tcR&QX&;#-4AYPJ%+(3?nPC{stBv3}-&*BsfLcJ*iMGJ&d zhF-q41#}ET=Rz|1dlUTZ--|_Xp)IRXHb$`$H?dx~bI_nF)RGVqxaf)GEg!zEN)3ZK zYYp^2Ghnhlwb?pao-EXB7ac+*+7Gjld})^+cWOsb7S$3%dG@HIFrRFQ%zYn}=*OKU zV>$=~tCQeiDqAmNM@!*#U2{UdhcUizvYM+YG90DgGQsi~t1OSmb zxT?Lj+wtNUZp4>Re992L%pVwoVp(M{z zZhA}2zufKgs}${=eL2lQO->gd9IDYeI=n41aXc!adi>PJ;nnIgGHzA}^_SZn*J=k1 z|COsVmvsxI@_0%;u|qj@b%jdMtpyqNc#S7x+djIoHMw=5j$(K-bMihKLO!9G)0*g- zlXgGvU`1-=b7&$a;}LSpCzQXWBBdrvEX}h3w-}Ec$lG{Tt(zAQY?xU)(mq^e$6PIK zYSkr5BR30&5wVU5J3Dp6l5KdNEzNqaXHZ)3FoMcW87NkCuvo2BP&q-22FT5WXHiam zMjbW#N6HwNXj$>6^mbuE91{Khgf`4bzB`i;4oIB9y!}XM%^RWPd@zdr@gPHX#7G1Y z=8>HQ^^crx9>!uW1Q#u0u0gu$U1x+nEX=I|Ey}H>Ygk%KH?%8rH#{|DE6M<27`#w9 zuq6dm7`(mk;21lV!C}nDT?m-$9VM9T-Ll|mkOz<|ijx;OQR;SQ=R*$lqNETCvf3v2R2JLS{T z1v>*TwuJGm5>pppS(jlYbc)EAG3~7LTt*8xWi#RD@vJ7a8QsDO8{i#+V zS*p_c1B#8tCJ}OLzT7=A<*l7oL~HG@9#n8)wq;2_CiebdHX8QQQ;MCz9Skd`yyg!X zOL@yv)5p&-9;s`U9W~`aZ<(&`nk&}#{pQ?gIzsrWuCSe~bnqY+M4Wf1Wjk}SV^UV? zyvJnH?WczQU%Ej6Xy=ka(LZ_6`{1k+(^>bIly0OYAME(v=ZDST?dc z?+-+ZU$H}_O;#&mKzatYo;-tJGDM)5jzY(UBeg>4l=cj*%%XzQp!tJj5p(|!sh-xa zZlVrng!QDFPGBh4&m7ge0COI~Mi=qQp!QU(!GTLaoZsY+Db%98Fd*ChA5BJ}lP#e* zEu!k)GWy;^VYU!darZWVuCw(S+EVrTNY3ok6)(Jygy*QtNdim(Wmgqr_ z0IW=rzyI9iMRn!DD9|g!v%kB_m*;)bs=QOW#49UQ=fwdCVcvsIaLg15!y)Aa?Scx8 z*mZweWi><0EQ^oSQN~GTXkCWpAaBFm)P!9VW!WJ(val=kXh%V}34*pzqfkjYqZaNZ z+}hn^A99}&gC6jP;<|r53w=^>o>l*|Rn%WCNaQhqJ^!nI+{E?`y1;8)k0W1!GYeOOhO;3@3 zjS}A-J@{|~S<%D5{{V+DAfTN~-GFF6JTtTE4Lix0->5@L3_C1vj8BtRH&=1BUad2S zEKg$+Yjbu{w}q%*(YB@xsYC5EG$V<~bZ|hpSW0Z8==-xBpa*HN<=CRywxgsdaYp*X zKScKcN%Z*9ipqfoSy73y;r0&272&6>0ZRL0Z2AT1ND(#)7B&s}P~Fcmk3vtQTvnz7|o6 ztEfp@s1g8pL4D@!eS5r5(ZCq$7qUV(vh!uH0wrZ#RIq4j;`;g$uZ-FT>a-7Vl(tGF z<;a8df~jGyn@KbasLedLk&A1vPfe}y9ynY~21<&XLRxu?tMIsRhkiMY8V}yNsyw(q zJYJfv5{l@4mQGp0JD@OjTy{$aXDkePe8e}a0QBRlwoo6MYLll?mwjN>sQ{V90|3u1=nbec~PaUMh8<4I7RsS+23&ev=BNRJgEK9?AZJ*&v7*Bf^Xs;;2dEO{i1*@ z5QA8cePy#V?7uQu{NEY<_rY0J%Ml6i^_)~JGiSY4L_$u3`h!^Jr@BIK7C8+vupeRN zpnrI}ak|Z_Ro^9O$#M2hW#qowzFj}alz6#|Xs6@Q_Ce@$^Jl1t1imUHsfTGRn;8Vi>av2}=ju+>LS>v49xYPFK7U+RuAB$VpV+(MoS;C4J( zwFJ2_(xPmru5vw9veCG7aZq}x0f&kz2i9hejhcWtFTIV4lpuBjcEUb|*gr5j!^R@n z^032Xvdlez>qfgU2h*{vFru*;!w%JX4%@?k*Em+nL@$Y>?_0NSLI3+GP+NufkOEXQ zZK+C(%}VJ6dy-8O@jWq^gVY%gi&2RQh0-?4WsRjf@JI^{fnrHQd0FA4Dsd#K-iB~5 zvAR7fON5_tsZhI)5=@)5T3uM5laB-yd;j-k_fo=*&co1mG!@TU+#Iu)B`YF4Ga8y0 z+C?i}z1`kG6^>w2^REptH zGiZX&zB$6ClVfN1h|O`9u6}FzVwnjl3AT*Q1-n*yEE-yHTMW(%#&CNUC|h%X*}$e6bNP)&J#~~NhF{>1k$pu*!dEtLm&bJOsYtjeVn>yK}^y^SE zV^FEP=abFroaw?>qk{li4>avO}h?^}xn9@ji~OaiS-8cOm3%m4E=%q@I1l71xh9Z92P)PlyZ4(8*yg z)!CO~deTWeI%_vmxKC8z>R*RIqWkzBr-wq&#=-7&2r<2)+@SXHOpkV3?lDi^w6+*s zzOxh$*FU}Ijo1!I)X7CEb>Oga;aY*%mkuK3zw-tnM226|XjX^(vR`&WfeCHy!?q1K zp9#1LBV8Z4{pq=+G#wkgfZ28ov9J#?+Js_Q9z$x_C%&^Qfv7ii%yM$PV0ZrfH2LHTP@d0 z$js%I8lj-%dXfh0bW+Hzs#F8FEi+Nczau#800IAr+9(y74W}&e2w<58#?%LIqDFl^1~YTX^>KpP>K0szh+L zfcjsq6a`;G3;);O|IU@-|1Gr0I6M92-2P8`OQwALUnU+IBm=Mq5^=uxGP07K{0S05 z!hRy%rgUgT%*i3^w3AQ*|OL zZ_40L{i|twE6CcMOwE=O{m%xa86uaGu#IZ6%+m2LC4GUNzxZo@89PyD;>MUHx(-RU zGMT-wMOY4hQ;J-jUEP4DD3HT0yNc;ihv1 z&YF+IvB6*d@gU*;?6(recVeEppU7W2l(?BdDIg2QMAke&CsH5$YzDX0zhU9%SDg5~jNybZs zVF+DFI+E^>!jR+I*scDTBT(iQSNCKp6B8NJ$IJOR?N5UV5qnr2goZt@z&xnPO+w?~ z2x=bcPHJ!J59(xf+Ir|3Z37Hr1!3qgbX0oUV_b|Z)v*%5s!O&NvdO>cY!HSneB|%foCAxD+^SJlwc1xLL6cs*u|`ZIys;SFVz$Q z%ucB^%w^=J2PN#UL~QGEO@DIz*N72LuC>NJiuP0)KKXum@ok%kL*>?kDg? zDJe^_H0$)M{C1dC7$-UGF&ec8Qe3NZGF?)p=tY6QYtEdsJxL?Of6G=wp}(FEZ-mNu zM#FC?Ohehy?x^;)-lcaWGj||t&ge`>q<33M&AUK`=G1u@nnkfHQ)%l?lT~cB%M5;} zzYOX3VJFOCsEw5&K3!7j)a9?}ozX?!jtG9ri&IDA8DRBD5v&NPMi&F$XP1p_M&cIw zNw_m?3f}%j)0sW@boY?`2v}_f->NbUt(g^zqdzc8k-ujUM1N$EL|;$d9O$6aG2BYt zp1{6&0e4(DMm-|UHkwdO+!hiHgk6mmb;`lwIq1C4W|rg?y&{yz>O*um7XnMqN-&FqhPtD)YjM|q8#xlwu zQA`GW7$6~f(&s#V3@E?2-bxvmLJ%v=Rd|e=Fr2+W0n7pR+X*M;zSynx`}nP_SE$$c z#e0-qvk$S=Q zh_2~&z*pgiJhjvjgYe_w!O}l8QVh)0VT8nJ{aMs8FT;|bSPuH#KwMci;PO#iu?!-L ziBOvn^x)=0$aEnMZ_@1`2kDn?`1?iCH~Z|A`oS=}a{1*}n@(j8qXc`Y$wSp$dY{5E zwjHcM0+^zcrK(aMEg0+1NOf*p>eZ)AZybX$fjiafqoA`KV_beYU1Z^TjNdNXxXBI~)77b| zk3w*9NkmujaXDUz%zhy^`>OUyYf_3ZJ6(U2VyL_;S~r`3;L~p?tjCJ zYr)+?NI}vdQC0-q|6;O+qk0|lddSY*IJ=<4N_J%&{|i9j$zyHo6(aKTUQ=JxePk>K zSE|SZ482U$)6q)lfj80uDVoJ*075W6m4*e`_aceg;Y6njrd##Kr~zV{RYnTQxiS-$ z=>LoE)kG3MeuEThuQb(js4b5ARh5^+vL!zryRz#5+MOY8(t{dmRUNTV^0Xnj;x;%_ zs>o`4BGumxQciP#N4g!@MT4y`=U00B56jZ9;vKV5!bUcr@!&}ng24*Tw$ClwwszOg zIiGAJ=blA`C?=OXe_P|N;;8$A++=0F8i%G`G#*aea++zS_NtBAvIY}ruH$M7v-?bt zXgw~nvu!niZaiWV?OJ1xNqQ+Y)NHMsW%ZV!p!5X0sH#N}T1H+nLotm){FV^ddd_u8 zKHm1i4X1}whN$!~#{C(4L`yU;F|xL&d$L4-vy&IrHUdF+`M&3KS1{hmGd$mc*a5!_ zr%xaPNdLp$xXDJ{vdpw*qB8u8_U6c!wtcs%p*1_2msm`26}1m5LMP_@j?RZLE@t(_ z&rJ6wcuErqek$ioy+?z?CsZAref}K8@8B|hO4Bayq%(XsX|=|}BP3i2ne8*Ghp#)_ zxpJE5X%f6_c1Z#j1~a-kJw3G&F+mC|9dNQ0v5faH%~fIPANT6(dt`e{5c=m6-nW+S z#nI>PfbN_1<_Oy4J*Ai)w~Fr%<|{0@-v+YKt6R^~Gyu^z*l_l6>UBM20XH`2Wfp56 zrKv%<=z;*HGOuD$%lq>m<%@h>e93G3Qnf)~N!c1koD4~{q>^Yxr-p@dgDz5NRE_LS zPe|rF8tA=eoVu#-uex#GbHSSVJ&O_u+JR^ElkR7}{A?I0_Wmcbj@hu~ zhV$KT_IU0O!BLVaBk))*AelHWAX>OLuDux_nNwg10%%C^$GL2hwD)#x!a{;m;X9%cs`203qX;J*Ii-+cYL0*>qzCdtfH`CzsovgDKJwFIx9 z=dS@QZVU?q5g*UX=ohHz(K9=@gTa2$!IXH(jkFgKgfZ7+nIUE`6%mp;m^j6J&=h!| zPt`hgDrM5tbG#y{Zu&Z0q~=5|zrlx*b*u^S?ydHsrfB5PK7Rg*#b{Z*_p$_XVr zF-|jxrSTbQMh3U>0M+$?>SDayL=>L6r6wYxA1>DxS|KY}J14N5u67kk)DbEQvT7x6 zSgvDLzG^PsZ*V7+?q1f{Y+l{85BPMi7^AKN+%;18g+I;XRIY*3yB@$de>lI_=eQ{h zA|giM4XpBN!Z+l{@=as{;hyF{$q1kmlZzgHZK>ZFsZ2o zh%&dt3}`l~nHC0ugyM_PWJ{N+tNCrhily0gj&~iw%kgpJA$r^J}jQX|SZxGXHW%U5S7n(|9kRU;gJVXc#NA~%M+r=vkJ!^WtmYCDZF z;;b{8z??T3a?ZalT~FYsP;s^aqM5{z+Df^8L2rqFG6vX&PZ^p;oED+d*_tqO4Kjgh za2h3zMFDKi4Rx7bGyHW4V=V-f*c2aGzsC$Ly`aV<;cSKu-N!Rkk&6vv;%`v3DXBNm zs8A&~{APB2CShtXIF#J~U_)QQd8L8|DrYy0g$jNQkcH5kYGTFUjvj=kwqvq1dwe&E zBUln=7f%00_D$EnZ>BLj|61ZC3n?B+6qswR1M|L$icU|K+iDAiGNX@fJW~ zUh_0WrtWfnD#>CFUH-tbxV=MsrcqY<_Q|FIBf80)i`kgWmeMfRR5p1=_|h5DaU(=1 zh(R`s)Ds^`tO$J!Cjvm(H1Kg3Xdu)Ya;6?vN7yqWm}?=}Cr$ePEId@)GDyGOLJp`f zlmQhJ4W{e> zkoHN)2Ce6i9iE&wsU8uJ*|X{c>#TtpuaXz9tO^@LlmW+1$^-D^;0-L|xGk~`4e(iu5dXb!|@Da?4M z3qayoc^V0#qWQi%1S{Vax!s})4lvj4(+ae8er~NjGOg=N`>CcQPBF~r^eIM(h< zni1}Npq_jU70)Xc&79F4#-h!XyCLOyXwm$#HZ6ZJ>LGdNf{s5bo`18;VurB2AQjAD z5Y|k%hkedAp#7P156$axE4Rk@`{)`NhsnRW+&vE$!w$zu?Tc;$@H;SFm+kxk^EmS+ zxIBmUvq!vm%Oh0FHbT5%{3_NY-ROd??AP4S0oYSPZ_pRQUmuy zQ$YmyLF8C|mB1!`yoT6#(!@Z0px#lFcxo%x{!7qMxq;*D9kT9cm>B=#A9!ML*&pdM z`(+stJ*=0ql$tSmzbn61=v7l(67sarNAG`W~vV}LBGotRNrE8Ydk?SrLt<7ngrx|P-n*J#Lz2XQ>Jvg(!3O!5N zELmh%bYua2Y9nX>KG((mL+FNbA$Z(bDp>=NqP-MT!`;smn7&}`E7qB2o$g@!J_YSe zYL<>U-&eji2jYGbR}%9fwV<0XI;3?LxKe-k4P*8FerZ}SIrIOrTs!y8;MKG1r>ejYSIECmbYQO8JYhGI< zCwE2qg(XQ^{dqJkDU3wR#dKRJ?8r6q?*UqrwqQiF8|5c_bMpMWTu7mQ743O_Npn~y zWjUAq0*e}jc{`kFNQa}`s$EbU#@`xKZQT*`!R36c+KPY}_B^o!mshrfAjr@MoFl0|r z-=(G=EAKc|Oci{b5GHVD^|fK1w98TYuHcY;4BI#mxF!5KS5`D(Yo^dFO#MTG@vkIfdTqiELH+@J%&FQ0EXk$fiA$t5MqTQEA($}G%c zD=@Xvt{HPDoJ30Af)uN>c482AC|f9m6SVs$!j9|b0y>?mnJRn{6~=CbMV3S!K-ta- zwThaD=gF!%1-s^D0e2c6W{7>vuIu-5aYJlU7H5pF<9B~n-A_$`Ya+6a)=%Mp4+XZo zh(W}Q) zG&b9t!kqP*leULnNj(aqU~2WLX9kAU`7u|KTh57ojldbPG-^RONBY>`8(~Gw>JdTm zi69`8y9rPole2~xTF7%ZQxIaD7OFB|h!-Z{dml-8*2d%|&iTY6>v^Dnjg(VoOT_y( zxS)bbK*lvAVCVS)C||h4m#;bd+>CgW=PnK6x9;OWaS4h9-2-_oJ_le?5KzRHVzV}) z1a9dAcU6Z@1#(`y_C22-J_09uw`%~Zxn4&m6y;iuG6Oz28h~Eh%O|4s)w#47YF<1I z?BVy3telAE*~WJ~vIDZC)4KI(pqewa0aHBv^_Y|P39j$)9@z^7o0VZ-4GTKOD$snuB16pt;NAy?bK6KX1xt<|vb= za{kKjyjpdf{>a?sc>4Y4^(iwOs9{$V`g~R=govF|IL3e3DE3B_W{w@TUlSW`JQBWB z@P2S6$Oq&*Ly4ObwQT5WjvFiSfR-RMl)YkTbI>vZ0~g7FIf!ZC@}*|DD{@96yv%x5 z^*V=;pzV--gyvEWlxEeAMOE%GjM}*DtLW4yR+`QEQh}*Qni6H3hk4}w6f2q5OdHO+ zD^B^a1MP!M2Aek1ayCr?u`s91`h7cbAYx@d;(?7voP0Keb%2XTKh9h|Dhm~ptZZ|z z^D^>zxZ>lmw4A@9LuSUVeG^?RK6n44%r-N3encE}Dl^dsKSqk)Mm?y|A9UJJ>mvO`b z<`)h;{-hdrg}6BA;sp~1atN5a{)C!WdsH&1dg-i8)AiN_VW*n|KtNX(*K&C>CD;;d znuyjDnf4T46{V#Vw88>^g`)Tet3niQWZBsFqhmsvDJAWEK+_{xFcDDkmdlBYw%ZD{}-&201x7C5F(I zl#e+&L1FeN$AL9=xruUI11VmypSrt{=e!IB+|NOra*>&TUB%c zJim5BogmkKN4SPNkAlrYih4j~sGTxHBM1L@u)n1Adl(o~u1;f7Vg511*|IO?kiqua zdZE=UupR_y2I)7dcUV@N)F;k~b~731P3>+n_Ap{2Dm7?J&M#5UQ`gD7(R|sH`!bvIoG;~wOW2?smtkyYpN$h?tQ+yeF z#eN!oVtLjb63IrZpEA8J5OhXNl>rq=vFz3S_bzbfGdI??w!bi$i! z=CezIC^2?fqgB(sl(xeKnS9+6s`*)$LW$O`0USk4V&?OosLLUu#%a(u zKSBSfi6c|J=&=M0MVr-e;C4n8!OPl2i1`j!0O?N(4ZYP+?sR5JH_^{sEL@UJgN^FL zF?oe^JdQl5)V))@bP5F9#?RA@ZZ;p>p<;9hfnLQm>Ww6i%wRA&M__D>LyLfzI`(g!9Z&x2wTlwlw{rPqw zBD;+L{*4Cm;LzFk3;d(~gR8GyM*NK5+sUf-nGQ_Pzo}D!lPd5IR*?=__P$G_F5phS z;_iAKXqp{GyTR zULd%j6#+3~X?c0u+hY0h`1AS`ogR?1q3keFq#62PitJBg(|%W=q4G;LXO3h?Q(Ozk!zL$JP!-P`GgKT}Dm?rd-anXT4SCWKg)#@S)(Uei zDY?fBA_nZdW6FNBb3$HBb|p2bBZ(ALWwt$rFCd1QH|bP$_i zH2zXAD4e3ua8F>X*ED&GSDKbcyG`^?6I@*f(Gr74k1scGAYC5ERE<%F>QEo3Cwix_Rs-&QSjysigN7H!6VE(of9A!LYGH$>&|zi-n_veaqPu$KYfr+9Q|h z8jW9e8*5fSU*C9xW!qM{;lZQ4@wV~lnPfo4Gp$^9Kf#dkc|l;aP2L-J z3rTlXc^4j(1L?p*Dh=$^$Z4tS(&Im+2ZQkwi4z`M;pODkS8u=fBbJ~fG*Om&JXiG} zj+UWWzl9aJ$u?Wmr^*zTq%Hz>55U_Ag6p^Lg& z^pngcHNW9H_zlhlYnqsA%K##|hv_MhQiR)DMt@!?SGpqYG>I69y2g$602nZ;(C%Hq zhB}U3AfK819g^RWziVM)E6V6}BiaiPeHs;1VD5;OA3NL_cEf~1ru?owNT>X+nA1RqAb0v$0s!~>^dUt-e+vQ5x?4uVVax*qiKP3P zhyP$$-D3)(b6hL?D=q%@8c z@nV=)i(9AoOLP!y*+S@YqS9X+X)XEuWUupc+}Y=OP4eixsv)8Vsag{q_ayP746f&y zQ*i6wX%+N+QRXEFPNA|lFJ&<5dDIk#5IBQ%Gu1TvK_2&RiD)f@9-D&vrr*^)> zFl3;pf9kV{_2YIF>!`Ag?^rqiFWyt-JvVbKHKFSp^i|1$sX$Oq;#no(Pb4 zPjHnsb8=5GSabzSWGK@sMZa)!ffZKjE`IQewh*jr{&gX3#geQ;4n%QDHDEQK`pMQt zwS~p$?iaRWEnQ0CN#ppuM9X@IWZXiMQp6I9eLL3QZK*G7yJyXZ8pXuBdx}isG1$7+ zw^;b~I;wknoU&DA8GF#z5|!b3maZ$%#h_6{I=3-w%pq0CX9PSP7WYGLsdnC3zhaU1 z-^HRAo$suVb*c<69onT~$pBAxl1^^Mh+?O^jgba-@Xlp-7+d4FcDir8b=j4K0}2p& zM|H^sM{RWEM|X5WR+OFu2XtjWxW>f~9>_CPt|q*H(xhS)d2)hY4MX|6o?qes%RHU8 zvu!kbyAtOu^x~Q3XNO1Z&ci|KwblSIPkb zn#&vAvn8e>T7B605pI*$vbg^wEr?+D@Y?z78a$(q;?f=D4|Jo7^>ula4*-~?lH^Z( zcMliu16=o>8kxKYQkO&mN?h8KW?CXm3dP-v6klfB@261-wD&?J^%eFo5#ZyZt-H64 z*^u|whhWiC{KG%-5Y)UuBER$WGKJj{9wX&MIFv<#*93upBNW0NAZvjw6~b7RbI}$< z^FYn1d)w6|i+|#&UH_=sm4J|njMa`VV=eh+-pTXQm>r0LW56t&0eIh2Q1*v#m%X`lw_;SfvYF(-KvtlK+%*ktn`7ZjC zYmc;2N749YHY|Tdfw2$W(Q>g?X5K{Fu7kN%V%GzQwM#0q>?On%DvCN4x6~%DNJCCp z&En9Wr?6p(d1_1)W-orE?iB5&(!*4$9JddQ{p(QxZSH$CMtzRU_aC z5^I*|K=bj=b?K{=3g_!BfmCA)ndnl~30w956N) zaN+|~NMdRc%T$Y!`<0F>XgkS^V}B%+>8}$jvn&pw(^6w7ORK$pCORlnt2n%lB74&yo@ zjkPuEwPws3td-kqp^6}aom1>kcNfCvZ?};^@P2$YlcGB$4>wI1gqd3puBbcLXg$~9 zu+9-Z)p+5a9>bZggT4O+^E%}e`kP2bwh2L!)t7a;Zh-z#5_SQAD&p0p{-Y3-v#r>079!0@}3!fNlwJyFXHPwfO-rS|2d4;A*$~Taq=8Z#!(kGPWt6)sa;*R(NbP; zP71J?e=H9RKr={Kts#3=rW}GgMm!8Se!(Xv$k8muYzK(*v6N&2J z@|>*gQU01vLG;2IM@y2A!4#~ig|>;EmY2>t)Fh}`cVjbLh`Fdef{RzYTVfTfNO;1B zm72&!*YEkCTEM>`)?x@2v)C^VQ{l@fK=EIe^8Omz{yPp+5n%Ek2&S@>?L0sHA69$I zcur>Iv3h4#qW}N~D)z@Gx_kDhZ_WT(yLgLu) zMr^=8fItu`e`n%Md)-a`cH{N-{siiQOj1N2w!&mRnyaxJAM#3LhGIpv-e|H9G1zD@ zZmF4&Fa6PWx)f;9qAS#{dEGW+Q)wEAwh%Oq^5mHdy_qw=&@u1e$~8_kU0{B3+Jj_3 zeulMi?X2QUiD~eqFcij{L>aKLN$$J@1*nkn1&@X+8y2ruL3B=A@|qV>`VD`4uL3w- zQdN=*fF6e_3MPBYhB|Fv5R?YJ6_Q7S!wA{fH3?#v7l3bC8)yo2Ch!@Hix1YYCvXTA zS+qQPrMtdr$Q)COy@R-VSEXIrT!_1og371>lRg10F&eTyH7nAHM4p_nCLV+3Do-jQV{w4FBV!lDy3qUO1+=#e z)ARiR0Xw$$dv#4f8;kvDbb%i9CCBYwI(eqoE`uU+O2_ocFLu-Nhyih~zei8Uczj~) zgiW-Hs9PgD4TFSH%R=8k@V(`wVOL-lC_rCo?RO^Mm`uizNgd^fc_b1PZNWNpn6UvX z!_1U?`IL$#NR1%B3H4&SL27ZCyD zs!OEa(9Qy} z%E~LzfF~9=5lHI7$r`jNm~9|9&gLv+&WN94u*T)n!ywkYiH?rl2H|)wPe(x+KRn7< zmwyPSe>H;9i{Y_u%)Y%Fe}zk|5B$qG)fx}5ItWLBNs#^-8uyWJIUHA+$@9#sZrO>E zk$-hu{~JmP#V{R5+?_vkk~Sf^3;zlC^DGrbf&x|xc&fz!jqXQ zD*Hd@Y_dj!na0=ii#XE%e$M`#o4-)kQbHC({)35Xq7Ev2(}Wp?CZ7TVMjxgC4neC+ z4~0&E9@ct4^+;P;&vZUPElD!{0`~&qeodiL5nModSl^95{es{wu0mTJGWe}3FtM>h z`OuHo)MV=L+)?(4V|<>^_Z_1LK1tK=o7#ed3JsD)Yf%#1V!Y~jfo9Pjd#E|g^8U$y znEik~Q8dOx)1J{psVf`GlLVEhy%fzICa?7%@5a)#M#eqg@^w%!9gAJ?Gofo6B%$_o z9rUL8^t2Yn?h!TDu~yfP#;#T$41iojUq;lhA39jEu2ayD7XG<}Mk1s7!N|I>?xiiu%&Qlp@xzu?St=5lbfaP-x6y=;n7j zk_HGDS2nYbx8PfIEbU^yp46*wf~(7u z=f*X*^7fWMtYtytZ?Ol9I1YSt1EEhn{ts?KIur62U z5vegOzI0`aRY^Um))9mJm%0?(jc-Go(>lJ{GGV&NAJYQ?_E{EPm~yXIH0*K?JT?SI zb~Zalmecee>gL9Vs{yt3Q)*9*WXiF90nS3+^6UFI_wEWAUHX{8l#eFUx=*;K)+|8Cd`r4~-Xff$Y-wb5NQ1lDYlfSYfNX|DmxX@X zBSw&jq-9z00r!p(0#o5prit$CmYxH1CUSetZh0hKnr#8Y1&R5+tKzJ#kwWzJj0Jmo zlNBCcwU_mqQrff@kFTEYv}eLRZ`Sv1x&|1lpI+Kp+vH8XJlz_&PKiheEG}~O!$SUu zyIip(cez-+i`>pPs9z3^YQW~!kM^q^rnBGaOpKI1+JalGV$)RPUr{WZUXw^x3#zBJ zKF&Dl>R;A}9Nt!Z9`ATK3^mWjtne#QBSmfLSVmBWJ}fC=s@2Y2WSf5{9&9nKp{ZoO zu}~60sO(VDvvzxE^-~QU(9giT8pvRX$1f|Wyb6SXA5IJ3SuQtXm&odMm#Kr4&kFRA zsY8{|67rO(Bb3kj#ThR5i#wghIb>{G4%%pS$av0%aPES+a`=M1a#>|;CN4j|hO1ys z#+z{7PKsHY8#|D&_l1CUH&YM#m!m74@lxs@$}Qla?$wZhW=4mchVkf(e@qc;>OK0o z$!5ib&Tsa+Ykm=HW`nI)XVNkG(l3GuoHnEOKbYU*mS6RkcESs%<=49+(E!M8GA^)v zgoERhC=J0o6FGoCPGM1>hlMlw+K&EPt?jG zZMB`$g9ph;f^n-xte@UhO?OLnbcp`D*cU<3@5Zp5O;8MaoPL;faVdvd51+7eIVDVr zs?cRXxBn*0_*eF^aLTff56(W4!95*+clPlwSFmy2e`X)htjf-~GQ-#CIBntWaqMGQ zSTYI}vT+n*>fN6&L0ldA#Z>S5cNGAc!w&V|1f|J-n^FZ@JZVIQF4qJ0*F{0c3v&xk z=CR-^iZxd<*_QI57=TnnfjT}GO^!swi(_Vq8%&h+M%mtIV+D*wvLOKm`*jX{ZM!Mv z=-6SRQNDLgMzOltknn?|S!d%YJHVR2$dIX2lKVzx#Jj8rx?Terp2>T%mRnL^kW!~i zoBcJCZN8r`@r$tZIq$DN2s_UH0Lx1=B(wmJ?(3iBvMSQ;KMP_peks{0k9@fx?8()& znQv!Gc;7MzExh*ZwzAzjwzYBYA6xkNmR`w*@{fL2X4)$wmWfcjkswT904#09@ZsUv6k`2%+oC;|G z*0GIa>Wcp;D)@G9-i!T2KTys*fvwCXhBg{@ke@`mGHs+|Rz_X-rfWIddrDC_OfbQH zDmybQ1E+qIWqI7+G*w2POQYPCEk)B5%mK@+>*b#7?9@}!?By$M0pD{2b@+&z^Yg>+v}EjV*~6L#At*~nX`;glYpNMnq%#%D9}CI8 z?ch{TdxMji>05OR`0qaZQ16q|r=l`|Hx*Gx{AKx^@t}hCgJEtQ-*nYrxwY7wHghNI z*z;>*YioB1{nPg^Mvq;;1FZUX((a1V1cZ6TZc(?%(;cc^ax$GX=!kUqJv!{%_dlQx zfHx&FI}nzNt6@>mXq4~7|C!UsPs?oo1UFI^f$7nIcO-ECD-YK;cK*w^j4rpvP@lM= z$U= z=t9qh-{8IH!dz;p`4Hs#7&N*!@Tfd#lXvS@V|<(F>PxHEDAVXx%F4_YSC;V)dX(&U znhX@=h?P6r$4~6@%*&~a9RxJxaq7{UY-}00!di?`f25opAFb1CGDh6e@+hyBMfdhW z9@MflsMn=Ngjj<3Mq{;gN&#GiM4W`TS5+M^MjOlNic*R=%i5OXB`GOK6s}_5zI_O> zaf%1>N*`bTsB z&PDodtm|8=LyV@oBQBJaj2R%-n8hy~x?^IHbxzvtTvWJwjnHF5(#kL3~$HUKvMC}O0 z8OMie@XQY=Cm@YVdZU_DIQevWGWyvmJ$|u>5SrR(WFH}pbNid=r$tC$9BlhsaxFus z)Ti&iyTmIWEbE_@&H97U7!r!R}LUO(u&NPpFzuEmHgNy2t-pvHGw17IlMj_X<4U?t?9&|L#%7^UqQCZ|-;~#veaY zn57kJeH+1((U8O%Q>Kwc!B7br#s3q2O_OjCwVx06$LnA@+5UqMkKYj&&)UyeBqclODU&pu{0Tl zf!@V?)S&2ZM4*rTYS&p~g9Va9HHU8V1>v+*NU0 z?|kq~wAX)(bgcI5C&3ryES8D;lAN)wM`D}-Nhs^eZxxvY)aqOTe(5^Fe_OP$`2Fu$?PKcz8%`)uTN2o4mpfCLTJIm zVn`26*Yg0Z)RFBsxP9S1vR39*_@fAEtt9v>Sj0xvWCY>S68s*AqR6#3`3P_9b3lmRJ;puJ!PQYS1Z#=;}M9Fk0+-$I&(9?s!t^M?6w|X@G#9Aiu`05pfer2V#BS|5?t8#L-KQY4ajB-6=+Rfg_l>?g7 zYx(CelsgXt4P?!oO7b50or>vXV)Ex~p309N)7NExC?3%fPamQJAyELY7;e#KsQjLs zSutQMp!omVnEDkN%8-G%AiCh1^4}d^y#E}oNq{V#~5~p=5 z0*1?L%4vzShBD9KeW4*T8gPA=B==gnlUygMw2*kgJ0=$C|x0?S@-d=i!A6M8|l#HBjApl>zve%54 zeOwH5W8qO#zn9Wa_>DQvd?t3>CM^`!wQhQl%JT_AbC}BTCAE6qU1vs}tO^gYUiJcZ zlfr4xJyOl@!PI5)R=5ID7je*83@M=HUGviBmhU}xIbGMfi_Ys2oZJj2S?5kqrMgpS z)P5-Je@Zc&s{>YAlll2>jYg)(vT!!a;EPK?63m?eLn6A6zH_#0k761`nyGKb#$6=(eNfRmS?Ign zIz3~uPT+$Dvu@0NFC|fy_w|q=ThAv|iku%BZl|?ZjZr)74AWJOEa7%cZ0C2b57kT3 zVT)-z(6p;Q_U+`uT-M~}He!{oxjIM-E9+{2r8@!n_GlXIB6;?C6+IY3#k^v?IfX}L zE8*xzNS0UJS{#w>`4y>v)b%TaN9=DyQo0oT)|79!A7R3<>-pld_+rQ|@z@->Pe0pn zHqOVmy%sL9c59tisu(bs(!s#$|AC|DeXk-!5M>bcG(pxTRAJKqN;fsuB5GQFuxl5` zAb*WWQC~`#>FGEU`5M`mvhP7ADYQDlnSe~=Xj6<3HRk@GITeO>10@%Dwd)4IEBd>` zk?&tQRo1TBKlBwGmDh5*EO2j!bTBuqNXEyA5fCeA(x~Jx+*Rg$gtyVyxaTi&s#*@T zPf_LAlhy{KTC7C+wh36r#%$O>Eaqprhk75+<-h#CpVfy@2I>Q%oNaMDLa_KfJ`bA^ z%C3@Zd3kIOi%5IQI^s5QegBah0vPE%QvlTEtlYiqwX$B8IKbo7eM+K_46)P|QHzTC zSStnRr|s;x28{{G00^^MhwS9^&JHvm=_RCe_KPM}$$PMMA^^&fdd^<;9)f~v|5%)L zB?PiJ-qKJCsms!Q^*O1&0NkUKvukH4k>~q$?!5*AE{^1KIO@w<#iW^yPo)NYDNb5e-{~8z@5_m3$+g(@B(oSc zbgtbs6B?+yeFP#p|H;@*MV5SjQwfSd%zo^)UF9al_iNp&h;C2p`zY)Hbg)XdWbRWj zEt1Z*6#hI5;t&n(M0pcm%(48MyR7Fh>R;{a?eFkF#@j-p$9maq6Q~?B)W?eGk{D_d zs+IEKv)S--;u!@nvy0hFj2K)q7@%}*m9j$vk79qiJo8z8QmRt%PQXy^L&Xc?1+}0c z@PU0|_>Q=Uc9#@UW0=Pf4_~zSEqYb3J$u~x`(0`J;yy7F`2>SI_RM%XSM}IVfC)sQ z8TF3JOi{^XCBLcCuG_)KpAfE z5QYE$@cNzqUqe)9)(x8zM^x=I3Mm~=)?Fx1jMRN(`34SSxt6YkQWn;#j_svN(b$(& z>;O94cf8PYVm?W$2!nfdisst%G7%=+`H{gj{Sz{BbMx09PwJ(RI=Ab9m_EK0puII> z0P-v!7tnn_A_f;39n8tBv*{e>&}O*etm=*|vB+~*q%})L@0Gf~YgSK>(cAM3OLcbq z`q@H=XeMpgk%9IhXK_?xseK#i0d$G<#cyEnL)V^Y`Sz72jR=)r&%tj^25Ei*R338F z?Z;EcpG`>scb`4PiqnBT%w3%U(q(l0uV0-}a_~u#fHkDM_*gV8w9~pS995CL0KJSx zK*vn0k;CP^^wlpD)U6MG=Kh+Oi*e~3Yw6JAm2He)_lGhj(jT^)fHfjWKB9`_#8n$t zFxHpx`YSxscZN6ga_B!dm5*K|8NOH;%Z!$t>|yGW&JBOikXV+QmL$Xl*m)_DnoK~A zeyEtANqZeQMoA1~7BbD&5fkmOvyYXe-CPp~vv0I>cQPn{B8omBLu2ylsP|ic#7{Wc z>MtKrnB4H$Sp3bO%fu0~)(1Iyf3LTPk2wx^_t0Wk=Dj@0FCAqRtB3!O&1pwt(z&9t8y1TdP!(2mHuV2h@++vn8tG zd$m{LSdi;XpPEC|V$O_tTJut##p5%I=LVxE(VF!t>Q>Sv>sCso(1I)9STu^}KdIR5@=RN$Xu^fE8NU)%QE#BPVZAR{dDl~EZ2a7k;XqAcT)hBl3^ zTGbc>SBbbxWAhte9=D6BFd+d6SbhMyFbaV3Gihe3gSiueG928#xb2A=|v0+Rxj0+#}r z0^1(3BSBuqo(BB@odW#}8ag}zbPGZR#e)<<6cqSV&~VT%AdE5y0wfe@05o-YW`uTl zI*4IUXOCyk$AV`M9w~wf1PLX9!2mY_L21FlfrbE0D*+P+RSohlLt%iol7Q7f)Pckf zj|UNgX!cb0SoT~jxHw=x!qq_WO0Z(U*Fb)bAe12Gz|MnRg+75mm7rdNDMIFfW|e@- zL!E;>hPn@b0R@0wK(L?~kSu5%1ht2?r?tmbh6^MCLIJT15Llq_pq0a`LAszXAYKsH zp3$DrUZ91b2eb#Z2X-rz0b(PR8=M=Y8>}0&8@wL0AA}#2AEa}5Uqn!NP{eEaYeW}F zXb*A^tRl8&X(4)p&bapBVjKiTpI@SiYUZs}mD4$`$!&%<=SgJYQ4l+&(s?;!oJ?EY>*}Z8yg4i$CS_@=X&M z8)7+?k>c(X>1vy=Y2*s1Vtxyc$WB;FJcW?;L0;n>qwZMDCvs2GRd1@Tkq5Tb^bWT7 z_Mq(;{+hx5!rS5CQX4dL_Odz_<(sy%T+{zn-#eDHay(JsudLkvwN6dvmDp+a;Ik3j zd}E2Wsy7rW@6TjbU)0Z;;sw=j3tFM>%wZa0ZR4T0Jx#&&!FJ50%;pRS2t^sj=Gz>i z{3`}xeRguKY-Z-f4sLEPpR(TtE+B4bZ*XsTJusfBZ|L_HLFVB@P+`!&(So6ak%Qrb z)iq$tAehP^g)AWGEFjrHsQwV_7SLi8(5G-VP}>n?AW8|mCG1mJ5+o8h5;PJ>5=0VM z5>ygs5@Z|bfe0}Pa|-xVcoO&r@Zts?aTtLejvbL1E-As529E-F7eOfj$$>)vhXOAL zK@VLEK^>t9sslNK&Oi8A8{XkAAuZ>9FZ8F7y%2S1yzG=C73+~Jzza(TQLk^Sm1IXlp`9# z8zP*;Z9!ciU(ipG*B;!S+#a0;Y%7)l>=w!v)E3ef+!k6R+!e$X%oWsE2tVj2h$pBg z$R}v$2wxC1C<-JE8U+RJVOl`9Vy?r8Ai2PiL4Sfsg*J|G1%0r9Z^ib9a)2&@DS;}1 z`@mRgc+Tw;t6ADLj{nz(c4_w){M8fIpR%j$8wcF0eP2XB{o=YoT0-kb>aV%dltJ9K z_x3EEuYPrLyAvxc>|H#r5rgz1F0A<+5+rvu)Q5YFLRO9-yt;(p&Q{-218TO#h#Qjs8cuMpfLP z2Zh#ajPMh3?Y|vkmA$FijpUvOWIs%sx2Y2M9*z!uFFSkQe(Q+@ndlk($B1K%9h;D1V+C(QuS~Au!7FW9w8XOF*Oi zH9PZ$eYWu$P^_tinG(~BW0t=!Q6&ISeJgf%>{`7*;KwSQYyO0T1(ZY9)wAKMANzL+QqjAfH*V^39E582 z`66SA;FI!p2}BmceH(#k1VPF-N>UX-W)j9bndLMB9rYIBZv?oQqjVzyBe;ADY8|l} z?u2#TmK|2YwEqP9eKZT9%GLDr*W8Si@= zr|mM6$!=ZgPYGbx5_$)O)4&r{&2DU#`+8IcGoeAsfajG*JF? zH8&=?qPRz|2-o}mx;W|GqHd_&r)Qa9rsyRu^ilFNDUHzO{MYnIHbqZ~V8xegjMyP+ z9;5gqMC0go?>_rV4gS5-Pll&~4`$`5nNAr*jd*p_=Tuz=+f{6O=#F-|l>;|yv70w+ zldpSjk0`*{0phLM62$I}zR{2i(LKV8SWsV^{V?}N&`4j$Q{i`a=z1!Ed?6I&4dKyxU%uUbG}Y=FRlHyT{f*#p@Wy(>dvD|7eQ#hR zHR{Ro8vS}!45DOI3}Ywt-T&G1f*$nRQHnqg3dIVhc%^v0z392YUccX?Z$}4|j+LO3 zkBPyQ%$h+gT9YG@&xxUwEQ*ncMTfxjhrioAYdmW2jjqd&#CD`crdo*OhH||+-e|9@ z$EMnlqmqwb#g@*PA&4grAcP9_L6gsug}-h@-AFxJ`D4Bk07uCp;nyceqAm{i#xE?N z2_CWh<3ypzXUSqxt=VH@Hzr4w*Jt-IAHDpuMB&(NTf$TATcUH@^oM6R=t0&O*!#E_ z_8{gBdN6f#Fyqi1=Ud-RXJ>vOO z2SM$Oi4ljgy^{EIznb_Xzl!)rhKL38y$0L}UYv}cw3|bePKHtji@nO;+^@3(N*4zq zLLpyiZ;&_GW6Z}w3E!+9_3o~$An|i&53typ)5fb!Oc)bqfd&kTdTe;p2VQJ=vj<3Q zIa3EpY&kPll=%A7R+#wuvsRq=Yg1N;__H=`S&7cJp1AmH(+5s$&AH>eCM>z*Tx@P> z<6S0O42eI0Kt;SY?=~sC*&YMNL}H);Z6a|G&=8N`(=(Ap&%?8UMbFE#kVVhavya8? z*s6=gZT|qxaBF6~xE+|B*k|J@jPGpIR*=|d>j{tlGKaG@wrm>hYJrd-A+3W4SsxpfqeeIZd1ie^=vc6GX}0xCQkOOGbT2f zh)^cFnsiQE3FE8JSi$3~Pg~LBtIr-FvVEAYNKUl3xuwBhoH<}*E6E)HY$C#*Xll|= zk!TO}*Th@&y3JrIIkf6#DLJu9Wii`3ur=(T8fR|zk5BwycyWB7Yk0ALz-!n)H~ypD zKPGXY-QnZ_)v$kNys+IrIkDU3RtSG6W891_lr@nb=x>bY?sc2OvXe26cia5N_Ot`{ z78KU;O!3n+r88>vROCWBU|pX0=K65n%KV&TWjBqeafp`JFihU5?RUxQ_%HaCg_hvd zIP_>^n|SFMN;K?{anG!G*+Bv&L6zqiX+n(ZiXtw$nmD2vqh%T+25hScU{bp-3-+2e z8-ByMX_oU?U|YIZrUSOR_7&FUf$z*fg>otptD3RMstM znOJ3Hn%8&!LYIBqfan_mzEICMAB;!mPT+5xSAT+k<*#!EqhH-67@z7%|H3+W@Po-# zqvh^-O=njf26L)yoq5b>m+yEAT5ugIc?((ujq2p?yYl#CD_@M7zE&*;M71F78?<>###c`1AbL}aQdCQkVpMn2w&(wzW0p z*_~;-V<~XQHK=4Qa2M38lf7@s;~lSf(QEo*vmDH9$=d2L_{E8}!(p&%%gA*(*g3gt zr{d)+UBf&W*&4RNXx1ZGnNnK&?lwpT5hlyI*#7_lVR4M{qro z%TaomOtBdkJyiYXtBQ^aPJ~MDpw_6?v}PJi8ce#ic8-ls0^{y1*FLOaXSp_uHh-AW zH@)r?0~e3Gc7Ng?t-0;jlx{Zl_4Rcy1ogfGUp2{2$PUQl1h+1MiHws#<}GXn`rg`} z9}M=rC%uc6BD(`i1JPb}LDjE#GsfG_+vr+i-*=986kno)x?gc;K0F0oq0OLgn*)cc z-e%qhh2M*pdjoj4l zxb2W-#rk&)JO~AO_eTxDW=Rjk>_FHq8DBM3HQs#>T>5KDfd!oB$ znkgK33Ru$=+Y8z1EB1rQEz2^IgA3l^JTPXu2)G&&p?`2dPwC!hF5k-%Rr7-@xb_w zT+eps@Q!NFWawsS>RrgI_ABzt`y>D3)5r~C>0++p#7Q{gUpQhzuaz`%1qAsCc*#CXxDnMDQh!$@zty%cyw*Q z^2bK^V)w56TK07z3iBv+5{kQAOVTJ~>eOj2XSkPzoFts-A|W+b0@vx!d4>gs#j@Rw zrBiK%I25Jw!Sl@~k&{;=LrOHQ+Lf>{94T?-4MW@IbXxJqDfVaBKechcBmd-ngi#6w z{%R|P-}e7abAOOsVt_dn%n_jmVca|McJ7x%BIo~q6G^KM(2py8bL828ot zL=a$DPZCSa+mxkPHx@G7v2)sQE?2x5NVMF%$G49p;6CX$JooE$xqp>IezGwbI0{Ok zz&)B3`3_e1G-iQ)hm9nmpJf}pAEsj>+tt#?N$eWc{|RJ(CJYS4A)@{sDjSV5ZZ|@4 zt>7B!%EW=-V3kbT{6V{EQI|I`*8z}EdD z@l-iyH-K_UEQr!{NB^k=75*#dXUdM5sDN9ZB#HEVU;*Q2ml$rUNl=EUA-=hkc!#b5&Isz$87B}cymJ0{(zd}m1_`p*?RV-)tG zu&)yb>1||9V+4{bt?8U{>HK#D+(_xSEYmip=2qm7*s?W596Y|^{wx(}2N;rqZ`h5; z511zi%Zg)z6`Nzr>|+cs9@@5FC>bb zH(<%hjoE9RG$!dc7ggi)e@VUbR=&k`g5&oTOuG4-%~YqE}(^ry}#vKezM{0sY(v#MpQld7T!PP6%sz2EfQ4(s^=b z_ihGx!>R+tyqxywZ^U$N`9RkS5J&H<@mbCmZVAF@H6D5)m5qRYD9Eqpvu68|PBfLE zwOODRD@T$ITFC5FW@0&Y~PV9oxv*vwL0XRxk7vEGN+2v5Mq=ekU8PsrI{8M(Ywg8}Ms>YKu@M zHeR>O6GZhPKJ<^+&)?ZiOsi$$VU!2wuE}lL) zNPpzzsUd!+(Iqq+Tx2uXS&Z%?C&SIR~BqH;<5 zl8QKDG2`)KY3%Dbw^UdC4L;o>-tzf+hBZKm$0tX%z<{((*B+S0XgjN}a0+d@t8Egf z!)`7A(0_quR?e9RGiunX16H;xsPPO0a7t}yR@h-wl3N_n4MNX`q^_@ZChm(2pk_qe zVot<;;#IYNges}cK11H>zF}5GU+NWWi+vWu;yIxEQ{_fqGl8ATA=(uifzFwBdNc^T z89RKlmeM&#?qNqB#W|n!gf-yL9$81(pCTD~!^v`pokUoAP;pDRGI26RoZ9LV9HD!t zoR!o<6~~=w`9SG(PGy#4(Q-&zVFfc3m+Kktl4_X~>5YhJQgdye{*3B~t$$i7vZy8N zb^T>9$eX4~I%iJx4aGU5L=@#`309>Ixdhai!a1*(REvIkJkap_jR}r&{U8Fv@BgZ? zISB=R`l}Ay45ljl&2z-RczFXl+hF!5#vfNPR~6UB(x2R45)^Uum6v0)tc+N7tc;Un zPB)L;GF=3pMy_ho{?t)0F+5X+(CxmOzYZBRDO2%X_fTK7lmKzdFAGDNilV*XNiiy$Tnd8nrQj@ z_VV{(wcpIo4=SgM6*uMx^ylBgsD(dR_TZ6HH(4Vv)6?vzS9JChMmO^j*7weWU`9Vr z@4>inZ?*6|jt%ZbESU~&?_`q2c+X*x@_x}VW!(ZTb%l~a6XB16>caitzIm6o1*R{w~4-1i=@`{DLKiZn)vS*r^1FL2jM%8^S)jwiF$@~(4i7`}n z0;8=WiZrrwWn&)oq*EF~M(6m)^lq6=JFxOMyXBD*D>f33*>-AtANF@{8R-2Ubl47N@>1cr!d1?PZ!WnM|sQ z_3C|$D*}pgTz${D7u1Z5IH!e)Nj>NS%7LEWCGJQR@v_As#pwx`t5@LV(@L#u0v`A! z<-P^XO}H?cP_XLOV{eW}UlIn$|Nfka9!l{u?JGVBwHV2Yk5tic_4*I4=CM1bW2+y$ zCiLVO1#l)L5dUte{TFwXnA3ib6}*f+{r$_>|8U#3-LSz;R}-ECV}|r}kVY$72sFvo z@O+Aj<-SA;(2^AQl|nRFeuvv_+?L!w7E-7UFJ-S^VM3sqnY(n(U}tz!HR}*=F?1Ij zO=aQ|iKelPF5ij-?~AXCz)ZK7-7pd8*6?ge8_g*z1a3nC2DI{M!%Y*C5wO?Go?zZ= z#zKD-EPSaja4v20XunEhI7)#DoBKQSW^is0E46eBm9@6r6pJG5JlCkf{^fW+D&WBh z2LX_tpmSj6Tub*L)DlBO*d!x{&JWD_u!CDOpF_iaGD+2QHg;fhftyW#s}$%6`5XaqGsZIl&@fHr(;<@Vc?!k{?P zl9qUgA)QfA{r>O6zWxncZi8&paaHBd&o4p3gJOM-nU=jlK~l{`JMZ5<-Kf5_M)PcV zppXCgZsyKdiZHpuujRR|h5&;zFc^44CT;IcW1MXC4c~c%ZfdNL&!j!Qa`Lq1Zj>RX z-cvuXiNT{Sj@{%t$AuM)zKO|rF4~}%=0rwfOWVZ(Q8V|}8M!ZD1vB#aKss24T~@qQ zGH`Bpfg12aO^-DS#1md__Wx*PQ(P+9C6Y0Zon7HN+HA_lM1a z%sD1PMynR@v?DWIhcb&z7wJ6TK%y8{>&lq?(HNKKvgqOT+xg-eM|zCZk4KUqkM>E~ zu7(ti-7c9#D6e1hQb3{@%DO29Ov0ilR*=pf=q{kpL#F`#lw7i;YSPh%knvZzOWOmn z!L46aXt^O$<*J2XcROL_d>j^kAxQFSvizYvJ2MNBd#ucS{rGZk($;25VWH&Pv1c5y33{80IcFig zJ4VF?x{r0YlHXjX)xYbLV;$9Vb+W2z0y(JmN%M-*K(+mRyaPf^1gQ_d8_H zEr{qd9hL;?X>R{(kH`Si#_0oIKf?e1HunF`bo-w!UgudR1g22r1Oo}fD8N`21}04; zZjx+piCgVv#H9+iu(zla+G=45K`r*!|nYdw7eWkqYH2L(hBRk1L5Hq6g?OVca(w?nlzt${LDM+;0 ze?7tG`&poc|G>HH7xIOn%um0*IhbR}1Y{czHqN-q&=#0XVawMQ1g8Ev+u|%QL|mL= z27EiNO*OPL{s|oO3UeA9M{Fy2QU zFRCBl}@XsTz5;)fLxH=3R4)+97wa^PZOJRpgqsGfij(02_O7T!PN za490A2eh>(1#jcjC^Y#~Ahk2%RCD%=zx5#4R%iPt6-S9nnKa0J)T?FYW$x7j+oh<5XDXY+T>5aw%Kr?lQuX zqO_&b?r=|{Ry2ZzB^b5k)K!%R$vctuB$q#PV1=;n55v{h5+pumdn_+*^pGbUDmmjw zY6-bhkLmLZSC!YuS}5eb7-pX^*?ilvqSuMXVO#fYM|$%tL@SB}n7O%MNzXza{G{Ji z=`tm%5rr0rMvp!XL^fQW@|sL)^kJf&e^7pd`cEFx)nkD5Up}iZ;4%LHE}Q*-m1^Ms zAHOV}O*gPugXm^KUS3wsQK&m*7Eg>DBRYkVZatE0_6jo03^LZY^}@073pwXnhF#Di z2pa!3-2XU2U20B9Q+Gr*W-Mo*&wkQ=!QcM)A8fg~DEsu`Xn6cgGPc8n#7OxmU3_h} z<{kzvn+!Pu{9_Xp?(bi-GVExvJXx#($?bf;X4&-jb|_JKBYJSH_bg9hxZI3WZC+E2k< zaVIUm*-RoG3cyuy&rY1yP}hpi`o`*goq37d=NDyJd}nYoelwp6d~9cL?sZG|6AM`8Pe`zf!9T zRDYdj@W{Rew?Y2R+5f*tp!2%_@Dcu9!^*PC6bH2fE6Y;GQn4J1MO8+i0@;;7d28DX zW+}Va7jC$!zT^JJ3DK;Kzuk}zOS@IsOsg@`YD52YR>Ex$mLU1Lb$oK&vI{w9%@!|a z(#4S@gL0^7GU|(rt!MzWv|JfcMRo+N7HCPeJd2>nPA&COWGCSf9-P&I`y!S0kN^>l zI#!ihGsy25Cn4=9w$QP!#wN-gZbaCcnphKZd`l(8`1KaTu&&O-rsbExtXOE}8z!DZ zcr#0AGbP7I6$6GPg<-6f2i&9rkq*FA|FPVxS1Fv4cz8l8T3z1tYUq+GVemE}KIX#$ zdc~a1hgkg{)A%a)mU}MAiJnJ-D{}Oda&dam@yY}`t)X6Nr*i2muC?-y*HlGYD+SCt zS&k7i@u#I_cxSU5`EC-wOadP5LgfX5qK#FPP_OyP`~!=P%PWc)mdf9iJWY*xnF&9t zoqZa={)1YIXu*ZA(@CvY?U;01sTBN`L{0S3Krj?T>8L63BLNVvMk{YZ1&KbbqUPLA zU3H7|V>io|nk63J=)j>3MGR$;<*8FQH_E3q?5Ou#*zudrpdtb}Q$it0-BS|ManbZ_ z-SVmA{rBM}bzcf~#bmQp9XOVfBG3i?^iz)<^^&M8d^C-!SV z?dOl9XU-hxsYBS$gC8eFcvOKis(emaGPFA@#cj-6EMfYU{3x^V*uqrFuM>O|r+4Sj z$>zO#2M?7CWnUCmTr!eu7XMO&tQzx3C>fY=aJ3G9&>4k{5>U;^KcHprc%h6KPnzT( z`-DjG8#W%@mB9U+fEsm(4zRpnmA8|+Iv@|9i}2GVbH%is;QIGjKKbcO^v;JVJ)?Kk zDH-f@5w_JMS(AEW_CutMD%A9OsY7h%IPw3S_l=dM4ZXq9Vf6RsHvgiZHtFnw6-qFE z=in`T)eil*=MJ_`rYVuMR!~yF7_(p^0KY39*fhg$>6^dmstF6f{>}KSVgmlK@-~%g z!IV8(heF|(M>n@O_ipfCTjW2%e;_Ro6J?Y3E-HU^ib(xS^WOm(1f&i?cBNR(d0LS z>*Rx)zI+F*hRlph=72I>dS3j7Uf19@#!SZ|LASIk`Z~wfQYP^gz51J&IAS3WkF{}< zs~&-<$f%6O02U4rA=Lo3362Ghr89eiA44o~*W&Jp`!9O}oGP#@zj~=vvbAnCbZq1q zysV%7pIaoJXss1Z&wswPM0Dbi`snW^D@TOPRc z#fk3}=gXf^E%9kq-js`fs^U({{q+P_;~10@K3qOuP#FsVbW$mj6(=q1$Fx|KDiVws z2GTEhNC9d3MB$4@8H!o*@$Qr&a}|jzxc{I^m;SPPT3Mgod1B#9r}KyyG*=m5Pj15e zW+Qh*X^3?_GIF5)eUM@oJs?euGHT9VLmOCBqVK`mWd>FUq_0!h8Fh4egZ)R3Q*>Qi)Y~lCa&= zuDw1T#2@%$eoZ_<GZxX zE*ADX=I4G=V>1=>Ba;votCPb11xtuwlS+Y(+^(ONM-e5ql`J28I+}*gyM8iSxqdwf zDMII;ihKt%DtUXEMy@V}S!4+SqWdavc#souXvxx?O)}_6q9Joll)ZS;YoYX}qHz(d zpvV)bAZ8yXd>UCnF&+VYw4@syH6cfwl%H#z&W7P19mVELB}OFE^N}rV)nOKC&a3BY z^kgQf3@OGsk494^JrU||G*fMp>!B^D3p60qA0agUGQ!FB{q3`T@+~4_p^^w&Qy!k* zs=>Z!f>TBXQ8|NK6+pL`{sZ&bMl5EOO?^y~XuVN7%-VEcGVI z-|d}sWy^`aMu!Z|03~Zzmy@@S`NIUw#URj8ut#A}R;~rnIl!*9Fbd4 z>h78<@{i*W1-aDB2tALGLxNaWaES;;Uov;A*0Cr zO;VEmEy?ITml?>DkR9m`%Pgn0xu_`j7Rk)kUv=V#zw|_*)bjBiX2xyKQtM!2qQ(Sb zKkFf>4@W=qVb#rrXg~WQbTC8t?{Cnn&JIM?`A(-?Vk47SMtEruTznRl(Zs*56h0Ok zLt}kq10sApW4a#9Y`vf8p|&)X>N=PZ;J3D^&iKA8#ZA9&bIY7W)$)yLoU3&A9><29 zFiT1MC~rWHN%pldzgSkM>-RO@6{E^2&3I4fmSioyBBOQm?(m9R(_PSf0!=q{y!ApG zCZcllS;{G&x)%~`We&$Eyxb`+s$4Y{KPzFq6I zJ}gUR`Ka328nRk}kyaAkN_0p$PK1GGe$`4tA}BM?^cpaw!Ykqe$bPlfPwIz*$~>Z1 zJ^+br9V;YU$em)GVG~1^$ni14wNx8_z#J+}<+vOFjQcOtb(ud83*leBCOkovrI(=C zSLu%up6z?c1qv6nb+x)-Q*S*C5m~OZ1MH+d$}=XuYAEAredI;f|Hz8$$FMg&f{ooWDx2@)FICs|g+EyZ`Xwpa{Yp-x}I)`*%iWY)e zcf?Zv%kcm!ktEoDzcl({gt5qhI!8G6T-~#uHP*OBBUAd4CTEHI`*c{r_e1|IQ1{gxr8rsH^8XxkF`L zMIG^8w#c7opK8`>i}XPtz0B^T8GLH!zSK>SEw+0W)+B#)`-{0N^&#J6AB7hZ66 zcN~Mh{?qh39B)VzYx2)gx`W3T<_D`}Iwrk4ZjUsdM!lTRwnT8;@%`k^aYtYmBW4*M z5H%2!Lsclca=7&SVC%a=XrF(Ak}zy-$ZSa*ZnryXeb4jlx(BPno?x(o_(CCHwYUBO z45NW^Rjn(o$~ch~Wrf;z_f$D2@q`}WQJf0zCC|I?^cOo8^w&W6sWKvP@i|Fohhwf}co zY141p-!cTHLZhLu=$%X!uY@X9jA}s`mttanKeT2;Z)n|+xu%PocC$&LpMBGJQ{D5| z053lVA!erMZJT4+$!!JI*ttaJA}!2ohWE+)bDGobZsMB%^GBY)6>g9_h2TUdw9cPE z4tjFNfJ_J4-4u?V)IX}Uk%uj98u1R|qqXB2iS^U=V@{J|LEI%v8g3UsfC29@S8T0l zZLf^_V~bz^a((974%2hSbfXEdyDrmP4y`Kv5_*ong$Kz$l;l6w<452-r`a~=GsSC8 ztz0{IPcD6`H*%=D>^$F|a6vmY6X$Nu^7<`j+}<-}nM@1ST;gyS!l4183(VbQp)*Ry z@C~_r#co&yG)3Z!DKe3E1Wi^O*2}l}pm$-N8Tq#6LB4U!SL2k(SMXQKn7$wS_h$S^Q*YV$oLNZHdbAK{k)NJ z{QA79DI8zY7`18e(oercTD?D?)Hnv9Go)me_nagwCBJFbBj5(rrtb}xTB@3 z{Z-NB_NK|W~LWv=3GfNjL~C2ck_`=Y06{T{(Q?h}ehCph>Y1okyI2^H`1 zdU2$QCOq7hqI|;nHG`CFU4McnG-)iy-_(&J+{}@m@DUFZUns^msLUDs1xZrUJz`mL zaCDNkVBBRenNvr_)<7wJWWt#pNn-#l>N_75t!s~UQ{KsB@=Nj z6oR}a67lJIu%r@v;L;y&<@(8|a9?SW!B}$v#$<@?UTmn~PprdtPXyDKHt82Nc~k5^ z3NNq;G4nYyX86S9c!}_?Fl0D351GdL!~k^1eK2-C{e;Q@mmait-PHs_lst zG9l2|BEwPJgn{GAfcZEfrm06tf^#|9H|ZDF?WW-Ko<&^S=Qp0=cdGE&D488JQYhuG zr=S0=PBFKM9)JH4ank-Nl=bE5A5uyI1S$84Ehb%9a! zzD>R=l|}9L)`AK&fhxagh^h&i25HRQD8^D;0F$=Tx3#pC5DTpyXl!G4B)5@u#xfyZy znIb1F8Ge#JI;4!&ov>+hYEr}ovy|x3+4id)3!m-%us5oOzen;2%{;=?Tr$IH!^nLt z&20Q>S;kO$04?;h<5-{eddKeg(oNjh(- zN4V0$>yLB)D&%QQf~g(xx)--BG7ztt5jtDiHP4yxxYKXJe`vKoSCj1A1cu$s+ejCP zhX^QoLs`fCFv}bDzWo*Z;HD!Lp?(fBJ`#*NnG{CBC5eXK}0#{8?X0kCfh|Es0;pX$2sfi_SXdUiP*JTF ztEJuiU;%7iuV}`n{JPHc@G|+Ityf%}viR+b~ydcWC} zXN3Y{!TBMoQE3YeI9I^YFKVjuvef4j^R%%lniUZX2q&9eYqAac__PZ1MNinJ1Se;? z;DBhN>e_X!EunmR))o}=*H3Vlq%}U7W^)qaF>q4+T#ATj7>D~m(;?Y>$5dXP1f+2T*93>*6f(;(f6COB0HJwu8}zC zmgjUF!ktTtwhOkcNdwK?ZLSn^`}F@Ti?5N)%Q&beDRUd=*u) zI_IoObSYetAd|ktbu;#^3gGU#n(!N^PfxV}rhFd*t!w_{w{G7!YXnWi1^kx9@6Gy3 z)JR^z*0J+bfY-n3s60n%sFw~kyoP-UO%&~qNe~p)y+`W{=vfsXp*_!ZD>+Qf=FP`t zsJ(?d9^(%XHQg3{u}!IMk6y6T3wlTE1W;k>v~2=!BrBgLeWDu3aC*giU1nCb)_zCp z`m}9PtJmDpl z>#v3;KWhT5v-EXw^o=SXndV0V7{1+gKe{&Ix1Zr+!KZ+@ob zBNo>Vz_9!vh|C|cr<1_|-TbuQ&WpM!|LB+wx~)4HT;j|pkV*pV?Y5eK>#kZBMLVV* zh-pK&V$VP5++`SA?vcBb&cD<8O`lkUZZOev*Vkoy)q`^35w@oEJis&V}*~ z&yHxla`^D9P!Rf^|3rL5p#qG}A~f9x-H)Na%jWh!1hxA@p>_7pmTLVC@GXP5J`Z#7 z!7k?52#kFop=^}usNQ>ZhUHr@$MkH@pJBb%l#ucPNbY!z?s~#QI8mla3(`T{QI?UY zNMfAc(WwJw9Y1-xgF|QZw$enLS&Q4LR%L@DkK|`q_X&0np*SKoWJNQsH^tb?O_XS@e zLB}Z2v)6uuChklLF`N|n0KcjH?cuRRT|M-c{t?)%;=*&EK zg!(&MYDUiKytGiIb8C4f&)j?-)Y#_RGW2U@hDhr(oFnNz(6>h0N0&d=o+~#Hw(Zk6 za%!I8;8irmxBe3)a_J=1{zEBp=`1z<`Jfb4XZpcKr#J9iU8_p4ch>0cp|Z`lc?cb` zVMXJDGSI$y2>sMLJZVKyZN=#WG7_(Hd-Nfbwne2ko%#)3CFIppx>vP#YTj<;nvnGB z;8nN8xAl`n+DCTVpkD0*zs9a<6$adw!N(zYDDaiM#!ZX1%I@eDJu*9w&C!RZ`<-(| zvCsMBNt?FfEASja!zS9dH{yp^Twqw+XWfw8yr1PsY#z)a0o%R4!v|9hzg$G_&THcR z8|sRmY_B{HS4BQc^Gey3uXX+1y?NUw?FXNEy|Utf!C&eXKl66IrCj!V42885hJ@K} zlat=#*NL*2dwz`z=A!Q@H)u6q@xEWdR_cCBv-&LeD|57`el7RCCw293!gz1C;fr(dMH-Rtw)EBy8}{?PY+r(Z{} zVLD&o=LFg|iJt_K|FTr}T$4|}iWyX-Ua1s!SZe&H9~fvKVSPG>u2y;n1yCGsl0nS` zfq@hccqxxuKZ96I2x{8e$8|NNY83s~Ey0d0659i)+9M*`L>V^jCresI?+bDdGlt)s z^la*nAHMAMjOsD!m)*;Ud}n?d_-h*eRhMFnLrzk(LF~qxd_j!tu5t3b$Twhb!u58e z4R>Wa7T&x7@bKVxS zEHx;;4T7E$K3Stct;~}zar7-KUVUeLwZcX^vkxK=tfiZ#p({=bS2Csge(J_`%tC9* zSlf~$_)75{H&bNN$dNnc5nT+o?-UpGtP`|??VSVB=$<`v{^A`(5FwSqj@dQ0BYVFI z?i}(gB;}oyNl>jTGlQ;Jx4I(@=L<*1y}UDmP2taJIf)RA zem7O~z4YBt8kAjIxB~-IGbq5FX{7E@O_2OxCFKTh>PPpRxi{wSobFI0&>pcD44%6; zp06#!h&?eJZQ+s*QeVEeRqGw#%YE!-?@Mv)=HSczy^|dER=nhA_goqOxPih$2D+aY zE#fb>7tlJ6@m5;z6v6K~H@^4mQ(#00i8a3-%%{_+i7b^Hxd@5*s(l${>VU2Cw<=gn3edm8{dJO-ha zA<`X`8e0o3Y8;O(MH8@t7v#YE9lA9#mlO6lVll0b6c?J1Z_6Oa&Be#sdNFp$fDLZZ zpe>{?3D==Nc0`?1-g*?x z##O{bPL2~PPU8;&UakZIp8h68(l`FPAslN>z3iMYHN4+Q#*^2DU7@h<#NzmOVks}i zX=4r$3AEGd50@z9_-NsDxdhOy&+)rHD$&VA`a!*H)Q!JGxrymWp`@g_gMz%o@M-w4 z??R0(ckS)posZ4eoChWCw#!K8wLXs5K4<<__31!xoj-7KSuXoV&Jnkss%(8t1{YoV0G>WXtKWZ{r}1htmy*&6Tl_y+|BZfFG3B*E2&vnzW%(boYhaV5nN3!oxUAB~RV8?1xEr@NueaL3WpUSqm}o zQ*C$EBZ?wgoP}158mWhm_yWjz*J|$2Nr}LTs%_q~s>NXzV zXj=ZovmI_`wU9U0;-#Ih;iz@!IdiocmEUaEn%gDiEA>`tXtwOeE3=1H*Lbp&%iH^Q)-fl@PN2?5-YI+0?njbqdu@v9wg?+Au4&C)G(5? zdTeW9b0ec+M;JW0kReoGJJ2&V16Q28bcoQnHdHm$)n}5?l#3Hp?Db>aOgFJm0n-)c znmY^cDF~Oz$i%KYGvU$ROB_)fn<~&u6w)+0< zhiOEj#pLn zJ2{BHCc0gKRi0>P2eb;U63QprsBaK62IBdW15VIl%GkyEqlA6DBem)5kb5mK7U%Ck zM?q3L(+~(NOKH zdmO%D-BY-8Vrm~Gv)|RL^n9_WEVtG<iDY3qjo8igIm>HC&;KbLv z0vYeRkwkdO59VbTZ^aeZhWkwt?*b^TbxEToJKBs2(uNiRx%A&=oV?Kmnbyu(8`&QS zck_?Pvjb)J?II2<9}~do(3XVk>IN8IpVmL11v}saaC=!SD1~E6nzv^&B9TU zPNiP!_(XJR;?-&`Cd&3GNAel6!SUM0EJK2z=)|k<fELoEv-q&$4bXNme=%66cr>2>3PGT~ znTSc!n~F`ZlRa@=mmGT*(^{eX$;y~0xF!o(Z2rnW$Yw-U%5YL8Y@k#Ph(nmzUKOQ+ zW$WhY>Y$c!pTLD=4I5xe*mBkMT=U)>D-$P%U)#T5WObiKR}a9nlcz437wM<|a=fni z_Nu*BWf|IKg5KCoq(7T0A)g|1L=M!A5au7-QX0a`!8kQ5`c8C{5f+lKC`V3*8)kzj5wdU%gd2!KF{ zQ_~~RMAkJg$SZUC>8}#;AAfgW-hE64xt-_G4!(ab! zJ*8SJxA~19go?5TLH>sWKY0oF3hE^b2W?JBdI1R;VV`hQ_o^t8@+FyVLBUzixFm** z!nZ@;Ri3;F>WmZ;BzEx|{{ffl_D*?6kkn%k2Up(t@6vc?c{$fF*oEDDAQNkKhJFmA zxvPQGwJq+}rdI`A!8zI;S0hfak@?60g)an*0)B+k@=13+ug`w#@vO;8vFNDVDgbr? zGrx#8O;elG+EP_`DoS%H`Ud2Y4DVEl^S4E01E9vfsIt6FTT@k0Jv?|q$dM9}I1zgW zw=fjgz@sE{(^68+`_DiE*9Ss9jC(D{Ps6%TFgH-Vrnyy$wu4t+cKU=J)_Wz8e?XIe zSjWWRvP!7WG?(}-C#gDIChq&u%f-+(&C*KXxzs;aD>yF;EUzrP`xAn-kktmbUN`#^ zvg@LnO%eKMV&Uj&AUVe^$bQO9RJ*ISd}@U{9*8NX8MC-$78=MhU0a1^24 zQ#l76xDia43xTF&367fKeG%=<&W=V_-g*&*=ALu18-A+l3hfBBrX!G3)^U6|seSF+)S-3jYQrx9DgNP#Y>+>XLX3glv^Apyzgu(}ESyLRpQYC1)5cL>48>9itk^7F$mOga1MX^}re_5zDcsf@@)o@Vnu6{r0OG zQxqD3ZHvfay8eC)oix@fCSr6`5rXj!`!lPDn+ZecoN+)3obZALTHJikw@vpT$z3A_ zbql=(mOd0x;;-C{UJYAujrjPWo<*JH6R>ugjjPFG5eg;7h`{eu9N~duqm&Mc&PPt# z0SeMZ4bj-^MX>5)<2Z|1io*@jY#5}qtS`i}8JLsj%DV^eVABK#??lrCDa&1uku)QK zOt0Ny6OGb@wfTz}O|EXdO_9{T#BPPrc0ji4?yL(&i5aj=St~sCr%`$$?^r}nj?(N+Pc|T+}6F zIzp+Z?mV57i8Qy`p&9nMLtXhs3CYZ$RL)m0g6Qo$`iO6tp+0iB`Q3dDGvA`Ht~mld zs@2pq$T-A2rfjVC?^;Qg=2&_Qglt1Bf;Ks0l?!850z)YDj2EVCgDe%WiCHU~>$~eW z!K>xo;${hL_S!d)9$R&^21gAvq^qSqd5KnwbLRJ~#KC*UsgAcQH^sQ|=T`u#SJALN1(pir&PO}CY>V_f` zRJdR@dZ^tnx`{)nB(TlWc!r|n_j`!wT2zW2UCeOE!HaHuGmP(036*h4rGE*cnl=e~{3XgtLIoH9z`m4gF3AQKZ`y+FekSqb@q)4O8fTZj0NZP%FnQF0S9&)P#GWkc3Qkzuru zb(_(5!ecPU+VKrJw(27eHS4Ua5`3b}^8oTEO=H*Dklat+$#L(bdg#<-9|zk~;>+`XKr zu;i~%zAwMb`d+%OjAl=_kYS^pF%$nmIX$?m_g`Z_E|(EyZJCGXAQ0$C{5C{!h#Aw8 zbe$rG%yz>yDt4o*vI%b9!08-ywXzpgp(xD=EPl1J# z-94okDkwf%%P(lhu}tXCxkvAwtQ6D%n+GX0utJN?30G>l?^D#Q{WEl_Ei0qD?+rD~ zY&=_{sppX9mT0m*ViVsLf3`(R_{S1Y3v|Y!FE6OTcw*XVC6J?hj1-g_8Nl$dO)r!i zSy`k3uvtHdw%_dqij-2S3z}<*Xqg^(F(T#5i2p4@A^AOsj!mdH*oy!)Qwnv$y=>1! zp|r=k*`KAP%#TlSF|~i3N)VQ~AT#?yI*sN<8F2cln=;EtO3kbdqPN*W^2lZsd(o`4 z3~IiEhbqx@k@4FB$n+n-XoxQETcR_VY&})NB19bB2vy&(_T-ve7n47m7vF*mOeQh( z@R04AVq9;|`;ULHZScj5l~EnuA8rXi^)-ckpR<>^;0t!PEb+k-{pXc7HD1wKsXJC0 z8Bl(TLMsf1c!)FmYgI!zSvf{I8bXw;OYx_RFJ!g4u6x1VM|YLm?FLbtKszb9vjBzH z+SU)m#`Z+F?@oQH|5}oMQ%%25=A%2@6aOdHOTO7ohVX8hg-W~j((`L4^YYcX(AvL< zm^!kXV8Im(JxHhDRT{&{6e>HQP5WjW>5HEkB3=Xqqf@7<}&7f#tV zTR@@39Y(c)EI~l-xJH;kp)9LknZ`1*tV6~n!f)N-in~Fv=lq3*KeKXNyAijRQF-W| zp(4MB9Hrv2zRTJ?D(M@5N{<@tU`jBzLtkXR61%n}^z?7s`D^V&#ZfPL$V*?KY-~Dq zHxJ)44WceU6OUxSUTjT!6N6A?7_!;sNvACoh9D2=eAYaYUPuedjSfXoA9AxQtssS} znM=A7{;Up3rR5s8t+yPqg(keem;^#(P104kXy^bZ?Mk-nIj@G~Rr;)Rbzj$DEp zzJmy0TSw}KA&}FxXp1SyRZnroF@|EtoU95^VdtwopB?Liq4`_0)9!>e=9%OiMXlz4 zaMS3yHgKO#Py3R*67$1I5W%^ z#kM12O3(>fOrwYRoYUQyYNLrZ84n0zc(C$VXl>F^sVmuf5_jQuNVpr}^b5SBXunk+ zrhgH`S@k&G$$}qRsjYnTzKIL#7;4N?_EhPkkhr{{RH8%7URa$y{s~Qg^iBoV6#(cI zj%MIP<}}qfZq}F#%PZOYUAB4>;61L}lLGC;R^|m(-+zI>y0ms_^+{zV8p|3*xA&-N z1b>C*qh06&DzO*+@LhN29K+Orcyo3;W|p~Eezz!CgW23OlB5G;j9il*Q zr~uDKreWrW%qYDnvQgsWR`ascpPtOOUSO(uI}P;XP7NTn(-)H9H&jE1y{T!K!v^iZ9kJ&LYIq>v|rK_gOJ5kL&iZ z)N=_c2&sCC%482X^-vttu}g83M1~6}5A81(B^a=Js7ZIkq53Rs*6PfY^!91Eg{y=Z zetvj7@?PKaLQ+Q9ls7*d8ClmIh+6WxB?L-J-L*|p~A(Vc{QB`Y!KTzptAx93D8PXTh zBtrRw)FaDiLdc^#%M!ynY=;D+F)gEmK^Y2^wxDFQ=2(~O(ruAg5y8c4r^W>a^uG)i zc7K0%%OPwJW&;A5Cz%&PU6+?86siZ`hg1AYb(gQ<_PO2`pp?UVNI$f; z(4|=4{h?7XCp@+z_)aX|xAjUPWDUnkzv;FV>aYX^ey7ZfrdpXDPO`Qz9%pM}I?Nc8 zR7(r5`bOcC{lR?tFKf<$Gu%F6Tc!kOe>R1Xjyo$9xP^M%s)u{M_MJN<(fkLB_<=Tq zk&#yJxvKOp_Az0-r?b;L2Nf02gZheg%egFE5^Qp$O|$Z*4UKk^IEUZ*QLmz2Yw|?0 zON%2K#EODFF9f@ieWhb&^@d=5CuN)VOM119!qx73E5I+5-fNlv?6=B2z^C+~e# z%~r{_C0RS^p~bQO7Dc;Vq&=yxFGPz{B!OQ%jn9Urm4x`+ZJY$)m(y#|iND9dh?&{E z&J0W(Hn4BlJ3O*gbuRc8O`Wn5tmY8}rr&PJ-bDDr?&D0s#ta4C$`_emyZ1EUvM-!-(^41(b>SVu#*n?Nc(OrUXa3_B|RWg zZ0S;Req%h0h^%dyG3Isg?v-xd74|jnarU&l=)Y{+e8!xcKzh+b4IuDEx9AeJ73x{`#%GZ@&veDxV97rw;nZ z$zOm3+yQU#EfXn3W|fM_;|P@3Txb)nQ-=g=<6-Z{kcqH3qYW>9&lGUfUO*U3M$&V? zm(nu+330?reqnhx(q$Mcszx1!B5;0Y#c4~9(!wc%YK{JHn5!cxg>i3OS_dfS8euL4 zY0h%nr=a0IKh?U%;o7h6vFQ8-;Nfzj^WDv+QiJD=*NhVb z$XoMCROZ5Nee>NZLyqRfT*QE413|C;aFqv9Qbd^_DgV8o=yEh>0IiN-%H=&ZM}I_p z0F8f?r{R)u`lzoBGBr0f*5Ab$#F{85V-6NUxq)#|n}zX($b4i8#F#O5VvOfa zqzkk#4ZAb|qsVp%%yCenzBgE8=xBX&rgSg~?Og&PML8H30A-keH7$)3Q{ndDVoDh5jQGm;E$ExPm= zKMztU5>l1FxE;mpFWVe5K6GQgfW~~5r6kdiAPbSNSqo?oaPdN40oUAR93l2bz{Nwv0EtqWFI>Hv zzT6~_f7Vs?2FEfWh9!l0l_Ctl$zHeIE!GHZ!sLTofMw-B*d_l)nRJm zW?&VOPfp=Lh6gt*NJHA_Q~ALW#4-1r1I#k<-Uj#@yvOzRNS-s?;G}locsaYj2M_al ze#YR0KTr*q!^NB#zleR{!!`YwrQwYBv%x7vG0qjFZ@@<_bJ&*waYSZ>X-73;O;W44 zMW7Xwo0}XQicA#JWeE*FGyt=VSw{;s3KaXV#Zj{+@;U@aOT7x~QB#*VRWqJ+(LUwybbkv0K-MFHtuPH!N}7u-rhyGg0s@ z9eUl#eMlj9{tG|;R9&5-F-*n&SXa2IxutNoG)C`obj}Ut9Mhyu^sHm{oizC!!g@ug z1Bt>ag?hmUsoL%gM$Q9MnyX5CQbyWNBEkJV0gohJr-qQw8E{zMF;6ta-5fQ|gEcl6 z04^Z}L7X+^(SklN@7o`$kw+%T16nn*A*L5z4F7-j(O zBh809!A|l_Gd@&P&4;J+SmE>%qkLidO#|@Ra|qSFepjcI6?49^p8{hb{i;ZiD_}=b zehN)=G#Tg6X1Om60H31(O;U)lIPypzzOr$-(~0s4tIJKUf;a3fH`@DHAopc=a{0H+ zb$T0X@!Zi==6HT_)m#9sf_g}?fn8Fz7nx_;9xyJ*Hy*o)KrL0g1eTHmW!o+@oLU^emgrtgJB4XGbeS}ccea4V z@fqpHQWb3zAdE{ZjXtui9oi&>QGk5vnJ4#g&VaLqi!->W-jyKCox3`F%`fLZ(Qfr_ zJ9FLE7_@AnD{t9BYGkA$>*XI-Dk-K{w-0g4|gTr!8}s-ZT5Nhb6als9Dw;g1LdOfr_{*>wAkpc z)nST7Jk>Jm3?BMPz^Aphl;|s5Bqd~#3M#qwTG_@#^bBwx*0{6!UCCn*(8JneWN)xV z;u9SJ0IkNmpxPcwuiG5bL8zX$Wk;{DbN-v&w(-KZU-F`VrG)d2XVp)9lUl1cR{pd( zq%r-;-Umo8w^uG^>PT%rZIGQ>#EKgC8J3iPcG*637@i#Nx$MdeXR~mGfdjGDw?2J{ch1^_$7+Qin);@4&XZwvM#^BJ?$ML&GCw$7Xt zlUqlAMhu=bwDO?-iUvx?*d@jOiF6!ZsXoLbGUq@2hFriSfl@Vr(jJRzo;hR&%`Ode z`t~&l_?cna!a0g-(>dHpzIueXV4T^R-U&KVa7qJS8D3dt9=>aW*jCwsxx81_kMxEg zd#dv!ePFNt(7F&mSBLqWm%For#`Tj{fS)z(t<_zjOvW|mM?Ip~gcXlIHclK$OB<;c zoP+~HB%qDhSHib=+cL^5NuZP8z3~*1N0LgkqL z$;ht{*Q@?+YbU)7Fyxwj#I*@P5EC}V7ZQY6dR4ib?V)`%+O?M?1`NaG?qF-YSENLKUF+bKM8Qlww(9_ z3VSi#(hjySYe>FJy2JV_l^aWrY$&6q(+-qlH@9zG2bkZc#yimj1rKQ5t5`y&aZY4S z{ZZBJcEk;87}R4r`4k(n+&v82WoJ9W1!YyfkE`J;;~$$<1E)zUmCcDcpDgm)O^o)? zI>sj~)D%4&Yh4C~2S994CVYoi)CAnF*vJt869K!SV}0S_m_CVJlgJk{$I#S$kFdJp zpcpsKxeA>s+qx+dOM^OjYli|LATAU*_{Syn+!kb0z{4Dqf7rq852Uxxo}3D4@knZ4 z1*E2pxL}pozg_~JsM=w3sBgE_^7JWmzf*To(#>DG9}xs0l1{Uhry2NLZqWjU7F9)(65jU3c2*xDN6a_6+cJXBpQ1HXGPKc4U zsP!;v1D(>_H(WP^mlxp(VUA#6)RYiOqqdakKo52+VLm!&i8hVVDmvlJFv_#GIR@4l zC7_xoU4qq&{B)nJ!vIo#Bv2Hx{7BubSy=n{a;Wv&qk~w#r3TP?po#Yt^VS5UV_b81 z6w&g+dq)a-?_pX5_z4`o5OEP6jU7?7cu@&LLV9uioJ?Mrx3xi0MnxOS8iowxPd-jIZ}*4+evb02q#LJjrDJIq zwojXxF_wRum>+54;5Z&OkP>zb<(J63fs<(_%un{sZ6YZi8)1u3w(?wH5nk{|G(7t_ z5xRNqo5MOrBR7b=VdK>7oF#f6H?w)m%S{COVh4RV>1h5jaK^W$XyDk7C}8_{YT93w z-P9B{hL3VKxSp;lK`wV$SAJXA4j;^2H~wp)w3OUMEn0tBMUNyy)xy{^Jp2f4xRrVg zY zs4Y}o@rStV^G>f`i>pLz(g#-2`yNk`w(*G3Aj?Mi!*N$0{gml3+$W6nwT;IrF8avF z(K=?}Moaj3>D*P2Huczsh~kibhd*#4GcQ&1SYjC1s=7k|nf7XqGKvb&tF9 z6OcBa8r`DHki4E+^KvD%E8Ts14qSuE&x0+J+vF;dgrECX7ZHlc!WqghdIn9b)}I{w zdA;>hpg)Biys-h07Tl>(l*jTgIkdWy$bsP9wrB zb?p$lM-?@vk;kB%zAcNqRzN~JIr7DrnA4DE(ax7{6v!u=qn{#{T-mU4)A{@}Xf=4( zbU-vW!~GhA4MK%d88NbjwEQbbf?lc?xv(UNle4r)SCy;1$EN&fu1FU883EdR$PkG&_L~I_>`6nP+*_r`-5F;^7}hz0Ely z_LMtITm%wm{PcM_u3)*(%fbCJI0h+e|hr#z3!z<4>_e zmJeZX*_QJz2-YgXt|+jyiAp|@D!Jc}f!P#qWT(y0C{5cY2j^V`zVhN3Oge7u-hM&J zdKQ0R95hh>u;&l#82rWCY1Km(Rd?Aei_F3rDN`VL1k@Jj7H9x(z1f1D(FK<^gqX zAXx_DrtZlz{bqP_y@q$`6S3h;0bRU6=gIjfM+9fJEQii#5pA@oLc(skmio4c`8U)b zj%U-Jzy_-Uh{Y5GMiGUeXU@$b13S~2&Mdd6F@q7Wa-8|mQ z@GZu6c6W4wfWC_@HspjYNGYxU=xe}oT(xZaxdnuf-DG=2&K)MCP&Tj5bYV%k5|lMZ zA9hS#sIV8IO#EC4s5d<(v6fT%-lrgOm- zHq>~bY~!fi4AFG6(RZ) zeptXw4{Ljv5(n|p`dX)mgi~4Gl~p%o`GmRB+r>|PZYxVD_{oDp=G6?WTHOu5W%e2c zO{>iB*}cEa`(sbCuL&{8L72ihSnWfMid}x$+*<$c2=WEeC~uUEZ!|kUKA1WdmSJicbkl(>K1abI-|d z)nwJ&{>yTWm}qaLNOUTdt*y4PF|jwzeK>h!TMjmz7Dv1nWhh%^>8S;QIHXa8> zW>|W#E)%po`}8@lvJ-~yS%F18zpx@myy(#WnI!P2r99Oj!L)TY6&U2wpFMw8&C)zT zm{f9p1*{4EbY?lD(0xt)=YlNtH*wIQJH=X%!9A^A4lP%1$S47O1asfj{4t;xa5KpV zCfUG2vO%;c{Sc1j1I}_B6WVi8go=j!q25q_W=`SwDrW;eT--sh>>@axIF1Z8Jea%FD3)X!ge!!gZ_t3Cj0~I3{ zXZ%=f1@zmOHKj~d33zjHrI>K-=UT1jW76~iH<_-Fy^&p9On&Csg8ZkI6vsFi`2;#t zvFs0Gha!K4@HB+Rb(O=S=OLz(8gqSUoW=R311@1j-s$QyS{?~y^BzS$>d75$#bI2h z6D060tYZoJ51ATWj}xa5Lw*ZIh($Q*$fr3>NLu|2>81Zp!Xol^`(y_Zdm)tWBDK!_ zRV|;XxJPMkMT)<5zOGymdlABrb{^1qN)Z9CL*NRFcKug@uPIVi@)}P*!k)*Od*L!p_%~ODF~PP27_Z@Esz$2!Q`W;m)%<13PI0=5kzijNGIJwbL`Ld44=hVnyG1#0&*Zs|V2mKK*7|38Qd{=S{2*oF zB!~ggBquRB6{y-K65)J|`LN%|`8BT&)Ss7NH6iQUR>gOm&c`9?nsX0t&%zOUgjcX+ z6T5sBH7nXMGAh)^Pvyy!AOw%hl(PLJ(fnB`zxfdA@-ws&QG~O zUkZLY-)5PhWnwnlN!!ViGcjLYAkZ|SRK?7cfpIGyJe+kI`+UfiXz9WAE{QqKoQUg| zJe7p4$%vRd%H9$@_lt|AZ&++!Oo7i<2j@3ksqUGwR8j|w=aWi|)TX*boGZ9cC2ZI& zSeq5amVj?$Z9`7(mP;@0oMCkTHtNj;Z~S2m7WmsF{6@C_%B;ToWT1rNL+`u zwCLaP%#c5i+g8LO1qm)Fqp;hfSufQuF#|+HnlhOuX`20w3Ihz(|AS170nD&a68Lo;D=h3KX{}+Nj9?5}&X|$kZsBQ7=TjN*F5_7Fh z0-ey$-q2?UQDD^3AmQY0r+^wln?f%6tv0^%v7?($U-mpuVeuMajEVPnD9)laaB#xG zWV=FJu$3>LAN}SJzL^U-rUBTJpEp?WeSV_rrq}-gTR^10;#$F>Su9hJkh<|Zsf+|f zZy^wKGWbpwQ{@W&nSnKa9~lu*Rk@Khw{0tBUs!T;G0Dp-{gSEO@fAaYvu&qe#^I-m z+~=vJ&j4ePWkqmLNlBrl@1#@!i;0P`Y1LX_G18%QH!vkFqNA-xo= zRABbrwm#GfeF@9aFk;bFWNo(|-Q1Tp_S`8uBuU<2c-b;+AdRoZU&=yjl{=u?&B94& z^m`*M%Ngw3ZMj$GO$aqHDTYB^&Y0#zVl*TxI-;>Ev4eM)9e|Uw@G*fA224j14z7$iq}zR*_MN=n0quc5^j^;QkTa~ zVL647e47CIl7rK~kUeHSZ;IMw+fN#8r*#n3bv4y>P24;m{iFDjA#@M2t3?OQe1D`Z z5EDm#6Fj8nssMg7JPyN|!YJQz^8(s?-+3hr0D~nxI1D*vA|PdM0ocuQx~J3MV~Fh_ zn;I5TzfhDmoS)Ot)-K6?SiVdohT)yLV(69i4@Bo6|B7=1<$Q1>5Up&C32r_h-@*OG zw9RLhh34IQY;@5x6ix4{NlAl^sX2{wt}=#8j}lYjn-D<^mmXC!qZ-M94v*9yG3n^I zX4N;PQaBu&*?;Q$p%o1J;*+4m~$(wjz| ziiz$)gSrRhroIEZb`a7-+J>{eBZ?M7^UL-BYC9cm$YWvWRNfIImSiv;8J?kbAe~>? zDpqE@E2r1jH8w4k`!J5kfwSVff<}=K7>vwfz#Is4va8slQ}i#(W}?{9VYd-A*?D1X zR{A-+W=gA?>{@NXZ)kj?%dWt3TgFt>yBg)G-28EtEyeTEgjr4k%v+ge*+w%5IItHi zP|g5FIa4_c%3wF;Jmq`Ta+q}(jv-=eG+&u&$26Ti2M-%{m{l<)7v`@6c_ zE6Ux<&qREKa*z1ksN9=)e;;0(l+MKcW;hzdEy`AW@^b*Df(i=0Ic?Nt&_-o1mY(>o0$bN3l&%GD_V9rTAdLCKxzs^nHN0D*cvif-?GG5Zw&k z1cT{!$R-#B7ir@WC`Gd1s^dH zBhFDo>;mK|Rm7;)T_Q&Hu8A0NoGxO-b6gd7qmOHfs%Z?>(O9Y@kBe%^ zqfz~o=~O!&o}q61dDcxUrdx(Jx*TgIfJ9q?v6T>lAjF_8g?t?e@^vK0*O4G!hY(R! z#Ny=ZNRY21LB0-$dH>C~$a(-E}&;&c%|dyKjd`fr6j8DOMXMu zGVkaIDRWh1-cQu#=}-h`z+^Zp1%W9E1g1y?lwVUSV3RTWbjGr|vy|;eShjO}EE}U! znle*qE&_PL-HSLX?VR z7bB)WL6*A&_Jd1BR-+`i1jhR-&k2kv_B)Izm}02ZDuO_W=62YPO7wh2q}<(*8t)+G z&W6-F%;E|}>PkfFsw_yokU;9i9+7$}QE|sQhG&R_lwhG0jM91JTI7-IQ2K62smLJ- z42DPy;yf}KEA98n%T88P9UkGBRoU*7?o6xGTT&qM1Vk?IC$|4X0#E?IAzTJXK!**z z3d|A)Lytdf=$&aqyAu`0T}Xzzp#(OF49aEFLj0jM(V zHkh!8vfc~_%p0@&8J#dOSr*Ca_aSd?>M=VTOZF$_Rs5RKp_`aGo$0M~rvG_&rgyxF zKO>O8WCY?)2l8N#K;BT^%piV4(t$jZLHratmRDk+K7o3%A4=piB)dc@0y26`Crqj! zc>Pf4U$TzvOK&&AfwzF`9@J3>(VI)w!Q@o^H94-frbtD0P$wK*dI&wlk1_6OGPJ4{ zIt6^RNAsYIfN3f!43EAQrV5+VUqr5TIQvjaqfR!<%*3l3gjn`3Gq=KF3OoeUJbE%d zwi6CN-DK-`Jcr+uJO<0@2a)k`k@gJ#6arM@+zv83;fM;i$LMlztCNe$iac&7w|zbC zvZ6#@b}}yVD#E;8Tn`r|DC8bxqOn|$zeEJGn?wMQwiPNFc+r4jxe0$VpQ7wKRldl} zbrX6{x}77Z;~!> z2{t$rop*r8VE{YgJG5ibs1Kxn`@Fuh2Ew($n&8Fb*Veof$1iZ`UzSqAEU-?-14~obqK(2)DU~*>ylRFcb+?l|HRF;JH-vqQzk?y3H z!cepwMsnq|Xl9R<**gzq9?L`$MaoYk|#(?rB=p0oiMMoPR3PwUY}GjrSqk~Bms>sJyJ%b-bh7c zd>oN!NkkePL`0@3*!*^MX=4ITaj)PsCE&Qb!WkQfvmlKyvg|2Po*iAfFagCX9LiQW ziXn-TwY?avIj|BK#!6ud8vqq-Ae_v~;2bsxZow-46&nIiFb_P(c0*a;ofWa6te6dB z9<~RY%=ToBteh=md$FZ#Z*~&fhpl77*;Q;`b|c$QaL#O$lwq(NT4jbja|`ULDk_=i z_v0~iQirK7HVhbEyJE|)s$HghRsBZMwt+1FuCoI_r$J_$kwH{pR7C2VA&FgnO zBWNf!?I3DXu~A^L(J-8ifhsl@!H!G#7Qc&C+`Lf<8|(6IhNX4tWS2Twla}rHTOi_Xo5A~h;>bP<|6p{0Uj z#E16V=mdW!v{slNP9|*GWXofg20CHIIv9zDaHSL9x6HZ%%E{UX8I*?b*%eUYnyjI{ zq>75nvdNVi#Q6E4YVmffLA480+Dk5FwvHTL<+H9$SGvKCyn4-xQm33)KR*al}T^4J^U%*}9CC!Bp$nRW&2js-tw9SqzCKN2uK z?uX#i&2a99gzq342j?yFxHrT38@9m(GHZ1+{FokHm}J}sP@sUJl(0$I=9q#?;9w|c zhhV#YDvV`^!elh|hqGzO%!flg8vUbLB{Z`t=wQ>~R5k<7X0zc!HWw~qwXmMehr3x5 zbh3r8l^q2Su%qE=wg_H82jMlg1RaKB;4^kCvsg15z*|%BTDwGJjhDF&%wu(K#RM(47 zJPp&-J@A=@rM1;P)pE42d%-AmFLiHp2G)T`-AANA$w?@uPu1b*S};uWzPhivABypA z>@{_Nbp#6gF!o1vBR5~!NVmh)arm8y ziui4HyujrQh^iCR15lRZibAABMd74GMPUdAr;B0V{(|{fW9LL!ejB$9C{;LzY zI!U+{T)Gv>FX-Va>6N4;V;4HEh)8`Ph5$#fPpQpy1m5g{%J-n{Fb>0^WvE^zt5Y1; z<8vgDg}=we)yqW{E|04dF0Rn%=O>eOkJbs7pj_jRzrq;9SZM?5nM*y?=p3x7+u$;^ zVLv5dZ`}fySD55auO35+rqyGX>FU_curAr$*+ckZr(zYI2BqwD@F2;`*_p6EI}2*q z*@8)0B}R!B-f_YsB%kIu^lVM7;7yrEwj&Juc=cMh)xfk9BbKqOn`x zmMyS;Gu*lrZd1Y2pT4{ut=~4dLuww=(|Zf5T~WEkg7W?RzjYPYEU{9>38Ueek3 zjk`nAZvt_PL&Kp?d_sCL2CRoYx51`FyS5X3D1x%TXuxiM&{I+|(9>@#Y@u>GmZPk! zY#mg4u)?-(#l}DS5C;=kx1p686Q6#D0)xfTwgb{IX&|w`v&By&48|F#x}V z1Cb~fpzQn@W#>Yaor_R*E=Jk81jez;U=q6=eAucxkzIuz;ni>vy9O?2*TQY=dbo$( z43D#0&@)^QZ?Id@JG>1(Wp^+)+kndb9`q0IV-wgWHi>O!Q`t5)n?1zp*~9D@_6S?a z9z~V@IJ=xZ$!=p$u{+ssu)X*!dzwARUS%(^57>+BQ}&Xgu-_{Nds!L4UQvd#KPe;G ztI8zynlg?3S*c}zQI2G9C=1zJN`Sqsbg;iFKVqC zRp+5L+Fx0z)*)mYTg^VTUY(E5+azVFdL&}n4=H<;gY#@O1`UXFF;aQD+K9%Z1nIoL zD0wM+0-kb8^fWxCHsRZW>{ZyLEw?#LBhz;_=2FGdUTw6Xl{xn%`oQB zOvEO{V-hD!;ov0Riu^HFDh$*~FklC^O#73iL5rd;LX(7c291rnn5#>K>A8@r$IxT- zShPI=UqY=kL)7GjMV~@x>A>y4@xfPc3_c*^qzoOf9d^f??dT@Mt4FXeu_eRRJ z7B};3hrt}q7=gNZsd~KASUm=7r$1u!7$c*E4%I!K@JI#vqFM!7r^i7Xy@9OLueQNs zi%|9--vUqI3q9VDrq{aaXr?F0LnU|7K!y1fDtChv`c0kiYpLPyksAIU)bQ?y;c4_E z$YXn&)ctQNictF%pqjU0K7=!dVgnfk#ogFYwVbG{3uvBqD ztD-@hqCv<5Vy1GHRN z*QKyb4Pb5-+VkVp6_|$`+F+5oQn+Oo!+~lLV@1>?R@+c!`w4EQz6+6q8UkJL;c>us zAhDzy^eXWjG7@p)f!LgaN147I_7KggBOR}(%QwW2=qKS5V%D(quZUBJ2~X)bblTK* z^#sQoT8O2mMyEAu_lb35kVBqNdM=_LTJd0=?UpiDV5t!?xJ|LB=!eFb7{en-x*AhE zXgok&rLK0max3sT)%PeqnQM~`*JN`v8F-5f<_pw{d4S(Q7U5@$N?+UzFNvO5n=Jem z_&r*8k`rJP}mtcEILWL;b$M%G32Q3$J{qh8ow{T}t5 zg3gAkCt=LMM#o<2_o;uD^t<{4{LX?wY@pyqH%ib~!p_)mFnp-~5M{Xtn&AocWW=-| zgy4Sl6pZyp8?iw>6=TI{H?CJtLwF@{9$cfIjS6MY?L$fnDHo<9--i;{b${7(&@F9Baq{0uawgXAo{&Q{NH z$+uzy7+lxI z6Z9|ZzYZ$PijbJ2P|e$$;q?t3g6;ApFytRSNiT2cyBZO(~*pR zLR8QMU6bPc$KSl~!1`bj!P^M`azLT=d#3c?o8iOF@R9sl6cS5x1Gd=QdRhPD6XYoN z*k%3W#VirIm5>f9^%Q$bWSNC^+hZGioJ75NBm9SQLO=Ht{Is8^)KLNbQ3YJ?>6et} zQ<1+wS&8x-L|JZwVkHdwDJQ@LB?8q-6pm72aE#IcUS$=mP}ZRQu7!(~6X6Qwhj6WO zGOSllgFBV8;2z~{cu+Y9W%oz$F8=;oIhVPW^VlKE1#E`$W7ecx$h^u$ET~+}PEsym zKUFSc*W1T?`s^~dk6R-Y}k*Tu3myrir`L1AM{Jev@Fl1 zh^I)2GVPXMp-lG^GTj31uV5cXD#=Y7&xF6W9evTyV7$E@E)t%eg5JquVNB0N!QFun z`*)Xc7Iz^RI{=w*7#)GW46mQ6mrH?W6S1(IlnP1;^=+29#vp6%JEkmQ%(StR@e}-h zx(hk$6=FX0y#C8zBYa8?FxNKtOg6h*uCdsl`n*CD^VKT;vqACY-BQ!AMNR zs8Yx&Xja!@Rj5z}!__NPnhe&2%Jvmx9}N~kk*Fv=(SIbqS813>yu+Aui)>K76s|S8 z%_AH-UWwOL>eZ5t%6^!ZI;cO?C+k8na;X>%k3ou&JBo2Uxf=0S^o!JrHXfkin=dFT zKf+tls+P`(nc|FC*c`VUQf7#$lig)*gm(jKTdtS6lbXf$7-jBweF~Q*MV*XHMQJaZ zr+SvC{UZ22M1LY7u9M`QYk;ZO zs@FL(c%L&N1ntjPatv>W=-qnI>6Y0WuS>IBSMB7wG0Sy(mg}A@*A}`qGN@e-BQ`RI zKYMLt3jXZ2k*WAIU?X$kkG+v;_@l86qdJ*BZ_MKq9X)0XR3*pNW}@E%%5!j?@-p0{ z`~mIC8*qp6Cfu$31KHqR*ra?2Ta}NnMfEv6qzgM+{ zTDS?@+4~5=zatUbn22pn#2!k-9#6!O=next4JFRA=fGAEQ?GZX(hLUk3%E`ff7_`M z^ePRru_C7?Z@`+oQN78TT}g9<2lVHH0=2}%Yj|ipL{&oV?KJA z$0eqouwv>wU+Q$7r_5bM|437>LXYig*jv3;pmdGyr?|~!L`%%Jw|ACeb8wHFtMnM;k7+^ znaJ2?znxqacrC;066bm>?fO(+R?N9h#_OUC7s`e89xC86ys+-v3-LnN%#GH-o`Z&M zHbB2o0R3kGl>9p7dIxzQWu_GCycAu>Qsmpx!||%c>o&ZeMm~Nq^%^yHGaI%cO}E9{ zkEGbTy;8QYJ+i$+leA~Hcdj1ZX+6Nydw9otcxUwR4ozfvws%$!@7!D1UfJID+rswF z_Rj7hUH=}^74?vgrkSggdMG403TE;>)$~4TU$NownN&m6iJRHJ-QlqP5;sd_j+@#3 z^qH7^?&0EvY~DLlRM-ePHKV1%+{Q*Oa(T?nY*dAn26nVGpWI{pzxKWaJgQ<@xVlgG zStpZ8CPO$t*wmf_x|tumC5PTr@Oj(tE%pP2lHgJ5!NMh7|U9-k}`~L*6_n9;Y6$~GgizA?W04Cu3 ztOtsTJqajvPO4VtV3!a)3Q`YmV4g*RR>pdlu|7eS{T!~5zPIcrTg&>=2D4cXztz$H z{c4OTHSqfTHSl|0odHitnJP^goaQO{oRqS?!b!iyu0Fd>xi(go4dCD@`x$P8@LN*s zntn}F83B@RhTnz1rJOpH`9dX54~1EXLJgf5%QYFHGAC4bF{t%dA!fDJMQl zmvT0`IxQuuCgp3{nExd4(SIeePwoE$Tr`gy{aKD<)SG;UjV;#dqIqse(T*z?mF!r* zk&ZjAoE@*WAB-X+kj@JeL{4%NMw(Rb%kwC<)4Uz$m2H-@6R_;@KClTGE>0&SC$8~E zo>5rFP70?j5+OFRlARn*(QjhY>A)Iqqb4~BxAr}=A)kV2(@ z3rSKn{lbDpdcl84qDu0}8r+nIlb~onF||&5U$_Rgw`;0qt_er`?}Z~mI6<^bPi+O@ z^%~%drE7UZ0_U#?Y>mp;SLVMhX#V|DazHO|GR8>s{F0*@=9pmVz7NNid)pLNArHoc6UQO;)IhcnX| z@L3o!(~Br)XP2{c@O@UWcCi%ba&|68&Mq!zbJmaq=GWu;BU6Z2jb!OB)UMYR`&GXF zPstxUuNuz^Hn)<^Q!6tPGs@Zga&~?lNiIlBvVfBKatrO=+C?a}E=*Yo^Df9pm~-iM zQOf!gQKq{8T)SG*_xC4JwEUSQr-Z*8CV{`mUx+XZi`41yKT~9_b-;zyt%Bv1vx~em zp)GWrU0iLV=-WMme{!r1fi3vALYu2?)fQ?WXt!w}X-{a|v^TWv+HP%!klN>>nf8U~ zqkSccwcTQ#_Kmn%`&K-reJ@_qeiUD5KTD?lD)Y48WnXQdJVn%(Q$+)LrD!A{6OH9s z(L_EcTFT9$mE0oQ$ZevXJS3936dm-K=&W}a-Si2fuYR!@s{dV_sjn4h=^MmMeTz6- z-znzk--z?{pTt~4h?^{#F2i6?%v30Z9X5A}xSTBmttSw@f^{d!zYvNnGq4>@ofX{*AXM4E#)t)VW zvo8_*?Q6wB`!31tl~S`Gk-}atrTwxr?VZxHf0q%bsf;>(Wz0EEW;++ixO1b-aUPMm z&PG|^*(zPoq6(H(MRbgvwhnJGtSww7ZukCw+~&XC7tULnV2E|(`{J|V|v zzA7hVekD)JJS->167u9&Ql1hUBu|Y^my=_c$*HkB<>|52a$0PYoF3aI&xrjZXJqBc znOR-s*;ymyIa!nCtgHp{+^n1A?5t8bC+j`AAnRwjC_5rA%FdIQWEaZIvIoj5vPZ}( zv&YN7WzUvZXJ0I@%f3!tpS@h(kiAacoV``vn!R7%7H9JIxGC?5XUIF_*>YJtS1yk? zlJ~@W%6sFd$ot|m@p-mf8J{a3h%b^4#xIo*#h1v^_%-t3_>FQ^e3g7WzD2H%Z^!4S zvMm0)EYHzoS&op(!-Dn;oG#bGNd7TtG|0`+1?SZUFy$6VYENl7V99OJRI4NlDqTWn z?P*eW)ML=bOQ)~JxM#Eo#%+KC?O6<&`WA?5&tb?i@`I564V3uleu5QVI%5b7)i!F+ zW4eWYI@?$ZN2vo3!&rqFyr8uO(;S4M7fGwbJPC5Nm$dPaVcKwk_A+8%m{~Ae+k{_D zvms2^Ucs-H*&HTmuM*B?J1ADAIpzn@N^5~%9rJq3K{jTFxfIS+R%E8R5>8T9WS03f z4AeSmuYqlKhp4t$`v(}-)G%~&7}14BZF~v@IAiosD7K)*voo!e}op(ge%!;)dFe75YH?kj_>yM1}%V zg+9_guGV1lWDMH9r7D)xRkR;GzR?$pJV`{l)N#18|25uRj14 zjq1lTbBsvqZq1t?hGt|_^XXnVCN0&NgtgL01JP1*eW8&;m(dZrsYdv#p^BkSzvXj~kQ)#~7t&nm6#9ML5VFnI?6Yor+gFo z%eP>-d^^o1$OYp^z>lNIdRTGk-)JzVH*O>4@Wu;d&pZ#R~l2~ztSi7=@Me5390%NXFh8Ox|- z*C`>jpqyP_%O{ZhDDAvEBLtj*fWIa8P1<+b_o0ePOqtByN~X6dkt}03q$K{mu}H6E zH>o};V>i3Xu=mY4yM^p`D_{@)b7dL36`z3_ua)H*dJwiJJKL?&#&87M;hL}U{#hb--96ixzFNmd1mP)_h>I=fs=_O6E3S(#U}v1$hV zs{Q8o;Ua(ZD=$Y4gXQ07Z1%}x3d`8CO19kFBQ9er%Gq7jz3a`!?;t9_hq(L!2lbD2 zJ0DZ1Gl+t#oNsW5 zb2t{3YKNuDu+#(EL7ybu<@@JoS^@g#hGJ^pycLj0=I4c{b&IvC(yDKhwH$BA10du< z8~}%)K0X`Est^kk>M0Fsnn+DUe41*96g~nPDHj|(R8mnf$W3^)KD6oSLkHyQFcQ%! z(yLb(pX6&oc1m{wlkd4*iL<+_mx6J2k9uMEdh5bk6H^yy%7dMJL@mBkFkkVy16GuL zK5nmI_l@?PmW(O%otD%q4BWqvoqajGzqIPB3RW_vu#&ATE@uzqYoU`U_TYHzzK51W zAwEhsvWGp({I4mmGS1(%k*y>PNLMdNB6)qJwCe3rI58zE*`o;R@0du&*(&8uMtPF) z+{t(dc?OaSr3Mu8aWY&o^k5`nf+zJnsMH(7vw9PFO>YXX>&;=S-a<9|xkyHu;D{s#rvk=8WB!wN z1BOs)7aZdxoDQ~fCZ)rZV5)QmGSE>%(@3Z6d>E%W!kfC=g;efcFys>!0Us%+Qyh8z zI-&EQk$C;)k55&WFv6TAG_qCt-^28Kea4am>ktYT9F%99h6lkl`2LOq4M29^2LBqu zR9~9zgACgnt-=CJ*uwGEO~)htWCelj=e|*uY+bQGGAh~nV&oQO<*a-(_DKbUS|jYl zv=LU|iVbW7IUpS1iog{SjSD}mOCdioSw)C4_Ec%r=d@2&xgIn>PZI{ERV%A~l@*cR zquv&~xg9Rp@}Z&L6`JWip|_rbp?V*fq4$Mz^?q=k-X9j}17L|h2>zxY6)N1#z*Zs8 zK|1t?;eJPAMg7hYutY?#3m6I{=ZFju^{2eYVXqDw9#e_TFjdSa15H65hPKr3A`4si z5acWSWo+su`yp#Trt%s)8<>cPK2(c*(qQI$6|d!JQy+>;%3*1<-V8isiX4%s%dzPn zAdCX3kFMLXsi>#?!E%u+>ifjC47;9coAT5jH$mI{O7?VdC3~hg>Dh%miqKQ9{M=0YMfD7{r3SA*8*z;-tvKMFolAl8M zVi|i$2@|VPn0T2iJ3I$KZz>|iHX-F=uTbii3WTOWkk20?Pp^hx$CpAD#S+9MeR?hU zw7I%9I+IHn{X}r|iBL~J1)A!oB6*q)UG+0ykUj&(=x4%s{VbTO&q2~O56AEP&@&d+ zLA4G2cVQ@rTo^2i@M}|L*h8Uaf_w@%Fk7?`EwKfT5=Mxm zBHc%5b=B59Y-_JQ3zY+(C{hH~>LKa&N?5J9a_v^e?LSLFuV8Q1(GB%$c0+zSd#ki+XEHcH7)Mjs zmE~*;PGaQyZ>La%f2Y{h%h|t3m*HKU-|x|R!PeqrIeT9zuCNc5!@2bQkbv5*jh&ft zw4#V>kjsK~ki85H*Q9V6`^ZB`8M-QjT2jbIDARS^Ow8?K$A7$x+xQ3CwUAI}~p z>kt#K{8U)JH}3ZM<4%R4D_;bj?wCIo1Vt^Rv zO$$96E0e(J$z;Vz@=G$1U$z&cu=**=FT_oh1Vf{_kVdnl(O*3ma3q$q9ljr0qUawi zXAjd;4RlfhL?ULDMi6XV#4gFS0wHy|q{f^KFR+kGERh^$1`a_EJH1=3VDnK!GM)QUp>Op3d4 znn#%J>rE)v6=jtYq1{TE$GG+;7)}tJ+7P~%DP!L(tA_U)!JASi zs0KAaNjF}`_K;Lhg*PRKdNpg7LFz@m`DVrj_ALV<1!e5JQt0?s;eSu?OAp^xdiVs_ zb1F)G@95?!Vyr<5xIF{|!#m_rhuVJ~%@^46~5K z%r_V;#zB39p}}%Pz(aY!!nG9EZbtPQDr!s{PPi0kMJDmE=D6{i|9f?j``$(9AlhRZ^Ro&psirP zV<1_<_Exfe_-%g$J3wsWAchZBu)`@`2}wq>7QJD4HR%oU1{)tF3mr$2Ock*TwWqNh z22yCJ=W8@@8cd-f9&=D`pNI@cafzJaX)18?^TC<&F8c<-`^ zIZ+DxJSP(=Xw-+y$)Sjw8I+UCB5JvXouYef& zL{tTwOd%h)EH~n2Rlq=OToW6W+vFG!nd`eK@*>ySUB;bMoFo`GtCB~GF}2}R(m2*B zTFx^_lEGG2l1ypUy`@#X{J~gVA2+BEc9ui#6U%wDwCeMGZ?W)V8dHOuGM<^n(!NB= z4vb+qNsk8C7z<5}36M0V;d*cu^fhL~L}Lz2G3LTq#ypr~%!dn&^I?T?0X$$VgbHI3 zR2rAS3&y4JrEwYjWLyDkIW(pD4gk3Ws5u zI2pfYBH5iFPC?cbV-0W}c`D}3!j`;PvA+zM!i1QF48(>P;6ZU3rgLB-bJR|h#Xf;7 zFg(-D?KWKl6kP$Al9U=;G%B!#?H zON<{<>{LLK?+|CGRZ9>4u9$%#9s2S&)%wL?v)Dc2OpG(x0=86~C1(1omd%jkwX!%{ zdD6$$6Xyi2CuW7McWl^t>w?xpChB*Yn3_JDyju2o!0^w@>>AQ z2wLDguiie}^=j5AsF|1>)J)6^YKH43zh+{-=UkV42su?SgwAr*k*!*|5Qn0r3-@+q ziEs6#!{j5T@D@Zt>V44d5af6~uL{PI8>@etvj+c7D>+3h^REBikq5`WTu3#xhoF$!gFRdY-Tr!+hPR9B z3lZnz?*g&F-veu<&i?@BszV$08SRV*Y$e2OtA<<)qCJx`eVKHVj+%sKNZfz zz(0r<4%I`@Pjx}&UTEw$-G#u!MdIQ*uBFMXb<$<*uIpAPaf!IJj?8YY>xYbQ>&$$a zxV(%;F!a z%MODbO_d(0W|01GL3*UAetHafX7MT7(aa4u4;l<09yD>O*?8BGehr0e1Lz@q|%F0_AQYo1$hXx=K8 z`p3W1F%PmZ)}^3~H%y6q95>zwYJ>|Ho>!bKM7g_hO8FqGpaDn1zwYh56s%dxn*{2~ zys3XnNt`#sP_m3S_YS1Xc#HI8Ey*vI3_lUH3f{`QeaKpDuu{5vNKBebG0UO8D>W)k zIj(MwM6NZdZ=}ORIIRS|~s~Lr8X7M}{jxhr@Q5kPn#`8<7K61_KIW-Mj91y2~ZsKe)CqWbQG-zi|hA!q5 zoL|#mqB$MTH_w7g&6%*oJO{2d&xKpeIdF%09^7xvgH`4Nc*R@<@0b_DHuEC*+`I&S zF)xKG^9t73T*3;?D_KYLs_;npQ_#e1wCTYbW9Qy3?w|q3x`;c~{G-q^?Ts|MTbk_NpYX@-uVmk^UA0`QKJ&X{rIMG ziW2_}q9vGzp_>5>)q*Tf`yO*zf#Hcl2cd~_zsT5OI2y-@0mIo| zDA@1Q2hE zB1)LKW`Bi@;XKpIPM_L}L^-ss5RoX7=igc-tQ#FvdGh_1NFw>!gp|4ArImYr9Cy7; z<*y0%pQE|vkyA`TFru#YXmWuB6vKFXBin&#RpwSVyamw|##(neg0W55xNi*R-qfR1 zVSHlq&gPv|K>x22=1p45c32m2tSyth9%Z{%4wiq3WX`PONYe$e9KRtfw*z0DxYGE( zuf(DWXD5|@ak?N+ThsLqN7Bgn6GLK-s%Qk)rnAUjE|iI)lA+0}d}1HAZ2etq{R>1f z^Mw&hQezNcP-}zDM#b>_BUEi`mqjXksS`_)=l>WCn*^PrN*}6RsaxQFXRY3*AoSZX zn>|kQUBS7K@P%dL1wkMXPU#RM>qB;skKoSd1 z)1e{CaaV_L(sAfT_1}pcGy0Y{MC&u{iC6`?kQ@O^cr_)v4eYBwiOvO{kOd}hI|%&B zqrrx1%WQEAW>M*yR`eBns{NzIg%RQDD#?;J-!ZW-4Yh9(GASy#COdPKIk}s5=@Sbd-_uD zHiYRzG)6w@XC5gaSjag&z+oDHqll&34Uj(2rJMA^!A!gDl6!C4_QFg~#qCl#;qcn| zf@n=&)h}!U3uNW(t-rvKPcvvpKhUV^UmN;NZ&}yBv1RG|4jyOhG)zw4tW6&ySXaEk zbd7$d)Uf-R$!B@3T^#d2H+1A(wPJqE?DLwQb$6KD(x*;)X~7d1ioTlDOvE)XztPf+ zoM>ry2LSSREIPV}CJy4%W8SE%sPt^uPH?KxKe?*n{R~@9x@zD*e^n)wYUH$(FUd|e zMmBq@x=puuTEx_BYid=+sp>y1b*g_g<1Z6lxnEFTvHtrR*}yK;(T7{AZ4I^H&=_nn zSvJ4Iw~BracZqHt!LCZt8nvubAGOG;IcTX_=Db3=0K1~G>V9r0Li zLaBi{V!a^d8tqiqHKa>O(^{FhsJ>Vnxip(Ynh8Rm7_>nZ`$MT1AQS_dln=Qw)JE)- z3vM%{e4aS>+ddmP{>-z-qA+oDx2YFXoLz_O(h;@Rf+wm;+AlcEM0gMpf!-n5DG z2kOAkkltx1%ej|YHvsw$-FF&&?b5oAOcaJ)(VD1QMBKGG|D%pYB=TR)fqrNC>Fm3Q z+;GU?vFA~uF-mnP(<8%OZ6j9u?+8`nO#7hDU?F7(QcWl{PkC!mr0Ha}$d{$W;*RW! zRL<>0V_YKn(>yq}C0;eYYwSfnk-qjbdPn0v#cLAa30@W~7(PkV2~(46LY6 zw6u4$Wc-2dTRV`_M(buE`mcW-s!ue2O@@pjOEbHps6?$$!rlX)H87Y`#C2{&nojc} z6)YKj9{=j`S-P{Z;(%nga@k{jx0j*?e?dds46CEDhOX*OORmWw1W-=*IDGVP>G>e8 z55cJXwk!WhyMqFnU$a6iiglI+NZ|ma@KX(O3qKS*u?#8U>AsMROqyb!IuaS60>G=26u<~LhX1DkE77dBm%xR7jMk8ZOhoK{|p zEAfKciF)VWS!i!2NzyoGXl{Z@Qo<%ttls=obIE##|R__Dce8?v7LdKcvQZi#IX50Kc3sq$8z)`#pDKGBUw$f*eB zU}B_$ADeNoCL;v-tB2B8zu(z4w|;s@;Ox#bu_NbFRgEbw8GFGZ8)$hxFWcoPy$^V( zBKb-RlPdzD6BcjuM0d*pfd>qjc(}k9zqPDcxGM!dD^*GFt+YfBOSD8ugR6|1@?8H7 znXOru^Zk7(Hm6xgoU{GMOZ5Zj| z;^>ud^Ui3^9(Cs2E&jU)rnLpl?D1o6;TZ_JcI&KbhbhNyXU?dR zD~j%p?F7#Hw1;vR-i_7C!=5WJLu-#LkO^>Y&8Oq4-RB+DBs z~Cmt{6W0fSF?uqP02>WaTWM^p#RX-8Oa<(Hj^BEd-j zMN?)pQI(eLr;NE{zI#^sg^Li^cbqGV_Rd`d>IWk}8_ZJY(u1!mN%g=-7?4ZBnyKA7 zSxUk_4`Cw@76?edhEr6=f>(i_8Y8ARCD}{fXOLr@YaoG%ZqZy_8N;0K&aKrc60(|2d(wbh&$DcQ}L-(q6 zBCv8`2Oi&&_Tr7d@VDI?IPamqiy?h~XW)fNY695RlBm%2`c=tQlZvOLK6+NQF^4&l z`OYP_F7*#YsSip^Z;RXqxs^{-+$UVG^hfF=1C+$i_w3`%Hy`lX4go@+GOgHV%013JN_uvO?Z)f9pyS6)(!ZkL@DX))5)26^SbM0PC8v<)(`REG zdNA?28RM-xF&8Q0;*&_(_yxK|OkqHgjf}ZF!FngQMHeI7VKCqvV+fSOFy^{iVqNw{$z%MJBYp+oHK^O`c-Azol)rC%=HA}Yo&B|8 z^6CD;ubR;WzqEx;pX( zY{$H6*zAp<3bz#8UA$d{-9Cff*@5^gFXjQ0t}#WBN$_>nzSkcWFH?8{l-x8d=E$iB zYj;)C%5Eq9plGDYp(VwDslskea@NGPUQdI9XfJ4S&4O9z4pl-Y#@L|RmINq`xGCh8 zV`hwuLjUwsii;}H>-J?qJX0@-7@Y(z50jL5=IB7N%c-C}2u9-|L^1nCAEf4r0kn9< zo-aZiYSrHc{-E}0SnNt0kh`?aPB~8& zAO^9@@3XEU{kYi0UxN^b+QPry^0wWRYO1l8771h%5?Yi)iV&^Ww6RK3mHhD6u78#? zG^1|TI%AYrmOG{?$}y!C9zO$lA3$jI&t?V_8DMA;*)m+yl^h3-PDB)wge(Hvhz}o9 z>C}66&XW)%lxM#ml3B0johbuu>GKE<0EgBieu)ewIyb{!w zn7yTwkI4rij~3H#i0-?Eb<@pvtA7xh;W8&~Z_L)qoQH{5igtVod{U@WppvK3pu{p) zOi{IYbS0F)j)zJR%rMpT6$&PimM`szcZ2uAOXu8J{--gHc|QDOSb-7Mip@`a&>ja( z^J-#w5U}0)H>;D{Nh4D$mC4zwb^+A7j6x&_l{80pZtD!LCx@SL?hK|V$Cs1+L%4wj zXvPs@0DOi}eIFORjWcLZ*9@}SF?3LQ2GSj^?`HuEt@6SpjJz@E{ysj~drh(9xE&}~ zkq9sK58>02f5i7v1c=w0%J3{dj!p1L_PurW&EnU*C4_f`aIt3XXYKcl{%g)u) z++#x$tnwGCI@;WG#++8Y+C{=ZFEQyV_N93g*I3{!tf=H&b@LnCUpmg?l6^Awr#Xuu=fz(tpMnWVw3|a5aZz z7o_^&rK}V=cqvBTW|DxXUJmcvZ}S`2NFVr-XZL7(U&F+6LBy@%&Sc|w

rZ2g)35{40W1u%u7uD@j)hf1f=K1M*Zu3hNRFj{zMr; zSlomEiIH{np(3n+sJJH*6ERl6oVRdh>XN}2 zLOB-Jr-t>RmKBV~OB-D8lhjU#Z*m?e-ih4~F*dPi$qBX(JC8s}_?u$_i^T&!`d}p= zw|ehE)01gr z>fzuSxbR!gpH+R^^{|eFCD8ummC0WDjQNBMbMKU zkb*QQ7&H(N5F`+)a+LDUQCKf47!Z&;3=ojuzg;^=GX_HwTT=!jQ%43z69Z!tM+QR= zXA>hkV-p4gTLWtkCkrPAJ9{%n1AB7@d3#0{A!|D$D<@JWdLwHCC#N1&D`gx2rmq~m zwIsVBRr%^VwGs~UK&mv2QZa~-=%8rOTvnQ_BXTNz*V%O`N$eMq??YBz4iYst_t&Lf zV-Y_E6f~7fF!Qv`jK}Ol?nCyA<97Gk*KD32C?jkanhvJgARC*^&|Higo6HE}@Du0u zpbD&m%qUaP%MxRifgBOX;_YwThkxQmUlM1H4$g+Z2MwcTq_I=kysP(60#-p6t{*@b zV7vpKFGJt{uvP|`;J}z3X$t4GZ4K~M@;p~Gr4lIkNu8A_7q^-WI9BT`=~J$WEO=K- zZuLAVTB}`xzE!|&5qfDHwroqI?H%Xws{ZMB=a>j+R_5(<78H}FK`NJkhYCrUdN5* z4y&gl>6`+v#$?at1_voE;a6ri6%Hzov;r=czT6Jg0{%=vZOSq)&>$?883arvL?eYS z&rf?V8?q2Hx_q`TQ%Stf_p{mpo|Vqu-ngF|({4DlX8?3mm0%qmQkrd~JkL(Myt; z-}|5?_XLw2fI7kx+LX^{znzQxNazHOGX1XJqht)@`fGHyL+9#UWjuxhG(0|cz^DdU z4ycjG7gv?=-)f8YiUV}pi}s){Z2pBiuHLyjGV_^5r>+{3xGrw!d>SQjC=hHN!|HRpf!%zPZ02tSSwJvF*Uj_PMddC1B7!~_O{CJGA&)s z3TpFfQeSdZ#eG2*QlF9u_2{oYC133Q1Nuq*5P>fxm&chyBK&4NkyR@13oDHW>s%6f zXlII(ym8$+{KmY!LiDaT;;ja$)W`5#etR>yN}~u+psc8FJvJM?EvIm;wvPU4mDj$& z<8;y3Oy_GglN7P%%h|utRvWwq9q>jGD{nicIM(ctZqDVJ;G9j`Ru392V(B|h?lE06 z%9$dNNHaPWkL)6r`ZxtDrZ{_xBqF|q_ygdvbenJv37`J8#@i1N+lRC&WcC;xLmrOe z5qzKEf3?oU%{64cAQNUTg6dV-X@%uTBM27@(&-H>4RnD!46a>w8w`HsM;QJ^I+ z3+aOG{w|}8n?knw{jAg(!zR>|1hYl%@!bb-f1DvE|4qpJJIIPgEV=CK9EIvBiY;si zG)WwkjX5OC6wPA@M#cm!uiekFZ#mts$juZi?H;9vmKg@8mXb_LZmA@o_(JkRJRaPItrNlHzZdRVtLKfHR?>@&g?V_n;?4j8~i8g zZmLyGX^t>O)^(O^C;RO?|HYaL=zb{5z)cZ7{*>KZM7kOiFTtN)cR$?On`B?qiZ34PGc_F9CQQTKu_{Yjd6m`SFHk zy6viVN7}^UcRp!156xVN{H_`is4)9u})^%oYVjVA+Y|`v)Z%W5Nm1K zrMr|XGUe^vFTP`;*&l~GU(`_MExl~=mEbMUwEn;MG2rD59^#l4fa3}?C3Lnq+8*aa zRJ8E}W2`mrHK)KBY4`R zcG>m3p0i;8O7FkH{`XV$qD?t$fdm3F#{dEn{ZGL2|6?f2{~)MZlpCrV*3Z`E^o%KU zFrtJIBBj!hEQmF$f`va2l!6lIqBZ2a=9RIVIs|*y#bvSVxt6)~RhK4O%5tlEc}YvN z36Z|mMG;`}oa>ycmq7dn`YC*egM}w!3ob=GmW$%$ZraUn=cCJQ_UGi%3TQj74Zyk! zkA{b-%oNLGW&Qz$mN!)9{$zpAKR9RxnEG?#{`97a`{y_QwURx@?8~ivIXY;2S{MUm zyIwyiwW(1xI>J5?KK%V{eWdtpc_2fjdA~ZC-u@dCelKpnTKYjQWG{CA9%S#xVqKHt zj{dl~yH_zf7H{n?6q=%U(i#HOVA9krYSwLYV3EvQYM>b^E{eiKtL>UkMllol+)`eP zQiB0W6GiH((J-yBJhrN}`zAZ`S~1cBi>D{A-LcV{_QbrCmyu6Kw+)xs3M6HO^$0t2 ztDw&h|CcKtyJgmydS6D{nUUpR(Y^q%mw2N6pE@6qmw;2U#WO*c(|bka$9d#-vQf z5Do)%aeR{Uzv-K|nk+`^TOeA63;M1X@&1=&uB~fRm>c5ap>S3T1ac@P1p--f3&Ncy z_uC{=UUia|*4>uE;9z@?azRLksC;QG%#s0+TvRhqRP|iz+S0p_?@_=~%_~hCl3lClZSG+WO_%{b%t*?8~pVh^x+IT{qQYSft)%%73>MqF&`Nik&TnAlZ0h&L&L?oeYtIJrsWajvKv## z?g&Riy?+xn^k&|hyYKsLYqS{AfV$l|U$4d`3-w?D&dr`t1kc-t6F-X1y zcFPvCut~`dZ}~|KcrvQap`g8e zCB?;mv87m)hfW07Vw0SHrR;+y>y{CBoXE%%C~q0B8ah^GbB#9zidw!>@|PO$g`#B z=r($a&O9S^V@F!5M-$lJlZCdppc9Gw`@_7x*%>}=XK^|hgUuhPwI(cpo(@Qu!uB0N z_ltj+5Vh10lh?PYK~F!j7kF~efpub7YayfMywUJEVR z&}eiNljMSNmMO`2;7TBCBVSGNpqOntg%ZLnJ5FZ0)(;fCOoU%Bnib#)nz^nIpOzST zE6oHrqO~JP_-44*9k!%>F;jU^tfZ(?Z$Uas>J}@3j6M{V0e? z$MTYpk5hVNds(_vE&lVAmYrv7@k?(q`*A6vWr|C#5CzKdtbjbB)f`l} z$mSLd1t)0B4Vw5Xl=7N^+9Y^GgqSEK;6tDId-}zRuD^r`1)|$gqW8WcN1&(42!&~{ znc5nw!PB{9TK1q8#N|!sZ0m;>#j;eAM|Sr}iTCC}iVsL^1PSZSVeOgjVAC$qn3?{n zqGsekpNW?wONkdr-Ff_)-W$Gi@Ew13xI`MS*gw8wy$yw%4 zL}AG99H`)+Fh7!>T^*=pc0sFWZxq+VHEYUE7E05liHOS$`X13j?zpn|Yl4_rJ|>xX z;9Swdy@SZP{$fHgGWi<*7{Cm{Ah#3>BzdE_Z$d!5f5YsGGbvkAs5ssL$Yl;`46j@a zN>%g}N(qs-Q$<7mypnq!5d#m*At$IIWrBNLEGFivZ|Aj@3T`Q7*E}J|gTCg0WM~!P zVOmNjl=yYJ#l?{g`J-WB?L_|NtqXp@PV&iUe{e8!_pw;Ia6i7qL?_#IbkC9RG?`_c&?W3S~fz4m8w}Pai-r^IZ);D*{?Z7Tp>{VzC z$C)v_Gl^^DXQELHc=Ox0uk&1r?XqLLz{tBjojF0Qy!J|zI%LbgeUlX7i@ zA=kz^<05SWZfWtRwK%?0p!<#AbVN`t^BpdGFOQk*H)3-< zA00<^E}xJjm<0joXJC1}b8^|Pn0nmf@7ZHzacNBsuCictw+KAgfWm>L20{O*fd^1h zhZ}Yw?+bkLq3$*l)8Uzc(PD<(D0bPvSsKu_Fvj8!$p7X=^vFmYm%Kngvk5>z{Qm(j z`foxs?ej|?@bvVZ($3ZxjRQP4Cs)&BP-_GU-oK4_3t`Ox4hocT%v$#s|Y zQUD9)Mn4D@&va;&&`oQE@@hsnrK`hvd=}+3gX@8x-*%Njh!>cuIVxaIDmkE)(&?cU zwFaKLE-=cm+{DG5Rrro)5e}8Qj%RoZKEX0O{@l#@vCs?dDJZ25m3q)|svQO?W%r*KL&Tk6vm7zgRLiM0ndtGum2(+rmK;wY=OCAoS?We|1E$mF zEgIR9Ofvi+%fX4z05F5j0n{jgM~)HWCJEZ;(o1B(Xb1~O>5QG~FBW0CQdiY>cv0E*`Gqv5mp8parIVOzBclN9ZlKppBgcU1(-5UjiQ^7Ua_5HlP7(UFiKfZoi6dYa(RANZUs6CFY(>@Ll7UOidjsvI zeDH8BTvcA>g|SI3LOISr^Y3Toa$DH)tiz{Fe@&cHx(WDlt%1knPTAE9SB(gNXXmh~ z`x$>t3vZqyh-^B^5exq!gN}^HQVmDsq+7 zOg7~^snX~zGmJ=86;ens&F)%lbQ%JJ8lC<4=kZ`QgP+Rti^_|?!eOa6&6V5@k|lIu zY|aELHQbuYI4m`mA6dY%lyQLNVT@rTHsMespaq2J%iK2M@EP+K!m!ZuZoZm>0-`+b zB6`hMYscnwT6e*%7@ce+J#DO-s=EI7osG;21kt*hqy4$5VyEWLPQxYtdGqQ0^ugr= zqbD{(0tO??wk~@igI6n^iaX(=MF4;$hTFejDx9INHrxR3!f>+RL|BBB2(m=lvho~* zAz+H3jvLP>xFjw({T+P*sGxoSh=!;Fg)um!c6W-KRyuaAba}{_l!SU;v53#>xH<8y zSc@^(;vh=u%11A)2MYffD@-$j{9WE|i2zkaXX!D$Nt2`1+k+D92k|V{?+_P0=TU%L zXD@(uOxa?Z`k~S0cx`%}YvT;G0K42{2lK?uJxe%o`+UD){ktK>q~W~N9bjVf!xXX4 zIi}!3u%Md^$l-xy5xYe(7FQe6kETVUSO0fGI%~-Cs2L;IE7XhR*v|w@f$*KrX`)0^ z`KMZ_bqTdXr8G={58Igwg|5~g5!!{vRbmV70%RT4)Zw{+ob-*ua`lzR^UC#gPL;;C z{S3Mj_R3la?qQsUF=d?#St+|UF!|E!B-^zUIwX&D5C8M?zVWqy`K>HVe16jWYpC+4 zn&Q{Fgqs%u>d`+&BfN5z)!aq%Oz@J+4sNIGp;QujtBKSib_U=w>20BV3EsZ%9~_EHxL;r@pbHpbpa!3D%)R!uBLkkV z0whH(ca6br$mJvCF-YhwmD8?og;D3hWnV`PmV=$0woI=4yPM0{CseMTwCJy*kx)`Z z3ygP#mCFz1pP?2C^|&CGOr2EbPD-Xr*(G=sD;js}?m8)irJ#p}JyaFKAgxxRB;8rw~T=_FMsB?QZ92>7$NM6;f-Ui@a7S6yK8H-=&3p2x0_>T z0(RINe7RWl+^KvGk5H&DDueB&Nhpm*R|ID(VzWrLy{c6~K&AUv?}l<}Yp9aU#|-xX z?nINY2W2WtLl|DD-VVR)P1=mb5z@gcvlEz~HcliZ36}O>y6C>_Ln37v^HU12aOgl$ zfCc1u-D7s=k-JSiGjNj_6Vxd{FL?Q`VoIMesb){!R>k z^~*I3)4QuTXL;j7U`U93@|QlqN4cyMC|c=hsiD+uPahdHfVkif+~M$oW;FLJKmCow zs_lGP$$$i-4LYz(gT8>s4kL~xZ$_@6bg>HA(j>1htr7w9KHU!Hu+lc;oQ{A?_T0X^ z9~?=sx%t^2)Zf~;KKser>2rf|_){?UBlbKwX!Q3xZEv;E-Q-POu?>YvnnK}tOc*X?gGqR^6T^;dlzKw-KnPEGX6@K&i~FiIUSpQ6MFkY=>Wkk0vqD@W{F^s{W5#BF!%jctrQdOR4?`PIF58GWG9+PMSS}8}1 z=YPvosEt1Oq!%G;7nH*k*hrmhvQMQH8HgRvshnn9V<=K+o07fBxo$O_yMxb;xFT5} z#Iiv3%$*9ie`kv7dgAML zUd*U|vg!b>0s9mLMSlw+du`;b0#~A|8>3Ptd)g2hD8x3Q=(S6M_=4ubvJk%-mk=NG zv&E2v$>du98QaF(=u$l;Q@tY`nOg=P`&T7dG%k&qYS?)8S03$Mfzmf#(b3VdH_(J# zGZexw^(3r*m~zf4OB?B49`!-T$ARrDBjJWMs?=)m$yO7r-$30MqkNXEMGej&tFMUW zelXwNM7DNh?|7t_YumDuQ4^C&^M*~nZneF||7pKIb~ShjeCMAj>YoK(FAihbC9an@?a%X;!?vV?EwW69P(a zAoRbEv0H&a-(6i}a=czIxmJ{MY@D?0#K&V-@yWu~N8}#ZhHc?oaNVkp->q*h7P7SD z42z)WzqP((zBZ4YmV|+y>TB>7Lo@;nKXD@z~EPClmF_dH2v;cZg6&Njw~>10UYHG_>KeC?`U7NdZldTYM(`Sr1z z{9u#-eD&n6VzRig8a94hEW_lP5?`mn4vjQf9|nS7e^vdI{I*Z9ZbT`qpAz0V^IMtV z_|lUAT0VvRElYZfW&_Fu8NfY0BO#nb!G+Jo(Dk%Z;>3Tjvu=)|KkF`_n)VSaS=U7hdM-wW|&@q#En zuIcIS9qcxezVQjsTrW9v-7{V0o+snb-iLU>!3#C6k=oueqljx{SuInkxlmpbpd;xc z3eM=S)%XVdo-*xrn{ylTa%#Qq4dY{ekz_2Z_AuOvU(gGGn$U`0BEI1njc;|~;MqNW z^FUzD_uCQ<4DimwnbmcN#I8qGQdL}rbLg0)t(!(|CuKqV&lZteEP+9{b#oK#xkRl4^5(r!#bq$$9b`n*7O(Qe3c}@w@d# zeiX}s_}TE~WNE=tR9!94DvHKlCM^bJmu7WLs|fzYvsX|ZfwJ#u zLQDRG&se}$Ok9y?tDqB?{?FS8B!kY2{M@PWWyY+06DSg(0xiJVYg{PrXl=R-`hIX> zGTYbRGud~?k6C|M_4ADN+!uJTQW(>d0_SEfIJue;!&hQ8bamP$oC9L-Un*cQBQxAb zP?5`qz+%%q+h(wBoN|4e85{bUxNPzuZ|tOOxL{7`D=@_^;Hx<5mURyLFN6Kk6t*_^o}qTJsXoFKQ5?bp31*3nEsAg%M%|-4y>+ z!rPof*9>Vu9H?Y8ntx^F67q5u#9%0( ze!T!7_^4i_mBP%^NH)%^=-A=OlzM5NTLjE6(Z8_Zww0!`AzeQXnbH{?pN&+f|A6<< zI^uO^cp>KU{rW_Q%Ai&ss$gqy6nyMd*K$}=`70`!kXoJ1P7TM;Xg9q#uQ*-tr|3B& z?>QAVJ15yOC)=UpX5INF;?)4DCOCBA7$y5)W4FTRuu<1*lkhjSp%5vChh%f3_mV`n z4too=t)Z49D_T_q7Rrtv0|7}hKalIA_wqG*{~FxG+*%9@f_G0akSCTS;`C8eGZM>) z;5hyv;U|k+t^&7ZHz`hP8U;TQ7pmsJMs{W-^2xQNw{;y|XeUjJV4pEU{2lbDFSk8> zth(ss>P$^#06I-wT?Cd=z`ss@a6OYYHbbbcmCT21bW0DhoNNRv5Mp56P1Z}gDzAec z$slN%b{R1=2)Q`b#Zi$xH*=`FOnI=uzsy*gdBC6$jMJQ8U5lYogY{Fuy49PQ!Md0> z4$ZB$rewPk9-E3ahNo%RYWm(Xy+@hbo|Euk87;Wj>Q0Zz`&7!MhFpwbH$el&3ElR3 zYWX(T0<6#skTERMuC{e@zhTk^fDuvKoi3Blibk?kxlPWasTQQ=aag*X-^2ZNp(9Bw z(N}oJj1T?z5;L)@H1O-HqEdL8`zOmr70cuUM-YD*@z{ZSV!3kOSz0!eLub26ZB(@j zWjkT4G6mz{+5#q*~ zm)#yWp833uP$?Jt>@<#r0<7%lc$MS?7eH(fpT2;<6!TfIu4!gxUOs7SV<*Hjn9WC= zun;iWXh#8wDb^()e#x${lOCzjpFHYHPv$7 zNYz@U?M5tO&5$-R{DdndWN5VOQ9o_j9cc}?xOQbQ*#wFj{Cuhw-zEs@%}B$;%5wZR zi^*pTqtVnk3e0l7XZAqhQK*hDd^M085Vis~hvAAzBhmOA$IWL(4g1M zoJTGD?fMH7xKFuF7!S+b`BcA8PBUWlP`4&e`Q&X&IUOTbXYu2|t^;h#V8(Gq%(Kim zRf)U9#Jo?g-7-gPPndpTNxJYUaT&5fY0`_y3QGDlYtFZUV81>W2R(s4#|Jj-)DCUS zQN758dCosPf{g!gBTK)-)zlScc;U>9A zEDIWZ16WIt?@+WPrh$QVx3Kb-`A)xDyr0+SD zp%*mIllvkr&8S+&CgRkysNh_1#%82>r=rwxD8CLtJkkQ(9J4wC8Y8{6598G1l)I)E z@zaSBp{z@-OWB%br0~*a0jg~EL692ew~Syq$Nfk$>(#ryaxRz)SMBfxYVtNZ9Fd%Cn;9ZSmbO&M1q2h2f0t z%sozC-eRBcD)E9;vLQQC%(YkU8d#T_uzT@64YGv^vHCMt#CI+T@^YcOjsAsV4HlbM zpe{giW{xR+V+}=LP}lr@P#!z70LL0|T^RAmC_7+^u@J=?vRzW~NF`guP?7vC>vZ}n za}s^}fK~I4xKeUlNr*Rb%ALFBKoaH5qy<%;@Z>9Y<*t+c+(!`R(gx}u z%;mo~XME7}BkqAoaRJj)GU%RKi*{-^S<;iBgV@hfG84_LNJ%9ez8a0zg8Uw`(OHOYQ| z-U+6c*Cro|n31Gw9?Iq*6_k{u7*Ac$ZmC6Q=!$4|kwKZGSYt9ZbdR5^g!jJRjX!dE zJc-kN1NtED-^do1(LY52Jaz|X786w&6Zt!c^Hts&iF zpE%_obf}G?;-8|b!V4d}+oC$QMFt%@)%RdW#CZydp?o6#o`o4V_~*EHzaK>*I22~5 z7p2QTa40GCnt=}UUr-j=IMj@L;)tz)i<|1mv91$#pO-cl=UDHN;&x7yerYoVpLd3H z|Ft|9##l&jhI0Q_vcEUkU7xf-*9q`co3C(26Ft+sU6ij#tsUIBIK#f(qH`wMlH*ta zrR0-r6Kd0iTzA99&w-~;m%w@iZ=Z}?$9hB<3naLDILmWC7Pf2q+xMpk+h-dV3yJ;` z4F3z744lh5wzt$Sdfg}H+o=84NFHetWv_TPdJ4iduq2Z*?Q>Pum7Qnl(oOI31%Y*+ z=e!A&k2~v=j{WUl_^@@T^7(GU$NpC_$!YpH1+`tvO(~$uiAxO5uGDv8Q{SmgDNftY zuQ6sHJtvW27We8^g`S-dWB8bDR&-Xx?cf^!H0?<}0>V7gt3cyANUVe4{m5(%Qy`32 zz^x}G` zW}{<9v72HfiM+tv7#*68~#h>x?eg9+d zgXW}=vE zBG;g+%VcXWJUoIsvod!ZC6WqrlI8Q)7NJ}34g&3DbSUw8T%Hc@5S&ciM8#}9HKsgNF4}`AIQs?97A4EHD z1}vbvS*(@COt`@^C39G;sHnXGtY7FP?;wd5L7LoQiVSFWv5dTCM#*{(&>OqGdyibk zN5W$h){m(W6Ts1LY;q^C67R&G0W5!sgYN_eHOl`@fO2!-QD_ZzY41tUk9y$TxV1ue zJAijTzP-p7LD)p%!^FmvU$q!d5Ro1nEG5h3;?)*+B@qSLTr+>Xic!Ig7XWX!DdbfI z&FV?p&H{piwomg(lTd-StPKwpVW{D4-%or)Z$Y2A80xYsDA#o2W^6puo{J zVtrn+kX*ju!m&J0c6ghBnItD{ugWS7~EOZZF|S|KepAeZQHhO+qP{R zosMl=9otSiPHvv}ytnQ>A8*yEy*}@%y=u(4XRTV}H%tSoD8y{cxh#qO%(zCS$8+Vp zNPR(bA1Pzo%Fm2jIh?x3{@N3tC8{WUEo0-_5a#0PkPy}xfW}fM#EG-dan3AFt$9zZ zq`nBv`oW%V7Rc<`44U77sP$TQNAD-Y>zUyZCH@QEsO)PJ{e3l_fud5O40#m zwLyFAn?aYiq6@Q)MIKx{oWlBd89|jW{&b0NZ3Z)(VtOV1Lk)ur#zsXH72`> z77V8j%N2NU0#~+{vfn`#${6R6ROUAnNLCjaagT8;k_h_Sd<_ZD#(^3?=h%iGfE}Ih z*ksHfSZ0_Tc8T-GUJEb^q!|`LDoP2LA8eTU@}W{;ffbz4B0@9qVo_9h^T$6GXMu|b z1*bEI*`@}tPS`4V%EN7gPT^YQ0ZX`pluI4~)hgG8E{rk64;$`^^pLVX^4&ylos@^0 zY|wD-tidWWtT5!urx~x8sZ;s5ij0;JE%>pW3V>tOzsA}{Zm~rPFrYdXG!MUTz*^pT zL`|{`GUCv=AhawBPU6^%_I}Xt&4yypqJTa7add3(jgToomHUDCvnJ#N!ONy-WI+Ml{8{yk%x{#?)g&!dgFuW>LWmYqwtCEH^uK^ zmJb178H}Vjre7EiiPX6W7KJrYyr!lufdP@03!zIB5hiUd#7a)qreaK@ngY@`!AJ7) zj~@=g2lUA_-^)ul-t&OVW!UC3c*av{@%uZKJ_-dQ#6qguII}wjuGH{BNS;KxgXB{$ zd|*Z#N%sefH_rG%aSvSEp!^p&`GD?R3IAaC*5GJEU1@{8ase`#;5PXaI-cO@Hq;3t za{67(F3c(;s@Y?%yg~C@Dx@S&F=&A&&|Yzmgb1>RkHlNi-jINgSSAk!Da$UPo=r!O z>~T?*kohPH_rM!35D^BngDcArwg5$Uu~@`@M@PyMBFfMP!`U|KeXJNS%DmEoRY=BB z#Q6=>h)?wq5}a|(^mQv6yI1O{UR{@@)Yv6FF)gFfYWF(JcLEj z0XWrfzr=*SY3Q1U$xxEYoy09L()@ore@WT51vxuUB~I)xo?MrP5YD$ls9HFy%uJXd zE?Cfgj9rAFIP#kcaROw_1PG=m=YwfS%keHJ|1|ktRIspb+~>&q0~h>hiIl?oAR@}j zjH6^3&FJuCEE^~?@FS%(*aH7mO$&4b`DgBDz&<-9mL{DkhkV~c0A2sO?BlW`xU(%< zr&D?^?%ydakNR*zzTH#C3E@<7q zyJTj|Y!8~t#X-x>%6&x_sJ3277y3&4xnEQ(C)!F79fjm-YK9$wsY`OSEZEfzB|Pq( zBDWy}i+bzr!t1^gEPTB?uwHn1%k}TbEWE4VP$4oSppER2kxQ;Cm;QVf9%FY|TFJFA zI4cWngCx&LnpWzU!*UjP=HsP{W-LLVS%)~_uVh75#%feVcjQEj)r5nOyyi!ZMA@Qr zrv!Ivx)4?SS`DvSLH8MXk`v-TGT7?5o=`Sl+9Xq+)|M3Dlnn4?iw10gjgn;|JB!Wv zzTu|tBN;hyBFDHGXe?5)Ma8K`#ONG3<&rKA=n_%f_`34b!xM{f>^C*L@+c;@>Z?xO zw@&_~JcGr7q8OjdQftkCEf|x$Z7a{tT%+B3N0f9!D+F&5Civ4Fobe%in<5T$D(SR& zFv(^u`c)?TcBMw0(~8eLZY|*};wv(?%(Ef#Rr2d@4O4R)`GR#y5QhmTwx0F5$K9_AWhDsvRWiAaAmIDl9DE|!6v{Z2@4khLpq_9Xk2x+jzXgxojG{-D-}`#bDr zm;b@*D+cF9--rG?{6=}*r}umsu|n{J*%kL&Cw4b{$-_@Wc3)ftn!m8@F4l_fTPSx@ zdkO8Mq$4n2sr7#G+|EyocWkz5^o8>Ym%o1d5MznpMO3y+)%Txbc09LfoDpf?2H7g4T;G&k|&oXvSNCU+4+8vVOTdxJ+iat6r)3 zL#4%DG4~VD3v8^$$rIP??k5nU&}=ytq99?vl?T?0l8k)vPhB=+HOtT2K zlk|Ak3u!00K9Wn)rm$Tuz^vUd;-=CV&{BSTZJ%AqIxm^ha{^OF@iFdr`t%aVRWvJh z4wLRg@ifwz8$$k&DxySo5guJ z7M?2&-a{j!Q{7;=K`2$YdZ-gWz!3)|2y8Fp?|~wRyb2HYJ~+&~q~ABzAgp<&X9|S2 zpvOoGR?#h5SDX_zE zpv#AU?3PPas|!4GTHs{~SXqu(#bfkJjSH~8;5t8$+m4MT=Go2%@&|xFV0EfzEr|W) zNlwM2gvI$a(zMAO_e`V`pe7TBX|Y+7yN)C?L9Gm+mo0( z0NjD4Pgj8jKitK58Atq^}@Puo`_eAJzf z-BinUDT}7ayQ=*;FIrGlU)FO~9<3l*LR!{^SLa=VT3%cmn^{VYstCitf^0zjt7gP6 z$Q4?4X9NJMD?f-4#wvrQS`A55K85O-(GcT&Y+qO-_G6#8MfME}C4BDi;%2uqXAJ)^R;h3>i!aIRq zV&WbW!FzU#_#?VdNoP{%3>tQO^us^Wuc^Rj;_bh4&7Iu{OWH5b6K?Z=CN2 zYi%sGYl3&R6I~i};K3Q!l~-oKz`?t@w(i2hvbk0JRAi<(>cg{kkuuDi&JJOzb=;eQ ztG1P=-grD!;y&p?XLd&Y)p`6Zn}`G3t}7{RSACD2#2v7V zadK>1wCLPeWj?lG+3aHJlvXJRqr-CUuI-I!!a?A!Cf+6(>EV_(SULm7X@-65+T$ z2%HLqoH>{b7#&Zc6OZf{G`~eVp5q9vdJz}PCyR@Rhrb5HmaDbZtF^uME1$e;3?4de zeGiOkY*HsrqBu4Cn811@9CeU#S(jK&^n?~yTcF@N=FSjcqPhp%?rxbqtP2KxTcM|Y znw(dg8DkyK39zmn1kSW^y@Cw1)i#4ckeNc4kh07pczEg&2Yle5*zNMfWlm5%dvPAE z3_dzwoM>(})w=o!+O-}Z!Z|-4+I-^Srgpj=+tH@Gb;_btANEnVW=E%Pt|d9^n0og= z%3#oP%{h3kpa{ln(xLdIr2!p*>7*>;eiqo182*BOD9NycoB2?vGRHbS$~)QHn;b`y zjH~H3hy>oObzlbHgz?+ob5Rucp+6}~3sX=ilS(?~#!3Ny#65hqq zj(uAu-Eg_au$q;fC2!RgzVyVdaPq{a#dx&oxCaQ6~5 zcG*mc=DCf;`0H;KU4dUqp)PeD5p-%8i>c=*TGe!=5UyCfb#(>mOYx`f=T?8q>I&(X zT7E0*j{fP$oxPSwz$Wb3p@RP(j8jfclQ`GZMY- z%#&j_(f7}6oC1GQRg?^L;`OgeX5@Jl_BivQAO4ChTUGF`hVMxdetxPG(CCV*XFs2x zb;q1-=ad|JJl{o8{$3RE_2{($Gsh0iCVb)hF~0?KjAYo<6!SpZVz@%jp{T4&BJ)`0 z13^~Gx`;=Y^(98DDJuCVzg|DM-mqI#md>@#ivjSv20 zBi#UTZ!(m*7n4a$eiRT(!k@b@@dRS`yyr)#KddnLMDKvHaeKPv+RZV+10uSCIOq+m z<80Ri7QmB9?@`j9OyFoF^r*QfPv}qH+?bA6DAd{=7ZeEY|vS8%yj@Ml%)-ff0 zsghc>csT}o-uXpiXzo)8-sdEDq?J2wCCi`Sy3-zVwEp}qv#v{H6a9L#L(K+?m;jB2 zme)A!H@`D)9pW2spl(i8o=o^wC;YBousvt}TcKB;zLfn~_J(Hi zMf34gWXndsR+K>P{V_o`c`H; z7@q?LKY?VKP5)TR)tk?sy%OQx_L22Vs&0i=QYklDE3A$a)A`g6KzTXdx_IxV-cvp{ zuHr2&u?G>Ez_xHHf@!HYBG(4~yFJ+h5@P16pojYmQyG)Cu;wtVw&We5XK^~#6Ek^i zz_?no4R;=UyJdqb>hQ>owQFNJwPG3O*7MyCIdKa z2@mBb`+CmJrR6I>xW_1?!aqmc_eZNGdPY6grNyd9n`II7Z;^OQe%>6gmm=iZDwoL3 z1%q#q?OUf@>5VJ)yDL}gBG#s0>%k0HAFm7K%yOpZ>{%z6-E_Y5Xys7toE$&aYBPEX8kj$v7=~l9DK< z%4lRIS^sh#JqkhBH`Z8Y1TE@rc?wPU%Os_eW6N_iGO`HZ|>N4tPS-fzCAHEIBY#`m~)Kl>| zOuIdBpL|@fIT61lRYuSkJoRDR*?Mx7m?j>y=0#OT@rRovl^6~jvp5tf_tBndocBLN zYkNE;oFs0b1Zm{~Zsb%27nI$JOtCPpd0gy9VpFm%l>j=1D6+yBrBX^k5P(YlnLzvv zUh>VAvy%M> zbZ{?z6Sbnkv&x_3c1Knj177eWKifP^C&=gs+F5CktGXuC3)|a3WPgB(Ypwg358a+> zdUltH-owUpUV!l8T$Kg+MOOlZrCqPxyzrB5p=9uSfA(3$VX&`DN9qDe;r``r!{zQR z1WYZ05LwSo0Q75AC+GRWKefnIT`f{IJ5kk1ps4udIU!~>4GJO#U!Kxa0HrEop`91y z)8b$Sk~X(ye8J+QgjSKbaw)#>lNZevf{I6Lo=E(ek(Zc!S-cDMr?7k>o)`7i!XigO zxp4nffD_db4{tK$g{DtY-XP#nC$Cg~Px+B2uU`JBB5(HSjYTiUeey}DZY8=+jsDn+ zH)M9fu}6^pi2ISLM_SzjbDty%6B*%-hBCrP8C&*qDpNm!I&g!4#c{&xEzsYrE6T6p zDGm9;#RGynR>S?!NxTNQCD)m|9|^G?ByYg|VOExu5N%-7U?~GKTecR=24C3nek+88 ztg;RRs3N~3+6r!gev_(_8VH;+=17lw?717vmu751E^^cM=2-MR0AA<=iT~0lnBM>e z1y>tr&fi(GpS(jV4z(+0D~2T<4l*Tz+P(fH1E%8N)sGw4Z#%>Dhpw zYBRaQ3DLE0nI+KS6;h;9Y{PFpXQZ5QbVyl8)T3QxtD@E zR1PL!9$b25aR&v<*-tXi^4|*yRh?ABsUM3PJT|Vs zE^+CDOC%jBNm?YZYU zZZFat6{>Wfd_R&if*6=_!q``Ud$@naaqk3ir7;G`|jI@C@8Y`Q|@&5$tv zpi}~8{j}Pmd2*S=3F}IBe!C_x9DyU~lm$<2yiuH~z)AL$Nu22oz}YN$P9jL?6Z%&& zJ>0#)(`fcVF6#9q{+G+HOGI=5iba4(0(R;22dttHrQ|?B(5iowqE^x|fG`(Xw>~j%1 zH=&mE?xi!`7zS?6Z_Z9iDv1FWHZ_BWO{*d+5;Ds0YQ!Pt)U8j?92CE!+Nt zI*ioA3ceQ|=B(LTZL?=HPJ;bMpEwxOX?jX5Qvv8}NwLed@i~5H=!b|c zDD#f>)=d(}bf31)$T%kiS7!JkORQ?lIWD!mANT>OiCxm@;@qQGkGmWXy`zOJqS-q{ zxkNy*Z}j3u;P#oVoT61v1!gN=4&`DU-9`wt{FX>OqMW6Lm*}H!CX$5Dch-e(Y>HM& z)>Sh)oZRHk(;gk=)V$cmeug~RnN5G@DK8fJl`t29|mPGHO>~DC5U43-r;?gy9O9XB7=T;vblUL6s zw8KiZ2>F%)+-93N?Mk1_)R9%~GoR|z{%6h1kAl?Uc+IO9s%qX|E7x83+PII%<;dP< z;!P7*HNWa;7%e=NEIXAe+6O#Va|MhnIFpAO&farSMrYi_VoNA~^O^dlQ6%2>I=rw zSIv^9H_;{8dXBrY;2)z|U4qixn%5QGr}@^9$N4k@bEaaVLSUxUA^dGDv{vVSb5PxK z=Kd|t5T;t0Us^qv2h;$oSfMQtTN4h~3aS|5NvCTBpJ88cbj)+**)_`*oYWA%wXlY` zX$S|>g*WbC&k$XZ{;5sOv5UQr%b-wTPo~=|?qT`M&_1HJ{t?y>Gdu6Wj(otzK|J#u zxC+G6V~K!G-|sI6Ym59oSBCfjEg>?+AwKxn{$ZD&TG^ZSzB0U z9p2*%l8Xo3J`?EQeZX9AYjK`y;*G9EfjXMlG@=~F8hBq5=~AOAV_Y-NvPfNMx`JBu zyKF&qg{5OA3*k6R@L8kuF@!Za@3-0f!^-&Yp8>r=2;T{x?EWqC5AVVmRh=`mfL1;pHf_?7ToPp}1C*;5lg! z)LC!aCuPc1b5P}6cZyHML|Eu%~cj$0N+3OR2KbiJv^^$>lB{w7k5gy zzk|@fGzA|lYx&h3*63kLeSYy}^a}7W1N=Kw7Pjwhla8BT`-y+8INfWeF3ndJ*{#4} zn=H>$R_B#znk%NdvMp<$%yF)?yCk~e>l)_DuWDgid_4;v~VIR z-YU(6WqzV$72)LC5tpOK7FB)(O1f7DDfZ4V2oUQSYI$v>&=L&5yD&$!A-UC5i@c%Y z=cGWT8 zW5?;mqkR1Szu;_WKX5ib7D?BuAOExwFc6UN|Fe(U{s+!xZ)EoWLE7Yv%>K(vU8*oC zHz)v?W4j0@RDkB+2hU*uCXUZb=opm+TJgMfMZQISsg{jenLi922};l>PLwmpUqKto zOX5xQdh&dM(+5vZ6~-awkYqrEw4-glAs)E*I;=zJbq`CzFjLFiJe|$7r&^Vjy0~er zIcwU0w-c$@`8&3c<++g9R7bJ{4mCz6L%?bSd)kgPx284LcC5ada8Vj2BWY zJs*i+6E1;aq&s6bfbpH6k7&W~vm$@u>;KwKz|U^_*vbDx{Q*mr{NU~+|DSjBKd3up zOIrsUQ)L%J7gJkPJD2~>ysK52v|AKFGcw+UC|3Fb8jip7%bN>0Ezf?DzHd53f(V%f;ZJ z2NV`D?G7p4#)gY>uQ8T_E${D|5#^N>nQU~SMs+@e##I|VrkZc%(EE4=#Uta5=waoX zV_z|#&eZBeZW7LPU>Bc~%!PYjl6dU$r4gY!PXUx3(?TA08{_YVY%Em7=0TMBq6oPj z4+1LzV)x+P#Z?_{EXh3UW<;Wb*~PTn1Rcs?gMKI1j@)NTAt9QuH?RrZ1?zW=|E}JU z>M7p884(6p#p?+LN9K8zoCklR^pQMFEYILb7?~QtjYM=09Oc3_2#T#@l^lECslesr zZ$q5)0=-g8rAcn;h<%Z&+gyghwwrydyiUqN$2$;K99Il@7Oa1DIqA_j6-vL*8OY&M zU#Xc{zKf?+0BAUl1u=6hc8~8pxKJeGXQcH^ensB{3kX08O|a7I%)Ga#-*v6Tzl z5CkKcw!+lANvuhD#zL>~5=A^%&KdR)v$q15%3Sgn+b&4;UxYR9$zO7rC~EdBegj{Q(14Q_b^k(F*lo5ZVM+goCr1C!_ zJtb3Hd$<46;(t|kt+KW~iXbZAU}?&gRpYYO4ZBK3BjE9D6hC?c-ssUSN3Q9(xV zC|uJ`%kMD*UJf+#AjFy&4^Z1&!5*ScskK1zoBrSK>=CZ%tqQIlYx6qA7RAT4&e4XO zVst4HGqEf@$bShDvxu<`eB-UmbSQ&Ubt_A@j1%ZmvrV?jX&?oud9WX~D|VvPMABjj z5k!|zwYYq3rq=RU;8x@s2=WaFVIX(-RbZa{NMi(@dS0ai92b^}&+ZON?u&@tC0VLg z#Z9A^Vd0@VCPhS3Rfc_ zxrWpiet5`oEhluja^3|4lx#|_`o&knSGYWPdsHbtw}dByQ6$#8%p6*Deh{HVUlJ8` z{C2rU7Fb;$H~1{oQMCBf(b%!2jUelSzuvDmHfVI$GzsDHnxUW1Mkg2IGm65?z#*!I zY31wLOFJpGz%}U-ha#Ex*K_L=zF6SeWn6}_lx;OA)(OA`fZ2dysvXekVv{ct$~*!# zXPVvh37;J8-c~3>I7$&qFAxyX{^}`2d|DUcI5?Z-%tlXq;G0|X%+$7z!-i!_kAmf3#>Z@E8^{nP-)F?*0N#W5!cV;_Bx zfTZn*oRj0Or%h+S?^jP41Nhl!$^$oG(J54k?9|7&pw6Vt+wX{|(0NQ#5*S-2g6j4maywVcJbUgj90l)v=IMFteG)eKt^L$aAv>T<#jKfjIO@)QVo z3cqFn$8qgD>C4^PI)7X0kgReG8y@<9!%hClhO@83l!iWt6Bi3EETYQ(Yo&5E61L8C zB{uxGVYcazF2!-QhMm@Uw&n^e&3MiOj$SKOwpcN%7_D9G*PxUsC%%#}{y_#I4KlZA z7>mIL&#t6w2 zfNt(z52;Tm3>y?Y%N~-ML+-@bxX~JgOcI}vdDIL|6gQ0K5NM(^_Xrpo<4dXJlwzslGt!wT{9dC!2c* zlU2|AYbT19R%QDFJPKm)&EBRj>UZ9^7q%YW-lNlj{uLvM!HI!6!bw;%NOgcBhd3%o z2`iR3O7tLDbD)T#inHQIBROacMuZ(;%P|b;_D@skHHj8#q2mh^`$z8_iEXvokl1^E zF$jAMRB>$9cLweKZ8}TzS+2z-+mpdQF0oE%X>y2Nh@qEhGIt2yV9qEpR#C*BuJ5zn7mLx`jAW;tyHck{Y7RppekHY@PE?|e$le`6vo*ID~HWX~rfXb$ftUM@A_>2aiT zXA%arVTyR=iHnX9=B_z|o_H7xWe3D`j4@xV?0B9!W@B~4BwTJr7=z3HjwSQDEnVW6 z5b9f`F4W&#pCdkdPOe;F%1!VG(uiV84^Ekd)}efIJ0(qyi>UZp#-J|Ay4J&dvfqAq zt=iF~$(6^i;P)Z(Wo_z6&pv3QvYsGS@lUWXX8R%NGr1iV(fnX)CB!4A^uc!AU~^R3 zv4?VRkkAIY#6;N%hlIS6HiTPZNz^P-vf||LU^EYKfigP)FajzA_U;3xtZw0qZt)!7 zKJtaD4E><#H3&+{EHkMjInXt^rk)DT@>2G*}Jc z!Wk@o8?&LpN~%Q{gikFK@CWcOb%nI7yd;x}Iivb;J6KA3=LcRXnIaXVh@};MzLk$ho36G5chY!`^VtJkKq<5@YtaE{;R>PLLnq>Mut7~eQILH+^$d!@4) z5MQ9t0s(o40Rf5sPgMGUmGzbnw2#X2@(bs)?7bN|JrOK4TsCk}2u+A=LI4yPNFq{N z1C*6(l8k`~6TqCDCaUGSbHz$@^SSMp8b}1rO0Avij$@@(?Vpyvepbk1?lZoVHHDIx zy8js({y`MGkyAeCfb`lvl? zFG#{1k9Q-EQ;w*8{`pz&==G^^lcD4ap-2jnTp{?nL@wX1hd2nEGK4oy2}@LTKS! zg(;K;6eL$g88^i*N(1RiJwM&v$u9O-8eD&bA=en|#?c3>D(X(I0u_+6&%l^io{<7< zAHgWIxVLG@qLc1KP9!1j5nwvk}5S{6hZ-b%gvwCTSuFSSU zS9N6+M}7QPG*%ba6yqU-zr~Gl2iQK6E6+QS8l7tovoS)D&TY4~XdC*;2>M%Rf|=%E z(y0e`nzD8mT8$}dv|?Z5+CK-N7OBthZ z9Ga-*_5^Wq9qKqzwR;aIEvsJ8cH~bcv0{7*m2;?Ol!n*k+Tfn=51cE=W{xI3H}`y0 zb#_B!yE?LmLVemPK?wjD)%z$EI+M+M)PA*5lQ|B-FYx*>uTGrL?Lpq(Y4qy%&9YT( zQABAEG})?-Er4s3RgOC{$693_iaK){JB8ucj~8FxZR(q&L9V^j_znXHM$y#xE(3Ipq4d2ZvH-+NqiR4NI-Xpk ztc|$=H)e6T=8GHGFv-4Rr^gf>erq(v%Mo1UB%3Te0p75O2ho5}I z#0f$u4^hY_r=a`Ax#@NSJ1&%3yDwinB$07rIa$MsGJ#w8Svoe%Z*ZJ;XSb`!>z3=N zKMkwuiWl&q<%AsP-PIr04%!J^bg|yNEo?|Ss`I;d?CLCRkiUZP-IFOa<{OAEE#X)^ zsW<&v?S;p1s-S+?8Ie+>|Bl1bzp=G^I%972_}HUbv_N3JM5wzD!2-@-y>W!}#X*PQ zweAjN^HNC-l8pF8zRNZH#vqi%u7Y79+LyZdkKJ>HMCG4D5w<_&4;8-=jK7s}7qQba zj@();L~<)+?HnPD2W|e;EL7+^i`>dPyE~82(ayiW`eBT02DbiRSQQBE;{XoKi}@Q!taV54pLwY9LgW;vKh^6vaG|vSmS586bVlGf zS2~tXlTqm3MIs%$!`Hh>|4GhP$i$%oa<{OdLc8GkW-p(%9V)nxL?rUhpS%Ybk!Gl_ z+jZi#ui@+UFyRvF!gyqxHw~ZR{1=Vnoh_v3!EJw_v)X8`hGj^}=YO@ZdHTuhgfc}s z*yc|E(H4Ur?2HKG)RP49B0bjKqiBTuRap@HM~*t5&m4WAR+Vn@Pp>gk5KECbL;-0s z6~30-Jnz>RXUJ)<(B0y9s}Fy`G#4e8!`pYTbduACw?ok`X|Ilb7-ai!F$!qN5j3JQ z8v5;~^wd~^{1~7v_HJ*vyP*L3fg#qjnz(?(anz>h7h0mY9wpYJAd9){s$KPaGQk=v z0t}u*mR<9$Kr;g@-gOzduFTkQXp9)S?B6!Cp3dclgiT3(`Eyh@Y;0JKp+os=qP_W? znU+H`7z0yB*&8D2ZE_g6#xNbvxy5s5b}u7Bf{@kak33h!1}5#zepY5RaNay}taR$( zO{y&d3*9+%wP6Cvg!v6sVE<(HOL&RZ3mX^+E!nuDbfI-If^jTYGyEY;#1PGHl*$my z`$N=#Ghb9mm*GeP#Wa9%;A4cH=0~&2u#2w@s>M@~p*&#t{5W~ehAI28KwkKg18lE! ztp6I`JLsB0JkYn;p_(xd%XSteOkcqHwM& zeL>e0Ou9o?0yadQ8MKUmhCvAe+KOi&EI4GDIc}t*Bo=Zqbz6Ss5|?sy@-(Nx1Z!KN z23ixVQTvUU-5Jc=k2=OL>LZMH*E&m*y(x@&-TC)h*Ci*e4IVuGegWOQ?c%m0L36I9 zg5}pWTO_2@7F878TV~$ig}&$wDOt{UL#z~dnj>%~++Ui1iLPD8<{4zH$oR!pbvf+= zS_<_t!(S|`tlHn46i5ge@s}>O^ROJs-nfm!DGrxJunWk%N18fII(>-}O+n)RX9dYU z6GupWk2GdFxBcIRbzf5*2{H-~*pvc1Rkfup)Lg@VvgOxHUWM}vJj9$cx+TI|IiuKl zf8lGIhDK!_pCZv)Z&}sP3g>O0R>Z8Z<;N4#f&%Arqt-F5j?wXQyOQHI1BI#Ff$YzH z+pAN%PFx!y$IFYut#HxYi7ViM^5vH&q92@YJE$UJnuiE&tNP^`hxJ;9&0ZilUS1k{ zCXGEli*}sRY0Zr9tuN%8Dxu_y9Y9iebmtj2n(HPAOG=8S(I0ExzzjP&SON!m;TZbO z-m;8<3!^o!wnFd@#Rl+0?C8i3IENG~u|u}UnAP`IMj1F5gfO(S$FPNKGZ8t?TE_Ux zTx6h}hO}H`PFX>EI>;+mtZePxozcx${9|3j&fn;b8W(z>K!zH*L;G|@StACASFCkElYz|Xp( zfkt1oPZmBby?3I%B#mVZkmvO1>#oTf*BB*$^0xZ;nO_ST+GDirn<*}B4ezFZ z$)RVI*Z!00Ru%X3LCIsbW zJNE(Qrs>_>R~fkcqjHb@rP?HSVrQkb`)pfbsVBvl86Ff$^N*JGi&_dgE9gVuWrbMg z6#l@HYe$QCd?bey^v{eeT<))pvrRLw1)(?Km{a((*K0MmQ+$7AYXN;waSnsaRAQOS zzp9vSQMg7GMwL6>O4;Rk7FtWkiDOfI8CDi5;Qv-MRFwB(mAbcMj;Xr$m8*O%2u%0y zolO;ex0uEw*mc7xS{XJ;E}ufEkG%(~L1iTuZ&|d=+@m?YPfjMQd3RW6XyK=wJw!AhM1Iz;mM%OS2MRzfl(vzXh;>U@vzbM8{-?qP;SC( z%nt5lH3=qJH0$DS+@z*cvlLo~97@&EfMb&_zOEtAgB4BSn;U|k>ZEM=D&tA%up`9x zbJk=)nVbVFrOPoj36Y3M=3;rIhBL2qmI_x3)73yWPhI+fP114pE(~S6^!Tw)O3A*v zrZ)i;f1*<8>7r|IWVxAV+Ab4;+KwILZA%ACuPLh48+)tpH1{PB&5$^Cx5|P6w=opU zOUnXpdWJ%d6uW!w^~Lkt82E1CtO5R=^+n*(Ijj2FEZhPS^05jLd=ehl7y`S~eAyl6~AZo8%=oeC@03e8#f4QfC?;U~9dO`h;WH=}YRT<>Dlm=TGlKTNO z$ohmSv*Ob7tq$c^lJ)fYTWW-#VIz$8LnV8g(_DbmVj~y<9U(V84a$dJ3(XwDj$_x+ z*${1rC(BA8@A+lKX2W) zzEfBIkOlagqx%RaNBBqlgekd^z*RWCi=#{)HiixCL$r<$&sCJr$09PG9_1xiwJRY5K#-MqKt$ymOCrcANbr%+{k2SD(6V)KID{D zrbH;K_3Y%CHTWYJl8z4-jj9>BxRZJagS_a*e|H zZnKv7-$w^HBHMNP#yo~m)=eU^jM*U@ct%MR)KR$&7gEWQ2`jUZDJwTIlu-Gm*ubwg znrgQ=+b#>X)^k??}W^g}$UpUz^WsT@glcK!y5VMw&gB0z4rw z;+qhL0k}!+r$j=yP(3WzBR7pG!wnj)QmUX5PBnybt*phfo^U9YP!>yIRYy3Ql=ySJ zl~d9gDk4jzCT1xGtuK|@WS89uI-s8FB#Tw6LMU@88=91E5mOdJCjX01b;NSQ!!)Q2 zR}6!R5FiQbtw*qsA~~^_GF4huFajmFk|JdqRh58=Czz+6If61*j6|!+E2A8zQpWs( zMQY%YS~jIpMX8}Y^5|ihgwDp&g+#xQqB&tBTS-n|H`TB1HI^Dddt8%6W1S+^6@61V zp>q!=6sEajCo?$GMqiWQ8`v@`> ziY_XmSWcZz^9tH?3ej+p3Xr?^pjdvYWS$zD{}Wh1B>!7v6xBZlR6^%N5lRiClnBHK z)>Ho981oq`kF9lec)V2#MR4lvm_+cab=ew-@`ttPF?_(5 zcZolc;lpJ1Rz)&EUd(McDnwoe*9)H*t0HqJ;Iw6p#QXa-O))0d32E>s9f;X-3VSQ6 z^djQ?f|jgv<0M;?;dV-q!pMsAv@LWhJrrUtao-4X^7wH#vF z$N0=8G$IFg#_k^CEbzmsH8K7G|InT2qg+fY_#SL-sU)s`Biv+>Qt1{sj7*o(YC+IB zS!20QoW1o`^REQ_7&-*|*jiB~?P(&evi9_Y#Ot^ZS-uwx_?lFl)LKToW1Y^vLpGCc z!UrWa$+oUD>Uu@JM2~UDE8z;gr$z$yRK}N$Wyn)=1MK)H5(d50*8GBs&s#RhY(u6w zEf$ZJl%6hAtE z18cbvF&SZTvk;d%%&B4p^-^I3UnM%452gEA*E}-jmGA@j0mBnpTzdSI?cV zr&qJg!O^wNb1DCdU&5WuJsVTIq?>u?6!*()-Kk>rhfajk|6=W}qUvgw_0Qn8aCdii zcXxMpceeyxxCajecL?sjaM$3$-7PpY`<%18d!PPa_4vkE7xQ9W&GCC{KJ`{TRkI%` z=u~HP3A=`t-eXHur;>Q%=vWk@?v(mp-=?)C?3J(&@83bDHK`L>a4?TI{bsLf&1(mC zC+`_y2GdcaKO!KuiAw0!Hx()vzicRLCL>WJn`Lx0*G5d{b_}AYm8SCGryYoX-6|&* z)6LL;McVPf|By}LStI|*l8m8l9eb4Frljtd{Q@77t4VQ}y9K_>OsxtuI@FCoxhRhv zvm5IpFqzpQ?!c8%T8^!kdCIA;BAGF&7=TF2;m4b zC}vP`4MPcZ8rnwGjR@0G*dy-RB|o1{6BYVis)9zuMr=hiK@~T>n}(}yHKTrd|Ev6Z z9NF4KLADIP^?(fh;^IR$Wq_TJ7Y@et(VV;)`iBJez;B6(LOvD@U|*$4=+c&_55ylx zM7JjuD3X9LU%mc{3khuu>f$RO<=9SDVZ`%d|9BCmMz5i!#!# z!T&|`JE5UH|8l4`LbC$58ts_ahFLF16yo8xY7Jw7pkt&}58(#skTm~>{2{7NMr1<7 zY7TDEYZ_*P*gBxi0%>Q;GZA4{7Rp-trKDHPuOYG~X4@Z6wTv8ESjNlcRQi!Sf3jL| z0G<@?De6LDq;g?x=++}U@rFW!A~8=Qsg?o`PChEkQlj6DCZcfLMF&i?7A-!+oC1!L zPYw(2*5sD~g3~dDOU#mXaNxr4SZ{yZoC(Y|=Fu~bk=GEClG(toEu$VQ3Vh=&pQbEW zK_(vSgEoPXE~$= zw+`K)KndZ!#mL|?#e-Mt=5bDNK4wG&rd-VuO%IPJ->?!R#P;#aFnjPz9i5RZm~Jt$ zgk{#ELnoKxedlk500Pc}#QE}Ow&0Q0!Nj2iz(5D-p1oJ?ZYhqE>-n!>F}e`2a6$B> z=v+y3&cG-a&dd#anbBX0PQPl2|56W7iFFsLt6Vyi&qQ04Ko|HBV^pvxP!f?|;^A2= z;22CYEGh!z!v*`b0vDaYF`cMLS|sYY=CcIQVdf-c+PPt2@J*;?DyP+?v?ft|6k5=w z*9srAovytj;lP|ZUI$G`5OCFzqeYfmX*7xEn zaO8IsmXU9MpAWsnw^jSNwM&nqfa(ax8x9|BF|3Ni8ZH)ENE>~xLf}D`zaiGOgyyV7 zRWT{z%Cd*o@6FNVp)YB19FVk56LiAC_@Hb!1Ra5v zn56RqQpS$}<@uYoh!kpKveT29g8YfN93!B+h~IuvES@G8Dis_A)4BqN-U2FGRWo}T zAavmw6=Yo4qseFH2=A`1>4Yfp=v}Dn6P=D1A>pL66mURG5bqOJw-STqod-92RWWmA zJ?Pajd&8I@AD+cNVcD!l+~cZ^P5W-?m>=v4reW3=ixy*hW>ZB{H5sY$?E(381IJ9I z`3}E1HjqVTu&yxxB!O`{L>X6lv!i<`H`ad5(`T|#3>1r{u{`D!+qZ@F>zs(WW{{k> z^x!Ta$RTc^c;8(~uo`sXm z>4x@?-gVB2xy1!r7k-x->(I0m`(BEb@2iafL@VCys;K2vyJz)olpb>XKuhHPGtF zO*m$S!pm~w*z<`hd*d4NFs(s)RlqnNn5ls_7qH*GsXiF%A-7vXX5tiv9h*DbZydRW z%YHm*d9?(svVqpJmvivaXafm-R8LvZay{VDnoo^Ab-CDhLViWt$_Z#Jjuc!N`O>Mm2|;z6$=E9 z&W{*QVAc=o1uh_dlz4TXi}tWxcUxqbMh>alY*y!w=tnuA&Zqby!G!{@iFswk2{F?nzMcbEaeG`Yl-a@HOrc~fc@vrs`P z?j6m@ys){<}XaEPDLEc(0hWu~pPs9kD=q?JDS@dyI zgyS&|4HN!+?yISPz=jnyZWk*}^I{a?kL$;^m@b=3@JTj?n7KiRXL~f@m5m)|?YsKj z=)h{16>qV(Xqav6wXH`t@Fg&62MF(CP^!_6TkTJm;@htNeUe#Q7ha$CA=uX_rF6zk zTQdpvD+d0&sNxydw1$SRTV)Qa5(Guo^xql8t4c1sUP03N18rHf8(@<%vRich)|_ch z5SK_isx#xNbq+f7NN*I{ffJf5cC6vL+(n1IDm#CQ^LBob!h91q-PvbB_=a$MEq9}t zod@B=1SO9_c4!RG4P!y(J@UI-po5^nnpj2 z*VYh=AyM7m4kw#GDeQ#;LWZ~MD8LY}$cUt!=V_;xC9VFd7ns2D#I{hVYssL0CuJP_ zeeE|ST8)19BUaDJ4IzoFROmz4=Ih&r6R0pA#(JvtjYU7)oaPVc&7<%rO)oqL!>V+2 zRj#;G4SeYf3(fF03xOOtTwsc3@GY(;yO;OV^vD%m&mGqYEhlELGo8rSfxV-P3#jP7 zMj?HV(pi5~X($uCypy%&&k`#NhO>Cv!-h~dVh7Ohx|QBf;+W)YETy1oGYP_x>c)aH z`qZRRAZGF5`FdMM-FncWSU}(z!Ih(HEWPNiabPa-eLsZINJ_o=^E73@JPSef6H9=d zn}eN)3b|nb7L=z7?DME8!QUc-zOF;fXbH%IBbt>V%!Ni3eUmHt_8aQh^oAJVQf;Y( z%9@12LLp}oP%O5@RdPj-&SaOSMNA6-X?NMus5CR^HthUjvI zPVx%ucKI=lDu?0gHE#YRwiIXAn7g1(WR%NhP2u?Gc01g)J|8CA#T*t;yO;(F99j&o0%PXcAIM<%kjfOOAQbTX~b()_tl_vOfM7{M1REqFgh~*_Vg#Bt9>Jsx ze#xMF261eMV49Isp@(j1u;P5B1ol$ypp2HcNgQ(EMD~dN@zjAi_5pGnN^}f17@rD| zlfF{s(iT35q6{@$IqaOvTVq8=)ll+5 zRUWAc5S*Cuh5jh90*QbB8i%b5)m)bc?}H6%$YykrxQD@N6Ia2Nwa zNn)I5!54&Uwl?1LU~Ss4mkgRtbfyxK3-gcw<{t^#G9x9qM=W01EHumW?prHcM-(MT zesd%r-zblvQOtJ#_K9?HbYVxAUpvceB125LL@Zbr88sFIn^5T=AtcC$jZNE3K!!#P zCiE7PXBBrYW~9{v1xyB4R-IWa@fMe_dw7*so{YyMo){%3^Ng`mNoZEO;I?MAHw19b zi4k064Oc0@s&t(wkOR=6`rOhQNklF2TQfLa`HLo*lXmp9onTLk+~lML`n0^-m9w8+hlD@Z*x^ifL(T=Lnnbzc3J6z4spf)tau7i7ZT zyp|kAXxfQmGv_TuF<9&w{zk#vs8XR|(%Sv-!oPre0x(DZL{3W-%yUG;JdcR&zd2;0nM__yL z01`Be{we3aWGKS?q!%U&VT7>UBvvI^h!%yHb7;-9|kFZVkX3 zD7wyOH4}-$xVZw>g1(Tj#(#)Q#h8f>+z!x(yw&`cd@cPCPh|Z5;;q1< z(2vLwLU_3{0I-Ke!ylm((1z8`{J?eTxfi0Lb*MUP)v8Dn&O_%V5stNSYET?q;&c#N zqCG8&e}lMO*#tit02jJY-KY5j7(BQ}AJz5T_NRtYnG z+w2>Qu5_rD9!EGsXir$oLc{v+FjNjvvCqV(N zYVj(rUks#je zt7GoRedIqWt^YH=kfbHIuq{4EwKh8BT>Lep>@g|%kD~=?cL|1fhXQNQu(>OYkiy*s z`&rN4my06mWIa3F1-0=Sa|V64uTHoP7tK~1j#F~Zle)xppHGv|G_KK(ujYw8#LqHo zQ~vBPCPj@~=HJ4);{y}(cg*Laf7T;EkBS@vmBi+3+e7Pa1clQ|zNH|A5e^)6efL)? zeI-e$e;4O7#VMjj0{=6+>tZkb{b+v7D+&Hw!0wd@B`0xG5Uph1n$(qcc>IA~m*!E6&CT_1y2 zFd@`wP|FU~W4aIAJEM`5WM|0nj%N8xdLsRgFDs7}@44SwQs2*$>~7!$Q{>>dMMDFu zBKWs(d`Bk0yg{>Sm^qyRj~GIeMj3ie)4E~#;68_tA!Q<^_EJB zecPy`_ws5qm&t6;8KhZ*FC^Mfiqn*TMY}Z;@&Ag4JJ@^|OmQP*3$b{VhIa$-e$Cu_ zOn8h&Z8{_6;Q7dGL2ph5otN!bF*B9mV4|x#ggU0$viWVXgzUhjm7MPh&_=DPHWL!X zufbzEC)W9(b6jH;+c~RO{6*qT_THAcCYr#wR2O@xYr5pXbGyXc^g;&LNe60vN~jc#S0Kdb#5- zRns^yl4|hW-LDk*GW!mBb`~T}|pqgFN%y?rxfRubc-x7V92;~Iy zUB<#aJquBbj(hUd@V3RPzF=C(@mJpaEg|T(7~$Qk-ge&t5`mssvh2t~Q_);iL_qaR z!iIYH8maFkY_^p5x7HBLqYmCo(R%%oxkHU3gJf5~ESW9;FbO6xC0|PTqqLvtW^o}`3o?{{MQG%3 zeg38%=`|*EzqesXcG&hij6fIJ!?oiTz!E$l(k3joG;vNqAJ3nz(s`l0>ip_cIvJBG z*}@JhjlqtnA%(w>$>0>lhD6E1Y0wqBgsE9+&Qhu6KDW8L*kze|)tdmmQW}cyDco>? zmX9vI@S~F;#*B`X{|-*b8)_W|y*_*Za$b`}uAJ1$B&6QHiOit$HrUu4OXrspr=~Wu zVU-@XfDqcFY%bRwwbqO{xKWG?q%w6i7UbCx+>L*)d3E7ovrg8Rl*NLTvcFDFmZ;K61bEA6{?uIa{pTTGiaZy_2tQp>cOFiq{CT zkoiL&Y8mkmXWESE?8WNCj?8sNV|j z^y~*Bm-DC$IE1z=cU!M*YdlMKqtrmX^(fw58U}qp{b%R3l)(DQ;Ah7*=cmn7@&8Zf zHHW%~o2R*lr<6Tj^9VS~+M=St?RX|3vk2{pL<{8rY`?_g_1rlZkF!uw$4uf-N4?YVQBy9OA$;_ zOyP)otG}dQiKV##kos1EdQb7$+sl~wfm%HzJ zszj#=Gtfpi!~JmThyTR}Kl^6)w|96Guomg0K22_eaq^f`U5r~9{?4R9MQCMDFC3i| z(!-dMzj3j+R9akv&0B$$;D3^vr&w0i3>nwi#BU!K2UBM}eDzNdFPw3lijHJJYY_Br zwd8FxWHblt7PiT_b86lwr!e#(;%QJNX8xRWRQY zZ82lW(|#K6P45y%Wz}}|IMV}|I$U_g>S9|+vUo$u>38-~mJ>YG`$s#CuC@A-%Z}EZ zG)yfgS;v?raW##BjH|#b4ErX#)NRS*y~eQ!yp+}Q_vGFX`K>2eDiIjUP576g^oLaY zzE|TBZ-at`5zBKJ(<+aL{Kl@@l)-9nIU4LlkPVn`EGA1l{QXs4EezR(sw+TQsR95T zm0&_?AJ<;Xo}+HsH&-<$IniomjJR)pWhqz;ZWgpn-Guf0;Ud zQeA5_16h1Ap|tW|I6kq%)2O^Np8ihC;&@VKR(evF;RN}JiSjS4PuQooYMMef!8Vud zNA+1>Wq|1OF_Dy4QpLo1NT33ZI)~D{J;WvF+#h}gA7_@`E=pn-E14nN`a~V2?}`U5 zSciWpc}U3#$^*nsK+}o1hj&Jlrtly{p38oeC-8%Kl7@#5Ds|r5(VCc6iHsr3XUYbP zeOqmy3-sgva#yuZoo85ml3WY(<%_{TMzW-%i-)hcsfW3ZhOLFIrQ82-tU0axFMpL) zi)B8BzUo&Em5KtaXaF8l$xtZf_o6W{hfbxIc`w(Fj?A2jSK4<}DxcY-zN5vIZ%NnZ zYVu}wkh)AS2VK6mUBH8Az<+U@wlmVL(M>T_Iot<-=;=dBJ5n32XX4XuQOU?M_1=2 zj)BsZxz+x1T;7c{_4I;WkJfqcpbV{k1pV$4wpSWLb|s$P1Mz+hrEs&C;3@{n6xh&h zA3(NjelduK9~e>kE73G0@jP8w5@iz_ffBgt3Ul>KbhBKdW!9%*s5TXcLfmTjl2+e| zZ}vRrBj)fV*N3tmM;r*x=lZjMljXI|+amtb0ZU$|S!K!$s)ezNZDAUSB{5nCeF6V# zvIXCN?l+)1W$-4{lhT-8S|0NTY?#ba2D(G~1(1NAg{?W8#>Zqouk9KKP?n2QJyk{H z0l0@A5IAb{$FFH5m%UsR#XfF!Q(w=MjX6@V31A#=*Y&cgdk4^9Ce+^m?_4VCHpQ9Rs zaqWb4L8Ar#5n`!8ZarZ(L^H58C>|u_)7Tza&SL^LpONojWe!Li51s2?NC-$MnpMt5 zRQ7+KF%9}LL~yWco^Jj@KQio#>tTn=dm=;XHlFbQ|5`-+00aPpnafdpaC>X(BKrB}Bj^!?Bj-d{{Y$g3Mw?!{JDkS*?rT;$ zDh7H6g!?6oIi5}K7O6kTcF&s922A#b1=lCvGu|d9rp_)BjE%d&bwqg+geDG5O}$XO zU6%R{h;-K*u6p}B!=ZrP!$w!QayHngr?FI0K~#?2=YDckQNvbG#>QmM;&68Y`t%7{T$vA^ z8#2^pJiTV50j0{$cKp+3{FbJQ^C31ZMa%(r!>{3{B){1rPx77EUVjLa3!RV-(%y{~ z(>N`wrG|SDn2zv%JtAVQ$|1&i>x<+Bk>EUl1LGD9Vid}--Oex1&2Y%-{TnIuWl42u z*fgfICOpOX0A@8gL{I|< z-4E0H!}rm<=itMo#sc@di_U%D*&NwjzJh0BS5S$#?!{iayP>eM^8Pw~U}@a?%8*@aNcP=m^CRA@-3NoPy>J)n3fl#3FB~rS_Oj6b5;>0u6)LSOw_f z%aQJI!)M^x-#O_$xl8m=AdeK}73JNnCBQvc)o6&vSe5}JiY+T(NjBTZP``xpvt;xJ z7rRU4%bkR>;sb^;sIinJP2tN8@8ySKP8d$a8=>Et!;r0XXDuQT9XDU`f>VN+#bFoz zzWJXbM3-tn!TS^KiBGi6{xP%_OwBAmEwL724$kKGl0F`8rskhE*?$LcedPs_&j9{c zjRxvB0zEi94c!@dC=k102uF*Bg8q|qHmdmx1`N55OfSqG=4R3Gsq+O+oI*{-_DnZAqGF+qyyH@LK)zFLQCk6=ce*Lq^UPD=BQfTr;c zxV7^W$=qBN_@qhobN8I4GBBU4=dek{8A1OEahs!YM(%ei)?d>i0yE6H^gpIYKr$OA z`;~Rn)5-9`IGL6oWyP9-l*FQIe z7+W7YQ3@TrngpA2a>_uvliS!zSGT(A#=Z@@f7R|z#PTy`6X3hV(xU-!u-Ka--9kfx z8a{Ll0pUD;+p^#EtJXTkqHyp^%>h|4dR+@nMIJPK#dzNB19iRv(^nM5Ic7L&($Qbl zWxeNjIpBj$8_7?7+S_;iJgdvr|NQui@srcsc3n?{YP`IN5d97w*W@T)nihfx`^)`v z8TANTecK$&mG{C{?a|K!7+<2dh30qymLLR+W77WOzdPEHX_WkG@6i+XI{VBcRg+!P z%?4R-kp|HFEpVo>IuwvsMmXzXgD)yuZ#V}KaN1$oX}ZO0+r?*(3>6c zNHA8#g282x97GIMDu^O!qCcq;?IIg?Rcq0A-n$2XBG^LU(I7zz_(B|x<4lK{kL3zW z?<+{uV&MktZ$NVy8*S_InQ)+V`(0>?dNgrtd1E<{*n74Uv}SA<1$ z(;^@alRqczhEg$rR5ge};D3MrQ zE7Dq5(_3)_26WX;s~n*~fY72wwU1qmvz9uElS=W1LZn~TXR>(JpB`T zo6XKeAV!CmGC-~Y{U^DYmz0_Zn8Z$qy?QSPPeaYF6jpQA_L58L0iCYodLQQ4M^>oj z!T%mtkbwmm*ZGO3#pk#J!+#7P^&1-#PEmnZ%o#QT*TzRN6hb(G_r{OXvDRs;c|nY7 zXv7XFxxDU7n{AT{JzqZ_;d&Ku;09bcgL$Yt4CF~dPWjmQN^o{=)6Ag|07(-IeBvIX z)v&<)kp0LesV)YKsC36wS!{!pwNnGVXlF;MP{eU-9HU)NRo(9)&O#WT-tscQz35%o zHVgMn?4q02t+6asETu)3$~lt7=tQYDT-cN^h!-v$$NJsdew?FSh`Yhu{*^c*KwOTZ zG7Jc!$aa^IC_x!tU~sg4^7?gUO%;21aRb6nao(g<%TCk0MAmFnPXlHi3m*x4Cg|q9oNL|}z(qTu~ZR?$+ z%^^Oet#31IJLfqEOa!vYtk>jZD!i_~W{i}Fx7x<=;x^45c0V)7M5pX!-JWply+G5w zRm}>IzXWvE!$`P#Gi`vy=LQIO8qS-)=TFy82>Tn5W?F2`go`HGLaJEjQ2s|>^=;rcHr3+9<&KN=@WCtX~ALp3)tm02^d#s~&)BcFwUsz@S8G`eY za%Gh8JjkMUI9X4l+Y~3lL&@DaftzdbR{;MTD+s1Ja%j&V)5ht>$%wqT3r^6=yGoB}kuEL?g)%OMN787~4x@DRuL3_fCBJ-q9ScHQ ze;dpCHO9h<4W&nR8C!y7OW)sVYY*xCI3kc_MFLv~!HIExhA0hcvVvLS*))BV2C;9Z z1XtGo&O_l%kP96?kInB-F=P6V9UB#ATPF{P&w&14(fmJ-PLt+;srGlTmt8s9=7Ky} zcse>2i`gqPyMVk9(sHw~E3?=Yqn7=x_N6mJ)pztbybo~nK(>GD_Vp%O)^gOnfVP#) z?6-rpoXng{Vc~CJF6d-298?XpEWDAl28}MZD6$64E`$A=2unC~ErjQg-Z*IN4f=r5 zdTn*UQ*_~Cs8>V9L`hY<1#XQ`vqwvjt5}!40`yw^G|SD5yT=yYrm>fx|3i|UpZ^%k z-tR`Ok~6tY?Y+N6JDI>TIzw!)4cI~pMO@Vln z->wXnll<8tz$_Ri4p<_{K=XyJS9#r&w4xL?6Rm zrZi#J=rs$7bw(SiUcD*_r#68$4n(ikt=Q^BxEDjSNPu0zXPBPxwRnB@=&XwkRr@Dn zXR7!^V3y^;T{*p9kaqk7&EG3+Gg)H9A`V3=AYifr(r4MK2r-#ThAp|gEn$n;rZ1_` znUCWJ8>hgtW;Y0(M>hEYUCEQ%9$Y?=fO%^2n;2Q}4mX9dS=l3|EL#yz^krcr=^jg* z_?7m^)zZi|!Zl z>27Z6Wbr9qG~7&`+^wA59RHoAo@?v7uSsCMYb6y9sp2ic(K;bG_F^1X6otv3nXInM zg=B{fQ82b>G;=rO>CRQ{6$J->^f7Ohv$H_ZhT}3Z3tSBtZ#lEz0?B#P52V~(t)6>* zs#2#ea$laNE{H!~AK8QKTd}3sp+S)*Dxz$$d;l&K%Eid9fbeUsIn&P2)As?ypIm3Z zh*eqefYGc!1!}eoq0r%}a50pzB`?|lhinh`mWGu+!175yzpu1|Gc5KPj2o4(Q#v0P zPx-No(R%UvF?wHBZ9-0=m>SnBhHt%s?c0m9D{Hpx;+YJH&fJ@-SO`-5BQ{R_3X&fN zv1RrS=;0oGGWCs4aNq&iUSDksL^|RmLt_?FqzH|e*J$B4Xl>_}HhaHD7l#syza^UD z8fE1(&9V-YB%oje4`NNP%jI~7CAFqAC8Dg(I-RDD`>%SqBkQ%l&-ek?)@8$8U zHbWF%a$N7mqRQoY*3>XFTaJgXKbyuPtcL|wc8~>#v%Dlys3<^YIKNUe5>G29SpwYV zaiu3hgzLAXN2*=rhQx;G!8M70KCGSpcU_~|Zo#4*!d!%c5SMt7a;t|agfUseit$OEc&&;u$=g17(JJ}3ia zOj^qIB^~*^e;(2l%~Hl zVot5%(2}CpJt3+}o?N48QfUO36~{87JD)O5R+~XvzeAUH&5#078_Y^`SWd0+NJG4>?~m zXeMiUX~~?ER`&^hLybJop60FaD}7#FDpMy~Zm5Ft39f{1E{$z_KN}u-P6CPNdsur% z0?D_8nU=m296=C=*c_?6uR)%3Q#%p%H5tkHSM-&gKT6Kb+xv9RT(b2iQ5RlB~q@?`l!mv7AlPg+=s~Z@rnE924G@`x)yiZ#dh09z!837n~f=3!9%?&)iv`w9ABi z5fx=KaSUs|{>b^js~$x`#p8ynn_*^s!dIh;$7M)-ggWY@fjKA|C zGenD&C-N(TPo84~7GqAx{3N9hjEBPGjk7#P;F(JgMwqkE`u;d@4ev?`Q8@+sr)Fod zSCk3uh=dU%<46L#jaTWsHQUPa&Y`t#tT3GhPnC(RG2RO*@bpM?M!0xul`re)iMt4v z#tH(T6~8FSECgjR))A)SPr7{Y4W~mT)AAgB*wVFB?fIn1o4!x*5KR~7E)~@~{!6@ZkN%5U<RB4f*d{y-HiaC#!m;@TrDcHC zY0NKL(msOY7qas3e=z4x0OF=EhNi9w9iU#gDzNn6+JYHZh|?9{L}+nRSYMiW8%mQ5 zd%~+0gF`*WVSbE_H1x3Vsm}a?2@y#c0B0tJ)kkH{_dMn&lg(A!s;U-o+!gr7H6hH| zWsR&?8jR%M79&?|R3^X);4ber6{tlHP~6d~!5U?_YA)kAi`DKUhP^hcDm`NO$JMrY z;l}ae!u7c9$$}O0g5M()+H{#hsVjR zGII0wVhWY+8H;*vkY_rFG=#WK>0L{mr@KGc{}5a#__(+7Z%=OL9%%jnzd&~aN9I@+ zHz=)>FoKr%=mvM9Pc*wg{!gsyiq{LLKCzZZ_$LMK|5J9AcJ^@o4}p8G_1}D3*>NC8`^93E;d840NH)YS zUtM4$uY<;XMkRRbKJ}2p>pnFR@cz6_9(0-!M-GhQQ7~Y2T^wlQQOn>+;z}}&oaC+9 zoo4qardq-!i!qXAxjQ7(7O+`}7OS~2OO*oN z=Uxh;aXNpdhy&55@NGK#a&T(?$qyETbnq<>E0(sheez;@gO0|_5_YcX+AXPt48M$$ zI=f8;tE`>hMVKDfu{pP&(P8TMas1@}RP5Ez`PUC!Q7)3^*!Ahc)b8JWW``|!-Ri}* zPR5o~JlP0evBJ8IDC zn`Q24V$D=BT5wLiRvw~i0~*|U_hzu%mr-j2W@Oc^2&hXl8e1Slh~ ze~F?Owr6vI-u{O~iR=dN`gmf&U*a~iCAb|ZpG+2uErZ9*>d*;qGVfoasI$QroC3B; z17sD$Xy=SpxA1S@2j=1zwy}dXC&iiyxI8lit88$md&U$sCzN>iAsHCir)|MM_?U5K&w_&iKCpWlf8Uo#>9kNpZ7 zZvUs6rM&aJ2+F%x%7Wub^R}iO@eH?b<3@;|s3rcR zCO|=WBkmz$;5-xY<)RCj$?PL^0FI-LwE^Us!|M7uX~iCjdQ6iB)z8fy-o;*IUHq9y z*-E`E2J;b^xT}*{>fYb2Shxk1kE7{BMP{F!7MJ|{)r`cK5kE^jp2gvwICR;|VRuFT zI6T2uYyNu8*=8MG?ak;X@q}KD6_;Ub8jSnlw>|UUaiPT+yYjYAu|Ns0xVj-k^*rH4 z0kjxv&XsPYxY9UmX{T#2fYU=5K)mUIUzn)L`ZW$0nmc2pSXZL`=VkZ5(#6ojdcyS7 zU^4Ohs?w)lS#8?!V_7|Vmdgr&WYUgZ@5XAbA7zMCA7*X!%*Hb45F=~?-Djv-G^F+> zqXTSO09fGa#}OUSV6VxgxP`j8I?yr#5O>S^bk13AWJj&Rhth==_g($bp86CpjmAgX z-sjL`IZNq9KnO~qko##`fITznR(#z0dE4FhC%46kIjfT5g4Qm!G>U>?{%#7#h{&Vx{2-YU058tLl>lIgrKdP9?`yg^Sb|KW;x&2(F5qVr z|B`WJ{3g<_VelNL0AK9QY8u8P2fH=T^2ned6hUCzi(?#%8y#jg=S|2xl6BQ?Fl&Rs zZT{{WyN%_`O+;RAfP^tJt9;?G1WMC|Y)6+YSD+O6@`khpx?7rK8j2l4I&Le@)OeXo3~( z52%aYOa^3T?T%u<8L3wQZQ4DOt3S*14`FU(-vV&v4XG_gy6(h255WcfN<}k$w>L>@ zS~RKQy+Ao#4Xn6q)Gzz)ldF=u)paNOnj#z7!E6Xd$AbNS^a~OXu?rYN$`Gba#0$p- z>XFaV=b5bXFTy@;D;XQg&f4=zBG9jX*5eYBSCr4_w@Hs3`VHQ;(v(4+bZk=l&$ii zfyHpg90tdHPV%yI>o2>1=WI9GW1I?k)0(7zHf$i=HQNBRZ~tq;enQjG)vD;1FF9MEO6Q+~^}qG{c^90C#v&$5 zz{SlCRZ2Qa+7}QW3RnY<7bgRn7`SM%2&{=qA8BS{k_FY2LQv~M^Xgz1Q+2pri&hN^bCr^^M`Lgf!xk*59{tzf`{ww7lN1F z(%rB3hF@63`8N<#1|J!cn5iswRwP<@Boy2lYIznIsbXk7oaqRW3O{$4z;A3}NqVR% zM1UId#J;1%+O}t001a3}k=Q+1#}UN`^V>7dfdY^~%7ddFSngO1={eI9eF93khAlf* zQEc}O7OjbKjN8EwhQ7hscAX<2T!8|1%(@HgqEMJf8v6G^CRNd%R1Y1oh+^FWIRZUQEx$sIKf>$(R?L_)jcm1u@KwFT8DO$jkU!xdZ~{)%>;vU5_kwHPfsV z3j`CY2MB&v=|R~w3I!8>o>VLXiO-<~gvIATIl=GgT7j>GQHlyu_KspV*ujT9QD}KA zc}$ZJ$R^6&N3)*4^e!9nE{8bXsKvJE~j$FZ4r$ujxhx%*!mE^$XC&)#Y) zn-)f%G$7L3zlqR(wUzEHttPscX#-AhuoFr$zch!tP!k&tT)^FVt0@}(7lelJM)nnaa5A$el5M6O0YUp}g~ z_`oWY4FY*bo^O6*j*`9MQGHG^U3bLMRwdPeZ*OLwBsmrRm~CnDXHuvq@4%##8NZHu z8B;{ticO|;#CAKuw$<*Q4BaVdMxh7q>LgV(nZO9Ek91Y>n)!y?4}xFg0dzc~>FA!m zk=dAIvJ30^nXqPVB|peY=XOD5c3>OyMWvE=c^Owc2I-VeTrk;b^LrlL?xVQ6pMNSI zU%B&%&z?+`wiqSfSJkc8m?|Fk^~ktPL)e@3(2VDwGZ?DpT_O$k8pRPjh*Z87S zvrAtM)96fidWuXJv_W%zYukpBgs9}QRrTx+N^`dbt!{%eQym1nULOPVI@GgD5{%y(Xz9B`=?&d8k6RwyGnCaU0|Mm~fsPQhZ|FC6s+KGwr{| zy`T%VIHA`9V*-bQb?X@`5VIXuE#gy+VL@I?vtaWcqt?v>)VVLF~CJ?ewf{kb3Y^idhbn#}Ae_8em&ultTp;v>DqE1e~2mLtEL zyi^QSL~`$lM_;$Nrf4G2(myn#Q(@|_iEHrSm?X~rU!0v)OkGi%Kualpal3eNclYA% z4#gcV?#12Rp}1RdcXzjoyF+oeY35I6p5|qeos;bI_~j&fe{$BsU2loc05-mvT$iD)awwA7m~1n8T)Ax0F4TWR=t%>O9cRJ^LpvA~CXxpR}Jh+$4SCWF$u&SH?wOQw<@Ml?6(BJC;O5~H@Bj?YAS#4l)u zV1%X~gE3W!%mX2e${|?k{`LM}-zmpymHKc^8;b)+N+}(TnM^!tX4l$=@NVWCT@qg* z$tt7_=L1`4vMy$=hRLhq8N^L!$x9!abgDKoem~u@xq&t2({XO!Abd?A0?W%zP$&DB z47S9z-%7vA%oS>moFwx0p@!nx$Y8FJrI56u6vaNJ&PVI~YUA<#_Di^np4c}i%DbX_ zmWbF}hv31MZ2r~WaThK&Yzv#A>_JRBK(36$iK&;1DXs1Y)65FiIc$Z$mSI{)NOTsB z=84@sH4p15MjZf2E}Q~-721gn|MX&oB@oAZ7;Cs{h)NoO)VB(};o9eD{zZzapGyHO zy=8wD?)p){u5L_3e^%l5Fyv#TZ0jCLv;lY2<2&f951j-}FD_|wF%qZfQ4>8DBDaSD z4?P>yf?Jgdh_ z$``ZV2UvC0b>1IBI+;rb(^SaNmP>&bSj)&Vt#GRGL*Fzz9cVrJk9A=JF7CPVQ=l?V zy)LRY#fcD?N0pAJk25e?@-mFAp_|m#{3(sfPt6O5nQs{6S~mjQY69^liKn=IWEB{` z8kVaYVK)p78A#qsn;G9F^zL|9#B5R|XjFT-!o;hoRLqGNU2z(k^q0@<8j#Yg8Zm*& z52hM_F$4P|fasI#GMfKrv;vQIKbexOUCIJWC;aRprOK$4z{5axj%O*^&aiod-QM!L zw0XacS}s$%-%}EN7z2k3Y62tYlh=?u@$f54lwE zU;i}kR}~G_fLQRSU(94=r!I+M~Dns#ePv!D)3M)pW3Yzhh-#^wA6qM zE4=htgF#`icv~yWH^!HR{B z(7NTb8L!Ow?`?d8Y_^eTM{wdpQXW6?y@eTL=ZawJ$_fyfOJ$}&ixxGcbDOBtT2W9^ z+sgD|&YWfSo9p|9F6$;Y`Ss!=yJ5|T(J^NZtXcJ9ww_nL53HSXt{QV53+m>gm5KQ6 z4eSy7vrNe*K%8CVitsL)sPp$@)8KG=+njze!8!#3+*?UYJ_HFxXmUc-BjeZ6-+@;C z45$Y}OW)P8n#B0P5gZI_ZA1q%gZi-u>m@Cc9JIOz@!vCKySa-cu49zl}mQKmpi7i0YqDQ{DM9M4zVp0Nqj}xver>e z>&_P>bmbcRjdt`;-)hwF;lmzs2ZX=*P0&DbsASIW8YB!`i75vwH}XI=U|P?g1k5v^$hEl+ zk&=RbERC4{+Dm^YJIr!$JZl&fuSp{(EuuHA@%6bPEVL{CyLAmte<(=|;eF9e!AZ?I z&qKpXKhX!#BI-%5w?%uaFn+a6s)C%s9RzP*M?6*q>&ch1rQ)p_LXbl4*HANdm+ndt z!~wQbZ02b>LvG!cLwJ_Wl9GBnECb)+16q&huYSZAf4NzzccISmNm6@ z4Prltc?f7?0#bQlF3)Qqxl(X8Tyss|hpO|Cft3nlYtGQ>c&`;f-lsJ1Dt&EHOiiYz z8hJVTo#fB(TDR<$w+6l~bp?%$tm>(Ex&2$Ks(T0$MvhxEtR2#8Zyv>Sycv3COx@ky zqKij!b?~}LiIh^>0#veAM1NvE%+sTp@wS_$mv^hi6!lUY@<6)m8BI*#>x3go< zTB{jt_JLI*S(B`TW9AjKQtWAFS3a?^sj`EE;^k;!;`sB~Qfz5N+zBB=G~^$62FLw8 zKhOOAO@Dy-=3C5rc@OKv5Q%hO(Err7rU>APAUN)XIyg#HON-fDZ}C0 zb%p2=rqCV2tXSc|nK&yVj{qkwfp9rc4!MX7MECmPD=0(l;VPSx5RVl1Hy2H6tTUS4 z%&r~p!WueJr6RQV#tddTpL=h(L{4?-&M(FW>9(o4*)>7%Cl>5C(pk}xErP=Sj(EwD zZV2yfdnv8EB*&=vrC=maj6$_HD?3lYx@las)mzl}La0Vz@`+Gvmn9C)(9ywhnFt_c zZMvgK9)~Om?@Lly$g^Fq4F_nwE$}sLhj#9SoB~OXdxs3Cvi4 z$$q?(_Q3&F$yL4dDH{|@mf9GArk4&A=$qBIogrhdEPD6;luUaf7Os3OdNXgDMOwzJ zlS0RtLw7J>3_6NXnA~T<*5WTLCrzgziolO15t`PRci9&k=N$#JK^geSaU3ElAZC{N{m#Q4UR$5ux6*U}NgqAfsU`(l}_TGL9Ua%PbUG=H2 z1BqyM+NK5-9ge}5d9n$$W&GB=cg6cin-8YJTYuadgU~mBPNF{uLJmZqKg3UatD#oC zvW%}{mcA?;05h#HjTwm63(jD8ve%~^N}MfbN;P{`-GG~2nwBO-y`_q_mRB(_Wh2xGJC5vIH(7=;y;OEeB&1Y}oeyMomlfO>=4ayZ0q7ff50GA>Z-=Zl)q zR^bIlo;FbTEd*ftg{;SQOHGQT z6{q}G)0UYyuGy3wRV-AIFASDOuNw5w(a}hw)8hCpvvaJ8_LA`-=R?u_i13T9wIoK@ ziba^74LR%sLrkRT^l=(Uel+Qa(@q%;zS}<2Fz2_(Hi=|tKCM$pEjhhmgYJH2%$W3t z=hE6BamuaPD&QZXn*C@@XqP9?p+T<;scgDRXho~)`a*6LQXubh>Qqry7Ci|#u$)=o z4Z$PWR8NG;kY+GId6HJ+gn&8tD1BVt^&%P=Ve7K7yh!B|$+Aq0_b7c(7)$s}Qa5`ug-Dq}RzUy#_Bb9W zn~`LrY1=(2HBzhJ)M!iQ+uBa4R?Y>rVRhdNn)|iJkrXGea5mukxqgXS6*Cl9soAlx z{H?#m-O|Ic)M-(A%y&FTfpiT%<6S3lD5z=2P4o2(hGX&leh`VFn;)a&+4sxT39yBq zZ4z_sgJdZlY)3lDuGcOzjyuY%5$ofXt1*b3Iu8%`5>2CYb%s>hSd%WF>9tFV6Ed46 zFhSPGTui%XFqr?n>Lr&39gHtCn(Dd6!RFE5#+TI#CcHhju$~>ILJ022>U5$#@HnoH z((7|c@jt9Af zG30J7-ai2m%?az$Wj2=5usn3thb~WtTHk98Z4~I)a9-0Ff@`s`Ptkb0?N=v(E5{Tu zjWzPQ3QhaVIH?%(ghGmZV92zN33!0K9LhsI&e~RI>GW=$Bdas)*GS&+L%n^+M8AOg z1dj1sTLG;(u*R;SUcQab^02}3IMr4SMw@Sg2XZ*vBf9EvN*823-R505EM2E3jC~^0 zaH?yMe`)x*f%gW#)p<#A>X@+Z($#e0Bp6@d@m-t|6+E zaq%c7?jB{}1hbzL>-vnxZJB+tfIZH=0(C`0iE1Ko@K>5Q!)(3=7#wIp^M+2`CM<%Dzp17Rv@HXBG19X>jVI3_VZGblUA2zpEwqV?>H!>)J3ai3o#ukFk{6%o*1e<;MXWF{%ZU1t3fsBowP5J+nW2qd*TdxR4+ zlC%Fxde81n0_Igf?!-K}COfFC{bkist!n@5TQN-}ZBR9gFM$HHySy7dbd~FeO)$eHI2)<`M8*(AjdvltFJymn_$tGY`%V9>*)F zW71&DcuV5*=Y@$ZIDar=pHrKcZNI>OL}H6maNWNvx_WfkxgmeYRd>^Hgh3#AWWzDG7hzvd zLv=CD1~4~NR{X4h`#m6mXY;OQqyOGSMHk}Y}^|Gfz`Oj#AKhIIOMTV zz;lgP;WVVCpdLNh03o|OT#ngQt5F-o+tb!d zFNd%vT&Gf_1g5ex^cC*JfBDSz9~kNY@F07ze2^L9rPC#HbF1+$x48p~9rHhTF$gm4 zhu&Pay^X{Xjr#&`a&8jYc#1pCQqgIE#{3h6%=_Jzm6H02c~i%CBH-EWx`NWt&$vFX z7xo6%Z-I#VE_n0icUm+m)7-yyu48cD=Hg!2ZAT*6@~qLWXV{<- zPlS7aX&D4R|MlBFaX4|L%d#T?Z>gUYeB49xk80@51-UV9g-bExD{yme&9JZ$ylOb% zXjA+GXJqo5SZHw(T8HEvSOhXzEI6uUze>;9diDAKTmzpQ=;GyDiy+znCt)9E4bOEl zTJjF^0;>>HkASPN57kM5tD7pA&}J$~X$>F?Qg&o!i=@2hrJ>_hO%c43XwC*Nn}9qy zQOaO`Nq!et0*cXkzz6Clcm`<@teYu2;9-R7hodOYlS)Ea-gyziA%>UZxV@B$&nJ>8 zeL+-w0*H|^uFK5BH1NyAv=R$>3w|@sS;_u&^Y4{)D4sT)r`B>Y&Z;vaK}IWN?!b(h zRXuRxM8AtNko^6eEYVKB&CJ>f@B!^RKNB+(GuNmrl377uYH=G@d)o*F?HhT?_T>5I zEy9~YNJmC2?J#kvP?!2A8E2KGYJCRF8naE^(n1ET@;*P>GTYn%}fJBR|&x{mJUvyWRer?XT7Sq!2{r-Jc(;WOFlkYLO6}*nvnr%|{t5 zcZT6lVfQ`XOt!$!rD}F2gYA6U%p)()WCsUr5K>8TkqPGC*dD$xH#7)1D`@47WrLS)%BkVP`WHa;^Ha z!{izfqKwAT5C$}=F<)tfeueZDUgiPV)Hek$Dd?NUWwv}w<~DpHYy*mm+w3O|dVAFW zAU9COfkwFxdUtaRNCFe*_C1NVNrOf3Ki~$Ht;88A1y<5}bAvXlfdH8%!S8{2wLZmi z1x;!AQal-Vrh$Pi>8f{GK>P&ZDcHc#GSegGwAn}1QLa2a(+f>L@F>(nez_z5M5Xnv8Yw6Ubz<&A^m`4dfXLm|1MCP_n-X(uxQw=VtKLD57eU z^NU*CknZK zB$b67SXZ%+>DAr8B5_Fdsn#V?83%Ho7*k6rT|OuCcRz^WAqLy@s~uUN!v@!iP#rCC z$oKDcJ)*E{-`zMwa{k;~lP1Ae6of^P5;CXoxg0GN&pR5XwAhn&QgD@#WI8lq5?sXZ zSu!w&6aS^!x?Tx7%xcOY3Q5Z`fxLC`eo6@eyehB@QYi;VT-w-4tW6on)=kT4TB2%} zajpD0fuRy)w0ur-SePkp$p40QSEuVUCw*V$jW25Ib`Mc`#le1`aNmrSQ=SE^w`_Ni zSkPD^ z72-l>dxjKrG_ol`6SXT-9{e|8uL4HK`y;NowutrQ2a(fBNDc_Q21>hh?TNc)C)!8`4( zsU5b14&CCjqNA=tZFGq2DoRQYzr`z9wX-ld2FfzJSiBweRmy$VCs(68X-iOe360by zKi#lNjTfFc73iPVH=~)^JAVo?n_Y-iRwy8%qFxq>lqJ^hoT;TPa8a-E_5oq!1;S1m zY`#Ccvcs*d^sPF3E4B`EQkE7FY}SvjLh*oXv2D~V;4}GCo2GdRc+4}2J{YR2{`@H| zD`{SsPd||GxRL}L`NF2-4oj{4y|rOc>*^XL5}wS;YRkkpG8lbX9c=8p=yIERNx5u~ z*i^7Qb;$`243r9FpvJR!n!Lvv*DJP}ee1z;k;V%jjx&pyWUMF6%0uda_nZHM?+!mj3AOOR=Lv)ER0D*Pd{wS*^AF z{Iy{$;;+}KKM!u<&4Fo!dR28rDRspk&8Qs%qQ19Q82AQHdH9(%F1gyEeZ7a=vm)wz zwz5&4PtDIvyJ&qI=QZP(@;|BZAAU2)u;}Tm%uBYI7a!>j2QLr}>v#*T zFrN`#H0>$H5W?CVUM^mHRc3O|=2Lx1`WNIVC$9#tZAn`bOfW>la}ntPbRAuLv7@YC zncAnUvgc2yUC-&vic$g@^1pTXuH=Lkv5Uv8Lm2p5e5&EU4=GgaNXB>0Tmlj^py6&3BH|8z3@LYa)!rq&= zj~43Z5t-R2m|C^I8_k4q*jXfAsIw)L;*U$m+TL)|KM)JVgYk5%c%>T4?YBFiN-~+l z#mQdq9ZV~*X>qSpMGBw|y=@L&PU~K7iZCmXUW!)qdW}CPF9KmO^ix}$M}3ciA0hD) zFm5?sThxww9Pjd3P}xksW-U!|c`sMxA09rE_?uUzSKM9c>40Ehm z5jDI8&**xzX%M$Rs+_)qrgy4f$HLZv=$etKn8M1RW-u}t6eq14YH(lBF|vna(-{e`7AAuJ9^7umc;u>OKsW* z&bbIB#>|hBnsYY4dm3eLC(q`(q#{O+gz|5oP|PgB?_Um;f4BZN*)>6yI~;iK6Zn-a z)#O#cP_-d!m&vs~g$JwXWDs41&M4;aM|u1w!b_Mf0D3Ve)A5gL-D-nS;e9^5ggQ#pja~Ya4h6=+lR)%ijmHs95xcOz5-=6A zZKZdlVsKIfY>J68%yGYk&{5hvYfr!iHOWItjlqi3;M88z&*b2dz@fbmQ_reNltc=) z6#~QJyo}!9_R0<~{t)bYwS!KZisV89HviW*+hm=zv*gLOC zrBsS(ZOuI~38|n+h?j&Es{R<+=&E@Sz8sh?Mq;H_vGBJING77eAbn|+Fc>p1&3H6c zxv8_dPpE6VkF<)dD%TR$;m>S^Hq2R#XMRuITYv?`QB))$_OOjvBOjZpxmS6G+a@7mvc!2d~gUg+vEv=iL#7(f3^|$fafy zgmBCh;kx(bi#(oC+14%ixd#k&`X>D5rqp+j3?4jvLvtrDG0q`85Cq~uc!V20*Y0e9kYEsRHjWwn1G+2JmsiX6 zEZXZSHC1%?rkd4GT;`S#-AD)-VG-At&xp5 z7nuCu<8_FY;4nR;P#sLZK1-68D^33zGhwWW0AfWrQUf@Ac$qxd@~gir!DsgM^bf2L zPG4MH2^=G+qy98M+0&=|>ozChlNRKr&Csku2BIYH0xA0ZrK%tkF~dfsfsigtaOy(D z3$(KE6C5Df2-PhX7gspPgbLPEiJfg~{&uu$HttqPmKDTvY%I!UV$p!~dBj#kvB7pj zdqZqM`1Qzn^BystyuCqOzt5NHY>xZf%oPC^bfn%iZdC#}Q!2{? zvy0%l_Se{s^ylp8GLh8QCdPSHi%5o)Q+(;&7_x2d$uh~yT0irFcS4r1*jvD ze3=Pi@@9g~AQ(AX9XYDwrQ3JX!d{E6Y9|i7F!aQ{={DO?xAu`)r!Yh>cNjBDK&?Zfw;Akmoc6L=gwYM;e6avCuFd+$-4|<^oZS1hg4Y zfHvm_{#3QH3F5~?Oyi22)2^yZ=VP&TTWc>pY9b!No=SEGy!WgDy%k0!eHp(6h-%xu zz_rc@>19{__BdyLaIdu6aDRb$2wI%tt02(e#E&7+a&-Heoyzs24HU=lAn`ysSWCI0 zf>nrvHT)~kxi!!zRqlHJJe};E1#QJeOxcy+8gG{-G74ns>Zz%jD7Ty|`!n)~&tWe0 zS}}Ddzq!`@kqtE$P>wfY?#}!nz%&|J-Pe5jCB?-Hb*E!MuW6ghBQa|vQ^)gW=<5yq z*JlJzb}^&21hm_X=z-o-w?}Ef&NYu`e}GD&=zb976n|&fdgeKO(5;FDo?TtDP3SfO z->dbQ&HC0f2bay9`SoqPX25_Iu4_aWcJaRfyHoD0s2eW6^xhe1`9BQ8RT~JbQo-!4 zPQxD>1M+y-^OF1k;~i8k0O8=yJu??RVY35XqzKqE49}2za`#vbp0gHtoySw~ll2t+ z0pgVjQ^=!EL+F|J>vNbl2-OuaK}>E56N_r!+@UAl=7EDNz!s>>Byk>0`pvmNeq^mc z_C^NBxp$rTw#~o?n+}X1;RKEpz^ZKYOLE}rB=^5Nnz84P?E>e_zIvc~N2lU%D4V;< z5WK>?mYDXi8RQrninouF=V>VvJ~!%FesF$$R#5)_NA$ZL5z0tOlT$4?;omjN8N**p z(rI_(nvh5Rl6Qm+#DciEY~m*%13$ZnFc6EfJKXu>Z9SkR*4t3%r6FrX>}yaN&ntSinoVH%;NuT9Y&zOxLJvm#dPHc?eSUjcY&wl1*NCiyg^{}x zbA#nCULjMnM{#hkGo#O6BX(rCzCMWH%+)3_YmRcUF+t#IK|iIByY{Q+mvrYO#`?ml zI*Jq0#v7v28j>E-@Puc4a|uO|!Ik(igdJDm6yDZ?JanuWpYCy7q8T+W;D|M>p@~0D zPp23ojjf8E->r&%HcY&aT=z4nsu#Eb@D~D=2Hv)E965P}tmHIA=R>{oj6>4blNF}) z2h_ebR1BUMN>f5+2d0J*?LUo`A!F6gg@WYBUG34rcT0K- zyZSUf7%>~04hE#y)7||HBeY>-w{zc2GDjP1HpR*?LFP(v;u1dsBx5Z&{Jwt$<&yp# z5cGr@t4+5Losn=;q^da*k5@4U?ks)=#-t03_$?R0q>HY7NBH4& zxW$wZTkH?ESW&iEVKy1m$yNsopKP9tD2~a-7f|D(xmF6gPry7JC$BAPxovB~Ufp@j z_^t;WL8x02A~UZo7YBPlYy+2L6{d}vvdUv$_?iJ$)&?Xc3G&kP78Ipe<0{_bDWW?| zF#@hqMSHGgXpy9Va-k@a8cB-G%prX+sTSsh>3D7ceKR*3K7}JPQPEX(!*#U@@3Tdu z2+(h8Qq*f0EN}x2Pjls#A8q$1*bbXb!eIp%8)ezl@r{1nyIliSskzPTnXGVixf6BZsfmT|62474~G?vMRjln?i8JC}P8N&ai! z%Ed*W7?S7jgZg4XZHz%-gp(Snv)XnA;mrNP6b=J}&EqhS;ngVoamuUkFrgH9ZpI;K zV-lfhq}sG|lC`ABf^hQhi734y1pX?qTIo-#q zLT6NDwpPUO&tHO-C9&sp^#bct7(7!UiM6N`S~^ovri=21!{H;7*H_)sr@)`6(W_dL zI3wTX|4TULjk=gr;a4Q52!PHQKW4Hh1M9%iS;Hsl=W2*iH^IeUOnX54oX`HUwd8KQ zEs1t_@uWyQzT8LLQoNRO&-H1Dz@A6W&ZR#bkx=e$2&-E^r;JPN-`Tcp9j=dy5IdFD zdTCw4R0&GI(nfQ;P*A|(Z2LB^HD>PRCPb#&IS~%4yvvA~0cSwyMv&Dlt!ic_GsZ^n z=DN)>+!n+|B?8Zit;wlgOZGdit=UFR=sPr_savnpxvhKf1_DvdR-Z4}JF50IUDPEn zo1ZX!0}1=~xl|kNPw3v$S06U%!%4+q?D8ph3<7oEf5 zLF;FD877ete>ytKhn~mOOMj>G>*iv-DVraEawK*G1IJFF#;%F2Em{Sd=h9DJlgu!b zm(4EyZ>7lSs5$t48P-bt^+(88U?kgd|AI>ZZ;vXSGi+-8CF>)XZJt!gqHWtK;DX^_ z_;HV?%v{#?#2Xk+0%Vra&Ye)$WA9oN%i+~51d?~-d_Zbd?lFQVO{HEcNiX!-C;$ZhMAFkv%R4i>lk-jnur9p0Rn?P z(QU;9E51nhlNvWX7^_6RfG&96QAAApbTn}STtn7s2_aV@>Ysxednzo}0o6h!(fD!i zDWz@OPF+}ozm45Kb>Qf^WiM&-lCP*&3yeJi*;6Kj^VoG-06I*0x)vgtHX;>udGz%| zzgcD;`pHIea}x@kTFLv)y?bh0ixajh9)%P~pA~1&#vlMqWF7=0&iI0xNh0_R?84s| zNEBWq*tvLq%Degygm3FT)oRll^L`&D6?2x)Ri&k1ULU$%Ay&0%*H(HRrMFo9QxwO3Nu>%PIqBKHeWoFx2u~U{2nN=+4tKeK2!6)nFdl6WYiR zTO@H?jBDdv;w? z$-{y*sU?X)M;(gJs=BHtiU~HXQ+bfG>Zzncy zc8m5=pPW)3IU-XQ#4LQNqvc);AN~Yy$ce*lzrnXu#eO?s%mN>gV<&wy-)ja_g9dB2+uLB6f?8?ZH2xZ8Em+UwCCp=FaOG`iK|grlIWK`)^O;-hE22 z*$I2uEVa`}8SKW|+g{}6{z%#ZlhDUYe!_E91#7NxxlI^C{1)HhGDX#bg1n~EmyrOb z-mupZ5kl2|S>rG5b(={GPRWbpOWvUB9&9&Iz&@8ttJ{gqlNOAr?L%kE{zN@ElM0;| z7}SH#GGYvrR~nE1nKc_gL1#5bQQCp z?8T*Qz?ieFKM=!Mk!l&yZMXDj)*|nj)1)#kq}|ANo~wK!M@;7qANb}0x|$Aqiwt{` zu}IZxxem3M%c6+=L#)QKQ2108TpmtH#!sv-z_#lRR z5P0q)j_ld35WX0Y{i4KG5q57`yvI#>VZfOL#@;IG*S=p~U+P@A8S2(SnQqwIiS*h& z(cfIT-L~%tw6zd15^ByMBF_zqxL;r4b3<>W)UNd=Q!ch$lTyXR?j~+g$|_xT3vu{j zi(fw)(0qPDoDHps^WA3>FtySmT1X$g1*Hv6E6rmS#LXY=ru&s`?;P!`#?EScUtaoV`z%l^Po&_52rzP=;p^KQk{>z(i3KB?Ha z!i}k|z6{~KI-UGCa18$B$nH*zvk3@DBnJYp@hM;-#Dx1$zv^PeL(m5Q{TaL?xQ$I~ zwyZTVwV!$=L+_PI??s7m9?<J(zYd`=Ns2!9Ur-XC_i>aMA6tnlrZ@2Sxun~2+Sj4EE{}RQg$ao z?TGaZ9L;AaUc}Iu&1$b{i8LL_BH=(S4k2@( zYY~MsiFA=%aA4BLkEL<`DvNPOAoD%3lH;O~(Bu&4L;s1>#QQDuB`0yu8ky%5>BXCb z<5+e9M?wKBzAO8(Ce8<4Nad4(thE;+kPla3Yi77?-rYgTyD6TePnbT<(ox>wqXWr4?b$pbN&Xg2EqlQj>UZ%w9_-2+4>T zR^Cix)kwZPkV3xy;{!S=%&re~O`k^Dg=o4tH~{s}I{vNu3F6z} zU_`JB1px=bnhln1ofa5W%S5EENk`|;5*d7J@2*A{L~al4CV02eWp;9JpkSW=wG=!( zk*xFq1z=ryA;&nID5{sunjFk^=G-!Fvs@hoH%pS(kzg%jU|yPf{4C-Exu9T zwZq0Ul#kbZY+I3BAX2a#BIJNysYp+xVu&5j5N(Z^vOo)tW|+J)ajj)8vVFnP$v7Cj zGV!RJ=t6Od;tR~6G3ENOy&K`{KV5SuTFE|V;PBx!@vOUvVo2#m9IL^rf2@PM^D?rG zp*#`-E>2Q#?Bler5W7b!@N=tE9-SK|^4TK%&bPT(fnKZqoFjNuFbJc9@6Q8F2ne|b z)(PBg0pCiNzS$PBB;uSKs{A!nkP42;ZF($`(SNON^sDb9H@UPVc1};T`|{M_i$ZuJwvxJjg|gg_J<_*z)reN6T9$cFw8E& zL)jB8%r&QNm|LraSC4sE_bvG@sZW5rKWBt5jhZhECi1=CMiakYx zvE(adgRjpMLwBaqkOA-S(MzHG=>SA~i0;%+EEX;LAs*-H=&8@k=gS&ftnypkH-RAY zn$R5TeHL`iz(Q>@!e<^q2Gqw!eYGSQs@1 zU#bOE6dD+Nif+yAy)t4IQTGLUjC--SXP@hNeE%5i*SyEUXmvI-C6}YqO~MoBNW8w9 ze*|z35QjS7wJTaBy^HBC>_ssk>SS1Yn9nN~%LaGgLVL30_iy2|YXuwQtzgD(4#qGc zGGR5yj;lQxOmNJQr(ig-BwsijnNE$?Wf$Cwt^K0^9Ry7^PN*tXR-gf8V)j@=dO~TX z8^On&;)0|4Lt5`=#@VRalBuL2^XfVsTYn&5YvH?A>AS{GE}JgGhAU7 z+6$?GJXA`#PdFVSnFXP|2!e79Uz5>k$AlZWdVs>EgA^>Y&(xxg6iVQTah_1HBhL-} zH_>>Q|k+KIt^RF5=+-6EBP1briU)Q(tr%0|!vjTng)b0Ulq&Db_iq8qumxfuq1Vy64;adn;k?f-V1DH zFD{&>P1ZCLki)((MNo`t>^!$Xa$>ppSK3D)qOWwNyDVQ|<;HB`1F)Dv?2iZosUr>Y z=|ZS)?9(V@3}SwV+^`YE#IqU%|F&s2;SRgdp+f&!oO^c1QKEraEF|C?`ia>p03&|g zy^{`|toc{>&n{yjISrhPv@39~MR+u(Q??CxhLE2VfwpsatJ!O12Nng9tddN>al~0w z$r52iX>nA^B|RHL7wl6uyf`>EGT4(FM^7?c_8Tb@VK|{W0#s%YLzc!(we~&st4K;8 z3ODwmFJV;TtzpMcSg|@ZvoUf-n$*78I(V#cQ$_MvA=|Vv%1H{xhjs|sWKmX^*usPg z&q8eBtjBNv=~-6xV!6-`()N_SK=%wUeur8;a3xiZ;^%GwXt$A4=JigT*`? zkt5uct_jr>;}S{mYQQ{6LwhyIF`*&{;jZ8K(CVIjEo`F<*6J-2lR?ZbuA#{;d|J^f zQ>pG070etNB9u2+b@&L63aF2oho{QYi-TKAP;BT6lUB1D`n7nQ$1Z3hzm&}W721!K z9>|7{s1|17C|TDW-1EvR**8F@B0|@;>Y+*t{arj&r>65`nsUKFY()MFuM)!Gme3LFlKVV$(7x(u5EvrHtaB=dYl zpZVE+s`gPO*Te!)#=XhgogwMu$aHjg&9tyjb{31EZqp9|TXG#nDsaDc3U)aZ;^DBm z{2z|`KbHA@UdVY|87@`Ih!1sg4bm;4jeo(P(i1;R%Ye`PNpt{&{a}lEh5(~y$TWIJ z@kDR9iPY591of!mKy_%zLo9Fwltj4fn7t?tJ(_L&fh0&}`rPZp@Guf#pM3v#q8g1J zS!fjyZ_|BgdKie*+*VjzlM8Gw`r=@>7mn_QCSlS_0JD*ko1nj=>KIQ7ttCz9k`|&< zy_A;_`O_ys`KH$>Ok}jGaGjqnF7AN1+L2;EB5w)hw_)EDy>U*s;lo`n9A$m(6=B*s z)ME2cU;tWZ@(5e15^7IL=hspx#Gd+52vz4=1FJ6|-*4!?%!AaU{u*6`Uw-4VHU~En zVfA}<3@t*r5tY{6lZgG1iP|34Nv5r2)@1A<#@4(!Ev`E@Ds1ekMu`3Qh*Yxj-Xa%Y zJ1Gl3h3m;BPJFCUu?Sjn!IWe}4s2z3 zf~K6|nONo8ECTgDb?}Q!8Sh4@ zLFKOd!qcBH|I7Bl_-Aau*Z~9`{zFGN{l8p9cJ?ferf!aw|5zqYj1s2KA|OL2Csk7? z=l?(?l4E+M`+s1FT~^eVxfJ-$+Wt)|i(*B9Zjmges)4Sf;-DV*DIwV| zw8f(h4~v@^HAWab=|fP5PMcEDX5k#A(X{hs=kMCKB7w)NLg3u4RN)%Wud`Aa$cayy znyP)*N_*KF@%$Fd(hD2%Bb5Ro6A1ENrAw@F zS&42(_k5!L2occa56wR1KCSOAyLWd(`_Z6Ga!u@MZhPqS*zWdsJ$>u*=>+==!jp18 zY!t-Ao_BOHr4qO9r7-}S3XGvF%AyJby)-^W(5GQ zUiD99ilYZ~{Wc6@!BA(L;W8xY_7Vef)T;k>Q};OHc>Q|d3>;$j3T)*e;b^d*AOOEN za0a|ha-?mjxsx}-bjQe>Oi44YZX)fb9yDvDqGv%B5;k>D`;|xh z7(|Lsh?~&Uws#|&8V_PW!gj^4Z6e5Y*Q=wWdp*lvOgbpvWyRz+>HxK8 zWh{^R(AIc(dKOQY546IFY77I1)GAL#jCBV?V%C^&mVU)c6J)mZ+rNux((km0&%#}h z-YSX-NuZJw=z!I)TVvX(&Pult2-MD*&fgR$m4~VH41wWuhAk<}OifnEEpq0d0trIP zWkzLjfXrv78PKfVl1bIjtgOw2Qh#&mXkzhe|IcPbt9mz>-$EsN>DJ;dV!^{T3DUkU z@y7CZs={@q-G_NmItP8Q{(NcEgiivW9J;m?(GY8y276YohS0{`H9$1-m>$F zhTj0G$DAlxYQI9Mjw5lgE%l04@QYi{)XCo0po0QYmrR;QV9SJ z`$kBnWe7!|A6t*Z5AVvH57;^fU|0BRH;`}9;yW3(IWlS_{o8-BcFy0GMq8H-E4FRh zwr$(CS+VVkZL8vnS+Sj**e6CMsm|?tdwlonG5Uw@+yBCT&t7Zpxz?G_w=(wwDC?u8zht7>M0%(uPB38KX?qLGon!qa z@S7ck2oUE_5qfBR7#22uMny^{>kn;)aVbRId;xy*2atCpVgQPZlX9ni5mU5jCt0d2 zB@3JM!RrU|hN(2*-@Z%U?V!PbMD35U?xgyYpZSR$TVE^v_o|UAiFn8Tl~Vlil~?$G z56<~NRt#yA#ZC!6$M9ZGDAWrrkgjO)8Uf3?i6|H&2l`}XJs zVusA>nG$9iq5J9?5OGiQ}yrWk>`hi;93j}Hg$ zqQJyt@wmkvs_DGt(MEd7v8?Z=p@prnU!Bfil%=Rq8R4+h&OfD=H`-;#&RI#|HUhVL z7k*LIGB~>oKdXnDUtkgyuh)L0#4N5FIt8zqfQ{`7o5Aof?JLnCCs`)RW(AjEvy_3b z3OjlwGqKyqAE8?DfF9>tW}8&~(goz$yf=uLU)mdZP$aWI&Wt4?MH?q&jKHdT1`EH^ z>!aZ3aOX2y7C+8h^B(7VIhDm`pR1ztE%dJGEV*mI)s_*q4(r=@?+d-U2>Zh=U8d5 zqIXK-5T)iVCD;bO7h~+!hAm!F|_AcJT^RL6HEDVtO?QT55X zN+OB~F0tUYkUK%mA^G^58cebqeek!Tv3-Vb=mRa!KBDLV-ER_H!HAJT{zU81US*0U z4*$7X`LufCN^`twX-~%PP{MQz?VV0+WC*e`0K;>Ef2mv1V9sQj{C2w z^{Z<`T-7827MP*e_QAWI61E=;h$=qXBz@>%??GxDUfS3RhWR|5w#&zE;&1uq_%%E; zEz{q`c-sEnh#3+}Q7^tH_Z4Ppy8FvIbrLF%&M~1Zk^2(Kp2EU@xoh*MoNaL%r}00H z8>$w=?;p~uAP3073<~oXSO+7eRi}U`jO{Rz8xRY4?jNn8iQ#SmH^yZImt!4EgUy7^ z88(i#mC;dx_&9&SRdr=$6~u2OoH$V~VmSvEo6KvYy|bx&(4yV>asEQO@+Qmo3{(-J z#P_5aqDYZH@Ci>rRK=$BIqH{N7!FXOM}YcAnCO>T-Ehe7`BvK19d*~yof=T;VLsI( zm&aY2k zHPQ6D$axEZeb6yY!jiy;@5OWN;u{ibY;<`k|GfjUziPLzwol@DmivP@Zr9OYY4LfA z`S|SLBgg(BZ=5t>R=}Y_K(;YJKs5fZBgg(*p;B^YX8m89QT1Oc@}H$@MC(-xZx!S7 z8w1&JW0vulEPxZHovcw9aoQBzB@Q$c8XA7hMKpvhN+gcKGHpI6baBaGfqZ+l6~SPE zK?ZA;LlKU`#%;?ed+~G4=u?dn8?*rBusCKm0?6a?es2;7fFtR_9>kh*figsW(nqeg3Zr4t z+JiSlIg~riaYMHI|Jz^Rf9da^>zis3F^PF)Ruc z_hUJ5m-X+;D8N?#QJ9jRnUTkysT54!S9JK5x4>56K8EfexOk(O!vmRaGep2r=RS(< z8pi_(H_w1eYwx$^UJ;4UXL0B{YMyz0POx&=$dYbnM_tCcAwOn?{*b9{r|E0R130g8 z1NY@bQtrI?jfBVcgul94pBQ7(S#F2h*%9~Kh0UxreWCTLRG!2@GCp^cvbls`qfupm z!A}htO&6V9))HBb)6PnV`0SmLi_)qSh0{%7q;6p07?3)cWB>Dr*IjiWxhYYK#6pip z>*rRjgB2jp$1*Bzj#&u{EJB;w+dRitRINpGlEXo6;P$E#mwC%Z??pCmnJt9`x&CU# zDjrX#6GzU47mG-nX{WqcZ)8=&UrZ!^g7D$8_6%EQQ+CFZH7;8|#StmNZ1Yw`vMiq2(=?aQ0M_S8#Ao$0qw;0b^HH`D7eSLEG(#$BelxmjyMn)T8x-wztxa}H7I#Lgz$k%>QuqcB$@*soN6bJQYtfd78-NDJ z?jkVYU3kb&TX{~4mx<#Yxxw}Yop26F_O3mo^d-!(c{$)=?|4Vm-_?g^fo=%DkdNO{ zov2S~CA8*&lsgMRx_8}y&kLF~7XoItsu0BNKX~t&Llh?WH_kdEHyru{76`GT6Z>`S z;QDF2JGX~yvnsQYkJ?7ak});*`gf|IMv}aM;v1U+yro^s!o2m6XGNK= z?N(Yu;tu>%P8bkr4tTUQIl+&9lD7!Xyb1#d zKhGQ?3W48w|8Q&3uD+9|j!ulcs=vUqGm7aP7Q;iygu1riKBwC5fVN8Cvfido!~K$< z8MC?%rbw&nm(nwo67D3`-i3X)=!obSwuc!=?1?id3RBuqg%h$NxLJ=DSd;kpIfZxg z)OzfMUITTDe6tlw;GI>&iVtw)nXJ}w$&_8396p&~`{Gb)A6?j++2h#O2m!tmeU3zZ zhbgL|{vLWU8fDZ2BMx>W$JiJL1fxAFHZ5u_YyU?ji>xP7h6MNeQ7tWu zOxvJK-{ld87(8Cnft9`%3;mS5nfT|0@3(g=E9%&(F4FXpTlp@ z+gyI28rxW+*swiaC}3y%a^u{Kwoyi@})keCR-6 zt{!krvDJdosHvVzSb--1QJYy$39U^;5D>@sgcb!ln09zgtY`+k$Q^vb5{H##2i9XU zn@8%66}x9Z9pY6Fy`v@pR8(Ds$@h(VXO_ecfmj7o)&SFGa=j!A3XJMSom0V}(rQW_ z*IaF~RN8kjBQX~bJ-%!+N$pAj zTOG$sSQ^0s22^kQ8?C0~<{|wgu?tnH$x;uHf7nI$mgJPo8&^ccyH4gRXdmiWpj!*5`333f+^WYEQQoHEv981L9nyPtjdT;n+vKQz`XxsWEM5bqg=499Oiwf!lg<2GSDj02+8~2aM*J}ebJf&< zh73cNTu*^vUGf87&Bz8f!?9eHW5R~*{J~m^zj~z3m(Jwen zx`R$SU)V4mWwnNHBgdmf#4cf8UPObmcqGHReBj`rbkmki70fEj*RNQu;cQ7E!|u#Q z53UX!L#u9%w@o?HVpvo|axxpklHoHequCUO!B$)gCW?8wu~c?Dru9rEcuHwuyVSDW zUC*0Vy$0tpQOM>zFEj*QGtJb@USWM`9P_wof}SkDSw6U04dRE31AA?|E*r|c8jXN& znWfD=V4k;^LLy^4!?OJxvnWXj7eZH_g7-JHSXys!i@+r|^W*S0@)XaX&J(0L1))}d z!~!Q7a1tT;mg?(l3udO;QAzRDq;aGSN)*tuO(eq?Tj&?Qg=U394 zlA%DPvldjeSL{xSNCp-2Ur6yhHRoq2Q5j`p?PECL zW6dwKujbM{$X*`kT;T5#&b8#aa#h<~su*#}$e>XOA4{XO^jOCz0&)je{8l2TDImj* zN3+CwH960)InATL3Yj-16mn~wT{G|$QPc`-_V6UnsK4&>?M7F}_0Jv+c#mgJpH_3G zk%a^kD`%WjbvVoj$vf2m;^$*&d%wYJ0m0tTF9DWZZ|0XOjaYxy;;=CMv6yIH2%qR) z1nV_{;EsV&nQTu8W7-3WYklC<8bH|l4{RY7AnnZujiFgl16}3NEc!b>6Wt5s>_^J$ z&K|+9K@rGbqfY4W8CAPQ>Z3WZJA*eE@1Ra}FJw;NBdffAyrJQ-{P|1647)Q#g7aMy zh}Hflfb*zfOFv|mCaTC_fc`h8_WO^mPj?ms679tv(M09s8G;`L?)g&W?foMau2L{* zfn9?Nkxy%=(ntwuE~$>cG)_@n*R^yTx%sPXTZ!D4{98AYI)mY2s0jR^*rWoEaW!p} zlcV%-zpT`KZ?T;G1vac@7lU>R3DhR+DmK(x^pcjW<5SpWr_08MX#hZlYpc;@WN$_% zH6!H>kf>7vo~KY=HlHgQmQB;%yU zL|2%1Oa1FP0Wa2`%#mTH~)t(Yq`WjtJh+z(lpOEs>IgSvWv!p z0{hbApHy{>d_^5)%7H1Eu<_4Yz`%_oK;G{ z>TCrEPSxo4FI5$B(<2^AuI3l3_ucg_mW$`%F$tk?gXbplvt$`e*E6fA>Kj@wr;Tf!>?(t@EkC*WTLg`+&W4- zs`7ynZ^_<_-68#e7jurM_XWn)S)+L(xA5@} z3zpXkGjIp_EnNz5iy4zK;xafubeD8R2jh{HDl_m0HR_&r)M6^{MzV1gt4}vWAtFwd zca?Aq62FPM-*1LmAN2$5YTh>V2AQxe`BMtKo7yV%**Tib`Bkl8lbFjDv;o*s-PAlY7dYOr zj|EI~Y)N}$2ghV&lgbJYN9@@!Oay8AyyT#~loBueqo#=EW{i_8NcS#~)yl!?9jG-n z?sWBoy!8FO&}MM;l3aCy;Y@ovzBboV;D)27zHyuY;*5O<{YbG6LLy_Hw|R2@IdPQi z5pQvEmSR(0cNQpyV$8Z?!iWw+t{8Ip`QWq;gbeLO#3sl*Q$EdTtT~D&0Oc*OW~`TU z%L|nw%11}~%m+aVlpO`6m#j~R9B!z`!g_}u?Wpe=>lWGcNbiD178%3fhbjSKQU*Yz z3I|Dsg`d7|kZj>r${t%`O6JhGku;!V7ed=ezSlRbIn6ur} z3_)R}Ol%j>qNPNNFijrV@va(}mQHH&KR0Ac$HgF#!`g%Oxyl06mM9@d<5V@HC<**p zj6N{avM($~DbS0M>aEqo-(i*^$3?hady>qL0W?iNkn>~t@9cRoQPLCdOHpGCc}5(X z*+DtPU&mMcmr{E8??xMsUMC7{W8^8&?<~v7e)tnc)3s&+7|%Wo;;lQY=M7 zlM1DxGGG_P0UQOJe3sjYs~9sFgdt^1r1O@K|g2Ik4NuAQd;pdm3`Sw$EeBXV|+V3MNyob%XvD zlrLHR{cxh(ycnp`#GBYFAbch3cTxQp^uIw~B5wHn(_M^@7jOgL^a}bW*ZL4uAe{^*E5vtU@Qs0uZdSNe zt7IJ1wUWA}SS}py&&1Q8o!OfYynfUJc%6u3QA?)y7d*O4D#Z`yKVADGXpmin|Xi+nV=E;S&Q!BfyOnn2(J*u9Xp_KyS>G zhaA!ZxCaG_E}pVZ^iNbg9k356T6sR|exbR!kpE*l_J2Pt83$+ke;!z`mYo}#26mugj;GtYs;;gv3X{ZeD@HLj ztwS(puW%ujwHby}qm1I9XjgQOf}9G<4YA=Ij?g&wfm6`DsK@9$Qy`Gb$8Ux*yq!jt zlE5mZ&?*3V~WGk^E*+pQId->nAnCNuspG$NGoo;31RRMoyU@)$GjAoeJSyfrsr z2oV)n*04GGvWZqSm(m|8isURelje*RWaSQ)Cvci109A7m*R-*8V3vWi0w0YZ zlB%&;frZ|+NU*^EcPmT=rO{HmCr?GVmv5b_oZ9VQ*i-USG%hrq>(+$h6id$ycltI) zr?)LOOa?)h0^E~3oUz{p`)&sP;vXqtG<`oZPJZZ~O2jF7P=Ty3gG7c>$ zs4RTbF^X94JFqN4F_>dQ?&GHxte0pzCeJKPF>1V0Z6`e{IgNgr%c`P-Tf~LzDQi>{ z8cqwtc$n*)9;d^I7Q3e48%{6Q7$9>n$}#QPvyl<o5%q47My{Ds-)e)vy(BV`v72}Y`hHFDe?=M_RSa?EBYwFz>v)lcN;L}s)&`Mil zx~cA%pvvm}{1o|xN}a-0My=Hrx?IiP*_-tsb!~)+g^N~=7_}$L+be&scrT`Wp?W^AzkTF9jI{Y^O+s?(wj458ul z^mjG&^*&9@bi7>~=Kk}WH^42UY%$l41JF4G>%*vY!cCB(^TTARI25bP0ogm~ujXUX z;E7nz&F ze}q90mmj`Kvl*J0R&<@VF!)*U#o;Mmghqw@;$&ZEHj&t1s_(pKJgukQ% zYa^5n#q8}^XxImKYy>V8-JqRCYj)=b8DR$Y5*JWB-}i{`DATp5ySHKc4MxL~iL0c# z-ki>Obpj$}))4T!V4N<+425-6OCM+(O1MQiYyNP0n2j3ir}y@8retFZOC1R3*&Fh3 ze2tKPjTp12eJ>u96Nq2aT{p+HqZ zZb%q8U=wLE@kOIeS0EbeaW4cgK`O1H%fPUq3ha>i=|MqhftLPR3n(hwLjp=gx7es4 z5%NDIt*=jf(SR&Z4(=Zb`bpYdrAw?$1R^0~bXf5)WidH%Slc9P0#+(>+4NVzw@(rt z{I;%a>dQ`Lr}Iq6w+rbyf#F>68sniNMzI3~d6Bw;b{H}QcTdj5HIs>s(C_4rjVLd7 zVJ7vp{up_zT*oOChs&?zW=t_gs0?{Mb=wcq4x$M82FBJYvw}nVuO~P5=(tL2_ zh5E_1CQBp~@f=KSHYS;9vr=?Wy$d?=J}<;uhq2X$Ic$`&pQfMD{YYtbkcm-ILZ4W? zic*xc^8F6aNlFEpQ@bvP%r7zLb9V^?4aWk>0G&||G3J68NHsfR%%@1N7^sLA|1%D3 z9bU7K<8m0A_;1AU74`&HsU*uoHwEq_c#r9u2 zeIkxdjy?`f9&RG8t|mU@EdTuSZJGv7Xj13`XnZ=G+sLWHFVxDgp!kvI!D(O$&>p!E z`j=so)EGVStEtn4kF^}#lx@RfawAG-XiUI8X=0N6SCvXH2k?X@WqN(N9X>a&F9y_2 zZf7@IIkI12Oxm+@1JC>2otw$OBCKr`5qmXxKv> z;HwB*%s{-M@nUsWZPTdIaxR==od$aB(L2@XN8K{=hX6y@3AX%a`)fy6h9RF#9EA3= zS>xk0RNf2MT`YEnLxC%8ilTOUKRG>JVDp@26(Mv^KSON6^EEB#!hw$b?~;>RR$~!CytQx}N$QKQcy9NcdSKyqGGBITXlf zQfXRQ$)L^!ECtU%V>NPtLS| zqlAt#rqazE(gB?nrVdX$a_iAm1}Xg=uJth)vhXk)izL))PF(y9SJIk7F@kfFpJ zjoq;++kke6t9~C#5tJLOPR-+T1>%YbGw$NRPF{E})x`jU>Y1VM9^c^%X4^A14Q-2; zX0M%U?V0sAt@i34(O-y1x5wVTACD*TCV&-H$%0F1TH+0?p_*y_Pqx z^x;c6C5|#)eVeuqIDt2h8^q6({^yLM7okfq#YHV?)Kc@ejOe)nU5;tQ`Ek;zal{I* z0mFG?=*TnP1@{#e8LgH_kc2&K9Zb)TCjeH|q7@=D*JA&ipE#@&NBT&f=G%wgesP@6dq-R;F+cZ9xHtW6VNbH3_!-%IY2**6 z;}g`DN9W$^lD?;F?vUhw|M@q%?LRI!$+1{ny5(*MH~>Hm1a|E2eJVEpkl zaQ=SxGf$Z?PqmjmeR4cYE;%dbvbUAXF4;~gVHc3*q3TX`-;EIvr5YF)M*EMrkZKMky{tef0Z*B1d$r<@=y8 zM(HeQMri*0S@B4FB)8t$gJh=rC1CXV;e-#er>VfKIMs(K>VZ|Z+m5|c7#t-)khYt$ zvyb#37X;ZZdZN>Wc3cI--A{|d13uFguND`Ie9Xj~i4L&YsD|B47mPq+U7<7}8BWcu z8II6^62-gxC~i>+@4Nme6Rae@RZol`P@f2~G>5r7Cn3ah8s)f(bCCNMHGl1}Jm|0^oU_lt&QXc8 zvvOUDY0Tb$t0}f!?&wRFcNMYGnYSwk@9?uoieu;QVBY1AQ(nh+Q}DkEAN8!7#S5=&dT;@?!$s zi7iV>4mMhCilx%9W<4ZG@M@F?M+HvYC2M0ovW-V$to_Th{#KEUo=4F-+o<3ulX0b_ zhbQOZxsb4Pn7O^6PjB+Z7EXMQuCWFowc1<6I&sLT1oF4=>3bLYO#lGVYoLpKu zQ;(c^+tDa&U_FeJJ3nw%JgEZ493}an=~P3A7+nda;OtZ$P~V7aQ9~oO(!Ig0i{DdP&8*g)t}Oai94{jQ`yJ_=VEWBM z7m|*nlx=ZlMVkJ1-x0K(!Inp*CjH^^jj~r&M)Vq)LeY@@Ed_}{4)5k1ub6HBLiAii zPy=R!S=Se9jT-lda~B^}isGsa-^8Rldv}b4wvcS~Qc%PZ0%$vrLL(YvMgMdYpho1X z^?_o46*Z7-p9khwI{y3WLFCr@AbOG*DLkn0$T$*fJalK8U?L6@ zjGpp@aHdUXnqMJ)6rOX-r^JOy(loa7So$}#wMUn8Qb;l?1G+fIOOxRM5m1Ve91X1_ zw_Z_jm(CmIYchiNIe3e{w1NJP!31Y%qyqGM4^SN$OhSE*kVuB}ul z5G~M9X_;Ho!9eXtQLSu^!f>4T5av*NLa*8gdLr8@UR2f*!3B!;ZTiTUx;$Ig%ejk$ zUe3-=LOa)&Mp0;7^2Q2!YLRXaVs%`V)3J13&sb0gf#g+!GgdMVUCgys0I}Pl8!eyp`!4?&gL;bP(aO2Z?3W3wREU3NQ3<0y*z%5V29eudThiwHQLsT=!Y;w?=Jn`c_O`$?HmOj(-MhSE_< z{jIB5i~q|c^f@2xnFDO;Is7G!fjT%MR|F5ONVvuGh?Dyx9{?;=WiM8S z$2ay)Xf@!#tD`evl(M(gQij9E6v|O(Gmy)Lk}S|s-S+L7QUX~AWprpltZSD`EYGzW z8%C%74K2l+W2&MO9O={YD3|@X%~v0yhXtp{(DZA!GK3{MDT}PjJU8PGihF!z9zNZ&=P7WrDYMK9m(eV&w^W;dWfDfngz{~C%0Ace;i%cavu_!GewE5N9G0|wssf@j0dpZ3MB9s3>|Ps z`F~RHIKr(S0C~{l4yb_^-mI4{xyPye3nJ*0l+sYjr&ABi!YcR`LSZt`+C$NOCm@t# zEEYbRCM#E%If9*7Y60tjBJW&z2PVpAvutAz-hl)Dpm)OGz@y8^8X`75{u#pGcSmcP z-LMAXI$rylNcSw=NLJ1ceT&6pZ%=~1oAyDD-wsRP`?dnn+tIsxSsI}31AOxJixMN1 zw-Qq_0@Elp4km679}8=t;P^YQ@3=9W10jm17m|Z!6$7J&HX~v2+I`UzbFB?7ia*9Y z5zl^LbXO9^LKU(Bv`Go&1lFGj>CMawYL*US%zRX@%Q9MBYJo?-X@a>EuavW?tC20x zelA_suj8n+yQz3mN1tX)P03mb96r}k6R)OUn>80MW4D6ydToE#S`z-OC*o%m2qa>> z=T7c$#DCcH>Sslhdaj&h#q)53TiyC`95)SRn4n=2N4d5(EnW*lnreqlHDRxs!8i`6 zZUtL-gIEDnUglzD`4iH)!!*3JQ4EDK3`ID0#1VLu<#4p+B($a2_9|R!E0!xO;;joE ztV`iKiG@AcX;O1>dW-suiX5H2t#MxZ4OzGsBaXRI_(AtgZ?trw8Lq68Qu`GFO5%dq*P5jiyId#JY>!}#isF8Zu>nh@NivG%DtLby^u_ne%z)*m*G#V2zK zSG89J59scWJSZiBE4zvbw^L^(VOexAKj#cijSX3EK@8%V?^D7J&qc#*#=m|e?f}(< zCo%Mh0S3qhWd+q@sYWQuMUN&-P2$Pi<7S5-Rqm9Yn-IR}CO_m7I9b??jlqYf zmM{&y!F7!62E)6kEnVNNJZ|-@+k#LMOgVM3P3J3q4ITH*%RUeR{t~t8a+%~wtV~>z ze?Hwd3$+Bk{TArJ`zx>+O0~b&Kk-KN-+d<0QBc8yFIu`I6bOjw|EGtDsJ)Y! zo!kGi8tOFkl+Z-bKg;#Bbu(h2siC7{bg3JKB@R(dNm7E!uw%)yvDvm2r}{mAu5a7E zUDtdO>I#{9PQfV!vHc&pP!871NI@ykebxlrX7XQWu5#9ignk8rGY9{mChb6z5V)?6 zk|;7}4l#tUijtZSGQl9DmDD(ee{@?&+2IdG#oIE5X4>Exm`h2?kj{+N*{{8?mC0yN zb8vPG^omQgzk}<2j=?XD!_RS>hf`xv>7Q&D&o`SVmn^j`; zAfFm`Du=*-067J72ml$xBEGc?JG6v@BDdud9*ACMQln2_rzN|z(3vefna^$zP}Y@` zlnuSIW_VO)EJ{179>?ZBtg83Uv8v#R@z8de!HkHDGBF-9(%UQ+yqoX-YDXI=Enw6R zKU?l1;3BSwt3IJ~FIbm%uP)4PmPsH+FH>N2HMYilULk$yZ;n%bC0o--+oQl&VJa#H z_RP*My2u>;M?6D!!<&1!Fg?sKD>Z_Ke~vlcG2-yMR^>kH1`gwcKXWS~5x!VY!~~0c ze(XcvH0zCd_j5%rL@7ZidWDC)Lg%|N z;&gfBWI9|Ake6r-qSobJ0mhf&aJ_BdP_4!Bsn_ zNlgLPfp^5qwZ^1)i6!9&{@eKTAJ(m5B3e(=HxLk9G!PKw|F2i-U#_jznH!n~_TOHT zt4;fM^hWfbq~1Xhr1WJWNtms5b)^r;e#R=avrGQAlksVs?3^P7Ruf=wcRB}aOUZNcmCiqcEug$s?K;S$>-GZ+o>ges-Om&N;S`b(YbRW9GznQeQ>w5me zU7i-?Sh1>UuOIQyi%;nAjhj=SUP2{H*ss)V-d#xnf2eDE3~k>(Z!cNN$>3qNFUySx z!@zU3#hFCYRaZK!WxGUbL$rlr=QzTJXHsw|l_p+O8eZ zpCYWnsAj^EN1#Gz`L(#LACSe3?a6TZjmk~gVM2toY?6JUA{aTMi@n>33OEX>TSwMe zRlbO=Ncr%iBbc7?b)iYsQ@(?VS8w{&$P-6z-a=$GRls!gQ4D?`k`|eTVD)JRHI4jm zCM%@kD<_m`;*kZ?a-kRjljLKICXmL?cB3k4=1eUjV{l|FttUV4Og0~L7$usO!Ks3A zxGpP?nruS8+5MzaQw!wpO(|TrWvnvwnrilF#71i=mEagj0!l(8H{r2&*ntXcuVTsW z(pH+nWI%3CZa7LwBMzg7ugQu%v{%{*dRDw>Ada02I7aK>atp^Ye&U2TzS6iiY9vp> zxHqiQl=rvUNpHkR3;dCL_{YDS`mBcivGCL3G&-z?gR%Hy<~?y**x7etbp-|w<~=b7 z_ze@@1Wx1LXigK}cqObmD4062XskOJi*4RYqkmq44#aSX_RVk#_SA5`hNw7ZFQTKF zrVr`FMhAGoZwzIA`?-{a;3(5D)0bL&#i71&F*AU5P(>V8x|`GJ+u)j-c=Q)&8&3kq-gjl_od^sv-nns{x!cin_6Q>=CuAuGoTaj@$}EGG4ZMmY593?PYF*u?FrY45d^P-$Y8Sk zE2Z7en_pQQ+z-E!uq+4V+Vm(Edo{OvdReW0dO(sK?WrZ(&FD?wnEE1J7*D$3JqXIR zf=P+;;G|iFoisF1rAW8RYjx7IOWm%qH<*%SwJe9IwMnmj&QZ{A;6IN?EDGnPWmaQ) z0PZ>7T1`vQ(kp6B#9=4e1?>su_$qKeef;iRuQHhRs_LlFbmeE!(@VlZ7?bQlX=!o7 zN4Wo73?O5kpLUB6L`O9f{4gtlS_SaFO)!4?8y7#4`I1emzp=hyYUF+6J9CJP!t{$h z(w0(JWGjTdIK%5#SQFNFU;C;W6CiLJd7%x@?3j7Mzplz*&{^UJzu&>fY}$;TJ*OJo zDiw;;b495H?Ndqbla^WI4-^nb#-;;Y(iDwdd_(DSIRhovsbj_{zpobpVd!s7Zq^Rh z5zw@G;eeYzf-ZiIHM{7Gc!%i|9-k0D#_Zp@QD11pD3yp3H*m+(4N;gH@Ptk}3&WI_ zrJ>uvwo1m83x~pLg&cI)qNmFyW7nyNuv6oVEz3q{HQ?sFbM!XK-YRQp(MX_mj7HX} zF1yOm{OE6sW#(Kbxx9G3v;)u{nuu|pj#*^Ez&E^>>5M2qw?~J5=~h4 zcZH>CUmcJ%ku^EEx4Wa~swakisbwwAQAN)7R~Vx>amb!}5^SPS zf@_G1GMq;dj=)?3m8l6&M;oI!aJOSNsRPa1Q6F26#VF8J*-cR#sUm2du#MSRx6~Qd5viF4Fj{^D-%0N;&x50=S?vUkp?7E{MMm z-|BoSba^&2VB3} zV-w1MZhgDCS-85}I62CCe95_gS>IYZZfH`-pOP7EE4J|i#!(<{X!c^r`=iLAED_KU ziu7*BL2dlatK;3KUf~Fx(!@|OJQI*S(!|1scgVC9SjrN&**)d7PCn8apTdMP$w}Ag z5)+6;=KC=MWEz02Lt~Ud)Ps|!QSoINjwd?T*57}<9 z8~Nl?UQ3FHCB|(|Z+`NJZh;80Mh46E?PNt8O0wuuf~K+^iYw_86fH_wfgLwrCbgB6hUrJ4Y%(%h$#}o<}}Pk8-Fc zXYF^`2}ClCU7=ayl)*WiQA`0Ojd&>z>aQmSZMw|6eh=wtkZbDxB*39rLc*Eo9s&eR z?sNN$NVDriopI3+f{Ez4;sY*??V|hj=vQgO5D%Fl)u%YS_}shoQYcu2e^En{Q7C{G zh)lmECs(Y0LijY>sOLZ6Rn><%dP#U9d9+_R7Dx7vp83@4IczpVQX?M1jJOd@y5Hc_Qrx^|DQW8L5r}0rDXiy zpyI`DlOqyuqa&1DBnNa53ijb+g;s%(eM`;>b>G7qIC94z5q6z#NExBU$7&lFNS+qB z%5t`o+h+`a6qX1&dP~C9Qdiw!)MYlKCdZ4Z^6sl|@osRoVHmkcoi277sO1*RVGKt* z6WBD#118*Qh&85fz3u#@S{=qdSDv2QJ!NZ1KgI_f%J$l($V(&z=EBGm%hgaGZ$7EPORIB9gQ6@U2jCJ_j)evAiA{$ z!rMOgkhY7mG+oG&d#f|HBbGXxaUTj_TkK&=l|9$*PyO!Rustt+Y)T#rdSA3|C(c=2 zif7~u_p*gtoGrZ#Et|`tI^+Ul*h8Dphh~poKrhe$xJno7;mWO+BRkk!6dq_@Dm)P} zR^kiXd@E7VI^i;S(Wa&{FWr^+UO#W) zf+Bmo%MBAO32quv@pRJ#n3NGU+e@)IAE$PG1(WWTLEf%?eX%2SWNFp@Y$=S+}FtK3@M9= z5en_dWM|s}t6^OBt9|r4;ZI!K2GYYJ1?%{u{X2SEJn(&C%!BG0Mp9=Sp-6BpmF3DX zneXoy@*Ts2cnEEu;9kqLgBUvMeubZI`~i+8m}po{t*o&!Ryyu6MRwZiZWyTnz_5>1 zmhca}VX^oD=Q*}yi5K41-p(Tt&8+N^RuOq8bv)ZCq_E|hN(OMHS>Wy?F*+ksTJ)3`I%3@}oC8z2DqkoV585J2P6+Q;o&wfI zbP=`-I+dq8V5}IKh%6pWe9#8=^JnWF6znGg>|dtgO(*RTAt3eVuqsKTe5E!crExg4 zSsAhZK&AYyO0hLZAXPktIKcN^mRByigFA4Tl|E85qi+Z{yN>vsuy&XhVq(y8K^H9D zo_-kjJe*nV<$uujPSKHoTeoN@>Daby+qP}n>Nx4xso1t{J007$ZFNre-M`Krcie}w z&wZ}PTD59^b4|>KHBk`5+Z*FPe#r3Q2_ut-q>7zjQ)m`LgHDxMDL~Xz-rGWg*dx+ zC1)4R-Xnbd_}>W?t-pNQP*1z}q6EZXrvbVPpbau8hx3e|C1(woH1ms(+|9~DsdlR%((w3CPk}(qKbo`d44Vkb{UnH+d(|sWR z{n4gIHwJ>v=Xnl5nzn%wj0C)vdc?1era5ojXEU2mPvHCUeWCW!bW84F@a?8b69m2f ztlk}_pxIa$5W&ircJu}?mnZnMu(yHiSv=9-FNSHC{H(13EvDTw9-9+E+hD*AIUsx zI^p1a^8oP5cCV_%m>WPR?<&~Ji#OK5ZMMK9a@Dnic_psa4`IAh|D+>d6BORn*nf#K z&N2?%caB-d!Ibix-BeUvnrSdtz-N(SMfvRi@t6l$~ z2Ctq0(?(n+5prnQ4l@u9qzyeVJo{i2k^p;(pKK@h=&A8AbJ-L*P*?MGx(Cbqh61Fl z*2tnyzgESz$pZW)?PK)SWsUt4np5J0nCwx#sz&rT_xTNnEZ}^5U?wd5{h~&%^jxggK8|2jy z0L9M_j$9dXK`_YzmNdj8TOF3L4!MvgmcxLDID`S^^0$XP#wj}Dxtg<&_f|Lox14Q& zej$)pB<}B)2w!Lb+%PiEH&EW8km>B83DJiM1Q=%$k2;3$GmW6eAcPJ%ChcSS_@fWf z+`$(afSU#SwEz7d+OU7%XB6}cXqIormhn4m=>J3+_&=m0-wQ_A-qykJza6yyMcO9F z+RqChgltcyB<##7K*7@DgUV!}lu|;_WEt`Iy9RYZgfwX)qkjHsK>s*aHAQRr1gj}p zQd{+I2v}gAsSBWU5VO(4B&gp0L8R84!)q=!phF0&YhQ#Tj~WKg;fv$Rh2Kf&4`n8eCI27*L zt@Qx~fL_uL>9(cBVoc{Ykmn*Yugvfq)uHAtfEbpt7gmkxXn-DNYZE`VKCKjA%zDkmM?by#OQuHESeRp3-zav79YSEky(Wd(be<4 zUlL>O>rpP`(eFNmubR_C=l*#g4X%w}rBAErt=fmn9#BSQQ_(ef^YD<}sL+mgDSaLd z#n2;}os+;eQoe%MpsQK<#36jyPo=7gVHH9&Wt841#3Gbz)_YEGP+)&3|HoTJ|B2bD zZOZFFuTX06tj=8rlug z40!4ni64O70w7>t87N*n5eR(sn{a~io6#RwHQ5Cr3B?qizPnvC4fU|E2{Rd_fSu0^NMhR*8Oe~Z0;IWd~7_Pi8TH`@B>A%Mmt%KbDW@=|n%)_rt^Alku>&(rl} z)232Sm8ws8i<)&Ao2!EKAAw$%W{2>hbcr&Lw_hJ1oncJqmE}&#lpkR-PxRifraO_1)^se`OvLov-!r!AnCPOyx=oC@oI&x{9b&&}jIiI+rs|G1ckfTh zj8VN9aQn%X0-&Mljx4hZBdAycVy|hIvJE#uP zJIH9=NUwfK?O4P~G4V`N$2#<=-C}oE@3p*S_0|#jzr#?E!Z6~$!k#v6??*)N|0zcF zQ@JJQd@}DGolp3$X;c1h*qOQ7VH|OE$;NEmd3a?fm5OzzadJ)2?2MirAcr; zreqk_T1Y!g)D4g7mK+W!X`LdA{}oTy%G=ID$8aKt+Ic-ioVP-?&F8^6E#n9{ORmpD zkB*H{eAAh_&r|1WXF|3G6B=-YrSn;nu0Xf) zhEu()hJJdJG3M+nj$6xqnkL?&=It_d0w=8W#>n58uHvtwrG+@{X7xy#>Zz}4sTX2p z)S_xD46t2Lb!Lg#q`Ul|`OF+Vd)F1Z12n(M=L+w9anC0*( z6iP>0oshoGO+U*9pxQlnal0^K8-<){`G?7=Pion?R!2%I91@L{#4@x4L*QK6o2^^X z6_?wv+7XxOX3WE}t z75Rd-(-Uz9X@p8jYAFwLL|<`^s+d=J0@sD4;C#_kON9So+MGgB)=_Ruh5K8o*!yKi zdQ6y_ghVdhck|wHM^@2w+DmD5u~snI`@rs&AY}LBGPfptrPz_&(5dghjhTR+-3wkA z8uVrZ2oox+$pF_R2^o?ta?PKGD+H8gOc3(ldQhgvF_K5boYPW37h|gV}exXb6s3Itd=423{75;C-VnWaR zeHUm9?nyiq2WX|9P~G*B8$VU&OE0ZjBibXK<;F+?_~=eamS#RSx)VKw9r}*> zPISu2N7jCHfL#5Joaakp{K*darIzxq$;@(W5r1C4Jv`~(bilt)1;`mXIoZ2e+L;SF zng1sd@LzCUN!R*YW5JtXQ!lx(rooS8y|@;`>f@-0FG3SQNvU=Zw5kxtC;O{pbkLQ3 z!Vc>$(pybXq>#TCpL9!8c@SJsC6)U*JI!kv=W3&7n=c2r72pY);#dTOU11tw1*X?j zXV%M#ea>dbz|zXDT*hw|2?=Gv{v z(#Z_t0}9!g1rq)~m8llak;A;cO%Vn*iMzs#)1r<}JxmImbz=m%)XzouAmTw)!RX=8 zd6eDgCq#i(yWgt3JLzNAZXpPYTi{Nsuy~h;@^a2oCB0pxvdkb){(;{Qx>{qx9rBOP zU}MAC=r0arqJnGg#oZWY8%U>g6h?&Il)I4qob8S`oFTEh+=1f|&UxEO=WAU6e-_8z zXy9u#_i@-CRfrr7`vB>RO=#_z9ld7c09Pb=)T4+OA%j`W;c5@8dr%J9`tnQN-OY(J z>pA;-S22W)C>Oo3`8K6^PH%}fkHez(m;nR$>)#*anoB{5O`F~n@LaimuFh`JEX{IW zsl~i)L)3q~6RS_eB9={*`xo-!LHZEH>3VX^FUZt&yWcaekEl-wY@1M=C#5z5*ouXD z{otNM9%d*i)Hv-4M>A={|8cH3s(F>-TIg3xK;!|f5m0r4YUx}EC8f{5M1iXbGrpsL zdx>q3e*AF#x4EbP*MXC?`%VhCGqm}BI{w$^|2d8Sd4SPYMiIy0?Lr3|7DN|?9Uhb( z{;6ToIk-+FrXj%4inU^}uo1Fph^cG7lqPskl8PV8Q&`EQ21->&RaE0KivOqPk9K*y zirh3@?QCl8#h$dho4nsK_wjpsPxk9;4Za_+12DYGMZW@eh9PR!A1VyRxZYBmVH0Ob zI*jcQUmYceJfR^|)Z-gNY%<3pSj+Ji8 zo)o1yp2iI2oV}}QHhUMfTGUI`Dmu=9`>hFG@7`6D%GOLfzArSV_55Yv(amUs=3IQ- z7TK(fbtk1f8ws?R(}K(0O5o7tMUC??0YOsVh`z#T$*pF$dsTUOIJwGX{!6YMw1LOi zvl&M`0g_U~;44Vj>#b5$FBo-(3}@u7-gN$%wz|6obmQ^MsP~Vn2t)xqRrcX~^EpJ^ zrUe3Z@v-)B`>BBLFKB<=r|8quyzuxn2&@q;ARG!MUG3ZzzN~EXASy*t@e<` zm8hi2c>bA&RS5_i`cz*9WHp^~=y9zEmin(BM2%L9z1gH+~{z_XS zwyszhfyO&Ckpin{WEy7++t;xvUb^VFIuBI_g=+S}ictlmC7PLO?zAjBi=DMVCsQTc zquBQBY_)Wf8uzC)@Jv(bv0Z0)bX%K9Qy;3nJ{C2Y(Tf9-XwXnBckB{9hb$=Sh+Dbx zc9?L-FULek^G~d40NW-`_<=^Ky`38v!+I9)_fz zZ|vAXtz^{J3wYPBtN&snE;FRxnyJP1GPzdvpDk7q|30WV!|Lxy!;+b?V&tAcM_;PJ zf}*f$P*A2W8|*iSa8ppXR`mH-^StWX!>MK>1e``+c*#zg{r^*m4=*l1$K5ox7Vq` z`jgHcr3$&{h$V4|G{@{scEp5Q$eYn279 zt5lB4YPn@cDeO2008etiGf^s1d-W%zu+eceU|pQ9X~ih{CiYKWqb}+&zY#^4_myS` z*x2vf&ZgQLBYrpumOZ=(1Yg4Z{$m5K1Q~wuJ;Ip69KtxuQ!7oeJ8GAwVpDn?Dr$>K zk{&^Ed#$1;Y62Is@PbvY_OoarH(esuO&Y`z( z;d4GBvQI8Jkf(5ax}E4_*dpwRdxkaWmP#?mWq|W|4lJn1FMmAH&$?gL$Lc~PSL#O6 z58m6(rSNg*USO;VCsH)V8HHUimyl~c!>8mczAl*D$#G|2YECC`fnl*j-K9O(lt}E^ zx%(FSMxfmICCjWmxL`K~>%tZ#`EpiV0;t3${G!cD*PwS6BNQ?FKUdwHyyHiurR=Q7 z?m18?r}tUB>T2D<%umJ3H)2+DFcfpCIG(xJlnr#iiHeAIX!qymGW7gko@E_s+l?mm zp{JO+i7sH{<2I!5gObt9B&h(*3C!-1%$Sz3RzoCHhF3<*+y8wf_=o?i$Ls36;hV%; zg#7VCBn(OfDh;H`2Y=*k_^K`daFcosnwDGBdPyAo5ARbBID z0{%g8zo2k3s&Fzf{ZGZ=2J1YM=pd)tKDJd(XU^?5Z?CDTX?^`}pwxa9;H*~5JvCs) zjVlpwF_|bb1aY#B(Qh3mqn%Lzp{9dw-W}YsmPJTk05-&-lX-SZN~_XVvP;Fdk+h^% zv8~6>Q-!F!YE`@gb+WEvGEyf^qUsu4&}CBakffuww5^A)s-s`@a7TG{Wz}b_vlTq6 zPpmj+$dmY7QXh=)`kxc3z&LVgn9ayJROzPZcm?XtgBdBS*@m`;u_Tz|M^R#p1eC`y z$`{${$0c}P-%IMerU#wjJL1sBL+7I4MTNxYR?p>I_38UW zW-BPQY5q7cy`&hWyN|MaAZ?x)-u!h0Ku&5&y6n;n+#~x9#J2{HlDs*@8NMD68@vBv z0e0iHBa2@y!i)p;qy-0Qx!VJEj3DriWr+g;N76dbz8XZups zDe#gc-&8M+3|6ERnQfT8Cgzy(2@ zic9<`@V{?GAXL^}oZUju;*LJOfFIn>r+>%24ZZ#AencEqck8>)yvDq$u;TxkJ=G-o zLMa4x)i>yKcMAl@fV-MTSV{M$FT}r#WVLBT0lVXLAc_@;5%D2yjG+#}m{_f}0ah)J zw(`SvJ1jtQU&e$^jBvK5B(M+;iu~zc$~eOM++bb4F?7K9kLBMKQwlkm8e0D+R{3w_ zENhRgm zx4Feb`1s6ssH@zOdYO|s6RQhy4w`dHnLpg<6rya$M`f~{`q<_4fe_Mh*QCsD)1-KL zI@&&jJQ0uWKIX4=_upg#;z%?B27&=Y_3y-?2s<+*{PFD~8sr9LLX&gwj0_UaQwTF#d{H3><)d z27`UVCSQQb4?xn2G-9$*cu8WYeZXG4iGQFr(Vw$34jr{Oi{s)UEzJy*8G>k|;Df>~ zp8IDu`uc0Plcv-o`GQ@iT-nFU#zDKl8og_+zT=`Qq=x_968TyuJ~V!t+2>X8?&SQagn8&v1x0}J_FEgV-!b4?WokN2C6Dlk=B zEK`b?{uDY1#W^=8CljZex-kZBhBwA#Vr7rUb9$*;h^sNuChgBW4IMVRHpCHQGliIj z!fdLA1*mACBb1}DWfF}yF-E^H+E5?0S~)+ZY#`OXH}|HXAsGk*)&8_D3PIaP7`NNT zTxMEr)QUJijMDn_l#;EJ(IDfkX7boKp-WhNxQ&l~-cCkVbIjw>@E19G)B+W>vu?Yt zle){RW5T6y8%s#cZ%-{9IMj2g5fbsT=!t_uR*Uee_`$Hjg+*2ZN2O`k4e^GL%t&Vx z@DgUd-)?j)<80?y+5G7fjj)?5J=$P zay=-pryX)xuYn_PA85J0>~o}9^oepiqij-5wFP<&3usDYQCt{|+W8$4SVse-bE+P( zkXT3~%lM239mGjZLMpBcr45ZbD#Vkq(;nMrX`EBET3Vk}-${iC zk^Jw2e4PXhn+Up;V$F+@iuw`hkU+y5v!<6=ucuP<=7TKLs#c#YscJ?1O;exnrw@27 zaHv2e!f$+d#q;5T6(Oz0*5U*$ z_Q}spUr5%=dktcOIY#)<-^Kqb>@;+w86w`_p7-yES}IjQ3N%{8sidQUq_0eW7L=Vpr6&J%f*fbX8Q zlC*>B^OGIgsvO~Q^p!v2?DP0W@sB{W&kINAtPSD{N*#4&K4WYCAv zLl!0Mp$wUmq)>(|TjX2@kC(0!96k)sA{nXpRe>niHuPDy#C$qZwDPP0)2I@gC zLiPhsswSEyH@fzNYWwj~rgOzdqLbc)SxLfxPq6vGd8YA2= zm=2{92(_7QM;VSOY4xAZUIy=Zb$NN0Z(g6Bjp8!o8|7Idm4oqorK1F(-7DU3&p*Y3KpdT zk*)TUR~gK)9lW4pxN~iKcy}Q};NCs16rV5V6^>!M>oq&}q=mrTK9?gQAum$U+@<7k zOrBWj(|hzJUwJDGKIh}@Qh=AT1~-07N%r0FCt+kt+|F3X87G zs(~v%YA3~ho`L(*P27;VgBy$&emTJIY9k8c#9PV!(A|mwFX}9z&0ooU`+kMu`uqc& z1yLe*fljUL3vH3>!geJ{f814ckBbbxi9Ma;!ej zEiZ$SdJJ;}fYQ*)SMOhth(WaO}%gw&37LxI#-sV2O6cP7Nj+f&9%>n?0jv&Gs^?f{_1b0Nm`FzhJu@Ctnh zK%;MB5faZ9jhnnGmTxnXhou|3_qBru+tOc_QdH2HZv^77^9b`}|y}Co+fNr(&kU#I}XKxPF zk!?m{$Cb6z|HQgm7upNbYbfwWo=eQJoQ>sUH>v}7*2q7*Z>lZusiUG*_iY_)YZb^} zh`0-6h%av@1( zhruTNih^UPajr@ali*vgr!Vj2T z8cVcoUndP^7Z`R$E)gr^C)&B1I9dGIxH_?;-lIq$@mN9+5e9t72aNp}lfDwUA4oSV zSVI_n=8`!jr6_c%uvEBd=2?81#66_${QtQS_F(bjXBsXk)UWC6Unr~-E&=SmUSD9W@ zZO55knO@f?L*qGrX@0AoH4`-Nerx+(MJ>z3?;ENDuqpwX%J|Dw+69yr9Pxa!1D~6y4xMQIQwBq?84f1#^ zTIivir3kg+`%$IvGv6HFT}eB=*8A5$JgNuZ91=9|Sv$S9OT0r{ewrd|_v(j-rNDSA zm+HlZ_Q37g-_TlqR_RP(y>OqtdLcf-3w{v)r4$hDrltC9@W1|92SzV3?N;e9Sk-~p;c{B|g|4xmKgoVNlDu4mRFO5-1DYo#q~K(Fhit@;KxDMN&E z6ETMSXKL^ageFsAUbd?=89M;|2@7@;U$Yyx@U+6BVJM)AhzCSRm!96t zv4GBmnhP|fK}gO%mSHZsw(v%mAI*-<4yY*YZ})y-yy%1QGu;>;b#K-+yOV4tndrHn zzW{Uah6|QkNH#Ck*DtKc*=gUk^@rbC#wxHc*`1G&PE_!7vHIelrzsa|DBO*xv@fhY zP*0#rjTGy%zrVqmNa@YXyeJ-4rUGfp0_^PPyzjoq(k5Weo<^kz1KY76R~1{mw!bK^ z$btwHf}Vc|7S6??7Sfn`)>}*Z(PUd5dGDheyu5-BWVBaKX_PgJC5>VBU2?2+-`-(5 zP#LMSq}#HuQeG8Vm9#EbU@9A!*4VhY6yq8@;FBTE6KnQiTOK}TzsvbdKRNMlq)*v} zTOp5<`S|8S`zUL3HPD+>-WyT&zetd*5}5?~$jG5{c1UQ?6^FMUGR)etH#ZkwH2UXI zTx6x`MmM`SxaCu0Hd!0L?Kn*U?aLA^4F1|M+fha49})#gk9zN4t=PiE)gRDMk~r0Rj9Q0ck77gh#U{Zkm@Q9L#x8eBE6h$^E>paZQMH_?%L z%Sc8`wIDOVSx{zHhNPTS&ZMkcV3skaw481g!!xC7&$#G1mtJy2ts;AwIido+;H|7n zPZLqiQNy?hySEf<6&J2QRFmfZZIw>*B8mW^6fh^UtKEyoli&=c&FxB3h?PabyuPy&B8ArRvrjY1ON6@p#^*I}yqA z6dj+zR7@@+ikXB6+=j>J3NF2MlJUgkW!f_QYxDSYfdPc3;c1p2p#~D>tV`CzXd1~1nJ9g{220>!KRVJ#9HpTt)Zk~p;e6gW28aQ;uFvSv5V~D`P2b1pIvzdC-vV=25-#gn z9l&dyb|~t>cgs8Maz4ap_H_WMLfJ4Vvm9CbT$#(LqEI*%FXRYYkFcrR;;}YvWkl!h-JS(0;B^Pf&sM> zN^*~74o32_M$hum^~1P6wJi4}?E=aB@wF1VY$@_b3nwk^#kx!l8dcnIyd`H@hwu;2 zuBugpr0N6`4PE!M)*PIT23C%KME@lX?tLZUu2ZViY!Ta@z*8c$A|vD<4Y{7n&9p7o z+jBE3wQlD7*_)|=sui%;<9+&P3x!hSig>r7j+Q-|g$A1ggHW>gDW;97ic^GKJZ_KY z0-)%^Jp*|-7!;7R69T6*@VJhI9@yiZRWGzH!I%E*4J!K~1ehx{@1iZGZA$Nw`~~ix zesEL72y8UQKl*C7@8Ahg;57V=8t?&HfA1Lv1gSZGcRE<4q1Hzc9vtu4<byf%l5fVLOY4d~bTiW&p{ zbj)DvTOy)^onsn)07w{-0Q3g}?ZL(2N6*OWl|P`p`j?o(zEflU^faf95H=hX!-C=< zMWEUt4P4z2OEH&Ys^>wk%H@dxHF|?8^PY`IDQ>AML4kQm#j(%A{47bhfSAx&(#)xp zLs&JhU=2=${p;JzSi+>nW`Gk;s4x0exQ1U3~cnd>_EqofqO zSTH~xzYpfdnC2C-6FvC)GeyzX0B^h8FtL~04#)K!HH&#m%-&((>HrjGju`Bk6cwbE z@uH&E+nL0Q)~M*i^6B_26*e9#3JJeJ$>@;H9L8t65?M9;2{2dXwv(0KF7i&K-XdoK zFCp!HM4IFM!FB4rM%_|7g1LGgbKxZZtAm((Gp?(XyWth~?CHnW;e=RMv}f9d{Za!X zSX~fhBxhN`jM?0nK!=nT)|zx0ai^LC#JJN6|A-}b87WTvN4#D#vw9|;Z(jc$cgXE5 zgBu{%gOM0&Fc@$TkBEyZB8<9kO?|xDyV8@uNTW!jc1|*+c7}aCAzY{v2L8%N@z$Pf z^NV)%LaTnY$)v%0)GWVFcfCq;ePQJ5{U!s)F!mYGR=215if#+Htjl}<=F;``SDSZ- zZnwBjcNX2YUWz^at7IWM@iUWD)Wr1XxgM$f2zigFCH(GpL}eR%ygj6kvqkmceE9bK z-OtW8`FT;n(YfKd!@yQasd3QLW^ZTSNxRLw`4dUmUYozb=VAIfDwM9h{6VM(Pe8n5 zHCY$!tRnKkOw}+!vg0o9UYk=%hRKD{n7mLW z($Ml;yhXv;Xl@E|s)K@_y^=U7O62n&1bg{DHy$WYgjS%H`Mwz0^9E(KbhLbm#R z=9&#oyn(GlRC6u9FFZmk#|U$3!9x937KfaHZ+ke6LDMatOOa!fNOd4C&+6 zsiR`9=Xz3ZW0`JisrrenfVK+McDp7r0p$!^HO+gBi$Q#@@N(r|w;T=o$Y%s{mOs5= ziwf!UqRb|U4x8NJtygL8)`FjRTOOef70{qAtH zLaoDP(~wW4WnVEmcyZz8^8m*Hw{iz&dz9j`m-Hj1T5seQM6J=x3?P0Zdjwpj_nG-D z`E)oBm(zFcBm(61cI&lJ6x-~M(KFp5YG>-may4l|Lot4~dU&>ac}BV7)QBv?$@Qp2 zF5ay|DsDwz1hrKjr|tl08uF2-Bh*F*LV83>GiOTdplHx~hlIvKPnR#DJ6PqtGT{~M ziF!yCI6Xpn4f2v3IGst*l$iN?m)R}jzNM9iE(|-){Cc->2U87f2sn%*#Y&N!HkQT5 zYw0|$8`i|HN)p|}tbC89380gZcZWF7GW6VR6&&8uLZyIx=u3{l4z~ns2nARgY0iwU zZyYJFSe;Hq$EPf7D#+N6cOq$>^*j=O;^f|PRd>hQ)FyGdB=vK&mWqR-Zj z-!LX;0gQS11PA!W5AQJBZ#abx6JR3b5z#@46&PkjT7b+ioih8SrcK=-UZXb(VJC|~ee;ZFLiugIk_41LiNP0w2d}vsHuuKib zXQB>g4U_JF9@jFE-~$?UaBcqb&bax;VdYvpy<7h0_1Mvl|6gu_qpn&QsoyMFI^2&R zQvcp9P}s)Q(9YE9KkvL<>i_IcmxGa!AQMtlI15&(azYf(RU=JQQ(!@xWrIr6gHI4< zVn~BzMh@D#UR&4Je`vFQY|^bTDzk2SYVx@f_LI`K?wBU=|Gj`^l2)1NY&Olez4gBS zu5&k@h41@wCV1LSm#2|rZ^x=<^{dmTf*yCQIB;m)_R{?BfOVJ8?~zdJ;GfJ*8G6eu#(9267G zET-L+P%$ zrpi>7C9Zx1oLXhRT*L5P?_W9`$IxVFp*C3=#2btU&WachOklg^kmE>Gzejb|XZCku zFAJL-4P`Cff(qhtD0eOPowH{kb@tKNk97tXFLc&++h86yV_FX|vK@46dr>lbpInp> z1nVuBT4_;%vnO#cTwx$1{$(jP4d^8?qlQx;VJ`N z_rkbOf!6Oh5HpN8ymN9nuUdtu!J$0+A4`clr-YV=W)v0OVWP(yI8&%i7s`H?y5Xjt z65HoLl*(uAa&AL{h6G54q!-3Dx2CxLsk+Ah1z9O?Q6KY!x|}vz)%fd|x6;YMs4h~O zhZpM5mx~9H{pmqT#UnPF+tCzfGo8}lq9@1SoA7v51i3e8yO~(mQnY7(ka(mufSg9V zWk*O7A8}_?mJ&lzzlhop-Gy2mIG|z$TH3#gDAW=aP6rk5j>>F@svn`4U62&HSQi}-Dsu0Fzx{-B9Grb)g^)p7jVGL7LS?3n0zl26NsXqR0x;TiQE&9) z$<(Y-Q%ItM=We=TJo5!(oT<@Cg-k`LlV;^ehuQ|nILsMwG!_g0&im>UHnwmOS;|I4 zuN;aL*}d4-^<~7!Un|V$lY$%wL2EM=P0=Nk7*lp>Wv#3~Y?|97mMQYuqBm$KU1+Hc zD2K4-qQ5&3Rc=EEVXLCittRs;NaP5f3~*qh12=@gjQn7uYf#+NT^n_9)0pt|#W~QN zxx;5mc^Ky<7wK|vNNBRk9*2xHx}X5m)mH9TxrIki^L7jM436?X2xsdeR6UeiSc8s} z!iV9i);Fk7i(5W@Cj}D*NNG?qj?Z{)GZd9eYg8Y=Rz>R2$2=fjrIQJ8}(Fc5~`?tZ5g7@`f#irk9 zKP+--2nHE8>V9K|RB*@zG7Qj)cm~J{&J}Q4{aBuHLY|Feue;rYU07P4+(&$E?)F8F zhA8sI%dpSgEvfm^r1+g;tVcOe*b>dFdLXky<(XdYJDhBN692hmZIKWwTX=h-dO^e9 zV%vsTR{R0bUsr!iN|^xlIeJqRw?#hiD+Rj{VJF?gC^8C|Gf;q{Lw44WJxUq8R3AKL zUjgVlBJ>m>yUk2uWZ!6B6PtCMdc__HrZdWZt+XqO-qXj0BqCl9W&W8ZjA!(FAc0f% zjY(uWmj2drOVneJ*|JcFeFgXNBeq6kVSPm_f+B);`Q=6ixsTBYcDEZRo|QzRI;WnA zs>w7~WtDFEL31C~-RnIf(Y~S4^z#bS{OQIA>3-mlQ#cSvZOqv9`wRNt4Dvs`tzB|B zg}~pYK}3`vKP3LI?Eimq$4%<*@;Kjh^k!}=n#n*mHWtgjjK~=ufg{nu*JXjYfpGR* z(PcVQe_EB`{sPC)Fk@%#SYf$V$G_s1ogem5Pdb4wTcAJ!5Q)Z>i>Xo_wn)8poqf%S zKt6Q1rI>1lsQ~L)nt#*9SDeT1Q=HFJojq^MZa+2v{68Jw#egw}mdkGls#SLhb(U{} zLTbQw2H1g1e=7#tMS;c&D4nFLp7gc0%2=eLK+_O*;|ahP2Q4*X6b+h^{Wh*;Ed;SZ z&|`8}3d{O&6+(SfzsE>U*MMaQaVrb!jMZHx09b22eJF-mX4M7lrWbcZuH7{VK zxxsAjTXaE!L?4rZ)`SmbGnA?yb4nww@V=A<5Ld{=HFdR=NCc0 zyPUKpM+RMb;^Hzb-K7TRv9f1xXcEv`$ZUu+oc|o=jGsH$1FtB3W4wwbS?*OkZjYfx zQ*!E7H)(R)Wr_T8f%4{gHgL!JM$}FZ^P6qTm(a1DXU@~KQr=W15$R`pL!(f= zg60g@{9kjOtCUZZP|ZC9VizwTW+MkED7(KzuE*~&8=PzwH4w!*Z`5pcV*`pXStIXug1-s~6TfMfpJ%cqaA6PxJ zj-Y{DzSKN_;cBSeckYu*a?hTjJbz8|!vE52q#Vc&)4|JNLbf?fpLCt*UvoL2v{)5P zx&gH^c1`StrHt|}4j17{GQv<>`xV^6N8AVM%yXxCKllDuVLmwp;yNg`3|(%tUwm)>bD0owZ1E)M$_Ry-%PW~E3zfGwFcV& zZ0zF88@54dV)2$y>pE_s=U*Q-J@?29=*vDiim=N1jVs6zmV~>o>TNn4u<{5WZNd4a zz-kx&6V*`w!-d-)Hl&V@bp63L4LWem`PB{2qy{| zDT+hi4l{!xCYRujT}Z}qwHrDsF7Mr3d(0-hh>E~+jO&8M*Cs#E#XHl$qVa%k&br)s(|RlbBo%1!d%-#vK$lz2ML z3LKcvhJZVO=?miEx&vpW4sy!edp)4>%joZip09r>_<(o4aN`aCFV@~Ey7Kth_D#BD zc5K_WZQHi(q+_huwr$(CZQDr)H~(?=x#OIBANPJ*?`!<3Mt!U1{7gRcy&QMpdiSWw zAq%od)%t&|S6PRp@m8`-kT%Bms6T?IOp<~RRojHKcc809eat)F&uo&1saK-zN%Br_ z-@v#=hw8xelC*-(CRxpijnhQ+!SU+-ai^iAtV}MssD|4bh0BH8ANf83>=w2KNWgK- z-W!N-v>L*^d_qdjD;;+xzN7*jTG+k;;na#S&CRdA+7^Ju^$eLtp-%CxwiUx~OL?8% zz6O*~y8;60dP+oXy*{!gE8KrW;&kIDE8DPidAyx*8UHj=dV#uhihBf5UkWN`sSep> zorNYx>505xKGBaZStP3`xHFTJHb*PN=6Dv-Fcd@vL8o~ZyU01vTtRzq$LxOJcvQ)* z5d_8y#2C{aE4wK9qInR%NA-{I^Yt$95 zBM{L=2q)cKKmVfiFOn?mjArK@o)dih9hq&%AAA~WE=#?xhWUvI2bk?-Y{WdXk0>ry z04R^K*4O+I9w804&w6ca{O=}VtyYCdfOdrjLsiq5En#u9`tW-BJHXeJQH>q^ZuAlOoyG7trr znxY+%wCPgS>-1^sPD6|nbO%+YJtc34BulG8-IDN)iJrUzNa1+%?SH@9|L~D+`o}Ox zR8=veGN=y3EBLqWaX)CPup8^ec{h9A>6pN|MU3PQAhHem_@v&Ps1r}x);fC`{p!@I z#h^A4Mz_)kn_a_88`Y;1@i`%GN=miC7s-LkMEEbYIXp8R{#sMj8^8VgKNK1NnKPKZ zng6o?xbl>KsK;{u%{k+L0W<_XBy5dM-2Y3Ep`sv%^~0cBX61F_Kmw0YijSRVg=}Wf zhAJdxXa!wqv^9_0hkz{St(*ZkmHD`>Ymx1dJ<{DGm3JyjMj{tB&wR=#ENOTXGslV- za&Jz$+a7P&nVL=eeLvj812wdo8KR3I5vAf1TMY|?HHZJeV0tV4Igr4Ll~PyUlTr1G zYh(LuY_=KV26cXuMAez=kMXbds=+wma>7^x2-;3Pt0@zxQg-ykl|PF0*?W#X_eX3? z2o8U5nw73bf zHGbxjc-+Q5W+KZKRs_LZMeIPfB2#g()KFw6Lol}#rJ>7ygAUZRDec#Qvz?sVl9>bA z_a&W!N+ivI;%XEo*oBT@Y9Y!5cv1q^MkkQn?$Ar;3=-y_+qenMRaS1-@VW@+YVR1ez81H)$5*dtp0(SI8=zO% z+bPNfbt@xPqfxH8I7_nMB?MEdHoYbjsAlHcep~NxEi#wgU?hLL5m9^p3aH9jgQ7Ry z?iLA&k!=?ZQI;wtw_r%&JE~fCE`V#fehxjJ2NBJ9?=@5BysE|}$SdI(3*>i~NslUk zp6$6({7R+5{5!987kY7*{hE0HkM`W=+8tjcGJ8<}cg}o?Gf1L{ob-?Lp$N%%Au<8G zK=0wutS}*X5O?*)c*s7yPy$oj2uP?^I(aFkA0;wj8A6RHNF`#i&eQx)bO#G&ipP^AtitD;;gBJ$nk`fo)towp#WnmVAC;fWPe)`%Z^=M8(4!ZODh1 z?Zv?Qnt+9SHBch%B!q@BVqH98ZeSL7`kUh`^6x&lbG>qOvS&{HVt|yhdT^MzX7HDP zjfF~?M-C3M&d`bR5c!Wdb&u0v3%|yHmC9Iyp+UNnjA$GBQBf_ER{AqoIxZWRmfLG9 z`Vd(6TwG{j&V%6)&N$oMoac$||9%Yg1)S0N{yYQ{ng83M8zH-&;diyTJDr(AB<3X7eP39tKh+Fy{6;gdT;gno!zi~ zsE6B~XNpmKONn(?#oQq8i+Zc!#k}tgyhPX|b=&Rr(0ug9;O&d~CLWA%zN!;+#9US zzf7|bD8*!HQg5#~ZC5L@s7LkDOzujI1SQc%y&p= zWr-S!wqqdvb^^?(GBk*-6~#43?&PYMJQ*n?~2Yd1_?ec`> zpO3j@O)Tli+I5WCr%<-xgPehT)57!!kS@ZAeKcH3ar8x?LUr;l)5gpgkuR9f!BwR9*~aMh8dN>K}J z5S?S{VooKw7LgH+&(o!Lfagb7v312f}rPriNEll%F)H^0NiE!W`9t-PYMSw^et7(S-Sv8|s5JXL`!n|k(9 z`dh5IW)3v?PQ7p{2vd&%%#4%I6N{jkj$>?BL(uO!!eU{rN#Uq$_WCMd%?PpGQKz&+ z4iq_r>AB%B($84+Tn7~}f*mHFkeHeGei=)Kx+Z{?II>S+=IA5`Z{fc_Bs7xW9h|1d zMYl=kkQ%T|T2R=t{8>;f-NN7KPfl zju<=EoJo-sKvHrk)GQs>AWCzJr(Z;4Ho?J)D8A09GEMT8ojHnfr_3#O%IuLvbD~h+ ziR;sxSrbEf;#r0GQz9*e0?Z|5A}ez3Pol6R=sEnhE_Z6Xmx)1)}k z5eIDzS#HZ@Ttlz7(yEUklnKjs`GCsqP9Ttu2AO z6>78fMktlMTCbdLy&2=S-U{uuu?lcwtd*NG6ymrz6sZa)Hq0BGCQxYBrk+r~I(k<( zm>`+Ao+$FJ^-80mGD#w#X>J@pYSt#GbW4tb=Ul7TT({OJV5?PKK66!Duh(6tS<{~o z^$67e8oOFVylFb3?An%@$8R;KR%~yfx&?(TvbEBxXKW;yx0zU~UyF~W(OPuqcYG_| zGHJD}ATmCz%T%88g|baSX}DbPCVz?^?1$1CQzk?SBs)W{4z ztgIu`nEIS!6PXuNLSa>GB1?i^H0@y3uuDgY#zo92F78Q< ztd!TlTAaPB@HL$|Y2>(TYHB4%eQC`>vJT7Cz+zq0jU&cwU(2(DHGeJ6;C)E@#02BTa zEiDk5yAgIl)>3DBY<@0soGfk60g`SPvnN)G0`0%MwuL&pH@5fCqs~M)ykLfrtz~_& z(ok}J9&NEDbtz9}PuM>S7Z+omY+#KBD&ftZ)t@|7_$Qp>^VYQ2U=+^^ckw8RHG=wQ zKozZoi2A_7OP45z(#d5)c)e7}@0Fy2o=VcNxuEIcCJ2FIcwZ^kry^g%)84^MyMbt- z8?0vc_>TTK1hxPc;CJ8h$Kdn$PZR}?%DezWAqYl2i&^9#(La(ww6^9M`%OV8ovh?# zdQl6HAd{VM3F;Dfd&)Yc>da~z2_{HC%5{t)JP2CcgE16Hjrv0g3v43?)_9m=ify<0 z8nSw7)31KhwN-sX;jYKov&)n|fS_rybjPZ}-k!}Fjo1ySgboU}rWEufM_W>1IZj+{ zAiB&QuL%s&eSWg z{^IdCh-bq%TLqTbXVd9m(|ZwXTO!zE&#BgrMhzl;7)o1IzL4mJiN4s7L{;Fs4*xwV zc4lG?`d;nzqKX&djTwtpyRT#hCRv{)rAh&yz27X7bBnCS%?m8mr)J%#H}?1s}ma~>vy3BsaDt)IAm~1?)Irf zUu93!OIKL9H4`9_&sxeG?2oO)jTpZ64U&H`e9p(f>nlc=Jvd6QnF3rhhcuI-7_`D9 zKk27GDMZZr2$&w>&_CSeJ22{DTI#-yI%KceAYbjs7())YJx1>sCf~k)p1^ANh$~VU ztfOlX6U@$|9;bl-ikUQoYz8B;_eiPrupAnt5{&G^D; ztWoZT^@P!JZVRMM@%xjpa5W-io#!YYIjlvLKa)K523iEK7P>9BT^d#fzG(x$Q@`j? zf=3*h)o<0qV9#@dTg5$lxwAxJTE(Lc>poBnZtzLZYGpxm^Ax*C`KyZ*A&Ijf9N9_& zcgNF#SBF)2@cyp& zZ1VaQY!gb)uv-%I4!6(jayn4DE8KAm;eGXDpxDbBw(zqjdTD|q>Qx)^-ycY&b`E1| zbSW;>=?YS!e1ZQOPva2TUERZ@-Aim}9ZVY|X>UHJpLXq2uUofpe8i3!4%!$T)b->$ zMH_Nwg6+mad3+sf1wPpo%?! z+z$0ClJ#-`-=6Wq>&<$l^8f8&=p16u3ixtGnQ7S!iea{!sVKj1Ct7}@Tds?e&bLXjM%KkS zf6Y_ci?Z%(+#XC$UGAwpVyw~;O>W+{-j~+0%QL2v`?U0Av*GA)*%#?VS#fG%_Z7m@ zmP^@=F1cmZT#(a%pRb=k;6{?ZrI$1PMfw?P;7r7Vb!c!E zr>k+B#>aLSGn|5qCzNn@?SW#3GbCIhU}HOdi2C!7lmIQO;Pov&Lpm=w!5gegzVu@r zXwkS>%%p3jxKJ0Tp9{I`@Ii4yzZ^^g)xC5&mkf4#`tWsL!t!c!1T~`laJ0DPa7pZLbT-3T~cENN>EWONMGak#kFmV%_rzT`K`W2|%q zvbtd?rx&)En7Wvmxi}?jvH{&VWLDz~5n&H0uTT1-e5th=L)bj;XGLpl@|_$dEpYo) z>Z(W)o0low-fks?gk@$PmQ71ZO!h>u@=jT$fx-c4q?6kcDTO@W zUHnK9(h{bAi>&#~GyM``bgWY}Ieg-I`{Wei=GtAz+5cO_MEWvcn)!DM znB=3vWT<~vAbwey1$mW<^iQVH62))E+x=Z(!{Qi`BWmmc77?ou_kr=d-6cr3mYKbV;U-Zk1%84HH%0nIS6RT77 zDFHsI1J!g}Ch_b!I#gRGxa@(gmnxu^ZAE%0`ym1|u@lz=&b)rYF|Q0n_YB1sBV#wd zg17%DfRD@yf#h}-KQiH7h=sl=+SlkH$a@I6d8huqv0R(9e{uuwYPlyj_yKkfI6feI zh@?NV4PH7IcR@9x&`f@Rk!#(WwV~3D!F`Bq2c(#=>BjM(CvJ#i@lAHR_p}~L?I(*3 z5%D3^d?MRvHO7om?NfmT*B z2&XG346v&wp&io<(C1#~1SLtVdDK)H)I9td6q@I5=+hEIp96w>g)>S93}+`_A5Yua zjdo4}+-|l85c<62Jn4e-nMvw#1%3D;64zF^exW}+je9(f*k`XvKC^I}!tV+)m9Qec za5#sI6?A9O9fL$5Q%O%OA33?4X$Ss!!2U_AO3LK>8}j!C0&@f2&>yUebP>%1=`Y)wc_I+)E6cj6rQl5->v3AQjV#!KBYx$i33zfr=v&= z3bIDG%JkNxac$YrsvN&FMq7;-F***VH}R8TVkyvL8|=d}KQ0(iVkX+$<6U~0?m0uA zJzy>#Fy>WYw$2m@ml#DXS1Xdz6v?g}{e_9iSH@x1`r@`2rEKFo1A48`QlO7;(}>_F zv^|86$J~s&Kh!Y~AuSTkO!7L(0f*!lfTfVWq|pJGBlx1VsXJzB_al`1YMIC9aF9SR z^laMf6EhG_6E>#9ja55+gB0zU7;Y-e|$& z#hzUx>$jqyrg5^d^$7Kck3Tun^%*AQ91-!-#{V*Nsc9&9LXMp~KF}$%T8sJ@s24N% zUT_9%G@z6w?7R393c7B{7_)}SyOjo5kSaamIH)Zz9FLbcP@H6uz2r($d}QaRp>1-& zP85C4gejEVdRtVEx zy}rQnPN^HX!l$2q5->jg?bR)(@y(lTxZ*|Bit6@AqY;vzkmgb~GgNM4W&6BUo>-|tRvn*ro8*OWV-}n6K);{p9%HXsY zBdQNuL^?>ei?Y)!iAx~Vp|*)?iC(NTY4S=81pgcj_465gjQF73(9J(}kFWPnC+HKl{z_t-*Xlu4|8Gv&O1hiYl5Z)$nu_9Bis95?E6A*P&K8 zmBu_AimW&;;D(x_s*5UlA1_9MJ>pox&hP(ni|jXNJD(sZ7SW-%Kj^%nQX$Rbtlwg) z0t&er4^348l5VQEx_HdaC$jnbLXvJF;?Z-oLXO!2Z9Xt3T&Zkf9A|`dyp`Dvjk^@| zlOqq5-XbJ{m4TN%Y%G2nrb&Jw$S~vFH2=Qd>a~3fp9)JeDMUwr#)l~hLiHiLjWzYY z{y(gfxNnzK=%1^E@{a=Ize)D~KNg-&&W$ za>4>Z*aSeX8bvB%SWfK8wgqQm-?4FNtCBrHmD6iwhi`7!`8+Ol;{%NZ|1Avynl6u= z;e7J=8G6Gv>HYEb%=1@bQ#uy~<@x?lnATHE{D(#61Www@lg|$wuy%2^ZLMk+&_MPO~2c_TelqNY26J20! z_bh9I$BNSmr7q1V2R8&RXy?zR(2{1|H#m{$5DqX+(iGjg2|9x8==7`stLp_!G47R=jDSAAVMk_Ua!x zd1O$!Q!PU{W&IiDEA0p4YsB&91*+^pACxL7u-X#)l&0~uu`-6JE9l4H98eOId!C4F z^fR^YqipC;3DfBVTlH<~+9b5jpVq) z!qF+;LWfLjtlX3j5L5cnuGE4DW{nGx98pd72&42^5yj7SF~A`hvjBh?e5?b6)INSx z%)v7wTri7ZQ6s&D=pJ?pj1VlO8}U9fy4Ry$XSU(-{{WW%$EBTsP?0+W3k39w?0=;C z{_D)}zYEdvzp76iT3c%g<2xtzFy!z)qR2+Gys2F>j~OYc8n`LZUnI`Z-?Cy_rysNi zTA~wjwcN?p>HPTk*r|Z`JcIMX32Lakg44z6W~%FC^Z0oCx~r_9{+k05Skn@6Nbjue zY!$-o(#!VbNA#Tqgx=O-+b-RPp`qEgQL4vY zzHLQASv?v;a%V)7+neCk4&TDee$Gdn8BH@gnp9)vCIj`+Wu-HJE&oerK^p(G7ltC2 z`pYnZUza)AI+8SAl-aua0?~d&U4hCY;BSTVLa_-JNTy4j>@|&feZHxaom{9z3kD9t z^lOHp0a1NlEe(gP9B0CbCZzvDx}mFE?Led}=zxyvENhhP0-US0M7n_@G^PSkJ&6HH zK%IMw&EU+@3;IT9Z*zQc7R2&UewONdghRq*`dpBO8Z@@S;DIZ(tgA!=fhn8o5-Fmp zTjNM1>4jljm_SlAsyX>o{8Rg@SByoI=RQIMi^O=m_7fxKa8}sUxC0dEf$zqYtprM(~L_{Lu z#TP8)(6@>kF^a<1D7wUVtc;~e?HyGYnIIsRU1w87**R=|6|ORl6CCOh1rILMSr-}19!U$8?vF}nmxUZv1@C9B=sOIX*VZ+uYE8kG5Bo$-V+xl{ z=9-Kz8QM>cMdW5)waU&hCU}2gnO?S(E$ZYHOI`DBM2bb)V@9s^83j0y36B$3yjNC- ztGDDUBnYs7J~pu_Vs?;{X7ArBTZ2MPEt=FXUly&zqx$E}Eb&q;XPC>7&9)`bMbO;U zP2}4+qAyPhF6QuST$qWvDzZy)X24@QF&S6wVf_f__Ovj&rv^QD6UVSxI-CQRWt>Hx z5<8b1Thbzj5*l;3v)n_YTo6Jm15p^*n#BMf_q)= zkcnmlsgb7+z40#ul~&889}IQv2nK1(qyTQN+J##j*qx8j zUT?dGFW*=gkAN7~dYa|PTFnK!TvF%A)TsdBZFgEX@vArX3?K@51HZIh_{2YgP&GXP z3fO%Bkcc!F_9veKZOv#o_}TYtn;z0LF=jB?`S^w^EN zjwM(0s>%YYe=|B!UcCCkQYGG&xTn_d`#Yg-Z*}zU(9B)lRsE?jyPB;#&k+@@ntY!Gug=5RWkCj zqM%VAPdRe)_1RXkC$6Ginf77)xrD?ONH&dD5ze`)jBwP3WPJ(XY~pIXz$h67 zP*E1HEJeA>PNkI1X_JG$EuAJCkzh^Z8#8dh_;$QeC{n7qyfA37c^-T}ts%q^@gk{u zF)N$&)jgUhfgX3AMgT(6yS}(Q-i9CxEbuIF5l^G?j+1^o-JD*_p2 zHv=Jg1Ep$u*3zWZ5NFfLzSi=`Dhz!~IHAKr$VSPFM=GbXkr&_Oy`8+vLXbE@-4%{Q z-;u{Xb@EcPTa?y1b%0ep zF^i*VquwB&Tt!X;{tTz=MZR6~mW{Qgd5Lvpsm6-Eq^P;7%Gal%SE7OVFaM178KcNr z!%ZS7+{TO+0anOAj~r7Priu)V`M$l5s`KkRV@QP@YfTJo$Q z3eC3+?BkNSLem51y_U_s>}#~99UyJ&zuwppn=D0f1~3iJ`vaFoRNbe~(rrPT0N`0A9RXCrypG<~N0Yjvhiw7{S z;TKOPP!s7bVsFdj0u$96TN7Y#N<6<{2({r5(UX0mk`F>*hY`RImc$M$LF`sKP#}ByNmT{yo zBg>k~aqhWh=EGbJvNBT)tg~a5horD4XX|AsG0o|X$lkA%O@J$;YOa&=u%sB- zIR)P*OlUM@!g<){IfglHR#KIcmSzV=pvV`AC>IBuD=TKHBvz+`@npwWiegR8RZFXi zYM>%G&2z(DKT;$dksC#0lnbPZkr&K@5h*)?m?(RIcr0q3Pw3bbmNFNLXtM`_pQPLf z&#At?-q{5|>^Yv-Vzn<`#U9s-?VXO~Wl}juTgWIUQ4JQ#s~=Ij+73P6$6Apc2W=wC zSU7D3V{+UFH9i&!=aKD76x`CUNfpqu<$^kn0QoKVo=%)04LK5(U@oy6y~a}Uiw>k- z{6*HF^&AsX%Im#?Hg?Otj9#z5P};f<6&Y3Gy_RuMe!!N@vh89Oo?D~d4DJ!| z9=ihrMh52K5lZP$hpC5?wl=eFd zs;;I?*%OZY6(7M$AD2@;fJXQ@Sa?fBczemmw|&FyKI+~`l_70&I7zEaW$%?C z$u(jH1OBpMhxt&~zV#*K-sDp$kxokTd17`S)? zUf>SQ)95L|9i)>IkVa_nh8;MJn5uP3*VQknU11GOMs?!GJ=0+vQL2I0q|A8Wk)q8Y zZm`gOT)5YhDS>rOi|(K&N9gKcdh%0zr=-6ryS}kJA6p)Gt)QwdD7?{+TG+ z^UvcRFk({5JrBLT6SJLSbyM#=AbENs8wJN7mO9(%j4t*k8TY%RyX8v%4a60@a`coX zq?FKY7L8)`dBdtj-cP^WR_sZ_<`|3V)~bx(+T8_wC$=Y5?|;ixY@4Ak)Mq<}2`Ugq zp#L8Fm=?MIKWTLTQI*OHA2F|uPvv+fu6mCfp?d9CO=N-0tIG# zp381FyB+VF4ZEJKpSTAfuv;KmR8(5Cxc(%V>izWK3yngDf&Rqc3{+c&!jr;y(`IAJ&H)$v%<4GZU24znj)qO-@zG@DcI8!Laq%H}Tp;uT`z?DnvtTzvmEngZ zo3BhRTs51L^;OjBa8c9q`l{A5%X5!Uvk8Cg{xsQ&3hjdgb}LQhqKT+fETB7&{OqcK zI#&@S828!S{QuHoN#FLu9eMa-%ex3ClXn{JH$-tku`rBnqzlaVqN6%e4b<6LS+Gjz zhih5Qu^0}0)w1&3LDn!-!6(AMs8-bci4%i!Y2CQ8)omF%xhg08Cd*u}r=D99(4tmJ zNThs1MeG#g`t&|r3UBHMg?K!B2v>qBY(kEkH~NLIF1p~(9?A7ycRUDyG#Z>EuVBcQ zt!7ZEmhP28LPrP%M@-Y<6a)*ASR~LevQ^0_oX8m?gck7nww2=l%DgzM8`CjJw{6+= zLO3F8oL;y)CAA|VJN@W5dGX)CRL^M?$GXfXuj-sR2T zz@GrZyPuR()BpKTUD(3O$j;To(ZpE!KWP(=9{+25vZS`5gr$Q1on;*lJC^*Dz`m64 zXc0_Yy9uRCd4y_B{|AObvvFO<5khK3#?&qEmhTnq^$_sh|N9E!iSeMZ=1Xk4^uUdk z%9N4`u@`*ckn6Az z(6Bf9r}(%!1W~{X$iHm-G6>W=Uvvv<7JUp111k|x)nQ7ZS@nfTn`!!VS}hWmnJL(& zT7xpwm55En2QN6fM1b~^^wesDi&m9+^3+me15u3mv#I50LXr{ z?fEqFKuedIfP?Cd+0uoU(d|qe%)n8j?fuc!%){omg-0Me&6%S>L7`?lyO(rNL)iw* z)I+-t`HejQ&1sX7#VSTXB8{}=7-p)OBm7VfvRs=&L(?Q-83Djo=Nzil%&Eo-Xczj! zLUh64^|cotzn#B$kUu#}#J-Qe(T|<%SjYil0)Ik1aJ);Pnwu)18?=D`|p@NX; z#MH2;G9y|bZ&EdnQM}9N0>+?99^ZCmb{GFQpN-?R0@~hU3m5qT??BBr0AN4If#Fz_ zZ09B(Yak$sUXOMY9MPe<-3;X|fY#FR2~q|;Ck>@LZ~+CD8?luhKxM9Ek8%Z7otI@$ zp51wO&{?MYF#amvC+423kAnw&4;dBKlfiDn**Qo93V&A?FcY*%#2qV8drv+}PPw}p ztDsm5sUyJVX>85F{a(YBly|mNF--5XT`^hfI2Y_%!|0-X(lbp4=E0FRz9nUf(Jsd_ zEl6_h{v)4zIfPU{!3V^rA&IJo4JVw0<>xUR&zRhhSzOah7OGj`aBUo!m={4P9)q=% z)&maJdJTR^JM@Oh8NCRWWtJ-eayb1Dwc6;(xh3L z8m6s2aNiSX8%OQ{-IM&sa`L&9W2C`Q(Zmj2rxhS?!&v`4&MX+tH;bs@Y@vuD_`Mhs zIE1h#Ji^z+S6=5oHbgYyS+`O;=CSQ_Tn7&S zzMG9w&Ak*1YwijY_X(m6aixg1rSNZEj8U)vawBd6yJNO(eKRjwIm~d+kZ&qT`Fe*? z%QOr_NQ%V|H+?1QIVg|(8ECr6cgOc1 zIc|L?s8_D?g=pzK52Zg=)w>*K5ODQr{Sk+QXEip@R-@p_--IyiYxd>*-)&G^F+W)1 z=VBxF6XT%&Ki>u=oJ8#$-3%O!B~1VK@kUDNKgJSKP4!0VpxauBOz>vNxZY>Ogir=` zxVXSBVeWB#IAz*`C2?G>bd{;i%G(2z;@!_4MrP zvyl~^g)YA?&#zy-u$3I>{L_888jPvU3`>xMoT;?C32*$1i-AGkkA+!{ww&#;juKdILs< zBKq^S0_E^rG-ExgU+)1Pgk@bCA>dmtQ?YA_Dnkdw#e=>cY&A$itVS9SlrkuT1RmS7 z`P9EDR}9f?>E&WGr)tZ7*HO#VjmQD{PW3u71i|Z2@3Rif`*oY5d2H6*WdTUMZ}R_k zu=?89MS7V%`$}rkUJta??eB{r>v#vn*i62 zc};8xy2IpE*LlB&>17ksz-+MiNUoUYKBS?~_zXTHvLF4|dV-of|HHQNj4^J00)JO@ z50{39yOV|foS95>;m4hqSad=LP0bI}Q#_>Zo1TNnkd>Fl7PTy(?|^;{vX7j9D|wBK z^_Eoxw|KFOT&<;rp+T4rXPxKZltY-3o*{?_IgGdAr`T2t+7$JWrq|q}8Gqo8 zdAU5@ z%+pGXiYp4Qm#*@-z6WbTQg$!uz~gJSO9C+ ze^dIZBkJKqtsT^Id!#z-fF-21e(U;?9pSdB54DXEsAW&pvoZX6V;JPNk&AV+H_^qw zj@II|;j?+<+wGm>aJkEYw~N5lR+U8ue{X`O=gNe`SK9~g0MGXoi@-ftimU2S1AEL= zl5vZ0?P5jU85F}P!WYpua_fLqXaEksK4NEQP`V&W)Peq92m5j$=e|t#dIeW}D52Y{ zM9Div?G-{dhPNdLXCFoj&Ax=I+P?i+OiO;rG|%`CVaz-(Dzu>UmH3YhDB%0r8Y0 z__+_3wy&B{)x?d<`^KL}$(ofTx(D{(z-mAQ&5ZJU4|=DMY|5;J>eG&1TYVT1lH08$ z5XFpofzSj7-5VF>mNwN+Z&q0@xRw&xHx+K4$?TuDzHlt*0alwq4tw4?J!PfSM>f>u zc8_RpI@4e&J*Cw&r{!eUBC<6L3#j(s5#BU1zGf4c?Q+i@w2vKuw0^mzlP5Oz;9I=s zjpU2$I0Rc;yZ2yQQ8p^PH|xvCs4XoN8p1p^A!A- z-#yj-itagThIfozJakyDwEn7YBc2DU(3sh`)b4C1R@_|nR12ec>PDTfZ`>|lSw>Xt z84|lYt|ZX^h9S&vX44P~W{t+ZSfR0R7Qa{dPZF;3hw{*jIKVQDYg)e|C;6#=uAGM% zwMF@0fS~642_2!Y&2Wa4*xX82(qP!HfZQD zF;(VixJqCfQA_)WeL;U}S$fy>e!=l4Jqs5Ra_b_}E3#uwJ`zZ*xmZ8kf$AvxFnnG4 zBO@XwA)UFs3w8d~SR+(qdm6OjgduSktPY zW@$tI+J@h~HKqwB4x9(nz`u>NyiX)BfMh#Fq}sH^4@Yc7(r#7_NBiKOsPP1cB)kAG zv{xpJ8%kF^Q(E*F2{kic$Ifj7a-^g?4^K*SHXjN5_fD$4qnxfm=kcQ9P1)#j2tD4_6@1DA z=cE7;0N}#X08-vxZET}Oc78m~*habWM36CE-DW9y-bR3&a?6uL5v9nZnl<8208z(Lcslky;l{UIk2~C86gP;$Z*>k6+dD^sI<#8VUy$5VGv{DCA61oXTIjz=l$})IK z)iv@vz-fLkZXqQxGuOuXq4iN-q&&bjZ(NTz#3x!nHGbr1a~CS1A57@UxTcvym{JR{ zgp;>2Yz4f))@^w6nBZO(wiBpkZ$V0T9qNhZ zYa6-5W%P*8QP5pjK6PjbviKaxWeQe`mCk|6%!GRbC!EV0gHZkmjrdl+)1&nDKYjJ< zKyxV1f1Q;lQ}TC*lRf-Jh_ye1)8WS5x_KBhw&>T-df>?+B&+4!M~P=wHO-rL#?g(n z9eMo6U&5OsixxMa7)E^mA;rGclp0sC*26puGd1|hSbGq|LPL)*+biN({To2~tfwZL z5$75kNiGh1W3&iz91X@cKtqW;e@peDIW&NYi;xS6OsbN~Vt_!|e@{@%dOip!MpIQ8 zH18)hRLQd-lpVAp6d<-FlpwacEfyCb=deh&x+VV*7ZT3v^9>L#ueBnSfms-|&$BWN zLN5zfFk}{7`;!O{ff6{Ncx(k%#AqOVSFb|gfPRb~3+SBG3K%*~X9BwUh z7^V%Y>#rsOK8Oyx9niw!kd9sv&dnf;^kxqrg&K61L5_e-C*PkC?v_R@sW7Z3Ee>O1 zR-i7nG{h{6XIDakLx{0I&g}{yEe13&J2a=}g{OIQh^?w9d!Guy(TnAL$;t4QVJo(r3tx)-&^igWl$}PM^TvsUtTzsJ!HWLYCi{= z*0<%pWSs_zn#H~)YnIg@hH?-#n-NJLYcrTOtjYgF+dD-`7IoXYnU$H9HY07@wr$(C zZQHhO+cqn0+p0SGx3lkQXSe&f?|oU1u_9XZHTzs+j`4NWs7bcfF3spl8%Yx*)8MV? zeoVcpGJ>Vk=Vp`I0+=9twbBMa0)?A06IMB~g~CWnW_#@S=`;16U6bQ3zU}g`%mG*C zTWxw}WEP7iqEQFivKBQqL4xg9`HIuuf)s z*0$h#{1G;Fl^3%^-Fj^OhcdX5%of?rDWES-o~1d7fLKz(J$t9L@S?M&*7N1PXDJo< z&s;>KXK=$eH+89FS6HNE;j+Xb;w;88fON2VAeWdB1-`aWgdBrEC43L#YX@sE-c}6O zeqsSc4$qyzU*1`pcjc2CH*HG{sy-{6JYnRrvp%$qC+T4n=W%BIeq%>#h;rf{DOBXR z2`w$9jOcB6)@F zqv4f6YFtFmWM-N zLP0YV5{d}(PVnt!@cyeVSDWN5a6a)S^V0h;J#d>ys&lS0jyAOG2_{(qwC9~acw6MI z$ZF3*;$0g`j!amHs=48i{kx}S6{{=>SZFdqsPz6D_B5&@rklv`OW>zZct>RrT&zSO zk03DO-w9V5ukgSJHL@HLRVD|&Pwb?&kXYuDoFTiQpv-Y#$m5inifVNwO@^AT$ju?~ zxkLfjL)*G+Us()%&{nVNf&07vx7My6rWKFna4#+C^bAnf!9YFZ(>8S10aTlwuku*t z!GV&Bq1<`lL!w8OWMySlDower_RwxpM<9>H^>hG7NYQN31{kq$!xTg_#Xie(GHEks z)b5HjDmul(pH=>P5WN5xW=&S7zAU$sKXG6OXb zI(9Y)K-rbab?ODm@*pD=(lP{Jy#%GRmhaYh25nT!<_pZJa&112ppt z&e7IBRNt54yOD&PZ&x}wdK%slx$j>xV3H+YE3 zk8R4uqgYpuUR{PuHm1LeLc!&fgDeBY$=3(v9dXg?`ZtD`=hX2FjvdK@uz;G7yI!BW ze*yD@0|I(Pl%V);P4|~SKAg<-qS?i5JR^s{o6~9|UkgSm$B>dS;gR5t z2Vm`q?)(`1ziJS4>`KZAJBhYu-amox2>APLoLk06rQ36AGZ%n+!QIC9-3HMvM1t-O zEn^B=TV)a8mfpk!&VMEOiw$%mD=TrOCmS{~68Z6|r|$F0a}8Y7pQXx%FVN`d6O|~t zv_KmsAjles6X8KPz*X7K+y=kZ&LzoSTrW2sILsT!5VYLpj z214Z{-2`?;fHl*%hvCQ1_tfh!7Q)^HeMSHm?R&rRUIB%izzl-aCy@gn(fPSrGWG=~ zcu9h7)Ic|BCnRtBvOfOtE7sx$?B@@PobDO$Uy)9$qP~>h38CT&T8h0t(f1p$3x%}T z0l_bPd6m@T0%Q3hp(2fg4pNv+-ue?Op%X)!p8fJw9F$W5JM6+2;cuwOp9h+DHEghW z?$K9$iN5t;hN~wlyAEE0^4dc@BqE0*ng`*|x95Y=O6B&(JHw$D+(1Sg2MsT=f*cm2 zhz?}L0BI_($rhFu@H0hTI_<|aoYhPRM;A;%8IDHC!X*;m5B^Rz?B{gP{sU^D35f$r z5nPA%B0x678bI%iXiTpI4H=;klQ_UhzRg?{qD}^oSYt1iMW!Df!b66C4f7~RK`1mn zIEFgVya>FX_D^suIm`=9Pyu^4IC-vTpB6bdeC;6W0UXyqApy6QcZ#TS=|8dF7_nuj zqHA5B1j>rj#WswEUpKOd@@`(W&Nt2A5-DWn`nQ`%`pS?Qvm0JB$9i5gR|_av zt|i0JC!iQir)7t=_%=!?PAs#^p`T4C9y^!NiKo-IU#h)!vJJ%U^b9|q zAvU2S7KC0OfImmTUxH0s*EArt_IHvHQ;i>}4UQ_nr6urbPxjQ7l~e0ac{=^w9+^G9 zVywItPi_}{3h`(~JPR*g$4k=Zf^jp9u^w1akIJNvB^%h~fVmY^Vo#?!;HnMtddSGA zy*dad^kqOpJU%bTL>rLTk6cXZTJ2A^Pq8@Y%$?;vtjUfDy$7fWVRAs>h6Wc;n-jtM zO2$ty|BK`+YF8utZe|~!k5TxoQ`nT0YzO`9my0b<&9nQPuWW<4@UP|@n1F+DAGj_) zd9G>$l&^#`$-E}oKols+BBkS=+7qjUWnVMC1cOyyfSViWZ7sx(4q|r~K5wuQ`o6x` z1o)+axbl999ll&hLbw>dSV-FWEutpJdpT$^T+svri6~&6>dtZ;vZkynwpK?3+^`KrD-E$EYuwTK3aYAknuLs1BcPOPTcN+zJRIlZ;k*#|Mj9O zm1_j57i(6RHn&?!@7T>j+!)e}g$Bh%N`Ic=kTCNV_#yg2&NOT@V2)Ws#!n~lMd*n> zZT>{JL^%um5Zhv3+(lwOi7&%Mj?0mE;--*zN$f3Aq#2U#I%H!~?xp>;0iF9n9mdQU4EE;xO;jWDo&5oX`eF zxO8~n#T9I%p<8hnyMavtKGq2NCc;w(dscK&&_Ir z22Xc$bd&@Ms*yk82kc&3uKNGxFr4 zWET<9yb^MYM&o2VU=p1XIntm4iMG(6lP@=A7`-v zsB~pLpA9n(>pMIXwa?_!E6Fs#fXobO>IfJk=5El#JrhUqI(gE2${%ijy}xj8d~i?n z@RqpYa}s~hotI?d4uQcxcoX2;M9UsA%jdo$@*T3ZJ2OWxzW}}jsSk|5PM*rU-L!jH0=K1gsxlWhrx zaii*)VJp7a&P$T)a+%_^G27ZO_eXZkjUdH7Oy(wd2q;qB9!YyR#f$sWvJ-F>Kf}~71A?gwlG5yH<4}@V~Fv6{LGv-nS z-jZiFUtSLdE{u(t;+i4<6JoUCiQv(mbR3zvG zgo%>G)mC(R7tU3u$T?)U(%6)&f=y^#)-a$R+c0(MOtom}EytK-HT=;!?ClN<7jq~w zPtsMYO#vmV4B%?)^;+IOdGq$H}`-v?O7}a>*>>W2bB$g7vtsavojm;k{STV4hvd9XTb{elNIOS7sx>h zLi&*6Pzl9JjBy51U)mLKkYYgp3!K}(CDsME_~tV<-4(a}o2QtUC2{tzkd?~hIcxl+ zHG!8;Tw*NkXx;{e+-h91kI?5Y4Aj1rXO&2ZM(L4#Fw*3k!T-h0w}%f+hd&BslVIaFbYOo|w+r z#ijO!ZZ?r2aw^;xp!KuVQJ>J`#~wk~#ieNFrv6$+b}isahA1xmSR?j*%pKsAEw@tM zE&CJCXkKhC{aV~d@@XOw*6V$+`=e1W!KI{E&QJmaz$j_ar6>8Z{IfyqKA0=bqQ$Up zdY?5OwSDxm*qt;HSHUEMB;Gy-&Nh_}#caLRYd^7NbS8n)T(Qd8xsLqIYSLg_g-(6E zQQC-dc0rlb_++!0bx0Wo9N0894;9LuD+3CY{f1|0u8e9ASg(}T9GuAH%!j$pFbKUg z9!{w&-U{TYWRO`veejFWpGGl*1>W)m*o7qAM1CltC_rIF>YXB|{yADRx+9lTG^;AL(vWMB6lD#S z7UQmc$cCH{X40yZ2oe@mES?e&oi=n)rtD?{) zn5!#8R;zWmwmXQI$&G40g&xP`1ML#`XdjrzRPEdEdd0ccxQK2(89tf04agE_EZM6A zw`#XWa?DwBGX^VChpc4RY}zyjT`qH&du!CvgRL1O^3C?m+^(>4f<-Z@Lym`b#cW$S zV%`RmlEe`U*Cn*}>^JMU+hCJo9l(pb($M$(v?aMq=;Ro+S1Qk6-*U=&GZ8x0LU9gi z;tFvi3@8dkT4-04%Yz4+Y@`z8ke}zydX{hyx1mfaOBmNKjxIJz^#O)QWex(8EhvO) z#p@hR{pYU=ttJYb4yRX>TZc^6MIEzQ?R+-o3D8@)0C+MsQ3u$a0@BqGOqCp}r{}}D z5}CG#gWAcF7}pPtFI;(=pl8iM+I8Bd!lz*w>FvPr`cC?(VJ9HEsh+CEqf_raj%Cwn ztm4e}0%_Y042>yga82enf-}~+lxAtTitn{Oe;)%^9W{;Mc7;XbtB~P! zWJ0osCq1DEVQ*AxC}Iy`Kt&LRt&skhg%3}Q-u6R=(JWl~Aw7l@#di2iY>xL&gBWiC8e1MSyz1-x`dRq7{!W^sR)9C=D!}rV_$ z!0t~_taT%(xUnl}aanPF5z1-32XW#jeBQE{YM&P4dyX2hZ8) z&qbF>Z;mN7rR+3}nnVuIj30&L8AU80_d1BvCk}}PCu%wupLhO2+ef09MB&cgz zp&b1zB*(tPb_qHfEHl#S$r=D!2QfCN?FHABWi3W~UyFlz6`?gzEGQ{91#6+iAw*!4 zXa(;9+2OfClvE%OuSvWRZ-=s}9oVzI(-RjyLsGlB)RyR-2=@beBqq9U8$?Vaw5Qb? z-xAzj1ye)nk|D}9kk9C3vdKp zHblLz#Y{aERF60vwA2QDRtK@FM_b)jRF6ANh*s^lapwg~OG#GJ1@dx0y&77%BVHX4 zs194J2lkDNxg)bKjGThi+t);ChqE~ofbB^(`mhIWRUGXA9y<(S2e2J%tcQ}cLss1( zX-BFV^5}-hxWoRw*Sv7R>FL1jlksysbh}6F25{Y>c_Z76@a@^WLEiM!-2oRI$RY-H z3FF?NDcyq?{(21udlOO!f{#Fbt1lnxDFoml@_K8(IpnPe>l|2qHMAqXMqR%Ju7~uY zc-@QKBY&l^`_o0O-J#xld8>Fw*G0(PuN~aJVcmoE67&wTjUay25Z<{-GWM37y?L3S z^cETKc}b%6)*bEVrC7Y7n{fK(PmlCbp6-W968RRs-7A&A{wvjv%A;!A<4d-A3vq;h z-U!g6x_*mk#Og{310|1xPFkdxoMdu@Bba5GLyek-9#(vOKj41kY?!`6t(r-T|4i zwQ1OO?BkGkOmts+w(>ZlWSQfx`5a-k zEOVgoEa|}CqwuBNBZRHo7J0htHT-z-eQ{Bx_*U}K>8{`-_9f{f*In$3 zudBd^URS9XzP4O9a;b`9r%7|*w#slob7_6w+9KL*q(i;al1sMJREyx(yc)r$l{Kta zEpV@PNqS%KOnIO1OnTq&ta=~u40jJ$)0qTQUfC8^EtUUH5*-+<_M>i^OoJ0fHr`*t^J|dqu0%!KE z$_7VuBs*j_`Mnb1Fb`>z%-tSMIni}~&3vc8Bk`7ezE@D`2!3QJ&rTolXYpRJvEJBn z3g3!5kiy>IyaTa`KE-m5S_!RK9Lh1pHeED@eC~ySI?>6P;#P>~og1^@D^qZm-g1h* zWx!j4!h&jM%E>r=br1|muk_tpyi_x_KHX>n>s(kb)q^g*qL$=i+Af%23fr-a$N}X@ zv$Dd5d8Nx}I&7TGM4!}HYjHx$#DMi#3(`gT-;T`pO|g2el+l>_U$}pR49dGFl^J(V zm5~)PIASgj>Xl-0N@Pka*0w|`t^7Rv ziTkt@a&4&xC+wdUI;p0dKdRj4{Eo~aB z8|4HmMVz3ho8|Z~K}d!?uX1;o>5maVYjP*$Gh>&v<_EQ4j8)CB=j89RYuF4oiJx$) zRy^KWTVe%Btte&(Fc}c9R*j%ExgyT%(3KeavtZv~Che=D5F zes3ss$^5OUCEIJhq*5?PO%SNhbj;c5EKoaeKcm<$ejg0(k~+zlW_L_dQ8LboS+YL zKHs)Sv(tt}6}J63wIc&37 zcWJ(*M*l&NSBTYbK{=~ceeg9zucBKf|Br4zdMLhfFqw!xXl}hPfH9&fYtOblquTmR z6_qrRJd3b|QTpa>WWwiy+NgxXv1BkY8RyTo7XO3?DoO7stuwB~tfYjK^5_HPXy^BikN|fry2NRY7tmwldTh?(V5+2Yv%djKwB7ML=pz?O~*Aua8 zaXF|ohu{wXg&DeVTMpSdTo^bdIXojO?#?{h#8167`2~Z7mNww3&SQL)no8}s+6UbI z7Oj{Toi^#VU{M`8lN1h^ecrd1o$*{J9GJ3|Z)EEOy?F9o|AYgnaip+vxG&5}af-@e zwt9KQdU1vU&5>U;P!U26gQO$B+bA%t)eiLIkl^_gkoG)C5OviO_i!eqc2pGi>mqS@ z6+=aOkqHpT-+m!wnhJ{rqD_9ECfosXrBEXU8ys;|C^o|fdFmrAQDbB0luVj1(&EYW z%C5{P1T2@&#jBr24Z5#dV69IVv<}JXcOp-Qene{06JX9T$Y_4r~k@RZt1lQc~?3$@PL5uFR#6dPNrMjFZM zmxfP=f5X1(dJVqLH=nu02mx|w_}=4QQ%>K!bD!OEf8TfG{=(_g{VhE}%vQZu@s=4` zyRU}l6s^32F;qG0FUN)fGotJc{{e*-3@YE#&yu^#j{Kgu5D|n!PNbp;OWrCaS$X6Y zHmJa6OkAoR1R_1QR~_KMn>CUYA<~V1+KnHIa{QFR(;b|m3{xZitaALM>G)_3yd{6D z^*^o8V7_(*R?|O?_y1J4Tt;xmHzbYOnTSCA85I>n;;x7(HuN+UZDPl?s?^vrguGRba|-mGUFFse8z zx5%PEf=x$059Tn%RL$boA#KZ|B+RcB3K$1`SL0?k&j`~SnqIZ;tF&NAWJ!yXt{bf% zRxGfdYo~Cq>R+}p4A6narkJ~EwlRv*E9t|8rUlPS>y>&(fMI_u#8UHTaMbO6cAJ1yNKlz#vmKjQYPY2Fk}hcv6+w`{1%%=q zz=GLXz9H@?(%0!X?!2^D?!Y;|5Y;r| z)=so&dqSUvkB~H>{ub{GO;3>PEYZjDS-nL$f7Xptw%6|eMq~C4&TeKO`=XLB44zxQ3CRhgvMaN!c^M815+hP3W(LxQ&c*T*KVuOk)F|F=a) zXmtPyikH9`XQt+}CON0^9TW;1vRao)wKC-i%pmHQy2ziKpqx75n91YA{H9y-rCi%k z8OPA1>04uIOy_*;zvaHQ_2o!jx#-nS3UCKOg*=dqLF`r9LVbbRrqE<+$3? z`~B)BW#XuO+BH`=4Oi2#U%)NLm~xX^VM-`GG2pxPER! z-$A(A6Lcto+74hiLYDVOn=X z#*)<;8;$3pOZoDs@a>qCB5B*r83Ac>`{y&`pzMh>C>s0xR08aEhaa1dXkaZ$*NPum z!!BYjTLd|02reDy96;YA;J;HCw)jcT16PC@m$W$~2jsON$xJ)%)bS8cChkGfeG#~E?}F<+KgBs;|>V(I2lZeDwq6lofUiA0Jf6}YX_;5pLf8Lf$Gj1{6|4~ zlP@bk2LCT8%zimyfuX$da~e#+Tii=IcaFtOVSB03A9M8Er@gMF9Zg<~VBp-w0X>zG zRKwb_d@D_%$IF38Q9S)j|(_WR)RXA9A z43GmQ=@-Ub6FpqiEX{aP#^;3azi9S=M>;y0RMeQBg#P5 zmg8uGlC{?nV+l65HGnG`|F1nL2dePv)DkO*iyvfT`8>u^l9! zwrzB93o@*0ZCP!7VZ`B^=i5W)E6)M0VZ!+=$vJ;=@{=}e_L(CMM#z9mqaW%x=D9uQ znDf|e^5gwJRs;IH7Xq3i(u_J}SCCo)Ug#!0dU!%wt>`0IAkozCA>I3$`hv)EjbQ8eVGJP(uB zDB56#pPOMB`S#LGd{~;QhSbAVS|&!La->DUwqk-JtZZ7L)>308z0pOB#mPcyDn`k# z{~(Qedq1@Xm*||AiK~*UQzFpJeKh+>6+Ea;Y3@Q6J&0_Xb#U*RNC)Q9&@*-HF@v}* zw7FP-Du#in1VEHo66N8ra2b8c8l>GkG>;i6W1f_m>E3dUL}6l(Ds zht{q%B<}A;-k=C=4=#%(uS&_XhD|aZW$z?bioZ`}xsY9+9!(vfPxw3X zXN(XLw=9CrcSSl~GPS23qo^toaKM^b_*rVBWD3IWzDU#X_K7p7qB{+sif4ohATBkm zAIKMJM$TszCT1R|Z3)?``q+@ZTw58u~u4aAc?hB=2Sl&MivM)AQG&O2R?1gra##bR3sc zFxQhSq`8N|FqOQZshtN9e_?U6wm)^MHsryGrGChlZ&B*zD>jp*p3$vr2?8ot4}+f8 z(4*WoP<0#oQrOzd<=!Y3efI0gN80AmLHiLxwOf1^AjK6K|6?u3@yq;eA{Ooc=`K~;G{%zmstT7mLpjwsd$Yo~Lhww@XuKR-=eGym- z1_z#(s_d`WCZhMXbr3xioaJGJG=zOs6KwRDm+8`o5cqD26{VSLgWn>*Wki45{L3Ge zQx$%qTjE1K`^8NS0`H>;+%||Z^mA^DhmWw!6r>p`R}lbl<3`S`F?EMbJcomppg!z| z=R$blva~LVb;$$2Ab%K0z$19r@#$`hc1hH`x$c1{BQk(Sa7Ke}&C3=Ai>N36Aw&)* zNnFo>{WOD*0Vm0{e$=D%izf27WgC+7CdE9?y10HYc{F{?HRuB3uXE4<$5bGR#YvH0 z`%pfTx+VE_O5@EEVzNth)9O0O2KTwfKy$Hp6h1LM1N(#x1jq=4r>(lnS>j!pe z_BHR@kW-N(u#ge!>+%8aT)IT}&BUqt*@XoGY!L>8d9&m7y0y!3>Nd;sdXwYD<_lJj zyZgKT*BmImQD1bsJ1#^a09<5=w%n>!psdI9ElJvIfv0sw&gYa=>ok4fTgsp=we z*INAP4Ebm%DtS8&_j0icT(fp0Z9<(hKTSKsIPC7ccnO2i8m!aMyi)gaQBj;Ju31@P z<|MQXkMARI8Crwzv5iFyT}OQy{h#=F=g*OrRrwNG}CJHRCe_na$orm=Cbr* zG%v5uGGOxTlDK&VrJ|Insg>6j##EZ;#ypm{yevCZCG4!?8b;DQ1B7|etXQ#AzcG3VmmO>I&lHu_X|6Y`703=RKLooP-ZcIw=06c>KytYB@7|H9qTbP+mt5FKbd2 zv||FzdmR1NAVQ&Z$Dl&Z9<;dG=$KFd6Jjsg6Zuc_b~j;x$7-%LmQkb4^#pflpqhi~ zfR%fXI5SV)Ye%!oYeFEKz3f1iyVSsD;DFm*ZQ$!&Zy@|#K`;-~GQI4{n`@GT?ts{v z`tSuZSl$5>WK9$KfuR=z*3bR(rrrbx(%vKoz_gX^A@!)_?_&bV6qvX~LcGY1O4}+* zK2~OTj64Gww%LmasS6AbWE1Lp-#Ez)mZmN9f=f46xpL?yaoz{wPKA6b? z8eZZ8g`+?-?Efa8j$>}eAi1JJzTln4>+vP5NNdI4zyEu21 zyr*mOdYgBavddHr-$AmxIxOI>y8av7HYG#Z<((q^VPCIbUDTL^DrxWoly?8ew zf^!byi=-W_!-$2XXs6yyI@QQ7pcvyMq^P$(?x0QKB64*nkn959YeWd{GfV-E26pN| zfmAfWoIm>4fZ@1bSqHUG- zp%p8PTnJwR(O?JdD7<$yvCB>mFU>IyJQq#j8Z#i87q)sbB|khCYe9+{_UM_bl!a7U z>jBl@cify7@2bAmdZHlz?2LYR+@U;WEeV==2hwCmUFGo$&gcYynSc5bFd0LUUFD{? zyr@(ifL@%-`semOoSV83zCBvB$#n@P%>_~Wgz&xvSiC$1QDX&=kEEbOBRF-;;;}41)7}7a%`-H5wdJu z!eZoFQm<|uJOn*iPk~k!7{e^iyu)mAM)23j&eR7?WGm@umc_~Vq@Z&=)TK*_(d&(U z6dh~Z5;)$w=Pxhc(Er`UfJEQ;!hcLG9{~tR=6_~lB1YC0_D&|!c6Rpv$HuIjkWEm0 zcUWgwvuM&BosLN-OKKMJ$4e|KT3hD%#i41$5mRg$A)zf?x3_Ci|}$B-oQSf?fpGxTP387vzwclc)CuvopPN#@?Nh_(zy7(Ve~nAlNulz z@CnUL7Dx@6VDMV+9J_+yR9hR@Ne=eH2`3!2A#aN ze2a9?itz^?d{myWV8pYn)45&XQesiUZ8_TV^z&QQ@pPX$x?sidkyx&k%cbUsh3<=S z8eM1#HVbNX)#8vf#iz{Ab;s-lOH&$Itk`ta)<1kV?Oiq@S;m$^kIxjAnzJ<{tK-gW ze#YFFC=0!seKgC*SQZP)_uE^t&HEX=uG(=Wun{2Q7<`Ej+g*v1=Hcb}{~^TlFJUNX z)|gQJiLs@sY3s_Ya=Qeyr9MtlE-MllL08ivtSwrL!N-g~bYhwxGQd7g`(qy4i%3THAB``D7J zbEPjFTsH~mA8r3UX=+?p&p1_Q`QNN5JuxaCda+rgqKggkLVl9S0|&Sgr7UdWW(C^K zl`Rhoo9Rwozol@;BSZ1_he!1e zWdF zt&dNq^#uWZXE}ALX#LE{TpXTnJDR@dgAPU z0Aa@(t(=NI$xHTyv9Om|4JM0F#R znlS5}&U{6I8S~aqPiiwN6f;zHq?u(UG-wZ-q)TsOWF6$&-{>+%uqzKIBE@#9N--FG z0Q<~dT2}rEdC@TRxGw$zl}(*Y^3IdK?)lEcJhEETjJ76*b7fz!ahzv0N`*B#rTDt6 z4nN$Zn}H0p?*nZaA^dr#w$&LiP6eGw!>Z-Y8g6*GebVdAVx_aEKX(X()2(h*-Ent2 z@-Me2kd1ve<SmM7uD}c~GBrC(J*Ug?_7&5e}@r3pF3Lw+W<`-7p}&)VT)U zsOQA`V#zCzeSIONZvSHt+gWV(B*)XgL19 z;fAQLhAiKKIv~(2>v5XcLO8R9xs&dRlHO2#1;Bps&w1v9dgh2ogoa40;Tr4YCj^ve z21(_j(!mRqnDeBX^%~ZrXbsTUgduPV1FQxMubaHikwNPOa7x0Z3l`FZUmD3PjD^cU z$D4kQXS353;!EPMxr(GNNjec7*vq$WB+ij!}4!RHqK4_vaS z)M3&Zn95?X`|rUqEy{9;_x<^q7YfrTC6k!xI|m3WtHQ~?oKiNo8cY_KXMKp1IF2X> ztZ0&V66$`?l-tt1Ar{43qlS-n5dH*%g;QT$ zdexm~d&Tkm{d+j22J~uxP9HGB?bxo$|9eg7RTPd58l@v;=o)*HLm7iHb_yOIV4CIi zh1#Zb<8sZC1}>08u$!n8ciD>sQ?l<}v|U>_UurGnsaQv^evBACi5Aqbx><+GmPF0+eqFyIoNeB_kx*v}dH5(k5s`}En|BNkU&u!KLZR%4;d#P& z7_4KzqwS|#nzp0f+sL0(fGcRZH7Ys`#YH1^ED($#VvgA25vU~oYkbs_L(lvHy=C>3O| zYzBoP9AvkK;rfr=C(>Difc^Wo8|0zs`cjw{KZFzl9XPt24OCBgvY{ZyW4e`>4ya(C zheT-vW#D}@I zn_*-e_d92ldn24|bdrqwv5c^!JgGfzsvT*giVyg|E1TutN|Ex9vg>{}bpOLx4H0)E z6Z`*UY5YG>Mkiv1{~|Lf>-|s}5&qH8@My_Vl<)Z|AWBJSx6qLyAX(!RP_SxVeZF+s zpvP{T+Cjg}49o5RRKZwyG4j4)e9;cKS}+x(6V!2S&CG0H*!psEGVJ(x{ebTa3p#8Fc(V9pyYBtt7A7auh2`UtLL&4Z0ID$@Cb zT?|yJ;bSb;6cB^@N?Mwa<%JW7pFKv_S?$EP4+N$hsYH}Cch0x~2<+&Z!QbK{Th5!R z&RoP&s<@iR#W8QARs60wj2|O(OM^wIg%v*>pQ3oK5adF&E_f-HmR(qr8A!6%5?3mz z6debA_qmGrwPLBe%|GgcbaBAB1X@Jg`<@I3n@alKoWI9e4m#8^_Cf{QJX#v4f_4jH zGckJc*#0I63f8YI1u#9O)3wxp&!`uH)EZ{s5H5`xQB?95w=VG*uOF^4K zTPfzMQthMGp7+4a)VGtid5lBQF(As=;y93as{tk;xn4-DDi8lt^tUY;j1Yrjq_nRqUj?#|};BID@ldgtfPx-+x)>$@-AU2n1u`Oj6nWCV4C zTWk9lY6ZM_oFHyV5{_VLn7mVa_Bd60rh45z=j;-#*iMp!`4{Mam$9`~jFQujj4}Ry zkul?c9l$8-{0A<|vxJsf8-@R{-&S5uqk^{I5I*>uutB{9HlkamZOK)?t1Ba?(&x3V zoUZ!}g!Df$Rv7J)iip4sRd2MP>xNlRL zI!lSdtcKn~AG>o$g3{y&q`sS1(WV}0#di!n9^H&D8-7jaOC zSd+9YAoRM9p%SD4@w+T%Zjz5Cix6k3KK+Zxbwr8eDkeqOsMgcJy;%;eHx-IfnZEl2 z56c@k|5C}!Y;YH9Ry)Y#?BUh`QN`GB;I6pN^Jql&neGU}=n2{;a64>V78Kj0n zlg@6ihku2g)~IK&+Xp@YsLIOB4PwkPC4XKKhc4`fn2~4mdxXyPDiU_J3v`K=)l_!E zt=Uo`5^@Ht#F3^9y^lm%hvni6SuT)LMBOK}W(tz!uh@!z;T=ExyUfM#*H+>laSbiF zSe;r?-0+yZyGs_9HY>T{mguLKdHsWMmb`GCR+^SAK^4WAMOeg6{|UGvBB6j;a-*kZ z1Tmv%gTtZ^bVAX%>e)HLxsX-pR%YkFKwiA1_f9w285;NIC+*3D`3f;74NnT|@(g!i zjfMQ+%XlgoTZ-E_gPO^>n9;bJnV3cEHP{0R`t&2nydE&MCphmEzjNr0rjmH3tTkX> z@K2zectrm1D!;(urjhwkdD%~Ek``_xn zPSN_0`p5p2>1e8J_7@u7*OJ$3tJ2zGAlWbz2w;ue@ovjb?R9QW(?Z$xz8yVRz0JqJ z?SbD30p_HkSrm|wsN`&$PP03{{mka3UHg3gJ)rh8qUjtt42|I1!Z|RTOw$xgsq+bMm8entpmQRtBD6<-EKUpzaz6l6@YDRW0`(ERx2xzDEh6}sLmk--P=7{^z zsTdr*u2zL6ddARWhBL3fYq;Ho3zg?0Ahu;{HoLCZnZHX`DPIilDkq?LQXwc1U#iAC z*usmAZ>uCou0@oZecVx(kvS}mT{mrAu?|$+DekZ^eYxL?$Xu8eqB+W0Fu@78(=;<) z+m3Bi#_Auwvv>6^J8ED6Q-sdBeDSF0(v~J!s-O z34i`$`-?aAZ7P>~B{6xm%V0W@ZepYwtwF+l&K0ZoS>rAT{!qYJ=6J9s5!H22LavWu zG&+q=58CE$U<5^uMjvR13mtqyks~{pJ~0k2viwxlq64_YGisT0Auu+ZmgT;vqOH9b zGm7Vl>_}gYQ_tJSOT!Lk+VY&K0e(r^Az<9m#?r9sg&or}H|nS2vN_`2 zWFcV!=kVVdEO5gpe8nh$$0&;xY1_8Dw`XT3c6RpTyb<+8JU^haDzoywuT0RKOjm1tqCCn1_=!mAV~r!WHb$3@)SvojM@Ga2om~mPxNz-T4)f3YIVa(tAQ=V ze%QKEjV&#m>c;x=i`7+=Yb7-3{r66XI~g((ZJ@=qmcXkBtx3=n^UNjMkWLZ3N z3JbU4Q9jYcJD)Z8dZo#$dBDk)=1n0UKI!ztn{~fibLtT|VSW)eG_5jVNPNxpdRmIbrw(e#Lo_)A|^9h_m@BDXDC{%kl z7wwZb(}Kqp3(bSGTM)A(sZ1o>gP=zpA6DX?7!H2NMc*@Qn2T*9ByufUYMD|tGlJg5 zL00|Ov?gRm7B7pudG!Gd(-O_F8KObD#66G2bwQ*gaw1l`v_r;1hi+O79`=x$r#rGP zg_MX(|ETat$ca^-cDOEaPm)WYdRCX*1f^;9;u92JH$XP%jDBJ)z2vQtgj7 zjh{z_{#|GGhw{Q#HLETX%HBztdFQgw`VH;OHVs?5(-yNs|K#TMQtMhTSj?3dER^XeAjsNjTY2u%JB!VTyfu5b3YT z^%m)1*w}fD6|^|{Y1+QAzHR-b6o}C13E{ip$2)O&1MQakO|7y8y?eD~4o4@~ib6)5 zKXL|dVFn^&p8Mm_40ClKPMunEa3&5ue~w?3Xf!zs%mrQ z=`+;CTQ5STl1t$D^bhMG!vq%=2+6XJ9->x46u6~#=+-!4am%&I5)Vt@j`2kdeS z1>h8DR+;qXMAezs%|F~9WHf|P`7B|W zvVu?pf?zAJ!yrq;ohyn;s}{Nv_mlF2X5Z?d%j+of^>uW;b?~gqG^YM~-3xqvSJMP1_l%7?+()@tSAj5 z$9@?o<^|C_Y+_Uai5ibdJa{leWnk=p1b|%+M-+hyGE_Jc)jaI^po@tvLxPN5)U<~> z9^xY@Ai?-5*hv}2l$5qYp4o)ta28R0t$~3ex?VeGb_F#1$f}wcw&PU=^oYs#Laozj zb$@T?==2lnlXn+X8U2_amQhA%!dt-1j=9&>!x_0R2;8m>XUlvTR=`AQLv5s?fICb0 zni$baQd%%BB=URi2W24opVJ_0dRFx_Y!kpNI8?;Fl-t#F7JxN=5(FR1blPV+K=;8I z7b*rHc93)w+aC)UmY~4L()h(}{&ADxokrnA4~8^_Hnb05q^S&Yt#zmm;wJz+Mi{*6 z$mhUR{}sqm`EwXtJ)?DDH}^F_)C{9M-E@QyV+|qr6;aT&3)X>QuyOLu#~+DXU)A2n z&}T5vY-C1)A{9w(L@1DwP3Hk>YuN(a^9`-v(X(prKwt~S6)3gVUx>HNb%l)cMk8F} zv5*Qmk?$g|MS!^y4#DRbR6nzp4G2?d2a^@~7300*Pnr>%4_&uh_sH@PG6lngWZF7x zR?(3J+wYGT`?Kl)-i2+-?nsoG7K?p@gya~Q@*+mK4e!d7gageM0l7xZ-wREN$z9Ay z%Zc?uxP;&Mt*BtQ-zrHhokOK%?yl2o&UB+*{-W)O4nO)ViZ8AVDk;c}ri!MsJRNv`eq*afh*x13W6^93|vHs8;$cRuc ziKG*0kl`sTOy;JD?ni29k|5ZKS>6MieVnZP<eh(l_LCcfN z22`_A0SDhJ018WkHO(5|0XnKLnmYV*7{Jb1Kr^y|VtG5dqA7p#(U!;Y6dU7|u-7SW zRmR>~S$p{aXse#9uzATyxkgNd%Y|(`(5cXrb1srS?DGUcqjk2WM%^(I+hVm^m5$7_ zw>baxqf6*rrP`i{pG3ja-jyqd;E45T+8JoM4M{^spHLq`^?m$2q78XFY|C}S)}H%< z@riK5`fBJmyet03Shhy~hd%haq|3!`bJzDXWI+C28SE#)-{jWMZ+#d4ff?*4B;S7VIbSr{v)R><9g)ZN{JN74|!N!2Vtz)~cMB>nDD|{%!~6o4c>(fg7xE@`e%h zdAK}^zI0wfSD6QcBDas^h(pFWB{xn2(quSH!RRU?tjvK3#4@H{ZY#9KA7J9eR*6&g zRi;8t8fn!h?3T&g53GE06T>|P&U+d*p9iG41j3^tT+@PJ{MTccZ4A#A!?2!t6)&)??T5D*}d zHOxiWE0rK*yh6C(ZKDbk6uPy)Zo=5KyzE{+NFOlo34Bb=j7EBPi$(xXFt&f#X6Bq) z?!e*?m0@Y+C(WyVVs6tUD*6p#-7qhOicyIstdX02gsGFZMed>&ML3h2$HUk}y~-!S zsNPx7p|MBE#hO2AGv8hF%G8#1N_wxyE~63x2Drf|Zd3RXMU(QDK2|?vfW5sKS4ihn zUa>Rf_-lhf%b4TZ2tdrwPA1Nwi9(yA`PkZ5#fA(cpci7$r|qLE^7vy&)XWPrOwSaW zSXjHvbIQqPLJoP&pg(z`hCS?2amtu2Th#}O0K&$2R)gV>W(1DX5 z79V-PGUf$l=h<-{#Z9_68wyhHCy6MVZT;+6tF%QMtHNbH4^dT_)J;yF8HVuSb&*tl z{q)t_wkL;aPwn`^aX(x&Mq1YmgZtOys$T+CC=bXCs*_>S-jZ}rkq#RpDZ+g(YPOAc?Vz4S`A(WasDMw=px8s- z>jqjlRGeygad5)t!FdwR4ONm!4I(AQ@v|pSOk}>BRTm`GX%rh@vu{h=(7iIQwQ=X{H*J&R-WGS9J7O$WRbj~RW7uO#cEa0Uw7r6r}? zNm5={JEXALJCSRjfdM4jdA`2;jI?Basamwa)uqA%$#D~3mib{vk13#Wp3wklm7=_j z6+cO6pln~f(Vf&p+Guy9T1gBy#wa_!#m7iNqe6~PW?AFbgC%dr;1)pMQ^2k5J|ft$ zB%g$laY*Ad23!Xjx?SNfIQN92K5&gwgJofVOBKr&wtF8GTo!tp6us~^lE1x$jN~#V zFBudXZjAfu6`YrVga@&6%Pf`vufZ0vocOOBu3s6-%OlUZhbw$?IeI_1V;{i}Ap{N0 z87X*4vTLh8Fofxo<5l;YE{q2Z3Yegvu>fpwkGwVhk=Nm*mXXKK=@pdDrC&5ts$tb63)PSg< zBxH8;N=9^5oRhMl+IN?=F$-yBg=*(I_-9}%UkFFIt@NC<9rdK&6DpW+c-#vBlK+Ly z^WFIFjC9uDj!p3tcP);Y?FYvb*B8oI*o&s{9C) z$Pi_+Sio{(N_^rtOH`C4OX{2kSF{tVx@SgydnL-K?#8T@b`@Hd7cjk4O zH^EIUG%KixfG#TpKRm69m|$%AW*b7R_=T zinp#u-o?XzaptZ(4Mox8swgh3?Pr!?h4>_I) z!DXJ;VV7dZgbIGY`)Sy<*f*H9Kxp6pkg@_J8%LbTWAj*-?4T z;DjR(q8E`4EY38YmI!HjV##U)nq880tVbuk&shGQmAGZ;>^Gxc5baTJoGQef=lY@d z5ciGTcTehFK6k8JRCPp*o;09k((+m(+854th0o0GwjB6uvt^OVr`Qw|vhiG|crT8K zn!V~s!aX0iw=Ia#=w{#y@u)lDr8&Ox*s?f>(l9}*hETW2)+H$8OeN%v1O{GVqCpc+ z_YzqJU`AA!P4JYo{9Af-E`(A}*O-3?xH zdh)4HTs=UqS1v86b5Ey+KQHh|xchPEZplGQZGw)kc~{638^yzTL8BZQ5sxMtZ%Uq^ zA9^H#NHh6h+BQ2-KRtN*VtQL7Lc~Ntm)1R>*px!@x!ta`M! z9KhvopyUt=DF$(idZq0y8L7TW_H?h1QcW;J2u3SkkH}@k`q9<`IW!ZPD&xWy!a{sb zs|e6Syrd6e(iKCWIzi2g4M)qiJL8Jgg}3+v+C7NYzms}lblC7KEkaAk^@&({AzweE z1$}m9-0^8#7TD$pwmHFV{T(`m%M*3K6M843FYS60>I`39X!F3`8by4k)0f#fKwBS4 zpSSA`TYnQrKZyCO;MbWVt#)KOOyq;vKS|lYgc4N`qgNXNCWgnJmk<9y;Z; z<-nbTI`g!p>M58mLvIm%Oll3uTb?OZZ-ITJzOs66al`%6>k9oY*pl*B**lnJ!SJ3g z3-9lW!$qCfd+gq2m5;^zH}Hnx5Axj``YjM|G!?q_lZGdJ0TwTcaF6B`m<-ws@6P<{ zTUAJYD#=t|B`80hF%0%z7`3pFY%o&QrU^>e_3ZkNxKf{}-37_y3(|>Mt1BnJ7>_uS z)iVDG^990qtYk~V3q8Sgcn9>QvJxtiSCU_N5~kBD&p(<9zVJrJ8_rlq*7Y8GDGb`l zwaNVA48WWGa+UOmO1`0-gCpVSL@+Y`Kq;peK$&%6FJIG#dy!pjM_vb&v$|M7tnz0O z=IJLoe5@GBXWMXM>5P<5$Wwwd>G4O>8Bra6k%iT9G!s9u%vS{O3gL+O5|2b5e9$Xw zLcUrRrqH1@cn)EYPWGlvN3j#GLkWxT)GfJ)NZTI!#)BOE)$Hu3M3GO#pNk(uq?wi`Dy-2R1pp zGJ1wndz|>~Pwb5S)xSzSIvFQF*K)y}cmSbCyxMQTJwE~AGlBv%8?0ju$#6sw?g}u% zHaxLTyqUJhrcih9C|9ciy1%Fil$sA0&&~V98HN z|Emd_VVCJQaE6_nCoiiNw<)BD9GPok7BNqJhW$88hYevDrds$#g+&Ya$x>}jSJZ1i z5b1}pQN^^YULY{g2DK~F7bz0bPrZ7i<=N0vd28YyyQ;ual!(G5w8KgH{*(Tmf?2?i z>SRF0AR$n<`EIE^%fEG07&E1YJb7Y{ct?(WvWGxa$3j^{$O$IV3jxlkIB&3_(AB#W zZ4|2&N|rLpypW4*%Nu`4SYeP}sjs;fbSkAl<+_ffeuAHNq{J}u?3OLm`&BPet7}uS zX!S|GCx?Z_LGw*52goDQaJd7}x%|{43|tdEhW$D|MGf;(oG%pi4S6n`_$6Q+Dk5Bp z78KjCwYjgaSXPh(D|y11I#T5JI}jFmBFy-vPns%&(C3(bPqFqKtB#;S9ZA{l47wv{ z3u1anR6o=T?Qb!E@w$xTQll+YwV3ge=(DTh-(N}t+Lxq;YZNEEqGSU$Gcyj6@7+*Uta?&|}0b3=kOLLS?q)t*D34wZP6NUROaW6Fi1=a9j`eC|Cj?R7} zT>{tC0-K|Ygwx`;k8#i{^z@TShbb&ORAbdL@|7&y@Qw-91wCCPA{1QHG`bG-;dnZ* z>g-n*0suX(7B`fgNkyNFq9(bKr8&ue+fWOyI4f?N<+6@kM~rFtXm03y~W4Bx@n6{!1{;O<+!-Lok6u5e;Y;cTPQ>p+vyWs(dI3FadYu$mNB$b*<_rp2; zy{*2%Gwf&9bPW)3GU3GGWtyCch7V8t_ zZA#BlCt~X=eLdJ(TA&nWe%*u_-x2!iza-ceB7VC_nGAsMh9%vvX%1*pM%@9^?#mVG z4#s+e>x{WkYP4lx4=<=TU}^2v1jRzvorLLHs=$XzQ%^jxNw@%en?j_H7a?eB7~ZQa zI9K3wLR)bdY`}9EYKLh&frwQOr)0Whbsf<|@QH?1R&OOAFyW6l2m=bal46-h;$D}Q!m*$ar31*J zqh4`-^l9>f-IRpBcXs&*rF89Bpz>;43ZG~dmz;(2$D{1yCe9gh^S2(Q=HvdecVDxz zr>Pn#9Y?*XG~?xP!1NJ1vW-*sr}s{7VsiGbEH&|3Mf5r`?{M3?yFw1$#rrm?79I<& zqEl!S26{4J#4{|VKkA{W#N09OY%&EHLKyX{_^7CgWHOz!wyIy-|1noh-}b_AWK6a3 zlZ=@q-Q(zAq4hLRk@Yl9IgYwi@OTYwpPIQ#S*0JWDX=5;<(uA8&`!~}4?gU1uEUpZ z$}GGBq<{Vj1Is9XKx8YiIA4guCr7{*-#gR!^2V#=Qj7e2@TYLdF8L|tcD%(i%U7bm z%*`$HBOX6=`-?K(2>$`kH|Ol$i3c73toegq?Jl|}YTq#Jr}XwP{ln8Ilz*hYD%~xR z&?J_KLZu?FLxmB56y*BLya1{Nj0$9VCDt7DEprGn;8UXq0#hqbBBTO({V}h!y4HhM z09fM`R;s-O7y6C?XZj<_hIPWo(?p_;$FbBAf!o-T(vcaQM7d-~JTg-hz;=;Xs7NqO%UdN{LXcV3Yrfv7Pz3BfhQ zH@8Kv0Yuvb*7Pms6Mv39Yqnyt1apg>EKy3pH}RqEF&$DRrIAz1-+>#CS~q&by|s%fnwYqAHK z-zEBWKTAJe`O)k7pq*!puX>(GQ%-5ey%Ru|k6U&LiUZM7XnyQS9!|VVeg2+juDLZ@ zxzkcP+^F9oWHDROH<_60jJ*J*zhIVUGT7~oB}|{};w$dyo323l%Wm5Z@S>l9{vP}p z_a`Fn6u2e+PjcSz&?64h{X_dtRN1^eYwq@v&STuMS^4o1VAcR}^LI|U>4S*tQwye`To1rzgxYd%te5`u!@ogT&&UwHg=BO@|hSHt04X;bgsaW(JXUz zBd(PTl(XNe0AQEv$Q#S;NF6Wya-ceObgf~?*|Q?Z#=fW<2aMkth`Fr*!3U)3m)`CJ zMbYI!<$*b)w6$X;h?<;y z3b$lqPueAWiGvOnCB%%M38(s}9Mcz_TyeA}7&I#T!Elsw2Ing-P9FuObx|pk`maZ< z6nXapmU;M;$|wTVyiQjmLG0rk&WT;;HHA(wEMYiX3Yf)^MTr|z>}r^D16$C{ir50@ zdS$Z;wrF+Byh?Fwp_nbrNQlA3wJS&AV(h}ima z$N7s>__akievn7AWHo(k0h>Sn!@pq$0#wlQt0D>b)k-P-@4D?`mUf0VHlF__`1>!t zU(J6BrP9*UK&3!YK7}f@v`ho{g98%)8X(I88bZMHbN*uv^V;tm=8WDC@<;ly=t!f- zfzxXK2@m%!BvA&W?6L>X8&31<9`9eJ$RlPy4<5;U^f*dVh7@6(4N%*M1Gqc#Sm~)5 zSD+72D9AM<46YORB(7Z>ui}Q9k_Sxi5wG9abXr=gCZbm&VJ``8WjZEPhqC)3H%tR- z8<`LLS;X{;plXG!UdtJYvKy`4jRWbIuLs6rSCT}G>nNht^l{#avt63*GDG!XWwx4b zrqpegf>}#VsOYYlc;TZ=+nPdmhqSX|B>JzAil>R>Y~79@7QWFrnlJX2MVQiEaJS~z zrhy1PtF^+Sb|lc@G;tP#Xu(k90tiEx-}cWJ>^2NB6B5|+vE0yR)iq?baOR(}upw9J z#OX#}fE**~5OpYNNO9-d+^!jbikvPi`JVx5t<8BngWM>$X-=scE$bxw;N~Ic2Se zZb?0_(*6|EH#ts{9Ab**X?-(QRaZWQ}ud z0@<~Q1 zV+gSY;@vidE&N?E)ggRnZjFr3P>rzR*P;lune<z^Dv~`D`40;9C zzRy7H_LOdEptSm9|A!>y-77?8{Wm}ykpI_;@Ba}b|EWi5(YVsaSw{WQbzAG|f)PtX z*jg&HDy9oG8Nq;&mH`T}m1GwHj+C{r4&Pcc9b;(9&6FKpx6*F8X?dPb^0PZA)~~`h zniJ1IwB~;j{t5Vo{L;#&`r67g)ikgTK)7dc|5c;R@SeEqT@(8MTn5Jj@&xjeH=r9s z#uyjD>W^whj*}E+NbTdyNb@9z46`S-2SnSRjyBnj?Ps6g(MH;n-{JHYk9i?oWu#G% z%m*4_#|&Agwt+4z{nH0O*PB@vpnYS9*D#idh@3dk|&)9(G~sMAlaG*2Fpp0M8yBc9mWFww~6{eO5-U z;=4GJ0=rZBnt2yx&(+F4m!eqtAUiaf!}y6=&XJJ6On*`6vHkdYEOc>IcUo%>Vx(s_ z<^+{4CM+yFG<^oT<9GrN1mo-Or)1!fToI#=$IoLqqe^4Euz z2@B*_)iPE>VZeT34YQnv)LjhtL_)yv^{sL{TWx;%bGjXsh?pv_wLP?Lqc~*{@)9s8q9^TmXfky5vl-2p^wu_{y zD$Jp(kSEp(4?TtN?UWvESP$)m86S(&;rFpHINa&v zd8o)BVr-T5Z%^arbJ01BT#FaLwN+%}#pN#P^72PM$so#qL2Gg!6ZZ43&&h!bk74*;?x=@U9c+1T`G&iEEPqYfF`&b8 zJY(f(ObR1II>_DKFUiq^`yiE&3uf@$;c22GS`Ntb7ZyEHr(Ns_lVaX{A>9d4z45QG zB#jL!Hi(jee`Ll*n;~g-0iVhsCtA!8wkkbl2UH%xt~**E=|{SRcd1Msv5FFVS7uhK zrEe&qivvUB!N_;QbzP4Al<*Gva27HI(8(MTL~(*7UsAx$5l{4x;uWamdduIk%i^1J zHo<{3%;sbB`WH2Sk(GsB+#;}u=ls#5^OMQZDPBO~XD`W{{t4cNt;DRh;BPBR2RFn& z$|Yq88&CQoq;Y;?-lXrOjrqHK&&fc*fV-m>ON$(Oz)$!($t8WVAP?X`{WFhCyIxJ^ zm^BT-tByCcE;PHQPj1M#YZXD=tPAMUEoB&?xzYcYgUs8zylKzLu@vP;DD!1YklN-t z0(4R2HbqWcFCmYDue96k0UIpzFV`2ua~nV{wklUdH)pS`rAx2-mV=Xo#czK^6os1O z5lSJ&=>t!R5xzJkzWh=WLuF^_7jITipRhRwD6J9fjUfC7D7!-wz2M2|^1pke4vWoXc2qEYff=;yd?N=WnKNW-~6{o;-#4UA* zjh6tbzT-;BC7a@=cBW32#*%hs zrcS0#|8K4-tNiON@f8+I3sD84@Pno@0-A`Rpi)rLl=w43U>dkdo;}XgK2>JMKCki? z-hBqj50_@{pJIB0L<57hSLse5m8m3a%K9ZmZSCwQ~@Tb{l`CpAh6D1X&XxKy`^(U>N zO1B;O;(RLrgC;s-;IMs$_b9$K0TODAl3h7IRUr ztlP?%yO`)g$Y&@C#SvF0SuD!|Gqi}}nb~dH#4;4QNG&w76y45hEQ~O!MK9TbniTAn zShI@}5282p$bFmz)HU>#qqz7&au`)v$Q_2Bdk@x-$ezN$(?pz0u|G$%Fw7e4ktHH4 z%+uGM#bCn{R^q)UEgklpWbgc7Gn@pCTTi+%oL!{H30qK@qp9S`@2HCxw(!7c>xw10GR+FSKSZVLbB5v1d6yzz-QY z_?ZRvWDsqPg1Vmk0G_b1Mva}T>Dlq;glYM!!V_#I7;g!G(VKF(9C*l?F+V$O^5+@l zn4^5e{ZO`jnxkROweiaQvCDz;5H1GWm&+#AXHFRidH>Crjulwu50FQJX!1?D9`r~T;JzZ8sFh>Pz`gOyzAeeA^*X% zij!?!p#s;itb|P7Um%S4?Awg{Oh?z-!Hszz5Jx2afyIa>;opPPVUZZIlaLIQ&IiX5 z#!>?8Q5Lgx2gLM{_RTOw9Ymt?-6{=d*#R2iW($qUO+yZTYi`q;u^QBx=6wseRmmFE zRbIWu^o}y^&W>xW+T)r!NA<2L+G~tb?8k&uu)mmGHC2{$8D5dOEflT|VF#9FU47p8e?aamAT)|mQ z60El8wUd@3xxPd#s}pg(YK0$^;XCdy@f@q?HO?omdgdaMM(i9>3;?gf&XimMK2Qry zu|+6iC_}nSvc{Q&IXGHI7W5uoXWKcwXbOnhM{=1vOx;jJO4`SG zPwl@n30Au=a`bIgtAFaLGKkZpbhHVh422&0&40aA&RJ<6ci#T3pSuiFNKj{(y_Fpb z-RQ=N8Gnc3#XvQRF|4g@#q71e=X3)o%r}WZzpPT;PluV8+3H%2g#e)Pa@2?bBt%o` z4x~ffI#pzhIG~c-?F^E~NQ0~8MnO^8?3V?Nrm}-9&);v2B4vDsamToyrd3DHKY-@? zA^j<{OKo}E*VVhnm|;y(^xC>CVG&Qf$djG0mX-O#Lq^%A&#vVo9g9!VQ8qG?;F(H0 zZamH=I}vNBU2Bn?U1EINgj;Nr5S~Li_4e=(=ig~L-jmyM68t+(sqk4B>P@M$z4N$c zvCwj9Awy!tep8PAN{y;B`vl%Xe>kZv?<&=`g;ejwu0`j#mK{H5C`e+6iWxmLAYx9{@VW{D^rj?;SGnM1d$C0g}IV1T8h0yo3|q z(%aygw^IwjD*GP28~@)&tO5kf+7ek2{Cv{7#7FRB*lj`?bt9xH-2?ZM{+w5~Eg^}S zmPOf-`S86^CgwKK1_3o9WKp~U0A&=d>}&Y=7X;HI|DJJ-qygoQG3^XZ5{r=wtWktp zh=pm6+LMC9M#@JPh@}XDV~BALy@LoLJi*40Aj=L|M?Mln{y}p)uV~I5;lg)&tRdSM z3e}K1hfJ`W7z$1na)TM${M~6j|A<4em_?8T@Qgy|tP;pUh;h)N39WvyN-pu7$#L0v zg`Myz=sRl6cc@?0w%&XCk#G(qfta#okyAOv=hV}Rs!_9;0!n$1RLnlGPeelVt76Ue zV3Go9>Wl)Op6$YkPGzQw6&Whi8u1-9hwR^>B!9yL7*;S7J}t*UEK<3*zBm zL^3jJ#!Ukxqhr3fL};?w_g(%#Yq7dQ^v-%D7+`J)U&dR(Yt^#7DzvS!wY9xaOn&WI zGhG8+I;uZH-|qH&*nZ*Pe);KpA(y}Q+eHL;XwV)3(kU@wqf476rJ@@#ZFKiUNNpDy zAXlYmSL)S49oEvJ&9+9-sTLY?b$ayzWd~7=!B*W2$wu8Q+E>}6GPGBo58pVtz!l61 z<0f4wSJ@2hLftGjBIB#s)kAH%#RSbyRdAKa0zuw$YvE^RB{a!@AW!$=@FjgG}7YvEyq#Y7#YzU z_my6>3z9VkgpD5I{gmmWyY}}S|o%aka zC4O%pQ!xbBWyBqq1OY+=t-3keel0E^8OHiP7H=478xsP)4`Kzr@g{xrG;j0rWu$1V zjL0%h%#$aOHUFjx63gPe5c|jFv#WDuz|~dYrtr)u7Ew?C!kv?GB;M>40HE{fzl`&z z%xG}t(EdAPq(#HO#Lr$sk|EgPgp&51XBMUj3qx{2v!&zamS8nw(@gdnbW-+IJxJ%C z@t?nm?iJ(&=e&f8IA=oyQlBgIXlfpnTlv~1JjahnWR}b8q*Tn573#Zs5NqOsfkKFLCZ>W=0Bk?-|rOFT@htiN7 zPuZUK>n}Xq;*}0>^_G|O9wZM%<6-Xzf%5AE%P#=`7d@S~aBIv%TfZ6+EH)&6xSGFj z{tI`JUi;-uoBzI457FQK5tuy8Q^Lv{s$=1aM@RY88nVAF3ftLt$MTCuFG=)QxJ?R6 zzsu;~hrFo?!BkjJAwq4ba);=h%Ltve9?J5E8VIMheNT5bYf73MEJx-37~P`1aPv@d>u z0c$_D{YzCF+IX!CbFZg9*_s*9%gYo7OzUQV#9=MWrim^l9A!}|yI#kkndroXqRAPX z);Abvx6{SV`#5E^(8`a<9d`=T(wmq?JS(NpF{D>v6<>@yFVk)_Dio3yHqyp*y)|PG-?Y zY=sVPA%2Bo%d30j->#QhedE36_T=Nh8zy4^nwIx{z2#zY&%!O8hVIn*jVV)ocrQep)1KMH}4W_5Jq+FE>0 zizL8<#gMla$PLAcL)`uQOq#5xh)xmc4?vR~lhS(LrVTWjk?5Ra@I86=fdUu*aBl&Z z>q@+Ow+DzGY9Yf7TA!2g5}lpzYh+X`PpDjKaSUz~r7$T!#&X6v8_UxE;B+2BEX5&G zcTJK18?THh$ha%zWn@pJj`jFgLaS@1)}Hq0dd)I*qGmc_wG1prktzao#*v9oo~MU@kTxyr3P-4wX9Y zUb>w3*@dP%N=fD&h&Ob`q?T#d)(_mFhU-}3D3Z$y%*$#yl!qheOU)Uh+8!KNNSi~;;8+ZZK zqoMv9G}L8)nl=K}skkCOP%qYw8H&yJgHPqnvkZXZ#cUm=#QrKpDQM|L&uJwcEk=I| zPvmZmU9}863cNv;0RM9pEez`Qa5EncCe>!3WlLa{LIFN$ij_)t|e^zbn+yGK;Wr^->Wwnf+M!z$L4fwsIqPBf)P6cS4T)aZQA zXfb9i2P*llOHKq{P6&qF-%yK@SdGAsdL-?+Fk6jKaYv|&on?dm2tFR({$; zn$QK;VyQt=pyiEQBh#w&&jD?T?56BdC^=-qb~Ne^ok5m1!1hJ2v~;k$2Q19;N>u*D zqUeA|2W}x*#~wVEwNecw#Z;n6nY7DauNpPk) z2G0P`d#$!&9XaiFC7JdBAEcS=6WzSNB+K7QN%j|RICDChPXrTc_CtXij&oEKd>RG- zM?kd8l%aXma+E5Bu9*EeYjraB>qCUz`H*i9$|5;i@l=vGEcmGjjmXPMZr<1Ml-vrm zm|OwEAl(hzOlfxF?Q8^Z9IGELy>()#N+u8>(#s3GJsc#5^s3C|)`bEQ0}S-eTX*Qy zhqsHAxK_N|vvsgc06~PI4Ri6r>^GbS)>*4yv!dmSM=bG6)rkv*5|GI6OWM!xB}fK;vxHCKjO=a29<|H*B5K(Z_Hg^kH& zukcQBLsOCtZgope$&CTbey&=QGESi-pFq<(nRCl8p}(?E)GPUW(PPmSf%>WWD3OOQ zAFimTWEIqNIMK97Ju6u!Q=*De|vOO zmbG6LK=92jaWvAwf+{WaL1nN6LP8@L1`JVYi9}hJECB&hlE*f`uwis-cGL1Y9Ms=~ zk$@mv!tak4n(DM9CM0x>ILggr&-3N>%KLiy7-b9)Z@1rPQj4Z2&?z~M3bO{QwQ`Wn zz5uhs&@lHfet|RHkJa+A5ua!SC)#Z4;Wecm2p3ulE*9~aSNO+sIG{*l>^-GQbNW!2 z6sgdl>(8%76laR!R^B1j|CK@5v|&QQ^8$o9aR@5hs&&D9*cuUQIG$Q)A-@e9;x!Hq zXqvV)b|9EfU3tgS@lU$_B`qu4s0m#*g&a#MIMqyI(@5K9;m(g@DcIMqKe7wYOAuvp z&OXuv1r~Ob$zfv<_untHqR9ar6&kyO>CYLhT)*&+rFc&yyOjhY%!QQbgph3dmT+jH z=sJfMc6hU+-0y1nk5$xA_v#_?eU~XPv!lBXkNL+;VqUHPKqEn=R1-aSp!XIjESEFy zb?2-6XC)Ky>tW{@-h*L2*Zr3O;9h$;8?kj|-&uDKliQ(;orop1o)$+uZQjexJK@5< zu|ZzYEQek$fgYJU;icyyf(adcIE(xqK_l9~cw;ciKV3KGGjIQl?bI~ z3^w2c#lQGWL}!Q!O|ht=HfBFp<154$O-eLV{)n$YlwIgbsQb1GrrJCM^E+o36g?7V z%rNv)R?BRip0{-Hzco?+V<+akg-593lHaEUl?PV{c821kI?7eQjnR2!TzhQ~G6&X(mzQ|U zSGlDG&4(+%n|-^(^if;kBafb)+=q6W@#GJ?9RVo2?N&LWguEvO)mOV!1*M1Zu+fc% z{u7h8@V9xa!Z;(5Z_5((_62h&?Koz=vp+Dj*t-bQn}exBTR8Dw0&XHiCoX1=%cBNS ztvHJ`Gr6)DRnpRB3SK1M{FGvkD?MY+LF*pEY@IwuE1I*5RPDr292O`$oL|8 zQfrQztk9wZbikrBTmLLxLH3yLxb)9ZbwV*=8>EB8c@#mK1 zMXjnE)q-VaSn18`qLFKMkdHUaq{A~5j+KVm;a_4GU2b%#RmTeN$EgCl7wcd$Z#8jb z#$WZ^T9}PF7w>{dV85U4WB^1(E}H*_?DHuOwuT(4FsI<5VXUz{o&-1V2}+=IXroew zHFmVnq&7uChFu05^d%K(r)6Plh*&7NiXj+N!GagmQYm$~@_PMt9)m3JG07$0fs7JY zR~JR4Q*kL%8cnEp!vLRnbnf*+k{t`>YgT_%%+13e)T@y<=GjIhlo73q>*Nk=oO#?TT&NwppppcXs!$`|Q5l=WbrC%XiH=-sc%(`~gxJ8H#W-Ya%Q7 z!i|_%^lAG?(BI*D-5TBE5b!4kK&TE)eV7o_yQyVG8pxGUn5W2U>PViyZGyOS2 z(`uJ^3eY-5%xM=&B=3aR;vKcXRrZ?kps3RGHqquTtso!6OQjQ!uKo!Kv8{AV++9T+ za7pcI)DZwj-5q#cz7pJ_vJw6Dlb~y=m+lC{ozU;&p3BO&B(fE)VKUUdQ7ITYYD|He z7&QiRgB7jBwFNI#7*C(vX|V+Q%b^@ZL6sRDbkR8oHP!hmavqVm+@^~9Ber*+VLx;CVqOv&$%c5gqKg3#ewdthQ@lp6K@4=jX%-)w_9In} z=e&aXxJt5>wvNVk&h7N^^ltZi%h*?@`mg>1N7^iIN**!+I2Q}%XxTe%>(hPfd!qRn z_er;+ONidlX?{)KVE6h!Z@O<2-t>1!=TjdQ?rtKM956qyPN)=6WC*7_-&8pYP1Doa z0H-*-V))v4F(rp|`NBF_q=(up=I;L@?iV5UpJwOQm@KZI7J{q=_6-O#+D z(%MNjl9OF=2&~x1T+zIFtj|@(#jC?u|K|QW3D7Cr*{$I~=6h** zygX7f`qLd*AI@{VOMDgcXGk9~MG-Sw%;N>aoxVTg^Y&JvEh@tP)%1m-Jt29UW<|zUm|18UQ~%uMj*aWJhuw>eN;>YptF#yiTdlc2w|984=pN=1-*`)Fxqm{E)mMd2 zu9c?EBTaQ^dx;I|7dc2uoSSaawN>%>+hV>6!SfI`?yhtTU2M4rbKop7ttLZ(uo#%eN1@wsB6x*2q<``7}+9i$HBbUS+G~nBsJHYvL?5~ZL%3KgRd`^tZJx)kHwfYHT^k0 zCYYS$4^I;xxk&lk6YYhuK%+7K&yS+mgfw||-tSOr^yLp3t7HOROV@#P?62To2(=); zXl9NPpMD_f5qaBhp2OmaW~=+5JIHj$C~LQE^zn0FDaO?7xTHPfo95Pie%nZ8+X%kPYSuKmvFU(|&2RzAe|x6M9k zL!Tm{U1kR)Wn-B51^084qQ4A|b>=Ahu6*o#W+2~uI)Ftj?E?&* zZw^!TmUEbYb?xSO_O-j()oJ>i2BsI*fyjfl?e-;lykEPWzE+E`IZoa8O&wbu?|R=F zm@0R%GxrBsGkL&D_U>_~`mtCO_q}oGXKuuFDDkjH?Qeh3_NSO=)EEVZ6us0()VTkL zQWyxT8NWe5NT^jDEXy)Po^f#}@sN1_oM_0#RD*LmDjgSUQ z-lBohQ04aMIIm|!i{w;PNrubXmla|&`h1X2vt^@b@JnXl>W+bfgyy3cqj{S>I@a<% zr6xK`rC=kNPh!HdMeR9g@~IVtLp>wTU3Xl1U$%c6uchx3lLoT}?H^DI@bewU5rQK6 zzLcOJl=it2=I-Z{Ov*ik$22WXOJhO%8zKtA2^eFeWWvhq3qVUR=3-INjnyi&m#1C( z1$FwJE)m6{Xp0w5djFQmu$QqS${VNo&gi z#}M3+YUVIx-{&e_g`LIq%S*hzghZyH4MNbFfQ^$xzHL8HRW5Y|Jg`D5nqU|e1DqOC z)tchlr3vF+7yG2w`9DfGxP4EmZ)8MHq#`v0HQ=rpuU=&umn>=oj0pK%4x_mRj!Hd6 z^U%-Ian#KnIFG}J1H9$drG^rT3EXK~5^8CACXgNOL)H*<##hIf*HT@_i)F3agNP7z zpGf^`t(=z=Y&^qwD(V*yy}>LU6FO)u(FVNH82y!o`0#k= zOH`CVNhG{D`kwiqQD71*-WI5g%O%ao6oX$)d+Y5Ihm^v6JVQI71cdtVT>1jWaA=K% zK6R+o;e^Jn>39sBtUeDNujBq+I`6=+=DZP_MSZn=`;C~JU_gYMV2Fg;w{%~Tx7auZ znIA-W`oiRT=KfuNjtHW2+xg=M5|stDER4c!BBc;kDj2IcIL z#XZ%7)Njf`%Qx*H4wDxg-|Br}XYS4bFJA&>L|RH;r#IQCi*1mm{gWKaPlA_Vkp7-J zw{P_J$qSut$=);fmlyBs1?{ua!1Zd`AJnr`!+kdUvwwRC-)MhMkN6b@-){Gs`_td= z>;-FU$$^`{%D~sx&`r7}2?dAxvuYoIG-19@df1P#a8DQi+MiKQDg_iguAVNGoU! z+QLp?shH9ot{xoZNaowsp%^jCSG^hhlveU;>lmoDMAHrtX6<$?gtn3YJTl3*c?yco z<#HT(3vgbBm`lK=lY_iI3gCZoTD0eIi!ZnoE%7d@`1I8@W!iVq6#kY@t6e(uBYRG| zsIPfB26pe2i@X*9xQ|Iz;<$R}BqFhK<(|f*SWfQ~$6CCjy{fc3)yOq4lv}%0V^*aD zqMGW|OB>rxA4lEQ9#4(e2(yAd<`_9XH+d|O&e}MVr>fdJ`KaU8((#`C8mM1so0rn$ zl;PkrNUR9;KH{0>HSUi0W=Dlp(&C3$Np&e@6cnh-X0n<%Zq zm)6v8p zrvV5AJ(Ig7#1)I+3e65mK`{;sFE9W^tdG>;wCtaKFfXkQ;}S4bl(~|JXFsYh%e&FU zY#N#iG z>`DWES1^LB&kJPC2K<@<{W9F;uI$Iu`F&mo#$iCxyodS__bv{!KD4Y|9>>z!@1I_$_p5H$K|HU;fe^kgA>x(RczTu7y z$3;_YyIu>OQ}_h6!%j<{mEpN1_;+om7xfMxTK>aaBBCMT7fd;#Qr6y&U@zzd)lBXv z5ygC?^aw{^r%wj_GzRc(x1rbz1}`WUhjcXFoIND{xbPhX+hY{m<@c~eKO-l3S-$v)I#SU0{cS}@x|xB(!9qg$ z7m8n~F8C>_6~Pi#E?rLb0uOH_*Ft(PWrhkB!Gh);nWqzB^;dxT0XjN`jDxsS}dFl!_u}g`L;0K#>YjjY3tewp;N(D*`XI#1Xam)s%3gEmx`(e1I!Ln?@{qM(sTxu{g?(c<(ByYHd4cCSd5hC?<;SU{(`a>AIBX1c zh@Ao0dV^f<(I?%YNB92QHQs#J?;z1cbX!NY{f62$_5?Pfq3gYQgs^$P9nIr{l&wSE zFeiuN{rNa+dHZa!sUJR}`-XX_*U~x@zu&SCoLz{kLK(BDKIst^>%<4O{@S>23B_^1 z3~+yXPo-r68-6?x187R+sCromTzDh4p#FEk>)fAtI|TFXTLR#J9A=WTb#gYeH8%a? zZ~o`O`Tr);bg6r2s4RaaH4Iw&GloG6C4&~Mu&q%6Oxy}BC>WxGP{3Jdj|twL(;GAI zYk#BkLd$tNV8&IrE7RtJ+WJr-#4M>;20I&2tAj!}p512N=au9iDt14U6?a45nX%7j+o|67ZeNq?-Sg9ha2Sd-aVLk>aD~zDweeE>!tKRR zoF3!oEz9`YYQf)o`#T8ALAK8uaQspTW%`mBB)`u>kjmM68ygh-QW-S8dym@vo59my z_bXTfQ*uitv^Oq1!jkWnyiX$>+RwG%owWZ8{_3q*@VuDZ4_`#tc;Mop`ImSo$BLmR z5Qtz|+|o6@6c87Cq>8|{VSbv-fqKchXo2NZ0lcg&TTi$2I7b*)i_SfY;ly7rHyo*6 zMA+1uj@8twOCcJUH^IKca}oJ;7r0h&wZyGu$w;gX+y_g4cv|sXSufRgolN{;SyScF^71$C>M9Hcxd4~Q zx7hTn9z&T`$;sK&MerIF!WOF3Vzy#})1n|3HdISxQ-v)}T%e<+GC!AoLb_UQklzhY zFToQMQK)K83G5^=!tcrFLpxcX`fam>)~|yLiFBn>fJg`m#c}-ZS(3NLM_$*(yANVy z2`D)LUbX7i7`eMcK1k_*CKj5b!*s-(;9?M*E`mgXll2c_yPIX@GlB7`SR0 zNw?sz%RM{dilr;|i)z=iF2cJG&N%su<*|TqI{~Xm7(uxi1J2fDbMb+whKnZ;>@9>p zwP!z9yV{G;sDWc{#C6emu>L8Mzs>BTRLnS0Ww!z?8r+<`lWS9;FXc&fc{J-!At&E( zK~8`ed)~2I7m!^nj8)*S`(E<*I0BYZn?;C?6uCK%U}TXYI*svJ2IFtXrto_KQIYOZ z%-U-BL+%0efUIP%gV@mgOLmm`O=Z;ee%}LG7eV3Z3s|+|hr&=yZ5q+^0^;Kd`67b2 zvOFj4{_sn9)R+4M{#Ws_Igsg zRg>^@&-e?}=O|+VL`PIcT}Z@G_>8b1CnW!4pQG!5Nvns}YOJADybGj=>KP0uk3Gv< z@bo8`ITbT1oEWUK&%*bjLyYJIIuVP>4wVWi9wQ#49G^re1ak%EdI6?_5%ib+i-v0N zvo+o{;Q~Pe=*yBqexn#Rs(3s)bjPrzD^3*s2vO7sW+97(gwh`6h7RI9Oco;vYl=f# z$#l<)C357Sm~57Sl5^s`^aWd+FFL!mG6(lBRAFLviL|V5$_QxI)6_ZMC3{m4vp_S7 zOG;_`gcqKub2VMJg)6+lzXcLyoYJ$%%84xJN?Z(6pmD)Y4=0hVo+RpKS{Z?It}ShO zIvC1_%A7ebGA$cbpjFk%Pc^0)gLUWGRfl#ato(X@VbiX-3mU54nE9La^aX4X4~?GW zph<*hfd~tbj@3~f9)W7hKFlgevc~MmgJP~+s-5^vKhdaOE<~8ALu|bmC%w$=M2k|7 zaNZh#(Oeh?yQ{J0vO&+PHf<-HGUT$C^HZ_KMTw8Hyd06*u%pplrLY?%$8I4y@SxNw zSbDkYO#ii~YigdHaTF!NZ(iQBoi-bGx%m5U((~UicDQ4ey^?Mnwif>MYyc3ztakjl z!(pJNVK(y~7JU z%6PHeVZD$^Y^J94(obd_kRj;AlnK7~&`FhERc9P3*5|A#Ws2)NG@{r8M6vW_$s2zMWIM zqW!CTt$P3l^nI?tR2j=RQEv~qqn~;?LdCTAZSu2#QEofyQ0!=H`@xZI#%52H`}M?& zdkx0lcs}tO2NA5G$4*hTeM%2>`R`;*nbyRbaltl@NgFa6C$h(ghItI~4oF5QA_BI! z14egI-emt!lR5G3LTd-qa}OR1Iteklg^O;e()G&GDX$KX6;ElDA`<(AXrnE4D$yek zFNW(X>6AB=a_PnuNoI~5MPW0C9rawMNU>n%PQJaG5_;@{AG{*PU+0i-^NMVF zBzN9^_gKfc8$2FC(kGYqhFI4iZ*DMJXuzBOLtPuFnip5qFV~C$tR$GMgrJihq<8(+ zu}aifzg`!*8O`oW_*A#w8lClfj6gUHLC9D>KTubQ!V64S&KX`ATYaCLwE%*Pbp889 zpKU}kIH~%#Dpt4jd?I!UTRv2tg~(yVM^O_~&Mu7$lZN9uD6diBqJeX@x%FUXR~(xa z30JKFdLx0^ea`Xn{luDDr44ZvN6BNqeV{uF>D&uWXYdhk;ki_2Qt3z`)2T3pqtx;H ztlZKB$>g;tH13_08#q3xDwyWaAi25PSZn0pa%<>uWM}rVQ)dv~&aW}aoq;SIZS>ex;4-q2~ zstqR&Q*$_?JXlA1LX<)USJ@_xHAW1%Swwvw+3Nc9$?8M-U`yceRfrGT!c=X*OFhvS zj{!3PaMj>70;ovO|8E5TKVwq6G@A{fuSC-47sBv=YLRfVvo>@#HBojpH2$S#XzgP9 zUxU&~b!|7aukeLj`oRHnl5ifQju_awBTRE+Bh^nb1uCF6nF1v>w^S%AW7a^LR9=J| z@~v-~1qw=z`(1B}urr+6=Az_-%=W&X-xLqcNCy?(`q7YF3wkCQ(RxAWr;eNdnh&g`e&NOMlPx1HezUqGJ| zzl!iJQA8@?<;lLnU+8^w2_4$!$Wdbej6k`))OFA~9{Rw|1Y6w@nFb&yG&M_mW zEaY=_P2702_vB3dmjc`NPmT zG(nsfS@lube}#&~pj0}?>PNmvGA>Eu?|hoI*fd7)QI!n^rN7QK919KNeM$%{Gq&Vx zgG%qj$*4T@1s0Y~!Fkg1#b)%eWn*VImZl0Yg;hbA&=j&2V(yoWP&mR)55z^-#kdO7 zMevKPXi|I%CadO067cWR0Sl19YMAt>mIyS8s%T-##n|c6!o0D|q?yd~xCSelsNY_V z%D~HQ`Im~gQus5j=D zDmesgVLtc>Iv$C4_JPF+hzZffy9GHU^1C*L3w z9JveiMRHEx#s{U`Mg*zfrUxzGh6KU2j?8#&^Gms-rC_hgj4FK=(XAB2e%tOl+)BWU2gu3IF@yhHAtB`53S zBwqknWKlciK@5zvyXhl3_a7hE(#53S;peE`eWr>e9N64g5Ael4D~Q6%5AL}KiXdZ)CPsq_h0XsduW<3Xj%V646wMl6q0=B5+ghD)nDs*Y$~41Rm5)%UH!$RrnGj z(pVbqlAdXnn~|(7lu&a>Bnq#tg2peR7@T2V%nGolpt7iMy#^($(5s9!5W$ zH&dh-p#7EB1mg{`YWGqI)QTrI9j>wOgQ^``w-2%_s7$D?UW3m>Z&G$O+c9#6*1?ju z4Pm;;m2r*kLvtR#a&VWJq3;;p!4GB_G37`62kkoI4gZ-d@f0Nt>)A4*x0)p6fpe8B zOg;)FUN^$wjX!6$njsVnK5R=&IfEIKE9Yun8)OJbB3Vhri^^jjX&K{%x-XbH;F=6i z&}P;ci|wr^j(NW)P=|?O(a0Wju*1lu0k~3nH(-w->SVo09l7mvb1~7IsISHO#;A6+ z)Ow=-GVy$R8q3_9GN9|Ht1MW}K9Qcq9ydZ$P0PO|BMd zw)7j5rvghs&b_IyDcBlzp=w2(aGa==?DYaD@SJ^OPc}T~@ z;ih1PZGAmnH0$uFEs`s-WQ7WviFry`Y~|GuK{*l9ddP5Xij{;>lSNSp^92cvfAS*y zA=~pY8`1&W`dzwB;VY+<#f_W+l@0)kYmEzW^&ih~n9Lx%HCm`+XeVdK7cOf5?Olft z{~>|h7dTXy4G|g%47#|3A9Z`QKYsqweOjLdE~7ooCk&vMexA}6Jd(FO+x@?Dj{hK1 zMnuN|=3l11e_sT`|LGU&3p@B9;_m;ywdH>Sem;xQlj-5mkq3CFtr*4}Z>xfSgpm#q z52f?Ju>S|}!#qDB$JF`GA^QQ=ok}TA7&ZM#xxZ=(ti=Vd<5_LXs2f^C3sJabCBwe1+ zKj5Ma+Z8sCLpPAxtlm4KeNZw}M;1-A9oE^0OT<}C1(Vg@ z1)ZZy+u1hR{8!=~&WgRjyO5m1nRiv#0BnXkO;nf7}7!I9u@@M%3Y z`e^&#{1Wc%!RFz4e5!CmyzORi#*V|d`}g@#jZ&pKmZNtiw7FMJOP>o0<;Q4l3#dsl zbPoK5H{_dwFWZisg(zSLl_ji*tM_NOf57+qt0l`|7=rZb4Hd)!5APi?W;!?odqNfC zL9-V`%nRRIR6e2A-hw8)v`iW0{vw}#vx}9N8*suxOU;iPw3J6-R|=}TV}g_>{KHR@ z(c3|g*a9;)5pEWNI&Eej*II?PWgXEHzjr8oXot-^q` zA1QSwj!1G>f`~!>2!j<7QwugI<(jHuOWr@g@tg-`%u59EmE#puU%_T$RP!_M!u5~B zX030e-^j|l-EpNH4?pC6gaG@G+_zBs`JV?{YyaZIr~d%BY!Hkyf%F6{vOBV8;JPh6 zJZqZ-WZaKRsdT>U5(^>NzC+z>az_|izCjC2fqVF9j5w)M?ZL+6xooBHu88-#z(^l= zv)JN#y3IUtg2-Bd?|oUtHgCG{gyhr)eh`(qCYm@yjV9QMdfbwC#%o5kjQqqK;NAoI zX>X0j_B8#v%AX8C>d#cED9gXibQ^k+UfHDfrLx4CALQzp_CWpC>@9hl^gT;IOEVx( zT;iM#ci<2jZDL#}MgW5^(ZqZx4S;@$xigcif3ko7vPe*9MD zeqD_MLpqREEn{`x($3GCUF;LJt8&?+*&TmdBe9y+knf;hoc;;8Do4mKyofDmXVLu4OaW(P9{MJcMANlRvaN03 zbGIn<`aQ4`ygj;j|E(_~j#M!n2NXJhr8M-Cz@;%=Aw(qj?!X$!)CCHRn;#xGNHzUF zRh&&I3Mk?glTjN7*Q)NQCrj$gy^;hZFNubIfD2IxPgUz1$Ro?Cz|mzA?Fac({w&O> z#sT0|7GLL^F>b(;VJ5r+ag#*?YFTwbQ;hMAlg-Az?hDWt98KX!(53?N*+Ln*B zqqZb9RPimSC63NWlXV7-`1k|oAg-fBS&GRGnSE7gec_UbYJr(b;&LPNJ&qvyykzm7 z`7#a0GfgWG* z+K5GX0IeBQgtjL9{uB0N0INFE(H9i|TzMzb?UHN~ZD^uvY081^dI!EkbHP&B zGMZ^vpWo=cbiPpJL3PGYG@tYb?X#Pa8kfRgtyy(s=gNw1vYDYzVXoFwj!vk>RI~-? zvpUiuu4yUUEn`Cl-Ohk&Qr3z28kg7ghu)7xy@Td3{mj`%v!QPc(Z;3fCY`A0;Z^yD zfjMN=`%n<@)g!XGxA^A&Ag5zuRbCW)i32;|Aprb5UYPy1FvB-Gv7WkDi7hJ%}MpQuV_h!bKgm!!^2YQ6bVn0DCE>o~!+7;&u zDDM68o+S)(ki>~(A_ML$6V8&gYgK`>-7@T$Qp)tVjl7vu1I5(OAljH`~G+j zaE85p*WhLv-v~GDL;X9s%WSz$+Wi_-lX+trQFM*XKO`xzXepEyL>*02x2US~MQUk9 zDd4F4eX7A(pfE7a@V~2eRu^$`wJ&uujr4#1ShN1uvF=hoclw$${o8atojbtnD-cxh z#MF&<`P(PEiu|~9bK4(ZKDlb956DNuYl3e*wBIwvyBNEHG z6PxT}o_p#9nfnf2h5@=`(RCA5g#6r7jD#Ueu^;dVFCP)`5cMJY6WH<-VHet~uf@Bc z4uek-mnB46yBSG)pG+GOia2(E4yGMPjp|S5W%}_OY@<=M)?A0%Mf{DoWg__aQ*_t8 z5OfBOHBD^x$a=h?1Tc3svvxdQ!8v$ODkqP`OHBuP*CFJT+idmzgjM9nRjVm(mto7Y ziwzZEZF$9*ORY9^x22hzQ58xU)7TdQv*j4O5nhOic3KMrpp7{$;!xW4HC@w6sMt*1RsDGsmfkZ-R&`!Dg2n95OXuC4&a`=;7bKoHN@l6R6Hy2LajMy^uV;v0 z-d}5Gm2wK{75kw>W(JxRNndPaLe^7^kH>w~rrBfDB)()E#5j_W9^a(uVhMUT$=(7ZE$)>ltF zxa@%btQspYm4JXeq!>rp8bFz5GxcvR58Zptp~QfgHEg*^yZc?VS8HkryH?qnm)W|_ zWV76ox%V4>Xd?h|lqrIEIB@09?SE!cKVlqtLx#Dun1&2@E5EjZ>_c3DR(Pnh1WrzA z&gosl%)IL7%zlYKibD|iSX}gm0sCZ~mHQYVb%(Tlw$7R#MlgL)X0|&82ASpZ9YMlK%FyVVsYBWAuyFTEvM( zvi?mbqF=8`m2)%2YpM?xw52Ack{Yv1{O04eDs~$8oe<@!WkxVThq3PCx=NbwQq+9V z-iUD>FfMfr7MZ!sq=X~FhrWy#gh@EY{x@!=GRF#ejN=&=i1wM=i5^5G`erG|smVtozyT|%#eF=k^m<;c7++ACnJb_Gk0cm5tlA7&S`vi+ zl-SUpJ;(l+=U1*i4SW0p8tYmpbh1JZ|0)wq@1(Zq;tfj8!c9tjHIGDaOkMN$<=5@2~NQ z4Pf>F_P1}3!2h|c`oCRL|LY~bsRLtxzWDmjhegVag{N(L7Zsf?fJi5w9-17CG!>Z? zAbwuADjOec%5i1Osd7`TMPeqjR<)*8^`uboSgO9LRkgO{Cl>qf zdGdlh1DUZybp0P;-$Vw-wa<0O*7M&jFSP8Jk8UV1S+y}|>p$kWUsh6_4rj_2UbGGv z9pd=N`~+!BZgPcoaU5Jr?u`w9owP)$_Q;J7*${C}Zc}9th<9u;PRxVbc`U^Zf}5a7 z*n`$_pNu+LCS1HI&18-dzu&U86EAO{8MkbfG8%D)DMY-(LY5p~66zHDs|JaSTcbck z$GH?FQYO2?C5w%HoPWzavWuH^&gxHnFez%uFI6y#3v@7s1uinBfkp}~oeL8|@$3@g zg9Y=>UsAilN*$0%vQco7EvyCv)Z=~h(0NvF{91Iv>g@ zlcR^*aF0IQbPu*_1EWhEMmunb6Gz~di=~fb)5KW*xDr>=pk6Ka29w zxX_m5;@wjgD)VIJDQZZh661>LF6`#3(reLOE}b+cPdU$OItpm7)i}+1Vr7x2Xd)b+ zai%Q(MsUu?YoI(3Pn?=AggX(&&zTX!_0b(3bgpaU*TilYEs$Y*gX}GZfvmE3`GXg( zfg(Hv?>9r3C8aQqs4Xp7fykyEl&R%6qcu}kKMKq6#17F)-ot)y51H)Q@9P0lEf!n< zkS(ZYN4KrAs1KmS=uWm5Te)M`-i;`3QXC&%pzaj1Gq4#TEQ4-p3F*4D@yB zNCPM<-Th@lxzJ6i#*(#T+mw%R3FgXO2$Atu zk=_H`$`pPL3gvs=n#)OtxRE`37m+bUqudHu7B&wEB7>ObR|9e!jDp(gu z-l>S?RhFdK%OtOW+jzX17+y^sIp;{)D}cRO8OKB+3wW2QTVcWCuj5+NMO@vXD9!{j zTRP!>{WihLrAB*_g{z>LcT_F8ag31fvalF>9lG8R*tk?;ArO_vU&D)StF z$Wu1n$g;`)3eOvaU((>hZZ4spl4F6J6dr%}7zJ>>8y{($p>yw=eArrC)XYLgcbCnI zM|T&^wy?c{#8c3^|B>yaVq#J$i{4Z^U9cT(nsGCIYItk9}Wm>){^r2j<1e30U$ z3!67iiMg{t)Ks6*LaTa${0^`$5)vsTxkykoRNiL&Qz7gpOC*O@;w4@fxJ(?^YmOV* zMeV2HXdUQ`>Dt-(BPq3mQLN%h%pwg&9eJWlGx1dpiPLQ}&Z=5pMSsCBk6UPkxfW%c z7{DR=izBeQumb*#-bcQm0%1*b8T-MfeJS_+L@Ttc6;E85p&CgzlU=saI9(6)H;VvowIdFg55w|EP-GtJ+iOHqNOaU00LQMMc> zi0$*a9Tt&7Zu5MQn=)CDF0*Pw7W%?U3l>G*bg*sY#?0oKcoxQ%;Q0JN!g*Ch1m1hUy$xzGvIdF%nfc!Wvo1v}H@4AblZaNItb?NPM*kb_6+<%ard3 zB}`63vk8i|iVkG;FhbC(i2pG3{S(9TvmAc*h|N}*K@}$bFCD!y}D88Pj-%OK?f3Kq@wL zWt^eBPLdULEn~|5B$N-fNUq+U83U$&E|G|yzvt(54hP(x2l5uAKP(iX|G-7CVP0PtGLzx13d@O z4&o+ICppVeR!aaRfX^mGj~vK3Kot_>X>)unll=+`>+jRfidz}W*KrS4Y0olq3em28 z=7sW)rOom7XL^HA6R?LE8S1)XETtUhoV?Q~Sv}KsH4>*2pE%=XBVVQ)FYH*XUe>5R znk0EGkeZdYDa#Jrm&oIIYz!|^^|S#QcV)jtB#SEq<_sXT&bT!$dFjsADNxiXj%&-@ zC%$!tHIaT(d(IXnNJAyr3n(iVU#&!eplOPHCSl=L(dfALB~xZ!G)^Sq@~tDoNE(;T zI7fnGq@%@~x$M_(V&Cf>k$U8Hn8#dTNbSFmKljXdJSzL>PC~rUyEP@N;e$#5A7lt- z>`gGaIS20(4UOzF?5;;-5z9;VCfw=NFlgf54uZ#(yiD=vc_E=-Z>R9^=I=2!?QkNG z*K4wnJG||@kOMm$E*p{HK%rTaaaME8t0ZKLEBo!TX}37IG;*F0k$D}g<>ALleFBtL!;@QrwIj4G z^N`#t6}3|@UtSiDr115ei5&#)7LpSuVO+e%!7Z%A!dOn9axX2UN|6r5$XJ-$IXA-< ztEcxBg?Xsom4iM365i`(?Fe53cBUcJrvsSblKdEd*GHQolNS;h;&@)AAkPWYY6EfG zDXx*S!*3@}?5@P$d!h8Oc$rDJl`eYBA7UZ{{|QPjaM+sXZ6*{Hp~2X2S181wuV_a$R;V`%?N-LDh@m$Xs4NO1FpibTg- z7Gju}f>Ch%hpn$jKQHInDUjB`3-2mf>%-jD9gL=xrM^45Q+%^Z<=|QnK2)Wqj>Ovz=KFk^4@% zUD$e6^Dv&&;kqKjB_K6W5fl>2Z$#=^--wAgM}hKFXm4pHe;`-sFeOfoUedIgJ9MWk zMH>Y6;Hv8Te$l+mr)M8f?QKzUbzXVUyIaS1BHjSC5Ya&Ry7aF6RV-v4?j*B(%em=} zlsxBuuAwua9LxR{f+I|vJP7$M%y=O)H9i0Alj~Q_W24>VrJ13>9l4CL4_>^`D0i&o zZ^KG}Zj9TECUeXjFIdo=ZC1Gd{$)GqvhcIKwj=_bR&;{-IbDbAhq!z>(2*SsH1{;M zNpU2*uWR6Au90!bIz@$qr%bgdoHU;QV}LO|02IDuL}r+nyhG@xR&&2)G`=1tW3b(nlx( ztNxSZy?ppCXiJv0e5$4@{&VtdX=|U za6l4WQxG?Jakww|=@rXoR40P5-M{EsfwB_xD>d@^UYR_xGK+Gdb+n1SW0^^2c^@*A zY+2IG4Sn9vaYL>34ABo@=@xx1dgOWn*S>3e5wI)8GT$Dz*b1>~rsXR~;n)$kTxu)k ziv`=Rps^L6FNdz*&u4tiqqrw^e5NEHl2(U6PIL+Bk&$QH&j_*3v{8_jp4JUP!p-EE zUNJ(J)z(ibU!2y40p;$DcQ>B7rOO$GBanG`ajAoOZoL9Tuss|lmS^X{Jr278Ul=$AaUfjv){NmZ z@9zZw?ImsdO8J|zFEsAuRNU(|deFS|4^z3abx=&^j8kW$N7>i!TJe>e4XN|sB;4;N zI_XlE!bv)q@@7r=W0>y`T%9R+byKH)%-xySe#`E(1wFB!GXtyATN(kmzTMYT@YO0gxZcY9#+TJNh zl&IU%E!(zj+qP}nuG(epvTfV8ZQHi3-hbS4?mhk7w_kEazGOzMhZ!@*oZ}mp#%Y{W zQ{9-DneM%YaEJN4gVXzF<7`V*4AQOnG2Af>;zL|9NeSDIIp#&0Mln}IfwEHvC)>3d zgRS{HmS1fOof9<4BhaWEuyhwAkW;5bvFp*HBaYh|TO2bq2V!REDK3WP3=Oc87>#M! z9Eu+fnImFo?<96=7G~jI@;5`PQ##D2WGv{YHUpZ6Q#kXhlx8y=?YUMb4fXPgXxSXP zS2-)julqXOS=O2zI-SwgW@?q`y{J3)htpZM7DnmLt^K7&%y4ml5g)9ZFsVx{jsG&Y z)?@FL*-}YpiY5E#_|_BHt|1Yv~tDGmiGpW>}^#SHaQLnFi!um{QM?Ccbu!RzT-_R5sPx0}-!Ri3j6-G}L ze(3UI-b0ud&A!6VPQK=g&cFGTowIuh%MEXFh%>ByYv z#qp>y^w9%JtbqmHdO(gbVw`eVs)I#0kJai3>2_}3mM!el@xgJk#|8R+;nRlf?l^%_ zvlBwwmg!@d@5Odw=yk49Q8UoJMGQ>%jM8F`&XQG}<6mu~j!tK0d3#8b5FULY<8tWx zl0mMz2Y7Q?B6Ez$Ge#N&m0W!VycsV_I??U%cXYa>Sqd2MLi|egz6FRZfIJZx9c=LZa%cM$dOTCukHOP8ZGu)-%@faPKHn&j^KYi@sZz_!)srf z@S3=Ned4O`f3Z(U~(ZW!AJjxWjH;g!h z*1xpiW1l}+l*{Iltp>k#;TXb^#!)z(;dMqQPX8l}+Ak{~s^HKrnw|NOdjSMG)uu2j62}CpR zHyBiuNGeJ;XqljJRFn+O7*_};#A$^?H1&+)=)y?8?ma;qcF8)v0f*!-6zERMWM3Fg zQw6kbWyt!yBQLVxsVJiku@ylxEcpH0i>aQ2|d#w zDGsvE|DtJ;%;o^7LL$YS4lstx4Om9&fEh#KgfMZVFkL99e;7hNzzYLzBQ1I4N}WI~ zfCfXMs!GB+V#ydu(xPNpU|Z+n+oEFzcv+C;=V^GPM-O~5qTwy!_=?+;GmZTNXB=@RJWQ zRIASvIVVA%>l_nt>9+^dDc2OiPPjhF9=mmNS_J1qI~PnmR?_|cu8c-!B;+>qhClqm3cvZOW78XFH!K8*A$m7 zyFNw1^27`P!W>E6!+|SjE9U|W!gMf#2|6W_rda^T8j(f;VS6M|G-6Ug-BBn_8ut~d z7+J#KY2X9n(aF`{9@OGEH)0e(fFSPeM*_w&!Z3j-6cx(oS^-DEWYxqB{NV`=1t8z) z-S+{*BV+}~cc4rR*m7ozn!_CVo(V;?^DeV#A`A+UPmZ(^h!=gA0`N0Woi@YXwjcb9 z(=uY^J?7eOlgNCB2pqxFB9jP9@vzPp&6Y=@P-EiDe=-l1e0hfzwCcxncV<)pL>rM@ zstFZPZtelA9JU z*l$zs)n>M4vu-E8{hQz z4@^2v(AEoK`u{gF`H#bb{EsxJ!N1A3F$@5J^#2+9Ps-lXPRPdI z*!sT=xz%dg$~dAJyxmtfG>yU%1kxIX;U^u0so{i#4G2Vp2;tC*gy@H^ZWaaxX`1Gt znXziV!6V?(`X2QY3t=MObw;W=-m6rVG(L^q_uxZPf#zUqR|#oEkSL4Wi{Cz{+`H$s ze_l>M`M)6cFiuoV9MnYVKNil0+Uq=J1$!evW~e=MLjr|3IO9evVM3=tLG3H%?$oeK z8Bnm`!U`h|ne+CP*7VgJMEf^^#^omK1L^(&SpuYi?(y73pq9{S#Np)RQH$AaP;6&d zP;?gS=rMCpdunAyf*dE&In*7x8M`U66}NGoUF5Nd7ZxKQ16aaKuwx8oKT~Quiy3Dr zq8sg>kE+Z;7apGoy(2gh?<R#RKUkB=Zg$Y*dJ$^9uY z84h(H2uk!Kfho&}+(hZB-3RtA>laWAg0vHOWe!^fbhNxF*%gYO9?knzJ}{>OG>L@hQ%qq*6EZCCL8TQE@vYcA8PkQGM;KUs2N zWSFg*4Hba=FFEBs#KV74o=9x(VPp;;6m31N#x_x*h~e-BlML4*n-rH5`+hBf`)*Db z@wGbE^r`xwSe+Ry!_?`U+6~n*G#9BxtN+GvWx!^r6# zWcSHsmg7U{h_U-397z<513pH6SNfXDr~O6<)TYaN7jwakqV%EgE0|<$Y5)@VsWuf3 zv~*}UyRfFw;tg^lfoylx@j`5h8)gyd!-6yTg?*kEPKIYd9o~pnpb_)ibe8@@-)#Boq0&_rbgF>N1I1= z=$~y5xLS4ioJHZg0l?nM;VFhy4lW44dkEJFQIF_{xcj$y6!4>v}IXrRLzY zIu_D2`$d6rprt9lpp`D+zE;mgfx&@vpb-Q3k8MG`uX8xn**#%CP*_7Z+!9}rYujT5 zA%&y~;p%}5dzJI!XD7~NSkHT;FI1FP9zkK!U;hKJ@E_xW$$YZ<`@i+2IvM}~mH)#+ z?rQ7cENSOrFJk}S-h==0%4tD+t1PGg`n}4X%*fd33Cv9ji-5{ki!^7Tc+H9wpA@d57^&UpfAfs}~<^J^J2c@+L>#ysv}#W9lJd5NqWz6?uE$NdK~*>oeAm%y%W;845=am$w*6 zK7Txj!9&`ayK)y58iWP+&VV=Tb&r$tYKYTQx(^B)#_FyA^4k|S-ta5)H5VqyaWEX| zF%Aw)|GC#6Yr;Xa=1Vgu@BK#kBl`B9-u1H;roV@p-c2=V&DRyfF4Dlx>`1(muwO>= zr4-s~y06akN8F4p&<|DjE3@kcb?TQc&5w4_o~7$jnDXX%ztv-Qv~wp_w-=f9J51qQ zV9@WQ4&`;?hQ0fZ_h)aA_pK2AH{^HaEX*I06%}>-x&616*puXiDq;+}8gp~}!1+wH z)I5Noc1V=7n`TM--)%0b}6j*SZ}&S_dP8aqzn%h&J2vpk!Qqeg)R z1~)XtL1sGo`S_Gi>y=RsNuj3<&Ra|#Sdbt_hC-qjg)~@&VA?ffNQw=0Xbn9+G}7SM zZcQz8dd^H3*onRs;o0_WHT``;<)O!Do_~#qtC7N`g%KD?8x{EzrB97r`A!2J&pkKE zvC;CN@1F-&_*}(@rwoHM@&X^zlA_|z^5mWjTIzoqGBs%myoOD+Bmd~ppE>-G0+*Ue z%l3)&Q?x&e^`ky0jum71#t%EXzV@6Ci^x2WW&ExN3p1)b7>>KB#Uze^1`G9ptW=*m znXce0O<^;PCY}kZyES8d`0D9a>2ZIczj-8IOyg>e^_Tk(^V8!#O$09IUpipuznOl5EmZS6&F1 zdsa4F%+;}eM}f=O$c0ELEXKl6nJWHCpft{EBjPg=B!_vlB1s%8r}uFFZx=;QGpSk` z?ih(GOpLICYev~3CW~YtvulQoIb?F9D_2+vLQ0YFz{W)V*jOQ=pC$`d z%anv{Bq}p93;_)`8JU}4Xvo2Q&sgYWin27d7XZ;kJC^Knxj)o#@n7j}21j*qWFHP4 zE~eq<28lM4v@);jEpY=XHy9q-&_|Yxn#5eQvB`I?=^{-oU4cf|4B6?1^%rQYo#1MJ1@SrYO4kaw!JdQyYP0rpkOR zT-UPIbEWW1u6`|fX@~$smZq3L8m6`Z5_20Bia~Oz^H8|z2hd#AMUx?`s$A^1&=BZw z^m-MAv{<_3i|7{3a@H2rVwWyVmc02NOKt~Skn7=mHezgV)+_c6x47%y&isZibsrrp zjXRK?gm#)A%N#eTVjI}VW+l7OkKbjfu>wLybQ4pkrHXTHd*~9f%ItqJ-a!KfDgr7_ zGin~K@L}~d6gaL*yif|Uie@5M5Ob<(UlEe+{F7Cm@VDhGBFG0ln@adK>GYIKi})6b7Ep zAw8YgPD@YQc~{>EPwe5;{4|j!(Dh%6v&;ve!!}tYZJ7oK1h-95vz`_c z{xA@k9p~p`8Rnr3Dtc;}dufw?&LmrBkE=qz$-tU2BK(4|}&hs+*t8AysAV9JYF;=Ee zYF2cY;ZzXvT`MO{w+F3S3PJuPwj4zB@*3)3&E!zo`i-R&D$B13!d9BdxRMd-RV_Wwl$YgYtdI<5Zw%32tk(XQNe5p0fN2zOTBfr3k)DR@6YP^#edw0=kD%@)8B#T672l_eEza;!Ar65it*tLEflXCWtt+jptX6AaSZH*$ zG0Q6L31p-XgF3g)*WtYoKIN+t5^>N7C&V6PWqSmqsIaL|Xrn*bil3>wr%DoTZDdUdbrISYTk7yVQ=m;H_4e$t%<_F>Qmig;OWub zL#?SFFn49oahmwN3^v=bk6`P0P96-7F?t~o3U5zVc`oD0q=$YY@Q`u|H%d1|~F!zus*q=a4f>1q#R-3A=ZtJAvi{+i|zu- zP>-`ZiRL`6S?M}dAGG2SN1~Uu4(caEj$HcHla{y7U_6UJmiB6m_$#)+y?a!N>COu+^=NU5Y>=o7b(xyo-_D zYaDIFg4T3j=(!=KUdzGf$BnX%4QU-2;=-h*MLeg)h)oH{;f@WM*$BX3&xgvsar<^+ z8}j&@@offvw?WC@UpW6gbS1e1Y?(8%DVDB}rW<8#LR(!B(-CLXk#9BN<_*M7i>F^$ zY>S681jp@{`=GQdSiK|l!e(EzcYyxJYhB27z{VX-MIE?~h^Sq&^MxpU_oh>0?k%iO z@9F2M4FG5C2;yYt#MwAwJJ~)0Sd(9-2^f1up*7^BIrE5-njdN~*>|Nf@)Q~~<9n@F zL32u*?9^aGZl5}3rP;??8CCI$Jk|+Dw_XIueTZv@fe zJYzb?Xt~ow^?V|%IccP`Ij$D{a^bMM+;4;JA^B!YneA_huGby>tQ8kyujE!1ZXTIf z+FNkYwd&f*u{reva6N>__{QA43Kt)Q#pb>ngD0_YcXEJK{~3+Ilbo4`-Wi zwu>R(JlxKRd0ygl!I~~=mx(8aq2;4;2Xzr>r0xX!DL8Bg6cM(IYw~g z{U?hh4c;4pCqD3rTbCeb|LK6gdYa3*v5tC`fnK=Me^OA5;wvzR8$Ftsn9W1_t+=lrLmcXyQB>pp84ULJ2X z9fvbBk>?3))^)h_a-i;5P78c$Q(?s$Kni~j6@Uv^ z%H5ZB7E15T_%FT#+)upp06RlibK755{Ygtp*3vJEoBn?y;)?{UNV6IR1g*OmM6M8eZ|@9Y%Ke?E(sqobOd(%fK#=uujp$AUn@ zR;Pwn1wyhtww!aCRTJ-Y^+t^Znyr~eoReQ0?37WQ(*ygf1t%3xJikfOL1E1a_4YnS zJ}%kzWM~^|^dQO!R+;%Dq6ds`M8DZeF5IGjUY3;Nqj~kLhvKQjhI`fg{s*!vp_ECb zT9ZFe(L&EwEfwR()-fI7wtrAlYeg@(TI$A+Cl&0?xN8mh?^fJvsryi{m42BX5{7Rwzh32EY}lilKP?Z~2*V!GG5@Ct z@IRWdrO+Jo_`lGieOLeh-T$AYhW~&Lgl+8YO#fSP`0w2C?td!srWnf4$`}QPpg#gu zY4KbN*+^)bb|y-h_Ce^0(nxauvR$tJCZSxR|K!!X`I45um7%R6S;M zEA8uv$fC6j(~&Tzi`3rPqtZEsBa#dwb2O+8CDpYhP6H1Z36`7Vqm2VvF_)8aTZla5 zSspD{klQoi9Ib7dZm{fnM={ji(so}b{a(iF2s1sJ+1i}MqrCe}OMgHIuQ3fYc=CNZ z)7(Ak1-|Qu@i;@taoG7(wWvENCmR=AbY(JHNKdGpo6Nu43^DZr_hZK}uN|Yhl?^V^ zhIc^0NF^&x%V4CZl2#f9+9w;yBsUgXW~M=JFdlk|R7h%3PLoU_$t|5$lWlhSv4On6 z!p%Yi(qQbWNoLW&Lzzdk=20+Xos6P6%4YIrM|Ltc8*~|T1{-m6v%FU6I6F8zGkWaY zA40g_`@8M_=J%3uzzF^tFxH_6kIwHUMScQ0Sut|?Lg|r0Xd-`KR3<6%L7={3Vlj#B z9O#V`%52(mxs@KK%J^5tcM}^sQRC-M*FbDz|Is93b+4r8L3(f+Uw|aXRTw;w^PH)7 zjVG>=1AfaSmnspUILu9w6ecrVt(<*g9Y;#e)K0P6s4+Y)4N+nJxE6yJW68-B&|?E?;7LFZY7BcjKF#nFW2a>4>hQ9WWsF|g3+uK+`~hC%+_ zl!ryLK^29C7v%0Bkc7O%!rNyQt^!+N6`7M}U&LIN2~9anA7jvPrdj~KJ7|!IHfx>UC9Js|C`O+F=ypt*xd1%46_I$IVH+-@UHJ1irfFZwVOpFN=~}SE1xK?k zSFA~b*1=tj=fyiL#pOSO2EdGL}A7ZCwXhpp#Uoy4~hYm23| zt1c6FC(V2boV`9JJ=5P|r1cKRhRM7P;EFoDl;9|RRTOBI1FkdG83#xy>BuTSfM*q; z@1Dj7`QiASXV)j!L*517Trp+{0*UWq3masbjn;61CO>4?`ML&3(huxFc}q5b__FF! zR)fT|d`Iwc3sk-#)joX5%crimu-~g%oWZC@0ZNb1|#>tZYbr>18Fs97WSenC5 zcA+8?hENJ4K3;6_7`wb!lPUb?L#*}yMT!VK(^dr}a0%R${>m8dJC z@`88Hrc;*Bc=_v5T4a%pXDNZ2L|n{*5{sy=+drW%v^rIILEY6ERC7rY?bvTax8jgJ zNim1YPPh>9Zeh1TKfwR{-0j&;TbKG@4F&nXT0{Sftg)!lv9;fqfC$vgS z#6}pX8^Ie~5$iL7EonocZcmz>J+tn~$$smPav1-HNwcrR+f~%>m?O_0WG<3G z<&rr}@YVT&hg< za?Q^ck)BeMXKG0ir&^zzFD_El6^}2r88*8ZzhHDs{L5i6U+67>0sq z&*i5Ws`yKRYxR`7dPH61!ts+~f*-0gqq95o9e``kJfFJ`+YjtMu{opZCDg$pVf;#F z$HdhEI}mO|Us2+=w$gNr{~k*Us;5P`bk-}QStY09YGG1(vAM6bC3x-VMOhYMP6b{< zCA+uXLTBvoV@r@Zfp|v+I$(Sy4)iGHrc;k+cMwYf!Vkd}`>z+2_Z8CmS3C}}L6=9Ih$Z{%GQd`LB%Jmls7 z{e3oFJ#$G|2)u90554TXLr~c%Ji5V!jJ+}lieE32yjK#xAxi{0$Y)>IlxBVJ>W*(Jp>$FfIc0G z;{{A3TSzPFJc;tc+b-Vbjxu~1(vI5SNe7V-*VF&pHyv1$H+MVwO(pBNxkB$PjP(OO zV;?x`#n+v0vQzrTb%GgxVV>$GJ*#%V`D@1BKA$f-gW(0=gaO8d8;`G-zp7q97O2{> zA|k*-TuB?wyf=*9Kz{gUw z2`-StB_UBB9-Q>????_#@`B|pDSW~om)Ra$ndahIWTX2S`}T%lM%fmS?{)%lE#V1D&pq zFwQ4x55iB}BHl^)>Z zIEjQ8M-^q`FB>+t$|F z_WGgYt)pkvyxPY{H=ygceRs+PG!eu5=i`r5Py4R!4Dacd^UvwlpWf9N-d7^Td3~0dr#X(91o4&;PP+_&TPf$7ILx4P4te9j;nKTuyNs#aIghGH`NPF+l_7J9 zT*n6t`dDVxoW0OG^Kl$x(+SA|v7XGAN0V~}f?#M~9g+mQL!e$DkXKzZ+ZJtE)@j9OP2OxOf;l^Uum=W}j@`#;eJ!jUO(-P^n zsp-dd93^dJ`Zz-9dVns8L#SwaCuLlEw?(NM6j9wO$K=cv2iDMqPAq!IMbma?szpnd@tHf2R$Q;IE( zh8Y;Pq$T!X>4B12`%r1E!hn(lF=i~Q@D!C+5#W3SlM@q#=G2fcGG#4O0t>Zfwp!-F z<{nqsvhgaI<b8SeLeJzzS2ubmGhCttPk^+l5h@hS6ivNLlX#3@9m)Y|W^! zOA0EqOXO-HSz1}ryDd$_kd~!Q3aFw&LKi+Gp$f}lB?nY^X!;qKPG47R*ohU4>~@Ro zt;6Ym8+@5(ut4w4jBil7R_wdhRtrw%JwisP>k(K3M)K%4utug-;J69f6>Tp8HURs#0vH!@^-g?kZL{@=I{|_O)9Wb7*0}B>M+9%Oe8h4 zLTk%;6rm3||0T&5RF{m(hh3Pjh(LnVms^}&n|s+`+||MgRBX&`fe9=|JOercuxAyK zEn(H%*7jg2L#*Ymvprcwr~Pcq0a4)XbxFA#0IT-OBTOjbMTO2&mexLyms!m@fP4`n zSULzBNZCRJ6DvZXJ_GI%&`h>c&{-={e~qYyph zidMJm(mIs4>JmGYPWOF53=R85=8z8`%}!G$C58>whTe$Mg#Wc-`Xgwj33KnqPu>s+AH9)Ng@I0^Tq(6I)Eg z&lh(;PY!PNJHJrkGSzjcPeBz`kv!&R$|BQ>Km7BIQyeDGErW&zau@SZ9 zit%V3MhpZZr@591TeE~7OINk(?6|5Xe0;q57x@Btg0@$tZSRj?BX7;RZ&CR7oULEd z+DF^L+c@V-Vo+I2hE~Z!0Jx=3zR5Cyh7o)wt!%=IPld zqJtB~3)CU*A%QL3eI+*Oe|gmG0$fM00Co603*3wamn+9x)?(3F!9J@QIDx8pLYp~g zi`zpl!M!~l#-rMI5B;Ofq@__4%Xx_D*OthUPrcW2eky)AP2 zh1M>;QDwJ2EMwU(zGMAV&8$Wk)f`^BdWFMTdk4*IzKdn+mDHYparQ_aX1eb5=dQj( zcO_C<$2n7H_l_a#p(&QnFWLoIHQC0~6G3*(v_8;f+aGSa_5^LFqeb5#cuUoGImA}Bl?GyU4oa! zYx|#@`l(~)k7wab>|Z;)<53r19hBeT8Tkjk?AJ$SE?#MHS3UykXO`OKcg&^xMvG!P zFFA+~7?bOKevs$=zc(~<~y zKp4|}GX%EN=5lDT`O#GtU(r+b_e(CnApOO6*Zr5wFWM5y!8Q9SeTBiMgCc^JV9S9M z?1#6OnO#KGoT6|k)0kVh#UyZ93s+xdnX^A%Xp8H_9ZyT==1j_9uhCXA>D>aLLEaiCh8JdYI`Enz_$B{x~*vZS~6?5*e=n?yu5Q4$cG- zxEZ2ek{nHx{(Q&>EO9zASVZb;5CsEX^KZ6g+;S%2^jFqqTHpQpBHjqx5lTGpH>N>O z_IMCtsh=5Ivc%E+xpPf@Kos6--DQ{g>UrG{Z3EepFy1V!r;;gSo`!R!X)oJR#UYIlyw_ehgZ@^G%it}vCJ|VX8bFl0P<2k;8{Ive)@^pVfxJYa3u`VGR?W&6&mOB zgS1w@Rxgx61r1;r5-rO>Q1G$nP;=G4^T$M4NsG0Neo(Cu8HS!skV}&zc3)V!GSBZv zpc%Fb6USPB8V$k>c6|`+TS{1+-8>vRi*)d5mC(C_@lWs*73y05{B^T*YBIAfhth~q zaNoq#KJMZxlCX{6-*tq#N)x@R7A6(?FZJ14ybp4d?~$Nu?9d6f-~7VPq=KNT00MaQ zsW=KH=2rRbFGNB=eX6)`>v#Nh^;r(}TiRW>gMePuBZ%kSPILIVU>6Q}awwIyk2Q6uYa zJS5NF5vVNK^J~!aCNmpr;P#Rf%(6I9oq~ylb?Z1ACL^43t$L=~c;soB`iu~?m&~xP zZy2{6N0Il5-e446)9(nLgTnz32(*oWmv|ddKHU_BHoR)t=Ogn7j>{GE?Les1#0@=Ptu(W4ww~3{6R`j{lf03%`8-i#3i6qG|Z*~3ePUcS3Rp(@cRBOZK|c5Dzj6_S=bysNIjJalUuQL z>?Ot9&criinL94%cWOH{%Z9BM9A_5fM0g6>tm~{||E@M%{Lm{F)g#tewD(b=;=HN8 zcIYwWiyu*=-gM2#wR&b9|Jkz7K$DiC4n0K)((i!-+Qj-rXg>(sJ{=?%J1zsT+=V!w z&TMWYJgd$>X(A|<$SJXu&0GhfD?ugQr zxOGTK*^LC_)eiO*b*x%)z$;5}AETgP!wtS872^~w!AWfjmr6)`ahr~4FTg8_ft%i( z^C@hJYRYs{wjvbUU{_Oc32=hnZ%7)8fORJ9<4E;C0(DK7+_Qv{Er!II&?V3FXhoe; zQI)bbA#im569&Igt3zzdOR><&*AYX8u(b#9io8^h4%gPj>f}wdPuEKpL)IS)SmL_0u&<8!geXPnn3`V~wCZ?r zf=`~sQqLj*ih0ucHWWGNebH`uNnaK`iu&oD*+(&woq)V6MQ{q{#D_g2?3iuL9f9Gh zOl>TFt3^>dIQMfJ|Eu^Fv=3IC#v7I?@jh{8qZ&bKa0@uZ&}NQ?@$n)3dHMUG#!K2Y z3c1ku>%`k8XCXdb=A(W_K@FcULX?|Sr~==bxGc2_D1>~ir)Ph7dtSgZ!p;9K?BROe z#V-28f(nFT_JywBRZ(g9!Fr!7z0HGpEWmjT+j&d?-(~qU!GgKNcFV9YT)HrKhp)7r zKR!usNZu~eX34ZZkZcSup0ni$w>~O$1YwtDYg@A07jS!mZx45#+4Use?1P`_`6k_* zvY!F|Q1XuT7KFXGHl_Z`$loz~Eu_eO+Hf}E%e^Go;^5XDFD|wqd5y3|!fi~H4XO!d zw^&^?(3YOsSf9mB%g=5GJ_XuB`>eMl>owSx4z^^TQ9}{`hW^Mtl_XuD<@$CXa_DZB@O{p)^V#E(8df;wH zD6!EWJ6ob}i*auCnJ-+=snQj#iMkuikIupUkUzPTp94WUiU^%cLB}f~bv2YP=(?~g zkWagjZU=F3AFpej>xGyx+qk;mZ^H*yHca7+vs^A@Q^PS&rJzGG5DJYUCV3$ z>uo`;rW8yk*w7abzj>4NpQ>359o)=gxT{lrHJ;tb&iT*?z9PZq*`AwPRB= znVAH!Qbnxh4YE;OKun9y3K@JL((HgTcT!4g@%wXtX#ws5{N%)d18mxzQR6<}qM%Ur ziL0RYp#!)B^j(Jv1K=p+0ys=NJOSOA1UQ2Vyh>7n?Lplc1KhA}IRdzo0&F3JI|y_K z;4z9UM@Cd3IZW7kFm$VJNt%Yzok3=yKgmeunO7y!8KgjQjRBo#15#9vNdWJmNST9D zZCCygFy%bndxuV&;&v$U3w!Z}GIj?6*A!5-_fE z>QwOpF3b_^WtsZ*Jocy4Oc0T}liLDRjNl}YN&zNYj7{2HCmh9|7{-Y^shk+jiYpgx zPb<-}LG-1Sdm-akhmxz(#E+h~;!F{>wGZ4dhO~g@Tw~; ze4}`o~oA7vY-X3yI)NE^*?@ zp2lQJbuNn-onvBKdZ2Ickfzy^YSyWe+BAl4RZ160pbD23$195DvUEgO-KaY;$97Y!BJ`p~kI;2tjGTB738RYRzGJIALs0F{tb|`k z@bzShB?ZqF!}R9L9x$I1!4oIt$w32Hr1k`&J#MsMl`j$#IWU_krPaxMYFk1g${%Gz zo!3aVQ}l8n0OlxiI)KrVpQQ%p03~}5TsRal0i`cE8qzx?`e=v{aE#U>KE!8!pQMN=^oFEL9?u4;q&(#pDS>dstTq=)>5R@{bLU zph7NDD~}UYX+oe3DYKwiGB6y1DMHa#rMgfIdy1$e4zdw1Ut8!$H$k483x}GQ*LluFg3!) z>XN9TJ+VZa`W(smEU&o^EWd!7`K|<~U{c}ov1CA%Op+{@EI^^9ZtT&x|Iv(cxWWBO z#{@c)lAm;k#$@%c(d9u&l4qLKrezh&3F-*aS5wY(L~}i5!wYM18Ud zOhbJ9+Q8X8kIn%p$L1m~*4P&BcY3BRV=DNG01e>adcqX>Aij*f8Q_{+i!>rom(aM_ zNo9o3x-mw&no0_Kv$P_;=1LQ%n4HZxUpA7^&i z0VKVM@D(L0eKAm+B1@ct$2QQ;Vg>_pp~(0>`r~Q;Y}%t!wvJHxQtWrAjqzNufnQ9L zPwjI}l9{mg#wR#^>Dvd_C-t73n0wf%uI$-8?07l9n9@60o=E$XkS^fy3-q_du0;A{ zZ4ctz32hJb-I>;VU=O~D>o1VolkYE5(*yCk-5x}QCs`Y9CP3@yC)%M?nxXCbzatX! zi1f7rSGK@FTQOdcXzl)^muH)0vmi`5#s2h>=KYdO5CE6cD-eu(ZI5{dsvWKLOhmZ_VAh9edzexbhAx zp$a4wUlrmT*+8*$A+?Xk#_zthYuPFzl)XNEw8|IbeO6TsU6etU zwabw1j~T?wvs|)(E+3lE$MNYfH9SEuuevOfCNTry9n@Q9Mo4)Fj}$WXVo!20h1dE0 zCES<4e`Wsgq#2wTsTJ8B4m5mOGt2~XI!Tlb0sb9!uqyUjp3^Hn zAv9Kk+Z0;$dtuajcn0~AusD4A_NfCO!hYb++x|b@i2pIM2#trWHT=U%SAYWmsQsVK z8>H=BY%J}R-7Q^=EhG%>Ol(Y@{@;}nRa<#vK?Gkks^-yqBKrgA9-rKG_CEl~-`KtbBBT~ZUsrzj^cd!wBNPa*_4{=0+|1m}pHo*? zSFQNDJpdTP)gVZ1XMKWx%yfnXF_UgGTz?H2Vv>Xx&pB#_99d%sLt9+&o~-M~Tm{pr z{ugcU*q#ZPEeppspV+o-+qP|^qmGk~&5mu`wrzCOvH51+*>mkP`#RtDoc~a@*1GRi ztBR2{UFYb0lLiONlN4ZKnGq+QAr%^PSl!lV7P{)1hPf8!(keKn^DPg$aNJ(<0Q1Tz88P^hpsuz^8!>k-L(jw1wD49=tpuB9VB-*2 zLyr>PqTaa*ExdA1yb@XrtCZvRqgI*mmnfs`3NX`vpdAiqHO#iKz1lN-3?Ff*s5%B3 zhnbwzd$)#>0b}yICY1^pkyvYC>vmRM7Tl63-YkK1I|Y?H1x`v6gLz@q`t}dmFkAl8 z%PVRDD3UT5#9*q>7fxQx0f5t9{*V}r_`zr^V1Nzc3#qrGH3r9hD-%xTE878+@5Ibg z^Xg!1w!0$>&0D#Ml2mBw!wFhX(=^w5i@)maUu+?U9@7?nDm0+SAZ32VnkZXz&7njZ#Jx^=2i)#U=p(TWkLyMTglOoBF zDoYY89wigY-aiV>5@e~ z#Gl9#EuTS5N-pRFr;+Le)2hP_N$@m$v9Kq^{^s*BgPP z>C3IRpm`J)e-5fdO<&PZa6+S1;R=e*@OS>$_o@wSRbD~Y@Mx8eh3*#@Pz^u%w`WP^ znV9Zgx+hr(!(kj7fE*_7 zGP4*>9?_8qcl8>dyu~XcTsD5fp!JC3%=LGc>WS~i&YGX(=Jd1=P6kOpd{X0%JXwL=O&WGS3;H&{@4}J+D9TFz5}+ z!IU*?PAYo)4)X6PpHUikj{ZhD&UY`c`p@?QQ7ac$D|-{ye|88}BWDXU*MDxJyVN%1 z(S(rrx;idi2fp_~rDRH4YbAEwzw4rWEX&B6CI(j^rM-hl+f zP}$}zOde=~MSV9e23$SVJhD}m^wjQNo<70v!_=W!-y;8Mi&Yi^9jaC`Z`&Winl(AyiWR=^bq5WAnNZSuGZxCIJQX-vOrwIt z+2V8vm4a1azueFH<&I{HHfOfi{R^14_ByW5LC9FCtAq^O8NF3z34Sk;+H%f@h1c$p zMlqZ7xM)NHRQ@fFAcRPaiUhrc&noaus?ehhoVv~qZ4o?czDMqQa|b(Ae}u=&ZJ{U? zE^6u*w8&!RMro?WNdYgghy=Bpa=+sEEVm5G5!&DTxcg{Qm*$GjSlJi8dY{o`$S22R zJL_c`6Aovfw@}=-NQ6f`u}9D!g;zF!eGqz(({Ut5ZFs|LAiqzbZTcP&`$N!MtWHj0 z`ZT`BM8)s4?M6goyYEEg+WecnGp0e>sh8Vb{#9i4ZN>%$s%gc8K_dAaR`{9Q*3k1Z z1rFs2qb!+^DU=n;>HhaG@o$IknLO^MZS!v=%@JSD`9Y|Q>i zhkp{GNp-`1K@f@0X2i`z7+V?Y2>-WWf^=H1Nkw;~s-mz^VYwi$U6x(_P*XvZ$e4i= zv}yz-e?YA8WVHw~m9Q{8VorK?HlGFk`N!kOga#1e+;yDD($AlnUiJ2EnyyYGLwXPr zqGi}jN!mW|d{1Fza33kM^JbyGI*-IT2+4-4S*!Y1L*;)wL>tc`JH|DFJVI`H3RJQ zX%IYH2a*@h>sV4B&H8uku04oJj46445$7!n=a2?HZh!J=;omqWjRx0WQt_W8`V|fa zCX^{ge9_8_V4007crL<+Xul7MEvfp=ShGH-uicHE$ZE8~loJ~VZ~9`I9dL1Zn1p0WJ?lk+!6KzIEm z<0&tnG6wG|Y1td;Ou`>FtEk2m&Y&gDSGc!0b@oWos6wMDVvD2r7T(GDngp?eV6R?H ztXHpk*g}?Ak4cZfN*MZ>HDB#hK*j2-l3-$WTI1r(rOxQDNw$TeI~!!t=wr zhqB>$m35 zu7H7n8op(YcK>;_DmYtNSlJud{u8m^`f(dKM=5)AhyN<#i82nTOh_YN+qMm)whNfC zq`cbrVJP_GNjTx4@kk-FxF`>owpqV6et8_Zl{z2LIEBY?UIRbNqYY=`0tceG6=h>> zn0)y+G<^DfKHvmcv}%Y2h=ZH4X1DE4%30Whufo@kD5@89Ptu8WBxa-`7UJJnnzqIp zQ^FHWRz}a~9STR8rc`8=XxWN>9|K*S3Mt6di#}G?Iukej=&Oy_DR6xkTD5$)=N)}xcB4C?rmHP+VvD*o04yzj?6%ec`5csfq* zwoqkj&nao+%Ta(@y&A{OPP$Y45_P7Hc0M>NbQqzwDE0Uii7s_NjrLHTSX{Djp%|+i zdaY<-v0x>EysRZl~}BmA5k9p}9Mt34eO834cn-nlER-f$g1ZnSY@? zj4o9K+fZP)!9{gdVUgEx#Kh7QzuD^JWuNq7S37TqR#Fq03!^3+SFS7^H&&rx1vZ4c z8e`Hm)(J;L@dNzdM+b3&GFKpLW%EniKgtYyPVK?R#i z5}^x&gc1W|6o!BW#SsECQSK(#jwVdmZ*Cz4jb|J0UE~lOi^-3!p)(Dw);{T9UKn#d z$j|WbeW?V#U;Sw4kRp_1ugnRY^u0@7*?HT3GrzqEd?Nq}a8ix{$z;?TM#EA;k8?~5 zvP#1TpI{<^X*MA@s5hNd-}S|<-i4Y}>Ww5pXEdyi_JR>LsR!r(^F|5lYuq=t$txbH zz+?~@>lhtm;-rg)(0|i;tr^N2$NQdI9DY|<&9=J=uQ5>dQ3$E1Idz`$(U>5g%zkE z-UA}Tq}2zZOJh<1GU13PVx8dBmE4;%oyr1uNLOkF_8+O*X`r1puAWid0?R>2 zG4gLy%&mAyPd$VXol^(iws7j!AD3q&l!?yiCHa=EqS%=yPivernaw5q;J$`z{+gRvy`w zPuwqDvsT~nchKkkFZfqy?`jAhZhmG>96RT=8eE+(6&dd_(m^Q>6y6!W@&?@{eoZU- z1|m;4`Vs{zryia^UPgT0=}UAdtgE;5j+{M92nTtVU%K3hm#^H~HO>nrcZ0HCY%Xm6 zzQFsH(D?H^u^#<#nt@@(;Cz3iB03=D;yVMbgQT?VD8)2P`!Ob`Lyv7!yT5{ zCne7ze356lsJ3+?I12mIGUyNLMc8#5V3HKOB+PM-Ihcq~Z9$blbtd5_R5~^=ehIP= z=t*6@dtjITZv2fpm`$5Y)5fL4HOhJm!m^U-HGW7w$^1*N^RJZ1&RGZT8-7)=Y*E{90S)7hMH;p zLkI*zSrJBo=a&XSQ{FwPaQ=87DTJag!Som>`nKf@SJO}ug_Q$CYWY;_a_VziTy&dx zF4zmd+P&c29tH!W;#c*c8u}B24Yl|?JeGXFx9yqBXY*=c(}J?G`(eTzGeUuZjLU18 z>Ri(0V^TC_v6K(DxO}B(Z6DjkB-E=a4E7B}Dr#OU(&jz&edlDuBG0l*IS?M`M%V7? z9MD5D#pQ_>OG>G2BXfn+5=~uwM+O&7Dy%9X3P+#Z^|%&I^r96tu(AdN_kGKH%3E8} zmF?OXHReL98+z44Z2AfVXV`g@!~2(b^|h4S-qB0?i1EoMT<;h&4~(o zTdmbOqSnqQ+-#6Xe1w#03O`#CY{|xl-o)a#t42;_J=CQ1vJ1YIrZ6j4T%IqtnCsb{ zfti1aa}vpMOxrlnUbQ6>O`ezVW8#5CIcf)mimiQz%bZ%fYtG_iSC>n7v{3t7 z{U+K>DTv9vsI^5WD{Vo>(c7crL^QGjLo&mI(WFdvobcokUI&5vV=@G9U-y*Sy5ep9 z_Y>dreret>C7L9UC?76I%|?>eJ#~S8emc#*L!+%$EXpyHIj8tUJKgTjq=oNuVCZkL zs=U=QoXXfGWZNMKTMrDe*zt^nayPwUd{&1geK|i?ohwo&Zh0E>0@Jd{xY1wAv6d>m z^BT!fl<2qpFzs@8R<#4FYk zalDu~B{JRVspF5Li@5h_qbXPgtFRex!0P@dvOB5Yh7b4dmmuoLMpF7?ln=+mS41Ks zU(F-xm%}n%v0VHO0@hX14L#OX$_+l2$CxKWe`1fI(c}3_z3LX#tG)8YVL5*tW;Vfq zXt^VkZjhoY+VS8LxY3PEKrT+%Wb{e@7V~zAF>G`BYUp3;?N~f&{s2VcNnUHO@>)>$ z@#nZm!~+uQ%RUJ;UpRsinDdhcBJ|u|3aad~x;N`*OWAJ`vlaTEeHLo|sMv|;tjL)I zSnBRkK8C#s>h7SL@@MSs7{)e#6xs*HW?kHLYJ4Mk&H&uJDxx@F*T3l0-GL7E)H}*I z49~5R{zDc>DWZgXS*P~YEo0emX-Q*LvtXCPF>23?yjx4h_mTpcipB zBIpABT}g=C@;0>{z7ilFtG^m&^gY7Us2uJ*`r>a)&;|Mw-YWeCxGEWP&!(kkw8L5= zZnLZ*lMmGHDDi7qCZ5wH{Rd{u-i3#H4g@sA4Q`HXnh*US*FOA;bBf{edpdp2N@q^* zS|`r%^p#9YpW#1chW#s^>HJ1qKf@SyDxUrC!@q_wkubzPJ8)?Z5UD@I1;$zxhCXby zAZtCmVCMU#3DR&-D8t-P744V68KzMeNuAawV2 zb3d7uDL1p~CW|v(<90_UIU}0~y9HBD!`%6F(*4%nHqc;@@hWGP#-2)xQ7ZCn)kzsH zo!6AAWzkQL38^Y)4V=S}yfG3VtBzJmCg1;A&KlA35eWs`eO?4e(ado{mL`!wPu|ocvs^1@i;<2@ane&)>c9N^ zTNB$3Kj4oVap|3lsa8RDK237P!cls0(JlBFPh&=#tsgxkX_Npku%iI+wIRt!;9lH!TRpPH=dUM*^6yhc&4(9KF?8m zOy&07O47E+N592=xb%~_tjmLM<;sDQbc_t%`TIT|vl@+fizfg#YiH`U|lZ=;j50@2@l-k>yyWgZsaaKk_fGZY?;Rk0`%na8e!kRqYWZh?X ztwWB)P5J7y{6b;RGSZEWA!5s{LJ#~S^?YtWISMaC%*5#s{xAMN-eHcJDD9DVXU|y) z`dj2F;;<2n0z)~1XjD)OC&D9RsBhl%^Cox_lr&0pl+VH~^9PR`+4g;#Ld3gmpu+h1 z1Rn~VC~aX}@3G{ZckQ`f4Z0opl+VHPPbCCmwpxO0XimySNM!&KJPFe|3 z{zy)wJgDgid__nRJjtY%FgM;ruGA0D*U#s7_xK1{ekAednxCLkIV6M}viNm;c1f>Q zdWnTZm2F;-c;mrn)J5Sg!BvX(mYd$`A*IiA(meAo;@XbNNXIhJ>1anPVqm083<`-F zENkGL?RP?MAd`pV-G6o`xYp8%hNpZw;EKL?8@SqVzqE9hq(@pzGf;TsAY*ik#9}}# zI!QQrtB6ZAs=9)RZGX<^i4ZY&KZjJ^AgO&&pCcS4{qk6->9;}LyreGCXT?2~KyiS1 zUy_kR|H~lnpD1blnu4eVk3Jr@-yWFeV6a1aR-x5(x7P5fx!>%Q88p02VzXk<6nlzF zm!%XE9v=a?oOR(%tBLO2gi_{H2wMe151oW}#=k8IzDN6!2!eI&TyI+^Zr}QAv?iQ?*%;q^yAXDz z&>D#`96pFU_6VTLaI)^`3o{LdT=zQ+suCx+WZK|)+fH#!D#Ws_~qBU|6d0pmX#&Q@GV#;N=$I zycPY0J=vUcAD4xK9WdJ3YXe@p@cn6K3LLb^QaLf1p4hR_m+pz!bK zx{jN9q&y4v&@fx_h1)s^pnWznSjqF&V5LRAi4+KPzeUbEb6Z5d{k?1QAhGQcoFVjf!9-oQo3@-S*&6-l6zG8cx~{OCPqmdfnH}!9LIqf zf*Iix(yw~?u2zV}iOZK!5WQ-+c;?MA_h)Kv_j!#E2BKM{{@4W(&Uj5d{&xdJhMRl?@sm*xz=*Ui%c zpMOa%DIUm&ZrVN_V3`J8#|Rq}D4Yh?U<8Avq)_+!Of&xkptwuDDomFTTushPsJ+tL zBr1RLyTr{RW^f)z8M^1eR4583a2n#$FNpz z*>q|Z%fXsTR`O@@b5x;ClT>MvswO0J!wQnlP1+8JY`NCGJsMUI+I z5=IkbLQ7B^7IkZSJ-WKJQmkO4+~0sj7&*H@qpCP_oZc!|9o9aASp+PU2;!9WIqqun z(ItXG!E$~n0s!UpS@7nnmpP=Vy5+L^Xg$@S1^a_J}MK~g+ zW|pUV;z?y@D6c?gFn)kJwzMVSJL*PKIu)6PdhI<=o#vEEvz7thdRRLB3F|O$-a6F@ z`#@&8pPo`ikq3=n+Gq<9un%QZ*KO>Sf-i4fil4R)NjsSNo3q)s^z6)T`*D^Nrt9_L z&6P-Y=|t=GV0N;p?nrvFPArov%Oy__IviwxbAan^vEQq>gS1=52!KyAZR(wOy`8)Y!1 z){*$iDOfau9uZr~EDfgnXT!#7K?e|>W#DE^maan475e16YZf2m^BMvks)|~A%l;Zl zSO%)`GUj*uEqhum4GyVLW*@jzrD!rS4!b4_f#U?r*+i>;fZaaV zsf~xP;EZLN&^tU#k`rpB_0$)6JbgNqO@*hZf&6FrXS4(&bCsfl42HAZF;Hede)jmQ zNq58m(9R!cn&0!R%u|iOt=8wgz_pT7x^d)fKx^c!AP-e7v6N|^M|o7z0YU;(H|M__ z(sY5n!CF9w$$ZG-*F#Y=2XuZ5;Y?3f+Fkk*fztfsC8|Q7t}TM4ix<#9X(i3e zX3^ro5;8JlP7SJNwFeIti!}aKHOHpDvH3#pL*X$P9>YsV63z|O4Vo|($#HFoBw-%+ zL|=9kTDUx_413L=MVd0!%cA8M{CA1aO^@aZwyJS{+%qNwSZ)3+&QIKu1mte!SY1$n zOB>wW$+0fEdp#p!+Y{`q2E>>#lU|YML zY0pbrUyvi6R~om{;W8@`lliyo)+LLla}|b&C$_Ux!hNICL}7{ca0X4Bdx0X1QtAfT zBCWifraSk*pl`sQt35cFsPU-ThaKt1FQogc^_69ti`_S zY5>cwhol0N94J+fM8j)f2GR-lbtVP91Geve(_caZAA8Y31zSPdx@ z+j!$WYbx~WdUTD4xf`7y^1SL#iosz9Ei zCdbr9;L8;DKE8SMTA6l;%j68BmPVY*#7DuXdzeOPpFFu&$VQpBJwH(4us#q(0E%I( z5oM?4XizGg$*$P|spk+QtUeoUzzST{p4(5nZN}C;xd8~ziCXCG;;DVS0d~(7N6bzM zoZ+|7kzLS%sO$JWy;YlM1b+5+uv~2JJ(>fc=XC(=4&Y$VU>NLqISp(FOJz@B7`JuY z6Yhc~Cgfu{WY$Vo+G<}~)C697Seq4l%aZwZ)|MC4>_EH`z#v-T#6ms1!8q;-IgGvG z^!o-nnx#7?V))6a^hQLM-7f@Hj#{4iXwP)PvoYP4bBGnEB;(tfQZ-_ToM4(sFVID9 z#VEoGa++l;W+d}+=%tviwf7z+C1ZOqq_}4vy4d5!c)`Onq71c$5$8tQh1{M!cBoz70QS4U0kWN@h(j&ZNfPuj8s`3KyJhTR$|9wA_*GSZ?WmUYub7t1rvtot^s6McP8s~Dr*T-PmQJ**L=D3z+Y$9Phz(Q3=85xb zU@sPa(yQUHqp)k_7wAnAf!Nq_hCP$pmFLz@#N67#{lpYo-*INx+~%ZR77Pl0o3fEV zw7;G^%|N>ixd;pzb%PkR=tolNH1;b}&TrTzrk>l6*nJ0_5xcFdMp|eQ4?0p9ZullR zp1au~1Zv55!Ar4sz|O)&H?X(+5x%RB?lJE#_u>9@}UxA4)i~{X1~oA)-NG$ zD|B|%0fL{*2=)c)tX_$D_F+7Pk?-fct%=mM;3`Cjmq8swp%=Aj@7A!U@oe$|dX5aH ziB&n!9bC9^L(2m{STls&b;fd?M98)7i)N)GB(T?>Af|De-4 zgMZboUzq@pk*!~E0E?lmKZSIoG(BQCRV;*l#&VtQM6;sy142ZaDpRgZl4NNKATN@J z@%kEIRK@-!pcK9?tTo8_j{oQ=7P%vn2qqCRT*L^#FKUu9osqf*OyO8>!bMzj?nyG| z2qp3NT}R^(VdfNiiO8{+W98;|vo6?{N9BfE5N@eT-5hBZZy%CO=bD_!X(%4O@=lB= zN$4^Y49HS<3Vt;UN51GLJVdc_Z*~IjM^GdbdeL(3nt6iHPk|SfXjtiodLb`$*B}$5 zAItXNa38Po}h~Vw?#4gXgI&L?W&z`^{cJS4xTO)xl^v@eu zFS2)ncg+188!xPP!ML#9mRpqPcx~w6x?-?r=*Rf3MjVEakHr!!1CG}{pr%ml9_Acb z9vH2(Q=a-09ZUWCvIRw9;D zNrFBorwREZU6$rJ^}f(FispLS-GPa-!Zr;2$mSpe!^QFo8 z8z|I5IDM4;)E9x;Yrr3NBp=XY1=0za%EQ1!R1PFmuu?{@ipl`gB(z}&vJg-y<#ylZ zki!P}&@&W5Phe;yx&e@PTM`)ie6U_%RBkGOmTB#Ht?n=<794YQ0+DuTtm%3?v@*NL zE@4J}Y+=Yx#9mb_<-tm&>_LUaJ&dqrU@I3vijejb61gH9UWMODKU|WSb)EKt2@)I7u0Y9Y-SOvOa{mpAuV?Kp|BI&*HepQtL^A9Ke4u0tTxgS)ODd= zo{!+*v(pH%PP;)53iGknzy61N&$8{T3Oy(g5GWK7kjnpVwJmF9Z)W7IVq#=(Z)W=c z$7lR=zgVR@X8$cx{lSNCQO_A=g0c)`)P!e92qny zap?=Bfj~%)D@ZKtxC{DBDXJE0M>Y&a^fIrfGT~EGzW(`g{)PzDpa~cRnuh;P@aLtq zH*9KTh)B1emcRw$m`)cXTtjsh3jFf;w{W60rno{kpw?Sw$e~xVP)?#cBnlGuVl|LXa z%!+w%*z7D^LV1UtIkY=YAM+4$H9gb=$E%k`EPPtwVsUdPVWZ>1vw&wC2jv;$T3wd|n_ z=U?3ZgqS#lj+32;dnRI$s5#+5|q3tKGKM~n?s5}ZXy`3mEonWLAyZS%(Sx)ah(*n zq;ZOeN6ih7<_-!8uS>+gKtZFXfi(_E2RCa*<Tg& zZI)!CW{@J2u}Xo(d(gzVVGvws`$C0vpk)&9M3%H;5S(h`UeV@UYV(E^OznpyO(jY( z-@yTQ{xtIoz%u#0O8W{-$Q0`ht zuJu95<30u3Cv;XJ>#+aAph1RFki!W}Z-wu9 zTA8S5z5C%-;h~x*Oe@fS0OuV-CycQ>s;Crjpd{k?%grRmj`zjO z`@?_)5RE21VORyY?tmL4EV!xDK%X3B3ob45;c~M29E3=_>bBXas+YqLHIREuvUdWt?>(ovQuuPW5*>=8#x#!ve}-JZth`RV46etR2v{r79@td(n&`;tv-dxUXWcq3)h@ z5!mVJa8mL{h;1ZDQ#_qciEb}G+HH;^+jMdQ@q#47G*bnze`O{_5l=Jn=InzSQ_4Ta z27Z}onOGnni=3a$&@TbfoTksBNlT!a>8N;jNsJNWl=2oa+08ztzW-Uz^B z;nE=*Lryi!#|s63XZ+$)M4Oso{jsQ94^#Lpg)nWtMYw>cqRJ{{OXbY%D_X(>-$gT* ztZ$7+L#GfRq!DAj!!KJwZJSBle3|>?6wdXdG;@8Xw8e@2+ai`--aY z9Qk6k!K*wJ$*gy93^00%tKd?oh*-=rXw!_E@zR?%E!M&UyG?PtKGaIR17W%{9haOe z=4#|{`dUa4 zI<5_%>$))=>|qb{P8v@Sxgp-Q_Br1540&?~{Dkx9ScQjssUkC^{QDaM?x=b!kCo$4 zgwSq6TWklMltS}7nNqofb2{1go>~B)NRmo+WDjQ1^XdHVsCm6ZzmOi($~%MKHy>{ zpmy)@t~m-gqb&ZkU{0im=pxTQY%C)%(HkPF$ir}`;c6Fcr{E8K8}3C>T`CB01TuEl zBK{!di5+2$mTskeR!G411J5;rLq zT~^_mbF}@wD`%x!xG4)RxesO*DlDykV)zL6-~!&hZQVWA51i5N&!}5lNVcCOR*Oo~ zN!hUnqGx8rJ~SZ_ zvdp=c=VRs#2hZEbNNNpGhUF^dLGv%-OU+gr69hKcC)&-H>wvt@D&yo!Mzr%^prOh- zkO@X}YIVMB*q-y982X|)WEyY8+(_bPkE>eJZ`4MP+)lJ|JSbAcW1B8b&}|e4_)k8e zI8-23tsV)|-<=>_%r&7j_}s{HuvWo&V)Q%2VxDw!$$J&rG^;!(!Q8E4$neFR5iRt# ztKy4WVoDt)clEmh^MNZ3ndzuTqjD3TJ(kBe2rNi6Q_eIx?!o;gSHnw4KaIIlA z)-`|MQK9$;o~EYTHBv0@q)A^N_8DBqm)@_R)bvc9S$kB4-?4vVwYL=PSllcVGQkgv zPRAPp3FIgu*wyAAx~O`|vaD|Fm(tuAtV?%!vOG?Nv3E>Yzr|Apu~@ZSh0v^!-%Qv3 zQRELdUoC1C3eg+`w~sbo@DaMQ8-P@6B@@g{V>x<$pTJFTbBY-ys$V<7?1{uE@skK`kZL*#i-KsM<{o*rbhXZReiB zL!ipn?^JX-Hdrutt7Qpv`QQ{`Vu_GLgJla{tR!TgK?_Yl3dl8l1tiXd*v&PiuI15 z9CT@%=6(Ia;5dm8_F9GSRH1DoDh-T5N}(fqsz@T2GeIm#2#QXj(kmx%qPPm+2|&j| zVfu}lQ5ir3E%u{6652QX<;>4fwU5HDx{$;OuosZke=4s~^mmom*!{)G+frdAB*@{5 z@04avZ6b2z9Lc|Wdf%G+c*1@ap`Ll#5!0k}k+9Ff&?{G5feHm3InOEO5r|~q!+x0J z{hni0b_F%ByGN*e#xLVwl`)Fj?m7hZ6{3#`A1046N$aNN#(@^569Q1#k?8rtHvgKW z0i>^t7PjpBc4!)yRMz2rfze?9+5@Y~Ep$Ru7J1ULkBKfx08^0)`mWH>d>bcQuaE<_ zK^c9gtLJdj!#ggV1Ud|ga-sX#jOB8^AOD9;{2#-56|Pu~=QknZ|Kr0t+kX)vY3d(m z3?pBetxVANINI9XJ+P$ki{X(f(s}Tzo#P*(M0-yzmY76-*V!SN2CHV_cixKWpdsCB zw<24tMEvigdeqXGEi}Ik_lM_Z`V0y2c)@r>18nsR(w&ORu;^>@ zNWoEbdp2t+!g8Bs!)l_1SQyf8hoQP+{g>9KVvn7etvDT>)-PBh;;(Q`{Jj7OoQw{f z30_$oW_9P~?~qWR&8yXi<90_kW#*kYyxjBZ{H#>};)^n}YO9ux?h4Se2@^8y`6KPg zd!c7qDF)V{YUiP#Xt&tU^~W+zBDp@1orfUF*KD)Am7tV}a|~%pozVhABNTL04%*E@ zw1Le$H7(9im|qg?5CY2#?stAm|a#LuVC5HN#ZJBv>SxnL?5a1ay&5fJR-m zagOR6#rfJ$0Er_|Gmk!389qz0UVdNISm8hxg)hnlK+f=ap{tCy z1N`rGKXrdN*8UsjUH@^Iv;S)l(fht?M&lFFSze}w+JAziHVzzQN{9nMK^rp-5+jOj ze=CcbYbR~ZODuCgn8^80VgFI|eXn<(A)`IkvFikh=jGh5vU#3zxIB(0{k~paU;{?d zs0@)fU`Kb=18zW^TTyrI1AKtV0T7r;>h|$ODjDmhqx6~WrhsxvIs<5~d&cu-)p14LCGGVi&BC(6J?){@@RdUQ>sq6> z`-IU*)2NHevUC7CkUQ6&Zaj9TTkQG9(S zc_iKX8!34tL1DshFXfSqj&d?QH-8=b<9T^Kwk^+QvDP;E6n(cnG>w(m;U6v)hneHdaImhop07~s>17v z!QoWch8l7{;lH^ zc)+J>-3~&jNxBc2H(zt>QkLWFu9V3$ze4{>EBpp$(?xGLkZDjlnqmxSF@A@bcGsi%$0EDs zjhLg3!U-2L>-qdinIDARvWpAoEmgF2%j8W>Ynb0&J)8e9Gh%3xg%gU z4}&f}`iT|WDNSbMrdzY+z>9SFXA$tlG-7%Ju{k zA(3j5quNrv1`eJwGs-S6uxg7&%M)fZ_<~LN3t#X}83Xd(2ww==%Skmx`8 zV6aL-s@>PjNMfj?rpFjXvtW0tKb;_Ja9i2qKHfa2uSjBk4Q z{l{xR=fBtf1;msTF(lDJ21O;ENZNJGL}G312>7bBB*Xm;R}XE7l&z@?w1JMVev5|? z%pbjjkOvL^1EOESOxt=HrIyi>9BW-3_Lo^c$Cv4EHya&KK=yfQVgmFQ@x#e*Y*s zRYzaab{x@9tq0ybYI;Nwp$YFP4Z8}e&J?qjq#`hn;QEXX?Nu;)r`V2;JUBW5OB#IJ zI6CSZRVg}E%OzidQttkRda{s=ZoSCza77l{KcC1PyVPjv5;7c(DY`q`uYnrl0!EUO zv3c{Lwc+dbfjqp1Nn>W7 zD_k<8s*gJ$bPVrOI!rQ|uLL)gv}^!trsFjVQ6({tUaf*}b^=*qz?#v(cJyyAx~oXz zDtVT2w=`-A-MvCpTjm789fUc}QPcR(qIGMt5Od=Lr)2fCe62Oab{AHq#QOwwE3*WP zcr()l7Kc9l#Kd00A8+}F`>6794)~;oP!wbJl5ty8^kx!{s3AW{&l()!d;@9I7i9ot z8j@sB``$mDhQNUR#JO+CAhNkvSHXXEssKnLYWy2j zx`kjMqUOcdz^6a%|9*sc7weFPxHv6)>4yImlO3L;((QMgj91Ft|HJd|L9Un{h0s0|8!I~b8)l%uOt4ce+~WT!D$d8!V?~W#YMmO)olf0#Bjrd(U8MM z%O&}$v*p^&Omu7@Pe`sgam%G~J%R88MuaBqN%FS^nNd=2E<7JOSia&P-)3rdfG+l> z@KPOnVzBXPp1{9|go{!N z^V?`MAIs7Y<0{20@OxgWj69|@^XPD8*wIF`DrPAxa0MFSt2m85-=@qWrmp zd8|WjvJ)L=CReyh5jU;0-q7SOV^Sm@uMnF@h9qB&>?Kc^6z!=Yz^qrgM3PJUWEWy_ z2b@t=1J+;0m|`hYbc?o$|5A^tEfh&ydFKE!{+Mkx%XqXUsfVF;anUG~Tu(a; z&(^gta`Bzf*LEMj<3HwF9IM4y9J7md-67bb$O!j|Ym`ISpcKez54}ur8`>UW`oGVa zWA0{92?Yp9u{j8c;{VTc_MheU+6TrLUHs+ShlA~$hu4F0J_s3{f;`YsDg=ZSMw6Ia z7!H)?n~e-M2GIyIW?kI@b}G zaqsWy-QFte^`#d6DxGIA+US0)UbFPz4B}Q07tcO?PbO14_nk&htgLS5AZOp!Z2B(u zV35b1c;DL1Fum>GVlM2C+1M^`;XiQLsn44;li|(b)NMxi9}HjNK>~%0aJZ{CpT6(F zf3bnm1sIomdk7ESeSF)dLq@_c5-i`)8NIH=PXD#Q^^R<&c<%jwa*5OLh9DnL`*@lT z&B3wUy&j8^9?Xq|Lxd+AR^+(vh>o9bl=7^usXl|cG z5QdJx_Z9`Ue-^m_Hy|z;0#oCsp*gS`-FF1$@?O2Kr)=+1p<_7V#h<+d@$<$wR3k4oi;7vf>IM2C__NfxOTZJdtrlh zIp{oROtf5r4n@n~*O^z4ol(7NBk~uFlL=;Y0gubaRjj=nbkk z_WmT?olM|L!KH+W=@&v!BD^W+t5B)4K+qg?ipL2`bo(S53n;2 zf9h0Ts}6UzINQ$>KF&Cx$TQ2^`e;~9*S$gr9dk{p1P@{%eZBrS5OXgDPp{@L!4l!vgH$G4L*x-dMN9V;rCC5wt zOf3{u6psbBj9JFX<1N~M5Eq#x2rB#CPr9DXf3t zUOMdGaAEb6+7}<-vxv^lmp&`iHdxS2t8}FL4hH?sqM7&nDIgRl&np9i|ADRgN3ybY zZ(+i!p?sgn#b(U732n8hh>vXPxP-XB3XjHeldxYykbpF3XNsdpOIS;~p$lJmed>3n zk8guGqTFlp{t(7fe?*xIR)ID$=9(q4OD&O{D%ag)oz$Pl13!uecZq;roe*e4f&`389 zs(kuVn*g@l2VHKk9(ifQMudyzR?(C^K0MS^;MN3DQOm)MqliuHO?@ow{_N;C!qucO zd&TN|94CDgBwMGrdhJlHw0;RI1u|kwS#m?q=%#fYbaJ{ttEV&(xy;P*X

bnrIt-H3qhD5%97;Csb{K+lRqD_akQ#o30d942 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%0D+gKutP%5QdL*+V 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

&ll+5 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

XZ=MkvNp(SF79ILlQ4q(w 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̑fIi_9q2 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
3%$Ir zdf{Jf-54LBa6GX~fXo{eIz#_-G?vXlQT`J+99}<5J;v^J7@L5?MHM5U#T7)$6=}=07r{I{hp}`sV2sk$zmDv$zSOyl zINkl>3+apwidD#DdrPBGpA*O7iq%i;)0o0Fb6Y`Jvc?Ir^WBOsH&UUj(UcgT;lQx@<&NIFUq>pXk8PA0aQ8#xe%Tuk)NlAWlg%fq9qo8Smj zws#zm(rw?croWMYTmcValiIJ$4Pse$gvOzjPu0`BZ}!J}X-2GT;DE|i%S2tUMsaWz zUa+89@X2&}|28>%iQiO?Q;CzDK1m^KgQy`JJ1SW~G~Dp<&$-oD7M}+@QD!>zU^(so z{5Jrj7k0h0;tNDghx<=&bN#J9_#gK&RX1a|FNZ;ge-2rH?-RN-bzK)E(EcnlD_2rE z!z3#)*!u(yb3{cJK$8X>?V$o@%7`uEnqFi?V)lKp20*;y(VN!Vi)>Nj!x| z4itE+q;Vo8(_2!>X6q0a4G6!2GV>8X`LUu`O$-yIm{w&|@#m>iS5-W{F1T;V6XWL4 zb2-&~m+TsgD;5>RGd9B+o)u!+SYseF(0dZb_nVPa&6Eq~s{k{WmXO4NKIo2-GSLdE zAnRk@HJAvzEW|ajtr0dYjtj)~fpC097|8SIvH{pNVc}uBg9S`r zU!-dj?@WyapOr2wzqKYv4?$xZL8=!c4&p)f&Cm#gQ}aM4FMo@%ri@H|5nR=TzAYUS zKSA@!)k0x4{2o>B?TtN zCvnk6!Slz3R2z(Xd1vY00t8g9xBm%x zB`H_@2hbc7m=b{*4*fgip(a=G4}S2NAX45W((3T6m>cB4jOq;T7}RSfG0v%D0Kvf{ zhs<}=)=@#Q2#6LkznFbhgB*6PVqUt1Rw4d5ulLSAm(KKkYZ%m+fF#F%S^oYD_{`im zOT7QmK2T!=0qOn+K^Zw?dlNI`e*iK6oFy(?QPt5tw;IRfTV$>CLIIpXtB|$fe4r$a zN>qhtKQX8f-IMIbMcN}eaC5uG(Fk9KgvuP}um#R?rwdIiGw;PM@C0Ai1cwm!+kQ4m z6N)4P92F=%Zyr3SKeAkB+FE)(A0}#mmiKj`C!C`XTEQ@5rGLbf&^Ti$M(txGG=UI@ zkUNQqVnJ5qCAQlHU;u@;le38E?Mnr7Ho9b*6@>y!aq@ZgbW za+TVcjZmN^!D4y>09$YjhG<{blfU=D0p$gwcn3B z&dQXB(K5RkVv3YQ`igMj?2ANPb*-B%f9Oz^jgVL)n!J)4?xU1jTSt0u7~7;4jl@JF zUgKPhrgg9>O}G1Ecl1EOMK`Y+h;-g7@v-#QmaTR%FPgIk(psiHC8trQO6Cw|A z2{XC7Ez1uY$I6%|Van7h!u4aO|ADUhgRt;TF!!89jIog-X96#$cdnm(+Ifo_;e)H% z>j&JaT_5U1rY~X)h3O)xHMfnLc521}!yBtNVp>6^mAnfX;A+8LoW)a(3t7}MqASsO z`jt;09&74IGtw=vDlqBXT0NpnB4-{YE^0CBM!VfmV@u-Kbgsp#T3CkD;-Odi0eY+^ z_q228uygh#UNq%Y?Q(HR4Rsr5_>u@aHtj8xws||Y(lAXY!vVaqUhhvgZz^T3V=vj^ z4KK-I@lM(U{!YdNQ02;Aa%{qV7SS6}UQw3nT^r_0IVf5df&LMeYU6lgP3cL-1Jt~= zZfmPl@vHe$(Vrh^Y36o=6o3KpzA2RSf)`7X(UYKv3~5WzVa(UWyk%^p5~;k3XKH$s zS$bWq-?YlU^aniM#;4vyFE#+sA@LM^ViQsLjidrt(MGj$g+1u4HD>_)(9u$-{_max z{(L$mWo^fkNLp zVn4S3y77f2qoDuS?^&v18v1ktnKd`lo9oTBv07$Ddy2{uIi3#1hK-m~i}~yql}F?@ z!_M-DuCjHu9TgHD{#FIs;{X<9+09|8K?GH1AraMr?vzC8j# zyBDIB-?VZDu6o56VFLBKOk_Afyvw|mV#tSNv&-9@b>W)Mip3ia zm3Sg7EK;{M{p|xu!Kt|+)lFdvMf&d#YXVJK7Dso%kwhC`*qRbqS(mn zV1BUIENq-xK_j8ZKT$*INCJkyn#m-krhdfZR1Wx960)!ELM056bCHq>>?A11(XXD*zHv1dCFnPW&@HTH9dGOgW7!Y@ zzjXLrqglN23(VN7!SA=ve0hKfzTBZ%{OS_8u~$Rf&!6E9viTlbLlTP9bC{&^;|W(M z^9IVIMCqdDQGHuti^#^$!SD#`T;<0D>oJ5wFD1k|q;e8LsbXIm!75ei3~t|VGz_?W zXDs!usg~M!W2~jF0WC2JJw1UCa#1ar(?%^i(qqlHamPJkPB7#n1Z4fvqWXm9l@M$( zS9;{GfXn9S%z_BI_Efv}^vkv^n{T5T{AK|MW+1_*g7S+wC3CQ1o9ZN2l==2p^ay1q z&{bi}g2Jw})`PN8x@FDSC$+)HYD(|kjV6?Xf`4j^G1u|%8H_orZs*T$q_cB2n=m+M z6>Rx~{xD0n26x3Kh}jcjZyzo4)b2R{;5{7#Uf)Z?Zc&^#C(#x@UyHf#Xar6-#g^oh zL>v*06~)`M)^Nru#K2Q~NS$HoZ`dl)=n_cJ-fs)`#ht=kfnu+xBXmCIDSilNDb$#Wd-Q?fZc_4O z&&hat-f(}r+3N887}@Fh4Y7;hLi}hXGCV>o)yjAv3`wxBOi4hx$49}-98HbAKgSUd&R>r-PUAtwlLeN)`c__M!$R5qF%=SeF4XR1<#D(;i8`F2LtS!#xYV8+yfNK=pm^Fk)Xjtq2x znJbJ-L)+U@YgM&zUy}TV?~n}_8G=@j3ExWw+CUP;%c8HhSD`;sh}e>HtEaDrC4JP& zYS-PVPw)*@jTR(d|Ltv|KoPx?Q)eI3j>(Hkeq)q5b`FaL8|I@rXQ>!l4fk8j#iwH^ z;A((r#U#|OlN*x)v#py#p`(D0R_Q9Y!x4^jBxA;a&C<_rE4`$B1bK~htU*NZs=L%S z$wKvkSf;YKMK>pN7t z$o7#jseU3?BM}=^Q&+i*>%_yVsB=CxO4Axi4oJ1o1{{69di2g-fkl-+%t!L%_))u{ zm4|8sE;|bqug@?olwZv-`E;&F!;GLCQ?AgqdAaTWSnGW25b4rSWr|GEn`2M$N!8X- zm@H9Ibxj|hxgLH*-5Jx+OU0^w-L3}KUV7}L9<3MT$hcF$k*aEqR&luEcH%C;;abvL z_g9T?Cra~bt8`q9FnaC`l`8pd_Nlptn-70|>q6>Lyoc|9NC+NTveMx>#ZmcoYI~w4 zi?+uzod=0BU4R(?cbp9N*ePa6(-gff^oYKy_(+l$mo2R6MS$!>lLFitO}nVl7TD4` zCYT%J-)m%tI8WhY+7aJ8*BtgNKPpICiynn=MYIaga)Yc7S;c^Na0O;S1q%P2&=y-siHcIrQPnp4~r(YQta+AMf+9=6qZgUXgOFQ2k%nBS0 zP7=uPW|uFBvMN5pA;NoVh6O7T)KkEV68#6p{0zOl*_i`nb>8k!TpYLiPZsxMNME>vk7BxMN6$-XWP1#9lq~ zX#yQ7%j5fuTNB8eMC)(FpZNVYb4&v75(ZNVV4LD#ytrn0>7 z%F4?KWq|7?CKb#jcJhmHfkrh1C4?kr+$G07Q%t=J-n%;E^O4(>qn(r2Srx4F?N(Kx z02{bW@JTNI(!OqeRU!;$zM7)6omI$c!_R#r>gcTdRm(0V?-k+*37K($W?@6ihn0gQ z*5F{<8}Sp}WGkg9{n5Ic(`th#`7d)6?K~bpABMjrFX$S5ZIXN7*5pK|`ScHNCHn9G zG7|oErftEckELIADg^aED~bQVp6TCDR>RuW+RgEQm#nQXUjA!N1k=)LIVzZUM5omd zNQMtz#t;($f-M$<1{1H`v~x%dHRo*TXguosJ^+a~g6*EEEGda!giq+}J}fwXw`m?W z7?cHulI`2}ZRR?A=f-!df%5I*X6F-#DJU_LVbiMM2p;{!Np*-my6kkgHIkE=*weA> zhnU`V@gYN=2@Wfb#hnMPgQ-H~1IiJ88`+VIWM5DanrM_ETi5oFpckwRRB>ZF7Ax0g z`pu9benl_1wy%}3$I9A=_5{x_`aRR>=`xlPj*`;N!PRzzm4AyGUC)4K-hC1MMSlUa zy5yaqrK|J6L7F&yZ@F1(of;b20PgFxcaNsS=CohPF`|0Rf-wFL$fFkag1eGlz<}M* z)!t*cs}%QaPmJxWg7cK84&(f3R*IDzeU{#Rz@k-RWa&660c_Jv*#Z}}G+Z*MuXwsI zJcgca$+#sHv6QcR?zJ3hU2zt;|YFfdQX^OL=q7ki8r#GDU?w;64@o z3+@p0+R@vSGPlHG7dXf)ntLLOG~;ovf-|i3d5gZ|Kh3fw6Q$Ig=EYviq$~rBl!A6< z2XQ$O&?agN)6KTw+N#gdvXa;wUmjq3{pRqB2l<;tU$nfIgv6JDq~>iPK;5_07@m;2 zwPMe-(sp;$hN-ris6?2kCO0<^O0^FFkk`U#HnR01_;6`sNVA2*Em>K`R&kH51qmbG z@IowQXKO~o&iAW-rBqlZz|w*3N5sM^e*a}#Ze>d-n$~_qik={8wJkcqz(y@bD6DNPIQL)` z;GJ6C%fNGoy>{yz;OB2BIGEajIV*e02%&T7BILk}tNIj%9hO0cdWq6|M2 zz@j4jM!tTBuI#HXyyhyj7MwOK371$VX!eWDEE4%r_1mn6Gr8LhX674&CG93|@_WFW zT~WgcH1I11<}E(6uOjg~u;^=Df6!_mICH&G?&V`sELS=URt5^J=_ZR%b7Pu5Z)RSq zU$4;nQ9&bb`I7$;)z!33qwrHv*!sewhnwL$@#qt3&+%q;1oN`}*rGF)R5ouT{QM@W}CWR^=p&>FO- z!jUXa$ru!LfKf;ao`XC;#wgJbZy7QGdd*0q$c>zr?3&ZlsqdOV0l=h%`@_=}a+H5~ zgwj-?(wS^PM%I?frxdC*eJ0E?^5LBa?M6h7s`LFxKPoJIW4Nm~s+uJlk*)K$SS)cW zF)84>5;L6l!PT3X@U~NtmA4^p;sY-&n_z{)RC$b4-!cPGRG-#C8t8q2P`$wb~*)dcmbZ~f5yNl^-yU`QY^~$ls zTW9HfghYzbDVn>qbDgu`M#}zoszE2y2bzUB)$i6LPJRvNswq@fTUghBPGX4o+b-tQ z{;1ImDe2uHZ>jl^mHyC%E#r9!KmId|cP+0r*{((kS5!>r*;Fpu8Cr$6~z z1&%%c8OGHJX>?L{_qX{x;!b*CW zrZ#a0>07edgjH28J-62X;_V%SBMr26(TUZuI=0!dGqG*k#>BR5+qNg>#5O0GSQF3O z><{Pcv(LT%_Wi25y1M_qRqI`AJ?jD3o9&$M!xigkyKB6U9KD0(I}*$dq4y8YLm2Ny zWM=+p8ElCQs%+Y98IBE+RYPYuI|D-<53XmcW#4kA#t^#-V0y9Ip<24$(F027Lhlfl zaZNY%kqJiK6~P$Xu-C?Xd@{T67=1txrNH?itx|TTkD26w8brf(P7dg|g%o^(A45yE33+_qKs$P6=+s6}`3L9! zxt`P0dn+t%QZy5mY)NA=62E?okCxgM*e%d+C)>AJWw#X~XaztACznyZP@K5#=ltQk zWSTznWi^r73F1h9#-Gk^_jUh_)#Ls1CUO0a*-!Q?gQ8OilPFe)>b@r<1Z2)OBq1uf zaz!_H6z{i10rSappMk!`=o=(5uoK1W!x~=XS`E2>_ChE3DMpp@X@;BKqrVoQ+tUHh zLoi0qJBi1B{)E8)*n#b$-hA3%qTl#}2^yl9bkzZsJ6OO*m_l5Bq*vn)F=PRNH;NufF{)!WJMsD{ja z9BPRH+1PKSp3&#=v&#|N21JjyE|12wlT~<3x@U6MJhW$Tsca;h5+87cl1*7<<45e* zYNOR0)5tUyS^~L}7tu0OV&~P%RhXB8j+7RPT#C(I40^%l;fP@a8$SyqEf^2uimqEk zjNDs&SdPDcXxC*cEF0HitzO3+v&-|tq?$u39yHWYP6-TCU%ihe1(~ku=TYF==ID>N<3LYBHd(gfaLX=3?qV;VbuF1O zCKu(-hm%JK^nir!$GEl3=9U$)$&jxa@5Xgz^e)kqkW}` z`437M20>gufC*rlW+VlZA2Yoyi6(M#-cY=;2tmx*#(S)ZjchmJ<{eq%P*IMUUJ`DH;`F zqIuMxeBHO;>2IEL!}xX49f6*x*L!+l$u?4Ju@G@D;mOHva;`0RH}<@(G6QZiANF7N zphUa$(P|uP#G~&4ZR9l|bbTJ8SIf zkVIl8u?n$Yn#eZA-~)|MD`6Xsu=YC7n>LefE_JNArW-o>R~iR>rDl#m6w%@P^DIRoNl%$`}4o?kf?nxN3YS8*+I6-Y3`l9JZx9@$KuRN(GUUHUlrij3fRdh;KEL$W3OLQT0p-K9EpPyys(Xc6E2-u%!NpFRHSRcpF+7JTR7wm#@&C zR2+}otso*I$`4#BUIP~6zarU&!sL(U7AVfTSX*DiSlZ%gpXMstdkILA^|FmtVDi=n zf7=N-!R^twNWFXjC?gEs?lZdHsLg1*lFBlOV7GO1DQQova)h4jo#%w_2A48FDS3ZK zY+l#;HF(n=jzU5lX3uv4e%0iTo=7SiEcY>h2CE)W;Elp-8non?34S(wAzZ6@<&cCg5^_NAg2C63*uT`nPRrn?|i-I)8+$yUw9;$34g!WRCvP`M%0-1 zLhY>cv^Ct@3{5bcoqx6wr6vz~w(J%O2))+0gwVr*TG;5*CzyU{vZMAglTE zaVNSDi9;QuaSJ*9+Bt{--KE7mC$~w)H@uI3>zriTf#+}#%_X+;K<)vFr7a+w0p}qd zu=H+Vi=9x?UK{vV@zgXS(Ye=b>oIMm0X<|W*EApjdw&Y*yHy)DpIl8IS!)i{ZSD%V zP3_SwukDJqR4UG~{wvTTR;`W`!miZ*ww^}Z9u!*1_aq@6~WSM^+ zm|Bxbk_;@k)^$ne6p!QDjAkb&duxVNhVrg%@3-!FN=xJHya7)dlH^XuSY^p>VW-@L zif%^596h?wkstgO^CP84n7ZAJ45>;XB&M1G-_#^5Hy2yZSI{zVx>LtFZrg|^AGIgW zwo|A28g5G6R$q-pMjZ#=)?z+sZcK|%qi$A6kC4;mohy%zyww}RNu}Wsj(^?kQu$W@ zj?M^V@WD+?C6$>zSNZI(1%11(vvb;d3oQ(OLD@K0%)?WvJo+fYEH*TY8D#f^m3m-M zUJrH}yi${qz8`7lXX?uM`4vXf8?0SagJ8%hC4{ps1&EG`@NZ4(%CNs?qsaqsz3=c9 zlqtED1qSB9F@|_nm(z!pZrJWP8zo;h^)QV9+cvREJib<_dH@kjB#p4?DF=M#YX9?| z20qyMKU5Mv6Mc-zb$R2GGbmp2ROabvmT4haiJ2^-^k>I^�I`BZX73G{r>SVaS4x$U8yXd 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

&W$E}~!Xuv}nw?N^Sq4k&^N=>V9n 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�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⁣ET+Shl+GY9p%yzgC6o&2h57xwEF_?q>zxQl;&x;?4(_pzix? zC!JzfjW+qM^&b4==fa=a7qAyTYmvW2_1g>*XtV&vHC33)$wO@n%~@izN4hY+Xg040-&{CtI~6QRB$ z31*qxk+1-Ig?YqTh#Gu9v-{~N8t|@l#c;Kw+GG9<=A9wGqU#G^;BN=NhXs0SR|C>m zp0aD1!ms6vZJN)!i$=XQolmt3XEw4dBpD6F8>188c$|r4jo`lQBc;9_xL(qzenOuk zmecuozqgncW-T#WP$R%Gp{VXwZoTG-K=t-#z?cf$duEr<8A3zV{SP>%i2tfUY30te z`8&lFklO+D2h~O1^Picvu!?WgWsgvaZ=l76u<(^e(IYOvtHIZHSlF3S+&+=^;VG0i zsN6mh?=XkJ2$(`_R3SD28qJ-9$s7~570OP?-_kqY;;&BX4zKZpnisqka(>5-Bs-Z5 zGclu)Tij24q5+bOTV!(Pd*1%)CwP@<-tjdPC6CDE4IZw0Ds^X}sxHu&fHUUC+)_YY z=Swj-m5P6fzf77&r~6i1@N^@mxnFYJ!bl_hVOTPae5M!1%ftZ}KD~B5^y*;9#ooX_ z`#sN>&f739u$pLJpMue3iuGKvIdS0+H@T6{HXOxplXME)ybVx-{rZB5wJA2MBj2i);*E4-~sdbAt$&nKVeY~D@ zlpuD*jC)E#EKf;SI;?G(WNPukfQ!>}OoR@y@ag;TLli|?ucLalN1)oAemMAd*P9KE zrjDr7WG$bC*2cJ_m>w);w$xdGS{cR=Dv<^07;x(Yd5&rH)N zlkfu^Cf9DkqetxIm3=bv1~LDy3eH98n9kOimqz3}rxjR^4Ma_2h+kQohDC^j*`}j$ znz^HM=EDTxcWcsf`>+BYZ`v+}DT6`!%O{ki>i%af73n!C$fk8SD-ZN3oC*5{H4zG* zcfltYPV?a7Gu1syHG!{S{73xPI|;}7(wwfJxI&4)4Ofd{D*UQzebbB6?|2L@i)vnp zM(tL{E7qg*t}Pj!CyT>h|8vg7e>h>fwU=6OgZw!A{6I&={{|1Rv#~dDv~aSs{ol2b zNm6z{+Q`xGtm6N{tU*e;Ky)@h0Wy;Z15)uFCGilH3S5r^BkSb!wKg?5!U9NUg2Ipm zzCg9Ouk_*TO(_iBVB_z3uQjG_;s@(`etx(>>iyjy^!n^^4nN`8ZjuKkztmW@mlYQr zWhPzdoWR=xJVG(L{`JS?`051n%Jc0ce6hQ=ps6W3m+a?!s&fmeIqt#O2{@AAL!(L3 z3xop16L4O-urEWWUmZi+^P?*)d#QDCEcn~ERQE)k3(;yRQ`#gj)xbdFD+eON>G@( zzkVY#^WyI@f7&&A4d9##=cUnT6*U!N@fS-r{AJ|Dd&MS^*GU@)EfQ}`vs@!>W_PHm z*><_AZM`y#zz>x~2thM@WHm?Nk}i~ZVx1=_9{+XdRv(lXQYYavulI(-oN-KHtP95^ z#hIEflrF>g+nh9=Vv0jQ|<{k*C3@jX4O2w<^T`( zkA<{?$GSm6uR|!Sm{q1K)Uj3&@i~Qr2uuziPqe^qtN_>}P}@1`IhzAxg{jZ~iCq0h zrM`oH&Ts!z>N+?Okm>)wmHK~glZpJlMXc;$Z}Ok?yjxjI4n+v{E7Z2G8ca%y9%M&; zvyhh9-D;RP-w^w4ZUfYN&IW5D@yfPw6Zut+UqXQi8&1dv5yda@ZfZe)o*(+%ekOa; z`-I2L)%1HcY!-+-{z+s&9SC})`}En6*q?q2(NIye)cX`ZzK80^us=AY=SoEMlt*{V z#GcOd0X6}mw8CjQosC9idBJ*d%ubans7oJnD|1<8^O#+P$w(Yp3FO(klx#T0vjV9Pp1%QD8B#72r7Ym24*1cnRzX8)ro z zb9vI}1><-vv-J@3#d&DuX{CayBbyY<#Q2M(J&egzVkO2H1tpt@WT@sI@e=|?rY?Y` zX@gb74rc;p@(#qNuEv5@*H4xP$Fjy2YA7AWVR+wpw?|phE-*f5s~Nr6qexd0&+lY$ z2|#GJQiJSQ9+CULafyf0Wc+`z_KwY&1?;wNY}@JBwmY_M+fF*RZQHhO+kWDX)p2t2 z*50SqI{V{UyK4S}S@)bb#x=%cMAkY3NklT{GnO762M_j8da5Jxv#H1ejT#Aa=K=`{ ztq2$&+&~dak(b({Y!El}7=Z3!8e`3~LTrcs)vp@6R10y>Q!eq!cfSZNLZo>|9+jbZ z?ELd@A?AF}_0PJzct{o>8Hb1oI^XLzUf6grAt)zks9+;~JcfQg@IM6nE{7iSD8umL zv4|_hFUDE+2a1IQ4^SeiJA!Ln3F5v(i7&3idqIp@WpL!OpkGu-1Vf_PR3uE??V$2T zXLQ}#VOWBZAbZf(ggGw<2BK8tNDN$`;VEb1Ayc!pG%8e)8cBIVS}JZ7yZ!Hf8LR}f z%R90h_=giL?DRaTv=G7l#Y&~=dC?-`LoaQU#sE&6c|CLu$mSc z5YX4pwNl~#YJvT)Qu^5sduy+Fe)~06(@gv*cZVJEBpmv K+Ah~hap8}NDD0P7J~ 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 SBVv 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

rrpg5CrIMqIQb~?K9NNgNqU9yQGwLwZ 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

O!#bF@#aJWM)>D9W54w{JF(>L?C%mrUEKSV z9(_tD?La2)#HwiCOk7%HRTk>?7#9i1(~d2VOuP+GCPr>pxQ`-83r=S}VsUy}rT8=kHN>Zf4Km2%D$c=4VqILWS+eX!+Ok zc!Kcjo1wLv<4JEVe*9|=Ke+7?IvZTU-{MqhjOFhT%E;4LO0y3TdX1pUDKoj1(xe^e zcAhQv_@k%oyN#duy0Le!mE91=i|vT$)bd2_`8IJ~&GE-)e32*p3Fm!~X$7BSBy>cgAJ-a#*i3v_3@iIeqC!%eRY)^9c1s9mww zV}{%J7Om%Dgy8!ZBItZQ@cZu(fD_61N1vQ;f}~!&95O2c&mQZS2R11)bLkNcF9v_u zC=xZy^%rxd{PBrx;s|ajM%~k2Db5ov7^>*yz-+t2@lVt`?ato^GmLvKCJGg4{sp=cXvkQgd#84_FS9*zf6ntCX47cF^!ngol)Top-`Y!e{qki6@Y+)3GV%<%i3 z!Qm%#OCgUZk%4yD4AJvAMB}bUeq=dD=8i4pHq5?Pa=l{GFHe)jdL34j%sF@miT=VD z1We1399=BZV|{{DIF}BDvlj9N#fm^KFpE|t(nIJ(N7JlCFDj8|>*TxEbS1I!qRjU4 z#AA(#sRToTM@3YuTwPpaLibp|5T81VFc)*Bn+VHiQg5kSG#WWb9PhUC|5WDxgOBT! z1dr0_yUZv2=7$yi?*?W&7hB_hPd%-zO^lrXgGq8wP229f!v7@evc9x7TtxECnXF_1yL#@KokiY82995gdVSIYzI4x;_tzhKa^LXOl*<}HStty(P z&3E$gJl&G?#%P_inK-@liG=s~uPqO~!si~3+%}Sgnz?jQto?F2d>K=Rg}N#$iW>0n zlkI9=`H~HQsq35xDdn%x7Ni5|4bSO-phQ=J3nsm;mk0^NURnELp*fZgIM-jV2@z4^+1%*fG}wd76nEJOlhF;-;^-^ z5$hf0KpvaVJnPlk%jM4xi)~D~BsBx!RPbu_JewBl&8x8Q5-yu2+75<_(JyzikFmqX zQHK8bt9)(z!qoa3Q0*%1$>FHiu(!N=o{)-E z-8~AY`XqV;tDZ%lOImLnS3==N(SJRRLzBtxYz^g4c%%HkSJY0@_K03^2J)JUJkFrI z+`5GRx>_UzvssuRm!>deyHylErs-lWeha1+K>g)f9P*U$L(M3?3XuV_ zi{-5rG>bla%)x&}AHi9Wb6^#Fm&~W4F4mU7y;A0gBwo8i@$H-b{&9_tV&N3&E9=Bw zx|+CV&2vR@0V!HY!-t^Qp>#;gBj$m%Foo!cZ$k-Jl8PlU zW|G>8$uA?OR`{GokQXc1j?<^d3_0 z3L~(T#k!IjB^-6-@uF5f@9PPhr-=18iI8#6aS!C3w7 zqmDGy69|(>Y#4?~dfE(`Wt!0%nAYq;I>)jZu_~3zdrx2~$)0dMsm&&>FhyGOu9JW4 zxlGH6WhvdYCF)zx!_aEeHg=z?tXlsxucKFK*0!Ek-Pkyc*IT>AWj1%6)P_~@Ln~5NOEU-u`}y9Hq&!BSh^-4Z}rmH$%a zDEh6+5t=AzP212RK9xuI3SSmqh6~mtTWQ_shM|$Z17-_|C=54mw7u#vOrkNQ87la31z9 zbxN%~FK^Pg|MuK#QMIYXI`kS`sPTe-H;=_rp_`O-Hbp4-DYiP)Ve1;Yc+&n;fj%i$ zbClugQ4C=#_t^&Pj2Z5aSjdw4$!K8~8K}|gutE0>VSxH?X^=gbN-_H>gXpI~teTz| zV3Ch&q}ReU8aPCch8Tf$;n*IYQiZn+0LWk=rjS7(Qsy9MTM+~u$lc?+vIu52K~oN4 zYlz^mwnpxU&6nJg*%+t{KarT>FP%@wAxluysh1>~1G5v#sN9zVAr@wl{MfKfY$5d@ zy3v25m5iZel*3I&6w@8K&$+Yk5s9wH@rY+Zxft7+L)`4ManL{PSFSlKdyW08+#o$; zKG~y`7D(eEE`t;U8-*;1Okf;{T$o%eLya%lWwv}HRRE!spfa$GA4H(!KA>hLaF}x} z$K_HnClt@nzCly3e^s#PUtIA&A^+7eO!k|Vo_){hBz|v8{eN-{$`)p}0B0A+|A3R! z&(;2o_Js}x5;##nQ47@C3Kr5?tGZFe5<5dGC=rQHiT=@;gG4w4GZRx~>zjWQ@_oHZ zRjbyj^&y7e`$tYsu{|yQTP7wE$*GpmOB}P=)2i9EouAn?FM0RJ$G-dzy^xe40^34+ zBv4Lof{+YdioIkUzQq29;C0>9K5>f)1GOnB-Iic($JBXy^?q+GUW($`2+-D!5&&hC zFOAiUMt^v)7YwjfRderU(4{QnFmD$j(C#Y?x#`lY`o;yFommYEu~;d=pQv zf~`gu*S@D}0Z}Gvzs^03{Eg}^X40iV>Q&jdtl*{1_FdGkjTf=n)x!f64~aMJj6Uj> z4RR3W5GId|9f{xb(fIbmD0AtDvAe9cP<3p}Xgg%*NH)W&6Eo99pEoP(75~&cDXrMkV1gO`K%zu7>!>5xKjlAPW z{lp)>#ius2!LL4e4=RJuG9Wc%UadX)t6`0VC$H*^9C_E(=brQ4pouki@X&RZYKQDO z{`Z7gcOA`?03FRoFDaVNM0>4B*Pr1mJjlM_ywpe{&8r#)9j=*|ryrCmSi28VZ^Tw) zKVeDX({HG8jW)9fibjcDw+P+3t;z-^KZVmX&HC-;ueP&w@VU(~R#D?VS2)G^#{Dn? zGdm_7KC2cJ*2S|@K6o7d^TCQPT+6FLvRzqM{w^|Xj?y+=yLL8Zc(OI?2YCA&Xj&1M z*lk)gI%DBJX-9<-hAB8JMt;GHoqhLIGaPa`)=6t{W;B&07fr>P z#xQWOm5t++0vFK`X9iXC(OO{_KdN z!1_uhiaW`LO5vMhE)e`Bp!Ww%&e$5(Y z&O_a}@}w0TM)<8eB~E_aCGn5xD?2;eZyV5zDbmA_!)02iX z5*R%5Q?COBUQ5=ilmYg_Ec*o`19_+ISqa{=%sMS>)G>cEPF1DUNjB-24V17j4t-q{ zjx-xEVvp8!+jiSFm0i>}CHR0Y#86`5b;wEi*+cH&`3JeIpd-vxowGYc=Na!r*CG30 zlI=NW!D;^uJX^7w;73S5j=-7-62U~o z%Y5QYQrEn}n-W{T0uJ5?7S7lSxP((Dmn*R|otT;J3U-t}_FJ`+$RY?S@XE!z?%aEB zl6&}~a{XCsPZ>svU3iHUAxU(X!2txpnZr2`&U4cjOkVYP z@$IksH|B@x1M+M`fvbc<5|lIM6P4H4d|-?}z#PKj3Iud1VbNY9Ap}CkD9VA=0uG%~ zZYp|K3edbrR~cW2|Z1*KvjLqbk84L3psrSXCdA zKTiIXQgnXO|8GC~4~+iZbAGw^JF(*ZZgI%}Hxn!o6C-PYBf#0h&i3E?8{cmdCf47O z{eMh{Rz?ZR^$Wm=cIU;$6U7lb_hOZA{P-C}hX5_NBeTJ>IHEiWBhjjb&if-oNCq$s z<@f5R{dex|eGUJ|hM`(snZ01icAuAX8%_t(5&T()$f$4)cYUm1mDwYA6ub5-Lf>Km zC;ptlN5qlr3DrWNYAA2BrIqXXh+@(F$YttckesH>dus52$Hq6DfUykScQ_`q-h+@ zYp~jgA@3^%MkjrnX(yY^LpthK=DHx<0wLphv>W!+1w}Np*u`M5+p6~jE?JE%L@Ho= zZKz0PiBS|uS}#PUGkB|M7pso1v8E+v{ zrA|4b@W#H^o=o;UT!c!?!I?HmVARO*mScW10Pa;m2qWe<>GUO3s_`T@h#3*ms8&~x ziWm_^`HhgO@Fj(QqV^pbuYNg7v!6?fJJ~Hk#1uo2a`Zi$ps3nbGq&;a_9m=r9a6e9 zId8w*`Nqm@j_G5t>p7X}Oyut5hbkG4f$EU*yj2rHP8Sbu8(LH3Kp@9VqvpLAM;$F_ zNxL(UqN%++*1odty-KI|#tkC61*+prUD=CWm{~dh@}~U)eF&S!F}h2pW&$ zrW$0VDID3?m|(yjDQ>jAJT;4bjAv|&>2}zv|B7`SD_Dz65Fxim8i14^&0~-%zgYX} z*iAB7i1akf@I*K?M44$SgJ@Qh3E+83G}Ksb4@;fZC&i~Pd^1z_g1f&+dF`g@8sH43 zB{gH%IC_W5%=uSCjR0pJoBB?V;1PfPF#jJk)c@m^capR<{dbb`MRi?eY*h?j_=EP{ z{su|N1uSX`>tBOQO0iVCr%mIw8=KB!CzYQepFcZq^SMO1xC+?y zUJG!xpD$eNHRrit5_>b;ria_F?=z2i%;fKux4S>#ejEdcK`AK|Qwtb!0@w`*!z#~F zY!x&L?GyUQ9a=;+rBQ5$0h~YGlx9G4l>A8H%3nkf5uHFUH@Q^s5hkNalk?sUkCmv9{;17K)taNzep?H)S`5lJOL~2#9})x zg)CwVR7C~BYR9oOwE(lkkDOm`j3p@MVOBh)-}iKtH>)Wc`=bcKG&O#(+tM7(4!0Ny zW`*qcN`tBS6wL3|-I~m|OS|X_#?ZtGs^lw5D=>XaYxNdV4(5?WS=HHP6lr8DdvM|@ zpGngh{*XGVWDNlW%7~%lQG!l$j18*Oa2uzI%BIE2x_x`pI7N2R?OIlCGEM7Nn_X<3 zYA36k!(0lhsw6rzC(8Q68aeRi#amj8hBYfnDxQSWj4ImSLmyZC9~_P>awm{k9ypM= zoI`WND=31kF%osx@b9#oSos&nMjduv-TmGoS7WW}>81-pZo0=e5L@OSXFgSYG?YVi zCVX>cwBV>j{a5J4{%(>lTo+mnD380eMOV6VuUKwt$N+n!^FUtgkaifgFJ1=>ejcU~ z6V``C|Hu9T%MaB!C6%Q0r=7ttNHE+OQTJ|69?5=su9S_;dlb5zoAA{dm9E^l;2`yj zI}SzpelLdfUsA>-Q{=C_-yYoyd)@?<~25jf;tYDx-zlV4cm;J+b;@RFk5g2 zj-XDs5yNkpq8zw~x0)RIM~CwoA0V$1>Y@6TH{={fZ?r<*P>Dg^P^p4;goGhiLb^lZ z_So3ESzU?GK+dciw4r*0VRuj>24Kk+sLdP3y$PZ<)=YZApJrwo=_9@f0u4G>3q(t} z`J&$3q7kWLA`u*70EqQ?_W0h$PIu<>?$zV&)ew&>tZmWCnU1ZoD?<6PtG}>H*zqbf zu2;Qb#h*-u`6mIn8BWLm5Q|^tk^xr=<2p+@=l3SGP$P=)ciMrGFR_EOwXU)3poQ&i zba@flY{!%fq|Oe4_dm+tQc8pksy-t zWmrksf_LI^Gl5#@3Ks0W_mbdQeAkE5aTtP!VA(yCr|1&=glD?gX;-`_uLY+=w!6RS zXBMAh=TiJZ54@ibZ}4w_EOioW8Ir7n+s`7KBIhJ#CxJcXqR%Qxu>S>a`@$SZ2PzVY zkJf1h#?Ztk#_ka)@{)E)eNbr)?8ooIqQBZB?Q_>B-eP|nd@Eu9nc}doOGxkK&RF__ z!<7@<1YlC&0aM(opyxk?tm+BZqh_co~|8mjWnUJjQ=nR z4qCMH+wYfOB8MBNWvt3~{Lf0;Y@PPDGrRJAe}BU5;kugW?Nbd&v4XSKq2CijWCzs| zRm3UzK!c@3L6G(D>;De_#QyJ=F5*3wCv=cB4M3uog4M#N+O9%dnwA#&!Q68ol9@JI zx90>%6wR2@o56S`fm@NIBO2IM%PQeA#EFU`na%5SrrYPSYxnQG`&+g-YYue7iN>=hS(#cMAiQgQ zR}Y=WIbxVD??>Y>=;3a;Xx&%I>@y7K`CSB4@9&*{zNF{tU*n3Y{PqBT%)1UxSL$8oFU88KlzJ3o^v_t@iUPB9d|!DVaHPSgjCa>Cu78^j&SV zKjQTD(77`Jv}ycZ4^4m1A~;Ll@;mmwpk?a+tDTxnH5g}n+iCRoSi=9LohpClrq(73 z07vJ48)EvGEOjtZRvtwVA$WTW9&AY!jsHelT~tR6urMI~DS{_@RN{{5|+471>!odQ}CM-BX=akF$!)%G=J@pXv2~>I^A> zQ9hW(ius{y9^=4pP;hZf$7&z#HfSRJ6)Ygb3(oKB!DDpRNs&s&h8gYap%J#^DS-&S zk}Mri>C__Qq$L(^jtazZu_ww9#K8}`8q z4sezy1LnO>4oY|GucV|G^kP0CotYR5o>sx?%OeX8xQP$`*H2VJI`C&R&0Q*d#0M~YWWN|h0R@?c2T zzZ0z#dXEo%7QU8H`;-U~b*UQTa?;a5MG@<5`J4=0^yS>wpn_T}#9ku8R=wy=^{jF3 zsBCOOa{Ho%EbP{qH!GX2AjTei`5_H$#T5BYI^GK!T)Kq$F&fm4Vv?fKI$~cPrC@m{ zqp+OaLVD>n_9e#KAn`Gh51mGXvfY||6D-=9hQKPJEbtaty}U0BqDbXQqK{gh`)NJ;aEjb-Q&DI75! zApwg8fyD?#AWa2fA^es9!gMbIMsC+P0i7YOOF3w}rUq5{YXz&KL2OVUawm9YtxctT zsj0+f)6&LDomzC>>AGV=rjK9)K+^-9`T`KWHCXA0iahp1Bf)&*^~XdtrR!2EEEXSRxyFg;?MRoNV1s&GqN74%30<9W%{5Iv7i=-FS4?jKIA@rkIwNa3GqO3d#w#sd1-) z4VXWP4U&heYl#B@sWNy9r81{)o*)nMl(tBV9rb#B5umG95F z^|RFLOSJXHOt#%@2%OjgV~itZkxQg)T71f$IQj)c&Ow_0tLpRfJ^NRPhA1A4IRTQ7#_Yh*EDMZ~*&h&#BG;`fMKY!^zwM@0~LK z=9oOkNDxGijLIP7>Fm2CTC4)Drp_5h$j?k{~Ryz>l`M$+Wx0-qKCPqDua>#6=w zQ$}tH7vl2Op9K@!D4`-ib?7$_mfT3o8)DK76g^bun7jS&l0}HY(56oDF0@xQU3H`g zOT_u{3&ED{*ffSGA++#;#HI}cBFB|8Q@g+WD&R0XNE$+2qc$V@gODUmOkRa9G$!$H z!emgriJ|a_)7fjb-aEkV&5)H(nY{(i4R(T-7Vjfe3u!VzC}T=YhlnF1YHZP^X;$Pv)~bKIT&Dr z1*$bueFvJRbk`fCXUt)EoJVm%WoDEf{3f#W2(Xt3lfH+8*w=lSB0xWTx_teU04V(?X0qg-byFs)v3peY9LX*et2%*xA&3j6K~nretK<1mjOweuP^d*!Kn)1|6-Q8F<>PxMe7EeuDZR%UZfnU>FgBX(=qfTCaVsCFIcc7ILhO+cXKHo@KmvZ!sKbl07@e17pu; z*TA$|PS5yl1^M>ZxA6JI#4!45Uc9l3o2^x$3cb8>#JgS*UOT7neb4vg{xoi+g))H* z(Hr=<-AG4*{0>)Avj|lC;dNXTONFExNsZx!BB!Km)qa81m8 z4OT?Fe0K)@FMkPdsxo62=>#6{Baju3IP;K|s9P0(hmRgW=6g5=A)LrqM!GDVrZ!29 zT>NmVLNkEX$>F=9{4^F%k6@XL?MMS&(jCjS8<; z@G#Cfv+Q2;gspc3NY^=k@AAg<9~0DPpsG~Jp9(Z6Jf^n?TE!w-X9dCVla(bBhE(di zWLXSaN>q-W|B8w!41imK%y3|WpM!uG zrmQ{mvc8nK{zVKLq1CQ;9+=?PQr77x9yV!I{}hQt+$u?1i|&4LiLv0{>o`ySIzj(C z~sqiDSKzI%!gum_`eqw6|Sd{Fxsw_yQu|@a-BD?6sx+%oEQ%_TFJmIYI ziG+KDpy;?F867)RqK9`4Azw+YLEU=LDx5rW`tGqyn4rv6yFjPT-fgYRxZ_#_pA00z zDsyo)+v9LS=dNnC8$1k2!a|Y@J?40tymqg8YE)?MR$Pr!Yqus!2b9Qk~ak9!nbH z!S=x-SxBf13%nx0fks6hh>s}eQjHuq^a2Wvy?+V58|7geIKQePM!9>=3q8lOhikJM zc_ZZk6N6fQg6Mb=bKSa!t|_}Uy7JQZQa80x#hF79CE$Gr*8TYBt zoDNVBo^3W3?Ni(YcNl0a^B%vC}jftg3 z7I){&+4KS-rf@;?`QaUk16ojVN?3nVL!;vD7io$D$AFBeZ345T(ZxS@%;s-+rb%4j z#Ld8GXAC}66zX^w6}86b8W2?BOjpY;@6||{Ydx8f<1a4<%ZwE8)_gvB6lu6yPfKk6J1J{5QM%e< zwBjNZ>ety+ndd@n##3bCat3ZF9yra^PRb6Z$;v|Oen}5-MxN$FqSf+I;@*QTF3wWz&I1SSsaa^8OL7Yo51mJ{#AzDM+~TBb zO>7U0&F9|3QWfx3!z9LqoEvqs=BeU^Gk3E=3F#8i78+=NZWQP0^Iik(=C$FQhYuqy{f<6nHO#zwr~b)EI;btk2YmWlMM$!FqgO+I2hh*Ve|97i#`E7in}Np>fg!lvR<*Kk#%(l?5V2m z%AOgf(-_L;-<@mts`LppsgWER8Xvbr8&Kq&=}sh0=RMZ3(IyS^jzoeujhzJ^^;Li|B%|N;m5+TW78?Vje zd86u8-I-59eqwx*-U0lb7^W%QMXc{FH~Z1ctBI@oiHYy$v_3ii51M@ksNXGdeJHkM z4$#fGGUN{6Zpson*}pNtpE1GoUdEc~G0Elz;r9e?1WK^B>(ncY z>U9m>>dBtkiNJG_sKW9f+(K`08!BWMRdyH~0ZK~MpnVvUd*y~DRvk2|NnWaxjVP$4 z9<6{P@dF(SM3zXq7Mq2lUDR#&UH=8xF0x47+Y0=$v_qPHbKNt`l4mW;-~{K44VS#A zgV$*n+9*QvCg~igGOEVpB=!dFb(WN@%cY-dl?rdH!DgGx98IRg^cZ?M>O3&Q+G_6j z>>`~WC8d@2`d*HkF@d{FSM(y7!s#7%0W%6i))MX5YC0shGlFY_G)FkbIurYd!d(dj zhuZ}EB<6z`2ECxehQ`KWfX3$m!;wd+yBU()+u`!GDVd9tlZL)U12-MSgY1@C!mdDDrcpq!|ty z=Kn}a3ftu&+zAP4)qYq zJ`Dzzt~@|Qi5tzGDjOuQU`6daTAL%OGYFPf4{01JInh2@AuX5655&RD^NVqj_Z^Ad z>@IDAJ%-+pwqSTZO!K2*8E>*>G{9Avwyc`6{~MsM&X^eU3JxjQW5be$t|I! zkVf=wB$7`^2jfGLoRMEQ(Mqvyp1erz=|++m5Mc3s634u@#>UHI6lu$t$XfL}%JjOP z*xL4s_WPMS5WdOnZYtcYgKWdiv(sa)Y_a zdb;e&zSfK;ExX&`)pe2d%zf&yARdZR}Trl7YtGIXM4l-1*Y+67~4f zCIl+!K$DZHbvpe@^>Cev4AGFT68|}^FaUAdHk+GFKjUVd;!V(HGIOb`Ir*LHxHFp! zKzj5~)m}O(osT*Tc+kC#aEio6s-f{%aVAwPnP#G-G0&!48CTn-Y9t!nyk1*s7tv~ z!pR;-N2bY|4LI9i^CidhkQQIU|A)4B?9wc1+61f8=AE{km9}l$w(YF6ZQHhO+qPM0 zPCorkPxthEnOUo6oqw>`j@WVHk{?Qo&e-;c%v7AeO6hXY5bx?ei*pVqSy6g4V&r)% z&AUiXH1#(9->TLrnw)S} z&pQ=R8is}Qlb*?Rb=;!kbwL~sE?#`bU!zar8;scHpjkbbJ*dMn?rW_zyUH zisUU0~M6u#abFfP)Xu*a7+y(or zfM!Ce!%xsH<7>d)|BfLGu_D*qA~p&-W%KPwIZ=p);^lMRBgakM{^o$r82{Z49RhKc zqfCcugeizN1s2A>DP@c#qE|92$->X5JwEx2Kw9hj`+wBVe@H~DwllHKKeZ$CgN*&Z zH%|LsYv+eWVC>*vZ1f+!^nVbB|7##fypUOxLm2rswKZM=q6#J4ZcWS}L_z8NInV*Z z4$D;(!&&&PYd@Mr7squ_`tAt4PioRY^a0=(Y@QH%8BiAVDB{${f4n^=CLCFg#XCM; z?7!^L8X&bsqS(^sFiMnD25msOk(kUqkWU4BoX|rTEaVJYw6+qDlbHmeY^Y{2f*bpr zk1~=f<(IVTs*_q9iqk9wkT=O4^On3OmXEbod`#5*2^!P&M?Z*)8xI^8XdI{PU_3_} zxT-85Vk|$bmF;F4v_vydl6A*aF)&G`HXNvZ!wIeC*{?|ebY!@EWG>elG>-#S3B!N^)T!}U@ zbmhBsk+`b%IwG=q3PXuZ3-gnD@%nz4MH3=ti{ziG1rG%xXQEN_-sSTP6UnCSnp&5q zJ-&V{{kbOCArbByw?A!#_yXlv5^M7TWB&WZ7)G%~5@1!Mv!nCr=4q%Itev1d4G&XI zn?g-|HqaC0)um08OF3w9U(&U`>1>v+xd{WaEecSWL6X-vk0}R>UI?Ka#HM z@AJDJxGr)I;(C&*8+@GD7ZIT>a3rG0MJd8C(59#$0?JO3ssa2-bUuV~zZnh|q@lAF zp%Tys2&jGe8B)HPDEy~Q{%Of8I!V?rVSOQc=OESmN~vDL;xNm0TrdTc7(Pf~k0JGk z9|Io}?ZQ?>F&dP+am>`XI1CKQ8H9iJE~Poh$|xMTx%rEDoYl+!L|6V#g_y4ZdpZ47 z$mCCjsQ!P%j{nE7{Qszs|41Cn6#rv0@L$hOlajUUf*io-zlq|}M)>|q6#w@}6mKMk z-$#u=LrdV(esL`#ekQd+v-UrW;?)6(w_#0V?C#g@)7&%cT`j!6-k-nq5NqaVV_E3~ z)Nu?sveVE9GntzG2on68jV7_s<9zz~RNjPfW-uDBMDWokopVIrWhM=QmQ@f!<*J1U z4eTVMYHd`7+GA^7-5n+ z`K(yssR%cZP;yk9ls!s@<;nI z=DB)1Z`HSbv=Lk>!3AO|ie{`3MeDzQJS(EL*{$Vukk`m%mhAN7e=0Waw_1VX^Ugo2 zpM{Ve@{s_WZw}JXMIw9f>F}6ib(s422Ko3@WAc1oAXlm^7yS5z7`x z_~?fI*f6SMM7`dv4qu2I8^=M7%|)9vH7SvaJ#Df+r zvosDJI#M+DSC@v9%&i;Z9-r?QNIiH@_ReYjlsr0wI|4jc(h~nXohlq5i`|F7OHLhK zb_qLO@)FjtAhg&1z4#Dh95b@w=O#hu=T~;thzl5!{Pd*iMfwz6dluBg&L42cozO4t?b;*6@-&=P|vzk6;9?Ww7lTMpq$8!-WnY_(KVr(b%-| zgmx?@7*B{COr`tu+Eoh!T9^`Mr^4Jlt)L2P&Wkr+P%3^&OX{cw0UM(~3h~Eqn*noz zbj2lL@zM2r%qn!HR3EJ~Y)`p>d8g6F;)H31k*FJBCb23<{JY?#a{Vs_&P;H}*^zO# zD2%bf`E4KH%M?Y@m?rP zg8)aD;I&Z0kD|HyZJj$W1bdqSySPXGye7|8fEIlEWIOEEAXv8Si{kVo!GjH5Qw*J~3diP1(1%2R%fj1C$KZ0|=i9(Hy)%2{PKv=Bjd6eHZGT($W1P%5o@N}Xp>tWDKKP6BC>2xVP~(i87=UCMe|Wm7pZ zaB|+HndJnq|L#!Da^imEg_nGA1(Y^Wqm?@q1nLmiU%AZh>^Dghi&>*ZO)e&)5Vo2u z*1*RC(YdEa-b4|P6j|EC(nzAT6c;^QeqK=apvA9m*vO14;Yv)DXt!0*?0n}$i~&Cc zBBITOD^7d3mY8jQ=Gt7$6K7Rr5k9C{-cK`DZbZC@Ev~}sTuihl#y&FZZZ1^ovWL=N0cn=KKt zzX$Q#!y^CA%p)6LE_-O8Ux*qNvZNsFWfS8f)QZ3lQsTVeZZtf)xme6Wx|Cu#P5v>= zj=Y&RG4gyh+o^o;w|ST^ruT$$v^bxdt(zUk>hAY$_xAp>8@lbA>9kj6b#G#a z32O+Rjb2uMu}k&nlcvgfj!(KakKT_nQ$$KwLk$^(RYgt0=DAr1hRMre$_#4ekFmg= zYp9SYl$9n;Ot7BDeIyGpOzP{Cr@=V0h}4+&kmIglURc?cmqGIqrd;J2Q5vMHlv^m1 zm*4G2$GA5RGc2f)Z)+%Lhz%0vz3fI=|5c>P4F!XULDEhpa`v%G{U5bQgK&9v>Fn2$?g&VPNi%v^l81@OPJauusZaL-Gj| z(4%+qZJ0lnMpu#+m^OEXHh?h3%U*4)OaPl#rE)~y;$`O-2hPX`Ny#T?DNt1vcdX&r zqw=aDn_(ZVTF7@k$hmpsjJX13FgvCFp z1zG`UvDPsnqv<;uh@V%U^C7L!;R-V0XsE1pv10=#U!9EkGODqTFEO*^ic_-Om{gia zm9Xii&R)f=fi0R;8%=H51;kNK_fKKu`Xer82MiGAtKFGc+HJ)`vP$|%grWkig<^&b z$wB2)pp>d$I@xMC)R|w5DRD4%*_=u>+U6<8$}kltL~c+gjGG#Pidd@T7%NDn`2D78 z!kI&-(EC!ShRE6VGcGmDwx%3tvQB2921|j((MxwC$Br&kSU8>}bjv}pO%`erpuXt& zwmO>cwQk+wVqAEG-%aXg;|p#Hv6%G8AZGv zOhK;?`K_(3$+@r)`lT4$D4uyt3@Ny-+`m%x79Y=G$BRoxT;;;xz_(@~7BcP|!F0Y> z6>OCtBUqgxi*=9jT1mh<+7!G=o}>7=L#)QY#N4dfjOEa9Nq30awiLTz1WKf`vpyZW zVeWD7{t9GF;fn4+_DT@uig7ROwbAQi4Y#KbJhSI6cs+a(>;+i^J)Dg{T^pHWF`9CO zYu(*HX9R4!douZ%U^<;KSt~bYB6PEtB)!4_Mlbw0uPo{wGOy8#_E;7VZr;v*q1Bfe zqZ$E4i<3{NS?eVxNvmQnn0?_kgH_(kEoR9>U%CxKXSp2YU#=x5tq95KPNTdu`hg9# zkjhbosc#&=;ieurdpON8R|BiQusJ%(ctNzM;Oh|U9wtQwa)kFg>Qi&3^d36_RDJ|+ z_(6To@i-z{C2nncK*0G9-?ALJ3*tmnv9mi(S&Q`iFa#ruLT%<)ti&9dXad~g zJHHQ~70(ihG{fB6R876Z>aL#|Mmr#Rr58MbaiV52uhkD#aWMo~lyTx$cr;7Hx(2{HVo(uN8Ki`S$eODa-==zTt~nuj`m~mUDtakvmin#T zj{mrwkS@J)+(?^z8L;O-L}BF#E0?0M!uIylgZ3FHST~Q1a}8@U20MFBvhpB z<#lx?Gp*OT8myY9hr8VO1Zu$hqgQ4vUY-ILW; z=8^Y5M#)4d4`2NWIqqZdO)a8K8dKDGFX#-n-o*c)2vcWUI?p;H$5MZgvEaR6Nj#We zKCHVE)7r*QtOkiZSgD_+fv;J;I*f!?nrv@OJ+wY0An=5LQeA&t=VJ5u)M8}=--1!K z%g;vj1K(a96mvD!r0(2Esw_=i3qbV8jda?(=N|DD z77)GqY2@Pj=!XrT)S|4rPMe`nUT~%dqzRp4Mh8v+f-r!mkkPoLtO|j(MD>)uzzPe8 zC63lczdXH`=-#tIH<~8=0Zc}ewNU}%K(JRbz>WP|j;;p0K)bN55zF}TI$~@dy{{7z z8E@!mH*iv;iF5b5PmSN%2mhOddTGvl+#&4=$Y1+b^+7K)*TA;-lWX{9kSm&Owm+Ny z?5*=}hkchPFDZ-5!2_<8LYkfdeh+j)1^06I-;ocs2u`i~lb0xzE}#lh#az$d3Pv7+t-C z30I@%lm=iMQxRJO!Xf0j4C?~UA=3JNM^Sy~_jU%olW&!Um&dM(tIn$7Ojo9wF^37h z(T6?i1P{r}yT~8+lkedXUjDk#ByCD0ZHmYYDvdb@7Ma`;(^$ISx=XEv&5!Rorrra* zxY-60(|Q=p(v*U_bmn}!`Za1UhZj*A`^?J=(?aNsy^r`?m7?6i?M-?=0h>zO1X8+q zcCLGspX9C+{FAE_MEuK0F?!|IQ;p6Fc~RzTMbpzTlR6|z3ZaxRthm8=9c87w158{Z z7hfC}x3JXx2c-iorKMefUY@siAFT*mMMQ1D5dZZleUfuFMedl=jmg4Nc453?aRrY! zNf9|M>({taWW=q8)X*Wjj((N3)3VKRdbuHhOO%ek%b@ZZf;Lyj1Ytg_bpnaEu3hTn z8DuMQmPe6)JZa{k(NuiFRrWi;VY$l^w4A zA!(W=ZD&>I!(?``#52d7qcJ2>F=bW0G@cfR=_>GU+`)v=U}`xVrGBwtYHJDiQ8+ub z73;OyJ&B_}f0YW^9KGTGxOHMP$t2YcV5(HFdptcDhC8X`WO_0evh}c+GY3}z*pVcb zp|M_eOx+4{bjj2Epp^mL!kly7)52j{A*jxJG4Z%T*vDh|{KI$;Fj10Y^ja80w`G{GEP;YCkjgM&gAGAkB+^NA!ha*W9nqO!&*A&*lroz8 zKOg+2vg?RRplnaG#8liZeS_K-uSSPI)k zp7ncX(nbsW)=6KdiFMaoUITdhM7}|h1+4SO*JDFh8=d^Lp9B@O`|nJ#Ui*_3)Q6uy zOOnWk3Q*nTo%1ucZrUF+&HaGivbB>d8Ix9xUw?DZUHclqZ$Li67a`CGRkZ=+46ngcH>i5D9D(VBseLG}O!e+QGEi&<%O1gPZL=L(i!D z(}|3OKmR!YUO=wi{37K)=92c6>P4fwum5$`*ZOxZYMqw)vY!y?O0ixV-~;5lk6^J} z@qr5N1zsl_%iiO7jb24&S}di*%k21C#K9TMtB6z4sqM`lqb>yTc3?* zoNy1_#$>Qf8RQv)Mq~4(-K{ppWSs=mP30lS?ESX><*r)JQi0fAftsjDXxun((%?o5 zgJwyA61q?d(sb9K8BhPf?_m(8|s!s$T-4l zRIRe$h*um8tKM7q58@dmE@vb)Ti|xg^Pxtxtwv0z?=`b4{{2b6s_mSt#4@ehg^{O| zx&mFWS}2dJ@8ur$$tzJD;OVwpfor}3^;#|NQbo5!@&e7slPOKTbJ)$*zI}6>qUEgE z{7k1DRF<&i0If(wGaHGaiWo2?3;tS1er;EJp~qE6{+cW(4o*>b>&o_G>vC&(SXX=9 zL^MMX$>aZvahE>RFgc7`+J)|v4kpVRz4}1SJSB!RQ@NpPtWiVVpH$HugqGc3Vj6D< zU@2bm6)KEbA_F7@5c-lI;?$i? z6;l+2r$xEEN`Xmn7;hs7ScZ|I(XXl)7A_hct(&`)?igGr#btUyfm<0ReVmh~T-&8XQGmqe5PU3$Bub0 zv}L+d#5dq3068%bD?dxi982roAynU`dFh*&cUthI3Fq-Pf+FLc76&s6I|GJ zJHD`U+2UQ-)o4a}xP1_fy7JoC^EAWjA9&VI290DPjkLu}pLWGhHL_eOp?gMubKKZJ zw9$`?4EtN!6$i>uNvjd)S0_L%C9Vd9`Lr>Cq;Hc{=cUPC~gVU^&q3_Y*l zNrTO0GPwQzvlf!F79vSK-Suw2w*6UpQ**%PoT=B?K?|)Vu8Z@|{tArBOGZCpO-478 zGPSRH3q?f-J!o+)ANCS};z6}yQH_==j9R1KY5jHxCYrc;{p<1I1|4YV@-tRADf~*5 z`dmg}?+ID%r5sX94b}vE_)g`_wx#9xVR=Q3KO5u~hm7yb5H%zGlI+DCuBqd_;`2Jw z;v1u4DM8-HR%U!hFUm5@Yr!SG(U^`APXF~SK#ktQ7)_<@w~PK`DOkk}l^c<#wpzo= zwleQ*n7{fBX4*eXcZ*_Yw?z(?$`PFkIl5@&>}qv+++5{*FiQA+uUAaWLxRCWePW{) zLpaz6-ix{eFD-vvx)CbfGwKN%{_V*E^s^y{f5HXfkG71^?h$Lk&5$1cD4kJHJ^Vur zmD2~O;{#NDlied-LzaIng?@jLI3kKReI6gqofLibw-9KotFlpG?Q0f0wz}obetw5n zNQ+gTsTX^V7kne$XeZP1aQSK89)A4l9=K!t@X6UhJBcZne+hAtGL`=^bL9PBpiJOl zMJ$;gv#A`6U%#~f|JewNTigAgOYA9iOFMu%%9o94e3}#o0S107I06fGpm_hU3EEaJ zmPrIXd;~E8HH59JNhg5>ao5XhgxgP4U8;%;V6Q6pL2ycaR{e(4>h^KU>$jHz<5$56 zU5#XAjjuc9-)ZjWr>-6LXRe#Y&9|F|ncu6SDFbRT&p~y+Pb9)T zc@y9h_XA!K9Pv!<(Gy|*Mc-enFhU^qEk80 zg4o%=+mNabrWD$kc=TyR=eP!LrO1GL97o0zDEJE~TBjvD6$wG>*cgk{S# zK_$SQ4V7Z3Q2mrQ#(V#!M|+lVMkX3q2Ft`J5U(+aOeSIuG7h?OcK*#=bY7A&0!%2- z_)W8$CoESc+G{Y+{N!%*SfpEcNc1Sv@|2O8JFUoZSO(M|c4rsbRFM9VRR9v%@JWHe z3gNh_o+ygB_9Bo(&BD&^!!77B8yD-{{2W>6rwXzn6V-h*SxZ-fI33V}BpoW~YM!mOxEnF!IxMiel ztu;8w}$GT|+POi<AnEZ|19GGt^|812pQN)a zqFJWnLO|K$6$6fep3G%RNem1a#;XeMX^KyUhJSTd-a42Cq!j9tqU0z|O})MkuHncu z+-MB4lo&7!8#SAd*M!s)86JG5u=B<1zhm{)(+xizI8H|iYgU!GNFk|M(byDPBaZdh zbA!PggZ`av*54~HLpE!rRYxBm3Izik?Y@<`oy+rkr`?l5M5S`*^GiBJgOw8ykR5>{ zEj=_Az%vIR1zS)kfl1ZHNS7Mg!S1M!xLzqc_KOY7d-(ef?(f`n1}Q|0O=#8Ix?oR( z$Ie*D<@%QYjfmLxZ5~6zs^n)@U!yI0s|wH=VQn>w7ndC7lJg2@7+?tFg|=063N~Gp_X-5hc8XJfX;d3{_V= z+eA%l?tjo+tZp&57{Vv4jJLvP7fs?Oc8bx?!2AG*(QGi7>EkcM2)#34H=>t-ypwkIXZQQ;n5#KNuhjS2tho11OT;UBgc&uO3ICYfmT6c=j?A0~DTIrz>`y+8K#uqW;5E0@?Tt~+_6b#&FaEB|GxEEze# z;VtmMaUn8BFRD#k&itcY0=R*)`P z>S_K2G6lrcEL0;Hjv7@!P8mgn&=tIIpD2_uf*9ExNd)i)D>{G>O^GV7n&g*6(w6q% z?+pCg>ZfoAL^()9jrylRJFT&^k{(W!qJOI6Rj7?z>0Lf zLcejn70#L`H5FmM36d`{qHjOpo#|p|51T=`c3|bJg?->A6}I1Ru?V0+#gU9h0p;wu z`>RLQ_$Su4x97D#LS0TOFQL$Q<00SRecuVY-`t#B&gSsl0|7M-d&X!!dA+MnMq%OM z#Bn&lJcs3Hqe+c!`zY95qs~rjGjj^DyMm?h{S8zyF;MVdg(s(AXx;se4+djHHJ(U) zy~ZHn_n^x0xs*bMK|HFgM%r7uM)eoxNC4sS^%tZVqdzGBXqCB~!CBcQ-Q+dS7rIsh z0B%f{7vN^BzR>dHs*2+$@tl(uViRIbM?8^osDfh#tGFV_6mkMd2S`CL%+z~8{V2v( z=~yXmTdmmq@%Hfj3Pfw}DCI?-bwU~eM+(TxV)8kgq&Zs@+bPt!OFX67U>97-Ak}%t z7TKU0-sFCjPY=8Qrs3RWH1{T^kHr@qT#`kBwUEkS#@UN1#$sbxV)a=J;u;~D=RXT? zO>%BjjJ#X?4G8xn7Zmo-($2zs!d()+5ub;k!>SW{St@)Hjj7we7%<&A!i*mZE!x7y zQP&%_^nj>n;}6^#|VJli89F-A}oH z=8!f><$dEO>HLz=N~PKjlG_cg5pzq+O_AB6CSFyJR%5M})DD$Yuk~KIE zBD@c&8yZ;uLXbIJYAEXQ0#|9_RBpDQ7c&KQT3iF#-FTc?ZXPiBo+tfCdo& zEZohG!cHHK9ap0dRy2=rRB$~|oudOMK}E%1liuR45WS#Lr?{A|nXDaxo>5(t>J-b; z=IIsf)^T!*u)WtMCg4``k5K*#P`SSy9S{H|ENk`9Xp+#trhj#Xeg@ z4V?mW!Me$fDnK>(f2ODZhjBwsA=e%FLrpjP8RiuK_YHE2w$2X!J-MSQaZ6!Cm25PD_@N-RvBT-B~iU!=EO;Sl5WUXf&!^^`nO z`q(*jN+1gK=aqJYCqS;L(Y?fuihAMdD5)kkkdt)Ue(J}~z1WVTdfBf^_*0dT)O4<( z*9<)fYDUYT*YwXI$*I|V!D|R=COpWqX}VCAblxb^pokl_R-oD{hC4OwQ2XpNj^16@ zOc}J!8Lz=T3F}T>S4z$svai(*M{i|Q1Ie1!R&5j`j^`m$8jMREUdJqonoTB6_PcK( zWtlBkZ`~b_z3g^Y=N-%0yj6VKf4HbqW1t=qXVye05>#i?rZ8SnKnXi^X0I~Ev*rxO z8l^k5m`>f-n5-vgjl-eZog4UKF50b=OGl{ZVXhGA5A5rV)RLLD+UUx!RHFRl$Im=S zWo;ucW1I_Cujj}qRn@9y4?(Fcla~R+4wetsu!cp13zj2g4{D={<4_)_I3_*=rKhiv z&bs`(QS(vZSrk>6E+kSfqfX~dQBpozwE#d)=8K674%?&mmrT*#;n)oBoO!N)x7U;- z^t)$9wJm3cvxWST<&-t((%uJcl;jeQEtzrCM|w+wOtu?gm{-C1A}e;!@C|%IsM~b* zg!i}j-zVd|<0Xveu>k&tdcb=(5`bivvJPmkoPSIh^?XT^A z$Ujzb3{g!v4a_?8yFElB?0#%8-759=jkPuVe0}R-$A}|>UMQl7ctdghLfEcqr0T_L z#p)(%ChEs($LjOc(A2K#sOr~s)c-jub*E$$De_b9?mVaaipOA4Dm-)<+%+pl$CavP zGuL{u202hg(F?w9n=@CG>$`_}$(FNh>=H>IJ@e2OF#K&ub_@r~L#NTS*am_Vf$0#b z5G@FI)`i-hIf{QcP;=ZI%D1?7>XG?ESv}M#ke`>nz_e& z-{1;z`}10(NLW8-g|yInaGF5I&to#7amc0v=0PfQ4+3-l47jISzl>hqI@k%>`1vAl&)Z> zb>rH<-zw`db9X2sew9?!i%186Sa3?_4igA4^|}M0^a%^N{*?@L`#TYs{Yw?H>vuKs z8_*`c+3)zkuU`d$LVxKmP!dzV6J;QQ3kOd5kxu9Ybe$6=PDqnZ(US(*c=816BQ)J) zj&7N~4{XnBy+jfJoW^$M0pC;MMDLvHeaM9D%T7`ursok=2EcN~dr29#4W5PSUDEfZV$QS$*ow9=(X#m9|FaWLxFRkf;KC{#H^(zYh*p->5_6FOJWsC2BYAFZrw zR8>{+etuf8R|ALK{({jMBb3#b#a+es<<^oycMgiYCNlV)jL8Uc{sOm6- zrnOIL&s_67#`{V&SrDu&$Htl zbBP-t*J#t{<{iS#?nP%`$m`>;XI!JwEG@47p@L2OQQcY-2MplGOJH4glmZ*kfmsT3IdWq;O(WVK!*SBIJ2%Ot50c@Oqav_8-R zUO*4tB&%@@0(Bk2bi;K2O{Taf?buzRbhs_i`dsu68Dt1{4$th^-+6|(W##zV>8HF9 z1-J!7d^bn1YQGT1cux>~g%HFFeb#7yi1(I41bxKa=dxlxih>3!S5{U)41L7Kvby;Q zOIph5xmh5?TQx_tfX*wXU+vET(JrZC{Tu#pxkK}7T({F4JVCQ#0UdZ`Vx7gurv$Ou z=;MLef2z~3{ z_=w9ILdg^HCEmAHJKH+0D(Kz>NFC3$qfAs-F4Ll@(Tm+enwTW;s-Q#4gGL0oN=#ROa%^5L{C9~PG4lok-2mErFI@*8 z9M0akW(yW*6h;ASXPMHrB0oU;V~O_51kIOhs|=PYsI#sa0`VmKgMVAX)*UA>s&EQE z5U4JQSnYLTIe}|19hexN^$;HBUJnCmfpChEUXddcwJB0*3crTH?x4hSA;WFOysy@_ zBIok9?Nji&07G|yll*?&OABT7VT^`I&vs42h9+TWV_yo3>!8M+$S54m8n-lVa|>&X zUv8Iw;}Ai&wJ7^TSbC7~><_r40GMPfxMK?gOG1P?km?D1Y)wFD5-!Bhs0It1m=upe z=HM_#M1Fd`on~oYB>FzR-qbHx)pAXO6cOm66*84Gl%Uj48DpBs((sMmCimS*IFT2;*vNdc|)Gsxz z3AF@Xwe(b{y#bAnIMSY=U$D^7mFK+lvUR^*5(bh&OIV&+tzXfgA=ubH7?#Gjc5M{~ zFo6?$M7;_M9>>F1r&(qF+0(1h@zp#22r5!vmsGc~(a z9R6c-Mq1vQG;tL0EsYAE-uURDSAbUY*+9?PL?dLf6k?mhnuWxAIpItEdXUdX3{wH$ zQd~5bctO?tEFF<@oD}zhFP#mX+D0UYj<25$a1MH5hR0QfVwuYQl;l`*A5&SBFi=$$ z_M>SkF7w^>19O4{O+=t3NHtEQ+s%Q6KpQJ2)ni>^{aHDg&ueMWOHD1QCAO*Eyh^)9 zGwmJtr}Q>@7uSpUAyYtda8bWe5Fss2!xY#MK8*?En8xE?tbX8C4rR|@$91?STSf^g0srr z$9{=SBo86>e0XWkYEJ?4evHT%8;Yirs??nSRH2+kpd?1|)*oDQB|`i@;`lUwRzd=y zG7j_jr5!OIt6q0Gf%+erCNOQ3P$#D+=K2?o&_4#U-+4hI+EeI8dUr4v>U#2)fWy7$i*e?VqU7|esEz$3+<$Ioz{b2*-z%QX9K)i@R zp@De&*F~T~7sr;J5&|s3wL3+%Y-?H8TNAXkq1>fLc(|I%h95%HwwIT8rGeJce(NKXdpKXmHG6gftHdbFCawx{TkK^Ki!2}Uq{&vr&H}!?v0NlF^tSzCdHa3v*Yd^IC|KQ-~E^AJ0~WMr?~!fuyU6C>j#TI zPzQEBzy;l zSz@S}j1V37X4p)2YX*OPWJS2%Ruhyk4n-Wn2#Vz;#9-Cl&>u>f+)>L@$$ip4_i&s( zzGe*c1!se^fNc-F2WL(VvT0}Qr#Qm67jsR-I+g|9uE3}ho?tk1Yw7K>x(&rbx49x7 zG^iybH5sK5lnX}@OdKHz(k4y7YzA=$YtgE%8V3=mjw=UO5^Erem&2$}F^owAhD0*^$YP0e};TzXpNZ*W!9Z z_-Tb{K$hS;?U0oi#JOWNN+9K6kG*PoVlxp~;lS~*DD)BI zH82tmfDq+(*V{FIF>a4wy)ZXxblsSu*c^lIqR&V?*+=2&+mD1l zWAn{#t_nsQ9Sa{aB`-vCF~g*zDI$l8yZ1amkCVa-9!vD%|nUQM#szC>o)NlQM2v#>elItAD&@dz5v?!>Nw8l7=fWmsCg zW+em^=(UHYmD(DbifukW-ib*?O;jMkNXCkrM0fy}I_;_Hn$v|nqo0M2W&{JNBoNIP z0v?RW)D4qIW|TS^_43%c9gj2Q3sBvz3=e+fau6u(mn`OXLd@VQ1~u*}4FbmMxm~EO zC-{K?1rfs0MNh78h;yfHR_f#)asvGKcN@o>5l_0yAT0UX8SY%H#o^6>7}H1G>O4+y zY1)a$1Q5Z$c#f?49JBqXKUu8a1|`uSVSk;~hq8W}vK=wP#+U+cELJkqdcnE^F=oVj z&0~NmlxKX#XVTl@O5#x4rxqD~5?|I`9ces8d1-aQ=C@&uWld$NW_xpEJn*D+#@leu zNl_|^@u9_Qc2#9@v4c6qP-swF(*`iTF5?h<8whcV-yu@07P1&E@R&3ynFFK!IBql( zh?2%>rMk4*qVgg_VGwYK2f-?{Wf)!25@5i>)Uj)SXBQPb8w)(U;_nHm-wEm8nJf6B zw9!PmTIOR}paqL@6sZx_<{#=*9pqE?~=vMcVGeNUg07HVvI??YwaFIuZv z!uY(z5MlCZsqGlA3qx?dvJ(m5&rXA0RzX8=CW>QLLCNml8XK7o%!{&rwnB1n==?Fp zh+Q#Er_eq}g7QWa5{6^yf^2)5>Z|B z%ypoe*_hqa+-!Af?(F}58+f_s-mVxDlI}|WVrqR+2)2m7p*lS~MmF$3 zRh-#s4Ozbd9pv&@FI&>J12jum`;|bO11$+_*FrZMq9|hn$@Zz|cRbRzf=F1|Y&3{% zxb7RbT+z*U=s{o$i-@OlMv212t?t^FIO~@dzQTF;@!)Q-+dPMLWdk?HM!%P42Eb@^ z0<+vPYn=X;LW1undNOQwgD~FLR|*GS#fLK}I2~l)m(TnI*GC3-P{HI%Fu&U;bqP8p ziZQH*cU{sfPTse2`>Tp?qc30)?0m=n(+$Gt%O1BoI>fvqQWy?#G}ArSB>jLB`2a8P zE@pniyw-WZWF!wh6v74j>sOl#+ZEeA?)?s#m?(;ShuMQ6n+ORafXbYNe`XF;l&*3Y zJ=peA$b?M9Y#*W?j^I5veSisFfQ`>4fVRajaWn79B-QZ_c8D_gy%p3Ixv%JMRHFA0 zkPUSl1oE!|oq)GQ?>O}zb*h%9e<`ujmAFBb(gl}w)dJteY1cA_Z@4pUzO&052U>+Q z)TH~j0Zz4df?KZqCq0*8RcqvS>r9c#!$aM4QRB3+-T1^32hr4An6uUkYPWQ)mKTM2 zIP*D8Y5_D zgdm4ggQ1#q8r$K79@EKJkiW5_tcGl`YNS9sWTvzt(Gu^6!c3b#Mg_b9hmaPepjgrz zB1QQ3U%-lCWIq!RDjDbLm;>_{IjJftIkb|p8@3?y*prgyDA$ohA$l@>r>i^Jo;%w7 z5pKPJD>B7RpPIX_fLKGQ0B@gcl1Ajn41{I&)$mMN)IE~HfNz;Gyjmga$hZG+MuCs{ zUJl&d@8R`3By|u;OdnzGp5X~pDw&cJx%f}=`VP7w;y{Wu^G%}XA~SETd=lMPb%d{s zWRrLsCITtrj7mHv-TPJA6IDcl;;Uj2k9a-z@`&uBl>7m5YU1Bi1`X2OKbCuxv(!T# zUC0a0CZF;EJShm>-vqy2@fi+%BIDro<3Bi{4hK?c;d9ko@`ZT(9bU<&lZ!EUwuGqj zg0b!>eI(6d`UpEkn8gty?l?cPcT-|jJ+#wIiZxjtB5jP;;&xyMqIsQ&awaLIKZ&+$ zpSnUw>3_5#RSNA}VQDyQ0m@_q!0thZRVI+w!{n%lLVA6AX zBM<1C_vqHwSZsnk(F(6h0+CyzWa+Nt-c*uSRg?8bF_iEGUttO!?#Q<4qdG;zz~mD8 z^P?aWoc2Gu%{QLYb%CG*w;)5LKMTX&(8xzE^5iiktMmCFV8W1^8iC*PI#z_@Q{R-D z76v3_)F%4x$lEe(gk_{g&%}9QV_$>k#n?P4gduCo<*1v8P}ezkXwcVMlBEmMt)`Fw z;-dA&;vF*0&j3K^8Km!%>PMCBRw`9(Pm0Y)EBqFM*TD{JV0;3>N2M&p&8{}IK-&?? zqROy~el`VdndU2r)_oCxC^K76oFlD#BWc4O{wCws5CHQaw|k1Xod7Xi+iUf=@XC7c9_)%yy#4Ligl0fkjL0oQADBU}T_zk!2kO8`#AudD- z;Rq@JmOGi^Yq)Q}4=4g$=7`?Bp)2jB1aQuYyy%LgP>DeMwKJQ=1^Cq(DIRM-eKUj|BD;{y4E>Ho;O* zGF4pJ2Q5BR3379mrDd2c#QK()?czkH+{72WgLBnmIUa$l36UD6iHKPsT`<9BFyrV< z1y^ZcHe147F3#JBne0kfquVS57YI%a5Cla1P?SGnNl3E!Fo3XU*FqPBa z;E`?f=8k@}3LhJ<%KW|s9t@;xgaTh;((->Dmrob*#+>KIXhvp3Hm4M6{#q^S0iTOn z7!^0M98VVedK%nclLiS*@#^jsZ2mu3d#C8kp0?{Z?AW$-$F^-79ou#~wr$(CZ6_Vu z9katP|NVTg#@Hv%-tWOWS_k(SwXS>CRaLX*uN-9(o-|84nL@9Ut_ahU-bSo^=FZ)) z0AMoJ$S7WC$iAjy^7G6M6)p5P_)tF8fm=v3kfI0Kt+NTl!ULx#5@QoydhmJt6&0x- zem}sp4qIl+WJ%q%+_RP^PAC62O6yZ6XI~+P)i@aF1r;EG4PNe&C8C*Jzl#m2eI51C zLYYy0auC@D+maQ5%{3Jpp=D>PEH!;o~IDW7Z>Mi@MT#9qXh@+q34*+;d0_F)MAB($tSBRM_( z(w#t9o&*b@I7I8!Bc?dFkf#V;HJ~BeQj*&hEv{;HY};0*azLRPo1}S}N{d?xRvC+O zHAI<~%pQ$cIjT-g%dpzGXs#`lbHy^gX1Vwm8?rWQRkhUT%?NVMxY{3g7o|3MBi8ZB z^FfV9{msj=2U6arIS03Nnqvo*T;r$eBkLEAhKMB6hANk|!M4u6AxDCelD5xn$AwaB znnC-D9PtJRzJ_L6dn-Me`Ey3u`+SLeqmq><=B97Xd8=VFx=8j)gePr49J;88)!<39 zO`Fh0JR~|gk+w044X1ermtayQZGka~*icXQ*lihc#@1T&xKL&iBTM27pHvhZ6nW~L zH%0U*-Khwz#gky{qj5*F{YXQ`g5L+jIahrRsPGHeuSzeAFiJ@jGFR-j9u%B?hmg{f z3&kwmeS2cBpp6>8WZyfVW}qDcOn%ZRVDUy&h7uLC~AO>bF|&cGvAhurv3%Ox2Tu7qwfQR-AN~3Y4E#}Kz(eD}=BAeh*Ivw)xoX8id0Oyo?C;`&tPANDx zLPq8llgaNUr3ni}&jj4j_z+lu1J(BotB1pDesQ6%7U5Pa#JItExNP8I+DRV#xxFlE zFKP=mm8wTTX|(BNoH?H>PmO<)` zHU7lJy=f=z=#6$}NpBG3((QM_2a@llY?HZN@nI&BqB#-?X#|a7(2%oYRhIZ1@d(KJ zeH0jDh`=@ZYT{P3rU*g=`tX!{0hOOnArwYEv8XXNZ9JB;=%M+!KnT;Zu6atH0^uBd zuQ=~aVGGO{Z_zhBOLBpAv>HQm!36_67p$C;PSHqnS4<0;wMcxmUI?vo+a#o}RY|3x zEMs6wlnmCIT6m{pROUVqAjMkk7>8gm?IwknBL+i&-ex0DvJ|sy+v!4OeW<;fm6FG24d%uR@1SnDHkSEc-DsAv7$0~WDvF4gAinPG!( zNLtM-TI7R=VSA6j`1~U&f}T6gV}|${bY+4V=LbOAe|toTQF@9z^M!5(wN!ap(qbOg zg<+Styj?Ae=y)#b&7qhh(UObIiU5saQk4%$L(*~`4sfwmx7P+P- zGJ>oX4Xd_l9WlTskYl0K$td~`T1fdj*Km~h^$jr*#o#e?6IsbmTuvdSm`ZtymvnK> zIR0cLHg3obN;z=lw~Z7_edPYK(aY2bNf^)go-M0|iy)NvO8BBr3O0HfB}|g1Y~d1( zn34&#(x{B0>w)Ozq4S0&-?|J|K|H)_helmXa#81E?4W&VCMRlhY31WI35{FF_N23# zauKu-WAS+L*uv!Q$|R%U&tRTzWKmDFzI?wB%>TU4{xa2mkrYGubFe_ zIy268Fb17da9Am2O{z~da;7dAL;HhEIGrfLYLr z>=@5y2#OI>jJwFmapHVmLH9|%qvb+D0l9nNfi|7!pejy%oXLf#fZmb zUC@dIzaar=EybUXR0RyC|AJLa50hWWhdVo7j0Gy~evcJQS*)KAF_$*%IdfJq-Ipv+ z;Li_g73b?pY?r2{&Zd3yJd6i4cXpq3-u zCT%{XSPqFo#2BoO7`3IzERm(B;*Xdt`FR|pspRA7`C_W$_haP9)E$8!1D|3L>Fxx_ zzmk!*rV^|71{^*~O|8@lh5NFiU#uD?`{K>a*N&=v{0Mr?w2$^>wq3RBCwZ-YDe=XL zxp3Ppea&_ccT8-3?7WTft(|*(3liR;W_pBY)avCg2Q|jsC-><=OO`FIY8MbSX$)R; z1RS%9i*-;7;|131($DdLYihRaCF$Sy-aPoEwci(2f_&unz%&2l=ca))dknHqKJ`f{ zCkRr${(~}+p)A<`YD^glIkCr=Uxn7}b4`AIxaIr^l`mJ-NI2CB4~jc_BZ?eomGg)7 zD;)LGiF7JnxC#Tu-NwOnKg~VG1>P4RFgloK>WZouq1skr~Q4#0j-YUT&UFIS1ua*mHzbcAy&%7Fy2osnca1P2X~A zNzDOWjUma%YGRVf5i5UVe)qSnGZ{~ZPVK6(93jQ#;ewi5e zA@>ML+b7ZzzRVw0Npv#4jwr=HO0&Dc2<(8X;=La^+*5)zCLp58bQ3J(yX2m}!8z=u z?e;LdcDg)2TIU;m>fgSA{woOt?b|t#6vYuV`VE?X|Bn9?{x_WyA|AE|HWo&bwyt(o zCjTUt{mU>>ta7Qep@zsiK#*XwhRI6gk9eQV)`C(HLjDl|G$J6(=o$c9E@{TK8exxS z96rIs>>I!*{PheBX(3#a?RwXVuzaScN;LA4%X-kwb#k@E+v#=W_xW*P2Xz0!7s8OT zuQ3u4wm}T-Afun0NxY+ZV9FZ<=RLTC@6IN+jM%ubs85}KCueDbGVc!ce3nPIc zwTz#t7tv+dVbt2iWQ7fqv>@#|r4qRYr+TlmXsaM~yP}uh)L8?i;lWq;dCJ(hE+*Y) z$;R&9WFL@>ybC$>uQ=fWJXsL^CS6p)BzmWZsF6QxL@2o6gx2SU%FG^p9lFr-v! z&`_{%^MRw;p-&#mQzdhkk*-sb$X+(4hu~Z-zY_dVdTr z-<8IlzT*t}`b%6>hzxaxaZn)ZiUgoIVh}kIuZfb%%f)luz72v$Cz9%|LDtN})+o~& zX^^;Luy=^81bq5P@*~B^v+%~|C-ZtE zCDMK_JRVx8c$9%~z}H0wFyfPWvDZa1M7bT;v1s$&87d&v-+1(bZbOvE1zI}Ws}+qar`(e(P%!U0f8#A zT-7oNbBw1{K&uj7bqPHL8VyNg;Vd_CeQw_9uv*=6ex~l6wM8qg$=*`yF#8(*jGnfA z^V#8qLL9g!9lY{*;NCg<*q*%Z_O^R@>;35k+9&u<`-{P}^4kOmn>uu(0t7XsIw;hD zO%aDYxCmGP&M~QA1nb1sDxuq z^Yi}T!q;0^rnh`w8&FfxR?=s7<`fdp5ikA9>`9uh%^dH*ZKK7!1r1UklrxSiZ(7|J zupMvgNzP=Vu^9i`nJaodhMV1_h~l9~P|F40@dy(^J9~&?afooRi(MkxEC?PeF%=Q;Ztsiij;{v6lv< znZSM9GvbsD_g0el0_w-Pjv~!Y#vZI4ii>|HYH}wxlYo+Yycd}=v5siWTGlVWPPKKl^{hQ^@p2T25V7MGtrM&c|q+- z=?n`Wbey#-keqZsnJwal1AoUW)|tNPNK(nwl-Sfz(p`zEy~rG%@8_A6o|t@Yef-pQ zutRlMPfI~U_2oWO!FGi@7`Ns!g-zcd{;fyq(HT^OjX&VVDsqz-0?JXghX`Nsk`r=$ z00HnV+Y^7O56Rsv#r6#W2N!48WMs)2qJrZerB``Z8mzssf;;I0FzMKO#QjY*5Jicr zhSrDc?YBdFurApwd&v&Da2L(H_d@fVy8+lzx;NqG1pM?&oAgZ!08J5!0%4 zS04P{mF+*Qg>FIPvm9+SC8pzfLr>96(V}Y!JKLzLn7#c%!G_IpymYJKd}`cJL0*v? zU2G?^*n2ykv(vo)-N>z@DUQX~;my`NAx~7jdgsr^<#1_qWIq1sgPcYc;=iuX2)LTb8T; zdb01^P&?{EidgTX%J>r(l% z_j44K$bz=Ir*T<|agVa5bd0`{NiQ4-r?K(Xq*T6|_HYP@J!j?|3cY%Sn2~(n=}Ff? zM^RUmnVBQCA-pA33nsZh)QD?o<>!ypA9oY2{G81%gB4S3-vG9X+D$W~;wS_hsL@+b zKyq3t|M+#Y?}gTaBNrc1H%f7{P60#e!HZOeb=VGkwrHSFpn6&7uO1039qCx!G9gTS z=K>f#-!*99_XeDV9pO7|@Zjz~FHXKG)qpoXUmPx5p)<&>U!^48pxZGsI5*wIcDw`i zP-wU~l50b68;C=$ONCgW?HhZWqlFwG-!|vU@8?fEGttIm=ho?7Oq>kW-EqEl8RnUW zSep@4GPKyBv;vyWu$06rF*SPO|a0D(BStepE{&4eayrL(!(C+G7sJKeVf_G-$vjZI7hUglke;Mm`V=& zxk2t40mw&G8~hkUki7%D5i#m}?K$GrO13RhqAa0(qLTfPVq24D60}3?A?_QUVAG(C z_v333Fab(mh(iQFa8CCJJ-Tu3=hzKlVrwIXFzx#Kk_Zr{8V)jGYSw`_}SmCc!BEi;j#?_&JKLenc(qW*w-?Fg`k zINhlZvd18~Aj)x7?)R-=mGP?;kz}d0L^b0y;v}3qV3GoHo(hUWhH%~C{#{&<@|6+5 zr_|8uD$8{?pi95xg#+xr0-{pik)u8X{B;VrxzODU=!TZB%dPV0^IbT4V``2Q+!r9r zY7g>6m=0^bU#2 zkQQQyNM=6(tN;ds3{i-mKdF-=PWc8@Zi2GAtMcw4Lg6MXcEF9YE#z$gHuH@~COP}z zy5>HAJ%#KKx@C3R+#l@`edfS(UvP1NZK25>`4eurbPt{_zA^SE#c~bO5E9 zna|A3G4zSM>N#%|Ew23HCUaRnyW3*y+gWko!y<`FM{Jvz#U@sUn}10>l z7y*$x2tm=F;>cX$OB~ph6n+{t9fM)XVmv-)=KhrQL>1U%E5HX_l|~-T>7Wcdr}MWw z;g_gr)@F2KdHn2_8WS`;A*TjT%ePric-y;Y8q z`OWm)OdX*}iTq)Pf_`D%5lW$v_5(p71d%@5v;USS~b%GVn1@Px7*Vt1A6f&T0XFPy?R$U zPqpj8n1LM^)mdM);yxpL@I_8=z)?%gV9G*!sHR(4UR~or z9`G!Bv<0>vx(Rv3XCca?dg!J72&WN>|Jp_Sq81r?iWL%I%sIb?i_woYC<8|`6y}?;y807!2L3Uq zW#O}6N#~Av{IklTAVAGYDGN+$sCz(#jlm=v9sFae#$DQ*a%GW~$K23(Fgd?c7*4oc zqA8!3<@XTkY1G58Psqk9kWVI~|>V?&*3>k5KPYK+u$WP%`tP2~+XL4+0)3Q++ z7H5RgDf_NbYsg`t`8{LOwK$MQ<3Z0q=q)z&#sE~9Oxfw(6K(u(QKe~_;bkLZ&9>n2 zMQAQ!Q&Lk`SUBg*@EQd-RFYww{XGR|X-cH{9^O;QNAUz1YR3f2Y%FG!_&UfH`6z* zF}X9D-~n!bLU5XBS92cK0}E^n#x1@Xk;HyxKWeXz+mVOP^Lnwda7QbaBpEKj5-NJF zeZH2W%;{|!aZe0^9+c}a8B{|zU?IklEtO5ivE5PZ$twTo$LK^E}UJG5`m^O zTx^w1Ehplwg!*7LvkxnZ5+#E``yZHJX z4lD;lI4Q`o6qWMRNam)45G>=p{ zap$vU6R43T?gJ_k9$csk(xj-T6xA4%b9-{!Bc(c9W28Ld|x>PRQ4`V)x zS6T;6P=c>hEXMKTX?$6kgeXTjo9|8m>v=_PJgOxKhcyK}10!ID?KQARTKQ1Ps^KE$ z?p5?USjaH2@EN@Om{_l?s)y|~x@NM`q}o%cGuMPifgTk^@?^GVccmsu?2m{ElA4ZX zwX-rMY$FAOc*65#B-Zh~@!@qd=i^V7{v9jX$K{~~Li)equl<3U=gn-Ri(Z|6Jijc} z^L}j}B!e{auWF0PlVXW=Nx-r<4SPaBS0u9@M?*6`U8FyF1-Mhc0IRAs4zvM7fs)Ki2?>WotGXy4RN@pKF3oV7B^Xl ztTolttopBIvUi}gh7^)En7s#PLK}kPtrBmUAH47x#A####eaaJQcEJ-mnXY!2uI0=ZN$p&7*v_SX%M*Qa z;mt-r_ZQcq!Xtl%Rj1MkZ`QN|d)Z8z#que*pluHhN^SKIbY@_=1a7>Q2OnUiJ?Dg} zIy+11=ZR=R*$+PTlY7jWF2J=+;k}m##YtpRb)v${sW&ja!Fk%IQgFF1alizxg4Z)V z*>uiIb0%|@n%&9hL_Z4?U|KiOl*8mnrDQ*O%hW`Skz0MPTjc}>81I#GEAO7kcIoW; z3_Uy3y?qA5p>g-eG_+p%qF#saiRvcthL(%oG%a@Rya#RV;u&3s_DN*B?7<_~&jB1~ z+Y|T_3nN|iljtsy16i)06PYeohjiKWC`-2S^zvjVZM`$v?K&sVQjM~P59d0`U1%8d z_LTF9)$6eHY_30{(DDx_4PzD3eJaJaG4ad;ZH1{MHT~hh@UsRkO3xW}oW=Sca2$m0EBWuv{ffA$B#|(bbbyw2 zWKE+}qZvjcE~pwd$QI%mjiBk(9t3;bbOr8rUqyOG*oVv%Ue$nC%W4rhW=}bxxHMYN zJuckb&{8uD)y+sX7R6wtmi4Me-#At!0zTBU~paiY-hb?Me7KDuUYE)*wysB$6{&hJYDIKa>2uqFZWs;f$z}swdcyY)ab?OISsM5UHPec<9AuMQvE%Xz8rX+4T>* z-8*hzS8&N|%0EEb;R{YmT$_U3k)OQEfHD^b+E3>HeDq8Cv zQa-2J5x=;Q;*G@V4tbWmyDTLOaSQUM4E7GO3t}nZWs%>0mx)!(Q>{yMWq?#)2DD&zKaQGa& z*#wmk174O6rg996IeoF;N_UFt)k0bI>)Sh@&NUx*8pc7L_a#hnJ!@ypr4B-Po zMWPMLw%h}9VM#tOPr{z#Ca{yX;M9c-q5=PrqRg+5RHW)m(mY4I1PxwY@*yydp?@&y zA6Yx7`!i&)2OcN4$kkO5LcTCsM=sNy&gIs_8LM>;y(g%}5yR#L&zUpS0%Ftx4?$7F z;E`|lK}QQ#4~fteVDC*2Q-XgB10A%czQ%Yb0 zsHi08zp{@Uit9^ zWBP6ay%H+Bc1(Hc8ERZkH>0V2m*8nDj1e8Stu6R1w$PeCXtf=`9+XuoaRE{Me1dd* zawpkEj;yy8lZVe;bThV-%?VSrY&SzZ~{*cHjL42UWZ8$U--9{F&JWs~51@Lef; zd-_doAWrG(tlK=q^spSi zN-@qqa453`o3m>`@luuAL|m-o4Asn1BT&MFhQIRj= zW^6<5c=8m0?9iHZgKm4lKWT>C$5=(b$L&1Jn&OzuCpm2T;*b)CsX8T{*{<&iXOEbj zsvl5o6QfVoqK^;sevSKaF%xFaOG!}mhxA4C4}#&a4P?g&s`{pMv4WncINX4zOE!2x z;M}25NetIeS@$8Q1_k2;2@*!31h^W|(>m~Pr@8JSvuN6RDWBqXKFcclN6xZGob4#R zz8mTaiN;{o5Q3y=pc&t6gtm`6L5NyB4h+F_phLQ%*nXAP1?vvD<2MSh0eM2*PiCPx z3Ja_)f0R#{fOWp0zRq7Wod&m7T9+6XQt zPYF~wEJHhCR(vS2GtgGR!CI-h6FgC>8^51ULV2OR9XJb5#EF`K_sO^j{+fj6;+Sq* z`)g#I19lr|$V zPlW#b`BTPhB8+R5Lw}6rEoB@Z1juut@!K;jAsXkfI+BVPwS*^djy&PDltl}MWlLIB zy>usWK7yEpaq~n01TMMS_@jWBNvh;~BBga2Y2c2*Xb%9YJ}t68m-=arGhoow-PR@a zrc9n0@eq$BcaO6!S8cVTNi(eYs0`s;=X)*8*@{lmXzbK2bXOoI-@V5v0_RnJN|ezI zhjM~Vi8#xxz9xp%;cp0;=6AOwV zPYCA?HGV1SGBe#58zVrN=IB2FTg=6N`l4!huYba`doMTTn)m*OIfk9Z z&Zy67fnm#cr_vdL-miQOQn2W1DqYzupRnrmGkPIo)hG9)hY|Py%lZod|J+QYya~FW zLUrZxn~?7ByZg@duQM%fI#rVZi+Y&QJ6x4+h*MtIB>Oh>%0M0%BVQETH(HS~J2S$n z2~Pdwz&b}917gsZ$_QsH)9-^z%Si{`C+KAlXgdoU=cQ$W{QKuQ6;>_wdcvJR?3}^+ zT!=vej^XA_jD>(H&M{sWv!>Rr@dMj``Z6k;j`6RY)Cs$fm?kL4KH~ zI4`Z1c#$-r%26ygK_QX`eQF;f_^6A!a_m zKhj?2>e5ZpTc3hZF}WHCP52Y$r!De;Gxx?@`Q$xc;O}dW87!7ta63c&h?85i(@$4dNbi}zH|fE< z`?B9{apEUd2g2o(h0q7UdD|8T0)lFX?t$l$mCk8Lr|jnacB7X!PWs2eExsoZf{^q| zp!jE!Dz7ZZ;SBEmsb&MYzPhv~WtGDDFu;qaoFY!0CHPT7#2RZU_#EZy&FBho0{3Yk zBr&=*wm?0Q5j{uUxPVL}3^39vc{xbcUo3Q{I-af?U%_Bz%d z&j&dNiNR`Pd!S`ihX5mBXNdGgq3tO#j=a3nk*D070<*X6(7>w|St?>bMUv5iY_}k1B_H>8#Z27j z6VBccYZ3+exuo#=kqsDb)wZECR{-2mi1VC`^XeS@4rb>Xy`T7g~`)$og@&IfI@o z+gq?+x`%oP9t3=C>p6h&!v82PJq8n0*&7XfI|P~;otY+u!-Y8Fc7D2ij&=c zvdvVq|KS7jHPWI_RD-A~peiN>j6p*q2xRDkms6!E1jN5EZOLu)o3yN@lRfeO-A4&0 zf4z!j%Gsj3Y@y2!L*PzjK6#t*@%#9E0tHGjV1?(cLk&FQFu(dF{y}e4C$u~A14E}6 zN<_&i6s!QNatIRkq)q=iE0MSn!F*n1Tw;c)%tONFYTL&^MYWxjAr38I4J%P<{3c^Y z(^Zt7NpU5*p?V`KC9N9cA_7aIMpsq}nV6 zK3GwoKrfr6@TRN~6D)(*j`{%%4FcB4he{*bBcspk!uxYe34WP|iu1T#v8~c|>Sq?% zNW1l;Xy>3&LOGtEVQ`0nYDt^J?&BYKR?3YQPLz|sl8#uP3>pT2>oQX#Qza*LSMS_p zZtqdz;FnYZ?Tr`<&;CD(s$>jjZqbsWqV$xRkrULRndbA8737g%TVM|( zM>&qbRz9IDMCZWC4ky?ffJ*}2~Kmw3}9EaWtG$uh8|nQ zSz=1V={7y_&sVbP;;8e-IvLJL)B}LQ{jD&-oDr_PMoQ{9;38Bvn-vbufI?Re=k&4h zJ#k|@cE@xE7#FR>O_Dmowy*PiI0DCJ;Y+dw0G^rU?whQ>?5JNwk;H$#!OiGOx>~*j zmL4@QlLW%FvxAG$_j2@OZy-E_&yX~p?0DKJ_7Ypbcti9tc8c;Spa0E;^UvP(#RH@O z{x?0!^E$K2D0&y`+P|Dnh*ly$E zp~HQPq|=M^LvsWIMfM%|lk#Bm$guwgWP8wu+lhIHow@b?;`uojNN>*rxY+}eCw&k$ z2mPiBNItKrmNmUwLQ7gr|Fv!l%^ZJ-{K2aT!k2-ehiHxB;CUn_piRDKi3wZV#D|@a z5`ZJnze)bfup2$>1RvSX{>he)3H{2D&wAJ4DS?XhT z9xfH1^QdN=1ZBZV%7qU}L7k(F26aEZ=EH4WnJaj-PU;E0Jzads`@f*=2AkJlw^)zh zrd^3iewu5#co(;na@I3bs2IXd*M<@`*=@b|>-XoYIa7>qba0_Z>CMR^ifqXwXCWXs ze`jNg;6GxRr9$nH(HPy>rVN?GlGJQNwSODo`4@v0pD|!Pjyapq8_s%D$jJ!MCSxa0 zy4{IN&8)s2w{|==1aSe#P!&+!eVmAG{T3`b-6pJv88)UmGLN3@BU4rNdC~TjJwjSR z&erMbSc8!_A}K+mq%~%4Tw|!qjN3B&dJ{LS+I=vVVOO2r^kSat70-Uz}hFO1Z7HMYKZYWU7Lh;)GQ%wU)<5B^H;t~A?$THB& z*{@fi=ptJivZdPZk$HgC+kWl#fj%g{BKEmADhW)OoJn!-%>2Hej^e*wt0mwE=IQGO z05rE)0L0LdH^~-pawA%4Pl$(b$;( zaNa2&vSqGIw7kTsp8kTFuFzVk{Bd-3?uiR-w05_Bg##bCmzS>uh z%VhwqoN@+OM)A*CerA0=z6Pg52O%+zjn^MfWZE?e)yDnE$KxRfa6vFZP8vf>Iq&51 zwoN^T$KSU(2o!PrQnB>BUwyV;v*z6=L>g0Qp%V~D}7F)Xm#4}=xkF_~%0GjEsIjDwjVQtk`yXPMg z3Y$(5a}p$vl~8;KEL^d-5nxb$IK|H4`IoeK^})2t%L)|c$^{Q1 z>+HQSK6EEH7uvLf1paG+pq*z<99$}dKcV{e-BJA-%67a3o}@CgEsVvJSbiO4{W$Mc z3Oi|&c*;PrDb1``iJR)z}_Z*{Y@>qB{zEZpc>UtU*u zB|;sRn;D$B>fs~beVXhVCgIQzMV`d(UnKL%S>N3q)TZ9U9gN4&a5k` zooa##&Bbqb?Y4`Yj3B;){Zl||zqk;)(w)lSIY`dgIDS!KK`|u%J0m0l509FX0r&Id zhmnRFvP`PisA;JiF^y$ChLhxkzRXXQkYP`oueudmw~l7p#zoVz83m;Z5tEP~d9QPo zT=F(E3%m~nN|_Ir#(jD7rA0K$u_HXyG7VAI>n|Wr;p9*{;n}~)PFc>4AZYZ{t)-SZ z;eF+{p&HgE%t&YA-tlr{pJ0;gSq*gv-iBdWwTG7}A6dC@7BdbLNh`6InTw)g{rYU< zf|?;)7+twTEu34>!n;nw56JA-Krvd7B zpUkQU|G5t}k|9RkR$CrCKK;}HD2cBg|>&1D316-K>K$xdHAsKB-PH@0UCfIi& zS47|9+ui{Lj7BM54akE>0y_A_#<8*<=!e#}ADe>4tzI!IV`S4bh&5|ofBA2jy5jHJqg_z%B#!<{_Rdp42USH+Pi!s_zP)OGg}r3i&p|Ke z4*V|UWBEIxNlcT?7`u-8q~WY>yopr%d-Iu47LBhe4}uP8Rs%G{+3NL}EjmY)GZsf~ zQYbQJy)A_qE$@GqI(ZVDZ{DVCb9qN4D*Ea9o}h>Am;a(BA}y; z{jO6~j9@d9i~an>{Pd6i);s<)O36kG-kINvvoRPTAg%wEQTk6sCjAeg{=agprf7#E zj`+Fa>Rs<73Cq$%HdnF)yg{XdOi4?Mh)ZD+%Rw5)(&UqWagQ9c?zXZ;KEPjet?CCX zkrziyl=D|n)oc}`vkYA+NtohtdgjXee)`YmpYFGlYjz;hTPO4%rc5kTri>BPQXLun zRNk4xtlnn3Ud?-+DJ<+E451!mTet%Zwpbbp*Bd|3u@+`*^;dJ57&6K4>T!pn|S5Hl7AowBQaH}e&~-@KwZZl@jzDz+;l)zX=y``*1|-3b zKvr{m$EF7UYHc;Q^vXZXA-U6i;B@4^_N?g|u2T#{Yj2y5tB4~SG+%xk+S)Re1=H?Y zA)FqsxV{--L(pN3O`=K$3K7(f_$AG+|2rm8@e?sMpa;XQss)nd#5t za|88ONV7;x25qY##RYrjK;oXx?P(S~mbqT{&5vxz#Jz=hN(NXvsjK&%5$*YW*c-J< z!Frmf*x)LiGi1E&{QXxw^W@HkADU0bb1RPwgh^v{_A)e}ldyh6ULlOXrcVh`7KXS@e{>49P}b{_*@iV0O=vi1Kf&-auKvCd|xt7Qs3NCLJ*W%BOn&Yij#P5)i$MW1qj<`A+!n zNX-9TN%)r%RI6*dp{SyM%F$)BVM$ST+oK@D6iIGSVbIT^R|Q)Vp-RIfWpZTWF8Dhm zn~~3*7Jh;g+(7y4p{*hlb)-z1`33a$^%6=CU&{!2=65VCS5;*-&h}jUJaN8F*?qk~ z!2BwFDS+d}R3F4*&5AaFAUAwLBpBA$XNqynQl9(E!PJI0Dknp=Im{uqYs4yJ)mFs7 z>@c<85JJspJ*YxmQ}LJ;V#VmZ*Aaq)ZEM*^Hph0%0lxEKq9%~*jC&SyB0HOyBXChf zue(U!29n|Iy{a}Qa$MuF!y?s_&Cb+vf}lJcmF*KA$MOsZ`Awf!6fwVZ^PxG>7?j-uAcgr z_gbnN5q0^_R4VTVv$x~w^mvs+jNS@!zKSeYjvZG@Q8T(<|C47Z*a&+OkHT4psYi7O z(nkG2z`RPR`F(MX4XWvTHb0CtU8FQcIHtYFm?Um!J)*lyChZj@cOH)?SYomSz!nsTMX! zDZ8dNh@$2)sXHdNt6H9yOGbLSRz+#1-UqhreHOZ`pTS>yIr7!n)vv3)3a#35LrTWQ zhN6>4d>q4WeoG<$nzHCFE6HWjm*E+&wN*5Ue@MZ7=h`x_(v(@y(_M@G9f*8E7RLA+w6}DL|gf)~Kg7J24c^ z2s(AZyovmtVmiyYc&D z*>bhAz-u|BrY*4E(1&;L^{-tN-YEEGD9Gyr5`Gb> zP)le5;`~<-2gOf>eMC-p6i<;HhLb&&SE_+>v#_EZl2=q>o(_r+T-u#{?nh8C2Q+gc zoeuyhe(yVpsFD@94TwC_YtFs_Dd$!2hy%g8Ih$Z(r}+!R2{1OFWT8)y>!Ln{D@ia5 z5w;lrSs&ro29l?wp@wkm4`CqsGNCdy)kn2Ic@i*KlMhr$HH2cZNnU6}f7|}l3ShX0 zWrDRpzDGQj`$M-tdk4-t8~TAmH6Va>QIK$xuwH>eL;r5gj=G8}@e>(c=6XIz?JebQ zQJ=%=+bPMNb0-aRL3D`m!By5NJu~Dt!tKMQYW=(1B+z<&OFcQt$kTUA_=IY5l9paL zBubS`5%v*PV@36Sp-VnMOTo4kED6P*+cUY+l50K!DQblUGYgHj;;u{0{TX_XQf@g& z{@}wUNECFSC>Hzxq9}kH-!$#V2_ip%S6%3R!h}r0soj~K;r)! zD*G>O?N+yOMpei1y}BaL+=3;dk$kZRWfhVD!GWc{BOJ=g4m-a{q`UWuGB7Yu~SSX;;-ZaclMFgHlfXHjvVn zlJL;pgIX36H5h>>5BSb z?Wi#?mT-o|TTab1O%XaOOQt(UDXE$0bP!@mDx1KTuyGj3bn$2rLSWG)4)6X7%^mSXbVnu z(hGnecOa6JN^zJn+Q#LIi^nF0fw0>Dq3xZbB=MRx@9wg#EOuF4wr$(CZFSkUZQHhO z+h!N1{xk2I^PX8VH|IOwMdnT3?G+h2;`cl|f^IV-X$TZdT}2UuCi$18Kp{;wU1$Vs ziv6n|N9Z{P<6aq(qEt}|-ue85U(bA{FPV_SBr&v*Lxm}chp6f-3&KOh!MZqt1>2)meE`Y95PQ5%2sQDzh42ZJw0W0zRZfK*I<+$?}uxsGG1|$d3UuCHGT;^FN9OGpN(ry!a zjJe3eMqC>FHrdWdfbTg%ufflhW?`HgZF@h@U6CS-iwzGob%bXn zwGY_+Z6G8CRh3GIENqbEb7D2q&COgW+muAjl~Ah!$zhgAcie%t^2`DD4mqN!xr{cI z2=nDr2Qj5Mr-it^o&NQ-%*toJ>68KRC)F9S=B{Y2(Z%TsfYNN0QZS|1GY$%@eCO~A zWjK^WY%#_r_c8+&AK+wdlopF5DMZy?Y$eCNEOUhTVf!(B4k$4uQ!YD~M(*Qt@h)50 z)1}|puVnb_ryAq-)NJed8;9$VX_i&DB3~na#zvk7f}rLFeig#p`bndQ@R`k9+m-vX zU06VpYZU5MhXtrHQ`eNyWBamU$EGPyZn%mwOB%#tis_DsO2q=t@t5CFBl$Ea=nzgTaJoTGGxq(>(3|cDFNuH@WhnvN~g4;CH z(>I1{8yKX0&gSSplGAuXS2E{6z(=D*GNP*Uw&P}s+Yh*bOAM5`? zZcw}&ToH-5z(aI>|H{(VQM6;rREEhftglzdX|}f+n>N^Z8fv2 zum~&5HG?q9%R0su?wHt8s5&58Uj_v^;idD9NV6yUG@#RPk>c(X_d(cBu8&v}%5j<% z3i54bGkTvdDo>)%d}am~E@Z_;d~GiiXcUsl51g)hFMbu5s~NBa53~ z-uNL5oDNPRcHD{ne#T;n*hB)f;IUKUFV<&PWtLM#&CPD3^(B6M&@m}IS_VAOKrs1E+jo#J8P{0KT~9Z^$!b9#1nB&@m;sTrNc zA=t+j?5MN?ntg&UNrj@3w%Nh2BiA6aYAV1|#&*%K55yK>X;PiDE0{3=739b^Fvvuu z1?34{$$~aC2Wmu)d9R|tRgq|gzTG;YpgEQVApHn>fk;Z9n_X$*G2!i%rKX zSp`A#bUV=7!-e96j5U6WHE`DI;THNb9)hhM!C*@|}_*=@#~WtS(T&r&$Uu zTj$3s`D&fG>~Lg21rro|iE*5WsgG1%b0r>q&i>h8nCPUAsM)9>_z2MXJD9@m&(`lK%-C|)Pmn$D;2Z2O?cbaq~u4V2D_ z{e)T{>DU*1Q3z4x4(9T@MagpwtmqI=@SdDUUv5EB6POet8ILp_qK#aYkmM&)cR-cM zH(iqT51@^4U8EeY&F>xdMxB6dv|hX&QcJj!lKS2AxVe86B zxo>O@6ZB>3bWYJCa>I8snWI9cPEi8d$?MF#X$>$Qn^0XT|GV>(Ga+T~r>7Y|5|GZF z*O#aF&z51gz_LC-u6H=z=;{7WqU}8qN27}w^BB@VwA+a0h1SuR(y~iHxDc)35wXc+ zfU%7UP44lsbAAK})M_mjH&r5(Qz-z{pbxK2X;pKMx8-e1J9NKB@p5v$th ztoB#2>w_ygMv{yrc>mKPaq(C|*Nb8BX5`{*a+GRfY~s@G^>v5Z!+FIvqF2V-4-3v* zgo9%1fI+-bXSXh#ieC&5q*S(ELWh!67{R!lH@U-HfO2a-l86+h*9;hZ)0P2ZOT|&HP z%M;`4-E&jN*+QF$6Ldk5OB=xqOx_fw(>#*W%)bV(5axz=am7w?YD;A*)Ei-G2x*Pd z2lLT=5a;oiWea+lm0QtMW$VP`KjQ@tm~NlqBT8)Eh)2G&kRQ$@I>gr#3<~}VHQI;k zZ~r!rcE_HJy)Lb@F)RSG9(aEE-!rmDdDY^kc&GktpTEFQZDI9CM0aZuZaddU%Zg+} zcbZ_h@oi3t1PxO8!Ym4o&ncEIM6DVq#S9wdIkWst-+`f+1+)IaZ5AZC>KNber9-Bq zo|0b$1^!o+Nh;rUm>r_iIES%uZRDCmFtnL``PP1!@xXrDV}l)~OS|lXzT)xF6VUXU zPFQq8Q+H~kKbY70lgLOn75b-pvRR`jWw>#%`Wr;KyWfO|x*FMB3L%y*j)|Eg@@g-} z6c%HI0fEqpD57vVo~{>v(-S}dE$hqA4#~-%-ip0~NC^O$}juq`*F%O_v7l`+t zNtI ziJ3qSEPr@){3J>fbvs)-mX&vy_w$R~d9C~dc69a!;wM71NM}7Pe&H=d@$Psg2ZKx2 z8@r2%&)3_r&d&omya8J3a=|LmD=kz)SD8T~D5xUE0a~14m@094tYOwFF?mJWV*Y+l zZ0MG%J+FlC@#MWyphlqKF#h#TmoFRWPGFUW>wVul%kKk*X=U#M$GwJ)WCJeSi!>z@ zuJ37DwjQJ;XwtKI#1NDm`j5QlQDK^&tkB1z+H;o!ykuCeTH7dHwOZJ7Q@MLj-$U)^ zYq`9dzULsM5g&;eSlFlC70n4}Az(DCXPusUm-DT#jKrM#Vbez% zg=6W@*NS=uK8ZISJFFuhwd<}G@l47}Jz{Zojv{4|8Q5AR zwijhIqZ58>=a1YPaTf(C*xxF}_J)Kdc_Md16P#vF0j$tWth+;buWh>vk$;?Rns@%` zxdRc|#^_d=2L!#K(a$Cf^6Zr)t-_!*y z+llv=yGq%QLs^@(L{b3rP`t&rHw#i|%H8;WFCQ{%@o&dmB7Vl_)=zP-T3fP3J4W%W z*hTg%+hKskW@4kmxWY~}dEkSfH?Z>%&?(zQ51OuV#IW*2FB7pbE6;asP5$iMYTURE zGlnQWs2u$;aiPT?CqVbd9%0wq0ZZlg6003dw)d5kdL&!Aj=HhNmO5trY=A$=J)N{+ zdRIm$aB{~<$rOy>KD1v(=UY9{7UImAN94eez7Tg_gdWZ0QspR`=Iv*)>KiQz3x07` ze8tM`>`G4ds^0oa7Ep;Od$_7&842Y-TU`Vm{$cQ7jQz788e&#dD&|GyL=Vt6D#+i& zzn9OLKPAdhY{vX;)QRj*y&w!=SPwD8C47ar(6hCSD8Ym{pbH6i^=FNYn)}%i%D_lZ zbgPVYfke=o^$M-;!eEIt_KcIDTI0|P&3E}rR>Xqvop%lq)5h2vWWD!C|MCdWE;s;f z`kL411*$kSl;It$l0NGLa(JmOv=#>&Uhi_<=W`^^^Mx+RIVLBtf)O7(#TE)`7N|6v zA9H?Y^o_Dby!zaNEEgk%S-8#&249HrH>?>Jc`Hnv;gQ?kKEy|$9O%9eLF$h{1)Fsq zk*9HkT1jWD+~Bv4X&1$jM6DeR`veR$TVx_+aTwVGnnpz8x{dHLvI}^VF3Jo!KQ`ox zZk!pH8-hquu~pg+#EhIo47+?r?HF}r;IIGV-sP+}Ss#S@HuMnw_@VgUo{#>8GF8o7 zQNK~<^d`x(@gIa=zY~F=7&ow5{`@wICH76=6(xYQ&|+^*B?4w)NKS3#Eo)k6RIglY zLut@2r=nK;iH}f|zGQ8#bvB1b9qseJkN2^UmpwduoslX@;s8D(C6Bi=HIaJXx&7vK zydJdt<#EaOgYs4x$_DkY=9}sVj{i6gS?MB5?jCEudOu z=N6^Qmx0_9*@WU2B=y$92s zp2q6YM&TU5w6&=tPQfFR(+VErWd>x8iQB}Xnkd@B*{0LMIeH-q*=8@3sdQ7>Uc{La z^jWpcT~VV3XRY7X$E`vuQB$U~Xnu-r1}-LJ4SB$Dg;QD{W`0zW#y@z{s+uagnjQo{ z#pBOUy{qCgeF>(^BiC@-l4%T zsR#TSY=JpmS2@@fB(kw|LK@>H=}hBAR-?|9A}SYoV$`b&b$a_Rs+N1f;>;|VMdIe1 zJdDA?Yh*}`r!mp^f%jln`>x6AH68#}#3x$h zph6==Qj@hHvH6UxE4e5R z|CK6@w?gu46^{f@1@!3(YbmDIeCB|=P;<;y_e%_XoV|YF1Gq($&w|jZi5Tpmoja_J ztjhykk67u{jM`2~$!=C2!a!qITq^ryWBGaWGs**vcEHtJH#}`Gv$$0Law-Gz*=!!! z7Q_2}*1Vw*x$e-2+=iDBL$omyhGDFGUnrScJz2*l{WR^k;#-8lnX*=ZYW!6Tui+@; z-2?MtDW_wdwcrvf-7ubd`#Mw9MaPQl5jnz0%p_;GJ(v&@n~q`z>TVUhp{YNieo7vr z;yUp;%=lP;uJ9z)oPAp6wTa?Fh3gltrj*pJEK=(lN-(07_ZH6-|?7`s=vABm#mTf>}>ts2O#Su|GOFdQm#Gt zco?f8sM%+P6zwO+ewq-zkdWNyq2joDi~V1FOx>|#m+ z=pCp#A@?qr#qb@fJ82eNE6A4`vOD%xql0{(^^EvE3i?xf$jda@4(U=6EMlr3>GRiq z^hT&sulo25t#J1eWfFUaycM!1JLNzFFX$cDJ|=5vJdDehu(n2a+Ra9qZbu-cpn-XK;94QlXsLDnZMN8(=@&;y#n+M=S5Y)XSUcA`mJOp|)DhOf5UTD#j!a`WZ_*sT z6$~9u$6$arbp_s=q4-c!gENBvtyJ^*Sgdn5UC@|rUZeN%6WCr&;{`I!Ws$`&>sT!0 zehSd}SgQDoZqb_RAJz{8SJJ$aqfL|?%13#-LTB;i!G|t5iBlH-- za_^i|GNM%dc!*ZcBShVUhCoY?aKdsg8d!#ig>X?H5IzLg3C|QNw0B0ZrC~G1;elL<^JDN+I`VzEF#1NINf#IPwI#KB@!_(h z2x278)W24b;v-z+(nauFSrqLhN(~vw+{hH|DbM`lPIEHxU=l5RnBDi{EHq_CYfWO= zF{GMxgp3gK$Aj_PG1dpOgw@-jIW#L&PR9tVvqXd+3w}y+2bNy5f|^l(gl7u)G+!x-nFi@h2!z3I zIUtij`m7dul3@6(7KEx?zc;nYMMVmFL|L{pJXG*_E4zV!7qTI48hR z>m^@U_LE$M2MUJ>VkUgBut^lbl``Pgw4{KYy)QZtNqP1Xsyg375CUFTSoXzE2Q|zi zDk2}elfO8qzi?O`S6ePq+lo@V{zQ|Y08yiO!PtS9=E!ox#t_}GqcXRRUf>ibnVSIWS65|s&eQp^ zK(e+@2R@Py#%i!sbVQ!XbG{?c0heXA$-o%W?0Yhm@RLsdgsMC!{}f+~E=!G_S)Cuq zXr-xqXB?(f1Tdla1WGeyTw(Gbo+a_&`7xg4igznyal4JOqx)Hg;goFiY%2#s6Wq|L zJTUrjlx(Xkp0)y)%Usi992xhVe5mC_iZ;-9?hK5I*Mq?ws(&Exobi9XB+)dbxUj+a;{?X8|U@%NThD~r^U_Xh%dZ8~0L8!tS*dUt{3Kr-)h4;zpdoxM1`{d`^ zt7e>ipF~G%%sNu9hFF$Y)4C24!k#s(OG}b*cWjzr!gO!*dHyNFxf248ZRZO}WejNA zWRey)IRmrxK)A!>79I6Z;Qao2FHzZaZarn$TsA{qyq|(c<@h3dl9BA~_7q{=M2A*9 zD4y9HE)jqkRON@51kmlU(J}J?xy;?qe>Gpn9J@Xo%Xa@QU_Fr84i%BX8$IA(*O0cS>DL_|4#V$#6kFAgnS%_a5Z|ne5p0D9-#d52}5$U zbK2N9pJWSy%H&VVTT_5t$>{toTu2UrZ+P5vwzD~Yu&|cODzTC*(A;vlsYUWZ9K&Dr zZ-$Cve$+oy&nqvbePe1Bta=EO<}-nbe7I=&Eq#?-l8s?TTgtWiYh+TpOd{)I0&eF% zX|0sIl-8B@2_Hi0YRF;>CJTV(R2<}F)>!XpkIbd8Cw|2z_>$%y+dtdv4MAEA6IRo< zhHW*aR040j_5beR{pYj>XS}KvzrCp<-`-T6|Gv}ue?h&$r2h%^hQB-#aIN4=WM2M2 znJ>yOAS-(Q5XvG~<`qOT$XiV+#BJSLY~RoI26X$8VEEBQRDZ}0t)9!Fh{w1Nu{hMX z*LSC8X0C2Lb0exV|-pWpK z%F~tX(FrVgShSSlq7uT?;*ZyHU4;sPQCX<<0q9!Kp_28eO*n+OXex+1YYtALcEbB+ z?@?t?E`)L&!qZWgZJny+(W*}#!c?;LBh6D5cGw=dZ55>Ev$gk3f?i?RV@nDfQedRjW!bivaKKda!&5fG z7Vi&>Kb3v|rmd%1neB@@P5UT!r%ZuGq7|$~0XgpQ)((fGN(IDImH8_T>Sz4!Yc4;; z9$u5mZ;IrWh2p^Tq%;a&BLXQ^jw$b`s zz`(vzlAcBtx8nQmWcN0Dv% z61Di(5bUZS&KuUYY7sH)upPeuWt5neWIrnjqa;DOzIeY{#{3NVASij(uj0MZAhQYD z32YL>uFO96K-7TzU8pMhj&~Dykp6U8_FqgBT5>LdyANF!6vhDKes1i3L)FConV2M{ z)!$M+b~hKYjeo(>rHIQCTc4dtEmj>}qvuu0eg*9hnr9vPObgSKwimsQ9KkFTMpJc9 z%i@On9fUeIm781ImzPW*Bn$DSMF%_REhJ4o1OwF=$~V!NQJ}0&>YC=yT49nuM4Ghm z2#i|h?IK5_WDo&}v38iGV;4NRqUKGL8CUOr>Jj|H9=GIOie#qPco%k$g zrF8#;xbglZ$BAS+1~}(T+w}IwNg!~plt=E-&zbNR6yD>}BEB`{+}bCq0aQ2$yPR=Y-e(+rj-~Ek#U%qi-Gc1`jMKz81hykKQY`b>FZyMP zo{;}@`m36wse=2an7Q8+^Z$d;@qebj|NV#lU)*3(SwjX(1m$x`+rvvOL_$+OjZsX2 zl!@8Ux4;UM+6ss`1tUWj*!Lmtkv>Iga&1jZWw-dDG}`M_fB+Ryz4S~%`xWn%fFjcOY)(VaXCBYWtM= z21WeopzDt?>j(KTr|ctRgubdTfabuUrE9;TigiHt1GlZQu}tdP^@pbl1tXcW`?=9_C`u&1!G!PK_3vR~ zoxbNFus4abNUkzW&>Tk;{mua_3-*;@YX`NC!H^I#f8 z$s)*B*>Qn|FLKV8l657k+qo{>|0=S`U^St|)A$4l6w!te@BUalnO6PX;{RO0y_f zAIkBNK(bm4(b=@gAiKGH01DT6;N)XC8AsXcBzzb>neW;-E*B4TGzdmyd|myqR=@TP)jA}b$yqV_Ng z!9aAD(XJV>_mC6us7qcil130`#j6A&?RELSVS_!ATdEGC%aECIFL>haa8-!XTCD*A zRplWuv{fNLJ#Sldv7lI0n|kB(`c#`jB|?jr@{%lyA4nJAik5vGCi zwW7JdXXCv9%{L)i`;;kt6h}9zZ7KP(!X?-r2@pc;UC9|pmxrU9jKXw(`0QWWV8|c9 zsp(N)uUpc95{*~j%@U`=WAt0!dv@Sf?g`0L<6K$R*>MsuaJ;fZ zf}f3`J%3eh=DG4lB9cU#++vF54P+K>VvLjR2=g^HP_ zp@E*gp@7Y|0&lNpX6^VdAw@y!pFss&^VL-61gg+W(|!aEg?5D17+xj%w1pVrwBmWv z&GYmv7fY+;MLdCDJ>fJlFS-wlct#!d3k9_)82Rm^TO7w*Y%W(^_1j%OuQ0lxN?6D( z*1JKGAlB+Fi9)kO*hjG5>wSKK?J%j}^f9ma0(FX8dZLScO}Z&%#XQBiT@EG@Vqlt0b10DQ-KVfw$`AFio!8$-x`w zMR)S0T{3T4+2C3(^^G)~o$OHwI&?&RZ$%PF`EwG1Hv0F6^pV&f!074u%oy?bND*bRF5dnPkrxA)VS9^c zmqXGY@`Dlj{At^I{y6O%)sL_N#Jfcr(TrcI64}2T0vyj;>NL3mog~ReQ<#HM=sJQ1 zw{(*_g?t|HgMR=d+G7}iWugN2x$89Es&NE472IF>;~r54Lm zur;McJI`jeHKjj^;dbZssaO(fjsE<0^!B}%%5#>-mCMxMDK>c5+sooEINi(#(Ag*( zz)O>FcS(6in2w%oKB7D{#&%Zu_ze8v2v!RZ_ z{S@`YwQh5A68ZFaZFU{?1iiH#FAgsRr#jjz>Pd?urcwKo5{J!prD?D9Cnb`^P!PNc zQfi2o>%y2|Rm3LBy58-Ipl3AG%5ho5CojBx_gXoG^`G?1nELM2S7Fs z)M|cSV3aN8R||*92picf#yCH-Pu`y95d}~AbkrbE10{3WHmsWENT44f1N2z~4ljTh zMFtjL!>*mftQf>1+#*HJ4qdMO*;rpdIk=uU(V6JLjn2wUMx9tyD^0Pt1AqK!j|<(= z3$|Rm&EYpC|MnKLs_wL!xgBo1<_B&D9SwXzNB-VC{i$M%2jfs&l6w6u1{@%QZ55^zGV7mfsM3+hO9AZA3&6@NBx zB!-25XH`Jn-!p(MdF1ET@d^>ld+Z1c$K`}QU8&VGgX>f6o9py(r(o8TPS{Y<)r8$t zuqAN{y5S@gbGE0ES}EWrg>T6u2>Wo@Bi2*J9*ix`IdPH(PXj0ts8{Hv9x;r}5{Jt# z9(JjvOU>4lY}Xy#e9~%W$&cEeH_^rqQ0X#{p-sCmwlu7dAj#iy60;!K`_-oFYHAG3 z+ykoIEHkk)9cya^hwq#27Q%dMW93L~Hnp(za4a7lXX!ZVGQ%N<6zSz$>}7?LGewER ztEZF8o$2PR=HjJ;`H!>fm?dGHV--Lx#24e;R;J7dOsU1}FwJRWr)+fsGwn}8%4V74 zMaL#5PaQ96(f~M4cd%@!^Bg1#^-QZDe^D>9#Nrubhv(WaFOwWzbqUJlhTUS;42xtF zM$MJBT|M*%#El_bgiRESN}%X3_=>Aw?RT?Qa>+(jZ5P|yd0ECYb60Gi|BT@-uvdEK zHIf~C3i@d~{dEg-yo#}?byhdKWdB_yAxK6laB1Tdkrkah{swpZ7&$u_s%R2gd|;yj zHwGpdEZ+LKOPBd+fpy1gZ=XrRCRVDgKPRIY&wO4s_Zb9J4K2(eyrMLAW2&^Czy}L1mHATJ9lhI8j6Bhzu~Kf+X%=ombEEB_qNLqDZ6=3w7Y82X5_oee4V;rXRk%d69FZ(u4JP{3C+&cjkkYk}e_(j*#}QuEbQ zpiYtiNiPCMA2kL$(?RZ3436Fms$eYSQ%;>D(?doBgEgZs1U#qKVMaqZPtSmhS1+pE z2ueo$`D0C^3PMTqxB2$7G9LH=2f5mkBOQuJT>6M_%a1W!)azt5S&8}}i zxXcw(rzC!ztD{A~~xGTH>b@aet!3PLT$<>{^;bP?<-Bc}fG1JZSZ(3%yRY}Jd;Fyy?Cn#FLDGl*lf(*d6nz>cG#q~Z*J82i4-As4rt0yQExGvt zT9i|*bGy-u~K%reVGeqjld=gTEsOUo7NHIBH^wtTOT%h@RD-Y9^% zsG81^yG8GqzLnFgHrHGXx+)H?OaofB5(hQUG@4S49p>ickbF~H_QHdT&st}P%X(ra z&WB~!o^;wM>&H!l*t7aEWyWV$)jWp5HsS{yq_I7?04({SGNQ{V8~0CB0hlOaR2vfl zkNDc}O!|1_X&)gO`nMiSzrP>`(dpvT0nn|8O5&wEK);ZW!=17c^kcZ<^v6O89RHUQ z^3PuCD6f#aOe2nA*bIZxu~u&0q`qkTDfLKF{N3Z7cD(wmARiy89ip);GZ-G|ZDcYV zOLw54?#fdX3J@yawjOdts4IbZOwhnb{gT3pstdN1=iH{M3$>JDS_!HWhz1;izqR$% zjMUyhO3`;YKVJV@@}Xu+{B454*9`c6I;F2UF-weHc@T){8mhDsEPNq?v8=~r%?kpo z>fgEH1{iB8!duR#M)|=#W-;8@(S~<@Tygq=c4)I~*MZ?%uh?Ug zv&B2o1OA60g$ArDx?_+S&YQ({9UO5#zGN4|1n7*%ACiST>P{i$5*R!v$V4R`ddjcp zH}kCRJ-OnW?Zw42Du_31uV>|p5rjS$O@}Xf2eyS>U{_Y%m^cP&Px;Ft+t%X}zBGa$ zC9dB!q=TX#QlCpF|qhK4=5+F_g4k7W`XO zrq`v}!j%mS%c$4{&u(g^_S+bVqAr84WxidL?0%&w@qqZXaFs=YS>hH{Hcr(RswPW- zzvA@4S^%@e62{a-WEI^}&olE8)(gUAj!l!F#EN4ZOZZK7oesc8!AVm?_*AKi)Mk;L z6^zO>xv)pgxWC_UIX#bmeH6))+h~zrHOZK4uNi2xP;ZGs z9$~(j|3W*rpcYBLX16#pgfTtZT9eiq$^g}<2BDZW^c$#&`M55)<-!=gl?0tlCkLTP zXUc!_xYv1Q-Hq~#0<{lUkxLJ~q|FwsSW9YJFE@Pj920qX+@b;R9n=3}8L;+DTX4NN zJb5e^9-7d{x5;>c>zS!M=!40peFWqLkh5wlAG=Q|I=Czlc$SQ6No)#pZr5_Ar6$P+*Wfm&kpK zsiXGCmM`PeWWx@APHgBKeAmk?@!{kRe&KL`*HhHat_8wQ3%ZDRG;L~gsAF(>C1E z)T~mU=h17VA}s(R=&vLodr&wbR6~300@u@2xsS;&b{gwiM)nsMFMAotRU}G4(elT` zC-%__=cFkXLt<^Dvw@^;=?Vk;rNPy17*8DSg;e+k9P`=onmZ$Is>FyCaRah zW;=Ahx#SRvw(?p9Y^$@&=M$EyI#nI+{K_uvDT<;H_Sx@e_VydL^t!5H5B$i zYG=34N(~qu;~(kD1Yfm;uiL(P86X@S>dUM~BOcr)GVKxz9Ui7Cc^YS+3u^XZ_>s!lmPq>rq|Ez!s<_7e?pMl} zGRiZ=FnP-cwvCq<@xd@Br_6j;mbC&D%cX^yHF&P-q6p(j7(^F}n0%>BWFt73QohCs zp~?wDhs8XlBac&o(`+TP`tmr;4>)PrUG=%c&G*IYrShNodyHr?Z{{r*vo6(AhH`Q$ z-j+}t$*7xu8(rYNS_@95hEo|x>>kqkI(PH1xvmNa==kMETL~K;)vXAP9-SK6sxmRa zl7-WCW=J>!#}%swOCQ7P`XyD|rRv8%lPxq(cTuSh3ob6IoqpQr&EG??l4UuS5K+01rpHD&T2kz4dwfi{x7%PyDKr1Y= zf!bx`KKb6OsHF)cySt0iJGCmRyQ<>D?n+ThDj1y_UnT&*7e2oCHeoVN;V~oSHmmxV zq8z9F*$h*dl6Fol?+~Xkab+4iJ9c?T$|p!*MxW1!Cl)pc?^swAZbU{E$9P>O$f68G+?F^p z#!!~j8JB_TSz3F_?@*}ZE7Aa80&UT5p*F@VG|=iQ{|^K5VMI+vsvvEknlhYBQRtcT z(j!ef$8w8kA`AV_8kB;(*4CB1%`>o&Jd&Pw@#JcPV(;2Hs>{8-7cJzonWdid)+;dVdn(%7aRlk(l}PZKLZ$no`>PZ2YI~OD&YRDF0Lg!bZQ#Z-u*-ZKDY%P!<8+CNA-tM1;w_K)ru7_v6;X6v;qO#Y1mgKnf=pOSs9=UniLDk8nxHH)uKZ4#=<7WpTr2V1uRyV-zv!(x7Vw|SMaOq zsfV#KY5F9IA@T*ywa94}Ql+;Rc! zw_LTH$OH94DdEQhcV4xeczw|L?>P`W17fxBqS#$zNqEqzJc#WILNDan6a(X|RNB)J zh$jB7LO-~W2Fj7{UQzq$i6>0gi!W3N#3aH+))?o@;$>$_2OS5+G0Orj0X)?f5*W3j z$z{)id0fH+vWeD?Uq+r%)6tl*aX_(i^)3!_y` zkkc|L?S!I*KpeP)?KJAaTQX%s3l_5*2r6$|FctPHH-F>vH_c{ToL7&JO;(4V)w{?2 z#_>{jI$J?ek#wjxpP}c14DyU}#yP@28Fd8%u$Vh0;+{)BG4v8yj>Vd=yD9KDqa+E) zahZhm%;lw_;+e`zj&F!{Jj>Kt9td872r1GcU_go=_zj51CfB$t`CEsoX(2I7#!}W# zN%vZbcWZh3vkv3(UIISTN}0*qW^_t;2-9cBh+m%2vvqcaciL)wjojkCI?sDicN>WgUD?&COgemaH zGDQgTOG)>fp5RW>ijmIV3eAGlQ<}3iX~k-#!~B+l6YHyql(mdxPnJ!`!eduu;Anfg zjl5xucM3U@mt?7MF5&uKT?F&x6Cve{Atd~mxjLCjrewg8aY25j%+cl^XPi(bJ~PZ< zdX}}`o=P77Bl%}3D_z*>%hm{xU*+tnd}W0a4i^&K$F@{fZsNAAn!kW@-ziRpu2fP< zot#u5UFl%v94a9+J!;a8q!*|SYM57;2%RDiUzVgSy)jBdu%lD ziucoOWT~x>g^Ku3E*7f;$jf}kdY6QNb^6@(&6g%I*tUZ<1BG!_;6=fsgT;7k2ewQZ zJ^m>b)|N9y5h>S)1Xg!j?5W#3+jCc*>dbc-QH3U#3qwCit0)*V?Tf^q`F;Y__zvU? zr3vTuNN~qDI{OFbe187HfgzaNW}r!4?(;fzhrWJsUP(E)JEyEhXY9ZwiZ@8<2ap_2aId2$mC@Y!qETp$ZU$p*geM|Mv9RaHC)rOXA(lw0i!}mz5pzh6~W?XJBX-_|m#F zY|liKT|B`Z?7OL(jc6s!aKs(;zD5+#6o0jZhBVSbI4bT?razqyhSi7KNAql@k24E) zTEUN==ylh`EJ3R{LCKL;YUu>8dFcE zw?zv~ZD1*$1>;oW`M^X7UUJ87;>isF2*tGy^0YgWBP;{|%SbM|X~P-oB8e_NZ^Of#-Ib z{Pm@&>~CA(K%TAdei*ugw8|EMl-6ntQHT_^OJaQ_+Tz!00c_-3c7~tu*DV8`)#>i6 z+j6`(Ig$)5C!JRjEe}`2lz1AQwwPzq6L#e`UET+j+u*on#VZNHt7RPQ^a~-7Z=>@B zcwJ)bfOiTD{D2Dtg>;15Z=o7`q-xZ+!wx%!8pb7K@b_BJho{F6iQ8XE`?T%*|u%0vTfV8ZQHhO+qP}n zcGc?Iy-%OBdq>|J(I+}$#(bJjBO-I;%>48FSK!AzLXE!llJ5$b%iZ-g$G1tKVrl7I zf14WC4p~k{ody}7s1ZKTE#zNV=C*v8)^}JQy#I|bL#VpPPX?xc;bAHz;#Sf8f=N(D zW4R=6sajXEl6Derc*bC^3F6M|e7~9Oej~$NHV}Mc%@{z`zDSqJ0AI`x3*uVTdu*T; zXRaoA#WL~IWwA1FBn2~6ZX<0VX=3xkxp!0+_bzNpG;yQwZ}l^$$p;Z0v3C`u+Gr^U zt$Rf?6n=(Fezko+TzV{FNP>EdCj*a}0xVHtb4Y#hl_Q zFG1%!v+?`Tq}ghz`$T`bhUJslfR=g?6V#K`fi3vAaR{aTVJ#@5+c*Mk7uBg z>xU8SKXxm$0rtQ)w%EbfFb~u`|7Ro=N@rhnH#TL@rcE|u3uXmHm1jL{Vm?#V8!Kp1 z@wuDp`$@^jk8g95$g5}kDiG!w0w%E6jiA$)ABx_WmSLO*e&Hg~Jq^a|N6+ut9>|7J zT&~nm!57-nJ!qIRs#lej8Z98P`xmSsAU11LQ}@IezJ{kae3z_g@EP9W2%%rm{EhN9 zr;gBNHLal)ry2Y6=kT`)Jt4osIOTQP=^+Q z6_tdVCO9Y54I$IP=AZv2_&iYSU7Y^W8?gV7o>c!E!`y#AqyLmT{Tp1f>PPeRBQ*Ff zPSkFutRe%`hOc-gu!QgQ*Kac|hb9rFqo+4+$JQ0=*tmol{D#{3L{Bd*h3!s5L;MmO zX55fpTm+r>VskJ)o^t>ToomJ(D=K9;CEh@}){pYYzD2`H!gg6G1@jo7W6>Ny?xfHxm{06? zEbrfCuKB|?!D!fk&v}5qb5x;k5Jf_~k+8`u)E>YkA$>x%5$}So%}9);!U@L>smF(YPU`crkAmkwX`raU&H9F(kitb_O#_JwY#z!==8y zQ0UriqUmTgTki7IyFJC~jQLCA997&X^#-0Y96eZtFIjd*R>9jhF9n3S7!3u8xA5L= z|FX5X)ut>T`%M2&o0J86yy)31U2dZVd-XwZbVh5@0W+DJ1N*fv&X)NtG0qU@Km_kO zQ&%t7oKuM2V~>a2rU4lU3YtLOiHE`IM5+F4s~N6Oz6)p{*~Se$2@_wWV5J^jNyavX1XKGXY>JkJU)5G z3wpB1xfgcn9h+qFG8Rd7H2kN+KHEfNMkdI)(xdwu`0=Z}8|o>3G$M3-%w5XpxJ56m z0Xry4rp#VZOucO3pxDtafm6bM+}Xd!xS=-OgSHcu(0Pq=nT1}#3anedJ!Xp&Ed7M; zbKs!&&VG?j?R@jaeSQKlt^JbPhnkje6vwm(pox>pAxN0G@pFo?sWh7F3)|&<)9q%C zhUBhl^tmU9o@JGGlbqFwJCCHF4>mo?WKWfUW2Qrn{`>pCev$u?XP7-sT6cfI;T4Dg z05bnCW9XmxW=d7f0qKWEd2N{`nH~$wM<9m+KL9lbu#dt|_d9RE;xQX$MD2kEG zz$J#xI=7XQ;##*YsYp?+D4%$@^#Vxwt+eJFVd9E|D?!Yc4>19hQmJL8>t*w%@+Fhw z?QDj&`&TVSjf%mq--fNk<9ZfIQmZIKRjV`>9EPn@1Jh*XwH3cx4x%wO!39eB^5Xxf z#^9q%LJ!C->Iv!!2la*Pvs@!k5L=k#U78!lR`qS!=G*R>jheNJ4B!NvOK(iO2AjZ; zpK>)@v1^eJI7zAGm5(rD4@|H^q?>s}6Gu38bwqhY3Qjl3hiOkdEhFUbVAMg=o}@ys zPO~Cn4ByyP1P;XGEo7gki=q~2VWi1Gi zY+G`qh==WKr8%bmrl>3pJ?}6E@>@`&6tY2W1BWwfv7ES&b**;$4V~3&^yBdy*gh(W z=s~@4IZ*_9#!{!4m&cO8B(DKI67Ob4fA}UH)n2UfERIDO6@8*F z^Keg&sq`FTqYfU<4GVoVuO@ts+h~w(=%B3+gf3-r1tUjI)q-DB>zzJUmFs#zLam{< zT)Ov;xC4W;)7RuZBf8x*Hu~O+@k}v^PTyrcVb^7q%+hXmd2Ia->-|vz*=RH$u9B=V z*N!qSr%c0pD`QipsLtm zoh53hTE0V{m1;n(8LoOHqoWu=!zhVSf7>iC^)`NXHT`3hWata7mkID)+u`BxDf9K<2OM@ZEc4qg%1kQS|1v=kqxd6IYJC z;5~IUJ^$SRI_cF4VbIcvYh!DCOPII`80ue^KKp7)1CJrsCnHPs<@=g*X;vZpDg}iI zbbi7J=}nd?tkn2oq}3eadKok3pWz z@jF04*6V^=54ix)S40<{<9+;Uo=9L96y&_xc~q*z(p*pRM6g)xA)R%hIqXc(*C!#N z;UdAWB@uYz7o-_r@)$=Zh$ zdLV@51b+(W+yNkklxiHN|i3_ zBg7_^UtyfA@`hzUfzMl#+G4(+EEeFY$P2KCIp_TpQmJ!XZ;3FX^RuX)2s9{lqp>Ka zq<1?3k5P>7M>k!yEYw1HIR_i|dvk4USUWi0^XQmcCqcdB3f>7woi6OSi@)T{BCN|ur~&Hb%H9y=D3dNkYO6n?qmt4Ac`pH5@y{$t1{UT0b28rb24+5md#_*p0?eBB!6w9IZ7iO9!z4^8j#l8jC@kn$$E)b{AW5IA?XLJYOPP2I_ zk8RL=Z7vLyfy`L%)Mm1;Y29mh0$8+8j(+>e#2lf7T5>R^II8?W)OQe4Icf%6Wd%Pj zU&L;hd}=>J9HWiAH$PlIH=gS&$)@IBZTg_zwawj#_poBPWbBbXOM~+FLbIefi z;3xF|ewjiK#{i3f005l)z@0VzA6%yYS)l%_PuD*$)+S{whXr9IE_I*KRRVgLz(8Jc z2|@x}A%A$`;PF z+%9D1(iYDGYLq)XX4*VnHZ8vHR%&{Fy#mM}iW>a!&Lct`?xRj1-aI*tn;p>RY70Rb;Lc5s=S=aT7rQW~K?f!L%u zij2>2XwyEluC6_C7$CpTw7yu*HgRY3sTuFur2b0l?vu!Pv|o7k++u#s^e;TqYQgrf zSt*0hzvt!aIjgek*++T^RyYy@5uq@SJ9)9}>GxV#txRpSYqhdo`_rbCC^vK>weg6G zL}lb2ZL?qPe@bAbOjm2Z{^@Mh(z_+qr8_6-zC`bMQGK1huO%(~h1YEWO{7tLQLJT; zWI6>dz0vFub!$lmd*rlfOBI3nU0kt|eU>rvia_hIZiwOHn6klLSHf7q0i0IxR-829 zz{6Ut{$=8pYoOF8`wYyOfmRH*`;-ye_0-Vl7{4>g#&@&K2V79 zr>ppV9VmLKT{WnI!*hBup!CPvpqkI!iWeuJ9>)H!7ryr z_FDbIyy%dU3QaWAod$259PJ4Z`e+jCVqV>sB8C6F7pt|9ugsJ=NUm3H#u}{$P1v6a zXRMfNfF>`u*efS5w=C;dw#U_3v&UKd=W;g;LSlf%QV$DSDUs>D=0kRXvzl!6T}Pd4 zNvC0U1(IV?99i@0#=MB&itUJKtC?F=d?jKLCA#Uk%Ds|L%x9jE5MQB;X{N4UOPgn+ zpIf51!XB|*&vu5x!!DSp%?ZF~QOhb#G`goqX@SLG`fH?kG3&x( zyRldUM|vS-8LyNNUzkvy)hmlW?|YYxAcyqOfyotSHk2Z$bNJLMWE+iZq`s!FJ}xB` z3=x@xM3R%^4dFbZ_b+xGECqB4yb zyI|W~`YyG^cHG$IjO@-X+(0v07yr&7CJ`F25mD}C3F)d3(He1n+a^E#d@foan_;M~ z|1bvE1)~~<)bBi*xzKSW0$3|!ij}*i~L-Kn4xu?TdT$r!tqg&L_mMS!MOX8 z!P8T6&El?h;3GJ5Ds={V88^V|0=5XFwru*OSZo(s!`qCDKTKJ7@Lsc-6--mF2ws2H zojSN(SSZ-U%HI~K<`95m>6zZc%CYz2ApHH=wHrY*U?)+<4?S|k?u4JHj5LZgzcZkM zd$Y9l7tMJlou^PDeG=77=+nw|io0$dHLgsXdJmgOoD!cX8pKRtz=(#s5v&E%V?o+; zFD2Q}N_WL555rW2vQzdsxAjIj??f8Mx-k51-e3bUSDu)66WgZzQ?w$h?dY0g(U$3Y zV836uho2UTya`q4LV5d{Ij#g2HfIBQBmd5g3{xiH^KT6WK)Ki4aTEZ6KED5ZzpZ~b zDg9@@{->wOKQr}~I=H9eQrq9|w6V>}Lt}iR!C&wNeEo*{0PsY*L{NN$_k_uo5hF4npQZS>qKlSLw8R&Iy5y8|^MUgfnb>@sqa?d{-e z4xD*hZry*iOCCUbtM?7vpCa8^BJI*d(Y`1&K(RcKxRvfvhPyKAklSb&-c$tURQ%}{ z=5Bs34XB~s2XmS5ufh=dLJJ!kn03v_@n}^sjwEOgKDc*ovUSL!TBR^hiSTWKtnMbb zJ_#Haivnfp&K9$gB8pUOrHz-yG%Fs59&U~r02)3uwb0jyA6v;3C1Q+=gdgxw9Nr-O z`mNx$;S`5S0PPhgC?jA(f-Lh$HRA7R!;nOenpgzt;U38ZKpRsynHTShbB}B_rYIxO z61Tbxx0P%ziXN95XMTz^jW%aEX&OpI;5BgO+Kvy@KMy^U5PTJGFlSre!;^N31ekWr zkuNb}IB;$|E#E60Bb?tQY^lTv4|J6k03-|{4<-|ytGR2-5EnMchiB`dGKhF5iKw7( zrAjW9I{cQx=+?iQT-FGkx&ivp5w$oh>XL)t!+>!XV0dtE1&u-k$|wwBFV`b3kNE+b znoc^jRFu2Q{2MMgG`w^3ZWRu(#lKk61}mT9chcO|1p$z`LsXp&o|R!c!tkswe9*ec z(o$WNnbTEb7@VIgC;>TPoL;+Aety;@Ou~GWj|V{;;hbK0r)-+@i7tzRP)uB17D+^U zS;O)g=STr}--6ixwhkf^9N85!%dPofvC}ylfEz?-9Bv zItyJ@Rymc0Ww>8ELps)FL=!P#9n1zpRO9gLMCj!__SQ5xS_VrRn$TzA!9Fbwx}jP_mz=oSQ<&n`1pFxU zHGA>Ol>{6t0D&SDvwc<)x9vt`Uu7vT!rNr{8rnZ?Xp@5<7`w#?De?$twG)vC1)#ZA zVD=|>bO{kNh|i^n_^qqH(+6{&oKh2iZ~`${z(6Hkz7)M8>a;CRaO7$;`zsl1X57pAjj3R0e;c@g;#UjiH*9SQcyo+iw)XD@I ztf4R?vJ8aE7zsH{uAtwD2{Htb2ee)N1>g7!Y=V7JR4OTX5pVYzEQwdm^J)&Vrm#!x z!aDn2!>9J7I%gej;y!g)mJhFx0`ycu6r5Wwhn#c9J3*p0wVKPTgob&EYbs?p3(&dN z#w}-uea%jnYNi@BR9Y^x%kAGxiG4<2NGIioK6xsRbiZ`xO&IrE#7wC+Pv+LZS->zvOs4E@j%^*c+RII^<@pJnE3SJv zb+KY&Us$}bXS42{QUblSG+%i7_q8h)g_e7K2XA0koMX+J4|qYr)g-a-INirevDmn+ zB&Y_AKq!Wr)M@%yllZh&X{w`9%K}m$i1YokWf~FbK~p!BSr$w8=snsgb66Qtx+cw_D{uO5@9 zr`yb_(dGMedzF@q`i3ihqQ8c8k~~^gfE?-uL8Wh_Nn79rFKk%qK__*lgTNZ z&zT`DfcWkj{QwA_Nsg6Kq>2N_Gx5pg`wK#F`|Lg!?_LFvSqs(zgGJACW$}>x}4>?MQ{s13-Paonj zbeW};u=QqB#}aP%e(*l~IAVDhe+zBzcg`25u^ zP-2A_#v`g)8*#JvN|VJih$}2Rrjncc89I!+^k&^Ha^mr3!0wZIV_=?b-$qn=BNCrV z@S#r&p5^iYbl?6;8jZpSiphU#9XV}B>8_9_2yKy>auM2~x@PXSq)ohw< zLYcgB8vk-#@<7CKdxj7LclHercmA#6ldQjg;+b3-RKHo0-6tA%;Y{KYCo4OzhC%5_ z!hK1%la>S$_k`5ZJw3OM)X7`?)JHhCTTEx}%;V83uvu&+h5akk8>;)P1;a=CgmzYE z7CqC@E%yQSO@f_EVurpc$52$AwoBYb{&h;JXgI`)o8M>d4AoKagqD%jJ3D9j4gI@( zSZCqw!g0ZlIh~6|hdybPT};FIzBfqnfyA|YXwmgP%qH`cg*lH=%QIZsF>Wu0!$P>E zzPq5Qp#WP*+haty@U0ZwHT1_eyRL;Nh4!pZ%enQz>D%*ePcs|**E2m zqm16Qwt@$`XF}hKwa;%wRd+5KMW*Eu)-d=el8$^&FiSJEZ#u*e1R=P{Nc#noxKP%`h*mTQKA86G15q>s*(?Ty5dhA!V?*zW_<%#D@kH+0SfF2AFf zj$cR4YhBqgl)GN4Y6j~TTUo%R(~Li(uUa)g9*cm;lNMDZUlB&`to7wVlD!=DlF*b2 zRKTagQn@11@>I(FTxz%Y;hIRY;}wz){;q{!i*VYP4K99!&z_PQ*%<2fiVmiplR7FI zHnB{M+~uWo#qoXy!L2L$FuO}4r%$$3VM$=1Bg(1dbFdj^J65<`y()2Kv3)l_^^<4C zrxOPxK_k(+HxuX-+3P+is&(8a)l-fHh)%VS$GdZ5IYW_=&c3fAvLzZSo41S;lo!Kk zNr|!@7TL39;uEA`ah2^@E!)68?YC&cWG%ippAXn@ZNHQMIwgXi$pzfSYo~Gb)$H>+ z+?K)lM7kukp=-=(Y`5P5dvlq)Z?8{>r!Y^~V&QKmb!K^kk-xJpFLRi|$%_}3F%1+4 z%7&+~paSC-Utk7>cm+s;Om6>T;!;KR4D19g)91MpSe=pra%GkW&o+q*nJy$?$4p$7 zMV=Z_i9Plk2zs?4&k{kM({E3lE}=XHwC#fWWSW2SwFEpumGhO~T?s%YPArCcO#^M^ zYyZ{ZOS|qzFK3j#&^|2MAFvqnj6^}W@i(j1E45ta zl3FBJp&^Cm>(Zq-MX|Ba3Y0@rmjn1#B#W~Bj@jO)%Pv)~jYailQt7$Sd7g+VJ1`f2 zQdG9@2p2!&xcPN)zVApuFcN-VWgt-Y!5{`OpP-&ZWkp$}dMScrrjV8FH#=B;fbyJs zdmxR%Aq_Kl-I!Gq$dY)A?qt!nprQ3{sz?ikUBs<4A@^@b5VgHMwn)@Tx~^bti?mhF z-4!|%$mTnC8APa3@lI#*-H*` zyoniI^NcP?<6|yrU;d+Mp))0PSJgGA(`u z4tNtRvzSQ_gH&s608b=E=CE24HpMNvgOH?Nlz5xs`VFPK#P<|pAg{#gm2(@a1sjw( zq%^-)H_ot=y#jA3DQw-ISDlZQ2>%w3&QGaX7!z>&~)ozcxUr{1K9d?HW@VMBP$fwU`Bn_pJDch ze7K~OtH1gtakz3SeXM2+aCg-~1+EpLH3;IuKBy?F!}x_YmjpZCDICKIagN#b>*hd$ z=_S5@ykGoEyByk;5)$>#J7BhN46IyL1~Ui*V7C|3&Sz^CT>po6FJdDJe$%e;@VP$_ z@F$L3od|eknE2hN4kgYfIK^Ma{!5+Q%^rfdPw3=NPT&_8!SDjzZ`|9Mo`Gl`!FpC< zmH~)*?OKfQZ~V{+(#o|t{Ss_y=lPJkV|g3gycmAllirN$Vvkw}?8$rWPUP8R)c)Z}s#bKCq^bx$hpnbun-k1v0aw)E+i~5NnHn$%2?cFJNT9why?1 zyV&H`WIPm|6IsB`PIb-{9?d4ft3#?vJDD5P4GZTQGQ^iu zz;d7wrujk5`by)()rp@Kz%Q79s+F-t_MO{VrIQ1$f{O#=5^x86K8*^r_v_*5*$l9q){gk z6bUNZPxS zbQ1(_aeVmIz8l6a#xx}41aHy@%S6E zp7&nmyV=6Q7t(Uqw{-yi)$F|-k~l)H~_2_{J+S9e+aU z{u(AdD1GvPG+5m=u%9e=fUwb>ws4C91JPJ~{V?iqk0y1RgyMu!ms@3CynEbPh=+e? zrIKu2A5$LEE35n0esE&4R&g0tk@}E*^7#}1LM?=>7QquU!T<&;I6P_$f*e66zJMDm ze-YNy-7Q4kZUd{8F^E!(Mr&~_9l;e{q>99yNj|&n*wof0cr2i zC^H_un|`uDr}r{(IRT2=cBVnP_n4F#owurJ@4pS;yxj}%_a}&<^0Z$>9v$p50sUVIQdStOPsG;Y{8nQ7P)XuS2l~)GxH9{Tm24| zM9Z{u??C1#j2R51*+CDuC2paG*|6zdFQx?CV)H@4GkMg! zS*>8(#&{kP)CYsbahX|n?|7P%5>rS*=zCN%Ox)&*0(3CUzft#Ek~KTVow&bWIEW{` z6CZs5E-uWNzhH+qPw&c4V{UC2vy$Uhcn%`_QO$~lS9+DumT2Q+V?KdhpJ5npGmZX##r3{1Esxz+C*|5B|MF#h z=4)9V+3y%R{LjY@*B^`My`zdSryq;06HiKWw&Vlgj*}f%!HGp(ST2aS3_I>wQM-2` z$;!!NL$$vLw#YOH`&+5+#=dWqQ}LQ27a}Ev0=}$)z7gwmvQ{Uo#d5V~9Q;F{KZPKX zFacW#)p(vBKz7gCxb|`royLo~zZ$-UCad3i0$|$_^v9$D;d6xvyq3hV z+o^J1c_rL6LOz%vT(1p__f5dUP7lNFzbx1MLpg+gv&q-_qrRK`aR=f5Zwx#C4+}Ml z8`cZFaM&r^rt9+@N8TZU64b5&e4+97^eMvT;<&CGtOgblUCqubMQ(hY_fnjqfVFqMI&EJ3173#)g5^OCQpycOym zDWkJi1z?&yvDJdhd}qxa7+-|}G>BB^6xEtrQgU-9e0$w`pqHVxDa;;)PN2qOl|^ZP z$0|8)TMI|!$mFK%mPGfN`Uf&E6q}yofLq^lRXO@S?V=u?S4|$~pwu_9W?0UNlfni! zD`vG*&`3dB$(f4`wPYMy1$7<-S#K+e>|&ho#F`0$TZ@Qg7C6ITs21)~y7~R$K|5R8 z#Va<{EN5))(1Hjs$BPFXbV+*tGDn=9La1$!va#qBI6}99iCtSc74Atsj7l+N8LvO( zg9)IxVI!^oIDb(|Ul6WE;>yI12oEN@N5xyC5W#R#r=@U*gpuxp5O`0MFA-Q8k&Cw< zM8szX>_rKh4vPhpqDmRq=3JC+=!#cp-G4YaDo1M#%g?#Vc?sxp#*;5hNEk-Ehf`Y8 z=|!UJKzb8MH9%8MRZv06opF&o@XNTAa%RsqzFh4L{b?c^iaSYk8?3$)s-b8sN~CAZ z;(q_cs|jOJ8y3*2xnh&OLo_GUIT^-@W@aW@9Th+@LoaSKZ+2ESc{!<`_+s0e9y8r2gu1P&5{}&n_ZO$=MD6 z4KG!w9505eb3Y1IvloDAoX>iDNTmNL{O&-0lOhI+g$DGXfm^Z$b^s8FNM~jTQB0jp zWBZ!|#YAs<-_y?oLep0$LZVi4H+)D*wZRo-nL0b*0fiRHwXRn}Xw#@w|Bgbl!L@6) z=NAk0w*Lmo4eyfv)a8QI_55G7&5wT(0{p`{hh@l%z3(R`n10l|{~gTG|3Y5OVlFnREXDk^1iTKLL07v(x#v+V(oNQ!MbtW9LEL2oeqtcg5XmPZ;(h+Xd}KT$f0)Crv{S8q)B+CywUa^A@4a_6`zraPN#!!WsmV$ z?v8kuRKr>S1zOVj2ZuCWDX*Ok<|6x`bXw@D+1M2K6ou!%G!y?gDyx0v)PtWivhpM1 z)%tIwk^kdS{eLNWo0K&a7I=}qo00ez#3>=d!}FD|guw7zDgCY5R7?CB>FD0~Ef+xg z3&lvq&_6UhA7M`;VfF)fdU20jnW=@c?t9U+ooBAIzouPi*w%7-y8i;uMdgQkZ${19 z$_N3IBg+*QjN(xieaJ-`@cR|(hUd*}{MkHA^hXaC-LAKc@yH*Cqf|?_4JUEY+GFUX z*_e)2hF@+jw&6%8bX8(iFFFI?s)mTt*tBd9u5g=bw{1%C%&|c?RyvV(3UC%rzOa)( z9gFtEQp;wf8ptqFl>vdy-Zlh7J);rmv{cn^lB)nS2~d$-N2l6gXJKhG7Tss8a87sY zhMjP_@}uTGDEU$IPFy%OjLDu(XEj32;5~F2t=CekOt={G97-ggFntL=L69?0eUc{o zs|CaQt;o~4Ds)%my(HM@&Rh%0)u19+S3qA4>qP(ZH+ffDPHbu@?n=Q!=XUMPyRC|pR-NeMs>eVX7oJzaZZ*Id*}Q8%mlz@f5IASH`uh; z$b1{I03DrHS9w@!a?BOC#b0#4IS|&+kq~*1bDl3!kB`ZPh-&<_PaY1P%4JVrt_G}H z2_09DIux~zXs!UxodKJh4-TEt#;ns46DlGk8L=!sOQj*Wsrvk)*&I`Sx>kvwk*%+6z1z0I zl#a0-jAurtUeYctgWND|Aqq{NF;e z-Ja34U@|*{TA;jOf*8FDFg$ zkOX^(;5iJQ2Xcn44&4RTfp5(R`RGQiN61tGm1pgHtb28=em*BrOVoF(+P7Jk{G}C~ zG>X&TpcJ@ml1GwtmKVdBry2#z3Z zvV~QYqXq$bOBz7^Pm##_Qs5a7*9Ez{kjef8WPUX{6hlaw!^q$|WVL)MsW#@Sk*)p= zIHInlx|oS0W;Rjz7$@1{d=2;K{LTxrYy`MQONFSA zAPkdFouQpY5HNryLURO$HmYBz~&7{%;GqX7?t_QUl zhmsjacZMtrgfp~+v=<^XeZ6@tg=?XAen56h@()GOQ(~AKn^D^xkH2d-#eBScB>3mA zBSyZrQ%FD`8$!YCuY(h5MV)qZUpMSrHWOiBSPua3zH&WvP{iD zK8~nab6mjAz4>)qqDqeRm%T5mL+%0V+^=OyXFCqy_=95eWCVh8U@@|E{$x*%tBu{X zdXcPy>7Phj7IMvyZy~?cd$rJQ_+l}^6y40hdgiV1pR^xEYAO7o9#YC>(YlA+Ff#RC zLAcH)>PSzuqJn}ez}{-#zjk^?-m@$6XF&BIZuTw_A3GM_VSYwhN}MtSsj_7QN@idP zO*ip+h= zqbD{?mubWvz#4cM8$u%o0^6Z~1i{3yS$$i?u#cmw_po32wF(afq2-FSE1e)RU^-Zq z_qV0}@p<*7W3@!m*1%KEyymS+Y@^>D3eNz%Y;*|1UnzSezglJ47N21M_o`#kSVPk=ZQNxT=w>l+owLXAgATW82& z&#YdsTsl?iae7@xjfV#IyFQjzbU!tANDb;2F?@uPA*rqjA->^Tx2F9VamxRE9ZsZ_ zUn|RWlz?D}ecQV&d~H|slz*$#l&ibH^q}ql+A@AC1`B&8h14VwMlaBNb^-pZS?;~r zC+=c?-t(h(huPdMw79*(z?w|lX?fNl?bP(b+E!!H?h|{zAiu(UPY%eqrta@4;b3@?h?@4UC0=`szKR+ zi+ZIOqiLC~F(E7DT9y=_C0mjcHacob#Sj@87}^pPfNjpzV3rNm=0}ml7YO&u9>Nca zLdmF#%j3!+)RUBuN-jyNHf~5_J&!qqDH{J-&&rluxP~2sY|zOLs^z)^0HRTf9y9i_*tjGILmFbihA$271#&5#XCQG8gFOx;0l^`^tbACcVwMl}*Wbc80HUcg43I3YU&DK@rMf)*1vZm5iwamwt>VXq9O@$Q7emj z)Q4qKqw#kq+?^n8bXd>vD+0L7eNmXJjjuNuitc0KjzJdiAz3&S)E0c zhIDf{`12wZlTIJNTGScKJzFf4#d>?fWIK14D6Bu@)l-|yxvz4lL08G?*j)EzTyrgnO5=Hi# zB*C)&jV2~luI!#K!A$KC`$;aYHgJes6)RO<<~W8?b0@DP&$24JlX#fAEyDUC41%L= zcu;%#Ts%KnEFW$rH{@Xb0P*A3`TEO63-c*hxDM4(AiKVfr8G=)ebu4d(FyfisKL3x& zI<@7x!C%w`K-`)mAopcaiY^KkLyP12y0nLgK$J})Jw^ls^}A-?6~F_V6ifF}1nUtL zzb=Ws!QVHCA<&&vd5~N5nsK)dpZxr|%@V6o9z;-kqEJ1Fx0JR9on7?7Iufp+Jz;w- z2*SCy6CDWNAunVQJhjsuL0e{QM3MYqdoKvl``q9dj^OBkFi}RxFjceIwRo>%ow~SG#%5P?9{Ia*(+Kb*i*P5o$>8&w`lD4hqJ&dd^Nr3g!?K4S%nWt+SiVRcoatZyW zUA;$8v*GwZ4yYleumPv;ssWLN-YocaFVh!0WuvkpdRrM%(p@qm5LBo zi*QUavFo=YxBPlWtbl(;qzs>BG*VQVqU#blb&*=Y4Ata&gi3x`FcQo#k;Upm>XDiY zCeSb|g6@X-R9RGN?Ne4g0dR#_(WSh`dxg;uugo8j-aI?EAoW;FzLy|FH%CB)%ed#H zs8iWzES+6CN z;Ie0}a$~%5dTK!ix$e1W;;`7zHgn)Mn^g5;S#58X&DRE2r%D>Zh!h(P+qwmxfeFz%G0P%Gatvg?2>O zs!7PP`sIj-C;WGgeuJ%;KTB3h`=l*jqMma7MocqFDshdt2!{fQPXR{Z~;fW>zwO0mvN_=~$o?;cN z4mD^7vQ}A($!&C6*4CA}(`4AoBC!XRo7(J<-#W@Lwf#Vqych?}cuhYZqz;)BE--uU z5Wc>4C;SPxPa%6?&~IQhfdpvUIFNXi(;}%5Lb=mSSbES${s8@NvVoN$wk4Q^f20Ge ztJGPBRTorUY~arGVataD@~fAF+=rf=Ktz? zK}B(-rh^{Gv2KG)VZlxd+;_>2g&ec*V&22P&g6|eoV_Kr_XKWpy|;p?{LS-x@_|&L(GE2LFLk`jY&9ajx*eMX^+C=9sa-~l8%0U{MEONMW67`G@TQx#`SXX?UY-S0@ z|2+VT{(xtIV>lU5XhVl;?}0br$r?Yh%5ySG$8{~owO1rXYbgkKpp&QfK$LAyY~$cy z+E{Sjnl)wl#n0}oUuv_NS&8!Dt!2F z?Q>Ce_h7!CzL(C=@~y!CWd$l_PgM)S>ZNGNq$EZxI$;F{zOHC%A!!# zdEFl!V)^8J9jvU_09@;}g#sQ++}c)!VpV&z$`KTv?-hrDz(zoUbX4r0V+V&+jXJt% zoMYo$qFEQ7iVkc5Q3jL}w#^b?4N@FC&!*7t#5%K_Tc(c+!>HotD-|VKF>qEF>8r0B zk5(4A1xz0Ncx8&f0MQJKAyMTMVhors=& zomMT>kw>12QA$~81cKw=$h%ca-&Rq55o+k9s@~h~cn$tlg^15UE}p2htL#TZF|XpP zqje>7OzAPd8S9PTB!m;NlW=OP4a+-vb7R`AsYj^b?@l=F6(%{hX`~BqVo`|G=2FHz zTWJwPkT$+;pbXZd>R(C57pbJmBj^6eteN*M%5`ibiRWN;R4cdUBjh@Si zSx7CQ&Me1reku>F1^SDf;(@4$(%p{nrsO(r}tbZ_KmjzN_xJ5mtHp_ zHSaD>4r#m;U?9%GV3Ewopc-_sqtx?&u>OYB^gP7$9+b(Ae>%RERM5d%(!qzSOx4Cy z&~!2e+F9lJ9PgKgbT$F{9Ewr$(CZL4G3cG9tJ+jibK z=~x~2$vSJDarR!{_E`HDJYQx#qwcDj*Ze}EM_iz3k5XZ+L{jfRb3UVu>icg9ikx#h z$DVJ6>U=MF{-+9M{?ErzsoH-=Hn617*F@8SD-9zKN0rvl2E7f2Ba=WZkwA~XyYi%j zx}{y(NBS-70SRxhQ3r-0N$b8a0)muoY;jrpWtyxyUH;DIy3F;sm_Lu*)b0J4-j{;$ zYcD56wJLEGi2VtGM}tpUJfg+*G&G$2HDZVd#jyuv1E)Zfw^whiY^U?w>hP+(TqL_m z&(yi1LWCb^(WDLYBen$g4exPYAeeRrA)y6s_Zdw_!f@ms+4Bz8n?Es{RAP<{JSZEB z%qPRw`wmGff);+_Ou}aa#CHn>k4|kW^}ynGkqKqx9@<-=picMg<<#Pp(Ks>shYvI_ z=qzNyKG)-eP|R&1<%TBi3F`)>xMOaTBaXzxLA%f{+6#jt=mhYR#n`E7$T+QxZB4b| z5r4u2D;yKU)H<7SlMAICU2Lap+q*mXZrlgcOP82NZov;3^8@_3iT;{HdBg|JVaOA|V9|0+z6p>KcLe!T#K6AO5E+@0wug{-TRKFnG)5pwoCkBR{ zq7 zx|pF+SRYX+GnF7*z-?IgV~Gmg2NCO4T(e-+UP6b3iX%m?p2=zaMz{$}p<*wY8}h6D z8EY}&#Q^-W*&K#D<>ONBT}NQm%!<0E%p5oMrM*Ucg{HXBJ_=_>DEe~U9?pu)#$Y$p z87FoCvQJ`M7Yx={rgIXUJ zdJYdc;SI;F#^>&_n+llLUnr5K;NEj$Fo^)u4ZC>I{0Hk_31I-&%)I>3`={Vs0euA{ zEY6vz1aXhz`RbLBu`b9C%Bd}@`VaGVZQZlid0SRD%)DG2nN(^F1u7Y?NG+-rC+rtI z`d7CKiLn9ml+`My7U$&k!cuL)aZm=o#QgK-k*uPAOp~4k^B8*N! zPb1}I_y3hdoCJbA@Y@rD}VQQtQKFrb~1EH|=Q+fOB)k3PZ z+-KT+2dW0!s3i*Pdn)VOkFJ&W!PGrniGJGXg>>mZ#omPGX=B}NclIaP0cXT1Kj@TD zdlOm>CEL={Uxn6hq5m9i$&`A~n1!v~bZPNBjqik6Tl1ygT#RlqA2U9t<598WyrTpA zj?p#TP}H`onS7^HpI?aEbm{-7b3Ni~F&uSO5UbqVUfa9uDV1(Lu}%C9jrvr}E>m(X zL8WJe(<8B?>yz66)`~1ir{;DZ)o7qjRR}g(c3mAI;&;$AHW*y$E5MR1Qu@H}VKCsY z$UXn`lTKxKQp5j8jM|j3bQfdPq5~rvbI=jF)oxNmh>aRNX_{zs##KgQ-k{UTxlq3wJ1Jt(QQXH+0s zEsz^440?yWj-VL&8Jo`{!jEK_QJ5WhU9Mua6os#ZO;KAnsso80KM2p)k^^A#9(<7!iT;2%GO{IFfT+Y5 zL8GYmY;+$P0west`!A`v>XzNVW#0HLbEW@bPpoL#8id!M~yzXGj(ltQKVfP&1?r zwFffE8W~x)=NZT59k|@=)jC+cW>Daw%_Qux*^C@;p5&|~2XKXPTKp82bHfl`k32pwwwG7cEstl*PVlAo^SciyZ$Qe zqfxi5xuaRGyb|D}JQb;zpiAsM;cyNQ6m>-&k?56h4dk683G~^mns!&KA->2jxt}s@ zaHHLJ$FRX`PvlIs}B< z9@v_7%_u5vz*N7+O%H60>%v-gj0b8V;v0_RmEL!^l3oxDIoILb@QC-sKbWhm!-t)J zIEBY&6J#k}a1)mNoqL#28++fWUWBgf$MPcueQXo$SKWeQTH(?zW)1sJX>JN(KMRQ} zi4Hd$nE(}yQh|){zpsm%&nf)}LHXMNN=g>x9Bo#~l(jwVp&jZ)a)ObNikMth57BJ( zlP}?4*!n2(TjL#j^8u#lrle^yNE~$z$@XYPe8A)3SC5u~3L>YloH$oZ=tsQpSIogH z+$VnXy3cSC;YU!s=LwG|Gw~ccj$Z^E?Yz&3nt>-CSKlL4tX7T|7BPo~6Uc(vF?KA%2;B3KQY-VrHU}Emf;B01OYUa#f?B!}^;$UjVU}SG(>*ZqQ z!tfvOJQs%l_AmcWQ6Kw4`=W_G-}3>~E=7aWocFe##06pw^Df_`4V2*^_L($l4H#!_03!Q*R zgCn6^;E7CoLW=Ejt#hsa=h-1yqB)o@}jNvd%I>y~ZlE)t+d=sz3 zpo@O-5YEJh$~(nCT0}bWT6RNPL_zD~RYgYHE0M(=dW`XmK-+7JHQ-uAOKsnYBBn$q zvodYKCr2kW>;(Mx-sv*;P8Wz3LH^js1M+uFdaN} z*aZTpbBm&Q)LjmRDXh2c5&;-p1=2YOK^`M0ae6aZkCN(#U$q zAd*2bRn!^To)vpbBny{@u;>=qAeZfzSk5)_S=3Wh@?mg$r^5D#2K`eE%xD>`6K{I@ zm0>f2OA7xZjPz(in**5ic4gh;Ft-Ei(I*`Jr51bb9XH*s-Po;R`0lfO#%kP-_5IQ8 zVYy})5{{ns%q{zqP43ada^0=*5x})aG{D{rtIg`bonxE!dfzS8WsIkzeF_vYdWQFX z$Npf{ht;W0#uk|_X4%iaU1WO>zs%+Uq}+2J{%?f$brr@(0`49+f0d$@TX7ZO5#NQNv|8*FJr<_7Wd533McK-3E z3-1Re@4Z)TPydL$e^+>klBv(W(j7@#&+y1p_fwtY9d)0l9BQBIP}PCP$MqVoUMr*k zhFr|FL;F>mZucz7M;Kstc~~dwB^R(OK0k$n`w2`cU_iN(V7)_VnMPP%eZ!^s?3MhD zOzhXoaA|WZ@d@mR_8l-6Xjy(EWdjPTu%hJ=B8Z7VQOv-H{(;eW!PUT6t%k!4`|Q;Y zXm=dh{M`po{loCc_7-GA8YpSxYL_gata%;38g9L!XrB?1fDHqA@pIWG3_KI(wD!K{ z86Cne)-6=+Q0?A}G`aH1T^ms|J37`0#D%P+>)~KGI+fFV??; zUf?%sq!y@iQGHKCMg6V5iuJUXIsOcN%RgrWII8*s3Wk!7vR*H+h!;a5dyPE{WmV+| z{N*4vZy*F#G?Tq3_N&1taZoJs2V4mJ8AKP6oVdrjioJVG5@_1&8K@3;NQlTpip zKt*l*2r#JW=Fw5bGIavtEB$2D6>jZ zi*=4pIaro(q7*gSfA=|xOG*7MBwp4WQAqBT-paeP zkdSM9oJYlt##u44OHO){4L{ZIXF;H2OVdj)D#gd-cSoL3fQ~iSL$Q3+VCASLO6@n% zJPxz=9l(NXT9_5)AQ-TtgcZ*a6ir2GsNxgD+B$}hpGX4%^Z?|yGKCEA2c5z@n84PO zkU~JNFoj(*qoqh`t!HWfvQ=2feF&ijEDz_i-dUhc{p&N@+N}@hv3v4XbM}szK_v6~ z{PVHkRrLup9M`b9M9H)bNn)x1AK%m@XQqiPzW5vf+a_T;ERk z9WN9I?08=d2@(p3McEHUHo)JCatb&0sxpaWN_dF?wp$y==VGtQhbQk6NrbJ8WiUgK zgSOa=qf&{ClMG_{n%`kTQxVIhL^{y1A;+Xn*ipEXxz}-eW+Df;iZ|Bru(3^aUR+k@ z61AI2U1v}rF@4xK{(|$Zjpifo7@NgmCJ+_f><*f33u9+lo)=Xnpl9k@Qam>abNtqE%*aS>CDc+^ z1ch7t3v6)Jh98Zs1tv5%#F>Geg}gmX7_n-E?NiuVE=EMN3ag*r1W%;mLRXGZCCMcP zy+)!E55?YuzciU60&s=lvhEI2QmpmQK2(h^wvk&`z0B(1!E1;Z`Y4F{7;p6AsHJDk zBIZiCRVYG(NHT@h0YlbH6<}8c@8w^H=3j&zEe=y{BP1qMP~<@c-ko^c$qxjek~z;G zBLJ)~K8}xowJ|ED2tAWW!&&_)KiM7;p2)O5vNfw-NS0!9U+W|c$)Qh9#MH$Nw0qYW zMJ`nfS@bNf<=+SUMTd&J?3La*N|Pq8YelDEic1HWH|q~L#KN=NL2EER5V%wHB7b&J zdzyrZW`%aF>+l%%1QX?am;u#^^gN4Tb=T{w$6YdpPfYi(a7}2ICBY>TIvcWWKcQXQ z;|LPk^U4SF2nNMyE=6%Gu$Ggfk`HQo(NlU$y2UcW*@ZB8fi&8JEJjSX9 zw;r%tMiu3bX_j;{hf|}#ivi&juMa{|2?x7BK$T(<$$Nu>(5SnVK&j>Pa=cbkii-0% zbCq}i6d~1(V9nxKg$rl6c6Y%9opE{Uxl4WTp=OOZ>%0YIT7GmIU!{ znCLO53syGw@qBDfpEyx0XFU+w3DE%G6y2fNV3uX(1O9RZ@c+8g7qH)7{X~@a4 zhMGv0w>5RF@>0zlFSsIMklcim++Y3!AjXckb!-!80MAuYhr@Ui_-meP5o^)t_B4dVy{GD zL@83jRts4B%_rKnmxT^|85&yy!mfc^uUQ^AKoxV5`$A>m0MH9h>Z!I?z|eH;6j&8C z2-UFdP;$A#1uUXW>nVf|QRqZy)H5k?b5d9hGMTf>nmu&2crtIrHNu(V`bRi|(Zj6m z>kjaR0!;Lp^{tZ0nyMmupwgdL@4br(FdL|%GTddA%(W3~APHF?Sx_~O-V;p6JS9cd zi9C5;Y?iV?g@&q}#6=o z=_p#(=#=6YWC75Fso~M)@%Z_wP~K{fBVWb9^yTG{!4}cgeeIAo?~DDXr2MTvwO$4W zoR>OV`mt%QxM$6#MAh1qNQkU#N??)L|2&j$`p(S}uTnOag&HTpGi(@1vKEKP2VD)w zoDTeWy5a3=oxdzf&iSBH~d86a+mXsm|w^4 z@c&)iOLGtnL1Ky@8CJ}_-r0z7VMDdYe)r%8Wzpkc7jol=jk!7~y5Qrz6Gcus@6yzs z@=(~o=Hi{fuzeRb>Jo#EzxE_r#T4H8Wte62Uf4qXx%k7UoMyXo5A`W8GN z@|o{NbsgPRB|HPf>2tDb3rH&VU?nXY^5B$24Okl)J3z(f4~chu!Qx*SF7JGSJH5Dt z?=Bx|)4e=BsMGyG{rx8&$k6!$dC~cT=O*`|f@u)J;C9Dw=b-li>997UabTn8OZsee zprdz*3F!un!basvRT?X6q)S#7E-chnrtxgF9fB}-h~Q*wzXn_%10V}el_V4U4sYW_K%l5oJ>==XArAea?LG>9dAuEz-sxXv|NJzE}Znq+JFB(f*eM^o@h94a0**F)uvvAU?jNh zf65wG#KjgurzMr<(%4J!6moEgHEt<4yL?Q`rIT(ZiQ?3lQ#{o%%+aXpD{L5Y zw$A35i@P_f?%We!zi!G!YyPddjjNMaA#YE_9BU3suV4z+Yc~3bTTh>sVd2=jR*#y2 z6tR;>7;BCV-PxP|`ord4qO)7~OEX;qi?t)EdtF|QBr_y+206fPVtP_E(eR9m%z?`n zoj!bf9KyZT%`3HAJAG~6T~A*|Gfwk!DP+XkYa*HZ+rP5#Gide(XVSR%`va3P0}=&^AG5VL{`&AqPh z8j#bAt+|(|u`!Pm|F>}wo%FmXhqV`uw?yt}%R=XgGr;nF++B(eJC&X~UG=-NR##J* zuMWjX(Q0D5@l~yKio2J)kcZ}EMEefDCa^z6ZTjMR#s4HUPU7#PhEBF?-LRq)bxMjE z`igImx(*K=mgp@2qL&;)PE~_LBDdiI*ey>#_d9TzX&H@h7^uEn zt<7npT?%MR`Za=ZbAr3}W#M--{qPA46HNIq1ikh>d}QLS#4nIK>5!LIp(7#G=0XAw z*Vb|VE0udTjaDV%s6{4f$vLd{Y)|(c`sQvcJg##s<8iZ&xlW86%0)O#tTXfZ(S^~AjK$b@=XH%YJ zdEUGtErK9$)B{6Geo@V&TEh)*6SdKUs-lPeXLO7fWGV>3vYgo@Ew!%ZwukLs7G;2E zt^cNhN7J*FYIzfmC*9F|7L@xJ#<;{5H{eMktU`W?D}BP^9co4I9YS>H{SO3woFWJ0 zW`OCyUG-$E{6#&_P6tE*I7unI+(OIfTKp=e@|~%W8b=+8`&Duk{fXECfU@^3!@=Y) z8`~YU9>>kG8+czWD(eWHciBa^{%FLFshgKZ*Q~}9pPGUM`6J&XyQYMf`s(*YZ!Pxz0T~z8XueVHMnCeQCLcqncZf zdCn9~@Sy7Xv@RtJcLgDJX%wPe6s}9~lDxBchJHE~Xp+!cZQSVnC+<77Nde3O+Q-fJ zix-R1i`}WIu%{a7GgU+qHMpahbTFaG7~_K?j&@@Mvdy(lWOpIxCFM#9{0y=?A1#xa z*Tw`-@4cbSo+Z;SB^LgbP@NP8G>JqD_QZJkKOHemI!RRyQi_VBY4v0G81Iht%r1`@ zT;%0HttKNx2)4551H60c8r-j3y?stT5}cJMeNKOvr8u3;NTD_v=WD5RdqBK~?EG{5-$_;qj4eFagf}#+3mbbmbJ)p* z&oM2g1~NIPJctlCmX7SbbNEbO%PsdXI$e?-HnDx_&{Lz@DfU0A=>$Mg{rM@+2k;3n zAoC}{_u4)ncvyqmvEAQ@p@%8BVr*aZj5>&ST%tsfeVA3kyu?!Y9rTpKz$gqi5w$r%!fCU)4X9)bQ7OyqV^6I`7W9JC zu_}A)%EP|!^;x%_mV9}c(3H)$^t_V2ForQ{i@)&32q^hlj;d?qoki?u{8rGW#+n8e39$MZv z$k#5oz00;I`;h7V0v!U%dBP(3L;4Bbj#&N}Kib;6_*-{N(DP1M3G11k_b=_XJ3UW8 z()$aEzcKHh{6GFM1=UZL7ukXTXfOT$Rcx}nQn$T*D$h{7&~wE8<5V9jE z@T@$P5W5_J*bWo5q(cPXvD{sI@c50KaUY+3>TDaD-=>{&$4dLN(k3EbyVi;y_CPIu zbm9=67{8EYM_JJw!;Z6$RzE;{+iy!EP7W7BjRmv9h?3T?sRW3DAe)-Ws#_%vOR>yKhTl%*Xv~=so4JynkW_Ii z>&ocCeE2H+YCqz;q7D6wb+vI_Ak)lKFWZ{FOD*E>6LEiopR>V=Fy}bk6-HrUer%L$ zjLEBBiox&~ea_TML;jBps1f<`MW>{C?}FY}??Q_{!CegkMCQOB)R|ajq9_0b^Xo%K zXT)_U8VzS1qh)pLRO|PhC|g|14UP)B`B-F#M09VIj7d%;Nb*2@$@%U^cyUx*3ROat z48}`-Yf^UPSNlK^N1LA?fhPbG?>i{eOXi8^!(P#*@J61RH%|`Q*ml$W3Tl2|7`{LL^h{w-RQ4wj&$B4lR~D0%VVK zeV_D;_%qALBhd(C{YoAhoG5H&J#;N;(HhIjJ{~6rHd*W3r{&{cH=g#EIw46vyc57L9m_UA4xzRnKTb4${YD zAe%#*?g)}p+$AWDt7E3wG$eQ$ccvER(lKNOB~z?n6kw-y5qg(z9H)!s)yku_WAV*A zp1r62%Z;|14fM++nL^Dj)+{GiRaW@x+*EPl^m`Wq_6FRq2Y1Z}p|wAF+6+cIW{Ewh z7~DQ)rc4~O)C*tB3J@bU;@9n`ZNy}!uYW=XVGm}yE}k(cxnX@1LQ?ldOS=I^de5AW zgWt_wmzOF&#mzQXg==a>Y*HftD)alU8Kdlb!1dtjf+Xi6PH?r)3?04ZQ-4e})4sjV zGF6a7oKYs5DQ?aH>MsPi@=6-S+!tj=Ev*liy^OB^p--IrPW`fFFd zr+Dz>>z3F33$ZQ!wdQ9^O&IJk@#8B{{9okmSLSZ7go17JbJD=uub9Pf(+hr*_>-Hn zKm|rn{*l02Yy=7sH#Fb4ZJ-dTYCn7F9 zk?2QB7ICde;EO!*2o$`JxCh_BtRL!c#~xu)aVN|-KV0%?qCp*F5LRZR> zdnf7y##1}Y3$b=WmLv1Ve&4PRPC^?TTyf^^cHUYy8$tKD(FEt22xmvJ7&F$V82VyK>4Z>dUCgX7*>Xt0CQmu27siKY5JIk_yQVQ6X~{W)){iJs+F`&%5`8ZHVLH z;z?8318ok)+DA>aVn5(=kqg>ib}z51gPMU&lo z(guC|0ViykWJ#&A1CtAbj*4Mq4B4DMYsf&q;d$+Z7RgTx!4{7E-GVv~{OW^an&1W| zY|ul(m(kJn0`#MJyrJyw&|W`fq&gKebbJx)_N+NkXd1G}?o2A_$l&(@7P~UV7|G3j z3I_?|Y?xN_=$=u|n>s*}pr#CbuSJA1`T`uDzrU@kl|m}%MpPmRn;b)uEO5cuZw{@h zVQDpXGXA*+*-Y2R>$$Pr!{JyxQgEr}&K%Zp0i4`Dnm?ujIFB*8vFzzeGnNdAiH5IDp6LnGNryEx;9)wr^-WKx18za$odr~p$I5pNS(vDAqEB))o& zx^~Y+1bRlQc%b_a7`AGP5dlG_S*Q02RY$YR6=Pl=>Eod00PlXqFL`&& zHXJV)irlcP^7Rk<-)jES-@zGLTdX1o~4#6@W{bpgpljbAXd#BmT4f~Cv7}Im| zzw%l8))E;D`J4trp;228m$sDe%x~x(C2|>3JjM>rQ};`AdGg`Tz>m(VgZ+=<%z)&> zPJfI@^kK$;@sdD&`N?PR+e3Jy;rxCPPts-}geOV>Ou%sL(Sco&B$5>LU@7(-0hF0pW1M$MGh@&AgX;}YZ9OfiHyT2u=)GcLQ+EkKf^U6kRWpmIFo?_c!99s> zOdE+Y6IqC83D~utvv_%tjzG>#u%1B~g@d7w3Ipsmp52-^qv?8c?UWlGx@>Vb9!pGd zdu8ocX`odvx0p6C0I3C*lCkWmow{~{Zq$YQ#)xQU2!P{zlTpQ6P_FVj7c&~& z7W_t?{vm`Aj4ycRNQWfqSN!Q=4QGGP0P_mj!!3evo0$Ye4_f#s8s~jFMeAA=t}D#=cfIYHkT*i$L%bcOc;BAlPuG zgL#2h_i2~VoXTPk@}(CbKwl|u4~9b>?Ghx{%oVY(K>!>#Z9J%woZY^16PhD2;yNfh z{m6Ub=yMrv18x>;0NRe2SY(|@g>xUOaDWjQq6-Z21qN0Kx3ve(*Sq`Yq40%}j^FMG zn#=byDkE|zXNOb_v*AjL+BtDZKkdnU#_HdoaxfW`1WxyZ?yuYe;>zJ+wq;8`sI(^A zJ58yd+L*0#Oss=rp<1L~C7eWms=ey~j8!I&N_o6)=Tn}KF}hdqJ}`^W{tSV~j3;QS z$2-{op7y0ao>sB91hmH_T$L6_T`WL6+L}0y9m8_3|(}Gu(Fwc zzC|Q5D#rY*<3tIIF192c6;2!vJrwH|c4j7K&Vlm6-If2DiC8=l-mYgi|I;QIBSFC_ zU3>cHJ+*U0lwX19xmxg}pU@@6pvWr-RwZ!fk+9~0pnFaC3J<5Bvg7`KYyUcK!i|X_ z$2e#ZFm`4+bJ=L_UIB)9MQA^O5nOz{XT?iX?DyI*!|MKoFsrlOME0>>J-#I} zSt-WUU1SEE=+>4^ZLNaqPb@U-bZxN0l`o1*|#_q4g3-PGM`9Qyz^>pK+d=A~Cgj6cF=CPhf^?vtB? z!l;hdROsN-VgYQ3-M_P*>o+l7;mWQ)>sNIgkqck@bIH`qA;YTk@ zY6f}bEu~UyhcQ(infwU$0V}WE@_{sPEJ8CfJ%Z&<8+kZe4AdTlc$+rsRv&p3QWPuz zkmZ!F8QX_sap*AY^+F!|F0Nb9-h<8zWO~& zfYl8ByQC9KqA0-MPm$`0g1rklQPMg7)GjIHl+-m}QqX>@{d**wGcssOvWAiOIrCX7 z?}OiWJ%O&0ZxABg_(C9~yzKCn+*dX8><^P5zdeFg$QtFSXN+pYkn#uw-~un%NE6VB z@`kv9NUsc)Gro;zrg{N6o;l*j=p+EQ?6~E@ILtY%`W0aRrV3B+4&nTa8gf&h863W{ zv5s-z3%;+*QcZih(zQc0~uwHgSZ2MoDNbrs9S zdD1%21pjK)M($5;=DpVLfXyQcuv**Z9UAgxHj$;_ZCQuWo_dg5n3{+et48-K=?<7J zx-~sHS4~*|WMVL(MVzt;EkC5z=4v>QDEXid2RRsH6w(DDKakF#sts~>YAHpcNI>OT z;GM2zZJUFpI7GO=RVv(r90nO**oPLAWRdC(ZYM4+^#19gg_dTmJtyzk z%F7Y|5qx^kI;*(L5h!OX`~4D>@$$Kqa)YrVeVU3PMLR2pn>XfqIyrpgc!)@|ecQBg z?DCEH{SW)mwtp@S`!PyvBdQ&M{6~6-$#xRNIRbrUk@aD1(oNA0yZVsHORo91pL_h(TKtcH8rr*fZ2NEn^3l( z{P=Tr2_^q(l&|ceD>KiFC$7b~u^R!e{GeGBH^R#lWD0d~mNbL)KusA?7bw#W55Ub_Bs0NP61+ zZ1fQEb86kCh;w80AAkC=n*!b|2%O|cEmCBDdQXChDK%aybNoBN!?YN#~U@@8QoQV(ocAm`@B$c)6a*z zK=R2AayEV2xu?wsSoi*D-|d4I2PV8-av4sR+oZJyQ2kx$$_O4Za0t{xL_gAER;<53J^DFC^cMMtwL+r zm=ICSHY8|Tju#%R;sKOk*gk+Xmd!u-&v!f9E7Pj0i<7z1=4Xjij=9;KntsQV%j!K@ zi&^_C1}dIe0D#Ly>N0EY`hcCqEvYTl^6j_K0Q(}^1^sZ-Ewup_QO}b#P4_6B6AT7w zCs8jE%vZGMI}Hq8Zmd9v_Q^LsDBwkMT21UC(BaAG+i%0Lmp3l)afriAHmoepJRqjzKJbq zIkL{5f7YR`c~AXoQ(X{obRBXsFlfTqW|cNt+Xl5ZOz9t9$*6r$6)A7CF&q_D6MOWH z2RAOZUPrO3ag183DA-T#L_fGmwM!yKpRp1-0yuQX1e&Er*tJaO8d>xs%L?6DSiSAE zsLPvC{kxFUwCfr#r=n%c2RU7y?+y8tTL#M>w`uR?Au2qNA7~*tC_ITH9R#!;%I^<+ z{}{HT7d3DCK+pLeO5+nMtlyUgj{gyR_SLDD?wt{LL!2{mXPXeFkMm2G_G}JFbS$To znc_$UVkt(8d5H^zt{WT}tpYfco;`l9ABh&sBaKcT8W!>9v5GR~&{800=Yst?GHn-< z4}^E7-X<;|$aRKj9^a@}OB;}JM);6V8`>ia)pRDfOnz7ZU>0QivzVgCC9H6U`NyZ3 zc~nd&I+0Kkvd}Ga}262^{37 zz%~nli{Qk3GnMBw<$S$sX0Lf4tN+=y_y1- z&R2D9(cs$y+V-zmLazzNKjfwG3}{{vU|6B7=S8!wh~QYasXo?yZF&yg3vhE7!@qbW z&)in0%%2u-uOEXM!*q=KCZ+^_Wa{z=vKGD2xd_zU;NJR!KKoNE+Xzl?Dj03>E2D;` zeTL-mkIc!c%sIhs1>ftAm<8LIY>QvW$f68WwSL%E$#(|Q{ezYEN}6uN z^Q99)q#j}rnO9&RVD!R38)wWRB2|>0b1`j7J)|Zg{fBs5ktgW%tZ(+xG|ia}OgTJl zjx4bLH;h;McWULhQZzo?=Zej{0=Ikg#It|ZL4c}%(6itTd|`hI3tp6uc)zUY=}5h# zNH~#h3d6^rhGWVcIS6sG$rghg?@q;eHAXyC7`;x#Oq2ch8ugwtS9ywh)jR#E$VcZC zvbmq~wY;ZET$U7-95`oD3gA>-yI@%`nP)w1Pei{-scD}1y5M&O#E6ko_=5DG`AXG> zUGXh8?zVmXGo1oeQ=!^I0#x_zhqdM`l|`lIqOXO5Y&3|f(%4Ri_mOW1+j zo0^SuOm~*lrbSW2keGeP;8tkL8~W#;B1NvsKGO&;0*vzYNWfu0L|5g+)mxOcJl1zU z%*UYdMdTgqimbm-`~XAqIsM0`Ga7n8#n*ex7sP2s&vWLi36BN$(x$U{QeTY5I%-t{)dtLu<6^z}6bvUK*Lq=12XfW84(v&f515W&Qey|wMD+)szV-kZJE>q+h9c~TZ z2rF;ZZ^ubn_=@|w*1dV(t`NU4hE*91fkS*s-E!R49dS5Ixfdw@X03<4vjfzptb{8z zSAYlw5332Zt*J$>-NQi8*!}~->2cbL659(+2;gT!sDpD3NB7UnSm zR5s|oTtpD56mP(8bgLLve<>q(O>X18mtFNs_ugATR%q~nGjbSYf+b}!$MJJS`HH&W$d+UfA>x%e0(;o)Z9A_ z-@a?V;AGHwA7pbHe{8*^v=^4kXbTX5I6=WV=jtkSj;#YNFBH@1+>S^kChL{1uxR~M z>@pS+_nOOFi+H89NE+>Q<`YP$bm{CL%!wV#Xfyi$Z9t^k%Jw%j{1OXmfwizU!O=J; zLeNlw>k!cCSA2~pV1!dUhGTK{5fkG$^tpulRp^y>`R~{UZW$hVhK>x789Nw6FH!HOlRoU-Cu+& zg`=ME_jY0Ruz7Vne1ZSQO<>O=_%-=m0Q}$Fg#YUW@LwQ>8Z{jSG$t%QJ&Z6tNG%~z z@H*N~Of#fz5hyTX`$i(>$L$?w z)?`-bAk>X5S*n;P5m=_vMf4u1g=;*&qMn=g)e3tiTao=W(Frto*W*l&GOyr~y<7&X z!&boYv*rP1DKPLH%&H4E$hJ^?;?sx9QY-_v>}$Fg%Kn+eTyi4V+*8VtuW#OBXXN_O zl>ZNF?;PV<+jR+d*;N`}-DaYhSNdb;?^= z6S+G=x&+Ns)=_yG@N!MQuR`le3}Rngw~-#)6j@?KvQB7F-20$EIwVlK z3l5lzk&a7RVgdx9Qp>x9ID-lxx&&}ErCzx;&R8H*p^O!~hImPy=Gwzr`q4@F`X&8@ z8cfO697J^Z#MZqf)}zjj3qSoLwd0S|P0}eV919hVn-qyvDJ} zck>d}LWkN-irA=PQHz%7neUd?%q#n|;Qfagn>RprlnncB>~s3bd*rEW>*g>7Tb>`p zfcTTth!^jgARGd$voBbRXD}+v(=i3zet#%aq!ZJAN5%eO7h&^I6w>}^h#Rz1Sp;?S zV5s8;FCKDpLUN0I`-2E=7ZDM^x6o${LX;;I9_qOc`$!~fWDl5ccUW9>VcVGK)Z@m{ zN2r%vw5qq1qmbO=#u8C}mzfCGCj}kd8ndAlf9SNa2f z_hPles$ylhuGrA*loij+;hZE8_KsUc_C#vv4Yf=B^4FY%t2hzS$j^!P@wXGfFwP<* zE?v^{t@1SCh+`mLL$cdB2Bwm5O;k*)!g3ELY14?!>N%cV8{1D)-B+PZua|!5HwIpU6%$5!C=Bk`N;8obfRq1^qExNP{5|Ah+lt*PC-3V8{ zcYyXP*oLx(J>2A zA6VrjA}Q;#q`Q{eHXEm}WFkh}bfjjJR{6)5;g6oVZ>!v7@!9=TQJQGW& zZr)=Q6N^k-SlA$@ldc!e?`1*|D4^8i3c?k}pzL2QM>EVK(nxx7i68sr^mHLARdRFK zO}tp@aMpz@K)ta{G_ijga9(pj-LYciJ=JAnqjp53eo=UNOc+!-w`jK34*IcCKIpkz#S6zIypzUQ;o~Gp-c83^p(sHL+nYulQ?3 zj_azY^@s`kmDrF))RX;N8SZC3UW6fRL3%(g_hnweQO6?}CG^)D%ISqfN^&AKR;OAi zT!zl2k9{+oBI&B{B}5dziT&!eh8dhc$feO^n*u_=ChCd8q$x2Oc%zA%CW{I$PGOO^ z-^Op0XobnH)R^h?6P{4AVZr?D;l{*LomQLPh1~;%8@Zy$PMixO%5W9WfRA(BhBg1j z29=*=oG3DJB(_(?#|DOGlh&c1(584A@@lO%9<}6Rjc+@wV)qpciy+lwc=onuJr=Q4 z4i#>&<_*ilj^(ebc$tU3qMcm-Fi)I~+5V2M3Pk8INba*N*L%@!aBhBNuqWlzur%13Lm9cRNlCNF8{7X?F+ z>^MOmi*Md(?h@Aq?)^Qz-dqkolPaji(5K`)1K(~hauVk7X}3pDU9{50xmcu&q&TEn zr^Vtvnn@BzO~YQ66K>5z zK*|JIXIjftr{)POHVp0ueNmI$6=wiZ76G!Kj12zUOjPecPpT@9YO%eDm#)#hn3t}x zy{MP2F#?cJ(8La5BRjugZz!X_(4ty{$FZnDRG6DR# zma*0ju~yw&+qnU$`HhyqNCTcUrNca8>DsF5&ITxV=v8UGLC`qAueZ>D8;Hkldm;VC zvaSdBqx!v#T2@r=`8U?h3eowzS57+QhnpdLd0p5l(&FQ~Ud7YgOjP6<0w~}!Mzw9E z;c8K2A#l2>1-tw(YTZxB428ZUt*_TK=8g7-&Ded_E>j*oMzK5X@D3v@#mMiAG<f}K~uG@ydUJh%DHBDsgSMV`e`2eJ)fR@2ZU^CPT{}9}Y3@k>ZbT@LEz`D@wiBYcAkwL}|i#E{JNk!dxvm z7%IH(M;#Jo^nA{r8St@R2FU?fK&~B-?Pu2tzo}u2lKiBGpPeoJ*_GDYDDAj1X-e63 z`y%!HH!#%D+*@rA^b)$^RUr*AL*}%gi>fBDnbp{gdK>=8VmmO*96UbYWC#@N_C_p9$;}t-3=+7)$k6KKn>)Jk9GP1`zmqe-Rb+h= z>4@Jru}zaVh3Dv1MagG1Inuh__qshmyWM5Gl@0Hl7tX^cMnP#%BW{$7*M#2#ge+k) zonmC8ks}04pty!3$E0Fs2wu}5NodvkEcG|^Tiq}hCYa>*eW+!r^wnLvCg4%I6j7`$ zB{a$>@C3SWh0n8`kxe}srfK0#!24-g-i4cZ+#|qe@+IV75qez~b8*<^<Hv5#gAr4l;)f@-%eMq|tKPj+i5t`brZ z(PMCaq+W(KEC%6d<&LU(bN<@+R;ndaf^y4|9-iS+%t%^eK1cVA0_X}B*9K%pL7U(a z2ub1<{KLjjz>9y9tAr)qA8`$M-GgNqn8ClwO6z{2A5rIA;XRck)O6~sxfJ@Xmg5%` zteUr0-Lz^Zf1?6JNwZ;JU@?vjJyyHn3`XDQO7~gBJjwfogzyGD+N8Ro~|EhDIeXcwb8r5e4Gntw(}p&Y1L2+GA^ zccTEXXb1IdPizvGO)4-QPz=0dh4C?MH8DE-Z4X{t`|G=`(l_U0nr%L_;3L&zZepIiwZy!g;25cvM*es7JSfRT-qZ31JI^om_NCWCw~NA9~qu*Vu)+ zC-x@<-U1DA8F6n+aSONN2{5fdvDtR06m_DS&U*eWF8+}QBPK`Z`TgA~!2$jF!T%q2 zOiG6CQig7Z|F{hOPh>4SM%D^g5FteWjhzdTN!(#)Rfv68iwGkwU<}O5YuvHuB;``l zq~@?6ko zItb^aY;OWBncOB20=i317znO&4f3oQzSl%ekPNfB`SOqc4Yk>L0vRi|U`)&GrtfF{B_1D+v4kbq zX3iecW6j->j|;ttl)rHhuaqwbT5W8JHhKV{d^O?|~+ zgF@CzeaS$wOp#?+vh%ttcx0*!SnE8Q8?_;JXlor1R)6{EE0RhfY@`$&HAP@z8D2KT z{X@}*V&B?DH*k9W4xraPK?;9D>j=bOc?iU<)Oj-f8{;euWy-XUn^?R@H4rA5^*kDG zl@<3`QjkG4z(E4O=Qs<6TfbA0arl|0yGlMVh$xde+N-j}iY#5{sv@JJX#6)rr^{8x z+~bp<2MpT*wu#8<1ufE{V5bc^iVol$z5(8R z`(;j$o9HD{dWed5PVA!*<$DTgw?@id^gQs3tB^S)fdw1n9`c_k$nr^&#vu#_NDsUb zLFBMX-egMAQ{z%>4fwjyU4ngs||f zF4_L=Qz8EU;tc;+-Ba6gUK2t1l>5vVQNwOd0uK3uBI8)qL<#u%KLHr+cMjm0<1XiX3d&rD$`2iNN2 zQ?zG{3j;gQ*o`kiH-r}ad;5)uM%5D~BHYkIFfwj}z+^UrURa)1>p=H2j@$J_HM;?Q zj50{$uEm$`EZ?Bb*QP_`XTNPJ(feDhH@}NeU#rM5LIye1^p1SCcOX7zqpfGQdc`i9 zr;Us(vY*zahhj@F!wPEEpSXUw7SO;OE8<%saW*SJ*Z31!!~_>5bkXrkPL>(P;j0+t znt?>hXt-g~`HRu-&pe|3G}?g^r|sKQaCqKgcJ#zZF5z?Qs$Jd^(ZhJ=}I$YbHyill6!8i=q%XXs326Y&Kd+C(}mzDMT z)~{6!nA3dfLtfQkwUK)2@rA)C4(najPP1LqEM+Clk%S1-Dh8ULlN4(evLWx~v1?>% z^=3x6?lLw8i93e^LncH~-+$k1m+q4Cz!_JcVe+R;mJ@1e!}y1-d2s`^&RE?a7#e#) zSI;^>lHXSqX3j49;&6ryR|Q5A`zj%5pLe#u1)HVn2cc9^nPzlvC2O^whH|tBhKWxY=?|Cx7RUYbE18-0Ef$9COnPQHsSI;T zXoehzTm3XY!es)|B87Tqu3u22DUVBr^yPQq(_9G21~DnW|2ffE?$f` z*ljwIO*ljBuDtUDBjOz>;e}j+7u*{K-#c53nC+S&T33f)tfAWOF>eFv^{1+*j7 zq|^L8`hJ6lJK)n7n-urz85dFvJMdKic}KfJ?vKvo*AKUF!qDOyVOVCLU>Fh%*dC%r zpOsIUYNp9icokR5^cuu09xlwHb%z2q?KVpd z0xg>KPw3eyLYZ0k17(pgv*uK#9sHT><@gSiKAq^Nt%wn855ib>!MVx#MQax`P;(1B zb-n8R|IWaL7w=FrA^!NmK>y4E%V zeO;&*_bq`7q!>zW>hfX$-~Pc6id3C9^2?LrPG$#;e#Ynh`cC*joR9zT+L(?X_?==q zjBJnRsT&5JuI(w23SSZWMUlj~9$w0^8(q3iWf+W40|4V`is(#xn7%(m?Euw7mwY3| zPcvdFqc@#|`ralroXn(m5u&OwOntxvj#_oSLshl!ep7ZU$fTUy%nH3;x!nw{ zSGui*=F|oJhN4rt?FGg@+7@q_iSoDBASQ^NLW6oQ#x4K`-6LNv@C~I(y-u)C3^Oxr zsj3$UjGekow69vmLUG#<%wDN3ImTMKF1s8T8b_s0xsR@7v&w*7Sr{5esZKmFm!Vm` zkFUf|dAlyCm7zR0-d=qh2+aQA>HBTPYqp%tY3(b8?Xn>E+m7ig5NI4_hVubI79S44 zfR7uuri93Fhe@aQFh$TRQWR#ya9NHFmL#aXFAbXf38gWDpxyDgjdjhHz~5Okd02IL zjQaf3YlQ+X!{cDF0xts^Q@~!ZSTo*yq4AhR0~afs6-i~s!v_0F$333c3V?w1{)uIN zwyn7vyAOGFb!8)X+wLTW7N>!(RtiisbOYP$&t4bUZw^1QV^? zoMVKy&aouC?#w`+%yqsvk;>9aP`E4lC03&a*T-?5R zY0Z+(BPQoQAbR0oqP(~V(vK+zXBvgcP@HYl5`r1Vb^q7gvw=2`pSxF5zpJReueLq2 z=;*MvIbyA6$Gt^H{&G_Cj9Bb~g!VHmG2=jV0A4IoKP8IGPr{~DS$FXl8Wk(sn>xJW zMU~M(Q{vseQ?dbA&i-QT725uI96Y-*#NfuL@iC)1-}a)5HEpf&x4)O!h>=wKI!Ql}&AA{t z;ejW1zToW)3C7^pfzan)saf?cy6)7iDisKo$e$o`dJ;L$F%RuHgq?Xm-gDu^@|MxOY;bBfhk4jX3vN%9Xj{X`XgVB) z(Ar4zMG{Sc;kj9m>waDAlL%_)4w2dJ?|A|dPYa>e=SZb9IZL>P$I1o~J~2s)MI=nY z)=Pl@?Pa7-f@hq+o;ryYiD$j3A`= zy`Ux^ZdOf=7(q@{UZ2CE|Cs7qoU9C^ZV^%aODtPyQKDga4jWBb2!XuERH_)J*l>o6kZ z1tL0u6U6!+N+zSh1W;ni+vLuD<_mUe6>Ga+QF4qqaxo>!i?nlPj8)>=;4vDJ$s`$n zh;eK=p)~hRP{0sN7ApR_Il0~e?Y{vnEeU2Bd8KIP zmrNFfmY_1eiP|)tb~rpH^}SN2#6(@pGen$;KvZOMzH%QorTfWhEN_L(jwUhYI%ZL3 zR^((M+GbY5abhGTOC(s9h3K&RbA)p1WE1sM=fiI~qq=9#B!V2Uqh*El@nK(r<8-W` z?AWL@*F=WX%qLeykq}xK>$HR;{cDme#7z6lH{XK`k&R89qZ#DqifXiC$W|b^sfW@K zV$r;gdpd`z2lO6Q=TCE051iNuj*4C0G=&`~j+%bvG?ksgYerPQpYY|^*4JlLJd?HX zw|j_wzDf8!K)DJ#jL)FSeUe{uoY({45nkZkqra3PA5tTnLN*qeN|K^2QGfOdLr&nF zPEHi@F=mxi(k*t9+eAC9H=O2Hw!!Er?=YMvJGMr8JII7=0rnQWWy{m3{2=+O`nLw) zRXD)CRXu(@61nJ@L9C)K4h&CwB(-q=N}*bn0W*7Opz;H~Qr&UB_O#kJCz_CwNa^Rd z1pE6;^{AKpQWzfXt-3x!_pI)r9D?8XOVtBndb~}4=y|_o}zGRfHRy(^*kFG zOBxK-`UG7f29P~gVa4fRk}_v9_!uavb7Y#GY_4MF(DLl`eG8HTJUPcTKKq2Jl8U-q zPu{WY8_;Bu{jC$SbYU{rnnF>-Na!cVL~bPGl)os<=XtyY45E8FWDFJkA2@bDl~*l7 z%By@Su$DC!;-DcsGeP>z^o*D;Ca|MRPjb|D5bT{edd5l`r*&^e3Bpc=aenVXZUPuZ zXc2O`hlm{y$)i=c5a%Hvki`;^?jh}Y`#VFF)l!C$r6bfs3Ojeo5b&hM3z;@+cLjM! z_6$++dx@#=hK#9vp!s+YY}!5*;h8h3*aog$%-*eTt<%=|FYZ>}7gJ96w2sI-k8hoP z`clnN?`4&h^n6y^$|*%OG}&~;<(h|n`_*oD7(X4jd#6sc88x?|FY7I(@|ZgF2zFJ; zMReZWu30%5h?~QMjh|~dliIM&C-sT`jtyGv>zoeF%)pjZ{fMqzI^hQgZGey8$9^h$ zpa9bFwCq9^J+=@+iO-P!yx=eoQ}dn6R+|{yvc;*&biFhzD>)pB-XQXTA#)nI`9ex1 zi>>LP+!e|KqaL^GvcTf#7FY+xH}s8lZZ9IK(1t@g2Ldo^D5#IKga3$mt8(mN-87GZ zsJij9=COzgtGcOU!>G5jK#(!JKc|7_d)Xg&FWI`TFEVz*-H!Rpj8vOHkEZ;2NBo>%&j1HP=@`$5x1 z_)f=rH@M2P`i0`NwCayLW>g`c7-ZgehZ>iIdYk>0TT*Iu*`5cb6(h-AJPw8!39+uU$sCV-tow+PC< z5=5^XY-XsMkXLgQzE8ID2WwxXsCh4X6%K@d-2(GZt2zpMoZH~yTaHPn6sbK1c8#KF zVFHbP+^`^nczc{CgLr?O!|WzkwZPn*>Y|PqvkQeExD5DQhKw$KPHmXu`PdbNpw{^i zY=X7DY$C&nejaK7m>G;>?MV(362`r}n{do9*_<@T?NOuQ{KD`R$qdh-=z)=>Nud2! zU}EAbepAga#)j;tq_~IVVx{s@idq#qrN~aLcr_pJLwPMTyjfZk*&cxn+WX|cWzsea zq->{1*sc*V?So>vMul|s3Yn0($dDtn0H{Bc-c6E#W4eSH0ZF!&wb8X!7@KCHL^I=g z8=H(6*~WTHHa6MqI9i-iO0(%+P3pfDmirjDpt&IaZgD5E1a}%%h|_&{ZfKHbew{yx zKLmL|U>ZnaWycDjpy+$?_Z4c*nDNKUKc%k=hC0WM+R?h+`;dc)?6IWM|`Il?JE^T>R)bqfg`xKZ@F;}tZ|Ol57DKzmmRd7KS-SxvkR?#H)J3GLYX0T#4{I2 zlPIr$MJ`XCYaeaRDQf2zC9iBAo&)MqeWbk{KR4ythx`FghkakJMiwQE4r-VTI2s?= zC%S>+7pBJhL8N8Uwq;vE&?lT+P!2KEVHD9XH3c)7pxTB$_4w2$t!+{VOE8u%Wo*If zkY0At_W4l9FqK@|MRQ5fXSZpI$r-depJ@pn5^`sP%$K38Nq_LIF}^^{z+0th=%~@Hs`dY3&#HGRd zVON@y*i|z33TZS`W}kt?LOgB&kL}tWd%!gNwtcDh+qey-{o(!NR^L-2?Y9ZUCvVsR z-DmOeu20-1hkS}-;H?BXQ=Lr#y5?s0De85bd{u#;c?gUg~UnLGSq>x11Esc)c6d zxL9RjWxG%7AC-N2-%1>W;i^1_Rb z3L<#FuIL{0SRop$(fkEEd zOQw)_+j&kKaQx~P%YWQI+j9Kq%o5`Nx;yJ8`ltB8UzP!AgUX_;u3xB@be zsx%i#73{u$#PKC;75sy8eJ$LBH`6T6>CA+Hb(#LOfO?t!n1Fs6zd#W#3xaI`I1ycb zpS0>P@K;d0{Jz{kZ;L!X3)5qiZB2>nAk$sSDDn$EF(ne|BY|U@qM1HAb{k|EUp#BW zupfzC>&fP{PZ0;Wz}Al?W-F`T+4UhpmKz|rqODEuYh7(*Ym2JgF}TE6?;7Ti7`#Js zZU@(`vDa-l*DpWNzFokIn_QrTHoMFHeCY-x%8SzBY6;@7NaB zAp(ZZPuV8ke*JGgK|_1=ztp}R*vr1B+PMEiFh<$M(AfGPcIIDDOtz}F@|qaRC&1L3 zF$lvECW!?A+_$@10tE$?B-C4Er?alLy;Q`$l7fp!tSD(VPJb-pFO82yo+QV7v0qI8 zA%Agyt~KyuG4Y}9=)Co)Ws5W6^YiJ6AIK-bjNJqUX|^7FWPsxlDNQh*UjI6g{zWO$ zm_N{tXD_q%`IdFSHq;)e$Zz6li?Ij;wk8FWB@|k{64n`(Ox+sx4%W4X&s@WxuFb2r zZuB~+5-yZwfKdH{0|zSpe7Xhz!8uZ0I#Hr4t!`zv${JH~QZhl_t?5`{wptf69AWNh z`L#cK|EJwvMejVJorthKd%|7;AVJtjo8KC@vO#@rV`GcT)J`YZ)ii?+h|ik1;)zFC z8^7Y6Hnq^7G;bw=RmmDCEU|x1F}BC*)^uM-hEhtQfulF~>;@c6kKdO~YZUKzm?Z;W zDvPagu#~s22RhmmVTbCH8!tDUnPB8n+3i0vsl4Ad#%f03V#k!6NP4hjp7KO?N`fQR z9MG(-TjHh2x-V0(Lq z%Ayq;{&sU89j=vj*nacH0>p-&{T^+0ubGA$za~o>f(ECtXK3u1EqFx>51F?t$x|65 z0)@o_s@1Uivd2PBJ3J<$H+Xa|;&xb}b7r$kv>97zr){@hR)}Wu4AT8^@TfTYpO8|x z#tRJKYJ%WApfC3VgPt74`#+{3_Z@vg_zc`p*9VXgjaK*|@TuEkG`+s8;YJ8ZhS)c1 zG?{hhYZMT%AiQ)Fz3j0UE3CaxY+{3hQ+uICvI*G1?%rkWINWsmfR~L`OC^!Z3>33) zxYbkzGtPWd*928(*K9M@u`}rL(@=9c^xHW+GvNmA)cW-@Cltr*Ic$tx1ga+8Ue!t? z&)kpqxP|>gHXjtH2?dx?C1~TE1GC`wg$U3=(hrfSuBzh}2nfr?g_QOJ_c3zGSD9Zc zdHSJAs{Ys|koY6fO7s+*(GvB{%Jqje4G(HYpD$l48u-KO0?U>)JYpBv6FR@uNI#x6 zQQ20y*>RN;<|m6kBRVz!9X9>GVIFJ>Q66k2d_j@%4!%ryhuBvVnV*T{5dFo5!W(jX z%QKYbfLq{-!HXftUtjJqnzX#OQ4g;V7rFX&u^idN&cl{J`q)MB%7(G=yWM)@(^A3zKh1 zZu=dc6~OP`MR>Tl8NNzBVczx#EeUi#QGxXX1Q;W_LfA><#{e)!MENp^fyxhK$A|16 z80fulCEeJzBW;uc5hgNSs04|?p7faNr9`%+CnU(qvqDPrW3;fx#TGCFUX)AyWqOgV z3^l15FzgRX33-x80NJxzf-auiP0S4K*~QnBhQy++V$1b{{1svFV}Wt6I0x zau87T(}gIZ05o7aP$K0MUE1YhB4ir+`Cbzv;Za4ut#+h369Mftd_$mSm+QZrXR^JI zMrP=@fOz^tqqN&D`uie-xqqtZYP78t9pnVR!N!==KZ%FI%72Lb@+82C&DdtGX zfS8vF9gE*5LYrezrJO0bG93>~hun&d{%c+bL8Z3BCfxJXjwR*47m(jAO$SS>KjdV8 zOBd%w5){s2%MT^$LeRu?q@+2sS(el%JCm*er#jE<;`JHvOz=#ijQFIQagda9lnlGU zKc?U!c|4SLl}D6nEA+L}xk5*hfn}FO;bAP4M!po;Tz%xE%WdM(T3E5J z)^Q>{CiTI{nTi-+yhUoJ+-%q*h;Ef7WtM-bdb$7Xl6GREk!ZM{izA8=FU4IrhRDd& z&h494;4T)1lWuDNy#pN5Yys9DLYxg79iQSDZ%_tgkvP?Rk?Qbxs1{*5Wzak)U=BXP zH_`xADJ+pH@n}KMk}7$6=u?9bRjDE*=#{N7wfqWwHv1a-iiwqLkbCG#chCoJ6b~GA zebyF##s2U7CCc|?!rn2aq4qcbK8^h2huD93l>RAt|7&9BU&}xLI#kW-n#w5Z7`#(7 z?kQ-X01ijNDK^+`4ACT@i1R#1iXbAgdQ2^gY+B|RDL3RsdR0#uJmutF)yiloB`v-p z8P!h#y~MEhFp^}6=?hFZa3-$q_3pE$Z0Ae&9`Co*F#dIrI&^)nI!ZDGcq{dVgutDu!{t=ES4CFx)F)=ZvhFAVGkK*^2GL_KGT61 z-kW_72bEvh@S!v0!IHYz^NE65%rY4;R`nX|3o^ub(qNfKXXMRu;eJk3`K|M3D#FOV z9M~~whHR7+5A+ZUoJGBxSonoc1$e|IPjX`74@IWJf|Bw)RidFyMTRRf?yFN!!75s6 zLu_28r-oX@Y_v?tOiF@@5=w#*=0HZNc#_AGz|{Ju0f|g?5t=4nx~uWe`g zBPC6*plXJVXTrg&8Z0`lNLb-qP|jg z?ZrMKQ85q@ZA5Hz$~wX0uI)g4|*Ts~RVx6%vWJdA1k~&DWw_twI6> zq;>KJJpqyoT11G1bG2$)Up5_aP>jAb9ss?}BP}FzcN$Zx`nt`!cbDqZUM#!9Ul#r0 z$74$#EK)#9Y7XsFzb%S2JRv>7OjoTWP;q9sJ;63P@6{TdLzpK~7WPR1LHP%zJyi4~ z`UXmUwemh|cL27d?UxfM25%oC&iOj>rlNG|hWPGRR_B7;GYlTOfrZ2j%%iEb^h5$` z(@~5BG38eeva}AT&Wwg1$vYmBf#y2wN55nudYlemb`~P1eY#+HKyJoNG_Dx-lh3p- zGFE7DEB^*gP_-Cg>oZI!*92{5(T5->;>4T^i;a&OXu050{%x7|_$uT&kJTMFYB0*i z1Xfp(*=dVhz6lK)_~m_6;el*l?ty((=7Fx>s4;mUNWgAc8d>NeKlIjCv5Up0F#G;D zu%G}@7Z|_d84|zp88jE#r(`z`Hgr`S%E$8BS<|PUB;!?#{@9QiA~Px%0~$It2LZ1* zB=+*fXErC*rB^&upR9sclUbVsFCs36vOSb^dvs=ZRLiODjpdcE0D9 zwDA?$QI^o7Aj;BJG0jz?F8H&vQ$u~9w3Ll)2`7TVnZ~cGbz0fJj7PX%tb#X#p_FFo z@Anw;BpRs(V}7yM1GUO9UL#-Tp&1=C{Pfwx9crn7ECUnzW6RpN^1e^C_Q1qNT9j|7 z8`^|*c3LQnVarlRRS(;5<>NYQQTjS4x1_!pC!Ps4PcOEdfx7@zX>I>N z*W@i1`JqmJerGdMV4L~OKeF0*k0ZG5hS)919N?iBq(<9+aofBqh23&L^s)!kj%b`y zIJ-r=X7mo%v5|ms+rXZDJ%s3T&&)YWckX^y*!5vMy{*INEj_O@E5JCMW+xFiU7!_jTsPe3hv!K{)n_QcE5xQ!NRSggIxG>qiA&H+DJ3|e zgC5z4qndYcR3fnIT$oiRJO<&A5}x-(r4Trt5Apq>?dM!D;wPmT(p+#1nL?6;PHRyV z#6GEqj>X;9_z|ngg#-)%b_ym0>_ZlUGX6^M2Kg71$3OpEo+I*i3t|{k<}>ax_x@`I z#I^dA0dX#AQocst^503Rh@dwLxD^mS?+09)jGT|X;ZCB1rE#j3A~e?huFTFyjY*L6 zYJwiJQ{&dvusNH0*u0@tH%)6%Y)2Z<032&`S*F{9ZF~CLOkug)#u6`ZK5Va2bN@=hqf(eU0jmyE zXZ#5*n|(4+N+(_*)?I>~CGGu;ZId2|4UT>+#K}bKMo4NkT3I=T(?Zyv*wu^UYq@@h zkfq*UE5uOfh1-Naz`jdM@sD(JCnGnLa$qY7p}2vW6m51Vgg0E()52&qP2sVVP}0_J zLB1er7yoY1{ZIKyY-x6B{~k64{btht)4{rb%9rr>)~bu4oy&h+hN{(H+_4u?yMtTN znOpYyV)v@#90;HU3lyXp)l-IBf{GZiC<0W3tjNX+bUKvr{gMVRTP~ z{*V@j*trzClyYw@^XKtD-rsMglb=XFo^bM>+;F~bx?lM|b$M_3y65D+J{imZ=zX|; z!t)5|)AruB?V1IGuK|MEoZiL-T$xhA^4^CDFe2QuUU4UFy8~N!(jbHo{hoz z3EwG$%_04Vw~qil2G`R4`VYOeq;2b&+=l6btmY~-P)U;Ru&8BG|!us#?$o$l3k0lOhndGU<1q5%B&Ntzx^2g$S>HKZ{A7{Z?juy zqNhr^o-`s=G2#}EyU$}^#BkSW^aZi=+qT_3gg}TQ<}&{wn(){hTQw>=`Na})Aj;?a zmyyc(PHYJ}T5bs2 zd>B1f`zOtOX6tUKHOGW%2Nt};nAJO^8Jm5w#fM9p{CxlZqsX)i6xX5-BXysE(DI@W zVfBI8qL1E$@@FaXi>7W@aoJ%4RZT7W?a6u)sO}gnmUQnQFxK3((L6g@ros~|mXtYp zu6W6`{yTFd*Tk(#XP2(Dd{wA_i? zfi7mqA(rc@ZYb!|r4;9#84I_Rlj2DY7Mid`jq1hSbNe`X0zpcQ zJKP*3f?~5fVt0`wY3$a0hTUFbp~c$f^)@PBN?0wC70ag2VhXVeTZsBLzYe;aIC^>F zqA*-b($HGKpnmG_J|ynUT%%)N2B7brgk4$(UN}6dV(N)Rejc`0XjhJ2t3PMLHWq1Z zsgPEvPLy_5bYHzNtxLYT%K9oDM>1g)p#n$#p&h^(g8*nQz?d>fREUtOi6Urr1pe@*ua3aj+rPgvfvOOYLh}RW6npMxUH}TW&E;}i&oDsQT9lv zYKc_yn$iiUYE~R(;xJ(&BN=h5YSnXga->wsRd)weuKwMLzQ1C?$~?>I*3953iY zzHCkwL9302jk1L(qSfrSpDFw(Z%Ldswtc;0dbaJmIUBR4hend`mNLuCG;8VD&u%i( z+`%Rno=urnjh?-rW{bZ%TvdiM@`sq(Kb<}j@!93lN9rG1F4jW^j?kR zKF?yxvYnu47Q?)>y~A@A#=Nw4MtYRRytGdfw@>v7!?5fzenKTkymWJ;;Mznfy}%@|%lpUY&^x3x5t=^MA(FzLt!G#pj)mJ`>Yd2_joZX?nF#kdnGQe4yh{x%I zZ;aZbJyU#|g7O9MP+#-ya|T+EnuGem+;;Xt#Ge6|qCx}r0C_5IvlH=CU1!GOBR}iy zw?e;j+^&K8aXY<;+3c)e-Yc?bVNdCk5t@elG_0$GlC2c_+A4hvW%-PX<_i>*aG>_L0s4D9(S4yy-mFW^HA{Zj~iT+mD7 zch#QbaT{bddY<%&U9>lf8{(2qfZo9^f@v}Rpr2_TjBTuY)(FJT&Gg-DZP=rAa-Tvi zg*t$v2sW%u4in0;iwSEN+|<}OM)ung&?Bm$nGsL9g>`r>nHqb~(Nx^nC)vr>xKnur z^>wpa2YDCoU=_hws?*Rp`!;L%+3O%w;Y;UW7$LWG9cA|}xr^{p`LT7ljW6;hz^RUo zA7R{G{8o5;NA-YS0jYAFJZZn;HmRV7D%U4T4tf*NV{VB3`7;o9pbl@T4_OujJ71KeOH^wy<$SXh^aMn< zJic9+1gN^T=~Hq~k`~$A(tb2I*`8x&nEr*6eZrZyL(s;mtx95x931cIiMDc?sneQ7 ztxFrzql#~n!U5_coi{sJl1t`16I(369aGm>LsFQ2*Oz=`%CIWeWUh+bNz!6-OUp^?1CqIASlU%Tf5f!SuE+wEUmI)okIWwl5W!~PmFG*WM7AjG}`|z+KdvtTOPznL){i>4cyyj z3-*DLw|3g%mR?9O6gbG|Ia$*I{Rf9^Iz@UvW3g%FCA3<#RdcE^=#Wdh%L=n5^U6(e z+N{|5#15ZBTQjHROQ~3&r-5g53Yeudh;zz3Qb|-`3*idYoGA1RBQyXTFl=!s-wC&a zEi?k@Pex(@7%szyLH0*s2l=EC`n1zQb>2ec3>|&RXMWe-{w~^Z)hgD1Y?Hda(O_V#~Q=^UD;jo1dl0@KgO&EXUsRy zWmBtRK#N3zoH$Cy;hFg2_Gm~xJhK8v%~(7fzhERRvP|#Bus^H|v3VwJ?3liPht2C= zwmt^XjcG|-jxWT)aZz-tPE(KyDmFSv@*5uPliXn|m;B!Y;h)8mnCWr1q3=LA`$h`? zzY`m7hEA4-MmFDG#**JI^e+EJY$#3rBj@rZ+q#zGYMJjt2{s6C&;h2VC<4r=h?Gbs z3Xg%*dEBJCI^?SD-U|AOio7Q&&uc+MIydNXyS-%+ZC{cZWWbYVwl&%5dG*0p!tdw% z32gx7&U$a$0?&0Q!jLd(9d679rd$PvcqpnNVW_yECAluKOD0SO>3Ja9h{#Y!6uhhQ z{h71aBft}eN}bh=Hs;?5=86Ru-y!cE=fY-h64 zK&__f+FCPJNB6;6r`4O<3qun%%hWEOJ3I(^-DBZpFO`}ty$-RGp)vJ6ZtXCG&Azm^ zPp&rIla(5~H0pSRB-wYE%a(mr)j#zs_bO^^VpjWrQ_k!%>Yy0kMFk(A3W; zp-!Xyv2c}ah=-a}fIS3ls#H_8*hKALc-+7;$%ZJSf>=SC6A9u%;~$uz^^MW^O*pB8 z%(Hvz{kDiHt~!IHM2|8fxZe}uU#Z%#Am*ZyQ1=#4n>MR@$%cI#_B)>H#IYu00LAxZ z*T}3@2TuVz_>UVdrr)8|Bn`QrDU2o|XeXD6mQUqFv7K*N zkr+F^Bo>1hZ4_7~&AuDzhk%{<6A} z#HL?!%r zsz;mv_}%bZgz+OSRvzB9@7=~MPLpn)?y5R=Gy1nm;;q4pW}{`PTKOxq~isJ-QZixAbw8wBl=?%`K#+qk`LfwO_k zfsYWE$b1Ce5>FvljN8aU)Z5CvW`UECW{`&vKM*=eyio@h6~78jrm0=@X~QAtU?a{< z+r9Bd)7c&zuQt8HnxzTO`lMG;cUW5kEJ#HqcdBvurKVhwZ-FuHYY2-*)P6NGgsNHt zWMKN5tMcG)94E6*Y760ki$Ab!;-);8X$!mHgVaOqxEwEr}`iA?%H05yiNi9HQEMiAsgT^vH zn^GHG`p%eef9QXh+lsYep5sK|-2AB!uqdy_&Rpvf@|)9N3i{~RT5mT?8Ba<`hC{2- z;EFUNcO9sOUCn=Di@LPui@LlH5Lmv70p9Nu#lB4%KM&glegW(6;h@`5LP_3zLgaS< z_YAXIgyoN-ZXV5?a^jrb#mc8#Y>-_?q>yqL;(lf|9xC*gOt-D;o^qn0U~=9(im?v9 zkX$gu2dS@?S6UpY6*fH4meXrBXP@=lFwI@KaQx%S&VRL0lnEUYe`!d4TVu!N$Pzx| znL{C^9R-5}Te40~+E`wft+28`wH#0CQWkrd1Q!@eketw}&9fIo1P$G(=6dUy zio=4FhnP?NCV$*M5^aE=*^Ssp;{lg{0!0ppAP4&otk?|kK6$f3O+G76r9~q!o2Wxi z-26T#+;Vv?x*JR=`XauZPCtY==oHwia)^@7@T!|4^8tejAmFY~gZel5Ij zzPDO|x)s7X)bg~u`A~vN?e(3mxp%T!gMF_8rN-DH#ctFLScxU#EMBI85AM$MS{dj? zyAr)w@6k1eJJ!q+ERfK9Q zR$>hQjA*>cj_+1^hSXo_%>dv+Fdxu^WW(2xjHocsmUTioFfw?=OiB<$7_w(ye*>vE zgr7C!32f}$*J?~^T_QD~Uqqa-_e}}52@A$}F#NG)zz>JQv$w2e)T-YttkGvjVOiP| zdV?Ku))i)ckE)QD5=|X)zj#+?L1CZ0#ntVS;7Gc=G|vM^A}ot#9~>N@P^j}x907`F z5=HRQ(@v2rVK(x1p_vzazz6+sdj|}HmQ2W12(CC1q`N6)hyLB zADTvJnwzJQpuy8mf;xZ%MlVZ)ZJ0zIrUh25a3uv+tz@rjc#lvgrZ`94EZAd(+Ah~~ zin>;^1q-!NvPJe~jkq%X@=CZ%fBONmpa%E6sWD&%d8y?8bJqc%EC&m@Hg2dLa-XL+ z-eanmpwH;S2rDWVxR?RgZ0QEaGzXvg8u}-c?~wId5NC5xOY?ZS3&5TRPtJxj6p{Sw1ypEwGeC#N?XIkCuEl$G_~+m z4dRO&J?MNv>OQSX;M01kibc!m5>~^21^>tuJ{F7fr2>;$O>TeFbB;#)#P0!@1H1nT zn*Qn@l0%nHzkQ8YLB4>K@c--X;ooIJ&cMdRSnZz}>L1`KF?L+4PXHxo^8APOTe;{a z;j(*=jRScrB^0dl^g2muAf-i-3|UZT8Z>@)FcP_}U;*8Z;Q_-5Rd-J z_DWxWAFM%!Mf|XOZERqhekU4tPY{JuRE44mA9Qlyn9j<>vSX8=I~0<)YKM7dqYOWU zdZ3_|U1Ojq!y?(CMiM4@ssXVm73`uKYK2u>B`rUvLYn3hDv3y@too<@J+W?^P?qYp zkW4zwu@VO9j?e~sDrEFej{z@gp=U*UoMW}43%sh%{}^EZ^}?Lo4iUItu1T#g>Q?H1 z`@$k7rUow7|3s;ks?zeviYOnp+zdW4&`H7m6nwRr!1)w>6eWP>ROvjWM_jLQ8~M$Mh87*4cbH8)Pq0`sJ*SU^A;4{M*%fB8jK-z4ujx?DqS80|)jjg+ZII1VuLgr_H&B|LbS%b0^#JD645E=I01wAw<59sH;PEAPdQ zlK0+4U8L6jwyrXN17g_I!k=!Xo@dC`=!T(Zyy|HF)M(TU`?Gi(8+y;&BS@z>YK}2J z*GLCoIMj)4Mv$AP7Sx}^CSJ!$n0w#alj#{AXjMpCeuf?h;v_F8{3KB};A3e$eYmeq z?M;rt*f?^U?st~3jfv^aZcY!YFl`e<6y9i$V_CdXAW@Ku9?eoPoi8XX)yF_ro-(b_ zT>;>n>ZW~*MpV2O=~LC2wTIROY%CCA9(+(no&l}<*G|kKqW`J4?9{CtFsK~QuM2oV(y={Fu?;nD!$ebP+F92NOm@e2KxhGYo|=IbxT4(96hY6)t8y{&shi z-E(*JjmYx@XgZoHCwc(}1+xIbI746-bVWX?hX4koK42}Bg~gp?6Z8jEPdt*cI>b8! zM`Q`iDG?ha6eqAOn_#@`6f_2uAgl*?>z#avuX(SF^zN^~Y2aW4z%+p#OaOF(N`b&6??PQt1Ts3) zF{>&X8ZybHyOj;H_~o<<6|{?~7tA);`O?*I`2R+~eS0(y4J+v zq=_a7dVE$okS3KK8&|B@0`Yyx4b!$*8>ISiQPP|~NRjmXJE@mz^RiH3|5cpoqI^kT zLC0y*aM*^2H9Hkx)XFVJduQWTEMw-k8w67^O0YU!jTwi!+R%pzDD8Flv}||^F;wdy z+m5tZs%n^DF4z7LuDb|<(d%=@OYI!LUn&V~bM3C_+(Ua7=D;zmjUHA{pa2l3HY0A(ifuwZlb8c&oje00QP{=WZU#OL zGC=xgXlehxS}~<3l$L2@Mc!AZZ?N4+uP#A~Bt(A{FNz{uET| zAy@537L=YEs1L z6Hp9?LvzB6`22)`nJxNrNf@csWCO8@)=&)S{JxkNZtvvk%lXK>^XIh%SU_Ri?m~T- zft|%mQh5t_HCC0{@-6IoDHc{!OT%Gm)&cV9ES}5PCI9`jqCJz3e_ za5^EE>*UCl!bs-)N5N%+&tkn5OyAtOf<8AjRbxxjIvcaDD^`_lMVgR-R0JP25ED~M z@^r8-CJ07?12#0w?WYlGpGH&QKEMJofl$epbQkU-%w9h5m8nXft365F239AZJBDOY zjpkz74fDmQnShcHyLu6}ZImG&2miepI~N7mG;ycvNA=q~E8X$Chb3goqQSAm zEHD%nLGN+NkK+?mL!TAIbMy0mK^lj;#5v0-(fLCsockpl8Syiw|BFQUS34nQVB~D) z=<$!PVqC*RMMoX?gRYJT121MuKx$-x##tjSbUCPEYDQ)>4iJcv#^M13pJMDTyvZYB zAF3TW-&(JgEK=?eIbSA=MZmJMu!3c?Ug@>&cG~&io_F1L2@Ap;lV$MS=d{(?_R;wI zp2RKx{v80ugAZlb=Qn3!=p*&hFL+;X1vdOR82*f) z=&ky_&uQzm=;)D1eD$keZ@xs>yiW!G@|5lh1jX{qeOlTgc2lh`%KFl}b7wI1$713H za|Yltx>k$h0@_`L!FlJN0?hRiKWT8FBXGjO(uR;qkcNN1c-=kNn3~BDRA0m_6oYwI z+LI_$-w)3h*%#+(b`;SeNb0R0!4RiSV?tmhZAdy=ND*re0-tYdP^=WEzw>P5rWb8= z27tObRa!D@Qs;)Coz5utTh7o{(aL6}N}x#gu2yR6PP_Vlt1Uq($9a0C?@8L^ zqlgHAg7Fa2&WR4ZDx=EFkKv6+9Q(DJ($16@Tcs8-H$q|ei7lxaslYUysLv=jJ^$G4uuhQnepN;3;_ zp*mTZl3(Lsj)~=XD!GQ;Npge5iI7?}p(yLGCivv5L2D}3Wf#mfGNK_joFrgyGjOf*cH>%vBZWSw-Yf_? zkwGR6jawwWM1zu{Xs^~I3^hTCp?`HWSE>-pAG{ZSa z`bIvK^|ZpAb!xXCNnpeibHh3(eTF9P0R>}PEjwLoMr^F zB0CQUxGvwcSy?PycO`a^Lk-o|sW)`&>-V?gN^3WOipS`gOFEt;2uNCUT=T_PfalrmWpm` zmTJK;Gi-7T5mj}mWJi&wXs6CyXTY;%-^pEQApWV{Kb)%bR{&IJ$qpqCtpYbQf$|k8 z>W_iN0`DK{SFos?{mfLIL3ZU&QN|y--tzjp&Kar$kJlhzlVwkYz6Co&aVPRu9QobO z)q(@2){584I4CLHX?N)~@lAT`*irRkWfG+KAlK#&0t1s*PN>?ovJbwwJIPOpbMK2( zz5#?{lr5SstKa+@l!clK9<))r;#>KGH>sZj!uWUO9bYD)KJs>|pVD#OboJ-=zE$nu zKNW|qUehOe&Hgc$!Oa)5vgR%bJ_?eaDWL|Hnw{_lR-GMo1a2Ae2x}NV5}BHjjZ9-m zlqkNy$4r^(!^B~ajJ?r|xNM}vru zjlyDqS+566Xev6hXfDllunQ2_g+YaNNSfQu8c7u1m8!r*D^carkc$gPz~Jq;JA(aa zo#Rkp^(}IKLvga_Km>-0@8&?lBGGHB*9h=Uh*$%>r|xFQBn3w4_Hs>mT$A9EI@D90 z|A}>s;gYx$Yx6qmCAFM02Q9!gI}-HvKVU{?fKX^isgv%Mg+?;Fd&mrRS>aN&b|KxaCJ0^bBLcIPfSfdBP|`H3CJi_=^K=UKFj{K9g%n==M*wS@|X<(oVxk`xnEDow@Lz= ziW!ELgvJI@>mO=8D)HH$@PlGjCaPy4wLekD8P?T@Ke3)xzA^e4H;-$*yaOq8##ASK zUIXOo9MQAAKK+kQWPz#LFEduubA&_$yTc!(<%_z#hDY`2hxHc~FcU z_gj7whWx%A#`slU;f-+d&3%*#d>i*yuYqabji9k=YbGw=A{YG7GP%M8s|x~W;>K^M zD^&N3tB~8_j$iFbL|+zAM|gt=h8x`_?LE9fRp7)8qDzJYh>UKsWoiU>n4rWkC(pf- zIOqCq!s%m1IqZ{E^}S#1eoNRP z{9-Z^ZY>mhk_VtVfq|Fg%3fmzn4uB-;nLnP+}8TDdOKQ5gn7MKxUi-mmUulZdN0oV z$Jok3Y@Y%Jqwb9Hm%u=-P)A;z*iLrL*z);y{VMJ7^qY#zbuI&g@cYf*heu*0DddiM@zLXdJ#UH zJj@pkCFBJ$M!l}|X9w!y@sC+PN3fbPLa$SNh)&=R8LB!WE|J13=$nXpy^lS1nJ&a&$ugqS9i57__bi|c0Sxb{6fM5n*v76}f?aEU-n3V0b8kk42 zLiYpH`hai+6qxVFVNZG}?OVJN81D{KG)X1($mtHhMwLG4C&l!+NKQbYmK5p!XyTxW zx92p2n#q>T&Y;i337?k9XNvZu>`_WM1}!m%)v}rAHR@|ZcV@!&n0ENb_rJrt1&J#{ ztS`#=ubV3W4Q2cKwxpc>rh65;ANM;5|s3OnPq$|~9^VZwDvje0XGs1`C!JxmJeri3Ol*t{| zRM7$|D`&zZ4ck`1*xdcMYf2KPV{VX^w#Bm)1|?EZ(j?QIt>-I_YgR?-a=VWlX2dEE zf0_vcWUo1)n!man6`tg2i37rz5VSgG7|y2^$0pM-DWY6bBC_1c4k9aR_FV(gLr{-u zO`!)z@so#z(wg;KRhvQE)p&K{6j*d-Zb{@L106L}S8UiH^3A0*6S>oG;OM#@KV>i? zd|Tj0fRz``x^uqYU-N)-Z%qgF(A`NsN}l)Nb$n;AzVqQAi0m;?=6nJE_tXDHW34Yk z&HVXtum~djcU2zF92WzLF)%TGC;=QKv6&x7ii06{ zPZaW*Kn`ug9-O0ey;dl%bzRN4z^~-#iD{R-?Re}(Q1zB-rg3#C$*livry{9W1pY_2j3f9nBgpsG{qLO>5>)n>Z z#CU%(4LPoS(R#C0D&<(D{J4i2Q}XYfA|um7C|5$?X=fWJDl62T0LroJ7hBKe5Kg1Q zi3I*vIAqoG^MVS^uG@rTkEAal&)8Ip+F)8_axe$K_mr#kWsMNQf`=I4lDs@p<+%p& zz}KJi(iWkv030QmwH;J1U_57C1r4@}9MsPsd>>O1*}^rW_3I<{C6jxVYkOE7-MxQ1 zWwONeXIPn8PhhjsXUY^qCl%*_qY5=PD{$0^SwoG3P0H{&P^s7Oau3aw>_%{*J(?Rm9=mc0Wf3bDc)9xny%G}J;ALZWy#+- zt`%1}3dvROt9E$<@0zbg=2u;E=4&iIU3(T+igtAyoOqt6gPlBe|3-h(jLbiKjijf> zQBOAoHMG#si4)YDlxU4dyP}ykbItvx7pCsq9yW$_Y{jKFgv|vfbqfEK58yw3V*be6 z{ep^7><*$so7YKEO(q}wSMs=*5}R%A@_nydA3^Z_Tftm>y>D2+CCT7ro|M1hmC-5M zSQWI5G;=$$56J41_LGHi{>KJkm9&xn6_2FwBfj(}nSe01G%2~o`b@`&0 znkZeIrWIM52p6PL(Yef(tkGXZRhLY zP97y0#A24DW2&(TiJL} zDPCV3D*AuDum_lD z_{$4XZKe2hXzTnE> zmn`tVnZN$6X8w(ms#MXn`cet<)=9d}+E}iZ%s=T?#)#N=lM@n2tPnJ-8Y>OY_Q}4Y z<9HX%_O)auD!2{rg0Xp0CGU?DK&qTqzvN*i*H{Bmg~;tDK;guVC<4*~)PiKkZ))^~ zRD%^?WpD~!iT5B^MvMo`qN)%>YP_#B7O~bLHpD%xGy*?q8k2u_8S%T)qo}bG?>W=l z;0y{vpX8~IQYwZC3L}J3J(QF17`oZmCaLSE98#gAsfZz&1=g+JaXV@8YF0H#*}(XW zj<~br>SrMWIC&ZaPlvf6%vhV42>y?7$z`6OO$bZs3l>?6u|uyr3Ujp(*#=fsuS;>n zu|t4dcJy)SL=4Wm8pR!VFZ}i2j1d18M}LhE zO}@5B{R93ssObJBH{}(kmR=k{L+H1g3oE41-a-^I#6pOJf+rXpI(F3pPu67SCOz)D zo@bX;i69#^`QTI&qln3T#vETuX~v=iE}8(aw3 z3JQDfeqA={=Oe`~s3M5fs#G5K;)uY0zr~~LyJZL)f-ypOyuAWNwbJEjctGDZKvHHA zEJcXOweQ@9`QUfW$W0Ss5?PJIn0@<|n`j?{|8B@^A~DapQLv=%)Bj?&frJ zGxN+Gw+v_EqYpHR)4q4uzsEPKvpB!$SA0u-#kcPNg0=s@ZQVcPTi(&w#8Jl1$iVtv z(f?2VXoHIOUlIRNgpPKKMnymrrk>EK0`AVJ^%e4SXP>zh@S3oB6r4ZB43C?1@sI9~&0zLA% zVB*tT>F#5JZd&&VVp``=GNV|3sIRp4@M2m!{nU1%1>3i;wkwcN&;iX`zAS;e#3i~C zt|&8?eAfUITR046K*hxAT3KBZeWf>yGYy*P6dOFPhMvgvPId#h2;-EmBvJ7VJYq3 z^>j)cr-qPg156x!@4K_DDg6lnr~viP<8x+X-*ddaxta$?>x|Jm3^DAPgn-sH=ua5W zB1*?8>G^}yNd+!2G@X2TOO!jgBWh^^Q*ogrX*BW?39?&!#8&|+7>gBgAv08?`nCX| z2qS-zI_8i#FO*CI&Nla7?tW@MJ{P=kPOrw~!*X+v$1He6QL&&|$oJ633ed5)0cQ}) zmWPbEzsGlgEgGj_OzmSG&AzMp2m?&;6kwC{ur6j&Mdc3By9hLMTz(>j@PB^3)uFwW=P^ICSw>`SZKbufq$r5Yg9~Xv?STPM6Hr(b zV3c5jf_Cw%_N*PDBd`kV2Y4smHRKn$P7^j1t7|wMl$F*KHhe{1&Btt+T#v3!7u##t zq7VG+lE=hP`LqE)Z^3bTi}jePs%$w?x$aH?+4k!~J(QFT z9+Ezy?~S5^aA3PhSJ96|(o3JKk5-GL6YSR!C!uwHZLmn0Lr*76t!q zOogbNQQmuKN_UWMs>DkT#Zt#@mDcBnAoj}n{eMFjOkvY>f3y#pmM_pFkMgF{ zGYiZPGr7p28cDt?wN_*D23l1X9l-?>i!o25S8K7rG3KWqg{?-?81O3$0Wrx)aX$xq zdICYifk};I)^x3)yW!nNu?`hut_R+If40nMdJ9{0H{dhg zZDua}_JId+=TOpsp5iG8@MA|EYohNN%QtefIWDb`~51%qToyVG?)&{RRYJ=J1hG)r!AI=} zaq-LzLQ@)f@-~yOLR>sq_n?>-ac@Y8gIlpog#j;Q)oP`?PGjimnxk-y=^Ra>2 z@yNOpdPmyihG1G;_{x z946wtWwtJdCSr4VAfNyUG>Wga36L}xtL0%$2a1x2jZW)wMZp>w&pHUlPyyd{DS8hc|t>=-YlsS3^v|YCIz=+_Z0baeRwvQtJ?R} zUKziR2522XolR&xNRUrz?wltbIrD3bbcl#m4pfKT$WggQsQ^4yj_G_(1V7^e*624< zcqZjp7R;_oa&&AXP36p`R9Eo8r3u68YW-oD+&B*sxu>un;6=kWo)9IVIAM!AfkbG~Q#C~NUGLOGI1D6)7TbBOL)|DfOHjzLsS-k#(KOe4=L zu58)H+hrAH5n;MeQfEPZ#n?4`a`$#P9E-g@Le?oJ1^K;HFK?5fK`w=pFdCQQ*@Z=P zbnU&}{4xw;ZOXnFC$2}ZT#@*7%EL_dHjTZ_z3ob8bgk3l0QpAi`Pp-sBm>b%qQhvu zKevaNwDLTee~OGRh(!$!rH_wc%7^&Cd6sb6J*iAIYT54%_cEoImBWvDTF33;*N{y0 zA(L)Wo!EFv65v&Tb$Nf|?(+V0pch&RLd~egVX@oKpl6=Z`=}hms?r4tfwWgfi?QYa zQtuN?u;u}J^mUi;WDf&Tco2?xu-WVEf9t9|c`8eKhj#rZp!~q`M-Z z>b(HGB0#iyDJ};}a{&$CQmYZ^F$L2`(E-NkUGr|HBgN0I#=#^}NA{*Lsi|LC-LAgZY5jf?cYwJ_ zf2HPSE1G!MxN_RewH&nOU))%_;$_oNj4w$4fG09AsMR#ay8EL0oq@ChhAS3YZVCMk zEKzT6^y)d_LtH@_`|i>3#5RM*QJZ{SRfGXu>T8`%f`tKV311ioy4Buxycc5!I&-g| zehz#wgYb8UlR^D0pp#*Yl8oi>+2*CW@E2`GbQNl|2csltFNPLlKUV};<3uH@@&*ud zm~u{4!3KO;(j^3yM>u19T4rz-rcqgnA?rWJa_CHPhm1ed8M2qPf0eh~5C%GYN86QS z$wxQa{^tM8m=RzGxrYw9o$S8DDiWC8ov7IvhxCKUIzJ@#WIs(%^IK}LP^aWT3pI`< zHRFzB$(TK-6b_Z2ZEsr!J|x<6``i_S!_>E+r1fx=Dt*&7d-NHd+u2r7rkY&19I~NA z(qs`?+_#hE9TyqIeY-6lFjS~A&Ln)XV1Em!MpaxQxj^r@!_ja(=LNN}V8!}|(MCAL+axR=9yK3oBZha1o|cd8(ON27}z$81H4M+*bD_4-VU}c;9|LhgZS*4=4t|tT2P)IZOuR4|LZtJ zkmE&c7fl8qjn-DjAT`{M3|n;#P13;ph8_#DvB3}JspM+uO2xRqCqAZ2&YL-)Urjjx zqX=e@Vn!@z$T9|_hScd3(*mWy0av9~HEbJK;YA~}5dg)LpUfnoT)GqCn_Z|~yYG8=uq z7kQ)(+N%vXy!DkJmrgmI@twNzd?rADI5F830H9778+|DyTVjo! z!YR*OqmKQENkx;#;ja{e{WB17*thx(%C>c4)B{}Un?v^B8yaI$bx zGI9EU91uY<|FoLSHI`QLgY}r1BjUtf=p;%BB0!0;UyzO1q%oyJ-sbPk>pTJZP&gn_ zH7jt1d!>xMPw+CgRY%JMHDQQzgxgOrP@E~D#4!Q#NA4PIc78(28zzQ3KmMTZ$GT0xg>~%|+*<5xM;hFX-agJ^<`3nu! zwn=`UyJxzD&pr(F~?Z#ovL$t$ZtC<~n$vB5EQ!i1kW{+kR78wK?+Rv2^# zufaUA_cOY71L^wBT>7ur1{mxJ$wK?yiPn@ZKHvbjwAoX@Pcd|el~pTz#c~jwCa!)8 z8K#WDm7e4OxHk9K!`k2GVfBCY@8f#QekG@ZLrgs-lfx|LsLzvYB3^^<)7{l!nY z(!ws^FnFhCwzy3!Gn-wkZT|HA0Ims1W)h1@WS};X6T?3+3C!tdi~xg#H<1_)8^{YR z#BgLX=0WNiLdqJ(Kp8fHlqaoV2xKkq#neNmX)8-;X(=~vYczCf=(Q>IK5~pzS5an# z!(CUb@SImW^%_<4A#6HdfgQJ5YX5y+Mpx}Ht7{Tsp(ZPX3uqCT0hD8pQtwpGy9BIa zf4KUKEjlZ^Wi!hZK)s%jt1_z8m09DNw_ltjwWQI-ZNSQ3DhRSauZmUvImd0VRv^)= zVVS2WYouH7WjMPyCNbW>o2`5;_8Q6rY#)5>{CtxK7vnMV^E|3)jaNTLK?QWGyab>x zE!R~}k_D*j+iIVstGvvdoj+=Pa#q~wUz}faY%j`=@lj7vKNpPiUy8CGFFh< zgXP04L%U~mV+>+49R@3Sxag!+J!!6g=>jH^+@sK8pwT<90Q;Yn9)Rs#%T20Fr}1+G zL3p-HMikNY?7FiyI*O7LF!iD~(kZeVvj(&Hn0cu}qbj5dq9;0tsMR?xaRJ<*G)pBE zp!>CgX4MxlO1S~SU6M*TbKE>Tx>?Y%dIYM5DfLk{L|Y=qK#HIOCFEM-e&$U?J3%_q zSIW#MKR>%b=xwaX-H@pi0Su6S-Vkn#UL=d=i+vv7wQkw&blGjR_sk8fW9#yi`-OhA zkD2WV&sfE1;^~POoQS7MF*$G|Gy6qxDn2Hm!!TdoZ&@e6;#^x^&GbQ3rQWd`6Myn*t1G>`#T(vP!X}(_U%KyFCf`|MKr+@jK$S2V;%i+V%-y>3FEef{?=Hi;vVl|j z&v{<1OyD|FlnyeOW<4^xpKZN^pw~GfF-_t&L5>%SL4sACLe!PRg$t6XGf8UeebIWsH1u{|~KtRpos5al+aN|oBZ z$QNoyfk~Ss-}7n>D%r@2$`lb+6>)|eEJ=t;iIlp(Z9i`;6yXP>st0bn<(4SFjkpbU z-TZ_J8m)phY#Z#pVBFgS(PkqWdNkjT+vS|5>8mb`nprO<;hr?vqf>3oqh4>?b9W@& zs2JIbDrsSv?b=)I?Vtu0UvDDwC@+LD!YwGl!m{Bg2)Ml@Zpl2g!5p+ziL}uMY@btVL^_v!g0d6#epVaAS7j4=+C^BH7cadVma*PGOj`y(WI2zWpoDvZc3NyS(9bhHN0x z6`^eWf(_OnWfk3kLB@H7o6C$#dEA;Y&M)LmU@T?gV5@4Bs`FF{_0G#Qh2=N&iY_58 z4B2@3?G=~fHtp2}GUO<`NHY<>0urD&xF<8y&RI}$6Y|h?!-GSt`i)PaEk>{_4%tWe zB{A<#0&A9dL@-*E*YubxP#*FgvwKt`H{8^h=2Mh?SGHg@U$$V(NEYMR;>Ao1pZFG3 z6Od}n_zIe_O(->bYWVcM1ygS?I`(Hs1)~i`lXhFGIQ=IzJf>{Qey$8M@6Rdb84elO zB#Z!eY?gx%5Bh670#~r#qK16J?bS2uIJLS(soMPwQaWAackoXczTGbNE9%{dIHb`_ z%A`>sE6S?+E6QJoc;!`zWEWv|p#$>hjx3F@z$&x-uj4vvGV+smL5C!xlp`EoMt3-) z9QU#aKO=}3UHThO!NbMw6J(y{Q@Uc~XGTo!_Z(zr);6Z{#DX~y*Xq!{xe$56YC&tR zU-7Oqh}?0^kh+gMw(3Ilp^+iC=Jc+diJmGpSf8Q(jV=CiW7PZ^qrv|g`BlLJ0kQqh z*uu`%!^Y0VN!Z%J$w}48!0ewJ&ga$Em2gB+KGJY8TrquxfP`T%1RS0jwC@FN+QxK}mF{!Cbp{~0_>Oy&!akHNO9P=e7bXs&lm{Cxt%_pnzlKl z{P(lKK)uS7!a&5CnW}e!05zW)Bl)Ymigy{&_>?(!=PI zY0rW0GAc}T_6tv{>zaQS@`KHK^Z7~DmdEx?TSUpN+$0IxB6gC!x1P^&ZqDGp=^FtM#PY7~rzm=|R^l^OePG-t|msn$pXu zk#=nkx%G3k_JQ6CO*#0=E1qZTl^J;hU!(5O!Kb<+>c~OK zKS-L|og2mtCFg^2;))uTKj`3U+Z%0@OS*SPx3wxz@nEK$n!@pVVUH5raA4@c@|9UG z)*1OC#o{PQ6;{QWnOTNP_&HyomySSK-Xb)XDEYymUrKF+BUa!jI0P^E|Z~ z##kiqh7|rf1m^-j@5uWH2k~)r1JjopBvC%T$;UD?z z^@G>AH0uwCb)E;pL?+c=gHK-nO~fGH6=Lsi7?)2`r5NOda$uSDW*!UfkV9c=iKGzC z-NFBjmjT&KW~phHK+=5`a1R2BivB%xi##Oczv)Z8nkn_)9pV3T<-EQ9eGmU(-2^|Z z`+t=)f*#H$Ms~&~GA7Oj|F;hOW8(ZDq8+kB*({YR0!2mTYZdGZ0Ub~v7{*V)SS}dg zc(CNmMFYK|!Nj#O+UzHe+)EF$@dJx^P#0WdKb6xrv`o){+iKevAgH+Fq}L#cJy7=~wgYB$U1icITt#VHpH zW(MVhV4#!v+g(*gVK>&~TadcQl5j0%T6OXRacyd$RGypAnv-#_Kpj;;VPn1T-$yY+ zCacJKct+}!*?DT(rsH&BECcdu_a*MAD%65Krz&|hz^MEOKV53N+;cD%JQoV(MK`W> zww4A6GrHqobfKmmkn1hw{sh=)es^`Bw@{l!B-3v1w#*b;(S!KYw~?r#tI-Ly1H%p4 z@BOkY?jXhaMCW0gGpO;XIpkC3hp)kiM4ug_l^B5+l?v?z18DO`eGtXjTB# zdX}F9nhm8+hyD!L4cc*n;`6&v`3pw%En-nDquAcR2J`+mk#94Y zkU&Rcn*q{*qTngLpOD%a@~T^r(&}J4d?^1-MqYo46HtVh8l&+2F{B5rfGpXlb$M6l zBsxZ@0ywJ)vNG06rY@U(qerjE+{iM_^)7dG2!$hb;iU@JPK%C*-0uu~8{uaIoLr`y2iJvCzqPFHnI8MYxcA$R|NY8-{a-r|01uja+;;wEZH)qTbl1m z6v{VL#*bB&tx`Jeyq0JkYdEH#wx@qZIxSWfE_PP2SKG=>#SNlHC8C8-$CY5#J;PpJ zitRxw<}RgvMMw|7hE2NSHwF<4EkZO3O(I$fO(Gw^y+9I=8bPs%m)`w)D1!bMl@rG+ z0*YOP=DM3u!YD8@`UKw?CDA~MrDic%P*)o-_DLTyQ1Vu@VxP?-RL&pH?3jJKJ61JvxqSgjx{{_QhWgEKDD8VC3Rn8Nc3XL%n2U&7d* zhXa(QA(DkTV{@IRdF)n3dOz=u)qdgcv4dhJvpn6l2NVR*&#MprM(>Eov|u{lJcy4_ ziBUnd!hu(*a$-@owy!E*J$z9Y@&EZi8&eWt6C;Phoy_nMg;}NHX1(Adn+8(7?uVDQ zXVJU-z$HAz08?N&)7u6?N5WnArck;GHL&3L&O#;T|IHmXUVQ^DkQtMV4}gEv-$f?_ zRw0>;5FS=jIap=I%~UiA9&W;(Ryvq%eC*Ijw%=mH4zXcauF~Y>N{D0DIS_V>9xS=Q z#hxNwa6PLU?_t?Gj~9q-oaAA=8ky>41p^f45QgyXRnyItvdKaBUQ5aDK?Yu5XDlaow84Hn@nb#&i1i*9ssLZbu<=$YCmZL9l+*sZ6*J)2cQXRfvQiuDhG z`5}U=WsO-pd7+ru!Q7Lr2i$K%Mn3lefhp`1>yOzxJ%d%@`|2n_&*j z!-7#-jJ8gbG!KkQ!kCmvb-<9V;Wh~OdY&L>V$$6r`{0I1yaeeeEjX_`{adTw$kLED zoYXfTL1(RT?ca-}-%JuVm%;G$)R)ebBpyLJB&YBcT&-%l#IN^yG1N&hk|R8OPWV*3 zq#SgIZk9pc+aEA%6I9_V@_K}%;+klO83gN11k3^2a!^dv;-ZMgvT;>Z;<9nCldEbyBV91%Xb|G9!u;dh zUZ7`3dV$;d0>2;9`hj%bh;$Z_Tzr8!@9WOqdi$ZKZ}EBx&q($yxch|sbK`U1GoG;C z)j3ALA^)f5+QwsH-1vDYXnqI~`~Rl7{ztI>CrFh|oc_Q0_iW`ErJwotuNDbp%?K2f zIx0=ndcMC&0T4}05VB@zl#ahRb^$gLQUqkO8BC7Ljc&ENT?0`82mW`Ly?cCnkUp8J zVEN$l79HUQQ831v}XhC;5y#{J0KbM#?o!MwjY>6$~?dWQ)?0WQWS!II5VFb5A*!rp3(C z1WG9_OSH+>k&s!uBaGyB9gJHHVXiqgY5Oz*G`x`8T;0Eu#}(2ojRVp|?rxFJ$tjm> z48tww@#_?UAui#U3|%KoG9Qv}bkbAo<(h7xu!ryo;KKxfP0s{tqLzwHe~V1ERuHLL z*S>74o^&`DNZeC@P`=gD(NXqKlP`62gl)*)5T-A6u}$~omstCmA|pV*i9R#7%|Y&< zZzJj_6)5ThUpS+j9WPK8?}GVx}@B9wnTK>vDdBs39JXd)(QCnR{?C zob^VFFsSH0&ZB$EXK?WqWC?2moT;98YXh9{6JY1}19V}|>DVsbB!lz$>gUeyiDY-C z5yVyBo}mDzPSnH%%Ky0e{Z)Tw43-mvD4x~E!I`7>sbJOe7t~85W(E};U{$|icg}_W z?rQ|0D#WK;ANt_;Ldjq*r;ke!i#aKxY?s6P211W9tjAI<0}yQ3fcYgO85DC zkU}B@i0dBfjzeN38DYbl%MSi)7&-g=b=Tpa2@wHP%FWakEHLiZ+5ZlbO?AzH_8zVO zkJ2HMtzCv?23xY&kDnu`!_QMYxaC)EmoVZC9P4i3e)|fDyJ)9~Mw0Ry#ATj|b65RA zQdYpbZhR1{FgOy#pzfg%Nf(Dik-$g-MPoqCD+Xk#eEneC1>r9J{|uOR2;QFPpGkQs z>|ej=|6c;;zaBJzMx-9f3hEaa8d!<|D5}sB3t44@zIOf{BBAn7an*f9Cx4jCRUH>J z@x&!3mlTOl(amtrMw5ln0-43adP$1{wt}JMCAG!X`=@U&zMnte#=lPHi3S?00DVQj z-t3>wF+?un-!jo5bmS|S%Vwq3Z- zVao<=P zJ>H11x9%{yF*lh2Bu0p7%kZMHqLd_sMP#`UA+5!olofXYXq36Ovjj!NJpfUP3$Dzl zg5KneF?UBi8jQ74LC``TpGle8#1e_qEY|!yEK{gQU@GiwKw-hm(o&e&C-5KztpsUj z+PP4vQCY5Kec05HKIY6QBcC*JVBEmqXrBf)#&>2ihfFN0d^nC?Uwu8!bX^{`qd2{y zSVZsuvRa3&3a3t%wO=8S+3Vh)=h;(PC_0+_v1q0sqsWe}6gv1fu|>J4dZSGI0i;wc zHcMY7`s6Zikp|B3g=>hTszajfscK`8u}n%luIK!?U4p54NAUvKQiHS)gGv1w(-MmG zNp6Z4muM8Z`}M#?_CkPGjzd!%R}Rb3hy(aszuO^&I4(BL9rpc}vm{gkvpB%0)^V)`6Vz85C5F z4AG7CCqy@p^xq;rr{?oj#Q33p5bf7Vu7tby7Fn+8dXqVAl+zxRwN~On16khmIEbSxkbe+tU9% zVpVW#laU+)pZ9oduan?-AU2sHq3B%>`2 zrAqJZ&Mslr3)2fb02I!Ol!-5C(~LQkaUS)0NeIj0tL^rWNN?yc^Uj#ZbTnBxAG6=7 z4Dy5fFOQ3M>m>O%P}8|54X&!~8unqQ*ZSNhAaWADpwaBK1`{8D z5~7%)$nJuG@c)dlSMEwgQMhB;Cft#No-kDDL$^@5L!F>{W9li~s(8!vugq2MT5uQc zV!xCGKo{I-y|e^fS86X%yukHT?s~oSMB!8XXFh*-MDSH^=%94}j(P6c$zXzhmiizS z$~RbV;w3s@CxX6r@W$jrpdTL)#l4*a>DKL^q!$JH z4Cj;ahtxn!@G%M+JZk|&MVgD%vCB*twx*kM)_{gbUr#lg=Y#H$Pbw=pPAq_h>yre) zxLp!4#6st6?zTRD{3jW8EUG+d4MWL@a;j#e8=5_$meAx&$Y6?Wyr=60wququq`Q&c zwjt+VELoL9rr`2Jq*vhAuJ5-^^;eF3UMKaaFDsHkaQ0LVaCUV&Mc7Avsd_=O<& zLdaF~n`$uUMhKW)Z*SxD9$;pIsuRq?bV7 z-A!l?=1V*OEFI3wW1`_A>@32Z@7R+b0CMps!=`bJl*B%d{G;b(>msRHO!(LI zT=RVC0PE0Z`>WogUcv`yZhU@ROP;$q$R!6IgcP3}F3_Aq{Cn;E=->TXj!DtyA~Z{i zhCzBOAQg>XT60TXmbPA_v*_e(=1h*8jpJk~5-A~))gBMVquYj4tFNuF1ls0)yo5Qp zf}qdTJjGKuMTZLqt)4(veKjmp=SovFIxJ&|-|w>VIG#eZupl_x*+9C#S;xmZy}Pl4 zcMd*<@%bXXM4hZ`y|MhNR4_&|yWm!+1Jhjuvd>pcf{v4yEB^(Xq`_!>IF+QqVtiwsvxhW;SN@#L{Y&LxUUrVO2rX8zm6>@zzO`^PFn+u zOpzHxvk}jba*P!@DByklS3gx zVX~geH7}U9At>7%^m3W*G{MY5 zG#;ilN)}Uxse|Jf$rzI-wN6RY#H0P4C@C_?Wz&ti^jaiNE|cU5BDgppxC655FpWpN zs%Le1*;-5Q2xfd$I|9M;HJgJC#}0Kh`Hn=v&SAA0O)7&Xk`5Nic}cgs>Cwke{zd zy@MF*LhQrL5G9Gi+keZM{ig%t+2uK+@<#)47XSZXcK=CL{8yFv{|>}2`9OMW0q$-u zuM>0reRvPWB#gF81Cfw8WCiIflH>3u3HP@|U6HWk#8^+XgweDoWCc2+4!{=Eib0CC zLyG0=_qkd^sQD{S3u;|gW(6xwD?<5uGr#A+Z8%zwNW6dhzM3@I#jdTbrLV1dbk6vF z?740H*7rB59_DoK$rgFljz+)rNXn4Y|LqS9Nu&HK@JF}IKN`QPe&=2U%k)e9NCd0s z0pQvbgr6{ceHeoi1Q^JTN zw5y(sUn=k$4z}@vvRO3{>$><2cF~J?&qlFb?q~{&W}jAAyfXX!^=@&EGrIKd@AyWU zCT}w6!m18;(Y-6Iqr3H7+ZwsuMUB0Ckix1~>i^lBS{+XtS#+S9lQyid#H>dJ#k0egL zBXk5eUr`+$@q^d)=x@QJ-o?HVdLsM!ar(KuE}#-uRuOyXp^9uHN7sVHMk@7n=_@5ZhATo4g+1 z$~&%CoqwwmyFW`<5!%#_bg;6drqWQ*h3lCn$iKLky!`RLtL}Pl zdo4dizL0o&q<2w)YLVQd&%0%R{1m^)!c#6EXo2jkKI}elCA%x{o?qUDx559t5c>Bb zzl8OTfP4w;A_IMsB;{IuFn@6r_vCfaLwXnA`Q6pBe%XD&#y{YXzo+2!7B0e7eDE;7 zgHvsVLxAY}>u2l=%1aXJ6Y7)ZA=Mc$8)BFx4 z8xFq<(g)(~vPG^JD%M<#Xzfjy<}RHA#4;H_o+i9s|=8+VAnt`MOfog0a&n1PL*x$ z!$c=XFsnGAC1)9hQtoR&`gVI(b44vIl-( z6$j|e9hfXyLnrIXQZljcOA7j-CVyp|>&SSl$e(LU>WJ-ndUpAHcE+D?2{&06cV((L zL=MNGx6TdPm7QM+f8i=$v?jTcA8m=ya-H4Ts%#cUcww>&8u&%>ox&!CWOxJS%vX12 z5g!@Z+qh9|Da~&|Goi6E2SE*TTgTApZb1vb%68BxZ-*^Kq4uL81`WZw>a+U`blB`* zK#3LX7}oKiK%pe3LaDs_o|gaUHL)%Z>G$d!l*KL8`Ab|N5&3W>Gwkp_*88#PNT~S7U6!o!L{jH#I<`Vs8=+1jLXLA5W=@}{A=J2}l#q>0eqK^80Q`~>Q+d4`@iMa= zvuyk6>F-XcY6CQWL^L=GgB!ysbShX~4!jjwjJe`7>zuwEk@VDq+ZOk5w547VG5^1E zft_J<*5=7eawB!orq0Yi``#?9Wc8r}mS08tB!-ZH+hW@##7A%_`+_=6frPTRxxAoy z1=ZKP?MK~0)pkBXmW%qmU1hIOlw+&e=cZ;cG3|PeC zgrpw|-Wp9rmAIhk9kw*)Kv?Md(M*I2YC`zxY>c%_CQvfZ!(V?QfKW6{%qDbIBbax8 zia9lKw0%-0yftXex`c8b&$BI)goR9UFI$iTYIj8&e7e$s9i-=&BjYWs{`9s2uvmi0 zQ;?d`M6s^l-~I*Wtxs~Z)e_UyWfOItq85B1^Oau@<8h^lQC~pY`ceWe;B-nh;h^}H zMXY36%g!t#2K2DdEAUCnLZPg<4Q((M=2p+(_Kb`f$fX)bzhbVVF}E%fSq2<#0F+ab zNILD#%x!+hegfv9d`K&Gs^kddBg>8rRYSb){n2kvqvDW3^MHGsZuB%&dPc>Jwup*wt8TeG; zLAnHCD|CZo7&(u#y#V`X$YX3YvW6ALXVn(_-UEf$(@7bzN+9e{slE;%uE|-d3CEN) z>6xtmV;NrJZr(`I>G0J`5KK}xsG#piENDF+pmgbu<=^~5gBza?W*8brphMowM2 zclUCfz^XIP?hI$&x_k~kNK=DBcIsrqxf>G@hLTj=FEANFPb56^Z4YRhAlOlRAie5? zTWf|OsX!YdZAddM1Vnc0lVj$CB0Anro*6Qjk+eXc7F?v`fHHi^(x|nnvExy{ElV z1GuVi=S6_4+{IDhsjg91xC^89n$c8#JHCF0i#4FD?bg%s{v(OYIuwcRPp916>(3o? zFJ*ZyWS&NmP@s%Zy4w0X0bOi)RDf+@J?J;mxml^%oVm_RMa=w$=}?k@!EBz#>b3G} zi1#-n^Lf?VKUy*+xPVama87fkG(9?b?WZr5hib@0ukchJ22td9n3MW?5OU!5G@T)G zevG-7SW_Mh_5R;*{biOkx8wqUm>Mwe?J&$=D9n(-HWEgCQTmpw^M%Y=EsSG(gY83h z+1WGjvumC$0;sX)`;2#OF|wy*+1Y)*1&zpS5}aJ=*+IT5yI-0VtDF7}iXBaywww-I z{YN##(za^4)(Lggci=kQgkNQi?`y7L;4mAq@(biDcS&?PXfx;g9Crb9Uo>9D5kODegvc-0FZq9dP#oI`B7yEXXKc|SdRRCTc?t0#N zk??>WmpeozU2mGN{7AVWK9{@l7irYoi+$+3V!9rr?|Hz={!Yh>XjfQ{K!kWG-Phpt z0-zNr{-%#G@&*9U>6Jrhg+5aeF^eive;T2p z-~uRFRhSjq&ANyPaVjsGdl@D-uNIJFUR9jmgJ+qGVVoc~Quc@@#1Yah_nW-oJ7O?M(PQX~LT_4^mWAn+3l7G(EwROf68eB}O zUWBX#NxPd3a^bI(bGwdCxean^*pnPOnD9>2((~BoR#pc?wACDw!#kKH(yOSHoK2`U zYN$PiZhf3hGMIE!o&b7J$u*aym$lT)N$E+P{A#9@jdMCUuYVNOj`M=3jFP>xxn6!8 z;}q@eMOjJ^Jf;}ik{!?Qa7=S-t3jbAtx%L? zRx6>R)6uA)QA$4Q*e}7<$)^^hION1VCElQJL(;XuB6znRE}$6Rja9CC5ft7%%kScS5eV+ z%vV$y$n(te!b|_tSVM%6@0B^K?DB`(oWcgJ*k4ILK;4{Mi~;fpZw;SxXT*w6AxJL+ zdHY+_GzS7=Q6dDD@fV*uEgA`1CBvmyNTZPI!o>u5YG2fozn;q<>mvv&OMH+|LQPgx zRv}r*<*0PrqQj9B)vjdOjKb`ET;renpC#VVG#0xeFJ2uEwV(e#T{=xqaQ2#Bqb>gV zrLE?h|DmWxr%1P)ER`hXa-_DnWCGHH(3aJQ3R0t7GoP%NsID6=mFpN?qb&uZQ>tA{ z&4#d#?Q%r+wpBsRM%{WkUOjHpagS~3$pw1|C;6F@u_+PYmpWfg?S?FMtx%(u?B!A% zN#&f#{*16Hy6YxcTeB$!`m8i@74-dE$3xyjTn$eZZ!UQU`CP1gzz76S?JJL34&j9u zm0Q9?PNA^W

j$kz36CtBAXnnqK~VW?awts8;zx#M3)m+(Sc6H$O`)SxEVaRmUS6 zZ=1haWt&9W?reM`>47aHoLJN_3~6A|3^NiEseFVBCc+K=NFg7D=tu`C<2h{n8Pc2I z`b(Z8NZ{z2(9Omg{ssF}0h9C=3gjA{3Siv%iRIBw+efS(L)FjImGgii1@) z;8)2im8qdwohLlOADwSYy(VIus0E${$G^7eCh65$$LjZ(I4nSV?Infrn;FM&nozV( zE>gcek5fESUO8uu4xC-#JJBC^>}&1)P=-~=>dI>imk^%7u(cEx-#WCvgwuEf+|lzk z>^KnEeyvUkE;+{8Qa0gKJ^0W@VzfPtro(^@ZhDFB+eFtPveNyS5sA4y7*&m5gzeMp zwqBD5pZ1jmoro4|wbd{vikV%rP?nF0O@Xow@ks6f z2tibsYp5V}ABk6Zb1qeuP-Rl82&q_}-NATjOI(bsfz7LMawTSu>wk$4hjn^m<^Cw` zlqF8CNCtcn+$D|W)09HU&$T2sm?PXsod&0}LY)!p1R>(K8|h1N9@vq0ECpZm>uC>S zFy;_UJ=`MGh+ou!Q9TYl`G-BV(OAOeU|g9@Vb<_IaKZgwgI*%+qmxD6*sJ7dNbuxL z;y1{d#&Oy1u40rQ=mQcuOd0w_ff|FcwlEuZILphH2wV(@l)_-?6dYq>vS-3Z=W*|K zF_oOADbKNsqjAL{TO`)E1UyB&y=a)*@qhE>wBb7Ch}>`aRd&Xk$^m<{kIJbX=amsw zmKdvsjKW}~LQfh;(5B4G zs+U9<+>^E>B>?a$MmTpsN^jva#{T`+a>9?_$*&2W4j9SKIn#xD*`y<{P`@r`yDmqp z{pf|=6H%M5QN^>m(cgshOO|ToX33QqaGF>X)f~DLo_2jZBwC9t`+vyIv+87URH;^z zBZ|03;u;$o+KM(+^e)P4%d2%YG&>vCN#R973U&SD3vk9JoQVA17-YeT_u`EQPNIv@ zg_efLjQA;at?6-sAceZtTU=(LA1JyR)JT=arrSdYSOXGA4pnx zdqr3FtgD2WPFgA~m~NQK4*@$n@CGZ9R{bQ;hnife#TtI|Hg zz~NsZnNzqHx5A#`a5?GQ88;LV5=R$gBEW0n@7J8Q@t%Ym(NSwetJ)RKx5ihA%76X4 zBJSC&xUjgoV?nOqHHzt$68mj;)Atmq2;mMDFSjH%Ue-j?#z?o0cs2y^F=aj7(6?4- zu&RudiY=oruLP(xPO9i#Q{o1_4?d2Gi%uY? z#`HWOoD}ewMxisjn1>l9buv^Ha$z!dRSI}LIbVF0OIuOFjS1br#>@Zm@p7vhYgNGV zMe=d$RpJJpeO;xbrk;a#qIZ#kr=-&-1(-ZitEwtTud)dOTZ^$)v&v0-DzqWDnQGKLLjqS+(on-NJvkW=o1q`yg9t3dIideH+Cs5==sKf zOj@p-Te{I|4(&%IH0)>e+q%Yh>ka4G$l2V5l((-@TWPaCUXQEf5Nn&bBm+>d=lkiH zU~zGZNukyF?mOMkfjw-AeR&d5!Zl1gIGayJQoJ^>GG_O1YL0M`_V(wx|B^E!3!!^? z1pS$h<8!n3G0&z~oz#D*o4L3tF~Ia}BDo;;wP1!|I-oKi{Wmh^KTh?iysYXqevz8u zrHUQlIV#ST*-EfDOY?ee!7pZ6&@XvOh6M+j0w#!^AT!ZE*s04^!F=DzKA6GYBNi5@tN z*x;3_yOGyQ(d0TPqoJS_?bZ2PCjk_9L7?_%xf+J3W?1!L$R#3!J?c*8D=aE^?xmZy z$5ERkke7*{4?nmArsXB}*p~=Niy0~bY@`F8&i~QWcveL<7TU|jp}MrAr=@0GrFT}h*p!+%pfYN+9pvbl8bcbp>t|xX_ru<-}Af}-_ z=VcqmRzxI975^6jnB`@Pls)m;=SyAea;UnjwTmc`EY|h5hyA}!AEPvN-u>1(2^zNP zw0+;Qt+tk6U&M7b7I?(mcmw4=g&63N^{sdW+8r6k&lpsghoT+2ny~!A-DGe@E6WJv z5=e#E*o6QU2?iKf5mE0CvpB{DDd5J?7j|;xPAYqiN_r>M)OhXWc8ddTZCNkN!QZrl z+xBmnABXl5v6g8kh)Rl1!W0pXCOGlTY;*UPmMl>vYhh(r!NS^rpX}j|RR3>LYnF9O zd6g?Gcz5jZa6xGjk9HeX_?DJrLvufDa8}zo^)KuEZ&5x)# zl5Cuwtcp$~%v6E`d@ZG;Ceo?rA4*-sV$zL{jaBVv7&_1 z#7D7MX0*s$g-`j!%7f4pa4osGWosp)fM?6*5cTL=GO64<+Tz-A&_ARh$(V@>jY0i3 zULJW~>g%w0q&BZn=vNEi=4%-!IMc$|SI~d*D~6hk#~?^}06k2lx%ce>GGWf1d>iq% zoe7_S@{+r1D5EKH6adHSzSQP@*z9p9@q7e8R3SX|dbm_E0CbhK`|Q3&ECI1Ca87rzcsP0>r27v=g?)+!UF4M@%P^|5$G*ccX;hbxySwYQ?d0VIHFv)MH*zIL*% z)?YV>oVzUYIb<nc z_Ic{&IR_6zYv5Z^!VX+@k;|LZ?*2GwP zY|^xmM}-XU0}`)=YmnsS0s|viNXV7r@^QAt2LWqpI@6n(r63_T4dROlGWFoy$rYRt zXyAeZXR3;e723Wvqu+X(0f(ItJ;LoV6)q~vZD-7*=`1Ub%cITILKfXFGnIgCZ1s+h zZLD!n3oP28BLHd5y`!3jk3@UvKM3tlvSG`i>eeii#xL^#Q(I4^py@(`F_TN;d^pHh zuEMsCjyAe4N8=ql_Rh!F3%L++sZAK!;I=x#oo`94=>a*vK_QmM`N5 z#_+Xx2j>trmHtCtEzCh`>IYUYE})^hrNT{~YeR6v+dnTrKA`>-S9V)eA2Kq=eoivv zTQJTc#3#9hvtcIu;%d(atDNFaiQc62AVah)=I)`Wam6B3=3ngct>lmf|_|f+sx_ zpHsYV$51go2@cz_0rG7pbMYD@#SNijKW&(e^e zR%14AZ%?mw#`X6_%R18q3Fpa_)5(j8?sf%%YAxJxK9dN@B0nFDY;A3OKZ+8u?iR3B z44mIa!O4sy{$Y+J({C)yrSXg`*AJgXIx0@^4+u&}ix>y+dg|Q3+C{7ophH<5X3$Sj zSwKtOga<^29~*td7vuW(l?d0Sk(0;ulp5%w7hkD(rP^F!H9cK#rCfeCe4A0Msw5iZo;{2fZ5&O+5u`QDw)`v?1Yw0juF8 zoch7)<|UWMQyVW;)l@|rC!wQ)M$mdYIQV-va#ua4P$QcW3`Rod@5)2dzaQUKVRtGq z?(FIP$=_a-YsnM223Yt9QI^KDk2cRcG*=uka$yz)&R9o9866Px-#6`DYR(GR{!^(Z zqwLB+3Qqw_P7saAx3UE}d0+WhUVW^$ zPk%W?R@9M$s~OqQ2( zRY%7^j9!1yR`IY#82HtDs9jDcIN^U|blms>PFP`VG1pAqzSpk#$3b)=*uFh=o85#i zl}0#*WvmY>vf?H1MRF)_j*0<2vVVs`nNvM1dD_-t`Y*pyS7PZn)@kKNOFz=04pk^# zBS&Fq1a?CB?Qf-~fH!snlzBenSm5!?z1jkj|3OywU+Tqp6lsU#@6VM-IsS+e(zj~S zz6k&2^Jo-sHq4zAs7aiC`kkx&{l(ov>uZPvmspf4m;&I2q?{<~EiF;MHEZ-YoZfC; z!||f$V6GHRH;eAhc^xY}E`A9OO>J4bZ^wk1hUB4}QTi?5!FY1iV|Z3rpI#24vus10 zIB`!A#NIOT^i!VEOjjRUdN|$Jx$i<|W}tU7Yp1tdr}h^=p1MWnl4q_}MZO@y({FSN zF*UIw&Wet)Xgq+8U-F z?ZT8!s;wHyB3i3mp3Qn6UOxrBvvN%hT|7P(lnGZ{6)l}f{qq`Dli$-J%E?1_lNZlH zhBq!6JIKc)ZJK{}u{b{CdF}%y;iX~szoW`Zw>0RPCgkJaw&i9j&C@QZ`v=pKbHLKAJ#x2{6gfG`tI-* znJckZtJa=@a#=f}hr07NNi90!#`y)*L+xQ#_slVXN9uBorr8Tg-$CC=|4Qow5gUcQ z8oGvuf6F8HCfjQvv9qRY!K0~X{eMNuRdsZiR|HUDWG4Bay5 zgtK+5fO`)hnkol$NII2l0ehqdx=?4ublbKtU9v}W%0{|Xjd0zwyD%RWEb_w8g$|ZE z#q^%636xvCx|O5!%T#EH2^Ly4v4&Q^ zv%u-h`oucAazwbabcG%NDz(pxA7FwshyNkcI@2XiHs zyu(?X%3M`Vx_d2~Vr$gm@2j3PHRR0-UaP+RQ&+cx@n*5yf&1PA?6gkcW4$h`{<~tl zfa<+^{91WUrw9h7?~8VF6*7`vicU#`Jh|f1HbkW-^o)vHbq$qEA2a2WzUQ|Oxn+)v zKJwqYvb^UyFPX|<2Q#;b$@qDYD+&SY6*BE-<-W9R;WC0VHedu5K&U?^Nw z8rlX98y$Q7{H=0%!+y)qB?G-kb{aS?I8VX^V; zm5Dq-H1!MmG9hdFfn#-y2*&V@VsQrTyF!SsJPj6{8AgWLpiiNkW3pD-aZ#GFL{lW< z2mbM87!O}*1%m$Lcq5E;e4}e#K;Pf-JQj|d5e?RZA0HY{_wmfj;am0yj??!T#+)kU zcg8tT+2`3Jmh?0gP8D0Xgg8Zm zF+xUi^`(r#*~22FdKIXNl!`cXN;7$ykm*FtipJ*}G|i(Zl!^U;4yHbeWVXwmaH!F3 z_4v2A44_B8C`j2VRGv{&}l}5Td)Ptt4;%mJ@av_)KH2a1xd-cMLH;?Pl7R58zKZ0N{~}q ziN}0X6)Q3fc34F;rdh;9;TJjQ5v>E0fmFF%UI`jo`>7@!jM*FI8JE#at!2d;d#B2w zX%6lj&9I6^aD?Ei=*CInf)BVWW(>`4f;y_3%xfvJh@l#B*Xr}}nKt6PVPlRHDsaq7 zn9Z=h(>=kFEkjG*)HE3|F!(rWvt?0yxFgbPR^VK^Jg=Uq+dyA(oQuZ ze-{2R#-GR91hQZ`M~K1FY9$wT^P~D=JPv+0EV>MHs#3ZMph$6Lx7pC|4oj6I5bDf_ z{$uO!%u=C|T~`h+%b>{DuRJMdf)B`+asR^G&g5Th|Yn)+XhBe1C9lrxy zieeJ4y892KO!mq@cf6?>Tvlk>Fma(ZuQwry^^4Kj>2msxU6g8@MqvZ7b{^R5-$1%c z$ih6V8LA9_#q=MZ{z+Z-9}+&39N?)NzrcT`neAf_L{(ZFhyWwU(W0%3;!`bBuKnK;gjy~5P1oYoQm8Q(3c!` zQZd9bw%#jC6bRtey+n64La43X zd>;pSX9%y26mlsU#C9rH!DGWRpqFxdD%NEOxRuKZcX>i4av9idNFrOPx0lqO+`m(C z`GUlr&EG4l{Z%&U#OvUb2#%zax<4`s19z)|WDHI(ES4u+tdkktqoLZ)ierBV@zmvb zn8JQt;qW^0Ve0Vs^Isbe<6rP7C`TN4vRI!w+y6t_I|kVnMO&Jwo3?G+wr$(CZQQhN z+qP}nH*Gt!^VO^FLU%+(RmX`P=j^{b##wW&J-;;uo}}@$5adIha+*W9L>4}mZ_y9< z({E%4odQqBRN^Q&w=VlQLpY)zJ4=eEV969lw_?j+J_o5zk5lKmGF~=8G02-2w ze1X><$o>+Fr7$UzU-DJYAJv)vrtyJF*$Q_vZtB2HpNJa zw{Q-&s@xcC$WjtdUqfed3bg*ciHD*Va}+4R$=n^s{^GFYbXVquog96knx%Kx@LCJz zsGsLJ#Cf96GGMKr6>lVwWF5bBam=DnN?1dZl8G+8mo91>TTECVem*l;ye~KAv;_IS z+?;%_yfFR1TADgFVY)l>e_f>Z&amN4$0j9(pT|zLP>z#hJfw#_CJmROqbd^u4*$F~ zeYh5$ef8Y(ejLzzMtes109nDr0ytt$3B&ULvKQk4E@?<_6UYeJ%;At9zt0by4q0^Q z_2tz9NUa0jXKaD5(Ff~iRRx!82-&f zQ(9m6rtV6eI}&p!rOrcVV)Yh3H5qFN(}nxsT@_esRLwoHa+j#?uQ#^wI$V{#JK{Ta zV`{K7$$H1vkoeYk>HN*QIkjtcax1qcGB81l%GoI#Wz>u4VI7$^Op7M9hB7c+gSdQY zIX`5J;Okm>s-JzJ?3&A-X@iDV4>oLaN#MZZCAig>gX&g)G8A;_afj?B&^7Z-$ZJLy zVYfzg;Po78Xl6$V`&^SSxubSm2bUDIE;f;Wi6=?%A*|8QtHgZ?bwvJ5cclItz0lXA z;ycx&#@diQL7`1<<`n6O(MqZ2)aeMkn!M>Ax-j0DWSdjX-S3oS_6l+&!mHpBCa1`I zkeDp@hI~YoQ+oMtky^EVaKTj)-m=GslxOy$80FGTtFaY+YLmlT_4jj4k@u7-A7J6EB7!jnms2lsxw&C7+vF>=^s^#9+fVDFIsT>qgs=%oK`4sS{EKe z8xw4rL7yNOp1uiBWS__vznu2Pn|I@rqHpLEq;JU+rfl5gY_mT#sDS+7v@z3g)TjVjqatqbOjs@a`xv;S@> z?Z1~wkxzjq`|q-jD87=EhtegYx5abH?+`bGz5h^X<nznZ5Sw#Hn9;TEv3WxEvZ8WEv>h$^mO zWi4`u&CfnVk{{oO$v!RWHo0Um4S2-omm-GIU-S-5-O|`bwaB9zs}YBnyz}~ey389w z19rRkF|E0zK+lcBnP1*_MjtAK*1ba3buSSz&tgNSA5aI-A6N&{A6y64AHBmI8Sp1o zhr@q1nD3lyV%pTTh-sHq|4ue(){9gk^{!wJvuI|v>2BiNF8Na0uFxX1TB`lsHD3*v zy^?ikZPD2(0 zsu>7I5cY@P$j^jsK)s2L_8Cz~Ys!ONj$n>~9Dc zy@&uTsS+~RKgQo51WL#o^2QMZgsAAHKEvN5JAhQu%e%b#?Qa(dr?1$CYWZwUm$F%g+WtDTUZcP6Z{9X5(f3=H_QjN z#kld|m0klKeey8s#?M5LvEKdwO0&+y_i#_BwQs@|(6b%&^nUC5`8wMrAHC|7;%e74{MDa7? zC4cT3eai+P#1FF8xBAO}n^-*_(47NzRU3|IoV~ zVNT9r0rCYcX7Z~= ze0A0CO5r1o-JrlYA1ISuAxt4{s6Ga4ZA8Fk<0wHzE4Kk}biReqwHa$}kD+K4-q4Ig ze`|KDxK6HVA8-nEo>;Z?`%}GUb7x_(#*n0GvH-6Cz3AR7kCW^Go5oO`%iv?}p=U{|7Ge zoSX+7<|&L`VAzq;hM=CHLsIFnUBJfmp_@GHNitKp^#G=U6zO-^71?aXSDY-i8F1(O z`q$n5(R6`57jia?#{%1#A@`)1f(&cl{AgcPs0Y@6-3e>!({@5~V#kz@jBa``2^Fzp8z z>f|{gCI=kskc*??XvU{)I8QzVmys)}Rj7#QaOkU29}~vsPE7jRbXTcy6b!wHqd}AGJ{XR?4v1DohUl6MKUmfV(*8(4CnKc(e38y3hr&}VyI#oUrsCCetdr#h zCqD4g05ZX(kc(LxMsbme4jgOA15MR&0)Ug)s^WL!9HQ=uxra@e1ggXNhfC7ZLryeF zDe0!->b8{F9gCPy10^S1i_t4FO*DC1EC?Sd2!>gf80@BCi?lvUT}*FSG*ir6PR689 zq<9G(O4o}K4Otok@%v-e_m6@yI%HZySsF1@w$FtH3{F`_Q8f=H^6crfL_f4*BMITK zo6UUQX}^Fqg)H4Sr0X4_ab&7Nfjde`_^LkN9p@CHT_5)yDRM+>zIqpw?H#Uiq{`awUZS0jF7QZ|N-m8i zl6<7o8)7Mxo*7KWda|!ZOB-#IzN}dxR)4>Ohor1qN9!;U<<_9X$*dj1b0tGLwM=5` z@$@+-*vDI+d6o_q4mSbO>e}L%dgyj%y(iTTa1qg&ys)SY>oRmPX0Ht+)yQU`##$o| zz~mM38<530ndnJt-i%(qy+N}v_L$xPNzX&n!^R)LE_Lgkx%~3L>&PR9im{pv>9$_0 z&_VB-nf>u)PfeuGJ=Y1!Z8jo09BB+BKkwR`&y5<%px7Hj*$hZoiN?aT7Gi+5I*ebV}%F2t$%1uyETpNfw zHJaz;V4fDoDQUuM@}RJs8#aF5q3sC7PHBp0Y+FBVUy?U!r0|sM#8)Y&F2z*$SJ}Ec zN1?itKU=d*#D?=!f?~y78IPu0mo<`<#j7+#vD&L}3$ZY6fWg+~fU2jOU_}74CpC}A zuTV-%J!j~QLBfcJgc76HkD$XGvuD1)@FU@CeY`i1C=5i8kQ>2dz$9pPXk6q$zhs&# zBTe6_pO`dfR!6qFH`7%j5o?AKGU)F;Q%MllC~<0N!9lq;z{itZG-Ew^k7vC*Ag!B4zF2cDnvhn6d&yF76RO_GMNRoO|y55m}`ruyv{7)%q)4r&L z$iEga-oMtH|4V1x|Nh*gnz@~|$$zom{J-7svX!*{BVO;DRIRawwWUS(ym+I+BB(}F zn7CLzP=r8}MKRwlaXZm?!c^7NEaVfUKldP#4#gWj_eHVTVF44-rZXyz!ZO)HCbyxezHH&|Y3ZSpHx~tjm}*WcNgdA< zI4APJRw(CjMYYx&2D)~t9%mN97#%u3R5kY04Rc<7=p11p24>VXGaol| zq?@iQG+~b#@465pFbS}N!=%6)R^9Wpp#-+5tSVTW1aego?~EA8tM|o^Q_|eKmNo#2 zY+lL##P60r&uLxdAl@}KPHs83us|B@E&B}&NoZ*& zFU27lDP5wdZG%L_uqH5X<8g@usQH5~8Cw`~yzQ{QKy63CmPN;`=K8%P<<7*(vJ{&gmP9gu`A zeWNy+iM4-o76ZuY$CiqhHNpN2HlgjV#3Oj|AbeFq?P3Os3R1Gcg@RwkDdFHNSvQuB z_??CO;rj&-5HIiknkXp$p*Afe(H{FJqCL@-S|8O|#SukoN^ytv-|SQV!^Rl^vH*nQ zS8VQo{?EnsUoGm2mA8Mb7vXZ0On>>7>+|iFEdBo&W=BlyDTCPM|uyOCc?~OU(`iFI-SfhgZd7aA0 zq~l)1DwlAy8OI3%IkUqm=|ao)d()vW+~qMl#-!AaFm+A2hj{|FrK=dJkym&BP{huj zuh?{<6~V^BPv%$-_swUQbhnv|G$K(s^BT5YcLCO(Y>4nWls(AsFUb~?I$miWyh#?C zyM2Wgg*4z19(+7VLSiwf`FsA-%2G1eT|r`*i&$3qff5Yq$Q(GEU$;f82c4- zuGGjLnc_nx?z)g8UE^q&eLLBIY4*F#lgtQjsWhY46Ny+0A~Fl_^Ce4w{=3 zxqkm}K_m&<3p(V5qC{hVT&?m8M%EQOGBlD*`Ow3Tfz+v57fQTY0|prP#)+mTmlJ0R z6%y!8x}u<+7`FsSdTeI>^(#&OhVR@;4=OkEhTT&%IQUj8N(*xAd-z;!rvvfA(C|pc zFjBZdnevP<{De4>$iWTxV)S71IaX+vGPIOX2vgJ*25#5({te^%V)8K{-+}Lt%IK~Q z&fmVGykVYog{?>C;iey0jz-Pdu`#8)Mm7zX*>8|rtQOHc;x70a;p>;yc44SiCp&i(O8N*AyWHEO0x zEBINY@U-<#Ol}4DCIz-L-W%5Z0?R^*!u|=;VGwe$XNm3zU02o})jsbI$V|hxN$~yy zo#S!8%4X&V{68*?DBkk5!7o4qo0w{>&xmA3Dp<8r-2A(xX|^@DxzIuJy6Z@h^?jA zgt2v<&#^@ivOCD+-Wjz)(Cm+#eUHJ+{xAQnp@)`N4?h?t#@(DitoZc#_D`3R=uJX_ zn7&ThG~RKf<0(szx+UJ-Es1xzv-WX5+nZy+odN}~=`9MV-MT7aBgZ09r$VGpF0*@*+V)>hw8A}!wZuU7{-5s`G=x# zr4P0gwut0xlTmczdvsXdk$dkEVKe)+nBJ9PErICBtr*^3sJjHqT*XRCi$KK3}Y)iLo`e#$p$7X+_?#QNjpm@`> zAO&tt@{h5{9M);L`aTnvAfObH-VC!#>4(Y72T^nxoxUZ7G{gd==$Aq-3dOQh#TTHJ z$Am+C8JlJDFa90O$tBcp`ld-+Ir%(%%n*$ZtP~nL%Ir2YmKG(iwuA>M8k)I`^8_Zj zSxp|A%(^DTK!vvG!*$-JlhF^_JIzdMEz+^sy-!Ndv<2zzVJpOpUGd~bgoIw#HziB8fdJ$~hLaJ+$z$E#|6|BWYwhx-s?>UR*qdBMPWEVcGoE!Eg=IlPiBZUti9wjBDW% z%0RR7_Gye(RsJAUAGq zWU|G~SXq$#=BFyZvXkJI>&+istyZfq1ccWl1hlA{gdIFB6A5n~!H88Y^!?f4Z&j&?<~x?| ztB?S^qaE)FC^uHF0kK?06^xV4bIP)VAF{sM*KA5&lL*#f6Eg7Y#4B1Mq7+XkN+#HY zX-Osg?jMcVxo8JheoneqXxvQC(3d!)0Y{n z6!%38IURwD5K{_fL5viXqY+V656|-Y*=5bB()F#1b~LaQ{2;Fld~i4 zpC@1t*?BM&#~AFi^LQ(>{9Ir5-5!nvEce)hf3qp|zBXfZ@T-q2<0FcY8V6-%<;HS| zF%w}yqKdEnt$#i^Co0SfvxP6|S=yOYggr;k(9B)-c>So1f)x;8y}N? znNr1+CfQHCI_`urk07h?7I6!+3-5(PK*WJfV>6oIE}<(Pq?;#j^iEx?(jx%3IveHn zXfbxGP+(PZZKTC|zQ&PLQ#}aOI0SK~EeZI1Hsd5Z59rZoAJ?2n2t$NkA>tM@OirjnXx)-fs$NlLI4;+I$Y9qse zO&Cc(Ec{H+Rq}TBTID(?Rm)BWviq#+?KoQX^Y!1(v4@xuOgI_OfWjWEptRsB z6u`}vnEmu#_~#|;bJ!1RuSi~=r}2Jo1;Rw!BA!r5CY6o}dgYRG=yNvZl=6mTiwbQP zK&n`)P0Q1+BbW@!f(a%M)Li`v3G`7Yg+jdrKqZ+JIXKHKqTDyji1LyOBM{|)@yN1W zugoJd_yNy|}*&DM~*Lm3t+Upe}v@RE#bS;l2- zmxgjkK;dZ>ku|Lt{I#?S^^sX6l9G&CNf{SNfcclA7JeG$WkMH3CC5Zv6)JpSjlna>k*)=0voe(uO0`NEm3&o< ziUnnriVbC}B~7Je@Qao5r;-X4mo>mB5)U3h-GKS0ihkwjiWz0B;3?8&>k8E7dF4#= z*zy@=vvkYG(-Tys?CKeY<@R%-l8uTPrerl6reryRq!ddg<<4?W;~YI3wq@7=6nOA# zMG%F#O-kbmS{Gi|DI;lY85C4$ga8(oIwIZeD>#6h@`4I1tsetmt8Bi5$UlhdsWYiW z{7O1`Gi=MU^V2#NqsnL%a7;K{>^Mu~O_?wm=Y$(UTjn8jd9nC1F7@x=iwb##~k-_>(ygo zg9+!l=Idr2jWRAF?|<`oZ7bx;*5Qmd|3HLzQ%B9$}ngD)}hrSXEpIv(%s!_Xup8S8Sh?Ds5Nw7?;sy zo};=X)K+N8xMX(dNQ0{Sg_U0`cb9ZXfp=*=G1{O5QzbM`4ITMKm*1NcbC-08 zZCh2;R(`}S#s(;I`AFo+2QGgV+fE$H+Ck zXXKrhhcop5G@PnLyy_tves~Nl@5%46ScrT~D926kNG#8_m`5;INU&K$X3XXu_=mfB z?Vg|!B;xVpYoz@PCMRV&uM9SMLxY(~7Z-9D8c=fG7giWx-_JQmTP&-~siZ}SId~=v zsT#i;IZcIkYLrwII-d14{Tpi$m$r&sv9&=rk*!zZ2Zg?JW$A3QXKocU;t(%`bak_w zAF;^Ud+g8|EE9z^wB+pU>y?mEae>LKXsMyC-RdZ*=&2|#DOi{HLU@=QyxMNDSHuG* z4YY0=$o@88vTQaO1f{z*nz}@X<`{DIFfH?uA6HM^Az{qU_H1RsB*t90Z*LCTPRhEm zX?#J=97=iQIY(_D+iWZ8vas^_O`}ngVp8(8k#U(^i3oi^PAQ2-p@EUnvO2fYOe3wO z+Ewmxxm$_Qgx=n$^VCrZftK^xXY~vu0FH8#aYZ7o_E8wmf3&={=Rf1t#KxZJOX8l6 zw2&2&u~AVnvhk2YS(GlVFTt(&XJ6&vCCIme;Y`=`iPFH17E{UFV}f znmP<**JUoYkgub=zm=cruHnm8B`a|r8=}>IdwnZNU%8+(8_6syYR);>ta&U?}ZCQTDv%(mm-0}5+Sv#p+%M~HHLDulh-!J$NCe*f|4 z6`gNs{z{~htuv2X0*3;7&Eu$A++~ZmejYET>J?%imxR&edfw$|m=Lm-I_Va3)pgZN zd@o=;(J>lM(eaWcAC#b=6E1mKUG~?@gx)d9t-_vlY^*@Hw}|g8gyP^&L8Vw6v#quc z6*}hV9uf|WOZT9tH}DOzef~lMOd+-#yAHt1+7K=7dEaVG6s!>xQP{We2K#%Itziqf_NJ-}+V)WB_nc z&|~wEmSTtT{X;{@8|zOgu!S6he2i&DE*;a5L49es5}=HnFxF3E-gU|La%cML{0ctK z`0GuuJXCxmcoq;|K?v0JXFg(BN^jywli<`@T zb_u*1^YudoU1u&xbVY@(9UAxy>6CW+hCbsc3}FX9*8bir^}7l7>du_w{(?aipfL(l zg-z+>aSt29trn4ZNSw7jwqLdQEG! z6qiD&|5|Cq?PF~3$uH6ocPrPZt-)8_z<>s^BSvN?K#&@|D+eLRoD5&Os#fr}2wpk> zDsQk8=&I&!91&A$4OqL# z_;}DP4j_O{1m~rucBQunT?>2hFL0$V!lH3sax{iX>+nvIOdF6{vYtA14Yicio6b05 zoW2jG$csC&#S+8psDA7sV0Xi?zGm+3M~?vmLrh+u1$5mfOi9|4W|_5_wV8w+KIP|( znbX-clNd*#h{Z9$`t+WdB2Rxm=c%P|zHhO5eBUeV&_R#Treq$t$QUQJ&QS2^X3>n2j&=V_-Z?HT;Smz*A7g#Zqp%37O^xsBZylexJda6<1fF)oICJEe z!yG{r%?qXQ*3`W;-s!gR&pQ{Ls7C0bMIv6j5??}pb~}%%Mbr;O8O(japoKMTMR$q zK%cPNt3>XN+Knpc9)c?s@b(eZLy_hAZCpEAT^miLaod z+!3>Qc$W9%Ga>g3Wc(Owi*JZHzAB_b-gP*|&|4Bidbcpt z91zYM7g{YUk^m)@7PazKw8AZstLG{`xM4t-kHb7*c9y{tCde?$^DsTf7=>(IU~b(g z127?QXU^qzrku_r(SNmQ`a5Bcku6Jg3SCjEvLt-e6i!LOuj0>^y?j;}d9kCR$Ng zt3Pzr6mVUD>KVnlpyZ7D^_O+A(iyf};$)%MyfS6vj&=0RV54^U&CW9zH-ww<6ffz;Eq)6&T zf#Y~IuX24HK6F(q{boGSl~$#}3>Nei*S-x0balB!K(LkOSDDcppuac4zMS#pEp54` zOl>~glw=I(ETy)(c-h`W>8})3bn9YHUSPfmsTa%uq>u~Jkn`5(1?_Q~5F)3@5giR_ zP{gxyZt|HDNT;2TRirinLK{dMz6-Dkqj@K??r=W19*7BnLj~~(>REw9+5A0F#Lxa& zPyz=c_;&{kaj)FndvWeqrY3tYO9$xTE)UpUsqdS^l{L4UYv0fsa1SwQhUK z{l>bGK(xT=sY(dWetO4Y~`b`L6UQQrZ-;H}W*E(~7yMk;&{UUfTb|&crHfHo7wSEh;og$ok z8gXY$rLE74lnQb84OL%Fn38%5DbYKZKFSdOp*jo+BWe_!NHG5DS95Ju_?5XU`fmRy zZXXvlTeRf*6s;f|uJN}!V1@rO71x=G5Q_>^gq!h5dvwxaan-ZW=i?y z@C-Uz10whUeOc*~0Y>!z?MS;3lpt_(^TrSIt+oAtX|b-cXt&s!vca2rfiueF+lBQN z@?R`s2>f)h+~OQzJRf}Oci5T%XZhcFS%{7rE{RdHmc9uRt(n}o4m zFr6v3nUlkl13*Cnv}Y7y&-HYN)EOV0bJ6BseNgNOPo1aH7L~hoe22}IrMs7WC&(43 zb>!%tsXT+zhVapovvZ>PioA#~WUK4PawlbTK(PDw=1od>+{k~XN_+C)PU9ue7>nhB zCE8RlynuSo@wzGLzV1gLH`T|P!XAGj!p=|+4=kNsy~!A`Ui4Gwme(uKB=+Fc9-;ZP){Eh#Ed|5xKnK1w)OZ@uC68WCNQxmB+2kkhp`#r>fJvD!x@(H z^^nD!3z5&`^jbJxEQTWg;}GLy=~>Yfhfn^~KSmMB9FdVrYe0#3c>jty zfXf2$CT|=&j{@77DG?$mbeWs#CoLA)OyC%iKE}a4*m&uzSt!hsmE1iJnH*FHm#ssi zkMzNq46$MvwI#QM)#%WLw}}Tk*1!W1q#bOk3m$+MT9Hb(aDH>;OJRFcoWB$!bUR(O>Jp=OPlSE5!GT! z(MjoSS2E@CQ7IkuBspTOOMY7jurjfMgmx@}fJ|pjxuTP{T*{h{%}w78Z^}$JaO{ZC z3U>AVD&W_XGxaXN)2k@u@izTsW?6t;329UAaBExn7Uw5Q;`qRn2fZr<-ROd0a3q{_ zO&7Y z%`KD8N9du^wb2L{{sPgD|IofFEP#YyyUxIZZwEBNp`$e@u}LEFDJq0xjbB{VmGk<9 z_v57b=*W+ek8?;J$`#&Cq1@#P8RF!8+or8>*?W;v_X5UCIr|`Lp!dPYKKq9`=FK1A z_wv7ZB_W^S*)y?(d)%PYo`?Zg6b-MN|4vGE!iceV#vg zo>y5LXn#kFJ#ZrvyKDOvpKAebFXa0(!u#HpmN{dSOFgzFqzAB?f)Cc+F_oCxojC;* zYktTQAs;WC7u!?D_p;c$=Hl_Z;9|m&5CsWg8gLdzuVa}Jd@<<=_4|20165emLzBYo zjJ3VQF^_@LM?x3))Ojs5tA9S(6U{9x{sgK%M$2!eQ-JD)ZutVx{2)62ho_Y0C&=|y z>P+zyRdb++FZz>!d#pFF^l8P}*IS78`Z71oXHK9~wr$LsJJv{%Y8f{ik%Kh`MdXb* zlq`}xx5?qns4bN?voC1g3dS`c!krok@0Cgj1@9F%Juz9s(*^D2uAO_tJv+=TXUEec z1g61#iR>9H1wf($_2r%&1cWvVMvEmxA-Y*8$#4!a9Z&_xfZ;&@SkzxCzGQ4Z;v^hy zTDVQuWCH3KWpT3@4ocUT_F}#Qz;6njQ7tq$kVZ=IBeOcMD#mgrhV;C6JuR}vwhQ9b z=3%e=!8CM-Mt@xkKZ*qbrm3VuD!n|aemTO10*9z{iC;g)LstPL4ME-haVCX%lKOF) z(hqozXMC>(p+LSWl6>)+YyD5LloS8v_n>wkiem|dS6lu`l%BwaT3FK#C0RzRgoBs& z{Clwf?qI=>kWzi%88<%(zF~l5AqizrO63$tq29h?%RoLfi*BH|!kH7Wfpmr`7$ZDD zkotXptckZ~#X}<(D1)F$kg?qP15>o{LRrI7-8D8e6fX~egr&;>M1@!kfGj{5nYeGOU`j0a7vR+z(-~vKkJi=a zOsij#*i$+7gzDif7cR9srm}W(#oiC#|2XYc$cbWP{Dly3e<1|E|JAhD&fe(PZJti} zzl4t(OWWC5x!5bYSvVV+|3BQ7vX&j+_jl=`ag{VawtOKlFWuQ+aMHuLtJb>r=IeE(mltLuIlqL654 zYwg)RP}_|$6Y%lPwI+v2(EtLJCy}&GQ}-q1j+0*uyTezlGs6p~X8W1`py%9P4QFVv zaqWURc>@o-DMt9;3ze`UilQ(}sHK5H$^mUqvk?8DqmuZy<896KlT|Gae8Yxv589=t zCb}QArYL97VqC&Sb{~|GtgVT{pZ3mUxnOSP58)g-=9ey^Ss3nhCoIMTo*JrQ1lGU8 zd#obp3W5uZJfY1T{m^GArxJ9S<_BKh*gfZ2X_yE$vZTG1Hx7L7iChp2UAccwT8L`a zaK!l(Ih}XK<=`$xkR)do?Wxm6%}a_wH%?p(R?K{46I-Q8t8bmoz$lR$UIN8@mg^Oq z>w*)4m>EYXH`}iEU|Y~tO(Qte2QfD4q3D=}Ts!2Tul-mf_WJ{Y%rjATcx}>fa;eiC zK5~nFP(Zk8(MGCky+p_3`cpo~0GwGNnKluzoF{DPvp^P^w!6LR(I zzZ=xqrO*f8*gbhZg4bxHlDF}wq*5pN^nFIcEhggW$yyeTB(0=f5K<4`7;A=3RkQ~s zsWUThQ%CInM>!IlnEcuLl_D-Q007Vbxg7r!Kqyw-R>D$2{?QR%Gj43+hX_HXUe*Mz zmf?$Q@mJ?%VdmciNLIB;H3pU%47FvIKW}aERjK5CFJSUHdz3L#j+kPP;aw;D0r~;L z^Qnk=?ZoNJeYWJFHfBC-V=yiI&?0%Vr;{#%knpIIgYzkzegoIb3hvx?gf(%tg zmiW*>;q59jL_bkh-uDLJahK?y1VlbWK|!;hhl6vrz=gn%5e6VL7$YdxSMFB_5J+=G zSF@K8EK*k17Yr!Ir^yqco~+|i^dvPh29f;e>@?B=Mtkq1b9QxUg%Je<5f;vCBeF5U z-gXRqR9+!3x_~Fw(%52K^Qxe6BqcTD2GUY9O_}Bm=yP{9bmVUpg9$TB79M?~;K_2C zQf9X_%`ye_o5F5(CbPl<;;|~xDzNZk<~CFxx97G9vk{U*cXc-&VK_JoMv#^3h?P~7 z8Y+LKDcE>%6N{@PZ9Rz`wDWx+Zb21SB z8+?5V^yg&rk84Tdc+~zQ*@unOQq!YyaCv>B!>F`Y5q(ax6BLN|8O5M%$-<(u_qZy3 z0z7+NK2^=(0^R_|yKq~!A=&KFo92M{`Fc{Lc+jjNq06GF^03BaR~Ac3V+Ttv$aVD? znX{>5_|kXutK~R`QU?oWjCu@%<=XTGrNLK%D%*6t_mJ2CWekVsC!&J39SXJ@efeGk zkd{7_(UpeIq)C3q(=xV>nRgMUs?k{$4qJ!JxXux%iz7d7i2>f}T>nq9K93PKiN>{& z2llpcwB?v##Fr7t4&WyJ8198{Vw@MOL~aR+_B?%1C8qAM6{hYe)<3>nRT#Sinm=|{ z?qJ=RIfCMYooyw19icC`J)v;7`Ju7)Li(GaBxG}K?M>#d=xog1gaJ~k%kiO^ugamf z7+%{G)<0uy2xN<4xbM;dUvLi_4Z#nACdoCY2%~i_WYe0o(BrPBCVEM7Ay3#==7oMa z@^Uy_ep2R(Hc|&6c&85B*^(Hxixc8E9Z&4r2DHkPX))(&X4zC~>^Rea+!$Pr66x8I3Kt)n+EBC93U?Y7)q0pHrq+g$yTF0DteDvfLK42;9L-rAs{d~ zwN`N8Uu;kI7c|3{{V%K|NZFl}`p>e$)LUx7P P+lgTBtCe!&jxiQor}cS9DAdB4 zWk_dihot!(^9Vh&ArEoJ9#xxfbm0ATyyD;xjWzx-#x zNRF9??dL}hnSD|tLAXPs*58bk3LAA$@02Y!StJfC-vKe z_&OhyJ}zGy0#j`f!C$(?u!KK1Z`*P%4^1JeEqMO#;O75$9*Xf=(sRGb#|6J(s{hO6 ztyxt*$-V=3ex1>&QL-JnoJPF-qS%H{wqfSH=b*@#Zaii^W=EZJoErT2 zetyT`YIio+g=rU~;Jk68E+`KUF&S==I9 zT5VA(o6y@e$17~rbBLZ&6z<%zLi@C9j#Z`#u52@lZDt>>E3Lhb6+9YM;f5shk{@L^Uglxo6a8*av|#xZRmqmO;4p6%OI;>zbA zv_!B3yv8i6*SA)ivJ452y7#O+Nk+Z>Y5Iz;N%PL6mDrF@loxz?KBBUH-35T zAoFC*?0??gr)3{S8QoC50EY-tjfME64C5N9&ESqc8 zE2;%TdciekLui8hNd6r|*z=x(@N7y+*sp{lV$~hXr6M`%FQ@`JATW&6-sHx^b_U; z?=xw{w{oI!^;lxTZe; zeDQ5H(x$#4J!u$f-+`vk+@jXn>!bSncl&%8Mt}DaCwXU(89&f{9j8uA8o*)s55W(r z_@pZ(f*XZfB&{{>Rq@3ToieI2t=WTG11YSV=d9F6p=;p%u-(q?Sh?K8e*fz^MuH)P z%Gx}{;|wT7G%6xMNfQKxoKpxpDqSCTeXCx=hzXpNRSAv3MFQA;fAbPI&d|zau$8=M zZashgyR5PQI0jKpkXJrLVBx(vSpVi96>SLXxw z$FYa$3ZI|P2kahi7dC2LN?0_O$8Q`r)-X501uLudR?9vkbrDZIaw~dEW<6v#YpM?2 zDW#l4?_lyOZV~riuC2)3^rP^4PP#AGAuTaN7*CahH5A1nme2|=Ith#1{tcoegK`RD zza78L;|X{AD(1t!*k>P-CLSOfnyh{c@$qHde`FA3PG+)z!(Q)P!Q4^1@Gl*k+_!K( zboVBwEXET;H5J7KD{>FK%sd!PTK8}EmEpBr%^t1>@SR>avW_da>{ zS_{q~?_rT=X9=pJSIGi-I5J_ME${gtE;cDdB8A{6VYMqNmJjjTG}*+5HZ4RWr@%3{ zZ3;eYoSwz|Zzg4U#KUkIp_`GA+uoC+7u2=ZF|asKVYn=*)u8&~*CZ(dqV ziy2uQdi|R#Gwz;#zTuNo&2fGVt5at@JEG#|UBZVu%WGA&PYXiGax<6oEIkqhFed4p zr++TzB(6?ESgCV@BP^bfuQQt?A}TC^d{G1LfYxHkdcIU>n8s4;sd0sk_L)=@Bh#2a zmMr54^=zAjI8|$eeM`xm%Aw&pIk4q)<5;ZMB5fSl{AJ2E(Z+S7Uo7ZSTpoY9=(^0) zo+&G9GFJw1K(nn7sNwbTY;g8GsV#=SEZ+vpH`rUn5~`gz&ODyzQutSRga0~R{#!-& zn51$A-x2Rm)YsOl>4H1!D!Uccy2=TE5+`-ML(gbHh9Xe5=YzqtCxOAVZ-G&_r$O1r zSw=gvR}ENI?~e1Q-I%LAK{EtgHmZE5Zky0X=x6rAeiwy@sEG0-UCbSLw*GAy%(Tar57dvpa% zv<+I$RBy}s<(l9ca+o!;@e&DQ7o};bO>*nO=)Ly)M5AdzKrUyD4}0_ z${pU4nMU+p=f=$e(HQG=BAm$cGpK3(548n(PHC2ks7hgJ|21x(Pg6Am$7I!U+8xq) z$@U1%Xbu0J4}E$jK`slYkQximi9fj)uGvDgM(Vt{>UEF*{he9NaQ8O-o`D%jcSZzM z!;eQ(L!66Spswi z{>9x6Wt_g`0Z~)@eO~2SZ5dM;=I3 zZ~OorzZr_viQgCehKi?6_Ha6(Q1xjRm!>4ojmQz&tz`6@-#Cio|L~N4f-?98bF>d# z-ZC8pis1+D!N?ouYR5el62RC7GtCcq$aUDFkm3(*d&j6}Toyi}l*J4m_Ig}jxkIcJ zg_NYK11>MT|L6k{iZ3#^p>D}(TGPI&j})xQP%ONL$hPa2SGa5%wIAoQgEE<_%o6c*3!wf@T(Xh8Dxe>U6HnsGuqDFrIPYZXbZsjJ?$;^ z8U=WwBPyCRat93xtS6ib$-}vn&?Pt_vL#HaQ0!k7{%gBetp7|!XkV#lkYDE>=oh@!i5US2l&-b!~g4dMitKA&)*NA!VszSnl5A^ z_$#c%jeO@dSEwKKKfOC{yjq@4?n_g6?7V54B28 zX_p0)e-P92?ibUe6^FK8mcCy!DRL*(a^H>+S@p=4edMT3+wQ&Z&%wPTpdbw9g(HAv zQ)6onQGiL<<9PpY2xrJyFsxj7=fKgc zaJZR#ceVcdZ0`5Hm7;3OcnKgpCXkO5VLE0!VxYIJwl4|4`H*5Ro$nS{ESm~9eE81a zF-zmKYSXr(ZWHIj)}s8}9rXK%VyaW zc8Z04#If+2&IEAoyQ>W%-7?4Mu?5Gmh1@B?FcL1`{vw3{2%8KmIV{zCotFdG;a_MD*k_RY}Y+c(z#%P{-5 zI_EeW%3FQ-2oCE@z8hcO_lmv!`nACKDkrZIi zfQ3vG;x1CXhJw-X0_b^pp2^I#=QMfXI(q58dHDFOi_e?wdHFuGmC1HI)1#CB_I))L4l&*w|W&_78!?a&pirno6s5`xcT6ih`v?x05mS%}Y zSlO~QW`R!3iF_N!hAu$LNTOG2lrrfS{+VaJi72v}I` ziIAs1dFGr_C-&ys?Fv>zmcYfD71|v+pLpiNmbW!{Rx#!g6DPVeab|tw5EJL3)7CX$ z$1s|7-5>46n)R#k+BIZWH}2GnEek-g9YXcOniaL&jij`~b|K+t%#PqARCGQT8xtoX z*nh@-L@DXdXxD_NxJuz@;?D0%SA>=TP!V#)D?+Gvlw?cb!=4tuHfM*s>4uwj zbl(g~e_`c?c|$H*FaITGA!O*2F^|vB6GRoyoE7btGS7cx7NaOBICF-6gchSHAvkU= zcu!okn4rYMOYp{CR7R3-^5}ll6f+|%IC>_3^bnI5>=!%_dPE{=MPg*$jQsU;>tpHI z2*gH~?uhpolBcBc%(|g|sq>~sDw3xpMrQ7U_a2gR`YU*jYvpRMltpm*D|(J=g|oYs z%}W+Nhv869Z(T8I9n~*e^>X=rv(_Dx@BIi!=MP9Y24{_eu0Rm~PnIH#F(vF8@qmeP z+&`n(8fbfLlFRt7IVv0oy~dC7N9i$@-IqBdeZmQKX=ta-gen3$b#d*IpCSZmAyd&?$^FIA&JkrxRcvv1qv^%-S| zyMmG_x>dD5Ytaj-k_kFh&35Gc)7VUmqp+vRV}QAqBo}EH%lo%RzM|{|0qpG{od2#gm#53sv|99^+nH| zJ+m9LiRq2YnV}Y({tW=}u|M@}4)z=$@SW z?#Eel)AcJT``7ZR8}^@XJn8dDi4rjZq4buIW=H&zLLxI(k80*HMWYFD*ni-4CeBXB zSS9x*b&>uOg8~eH$LPyU0ZsIBHJJdbD{fB%5A^wEEg zb=;81-yN#PKAN7gJ!y1uS$|}gQlDt(^c=q@_bdo3 z=%Jm~L`L71Do)|rQ43^hSydZdnFPkXyi*n>%lzbG58g2b?HK^~4S{)FA)k9zoKn*m zm&S`8Q_TM1sz6EB!_o1uGM?MU>9w=5gso!I499orYnH`z;fCcZR-R*>OL?#8bG zFd!B_cJE&QEd*4!5)ynqF1BO7yriq7t#0YBXl$dAqbV4hosXEK$hC;+rw%4EE(SgU z9u9`H#N^a8T0R&pV}D29?XhJ4^$wr$NQderGvZtL7)Z2y>uDTDSuj0MOai;@f4=OvpW^n7W4BR<20YmSuyJzc6#@r&6yqRZ|#K# zCbo@9WKRJ>-xAG8LA_vHnNSRLG?cl8s;ayBnX~)r|N4ljDC;UW7B{vxIxQ#N3tQ~s z!%q(bi;YE=Qzf*O-6aMN?jWLJl_{7%LZhZ@5mJvgN+96OQ5rsd?sa#Q01F-Wy%@tK zZZ3Rk>dL%bBAuRiH z$X75LxkI&Lq^YgU+VQgxJDTg|2fmKJu0BUpKbeW+{=-`qFa6*Ap|H4BLRXpQs;DTJ zbVEl<4fBr7FF~2V=`Ba|fA4oP!eiGyc2hhw4vju17k8Rlu=PIY1J#T;dNTVy1J?&^ z?E^ph`XV&=icTOaS*HUgFLuPP+x72d!#5_I&vwYR97poh^m*}!c6!kQ$~&X%t}(DI zu}F8d)H#nRB?O!dp0{1A$g0RTFOX7ZYG_IK&K7g#6t;d`|5Z)=Ya^sxCj3AileoGB z;q<`(+jKJ;R zoGIWPEIL1RWq-;Qp^|b%gsE1-f=lrS3v2_!D+L;Sf#peBn2!pH5r&z`f#ZH5HHzN)8 zqUe&{j!d!ok1vKW>EPq3N5pid#s*QF?$VDZG?LNLu+bU;C8?TB*ggkLD%UxU7g2-4 zzAU|ZLrc>B_4@H1te-#j(Bu8%{h5LdsZ?7>FD!RY8@arH#Xf@(ex-J!WtZNw~Xx*4;UgpnOv1h4f$GpDBT@70=`cJZmkEqB^?nsV{WE4C33f@cjIdIb8< zp7A}v9hskAAwZS5BA(?&pxR>7;tV}}$|cTPYh)@gWM!$dS3CS z>w#!pSsU?QpK@nS`Sb3O!Kgo5X=o9iJ=6ON+48T1 zh4Qqh2`X&F-G)hbTFu8THPo^`yN@+xQ6|8WHp`EFaZX;!4L56XeoB}PZ5qcKc5X^k z?T002*0(Gk>yttnQMDLL!mPK9*aC&|@V3q^F}bW9c^tu(z6i$Gc-VxZGITiXl_5}b zKb>SLq7gH+iN8&#<^-6gO6or=#MQz|ai>YyqvvxXEn%{n=IABdII}FQXGEItr#q}? z#M}h4;O44@-AJ;c=k#MvP}$Q9JK(2}t!sswP^VKB@;1%DG|q>Elhz44VJEp;A}z)w zsw>;)#OiEaZ{irLXdmX56$lNng@(oIMsVIyXXZFEGFq%_Mcf#&E|vXpmM`xfA=$YK zJ7A`#tsO<05T|Rb9mU-EviRn?NBZrZw3?r#ab?3fJQ-p|WzVJqy-jEs?T%tO-S%kfsBsM!uYs zBN`;e6>Jjg+*Q^;g1lsG20(xP1yfLrWrQ}`qCG)Jhva`uq*PKfKo=B`_dY9HTNs_= zk2`^3S1RQBaYDncROACW-DI67_Q0QoHHRt=02iMxY+xO-oP$X7gBr`su?S26=$I76>H0>wGRpcIXn0)a0uVAR!*GQ z|FU=dtZsCThfpBIV)Y9eB~=KBGuOyI{UMS4@ufnXar(nz++3S83z|LATHhKwtDKUH z&B`TMJ{j*&ipxeW(kOAtySXr1KbB^=>G=IoKy)aQ$^e zfJ+&JK5(ti-@*EIwt)fYk2A^yR$VEdKcThpP6%FDHSu8)4TezxkqSaTv`Y42HOCuR zpK20jQKA7cT#||gDhEB}CDglnYbRkY;^XtJZ|WKG_scBgPT%p>#&V66KaZfkOJl`~ z{s-?8hrYugLbZs33yOhDV)?pw+88jR(B->co}+>GyV8d+ZxeGgmOj?ULe-{~lQ zoavm-wcCi(7P1y&B7d27H-B<6ClXIft4g?MnmI5TtP8IPuLg>@!R=Y|l94+2pzK z?YL*=thjfa0R_9xg(l%9r6y_ni z^?*0E_@)@2k=%2*a!cY^Fs=4w;dyrgrgbW0SFD07E32# zi(z%glf?6dH-pb6A;J86QhJ6xqU#dH0DoAM7FAQd5(T4)H{7bpH_rK*&PA*#U*JnsjW!1Gdp9_{a z{7bG=O-!nT^J{HrOwFga|!IJG$*P0A|d-IWylCTa?5W7OPSLgP(LPony z>Wz1a%9&P?N{!=5RKc_sUp`gsEVI723RRWn*4 z>ZTKvmuYtoK_MC%X=?}-3yCY=5IN;_s3qUeH_yFD7<)eMNSN9yuYs=OZ( zi6_W1+~R0Z_^5Pjcu-d|aA%4K1xPk9A<}f%BDz(j7F8t4==Qp*^)@mCr4$g^Y5zLu zw7GzOAhf{c(MD__Sy5)|{ykw54aP-!C*tf>&DSWinUF|eQYl((vU1Bj(7n@4OaKIz z(jluRN9$H>74f8!w{~L_7w8q06wWr78)PExJ$1B}*_S+P#?n2$30ryNBOz&>Mzp5; zYlpRINcbxVk+0woxPWEm36w#fnrc?Z&^6VSrgBc6nagnxZY`!GPrR;_Wq5L!wq3-R z)FrD?vnY`?fe7yW8ydi9$G*0bQLhtKn_psR(v)If5(*PnkzW#Q5~2o#{C)w2gn;*} zWkLRy{yYL0GHFcJU{$vR^X$mYgL;vkTs(nO>>nZ)r+2=ht-;wgq9d5f;TYRSS#C1M z(8r{oEz)rH^7sr0Xi)rnx!GK<{e*@0of$UkN%}-AFCC5)sI6fygfm+E^SP7)ZQ}o7R zPU`KY#V77QzWOwuD0q~%(nvu%5QCL?uyskoU_3FCZTvw;U<_q)^#p4_$_@Wa!4_q&A zNoP zxvAxY_srAU1qyEfsBA7!?_T7u8wB{2#xO=jkm*j;DMu&lgZh-;&PFg8ibqo-IlreyI&G>LhSOz#9I4V(T_a0t_u`%bS zG34_>4pnQXKlDa>02;vRR7%xc(M$+Mm*Ptz6vl;AWLUfu?L%ewT&J^$l3xBp&c|wJ zL$J4dGR2qY#x$*&_W(myf4u9y)}+$4L{;m~vHQzZnYN_%WZUP3`C?ht0Qmiu&}6Aa zwkMqG{w>!2sD<``cPE(%5wVpQag{Ct&zs3`eT>ve9fj*|2hkoe4X4q((#N&QwKMEx zA9$rqWH7{AvNQ49)b%pDjpojCCqBLkK4 zqS2%n#<}lud<#x=-hV6-F-P-O?8-f+JA!n{V_qDJ0|!9Cbd z5`uqH>LCE3PO|`Hwj${C4O_5cV7an-$My*j#WR#l(B8Ul8^-x4f#H%-#_gp)KAbau1eTX8YP6sHvE(^?^&uwr{~?xEuby%z2X!!HYIy<_nwYq8h%Gimf|@lOUT44}quzWdj7_wFaZGV?9Tv>oV` z1dKMZv^)*pq`rd9?pLhbUBt`&i9B_6!hW(U`5b)k*2R9(D)}6tdU#~MxRL!6qO|XZ zn;t2o(Qo8e35FzDPI2Uv85HOYLlUHmPr|-uNZ>tzad4O>IKMGkJR`voqZ5&+^q!m}7Kk zmeUiA&Q~b|^TqEo%Pkk%I8S))PI!51Q>fMTmxdykPn!Q0@rzuc>?}=$TB!iAu#-&73$i? zZ;hFNGbf$T*-ktJ10H7a!8$Zf?f{OU{R;d*@}gbMCk(7DUwDg}fGbOj*Lf6XD0bdu zyn7;;Pl=dOVzlJm7V4Ten7b}c?l2m^o#d5ekGswNiZhMLb8jSkd&Gu|NN6!Q8`l%B zZkzI!0rKHI2E;mC@|Sq|ukv%!$eEPcH40u*p?DQkdvGOGMI9hC`$9jM8 z$!1RW3ST)U4FGY%lN1uWboDnJ*bJMuvguJ~yzBPI_HSJQyC)fl#%<%BnkR8PPL9x8 z{?41J8r>|{0G7^uD=nTIFKuo(Mg_@g^gWH+xdQCF{zYP!@Uu*X>SQx5R`?|TTFr8p zYK^jOiRN*0=T>m;yNf}t(+zoaO1Ji;>z3hue=Y8MWn#Lu4&qQM;xBGS--@*3u})P_ z2QnhwN%sVN;VN&R!^RH%h@8uQ4Mh9qiaL@E=o>nx~)yO`_MNuR5_Y z9m=Enc=H$)MO0#_%#xyUnEwWDp#1(9vj`EII7RIDg||| zb_v%ZqVNN68dEj4E4w-Sv12&6%)n!NiBYvgAEjU_UtF_YUbEd^SlSu6R&xQpYVM(q?ga~lc&$iWqGWt8<~^~(5o^z6v};$vZG~R z#h0XJac^4pi@AZ&&KJ|GaVh#N5Z|(F+obS(65{LWw0eOEwerB-gL##5!B}&>azO~i zd5fvLO}8A;+^JOco1i_P$y$GhaD@cwC<>^zF{<^9QX_QH4|YXMH+i&b`ONW?IUJ6)yL;e0f`DqhyVzq! zdg3k?FifcnV@+KNQJ6#_vd!)+kvNT0(Hd>EC$xEt@!g|LM{E?N&J*0%uI#!QGsUI9 z-~ZPA><^B3wZ8QJBUTf5)GsJV8S~k&BIIH$q=Z-$Sovgz$Umhvc$RPT#|;YcR`~G# zZy4g6s-w|s;|Rq$9l?DInCp)IT>GY9ky)?D9t)0T*tJ6HXYNX$m#|{%XxwVx+}g#X##ap<_zjXXV?>x{oD; z&jrLlzS|Uwtg(Ka@Mfqt%LeL{2K1j{4A>FsDL zU3y$Zde(YhJ?(oIf@)M>7EIDm%PDcX{No@U+z#bkLG#Han=}(O$)1amzyKfPzktgi?f7q7V=no)1z*#`t5!f=ewU3;cgglxH~KMPW_$B z@#`qS$xCM1Es#7pa`UlC3GL>T6g8Aj{DI1>ImloP5N{5Ghlvl8L1h7TCC`ExOSWb- zjsnL@VA_YyU__xaE)~xS0*%B3g{3%v04LXlrB1S@FwPUV1ED~L0mYPUMp34j*X%cq z^aPzrvS!+|k3uX+^kDYcTzN39nztq)Q_6$6KkECBVChDWQHGHnm~gGvU@Pn$@-=MtF+nwP?@(XWPD1kO*! zqTBC=Y6jj-oJhYX5s41MBvTCQEip*9rxD2xQYTXk=PhPh9n?lX0^=<;NVO*rc?T+( zkU_jh2GbX$L{16IO_@lt=N2gsVkB!0^Qvo_6y!wF2;s++NVX>xsShF~cLejQVcHn9 zOHm5_s%BbAOq|H{gMmc>nUci-Iey3nz@E-+fGlMiPV9op1`(OgEta5(3IS+N%%G6w zixd^%m7c;pB99CrE|Z=@DQ+6l7wMEmhao*>{E8nH(>&rH@)J1HQ646g;`|{{5lHD2 zSXS{u`2-WxV?a!THZ^qI8?1=)lol+&tXCEp|6v*6O@RrM#Mq#n;DTxe%W7yENgNQ_ z1U?X1ubx03*#t43rcEhbJH!K!Pt#@`Tf+Z9CK+Qt@&V+8^BX1LjKP8PfOUu_=#0TZ zWX5(&C-96#L(qsCl8*Tul>kymn9zz*eL9Gv6Sbfl!8=qFO2+6Qbi(y1#$1my067u* z3}X;uRS+G>9g+#riFObj=svN;>11^n<`nn5BAO(1Smqq}kRmI@PUuItM+yM_h;E&P z?1VPxF9C&I;xu9&A(h~j_#MKB=q-Vmi1Y>Kp2f9~IG>aV z^N8&TM5I?(kaSFIObX%+@-2gSmxKuG2PiHP}Obh%fl%Ld^>!=Fw zEKG>e>@~xgFk2*e@3Y{AH*{0@hm!o7$R>BA_KIMRq+$D8hwISGj>zvD0A`QZA_%6u zj>ve=U%&R2lL)I7o!dD6xQKu`RM-Lx`iK>0Hu8Q(YcQ#w3?JXFet=!c7@Y~<|0L6a zrAo}+H*bVeB#|mWdxPO!Iu$ zSl-?L8%}K>adJyIJts0{gZ`N1asse6Oy3jveyxs~rxHs(G7Chls21>1uE5N2!IMGw z#FKO42v^n>0fc`s&p59Iux)9H1%HQ|a_##Tb{%N!=`IB=ZZ(i|Cc(_*%YZK76n1bX z#?16imvIvrj;e&Dy_X4Dk|&{jq62oEms>ygK&kHi37E);Q^rV!UuFrbr#>Oo#&05= ziSdC;W4D8};*bk3nZ_JgpI#YceR~xwTaT{qUSD-~e8A?e^I_uddjoI(`Npa}{~^*| z|Ays^as!U_aPACa1eShpwa+>Vn9L<_AIyZH%az-gwSud5jT_XM*{$boh0`avjNoWU zt>^T_&`0Yctc~@@t&J9dTpeX;C#mJz!sbGBjG_Z%A36f`4xWLX?Pkt)(bDZT5?1X! z60}?MrkGpn2mI|-!-(x&!&c5p-TH_Ji+jDV6!n6ikZZ_&aM$sH2%IB-VUe2c5wdj= zL#7!{foW-%#&(nG#(I;xdjpzO1J9ayL1)>ESt5}{ic z?qAb3__-3XzrV8E9~_G9OzU5G!~h=OW);uSfeR(B zl@H6%t_{J^>4m0yeh0#-^#;JF{$~OADln%n#{EhhG|9uCg`*0)=ueyRA6Jyq$pXA61^_uY+oGq!x`SsK?vCtV>F!XdTNyvt!^{%oKxK?UPCmBN$D9ZMQ`X;y ztE*t&qQ^#@L6A(PNjZXWiapGi1gp##!>Qp39^iqNf<`;#zcSu(Cni>+V`0JQSmA3s z;+Q(fs=Bu^Q1As~NZzMB?cZ`pa^y8|nmO7SvBPCs$qYTb>;|iDb+g%vC{_=yXkY9p zUQ)8`*9C!+<4;+V3fu@lTkmixZv$^h2PN3(LL5h`wW+w<_GSaBS%!1p??dH|beV0@ z+uMq9$_%cl2WtuYR`-3PSXE4LDS7F9^PO~8o_nI0fE(N@cm30(e0v6bnd(p{?VczP z{Wb^uRHx)neUc|H%^cN@2Z#JK4uKsTm5T?sI*0X*M}4{1-g3HEjI!E{@-2T^LDMRD z>=VUw7O`^8o6}`3xBEt3_%D}_Z_}}x)~})q?ikjH?W@H+&<=I1LliKgSyErV5U-!= z5S~Y9bX^9ss6KiK3y(tKX4eFPvxn`WBm{6Sop4AV{85K2Y1k_>Ca(wH01L>6oXtvX zA&arxu>DT!TgPnL44!Fz7AMt{Z3rl1Mfi#YSeuZZ zX_#>eIB=;wVis_P*!wN?VL;eSWdbFspCL>T)}_M{6PeQr6K@)-^X6I_ z$}{JH6XM_P0>mB_cu{1|%r*oc<41p>eeKy7?;;Nq4Un5Cp;%_!qDR+=6%)dFe09Qr zG|{6T5x^=Yx5qgnozz zR%Y=JCX^K383jXkq?gXXUdaW+TxL|;3n8PhzMo8)pJczyOwH5@?FN8)hlXLlvs4^@ zek0r~hzm^`$1Y{AA;SoX!y&K5}4 zl1rCVzWoauTb}kEL&%Eca_}3KdKmCPiA|Ktnm92@0q8?NyHuXI~^8zZX+8$Ac#hVvt~^gpn1wLG0e*5eu8sDn;A+yDl=8LA+L zD_Nyfxo4&FZ7be}79A72^*0Nv)nR-a-x*A7Z4PtN&egK*bOdtyHY%vHTHfz!xI}Pm z^j@j?c*KA8RNepD($l+k@U5lrGg8-hw$@I#pz6Wi11h}yS$4LU3#OAs!g%kf1J{&@aI2`vC-LfFaHcEnPH_~ z3hPXeeMqO_%wmRrtb~;IskwZ_?gMaAh!4)GSfp8kVWt~4B<^3}?#&#WjFT2h@ z%T+#(dQB{@m$^b+OBN22TiBAd2L@C4Fp>Mo*BMS@Nb!+09_d!1LH%?p}-vk z1BOEUXN|pDFgSgZVZynm?n=tGrI+o3*B!~DWT7NcKh+&gj8)nMhDJd58V?)Q=?&lM z=ELD?`pq{>79ugG5fA=fKr;T7L}gYSAULH*vFRL33E4EW{!~rhmf_~+*v;{@K1-KX zt(BV-cED2{ zaCWG|6jQcNe(=abvDs0k3#C0FY!7M#)}TrMKDj20%)tiktGadg2L-Q-O$xr|Q%Ad1 z2Z&D1{+ng@7lcmNXeZ~H1bWv_{~ZO0S%SgwYq0;I;Kx5G;Hs+~8~<{Oo62tk6UT1T zdHoZBRUfY1X8~NU{3(;BgDyqTog-G53*pcxMQ$kRV|Dic5gf zr2$o@qJ(Ka%1S-*e6PqRf>OyD0n8y3z}BiEVMrqu*tB6=(mVX;fyPRT?Xw{KEYD?i*Y~;`Wh;e@B{Kc zf$)#uh-l&kbIunKs{S7;C2*5P+f0X- zV8F-6J3&AEJ&ZVW!9EP7#$#2+!W@`bR@nj@ft2cSOgMO+4SRlSv>R<6+mP1kRBTC$ zX{3n3{&gCeAEf`XN0^cO>u2wp6?LjWpQC!19$R&m(<{IUX1AOWa`3)2bpI-B`#ta0 z$N2j-Ya8gSkRO?C_dd9p!V*8&mrUI@BBn{XS!&7sX3}{5N3U3;Db$wD7{3 z6#D3#UaLXF%32LS-jzVF=Tm=WyM_2kzo_E^zquBaxKsMSat)6wx;U`DGc`qFPx4}%d@ltv+eXH&e;shs( zK>4Q`^p{QukdA<6%Y3X2gw|!Gq@#{35)XcSlEduB7k5fE%Z4{osQ2k2uKq|augiOJ zu#YluJET2E_BUj0SHZfhN!DjG;X6X=;7@e%qLeArGrXjdVxN@HK9DU?phH%yDpR&6 z{4O!ZYL0!8)erm9g9#ke?6NtW9SwTg;h|+4M4$wRHfyX)F@_YMfYdM$Wc)VZ#vjeZNNN)wTFm{ zg3XB;!1yg^dS`k&OjxcR76WjDouO<0X$%nIsotcC{tmCZ(Au$TbKX1aAATmd$Qj}p zuIvva7HeOWaS1=}DV>hD9Fc1G5+!OlEA3uoako=`k-y97f`>Ar9ADeL^ge%uZj(A3 zDaU$g&pR;mGbi1Hl!@l6-HPkjS_E5cKsuM)^F}l9Q=ioq0hs7yL4gH3=3E_U{$#_f zG)m~t8|W>*f-*F1H}f`xbcC`rb`^5u7BAZjzU0>IW_y`aLfZD+Qy?d-R%r9E8|3=a z&h)=Xd+V<{!(>Z1!65{P;O_1Y!QI{6-CcqmG`PFFyAwFLySuvw4KOEtdv5o4*ZeSF z&sxv>54>ybs@l71R}l`9O@DUw@vH6}<;RcWDiZIzkbCh%C@Hz?`x79FPC)G-=p`NCtifZs_!oy zg!UIHD8WBw&rF>-O1I426yja8K4R!_1SsJ3gc56WQ27NI9`G7rsrWJ>`Z-8e1yv|_4lZNW$?RAZ5w!>*}k!iGNt2d1Fos$Ii{1p2I(DN{aRoUEIG4=|cV zIqp>^CQz!$DMf{*3KpdnAIe7KIxuJVBBu2{q=QX#skVv$#cYVbM4SbWI4&t&mjfa_ zWPxW!D`6b0o#7y7@~i`vJqzw@j(w4OB!Sfv3<1rP2(ZLMw$~h+ zf9M-_^|thB=s;1$^j#95CM3Rqb8uRzcD_tZoCTukZu;i(3zU09SM9A{1cE|F%N!oo zoK!fM{-$s5f!HtQCU;}CiX9vun&c}=pC&H_8t1I)nqBXJeQ2o|@zi}4`NwHo94_Hi zEH^Zg*t|Pr2b)p1QB!Q6@$0Xys&?xCI>S4$wm&FDpLWxXs>TRClo4><4vGuZoORQBf zAmBW>Awx*h!tz}{pBp_w_EyVmbd0@81ejT&lS6{WMqD1EKLkeMEsEOZM{j79{Mj8H z!HDl|K?@o%bh4$B=!R|7Xjfdqc@gy>v4^(&l{+z)UK}FP_)C>m@~7VxxmkJ0vRr0g z4D%sIixrvYS;LXu`jo?Ta>&dZ66dmuCPt7;%o>LuO)ba>$!;6b*O1~%*lj4DcN@WZ zB)=EYWe;0+3)KfVa?fIR!G-7wTQ+c3wB!cYaWMZ}R!~+ARz=Dt1Cy87RV+#tt0cm? zG%O!8{`-J-=W+9{%aOtTDxtp1@~MltiJW`ECz9=|3iXZRy`R%-pl9O1pT03sHX^ca zAbdor{*=vYmMl%s;D)tD8LQqBvDBZNNnY#d%hQdEkPv<*;c5z42ap4-J z;<*?Hf@B9&VJMNj{0`%1`NRCIqEjMjLwz=(B==+f^6judJxJe1=G&R?CYCbeFPRh2 zVS+G=*cDgUTJL9-Di$fZYUU@mpI8H1ayEyiV@jN7=}{bZ?iUA7Gc+{sP@83p7p7UM z0mZfLolYp$R^*DR@0fTJx(lS`B?@=1KYdE2$=sonW6v>|#gD5dq{h!|Cr;2y_FP7> zalx$f_I?EWf#H~JG8*Yc{)R4p|F@&Bf9p44i3cQ9(6)n3nE(5|tN&AQ6mk9E>Xz!7 z9V!zNpB(!NN_=v%b?X)!T?qZb>@<{WKAnUhU6q9@+QDZo916|l^J+J|!p^(zzm$<- z_$Iez=e^s!k!25J-m!(a^bIS`T4xSZ6n-L6*3y{n!z!xOYI<;$!buMI;{2U zz>#03wp#Dv3*YALaXEz(@w0US4Jx0|dl{P#J$5x46ft(#89G>5>JHb|H+J$01}`Lq z7qh|)4JQz-)iga+$EpEplpdnNYHeg8vYWKur#Hk1h3N6Ny!&iVLaP?cV$Fx=gV*EN z{ko`iMzA8~e;=HmOnUW3nxrz&rL=4e?<;bz4_8LT9jgoR8EdeR#88 zI<}y5#i3J0B$Kxvu(lU)6D@^Qz9#*--|lXLDU|9{9AO$qAcwk;2uX+tOG?H&OoVc({ze-GqxfV>=YRn$c?6F&#v8R%< zX7GUS51iwSVg;2czZ<3cfFz3`2p`9^tA&IvA5afP&|y1 z?6&7#{WKv%FX)tGDp^5aM@H4Mc{2+W#i>&H^<~Ic0WtW3dGg;TP{#Acj~Lr9gJmVq z=;CYJ?yNjQAb&oH^3x3N5g>29z!)>7v7z*sMTi}RK4XO&v8S=Q$N6l*a!6GQL?@kL z;m#T6T(#MSsxC6&E~z+i1|$TlEK-@Uv4_raf(vV#J4T1e8lW6G1}LTFq0z^iqP(Ec zw~Tn+Zcql64?LyrEC8OwEgq^e3jaU9jZ9myIf~8sxc~x-`5Z@x>$%| zp&tUq64EHKQ7D1?v7@7+Y`9I0`@emSCM#<*(e;%@> zpUh0lyqj?E=3+T(A<+8(H-LI%8Qyh*f_4zisIZhNF*J|uXXES14hTtOwKHK1%&=US zGERYDd(#jN`5E#v8+KN`+R4<0=kpM(eu&`qO60}}YBuk+>O8%VH^d#Q~qi~|^VgWJW-L{dNO zsgVJDb{D}by{vm?*4TzH-(F^8GJvEtVYO=x1qh+kZF5q=?yoi}*)wzpUgRMpg%+z{ z>u-x3~`Z*l5sR`CbSsK@|J?pw;coU7amkB!Fa3L+$s&<6F7eZRrBMF@|xe(nbZ* z1MQE7%vcBWX`!d_KrOoD2mw){VzfqLaekNIhWp+d$0z2yA;ZL>L7MA>S+st=xIIWg zy1_;)_b|rTvk$@gEs@>vu2`muzcy$u4fU?>X$*h+t7!w@2kXDSR3pQI7t@EO7RlZe zv{Gu^w_P

bX~Oj+C&Svlia1Z=*pCP@UEYy@XtAIW>uKviDYXo$+@23@)wa`Ps8W zuR9b#d-bG9o>W~-(Wa`cGyK$T3p%vyGJE{^Iw!P;>tEb3?GGEw1X?7>UOJ33} zP_vBHN7PK!03srFgQPpPTYJ(m z*mw1EmBq2LS@u~^nl9_M%=2-joWN$rKlMR|z6k6iAAK@D$aYe5>m{*`b!*JWqH~;579fVWu6Hnx0PWJa=U1I)>qJ(hdDf}JV6AS zDGg$HUQ^rs+&Nd&uh2kp&+)EaiD%{+Me8qVDf(1ClZ>q^uGHWpXljy1G+oOsjeaQNl z^9+)IrK393*VbBvSjB~9703h}B1(u!2B9S`jtV#N*IWeMZJgN29z60tvfP(-_9+u1 zy?uHk^$C>->FbzW_ zL6J(Racruh0Z1-!3Q6MC`1|eP876JgIF!vV@SfSylDRGxPzX`B3;QD4l61n zL1x6A{AL~ZO?EU>9P~CsqGOt-u34VE`QzYRG)bX!zL;!A$ZXFZIvKAs$`jCz$D^ci zY+Y|s3Ud;dE!v8GCQ+)^LD)tHVCM&7!P*7neQaOOev43pCBe2`)Z%sAW|u@dR)3^r z`;umd@xpPY4au&L?y+OQMi$_OIMLj~CU6(-Mdt1#f|KDePZk6h@pc32H%|}@&-@Ry zL*L#hm#@0kV2Y5l)J6O5i=T~jP-Xt?BGd67cP5#)8fmsrZ48miS(GB!jI^e*r zoDaK^ePGd~k%f}kQHy6xkE$SR2=d*&uqpB>_~dmyR>I%eVb@9L6n)zq!McIAv)|)@ zddAWkvCaI0y8j5O_hl#)M$+#lJ=PDen>MU?Uf^ZbQC6GjhxU}&ZVyM4rDZfp(cMa-fnPme zM+oZ1V1)qA1I{9+IpzOYz!l}=#UMD^tyY!=MRK# zwA|uSnep%IsoSt&O-?GQ;~O}C;5^wesMJJU4UVhh{NO+3i=}RQvqx7^*vYv@reB(ZNWdNLY2K6eT!0h@Z%1(~|D{nThUvOi{pD{D+#XFM(TxhXm0I z-!`i7-9uNoS$oP_4q=?^$t`3Zq7s?BRVF!K@kyJ6mra5%^pOK1BuwT|OY0AUk#|`8 zUGvTmiv4Gv%|Yk-k3RSYhd6Y{@Qopv{2QrqV|`=OtbqzC_xed>Ir6$m)beDFnjO~{ zywXYz${@kgT&TJC{;d5TvAnrN`ir_(2)k*{XEf9Wny9Q9_c;H1p_&y*yd~u!|5L&W zeQ3?AZCzDpO_tWuQ^GS8voZug8^p!!*8evow4%||AAquZ8fXsZKW%V>vb>O?v*~}O z`67inIUpmFuiY$!P;OXS$XCqTel3ICQe_D6($|5mABtflOM<87OhioApMB7FQ8YBS zX}j*cy{>FFhK|;Fekh-th1G&iTMUR0aW(w>`VDSoXGVx9yN!%S25#-z^--n1r=T9g zw8jB&3hB9aN5F)D=vL&Q$LU`qZAWcOUBfpQ-$lO^@Ka{48gEs0EIZJ3B2&h}&v&6I zrE#}R$nA{V-ox%S?X~Ag4*w+0sUMR@=Hq5le@;hHJ@n}liKf23RP-M)M&x2>gs2$( zJiUEpA?j3kqu{T-f7X7;nh5(?I~?f$>mUBDlrH*T=CDCw^#LR+{NG*|`ackze-%pq zYzEnBmsY{RX2=1a~JccAuYh%@z|q!aL>_#(I_>n z05yS0X5c!IsNH}oS;u4=Ant~BZ`wkL+0H>L-dUw~+qbpjnPKL|p_8!IvEDM@%3n5C zkIq=gq0?isAEL}Uo)2meeG9hVw^m9`oN(xxw(;ycnsv%jwUb(^sZ!~BOt1u)NDf!- zAHGM_l9|ik*imh)UYZTU7UpbfuUcah;#x{dLjX=@xi2NATy2fp_?L@&al~Jmz6?8u zt~LFFixN;|70TDFnB^`1+(u=xLRTnGpTmO|pc1Z8&Iz~~3m5cO+AbvKen`e_myutP zh{DA9kR=05=IZePWxUfBTU3P%F#%e$G1xPO>PoC$p*urlYXv8#<&EczAQ?fADS23z zXoG%v(V0!kTx-K>iRO8oX3jD-)yI6~w)rZZ7)C^}x5o`GVnnNH7gEJXyxTz!JX8CV zXc|7yrXyq;ziq&XkQ983vA@A?fn%V&DEd`kj)eC;j^G*sMS`61XA1n?1)Fd2?g~5~ zb%vpHiHQj=l~kX+0aOi2>Odw~n)&j}lvG8d%A?L&3g*TS+d=x9A1)WHV}0xThlQRm zftUPO7N*Rn57BrI9n{Sc@NdBRIP=0kcg-7Ro~K$*^W@ul3FlSWpUZN8ZqbIRO;i75 zsk<1Y>N2DMC{q;L`#i6%_QuM%@O-F|}gl>)UDgC7WaEXbe< zIBQiz&0r7=|1;K=AP?ah|d%u@A>o;{TqT~MPmG#V&+)Cx3pf?drGn{-^5n4~vfI`-G zTz@er9@77W;Ybt8OTT}OK!3VZL5orE;OyWaS;KH-V9XR*mW~n&d0b;*u#mV2(*oR^4jnQ9VyO1 zk-|}&b+Kl)Y1JcfM5Q`qcC^+d;}df(SeDVQlL@{pxNg2yNpxA_xhWU`(UZjT{NP6u zT_`CeO=ptcjg3v(&@w40o(djtaFbG>gR%MF#1E)>5e1YEOJ0$$olpEKl8;EY#At#X zzm+)_&~$|xcUz#vf48hBmZL97---W2Wr(gxAfd&Tg|C*>t&K=s)+CehtecF(LRNdv zkP04YOyM!KwBQnJ=*DT|;Iw@#P3u_%H*_%BG?Y7#GCzdZRt311~4{@E?w=2Obp&b;d;;$qE zkpEKDlWAqQBi3msoslRaR!EDj5XtIKXz|sJS_u&M+M&2n*;oA4;pr1(?Wr@wZ0OmU zpkO!j*-%WlJpd-dj!UJUDuGw3HEyUyV}@sg)aGr<$$I$;W@)H<=$lj~#Jg0c0>@vDokJ`;zM0F2#ila#6xWp&Yu>32egj$gwsn?WKXmCb|vA=p<4SP0m(BC+;4 z%dq6mSSehS=2lH!@%j4^DR;%k`-a4yAWN=s*0ds$-dwzuEY3*z8E<*_N{J&&sx+hP zqg>$#?uO!;<@QjMucMIT-w$NNq@9}8gNNYHu5~;D%1$BkQ6K1?rnaaD%>lhhzC-*$ zLOFr~eEb~naGaqG@IheR{kSZI<2a3XHJ|>KNB`0jBW_+icIkqPC@uBZ~G;4r^2Y6|zia&g!cbn@UEJlx2oO?H?E@VL^e|!0+T4uq$p2 z9p>)JV;%3%{4bXkFQ2H7jypbrYu>-&%m1DvJ%B;MQJMr{dSczX=XHaJ<#lZ@$N%#+ zf(+i&ju}`>?40HBS?VuayoA(vpf~rW!3%tS>I`FrpCAiOPY+vBp$qA%BjKkC|5B z#m3)+E5wR6ty2?(T2at9rz6Na9>wET0j?sPvO~(gYOhmKs9k_0LJcAi$75Br=ukyF5MNz z1kC!r$Kw2)uKyX29(=#{TtFv>QN_-Hzs578`{z&Lxl5DIe)esZVH`q+B)*WN2S4UJ zr|D}>t9EY^d86=kJCp1#?Qfv+YP0Rd-GH3-%5OKH%Z20q7`?UHzSa7Fq-{|^&z=ft ze2Caa0%Uk1%>{OcEtrX^*TrgXkVxs*bt^U`qM+_mb{}OlTFoPA+nUl!n;)c5j&i^a z(&XCA{!opX+Vp;G{@L2>ekgu9Bh*J$8?w5e^6^h-IZXTQJnsYT=5srz)iY$XQwIW} zA6D8{;R#kj<;=<&Y2GGqH7ni)%qNXh4RX+IEr#l|(H@k4T+$lL6=_b&uNLRz4Td>Q z0c%tDP>lN>bvfv&o3&-p<}uj{fHPet@u}@moq!#&6pBplNNCwlZ89Z82f@}>jkYr~ zOU)rvR4^*Vbi|mf;yyD`yb^IA&TT(kou%hQ@G~^NifwXPLEq$w$&p(@WCR(&n#CY264(8*SCEJ zZSzmZQfi%MevfQ~O+WG%FhQKrxrzxpXgv1tp?p`RZVt_^>FFIvOpf?E@HpK8eL>Mr zvi!t6+5PtV2u{k5m}_6$=$k3|`;z1tuPvhN`WwtAN`p+H2gP405(!0~QKYbz8GQ)b zt~!OTI$#z73A1CZg`cMO&VHRu+CAHvu{9D}mTZr(esF;j_#=_!3cc}i;`ABh77comy z8DWDxYoHEv)pNBl%RSdz zU)c_*I)5-xv0EboDy@9MHdAeNohyenBlM7kFl!=FJX+vO;cjz9h4@|t|IBws8 zkY2Zdt&DuJgJO#pI25A9m%e@MB!Jfhd3X3Ib=MGAA|yiyR6v7pEzLjAgge}T7t@FOts9tTp%s;%f!?j ze>%(`bBnRgvJ$P6);pRoNofuZEiwTs z82Pn}#>(c7jE%Cq4=LYIB;hY+yY|e3ENi=wxkasrEY4;}uajI`*(|UB084Q#t|_J1r+(<->Yu09<_Qe~KyE%4+$Z5c!P)}h9h!q3-2 z0ak{>YT^W+HWx0qRa71qaeYzADB_}hD1ppGn+0ObwQCbuhQ;3}N_W$<8R3ojPQ>M` zq3l&SJbvamBtNNlu!>;at`h_23(BO5RAvR(XcZCK1e_}ipbL2GN(EcI-vNxHk_RY-}#%5KI1()ZdAHDz?%_;sLYtTn{>z9Jz8QKlK?C%8!&D@%G1Dzw2>*HREGpmTzgej4)(R{-prrCDom z9{m#u7|dK|+P%DQ2m_83pqt1K=EIHH;m3B0i3LGkr4x+lD|nxzDM1{#$QE+nm8T?< zUbLYRKKUlHQ8GRUccpHOlWW>0i@htPWQ1aM^)B|!@Ph05bt-eeLjv(vW88v7r?7Lu z^+CLsfUTlO!&(ANHD1`kPMx9uiJnovqd$M$C^P>*&Y1mAp-J4{#r~hbQ8@uwQPAG) zT4oG2M9S3Gky0?Il@*Y+jfDc@*%we&=P~_a*G_DCipN=5K)c}JJ|uK@|6xSASOHl$#jcMedG9nk|EcaL9h=Ne2e!b;rI(_EggfebnlL=cmz)k%{*wR}U;M%Hl zhHS!QrOBgZl23aC+*HKPCWlDdt*dzjNp7rBEBgd?6D@mXIi)Y(qIm6#L=goqy)CFD zmTupCFQ(bR71T6g7#L9pZtK0^X^t*F(M7IVJqyiBp<6z!ThCn!^LRoD#}k?y zJUJ(^U&^Z*i1T|bTzDr_E?aq{l-Tz7@w{i_U;wB*v9{nfghCOg6VH-^L-qXrJYn-1QPhXg_8%G%I989;tuQweg4% zRgqa~TyuM&N}LImD5?(so_}k?78QoF>o}p%H}nnq*67IT@aR~yKtTrOgd*oaR&qr# zR&IBg2PVcg5p!AvtJK0dPUe63vgC;P9ry`(Amb&c{DmYwq8uPrEYedgFvseKIru8b z8n0Co?!qmEG9qw=csP5*g>{3BF^fDLg)+z!v4j*_*Tn0fTO&FmtOe<@NJ}df ze#!1Z^?i0nZ7Drg9N%TXR9NR+8Q-Qq;FLu+cZ@kTY$Y)G{`B=<6!CBV=spqL&jTS~ z8iauVRP*_ZfdBTP{1XB^Su?Yv`J!L!TALNp0>fwrgR2T8i5BwbAWqz0#9B3WDG%M@-nq{;OK8xWePpA%w>e`je=b_O^(>KvJTiB) zUD>?llZFVepnO7a$z!H+MdbdBPSBtV2|ssKkxHawe}8wX&E=_y2MCFD`_VjL%??gv zSrWnOd)Z>~64#{)2qqOAmb!Aim1k-sdVPvs`c0=;yKown)rK%<|ICy93mqPNn1V4# z6I>oO703b@_`;wG2HKCN@I1Ar>`6cUpif%kIFZkPGGfvOLa?@%96R-5(v!%! z{3wJ$xi`0JbU}z4BpnSKB#-Ik4<-k?oaW8`g2@U;1=ks9Vl;p&;5#CzS0;R3pBER| z%|TkIMH@p#jWp6*>IO|OHzLcPBr!~H$rKq|k`&z^*65@t* z_@Z=#R`7tWJJjA@?UP#58#nyz|NkSB=qsk;_SZ>_WM2k zo8tLbAc?Jak{Jalp5y-y{aZ;pH+$=U_G+rsY@M}4(flyz*Y}eP?Prt4YzwNuWOILF z)AVbg*gzkpn@_$?!0fwE<+#nFbqU2!jhRqXD70 z!PhhHTlj_~p$kK2;}X5~k)w1jC^e&0O?R8AqvoE04sc}BZ=V4)zm4h?EupG?sIg8?z3h?vK@gfAsKcTuYIJAjdSY4T?{&x+Mvnx;;YtI zve&db6_b%PNsMmJb@L}4eiS3m3axyL_4B$_@U2s7)LEp?6g?8ADPO5*jaV#xnYs84K)^~KB9S6Hr(%b15hs>C@U^^_aKVg7*l&J;3l;bYU~!ODY&0QA zIAKPLk4W1Q{1bf0>$PE7G^1_Xm${H6DpBZ@nj*${rVE=4*K{WTI$N@ZYCM8{6?CzOW-V9wR)qxRCV{C5?)Dh0m)+ zikX0lf#BaA{eQEhN4E27DJV|df#QVte<-B>SDX;>v@^8*Z>FWT@y~IODiKF)i}2o% zcLkWHwSFsQm;rjrgym{e+>*Iqfe}$Nx*AkP?OTbn$tN-oFnln(+0Re_>+IkX11~iu zBA4{VI_H9h4(Cbt?yK|5nfKpQHU6J8L^ecFBB3s2c9eb03?x^kWY-72LEVzWqrtDU zFoiS7((ZK!K*KjQDZTBenYtHrYBx(a?N;kDBzKz{umkVYuR`LzoibXyg$hWS0R4PR z&Iimv$s=|w$JTzzjN|h<^7GzV0GMWv0$G|P>u%uM8n45GPi^U#FNcXn#dB}=0+QaC zlU4va%qCjE!m;!YQu={ANy7~K=alNJq&AYbTzl`SKPCCgj~+v=aEWty0#woKnD3MD zkUATBEs`1v9!2i*?H826ybxC!6|A&QBl;I~yrA)r;AECk)uqR^#hwsvk%Yi3Up|`4 z8@KN+!uc)Vt}ppvdt6^})Gxoo`G^PSS(M+?=qWRmJ#cTt_7CY6{UCDZ9)PbCyDKb3 zO;S#rGi~Luf;^sos#2pQ&H99YJ_8$eQOPXBy%A3V4)Qf`Vj=4g-BSVYvtu*jdE_JW z>9~wnsiyiSPd(rP>w5}{jl}sGc1K^$t#pTddo(d0{@?~aR6<35_8e5LkzUSu9+|0KF=iw{% z5l4Nea&AaB2R#8vbv)?-Nu+9Zg9@0!GAN>n@QDc?VQ|1fEO-2(8i3LxeGPl7UHwZ%p}idEwoN% zk(CNlcLWcEbADaF$!2%wtUP$o$-Zqd#D*DvGs!JU$C94>u-AFEi9NnI>BebO-4*UX zeuiMw>1Umc%Th$d?}Yq)oyQ|b^UcB~6x0drxxqa@8a}{#NjDLk6(PEAHKfL6Zi)*J=#a-1MdaZ)-e0f@hh~1%^_+}uZI&0o_T{8_YE%UcRW+> zZ^-FIQB*qQE=g5RVVuLoV&883`Uyi39jJDbNv>!VZ4lI9MJa+~Bp=v}JkwJBMH(Om z#&;4v&k<1C1=?5%YX3n^coyMy{KR5k`1RtGG6PGyNVj^ag*u5?3?fMkW>GX|kwcc# zV1C?anP>rgeZRy{yKQo&bi#R0TBHK3+2kNmeSo&&cy_&{~Q)7Ee%kl6K1PD>o%`_2>8F z-*6zdAObc9b(sk~dg}WXf!)LE_)Q;6gUyi8dOJHD%g5H}>lS9~6r(;3##zXqTve+w z6)U^-GhRnJgU`?}8^FrftuJJc`xsaEA!3@CK%F)P-|1x)c*#d;hsTkacvf=7H_(>lSPN$YQ?WJe~^vCj5g|5Yt0t2)ST&N02$aK zV!#Hi#2E~_;A2txTjW>KnYZYr#COc)P3MoaT0W{kc6X8FdTuo8fjkmm#k|CHQB{O& zV9+^E*X!(s2+=-~$C4HW%M_V^L(6p`jV`j*WG#Si>q?{M%S$Y|CePbPW$O@6(Dc{v zO}k&--lT7f7Zla&-k49(Fv2rRC(e4(OjN%+xn`L_NL-|-^FVSh!s@tF)j#zE}SyMwaoa6t9^F;fSpr` zLQ8K%F#K?KVaNDYHN8EgQq9NL0FsDmD@t`a3zRg1C+F;6ke$FK3ych_om+VoJs#=V!aTCy zv?ls+2L_ehsH(gGf)z0-pm0E4BzZLI!F?i!q*R!^<9C{h&*$|TS7Oi6%%?e|NU;5d zG=H=s5JA9r8daFDXkNrA`cr)U?h4_|iKOp$Hwqv{YQ8z*@dw|y5yJg*jM3 z%4v}hN46S$ylbeKnDP0bbZrhvisuW5B?ROtnnQSHe*o&{K%mz<(($YCkDOyc)9F-A z)^YvZ6OErIJ;MIwbab=4#fAhoFIImzFy-y(`7!X({M1v2h_Q-U|eUfbN zJ~^h!Y7%S%!vq07{1L6D*G%Dy#AnJvGq5{w`~~_^K9hUY)kJbkOL5rDZ*jY5c21Jo z@2D&lHz7~_GQI>ydVjL$>)Mo1JIe; z&`sOk5dX!W|1yXrM}wq3P>VGm;Xijk$%qL5Q$SL;{o7pi13<8oW*FrWHmc?;fhtMc zJS3?vl0OWS(FVa7vxL#vgkBfnuAB_gGYk5Vg;b(-BW&Y9dc$>_9&54EDbq4Ni4E1mzo%v$ z!Shkg?Pe@EMe|_ssprRSCfXhsRbHklRU^I(1e`FBm)Mk)9<-`XM+Fve=}b9`kKw`D zA*GwCcbZl7;pwI}H>H^c4+1$EV6&LEj@y2**Pj#~z)`e=Zmuc> zX!oI!yR!j{UE9g1n{{W6Tn#gVgUK?1$35C}bX_jT>D7l)-`J*RbQ{(+&VG)teuH-7 z=U(J(76+@FwH)2XEY2VaawDxljXYk~H#}yiW)`~*Gc4mv#sstDa|5g_au(>&c=t2v z@O<+}3xJN}s#K_+$eJt9U9g)dS0PQLLGV{$!^@6YIgnEI;KH1PWKcq3t|cYQYvHX@ z@9b2ooyzT=983Q_^mFdE^G_BB`lhSjvwenD|qNPN>o!ycN(&*H>% zPC^S(dsj1Gwo|riJf+Gf>vPYwn?V^B9LN1o`@Fo@G@$IS>7+aTW+IyR86fv0fu=^@d>o*QgD|QPssb;2!P;%p!QimfFwp( z`N9W9j|!TCibHN+KR6^J*5c}?YV>s1jnOe>`RZgts#+`*+n~{XWyQ}Iro210nU?65 zN0a$fMm$%OS#X(f29YVW!j0$?%gsk%z^Y`aZ@^Eg(*X38P1e%GhnV7h$r-73RZ_Ol zu{TX)|fk2sOJ6`c2p%i~LtW$14js7$2 zPRjMwZ@28+v!xV;hioFkl6H9{pHokw33w#hX>r1oV_-?nJGhC-G)sqaP<2L9SIkZL zQ3L>4heX`;O4&zDqn;yz$w~ZSkV&xhb9!1oS_n%1?>W|L1HfTN?|WZu;MqMl?bU-9 ztv^bX%2f16^fa>9puaFB+YJ~sP#GJJz%UHZR~BxpBO#ApVD5Yhxmh8r$18M=aWPAwR|+VAmYGr*K4{e>ju^;+&NQ8%bb~?#BPdwJ zXFt2tK5KU7MslCi>4C!g^w}@5Rnr^kW}a{S+RS_t;r03V`{&#sH+X_7m^EZKn4LD- zqBg=O=ulsw*m5FNtu)%__VmNbD^dPBDIVpJ)ccU+-<@dScZ5g5cE$IcBW<{30}>SJ z1F^304DjFFwDZlP?aV4e;>yp%`zX7H>E|YMrI&FU+73#jtniDixGSQZi~6pYS9Ka_ zgnUY(@EGz`NSd zhK-Iz2&^$OzC%@#G~*fosa&5tupY1({Ns0O3R`4Q*f$z~{|_;jJ{ek8092XQftrE* z{~=8U{qKMN?jluNc^q*hzeRg<9%xC40HoReBG@`A2P#X62r5Y?B*ip{&-p?=S~*K* zYj+z5c6b9l#s0Yjt9~%5#7(D5?;m|gaI;i z7I1(&*OSPh4LM;E=+2#)Q4KzaHuqtYvZJ?wDDF5WpcG%&s+{l>-H@%Q9I1!0h+IKQ zu=HXkAuBLJK}2Wd*Vb+|T)v)f!Gmj(VIkdo_wHp2PM>mSor@=>wLadZ&1+pm`Ow)A zIC^kRVLY+h`j1J+zb-+prgxJR@{H~XuLbu4#~kl2jX}9eU6-hW*LoI>v#5D8l@gLzA_cwB{ns(US1M ziM(5JWK2}(uGnEWdkGcMl06ocDhah>lAA^vl9@`#tlA2ASZked_PW>rTU6MI8$5h$ zBW(@CRE)V=Pmq%^|7|UYoigeP2PDZ5J>VENr;H;d{!!`klOX6)FDf6+)S)W4x@}CYq=^F z^Ali8kBV5!nr^tB9!$|_Q3L|mTSgqdTMn>Pk}FnSVB^QXY>3bjzL4Ih_WEt)O~Uix ztmgu%3Jo**zFYDN`oWv*dbCw@9eS+WCy0^0xv6s89f(NG)7EG3bU=%{jE(sGbS=AU zr8gGsr=f__&<_9DV|sGmDD+Aa_7Pz?hPh|>T6~t={mtTVde~xoGAr;+LJ02LNd`+K z`{4Kz?k_SQ0g?@P@|V#bBH=0eu7xirMLBU=BNJT$UMuONT>@t7F9;+xv3%HLS$!|R z(Qn1S=jFCUlyE)V)`Mh z><3SvfYlrPDSt|9l!&0SB$IfKf&%XaC{d{{+pv$!)@H11pq(^D&wbyPG3VC1FYcPh z;n5hnS^e1V;&}gT-q>x9sx_nZc|vBg`-tz#bLx)Qdz0^|VNu3_XBhfz@R@y*)V@Fq3@$ikG+IX=N|K03Tv31qQ3l;4UCp=pvq)*> zw#a=WEMsAd;v3{peiYGfyxjAv; znji$QW07sCtttCxV@_eewv_&JxB29x37)QOj(5rfZQxpZSHbg09m7dvd4!j#{UpuR zA5Ii=Rn01WTytVB8`oAN`y>sJF}sG%Zqt#yis};1ou+dOnlY8GxN0qyzAlemEJePW zBT131Y2IIM-)R@qr2TH11R4K)s0JjvC6ae82Mjs9D9rMYWFBzwB$8Obp<@DK zim`>o%Y3FQ!50cNz4i!OLlxpE*ODS=DBVwG&8HC7mcEuKwX}@L_C~804^S>zSrmiF zn$rYM<5g>c?bHhip7mU#>lpseEUtDJh@h6llIOZV#csORijx`D;z7Dqy@4^4=oN~- zkmuw?7hC#>JU_eAQ$MuRZ}z%pU_a*`TfQ_wR_#z6X&kop*Y(BiwvOK*4^a+L2kA6s zMBADCFVfEXDXs@g`y>!7jZ1LX#@$J9hv4q+E`i|CxVt+9cPCim?(R+?cyM|9JF~Mp zGrzpGvsJh1{sZ@%`y6>bN6z2i!ZL}Ieu@^SyB?76)@XyJ(~}-hexJI%hGua#$>OJg zSz#>FqfKH#d4xE^jH&X~RFYUh@B_!xE6wv{BXBAmkhV+1Wv$X+mUTNZrHFXrcM%A@ zhU$6!Nr5XKUBNEm@@7`zyi-eli15nEvZW&0U$4wgPkE4_BErf8W2AmB9JcmdY0i@O8FJHy*dYbj+DgQS4lbGJ@n%J)LWR7$2R}G&Md#27R z&3To)2FoKddj`J-n{ZK^MX`vEycy%_MA7W?IOZbt&nfJe-xrH^d>A32jJ* z%uT7sw&DRdgE1vTC^#D84n%;5_&Mifs9$(1Kt|h98X8E8oHJP>RwW%DrFv7Jp?c<9 zDx~kw@FM!i+qVG5(mKmncOmEdwN+nufu31=XVLEG!e%YO7`@@l&+w-7*ylRpP}B3uj%jO&jZfB&5|qOJ`{5s#B}cGK2zleYSk*7XLNM+j>Cyy2|78OJMDr^0BG;f_KRg*VJT^E9WC zNMdv_XORx&4AW0H6LqY5dDT)p9QFy}FNpOiIcLo_Ja@RJA zh`1a_Ost0*@DzS6vpBMN&Uko!P`6JHO~)KLrdfRAIIF!aE&~HE>c^jQ{V?-=`Hr4G zxzN>*)J2oa)gDBOs!+iUb6AmXfWz>sSi_2=yqEU6Oepy>zsS)zn6FL8JyOVC&K=iD zY}B%_thb`1p)J7)rW%1-RrfAPd|4^^H_B*}LraOaS+;fdeg#t#Kw*+G3{G=!`viAI zr9e`_=7HrI@0|9!cf`p5o;NMUvzdSWLIi>rHM2@C<~h4e@%lJBE1=s#Tj?CsWQtqr zJ9!Puz#80FuIQM6e^PaZ-T?yt<}mU(IJI5ZZr|2OchFT#ST!F{7pkheyMNJxW6dTrvPEhEY~|imDY%7r z;&{Du-*nn@FhGO2A5WD&me+fUOc_V%BCza3GaQc-vNzInaFiz>tA3u`zeVwv4;CmS zuU16D?X@#k1|7e4E8%7cl7TP;-kEFhP-X!igEwd%B@sjk}APJXN3WfzK~ z_hfL7F}L5T6>rJI!kJ#F4mfaZ z?0YSEmEXE;rhg3n>1zH>J#1i=p>NA9@Yiwd#`mYRD)UNB5GlJR^J2A3iA`N)7~F5+ zs6mW3Tcb~pO4#eAh%%<22yZve@WaLx&g{{7uRfB5-15!Wd$+=P@2!LH+3etT&K#GH z#p?0fyMSAFcN&|!C7)e%I_~gyZH%+~m3DaFVO z9541@m)tu?wQm3q1CD)1xR!iV*n<{@=kKH41Bj<7b@Etvu#|F0QAItO@5uv_x{qnK zP+%`G^OSfS5Q?0vjAF$CG4hati0yyZpKg_-y57FTik+J~1BI(Eq=cXaz` zl_t=+j|Zt7!-qc5f*obI+4J~?-CrrD;{g*}Hu$v4$2p`|O!7$CZ=SrENCLe>R3PB) zFIbT8D^XkndMdI6czTM9n>mlaXNc_-zx#J}@9Aon?`ofgDTZ+pf+=*hK+nDM>1Ox4 zVe+GEZVFGdA{`|bz~lhOJak|B>+CN&ZCtLzp0 zef=Gc#8eLCXqh7dX^f0V&VbZNvN%Zow^NCl?I@f{8tEtw#KSQ18kE0<__UtVtJ?K` z+4rA@8GrRJ301GPe?azsvLOgUf&Vb|LXz%37T{KuFoaMA5^U;F-_wK#+mKcqtSH&XPk%>U-Iv@4>(sA0x*{rvx z=i^{C)8@M|13{2pQ}aYEXTbODCU=6qzEYfK;QGg3|p zaYtIQt3S1xmpf~h4hyWBd&E2cOjpE~pRXy)-bTg4pe5jM5L%MIAhdrdD-R`&V@)W? zci{|(p%bnf#Gy@5Ko(KNcw6roVIdIOIX54LYn^|E&>|=l9})Zop$!f`Qa|FuC_v+^ zh!RJcy56Q4ftqtUFM)w`2vky<=0rwYot`^m6%PQ+;83#W8MtFDzTaf8!r+NQ9f04a zGW{0F+Aem3704%4*xvPTT`Jx?+RzqA*JKt_nf<3B@YVhw5HqzCyTAFPIxBXUV1$+N zX!;u(T(y4LlE`JWz~E8mA-fr;)6k5duIiF%ItQ*mFU`Ul8$&Vs zBx*4L0DD)L9h3D;^3u*>+L{sO&b+Fsp_8w>Md zD#Ekhms9g6+h$6HZD?R8IS^qx?Q_%b1`$5Y4ocznW%XWC>n6Zh4Pj_3o%&yasnHowRR1B6b!G=s zOqSrQ6?N8^Cy4)8?M*uohjn_&9aQAOQlNE`-p#B-Naq7cj_kxmje zD;6%qrO%G(`+gZ%oQ4ohEWc=*_?}_hqZ@@q~OGO`F!@S+r{?|eBkE=ZF z7e$kAQH?C>C-HixEK>gedfo;g^$i>iT=Q~S-+dOn{ z4b?>+>2m?0J>9|kJ1zHbcEX3l()*h8svt3QJ6&GX`u_APkJVkDkQ?E}^Ta>4nFosF zQ8cG?j26!ds9&cl6ZRMD{- zQj?g2*9Eufzw<1 zMzIA&cI!(<#zTG zrQolEq^ae`z8jJfK0=I>|7jx?k`n&g2>stV;U{FjwdX5MFm@((ovq~T0;B(cRCnom ziz}wd2ZX4_U6Y=_e9&k<_(XY-j1ao@&IA4R@;$txSzT1wf?ei^we>X4cVkL@1B8Xf~H_F>Vv{{26ym-?nH3S7b*7s7+|*I}8@B zJ~mq~LtKn7=b_zJkd@fs^!*3VKJ(?JB+0`7xTb{0rM>anRs>XdZlDf~Hl+_06` zGRE`OuKPuRx4+rW_xI3G@vUVtfS5$9?~xm3e3a0px&Z6^S)_Gr?Yr3I-!Ug+2=DXo zJlE}LD4@$(Q|0VYmyFgG`)MNa1gzrz&qHxbUSk}Udespl+aK0VR0P7Wgh&z@Di10-JDm%Ioia~70Idqxz z%f+YSE#BYhLwXBHI!rL@1$I^p8=$^d{RDdImwM^q9b$@03SYc~Q!+0RzBXM{J~;kW zoUCwNa}bnRtfWKi*;zf053!eA1UYhSi0cUad8YX!u?b6EB4Npt^?LlZa>8~OXm*5K zfp+8-%^jg8ZvAWE-O{9}>^8smtfw>Vr=tu$^lmYo{G@H94qVzdF(*x}j9?QZ zV&x~v#F^k5!T8b~hga0nWTTm`ZtgD!nxtuwCXpg0+NGNYP3XZc^-1(NdH!Q*S|J$5o$fUZy<`9 z6f$HH{tp%NSJ!_vC)z>`SExS8)?T&@`KqESsQTRjy|g3R5h|s&0eRAX26%#miwv1W z?kVk+5X032NmyTsy|`}z%LHRTQ^1!?!PC>z-(&pO5Q1BbKJjO0oc>t~UgpBxs%S4q z0Ck=rMHnXz@7ak*t}(km3=tLDU;zx0vD6XHB1@ieJSnGbdsC|66l)+IATB_CA9DPs zX;goXYtf^|ri!N_KKqV-R+9x<``37X=u(XcDD4}Q2G>Fhgk-N}0JBzc)vaL-Zx_b} zzE1KuzV60sI!u<8@enf3W0dA}FXI8-x-upQS^oSsKxoKXY#P0P`5^sm0!b`ZJ4;t! z%CEf_n-c|Tw7|QV?)#*3q_DCkNzqYwZrqbQ`z%M6xJ8IK4JjVtQT)$uHS;;Kri`2& zR(2PAe|e{+=aPq6A~Pcayvb!!^!c`~$)tu4tP;Yahc3LyI6H=H?x0J^P(J|Tu429+ zj`)nIl>j;JZ4Kz3-D2Wcj~xvXZd|)41yM(*h32kr>ygcTRjX7QDc(E=?b(2_U45xYgbS!G}?>fS@+wDQEgxBD8bsKgjcLXe*aakQ?Owj2Qg_6 zd`wF*O0(^}ox=w%hvW^uherQl&U_ZRbfNgTNaWvsKh?XKrf`%aez!;(TiHYNI)+h* zd}8E^>Y8oGp-v-S5bw%oz(0xh7I|W9kmjumJW4rRg6pe$WV{(++(|m3rU0%$c8)1$ zDw%$7jd3dRS@=pYvSV>Zh2rfNx+-4iAp%M1&w?$5W9#j76l<=ip>_M zOZfL`&of{Iq7l}5ZKcao)E-&B*gp_H62m=(G3q+TD-NT){?i?Zzy7!4lcDa*keK?v zxELWZ^=~dldvu745tim7d{choPNSYyo|anqPa!5Lw0OL)Gn}c#3Ztx3s!Qvq$i>fe zfATmu6*py{A&y_Oyv`+H(G@eBxmo9V=C$L&>0M5aAarVv6^!DVdaOz;q9O48XCl!p zu*ip5w8A{lC43C|SLTAPuz(Uk4<(qr4>9m_S{XBplUfuT;1g0pmql~g+VV`9+)CId z23>14_Q6;;do~g`q!hzO3m&A#k@2>&MZ)=QttdXLM)DSUn=(_cS(yyJbY}Yc+~Zy+ z-u^2*EOOlCH>g7E9jE-1bldiYu5Da8}kPcE_%~lsvEE zEKndTzJV!E{p4<+Udq8&wOv*PQ2g_Lon33Nz^9$wvDSLNu5{Mfi!2rhnXE>Wdh@az z`IcH1l6~j11{kg<^C*b|=**SFNcV1?%v14Y*~(gysR3Y7{l~c3ww{beBt7$?9LiVW z7!VCuPeq$BBiy5NQWR$0tvyUKw?b=@#?tMaN0hU&so*+*G%AC7!RxW{RxN@IbPZ^I zi$ww7IMUl1dgOYp?l*AOhKTB%kPTF8Prc z!^KQ6O$s!6>k5kw>b@7l_SCS$3##9mc=j`=(@T%f7n^a?7=)ltj@W$?u;N>n){wn@ z(s-)~UiSC9!DDZ>XbBJ{o@C__=xgYj%)`U{0A)V-tV+XvVkchZ@Y=nzJwm!H25CSeNQtW zyGN=Oxo_U}hX!~{!Q7#Z(S&?$!Wa=0CPo$fvPVezoSnkGy^lk7z_RmGYHVg#Jf-na zv5Ik)=UPoYHWz3A7qAK~Mn`uLDTY=K&`dJ}Iov8w3pY&EL%3FiaxcJ(;{Vc}x+BHB zz0dpbPY#y9A}0c zNXybC6p?M26FW5x6MLj^^<0j+6b~D9A)DG;K62dnu+Af0RKswJH!nv{P)*@--pO zV`J4G{!ai`TLYU`gvdsvGiB8Jri+V2F<`V&qwxh4s^zn!)QR3fo4Cn6MMlB?S-xUP zI%r30U>X+1wF22K=&baIunDP{#pPkB6Slte`m&lM&5Q~= z(u?#Qdzy;ZlazG-VPUDC;j0T4n+e{ykRmi)$q!~j52pqET*ol&N)-!O?5|I)R?1Io zUgZFAIv}t4w04~$WLtL}%$31kd%a^6-?JL!1;oUk8JnCNW@C9v@7n(W`O$o;|1g$! zx?}k6`T|1#bN&bze-EBnrcTXsO5Spv-ucP6Zt}n$Wll52aDL&=f!63c=+o2#6)9x= zMUDhuTtwHG!vs4YZ@Imz?BnWH?j`iK%oz6D<6tT^v{{>YxkR!;eB9VLk-vAtph&~P z@8XE}mBGev0OKHv7et3z;_pjv43pl%2Ld{7p=jk^IdQHviK9N($yfT@9qAcEa(jbW zg#z6(x~u`rg4p@!*GNQ?Ex9fB#-jD~YpDUP_tiCNPFj{O74j!F51o`cN(QX`J( zbs4>`Bi1ViIk;tQEkaOSwwBF4|AvyE_)wpT11Y(V{tvq=%I=2$Xv3&#|2_L-H<4*n zt9ESK{&b;RDC=jht)xm_;51^EBOa>()U=)2xxpcwzvey~;YYnf`G$4%dYFANqSyFx zXLvBS&v(eTnVt4m?`*O6p|C7X*MZ5wNOKEx>puW7-Yf52;eqd`Nj+goHdbA*O7@$&xl6I z7jTu~JE;z}=?^O)ooh#YDWf1rA^_hw7)>#iIw+ylj*Ef3-Ey5M!~q}QiXoGbx#28B zJNEG(OL$s1AUfz{3BPWX_d7r+980=kc!6a_P?Rz-5@A= z>|veaoEnL!8!Uc(oCdq+T=K>LCb6vy1KHoJKlpan+~#no*&Rw%C{_!Do@u5`75C**FgZ7!nrRox02m1> zLhW-;FJe-_jJU_vgI zPFev((f`8z6Lzv{Ks*$>4b>>&`0{~Sgt<~`JQ|{TCppZ16?0=HFVG& zmB|hV^vlg)jM|q0=XdaZ^@nRVbo^zLg*9=fa{NC~anKKwNbbu9APbUX2^wK+yj39!Eh{1LO(+@yw zZbllMZn8l!P@a;Y{se;#?S3_;%%^&pj}Tv^!BLK@&E%r3ucCd!7_%IZg@VXm;gft8 zwgn6NI(jifQor8_iGo(sz5+{-GI<1Grb3wm7d9f`_$1=i2 zzxhL9DiXH!;XnixY+qV}$k*jj{6)3}BSx(GdpTMQYVX|Qj3)Y_i@q=aN(00ZDa&N* zGGxmuPrh#YNI;7b97kwr{${2s``K7sjOx0w zu~?#iwDYVgT@ZX(0)$w8%WTh_n$D|~BSR@Q3~)}OI6z;E+Oig#PUBLh*BIAJ4C18S ztT+@B*UTH%st8=GGVCh1*GSm>b-Sb!;?n3B`#Gtd*R?9$P5SLB8wD&;q_h8^Ew_|! zrhd#69@Si#Q)O{0bXTJl+0ethiuqLiYw-^!zS!usWlfiW#xHqdt>SC|9|O?H!@8t` zt9_mIt(iGtvTaG3%)hQ0e{teyoP>MOi$I1Tg*)1T-dX2>yXR6cPQ^{D%J6_8u4h!? zsD~vkGn~SWMfPpbNA2=m)ent#l_JFB121ju(%Qf4rRo7F_pck)lR)VuMOOSshUsiOC1So*% zm-~nt%xCGjc<$n0aXnrPoX3Im_iog_0@ag+SfAu}EP_i7`#qkrv1CKu4pKP~J=$%vM)8 zOouC2=Gb|)4BKmHl3&6ogN-{H1E&zNm|334QPxGRBPyL@ZqTe%DMjfw}Wn5-6@<_5Jm3re;_KTSUB1L z_e}L)1i6)>%Cl`=-Bz$7Gu3lYiyRtRA!Jy;F26cm*PfOo?SZB5r~NbT9^=1Gdx8e& ztb$sGCwR;cAd@8XiRG8elTmjl6qa)cG%Q5BMIeZ; zI_3^)5JAqZ4iV(jtG4isIRm=7?a< zxYFPBc>6!}_^rvm>hbR@__>z<(BpRyJ$}c=H~Kd{&h>Xa&M*#cKH;z3-7yO2Sq+Ei zaqF4L$-Y{0mL~}7?n7pe=BL>YW4Sv!LhtG?a5-O{;Q-?V-~{DKCZsn@BXzNeyEd1Y zq=bg7yf5z0@#piRa|?t|Nb+rqi1<7!ez=qY0QHAjli??gyU>A>szsYlO5rhvj$T z6=&Y!3q8V&PvhD{zQNa?#i?`$gIOZ~qsP@l4dWqt{F?l4dfZ^{O5FkN?|OWAK+PfT zFFpRX4`!cRYFW3RW5jyq?|NJwip$25%lDu3_+N$PO7mM=4&*aN`acww>Xs&^6#sRt zA}euKVb%aA#Mjh#T|CYo4mtZP5Kat81NUyaRfKiDr{)7=OYI3Frgi)G6XvzFqbPT( zN4Qjroyrm%V*m@w#=QjYrn?R8CyMal$LEcbhtBHt)#{f&PbZ9iw1oxS5k2s2j*PGU=4nVCPY_q}d2O z=u7UboPDGntXWUrx7m}mpRF8f0q&*;SdP(fhZ`fBv6O7_9#8@iM1Y#ByG;zv>r$PF-vXF6uY8BpNTj!C7K=vl7OMR^we{v&PuM|$-n$!+ST zJOMp1ayOOC@T4(aGXeGby!z_~E0RL*+8ZO2;j@16BZL!Dx$4>(F+5${cxrgSI0c?C zxk5m|2+5*u&o|;}TVG;th*)7;7Uq{qvoq^RTQ;M*V@;$@MjWLD&Qy|Z0P8Brmg(P* zmMYoAZln--`W9*s+kdP=9dOLdJ*E5xf>Q0CWQuj`68oJ08~W{i4jKS^gUq8jk95XO z-*hIn+E8hE5#DlXk;c+y^9cFY8;o`9z00>u-brj2^SIH!vF#P9YkBWQ6FQZ1D#rK7 z9Ar3x_UIz3JTavwuT<=SA~u442F|U>4aX}A8T1f-z?{4cxT4hC=Ge#Y085N0+(#29 zzSF{m=SW}h_c6jJgm$6NvsW!fYlV(|HW}$8p7^o#JNaQ1ZvG`D-K2FDOYfV zth=I+xeb4HcS-|N9!Vw#L#^H>6TG=LoyxrliS>yVWi?N6Vg`!0-Ev{fL&fjJoezds zyPnfwe8Ox&7)%5$!X?cux_^?R${g4i8!8)$+nbzgjPZS zOe36Su;*=JT%rf@3mW3G#?L?cG!7WKU`D!8+GIdg-joHjMo{%;H%9cQJ7Ce^-d>Av z#!yDe?s|co+}5YXRuVVO_A0V7HfDY1R79DJ$zrmg>`IsV-GO$-!u^C&n=);5$JvEX z@$6C`q}nJ%;$v0%f&xmLC=E{gdCOB|?HNALh&4`=gIPm8#OkFlGfz_0EKBXwEDE;D zB3X)qc+8|Zsc*iXfu_<`Km)rh^5$h)CsE_OIm_) zGbM$6w6tE*(v8wRmHWRBnq6*u=ZNgRXzUS{uqa9%`p-T} zvhVi<-tCjqU0#v?{ypS6W~d?(9=kZ;u5W20DhG~XYhWl(+%Ku`ZrJ>UV43@%K)BuT z&@H`C;)*?d03QG&12N0C?~HGxqpZVA=#j*Ej>fUggQ6+A@_0N^4NzA{f=Z-oYh0ec ze@MB5im#S>-OJC6!Af$4$oe0yfDVHB5(gXZ{_LL z{`6GrRcx;J{PIK$RaKBE{C<}9=$<>w=le{ILfj%V`8-#VncAy&axcMwG6jQ$##~LG zgVjKToV^;D6@2`yd8Gnj)p$zXM!O{f+n!xC(2z&jVXaIN`?g7O*$qkkf?*p^Zn7b= z>>{(xyaJ)w%rkolxF9fFyQouQ8b3ayH};*jeHc~W1+w(C9AFvYHLj)Ea`$bSZ2U`4 zse^Swd+~RaM91?usiWZ!gS9ZtixGg?Jkb$b1r?gQT6qzf7TcUY$w8J$)LpwI!@RpN zW(ut}EA-E5MmYSE9lD$3Z#CwHX}!qyj^G`)d3dw<9LoDWkY;1+q6@2+x zk;Hm?h(^BE{I6m$y75w4V}vr*=TD$8nkv9%js|1C{PtnO_^R7%l}Gd{GtttTEz>9$ zVq8qNh218$TGqCf2|dWZ;Blpe9Pv{!3KG8 zHie+v~<-{X`?&Ry(*}`jY(L>}^FOb?u1?Ncz(Y>!Zhb?%$%e?at>Fe_|^FSITI~b&-*QD~-3q>0AmHNqrqXXSibo0kJno>#xS_zl?XmlifH^ zSl(SzUVu+WpT*R=0S_B}V(}Z7wwHK%>a}wqSmhbi4U!W>%KEL<42qv(PQ)8jv~sV4 zzmW3=?(*b8xf5u=I)n+YZS@0yMRXo1&+Xe?C1wKXTfP$a2&I>o)J%gS@brqI+TmX& zxXw@|-Qf%QU}ijs3xEQaVw6=s0I-|ift~YkCi@8^v5Yda*HSN%f=>CZwI!hfgOoh7 zuOJWNS5c!+B|cxsZcS`5=kNqdy!RR7G1?^s6oX$J( zP4slnLk}lxR!ujb0I6-bNuCWuJdwHP?$IWuxkVq@5-aK@%Un4ncVT~SN?Z~D&sM`< z`6Mx&561$MPi`QJ=l^Tf{kMD~VsB?+`B!E!wE0I)X;fR6R~ABjO~#h7j)2#CYoq}- zbSpkLHv+}xV1gtm`#kDxQ#>!8=YA&_qHG02p0H1Xeq2-mf4xvlGX(_Lu~|HzGF*Jk z%)1`k%*=0}?;n2i`62L!lZMME-fY#`QMou%g34R4!LDml_r5;7qWiCfnN0RcQ4mcghidg1< z7nJm)9Nq~K_Efi06I^i6y2mNy4O@fQH4S=63pmbFZ{mBV!Gqh*G4nDl6G zhl{%04DPRP%7l8az(hJm)7eLO0i_PRR3#OhM{~7%AQ%0aN>uAiI1QZ^N*o!uGxInV zICHBvi;Nn8qj9?DK~YvWK+>0u{xg=Op$vQX-{A=p|?qr67tqWK6d<9ity+F<~ zXokpwbnb=O3z5ytyPZVgF;Fwl!)=d8qE3`Z#w9wH$``+gmA(RnZjYXQ?Cw(2LUC^0PE4XZ8DI+;J!r^2w!+^NKlWrH zI)$B;k-b_7>Us557#mV!(%Ce_6>z_ya*FUEB-(f%RJS#NjLW*V`g@sKl2}CXQ5G>z zzvSHyzv+sP2s`oCzafubhra%kkLs@=)**>U7J!s3geXu@T>nc^0AUgRBY6AO|1Jo` zV}|0@n|5ImVBpZ1h2n|v6TU#cEw>a9tam41jhZ3Dk~nt44wJ+cV2`#%3Uv4`3il!rn4j^0BPZy0G{ zh?8T)5;RE$zf-0mB~}w;N~-&DyKPDjjV?#RVqYBo7}buIKzj;lz1SNUl$WSlk<@C) zMq>%yf)J_8)xISeQYN!h=BFPHRB0_Wszg}xttnYI=_y65and!l4OG_It$wH0u63Q& zs2^*S=T&~h>wa@MN}K zI?)8l=t}M3b27!Mx@LiRoAHqSX)x_l4Ocb%qU^`6Gc0W{`PsX;5Ps}Gzf<+;HXoY=_T+g8VMe+3?8IwN( z82gafVu7!I*Uh%vAP4u7{Oim((VRvoku3j0T2_`oc(%h0i{oqql_6VLCk zyH0>RgY-m9eI(}~sghL`akru!D6H_&L#*j_|D`!Uq4swml8S}yLrf@O5v~{O@Yu@; zbBF0m7fWUkN_E^#kf7)@J232cIHw2a389nN@@x?1B_pmpKb$T99H{YRsnBEB?;k*tuRiUAyPvwsw#$Er}RnImIK z&=*0aY_I39KgfMPA- zI5!gCo-DA7`}*FV9}28+^pP!#`8V|JCyy-&S8lrDsx0nORXCbJ^HYI#Ua!t`om-2S z!wB=PcP*hvSa^c+xu0@wjPTeH1y#|&6*>>HuR6*Oy8Q$Ps_AQA9h7_CgX3^#IoCBm zG~;?!MFg z!IWF%;7pOOI$j#>Eln?EQ)=e<*%i#O&7Iuy`*@C5#Aaie9VgmUZnZ_7_5e^j;EY{) zW1hv|ywJ+L&#w{Lx=MAad_tv`j8oMlHZre6u2B333$G0H-GvLQl~tbf3mLoZfOYnrzh-`{2FFKEce;SDT_=K@Sv_tVn452Gf10~S zkbvn%!wpBW++vfNg++TW2w;!YN`S&A|GZ0#`?9e5ePJg%ch z^qlQ`J8_q9BOE=fk-=L-%H$V{tVRoV8DG z7z?U+vEsO}WpVuyDmkf&-0>bAB*40nz<9q$tx6NfOJjyPbQTX(GsgTZ?eRh1 zLZinU>Eu4%@YkQJd=++5PT+m`wpR0c$o8;d!%m8j&WHf>6&%MQ__$+3#&^~0_=Gg? z=sdKUlCL6J{*jXp$nDtY~ z(AQHzzU-ptv$eg1gFi2QY3M!j|J?NQE^>@1;iFHH(Uum0Yk(%iQqnEQF4#yCFGsYq(t7CL%kM=5S$`gg;^|l`F#TO#`y65Dkij_(lA)ZbD6R69Ul`Mz)M(ZujbAj+QBzNKR$D zZ=C|~FsnRvRS8NQLlnS<*nLt4LFOJ)+0KQ|4-=;DeUq2Wi?JEMvx!x0g zYyD1_5}?zG57u3qRh+A>+7$%fw;e8=cHiop*`(k`$}M8Owt=-7re`kwNE?q~S4|1= z0pwzn&M@vp_py-A^3DWyedkPOn;ln8CR?AYymy_WQg`#_Lp8#t4P2A)S(7f^#dGq* z&(W6&P$G>}H2?XMYYLpLK66L3b z32W6SOC~s-hl{I7+pvKC1jjkCEe`1Gv!*j|D|mtg;_Jvyup zERBO%oJr=7S(qd9>b>!X@r8X3W#VC+=}jVpH+Y8FqtwtXo7HlRpsOZpxDOz%w4T|| z;q12-eL}wbJb_K}S!Sv9%T*pLb}GU8+o}>tj;@crsHX0ti0J!h6Ydu@)XUXWdq z)UaLL!bf1^T%A~ye;oS)L&x(N^Spic*CQ|2?`qV!@eDYd2rYkhvF+WSH2B}s70aZF zN*9f6`LuLt|Na7t+`c;U#~i0XiuHmi5H>Q+M%E+k`~JlAY`(*qB3IjPqqmIBQXMT@ zNb{s>sr}Y_BK%aaCiF*1{Ck2!Bw1teK@4b08y5QhrFeGT7aAP9L5G?p_x`GZTGbRL za1=LZe{=KIIJcX9wKJgt?isS@`{~BSxF@fj3yR^@Ch=7dPUnW7PS|$dCOW^#UbXW5PqMnH@oIKFm619=2dw;ZlDe_Twf^?;f`l(zHQp=!%=UO`*Jl z1EJpwt*WcGuZ@$8nY~L0vd$)>FDs)VMtfzi>Q$kcxyLKV6fw$DwwOUvd$5h#&{clL z5CQ83Epp&lu0`@X(Dl9|+0l8z83XSy_v}w-Dq*J`^D#uJ!{pHf#BSJ$wgKX=aQ`Yd z24SPYlMvWg2PEow|927ZOd;gpU}I_eUk9VIlyt5CIvABuZM$P-t$kvytxVUjx)Tt} zRQawHUbx1f2*o>NU3PbF{ERgX=4!|HiWFY(9{O2vCvBYu2h&E=>|pGt`vi}>Tj$&T zBT~0Azg?a`oZMXPSuqlqt*3?868c5m+An%S#8Wr6Srqc5?2yY=gs6A{)84pwsU`Jf z(``phPm&r`^FV)Th8PA{rag^hS6zXIF-`@S&q;13iC@eaz3=Ul)Wa)UC zVRbTq<4LGq`P?*{T5CGujY{sAH4dC-wDX`pE{ZV<@&tY#G_4pjIk4~&2X8FAs$}eS zVSd(Y?ULEBcf_wuurV?Eqs4bT&(p3z&=n)bf3#M1Wv6l(3uD?6?QnAd-I%NOsjqRsmE-bSk+y5i&8-p|Lx;2w@$F`l0*|BZgwr$(CZQE9d zPi))n7?XF-H*>z4sxzpmx_|8b^RC*puf5i~@K2o_t}+Jf^!+MDg#iNk{r`AO{sS4B zRkXiHdMKNzK~hK{Ln#I25p!r6L9u>Bl=M7`g!7h{pqAoI@M}|XH-EPyPi-m2E-d61VwYFx*w2CFOM7oCWeaK|tC_LqOlds& zP}Zhlg?~M`DoQJrac^phluHo zYibq6!%S_qv8K}@yf;+iGAvA)6C?8zeEAkE|8l9AJTUYRz3iuqIWsFCmKvc8Kil0Smyo@chZqWEM#J(&lvn7+v;PqyEs6-f_ zzjc&jMPu38ZqkxiVZ1PQfQoSa6wfPlI{8CsMj*?D?%q5mFsEACpIE>&pPxA6uc5WJ zJ`W|uQSX>DZ;H0E5xkb>*(G+bpw7C&TnV#*wlsBu)}yUFVUtYttkiD`#e!l*`3EwH zwOX(DOS))PLxk|S?(PVez&IxAh;!tsVxV&CLn=wqt+ zW_F5|V;NQzoGBID3ACGGW8w_9RQ~?oFyrwzHJQfEe4LL}W#!(j3KhvhsCr@1JZIPFAhMk?kNSyW$E zA)xN&eZvY0gfIwle||`sj8z9>hbQl+*WaZc*spe9LacNm2JZ*8Qe`u@B#%*auohM#K3 zE45)8qJ6x$&!?xlvNPQ@thGO7X6_k3UbTaN$UWnTq_uU2DO!TqChCI`tBsUZI{e_j z5_ZqniHgGVaO`5=JDa+_N~@#|wJ$28h+0qUD|(Zqy?yJ7^`O=F&ndxJ^kAy++0NfS zt2W>ANHtyF^^}Oq3(x_*rf}2ESNn-l6g&{?3iEM!G)u#3=ja3jawjdwN=NwcZ;#u5 z_&GEwA!MH4`G{;tKtN>w#T_PS;vnQ;{yq5OQSt9Fp6%$QbxZ<-E+V^j-O793_+`UvDrk>IxriC+Y+f zq>!P+%z-NxH#NG5sb)^XQA$?wtj>u1{cFx3J9#Sk#!*8N3N*jDpyy8zB6E`YD#o89 zrK`sFA!T-xWG%EhYXOBtdkSxsa?wLbidv0dn*(KjuR+3^v107&EFq3C+a}L&zru>d z&!WVQT3-xJi_FVUyrmeb5nS7O5@SwQt7_tbDl5cEw_!wxE5!t}SaYYwMjQ?T7iVdY z#OXUS2#54D$KvO_7cmE0ULw*-1g7H>t0?f`*HM+{NCP1!D*eFj zs}ithm{#lhQSIK=@)81y`&yD2@Y~hbXAuTnF?&XDycM$KNSVjRu{V+(lBj+=9&iso z-x4GWS~?s6nIhWb`|uq$^}`%_DaBEZzx{HIKnjR-m*G?WTbFW(g+7#?gKlSbFU{ZA z4{M3VP=r(bL-ldMDSsU(#dW=aMmNr<6se^pW5fkqA!#3g>b~^Hz#z!<<36C4GcT^MQ7&Zlx z)kdd}`&=2!R>QI)knxkhZ}%?-IFlp``QPt~7bc6}mXW%Cg8<8JcW2eSf+lP}(?jIixzh*4gJcu-Ox#)J5K#ZCttC&zp(FK~V5zvvr%^!$H z_TQ@h_&9oQQX*ne=kg=uX-u36K^y(ejBZ%g*>%J*z!A-i%<$$6i$c zuu)Vd2s?8MjoK@xt*4fD$Y3_KWXVer}Wf3 zT~i?x!Dh5fOyz`2p11-@GQ#veoi5&t$S=%f@!ti2c-S<*gFbxda)kMT^OWFt5V*`` zD)#|<)Ue!Z!f_jAz6g(g&Mk)aFgN+)UzOeh^RbD=PHAXlUy<{jyaG){mWk60#8dXE z`%&RN14&1gNjszVb!a=DKxzegqUH1{w;k_j3u#lz`IW9O?qvy|6LnE6bJ~^S@Td|U zQZta&@KNXWtS`>GL&D-}r_QYGI%*5dYZk5g%dP>e<43aX_GlZ-&|CE3TMAKqnhL=^ zXG6UohOYWBf955oy5HT?+dl*%2LIS3=^y^!gAfJsd?biTNc9@wuB|u4K@R2i3_IXB zb^SuJO;dU5a}HGM#Nfd6z$Ai^Pnc2qq7QuIU6CXfzZhgl7@2(o7q>&+4)q7M%HMjX zbaB!W+ULqZx6_2JF*rAFnhan+-f`l>XcLHq#A-qOiwm-+4SfUY^us%w)D=poyL(;y zLOP(%4;QXO@lwj(+^gKL6QVoP%nhF=a%FfK`&kFr6_Brw*r_<|>)Bx$3D!i5IkPn7 zb>Z#iZH0Gqp}?IO^4`TIUN#8&$cB9<2y+F%(?eW z7IH)9Wx*ctJBMK0Ct`>_Dz1rtd;&fEi|v;Fl~>ZseooemZuD6&i-5vOv7b3%K~SDu zys`k-xhFLbGxl8HP17^z{3ngz9mgwX3*!Zj(es1zML~T2)TWy656zt>LEgzzKi|YY z#7-j~!QLcp?BNL)hQ&C0)mx;q8|c?hB2rM)~sZDD5!dM_q{!1Fb@(^;0g5MF)3c0BVNZ(XK6BpY$FO(0E zn6E`l>=GA|mw9_9r-fO-UR14PDxW*GTuI{Crsp&_V4M5+;`8R3bsGf3e>Ds)N@O;? zo-}GdniR%RfX3FsjVgkkw9srYDMSe+8e^Uww?Aray5dmdr){OF#^7IajhmQ|sE~H@ z)k%xCe0`n4PM9gnjWc!R8dHvzROA6tl_Of+eG%b|lz0Yi_7Ma;R%=BW`XZ=}`)GsMTRyUX&t>+H_;OREq5pW!fda;Sd6FU}yNisx zp|^j+KuQTyu<7&eWJU@>Xq1;W6v|Vhto^!+(a0{SuKAIVPSUS@u?!7ZxrTU?vSS;0 zetQD5fPfegjDSEWs9Zvk>4O-?kVkD7*HHxG;P-BJok#g)J4L~m-7}jD8|rOTcXpS! zdDpn%nY3?j;#AaBy_es8kzE$^-)(-w;i&HOZ{JwnFyOy`$g) z%#0SOvjPWcP)@^Rno;6qM}Zm+P*`XV8-00E^yw3}$S0nnWOvN{iT(*sh58fQ3MKrvG0qY=Y^L8hsZ$P2 zUK0u}nQ{nY=%^sNid~JPt3C8Y@ZaCj*l4mvPqGcBl|0)qit&dLOeIvs4R)sO5|$rs zw@t?3M6Gk6%KcO&cFCW&7VQ${LT=XVoH|}x&Ji^?UDhvt>^iw}=jGjGFo=%e$1y^> zM+Bc12h|RAR9BMQe{eIbT4bAkftZR9H60SQQVyV(Vy;?PFISw+i?aiMEuOmd74h~1 z!QVTmuYiX1^KphUQBt^&&57cQ7Bz0Nc;2t4pO59KE+9`2RGfQNjQq}zK|hV&fDAeA z%g9{Z$xrp={s0tYwgKj^exIFy3nhNQ_a|VNy+xF9WECty@bszw9o5}_!Hl)ms`~Gypppo(l&Wi9ABXB;9;P9}>5S97axCP&m z+9T?RfBH_g_7&yxE`ZdVFl5W*;yY^n&hPjr%bN}PCE)F2D0T=ipDA5-iyxC?0w1uSf<}u46F%dJ{=@P4hx>B$9hA;U` zH!074?m&1MGCvV&-4)aBD}T8MOHo`Ycg3W>d*->^4i0_&XG86uD&tQtS)$*!3ZVU4 z1@M2krT%4hRIK!`^k@``b!8|JN}_^-6cx3=9)2+~DsgdP14#HD>DGDUKUdW0>BA3W zya$otsXKwUtJ`{eybRM;%Rx%Cgcl~J)9mcWnb%q_KA$g-xP4F?Tn=e;dMHnk7$bp1 zcW!Be0{vfG*&1Mv}+B;nTBy|eM zp47x+37AuI4L;HEhd>AXt=vVBO3nlyIRjIAzB+#dzIO`9v9;Hg!<9@tfBVv=RorZ@ zwAW&#hOQ=0!COCQc^LNLPNkukuT33*CK?X@ia7l!OB^f+gsOmpBImHXS?EVf!Ij!W z>t9nYQ;VVqSiSdTgH94uPRgo?N*PSh<(*QQ_=w494@YTVS93Bq6nSKl=@O&ieTTq6Nhu zg+pYqzZil)NB@}I=mQrc>%1_XrmZR|(zzeU;qD31>{-Mz3E zZ*${~tEsEKunU+FkOlUh``9JKk_(@qFuWE;k-#P7ikfNSei4tc=gFB-G!-`$7mJ<< z=T}d}$Nj*`loNo@D=Lc9X_^U~o9mQ=N)ix!f19o$k!&%Vfb7-%dQO*h+3v|^wcVQZ zGCk@>4UOTxK|rKoMqNFz@E8^`@mLh8o$W>O(8l|;E@VBC4*oPG4%Vrk*LG6MZ?!UF zG>cs|gO6S{M=uw)HYK(b%BtsiN0ss z9s$)d+b5z`X&Vx8d?Cr_P}gV-s#g>h*Bxqkr99jcwWd)X zdU>Lle@K&R^O({r2gVHL(dh8L+ROjXT#;R4v}T(!tu<8ds0_M&XLb&%Fz*EJfJe36 zX;ONJRaeY1^eLG8MT;UU0J+#IX(E`VCv2OlIA9Ie{$_cCZVmZDA~U0yTHqwSJF_SKZn0}2Z$x6K!a>mM?}tc+t3036RTBOrh4 zY)T`qbZs8F0?yo~7OkQN{-wn%KUpe*wM=#tgGb!5npmfEC4wby1b-I)m| zk@0>Fg1yM+COhXw88CIsN)8(Rs}#M_yi$PMX5CaFtdLhf&0DCfi-@Tb%WE3BxR}>>M?x7%|k;Xz>v*deG^>{7Gdc=-@bHE9Jo>B?=#l)VE?My}ve|`Yw@1&E0g9V={6L%H^zj7r~)G9`pS-0947QI=fP^!h*)H-nn z_-Z)^scCc1=h;1j3aK?rpDzfWw5hu=dihU9D)Pb`D~uc$p1AgQHEqn(N|X8)g+@V}pA9HJH|j=!2)v*^kHDwGqm zVceNDu@=#Z!B_b2hLc!&Hf8fU#PRr+lD;{)w0atOFPR{G?+mU~h83>eovpvxDL znOFmoQJlG4Y*fSf1?8)LSbK9xx!u3bN003~vZgmv+x~+ReynTzfK$0g^5p8s6J@LX zjC9>RG6Kkn;K%F2B0TPGnlKF!8w(ZVXgxr2b;7I5**iR{goivzQ(X^N5@)Drq(j-j+Eg-aq5%+iwn(!D*^vxq6`3a8N!9Fc&oU@a=Jg0V1KUP= zY6!1N#q5oj-c6J-j%;#Qs-n4UqL>;ZKbvZ?m7uwgJN8AI*pagc9x2pU^U%Ie#hy!q zx3ZYl)KXBhPGOo5vPpwnG?Z%*UNRU%stxzAUTpQKTh7PEsU}Nri4`5?-U;da4Mqm! zHjblN59R#XhY#89hm)nB*+0jHF+cbIttvbs`e9HBBF2T7Bgv@tR-`Dv+~Pz`nw1zb z3KOG*bGz54r=IAckLj3nSP>3paKOl=rrj|r@rygtb~--%GQj+{6<}Q zPo=e@qoAX;peOheN~34?`h2MQ_*`3Qzf%?x$TT1bPMF>#PCNaGIVQ$TMSTx((T%Xv zp(47FOa^Vq^7J+hW2QwSG%P3MvLIZP*?fE;?r53Vr47L9m!0V4W^Mmud8xs6vK-0D zY{XQIeqNS+ik>7M&`+LCmi9a+M3)IHSIrnkIp7_jZruS$|GmpeVAXl_SXxs(2RcpB zYc-y371@F+X*Snl_Nj)z;}Vd6ddYU0E^xI!*)mU-Qlynp(IH!UKtY9fzZ8d(af#_$ zndP4soPEjcjBZtNc_lPiW4p4jpb^SOihRav4KYG(F<5ikwd4UQgYc))mi?|yY~QQE z#WV8L+0$oSK_989y2tI-M?oPk9QE&=bO8X@X10aUB<;s*bsM!YgbcEtBDG85rzE(U zGPGNLxj5a~fg^G}I}*2WCi&R2>bnvSgYhF!Mtu5$JO#~R-w~^QY-Yq}68FC89Fa0l z6s!Jr3rXOd`5u6gI&OTK@i3*WhU`&$U}eATJZ=$7Q&SG7%38WADaxUdZ=Gf5$=wU_ z%SBxLHS{J$$#UwV)3U(RIfQBI`R*KoxR}%nR^nBN3_tq8NGoOB^>6I*t4wX4)mFP@PM~#}vp=@LhnBffxyKh1r&1waYPak3 z={=ksn<}i-3S7a(62d4$Rrh=V2B|e47}9&6dB%N5FU@-jCh|-ipR*Wdj<;OI70G#2 zzPQzr8yU(O+DT_$bn#58bs+k#e#RAaK_?-CfSPBP7lFZR0Hhlec5~y-GPFcR$ssK7 zc)7_|V|`^|b!M8$cARmJmWh6D)>oaA%MhC~By6XV1r&-!26%O0JAp$kwbkkOl=$O7 zI4yBH_Ze&h^N&cpZI+T(l;2DySi?v@yeM-A4~QHzl$l`+{#(OjYH+`5dzaApCN-#H z>u*}!BAVg_Y=4t5A`F|@4;E8%%TG8L-&UuO(X(Tq3b#VT(r8cZzXex*sj`GHuDqN4 z_~}zrb_atb!IiiozixR|N7`GZBo(|8oO?17UA}9*`o@s$o#j=QR8vqX{z?7p3ac$C zh0j;15wmU&pxu`30*6KRmLp4;4tBz=so>|sFF3bvor8VQH>_*N>jo8iAH385-99Pf z_yS?v-T)uh-no(9o!dZXmm&IRuK|ak*ppXXTVj#?kiNYN{7(p6Csk>eL7Gyk^)y_@ zVH0ekA^0I@vgp{6k_bhrxorExkv@jY#T+$8u>kUEH|U_!K?AIO%fuDab#a0`$CwcO z{MaCqCHNtmHNrRroe5btIl1T;XNdVUMD}liQoOwOO_|2|mRyPc5tXYZ_<3`O^kap} z2lXs=nMHHV;`zq0V!aD5#7h`tyr7o=lA{<(_jdZn2I^Ob_=#O7E|GQ_YRk0oW%yYz zCfq?K28m=j(HchAq>40`87uSbF$~4aamOQe)O&gwJS;p{Ko@m#zC-4`-ZeGc!0&OM# zbM>2&!z4-5#KbL7QKwlV4M@1kSq(wv2OEnLAm{xaMA=k18WUdl`&@WPtlbLf2XncL zJe7{nwG-g8ywS46oFeB3#x*|Qkw3otF*qG@ktYT@qM2@l+5?hfgXe!H&=W^&&ITzx z+Cn{Ez&es_OMq1DF}G!Ww!$9?q3-l2DYty!QT4Ktzs(JcxuV#jZHi*~J$G@GEWtaLP@|04rz)EJ_)=-cqHNMS`9Cb=|Ld!0fwMOtv17&OPacQ zbRf2KuSnjQ9E~?mr&LbZ>H6WJrPR)EEXb(rEWLMAdwD3 zMBxEZ7p6M3s6K=Ez5x&Fu~fByH!QRv3I@9_?6@*|JqC&6G_!YU8jmLh?LAH^KDF35 z1$lNUSRjdMh-&B62MEV2i0sfZzZ{YN=@+R&C*Tr=Yzvgy%elGRH4+SbQ0f^Q%#x+U zb{S9cD~RUkInSSQE<@OSSR|JMbGzeoW6np(s_c!~5%Xu0`1#ZM^_@Q>GJi&B2Taj= z+e4(G2A^jw3Ehk=HR=rbIj6Bi(J@0^(f-%~wYMuAR0p!lJazKOrU9zo00cMCbP4q4 zPDDF^2m3vFwDHJe#Gw0EgO>-j0Cla?pF#D#N@$2&|DdiV!q@X)@6K)cQIVip6G~|N zGl?gB$y*F9OAn#}HucllPpyAR}6pTIK@gKb)K-a+Iqf*B+fqnr$8o2qv^Yy7nIx>2sw}F9b z^Q$qwxcMGM?&gUx^hdiQo!vBsH}`HXVg?&C@j&~eJ*dC{G2~ph8%2S?GbP$|z$=1f zjt@Qj-*7aI9x7b4Iu_#7eAR={Zscx4m#epAwQUWe_<)tn5+ zJoRein7=gej|Xpl?!e`{QfSvL(<|j}2ydvRssB0n3A&vUqnoZUATK#uz4zOEL0qYl zlj)RJ1&%WC(=O|u58VEh%&u1vFt}7$G$6lK01Cx?%aBp}HjUT~oxVd9oKx))cww7h z9u+~dz#FXJyAU~`+dtP^vMof@4dM#=kvce+Sx?m+n1pzD5we;g@@G9tNBUxWa6ti; zd97VpKGRuDja4dxW^HMkHcn-sC`F>4F3O3j9CeoT;aI_kXROv?h%#NRyq6i}hR>SCEEturivfZzu% zjgqz)*jK^tAK7~d-G2z>r{l&{-^b-`1pt@0IY) zU#3@ONVxA!KZTtxW_>Z5)ReKkHMl@gWpw;uYLA@Rp4s?4NJo74A zffIXWI=hvuV~soOh;tf39jJ znaX@fiJvR}6~6Jk@islDp&+34kR%EYSoliFd97xO^aZ8yMw~4L`L=|b+XgyZ&JrsNysf$K`h2AC|=MQF)XX?|X}x zW%mdYne8%ttYW3`6Y>%67EpaHgzR>+kkQkRl9jlOF$YJC4z2dx*`Dw?&n16`NSEUG zH+zQ_x|SBh+HN@Li*)TDbvS`t8)Gd9>7Gg&)gAt@Z1c@__;(gG@^{la{fKDx@|y*{ z`^|#>uS8eIHcsD?ZDU6|egj7*2Yo}QZxOenlfI3U+_&gT*v84>UlDrQirSV7eBV;e zOqNb_msV}-W}l{V-OZXAKX@XQpoS)bA@~)AGTX!ptE>!@0V9EKdAhAKy3N9pEKgCc9=x>nVXYK#~kIBto)1mU6LlKY&ycc) zU+M{AX=EgNL(^|!Mj{nSySpt6d*qBc@>?Y6Te_|~`T*!*HS=BZ#vIRm@dO;t@B$l= z%-|L7iX59xj3Yo)Hw?V6(MenBdUHhG78Tsbwh!%rp4lHRa!#sr9Y*TM0LDncLSwA? z=7yz{JJ!CLqFT)hX72CQ2q1Kth$hHOq?*}_2id;Yr{28B^2yVg6_M-_(nC(BY5km; zIdc}YF!)2=ehF5jRJ-=QjY1BQdxtMZ3tjmyza>{S@Xd7O$xmtneDiuAnF47NTuNQ? zUmNp#5(f2?#-L9Mrx)Y@W(n}mF`}d42zCBu7)E`oiD~|e*~xz%BSS-DM@JDWebfKJ zGt^YW9!32`*LFdG)}UGWxz@&Hk3|@TO4gEywMPVvXcQEr?oZWO-53U1OQRCeL{u!T z*eY&&`jNtN`m6hU#UkSsp19D>by$4uJ)Sz+^Hi+c>%+~6HO6Pw8&~VWX8P$noyG2W zl%?*FE0D*78b>w6(vrrpk5r>F};4>Cs`V81*?UuqQ!tfgYp?}ZP&)7wWQ4i7meSqOJOh0(TH3%7k{tVV@ zl4kr28#s2O8NxMqjd6tG1E2@k#b;_6u#MGCho&lbl@TO~kpdlF;^Q(Nt4KCPz;BG@9rEn za$H3_cdh=W@yD~9R%_fQ9MX^VK>H19yZONQ&uyp@R*}mGWZDoX|R>oN@yvCV8AXp~EQ+pv=i_p&Uq$NOiMm9cg7uoup!wsm>$g zXw&8nu9hfnO1XicTj2KD7(4me8n9R$(VQSZiKkKDGheEL1%ra?WgJbytaPS!sLp%z zg|sItKPc5N98Rc`&`m-n#zx9;IH%(5%#2g7QH^{I8iXeEvUK2et=L8Rvb5J2MAcHZ zds=s@+SS*Zmm6}1#TVk|KUfOCS6(ksyk8we>1XtS#z>kjmKeShP!xr>2qx~_O75F@W-jlMxVBgTma%Y!#=KPI zk(p$lY4nOUIph35^h#sDkHvm-daNURSS_jVnWBBu}9Aclz7v6go zzYqC=cX+-H9x&hB8zA^h1-CD~5$n4HEIf=joQGNst>9q~cMQq!D+)=a3`k2I0=7h| zFrp6b3)-6!Z}u<52h43`(1EkcSOu7Die?rQT@l}faG55RwUuBosF8D1VT`i6`LX!@ z_-Qz1t8RaeDa+Bl0u^F(1a@gMg;QdzChBsa=&iiGJ-6DrQy$nnR~)=VYt*M<5+HWJ zUgTjM8wKsUgv_>2mws!X5v*pfI~5V>2Cmn>)Gx!&^T&ubhzrznPo90NpEihyvY}jG zogae<3}hK}n=CxmAc*MCt=dWvEj_^TFIFHZ(Yd>Er){7q7y36F>)nkEo7Vl8*EKvHi%{da}R-MD($g(D3`3W7g{0gCWv9qwoY^*T|6 zbaR9v|9V}*(j%CAag9oegr)>^Q&JCp6RbCowR;jzNDzzoY17~+T<#j(J9D-Spu5B6 zQpjl}r^aNuz1IoU;i2<#TNd6tfGD`15v^oQp}Bt6(5@kFbet^?*}W`1U8y zsH$~O#~;<);{)g{ulU4L_7@~FfZd(3OwYhrV;0xw*!}xvt-~ENDjmHScLe%vw2l`t zIwqdUvr1A@&lLUG4Q>cU$o20mqi4K9roksn8HRU1{cj#QjCn{Zh6$$6P@MiV!ywL} zEJg!ND#j6}&Jmt(#hxit!Ku{Id!ec6eS1`ZQqNU&@pwyTMn#ne1)!y(CAC3&`xdt| zT|$-8rIB5?acO$x)1#ZCJWsVt=TCJ}q&jFloCd84_%bbEVn6;o#dZ4oqd$%Y0I6;)HQeOwN6WUy07+hsxAJ^|?z8hYcv zVVqq$Pd0b1b_S>JpNt7pXv_vgr)t=5Jnq%A)+o<7tSOe-cHCg*i1%>&mCc*^t5p<# z+mT}+Q>EIN6%|J^>gwZCuSBP~ZqI$RIaLGOc%4e)5KCN1-^E>-pVZ!Qve47T=-?c+ zvct_SW}?=UAEdjbf`vB} z7_7bR2odke*gGI0o6pMHGYUy$B5TYtVoTpAnHa-%QykQMjt&UtULLgS{Oq{oMCBoB zS)$xpy3u@>8NN0@VbVCvP~6p@A5zB7X*7RH$`u=|d~+FYH8%*#?D=ICq=LI#A&<|x zZezSz**PuTQ(K%sYz!!`StTAraVG1Ro@nf9F6q-5miyLyOBxVX08Wt)P5Vm?$PSu8~v8&>m7Sd zE>xK~Hmr+nUxvf?*eIqynXLSBeP6dbFqyz-Ft4`w8^TXBi0vH}vBT7e4cklOk!#nc zVB6IGQGGo?Yq`mdvkh1*2KW?Ty{7E5$gW?;J}1cW)oZhQ9r3)<-6MR+M*=nmI&lej zC|;5d$bRLfyeAznCY1ilP39tg$vRLUJ7y2$e7#!y1zDgWTDhP3cshb`h=zuk zhZ85_aIwQ2l(_F3;NiY5f`17zXmqafu$Nco?DyCOa?e>9e~zRh{8<0gbN=%YlXoCAqldQx>TH;Y?~TWuU#s6D~>;BgsWvzt#WY zCIaiZ-gV^Lw2^C>Kfcs_D11xCog;{F zBYg0o6W>*y4kuq~I~oef%m4*I7@kTm5_pTJHOTfEgYp?($a(ilDB&ihbdB$ZlUvZ? zt+7-~`~p)wooIwm@2f91jO^`g@8R@Gul^&_Y5bsZo|s~<>oxxXKYwclkIbb>R4j!l zfYNFe&vM9JEl_+vr4pkj2m>&bYi|iZt-ZzLqjVyr=SK_hjr|>_?16943}-qj&yfIq zM-EK>M%}kQTYD1b*%=3tYY3bpH=J| z7X|-MxTtSqW9y{B{!JP_M5FT z#L+%##|y{XO%WEIDQe^fZ7W7_loN}V^3rv2F9D1(#w2PuURWl5oNXl8oRQRE!&||< zX#rev&=^*g=>W7~waa}!gwLaFM+(Dm4v)2AKW0~qkqp<+Y9w)0KnAPC`p8skg1IZ* z{1j_+%JN8k8q9i`@v`ayP3_mcgT&faSUTN!;t|s?!PIgS6mBY8IlkdukE{O>qwZX(^$ceg{7Mggg=nx7=%gZQ~ z($O~(c-_$iL)Y@})lc=un-53WTX$07`o$fIYc+Pp-Jpa8%_}b8L}gyW?$11uH>Ar6 znsKojwqXe_#Y|M*NrBl+T8|M#N{Q0WmQkz-5b1m9Em;^@#g}UMwH7Cg&~ph=FKOm# z>qhga7|odTdI?96$PjY7@+B9*6HxUZHFM>e8#L-k=>RA%U}MR~xHXZ5m9g(D2JKCb!^| z(h@`w#!$j!RIwUoYBjaRTg6BvhGZ_MZit!AR{bit)+_n_OY(h9G2U$z{j<9Ut#I(d zu**(eq30YXNe5tC=xW-97))My`+{CY`y~qIT54DpZ?Vo^1w2=tq@SoQs!SVmw-h|{ z_Sm_W&jO=_I7{{5-yRs@wLd*lhfPs$6b)0;IsK?FAVH zafg$6ZXuN^s!F#*I#U;W#)Uc@BeFGZNHr2JX)6-^8SS9ln)q}h3TrM-$tqEBrga`9 z$(a;%WA3CA~E@2 z$H_92dKKTtZ}Dl-$q5AZ*_lEz_}k8oifiq_pMVo(D)j0J+gf-R1tm)~RRoP7V0i}8 zB(;f$XDa@xD%rW(-&Tme>>o{vAl@6D4Q3m?oXnQ^gsX9fWq85d>*b5CjJiQ1?wnfb z*;PfgO=!VHYQzU;TMv#rDJdQw$(Crj&I9i@(q|d<_sMt#|L_X^8s^W>zeWVZ%g=%8 zq92d?>Z?`~FIEKBq~Wn9nSfAJFH|!}Wm}auF}4;>Pd?g}5$R+J>Wux$p_+k}LQ9*) za9kTYxX|~2Ly)4=sYE%$Q}O1FdH$7I^D}+~Cbn_P=+HHOBj6ttTR$m@#8cnTN$oJl^kATV`NpV|Vxg>g{94Mm)gCQ8TXT13-c| z(VWuVSNgTv3*#lxt;SZ1%-Y>9{uWThmPXK%dlJpg^~FPV8sPfEBY`_3)LM zV=USQW5G*o$k7~&qkqKd@~EZ=~|GE(7<(oV4MsJILZF?%!N2Yw zY!f+!5cb`H3B~#$3%5ugs;A*&|C_%Rv8#~@{6I5Rc&yR!qsb;>hIU)iph>)G*KiZ= z6KkLxfl$y*f4dlx1C=a=XpNj>-1CF-Zq6;Xzf#Q8I!-!Zn7P@~_6HH`#{P6M0M(`i zTq=`lmlahMc4XFh7D9 zj)8~)NV~9>sm~ULBySM}&D)s;NkX+?A*Ylo)`2+<*Y6;tRu`Hb5vWk#$71*U`}b?e zE$krF2g-0tY^7v?6pPAc=4<_$MkQFuq#-t7vGr+UB@gMUeq|xoFNj9?|0WCl{RjN_mGmEDm;885*{^Zk z;OFdmjWhXU7?h40-!ilU{WLm=AB23ZDZ!ARP3^i5b)vIXVXW7c-xH|k4nJ~#A9!x1 zH`#8Af(tAa;yRPn;aK`D=i|VM@ zE?xWMrwx+ICjI$1e!p#1l+;RI%Kg%nYIu>MVKfzXWmhcF@)%0$UfR|$;C0RzlZ$0?MiHOtA4+mH)L zKHKI7Pu^3&ypk3>!<}DKV&J=`Ve%`h1DL~R471bC)HPABx5sBfAPS39xcS(+$dP{{ zQQVaKn687-+YljoCbdlQg05yBreYYd+Q}I2c(E(0U6KTQEbZk?^}fB$pu5I$emFW5 zEx=KC0VIK9U)6cOEkjQKXgPY#yLsYt_|1s*jjXCaHP`?8p_aLjjif~{g)Vx0t006Q zCI!&%_VU4zu7#{>n~?qKS_RYi876gnIDbavd`C_w%9{%Vn3(1+nkm3bkU6zZzB|J= zgT>V5Yk0yaQ+ok92NuV4KVA-t=ipDhgRMCtG`kbSdIx;lNyw>5=8dOAM=p?mgD7_l zo_i&!2~*-5ppKsw!T=12h36y^73~`oIa0P*deR9rM`Zf8{tlzJhS`O@fNM`kRN=y% zS;B)UAD*&>OfmqgXVq)V)>cl^Dt>}fqN^m7kdL3a;>*`%a#(k8ZFB z0y0I%}Bll~jB3Z01Q)b@6 zd>QwPN7qWj_v!gBD$9@;>iZO`?h+kV%Bp2u36tZ(%qzBnKFBv~5I`1bV$1IZjTRmU zlHiE4xUSf%8eXL&wyZ9B2}>cmQReqU>A5+`D7S;kC}P~vksuWr(Q2bUg>PWW!9Mh zsv72|u*4Q37fLYivz&~Rs6X%4j$X@b=3L@px}sQvItmZ;H{N^0 zX0g{C(^Q|FZ&%_%7{Ybh7*8UTl()p|Rx@`8R z9_-|Lm&k#M?~IQ0F;sx2OXX8#ADtl!Ahp}cFI{N*k^4!W9t%*W3$(j{c6(1{>DVc8 zJtQRxX!!Wz=@s~#MyT`V}@Dnb>+^Iijqv-&Q33II=^Qkq+}^RQJMfQC~dM5JBk1- zvSYfr2WgyH4r2gP!MN8it3q->B1MHNYe~;C-5BiT6-XuIWYL9~UJJ9HZO|%b$39kU zo!2hpuik`pgTbUV`hFlm&uM$A=002AN1LKI4#7I9RG4k?_olu!$M zj|`8**xvpkOEsQeebLUIn8dmvL>FvTd$Z<98?L&3G^;X)R^kx~NXOr%<@NK1t{d!c ziFKB}R>Q`UnDAoquF%hM6bx0Ey&=so?*$gCJ@FK@w4OTXjxEO%5AjUo;a|gr&8d4| zCX%sE0>NX)1DIngNtU?@!qFI*)lZFuT4hnx0z?o5^h(XO0x6h%iZmfs%Zs@PlX+<< zSNzXd{DYCetT>UilY*0Y0|}V*(%7_06<5Zy^u3bR8>wnba=j-t)p!(w2>8l-H%o!XBe2=e;aO7 zs%1Z6tcb=k-Ay-wBi8$osgn#f{K?z)vdV$|)-5G}yr5VMgQI608X!CMfG`~$a)Dp4 zEtrNwsy%h~JH?EVvCf|6XXao)v^rc$aWuxFErKb-5@wFw69U~lSOJ}H*!L?WnxHOr z%&#iVhB-HcAGly_+JuA~-@nDT^{$WJ>)d$VB9?W zc)Ne5{EfdBNf>DeBcF#PX7D2r8Zh^>&kiwZhlx9Hy9TPl6tG~Mfd3M^D%?$%V%JVg zNSQ9&t91t>dzF3_ewK<-kcJHA($s#S*&)A`NeiHJoJmyR{BFAXVo``Ld ze8J11ZSRB6AZ!{K7``7I)Spmxb>Oy8ka7_I6*)d0iJ_8lh$)Spfz`nE0ff|MkbmlM z{t-D+tNH;tRAlf4rUD9xFfh4o_ zR(cZqqXvIyAxkc1x}SLxh{73c%{iy4SDard; zaj%lJh&M?cnhiobo9-vq<+0-6(dfLHyaHR;hsO^Y+vLpCFt2lltZEv{d26L?dk-dJ z>C?1Hz(wL@kHec7Xop&=(zI2|8{zv9{y2nXl3!?qR(a`a!j_=m+&2{nie?0!a(rDW zdV?e7!|B7ZJB*mu=IA3eLp!#sq>wWQ7ahMWGXn?O@9AOiLgTSdRnHey)q5GoRGnGo z8k8MQDwJpGqMlAcNxtorD z7kpGj+%<~oRsJWaFKtK{MY)9Dt7Oj(u8XRL%(%h=^C{e~k<00e2GzK=T45jj`}o%E ziA6Qd=iG@b6@VvF6DxYHR9a9%Aey#c7LrIvtEKsld z;s{(GRq;VKLC@9X0_K2GG;w~MdN2-V(s}vtVE)CzLCIhQ(Fg6CXpcrYhqKkp_&}0U zsEO_=8vl5-CQAz0+id@_I3fb@KqY3)o4G&lYC8k%4OrSK$c?`!7o;ykkaFCq3E?(n zoQ{M8R+YNT`l*ktnvhIqJKjfB0HFE2eM(^qQ3R`CbhI=Yr@N7@QVJ?d_3=5E#u0q( zWNJG0BrWBioAGRD0z5%61hTyU$=e4=SsA5kM!9*gyM3`vuw;F}Sk^4Djl$-JCc zFGT_K)hW7AtrYWNo_pBR!7<9Vh@577UclDD9$|6>vPRGGx$6T{W9l#qGzigY%O}4( zHHst)9_2^ja$^s~0NMb4Ci-8ghW6w5=;T{DciJ~b*e;mJ9W{_8QKM4e$eEI|x-}Jr zAXYt7SQuE+oVApfS^e-sJH5f1W^}QW)8|Q3Z9$q($nx6I0|c+jXbr)}l5b`qE@GA4 zQ@R4OWuyzk%!r^D`BOj4#i8^OJh5KLyS|CgEt&S|w49PMgf6K0EdbOrNI2A28u?i} z@NKf3V!ennVj2lDU;k4FJ0p5Z(EfF)bo&}B^8X(@SVu>DGkqt=zsT4BF;NsVva~g_ zclejqS9!elS9wGU+|18kUFcT<5t0*9f4=fV1wrAD<_j505{J~W^_e}d(_Xt^sa1sd z^2!C4V!B@F160oU0SunLe|&*CP}(`k0OsSiORiQ%lZo_<<3*c4kKbT+Wspp!6ZoJG zk>*ZSTy+LPLAfQQh|v@7D2^3pDh>IDiHVb(w5I8cwlh=K?eerWj8SLNg&7Ciea+DQ z$=OC7^z3ChX10BX^H5|eD2iJfG`ATu4<$)(Hb-3*&S*GvbOd_`d;_2I&N(s(3z>vo zz!#W>Oy0Q`qc!ZgIuxi6o74=xM1`4XpIIChQ*2Q#c`ZjIjCpe$AJ|jwOM4D(BYhie zms{7$Z4qIttF1)388gpce0EWjnyH@Ma1tXezyj$kw?I;1wFZNIcyiLsExaT3;)DGCe`h_J{?^peVBIic#j6vjA8V^EaF z@39T+dEIJPTr|eoXdqlu(QvaG<5qT>=77)BC(MFR#|xWIW6QK=<%DIe&#r+P-oUh} zDT?EH;{ZsNgV-?XVWF5=8j}w}%XM_OK?Cdav1xoMaAgWXt8PCdj$ax)hpO$K@8#X2 zsLh˱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

2_sReX@ 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�*D0TPSW9?5_7`Rj8YGTWN86gSL(qX2P#df zEP$@~mm3epWoZ4fkcNyC4VDwQt)Ce9DFH0$Gzm0v;(jo$e9p|ty}Jp$_&BLmu*A+r zNq>o;Or%T?N-}aH>odDd&|hcZ0Uk&Z>BUxLzJg#IY5V6+KSZ!nA;{mIgR1>Nzq-ns z_z!(#p2}s_slkB&_G?_{Wk{-F9a39gP@h@e((MyxT-Gg^nZ~`H8rYRJv4?5&+`Q>f z@xZwzrHtX2#3^s+z4D?(A4oAr6kdBx#t+a@?6?LyK?}Adr&__^9F&5Z;I#qCae&d= z3Hq@&=IhdfAhcuvBY$q^@jCPt=2IB&O1lsUt4n7aARIQpHc4P{+*%d(i&|!OX<=heFV6 zbnAP*-WJAB5Bo&a6FKu@Q5>XOfbT{%am)U|+f^Q8(}&ZO00|gEXBkWpl@Y{bfizzP z;M!&w@QHSJI-~zf%+5YV79aVGlcMwm9($7+wG6*6pA24|sl!SMTNIXJ;q4F7VdDGG zAQ~s7q1!W=wBW#{(>hQj_2@5bT#Eg5m?_5V;IJUFkvmh2gX!i^Eclyx3V@8cNG{T zTDZL9SI4$UZ2C_OyJ&o(fu#%4Z2GI{;SHNm!%kkj7nNj;?f7?YEc2cVXXuTe^JX}? z9h%j%jazRQK)@Bm0@taoPngT?06?Tz93{83++KGkUZL#+?fOLQe8UGj&kT-JP;OC+ zyKjNGrl50k@MJMqx1SI21*V*u9SLDr2=o`=gYgK=^v#ildRXLh21(NEIs)bZ)g|@c zz#wPuxY}ws>AwociK|IjeBE$T8Nr{tk;p>@WGP9ZxRy(pe=Mq;L2mxsH6R_tu6DO6 zTAbdIF88r1@amCEgdi_2{2cJQ2T&>$_h~%&&Z-k*lNa%RMa>r#xjbbUaW-h!d9&j@ zYk;e_e7vIm0pTm0deeY&QH;l4_J|KwcAb6y0OBwVvcVHfXm8NX`q-oOC>kWW(EzYj z^A7)OpK;{~M|)NzMgqbkPF~;>iM<$KmCp(;t(ojV#)Im5cQY|L^6N#}e-c;8$C}*n zAoz~(;qciV|KQi{*+5yCE-4)Y6@3yX1+06Q}4$0KLJ@~(OaChK~zId}EIKsG_*_GjwP`7_+P+l@+2uFu6v_dNO zPz}c3B_{^%|MFmxii7dSLb@ip*x7pigzOeAR>)ZYlcTI<*8}uIMRDc(Kg86U zs|1rYKmH_;AJ)^qCHqx#FtD@x{V(f!RnlJ@L;>XC9zbKQRY^Kjx+le|=A?p3x0Uq@ zvqVg*%;s{2uLA(3ER(gZOIp!wNu=nOLGauBC{q^%N-Gp3p)?*Qjt8#PHpSfK*r6>{YgYMQ!bE9Ib$ zDJs&csMIS;HrH0FrOvLjTRn-`d~}Tdhc-HoKyJsj1Bg^c?7gOSr0W!`3AB_Me8(f6 zuM8~Gmh<718_7x^wuFtxVsq}=*0uYhmMsVJyFf`R&1!nk7vZVXkb>29TvxW%Z^`5( zH05Lw<&ZYO0VZiF%M}-_9#yvBG4D6cGWgh_nPQ3Bvio<{MFcaMpCH(1Ct~>NM1u+R zdxY9II|}g{_xWb>wmlk+mew7o@}gpYHri({S_En>w6BmW_jYx0Va3=T<>12cJ7#J| z zaLzv&m^df)0wdTC(5c@~f{alvks39Z@errF-=CUKvk^|UfMV;z=N_ehq3^O1o;UsE z5C)8sNYBbK5Mf4ad5&NQ)NOhk%)>o;aw5Ayd13;)skqpGJ$W#lKH{l~iO6{*TtbVQ zV;8PL89o9lzQyXl1;d4P6>3Cv3T)eBlEw3*4zNc+X8abi#m;vINhx4_|2;-z+&!4D zZ~9ENKl5;dp!FIh44rFNc8f69g7d{5?@wWvOFT?LC=1F^GO(46u7N#ZZ%B0k@-{e1 zI@DNL72k5d5-1)#GrNDf90zsJBc_wKHnPlRg;Tm=g=0FZXf;pfjpEt1mF?6LVe>ww zzp>ffT*S5N#C7E8{{pR1bnVjLHJk5awg+%(1@QYkMIJ|?cF$)unXmtNOm>!SXWH5S zQcz##<9|eZvZrgfwg2d7gnqPG4F7LE%|CLLMV)PooXl-){;8(<2|42xFUVwz0%^wqWnC^-!=3q6I; z$U1o!M2A)r<82_%o;RF&vr;w^BU*Mw=B%7AZ z92GyS=;&G0M#kbDD`O5A@3?q_c(UzKo#AM1mna;K{z$L6B&K^DB(Xxzg2y$=M` zH()tR#=NVx`Dau}zW6p>tlm9Rv#NEcl(*5Wr2Y+Z9{~y}P|N0?>3>^POzsgp% zbVU+D_bF+!%CI^Eg#v>Lz%OAVq=cYQ&1*#b37Rg3fO1ZRK1*?8vti}0+lQg^1^fok zn>(OTp1ylstNFr#dz~bfU#J$_%W^r+e)-~knC^HxxU1;_bOYuatV7ZOHeEN^x5Bng zi!y?017S>)-6h|a(+9yTJIeC+0}}5lc2#XKQbcevf7oz z?i#K5O&cP&Xfq@)@A;F9>c?!Sg6}cuV&$uhpLCv!0ukFrLNWWpQe#xpqZYRvrc@q1 zOLvM?{k?o|D zqGLK)F^1qDrc$Mv0^(9iiuUJ1wf%Y{`7uca=SK*3ixi(A^%p_JV z==y`pTHQzc2oPmC+IapqC{t|GVYx?ga_QI9KE~IlKsJ0;d$$Wdc5`sMdec~DCtv(; zqPNcRtYedJCP92Fe}x10mTQ!wpsH#wPyGQrc@t9IVH^MJCVHlvBPMw8ykN;L zS5y9)b0EROhBi4ar{)}W;O-o+hJU$B95pblt=+YqIhGF3l#6wg@E+5u(pdLi zNS6eVSa5@>R-r`N6caiZuq00fsT9GK%7+r!N_#3Nl4KjZQtJ1fjTKv3ps<0-OzKva zh;Ba7!<4zOdnpLWBlzB&+lB@1!6-@-MRO_zRwn=`)&`ZC%J9F{BI zxQ9}$Fl9BOTWul)`1h95)&J8iT9X+y^^{t4d!MLL=K~`j972vqn3%0KqO6w^+FzO- zLsvw4msXalLTA@?kSX5S7zI)!Grg>U3$u|SiCML-9EOiDo;d`!fXN7&tT18?r9aqH z&IhA=#?K)85WrWu>=E&lpN#cRO@b^`1Z_GG>trr)Vl}}1OTRUwsy%Ljo*a)K>XZ5w zdJY}`_v}v+q`e|pjoK}#J3(i0VQ6MbXhw>8PR@DHr}Q`d zQ>;91)U44X2D=5mk^Uh=3|1Hx{o6|rXb=p^B=ey%U&+lrPRi)p%AhBmkm#5muDZa> zqP&?ID38wEJQVARVCX=gP~~btTqN|SZ_sumT&=Sk=!S>x{ydhhK)oqfIm+dzFc`|= zVprs%#}t=Ao$T9oB3~1)?U5j3J=nL;Gk9(G&<*~oH;4yW!)EY-RZW9cEoD;*L}!3c zV?5jMPt48VFcf_0S>I%%mW839S;Qy>xr}`1rRYcO3g~2X1%S4Xd-Y&yX5wsA;xEkf z$i4<>Elx0_(+eyEh&{yrbtTq#&?>HO5zQ%1M!V~Q9+U|)4Ukk#v_}AqgKd^-cuu#_7|Kw>NY?=uKl16A0Xvb0G40TGnce&xP&hg%*H!}Dbf$kPzEnIGg4dC!GC7P&mI@9fL}W!+LNO08i^#Gmz1Nddnx(f_ z*PMnY7^Q_b+KHkB&5KUYXD84gKQ2}0kT;ar93h&Iu>RRRMW+EGgPyP(Ms6HAZfV0x zQ`*IvF%8}vs}-(j>?FU`@SZCwvZl3~=7&{e-Z;a@t#EhvEoEh&7h*_tx zMPY5RmgMp{9&XgNb4LjY2;7)s4x&SNe-iBLEY2f)_5<{ehP66Cal^!qeXcL|YK+$bCXb$ZRdxvZN6 z$DNQAIP_mP={J1R1pWi4C*ZmYu}3HZ%GM>F9Ix{`n3zKLM9M`}8nd3V9Zyw1w8#|Z zbJyT{70P89H6Xaa03$_v%94B+28QQU#lVt0z>?&TS!=ioOv`OaNXsoNS7{%Hxtkbm zlMQ(O9`rEE}ylDUIEd%e|EyecoEe0>yW>5&- zZSmr#KNtZ{76Q=+N$r3lu_i7Mi#-5iBay zoDC(ZJ8y1|3btsQoRoY4lM(YA2QigqlBBrzBCEnm6-tA&by6G zbFOw&WuUgT7&`E#w#}N@82qlHJv0-(#Mmr1yKsA;qef3n!Op-;Ajp|2`ODd6Wr3E$ z+m0VpTIuN#L=LTxg2$ei-+lj$d}$~vymGC7T)^TjSU;4_0b+PqKu=!uYe6>*vqZc5 zARqcuP2mwM?54=Yk@IEPdzZpD=DH^E8cSo1f$0V0;s{5mdC?u* z{Tl!2|47V3G0-WL`a!~y{sdrA|G&HQ|E5X&$9%44?un&_!Bc2WZN5LKamo2JLb1jW zZYYQ=Y3?t|?2qFcN|hgRMgynSF{_d$n=HmlUuu!d;~T(aYD6k!tXky3?YQB7 zfx>If@W5x@3%GixI_|u5zF2&{A6wP{vq!8DoeoHY;Q3- zU>*~a?;4_W(u&+cM=(kv2$7hn%T`7(>0y*acjfSk(KH--Sl4YPM+8|{YDb-+WUj~7XmB!^Xa*1dF_|QB za8&J|U+gp?p=`FW3`f`_m(eOzAu?S^J>YW^WOMRV?~hs4dto6gb1UaZ-kwt@!yERxM{^dh9dN3zwzmYGghlg8PFI&Bh5IveVM++a>~ z0W-#+J8RWoMaK9$Umb(9(f+pn>|Fd-^`4PVU@m&XLSg1tXR?XrZQ6aJn#%}zBNGB0$+V@UJL`d(tr}xlhI)(;8DdR1p z8QY)SxWc=rVl*cqn&m26CTXqQOjnaa4+U}OYS~KtuH$1VW2tH-o&MbthbcmaiJAlm}9b-IJ$oBeP0kgDeRwm8!Bx7;&@B83UogAps!Wga?&S-657xu!JRfdd$G+ zNq5embo*G0-Q~MlZW6;SC|=-f#$IxLFLy-io*QT83)B`B`MV>n6bEEbJ`uSTuN*d# z?Cs%RC7bu~wLba!fIUfZt3mBrtln5uhI@x$0eX8Y#uw|i6t6JVW3N>KJA1!Ddq!kH zBU_7iQ9c9&ze(vS+)!FjHv6PHO?g%e^d(kxP-SGW-B3~{FG-G5Nw$<<4hPN>*SIV^NhGovmh9-7pMY?h4%c=0HxD98Y5+ zd1cgq1ULG=a&Q*$WYW;QT=Prw%q_9kd`4a6>VTb8hb3iD~jsqw2;*Zwg`9qm0R{#_uZ7GvS_0@#Z@P(X>x+|w}+Y) z{8k@K!2uOMt-2}UL9FykM0`U<@jYg{-8b2_j~%v@%uA0H@15CH`w&ktYGsDdkMl%~ zRhX!68Z6fMezf@FxkP#CduG&wM1ykUVgF|IF+&<^|9#0T$JNz}N7#Qv4?cMAr0K%B zgk~_IE=*&BYjOL`xsvg~qtIhLlfFhdxz}5vs;KG2>Q0_>YdWn|%C~KNN{k2I2HsJg zCN&aT&eci=rMhMu^#suAIszWpQM6F=7x)u$NTX?`MIGUR9HMNu(y_Ssm)Yr?7{0uT*B`1eXK32yKC%e7OX zjyfxI!%fW(Qmfb1(95+#{mvl8LmjK`K6a2DsOCJoS%lNEwEm*QHU&5RxR)Yye5o<{ znPJaH$ULKVM-rkh1Y+9)AqVJ&bVQLzZc(jVuLdkpBkn0YR&w`^J|~TYh}DY}l5L)$ zZLS%fRkuCiMvS7w7;=q}*b?uKM)E~DJ7WWt5Vy5g`;RyWz`p*QJ$}8thD2}(WXtxN z7q0Lw9Uhg2-@KiXMU;KOHaN`e_<8#DPo@xtNBhQKAtn26tq#~foG+XNN0N!+Uy-Z{hT_$@X~!crti5T+p; z<=M_b82G2?hvSb=DS3=rQHxCQrX7$AstgpJ<_S!z;{7ml`jL^~^R^s2LA+o|L^8DB zN-yr^_Pm5Bb>)=c4t)tIjWmaY*=oOW`=|AHcpxT%I3ViV%M)69Q0E3&I z16UdpB8viI>T<7z-|VyCGDhLmeiQV6gZ<~o^bbxuA>g?s(U0M`{l`T~_kUfKg@uG{ zt*vcsl>QN%@E->BL>=3obMufLK;z(QRIQ#SO%yHOD9cJ$kpwVn!+>Rwt0rJ*dgpY4 z1|g)H52*|@nNE7$zlBkzsDr4jz0xkvSq-MS57X)CdObbg0JYH$VCI|C{R1ATmaPYS zHYtQJ+=o1yFSUJf%{&-KcnruF>rR0s^4WPm9#@1;8fkb98TstcdpsxT*4vvMfq zMOBR4H372s1h6Z5s~6Edq4IR^As z*(J7ZaU)Vl?xn*B7UFba9o0N7T!(me|Fj!D2XLO_A-uhR-F@rM8j}c5cK-f?qFVUPUATERH6*Cm^|-;4ZxrWO^a1 z1Y7^t1hXFQZ-P)1{ATRvxjY>7hMX9U^m(+}dxnJE5_vh(7|}@6_A>v6d%E#Ucv8k9@<7QeU1DcJI(_9@Smr>q@6s1^gi8?5a$fXFYcD0yF5`mUJF?dkCWF3V5p1H(-(juQckWvh$E z`6cqJm>P5fl@is3hTC8@!>(r6!Id1dnkv9AfBE^T_Y7*ub+g;0ahE4Q+n$`Kluy;> z^rF|D0A(dtb2zzs-BdhO2m`qSx;VKbFfO#8!;1BDZd48DAYI0}+}N%6HXq${<$WkQ z23=96hwQZ8x_mJ6u8iuDYx{{j!S*lhOH6CZa4x9QF(dRdRdJAw2R8&rTXHK4s>QL5 zqRdAuNG00Fh*v*OY^DDKWRr5>=Mo_#%D8+)Z+MKA#Eev@o0JRky&yW+UVWQ>UU0!b@#ynYq_z8?QK#zpyM|+9+TulL6x`ZWRLre-a+1~LE zGVvr|{I_I5$U}1(CBoTW63rULNvm#YRKf{-jL$M~CjCe|QYyW#5aD3dXQXmsS^Mh= zpa;8{^zWI;12CI_Bh0~079-w5?8M}s7sh|VS|YH}%*0$yLMQiMkzc@Gi_Ul!MTGPA z3TYEiNv&bc#lQX+*1+*Th7FBO#Pz?@#fxB!s)8`$V1P&Vki_5vHKbqMs9U+H4KBfK=&@8`&e|gUT zYa4-69GZ>LZQE=xP~eXy>v~D7#gB8))J<9QwelWNs2af)WWYg*^3HZ3z4E~ zhW%(EaCLF?h~c#6Pw%57aU$B6ASC}ot6A6jJ6qBj+ZSKGYLWYJggdPD9F(T8_}qGC zr(RwZlOh41rj3fIyRuhu@}qurZaQ0NdNyw7?pXWyi3Y`SzUsLdoqR8+vV zOc3dUcvVf?ce5!zO2vA4vfyudB32CwoHMzVG#1xF+X$-k$fIDeLKeK6T$<0OeeIbM zBnciZcL(L)vRy_YgY~djmC95!-g2fW1wQnEZ!3s_;{Z^MZMv_6X&LO>LZWn!E7-)i zjeAcbiqE+Q60RCih8yYjZli6xg%M62esJiMJ}A%)iS}|0kCfd+4}VqXAEt(G@jJ|) zdz^GSVWgf#SEB>p9~jkX-BHv0V;BFpWMOge8CQ6{3$Yzf3x2){|iT@to4J^K>h+#T~1Mfa_cE@I0H==^``fai=%`r+7+U@S-5J1 zrfo2GiFnpadnNN)1gHBa;U!0-f-+AA$`72}ls+V#+G}%c zpZ5AKZ3>a`#AtgYAeMU|ZA)d$Dm`C5TIL_{jJw)@!ZYOl)F$wiEAM}Ps;^`<*W-*883t5^|#)~6L zn3%7IHN<8q7Q-E&3A3iwT!#zw5#?`q32CjRn6%jiIsX7uR7g@-qo5W{(r|YtDGEl3rCUSO_VxawbhwB0F~TO*ahZKws6+ zf5H!JEbR84mba>kg|f0j`c?;@RdY!VdHm*={N^G`Rcc0cl_p_uj)S3(5y5)_ruJu&&OyY{$3!zL2*pJX`T1fDx4wUH2m0dx zB^tb(;mhUM%Cw?I9F@>RuD)bf{^TEi&-XRy7VEgjPU&okw~@eZlAmnxseKWNpo_&z z7n7OWuKXDBCUz~~<^dP8KFak#n4AJ$_1S-=OtksTDlkdDumcIs%vqoiIRUO2o&l@h zA&G7$vIIOlViV!*vXGv-pN;a!XvpH-`nK_-# z%i*ll@Sj!N zr4H$ZeB$gYw_;{0Hi`%V-^a?D+L)kDYoyihM;wH3Du@^g4H&CRWNy$zHB$|MfV6RV z8^2(Wm`ZA$(Hx$*ETK#fq|sc5wPJoyV!B=uy-{NBacGv=e1@}EqUBp@|!dkkMi+`lBVQa{*+He zlk!4sKKAfV&*$Ct9nbxvhTG@Q>;>f~URVC?ccl~4r*OXItBGP7L-qsmbZDG*o?X7= zk~YYkxRoAi-`E`)9;grr??f22x9 z3-dk+CC*WCect@c#H;mBaC+**fheB!ai(&2x>}i2vTgiG6=lt#3T4&t(om=9wq

m86g)nrFP4rrcN!oP?K}joSgcuP5@g_3= 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
  • M8b^5HdglzC*7$#7timQ$NkLV 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≤o;k{EW)b}z6t5*8n**C-WX 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 z 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

    (K z^t2k9AeBE`Phtk?R_3VYa}w}&?N7IAO0NIswvm6KD9$wvX0%Z;0qy8JOqIbeUouC! z+_>ZttmM|^RBr-+0&73EPdgPd?X3s0ZxryNX`45;cbIh0e^l0si?@vkPIz=C$2jaqk(n%Uq)EM*(O(QzURw72&+y;l2sHPp2t`g zD16Wcey`|o)(~(zv8zClU6m(-J@%7pl!l|mTyR-&fM5DhF;#T1e1J*XlI|OnL>1ER z(d$B|y3dNcv!amE%sSKht)Gjr!ojnOA9%B7TfyYC*RIoyPfk6BLOA zZ;JFI`2S}^w@fx+yWU0aiEm)u(*~x`8i$-FO-AY-*LS^x=f!8;>=SFi_v*hW}#LNG!wo-U|=Z=seD5okYA- zScY!c5%cpjZBCf~QiaRngelWAFR$REynfZ6XgOHm(OcUeHSi?fvcX1s=&A3Wd4W0ZkBD-D5 z*4oR_Z9K{uH@VoPj{C zJSV#)o!A%>T^fGBP-y;x_l3VVcxl+}=$oSoS-&sh7aag8wFAF80$h#4E`0w4*FG(D z9w;{cFyVXCEWF>~8ZQ;F1(!rZ91-umhkGJL7S+XQvi#`XIa8sNPrZ=f|NYmkC_ReU zq!94A*4nS0WBg;PaR=Ov;giB;(CS|%g}V^${6vwJb4i+-eeZ$F!6(l=|Jca#XSn~3 zl@W9CU4u(9-_L$<^|k$RY*E|t=PlM?7FWR7o_0^96jkvuN1NiV1(MKkjc^89($CPp zl9hve(iXOJfzxKsu$`T6_~u>Ea>b4U`d;6_0Zx`oA2_mKyP+k)Z3J%0Aqa zET3L7Jb6}SyScI_yX!)#izL*~nMstQ!f!`kdtulte38-(ye^EQnzzSUzvIF17ky5H z)=oY!g`lP1%9VE_PndnuQtWi%=?ginuka0=fn^udfz+Q|FvjZ$FcqMYsE~!e5IrELX9Ooa^!13d5*)dGBxa*>{j3x1K;;@)D-)vlTyFL zCu-%rzt>o--5kpNN-5H)1zrBDkDBDJdqA1ju7Rn`zr;35zKuHyFyWV-*uT71NEVQj z%XRq3rukxVKMF<)37kLA;*hh?f(A_BoB>zlxiSMLKYZ2UwlgY?g4iLcwV&lXSB74j z_Fn^}U1`?6pl_gizbDULS?B6-*`NeJelT^2xep1v7XySOpp;Dui$-T0Z@GV2Fxj!t z1y%)}iEtg^5q*5lmFN=rDgP>2z$t=Q-N09oEe{6tzfOzCK|%VFMv6+c z@fCg`$@G+TysS{2a9^QV$qNpny`EwkOPJvwX7YgwN> zLtWKP8RySlu6g6!Oj72Ds#a7unOh`$X0L~A3t4}5OIbzB^NZL4dfH_--!yU`=Ip*$ znKmqsP!2NNmY`?OoDnEc1f&wet!ddscDAnjT#1IJta1a4wYl#;_LyScnTK(y^AVy+ zqWwz@jouhK2q&qFsT5K2U#kj!$DagPO5b{(-*ZG=HzCD#|Kjy{U)(#fF%RrLC**vY z`K9jyO|3J;R3c_-m6}jr^86+@x2ck*6lrGWky@}82`@yY-MNNlLsTz| z6Kyd%q-wlK_tYjHKLIG>+=!8SBFTmo0_luzwMY%j_5+J2fEkP#@yU{x=YabmUf&Oj zTjy%mMx{`>Jec#`*%9I@8IZjh*Y>W)<=gasZa;GyX>!=rpyK(e7IdQmLvpf0h!WLI zZI=z{p2xog%JBJV$_;(LuFWf3`heTqRO%5w?ui*iXGi=|i?fsb!Z|SDE8{Tb$m83m z()X%e7p3ea*V~oO`Rb!txQcT1Ze?9#d)O>gaV)i7(R#8E!z~Axt}p}r`5)b%3b2r; zgbD0F&(NK}e+}8wEf?Bx2Ja7Pb<~NU-E+ zX7&?5V{1-;UfY`zsuPki+G`p#i{DkkiT&J}qa}5UNm|c$Y-vO0zPDirTqHe(#E8QD z_ZmuH9@X2rW!WdNH&TZ9FAO{5SHLiYoK3L6uZqQ5FSYkzmVYXASwc@T2CeW9UAU04 zQ)gH`ct>;ur*0X0Dt+c2xagK@(IV ziM)yxYtccdRHzJ?XAXb(s0#kd`5kvIdreYFH-KIV<%+RFSd<>|XuZcyaEYrFx`GT~EH1jqKbq4tM&)+NG_P9Ns zO2kIvShpBA+U@;E-ig~;6#87@Ly+40k<*ti0*#&p#pbG>IRC(xhnZ@dg$D3U7Rc%B z(RuBDPpNz%a@c)>mrUED^TZuXZOclF(*@$|eIX`?(@lodf#dAm&z`Yh!^j~h55rfj zeC$p%hOek+bf!xCAPT@x9%XHo<(33Zz&$$$is|DAO{>zQIGm9{LU<25(Hf}VB*|!L zFMvWP*0IXm6|t-}7^9Wv6O;g-R$@cEUM(TAu!cRj`m*bEV*#pUnY`ADFnW!j>y5tA z6Jfvac|I(@!s9&V4bc;V<5E)s+hTRRLjMo`F54+PsL+e6%bf;?5Ziy8vTC#-;6Tl z*xS*wo$I6X45G2EXs|{G&eXn)OJlulMOu>6X2{9uYD%zFW+g^*3q~dT3UCW1V`2G@ zzv(X*2`$Shoel(O^EABt#QprL_v)j3mvUYsq+45G&=x;~cKCkg%o3Z+?>e?tVxwM0 zg2-GsIc;n6R2{x1H>DGpt{AzkORE)qq2_uZn{-EtK5}34#FUQs3kb&HmbS+46emnX z^50aPa0D`AMQ3oO69=B$5A2unkN99`?4;@U75#i>=E|+x4;E; zW0X1;c6wky*(wd_(y)84AHVK|vymEhT}#-`+w=(Hw;4(mUD%(WH}}bJFb3R~Tr1Ms z>m6p{slUq!-@GSG<&uITn&LI+nMZxQZGc}$8)IkBI_-4sw0(UQE;RDqnnE-!%Q)+& z^+}1zo~C&qkDb2yTeE%?1W1oL`vR&s=^x>gvFtKEGu^8|ei^&j{$Q;7t>WiJ@oizL6?@nE3*~@3$tbe ziscfOdK_S}pcG4@f-yhm-7g|aX?}uEuBxVln=eR98rlJ+g&_yk;dj*(1&_)cCL^YE zF$)X|S@p~}bL!I@uT!S)6FQn--Gs=|t;VJBTI)QrUW=tub13p2SOSMxs^{uM5va#w zW^9!yN(+S_0K6m$Ujhug?lO^qC1o!#rLpO#81nNqb1Bp5Snr4dcLE3zx!qGaes#XT z|JZjVV2D7`gLgxPyvOtSsT{-BB+=Z^MH(5Z2o-UmF<~sttzVceh>%(0F0dgcnUeQ4 zZJsW514(F297hZ~9u_qa=Ft312^~@u${8mUJS#?nn`!t@0GCsOUXk=!qJUzlhgig-CA~Ik<0sQ`HkJ>#L`4 zPuBRB&c zZZVl=?T`w^vm+FEGI1cbH=Wq0dS~F)h7F1Kz zIt~?Fbn7i03x7+{A@8}lM=~Tzb~}rqh7)AxQ`YgVeMsl$9nLd1Al-qvfg#80yhQO>Y}0 z3V>PRLx*&oP*vY<`K~&B5Y&i%pLtgCQK>+3^j7!pt{M`)2Y(n&rl+CUKOprRLe?=Fqz(q?f2o&8TR|@+g&<gZc@~bclgFwslOPI|4qdn3m&Ji0h^7QZR3_?L;b3WIprBo+<(o?C zIRK+vml4gM5L5>nZpSas5~t1+S>O-J!5g~hrnJtEC~nOMdf9IyB1e=Ge>59d>cPYeDc2Mdnr^E57V&=&Z>(_S~Hp> zG{8ST!UWL~;|YUVhMBLQOH6*6{hBk?I^A&TbUNMe{G4|9{r}EZiA!KGLddjmWf2|Q z6RG2H_FC3BwCQ>0Le0PuzB&#lvM2WD;R{>PUUe4{N0grWFC*RBE`s!nu-z-pHGNE9 zDyF%Eq0R)`3Hy4g$3z5+ezcyYL^-c6ek5LXVvb}W^MhAJkSD!~DWU~yrc@PB@5jn0TEaxzlTLVa-~zS?*;&te+)dtpSg*__NeU7 zx#G1TSbRfJCJe78A(J#hW~)T8!hBH}aT5nGowAY2=91#M%ssq+dAwfYV~aJh&Fc0#Z0uVi_lf)plZWgu=}ACPc4qZdh6Jt z-W^fhRfiBNlD$N1o(W1}N>$_hfoPANlvaw`j-a6j5elue0!q`Vrs$tgvhGZ(@uPw< z&k}|LV%x?>RHI&=w-r!ErVt!pA0LfRdsF{r1rRmX3Jmvpr6zeLoK;iy?OLH-f(h4I7A0)yIaHl%dC~doai%+hex|fCu zF@T2iX)Yl_##4^k%C80K*J|==ESPr;Yc()mw8elOlIz2%g=}e z_1qzCKUR^68Hk z56j8HH?6$q&daD+3h_!3fszM@SjPoZeL--Ub1^O!TelOV65AP9YlRS_IrRK%EGQn3 zJubuNV*?LJM!wAwA;!#M> z-f9*|=c7a`oo<#e7Xdr=f4S$SqB}xt?$fVD5b(l&6MMVHf8#As$S4j*7 z5Us=-1`G|Km*H}mouQpA%USi$jO}4gAohmiS#fJB6^)ajX0`9)f`R(>l9UGR9)U6h zLB7b&&xjR+QC_GO5ocmnd>cKPEE2*yTcCF;xsV_1qJWlh1pvy{ji(ag5j_Xo&1Qte zh4LIR`ma#0g#J8Mu1EpOccUSjYlP`#B8EyYR7k_llFt<)gnRn33Fl_!_=|CCh_(N-d+AB&CZnS*s;qLQaF%)0tDot&RG`OWZT~HZw(esq$${n zp{_jlSwth_f_jG>O%Tbj4NcDG-{>cpc}@#q7~>Qw@-6T^sL>T11p26FCf;H0x*`>X zEXqkaYc_(=!X~NVQh>>5whpbTR50un6sN(PQYm?&o4R%4Jl@L178nt}Su5O9G{eXiJH z4h-k@s&b5pIJwZA7RGSUXBd#M)HMlt9Wo1UbAK_@F;eNtFY6sci>drI%$4J&R~Uv7 zWuVtu`p1wLrW!Xzt}MhN_I4BC5$M*HZa0waz9XD?j;{BOR6k|GhY{*}RLz0k+XPmp zpiFzm-rYpOiu<3eTvEuh${)}+6twAVmdgI<@;lCH;~!G5uZ5p|QY=tH;U4@q)$+ggs0_WJBLBC|DcfL!YmXk>nt~AqM1Hx3PGrA<9&VeRxV8x%7~Hw*tYu ziKxnY4a4ldmTA<8veU0@W$8)X7cL?Co=v@xd=APK$r-&o*p?_$htx|@XzSg^n{*^1 z?x&#Ctfpq>sEWAH%5hfVxl`qWYY|}r<9Yvpg)4V1QDxS8d&M(fLo_}+7{7w7QwjW1 z`#D5#?UkJ*VsCbxT}n6(LnUGyIZ$zX8?Y(An|Vg_RE!w8Lm#Q6}Ha`s-dXnR_$V1 z;qf!gGy(?fzWLnf2GpVh_?!}NCQHZY(J-uX5f-S?qc^o>=pe14g}yN2>9sPL@1kn; z`?iVZ<{u&Cjq6~(Un0JZ!NGF;?S3rRkleqW!;QBmkqu39&orVhoNVa-g+oss0&acOEtn=)FRpwh7 zbEiE|cXVT#`xcy)?AJku3Vo}AQ1D1EdEGo1RzC;)QC&G)9|gzEQ=DI)rOwy3ZaP^h zUb1XF9K38>LyUFC`Qzfj#}^1XB)|{_D3A6LzK`f!3>4lYU3t^EnQ9 z;`?R@`3f81>q#mcd3QS9yqo3u2UT}Z04f?946g>%{4tmO2|OS?9D~v8nKjFmv-O^S;CD&mxeem_8tasY0*D+67@6%`wHLJqXU z86i$*2_E^-ap?K#WMze)3cgm~Spq5P%& zI+ijlUjl_+TtmanH_9-8gb)#bG7n=ktmfIFOG{*Kc*ggiP4hvcXxRgTk41o}ECMN1 zNcgh0AIVLiVAn9kPlttjS0t*Nf=Et1I_PObp=#ZE`m+=RKL9tI21-Qbs8e2?EG1WYjq zcc_|Hs;QA7BMV7F>h$8n-f9_!&-S?31=T`jC}*I6A24FDf{99gQF!`itZhv@=GdXb zY=;o@me356{ut36-W;>46u`yZZZ2-Fo|}PG?~UNAJ|oKowS7y&=bgLri=2XwBALV= zPFSi+zYKkdW(aH)dSHqM!gqU>e2bEr+HaEZBcd}-4egwhE8hDFc-y$zgA!`LR-n7hj$*`AA`oaZX;M{1mv>YE zIT0qmyyTwQW!4g|Mq{0rbi0f?7t3dS>t)KrkhP`qPG};?AL^q^kh2tx`^i=aVv&6u zn$|5#kmaZ&u%#}!O9M~NTn>S@Mn=cmfu_~GC-vhs)*no{=ckio0}Lfc8=qS8Q*J@5 z?W=qA^&PFXjJD|4D4{G(sV7@9Nts=?U1HhMH9S(V+hpeIN2#^`bmic#N2KCPzuP{P zP@(u!dKIFxmuM@Et8|#weF3IP;BiImMnLHJd|g}K)%CUM(OPp zdHp-VDVtD}y}(H#Wj7B7CCx~a_q;~1I1Runv1x1}trmj9ms||ypd~IJr3Q;8=(jDI zq7*hS&R6aF1%adM0B#dGuebaLOY#jZ>kdjpQ;Awv8v|57UE(Fbm!!bD)fEt9Q>}Mp zX|!O0Y5*D4*s@A5rU%CHhs6Xe))-^c@^4O7;kt@OicpGdh2Ft#r-a<2so?;R35gW% zruLshj|gJr1%0htv*1$!7-Tvj zBx>HpNAU(R7+e|7X(}T2vK9%Nhb?+hg0B_ck}ddVo`?Yt!onu45K+H~tbt^9`5)s; zyATpviHcc{DD9$w%oBlbZp292skC9UvP{-o@?52)*#ak0!*X1{;*Iabk{qQJZ?Bl| zy-)Y&B|Mu>`K8-RWs#N`^?Px&b$yIkDJ>-R&*uRQ>%TF z;;mkn!+KULpiZNl4ipxDa=6H8{t6AoQ2eSP0?Q140>P*!;~k(O_eKqMA4O=MxyW3= z5<~|-5@U_3P~~=&Vvb_qd+Uow}h-0E%(8@ zc@<&Io8(waNpEG=^t^h%J+*--2CF=~TdKhOK*@o(7L-LG}d0bH+C@@y< z1%h6QQ*T30rcPKftozSDN}=`}#8{g%cHN^*+ptQ?#X?JB@0XKt*cALy3lm2q1TsFp z*d*NTN?xKLacQUhmr4hoL0%)sf1>tMPAi91n?Ml5Ai>fO-(`a;gA-_|PjA|MREi@L zQ$pB0;->T#wNnDl%A^UE>|kuR^CnvC+xUH%f)%}Pr#c+-ETzsaW08(U9c9eYo^a*% zy}W&cht&Sm_09Su;2YkuwO7?1*t|J!ZuurxX@bxT`O+g%@r-1lLN-C}-@X=Q9%Uao zgUHt}LInHxGr4OCVoa``iZ46wR5*E(ZYH}^+r;#x@~V-YOPmsIJkPeTt@c{Yg;_ZH z_}evrsqK(SZU$rNx|irUGe*6XUZWm#=g;oC6i_mi|`szCr4Pb$968^N#IhxpMbR1GmIb`tu@5W z1E*IGj;Mo|b36NDyp>5>zZ?e}Kxngt-g@b1VDnVgaei7{58?cxBu4(z*q*WdkQ-iH zgSiD^pfC^3d#1RJ@3v!~5?WXp4gtV}lJDyiCaB7Hi}EV_!j~+l zPgz%ULuneGHq^jmv1*YOHR)K^PiPdt*#c;^JNnrlqDk*gF?WQC1&!%K;N2^#jqeN0 zS1@+siP)pf%o(gIY*4Q~?jOLOR?ViVY6Wi8c2AZUA&Og@7__<|mKoPCGdaD6tIFpD zMH_2BXO7JTgCW>px-I0y1>qOW2sv`Z*Y#R%MM%M@X)Hx@wZ_j!48u&(Eo>(E^dO2Y4RDRXlHHSGqU!^aAm{2?#IWoC?L! z`wRAMY?^`TVud(BGoWNd#y)s+f#rka zY|2P#DMm`|5uh_%<%B5dq1twVxpSXG(#8xbQ@7uJ;=M{KvL_x(qa7;B^p0DP-L0}n z@55qOhcw+=xJXgwOf289>%8cN0kT^GM(D;)8#8(VPrPrP%ld@_tc6G2iV*e1&x#Vj z=7GBe%02P1O@P>>&@M$6qAcSLLlLXMWi>2imICF3u+LYiDt8l&)T~hrB$uMa;Jgph z6j}ekimOII#2_Dgd?q`1@$^-voecAs)U}MbaXey`OK&SY+jh+vQ3lD|P>+4Q;ffN! z5ElGVfiz_Zbke}aC#hqo*-NyZQ#8_00NcihP2NGDTe|yvzq5C7P{avo?xsr^eW=r+ zU6q4WTLb#3O&m3(B)W+vNm-`f4>piO(n&$ioqH>WI+R|hN=`U~9jEU!jzjg7;R% zu~!JLHH~s5)b3?=0;N-%t>uw_$g#&KG!0s_N@dW%JS|-YsOyeLw741MD?9B(p3dj< z*=#Z9Q{!d$bxx<64!(6Ug)`dI*c?Bw!MudSo)g*8Yr-gok9}M-Y6`Py6^lFkzOr*@ zd2g|pvT6sq^F>z7Qr8VNwawHC^0Yf-2cA!bD2Y@B-ERHhxX7#x|}qD<+@vK)-lnU6oFUb}WEm5t!>P}j(_i5(gr7kAL&#GURmm1Vg)w{3 zfe|U<$>**Sl58S9bOOw)#O{MWPhaXx;z-A0oqO zzbHl7+QI`EaJM_a#h*;ww26AWq)Lz?6ahsj5Iza(=pn5tffRE>y50vDWiZc}>7BQTLFQSU*v;vSQI?6g?0qi5nJQb~5dc$nUV51e ziI&cs4)Plbt(z=v?l|A;V{>80;o2BXE5%2sCs#ZUtB?$E?228X%cbURSYB?ep|Q5S zbir1iRGkOpUM7owN*4<<+&LWd$%0jnM^o{F=B$(+A9BgNW{i?tE1%-M z5*_a1ktdm`-0eA&ZN_$V#BU8+$C05kW%(*`La%@Pbl+Ypgs7Z}n3kLv*7l(ROP}nM~lrnyJuv zf5_(J>RN1pju5eaXxyl<7a~Vg%zZ-Yv;efj9+D#z(Kp5Eq{R$(V z5m)y~nzKgns}DPAT1P-kn9&n%mXu0@i+b+KGPPNr43Iyhd^)(~+Zrd$_KpNv(m2tP zl%f+m0#P8Nnj|eVY3}6hAW6D8k#sLHNxf?~8YT;5n^?$9ETiZqS7_J|a%gfW9F!<` zBjfxjY9No1LOQkpq}3PElBEV3XaYp3$>OPp4HT-16BCn%KAzR_>&0@_H z(@MpLW<@l))BR-G84Ci@`~y}mz=}o>_&WG7mt-4$)fXDyGLCgAC+kf1Cl#pFyxC_I zbQlg*g00D%r~Q-u$|a@oM1Fs@U#sEXUWB;Wn%kcL#@PEnP6+eROCOYR2}~;@<)~@t zr)vkUWnRb0oUt3qui_0q?5}^PwId`c1Ce~s{w@Rh8@QDJfcrh#p5D;j(AeCR-q_B@ z#?IF1``5(OnBLaZnO;%&pCz58p{rq+`nv7+OmLqkb^92e-x36akvR(wXiKe$BQAEPEYaB;k&EC15;2c;7BA0&-$nSKAxB(((Mk0Ih z&Q%86f|L}JdTyPUJc{bvK1Srr4KTP!TI5)i9ecX5i)?8i9DHECE{nP&5VQO<`iDmC(|6A?)n< ze7(xzYq3H(vsH?MABzEOBALZZDE9Kh0w&3tEr?2D9XfiQ=At>W4@2s~T7H1~B{(Ja z8qEh5f%i|gH)>Eo=%b;y(09ZbgI>8knJ1i{pO5iCK{dP;V$j1=;4i-oCro~&s0DSp7Ean5Gq75+rl3> za*H6HfbiLFWL(>j-5`_*L9=x`>5}*$u)GdXYfo=)Uay=p{7|+mFXcoDkb>)q97WYr zkDmUfoP;m+o=T-on>hx~Q~OD1Mxhbw+8Kh2goclx8O9`SW}DC&w#p3 zlq%+9sRRG;8C?feT+ZdZRe~^?CR~~y!v(922ck=JLoV(HZkJiwMa3JnSjxC54TY_U zkP5N^KCuByB-PWcK&jKBYC96<6i`^TQSkX%?Ep*qSElc+t$4B~*Wi?}dv>%*=ijQM z>+Yp8B)FX0LNcUuePRpR;5WC_VJtifsdTh`_sjVjv$+iKJlEuqcnY?wM` z)LUbik)@+&>lt7Vzmxx-#Q?_sC;wL&(R<=y)~a{OU?lV^AchMe=%R8DkZ6hnGRoEC z7d})K0;b_tN-p??XS*gOFZ`(|UZ>nN{S7frg_!&YeH=df8Knfs2(2VbkrI@;erCLP zrHeI|U0MiQD|x*~um$~FtyC;wdSVX^#A%^!LIn-;%>snyZds?@WA6fJ4aFp9WJKwY zz*L!q6;hb94tV;K;*@XeHe6bo4hib#*=ky#1IiuL|v%@1Ac! zZfro~3fLgr?nT9Y#rN(Iy#LgswZaL|m$<9Vz-AVO_a7o)s$#?iq-nC1_vA}dN{?Q2 zKVX}JvM4t}Iv(Yv& zSA3HnS^Y5l6S`i?hW(_W64N~%Z#aCzJYvdmjBIT@4Dqg)k|5Ii2`uy}q{;l4#x;Bp6~3T(;J(`D5hi?#CB z@C#w44HnQy0T%zgyd)Fq1Gk{dtsYTmAeDLlVRVayfInoDQV<|t;9d*Xm@TGbgLH28 zx%AwopqF7w@wj9-)j~y8%tae9 zc4@7R0REkFhi`CQEn^A9VWwjjAzD2v4#m3Dl}R3y{Vuuk>9CShwaR>XCRM?67>!qw z@7(G(CT}CIQU#X*?=`Kb##fNFQezQi=d61b-ts^v?MRjs4>=}WGR__5#My9!<`?Db zsV(Y{r>|--bxO}S?Q3p%5j^l8r(ctcl&dDS*x`zHi*Mlnm?&L^Z>ShB0Kn6C9;hG< z41xjx0RaKPj0~mvZI%D$L-D=(dmf|eY+>#6ZyMtgD=0l6fDm%^Mvcd7qX67?KQou) ziQtL!3QU&8h$-VbaJisH^0gr=6-6<1&^O_Am6h;^yEz(RJyFaNH;oQP_?pscp!U96 z+t>s{c;QP|p2y0Yj~h=la2j!0S&F0l9#S7nKuO5~q0YP*wPva1Q$e!y5fA={BA4a`bc59NWk(&cBD=axaETUc0SE9$-`#X+oa}q8YuQp8YmM@ly4AHe=Z_Uc6}etVU(3Qa#=B2i*H>r*drd7jbeq&sIt|2&}0Br#WV zR?}rL^oO9WOLiB=?}*0UcsS10wSV0u(ee3w!^1Yc^~Y1T?A$^}&+iwmBXu6r&5Hy| z7u+8&nYr~ZG-6E*dQ;tC){_Gywa_CJxYeC3#(#3gwp;`5D2$}(l^m}+wU>aK`$cK3 zHIwfc9H)hRRSRY;vl|&6=ibz#FXy^<`_X&`QD>{Ql^D%!D_lZ|ehxu7GjY{F>6N%& zb-nhpST3@@0=RWGPJK|o5QKNq1Z~}d3!2N9-_VoX$7M_{JEQ0#PV&0{Wp&A4vh%9^7yHq`3MbBZ9YO7Ykre0u80lvD6$M=)$V zIXM=NyLhvktm4C!@*Y=5R&ScGE2r!2VE{YXH#S{Jr+w|v*Hw!>S(#NZHjQ*6hF; zlvweV7XUkR`_f?8P&W$la&x9~FPa&v3XwIJ_UMvQ+iSsrL6fmIh$A9P*d0#h!y{aV zR;JrWQJ~V&cVk{p(pZj%(c((9aD^b$k1oMxr0sgWiqYiDXROj?dc%Wc`^tZYtL!ly zN5bZn-J#+P@2w$v6S^%f-@;o2PJ4m?`%>u!1HWszgVPq=#qyc9_iWp!fSi zFbCYHy5U4&TVE)A8|Iw*r&)n7fkeZW8fI&t5m_<)) zZ>t`E%3*QNFCU4>)t3KMCOH=r9V3wu#KRc2u<=qwe-0r)nQ3SNwo!cld9Hj#G2yFE zC=*JndeO39Sp!P0vc0p;?m_7#M0+=4K^PsFI!+j}%MT>Equb33ob6 z$%9%~tEZS9jgG3*W>kk)4QM=mG!c2j_d>WIE|ssqLG48*AhTpsU>0%{d~GLMQ!vtICAiXmH|)vEcZ^S zi1h@R2ZrFmtL{a-HZHqgkHZ zSW_3;GBzaWAV@O)IvYs`yBbkD2(i#xO+y3SV1fEWJ(CVtW%Ozp#`UKvL1sPwM_e!F zOv$sFgsusChcFKLN{FU3?2o$**aJlmskZgqUrXjMb?>F+AJV?_$J(!xO=APEvWaWQ z?7DhY78bH5suUoJHF5;K)GgPy<@mAKQMgV0tgmq;$Qaj4V;Zyp=JqaCmie=lkysTy zx$xGgl{xwCY-b<*wU_X%;19P2&5_3KaBvQ`Bl9Oa1sqL#7G6CbYV2~1bevq(gJ}V* zsr0w*?%Wt(4C%7xri5l$yefI8Jy+gaFWCRYQNK2V(>*W%fEN6}#Zl`27)Mo=Wd0|1 zc4^qi?{Oe}PSs(k9w!UYL)!$H26Tm_E)s3vk+()B%|Mk@tY=Cm{dRDljrj6qZkZ>M z(^}hu^OLlhe&beA|~9~^t#r; zYx^;sm;<%Lt6$0_chHP7k%hae62u^BtYuhqhfs23@A$djsBud{gItyfeu_Ep~usxL-^Ht~djQ2!91)^mSE%@QL@k|DpY1^lcmPXZD-XC}Ff@Dt)_xoduF z`pR=lu1>-9$N)2F81v8f$EU0F)i-QbAUB>j6Su7E*VbTs0tjw1jh>wHTcog@$1V$) zpZCX$aZyE6*Mej62gO~78EP~72MuIptLGbVy3~LGNUQ@Xs^D&nCN*)seB#-zvHb#4 zc7C1(!oD^KNKysFV!M(&8UQqs8VM1im~;&S&fSHQ33EdHONqD*aDX8f9&xS=)2Rdw zt`%?euUv$z-$gt$=SX0{Xj8v*vSs#F$kpN;NN|YuM4FsLwv30IK-Sm2=N}aaC&iWK z+{fAdP?`eNIEr<À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⋙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⪙(f>ax9!bh3k3I1LbI8N&y0Z{zmT&Yqt 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�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

    0k1M5sKRG3f|yF;Q?ke0&CU1?!I?oc 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

    U!mH*3;SPb5bm*w2gu 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

    q8bB8PrG*ZhDn>e~ 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%0D^wa!Iig>6`4NS(cMjf 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 z z3TW*4juRWmzk?L6eke*gbd@?N4MW0&>g+qa*(ly68~lJf~oqY}A= zlSPv1WMdKwtQ&GiWHNEA^5YlxJ0LX1WbG6v55C>bO!s%)$HxpbP+8@N4;4V|i@8#tm^fFJd^KaotWGBIXsV<=6q zpbO2W;D!4&sE0#**SifW#|u<~R%mpl(-< zeB==s9y=+-;B$5H@cpVGE9AH+<-6+K9ahEcD@rj5ti@uz>saU&eo#-d9+w5}B$zI| zXwEo*`*8=XtW$XG#fru4+;cHfI>*PVTiuu>c}-Qv5b@k=N*Z%<=+@SxBD4&3AIK{g z*d{}?#3A#lNa}=Ck|T_C%L4rQ`3KTp;+#)G>SbQaCG~5;U zKiBghVuZP;&K{G8C(PX&;Z-nSMkBOR2!ejB1(7v!slTO{QCaN-Kz#*cV!a}-BI)XE zN1>o@R|38g1ElEHtTXG*P}>|UAqrmgeu|QfW#9?VbDN=&Yj7sqmJ>gL>E0Ihf&byn zqjQ@fk)9O-oTWkou?`jOt#B)Cb=Y-^35?5T$01Ub^^D!oMSgJ-i-Mwl;r=vPauDP?}3k(o$RYt}9Q2_4$2jCTlaSS!gsF z79w<~)w{K~sp+(8i{Gc{&I9Ex4`Yvmq-f)OI|$CR{b^QbQQRVVmfT71L8wj`Zg_tK zziPEmm2k{+Ug$=49X@{_M}ZOp3&9=NQ)$`Ccn#hGXzoIKnBIq?*-F^*xG`Us5RiKN zAp~~QWThaXs(pInq^owc+tZcdAGNYPVgO;A7j}{m$qvu$IiYrGK)%r# zmQ%~2_A8Fli=?DHwZ}UdD6XE@xVe1&=(-`v_zuc2+{?p@9Xh3;&q+q1ar`bQM+ycU2&3sr^zE;_PX`hnZaBjy&WFVs%M%)&@CsYpDw7m076e5vJQCwsqc|- z1#yUS7MOS6t8OEj%;h~o+Xvm52U2dwGgWo1od7iL&cw7cWG=gp&I$3^hPS$-mP;ip z)6m32!S-UK{_H~pH+uO8PpGsK*UJU|F2Wqe+Q(ytJmGWBhvA@ew)2QgJpsP>G!}{A z29U4ap=uZCN@f&{1Qp5a8A4wkQJd-*GPd5sLs&26C+beRjvCDgh#_4N=LumHk4Pli{1 zM}}FW=+>|k{1RRBDT-QJ)dHm@?%re^VrxZEv8%!I>ZPsTMpOgV`7t>U7q}u>ABKg4 zBTnUzj5Dq(P3B%10YloTv*n#!B@H9H?G}>KrO|+^~ z1#}il_mBoVkJq%-*kC_}lB*Up())8@tadyVY~pr>s413XbmOHqWW^%T-=1}ZMqLk~ zLvK)SFw51HL*e8yi&i%)O*LBdtS#K2uJC_Og=zG}N3%HjDBgi3WE5rrXNlh3-adF@ zBbg$`br=S?{*k!I4R|F$Ug}fgz`h-t^8?x?pi2Bn5GoLXBzR=NtF3#Aj@0FSsT1Su zYN#s+F*qv#zr;F!sR&sm+sSp3wCR^&YTM$ZfI;GcLSO&V8|G1)*yG51YiXs4rR$-s zGFuT$VbSe~Oc)-c?Sn00KVsS{`6e&I@(WLV-TFB)ai!%!@c(1&9iudBmuGbnL0OvK}5a)<|4(X1;h0uEzQx@tv~Y?xAdNB7@Wxyq_KVtj<

    9Y6XU7`? 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 z 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

    +}d6?^I7S0iOEqQS)LmL;QYyG&6lJVVY9Xmso} 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%0DP7ymJ~`-E1qhxgK7T;Y^nv96mKrY^cx<+i>f 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%0Ao)U(GT=bkW!PG((9 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 z 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

  • =kBUTaI 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

    _G0xMKpmvfXO~FAEX?1 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%0A)AVlDPHo(_ zv6vwFxM!s3gKMv@d57E8%iXMd>2vUIsz!X|R~+tuc(GU3wY8i)@w*H@iy(Okas#6) zm~~P<%9%$K>yRhrRf@`|x|_(*tfcoP?5{N1yM5aColQP;aC)$^f^eR^O^7wsP;b9y zEf0$C;%kAo7u`gEDrOk}Sj_yD7X9jv{6{(z8P)dd=2G` zh|Dl~SjZb-9;zf~aUAShM@EQybdrFyf}r!Tnj39Jb3(#^05!UaRD6*gk<{o$k0zeO zDN9|E>Y&c!NVQBTq{Et}R0pbVrpBZjiH~sv?h+g}n-?zJL74$MIa1GT}^}rwk#HD})7^FAK8erN$qu=mP9mgqNrfyD^O~WKQ{aSkJ82eS1OczI7qN`4Qz zoyI!Fsk-GT_{<}TsjvSP=k#o~I8K1sG{)tmZa0qi3IZ!@{Xd<&R z0s7cs*#lThO?Lb32W_sz+F?L>=l+-;|KrR}*~|cVk16xlMzSz)KMy#0bNtuL%}Kt; z!e0Qb{Rw^6(^p|%*1e|mT~A2~-8E^tQ+_&NJ$|iGQ0lFNreG**_rhd-JY92Go{3tb zb5Ok#8rz5jBQCy95^Z8^#0BQs6Z{&Q974SmUV zax6pRtWF+lr1P@(f45b?87nqj1J$YgM;H3Xb+3N` z1p|8m!0qneSn@!WVBoc@x%*$`Mqs=waPbL9JNAP9(HUhF!F&b;h6s_cvw-MSm+6yO znu;X%2eUUk3fX3vnmFNQ@@Ty-=NXK0mkJo_*^t2sg#{sl;&QSjO~v6Nw)vrnu)r!cF(RdM3D?2;IBF)JyQW-P3~*hME+E1AdIbLz$MNLX-DgUEi}K zZ45n5;Dt^~W(N$thV;Z8B?LQ6UB^}?$7>n}rx`@vCUD8ot(&t@m;}hAzmtC+Qlh2? zqfOe!=d|HkGTmjmQ#-`g@ShufwM22l+azMT{4C3ckjV%(MYYJA&HYkP}^9)?;ZQGE;hirKW~=RnwSdu6gl z&zaJyJ^49s?CY=A7z6uh8z-YVtj?31tdqYeav3N31a43wx8w&BB75jGNeU(n5vnk1 z{L6e?66rdoA0`lmgC=EW4PW^+k#<3WOHa}-xmc*?0gr0AK|G81UT2y(J2ji6NQ=5b9d$B7e2do;IPp}F&3|{ z?2z;tMdwa^abx1)&(6-sVxX7XGsT1wA9AR#lZb;=MtsMW6Tu2YhEO5_#c~UNKqCXB$xQ?-=Ml;} z%+&?7qt3Yp2p?;@#K(N1gee!oRVQU~he;tzA_9V z1TYycRS~HV!f)8WvQ2h-J(Fo^W5J8TV`Y@cK+0^T3%6|f9>(q#0t)h;qM1?>8ZRd^ z&mXkJH6fAXt~*xA_K}0B(|B1|K4?kJtetW z)^t0O6qw{w2YNpiy&hcAm?wYpINItmQiJ2|*2As~8;CD0rozP%hWj022WOP2@MZuB z$7EnH?NQUrw%Lr``f+2>fClL`Tb8M7UAN2GJSEs0)#TM1_@h@gzmFv7BwWm?zrcx3G%;S(=(!NVoH1$R{0ZqCBSoQY#qNjN=_ow zfK39-rtNDiLye3Mzj<=Z)d_ITkG@-GYM;5j-BQvH+xs2jG*hNRirh!3Sr z0q@w>>%Li#zV+WbQjHy_IH8KIz91eZK7MCyDr-!zo_9P3CBXfvIA(=rR#{)18aYT6 zNE0PJtE=|?cEFTwuk}Y=059*7$^B6N4E1=9=@J zcdd&!?Y1tj!C9#X+m;i@!U-&BCd4Y6g@n@TC*i$PY05e8;t-GAO4?@?zCsonSJn!}i)ns30X!ysZn&eDe0SEZNO&b2 zU)C&;sCakNe@b+bng2%JJmba%yZCK|hg7k0$9b?{J*_};`NKN-EB?;PL91Ud{Bd}h ziO55neJ`l{Ep2LYXB!S&3*`#&RQl8+!kTvXJ<0Tb=>|J(ya@*1p3H|!3G-1EarZQm z+9f_^=f_E_ZGYdF>~v)+DceQ8DKH89nJ1d@F%X3>UN1{DkEh^(Z><18@7xa$_Xedq zbH!l5eN_r8s<+K+(}nf6-mh1#k#d0657<2J!v0hFAoPFy$_bkp8(BIySz8-_{$CH? zzemWK>Y6sI?8w0WY6`SOMPPH;8o8)qAJQQC7X;G(hqSiBKTeo}h=C0CGtY}O1k9pLH@@s!UKPQA3^r(=|pqA!SF&Q3l z#bI}ojz&H{+~mfO{8nl-6r+uc;uzd584nwYPiSF;R$)M5?|Qn5)-|!E9GL7&v;&c} zHI#6%dp02q_-*gL7V0j0vu)EZS+pWqlK6!hvn4rtF#u(SO0zt9#`q4N;dCtmphVnq z8>VVnRc`5$DKL_L;yN~ERD1JE`g z!5`ClZa0+mbq_hiMa~e01$!cb(O)Zi{6OnQ9EeJH<}kjAV`F{xo##y@*pj`K*zT@5 zy#8cfl$bW+zD1j|t;A}AA^&hDSco%ya`2Mk+Zs3@{HW(~bS)#Tg7wrf6vo5hi$6jQ zQ%znG6CK5zr4Ey`+2EeI%myB9@XK@{nT4K=nR;~(S(zh0K-9>{_^?J9-#*tVo08{- zgR|PWQ%_wu#xUu_3M>X=BFD}ohvAgQPS`&7&r{~qm6F;*?DRPGBNvkTI*IhwrmLPs z7ogCrjkUXQ-f2*ek}Ccsm{;XXbDa%kG9ll2i|KosU;)joVZQ{*($Wp6o^+S$}B>JE6&xl4qFV>5|87E zURs^Llo~u+DDtkzOW&E?1H}ndADtCJw>b{_}fQUQ=Hec z^#1j}ol@%dT|uoN9A&0ZOoe$H_F`p#~;xTW^1=v&zV+- z_Lux@qGCJN7?G646?yY%-xCg|Bo_}B0x{R`W>6YB%glpxh|D0(d7SD>BAGRMr{ZG` zK5LQ4=&CEGmS)qYDq_5Mji-x;Z(#kIH8tGSNJiJLqSRX8X0KEy1w$5H(cn~X+9NmV zo2v`1Bhrm2N0@4?wEGv6h{> zC1+Q+r}Q0D0zpUeYtZW^dRw68t43Gw{U+I}tigBFvBKkRjlnT(_Ib}$!H>%6Ep@g< z8kl*JR=CTCf`yKi*fcA*zQySL2A=&2&z0A|8h2OHwVsavl|vrlKgHGmE*ABlr&WJj zJ^Wt?ghk~4hd?M3F);aJAcA&nk&!XvJH|5`6u(^R1BK+wie27GB~5qGBeLV37fZ)$ zBeUAXgjy``&dr{x#pZs;id&6d0{(f3U=Ma^<+RHgBjeK#P{umr-&fLfXs))7*mLrN zHT)Ljp|#F@AuO1qDqWMcf~Iu)*P+}mZ)_J&Kyv5;Tz}uI^S{4MVS62;|B*K;eo0!b zvLkl9Dvd!K6B9SGnlveE`{9I=2!oQG6PZknY8soE*A@Ioz_(fJ`Sb{yLnr0pNPtu+ zWVZ?gyp(I+xYP*uO2@?SBZd{plH;DS91co-RbFW3M4xTW45@ygkYeW-m5 z3K|@A9G4{1c-~O`Mr{T{5J4X`!;UNPRN4Z!3U^Cgua#VA#908P3e$0JZF06BGE(No zQ+56G0rwRg_rVVhxVd*{#?xpgg3{#3r?75C#RDOkbR-$7xtGH4s@E_s<*F#BsMrq zTtYIS@>yCizd-XNIoL&MUV-GBO7RsDp}-nI$w||hABDFw);;Y~GZoxDUm5b=?}DAd zXJ*@w8mv8;{(M|ADQS_B^6z5?2m0m1{~nAbhim_Puy)%K?h8&+s158e3R_|Ub6{DTnB;!u^ z-{NA~yY3wXg2JP*cyN0M8CSqnm>@M&?lyWtyXU);OuYPz=UHdAcrSi!xF5#lOZ(xn z*h&(u3Ns)H-{e<3iysn8e*BF6{i`C;{`sT`A!p&iQb$1f*o1~Fg|CIEj&f}KZh8DQ zVZ6~P?q5y}2^fT^2Y@EV2k3taCx1(;`5#de0KOU70y^ITc&5D$zzF+a?Kl+*JbxI6 z>$lXAw33P_obup-L=b)6U|zo^*XH^ghzDr}=RYHN!^{rzV2HxvxVqdPH!|encG473 zpk2lyZ}@}~Y;=Wcil~?z#Oir|J`*>S>~o5l*6o*j`^FXeAdpfErx_9lkV(jZAA$jy z_Di8bs)s_?&-qu0Zud|K2V9V9a;CDi1o*9~HnN8J+f?SR;2nc3pXC*^ihFO=k=gNK zxAh&x>60=;VORT8;lXp%>cyWESok?{K=rybTjB$(qHd(}VWI>-G|{D+Ek4Q`_C#L0 zE5(4J;0EAZofuZVib0CEN-e|#r9Xs6Ar74dCAs&-c<}Hp`}pM18%lRfy<6RHC}+Me z99UqY{EloD|GbEf`!RCkx@?D(@7fp8{{J zsEc%eytQhu{eZ397`ei(9Z?o|lD$B&oJ5(QCY@XQsQPMtNxb|7l&42L2!48EvTWfay6ef8QlxV{kaZa5CclEGRsbMm9NL4y1an7w02@9R2OQOI?3>hrkygY*r z-BlYTkfMx9>9tMLml2)vTM3En(Ib6l2S*nsoG8&GHuT=xuQ)wuM)IkhmbgoM+-lj# z-t)XkVqBWQx?P@K9irQy(GMkv0@X&wCE_nM^=gzHc_3&il`tc+{JnN@;_`*kj1%9i zDUn1c>|Lg-9Lup!Jr+16F5-8E$#r37ZsX<4|YQ$V86uMbjwK;vVQ7sUxn>D?` z#~-b8q*LhYiu4NOc!x_J$m+yBGIK8a_F^y<(a*paS?;Wt5}jv%*CuO(-6OviSjh$i z*h_RTneIiqe8t-JGI#D4?#(XV9gLVO?*VD4t`lnNRvi`)vc%4y9sPF=iw zzDpjL0I*|2lpX_C+pFqzF%M>j<6N}b?8GV^+e)?Q8~ZPdh_pFlA&4YRQnuuXFHLGH zM6E7uF{2x`kAFGrCYr;Gr~u+~3+z9|XTkq9TJT?&@c-EMohz^ZQNZz<)Usijk`jPp zrGBX=z-T9t1j%~!VKh*K&TbQyS#N8B>tJY zHU;h{gp!ZA7*F>@$}IC+3W-CCTtHWe^0oR@{8XuK>B{QzaH!mmhV@**#~{rE^Gh-6 z?@*bPgiM|6`vw)X@%r_~D(bUp;*9(oMtE9Y)|zGGWm1QtPG6`M$)21qfKAd;Yzv1% zp;6Xeh##=3`3@BeNm}KIc6=+9_AIZar%xoApG8~YQXWFn6URWIV(-rAE1t? zDtAZEUxeEy+I~v^d8i= zWE1OWZD7YD3~A~kIL}RBZ#l!JVANt1#i1>#U1rEpw26bkLD9qNs;&%i{qFdTh#elU z4vkS59|toxB62;gM=PBY_}-=Juq7z zvW0}2`h}9Bkcw52`WRrio1VwHCexSfuQVmIE}U`<5DoFViu{P}tRzng4k37sI~;1j za>9|6?SWu6B}?R`iI)WwQpOG8;qJJ&x2S_P8b$k}nQzC5W>vY9fyCSqw_CUslSn`i<(^iH&Zqd3>-VG7uDA2n- zGZ4$PjKH_+V@RKa7GNau4SR;s3ik#E#<}a1?GX$>acs!$r(#<9;Bk73a~s8QElLz> z4Bs!77pp3)PIU`WsKqIs{&`H8M0kEO+9*N4++$pf1VkTt$&S`e za%hvar4=@#nKb8PP0&3OQWygY!hV_wID$Ja)ot~6ZZB+KGbFCBBvuI*(ET1FRWa~I zdrUS))1c_|SfYhFI`%{DkY zUaNx1pfi+Pn|ei$8vwd8|2=3asxM3$743CW*Hw;c>y6p~@=K23CyfuHuS;srV?&OP zQ$Ypv<|49M1{)?fT-xdJLWPvd1j=j2MDoa`AYtI4{tJ7gUiR-YrCuTU!DYoF;0g!^ z(*Q#}LzuDMoMcJ~S}DV$8mG2SN#Fox@}7@Un@@HPYrJVZ!-rIIA zT-EKeMsRDa&ZB+;cZqY+C+B1ae>AB$LcYLX5p%P>YP;mxib0^2E3^ZVV6SfZx2a1~ zg`3WPM-JPGL#v2sIkH@l8>gIhKl7&Psru8dG0Sam7Yl>Y?*bikMM2zy8kgs7rhPb! z6hkE0X~k8VY`hhhDqKLnUtXMGJvs&pw=pGy&c}fIQi5l|W|1Bp*>9|~VN1|+;(=D= zf1jPh!*Tri8UTs^-CSyfz8>2~A0Jm^xAewyKtAaq^I|qL91a|)99goEo9%cTf7s1^ z;diwQuAP@@XG7HSW_Z-3S!JzngGc%)ZiwZ6$xJ_ZMyesDbq4A-WrIk zABD4uq{m2-V!N=%v?V@>-ns|)`;|9M91NM&^%A*cr!mW~6jk2~dyB-o)3R6GFUyPp zqS$+%%Uly1F>za)(rco#4l{QQG?fl@Msv)R*^}B1u>|&2)oYut=eYhr`dN^5EPLqA zh-=c~bNE9Op9)eZn^P$YO*Mv!%$!HA=OsKIT4D*sw-GH3U|uuW>q27U&&2wEXh~R<}$d9EJOqQsu4>MZ> z(Nh=6+{Tiz`T4R?8Cig18{N*9E(nHnsYu#EnXs^g-czg0Wh$?L;W-cJJJ}_gRMy^U zb6@uuXuj|?lNh$s{)Q-NScmyFX9)#$CdTc6qERXmm&Zj)d6DVbIqtu8URA*j3a!+~ z9eXV-wly=YQor&1m#js#0lGW`0M9PN{HF}{w?aPuqk{M!St&#L=N}Lo;3p%2W|1wt z*uz=k!GJ^1Fgxe1RgHWnv-f-6mUIQFL@xf^0wBw_Er?VyxDY~19n-r#_6TPbs202D zlaGQV+ZWJG&K+SVcT1ATSUJif`_zUe&5f?_(cUx&$VcFhdog_yeMK$B6e|07&EIdi z(lEFW4Jt0;^Ybyrvb4NhrHo6Gw|ZM}Pb7*r4w`nziG(y3GBFr{oucfQ9{b!}*- zLr<76t|^DD{kU$&h2Jf;uFe&sNm&^%`c{yT%G{jLmaiDFq;~x!h1y1me0h)?^(h5a z(A{4`PY#LX+k|i`qh$6EuZ}1>Ay+Z>>y8alKs&&QYeF5^P^nxj33P0_0&02-(3C`P zmm83b_(O0FZ~_tZK3jMkPB~h0^T*rsEKT|mK&vuc&cG<|xu$D_R)``e@p&jb5<^C4 z=Ot!20g;0ghgE>Ap21dVf<9O;aIj`sfd~}?G?YFP55<>>RG%OXCezfZ;H3xpq|m=7 zJI7309k?niN_;w3Vcwe1gEnFh_q9mnbn>P_(bVu8IPXEs;qRVoQWGCHGkY|&JarP1 zrp>(KF&e9<;&8U0mO@gA8{mTWOz(+2I%ocRHu#j`eX`Lp3y;^lNLZbb{(yvaa%D%d5Nqo z7V}%P6@niSro=oeqYp8xj-B2Fr^kKP6VsxZQ^gM2md8z#re#N3o7#$2to2_om>lh$ zpFWP%%$RsrEY?clSlkzSny{Fg$e1hMYd%8DO}!@3okylthM>H>_t!T2g@c4O2D#Bv zj2~{hrAIN}cDf_+>kgNDFxC>XkF=-FD|Z(miBkv79%l%zK)%R|LCB`Pu+Tt`Mk=^7 z%hCjmbH=UTcsB?wo^suVm$_rBFtui2;b-{8+*@ym@FON!gji26GJkOnS0L+`2j^#D zqh574iHxwI^NnLF9#~3ZuFB{&2b~_`=k(bZ_72Sgt7w3g0P_P{OhOcdMNO7KlSJf;~oU@2NJJ5ej zR_~kmNJm6#=uGMvzaPA3#Zk!xXQ{CuV%V1wrdC3S5Akia7pDkv@Gt?ff)x>_Izz2E z0^!Ia%YlB+0H9f6{>;bg@QiQh?D57m%Vr5g$FOFRzna|dbFsx{eA$s5FAnMF8nou9 zIMrz#3Nho_`-SF$JG5SGFRC4Pdh<#_fkE%e#>h?8XWhWdBz(FJv?Ru}l#d$>yLSp9 zOBiJjPjBOizoNGqB~LM(p@2AW*6i{sX@s%l6m9z7b3vKA%0#)OOieim=@~4MRMLkv zIuUSHZuTh5!}nsR<@S=GE+|@ysg4dFjNc19n3VZ=B{T4M!Ps{;FA~^lG~qw5 zB;a?^X|KP6yuG4AUGB1U3`U+ID}1kRsIqAc3d`t=ze|0{nV!yNaR|erEFf&bgXM+G ziH`cA%sFKz|6yfTd3D$LDpL3Jmm(JXVbBE*H*AGU1-7J)rv>#~FFb zD7qss&UNVb$=4CTy-5%XBh2*qxwtE5AeB~G8|<#VSL_Qv2v4;ifjQ>`z?)^F2@;&+ zJ~T&rNxlG&mD@hKCX)M`rPe1BcwJUsOJIO9-TdeVK~qCHw>_T0}pmUnv!*s=-oSSmK&5KAB2X zwIBYd>ao&*`SKoWoD_JnYS#ANrC+@MFg4yq`M!T{uuk*%>2~~lDsq3$J@rugi2vtU z^%+Tyl?afA7*PKy4e|Z23#I>HlK~_`|00*k+uIuG{7WaaAy(3?haO|_@*QQe2K>va z%9?>W0Xu+C`E+Fog#pfx{U??QZ1TIj*MB~2wCkcKVY^(jE z31tZgDi+L0VT~4qXwizDWvr~sg`Exb9R5ujtWaFFL}ozrm{baDP`#rz(HJ3U9h9o;qMC$_VK!?$D-!`b{ z6Y^t(%PMLpIN43Je9(qXu8QHkJY4x_#{1P#6yl~!g&+EdaNqk3k#rY!-VSmEk8cvT z`_v2zg&xy@ofNTz z*tGBaR_Xjp%U2m|Pm*mV;S<^s$zF1{Vcj82#Ts8Sd1on7MYio`rViZ)*s`HvnWmn= zAY(~WX8eMk@wE&h1h)awNHLUG;EIawaAXcU-WlLcsYSL7a|5nUP$xv+;aa@=y4~Sd zsKJYhw1;s~fJ)iwypyA7u;Gln9FmxcpwO<3;Kdw97g%?o5{UwbcfzK(6F|wZP<;ik zeOGvvo62~gF8YvS{XBph*D~*mvEObB5r5+cat;yhdq&%Id-(9sz^y7tYBul|P2D~5 z!awVx)s_hMtVA~2G7m=lZo%c(hr?r7=9|&T^{(1}nt3}Cx-u5h ziQuz2X$3fz1o*NV`(h4{w&n(>cRaUk6-%vRAJfOBg%S zkh~*VT~syFVA9oxib*PqPYX~_bNqNCA)Z=@JHe5tzwJ~1Eea0w+LVWeYcA*e5)E#D zRkVyK67Pd`)iI9^8Mld^#I6hOP^irdiJEWTS+yfXp4gWpG&gSURRFK*%n9LyM zSz{02j3FGowsN#r%;dN~(%8;5Pthh(ltJcvjM1Q+POtYX3V)iUl3NArWLpO}8q+CKD}<+xV@r5T*3Vm?BWHQ~3h+Cp{_ZWnHiVf><43Wd8ox z_HRi8{~ne9P|T9lvD7j8kF%AGcv)$HOU>ZsGm1x_Kl8NG7hVc7jBtqH%L1N8(?zuv zOTO^UbvRW_zliPCijL3E$}Y_$#*cm?0vzPjE%Mo~ir;3rAq49b=phd}7vsc22Qnmm zaq8>rA*exFA+CW3#OEBTDnK<#)%rR?P@5N^Q?jLbox2Un=pPl2h{;MoAUn<3reRU& zVZtn+*TEbfr4yN`Vx%?(u;EL%mPgYS>V>QgQ}PZ{7{FOugW>3}BZ~*Hw^DkM98+l$ z_JmG+$3krgI$x+~`z0}N)`|W1D8L!qj(}Z01Dlt&R$}uyNA7A9awgNPSh9{#BY%Kh zWS^%V`5BdjegqyW0=?pn*3_DTl^JsFh|myQO=QM?GYm ziRkvd=wmOpx4VDImtuY|7E1<<`WE;bX`wytXp;I~I3j;v#zusiOsL$#Wm@V-BLai@f$T<-DZL>p+1 zuo1y?kT+0hmW-U5ioz-;sSJ#WQ!zn%$P}cYaC$W&{7|}wF#<yCox`^LVE(V+k20EBdJvJQzPy-#-`q6kT6T{v%%U^9KB88Y{ zVAy5qpu@*KAcQ3=gm4VxP8sep5yNf^=6)G#q?t6puMVlAqLl30I?q~0(!_q>;3;o% zvS!hRr2Rm2R^PzB#NpU9N4TA^?>aSBolAFH7)&o;2(%%d0@_b~fQGBu+f4X%nsz#$ zEmIyt@oINxzsA!>LtR73vAl~XUQe7mdDU3B-jL*a4YPpob^UB8Q*3PA8ktmop@)?y zX9m9$*^Ncs^qLv{v1Qf#rUpHVm+d*qvtvbEi<;`+y*?f9a8SgBJE0%we z8@;k2(Uwx6c-8FCdL@0}S*B+T9o1nO&c}mTLyC(y>>&w1fXuA+FYyoBh_aelz>Hx5 zxb^*gocLSO*Z&qL073lUUM~gmfR+w=*p5RbYc_OTe_ecXa^O&qZpS49CPzwF8G`{? z@}GeuZeIdF9%U18N5w)Ll4%S1Z#o9aOSgB>s}TK5R4g)^E0cFB(75W$EyORT55fY< zvGqK(6for}^-&f?W<@DcGCc}7KZ>XJKP%sTJT)ChR&yL?j0ZdO1TL!CnV${<;m|jh zdTTC2oYEUKsT|QA`~zWB_VSKgMW`2@<$*)2*NA^%FH9EDc-B~JbZ#6l6kH~!Y8%$8KYO)p z?u74RGUOCS5Z(8A_j=+#(>|<=b-|g;B@sl%Kbz7IertuMSosr12^J#g zOUl@xXik$Bm58CG)fOBz(gf{6r(MgI`qta8jPo$o1KYXx9P@^c&|e^(Ill=P`tJ@D zmtS!FB-|G=tL{!b5*86>{=)9ON&}}MyRkZifc(gO*6s!0B?=@%)i|J4t?z3Mc`gQm z>eRaJMiFV^@?z+^=HIG3**M6A_Zr?j7J8g733Ldo9V@>pRqML}WfA9!_s4#)w6ATj%UPL&Ieg>^@3hev_|9Xj22k5trtiPOuNAlH-I!18%&cnA=@t5+~{ z7456tQ`_l9Hha32>34i$c~Y+z2nV=2)BqYn&#!9k+79cs#|X@`OqQhf{lxiYj=@-> zVW?<2)YH@|*RU6qh*KgAF}7KMztPuX4(L55r?wx_bK+7l~u#Gz9#9 zTKXsznTPGugfzM)NpH7%93suVN8eOu+kA4pq{D;Ze;EY_`X~e^T9T5|4P{9;V+1P) zS6W=z>``@oG&$3?rtX^^nA-HcWfX6E44Qjsa9lG&I`1!)5Cx+GXAZ!zZP7or)%>l7 zEfZN3U8N#n24h#QNB;d=q20#kqNNZ~4j zJ0MF0$dcqVfp3qpvFGd|vxz|jjQGQYqT-~Jzqmz*?7N{m_Na_vm8jIRbrd;v;m7I4 zgk(*3K`0hElZI@|P+z6K_sUNk{|wPGYKO(#7;xWBnLXGincGs=JrEdDsJgP(IfcFP zeb4=D8ZxSiza-eqxT*TO9+~Jqo-%cII6iL|Sb&Tx>|13kP>a7t>v>x{$TW?aw6qI# zm0zBjKSU6>rkZ>Nm&(xOTu{2B%$bdY1fwt^5cQ}90_4y+eOC)}Js8eupZpTzd-==_ zeKvbpm&Q1NICL?)l&?z7mNBJ+Oyb3LV1!0_e?GZ(>_5qn~E|m znhlcXZ!(@(lr`mW*Xf}N!7eg#FJh65A1+y!t{*iUCmy7`IVZ) zYU#Hv*{F;jeI9_>v2BSO)Mz^V>(;tSoSF4T;rT=Ld9_6!S;PYy0Z+d2<%nt+ruo}K zQQJGD21hCoLlWwFfEq?e%~T5*WDCIszjtrHaPqxQhjDze%OyU-dYVxE?zr)IP$2X% zHd_Gh7mU}Vk_Fj|CuM48QrYKk#mM;S)*`o_8bp~1!PHow$Fsa*XD^=xL@PiQPO5z4c#pbWV7M#xn(M;Xv8 zT$04*BW$yGg3`NrBNvxMB^I@kAAb>vDKaTWZ2^<}=pQA8@cwRs|FE~W{wpw4C~jH- zM6Wy#tD3K?Ig#p?=6=O-zEp?Q07UK^tDTT5yT_JNcI$;vKVK)F`2~=o$;J`-o;qJI zF1S8}g`d=fpmJ1h8&tmF+K|fO(oSpMx!U4lpK6n4f+YoNtw(AJgl90nd8q@XV=s?ks8->vY7_oG(?7 z-V*F$*lbHIp}#oE7w3+x21uZq1nC|^5-E1Z@8UElds5aOTq)s~I(wh!z%Kr@O|{-X zc=#vOp5)mmS;yo{(3~h&;POts@0Wo#XH*sQBwY=v`EmnewLI57<`k#Ud5C6TyKEll z9ncyeZ;34-fQ@5txF+CF)p(DB$P|k0x=^ArUj9xZdiJ67FN@8NVJS&47ZE2^HiT#N z%HT*Eo{En89op9-fZIX}vxOAs_Qot89;`P9<9PFsKT%5~U$E_mcVEFuIe*?2zFz{V zGSDf%Y18Wqd}lOU1u*{f>ySZ&MyK_`zcu{wT)AaTQ=%4lHu)nq`K||iYl3HV z=`yIC=N-8EcqY||LFveW`@2G$lATf?U5*?H%jQ(zj|9`gSq1w&)OEr71ph=ewJ}5Y z3kl6rLg8(EAs(||z@PGqb%v@A38PjFHAix4^m5mVF_^;er`$UXE24Uf$eb1=c=^BJ z2-@_H#d9`+(xoYVRzR!ES{yWH)oRmb#LSjKa}NVK6=`a?B~(m=eveLkw`d}&f~ z(2z~8xFzy_9uKm_0tv>iZ%dJ-Z;$Y!wPtA6dX%+HV{Y_T8`Z0bFXE>@V>_2B?yd;7kMOl zKLzEG3@okF_a;fbPHwvI5Cr$LZ!bfiw@1QOC7u(|ED3@{J={R(kFA(MS>f&KOQE2Qs*C@?z~*T8|5 zKi@%55mb;$@Q>MRd;cU-7*tjYRoZpyq9?2dY%?6gW@7TkpQZFtgp^HPH$ZFe6zL8) z`%tHqynGNZ#_iA&`?7aq?|wvl9dpfIWmlgqJ;^E*6nENa7jWA1!|Vu$zt_!tkoTPL z&6`Qz{U9#_uIGD6Uk7Khr(e(hIz2Q-ex4ovvnc*?zy9^l!T=aeF`Lr-%VUey*-pPh zN!Bh8z_C13GIwcB3prnFK*(U8fJ0xcP=j=WJ-){?h^}!Zu!)75=(-f=lQ56n`dRfF z4GUnUT|8Exo!<1){@jif?+3$gy9_*}mB9;1zSck62(0U#ya=K`yb0?5?E@Z0p~MV9 z!)Hb5%n@>>MZnrh65Atz!cB%1vlW3pwgJK`_r+Hp5s8to1T7(|?=xeNAiQGTg9USLe2;fr39gca_cHnccl*KY`)A2>|NiTS_TJBLb1NF;-q z6SU{vG;8(C_~UWH)@$95_>4`V3?=bO1scBA^i1X!!x+!2%3DKtDaLodZnuD1g$Jos zwOD!ixUHqdxNQjt=1B0v(XR_LFD8>6#P3rQbLS$k@N5wykhS|Dnn_NjEn)GQ13>Be zUGIj9h39@_g~a{nC50dXvb@6DX^@sXzvJKer@v{WOXP+o7k$O{>^%@j2K9+*2T~WydYil&T+2!a7EYvxUf-Y5kD_GkC5Vt6DKtyHDx@B( z8!_o){nnG~EEnxBKvccjViKA@5>AhM;vr6Ok`Z%uoEw|^aDiJ;T`0`*6NDd5D^cTZzuz@$t?@V--b{yRE%^(&t4I4=b zx6UKl_Q_)#0cbV+!?kYlx)s?97|h*K3MvxlNI^#8wu6!_Go~lJC(e4KIFr@ekcM;i zVQg-srHzZDxrmRwm+ZzkLd)PcfqmeSTLNn#n2U{R=QC54sU$Y+I?2U5>kRS8yy4)2 zuQq2`yfzu+l_@=XN_+E4I|WENmKB<%{O9U+H|2VeF5ACCXU5hSOREuMc);!6Kr&1F zb1>+v=od)&;*ksvevyBULmn3FV4Xro%XXk%KZa``Og#2UV_NMp%~p~7WzA((nNEE# z_)S+}sPOKkF>eLkc+P(LWqL24<2~L(9@XO16y)}?%e1!9p}&=wa$;^#Cu_mV;&jt3 zVj1^cZL5CnrC^pRfVOd5n(3D1&C#MwhNU;lJ5}EWh8?vkQ1ZIy*9zZ?Rx~=yt?5YE zS;CYnHRbaG|9fq*G|aQV^Lq3ky(3Uc890mP_~N}!0vZA5jw0A-=$VI|q=dn%I6^I> z4WjqRiKD6X{*uOoVGs`YHpi`i)%2`Wt168WkH_`H{-b@yYn_4g;_%(>c@>XGZ-Nug z`SB?Yo{jdtS;!QULlxo1>KTmNY_sjhUv}SHT1QUmfTQpGf8;d+4*P)U0MfYjwAPkJ zz^I@nZy_>LqHxeyfPe-BC-y@~4)6~61Rz8xK$rs<0;Dt16X@V$R7;6bZmeZU_v?S+-?<*f|uodD`ZK-K_?k3FrW zfjt2;Ej=wG!!?0P0uT^LfS3@!0=qPgoRQs%4C0*DFb32Ta}J0=2aJp$t^!348+qJP z;ojik+3=W0v(xQ^<>LdQ0i!}8G2u+s%lIWXp1QQDVZdTsI_%GPG%%9uT~s7W*4$U{ zXwt`>mh{)mjKe(K^0}mJ_ps^9|jk|TOpksk97fkAL|O?V?7czx*xH^R?Xxeho#?5_T}@n^kGk_h%~T?PiU~1lV=pa{ zeR)@K$Ciarx{*+JJ3XA)`HB_wIeP`QhQrt3G=U|30#r(-;%b^;ZGW{`2a1>F=JV1? z5JM|pOGW{nmN~1TIvYA$e??87FVYHSBXNo`-|l7A^ST_qXBAVL1gtVHUz$TUu`Baj z3^}Ac&&d?7_Vgt(DoN7Vu_-3ic(qZqKvE-Aa=9Fsmh6A3hCH)(X7vy8IT~w_Mp+ z;DjV9EM0YEjpfniiCmtMr~UjbYIjTY$4UKXV}s^mo*?kacVKJx9Y#y+a)oB+;;)&$ zm~&6DBdg(R{)(BwR-%=`^<(fG2v8U*Ix;SdV32u_8MZ?ub0s#-wO90Be21DT{ox)5 zTGH81Dknr!ysqs7US1%;fc~Z5y(e1}*+d?=EsQJ;Ym~B*yi*^*ML_H6W|Ve4fLRM9 zCM+dXDWL892T#gz`jvwPz~)c^*WVwpAOZf1PEW_oz}U*_U*CUL)+y|j-Qj-hj;^-$ z*8QFJ7myhcg0XH0lKt49KbxKec}crJ`r5Bb<{sjPKymd!QdqGzAeKA@53sC~b|??Jb1SjL!whe) zm9SFUt~u%$!_sY+dXEpDY6(}N;&zl|7xTtvAfXZm>L|!gDGS>9T{(P)NMuAk_0a;*4e4+{j;JyknVgc~_av1$e5jknLS_sNH zh}0+|Q9ww2mCh(d+q8{cy`XxOlW5Y+{#=kb;02@?<38VyLT`O)Vy{d;^V z%lumxxcb8)fR~|>+P3e9eCAAl_+|!eD4lc0_82YWfZ>?%DARjqxs7hQGCOYd5UusH zJ>I~a9a;1{66E`csPTK~tQjg}=ZdA5w(d#jKNTKV@IGs=t|HkQVC1M20q?zFK#Z}& z+jm7U+(#TXSa9j$&c`SOEK=Vd>>0$51twO4{*=vK*qi*>i|W$40$dg%G4M;MM!#ab z>}SDf>Pk~6ELuO%9ijOlNxV~*t6}~l2A>oIaAg)>a`V*|xelZC7Nta2|0qi4TYpc~ zjCCSkyZ0b_YM=>*s6F)WsLX9Q3`t1uJtT*2i;8bD$q0I%QVOEouze{a;@U%g8Tc z9?u6S9#5~IMqcmrGVNs^y=e@tj~}tqrNF1zLql5#`nE3Yn1~3v@^^eOrF^+65niO$9p*X|Snh7@DyZwqfxjri5@6k?l(`&jZha zQeu^+I=nXNrba)oXoT!QE$78RXRlbDQd4954)Slg8WDnizdtn6H3}1MXGi`yi;?jK zE{}j0nKOguTUTa?B>KnhnMC>b@7G%kTyWcnIUOF8(Fe_KM}@Z&&wt6%&pM;;{b`i} z|3}~r|4$?^)p68urgOG1r?UiTHriPO@B}(pDZr0^)xsUWG|c``ASbJu#|6!1=f3%M zFo(;HK=@2M(zxMLM8+1&>rckcnv;HdC?%So_G0FlkII{`yG^uY{Sv#e(wE#0IUC|# zwQ?aFN*syZvuDMsu~1Pc6M*NSdGB;Y~ZNnnbk#(h=w@WGr5 zdBhN~yjgvH8IpF9qV7|co@j|`aW&ghmi+6f0j&AW1zpJmGRv@-J3VObMK{51RAX7h8#;Ea8ZM}bpGXs$6I<@TZ*eBz*N3fi8Pm*U zQPPos@7yGtCB|O-b+6~l<|_Q@>PaGw?`6xnN=?+1SCLju^RM+loC=0aY8XA@;R(y5 zdHjPbc8p~eVlk9yR=)oq;=VGd&TZKif?JT_?(P=c-Q7uoySux)ySuwfaCZX1oj`!# z8tg5|K4%}XFY=j3x$lX*x8-Krl-p9% z_4l1g(ibv($H*A##Brh?qp@bG*P{)#bYpXLNe(MMgF9 z6BjChMAk zYOX?m+s6#oeP6_%nXGT^CS2)7@Ut0iy!oJT0imUZBJmP_UhLa~C!Aq7yO|nIT8GgQ zG;+{QQNbdlBLmwFWqfR^7zrC%E!4_>+82u)9@GXk$CG<@#KqW3vGF;hWu*@aS!r9T zp$|@q=T=249`U9PvF#)BLjq$CsW@iszSOU{>8j7s^ z>LPH_QMoxBlSEhDl;+Ua)WTVhN5cz+Zz7;f|My<@we#zjk@>BZgbWOI9L(*1W#A^e z-}=(Sf^Xbs=885Sfi?3HLcGn5b)g?f4h@hR6d5vP4s>!dR@(A$Hd~^5Tt*#bng=Co z-$=-tAIMD*xd@~d2_G(G$?%A55zvkr9*eIeu=tKH-KsR*)mKqqq85EMp$Z@tlCN!- z*7MPpp7%oXnlv~o!&(t7IwPJ$BSc&zTn`&({2_?y73-TN^`YD@W_&if;dlcJLGp8R zSv4_wVg)v(y7+;iQjQ|(F)WaX$uf?X96PiCTc#em39CLsxe~u?X zW@lxp7FdBeA23*uRCZ);ecz4}*w@gV^qH-(TBQKfN)6iAGg({4cK86k_=QIB@9+Gz z{QJMSa}~e~0j#$CgW5znTpGYxjUaS#hvKFb?fZdB_pA~!ch91=V%q-QjC4ux^Qy{2 zaZ!p6?qpu4uCR4CY8z-uMmGAOxU_GHLg6*-(4h>qEsIF4l{6p)VtAOG*U&LMxPl26 z2uP5oZdhN`M;S|-kYnFd%W0_@@?{{P!96@sHB$kpeYOzf%?Qb{*V%4H)c+0^LyGr? z(U@V(sCtwx-vB+#q!jl6>IGL0Q4D|01f2Zzx2MMk{OuoZ^*=RU)!4xDRm1UizJPB&{_Uw= zTMqvhswZQjXZ8YkUT?!=oD;Bq83A-^t;iZGf-aggMvQ;kdnXW@#!!#uOg1rsPySfu z4Oq#{aeGQcHU#|;-l=~Q(1~E6R5wfz2Ias|fAsl#RMd9$IKip@oJr>@R&6sIodX;j zEJ`u(i-(3M*}9)js}W@w(_)JyA~>8b%1Mfx0Iu%$lBr*rlN8`F@7_#;QD6Cs$KrCa z?GU9cyiUk_vWK6?0uFoi+XLeR{`SAMO$gwH02vGe{a^MpY81MM4_5f*E|l7Vi5Fi0 zrWK+7wir3dM(WU*lPSJLqtB~}C|6l%73^62IE197DBMOAf&*%1iOqIoAJ?0*oMM#* zk^OslLa0xSa`)0%;Y~tXomug6$LH#j;e_&!8;uF%3o*fFqjjOS36!)%BsZzhPc?Do zi_geh{RC>Jq9ai_e0_R?pYXWJdu)&@QKtenbmm>`kS`37qey!L@Ag3&HQr-`cjicm zGrqlD3o>f%LV0;{d24hcFDxytzqO%+e<=eQD*zpf5x^_|VL%fUx&cJuupNg~&1rD3 z0+Z5h1;z@W_`X@H&+Ce+=O{LW>Mztb=?;C4iscr4>pQ;N&Db}1gG-Sp&>4)=Q)k>y zM;l%v!)7oZ&d@+-u`3X0rsF7|NLOxtZH#Sc^xRi5jYxSa?dwsaG5i&g&9VPxA9TGv z@wNd`0|mOQ=@Z`m3bfI)>gBD!C(wmnk~t5d1UgV~EpZ*;*X9~)IQ6>8nk|K}Rzr$3 zcy1E1)w8P`^Na5nj0OgAvtVN=;z|M0kSQ$SPWlDHw?Bm2QEtVvhy!R)bEj!n&eG<# z$D^!vV)?jbf4D^>V0Zm^H-c8~jXAfUR=oK@T}e0&pRpgqIE2>N+7P%9kyi>Hx3FvD zc(TdkCGtI68UhnqneUv|gdYq%q;X#~A@UP4N^2pbw%g*lPD>`vECiqS4HHK0w$FT8 zE}EF@8f$6ZP{kZMY%#~7bkxP#Cs9OoE%iFitGyZ!i0=V}l~9WjBmq>-Y7xV3>qac7 ziGks>N{zr+-%rE(?F%?90@6s8ocG1{j>{*IX|J4g-poQtFRT#!Y>E=&5eWlI+AhEw zdHZO^27lD`^lHy={W{DV017bm+c_D^zf=NM6LWJxb1OT87t{OthhI9ZCe>FUgM1t7;6-{0q`Ar%5VbTC=LRvHG5Y9%M|hfSisK! z=bx>nwkYwWz+lMOj6NKpGe~iYC_PMew&`}~VT!#>3Kw1B$bUN2WK@%Kf54ZY1Ac#R ztMUKxY|5{ji2i)!ub?UL#4QwevleaRO$e^k7jl8%K@Mmc9nGOar0q5sY-FzDB+|$G ztCNp@Tj3<#P;}1Q#qo{C1uDRLwXCf*z5c4jBh&Gd_0}vDk}jtSVZ)AJHg3=wrxTEW zfZ`Tyv8eBen;9Qg#|GqogGj?Ec_wj(Fx=G73aHv%6NSYsI@GU8y&r29B;zCJ^eg1! zkERUsNb1c1=JNut)IM_`D&bRI<1Na`8OyTB@KX*2qHJ!V3G@$Z_Gn|0$^Z~xVpSSN)i*l z%!@%fH6eISp>H{MCbhrEQ8F@~;_ODTM9xEOSMS8N$592691Q6? z>^i6)f;sG*Tso8(52WV<#gi)XIDDIK8Y%F1^Y3qQw`B^*sk zJ5$M)*5!kuWm6)Rg*2(sX;j8sWLjFTD4Wnyh&ASv52ttV;HT;+IAuxh`Pqa(TA`cf z3C+ULBn}Mez;1Ub-`WolK{0U8%9@PfFlo?Mr*Bl7U)Lu(G;fYK0VMEyPl^4PdIFfL z7yhLt2@2A(+b{Hjs<7!=PQ~ws`1< zWTApd!(z?XY+l55q$H+kNXnD%x|3&JZGhAQIpL%pJ}4fHVdP#~+=&Gk*UV*eu4Pr+<9V#Om2&z7xoq03JmX@80Bj<4TVhr(Um zLJ)>oIfTLar*y#HGFVT6QRv;VjOB2H>Fv!f?arwXn!xo2#T>KH@!h4qqbMaTE|75; z2U@Du?zdU;KiZR)7r#4jhVVL1HO!;BPQ>9k$yiJ)?r5XcC>@r%9{ zruAcYv$&YXGKQ4Za$AmKmByP{bpB}RBPHwyex1fo+INj3z8k85g``_H-^Q8kAE``G zh7!CTMJKi61*_dNC?Z&YCg5lj?AcMHU9!cWiHz_ zSb3XDeSX%MEgHlqYsdK9E%U%BTIPk7N?ZJa&sl7^=N%!cW2D>1_KRsd#?F>75S8W> zI=*DLH*vZ6V)Y6#61Sg#sZRcJO?`m;i=IOFtQd1^~;;K6PIdPHdF>peyPa{tB%lCTm{s7x>0wW-bx6 z2XG>$fgS!#z!^1!N{&UUF0sE;lW}gJPxGpF=Y!Lp+-fz6V?QSk8>SuzxCNZ*d~vrM zBLT=%M;%W)!pT&x=~cKMTjz>j*&rW&F3ne&j_OqeZh z>B2b^Efry&B7B~+;Yq?y-s2HQu=nYDqyCZVo&3U505Sq?T|skSjLaAC5YWeMxHt;ZXTXn94_B#|24 zVKSeCfH|B&DnqfH$4DQ&rnLk%fWG7b&i~=J=V$)QoBwwR{>$k8Cj#ex(E#CpMc|MC z1Rne^2t3yq)`s($!TQ(Ww~@)foGI*mI99iSwLS*P;7TE-;4)JSu1v`vJOHbx-r)LR)6Fl(Mo>E{c3=yf_26e}}|F6{!YxooyBXfFBLxa1CULf0fHg@&i{5{E2F!HP+@C;{t*) z{2HLx`R!k~1I`}(Tj>z}rF34RPk>sy#+|SB@c(_-`EV}z8hN6WwwSiOy45~~lmc(S z=NGn%=_rP)S*XFW8BU z-Wm$Hj+g8+%nU_;IA`hiY_UEL+W`rfuAKmyRf}B4*jtm*pDL>CVcXJ&Wob1R2iI#K z&2^dbqUdg0BzBL)ga>_#Pz(&snqebk0&JgZ>ZER66;C09@aqY&-IVM=5NuB18qXx= zn(GeUW3bfMnJ5&!}{iGxCQx~eNNDv3GeWC;HckS>FdGb>c*gbdHwu| zma8xK>;2pN{cCYZ>)7iV8`#O|*aL#lUzyzm`O%j`Py0R9b+XvdLCYm@E;c2KgpaSQ z))*;zI-4yvXzA_ElDM~bDUW+i2WMsmh7ma{`nz(QFwRJmQW}ktSyny9;rbebAS$VC zktALddE$5tjYhA&h+z(;;Ty6AF)E7dq>Ublez^YnZKC?bF%oq}7TF=ftYaouD!E~? z*gJT~Z`ULmkIQ*?q3(PccF^T^{K)h`UDS4l);Y$do4BO&VtX3oV|J*u6T^1ayO~kz zL9=`Oy!z@j)?oW$?|X#EA;FFNL(e%NZZGYy6<5~p6j|Oh7DGb|6iv;oXa*w>xFGbz z5>m$pq?Ibq?yaSIE1+Mh5VPuc-Kp+$?4EiEIVCCJQqmZyWFZPIUD_Xj=R2x|w$6CH zZ3L?dV}a5PftNM6#OY3fso}B9iIbv)#^hCOvt$u-u~-qd(Ph$yksXLr2!-;cY^cW6 zO7hT%Du7t?NO9sNwbon>d{p;x&*!{-?0S3jTI>c|#R9biT%O2pVe((+2>(H;CTZ{o zUWw{>3&1P>_imvy1ubaVK0*Lofxysb8vrJ|d2HLF7;?4>1`P%SpozL(PEn6o#E|rT z_u+IvUcz7+n#5y3s3M`}F;JC!v^!B&`I~8MqU|#kTAW46+6f)CLc$PW7R0>Ytad0) zWOhJ@1eza^M8Pe&CviqI?B34=t2!MPg~L6WA9iQCNOlZT@#d=sFYF4(XOxJm8TZ9( zW&+yx-B^kYfnZ13r(8DU(kk5aJgkHG1zbY5ba7uYr7sI*{{B_t1OCN-XN&)tB>Vql zqyED{aq9{rdjLLkAMpG8qx?(v!oQSR{*eXxg+8O$U-J6G_w4=gQ@3v*DZr2+bx;ut zaL0g1BQ1nk!w{SX#k)yCzdVmWTXB`dHio-#Oo>M~(8^6sTm#wfYU3;kq1P@KDZ!?P zqAYhEuBlpf6UbYve_R;DsF(eQmRp}t;C!a;FfZYbG zw0@nOqMCN*c)3mI-`?h5JDq>n=oeA^A%^j{-F(OaH#Zc=vE%K0L?u}g)XZYS)KxZR zd9x{nDY=LzmTGc@YFQ_l7pt-QGMoe4IQzsy=!ZiT0L}sB_(t0sA!Eii6-p76c`&TO z(i#P!WopAKa^1X^Dj4gY&{ zruP=Wo_=cnPb1#}iqjJc#Gv6#gV1jC4Vc(~=T3=Wv z*o$&t`sKWULR)ZYh9GsNuv`5_@VaupqioX=||uhW887hfqS z@q10;w*hk7{H+STuCM$rxyd>j*xH)t19pT-8`v9L>Dx&I%7NmRj#g#{iVgq{%0JZV zAHYsHsrozEf<15uHG*xK$h$S0GWmV78L;mYi0&W!DIcwWv2L0e02oZ|tSo85`Juh( zVY{AY>dJ2(yWfkYD3diNR9p}~X$P#nA!zZr8tGS3!y!!X|CY#=)&qo=^mAG)6|M5~ z+R7v*BD`rTD{YSqzd4zhv(qlYfp6aFcy^t;J>#7{Qlnby;9AZ zT3OrMnOInx8_+3R>geeiSic6GG7c8H2DY+>fCPxF^-D*J-9Pt({kpZ-8dDGkSU@5e z8WB;s zKiA1|pRyMu1j-uYpJo-cFVhogY@?}UY6Z2^-}JX8>+}vdB=)tn=#+?Bp|^dBd*_KK zO=^_Uy3=cI_dWMmGD8?&eUE5&p^fH?L>(5o-d?mGHdc`r~U1h|f!R%LZl>%oeWgP7-pZi&8 ztLBgQ6`vOxWL5eHFK#t5wIBB7nj1gYIvuF#kDAb!{^+AqC3|9Pjo&13EflXda{Hvb zF3VY_(wIZKkoK^ju|2i}hKe9O0^XDEI?|MU6gmF>1zHCyBqFZ@G}-;PCg@jS`KQ>V z0c}7g0JY|~HFB^3q?GIc@y1_?FCto25`+P{@8q5$kh?+&jY}0w9>%xdZ=ZX-v(lta ze8`Q0X6D4Q)l2PE|E+lP`?$N9?8^@g{u%H+g)oVU!ZEUVV4Mze4oG^3WL7jL3~Re3 zjiDHa`u+O%dgh9vGS0i(Zp~^RB2$0D?33?c4t#tp0z$}TCnu;TXTa3ljt{u11XE-l z@s!^&e{%O2;I_0}x3!ab%xg?FIpHD3{L0gH^R5%K^kNH{TqUl(y?Cz^KR;reO%Q=* zI5qhKUfGT{Hh*8P(%lxWH3rgDpl5!t29X3c+N$?TAM4YeC>nWHjks@|tXzAMVKArL z2v!2oQp@eDmDv2`fqM;*Yw2(0N&xs5bpK){UitxSEp^Q4WOYpq^!^}Z)|O>>>qif} zaseHs^BqENuyU#Z9KE zIQs9{Ew)}^QI8Q;Qz_tB$p3c-7c_ri3HZfC?Gg8~T?{#3{f6pz8+8~d_lzGQH#kNp z0LavxI?ud+n$-d#c=NMclOq;XD>rpf(|XHZ<05fLrCeW$_mA4`*Cd zf5vK3O(es>g3Wi+!!R)!7a6$+!{#xykSef`2n9lB=sQ-Wn}Z-gB@2n@&`Su4HpV|t zm73Pg)Nz&Jc?zB4hOIgLG&k%aXqT-%f+yS0jFH^>jCTzZOB_MZVtq{+6D=66$%j@1 z!#gITwA<7p%8zPH!&#MPWePn*xA&b_tcfD6Dl zBU#leD?0?D&3^Q9cUrSU^U*B|?pvHzO{o5{dHNM7NO0&JX$@u${L>==#NS}0`oWb91tSQ;}e=6n!P^29yxlV?}0 z-Iw^MGb5l)#$9-d{NZ^OmfoVbXnk{RyQSTy)Xqoy0<76}4`sIHb8x3^pCkuS&q29e zMNeLV%E_jpXCUB0yMG(M5&xYwD;OA>1JoJd>0bR?hl=D&1ApfQRUfI8i(~Ng)_&SwQ`^u$C{UU@i_0do#7{T znWi}aBW#B`|UI_xZn}T!F43+%anoC-s zOvkc2O&OYlJ1Z*VH?S7L&TvO=o~i?8dnKD0GqHF-IjVNIBBX9uS3lNj2NmU8wWkrK zyib5sQV+WieDIPIbORf&`~>cce<}r&8wBP&ro%UcPI@6)XP5_RY*h9&7*dLeaCaU& zBu0H%#%9tg_OfEz{`9jUIc~@6XC}Jk zoT$=&*m85$YP4>Nf#<}$elcud!*8YgPw7hL?FwzAmB zUD98#P&O*@ajh8|k`3#*xMhBxde^tEqR`ZqzGddU%BU(0nqyF^*d+M*pww`5&WCc@O~1k4M?YB!q{t*dVRYnSFi3^=SsJBAA_2qjSNZ0H1 zJ0w`{W(oXvBs#5$f>~FFf~kpz2(zQ4jEdqGAD&!YIiC3gcZ}skRq4qk48J#ok8k4& zQQPP1;{>vi`LeS0%oF*{L634tjGH>k%_~(4vWNpMtx%p?1>l;mo*6V^_}B_=`W2fi z?$Y$AiVWMc+hVXFpoZ8|5avvxA6J1%R5s}^NlK^1fMyeXT1AId(h+xzmq))bCfYRDN|Q3?vF zm|54MlC*54{g_;*wo4WMOA7;Le8EBtehs}@0_sD9It!Os+IM+3=>Z_puGm>MbE@x= zoeLy+Il`@s!|!K)#8&xhq;?G?_Q*-joz)8|qn#6qs<}l!HMP$kDLZkCwp` zf6~*(XOPnmMzzCA;h(I~xP3#4C~lb|KpQ6M?j4kCk@u2O4d2r72pdE|WtAHs!GKXV zetSd0F8rZhAwZd*(fKkc(v3j*Faym*OE(%DzkjWW;O?Q{^QVs0HwSjdY)U`CSjN%E z-kjX{YTp1A<=}S9z8o`~5}bJ%j_kGZkF=09cj+HDZ6k+ripm)^;Vc-J>D=p5+wty3 zvIOg7_9!wcP*hrsjOQ&Y!7A@rU;-`X%SzA1?_67uPOU&DiljEu3X`$?D<})U!Y?I$ zgv+s&a?`vA6YUs}7!}|#XHg`SbtXQYak8><`1}=alcYifsO*E(+56s`hDT|lxQ#&E zXuoLe?ktFb3+&MB;+j-)#1Pa9T8qK=*m9;eq|S#AuZXV3V=PPv@FZ)Xei!%s?UMv7 z@dm`|zn)}*;Q$@TLenHHPjF1Ms_zPy3=(0SHeucuz<@Bj?yH@#iMa~b;ap~yzJ%&c zXM7feYj)@>7){v#qh^yABuH+cw+S3A2;hYS3U)b6cB6p-i}u2j_2NTI9iIpo5%+TD z9K!p&9#z-^;ocgIei?MPO^kPQ>^eJ*qeIGhXdOp09T72Oyh3XNP0LVMtUjm5RN%-} zwkbQNvnmoBC_=t6QcNSZ($i62a1GLZCw7l$LvpeArh%8(WY-dJA(BhP37my737N_; zTdl$835#5bVwImt$&;ofInPJEMQy4`GX$@oUCp05UYzS)QR^hm&lS*_xAhtiT~dhq zjD;*C?2C|rIoDD;QwbvT0Wx6YOc~?xNJGTdoYVp6DeieDeKj8kVd0)W5!42m0XEI} z`y`=h1i*SFNi7fy@O%jyYh(^|O~<2Z$ie&po1`_s#NwL!aW_Z#-uNz8($}ot0Qvq7 zC{@p=@$sN=t>9e=G-{^$K)DyEcvs<%_r+y>+_$7!?kzoC&(sQhU!riE%Ow0nzIojp zzQ=0Pw($v()u%EHx;=`$9Lw!*DL~;1JkW^urQ5(pYcFzp--K}Q-0m266Y=>a0(*VtU0k4nmtfSXfGug$7A-ZJtS zJidyB5QOAr6G1;wI_ym?3TdYoBQJh}j-Y{Y=*V?`@ScjN)U5i1_=!w3+GHMEuPniT zUL&Fh=t(Gt+s(|197GzC;IQPaS}EV`*o9qCWG_O7&jz6-E-Bv+hS?98^zvqG8K`dD zfs&ySXRZm-)wyF%&=gu&;P&+}c`&m3(lE7t=_9O;h7~NHNp$B6AfwfIj_kB6h;&x& zLkXRbus!f-Zo-LQUA7wdJaFN@9shJxyn=s`XKSk=Ef_$azu(cu`gh>;SNiNVa|U>z zuQ^Bnfg~Wi1_;Go1?>?l`KvFFy`NgU}uwMmxq@ym53EI2!VZ>m1Aa}i6qKWQMncosTbJo%Uh4UcR#Q(=IQ$GPa9ewD~~a? zMVB|+B#?+O26QImU?)4_MGw<7rv)ED^IAwIF%o;Tpn-I2xf#1BpqJwze)QEOTLsN` zQ(YCseG1;f^=pOFdcLTF1}surE)Rpm-MjLtlc&ooQEi;mb2;M4V3G5qNI1xdljGz4 zq;>JmCg}k{B|cWZHqx=YvFqZW^#xX+JD@z#AxSShH0ng`K<4WVZ;-n%F3$jCm(zsw zyxrAn@dnSgCgK4gJ^9~eR(|#P{I$ORvU&~5@_<1_1kcH;DZw0Q{j~+NM*c<=mHpId zgL0 zRg~zlA}Mty7vfu;n~hZ#uoN>=riSpKc{w7p(1QL|YD#Q58y#mUw4vHYn*q``Fg@QM z^{(C044+{WlKf%9JmtqCQ$`Q9Rt$CZD6uN1rUG%|81|hrj|V6$3*jzV020pBN^^^3 z@Fa;5CK=;!_3V=+CX*7Px87t^&zhT4PPdKAP(TZB|8ExVJ^^{QZ5egYEjo$Y`q zqKx%6VUAW#EAsQndHs|R2;JCoqVlh((HAXU=aVV;@9-!bizb*bkuVp+L{;sSt#MMY z=6T->^l-QsH)`HOdBQe6jYO&TH8^%qRvUuBeL>{`+Jl3zpm)CrpJNH`D;r&uw=?`s z(jw%10DaVvPK^<9ap|3f`njdE<7Y$5&ze@v)vA*Lkh~U)`kqFkMrfM_?@f};kKxT~ zU&W=6EJ<_7affenob5z7TqM`>a{DS6g$<~mye>j4tC34K@j34m@>V-^NZXq?HI7^I z-Wlg%U|`BB27}QQeqQAagP0&(OM6|t> z--U170|p(lLCpFAA?v%URX9tAX7TuDIjF03ah*@yal3XNmV9o5ksIIqNRR#G`ei6M z;+K-?nR`&nKS@*-+ey521x}UWG>C;aje|NPfE|{(69+~jdPsCAMKJhA?j49zM;M*#_YE_i61{ZtuTJSOH9?oxQDt9$-@JH>NZoh9AJi3mb6qh{A&kwF?j1 z91imywAksL3yJ18p%5&noJXhh#)D9f5bTT_9$s$Ida@&^NCFARz5QV}REcoUugn~f z;v2zW5u(S^xqf6+hInj}nC1TUno6odL7wRg36E_R9XcIpDgfS?Bx#)PZP>X@1LDEWSxy+71*o}B zNd=Dh(9cLn!_nw#g%etzDp+A^*`(KLAMO{Mw5zKs=JfM6wmB8ra_G=!Q|TxQ_00-!HnF{946+0yI8x0gx-}|N9(AHRZ7ppSj7lx)~jbPYWdo1=Gea14a0m^qF3q24kpka%Jf_FY9g zqKT)*!thGQCUd=e?!0jN0K=xStpFKCDb@jpI#II!#@A$;mE7KgHz>;ps9ITfk~xS@ zBg7DHojnsa@kD2GCsNd`fsfZazI~a#pR(RFahf;ClxRod4E)JEkk_ZKHCbqhp5A}y zu|I3sFu-s&v%!6_F}4o8v~gOBS$i{FAMfs>FEuJ^%e4q|3TryStP-Z}9-6^P0kb$s z?mKt1oQh(=F_$|_)msbJljS8!=Fn4&dy`cmm)fo{c4es&yQ*QUnBLg;kFFuS^R9Z_ zgGH8rkj0mnwsPOY;;mM>+19S*FuiiKQ!HE!RXYLs4Mg@Lf{RiAl04=<^Ce!&eA zp1k1Z#Il@7*VJG~RISH{m7<6{d_zPCMq&2FCf$H_c@4v43jJ~J4D{?_%Fn4RQdUa$ z`uo=yO;486tE&&iw~6jfD@5)awc8?iIW5Ga# zqR_V5SE`Sho^!&)k%^PoM1_+Ep+et_uwKR6O4s`3`F!-zs}#Kz*#OxA!Q^0O3YeRB z7;JcS1P*J~yP+8VPRlk6D{L{y=n691fgxM2Db~Mu;NoLqpYTz4C%5w5em>1Ih{Y%K z#NOg&N*9ze9vQ0ah0Z+q!7_+L?FHb-`Z9S%`a%)zZjc9skEcI}S3wC0-!yMr1`9z) ziRBOO%5|QQ)9b%spqC1p3w@XSgJF@<)+MWFcg%?Aj6yEKl{w=l^|fN@I!py2i(u!) zbO>8waR9qkPu4f|_Hjgd(2E~VfaT;c9fKMCXM>KD7jY*}4g8l0wQjZVI5az&zxzH7 z)`%ou!W0eoESH>rZWD4|uLgqgm@T(7Q}Ut&)ftXu|J0jHQ?I zkj%3@P|&`SFHeQd!!`-1Pa?PuwzD|6_SNEcX`RVxe`be5vM}muZ^vf*XyTTku>NdX$>_L-9 zj8}e=&9}QNDFwI&JsOB3wrGQ|ZMmSgMBffJNR0U9{0KIAww5im-hC58Q||NXcs7*i zUk{k29M%pMzg7yjL)(_gTcZ3K=R?H8xh05^WLk$D@#u+=qFk=eWCN4l8Iyc3>8r*77u2_HTiB{E-FX|LQ+Ct(eW798&RCQA$Tz9Pgay%kLv{~oNm#>)^YQ`p{){p= z#bW|EDtrwoy$D864#?93=Dq?5m%apr%mqYeUy4!dtpj4*$SNkA16#^<9w5Y6Pu5E; z*$YTBCD%Y5Ccfc|uGRJMYmbehs5Z_H@UT{q^GM)M$0^b3JQPaCf2-=TI9Emlt_>|u z^%MhxwzQHnopt}_%HCzhoS8;YfCU55);X>Rm)xRQJ4hC#eJdib&>yvu zKo9R-HA%YxYIY+Uw1Sh&A%pDp?s~J~Xd0)o*GsJPHP7f74-o78zRLNZvEx7FEoEZ& zYkEH+hQSKZbrW#&5K09TlB>2#AvhpWkHaB?v0_aOZr6AOBT#z2Zbm|`HU&Mmz3R5^ zHm|;jtshqXKCy#CBchDhr2Z0D;_J02@f!K$X$FwD!vQgdPLY`Dt$tB)g=sWe&c}X2 zVOZ%CEw%O;)JY$#Mh4~#NP%D~!nD|)Z5bDaNgX&e7iFUhCFUiB!bNnhaNv&v#_^yT zmsSG-tFZP%9eE*GXnsj))HyL4$AtUwu>M9*AZ%%6oSvCqZ^*-(Z+R)fGs2hNaK=C2 znkIPa6+c#&!wPFP_}QydZ<;(N)1=C@#?I~?9Rw|NK5W4hsU!ElIUk&W_NKwrJl3&KKp)wHX7wvM*@z@cl{~9(AuDUk5ye_fJ+52BamNnb3~_U$H9Y^ z1WUZ5=AJApy}PMm&aE>B66NM?T%odZvT^ARt?m%1pVsUHp-x0SsMRsllu zz`KcUvN=E0VyOKQ9V9KK_6ODa3NFK;PKZj-4H;1ajW-BTl3{j@qG`djNe5ljuxC|y zRo=Og5A)&UWH>lwPQb56sOR~pqEf9=o?#sZb1Pg|qNm!^D6|3c3dpM$C`q&qV4({z)F?zqZ~A;W z&~I2BY_LZ=#lz&DaRwc63o3@T*m$bkbbI^J=nxtc2*@P!=&Qs_T@vr44WJs^H#Ze6 zYq~t1#zLkJT)cP?)>}$#D4K6SgYTNxe5l7K<>XZR(}AB4m$WC!q( z%g6cY&973amxMvw4g+f21eo@IG{GQZ^nvF{Z!$+X(&I>TOUI! z3)Fm)ZzrE1LaEQqGV_h*kp9}PZdN@)%nf&^}tSLXn*^_#7G^d>uwou?1@-glx4r3TB6n zQDMD+nB8TT`T7>J7&|g9-_%zyisQTP^oQckBOuRv)*%_n$Y?IDuCN4f&sLx!q&*06 z-Jqja*JK7;t)d9HBJK2Vi z=xNl=s3YI`)xf$<2ggUx8hu`|YC_Ezm7(R`=PN8A+rB*$)$Jdd^3|y44X9*z|0UZ2 z*Onr2+ErBfu_6JqB)|?~A%%e+L6X?9+Hf8Gl=C(M=#v5rEnnp6PDDlSo74|mrb73+ zZs~3xQCk|3&u8Drd!w!DoCp zaju8{$Y5UR2*NG zbWHrUB1K#<#1RDvk&_T4D_P3VZU+oP=(LbeIo|-$eV;=Xu+WJb+-+#{3wYPkLEGnp zbt$GU%5Z`26PGubFA!u8U#3zVqLPAKB~0#aD=`76SWOL5yfo*ITS0QxLJ zdsX+d3s2X|RzL^DzvCll1Y8WzMXf6RM|=HCWaAM5pB}5vr-2UO+cuI;Z{jiUPY3o| zP5I1(lVU1mjx6V!mKm?I6G(j~-5a%#<^ZE=-t5#HF-Kj!Bsn|}sI917yeySJ)G~Z3 z2fEX9spE!}Eut-QaRvfO$E2;OzwBcf>M;{wmWMJ(ay4uyEWabPPty^GSiMpqVxmC( zLiP=?-$18iTp_Sw584a_ScZ8&%kr z@;qT5rUGj*Xj8`5wEmEfrcuo?d>W3(ROT(|n=+?BVQG+}z z{oE)e8p+IT6ig(5`Xf9t8J`Kg0diq-$iytV?uu*bo__EwBg?|#>O2Icqilv8OT7*j zlUk<>a$OH?8HslUa$X8WHoe$KIjDP$@-5a9s2PH*jB|UFGrfLpX7OQy9N4Mpr|v60 z<}7CB`fXYIOs(3laTt?_5_&c!C1LXc^mOO8xoK~->B57ABQDi{oDSJK*Fbebhm;m_ zk5*j{Hel$i3HuE!5WpYYeO%HbF9hrqyGPf*^lb$@uE^;k+hn z0ur@@GTuT+Ik$4+C-@qO-e@mZ#3am&`~jT);>tYzu3uHnha^rSu*IYa_p41&@Frlh zuSdX+m~iCMpWx!%K7LUp#>9poLH9nreaamg6P3-<#mA#` z)c9pST6t*mQ30ld^|zbw{<8&5+}s?nImG(81S#bB|0o z8!+QHk)yaw5FJfW-?l}GR#0j|tqmFPezX4+f2c+$GRgb-<|upt)rO270j=$k!(Hn2A zTVIjvZ%uEo*>k<~7km|T;^8R|PVaxBWNx0BY!7=L;?-QOLAOa`7Vaj0lWdbJc)Caw z!FgAU{Jva8_Q7`UqKSaU3F6E$PDiqlMESYO)saSDJLD7D(-l_R_znoQH;OJJANrE) z9DaKBCwj^-iVKz1S3@id%0l_lk^jG0XZ5G+ld<|oeDJ3*U*oZaxXG7zY~aKLx~zyW z=OrMsND`lAjR>cxxevf&>p?z)FdzuC!uRn*(@gC zGQsW+{Go;;R{C>-JRm)PI&Yo!F<@ErI|X5j?pkkLN~`ihZlTdK@))&km#hE{mlRqi z_I5|v*@_s0Pt}_ZT@w}}vMcB@21c=vvz&%Yg?D--R1RP~VAp({(PH zZtFgHuNg)_G3* z#o9}W&I42YC3bk@M;Fid*2BKJ?25p2usNS^n;YtRX+1c<3ZA{P4d-8NC0YOs?!|AR z3&DRF++VjQWMHRfYhwM6OW=gXz)Y{b$f zAkR*&YWd1m6^SRgCfN{I-?M^>hNQMcWPVdNs3Hy^dfF%_zh4YR z{o(TznyaoGqAa@iMWjr?yE#Fy45BvMjMN#0DZ~`lV-s}bp8H#y>Cd_#gL~{Vn#GGb z8Qd}6(f7TrLg3r!=7S2zXHFB)xfzQ%1kbr4XXyorr-?&kdipMX8;AKAt_&w=NtzD|S|FJ6XYsZQHhO z+jdrL+qP}nHook=@44r@?>%?_=<4dO>Z#7>l7YW;J|7ZHA)^@#Iy$Cqp_7F71g0A;@0vhND@`1%cPDBLFjY}Sg;hg$s zBHb$-LW5v;id?{T4Ngr9Njy$(NGdFJCCjLp#x%@MjRKG{lp$ymB5Z$s z8d4#cs*o6HVV~SvJGrP66FcudFG7-kYWf1sN2f151*oQuV2px_?-yiXHCei@FU=Hf zX9O4;?o{V`h9+z!cvGLbL&WB%;zi%XWA!iBaaUeC{`KcBk}V1fkxho0s1AIm=Db2e z4Tb%LI#2{2f1$LO;G|4q(&twm1CnB10Jf$^y+-JZ*PsLyodM94m8TL{?hGO?M-GH@ zc1EU@3<(=WGJiQgXrW74kwFln(-O)6QEXK4#Z5UWr*a;fky0XpnnzR&4KpFb)l6WU z)~bk)IW?JwO19c(DQun=?47J4=BkqDJTOwpbmj7%3t-BTnTwH9!4uuzEuK`OcBM_> zUXPUzYnWwtrHJFZEk$NV0}sDaz8+KNu~-6^T}7ty52h>6hhhfzoLKy|cwI_w<{-sR zpN`RMYbnCquuUsLyI4ouAo-Qo=TqvyfdlId!u>wwc}htav8*Uf9s)%0Mb`+cQK%X$ z0DZFq)aJpI#YNNvV^&<){RfF~MY@7>LzhNNofJ)$-RU$vXonP`k0`qWJ z&7s=?4vVI^Y#ymVfK@^)b;hFJx@G)jcvZM!dgl}-EZ_podj)eNi&<8<=bs1}_uwxs zXD^bT2?cCe7&rJWymQyGvHS#n%^o(a|K2wrhOg8n{^_`SMBq~_Aec4KY2Bglx&pg3 zQHk=)?U(Q+eBCyauqKp-k>f)gxo$1uejMcnm6AdH#&FtdVQi#DnQtgZ9~Er~F=b5? zB^8lF`RbLxe{dtWaB$IE|QL4 znGAZU#gZ0u)=4h)us%Ok&Q8JU4mw5v2&qbf%QCaHWUVUv3LA!&rWalYeLWv_R$D8J zGHY;r-D^(Kr_J$MBHJ8-4sbQ#_e4o7H#uUMmA(1uAkNR=%h*ooy}0v0MHj(^rXnph z>7OeZybztY>ypWD4sqrvJX$bja#t2s(V?k+u&)7WeXOq|T)&S+RU|rMx19-nLL6b0 zO)a}T*bKT27!^F!R8BrDuCN5$fkLg8a(o0HP({AS3Eb5s6Q|gh^zXqzZD~}d*C=eg zdP{5NMR5ayLt)0m(_{atm$*`s-Pnf=a;RW!enBEl7Lz`;u~VHG5=e2OOMhep z=y3HvFQ0!m18A_pBhF;tq#3^Qo8pL5kFyL&I=)B>kc5L7HUNn-CS~7Z9^1xa*g}?I z#WuHG)Fqw5B>iNj!AdgkFk_!om14|vHh*ulAOsN>iTrGyhMRl7pr}~RIC9`?2si{}$h|Emh>>FxHOO4DfuU?y}@dTMC z;f&+E<~3{=8Uz~0A%6{lG}Ln%y&JBqm0%kD5=uI=GRu83!TkvP!FeH#_4T)$&FQvD zO8y(*8AJZJV*QU#&wt-(zGe2`iBEEl7XORA-k>1+Pa>MKMp-FrX-K2-sw4~pN(mvv zaVr--Eq18-(uf6kOyTEKCKBl%Si`ye1N@r3tIN(e4`+;U9My>H7$c#(A_<+Yxj)vW zFr3w}clLdO+!BG^!`BLrYr*>dVW|qSJ89x1c!(0_DGUX&6L!9sUXB1fSVk@&KjP^? zS+|NF1+Nxm_thM>;N1FO@)8SezkJ2PuUO$yRjre_fn{u_4P2rg z$QdG{*zoJ8UKh&F zfVMI|72cZAGdUE1KDKY^)#OK#s{He``EYK3^!FNH5Z8eHuROnte;ua&b20NzU!iO9 zUk%59^ce+mBj1C-x8)RNAsX^G2?RipPoqs#p`&dCfMl?dQ|d3dJbO(%{G!+cF^2nl z(#;$dB!sb|N0 zie#6Ok9#-+sfqNFYEUI_Ww0eTLif*n7t_c#;L;V0H>alJc@w>^^zJao-kbd2971pa z?u7EuT+rJIJa}WV41HI0ayb%U6{PR0WM|(A>0&qQjthxsGh$($FFi1S05?41tkh^T zsH$byT6F*{yL;EKWN2fm@Gh32vKWTXZ?S>+Lp+a z=Adb9Yq;G$BO8nCCv9A-1&xDd{j#3OQWbT>FG7s+v6_#J1B;V?DlKcWdx|`~%gK~Q zkK{BS+~*sCk}SG_<5SIQf<@j!O6D_Q>CBfWiK@_DCnF(37h4>rD) zqD%63M|}UU7|nl@vqTInY`!I1mVcWf{5|UtkI_T*^1uu2cuC(RLm^g2nGos`qGsu6 zkm~LlIj2bY;cadRmVx7P7Ch%?(IY>I3Q4X9$*7OhPxDQj$E87=8fIRJ5)g5y3&+|X z<`?M^x}vlL`=qDu<7`MPKdgNi`U5{7WZ)uIp32?E7MbK~Swsg~v|06$di*`PLKSzC zyMOn_(f`^X|0hG@|JU5xe~U~0&%r-4ic7kW=UYYj4iz1m@M9bWiB3T;7q`tmWpSW| zBh!-@an$=LSD;?}TQl&!I<*&ai4_fU1TWbV&39HB)`H};4WhW?6L&)V3{8Bny#*#b zBL>Wb{vsV1eIDuF3f6@J(BF^71jJn5`>GcWg!qn-fS8AEwC;5WHC65AM!R}q#+o3FJz0LyPaaEN9^2@|G(5HTaxDg56 z${&R6JcoRpQ8`U><{%DAv|#@~MXJ$^ysa?9rwg$yJ$CE15v=iwglPlX&%YCz`fm2AC02e(3! zN3WZ&3j#pLK!dSRv}H4SoJB%VK8PCe&l!Rc>+P32N9paGp(KLU^{ELzb$JTIm;mS) z7dU-Sl+9PXf#bIIJXSLxamGYZ3;0#en4V}WN*5G9uQX=_QM3BYq|kD54p$lGE!#$v zWqZk=sRGmui%WotbFra6BoTIllTu!%!HyW_>h5NN*U!TM{q3rqkfqW(AB4WjCbAh* zjX9$aIkkUD?qG{%LAZlV!X{scBdE3yf5v*0g$ z%EU4d-M{a9=8%i%tCf%>@*$jsKN2oZslX&d1*^#WQm==k(N)`c`gzsofU(W#9ZwQXjxs{6*h8f(b>m;|dVspmQSn3Cko~pC z8U79wjY*3GpTsIiqwR`bMWi7W3Y3Am&MI2YdSd_=xX9xF@ z8sEsr6d9~D!#1r5jcr&kFzL^MD=eDoZQ9YGRP%Q}6{KigDq@5ANHlnowKOIJ+N=~X zToF=Ls04RRE@<9+X-p8bQ7v<@q@fvZQ8KC0?_MJKGgTuegeP`Z1fQX&--x0~0ilR4 z*&tbG?u0>8;khM`SYh4bDg)uJd3EFU5c^Y z6VdG)cTGn zd#!RrrA`=SYCHZzq_s3f9AdbR#-AiJ#8{uc?ft5Q%Ms)<~J(xUuWBI0!mX*@&Ip1ZCu3qBX@M^uAb*G!lL9} z?p)V>oy{CF4&haocr^g1_u@Far~=fqcGb+Yp7IW7O(l}g|0bSSHCsrreAj2mf8Bfi zC#a)nrEhIzWNPgAO@#TUPXC|xt-x5Wza-~D-;#5sA`ZojevfV-7!g63;&aneEzMb? zu*_1#Zz{nPet{mDYTUBxduLQ$%~qi>TL78F&~bGc#RfkjTS~lXU5t6Qzr9JI-<1`y zs_GdGV|fRxm$0W)^G68(<%5MSCqNeHN79b<`!`~pa%=$NI{=}&9LxGc1^*|4Vtre<3kK3u@zt0TZ~|!&&8YsMYEQ)@@%)G#VpT|7+dU`Qm@3g{sip)wn~Tm zp3aneVpn7Sm#~DrZYK@)-Jt1K-3iXY&s0YqM_nW_DIC;z8Y-P%EOR(@NV9-aH@(yk zBb#*3c-6f3GUfiaz|b>9A6o+!`*I(DPh!PFEcOuJM;Ps2kMKXnPuBn2Yk|+v^jn^8 z^?x@x1*(?TYb@}eS=v3Af`pDyF^_XGg^;z({6G#;u^?DMy6EWPQ7a>HLUJRu4PTx^ z%CQ879F^QeC9YLd_RgFo)LCDFSCFsk^?q}T>aou5?$>R)K%Rqe&Bq`WVYum~1oph? zubQVe3wl9rzBv0LrZ;hd(fGmngP=@1C zQ~VGUugM^|0yxc4UtsOOt^nc77L0*$i#EG0MjS?LoH4(53j5(0u*j2r40ds{TD)7% z9BlH3VKQet>VZ|>A#9l2Z=P6~{T?o03d6EzF|;T1N%ir-3tN0@;}4`)X1%a7Zh?Th zI{u0b@TspYePpgc#&~)w%y>^Q!b}aOVd^BK@+z2i)&VGU2c-8R08i3U;El%`8?mKZ zMN$ErX!nHm+jnSr2HWnmaXu4#D#@hVd4?dh@^&p}S?PGc4Ci(!;kteKDOi9)fyqy2 zBOV!oG&i=yMDK;rM*r&%K6*idJh=RxDajg1ao4L629V@-+G| zd)dYjB#h%#^?wp>#{JTik&`MkVL0LC&)+3t09i!?0T$te8bG4=6()#+)Ld2=4za>w zep@6+1JhRy2`2C~96PbpD;uk8Z6_%^^u6D-1}G<^9PyRg9V;vwO*gzdW|~~~B(+wQ zul0nz0}}i%> zuU{&>=?x;7B zsrxVaX-IZ~DlJRi=bV128IYgY-O+?A$TKKR3DQJ3pj}pl=j@~B@ld%yPy^WRYf)Nl zvSx?AXyV2z&vhaj%L>TiI-x8}_i>O##HwKx)jfw6^h0(u)*bdG0s(g~%` zeHUV3ZSVj+=C{s8S%3}&Dl0C}XYpRQ=Aa23U?wT_abqJ_4U!&^FcsMOzh}d~q~W&q z3%Hp|`Pb-^Y>&)oGSG)LTTZYJ4;Zn6wqNWt``WR;O-_XLc%1Vg^B)|L+Of@nN`UUh zf%cL+J-u`?ACoKXFU+6Vw=l(jUX$_hD^CFcW89;l5(49=Y1vx3rN`ZvR$7{(JrZ24 zQ@-$!Wmr8r!+2HG222K>j4Fe&+#Ov(blAxd-5R-DUNK|YPZ6cuBEuH-0N=+fAjnB( zt@;tkd&kbD^jw22VSd7X3Jt>K0qK1PV63w(X$rd7-mDdc->s1F_sL;|qrom5I36l;cF5W?~FUVBv2kRsB(J_^*GElAkeH;#q@ z9=(9hQ(Nepv)E0E?@rE3oRlA&{RnQepOFV3_>CLbBHywx-%<3*Y?%&Xs=SPp1B;^s zCdddBSC{HuX7xww5%o!6{2EFr2k18NZ3ykR;30FJhn=C=rP&TNHo4m%1tTA~W&(-r zj`3k9>~c+0hq|+0B*iBxs3AO`aR=Nw*ym&P)6UR{m$Zl5*UHN0)$Av3)`x(ut4t71 zC(6VNB4a?DE&O7sXH&``=j-wnQM*XVZS*L4Tiz$b zTF|=>PFfz%gM+5n?q!W6gCgN2-m|*ylP)^XnYSmiNXRK2Hsj!yCXnuaSYnnd@V=&E z8q9$ZcilfqnlZ3jjcWAPKcfsfFFiNj{w6QZ@kh}OenULA-&D{4_dbc?dw~4E$&3F5 z^8CZk_`e6|K)D_%Ao}lVQCXtd2T+vLAHB|vZpH<^1I|z-tiW>hB#i#Ot?#lnJfL4I zZPGpSX|o<@ffN-4>*&{M1uN4C!-}TPvQFq;|7wK2F%0?QBvdKPAVk%tO*@?6YTUv4 zN*rIp=$@1;DBwlP`R(xeDK`edbB?%y-|(P6joe+_cH>Q>!a!I2-6C)~Wb8 zapt#3f7IVBs5Er9{&OcAFk(!hhg+ZUQYv3=xDLKW4dXBxf&DWrm&bnN5Qk^m-xwbR za-oQ_qnRqbE0lkuYNXPp;f>nRO-&8RSNugt69pd|B*}HB*wI|?un1N<=neD$nKkFJ z1jsHj)xBN)B7LzL(E2EE7kD2dBmeP3PemF%kN7f4pIWCR*W9-aba&-mCdYhCVa{a?G3f6QtByGxNYwYUFX>HQZc`hRQ%|J!{?si+K|l)kAN02mPkvG^R{ z_y-#6Hx){;^mWUY7Ccd9IBtJsYAZheF58M{xj&z8t-sj>vrS)VxjFMJ4AHqM7NbKB zM(N>PKu3@OImq~(BB91xtmyP(bMF~ooia#kyUNQ10MBssmms{O7|td+8(5SsK#xR} zHhnmA74GFXfLw(G%ifx+266tS+jLYvhBmS20&H78+>uM_(ohY}t%%DgJ zQ%s3m1KVJ1EkymR+agT&D@{MQJ}9*Z^cY;UiMrfCy#mAASh8FH?(e0y z@8+KWNooG)aQ%b1{|#U*sBKsy3B!9&Y1arKv_d?AcoNGLKq#o;g(TeixHM-hJ+d6B zKRMC%P`_Vgu3S~wON3A?Ac}f$aNMO&Wv=MY)hAEH#c{s~K{akV+~4#7z90G%d9x@> zPPlyBp1&L=SrP4h>^WRmB&5q`jrp>iWrpK|k(|WDCg4QJIX*CMI@V7Zl7#10zlswo zRi#h#kN!#wOicF4jcpIuM?ot1X$Wa}$)nDFbx{3aKDo(!#_P1@@NhCPz*D8-?@7LCd}v*JvJqXFMutoz6S$`)x~m8k<0cK8zO{5kCiw zA6%H|w)GO!NXpISDF(KBYdG~;Xx{-~G^w)VbQOYR!+4e~Z44q|gILG!}LBbtf9$y~4tUM%EzmWvUsE$-+&{lo}(*k)NAd&im zj3IB){I?8YwHi}q4!O5~Dc_;BOO>f~@IiB7hXAe8klWajD6r`h(k1p3YPllRK;d0Z zA`>oI*PVD6UQlWOUbB^Jm(G}N4oYomfdASwlKr*#oZbo|Jqw(1jvcm}B{09+s-vQe zh8f@+JB4esU^hTI%Rpo;{;&I`Unm#dmk?7_dQY(1dY3Hzuu8Usbo{J@!NJa?j!mJ< zekwK0NK;E#ErHVxV<7q#+e;MUT7Dshb1QUC#ww1>^6aFML^4bPMD0aF&9cDE_{g(F z`(=Ia8_Tk?b6PyuoqU&S;<~)Q!1`6GqwMsdQTiCG><@YT78SUG;!)-2Fshr%2#S^3 znjoI_%*0~pCD-}%O)A&->C>|O;sbJmv4uRNhRBXG^Z?1M(*d~1 zjexrHI4%^7iC0iO2i^)2^=jB!n>&$l;;FReOEmSW=8S~#Lorkpw@1>nW#d5~P#&F) z!%wgKbi2h(OT7oflm=L&Ky7wwHRv3URbpcs4;SGWJDhvFr$rwS-!ketq1-)yhUN}x zXnOoW^!el9dLG5#0ESvIh7SY9Y^gGvG2lCPj37j0v znURmnp=*eLLcF>PSJWPE!>MkcRQ(}IwR(X;9`&+AK11ElOog#9979iKFv|}9V_Jxh zl5S|V30z3yf&%@qmIiq)g+$_lh_`ubw#c$F8&OkYx|#dPH5jqm7a;azL$2?aYF|Y) z%^JD?>1juc#2BkxB|h#^m}m&Psld%wc4gVsX6N@4i{28O&i#aUIkv$%3r=)mP8f+u zE%E@>nUK3r<_Mglx7>xFdyI(kmZ)DojO7BVKUof$?IA2uP@>-17P@)1)U@3cCZLzn zoOR!Co*w==fjV#iNSdFx`x@E|ihfd|%d#G{vCf`7zX-c=bg_wU&VIf9X#t8)kz+dO zG&*<1?kx9$+Mo<5>(z!tp|BQLxhKEyyck3$@;!2QAH~F2ps-TTB9a&%K>Cfkp84=C zLZVjr0Q;hLtOoUim3_%-ZLX&SSuWnvTv4(Wmlhx<-jk=_>na@B+No&&VVk4^}zH}lu zj^oVU5#?|6<*$x0;2rnp_avIGnR9339V(iH`|;^19jL(3{ROH~XzU{{vx{gbm~b^?)1BtJlIxS7!wKQ>nZj z7^}-VXR!`jXZQu|3i72A61QH8lP`i8^)j;a)fvdN7F9|aBexHRkgf^nt=xS|%4?7C z!qrK-EdR65?hw#45lGT4${8w%uER02lU%A1RKrqy-qwp;t47?-EW#jC-_}j_&;oAD zoh}x|q3dcaIe>-h@~0`FvVsdN(N9v0oKTjEgAR+7Ho0Mm)8M+i6PONM+gdcV|M(gWFFk%@V68C0>8`SgdjE< zAQZ9LDDkS3ZLDkt*P39=r1Lu{|gXG`qbxNWsLU#uu98^zPb zSboI}#d>1-rd;oDrLHGcyVMU{0X-r%w`C<9R)%8w_oOB#7n?IUH@qpGUvFd)L~2hb z_Tw?WU;S?NPCHE_8FO27{xh_|FK+GzDg)FSD9z%sPJs^CMlH*ATa>urri5Z{JSQgD$uYVsDY$1A}moC)EjIEuLEjrBRx@+7NlF_fDh#ff|O+{*#X7^f* z`!!pqsdYAY%Uj*j_i#X=r*SBmfF?^ziQe(H^o`nm1m;4aL`WUekhMK5%MIbUwz~sn zE-u2m6X*SJtB6-_bO_&X@jS@)g8BbFmi!ZI`QM%J|Mo%sugTgj0kg$?|C$bg~3TReakrAF}-|;$w$bJM_J>a@VJf`yf#d zP%bIgbsw;0!EC9TN7Wkf%?~u>)HIWnGFpUN7oViBlL-5BtZZaar>QKGT3rmfbAoiJ z*jiQ^25XFAkbw?NN#03`t8!{tBdnW^Vs!WLb30v-7nX{3&@67nhC=8o>RU6T_fuw4 z1Jb22EtI-EX$waOa4$Q*m$7S*(ObpT2@h3Q(#7{l4qJx94u>*4e6j_Kw%3C%-c-rX zhPv6_zdv47=g`Y(NP+=JT5S4>l3Wpg71@MG;*ShzPhtXkmHn)#CBp?#(m?6%34mjj zL<}KaX?aT5I&AzMU}{$eGRe~>O;=R4SJRr68s*6;Q&Q0+o*HGA!!4n1WaD(Mz{wmm zm^QJifs-=3xgP%OO+tq2#mG`w5c?Ru>7#B9fUM1Ce~)v~0Rjk)?g3wPE%teE6O1^+ zNJ`6EjU%?F9;0;POXp7>tLku(K;nYS$n^TmPRV`u+~4l~OB-rly%) zx`|1PE0Ohf=06QX5(&NJ8$pp1pLZ-IT4yEF$CX z+@KW=(#sd)Ak|m)@Nk?r%TOyUM?=6~)I}u7oSF{#6MK47PTjugUx-d{yQJI6*_f^>;QVg`TbFXM!v zZkx5B{;Vhtn`gJ$`P%&R3{M`X20DV@x{P{sGcnHE7ptz})$;_xRjp*>W@2vFsn#RC z2zl=l-FysM5q?(LC*37WGuc;%rL>ffoWRU!_lk3OieyDditCh*pujmH0x_%G(>g2* z6mC2uq%aLe#oSDD*$4-KVpF;5r9Ow4$b5*s(SZ1AOfc7;L4J&Pa>^%O zpWoix+AhFB(EVd&1P%Km4D&X`BC7VCvmR)e=684$%agf7$3bpife5-{RitWWR{l(J zO#@#Awx4OC#OGvX+uJ9AE9)Yupokm&GV`uG*jj+HL^RWcS^{krA=i_u3=})s!lfvt>anQoN zB=JQE39QdpPD3^8&0ys^Rb^eku9fr|2|-k1#NBJ8(zw7PS0?Z$885U6^dX%S7^w9n zX152ifrDMU*;w(Nz@2eYS!WMk%uVP0q)>GmZoy*~Xm(5zquYishPY3MoK+vB(^NNR zVXi>=lg$fxW;J9jp_6;|dji_M6`6cUF5xo0EJ z_-ZZn17iU*DGhY1xfFxJP~ruD1`P|EnL(wVk?lkG;s#q4W`ezKU4jYR60$OhxxhJZ z(WK}f;xILxUPvI6_6Afi3|#>XtNGc#GZlr^6n?s68(ovK<=D8Y4f0@Dkm#fL1v~+5?ZfcsoitzXRnTH~*qLVF*i& zBg-Bn#^eCKY#=(x_El9u?#HCb=kLXNLo}_-EAbH-Ii6Ck& zCo+04{((7xci9|h>{r{}wn2w=&_D&pU}|ImVSt{4Gr?%=Nb`Ew?c^YR(@4UffdmI_ zoFzUtTrbH~xFk|)arrwj0VBA*4h~D(UtlH{m?MsA#h3Q8KPcS010AW6h~M8|#64AY zu3E^o)&kDCUlsghPzy6E{BrpChiF#7hR)!U0V~)JcX9D~DWTwEQfeOxcFk2uzGnsO z4(xWQeN|!7RwIws8SMPh9PyYwwM*_-600`TgJl)FRmCjZtmfCQq)_182QoVs0au+J z510@Ehb$f=N-xA#K13RCgi2sZdNSKt`Tmo%AGsGi}Kvw zAI?M&7~v8j-hP9k3lIIRvU?IGy5VbH_&m4P`@-ziVr_|fljhmNX-C)OQv!nQs_JhP z$!SufXx_iY@zP9pNb6rzB$1~pZuEkIALDVrOOR-eI+edgtf?cqR#5P{*Y~}9b7%`V z^+T`VRC(Q6=!grjYY4_Vv{G8w53EY&G}b?wyO1`qQ+slM$b4xJY<&53$Vu}BQa4vI z;R%yIMgyp*WyT(cb3o&sS6+Sy?`s{w6dL9b8x`TiZZJb?mZr&8CFDAXbOOT^A1!?S z1z34?h(jfQ6NVc8mEcJ5KNh!tAQyRuZ-Li8xQn8=^fz&+^GP|PDGnZy`G$`Zes4lq zz`J|(hoR$&sZnrp(AVW`ML_}qdIuZYBlFhNL>_--9BU$eyBv*_w4MJ4nH;T@3NcWq z>|~E8P1?D?UN9#zF$69G09)6*=vYO8x*p6C&1JySCc5D$D%GTOrrA{cfrMYE4iw`o zc|@Wl><_kdscA6{=b-lIlisC^NGG7u^=7LPCIMe$U?XyiaGMELfCr$ZpDWkp1QmGh zsA!1Jt&VXd4&MIl6v<_~7AT(SEuz%cgqDfEXaxSFd{R=hh5;&Jr-Q;Xgx z3928Tfo>fl)hgW*H-h1hj_0HWuL;wz5r10NKyNi?cP}IdCGLPeVn#38t3sbVClY_o zRl=?V-<=H=m|$t7W5|67Vq=s1<}Zqr-Ho0+mG8fr;(DNX{X0Lba>vB1_#3E<`d4xw z(f|0r|J9Qze1{ACWtIMqR5Md?>mPz^RrBq1kYZTlQe!z^NXeWDZ~bgz(I_lhhJKz|aGNcG)J; zdQ3r1{qA?LVeVw?^_DK3x`Dn5i-1+M!V1SxKEF**n!zAJA?KsE~C5b)< zySIm-=c5lBhV;lF=cgtAm8Kb(R~tJwyUwi#Gp4Mhb8dwT>xx4=$e`|P(C8F!HHPik zS>q^mKWT4P9k?{Tdk?|-XCS{()cZF)Bz!0&HK&3FMiGx7tkpCMvGCW#)|@kJo&xUD z(AExQnhG=?-D=E)bQ@A<{*uWhF6~(;+`qgC%TrpEF#UlFh0;w<@(L5W1^L5dax_*I zw{2fi{K55^!!3F?2M&x&oy^5|e##1)wlB?FA~T;-jvdD>rVOj?Lt-=hI#p3<}&O1&PYwyd* zRLsiul`DdUT7YjJ4^>09S*77dOjIP0*t(KJ$8dRj;^~ zzihSY{T>^a^=BNahcT&*s?{?OEfVQ1Z$g*`jrwv>-MP;GkH9#yM#oPEAk1P&zg8yq z$~di*Ul&kSR9UO^0m^Zo;FhVE6781Pc2%<)Yh=HJMMgli;~apmwwYmVU&&6TIl2$e z`c>G?y4>Z4E$JRn zw_C-O^X3%Vo`19SMwFSZ$C9!B!J$d^U=9}5FczulDe7Qe#5xw*THCwaHYb!9E88}a zxYEMDN+&;BNS$S%5u*e1yL1wzXJu1*iIu832Qnq|H*)oFhSROHOfqoRSAdDzI~|^>^a%IoH(TfKUrl_m{-2lI z-}Tips^*)R`BxZ3ScD@vTayDq|93E{@|ExvJ=AA1_w3UF>>71TOV$D+X|#^ zQcmclZw)<(bSPAvrez12ttY&ZgV=7mwo76DFXW`y5kS`gmxdoZh+;W#$E$z*g8_YV zlMEZ$bxK))nQ?c$lCuqrpQpdB)$=cy zbLud=66UuL&`8bmwcix@E{3urc|!KxZdNTuN+-aDF&48AO+b{zAdFz0PBhbsLuGJW zVQJ>ua7kmU-GOSSgI~FX{tXc6D0Z}wo+L3*Iy#z;4Nq!YysGVYcl63 z%Vb%ucw945`PqEZ(#7()GXfD!QakfvAk*|w5%koV42OY@OB%-q%MBIZGy~(pwx5s7 zaMLs>%XQI`!-g3W(v(YMpM%jZ9VnGjp6R9x6>TXLSoQ+s&amn)h`$!{4w-lA6r^vG zJoZf4?X_bDR(58TRR&j3>RgWrv2^JHFYHM1JYh`VKd&WZq~7Vbv$*1 z^WgZV-YLcsZO&BW@qy1I8$ymYYItK(8D#{wjg;K%o9SJh7>4>4GV6&cEeXC#`kc$! zh7`aPhFC3G5&N%QuL4MsyC#9=^(4aAq@#k;+Nd>-YfMw}+e^XDg!ykf%#bN$j74nE z>IX;E+kg(FXJ9fV1OIZ|0kRMV6V6w{;?BUWm9q={4l9Q1_wc&TCD`pSPa>;k6BsUt zIbK7V`!tY`AwxR4k%%-f^Ul8Enra`mQJ|-#@s_al1eP!#x|2!*44d`az6Hq5-y3Wc zg`z|Z;&)$Y*KGcnZ=>1X2PslNw`9dV*nw&pJdqSyMB-TAeTHC-j`#lS?3`r7(vkX} z--iBme)}g{=f9DNf3`~hv6=fXRO0`nX+_5HiUae0TiLx)@<~$;fKDm$&im^iAa@K| zYRDTK4-&~k&3;+6wmDW!5|59$w?`XTbX5~B7g~&Z{-`gd$QFfZZ0;*W4?biG$C(e?Un!SwNyS@<6d~x%a@LIA|^d^`9uxtp3@<_o^f9HDG$hly7>p8_>V0#E;c=n zNDVNtE{rwN>ETi^N3-8uxG?S0{8!pp>dWmwf5lQvP-Ir*#b>=i+$&L4)T!?A@BtUw z40=G6g=DE$k=rDcYAi%J0yt_l$eV%XD`Lb)6w;x#)d?zwDGD8sRDXEMqs%`fEU?yi z|HJPK{ojR`D1VhPNkIi(YEda6T1j3hQ6WKj1sX{q!Aah~l2rqDJn@`|K^f{p$Tk`@ z$w4$)68~VB(qV|lDRp#I2)2HB;c)t&UnbOc%1K;~BvSl|*+mAE_GQ!0vJIcBTC6$S z5U{-qFM3Lu=N6fXm^9w-pir!fypPL`3`jjU19svf_eZK(A`wMq}KmOl170h2h$w=49^qa6pV`F6u zn1E(}94aFv3=4(%UD5$yMMVVUzMpyidO&>lQ~;%>wwvEifcA32d;pb`*eBmFK#X}M zdB1I=qoLn*zePm=kTxQ!_5c8=->fxMVn9(jqU-NBF&qR{9OSKy9GrFS3;}HZN`|KS zHY34fqM@T837<3n)Q1C()0_Yg-?LDj~p1Js1X1ka@l_ zbcFH{Mm#(uyfNe;vI#u|M6wVN5V;|v-_i&{Um_p^AOa=JOejB8jQ&#N2luI894#&D z=>cG6np1W7El)7+6&;IBoehst9ogz?s24Bt>Aka;p@9c4p@9YFYrh+;t!HQbwd>tq zhhH8kqcHO}=7Oj0Ft%)Amm0|_q>nbQ>A!^aoCIfcZ;j*(tY&vVggMGzr!U=3njJSh z24|h#O-`&+xWO(N((j{IBK(a6hsF=PtXb~3>S7JK)v7Fw-`$&=E_OYI)z4HbP%q2| z>-w7BU-MsjGrdKq$gtAu_q%JP%(?64Ew>cO&V;I1CkngF8+RD%YU7Q9zYHHwezl2s z-H-p~wr<>OUde?Ue@)70`u+fOR;Eg|vBlW#M;Dy-+nD%meA{R7!lbm;<7Sg4ix;&Z zm-dRR`-Gdgt{09LPK52-IM@}-S!-YU#Nw#!9Z6l1`hCY`sA0?`gwev zk##o1+qFcFiDa*P&uS)Mx(d&M#1oio}eYQ43n`YU1Nq_m4de5lkoC$UEkcw2{C@_R?o8tuaZ3;eAto7GVFI9hym?lnQ z{~}YGizM7%W9z-9T3$Droz>?zQBxlqv)WJZDqc_NHY9)G`ykaW9_=m?p#neTn6$~f zch)ZBdI_qI|us$?WqY-SOemmcr9pDo!wT1Cfp-}m3p!Fk>5d*;R?MRrW%d)}oMvMbsaAZpFMaZz@l{HFrT&~Fk?F}a#S%510NAo%6`>Nl!axvcAh35>Ft+Q^PpVn`j$-^$8M9=HZ14^<*ShXa zpM$>mR3w#{@$da!F+mB~X6%$GU8>|X!g_)B`s2KzpEu!o)o8AXk*?kAGh|$V+5>=7 z;7jdIfpTAcNDp-NZ`M0m{K}kT<$eZ&#%9rJUA`WM0)WU;2(SA-@rLh>sJDJ5@PQJG zRuFFe=n8>9Y}Lx@uVb%#>8JU{5hEX;jQb0Gl`*xIY^sBcDV77o3*8sf2i}La{Imbu zmJ3&_+hC&`{l;K2cH3R)>t~?k(vtqvmA-8_xT1LuFnR4Fr*Dd{O3YDR1Ho2k`Ml6J zP>n&L#sgSEXMuMcI?))YOXfa`ydv&;QKG=h@7yVaC>J0W9RLwz7eE$-A9n^RCaOi% z6EZ=(Xbz<)I6T(CLCTO4%p+(N8d|aG!ei!NOjtP!AHgIa1q?kLZCq<*khrU7D=l?d zRb(mv2n3g|r06p7K5zj*wv$}&3=tUA-b2s{wJl(o)6@!#jWQbDRezdn?pC2F>9i@g zm7>Ic1c4uAQ?W{HY^!E_Wldl!{mSyLwM)g7!;oM(h2s zqEhY>q=Xvox%HT*eY9{eQUora;VRIxnFn7IbFFMsOwCQ^B*KB*y~}#-yps<*E6F0} z+FnWdm6aH3^@W@Wt8vU%e#~*L;lMv6vr)>&C7l|o_@_pSM&sIIk1>nO!CDbiFY?zO zr~9`BS#s6<$5N2sjG{PKdaU|`8cek~*tR=sG4kB~rwg8l1Y=iH2bcNGL>-4bS9$^p zXEbP7LgFoQz$t@b7PETySjWiNkIbkQ>73LZh$&_Ki4QHU>id~eq$*P?_i{S|cx*FZ zP8}WZDF!f?Bu2L8AHY8Jv0y$3dOqX~T8fT-E|*w?9^qP98;c8d<{Yk0U(?&Jq|wTo zywbkY+em3NHt^^KPp=@NtwCnNd|2iqzWV*Yb9M~w>=hHkvFn1s3198`dPfjiaA}7C zAbqXL^6p2iokk^D0?W!y1J#Z z*ZEGX08q+U1@dQE!w$d?BG!!4?FMqFnAOS)7RCw>?!sx^N}ZFl=^udlt-Zf;GsVSy zh)xQ^)7A*VRFv}d5f@Aedo7JZMmDDxX}lBww*AE-hj-vL6_fxq&BOp==Fbdfwz~~S z8Ho>e@-z<7tuG@*YVvS3jR&K4ri%XOo?q9O0no4kn)I^>U~G}28E&_qak?SV;m5*L zk2MV!rxl48f}B$Q?KkytfKss>`S;eBQp{lncHG;;45K?Gbk2Q+CZ~C>qIu==1xrtz z?&wDg<}bbzi^xBt0C=2XTh#p1a(zCrU^&HRxyFAufoZ#oB?INl?TlR!!jRn1ePwv? z^c_krW9j9ZGC*ODf=FvZE{=~{{~3}gtdDW z8t~52W1a=b=jqG~6uj^%(u3hc6mJG=G7@BDQKr~b1#n6p>>e4Va#Q-$t>eUJ3PQh0 zTis#df_B>EM zKEL9qHr+|VZQ+)!0n$UQg4Ii-7y9M#&eb#JPY40yk+m)fdlg`Pf*cuRp2u04*}*Ks zSy5$tg2^QqW>@H*6b;C9I3j;I0{i&0Ud_WVfY6+Zi)}b9G6vjVi)5mz(n@L zyB5(_9u=^X=rBOg`zGHO7p)M~&28!*2j%zVqdHSwVYJ+y!0SiQ+(I&m&rZP_4hBLx zfSh;^Niiq~nfZ>0O1KItH8qKpg(wK^({9G)xHeEP2xGvAk9 z&`Q~;qg5%F@NQ~;0B90`h)L+m0Kn&}_w-1m9Ht<}^G>~r2bNzJP$M|ZzVhC7+5(8%1HvyM!m3MJ8uUz8Uz%ed} zD?P4&oZE#7-_5NeYH=TQn(;81c8JM3kB^$E)FjzG*$(7!#O1?sbYE#RC@3r%;t{R6 zp0-!%h{-Iv51Qn}kBDs{T*-thOtS*a(B&926>_DB1>8R}X=HNoMd#DXQzr-%+y*hm z@whh@;n(^bZ&2V|&ed5x&YljM+#g@vZoc_8fN-tCQv`x>vaRNV^gi|LAmf4b{K94Wf+aQ{~!y%8I5O!(67B; z;qer9;VgE^Dootld@~TR35e0V{aqCUC{jYldpLjxozre!%$~pcCk%PX*%7inCC)9E z0lt+Iw9_63Sch4!Aagf_Z4iKownpRQ|0C@xprUTJ_#%o3h=HAe4Jx8y2Q5enh^;KJ zz#_1?Az*i)qJDOFVvAkaEp}iBc6a-J!-6o&KW2S<&OZ6xIeUL|`_7#zdn(o1t!tGU zjc%DZdi-9RxHov(PG5`No^GXIC;ymy!K>QL($nsmnN6`Ovb9XW7ti}{r|M>y?y4jI z^rn1z=%^*%g7tqtjdnNuZ0b)Wayvr;85Mk+nzqU7~Q`}@qwy3``^awOOM!XvaG4J&?y(sWpz|% z>({F>GUbX_wNf+BG%Vh8;1shdsWYn8`Q6TI^d+;=7t|}dPi)kEkVFo9* z1*w|Wv$AOO)vJ`{`#L2C_VU>6o0ncb44q=kCI49n+a(>78qO~WOeP5#iN8Rl_z+3 znZH@G+S$e|{eEFHiM;E|S-T%tc^N=f7h2rLYDxpcO_`%jhFjlH53kqWsa6ANzsb%ak7`~i+gMV#*u!sD!we3U zOb<+L;`ni~WNGE%@`njqj4e+X+3xN#%yM&v*R4rAOBkE94tMxw*1gz_M+RxTjOTne zP4!*ABHqBiW?Q^+5R$&UWZ@qtjl+ixoYC>g*$*#YO%U z>{!yVh@r&kaoG&X21&>A=bf&7Yw6Q|YuM4f(oq$LC70?oxTIQM(&XgAYOgaUy*1by z@@CCFqs*Q$?$(#zEpPQ&ZZmn@5d$;Fx=sCenGW!~G9mJ1fN|X-t<0y?tMRDq^BcZx z_c+e5u4w79Xi1wjTP6=#xMASVgi(%@rl0yzH|6d5M5FlWvl?0~nP{Gtv0&4OM~w?V z%k&$WVr)=u=LE0v#b+6x2`VwnbZ3cEp`Omei*9`};r`Pvn;-a;{ZZFsJ2H6dUJK)<^C**EeiB z#h`1W$FIkv7G755)S}?hrL8)Q-ZlHI+t~7FTQf2Xp;kTVM-xkH6C|9<(b;sRb!?w!bx0yb+ z$jUM5IRiq5O%MH4wW#DsqgGk*X$EswS9!c(SdZqvO7uP`58d{n-X+`BjaF^0Yu5Gt z)VXhab-(c`bhvt8&pV3wE5CNi-0imbN?Q8XIxGAq9RIj0xOn;mGXt~p-CwtLY%6Yf(ew2UYRZ+vlhJ(@D<=q#L+)z2K?Y*))+fNu}VCj5j z!o-m~4EFb$;amR9$8}xJrrCF>w{6#^6=S!YO`LJ(N7(>hk9R}tYu-+se)wUQa_5Dp zqrFo6=d`M9(#HGg{OZjdjz3quZ-45&veL8)$(i#nxR1Nz;vRl<+|4D8omZMvD)W5# z_&}3{srF-hi(jucs%VXgUA}u=+uEzvb>ADcJeO^Cw%SrsX%z1|5nGqvj`x`RI-|4E z(}p8`{Ri}Fu*v=Fth1Mrl@;#StyChyw%8U)ov6CY-96{dxlm%|s4w{qd($I#ZrD`${QIXZ-AfFpXgs=PhGS%(q*1EGH9Zb|2wUfGW;Se(a+~sXixr!H zgtm|0Ii<2;$wKv%FCvc?8&dL+`{_nUvXXVH zE?MIP*O|>-I%HhblvxIQ_7n-Zom|G|(Cn104v#y2+qQ7VxJ#{D+P-Pk_3^jCr!!L& zMe|1<>isoiCVVL)yH`-QN1~{Wr5*o<{Z`TEo3ZmHUNj&oc@P8mW4^c=v|^n+yN9Ir!W|RGvI?-XShx(W5 z5mu(e`Ma4W$CjRUKDVHTYo8h=!;h}1S!(XOp!lZsJ5?Gsy5IXIlS~5Uc_}s<-L4w7 z!{W}DwQbbf@6521$ZCu|SS>_TXhK$ak6Y{QM?G8>V_Dj0bIQUa|8;OE6`WG+r)p69y5e@@8B1qMTw0_z z@~P#JI?;M(`@3OPItCv~ulFpuLG!wa#%1>}>)b&;;r!zJTNgBLT<6es(+b}fY#RAN zm05FU{PLBHY%V@}kdS(}T89<`O}!4icUW-!R;3ZOB8}G6ntkGUW1}a3dVVW*Z&%qO z#s>>^>Ch;u(=MBa%9_tw?T_5nvgo7F#XLu+?ddf0;isNky*K+@zqoR8t*x#*&lkJx z?C@|xYwJs?j|L81)acHI@}n*v2_I`SxUFPrr-{3gC;IrEE3~AFZHE0E54T+@C#RLY z6}fKj&CBVwU#pe#=rYUS*|>>uxen1D^0c?_9IxBft=`~ed7}>DpRc|iXLe|~wRyQx zCesgIDb{wR!Q7e-M~v4`Y+dbix})!su7+(aEz+BRUeh#U#=&Z49ZrNux-4kiBE)S+ zrH~ap+~j*Y9WjodPFy3Y58Q20 zY{s}M=USL94V^Xpd7C4j>KNDCQsh+QIz}6QEj2sz=|Z7D_rk{w_1>_0@6gp(R}>p- z)-tAR-C3z8jUGk&j%?yt`^=b{sgDYGIb!Mi?L?`;QUC3)ddw*)<$R%0v#b+KAOG=O z?O*!cJIgjUr)yR%d9?K2Q74y{jH|q6uf>BF0sZ!lcrd}b{>9Vrnr04F!(P_;ugtGm zHQ!0*ro0L3c=mVF{oU1OxV4Bsb1>|9>G6BI7BYFb@^Z=f-zL|3>ChtUe&KihXP$gg zMLmD*mtE)Y5ACRNoK|vKd(U2P%zM|Uu%N+y|8KFco+x&=sdH>_jT3WsmZ{S$)MtMA zhY!3W(6HR|puHLkp7NLIgZrB^@ftN7c}Gg7udTh*X4Lt6>9uw(YWlpcU5kUAx{YeT z?PSo=nO-?NhalB>iWd~7y! z>y%x`P5;EdKmV-H&k}W(jjlA$Vz#=+&-M#$E3Z!O7v2B&+sod0+p)*z&iJeIHtKz?%bi+ArGJ7;}U9o`CIyUu0mqxt%z(I-9Xl#JY3!|Tpd0*_^xW6d&wc?h8~^iTRXV#lC(=> zQ)V1-sek#R93$I#+mZhc*#O?+*?#E4PwZT5!pt7Yr9K2L6OzsAP72EGxob$5*uCsbCKd@l>(X;B^ci%Kv+GE>JkCm^&1551sXc)OP)8U?#pS+uO`#+t%EmzGe zZ&{?7#nj^4XaBb^bJm^YI}S7Nn$~RLw_!=l%vkkI<)byP%$~F@?zqy!d}Y;Pm1n;_ zX@2Wo<}kasuRoq!jk5bZAojFtmqFzIX6fe{5kj=+k zCD#s&nOe_CJ~1_>^QD0gs>a@-yq)pt0y9}{i zAshbf@#RK)TKY{saw1~vipN3mK}~%=$=iBW{jfS9V%6u&4vUK=o_v($v!lYTv#-vN z*)d6ZVOGfDs-M=rt=F-C$3>T4z1=SN>z64V;u5%jtnzqj)2or@*QVUBy4|f`T1<1F zzH|4VOp&$RomsKvOo!B0yT?17D00LyWIXQCf9X`|c%yOSHm*L^&i$st5p$P};?ApG zx}WgATe`@?9xt~%{xvWm>CLWlw<_2?%6Rj=^Z6FnJMXj@v{8{#?a{qTg$J~`XsUj9 z?sb^ozL9SS9(-r)wX#fq^LF2jmZ+>ft1n+S=}7l&_x8oNDOB~sw%zX=9k2epiDal< zTVww{73JYsExqaw>gv{DQN^CUH1)T>EAep2S%>?_o}N8A%^`JG^Pr-qtJL(jjqX3V z>3y5Xhc_);YD`OcwQ28$Z)&?<8B^71eHIq$aOhg$(YNaMd-e0%y$zj`Yn*)hU}{a< z^gd%!Gg5{=_kLH-<9_tEuIaY*OFp}QsoTbP)84IZXVtD<&!L+S9l!PMvJZ;B z-TR}HdsfPqRh6E#uhzEjskcMBEqc79pmrE%wu`%iic=P^gTgj0DSWk|q`=otGp8FR6r0AZ76_L4p?b zv5QyARk2b$4J#unjQ(Eqk6Wyc8B-IBhQ;tpa*s&frwhp0VTI5x7C#MBN+Z;EF;Y!j zSd>g@=POft=lt!1mBj3AB)XIzUcNuEIw(IWDUpz4!g-%7#{85uayzv&RAtve8Y}bD zsN*&2AZaKk{p*FM`g{YWM)h>*2bqi050okK04I5_hL8T^O?w7gVSWESmR%k429Lki zBLVP9CU^X~;sJGkX`C#ElZ8SKWm2Dmg=cjok|q>{J@$QzLHH{b5%L(B5Dz0gM%bFd zY&u|}nVb&J`wXff4$wsws*}@+j--T^{}MC z1RPX$Rw@#3!6m1tVkDij_X0ft`KA<@3MWCtM3oCBgfRJy-z(e*CMkg}tIa8dXgCHd zLPz(mLLl8wJh@#83UMo-kT&oUF%X=mS1Dq674k-zv@Zq3E5Mh@6OwtKwRoFWfOxL4 z@>}W+@6wZ1(Df=Dy`f1@!-I_iq=RIMYH|+|Kk22H>%W)-xhvpRE%Szqzof7#0n(ug zwOSDyDplI~$4HZ8coi~2!4H#sarf%6aOL+EbgfnD#tNf#xIkHqEKH5t0QtcTD@}G7 zi*2y+&<4#@XKzNZKzXh*pjB4HwSI?*uWgBW4RZf=b#TVTB0++4OuWdj%|#FK`UAuQ@52;-b>2+mR^zd}kx zXPjFHnoFP*@=kN!r&f1C+VP5bO}xr3MiD8GvvYyDDLmCOZf!K{P}Zm#MC4czJmdl3 zFNYrN7;cHkNeG6W5eZ3X=M~qJRPuGa}D8UW{EYB1<{LS8S2F>DX(Ls3(R$Q5dJU93N42+kDv87Hi}z zN?^MOv4F&D-QO-J?*_}1@K_5lwG!S*=f`8C{{gR~w7--eZ2qh&Utb`+ zjjpW=);IYdz=UIIG4HzSeK0*UY{{c7{qWR(0CNkM<53BI#Z?@)Jp3?tvq6TS1H+qH z{BXHRjU-LAluX2eMc(+g}9Ik=Xa)_Uv9PB#HPx7x~N&fJR!?m0d(lBm-;{B#|FAjl! zgeTLc|LzPwfWI`XFNUo3Sv5vf6KNd&Il@|#RoQ!mRWINOo zj1&VGbPziHM4UV^tQeVErppi~l-;`j`o%!&dtkq`eI;d}iSr;g*DYPmEf2ZU1#%{Rt%_o|Q9(RWoGWZ}fMWPAm+X=1UF?|^U_ z;h)w-v{D=;cTN*5SBX_h(f7R^V*!+mZ##VRK1WpIKmoD{yip84&QXa{8+inaH@OSRfqQLVX;%o;}BEc*zwn}UD6bWuv<<9U?r zY<_n{Wz7GkI_WBVLv3Elo#W){><4!^2ixhwxY0}Cd-JhSLJzh|GhUKtZ>uBFK6jNx zNHsA$J)jMf%$jY0nkqubH0AP6yp$nYHQY$16cU5s(xK822zL%zfUwbgpX$!MlwIYq zB6{nx-z&PEnM5+Gqpq!9?Z8Xch1*uMstr`GMv*iPoY&4bK=^tPFD>uvV8R=CuXewC zXA)>_#~0~3-=}8?FHO%l7glPE zbbVJvsyVytwNNH6+j+h1Ix>fxjTlH%PmU9z&S1QKGv>sWD2X*cFWvMxsvjS9A9!=36vsiP?XDs^&y}P^k5q|M1h~ z0zW;t@b6C}1QF<{FA15R1-_owk{uAd$%m1+JJKW&C;j2`f_b$@?~=OZ~J zY?B-`s~-lu9!a16X_akxKaJ!1>69}mUK@bAwZMQ+?D_lCa2eN6+b!EZp$LB3zQ9j6 zAO8DOHK%e;&8z*e6@EImz)#pSZa~ySAGw2D9 zpYQWaVwk%xH23GKa9s|48cZD8RfC2|e~AS4mG5I{grEOyVfMjts)B1fSIKFCg=&JU zRmciR>iItN2Z8{Wv71IW<{Eh5k+eSNFz|4A1YN0oLmP$Y%T5|E#Zr_VCKIukMBv|W zSy*-k>*PZI{Nnj6w(|X)CO^mQJKiT6W=dDS@I5Dx*(c|iwLS$WKVXzG) zeX)(M)%V=?I#>qc3HZ{nV%IDo;%<27jIU1IZxQUnO;b5rh-S`!IgNSy<=G}!6qY1G z2(;2{=Lpe6Ur3ofR#bPKgnOoxof!+llklY{AT{O+5e`(t(jtY1d^zf1`!X2r8~9)y zP|y237o<#vj8z7153z6cvoV^ek_I5!ERQ1o3Y;%K+#Icu0#~Y(qA|)Tl4WQ1e2xLd zf+G38fEk06vb%ehhk}!G`a&Vf&hj|2wxcy@PRfz?>J^tj`6FaQM~?A}geZq*Q??_E zdQBR8#$nGZ6f2W*?=pHFwRUGP0`*OET?aq7m;uB?mdH8w!xjBb*2F}m91<*Tf^jPt z$da))YsyL4w`;>k^I$0^$cOfjPTuF`Mi$E1!r_lhCx-Zba6ozU2fZ|U4)k~{3waFO zm!J9#i&C%VA)J;r(;a*gmI(RNVvb6+4$7Zvq|xV2UWGsk0fO#1tM)UH*IJBro3wz* z?2TGGegZU52|0o8Id43`h@usdm~9$b1ZxIE7uS&LX(L*8m=UN+V@@M_?G+e39zq(6 z{af@}_JGrjl(j5~3d?s@+evY7;DZnt?ZmO?7?4Qd43zcL$l}6e{Cbx(?cvO=cgOP# zAX;w|Wo4k_fyb9&T?OOOpbN|>Vmkk1`{7+_OlYP#=~f2YE((E!%OhnfwH;bBi7v_{ z%x1ZEXIXlA*Reye%fv1!x_qqpgn_sRCKdcjxLm!zQ$uJPRh>>c-}HikIRB_?wg@h| z9&%p@;`Dxn=C2qC`^Z!(EEc+E3&<%ZQlXTqqhh&J@z=!e2e+bFwYJg~kl$+tsK6*` zV}3pkZQ5>Q3+dlOsv+~PyicD`48(oH9r$U-Z@SiT1LQLn!l&!h$KM!eJM$!)xaE~Q zAH_JQgLKop@#3!+KN!dogAtLq=itx1j$_c}uy24)XQh8JAZWG9ZT@w@onXNXFcfR_L4}OvHVYRB}1DC0^Xtz~eT$ zg+0S{DwSiurjMepLam615Yok--Qg?lf|d4QrF}j|aO?p-$6s0e zRdi^qok|wp2Wv1&MPi?Lg;K4F)X11tm+{uJbF{d`Ub3E*w)cU ziG6vhKG*~qD~;pA@v<>IcOFdD2U9eTe`8jhNLgGTSt2%y_KA{(DrE^=IP+${TzC;U z_Q0W&^th(1I7E0_9BEt<7l?yV^?N8TBo9z?(99fY#tM=rG_0rN>>L-)r8Kt-VJOXB z)YN6>eJlNOc$hgde};t&7O<(9ZVkBGofU*gOltwymK-NnadP86zTuK4kXj4WfpoDs z&P#tFIacN6+_sihYVgAo;OIU?M{jVb>BkC0Y%Ry8l`>ghEEeK0BZvRs2>XKDu(x(# zj4nUB2C-rhQ_$L5Sdvm66C)4fLYngJlzVPipph0~*2fkW2v<2_K|p@_d7>5dv@0u8 z9#68k$QT}r=<{>(?>jk>jt;5~d*}m{!;+Bnb{l>j^b1gAyE+{g5_;(al^bMLTq+t| zIe9%%5itgO`|gcCtRQ(oE^L5|J1m$kmPvDAXiKOb$_kS&K?qpF(;&NtL_vfhT0v3a ztVqNXaulRgAUp6lEq{X89H9@CSb}IhCL`)H=8IXVc4*-}i(?_!*k)t^DB!_i;mhrE$)UX2r=D;<8taxcHe+Y_pvK z%(_j1Vqx?+R-Am1hrci#zHRE*OlZgrE1C4P>dgdJAa7!3TwRJ4g**Fi0r9@DW7^JY z|Hn!^9~b=U|IeuHFe|79@6+g{Hz#b@V=oQ_)0=6726cu&?-8i0==64cu0A07>MAbP zM{LmicO87RLqST1nRSa;Ve%rHP*IRSpwY4O^)h{sa&nGP?5v)ZSfvG+dWNXxL`~|N ztz?DD^PAj)hu3{P&3k{|2E!|fc{lB*x7X+cr&U$Fg0F(hA4q8le&47M4ub^C7wR$p zJ<@47i3*ei9k%ELl_NWWiHcRwkl;)pU4pJ?rlzK`B00;*Ml~M=*2;30wKxMr^0%b7 zXTeZK%p~amadkT@RGzI1@HD7H+>>kIi8K{xAhSKJKza73)TmTEMM8dypn<&iu>$2K zB7xd8f3Z#5!{`I7KzSSqg$b{sMJ?{-$d0y$a|iW7%Jo`-NnU>G(NouoNA!Wx`jc?$ zCqEXgsm{mr#}d#KzwM=9n$DJ-h>_>ijr_LvrkAsaO9>p*aM#V{=T5N#1@Ij(9c|S$ z>j|u&6Fi8XLB?TsI2#wlumw}>$T_98(L|py$YyW1~X4T*}3v zO?f`Ke`A-6v;S?-qzWp7;L&3OfTrxf>+;?U|O{>4*9NY0ZqkE9drIaXS?Z zO+$XA1CQZjR-AlAoj@!dcc<}tGJ|Xd(a{`Lc*cs97vlJ9;Mz0G1^R%SqXm|Md%n;I zM_VljG<-6eS{$wjX2@bK9db&)(+4QWy!q=Aw_YJF{Gp=`1*R#}Ke7Vlg&h96+i-p7 z`MG{X+k*EOeQ?B!lKj?9i*EWiR-}C01pXP`Xd_9Rvk0PwO?2bj*&nPx#OSofz|*zx zAFb+w?QD|81v=<|Op7oE(|jPjG2wpC!I}(s5a~P9>sp^mu;TDF5tgPczl2@al4y7i ztr5%8thDoZz|8}FdD^7s$1K_V3P2T6kJ9t5hGq2!;%zIs_Uw8n0&?n8pp!JBg8ndq zoup@8e)o2On+lk8)44RT3M&*bWyM(+ZEDtyPz@rap%6_<%Kf9ddUg zRvcpAISfS#uA?mbzR(0)B_$IID64oARxn}_+PKz-KVnawRE8MP<(eDsQgqgd?L#I=gxS@j0exFbRy9fTffSdsDqxByV3yk*Z_a3o7oZ&PJZ?L<}} zUtBuJdvnX_PLFnMfOgWM9eO(Kn8XT@X9oPyG`f%J`841xC}0J_gIIC$1v-HVzI=b? z*hSFGV&pu!4pt9kMIsyt#_jI*Yc*TI&h`RgOB~4xLfFxI55L&_4%eQCwK>T^Y?Gr6 z?Y}XsIQdMPzl6)59BAJeIe`@@&!UCAG(Qr}(!NRhBMD6Loc7sRU4Y*-f-%sh{duzf zK>R(j3rAX?BQ<^B0yuWKJ&HY&Y7LHm?$GD^62AP|TgnPX7TU>PX6}u~Qzu?OOzzL=48xZaRiGT1oXUzrqPA##m0v$JL$x-s0_8J=>=`)M9Ixqy;|EJ){&=C9?i{i& zb}z6S9ABr*=jW=`Jt45#1){<2J^IjRi3V3=!j<;G+E}0_U4goRofj<@f6shH#_#T> z;Gi=KG=16~WyQ%eHqoY!$;b}fa6=HsQo#NbtZ;di0zX^%w?xn;XK-479RASr;>N^j zwII51bO7niaqegJ!O0OEPn(%PWM8<%ijt=!f!a5}r_v>f$yHXMe4Z*$DJ+|LVPt>U z_k#k#C*Zn1NLu?As7>FcxmO}P>Fo-X3ih{If%0U>ZwW`r?K!st(}illqNfdg@qz)H z!vS5ZB2uHGWQBm+0Rm5YqBOHBUD!y5g=3Hcp5U zXjQ}8wCK^UW9KXgE4qMUN#0syRA2Tq((fly|Jpo^u19>F|Md zY9W|T00>?047Feaa0*r7*32+<9uOyv#`su?LC6dBEpyZD>BONAFG$JGiczRPXpOj7GGXKiiu*wSuqj<@ zkqdB^6gXS_(V7V$JT}`axh6V8eyxpq32k=*efkiv62}b~GIWk)_)qEn_VY16O6uBL zx`%+%ZI}>*kGVcnrygzw?S8GQ`%=v#dp7dq)sO&knk~|aoDaptO+x!qcNO-k8;|0w z;AJbxt%UHjSE2|}9`Z*jNdx7A_XY*E7NVR(Q~2H>>nQ0fvI4TFxbD3{vNqhr$<(!p zo%W6f?i&Xh?oPT#F3=hX z{dMRV7N{kwaR*slN+zR%h3LA)X=3@QwqDiW>op`Dhl<#SqS~;h5LNQLRnD6YoMzp+ z`Gm73=v>(~H_$OWbsr(RPD-UTiGR4eBhEIlhwh$Z$h2Wx87xFr^iHp{^V^lViNMry zpsu6z87fFP`<_~IVAz4B@tjzVR(YG`Yi zIYo?c0KzJFFnX5hVt)hIWQ@lf2DCLKpryu@inSqH?Bb-B_p;u@5G3v3&kZOmTYX%J zu1kzmg=YxWQT!HB?ZBJ5WMw!6xt)%mtxgJ&)(+WC6()@rxcR5i!eSwoaE<#QO$#I? zLy&qB9u*L9yEPGW<~)HQ;$a)u^OWynbVG=)T8@{@@T7w*`_e+5+mSa0?-}EPLaj_^ zU1@jBWFpQl?LN=0UOI)*euFaUt(&i&GLaUz#(v|A^^?h_g-BG%^t!9Xb8*@lTuuis zBySc<1^i~1yrLtHeM>5p(iMEbCs7bBaTjv0Ca1T5?d&>q00^Iz>XzZ=-^GbbRcbNK z_V03Vd~J+=cm>_O`^>bcfPZG2je8D&mJ3b>&b)K1o`syAh8#otsiLGPeY~0y--T4N zoTSstG71ksU-@jX?$9@u5ha~FbOGyWpE=Vh0N&Id%>#N0G`@}~eIj=;%dsjt_F7e# z{Wi#lp2xMZ5d!d4s6EM(RW3UP5WX5 zc076F67}qog(pZ1S>b+;ym#vhdv(nhej4qR;k z=Bhz}9Vo;dctnstx#VXKm$#FfTG>Gtr^yG^0H_+KLAQFsn=*nr;n`w&m>74)-#)J- z8?`4O@X{T>x47?+jk~{E?CPdXOTQg0YxWBk-3YRzXrSweI)M~1B# zp}eI7lEehJ|H_s=ZNbe!;=Ghugy5Vxli;)(3Y133#K5Ywb^Sp$=I$w}yO+$Q9U~ZS z^OJ`KMd8NJaH01xOPIZD@(}EhMFHBs?3@{qT>jbvp8O;sTv%WG9anXW1>#72X+e&1 z(Hl`rkYmcY#N*x>$*2My;oh!{U_sz0JWv)(E)Y|4C)9_}_kQmMb#=t_ zkn!c79qkV*BipCx9>swWJpi=xPtM$J*XZ#xvd-Nc<+}srqO(HvKyX$l@U$%VM9E;+ z;!SRl(g;Y2X5vb?9uV4F={T9_xbV|}NDMv!U%GT16sZRSC+*g)r=6{b(KjxjpnT-GE9g#e*>b!=-^G{ zk&v5+0kk5Ij~1eccc|pyDB?L~&?CuW$ZE)-C`3&wGI){@Q4BL&5i8c)$b7jy<|#Ty z%0OKS_naz39n;h(J6}y~s7%Q(;VCW4bR%mczo0(aZ6FpirSywPL+3bIcF&A^y`=4#!O`d)N)ABnj+8Xgw@f z*BS#GAn$+Bob5iP2b$Itf^sCv^TNT*tyycyO3-(FohZ)Moz(-2++FXlz=IVFGSa0^hF61gfauuUlMp3u-MKhai*X*T-5^_VH*oV zIBH5}e_anezc5^^D(rbazb7p03nX%gz=`6l$xS_woFcK= zh)7XHhg+BJyFDIIhme?Pt0{h44>(GY!VK1L-haIqIbSRcBfEu(Y@e(m^kw19S(i{#pC3s%leCzUIOHJZQYfuYBp>@f9dmEUp3ic zPds%jIS%_qp_=cbXd(onoz?Kut>9;J2uH^yjp6q+-31OpbiEZ}(inlI)JwyasjD#7 zEta~m#J9B&U8lG>g*tm}kAKX28?>*s7a?#-8Qlom$wi1ZwXK7ne9zPq3!@<5LHN?s zq!bye(L^2MW1L(d^Lr)gU*q9cj5D4J*7iUCG`!Mha1N*7lM432$p){LKhD9X3rj_5YVFL^xDiuGj@BP+wp( zW}rHWXV;$Nq^ffsBS_Xl9-%Gs`&Lp9! z%uRs_zufkK@?)rz7W#^%ER@N}ISH>WbwVBv+aQ6G?lkUN&Ptf9?Q#--6MCio7(|)J zus(Y6eZUG9;<*|XlKIs6740uT-qEledaf3}mIWgaJ{m4nhUa4OTaSy8PlqrVemwFk z&CR0qEJz;Mr%xIQLfjm@IImX_RM8Dzdb$*`jRix9c6Hm0FW16`Qei`MAzE%b3+(_I zb}Ojxp0K#6Ov_pRngvmP#<~+-#oO*=fpY7ok;bTmm^rs9({?-5o@lHaI%}r0AP|SZ zbu-ut!D+cul1uc)p%O`d%+4I4i@Zn`=8Vhm@VWAONg0LSM3$GftHS-L?@e# zCt1))=T)kNUW7mv-#t|EI3(tSnYeo%KlrQFc@~iDeIqeA)1ZePTuL91PVTYDK!rz# zEzKovOu53&6@4L+oRhjpWBT$;&cEN9dUy#4yI0X&aR|Q7OV}+g95*fVC!noEn;zMS zT=`Qbk<_3h@_c0yh-Y+iREscpG^qeI}~%q$sW4n-0_Z=pgZQHakyiKpZy2nJ2uK5=^b{hgI{!4rQjQVkFF zsvo=qPJsF(P^UAYV_{zEL>0-Owb74f-+EB*}6@6mw(Wj6zHpA(xEi5!+fy!P7BKyJ_ zu%z;_m-YdRoV};}AMedsu*eQ+2ADt1XWS-Qt^(=N1x~qAEHF7O9R?)FbRUHoP>vN~ zXfUp{;0agx^c09*Dg(^CBR>}I<&@joGAuCUVk-uiT|2uNwE@flaO6bUvPF3o7;kL6 z^-+Y&BjmDh2Do)=ji-~-k12qoSGD$6V1fIa^%$_y7d-1tP9Kr0sOW>eewA3T0J5DaLJUQ}j5A>_5|!Qy^vpFU=D62jOrQ{4>ov>GoK*%#xdByU4V zm3=wGZjFqO6}^xp%OFkC^~X+YUa~|1fg&dXZl1lp;3$kL1X`f?R`smUOE?0A@kOY# zBN#bf{3qwwd%l}Gt|`R-1EGwD7}bCUq6?b%VVKweh7Y32E`zgAz{Lk}LC6q4n-?1bQmq)QknmAKgoNq6o-3_rl+r zf|WA>qNitymMkFH94~?}VoH_t%FxFyut5u~NNW}ZA8DjKOuNlS1Sw%#*(I-`n&;q$ z&cex98|O({5qX~IB8}^UMxB_EjdPE$_6jgp0MiQp=6&wAXMv%@J6Pg#$$*y|M>hfn zIbuY+WK$;=9Jknbb&`n4YV_*ingWcuXob-jC!AR@0%VagF%#?5xi;Gqv{e|rDy zZdVozKcxs0l2>V#SD^*c(V+GItOE-`{-RPqA6Fh%%{&1<$WcJrA8UKEzyxX{#Qkx} zn{D6k0OSrpXkG%nSwQlIdSb_Xw$ub8 zMhcGT>Lj@n3k*CmfNay(rbs?!%B{Z9{6Fa51W2@j83wYTc>0L|Sd?0v^%wwTBOjes zJ~IIXDK%n2rPGrjtNW0W3-nIM;r5+bcyNjnlTxpbeJ|jyHc2H*T~{B`l?5SBM*P$K ztxs~7RJ|Kwe~Rk zLDqMaMcOQ0;tGvAUW0XWoU&3yDPqEb;g|h?VO>rpjpfus>*8boke7v~Tj&Ol z(sRXtuy>&^S$iUK%C6zKCsK}6_q%_E%*mBow6*SCCFzW)Pq~sN+>Y+b_HtA)YW42wadCWYa0R>RZ6uEy$vDtg+}N^G-Rz9hO?4v z1{4)jMs=66vmvGx#dRU}r;0&nM=lD{?|9mg{~)PY1ai74*tJm%!e6OKOcF(Ce$R93 zQ^@E&mQ3kvw0^S~LY}XYZhH0&LU40V*WR3xSz{5@Q60?Cq5Nl>7>rAdLM01~BBy*r z+3_iUtuHw&oCdwnrfaxe3@1n??t6FI?fp%rWEP-Lo7I>dqV%)N15p+{X2+f!0*Ho) zgmisVahDi`3r=y9JE%lK%7zy|LK+yy!3S+vKX;3PxXNNRiJ}N8PkUL|!m#FG=TAdu zKJPPPuNXqM=?XZvYrv+A@dzG`D(KECiX9N6O&W#SM=eA-NH4Op+FcBroXn(k{q=|# zO1904o2#!`xpw4aX(sxTbScp47%zm2B3|Hrojn0&OYkm)7p#|a00^MU~S?q#{zGC>a zM+M&%p`07p#0I}L%d9Zj*-#h@6?9-z-WP+&zOkvFMuvTQ0!+-#8W&Xy46J~7=!`k< zksb(Qj69ip;>vDl!3S!l_XF0!$u>bhCRz|9-*vWT3Q3f2AuBpjI=&JipB?|j=x+&f z8_*uKj~AF09)2xCKik^`6!17}TnPsZy?B9G)a#uH>6{t5NTf)e+wyh`c(D)WA@tsY z5AQ_)oc(;nB-7QzsT7&jO27i`zvI7(P}gP^F@Wb6zNkwP^S9JB(5c@<0CE-s!^twf zij;Q(YIsv+d&WYrQ5JmAt-WG}OoR^$|Dd zwTP2tL_nNyh$!2t#I$g%S*;Txpg$E=0ByB3%ZXqFCg93-SvYQ*l8T|Y51hE~5=1o) zc10Jz&nxhv5Pu_Wb+rt263*{Ma(BgoC*52_YK%gqb$9wytW49!&Bl00Gtv(KHjTFP z#zH^$CjBpG?aH>q40D^M?t=ReOF@c?NFQk&-i_g|8Mno5`gRKHoC!hDO)2v_B4o+1 zg{vULiF*$ypvRpUH{ESl^u5a;vcg69~YVkT7K)kCJo8VmF(rF3yR{l z%s_$&=gyC8OKzuqhyEJvx#snm5r|cC#)Xe30Tv)>HOMQphxTeMN?05Ac?aDyzVr}smCqkUd%DS(*jALb6Lt#s=iSp5tMNDg z03qDM&}nIJbrL1*78e_UjEkvIn6Kl(!9b6 zun-ycNz+>w486q&=iZT=ea~3V*-3<*Fz($+mq)+a`Wb>41~j_df8;NQlzU-?fR_%m z7{22Iq)zTuq$j5>1H{PZY#P+=Mb2TwN6Ni>_-Ttx$)tHz6%mI{ugYLC9GZ@2)AVoZ`ETMCQF=5_6%^bWO;VBlu zkgguyLY34*JYCo%k$K0*kF zY%Jx8N1ui}DTp(F$LQNqB+rf%A{mBT6YcQi{oh^ffmp?qsfCK_0ej|;CDXiZ_|i() zIhqYB94q;1Iac&JrBh;5=svQ$90$5}62+o1O!R$lCuGjeNkS)(Jllkr4u-g7=nv7E zwZ?cRoak7UUB_5ekRo0lhEqr~oJHg2sM&+sPBoE^`d8MSDVR*s8%antMv30D$P+F{ z0M?$ef?3m;fpTLaSQF%`(t@-TYRIog0r>^ZWCjCBCyh))PI2+ePj%ZuHWx^)SjeG! zB#q}XBjsaDNQ5`lL*`gQe0>V&s>MQPtX!^yfWF?W`ll2;whS1f)9=CMOhCB3U4gBl z+*9=KPm=~sg9Yrvm!{rmB_nl(S`nt;o)bNsaP`OzjQv!Bv0JTTqK>LZ9>X{GA!8>R z&PVBRy1Z@$*K7?F^*~jOco;jsut{_ra-vf;U6dAhVKjetJBDgv{Ee7FVe#T9mrAD{ z#(P$hGgWj=*K7w9O7=O&Fmmg9oXSZ!aJEjcv8xEIdF6Dm#_eOm((bXc`^y+^w%`kC z{;L$_Ho*ewARBv8k*4?&eX!71%-6|6A&@=Ma#qU2d0v+o;}e}h-mKVxX#^b$njO;z zxN~@p_5_%GHY76k6PSAfMqMc;8=Te$E07#jma&L+=#z?rMj(Kb17qG4;&fcT$zYT@ zD(t9I#OWtjlLLOXWIce~MdU^yPsz{+IXBEQsPcToreY*Mbq6F}vlw2`2a*BGU}EhX zwseE?RX7=^sWarLp2c_44Tj?qdNp1oZ%2xwX8j z7nJA*jMO{RR@H((ZiYY7(Z=Q>6Ou|5gHA7sY|IBDM#`|G6~PtRoa;oHiT_JxB-{Q- z9!TWjH0?rDPB%*sRMB`QTo|Sv$zmRp;3m(v?j=D z=(BAmn>Yc$6H&~W(#m*CHjsRqXc+MR%-H&+aUqGM2%L-7ODkMME0TV)nZg#4u)acz zK0fm8apbJBiMg&`GHS9xWZ$|Rfj8_pMV69maf}=yYz4|{sRYwmE7dbx7YFL2-4P2 z0KG_gwmutq7X`V{Ci{86@N8XkD&eisL4&HmX#-oLr8Kl58&051;DN&KmB!rj2l@FR zPy6-{J2vtNQYu_Ur{)%uWx{{fJ)s2|z9>-geNyci=@U2L6wR8wJx!$;`$njM7EM@V zM%qGm3cal7(>@LZo{BH6;TlcZ$fKL1l&Mjk=WZS0WTVZomftNQ{%A}-Xg0nv;`j<_ z*yOOOWiVLifiGRYB{pYcLuhGa<)tw#$+bJL3Y>1J--3<0U-sS9up+Y5!?P^XJms_b z8jPQG!D$h7ZO?|{ti8mO+ep7pD{1QrCXQCs-TW2e$VOfu@pN5~V!0L;S_v%(x;{7P zz(yQvtBM42UXXkAMc(u*-5!ET1_+&L%)HnDV4--?MkC{WfP2fpq4$S@yd&lrbd=cO z%?3gC3zAI0%|g|VTQ((vg~~{l^zOS9e>VEr`zg8C)OP*4`_lpbb*4at6c)fp98(N= zm@{rf;IYq+m!ICe2>VW3PMQt-43ILMO=qX1-T=2kBO=vF$ z;?Fa4T2J>&2X$MpK&zlc7d8YZ6-LiJW16w^{+bv#So<=%{#(B*8}ZH>dG@{2oDtN~ zMd>gX<9-VhrKR(wHye4eEPUZ|(|sgOb^!w2viuOjhTx2IKV*x#XrXF2`|-9afQo_1 z(#&iK6@|*3RSNFm{8H?-#d9Fw#dV#n%k{%W5yG;&lXgzn?}UR)O57L9sghFFXKIK? z!~(|&|K@!LM6hBYC*(Ckg_|JDt<4va1AJudobKB1iDZR~#!84CSq`Cag$i(!G8sSQ z2#Madx=i+r{{K)pW$O8L$N*B149C|oPoVg#sfHDf;!V&>YRxGhh90k^Im$MAR#vh< zD;mrZ1+*5Elcnyx#+sSJrz8M!p;(d*X9Xdtgo@?1tUJ8aDkT$3azRYP~R<=5(e!X$M|3?^v2&78DB^?Km6kmNoP z-SQ-hzm9MDCqylmLhBON7W-xn1V9SDG-SZOe}W{hk07WE%tP-?v2QpZx{QXCI#XOa z?*Au9EtdqC(@|2a2TX2bjO*y@>e`NX`aj`OEOO7qlpX5qIRngcwROe%^Ta=4YIziD zBCIKG60{5AB=OIY5^L*=`a){a1k>@;DOKJe1{_Ds3!ui>za8;}Ht(Rp;!C=8=1!oLqSjE*<{&tZ^?K?piw#n^|_ z0oxuL=tMy`xcSe}xoa6(0}z6LSaeUn@!el^_3~=sB?5vBk&oV2m2L zH_gA6BL?>@CRyntxQYp!&;ap2Xz;ZZitiRt-qS=4mk;U#gM$$qsr`eG_nk#alX zbA{iBx1G8lEDnHJJ5W|+^TG;or;rm;J*?3CilwnBBS_bwDx0!G z=2jRKo1AFke61P<1$IJ~{2VcnBYe};X(D&SFdYOxZ}k(kKYhY7u=_B)+}goa$c z&)C|mNI7wcQ};zu2l%FfYFltZueWZg!%9Ex(R_`v^*y4L7Bgy{9fK^;~7c zwA4zTb30ifn`NQkA^~68f{WH?#i2}Bs41IS(?x$U@5mAUjd0j=f}F64B2-SZqXOip&5pGHl2Ak@NVHw7a1zCg#+?ad9SISlX*5|((jJh&acjQ&0W8|jzd*t_ zd2iAguz4R7bY(@Fp}BC`C&tOW$g-TO(np@?$z8jIJy?G%0eB<<(-qP^oSJ0B^TZ=> za%l{CgPyyj>@~<^ODCXIC{XR~b7w};F0u&hE_&bOlGGLMi}$p3)=JeL%qY+ee}la2 zrV3fc;G;57=y+Sniy0x?7{Cl(Wzz8MRrZ=NV^kgBtN{*P=OugVheM1`07z18QU;k- zD4-a+*01Et45U3?&TnH8nU?~{8IC33h7Lbf{Fy;=mSP3ee?7LGKRH}l2E4fD`3?RW z--#K9EQ0z)?O}zqs=`_#R`!-r`KM;CIDu(;OFZR;O7Sx zIq8(PNy7@(QCl1eO-kZV7hXBKj6||NM7KJdlgJ7a5E16kv~g1bW=1u6zLi`&d<)8< ztBp~USW*6_uW$jNYW-_h-Ub!9!rUAwBTk#b3Y4p&9O((5P3`A##}7T|dRDr^yY?R| zTF#jQ0hETB>y%I7I#W3~kQCQdtpl6(ays@>gW%Q-HwRk~*R0+d5Vl#4>Cmb0<$KaL+ZI0>6L9 z#c+~mI6p}54zIgO6huoM6Kl0Bk$dy%w3X}o;ZYRH?^?R^!5h0p$xBs9abb2&r$_!3jx!BBT=&)C1NgdDQ`e67ozx$Q6Qb&hL?;rV z$x|~fl>1v;W`qd9?W)?H*N|U!PVJzE*}5_S&%k-;#{2_hJCUM-{|(}Z%u&MR|m$+L>@5!&eTx%Ul5sDe_=KKd2I zdv|Az`rVHFLWjVioUS09Z~ZeSr;SWD@x0L&g1iJlx>7c><^dxT?OsG>g2zv5wT_NI z10-jl(v{ViN1}+i%~MWZJQ~z{z7$j=(8#2t>bfjZ$`RSm$o)Olk8Q1d$6-8z`VW7L z5b+MvHhOBf?FlPP?pv6A7{$(=pB)UNYl{+rZhRDb#fm{pJNrQ`0bVY)P4M^))i=Ug z5RG&E4J%Im2b=l$@k}~7Vk-=~DvB#Qr8fA;ii0MB04L?=q-IMZS%~|0@bhP+ra)0tj=2+M?9S6RZV1;njC{^T9WIn&S zI&yOCOvIX#xJ8SWTGeu_7_Lci(pY&IOE@_AnBOGieoN@A# z@Hp@~xw^j#e28|`5|*qG%U_iRv`GL0D|?PRtoZ%@U;T^Z&{BOA@>-U_E47q*qDBenq@$41uycjw`B!$ zi|a2}D&okVJ^`fgc{QHR152G?2DGI`*Jnk7F`VNpEAwd#)PvEE2-TfKFwo2W*5 zKm=++Rcg5!k6>`u@Wm1nx_*Gnx+D8I;orPZgSN~tNh-B0HgDsLfZ%Fhn=`K}piJOH zwBRPUV}&E9Hw7TZ#!X()1147*Ms1VF4*n|PBnlxAn|+6_eyIT6p3u7oMfZ@iDBXDN zMB=e)a=VN$n_9RkagB7I^2Mc z_M+~gA!oZYLuOaJ0kZfQtdbIE66W&#;0-NCfy-IolJ4O@@??e#lxbh+^3}wK%9Kp3 zE_m~$4Y{%+uz*hQc`@U{W{@)U(CJr|^4lI*=MQX=qT~A!A7)gdPN&dNrL4c4cV5}( z;{dx97|juU=?VJN0A?U2L4H4ZSGhr3?QBVJ?*TT(?Nk_`TT-cSmUgneuX)-Ms7}1 zm~>rL(;!N!lH>B>yK)?Y92+Caq$8HOhiWp*SumEMYkhIsjD}xmtCY}oQYLhZ)g35P z{V>%`u2#;?nQE8*qqr}|Xb;$^0N3|Y&D16=RFwcLX8Am6GwyEWsrnh4coHl_e} zWeh)TuK&1e+YR)m9egA`&(XiHY8v~ZBT{wil@qFZn5~psJuw*?u+Zn6zZcf zwv55HfT~J042|35dH})*6q>yW;rnr_3GJ^nt75#ia>_0C2p`+fP6N09MAeM`T62UU zELoy8=1o!2vf~N7o}{OBCaLGOyxX9vpS}MInROHW>;r?K$=`>`s`&!7nDgN^0#$He0TZ==-W+H zb!bA}YmREV2Z}FR)z#nXjF z6%V49n*HhtaoMvvx-X@*=b`UzUm{&El`D8ekM0eyWl(O$m}At6flJ|)gC%i$UO|xM;!K{ z>QMBaIv$9wR-|2i+~HZ>Jnxzz$cGyshohcI`zje6HocQ6cmII6GF@>txCq=3U1DnU zRvnXLh%B3mx!pPDwQe@MkDxAyd=lvzCabBkDosr-=8C)M*v;pd&Uk5}utUf)MC`^I z(cSYytABab1QNvC2X4&><&AWTl*9n6Yd8?=LCGpT0_ z#O^0Uv_~krN{WR^>3$T`#H&L$LftbYN#5FLS5IkAgcEmEO5612tkA}gE3V9P2_yq^ zsi%!h^k|-xZb62Q@%6ZLpBK!4ODqJZMQi0}3aY0Ijxt&IQ2XK` z8~zrIz@HaXJ&By{0TLU!+v8MW^+diJU6cXKInqAm-?pk`KUly=cOKxJWTves}4@N*%8}N8g&GFhVu5TTAtnu5m#YiEht(Jo_gw-ocVi zGhzd~0+PXKh>Akz6ob&rQn}BbgE)&|b%3&s>!6;^mW%rsjRvD^2XN)oB5^DsWzI$r=zx5#YmFj3p&u**5t=E)SBW)$e(AsT83eGgr-=|kNTP6+&HkaYrkTy zcloxEbQ`<(T>|6aQU4RGEJ%%L^?g!2tnm^O(LmDG;p37;8W|Q6>Tau1 zSQlrZ0eUvuH|QldO}Q6KF`GS`ofo3^Ap8SX|TZxQ|+1`}+Iam&ylVi~V7Xv`-B-t7o#iSeZ^Iz{W(6L+YmGU8=R%-q}q@lSr~sb}wFt(Ib#S`~DilP=ix z-*~_$?ODqA;p^Cyc`w0Ab$!dh|Hde|>@qgZBfq=Qb8Pl^S*bT4QBTAkO_lb?G&8K; zX+*xvhARx<#Eo)Z<#r@niQjABMfOB%HTyCZAJd$<`bPT-hbRg8NnH zbp2%(+wb26a;78v=k5Q@+q^$JCyEoPCJA%t994Q{MQ_u=m(yLeMehA)<}SJz71SS2 zdo(tK8dp`gbb7_Z|4hvsNT62FcIJ!4Jur2h>I*QuxAA$BVV?fmi+Ud`5cFUCB(JgY~S+-T-QS6th6|2c#(W!TS~`7EOS?Jy^Bn!3PoO7*40I? zd7pez+fEKFc}O0U`O@{|k?s)iTJ)9rsn$P|Psuiiq7teNQ{|@?@0>I0Cc68nf~y*r zNtsP`Ez};7Y-L}&yOIW`Ro%V!F*RlvK(rugH84~1neCK`;sQ4&jQF+5xLII(ijPL% z$(fVSs!GIdwuf&hi{Xt(GQ4xLB%jh@II6h2)<4zl3A|KMcqyt{jj|`7I|w&Os#mSN zF&mz(f|x5}fT?p{oICm4_SD`!&{Ey<&-Lfe50P&)LOMtH!W_<{o?6LOtcc&xm2G8P zSlsoXVD>_aENrn!u$3%b#nht*LvUyCRm11}6)vHOtGMLS{9}uWd!UM+invZnJ}RR} zM#r(sQmxO#SvEk0MeF!Cm)3|1OP3C6AA+z^*VzU9RivU~FBp&W78DO5Nlowi#diae zJr+-ASmP?IBC*d3EEN8pS`EK5F}wY*O$Nt(*b<$duB)Po2Xo-WH=T%k^!(n%qTyf~ z0H&ryY%ASWF(n-yaks9ROCH>TF{+CEiB5Y4R8JlmZb=gN$-7|5oJ^V7K@TduIki;L zxTu1-L;Z9O3$vhd8J`D{-i6w#n0VtPrW-u7$@aUTnS_otA#``@sG@TWmR){guD->- zH+ul3NSS0NT&12WE=*r=2fvk3JXW3q_qAw%gy3aW*C)W^8>yqw8ZkfP2H*X+7w`E7 zF};MisBUNTQH4#m9w?aXq_Fm-3q!a2!2i@HV-t^>tHLTT^FPEjaQman)_oOwfp<7) z=AQz`k`n%(nEzrMf(${iL~&_$z!czC^#aJ=IXj zun(L$Qr!$hmip47r|(Z{u&twOIWpc)W7Nv1YJ}BFcNH|VF)rSTIstXksG&k)mq=np z8GBuUh&E#(gX@St_y3F=`mtfl+oTzSJrY z3@@B@1xRvWJ&8^w-1?~@u?ovORz5Cc8@(vj32sIUmS#`@=P&ahH7xdh?&^l-PtUG1 zuYh6-Ow`j!g}=@ZQ^SUH?I=; z@;jwK)DYg9YQ&2%YKY)_65SN#7sge)KOSf6(h!oH2Rouszwgg#NL5bTaYXyxrr)Xz(#k>L|L*SHq{ybf=^_-H+`= z8B@d6lzbPcVd0rBSA3~!{eC$PT{(r1rqAgU)DYRlrwPTWasGNm=EZG4-3R<-j1Ub* z_f%2XOF}BBE@YfDj_tkckGNL_l+Is`HMZVF#zn`(xSK552i6^8@MwHYj5Qevz`qLL zQeM+*>K!I1c6hCV6BmDtTc-@on7H!a_B2~?bA-<{NSx`Jq)zKauqJk}#-7zWn=jHH}`LDyZ;_q zbq}beNbACW7a+>zHoWZLoj(JpDw+z+D3b^Wm-} znAisq#q>mIi>w(=Daj-f> z;QTGby{DGSj@6k*!mU_ZYsCb(T?$MeMetjq+%#-kUxm}RI2H&ME`HpY6fKe$?U=g_eCZD8w9uqsoLbb8M<5ui_8j1Ie7Fv%3- z2HefOY8db~;VVvXLvM?4#c0d+c6xdjX+m@43Dj0=+)0YY!Xb7-TCU{bc6wXIn(0?! zq(d;$)U-mL^5LvG2lH|KQ_+w1Rt!IZZbm^z0h;L7^_30L^3b74uj#F|{KaOUf|6{L z&*yFqhvKBixX|py^qLQ*$8+%}_aIE2HAdkBp~og<*F8kbSg4@+R_ix1SnOl9911q* zh0y**GGt;oHoNYTws_)O8MO7Nz7Y2B3@t~nr#f3<=&5opd?$lN@hArMDk1L7QSHj) zMpIV-yL_Uta&x=>QHIL^gJY4-akXmP$vu9|y{?13Q`_|Utc1!1+?}e+{WoYPJBL__ zG_%$>8KC3NOf;7ZylU6I!W#ivDyOTb8~Q^A9IOfF;vIO@r&32WP=~J!Y3R_@*{#ms zMf>#@g=O*-Oz7Qys`@+3vilWzfCI# zw%tT(*>NVuKT>T^{Vl-v1U_9Tu9jXEzK=dkjQ%5A-Ie2k{sbRwy+;Nqy3>fI_|Yqe zoVx(*EoeP8eVRq=cDX`t~ zPv@^&W+}GKOGv>r^)!)Nf!GA#)C1|VNWm?S#ft@!VOiOye*u@xRH&Bp#pMQ;bjihH zv{v=@HiX8qt9PZX9)G=E_y{1EhVf8)Ovolh7dLq1(x#bMfvqo+52|=Wa!4WV4OTFl zySJ;1W*SmEi9ibGlHyx6L;?Nal=^F!$#hE+`by=NqO*Ohx=@{2?DZonYSXias@ZJ~ zw4@%MM+)tpkOp#sD zqa9IgcoQTc2T=d;1-A1SUxSZ{Ta&c7IS*$-+(WU$7xh8C0Xq}$AKcmAHvBs~FJdXg z3vO20bD)HV?HbgeAO224{8g!8vN;2As2EGZDyiRYZ(B77sLzACDWN{lDB09DPIi!r zJ6@(6rE0GQ(TfZ?%1y|cHsO=C)b!P`Jxr2>e|x#kJ2Mx@cKqY6`Dil_KBzWYXJ+Q- zWBn($sq@>$t%*bvhvTF9{t}HUR5%X7)b`g`=hF=VEDMb^O$ZNBh8Dh<)1ayUwB3MY z2X3jSYaFT!3wg*(pP4Ry*vO&)yW^Q=3Z25_@YbZ#L$8U7H|h8@z#}CGwY`RRpF?e! z&M6jX`QX9vFUPFrNxlJ>0kMj@|ZQSjH7?Oz`y19n3J9_0ur8VTc@8e4YE& z4P~p`!s_-ItOU`v4jQTglcj!K8Km7-ebF1V^B}B;x{)oDRp82f)WmMpKRyR|G>o3+ zN~xww!8>S;EP!K*ZW1S}$Hwn1kP*n)VWu>CwVB38w?{8)*1?rWg`$N!Hv{NPghVt-HJy>Ap>kIvT~v4F*$1Ndk(e|cIJGFKeCH~t;A3W%(%LRVZ4 zoZ+LI4ZSgmaQBQdg!WE6^$ceJoy(DZQAD;Cz<&(urW31EXQdq8I-~WPN-_4B375+U z0DCvEY4P;Tc`3Fv*AoMG&Jh~_0D^f9a4PP&i&9{?X0c~3Q`I~pB@jzO`zY#`zZ6l0 z0>1HY%BlQ8%ye0b>KkR~XD=gL>IY(Z9J;*7b0y@_2(7P;e>#8pt|)S-)02)38%?**f0k_yS71#>GS)U`-LVnAOU6-P>0r1hAjq&1^ zH{HCX=rXjtCR$G8Zjl>OY*LaF<9F-&yaH=`Y2efOV~Lwme2WJ_fl>^ee^zb(1VFPQ zIo)hl^p-NTO2zEGvq1lcAYmsPXrQQkTS{W7-HIDOJG6bT1;AzH4vHIjM~d4)6BVl! z<97J6C4nt{-?WAT&63|Vz!vT)M!?sChezs|Tpyl7VIm4>lZ8sNy z0#DE3nn$gBCxy1g0ts@i{5QkdtBh-qG0;&f{zZyx#gwOiA75qg+zyeR1OeS3@Z~EX zTr%StzN<*cp0wE33M3j2e|+PEVPc`P?5jt`-ti|_zKVEFV*EgGQpe?w3niNu8M`6X4L$C}KB zXv@v>RufR7d;PxT?uA*gQ4U2n>d$>jE7P$BEG33}V``KcijEw_NA1nGrZR&AojVj4 z{hy8Bj>^ej0H&=kSxXt4)$1Jig5ikSHE|fbSM)W8gXR?toA4QQNIVUu7)-HHrt#Hj zqrzSTyazyQV4#td|i=8P5IFel}Y!9}N~d$0+ZqhCydCv8#cM z25h-9^E>fdokK4tKthuEe)rGmopj*2c+N-;U|$e6p3Q8=nYbRgRJs-UoAi+7+Rw3MVeJpn`naqwGk^K4uvTZshv+RQF+&@ie z%VKeJ5YiAAgtxz~dsSs*e(h9{Jb#_n_yIBceMwiNFa(N8V9T~EIq?_HpT}DFS#o6- zw|mwPHrhsfbUcoA7Be^kvlm|Y2obI24F3LMgb&2C3b{}d=V0KkQC-B?teA;F&FawZ zo%{m={PZ!g=EQGaaQm^$e7R#5@DzsSc@eHU-PCchB6Zy^QMwRygs1CF$N8ua+?nfjtq}R8``JDPmhhECAN8 zjhVzE<4AloiP%0|5ttqQP*#((b(-%Qh<3Akj-cs@e#1v7Qm|bwTK<}c-^deF*qR5+ zsHysO7^R5o6CGoY$FvDY-UX8B)BV=t?r5wYADwb!8>0vx5QPIz%AzqZ+dX{0O*C{^ z&nj~SS%V5!7cYG)UMmU>ABB%*RZqq#H{K$1huh^6d~9%~T^R_z2aK~JNSwcI;}r?) zk8apESjn8^2*b-)8K60Pv%1==_e4da00dsGK9s-Vd-2)gE!YmcdI%X*FIP@cL`I2Q z-=Du5Dq-fC>meA_F$mw(!wmmb4X)9QN1V7quTwr{dp6O|fuKP>Op`e(kWo&GZj0B& zxY#kdE{yyaE%wjk8vl#VSBWil<+U?DF7X^HG7Dm%>KMIP5gccutkU)qpQp>6I;vPN z5cI`Ill)yv6baaEAz?BdtlsK&$4}6~wR zPp(qL^w)+)X!JT$G+$3{jd0JM9=MZoyN>0z)ne=*Hhoaeu-~@3aDx@hn_+%V)jMRP z7(B*kh>K?%UgF|~uN$to@^h_W5OcX~u4&7j%}U5Ef`bDr=+?)WWar=Wk3a15H#FT3 z9)-HD<=d5L7`myJN}{m(B@^C4Nq$NapkD1#BC=38rX^g9o$VIAg2mLAxm^3QUmo&h4rKKmADvs(KP=%u&V(8UrU;>0 z%N5JGo50Wy|3x~F`)T-+2gAX`rn`;tIe$%$D02l^IUSTzst)bXTw_aOg`onJs`61~ zDhCI<)kvvV+Uu(q?m${wYSZHqmxgKv3W-P$*Xdd%Y0{C0sJ*s%ON=Y$oU|H*n3a z+>EjHB9J!t6m|_Y`_7Aj1GS-!DuzrTOKKWR=@8zF7j;D+bybXRaov7;o!PRUA-?J; zTUk?YmQ2k`;xbzQEk-wKOi}K($#@X{CV4GC0^M1wpZ^E6Bn~4$6WhHH6^K|#L7Yhp z$vxe_1%S7}py*=8t;Z^WJ@f{Be6%5!-|8)82gb4eZxbLQTBaEBR0X)D)ef8GDo@E@ zgI{h2!*$4o#-5mG3JjqJl=zr%I*o!?j{5}KbA zb!!S=s;~<976y~qBP@&+=eg2}FIFeh1=!UI3@CMOIf|)(4+`wSqP~$|hs<0;lkp1X zXs=*Vv|#N~LIE7{7s;SlSsKRvh{;9WK_-N6rlaRYjZ`BYkC`>lu(lI2=s$XJ<0}}~ftg)p)3>?;8_UkMMzL(% zw|7stj}9c==AKYX0lH0Wbchw2E23kSHN9Fw>h6#_EfPGct$@tpEEluu>U4!!A>V+H zM!->Zl`t(zf>%iOCU*U$z(CVpG_GbFNY_EyjmWq*tEWW3$^|}g+R#`mh+FT3lR4b; z8QP@o4W?8uCYtG=tFORhP50TDa)nfKPM7FIX!{hP(_C|ALj`2dc(YclE8nwrTUI>} z?k^ePD*erk6o9QwR#L_#D=M_S4zqbZ0D5Xj+E; zIYfcVpIz9CO|IN7)XKEt?H)A00fwU-8T^*v3b>XVxVfP3ZZ0l835~_G5iYjYEkXg5 zJyIdIwQGB3FJ}v^T70yC>m98CY~5+tT4%y>ZGj=QDOA?LoR20+M0C?Dp!<7xaV4>K z(Y&_oVxzQ}WKq|=*PsB|TGKyX*?12PTo#0#Xl}idNMwRhfxw!PNhMOzt<&>TX#O&| zADVu&Fe#v0?!!P0Lv+`9-Q#B-w+D25lBDuztOB$%sg!I<9W%IM-jfgtt3uJ8Dg)xg z`1UD?v$`Xd&#|F5OHT*MReUt4tc@3wSl20}!22E?8mI&4fF!`P`-_3C@k9#Tb=cm6 zO8^=Uu~3)Qb$}Q+saU+CaN;gZN|m`x#&=Pmnv0Ld@`! zj9OLIL1JWkCsb7LI{lKd!dxh4IF!>xdFF`;boSC3+l_6Ea#Y#`?q>V00W11IHb3K| z#g_pK)sfJGo`9zQ)wJzifMO9woYDj>Qb*Gv+QS&G)SL3LZL6fh+;b=9p41dpEf&*Q zdLS=`&AeI9e;w0S_#j%hNWDr7+)Ee5E_twN6T2?}kwr8Cz32aULk3WM$4B$q+^f}6 zSf(qnA(7bmDPfuxv$qtxa3c`PMQvit8bzkIMhWucg9(TA80KH`(a`wsT18~5N0Oj7 zKH54RJ8?7??WX8^*D0dg(tff0r+utGF%sytkuy*g?Xf`--P(4?J_Jc8hL&v+dlxi+ zCebAKO^P(WMnkl}#*E7#O%jTB1#{PJ28tR;A!u#bv_+A^>b@0pwf*^$b4!4M-K0W` zF?qHsGT2whB|YeWe*BJmX#KEEuGNy6+Z6HH_Rg57cnN&UH0i!(MDxGlqowUDI~Cz= z*33-J(-5YUj>M+)xBOm!WEuvW)*@T&RwS~A3KoSVow;6pW$HQLSPywozcGKWB8P93 zHcp4am~~7PMtxnUI-}}=X;KosTD)J8NfpDviC3~@2LpQ=lcstN4=OU?Dq4w{7Ij-R zf)%#em{X^>;*cVAut9|^x!0}ui|kIYPJPV$+j28 z7yA7+!Vg=Cp(?ccq#{WhgUr(2FMTyO3eba-M7R5=6rrtRlBkh!w>bqX$`yfiQJ=d0 zv`Tb8ZwdY!VY5uWp0`${dq3= zB;48T!oxwkBQOHP@KG(&UKCR}=Tep%pRq+-n%w_d@A$3XK%j@fXg$5gUusCC;BVJv ziJk}{{f5MzmQlPeiNP&9zwMhxxRO~mC1A-cG`bQRP2+y~t76<3qoJ>ko!!J18_OS( zgNu_Nd{4zTZm}_CQ8e^o1_Qrg<+W z3X0chDZqeZmR$HI{t<1WG2{#J(G;ZK7csm&6O@LIRNWd3Vp~9>F%q=s z!Ty#_nPE)u?$Hi24_wQs~IbwJJ zV~NLFE9S3J4-3w7_%&uI&u64?IYR$BO)l%+4=yxU#{DntO}`z2ID%m;3pqP~?p`u5 z*}C6`?9XRxfFZppBx){wvM}#KD z>u1DW{YV~w8vv!~X#H22l=V~mbD7cJ{g5;@zRbO(_|A6QSh%9j*f{SbZ#eeL#ax~H z?Qk)CXp{!W9z)sgeVh)ob;hdMGO~*10rM+CPWzA}(nvB{pA0f}J-g*QH6aXk|1`U6 z04^V|Oh)?Tt&P%#i!O(~7M|naNhm-MES%9m|8}4%9%px?Jd5XQvl^iYg)v%G5y}r0 z^N@bX#%B7W0h>ny`bt69JmS-^r0`*e=o&pktP9lc-fjJB*mz`X)>|K!=r;)dr+seM z%`11uCS{0a4=veHg&PDs7UsOW3Nm453upm*)5N5ZL>BS_wr`i(%@;u$`3k%4%Gx|h z0a#|t9aENhmIJyHiuoRO76~(x!p2y3y!4DQ7#xzY+E@Vo3)h-Ihn!qo1v+0Hg+S`u z3eHZ7PvpVH>(M;)<^&jQbrfof6K6SVUQ#@hCa#9Nw-IN_`I{CR>9T*G29%T-F*-wu zS(y~gu3c!Q{Rky)2-6AfGx)Vu9e)k5$w;0WG63ZTLacgK|RdayAcvAxTSjRU!O{a1GXQ&a`>D-?K&we ziWKaP1+E5^GTjdC1*9?fXj@CHR{+(UaZ*xH_^5OGWzU{~G~p|Q&-uG0f%U^;knlF` zdmXm7^#P6-KHAdB8&tKFue5h7{j+=mApgQg6Zy&;rLah;L)ke_J(l5+KT2)`F4*yD zTU^@fHU%Foa1`7mrSOWtE4ZN$3O|E7H(D#yibWoE3taTQ|Pf>op0 z0}w%Qx%B|<{AJ!EZmcFu6T{Z_V9X9B_OSjpE=%Qnf7}=hM}`|)T&h+ZepAI_zi>@P z(k*4<34JoSxjlk+qm}5XJ5-U_j9kWXVNJ7c1(CXCEAHy^!Vii$ASO0{HEGSVfO_WV z<G;WK=63GU_}QtbA6ZCs2-&nD#-kBSY}TBGnZ?UgaL%O1ywFGM%WJBJ&8-8d$t zv5x_Fgd5gN=Q9APX@E+rFJJzYqS_=PkKZNB#U2}q79PY`8K3ia@uU>po{S0I%*48L zU$J)zyCKBV5WfDD7}@d!U}EJLUT@oPQoy0~kV_~ys9a8*RmQiuav}Pi?ALm-XRs!>Mz;_=ieZ>pb_$_XKuhJ*o-4ysgB6m*7hBkct%&TyN3Ci6M==Rh2a7G1LJHTK{KjYP zQVbK2B8Yx8`1SY%R4hx_9~{7+?3DpMu3z!P|JZiPYxxnR!mUrW2BM*>lQi~X`rIN| zBvb4;lPWrRFm7Xe&mB0wJj}i(ruZ~2t;irmZDBUYw6NTh$Zu+ydLum}p&KppyMmU= zCI)5a1oUA62EjAEL+9^la~`0T07^5~zw-z|QCPz>4_dSJc}u3%Tq&eGmixkKgtwo9 zT~na!MTFS?+Ay7lEl+YGUl$wjH5CN=3oM)_64l*>kSd;fsMzz-{Pu{(xihB6VOs!O+S=Rs_y4{d3f2X)ZYqKTjkvI(mN!mW z-7rQQR;LzM4c0_7YCRI&zk;s}KIgBZmjtw*27^+HHi>_f(U5k%uRtj$kq@pXB z+;4n;R*hq?2+-Aw%Q9SFgAwj%Naq?e9{EaI9;l5r z^wlt@3;mVcf7R*VG3F+S8P^dosE4@iCxN%L*OtjJBjJwYv}JYr|A1|*Kn1Ika}e=Y ze6R%DzH}s(Nt)a%-wy*YuK#k0LFYP2fGvQmB>VD`51fL+-jug5TPp4@W8`@SZ1{ul7EQMzdu{st&LADuc4A2w!_o_gL6?7)Fj2 zlW0)NdO#g6cjVH!A1l)oMw}N5TU03?%3z&NSv-8kfWae5K@uyI_=us0r7c$Q@~`H< z*g6YRIE#-O#+M^p+z5>+!reC(*H7{*sf(WXGY$e+(lp}UQ8A!myxY1V?d_IO-M^8c z(Zz!8e~4l2+KaG{4Iv13Ezo*2Ui`pR#Ncg9%Om17$4rT)0J@W69tO)E#^P#)=~>sc z-O%)tD239s)cY62kp8j8=vZUTo;7PIw)wz=ZYdr@<@#U%sl!-&MNEM6r-o?BKCTg) zzMD6p*|*@~X(iz1T`_8qE=IAv8$IKjcx1rNl(MdOraXQqMrN=WL9U234|-iX0_(Vj z_R?)s170a2S}p^%Y6utnmhoWcJ}|p#NfM#?|BAuABDA;{DK=VB8q1b`_I;0bU&6ME z(l8w7FZ!Jr-fDq-@AfR;u0Poh^J8$wv{te8vl!7PU&U)!e+!*?$qZ2}gI-Ws5Be%b z_cDgotP!dxj8<=A*F1r&V{^Hhd7IREc=P56=8o)Ujv@};#=_BiMV@Mt@*Zyrp&vzt zNGq5N(}{U(Te7`%;g*|&61&>U#%Qij;<7z6i#Y;}I=t11rJx|4p8tMg>iWf} zd;)HH;L_kVJ&PDuQ6%#RrD#M1gmpSg6eI~si#^ERqE zQMtto_Q7QblNp5|RTv#!Ex0_Cp1mYS1KG#CVsHsynYk5qwF6)YSP`8>^vN#x87 z?B6S4JPY=#nL6Tg{?3--;>W2e8PqAKul5*{e}I1DU;wyGI z(FkOyuLPS|*nEjhPuQ~2fN92WFiYC#A|6WUK@lif@?o1b`XiSq6NC&YQ)Rx_N(q)} z1|QXT@u5tu;FESDL8EhmwH=jE9kGB9UDj{LUG^B`SLCX+!GT?rpvC%DFU#e{zG&>n zQm%e)l|~U2`z!D`0Kd8K1CK`xfsvF(;y|5I^GGFNyHc^QQ?-*P_sR97#5H z8)fxM_`u~i`f|!L4`#v_{hB1REH^+2)UxNq_5=XeZA7-cz4ikXc^ediPHzhiQUdoj z#0sak+sa*U$F76uh3tm94Bc2I+(eS*OJv)^XOFT#KPnb+we3+8)q;z)Z_<;(LlfYT z{GiZOr(exbLT9V`{5ID(-ehDW2*i-hb;0-LLN2Oh6BVu}42?Bneb?-6FW9h~EiD)J zaL03Fxs*kx!cDU!Dw_Yq;My7go-*6I7|1e><<4l;Ld1ZS5DUYf4srrWQI(^u158?1|#j>{kS zKbh{KHx&^SJ)FJ5U#kwNB59B9@t9j{!x)nx)-2!9;G28P(tPO83i#RDgzob}Rdf#d zF(1HHhT=QY?`1bw&VoAAgx-8q6@`7MEHwjdn8Y&c%_;DrA~YghplffY98*Q*k1I3n zH&pR`<>=@w)n7qS_b@*0L|{d)sG{(|vs}7RKKS|d2lM@e(U^@KfF8Z*eN`QJhzV1Y zP_thc4iigMdG((S*F8iJ79*jf23qT;IwDIitWlOb>e=gNjsFJu3<8T6k<-9Csu&!4 z?9ec|CfCWlJasn6PKPehT}w~zsv>L|*4wIDwtZLpA$l`3bB;D}JnN7=&>{NifhrpN zP9PNP?3%_E;J#z4M@>V2ia{4>fAT$5MPyYp>kwJ4)Z@~u`*Uj609fV%l$0nxwX%?%g<;JvEhuG3(c`N>S&@326Kc`RC6EGf5Coe9D9?X5z)GlA63ziYw2W5 zX6N3IK6)7pvG8m(K(GIzj!7X9+&dcFuMGBw%pULRXdZr5MPOBCz7|*WNpWg2TK@oF zJtC)wJb8JuW`4%UmXIXwIOW0)Yi|Sn7-U3~u^xF@(&W(AJZYl;T^0}ggphH@;< zr;5YrUW`V;&EV^wH_p)qePH*rHYL(}m0uM{q9rVAY?cV^^qP)KnwQ6a7le8sIt)Rj zic&mKNnyzoSp7$I>tKb~MN0HV&bFzW>sXDep{f^N@uBQ4YBO$If;M8EzqjnDOo^KX zrXGdBqA*^xM|w|nbcz<-^J2>ZKSA?+QD$idD(7#OmnsT-!t2lmnHIbp5nSdlzZKilvybAU^eIKYYBRB<@%iQMbU^-)-R8VOtBNcT`x?Z%Mv7NG{t>x~+jD##_?*9cy;Q+l$BPj-WGIP~ zZmEWhW*4=cfYWW}gLu*6*w#OiPdfRr1A5z0lp5}PA6iqCROm3=%*sXygvQbl;#l9OAHE~Q#_AVMdUgZ z!5R~P>ALRl3j;QQX%Ku6&B_<_Q^n*Qe#xLOjxfIMgZWVtSPd;>ZHZUKV)w7I!9V=_ z=#TZ$l_eM<8fM3h;*x|KqM{JN-P^O1ZNUasUDSuSHDc=<{>hCK2Rh$#%iO|Kcpvi7OK&&3!7-O;?z+XN%s44Quu-cGWY^t_a-LC{t9|x_ zI(@+~&?UMdGo{Er`q*f3gLAFwykr<8QVkNJwW<7bq_9C)^}|b|@K0iUo4K}0LC>PY9Jbr(xXY$9sIZe-F#NhNi# z#r|0Kz$!GQ|#u-YS{ z9M@WPWlK$;2f6qbb~UD{E2Yp5L&Xqtkx$(|{nsK$q$|*=s~NjNii|Bp;Za(%L9a+* z(7OAx`_#@M*3iv<6E;gJ*ghAFUYZ1rAF=aN=t-bXgIK7`FS1pNYO@6adL{C4 zV|LBiYdD}Xi3|(%_rp>WFGH-rr2Ll6$g06Q=low>qsY@EQb@a}>ti(meGx04GzY7f zRSL~E+29%k~5DY8?s9m8sSJQh1e zxI>#|-LTASkoR;)R4WBK=dZ7~l*%iXuPbksdjHI}`OblW%u~gwNYozdPaQ7ab1TdP+(m7n}4+C%90{&iv zWa@AAVN!f%{cK7h&V0O6jjyxiI&QoZ^9P^cE!94o+UVb0?qv^%r z!RQosok@!C)SEV%zPfNrl~)imo>w}S@B_Me1TL6P=qB`)ayUlUnpsF3@v-&ein44x z2+o+EmwO&3rLY@U5SynU)73;-swSfK);z{dCE7qqPpwShl6>vxFXe%cw@lNm$%ZCM zWSlwnbh*-C2VZQgDZQ%jYha zn{Ka{9*y6DLG?+b-8hAHFCmw(FkD(!y7x@VV%Jnl>Y$W_PktYHFb!1oZ_GvL*l&Iz zWw9H9Y=_mmQyr&tgDq?Z0iC$!ekTQYtrMUZ+>zKkd28wA0MA#{HO`#-ASG}p7fbZ* zUExy9YTYpBO6XN}3UNLmh9Yx&qU6a z=(o3ul)yGM#MSYk27MTgCu1puYg*Ozj%)r3=n+GXRqLjTtxRi-xZZz~0S``Vvlh9pXv-$i`f+zC#(JP2qtV^aqO z4$BHSQ=S@J?b+@gvhx9?lN*ki2E@=1DYD%^D7obIqyHK31{QV=`a_$Z5GEyHwk3^& z!!kWP&T>wF%y{V%%lil^vQvHR8^^>eM1==;?7&v(DkEW}*+{0|DoMn4HR|I2**O93 z2jNrauqavzo;ae|lPd1;zAEAK@-`T{VQNj4KX;6j!CPwz)xz&!kEP7GCjWJF`lK2bcB{Re9Tf3#9MD&FWG&u%WnKg(*>|il7z?A zu~KNuy%(|iFsWcHYxQ)7eE21))h)S4Rw%;yXuLq1w5s{OpQ*A)`qcYU+yS50f(3q@y_4 zeews-uY@jyBoWc>;Zg!;7a${X{j>4ChQZm;_#)t-NpAB|Qhb*+UxihQu;16c?u0Jn z%I7)~dqzuXY+9wfn)+*-*~O2;tM;$pYH%(HL&ew*#_I|lSJiF`7~;ItH3 z9LP_Xp3`(TAm<{Gdk{$9vrVRwbgtp!Sz#%W z501&R^ETpDz^4sH4>$to<>{r3vVCy{xHx22Z; z^9Cc(0M3Udghhv7hjdf4X5C7!Kuf?Lx;!QU=$oUz9R5zuN8fG!VQ* zwnHlpdJidq(~uqOr6P_r|LWtvLy1_vj8rYrPwOk?Q0F3QzG_&hFQ8jtT1|)fAWp+@ zZrBR7ZRK}%!9m2G_*O_8_@y^m{WCtAXU=XZC9voYE@XCdOYQ5LJA9RcTTq3E$lC4xdbJHyr6BB;?rkV*mbN*uy4aLn7Fj$8U9T7o zAQV!O7%hJ7A@)u9| zE_eeuzd|37u_gL7-z~*fY;~4lEef&6)vh7cp^4!1JyK-*lt|p@zBj66U|0EmN24nw zYBCh)pcL8@XB)zV&(3(}Y!c}M$UiZbRL;{5NnssYD6apR-tVvT1GpnlvY?K=))6VT zb)`vXGU#!io{qm4^wS~D0e>{y4dQmO(PL8ZM2WFtyw3FRt6iVK@diZH&3pbSC82&s zQE!5JtbSD*9r4TQsy9ndNO^EP6x-u$&vbKBw6Tlw4zGnlXa!@UuCnA=DYRvuWowPX zHp^qDe>bvMEh?e)6n^V@DZE2}5UIo}6jJl)yE%W-2I~L3!&;p+?+nVtw+9YeP3@++WZa3NjlXog=5pCdHcqKMa)Kz8V~9i&8+F8b{ccC#ZqMTC2AUR= zVkeS|ppw>pRo(3$p!>f-?4J0i^Y^->6xu$h*5r1;JOcc`pr^48?{=+n6{$@&GGv8jY&no2qB z5|WzQ;F@LXcZK{oA`cfFQ1Dxs<~x z8@tY`SZ~RZ`t0S`@Zm4Zxvr(<@RPDxG>L21H|I6V5`+cC2arGYsObS z=+*HF1d6#-3^^oE_dSH=`s5-bU`}kt4 z=`)bwQm5LbmlVFEHY&~miqDTU>-2~Ct(bM6$Yw1P#1PlyO~T*t;qk)7jeX}L*ICP{a&+?@~z zel=Q8@tY2m;ycC_Vwae1?EV<4+G1y^T~UWVo|R-Y?Kt4ky=iclGtOT;-b@@meHdMKvZnI zHx<>RX;KEK0W)oqDr=UL`HFtPP&6p$>OI3|$T<*l^;T@rIqy;#e%j3L@P30_j=Hw( zbEVjh4ZzWY%sHECL9NFDJs8RAVsz;o$zOnm%f%i>4Da!fxoBg#c@len8Hmf zqO2;q)Gu99U`*%3y6Cu;S|Me!YmSQPz|mUehOj5&E+OzzH#asx%HirImF-!C9|$;lf@tnGFMt}uQUt&$d6H>L15~7DN8_<#@q|*-`uv(KDfAaag4xB zBvy3q$B<1@R7dDid0o$m=>fMkp!rQP3^ajGzg0@)6BiSu3)RUFIlFDyQ*j$&89N(D zQ=dFLr06QnnY5X>>mEb#;-&4)E$%o^Ngwm;5C~`;K3c%)zE4J?c%RV@&jQ*saGO4;^p^v; z^H+Pn3|RU=*p~2A7oI`nIpHrWIuY^Lq$4s=_UepG3cY>4?7t3NPuLJmNG=>xi7Puq zn8~|#+BATl2zg+UFVQc{Ng2FzByEisW#NZH{%TeW;2Tlptda;GN!)1}feHl~v1gfE zGqn8#G6m`;Q(lxoJKL@#{Ox{qHn7#E=3psH8o%t4j6pV_-Sp$8z6aJ;*ge(0e=f@~ zr9N?D+1X3F0JJAQI@hUll?$rT>kZazu_pHpIupBc6^TbM9;QSEhHH+`F5i503Gj!| zZtBe6C{uW9%^EK1&kY}4Ua-{cZRYs?YuiY_W5Z|sAb@FaoIy3$Te{1tXf z42%6f{($F7V&|d@iyNV$l@XRwh9Ew9Bu2DeOfG=DJh}9oE{FoP&`_!oac{+t)(1D* zn{`qARBrM5qQO7l?B2l~9GfpIC6ijZtW(5%Q$5WMGOyycGt^FnQ|2*%m6i z7$*dNap>+5w)v|J(m@)=3sucwaiaD4khE#C9 zKmY9Si(xtc{vC3D3eBMEd$yVwwJk1_HlXobi)i+0j-GG2H)@I@6-~G2hO2wFA>eh! z?gtt(Hr5iu2F1o8XB1tUHuI;?RhX7VV(h3J+u1;ZX*-x46mK$XqXUeF7_HG9&y_`~ zn%TaVhpOdBvfMwVv6w(-x#>+4bKZS@IsYgfhCAzE9@giZ*T5Zj|-RHEo>`W6#ocFc%Vc-4?i(n z2dw4y;)}N1o{?!c0H!5CX=r}bQVf{L=7J2p%nrNbws~;tm*bCP^je_OUougPQ9f)X zrtmO@>U3PZAFmHLT!!Xug$$^%qj}D~5D6y7^KzSfF5QSL_uv|1G4-G$HZN2R9|V_UM)jW$>6K}77)C4vwh>12-ly1;*@Mb0gXcny~jWLJ;t(GM}yJhy7P@)7}?)u!WDZ{iFF|rq;C30Rw zdT#&opN`3r5=NC4v5dyC41L9*?14O41g#h{6Xt)o`cTRvvBs~uk41fHP;46dY8zW8g&JTV13tR;|cnIGHU z!qncBaE&+B7K`z)T7$cCMBdvy!?K*|(Z-W-iL@LQw@QquJSVx{>W_kb;A|El+oG}Y z%33jQkl7H^k7f5<+Z{Bx&70f6%!@TQnj6gDD8Y=z^CwEvhP1~Q=9-Iv`G}7;_wsLI zXore%n|pj>3-=h{O~psO*U_zFOnZXQh4eR^n9>yvSOkFViRTPMV46{{egr@Hu}YcgfM6z_2-X zCkFx%j5(a2JfHu0*P`D5-V4I1<0Qdf@w??bxC_zH&$*Sz(kZ_ARnC^Bd}ZLDg$mO3 zgeiOE9L~Nt@)Nd(s*U4k6iX^2rKSdD=NEBPGo7lXDq+{`_Aq1Tn^_vIG5{K zO#DL*>tQVd;&l+mXtO~PjCpo*%YCetmI7KuUCNwOavpE3Cd|?WuJV`7)VcmZ;4Z{R z<$vO|9M{=whx~2N9&(AYG~4#=UJp z7EM+RGgg$;BEIMLboIywu1Z0fH28Mfz2Bz|_0Y~vuvMxQ@sFjD$VQl;QOV*e#gn3~ z8n!^%+q9UgTgmW`6xUDR*U+0KeO%Zx{|+ke_h<^Cn=4ZILbKh)#^(+0eL56WB># zj3~9jjQJIT1GOeY6mm|kx}@3Ms?U2!^%~p!MTjh~M`Ebe2&PO0v=uISXG9B8 z4W|jSucrvpGv2HXvb2-i%noMY&i&Fbi3CIv+WWC>M5t`!1CfUb%y;C1QCZoQYZKsc=#Gvb0b)qAIZEq; zEMBAc)|fSIW6iAPmSN+HID75~^V#mlwa_ox?rlLL65ps;Q-ruOvAXQBPX9ufc3!fJJnSN&o{E=mkKs)0R;9@XP}Rip>@Qa1X_RW#Nmpdxo*jek&x_lXhkVU z``90udy7ylri;fCxPUVa*$1q`|NRX<+RVGrB0x4=a-a2Z*1@f;fc7)&p(<;g<9Ayx zLbW^_hUur(+Qd3Lp`=^i&hRwjFg2kSgsgo;*cMMC@m^1+_t2I-?+1&ZEzK2;*qmWkGQ5L4hXItzw&ZXbpu@ndhQQT^ zXQM9sat*j{h`V%lZyF)OZjBX-#7;+P{Mt0VGO{RiV<&iM9c0sJ5eK3<5*i%{4@|e09bog}2gtu^)>CDy2;Czl2Dgzimu4|OemXVrQNV(OXg1qAMP22X@giWa zD1%8Wc9p@kB1{W&KrK4B2Do`Yiy+xvJs<3WVTBs50KCiOPB|M+@-=`dIuWqc?VMOIg0u)i664dRKKJV{2)!vWRy4(J zu}Or9Emj>3#@-quyNQ4wdLkbbh#L)&uEa-St85j)+C*yG^uX1uFV)BRv)kTpB(Z>u z+eEM|$?=S3x8!mmA6M+WiXE!?0OyFrG0`u22Zc08=!{{wB+DG{9upga&AcX{>f+pk zjXIW+4Uy4J~8oE}g5C*{zNsz`_<}VPjJOZa>~ne|%v{C!Ai`;`(e?@4d;V zv3WcG;GTXlvUYup!X4;g@k9c{<-GZdkeO&Wu6%HBiT{zvXQIc8*5!e;wTP>?_)&m^ z)*NWE&8wr&T}iN~>@=I`Tbu*O9J_$L3}igdeDLcX=z{L`$1&u3iXbDYPbft?EP*!cRTLK!FKH0VkB05 zV7nZR*eB-^$|?g~nYgDNcDO$XVjvSb8@k$3M$%f-Ul$c`@d;sVVxvV1N+%C^hp$H( z_@$|9VQO=0DZJ%bwqSO@zTmi#XX78!dcd67E>$Y|otg9{gl9+W8qeH6cl2n_;vfgBqpX zweF*lDJ?sc>p{8@HcpWsQR@ToR=Z7wJK~@&HY9ULq*Jc8Q_|&hbKBL|b<+NRLUQQ% zq3qhQCOao$f~hI$Y9L(~D5BdJoJ{sKa?B{?o`@$hzTP`Hfms?+3gtP6Bb^WlyN7VDw0S+b$I@}I_uiawORQ&(9 z2mh+9w4(IS)R1gd`^IF$(tOT8@O%W@k_@xjp2Y>VR@wt zK^=3RgUZ}(B7@{Ynga%e9RXAf8VVap^vidd1Ifg|Zk*#{g{5E7;R-y*7q}*>L*=h< zuq?TB8%;FoO#ueXyZKYJx}E$EuSc^CXdvx#`|BJ~)Ku5Pp(nau1>G+}V2j@5z$%SQm*eRk#{gzHKHBkfZr$l5e0 z7<(DD!W?#Gv)riz(x7#iPnIGroOFi+$z` z4(?ySS0o;dV|#?C7JYrp!L&Fa6IOhsV{>k3iSV@mWG6Ey=$}tGpox!6;)+7Sag^^h z65Lk<)B~W@g`9Y*1ZsD3VK4yx%(U`E@BVD6m$b)Q#3 zzjnM3AX>5~Zu9Eid6IoGk}_X}=E?+Y&1(*r?Qn~lTxnZe{@ABL{0MPYA;>G-Ju%HX~8@}TF7;i;%l%_)jn>yX;Mx~Nct zdvvI~KE&*f=_+;)xVH&0D=iI#g$|BA4KXZ$7-)guekuiM#g&1N&0Cdt0PH!yrn950 zX}H*CO}M+Chu)x%k2b`bf;H?mJTvam6_`Y(4h3U(0(&zO02&X1(hBi`3cn~?(K*)N zqsIp{IUA(?f2Casc$7ubMwWXyL{1GPA>3C6L_iP;AqNDKKoY_&WRm$ZnJ~;GGZ`3& ziGgSgh=5V9pWDD1E(KWxK@eFG5CK_W;a@pK6mUgW?$c%8nj@1M`aAgldF&_isPn$n z-PP6I)z#I!IZ|rKLdKBA!o%Py;{M}}f%j+|u^!^`xn^@sS!|%vv?x?ztF39a1Ar7L z#dWQ1ZCOBXU=V@Ia%^KI$Y`@w=4#f!j~u&aqb&zD_3!nXO_dNSSpc153B}xVDsp5~h}jMu z73}LFe7o9Q7Bogqhl&oryM}_AX{W<&YhsWhn(}xbIA>DANC>(33Ds;JEDH-6X_67v z`f88*1DpUm58p&fR_h}z6anQj3w6v--bB4kb1Pr{EoiL-=+Skdka?9t!YG5oT9^&K zK#6Xvgh>NZe(>x#VQlaiRi@)D9(bD4UWh8$Y*w2t*&;c!5RU6IcVw89XTt`Um;QVQ zEOhym&j9;6D6pW<;;lK+q^-*MQ&&Yl907bA3daxV|>4KB4h#x=xK~l$R1uw@7I=eR@t3 zjz!cOs?N4`7f`FKFiZm(;lrM4gt&&71rNLAtzwd-x20tutdj0i7WbzM#ieF<(cugw}uKsAKP?zg98rVKaA-Qik1n)Dn3I$BG+d^O5q$=r@tQ#)_&$7G zhL}sEwJzRq=u#0tW8qBX(WU<}iGj1qCu&;rxe_zU1+erhIFa%bq&^1w%srJCCTa#3 zD(-+0J7X6B`Oi-%Q&5%|*(@3LX;XBuu0PxYD@`xw|I%UaWsK;T5R$+r=^&d1qNnNO zjJwrz6p!Gn>%XhZc4(l|*x_%*cNw!BT1!WHyu*7;6|<18Y6Pz{_gE-JNzTOF&$o0h z=E{R>?~Rh!<7soM!^_dqU-<3Q#Q0>TGzx!t-thljf|kLf+kWoDzswMWYZrW6TASpz zflc__HMwl27+d?2BI(LsO1<_Uzh2gL7Gxl9oBF~xtXN3lG4d~5wWwP)o zWm}ekfo^<8`}JX@8FcY3l#KS^&g)7=GS&iQrkrcni#f|D{>k_N|_kRTqu z8)ce|+|~Ul1h^$u`>j~jisy=HDkz#z1-^|Bji#yR98iN9qWyi2n4BCFsdfx}uFK&n zbOd-2XssDqjd>i+fkQu?7RbFDdz_|wpIcy}x!-Q}d;w&FLvl#5R-^kei_9ke+I4f! zBG}@Qu*KX7>ii#$Y1TWCVL`I#hF~g$PYOq3uB3&+w%mEC@MZF?Zb#wky5!|Duo5M0 zuo528R$-K?1NXzkYEYz5?)9CY}&SZY9nl{s#CfhUIhH3C_H{{{D*4ziIQ1@@fQcn#IdS=%dsQK&AOCCJeakUz_H#x8g zY3`;Fg|LM-d^2WT2*jrsvikV?7~f1~Y77-xNW;y7kc1Vt-URM$lnyAq&+Rp8OiF!R z^TCJrMg#0M6h1E=TdRg!p$5X%X}Wc3|KEW79a@OTeZRd<2HObj*U=F0hM(ZE!W^08 zH49UIoA@i>DXTPB|KsbG;IV$DLFJu7q-PqDjl%Ers;+K2nv2X5=ehf-7M=?D2*tF}gez>e_BYzM zd;#^La0@=S@7t_}$6&JIh(s6Z`cr{a$&5^1R)0`B_*Pf*U%Vu3`TuYVE2vN0c62z% z7J+O48q@b_v+b$LJPPOvG>Ai%Ah{^{(*fBdX#9VM!jTjA~U&9UR$^6c2p!6YQp{hH}`5_p}Hub?{J2UnF;ihDEx5l z&tE?ky5bCfL`wLKywpjk12=9D&Yj$h7GU*2xw+4beq< zz6`Ra3dhPnmyExE1yv}0*8gPW#ba7IA~K}333kUsM2UFmWR1`8f`BRc=#?)~_;zXL zKeY0BNff((UegwhF2Q2o!QnS2%08u)C@M#9^peTesMow!1++r?2(8GM7`wmMN(7xS z!ZmDH4iK1ct{XiHRr)O#YU+~Qdel+y6625SW_!2v9K3R~PjcGwYdul5%^>8)uH>c) z8D&CH+mk*YRu;1m@ISy!$>)Q1w^iUhYuh-zMUS@@gxVJR?z&CKf!-Z{D=vKCU2W(H zT}+Fyq+5mXm1D9W(Gw&o5T0*ghThi(uaG2Sm~pkU7sljAFf&~CHy)~hYl%0_tDSl2 zD)jU{^ebONH+ifE@3H(|+ahe6cFWowvH|-F#$LE@Jm6az!f;*Lpgj>L<-2(A6ccNm zEZHc}HYLBUpg>B?!1bNGl^q4$ee`r7ql^5L3?2Dag`!7a3@Us8i~!)ZWmw~@$zYL_ z$aNhyT`v<6lhNS*@q+*yitY?ypdVM40rf5yghKu>{>tRBFgLd`z1C-V`)dIY9)y=N zJG&hip-#JD=-_86H>}jKQVm46bZby6dFABcE9u0s5em#mg->cd{2VLsoX{-Xrtte& zNzq&J2k}4eM|rNok6<63qgv=ENEueE`ybKok2{uA#K?LE+mDd9)~JhTefks$^Oqzt^lAB|x~1!cFaaL9!CE z7Kle`b<#PZ$ff6W(X@G+3XKTHU*BhXun0a9ie|#ydU3>2VByXQTY&T(27ibT3g3!a zh|uD#*o+zB9hIs4!p5fcZ{pWCP&zQYcUp?@MwpO5n{ozG7rDNOLEI!&3vNP z##SO++%!?B_0qhqOXwC{3DEeaD5JFq4Yz{O9oVqg!)+2>Gow{@|0zmC>tBJN*83h5 zrJ!ie8lt$3h{AoVLD=JtZ5Ix21qAgthx)j!5Xxk<$aMGLZ|>|vUfz>1)XkVw8{3JX z@R(V0GB`dDeT@k zpKqA80>Bip%+J=ZhpGU(SKUd-5g|nG|3jq{r9d7BWWJ*ORi}cC09O@od*PKkbSg0y z;M^(xYZnnXA4BdQR31Wm6Bn&600a4ETcY?rHD44lkS&4SE-NBzkMR1Ivm|l>MCQ}o zKZSrUhXI~vNs=E>mCgoKq1RI>*#U?ArJG1b_xoZ90(E6~6G}Pb$J9VF@U#WwCV6dl z5v12qgLkckc(0~LHOvFv6_j8U-)CbF5nj1T7NT`L=Il++R zzgFbGBg@8nIR9l4n72b@Z~6xR&Gf-V08$V%Uu@6lB@37+Au!j1WrssNj2@OIjsFCo zH23f`xUYJPK!@OP%x0o=b#YQohSgw?!)n2m=vqQbRhfm}+=BrfM}x$I0&hlz&&gLn z;@#Ga&ngev3C*NyuzpMGu+qP_?g}|)!jy8K<)l6&t2HafZlV)A+#%2-(@s_nO=a$+ zI78B5Sl!RnsT{i(C(dtp79ze5CT_Co^z~uV4T;+`MoZI9Il2nT!hC>?8An0Cg36l2%N*%m^7cZ#D>-d;**DzI`VWh?}r6 z;{tvkErW;zERKm5u|IkBXJy3?P~T2f{oyQwWZ>Kv{lswFx2K0z1spjJ_}XS`tPC99 zo))T3(DY63K0=cv0ICOTy6W*VQ10>R8k!ibE(-wHCWbFMUdYk1-d)`?;EzRP@|B8l zhztkB6<0m1Xh{A_$oT_GXC`k#q8wIv7JlVX^zTZCkK6=g2t?&hpxF?R`U6HHM5m;KFIi>Yb7%z$0Iz z@(3MLrF#cj>5#*OPayjx4j5ymNK&&;W8j5x-$hd%T&r&XIDaD0Z=$RClCQpzGsIiH zTI3@Uw!)0i?C*|1=vjbm!CK*128VP5AsG!GM#_@&vY*OMcD)WY3s8KGcFn}$G?=_e zH@3znLB|g@^q=e3WpXfYWhsLnk|kPha2h_%Xgwa-N>&Ozb!zKVkb50uPVSb^XrN4dFUb>Z;= zwAdX1LAk9wi!PW zlJ_`N`QE|X6ta_W{?5U*=3%66fkk-%ZQ%Qi{eWY-#Y>XJc>+GZkdax2_M45a5AlKE zTdzeT9CtM-5KO$!dui?Epyn7!H=kI0cU>&PqYApRh2Tjp@$440;rD=fkcTFu04Cvz zWpaqZ3F64h0V(n5hW+RUUe)~NazIM4V%4_4Uw8=u(S*adw9P&g;rS_{w~LjBW$%qK zZRdhyHww0_7T!4~K3W$S9v>4Ol{73gF4})PTRD4o_M#?O#-P-$0D#D| zRe(s> constructor = null; + try { + constructor = type.tagType.getConstructor(NbtInputStream.class, Boolean.TYPE); + } + catch (NoSuchMethodException ex) { + throw new IOException("Invalid NBT implementation state: Type " + type.tagType.getName() + " has no de-serialization constructor."); + } + try { + return constructor.newInstance(this, anonymous); + } + catch (Exception ex) { + throw new IOException("Invalid NBT implementation state: Type " + type.tagType.getName() + " in (" + this.getClass().getName() + ") has no valid constructor: " + ex.getMessage(), ex); + } + } +} diff --git a/src/com/evilco/mc/nbt/stream/NbtOutputStream.java b/src/com/evilco/mc/nbt/stream/NbtOutputStream.java new file mode 100644 index 0000000..38453e5 --- /dev/null +++ b/src/com/evilco/mc/nbt/stream/NbtOutputStream.java @@ -0,0 +1,21 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.evilco.mc.nbt.stream; + +import com.evilco.mc.nbt.tag.ITag; +import java.io.DataOutputStream; +import java.io.IOException; +import java.io.OutputStream; + +public class NbtOutputStream +extends DataOutputStream { + public NbtOutputStream(OutputStream out) { + super(out); + } + + public void write(ITag tag) throws IOException { + this.writeByte(tag.getTagID()); + tag.write(this, false); + } +} diff --git a/src/com/evilco/mc/nbt/tag/AbstractTag.java b/src/com/evilco/mc/nbt/tag/AbstractTag.java new file mode 100644 index 0000000..22f122a --- /dev/null +++ b/src/com/evilco/mc/nbt/tag/AbstractTag.java @@ -0,0 +1,86 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.evilco.mc.nbt.tag; + +import com.evilco.mc.nbt.stream.NbtInputStream; +import com.evilco.mc.nbt.stream.NbtOutputStream; +import com.evilco.mc.nbt.tag.IAnonymousTagContainer; +import com.evilco.mc.nbt.tag.INamedTagContainer; +import com.evilco.mc.nbt.tag.ITag; +import com.evilco.mc.nbt.tag.ITagContainer; +import com.google.common.base.Preconditions; +import java.io.IOException; +import javax.annotation.Nonnull; +import javax.annotation.Nullable; + +public abstract class AbstractTag +implements ITag { + protected String name; + protected ITagContainer parent = null; + + public AbstractTag(@Nonnull String name) { + this.setName(name); + } + + public AbstractTag(@Nonnull NbtInputStream inputStream, boolean anonymous) throws IOException { + Preconditions.checkNotNull(inputStream, "inputStream"); + if (!anonymous) { + short nameSize = inputStream.readShort(); + byte[] nameBytes = new byte[nameSize]; + inputStream.readFully(nameBytes); + this.setName(new String(nameBytes, STRING_CHARSET)); + } + } + + @Override + public String getName() { + return this.name; + } + + @Override + public byte[] getNameBytes() { + return this.name.getBytes(STRING_CHARSET); + } + + @Override + public ITagContainer getParent() { + return this.parent; + } + + @Override + public abstract byte getTagID(); + + @Override + public void setName(@Nonnull String name) { + Preconditions.checkNotNull(name, "name"); + if (this.getParent() != null) { + this.getParent().removeTag(this); + } + this.name = name; + if (this.getParent() != null) { + if (this.getParent() instanceof IAnonymousTagContainer) { + ((IAnonymousTagContainer)this.getParent()).addTag(this); + } else { + ((INamedTagContainer)this.getParent()).setTag(this); + } + } + } + + @Override + public void setParent(@Nullable ITagContainer parent) { + if (this.getParent() != null) { + this.getParent().removeTag(this); + } + this.parent = parent; + } + + @Override + public void write(NbtOutputStream outputStream, boolean anonymous) throws IOException { + if (!anonymous) { + byte[] name = this.getNameBytes(); + outputStream.writeShort(name.length); + outputStream.write(name); + } + } +} diff --git a/src/com/evilco/mc/nbt/tag/IAnonymousTagContainer.java b/src/com/evilco/mc/nbt/tag/IAnonymousTagContainer.java new file mode 100644 index 0000000..a3d3c95 --- /dev/null +++ b/src/com/evilco/mc/nbt/tag/IAnonymousTagContainer.java @@ -0,0 +1,21 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.evilco.mc.nbt.tag; + +import com.evilco.mc.nbt.error.UnexpectedTagTypeException; +import com.evilco.mc.nbt.tag.ITag; +import com.evilco.mc.nbt.tag.ITagContainer; +import java.util.List; +import javax.annotation.Nonnull; + +public interface IAnonymousTagContainer +extends ITagContainer { + public void addTag(@Nonnull ITag var1); + + public List getTags(); + + public List getTags(Class var1) throws UnexpectedTagTypeException; + + public void setTag(int var1, @Nonnull ITag var2); +} diff --git a/src/com/evilco/mc/nbt/tag/INamedTagContainer.java b/src/com/evilco/mc/nbt/tag/INamedTagContainer.java new file mode 100644 index 0000000..721e431 --- /dev/null +++ b/src/com/evilco/mc/nbt/tag/INamedTagContainer.java @@ -0,0 +1,24 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.evilco.mc.nbt.tag; + +import com.evilco.mc.nbt.error.TagNotFoundException; +import com.evilco.mc.nbt.error.UnexpectedTagTypeException; +import com.evilco.mc.nbt.tag.ITag; +import com.evilco.mc.nbt.tag.ITagContainer; +import java.util.Map; +import javax.annotation.Nonnull; + +public interface INamedTagContainer +extends ITagContainer { + public ITag getTag(@Nonnull String var1); + + public T getTag(String var1, Class var2) throws UnexpectedTagTypeException, TagNotFoundException; + + public Map getTags(); + + public void removeTag(@Nonnull String var1); + + public void setTag(@Nonnull ITag var1); +} diff --git a/src/com/evilco/mc/nbt/tag/ITag.java b/src/com/evilco/mc/nbt/tag/ITag.java new file mode 100644 index 0000000..fd80f40 --- /dev/null +++ b/src/com/evilco/mc/nbt/tag/ITag.java @@ -0,0 +1,29 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.evilco.mc.nbt.tag; + +import com.evilco.mc.nbt.stream.NbtOutputStream; +import com.evilco.mc.nbt.tag.ITagContainer; +import java.io.IOException; +import java.nio.charset.Charset; +import javax.annotation.Nonnull; +import javax.annotation.Nullable; + +public interface ITag { + public static final Charset STRING_CHARSET = Charset.forName("UTF-8"); + + public String getName(); + + public byte[] getNameBytes(); + + public ITagContainer getParent(); + + public byte getTagID(); + + public void setName(@Nonnull String var1); + + public void setParent(@Nullable ITagContainer var1); + + public void write(NbtOutputStream var1, boolean var2) throws IOException; +} diff --git a/src/com/evilco/mc/nbt/tag/ITagContainer.java b/src/com/evilco/mc/nbt/tag/ITagContainer.java new file mode 100644 index 0000000..f5d7d28 --- /dev/null +++ b/src/com/evilco/mc/nbt/tag/ITagContainer.java @@ -0,0 +1,12 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.evilco.mc.nbt.tag; + +import com.evilco.mc.nbt.tag.ITag; +import javax.annotation.Nonnull; + +public interface ITagContainer +extends ITag { + public void removeTag(@Nonnull ITag var1); +} diff --git a/src/com/evilco/mc/nbt/tag/TagByte.java b/src/com/evilco/mc/nbt/tag/TagByte.java new file mode 100644 index 0000000..9918ed0 --- /dev/null +++ b/src/com/evilco/mc/nbt/tag/TagByte.java @@ -0,0 +1,45 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.evilco.mc.nbt.tag; + +import com.evilco.mc.nbt.stream.NbtInputStream; +import com.evilco.mc.nbt.stream.NbtOutputStream; +import com.evilco.mc.nbt.tag.AbstractTag; +import com.evilco.mc.nbt.tag.TagType; +import java.io.IOException; +import javax.annotation.Nonnull; + +public class TagByte +extends AbstractTag { + protected byte value; + + public TagByte(@Nonnull String name, byte value) { + super(name); + this.setValue(value); + } + + public TagByte(@Nonnull NbtInputStream inputStream, boolean anonymous) throws IOException { + super(inputStream, anonymous); + this.setValue(inputStream.readByte()); + } + + @Override + public byte getTagID() { + return TagType.BYTE.typeID; + } + + public byte getValue() { + return this.value; + } + + public void setValue(byte b) { + this.value = b; + } + + @Override + public void write(NbtOutputStream outputStream, boolean anonymous) throws IOException { + super.write(outputStream, anonymous); + outputStream.write(this.getValue()); + } +} diff --git a/src/com/evilco/mc/nbt/tag/TagByteArray.java b/src/com/evilco/mc/nbt/tag/TagByteArray.java new file mode 100644 index 0000000..2832e96 --- /dev/null +++ b/src/com/evilco/mc/nbt/tag/TagByteArray.java @@ -0,0 +1,51 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.evilco.mc.nbt.tag; + +import com.evilco.mc.nbt.stream.NbtInputStream; +import com.evilco.mc.nbt.stream.NbtOutputStream; +import com.evilco.mc.nbt.tag.AbstractTag; +import com.evilco.mc.nbt.tag.TagType; +import com.google.common.base.Preconditions; +import java.io.IOException; +import javax.annotation.Nonnull; + +public class TagByteArray +extends AbstractTag { + protected byte[] value; + + public TagByteArray(@Nonnull String name, @Nonnull byte[] value) { + super(name); + this.setValue(value); + } + + public TagByteArray(@Nonnull NbtInputStream inputStream, boolean anonymous) throws IOException { + super(inputStream, anonymous); + int size = inputStream.readInt(); + byte[] data = new byte[size]; + inputStream.readFully(data); + this.setValue(data); + } + + @Override + public byte getTagID() { + return TagType.BYTE_ARRAY.typeID; + } + + public byte[] getValue() { + return this.value; + } + + public void setValue(@Nonnull byte[] b) { + Preconditions.checkNotNull(b, "b"); + this.value = b; + } + + @Override + public void write(NbtOutputStream outputStream, boolean anonymous) throws IOException { + super.write(outputStream, anonymous); + outputStream.writeInt(this.value.length); + outputStream.write(this.value); + } +} diff --git a/src/com/evilco/mc/nbt/tag/TagCompound.java b/src/com/evilco/mc/nbt/tag/TagCompound.java new file mode 100644 index 0000000..63d70c0 --- /dev/null +++ b/src/com/evilco/mc/nbt/tag/TagCompound.java @@ -0,0 +1,184 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.evilco.mc.nbt.tag; + +import com.evilco.mc.nbt.error.TagNotFoundException; +import com.evilco.mc.nbt.error.UnexpectedTagTypeException; +import com.evilco.mc.nbt.stream.NbtInputStream; +import com.evilco.mc.nbt.stream.NbtOutputStream; +import com.evilco.mc.nbt.tag.AbstractTag; +import com.evilco.mc.nbt.tag.INamedTagContainer; +import com.evilco.mc.nbt.tag.ITag; +import com.evilco.mc.nbt.tag.TagByte; +import com.evilco.mc.nbt.tag.TagByteArray; +import com.evilco.mc.nbt.tag.TagDouble; +import com.evilco.mc.nbt.tag.TagFloat; +import com.evilco.mc.nbt.tag.TagInteger; +import com.evilco.mc.nbt.tag.TagIntegerArray; +import com.evilco.mc.nbt.tag.TagList; +import com.evilco.mc.nbt.tag.TagLong; +import com.evilco.mc.nbt.tag.TagShort; +import com.evilco.mc.nbt.tag.TagString; +import com.evilco.mc.nbt.tag.TagType; +import com.google.common.base.Preconditions; +import com.google.common.collect.ImmutableMap; +import java.io.IOException; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import javax.annotation.Nonnull; + +public class TagCompound +extends AbstractTag +implements INamedTagContainer { + protected Map tags = new HashMap(); + + public TagCompound(String name) { + super(name); + } + + public TagCompound(@Nonnull NbtInputStream inputStream, boolean anonymous) throws IOException { + super(inputStream, anonymous); + while (true) { + byte type; + TagType tagType; + if ((tagType = TagType.valueOf(type = inputStream.readByte())) == null) { + throw new IOException("Could not find a tag for type ID " + type + "."); + } + if (tagType == TagType.END) break; + this.setTag(inputStream.readTag(tagType, false)); + } + } + + @Override + public ITag getTag(@Nonnull String name) { + Preconditions.checkNotNull(name, "name"); + return this.tags.get(name); + } + + @Override + public T getTag(String name, Class tagClass) throws UnexpectedTagTypeException, TagNotFoundException { + ITag tag = this.getTag(name); + if (tag == null) { + throw new TagNotFoundException("The compound tag is missing a " + name + " entry"); + } + if (!tagClass.isInstance(tag)) { + throw new UnexpectedTagTypeException("The compound entry " + name + " should be of type " + tagClass.getSimpleName() + ", but is of type " + tag.getClass().getSimpleName()); + } + return (T)tag; + } + + public TagCompound getCompound(String name) throws UnexpectedTagTypeException, TagNotFoundException { + return this.getTag(name, TagCompound.class); + } + + public int getInteger(String name) throws UnexpectedTagTypeException, TagNotFoundException { + return this.getTag(name, TagInteger.class).getValue(); + } + + public short getShort(String name) throws UnexpectedTagTypeException, TagNotFoundException { + return this.getTag(name, TagShort.class).getValue(); + } + + public byte getByte(String name) throws UnexpectedTagTypeException, TagNotFoundException { + return this.getTag(name, TagByte.class).getValue(); + } + + public long getLong(String name) throws UnexpectedTagTypeException, TagNotFoundException { + return this.getTag(name, TagLong.class).getValue(); + } + + public double getDouble(String name) throws UnexpectedTagTypeException, TagNotFoundException { + return this.getTag(name, TagDouble.class).getValue(); + } + + public float getFloat(String name) throws UnexpectedTagTypeException, TagNotFoundException { + return this.getTag(name, TagFloat.class).getValue(); + } + + public String getString(String name) throws UnexpectedTagTypeException, TagNotFoundException { + return this.getTag(name, TagString.class).getValue(); + } + + public List getList(String name, Class itemClass) throws UnexpectedTagTypeException, TagNotFoundException { + return this.getTag(name, TagList.class).getTags(itemClass); + } + + public int[] getIntegerArray(String name) throws UnexpectedTagTypeException, TagNotFoundException { + return this.getTag(name, TagIntegerArray.class).getValues(); + } + + public byte[] getByteArray(String name) throws UnexpectedTagTypeException, TagNotFoundException { + return this.getTag(name, TagByteArray.class).getValue(); + } + + public String[] getStringArray(String name) throws UnexpectedTagTypeException, TagNotFoundException { + List tags = this.getList(name, TagString.class); + String[] array = new String[tags.size()]; + for (int i = 0; i < tags.size(); ++i) { + array[i] = tags.get(i).getValue(); + } + return array; + } + + public double[] getDoubleArray(String name) throws UnexpectedTagTypeException, TagNotFoundException { + List tags = this.getList(name, TagDouble.class); + double[] array = new double[tags.size()]; + for (int i = 0; i < tags.size(); ++i) { + array[i] = tags.get(i).getValue(); + } + return array; + } + + public float[] getFloatArray(String name) throws UnexpectedTagTypeException, TagNotFoundException { + List tags = this.getList(name, TagFloat.class); + float[] array = new float[tags.size()]; + for (int i = 0; i < tags.size(); ++i) { + array[i] = tags.get(i).getValue(); + } + return array; + } + + @Override + public Map getTags() { + return new ImmutableMap.Builder().putAll(this.tags).build(); + } + + @Override + public void removeTag(@Nonnull ITag tag) { + Preconditions.checkNotNull(tag, "tag"); + this.tags.remove(tag.getName()); + } + + @Override + public void removeTag(@Nonnull String tag) { + Preconditions.checkNotNull(tag, "tag"); + this.tags.remove(tag); + } + + @Override + public void setTag(@Nonnull ITag tag) { + Preconditions.checkNotNull(tag, "tag"); + if (this.tags.containsKey(tag)) { + this.tags.get(tag.getName()).setParent(null); + } + this.tags.put(tag.getName(), tag); + tag.setParent(this); + } + + @Override + public byte getTagID() { + return TagType.COMPOUND.typeID; + } + + @Override + public void write(NbtOutputStream outputStream, boolean anonymous) throws IOException { + super.write(outputStream, anonymous); + for (Map.Entry tagEntry : this.tags.entrySet()) { + outputStream.writeByte(tagEntry.getValue().getTagID()); + tagEntry.getValue().write(outputStream, false); + } + outputStream.writeByte(TagType.END.typeID); + } +} diff --git a/src/com/evilco/mc/nbt/tag/TagDouble.java b/src/com/evilco/mc/nbt/tag/TagDouble.java new file mode 100644 index 0000000..a6115ad --- /dev/null +++ b/src/com/evilco/mc/nbt/tag/TagDouble.java @@ -0,0 +1,45 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.evilco.mc.nbt.tag; + +import com.evilco.mc.nbt.stream.NbtInputStream; +import com.evilco.mc.nbt.stream.NbtOutputStream; +import com.evilco.mc.nbt.tag.AbstractTag; +import com.evilco.mc.nbt.tag.TagType; +import java.io.IOException; +import javax.annotation.Nonnull; + +public class TagDouble +extends AbstractTag { + protected double value; + + public TagDouble(@Nonnull String name, double value) { + super(name); + this.setValue(value); + } + + public TagDouble(@Nonnull NbtInputStream inputStream, boolean anonymous) throws IOException { + super(inputStream, anonymous); + this.setValue(inputStream.readDouble()); + } + + @Override + public byte getTagID() { + return TagType.DOUBLE.typeID; + } + + public double getValue() { + return this.value; + } + + public void setValue(double d) { + this.value = d; + } + + @Override + public void write(NbtOutputStream outputStream, boolean anonymous) throws IOException { + super.write(outputStream, anonymous); + outputStream.writeDouble(this.value); + } +} diff --git a/src/com/evilco/mc/nbt/tag/TagFloat.java b/src/com/evilco/mc/nbt/tag/TagFloat.java new file mode 100644 index 0000000..21f21b4 --- /dev/null +++ b/src/com/evilco/mc/nbt/tag/TagFloat.java @@ -0,0 +1,45 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.evilco.mc.nbt.tag; + +import com.evilco.mc.nbt.stream.NbtInputStream; +import com.evilco.mc.nbt.stream.NbtOutputStream; +import com.evilco.mc.nbt.tag.AbstractTag; +import com.evilco.mc.nbt.tag.TagType; +import java.io.IOException; +import javax.annotation.Nonnull; + +public class TagFloat +extends AbstractTag { + protected float value; + + public TagFloat(@Nonnull String name, float value) { + super(name); + this.setValue(value); + } + + public TagFloat(@Nonnull NbtInputStream inputStream, boolean anonymous) throws IOException { + super(inputStream, anonymous); + this.setValue(inputStream.readFloat()); + } + + @Override + public byte getTagID() { + return TagType.FLOAT.typeID; + } + + public float getValue() { + return this.value; + } + + public void setValue(float f) { + this.value = f; + } + + @Override + public void write(NbtOutputStream outputStream, boolean anonymous) throws IOException { + super.write(outputStream, anonymous); + outputStream.writeFloat(this.value); + } +} diff --git a/src/com/evilco/mc/nbt/tag/TagInteger.java b/src/com/evilco/mc/nbt/tag/TagInteger.java new file mode 100644 index 0000000..7b3b4d0 --- /dev/null +++ b/src/com/evilco/mc/nbt/tag/TagInteger.java @@ -0,0 +1,45 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.evilco.mc.nbt.tag; + +import com.evilco.mc.nbt.stream.NbtInputStream; +import com.evilco.mc.nbt.stream.NbtOutputStream; +import com.evilco.mc.nbt.tag.AbstractTag; +import com.evilco.mc.nbt.tag.TagType; +import java.io.IOException; +import javax.annotation.Nonnull; + +public class TagInteger +extends AbstractTag { + protected int value; + + public TagInteger(@Nonnull String name, int value) { + super(name); + this.setValue(value); + } + + public TagInteger(@Nonnull NbtInputStream inputStream, boolean anonymous) throws IOException { + super(inputStream, anonymous); + this.setValue(inputStream.readInt()); + } + + @Override + public byte getTagID() { + return TagType.INTEGER.typeID; + } + + public int getValue() { + return this.value; + } + + public void setValue(int i) { + this.value = i; + } + + @Override + public void write(NbtOutputStream outputStream, boolean anonymous) throws IOException { + super.write(outputStream, anonymous); + outputStream.writeInt(this.value); + } +} diff --git a/src/com/evilco/mc/nbt/tag/TagIntegerArray.java b/src/com/evilco/mc/nbt/tag/TagIntegerArray.java new file mode 100644 index 0000000..144d070 --- /dev/null +++ b/src/com/evilco/mc/nbt/tag/TagIntegerArray.java @@ -0,0 +1,55 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.evilco.mc.nbt.tag; + +import com.evilco.mc.nbt.stream.NbtInputStream; +import com.evilco.mc.nbt.stream.NbtOutputStream; +import com.evilco.mc.nbt.tag.AbstractTag; +import com.evilco.mc.nbt.tag.TagType; +import com.google.common.base.Preconditions; +import java.io.IOException; +import javax.annotation.Nonnull; + +public class TagIntegerArray +extends AbstractTag { + protected int[] values; + + public TagIntegerArray(@Nonnull String name, @Nonnull int[] values) { + super(name); + this.setValues(values); + } + + public TagIntegerArray(@Nonnull NbtInputStream inputStream, boolean anonymous) throws IOException { + super(inputStream, anonymous); + int size = inputStream.readInt(); + int[] data = new int[size]; + for (int i = 0; i < size; ++i) { + data[i] = inputStream.readInt(); + } + this.values = data; + } + + @Override + public byte getTagID() { + return TagType.INTEGER_ARRAY.typeID; + } + + public int[] getValues() { + return this.values; + } + + public void setValues(@Nonnull int[] i) { + Preconditions.checkNotNull(i, "i"); + this.values = i; + } + + @Override + public void write(NbtOutputStream outputStream, boolean anonymous) throws IOException { + super.write(outputStream, anonymous); + outputStream.writeInt(this.values.length); + for (int i : this.values) { + outputStream.writeInt(i); + } + } +} diff --git a/src/com/evilco/mc/nbt/tag/TagList.java b/src/com/evilco/mc/nbt/tag/TagList.java new file mode 100644 index 0000000..f8fdb1e --- /dev/null +++ b/src/com/evilco/mc/nbt/tag/TagList.java @@ -0,0 +1,96 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.evilco.mc.nbt.tag; + +import com.evilco.mc.nbt.error.UnexpectedTagTypeException; +import com.evilco.mc.nbt.stream.NbtInputStream; +import com.evilco.mc.nbt.stream.NbtOutputStream; +import com.evilco.mc.nbt.tag.AbstractTag; +import com.evilco.mc.nbt.tag.IAnonymousTagContainer; +import com.evilco.mc.nbt.tag.ITag; +import com.evilco.mc.nbt.tag.TagType; +import com.google.common.base.Preconditions; +import com.google.common.collect.ImmutableList; +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; +import javax.annotation.Nonnull; + +public class TagList +extends AbstractTag +implements IAnonymousTagContainer { + protected List tagList; + + public TagList(@Nonnull String name) { + super(name); + this.tagList = new ArrayList(); + } + + public TagList(@Nonnull String name, @Nonnull List tagList) { + super(name); + Preconditions.checkNotNull(tagList, "tagList"); + this.tagList = tagList; + } + + public TagList(@Nonnull NbtInputStream inputStream, boolean anonymous) throws IOException { + super(inputStream, anonymous); + this.tagList = new ArrayList(); + byte type = inputStream.readByte(); + TagType tagType = TagType.valueOf(type); + int size = inputStream.readInt(); + if (tagType == TagType.END) { + return; + } + for (int i = 0; i < size; ++i) { + this.addTag(inputStream.readTag(tagType, true)); + } + } + + @Override + public void addTag(@Nonnull ITag tag) { + this.tagList.add(tag); + } + + @Override + public List getTags() { + return ((ImmutableList.Builder)new ImmutableList.Builder().addAll(this.tagList)).build(); + } + + @Override + public List getTags(Class tagClass) throws UnexpectedTagTypeException { + ImmutableList.Builder builder = new ImmutableList.Builder(); + for (ITag tag : this.tagList) { + if (!tagClass.isInstance(tag)) { + throw new UnexpectedTagTypeException("The list entry should be of type " + tagClass.getSimpleName() + ", but is of type " + tag.getClass().getSimpleName()); + } + builder.add(tag); + } + return builder.build(); + } + + @Override + public byte getTagID() { + return TagType.LIST.typeID; + } + + @Override + public void removeTag(@Nonnull ITag tag) { + this.tagList.remove(tag); + } + + @Override + public void setTag(int i, @Nonnull ITag tag) { + this.tagList.set(i, tag); + } + + @Override + public void write(NbtOutputStream outputStream, boolean anonymous) throws IOException { + super.write(outputStream, anonymous); + outputStream.writeByte(this.tagList.size() > 0 ? this.tagList.get(0).getTagID() : TagType.END.typeID); + outputStream.writeInt(this.tagList.size()); + for (ITag tag : this.tagList) { + tag.write(outputStream, true); + } + } +} diff --git a/src/com/evilco/mc/nbt/tag/TagLong.java b/src/com/evilco/mc/nbt/tag/TagLong.java new file mode 100644 index 0000000..8b07454 --- /dev/null +++ b/src/com/evilco/mc/nbt/tag/TagLong.java @@ -0,0 +1,45 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.evilco.mc.nbt.tag; + +import com.evilco.mc.nbt.stream.NbtInputStream; +import com.evilco.mc.nbt.stream.NbtOutputStream; +import com.evilco.mc.nbt.tag.AbstractTag; +import com.evilco.mc.nbt.tag.TagType; +import java.io.IOException; +import javax.annotation.Nonnull; + +public class TagLong +extends AbstractTag { + protected long value; + + public TagLong(@Nonnull String name, long value) { + super(name); + this.setValue(value); + } + + public TagLong(@Nonnull NbtInputStream inputStream, boolean anonymous) throws IOException { + super(inputStream, anonymous); + this.setValue(inputStream.readLong()); + } + + @Override + public byte getTagID() { + return TagType.LONG.typeID; + } + + public long getValue() { + return this.value; + } + + public void setValue(long l) { + this.value = l; + } + + @Override + public void write(NbtOutputStream outputStream, boolean anonymous) throws IOException { + super.write(outputStream, anonymous); + outputStream.writeLong(this.value); + } +} diff --git a/src/com/evilco/mc/nbt/tag/TagShort.java b/src/com/evilco/mc/nbt/tag/TagShort.java new file mode 100644 index 0000000..8e7cc65 --- /dev/null +++ b/src/com/evilco/mc/nbt/tag/TagShort.java @@ -0,0 +1,45 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.evilco.mc.nbt.tag; + +import com.evilco.mc.nbt.stream.NbtInputStream; +import com.evilco.mc.nbt.stream.NbtOutputStream; +import com.evilco.mc.nbt.tag.AbstractTag; +import com.evilco.mc.nbt.tag.TagType; +import java.io.IOException; +import javax.annotation.Nonnull; + +public class TagShort +extends AbstractTag { + protected short value; + + public TagShort(@Nonnull String name, short value) { + super(name); + this.setValue(value); + } + + public TagShort(@Nonnull NbtInputStream inputStream, boolean anonymous) throws IOException { + super(inputStream, anonymous); + this.setValue(inputStream.readShort()); + } + + @Override + public byte getTagID() { + return TagType.SHORT.typeID; + } + + public short getValue() { + return this.value; + } + + public void setValue(short s) { + this.value = s; + } + + @Override + public void write(NbtOutputStream outputStream, boolean anonymous) throws IOException { + super.write(outputStream, anonymous); + outputStream.writeShort(this.value); + } +} diff --git a/src/com/evilco/mc/nbt/tag/TagString.java b/src/com/evilco/mc/nbt/tag/TagString.java new file mode 100644 index 0000000..5cd53b8 --- /dev/null +++ b/src/com/evilco/mc/nbt/tag/TagString.java @@ -0,0 +1,51 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.evilco.mc.nbt.tag; + +import com.evilco.mc.nbt.stream.NbtInputStream; +import com.evilco.mc.nbt.stream.NbtOutputStream; +import com.evilco.mc.nbt.tag.AbstractTag; +import com.evilco.mc.nbt.tag.ITag; +import com.evilco.mc.nbt.tag.TagType; +import java.io.IOException; +import javax.annotation.Nonnull; + +public class TagString +extends AbstractTag { + protected String value; + + public TagString(@Nonnull String name, @Nonnull String value) { + super(name); + this.setValue(value); + } + + public TagString(@Nonnull NbtInputStream inputStream, boolean anonymous) throws IOException { + super(inputStream, anonymous); + short size = inputStream.readShort(); + byte[] data = new byte[size]; + inputStream.readFully(data); + this.setValue(new String(data, ITag.STRING_CHARSET)); + } + + @Override + public byte getTagID() { + return TagType.STRING.typeID; + } + + public String getValue() { + return this.value; + } + + public void setValue(@Nonnull String s) { + this.value = s; + } + + @Override + public void write(NbtOutputStream outputStream, boolean anonymous) throws IOException { + super.write(outputStream, anonymous); + byte[] outputBytes = this.value.getBytes(ITag.STRING_CHARSET); + outputStream.writeShort(outputBytes.length); + outputStream.write(outputBytes); + } +} diff --git a/src/com/evilco/mc/nbt/tag/TagType.java b/src/com/evilco/mc/nbt/tag/TagType.java new file mode 100644 index 0000000..f48e16c --- /dev/null +++ b/src/com/evilco/mc/nbt/tag/TagType.java @@ -0,0 +1,55 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.evilco.mc.nbt.tag; + +import com.evilco.mc.nbt.tag.ITag; +import com.evilco.mc.nbt.tag.TagByte; +import com.evilco.mc.nbt.tag.TagByteArray; +import com.evilco.mc.nbt.tag.TagCompound; +import com.evilco.mc.nbt.tag.TagDouble; +import com.evilco.mc.nbt.tag.TagFloat; +import com.evilco.mc.nbt.tag.TagInteger; +import com.evilco.mc.nbt.tag.TagIntegerArray; +import com.evilco.mc.nbt.tag.TagList; +import com.evilco.mc.nbt.tag.TagLong; +import com.evilco.mc.nbt.tag.TagShort; +import com.evilco.mc.nbt.tag.TagString; +import com.google.common.collect.ImmutableMap; +import java.util.Map; + +public enum TagType { + BYTE(1, TagByte.class), + BYTE_ARRAY(7, TagByteArray.class), + COMPOUND(10, TagCompound.class), + DOUBLE(6, TagDouble.class), + END(0, null), + FLOAT(5, TagFloat.class), + INTEGER(3, TagInteger.class), + INTEGER_ARRAY(11, TagIntegerArray.class), + LIST(9, TagList.class), + LONG(4, TagLong.class), + SHORT(2, TagShort.class), + STRING(8, TagString.class); + + protected static final Map typeMap; + public final Class tagType; + public final byte typeID; + + private TagType(int typeID, Class type) { + this.typeID = (byte)typeID; + this.tagType = type; + } + + public static TagType valueOf(byte typeID) { + return typeMap.get(typeID); + } + + static { + ImmutableMap.Builder mapBuilder = new ImmutableMap.Builder(); + for (TagType type : TagType.values()) { + mapBuilder.put(type.typeID, type); + } + typeMap = mapBuilder.build(); + } +} diff --git a/src/com/google/common/annotations/Beta.java b/src/com/google/common/annotations/Beta.java new file mode 100644 index 0000000..064de6e --- /dev/null +++ b/src/com/google/common/annotations/Beta.java @@ -0,0 +1,18 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.annotations; + +import com.google.common.annotations.GwtCompatible; +import java.lang.annotation.Documented; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Retention(value=RetentionPolicy.CLASS) +@Target(value={ElementType.ANNOTATION_TYPE, ElementType.CONSTRUCTOR, ElementType.FIELD, ElementType.METHOD, ElementType.TYPE}) +@Documented +@GwtCompatible +public @interface Beta { +} diff --git a/src/com/google/common/annotations/GwtCompatible.java b/src/com/google/common/annotations/GwtCompatible.java new file mode 100644 index 0000000..ca088f1 --- /dev/null +++ b/src/com/google/common/annotations/GwtCompatible.java @@ -0,0 +1,20 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.annotations; + +import java.lang.annotation.Documented; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Retention(value=RetentionPolicy.CLASS) +@Target(value={ElementType.TYPE, ElementType.METHOD}) +@Documented +@GwtCompatible +public @interface GwtCompatible { + public boolean serializable() default false; + + public boolean emulated() default false; +} diff --git a/src/com/google/common/annotations/GwtIncompatible.java b/src/com/google/common/annotations/GwtIncompatible.java new file mode 100644 index 0000000..460ae87 --- /dev/null +++ b/src/com/google/common/annotations/GwtIncompatible.java @@ -0,0 +1,19 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.annotations; + +import com.google.common.annotations.GwtCompatible; +import java.lang.annotation.Documented; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Retention(value=RetentionPolicy.CLASS) +@Target(value={ElementType.TYPE, ElementType.METHOD, ElementType.CONSTRUCTOR, ElementType.FIELD}) +@Documented +@GwtCompatible +public @interface GwtIncompatible { + public String value(); +} diff --git a/src/com/google/common/annotations/VisibleForTesting.java b/src/com/google/common/annotations/VisibleForTesting.java new file mode 100644 index 0000000..9fa66e5 --- /dev/null +++ b/src/com/google/common/annotations/VisibleForTesting.java @@ -0,0 +1,10 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.annotations; + +import com.google.common.annotations.GwtCompatible; + +@GwtCompatible +public @interface VisibleForTesting { +} diff --git a/src/com/google/common/base/Absent.java b/src/com/google/common/base/Absent.java new file mode 100644 index 0000000..5dd1c74 --- /dev/null +++ b/src/com/google/common/base/Absent.java @@ -0,0 +1,88 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.base; + +import com.google.common.annotations.GwtCompatible; +import com.google.common.base.Function; +import com.google.common.base.Optional; +import com.google.common.base.Preconditions; +import com.google.common.base.Supplier; +import java.util.Collections; +import java.util.Set; +import javax.annotation.Nullable; + +@GwtCompatible +final class Absent +extends Optional { + static final Absent INSTANCE = new Absent(); + private static final long serialVersionUID = 0L; + + static Optional withType() { + return INSTANCE; + } + + private Absent() { + } + + @Override + public boolean isPresent() { + return false; + } + + @Override + public T get() { + throw new IllegalStateException("Optional.get() cannot be called on an absent value"); + } + + @Override + public T or(T defaultValue) { + return Preconditions.checkNotNull(defaultValue, "use Optional.orNull() instead of Optional.or(null)"); + } + + @Override + public Optional or(Optional secondChoice) { + return Preconditions.checkNotNull(secondChoice); + } + + @Override + public T or(Supplier supplier) { + return Preconditions.checkNotNull(supplier.get(), "use Optional.orNull() instead of a Supplier that returns null"); + } + + @Override + @Nullable + public T orNull() { + return null; + } + + @Override + public Set asSet() { + return Collections.emptySet(); + } + + @Override + public Optional transform(Function function) { + Preconditions.checkNotNull(function); + return Optional.absent(); + } + + @Override + public boolean equals(@Nullable Object object) { + return object == this; + } + + @Override + public int hashCode() { + return 1502476572; + } + + @Override + public String toString() { + return "Optional.absent()"; + } + + private Object readResolve() { + return INSTANCE; + } +} diff --git a/src/com/google/common/base/AbstractIterator.java b/src/com/google/common/base/AbstractIterator.java new file mode 100644 index 0000000..a97aebe --- /dev/null +++ b/src/com/google/common/base/AbstractIterator.java @@ -0,0 +1,74 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.base; + +import com.google.common.annotations.GwtCompatible; +import com.google.common.base.Preconditions; +import java.util.Iterator; +import java.util.NoSuchElementException; + +@GwtCompatible +abstract class AbstractIterator +implements Iterator { + private State state = State.NOT_READY; + private T next; + + protected AbstractIterator() { + } + + protected abstract T computeNext(); + + protected final T endOfData() { + this.state = State.DONE; + return null; + } + + @Override + public final boolean hasNext() { + Preconditions.checkState(this.state != State.FAILED); + switch (this.state) { + case DONE: { + return false; + } + case READY: { + return true; + } + } + return this.tryToComputeNext(); + } + + private boolean tryToComputeNext() { + this.state = State.FAILED; + this.next = this.computeNext(); + if (this.state != State.DONE) { + this.state = State.READY; + return true; + } + return false; + } + + @Override + public final T next() { + if (!this.hasNext()) { + throw new NoSuchElementException(); + } + this.state = State.NOT_READY; + T result = this.next; + this.next = null; + return result; + } + + @Override + public final void remove() { + throw new UnsupportedOperationException(); + } + + private static enum State { + READY, + NOT_READY, + DONE, + FAILED; + + } +} diff --git a/src/com/google/common/base/Ascii.java b/src/com/google/common/base/Ascii.java new file mode 100644 index 0000000..7637184 --- /dev/null +++ b/src/com/google/common/base/Ascii.java @@ -0,0 +1,169 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.base; + +import com.google.common.annotations.Beta; +import com.google.common.annotations.GwtCompatible; +import com.google.common.base.Preconditions; +import javax.annotation.CheckReturnValue; + +@GwtCompatible +public final class Ascii { + public static final byte NUL = 0; + public static final byte SOH = 1; + public static final byte STX = 2; + public static final byte ETX = 3; + public static final byte EOT = 4; + public static final byte ENQ = 5; + public static final byte ACK = 6; + public static final byte BEL = 7; + public static final byte BS = 8; + public static final byte HT = 9; + public static final byte LF = 10; + public static final byte NL = 10; + public static final byte VT = 11; + public static final byte FF = 12; + public static final byte CR = 13; + public static final byte SO = 14; + public static final byte SI = 15; + public static final byte DLE = 16; + public static final byte DC1 = 17; + public static final byte XON = 17; + public static final byte DC2 = 18; + public static final byte DC3 = 19; + public static final byte XOFF = 19; + public static final byte DC4 = 20; + public static final byte NAK = 21; + public static final byte SYN = 22; + public static final byte ETB = 23; + public static final byte CAN = 24; + public static final byte EM = 25; + public static final byte SUB = 26; + public static final byte ESC = 27; + public static final byte FS = 28; + public static final byte GS = 29; + public static final byte RS = 30; + public static final byte US = 31; + public static final byte SP = 32; + public static final byte SPACE = 32; + public static final byte DEL = 127; + public static final char MIN = '\u0000'; + public static final char MAX = '\u007f'; + + private Ascii() { + } + + public static String toLowerCase(String string) { + int length = string.length(); + for (int i = 0; i < length; ++i) { + if (!Ascii.isUpperCase(string.charAt(i))) continue; + char[] chars = string.toCharArray(); + while (i < length) { + char c = chars[i]; + if (Ascii.isUpperCase(c)) { + chars[i] = (char)(c ^ 0x20); + } + ++i; + } + return String.valueOf(chars); + } + return string; + } + + public static String toLowerCase(CharSequence chars) { + if (chars instanceof String) { + return Ascii.toLowerCase((String)chars); + } + int length = chars.length(); + StringBuilder builder = new StringBuilder(length); + for (int i = 0; i < length; ++i) { + builder.append(Ascii.toLowerCase(chars.charAt(i))); + } + return builder.toString(); + } + + public static char toLowerCase(char c) { + return Ascii.isUpperCase(c) ? (char)(c ^ 0x20) : c; + } + + public static String toUpperCase(String string) { + int length = string.length(); + for (int i = 0; i < length; ++i) { + if (!Ascii.isLowerCase(string.charAt(i))) continue; + char[] chars = string.toCharArray(); + while (i < length) { + char c = chars[i]; + if (Ascii.isLowerCase(c)) { + chars[i] = (char)(c & 0x5F); + } + ++i; + } + return String.valueOf(chars); + } + return string; + } + + public static String toUpperCase(CharSequence chars) { + if (chars instanceof String) { + return Ascii.toUpperCase((String)chars); + } + int length = chars.length(); + StringBuilder builder = new StringBuilder(length); + for (int i = 0; i < length; ++i) { + builder.append(Ascii.toUpperCase(chars.charAt(i))); + } + return builder.toString(); + } + + public static char toUpperCase(char c) { + return Ascii.isLowerCase(c) ? (char)(c & 0x5F) : c; + } + + public static boolean isLowerCase(char c) { + return c >= 'a' && c <= 'z'; + } + + public static boolean isUpperCase(char c) { + return c >= 'A' && c <= 'Z'; + } + + @CheckReturnValue + @Beta + public static String truncate(CharSequence seq, int maxLength, String truncationIndicator) { + Preconditions.checkNotNull(seq); + int truncationLength = maxLength - truncationIndicator.length(); + Preconditions.checkArgument(truncationLength >= 0, "maxLength (%s) must be >= length of the truncation indicator (%s)", maxLength, truncationIndicator.length()); + if (seq.length() <= maxLength) { + String string = seq.toString(); + if (string.length() <= maxLength) { + return string; + } + seq = string; + } + return new StringBuilder(maxLength).append(seq, 0, truncationLength).append(truncationIndicator).toString(); + } + + @Beta + public static boolean equalsIgnoreCase(CharSequence s1, CharSequence s2) { + int length = s1.length(); + if (s1 == s2) { + return true; + } + if (length != s2.length()) { + return false; + } + for (int i = 0; i < length; ++i) { + int alphaIndex; + char c2; + char c1 = s1.charAt(i); + if (c1 == (c2 = s2.charAt(i)) || (alphaIndex = Ascii.getAlphaIndex(c1)) < 26 && alphaIndex == Ascii.getAlphaIndex(c2)) continue; + return false; + } + return true; + } + + private static int getAlphaIndex(char c) { + return (char)((c | 0x20) - 97); + } +} diff --git a/src/com/google/common/base/CaseFormat.java b/src/com/google/common/base/CaseFormat.java new file mode 100644 index 0000000..0ef48f8 --- /dev/null +++ b/src/com/google/common/base/CaseFormat.java @@ -0,0 +1,179 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.base; + +import com.google.common.annotations.Beta; +import com.google.common.annotations.GwtCompatible; +import com.google.common.base.Ascii; +import com.google.common.base.CharMatcher; +import com.google.common.base.Converter; +import com.google.common.base.Preconditions; +import java.io.Serializable; +import javax.annotation.Nullable; + +@GwtCompatible +public enum CaseFormat { + LOWER_HYPHEN(CharMatcher.is('-'), "-"){ + + @Override + String normalizeWord(String word) { + return Ascii.toLowerCase(word); + } + + @Override + String convert(CaseFormat format, String s) { + if (format == LOWER_UNDERSCORE) { + return s.replace('-', '_'); + } + if (format == UPPER_UNDERSCORE) { + return Ascii.toUpperCase(s.replace('-', '_')); + } + return super.convert(format, s); + } + } + , + LOWER_UNDERSCORE(CharMatcher.is('_'), "_"){ + + @Override + String normalizeWord(String word) { + return Ascii.toLowerCase(word); + } + + @Override + String convert(CaseFormat format, String s) { + if (format == LOWER_HYPHEN) { + return s.replace('_', '-'); + } + if (format == UPPER_UNDERSCORE) { + return Ascii.toUpperCase(s); + } + return super.convert(format, s); + } + } + , + LOWER_CAMEL(CharMatcher.inRange('A', 'Z'), ""){ + + @Override + String normalizeWord(String word) { + return CaseFormat.firstCharOnlyToUpper(word); + } + } + , + UPPER_CAMEL(CharMatcher.inRange('A', 'Z'), ""){ + + @Override + String normalizeWord(String word) { + return CaseFormat.firstCharOnlyToUpper(word); + } + } + , + UPPER_UNDERSCORE(CharMatcher.is('_'), "_"){ + + @Override + String normalizeWord(String word) { + return Ascii.toUpperCase(word); + } + + @Override + String convert(CaseFormat format, String s) { + if (format == LOWER_HYPHEN) { + return Ascii.toLowerCase(s.replace('_', '-')); + } + if (format == LOWER_UNDERSCORE) { + return Ascii.toLowerCase(s); + } + return super.convert(format, s); + } + }; + + private final CharMatcher wordBoundary; + private final String wordSeparator; + + private CaseFormat(CharMatcher wordBoundary, String wordSeparator) { + this.wordBoundary = wordBoundary; + this.wordSeparator = wordSeparator; + } + + public final String to(CaseFormat format, String str) { + Preconditions.checkNotNull(format); + Preconditions.checkNotNull(str); + return format == this ? str : this.convert(format, str); + } + + String convert(CaseFormat format, String s) { + StringBuilder out = null; + int i = 0; + int j = -1; + while (true) { + ++j; + if ((j = this.wordBoundary.indexIn(s, j)) == -1) break; + if (i == 0) { + out = new StringBuilder(s.length() + 4 * this.wordSeparator.length()); + out.append(format.normalizeFirstWord(s.substring(i, j))); + } else { + out.append(format.normalizeWord(s.substring(i, j))); + } + out.append(format.wordSeparator); + i = j + this.wordSeparator.length(); + } + return i == 0 ? format.normalizeFirstWord(s) : out.append(format.normalizeWord(s.substring(i))).toString(); + } + + @Beta + public Converter converterTo(CaseFormat targetFormat) { + return new StringConverter(this, targetFormat); + } + + abstract String normalizeWord(String var1); + + private String normalizeFirstWord(String word) { + return this == LOWER_CAMEL ? Ascii.toLowerCase(word) : this.normalizeWord(word); + } + + private static String firstCharOnlyToUpper(String word) { + return word.isEmpty() ? word : new StringBuilder(word.length()).append(Ascii.toUpperCase(word.charAt(0))).append(Ascii.toLowerCase(word.substring(1))).toString(); + } + + private static final class StringConverter + extends Converter + implements Serializable { + private final CaseFormat sourceFormat; + private final CaseFormat targetFormat; + private static final long serialVersionUID = 0L; + + StringConverter(CaseFormat sourceFormat, CaseFormat targetFormat) { + this.sourceFormat = Preconditions.checkNotNull(sourceFormat); + this.targetFormat = Preconditions.checkNotNull(targetFormat); + } + + @Override + protected String doForward(String s) { + return s == null ? null : this.sourceFormat.to(this.targetFormat, s); + } + + @Override + protected String doBackward(String s) { + return s == null ? null : this.targetFormat.to(this.sourceFormat, s); + } + + @Override + public boolean equals(@Nullable Object object) { + if (object instanceof StringConverter) { + StringConverter that = (StringConverter)object; + return this.sourceFormat.equals((Object)that.sourceFormat) && this.targetFormat.equals((Object)that.targetFormat); + } + return false; + } + + public int hashCode() { + return this.sourceFormat.hashCode() ^ this.targetFormat.hashCode(); + } + + public String toString() { + String string = String.valueOf(String.valueOf((Object)this.sourceFormat)); + String string2 = String.valueOf(String.valueOf((Object)this.targetFormat)); + return new StringBuilder(14 + string.length() + string2.length()).append(string).append(".converterTo(").append(string2).append(")").toString(); + } + } +} diff --git a/src/com/google/common/base/CharMatcher.java b/src/com/google/common/base/CharMatcher.java new file mode 100644 index 0000000..0ca24ae --- /dev/null +++ b/src/com/google/common/base/CharMatcher.java @@ -0,0 +1,1018 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.base; + +import com.google.common.annotations.Beta; +import com.google.common.annotations.GwtCompatible; +import com.google.common.annotations.GwtIncompatible; +import com.google.common.base.Platform; +import com.google.common.base.Preconditions; +import com.google.common.base.Predicate; +import com.google.common.base.SmallCharMatcher; +import java.util.Arrays; +import java.util.BitSet; +import javax.annotation.CheckReturnValue; + +@Beta +@GwtCompatible(emulated=true) +public abstract class CharMatcher +implements Predicate { + public static final CharMatcher BREAKING_WHITESPACE = new CharMatcher(){ + + @Override + public boolean matches(char c) { + switch (c) { + case '\t': + case '\n': + case '\u000b': + case '\f': + case '\r': + case ' ': + case '\u0085': + case '\u1680': + case '\u2028': + case '\u2029': + case '\u205f': + case '\u3000': { + return true; + } + case '\u2007': { + return false; + } + } + return c >= '\u2000' && c <= '\u200a'; + } + + @Override + public String toString() { + return "CharMatcher.BREAKING_WHITESPACE"; + } + }; + public static final CharMatcher ASCII = CharMatcher.inRange('\u0000', '\u007f', "CharMatcher.ASCII"); + private static final String ZEROES = "0\u0660\u06f0\u07c0\u0966\u09e6\u0a66\u0ae6\u0b66\u0be6\u0c66\u0ce6\u0d66\u0e50\u0ed0\u0f20\u1040\u1090\u17e0\u1810\u1946\u19d0\u1b50\u1bb0\u1c40\u1c50\ua620\ua8d0\ua900\uaa50\uff10"; + private static final String NINES; + public static final CharMatcher DIGIT; + public static final CharMatcher JAVA_DIGIT; + public static final CharMatcher JAVA_LETTER; + public static final CharMatcher JAVA_LETTER_OR_DIGIT; + public static final CharMatcher JAVA_UPPER_CASE; + public static final CharMatcher JAVA_LOWER_CASE; + public static final CharMatcher JAVA_ISO_CONTROL; + public static final CharMatcher INVISIBLE; + public static final CharMatcher SINGLE_WIDTH; + public static final CharMatcher ANY; + public static final CharMatcher NONE; + final String description; + private static final int DISTINCT_CHARS = 65536; + static final String WHITESPACE_TABLE = "\u2002\u3000\r\u0085\u200a\u2005\u2000\u3000\u2029\u000b\u3000\u2008\u2003\u205f\u3000\u1680\t \u2006\u2001\u202f\u00a0\f\u2009\u3000\u2004\u3000\u3000\u2028\n\u2007\u3000"; + static final int WHITESPACE_MULTIPLIER = 1682554634; + static final int WHITESPACE_SHIFT; + public static final CharMatcher WHITESPACE; + + private static String showCharacter(char c) { + String hex = "0123456789ABCDEF"; + char[] tmp = new char[]{'\\', 'u', '\u0000', '\u0000', '\u0000', '\u0000'}; + for (int i = 0; i < 4; ++i) { + tmp[5 - i] = hex.charAt(c & 0xF); + c = (char)(c >> 4); + } + return String.copyValueOf(tmp); + } + + public static CharMatcher is(final char match) { + String string = String.valueOf(String.valueOf(CharMatcher.showCharacter(match))); + String description = new StringBuilder(18 + string.length()).append("CharMatcher.is('").append(string).append("')").toString(); + return new FastMatcher(description){ + + @Override + public boolean matches(char c) { + return c == match; + } + + @Override + public String replaceFrom(CharSequence sequence, char replacement) { + return sequence.toString().replace(match, replacement); + } + + @Override + public CharMatcher and(CharMatcher other) { + return other.matches(match) ? this : NONE; + } + + @Override + public CharMatcher or(CharMatcher other) { + return other.matches(match) ? other : super.or(other); + } + + @Override + public CharMatcher negate() { + return 9.isNot(match); + } + + @Override + @GwtIncompatible(value="java.util.BitSet") + void setBits(BitSet table) { + table.set(match); + } + }; + } + + public static CharMatcher isNot(final char match) { + String string = String.valueOf(String.valueOf(CharMatcher.showCharacter(match))); + String description = new StringBuilder(21 + string.length()).append("CharMatcher.isNot('").append(string).append("')").toString(); + return new FastMatcher(description){ + + @Override + public boolean matches(char c) { + return c != match; + } + + @Override + public CharMatcher and(CharMatcher other) { + return other.matches(match) ? super.and(other) : other; + } + + @Override + public CharMatcher or(CharMatcher other) { + return other.matches(match) ? ANY : this; + } + + @Override + @GwtIncompatible(value="java.util.BitSet") + void setBits(BitSet table) { + table.set(0, match); + table.set(match + '\u0001', 65536); + } + + @Override + public CharMatcher negate() { + return 10.is(match); + } + }; + } + + public static CharMatcher anyOf(CharSequence sequence) { + switch (sequence.length()) { + case 0: { + return NONE; + } + case 1: { + return CharMatcher.is(sequence.charAt(0)); + } + case 2: { + return CharMatcher.isEither(sequence.charAt(0), sequence.charAt(1)); + } + } + final char[] chars = sequence.toString().toCharArray(); + Arrays.sort(chars); + StringBuilder description = new StringBuilder("CharMatcher.anyOf(\""); + for (char c : chars) { + description.append(CharMatcher.showCharacter(c)); + } + description.append("\")"); + return new CharMatcher(description.toString()){ + + @Override + public boolean matches(char c) { + return Arrays.binarySearch(chars, c) >= 0; + } + + @Override + @GwtIncompatible(value="java.util.BitSet") + void setBits(BitSet table) { + for (char c : chars) { + table.set(c); + } + } + }; + } + + private static CharMatcher isEither(final char match1, final char match2) { + String string = String.valueOf(String.valueOf(CharMatcher.showCharacter(match1))); + String string2 = String.valueOf(String.valueOf(CharMatcher.showCharacter(match2))); + String description = new StringBuilder(21 + string.length() + string2.length()).append("CharMatcher.anyOf(\"").append(string).append(string2).append("\")").toString(); + return new FastMatcher(description){ + + @Override + public boolean matches(char c) { + return c == match1 || c == match2; + } + + @Override + @GwtIncompatible(value="java.util.BitSet") + void setBits(BitSet table) { + table.set(match1); + table.set(match2); + } + }; + } + + public static CharMatcher noneOf(CharSequence sequence) { + return CharMatcher.anyOf(sequence).negate(); + } + + public static CharMatcher inRange(char startInclusive, char endInclusive) { + Preconditions.checkArgument(endInclusive >= startInclusive); + String string = String.valueOf(String.valueOf(CharMatcher.showCharacter(startInclusive))); + String string2 = String.valueOf(String.valueOf(CharMatcher.showCharacter(endInclusive))); + String description = new StringBuilder(27 + string.length() + string2.length()).append("CharMatcher.inRange('").append(string).append("', '").append(string2).append("')").toString(); + return CharMatcher.inRange(startInclusive, endInclusive, description); + } + + static CharMatcher inRange(final char startInclusive, final char endInclusive, String description) { + return new FastMatcher(description){ + + @Override + public boolean matches(char c) { + return startInclusive <= c && c <= endInclusive; + } + + @Override + @GwtIncompatible(value="java.util.BitSet") + void setBits(BitSet table) { + table.set((int)startInclusive, endInclusive + '\u0001'); + } + }; + } + + public static CharMatcher forPredicate(final Predicate predicate) { + Preconditions.checkNotNull(predicate); + if (predicate instanceof CharMatcher) { + return (CharMatcher)predicate; + } + String string = String.valueOf(String.valueOf(predicate)); + String description = new StringBuilder(26 + string.length()).append("CharMatcher.forPredicate(").append(string).append(")").toString(); + return new CharMatcher(description){ + + @Override + public boolean matches(char c) { + return predicate.apply(Character.valueOf(c)); + } + + @Override + public boolean apply(Character character) { + return predicate.apply(Preconditions.checkNotNull(character)); + } + }; + } + + CharMatcher(String description) { + this.description = description; + } + + protected CharMatcher() { + this.description = super.toString(); + } + + public abstract boolean matches(char var1); + + public CharMatcher negate() { + return new NegatedMatcher(this); + } + + public CharMatcher and(CharMatcher other) { + return new And(this, Preconditions.checkNotNull(other)); + } + + public CharMatcher or(CharMatcher other) { + return new Or(this, Preconditions.checkNotNull(other)); + } + + public CharMatcher precomputed() { + return Platform.precomputeCharMatcher(this); + } + + CharMatcher withToString(String description) { + throw new UnsupportedOperationException(); + } + + @GwtIncompatible(value="java.util.BitSet") + CharMatcher precomputedInternal() { + String string; + BitSet table = new BitSet(); + this.setBits(table); + int totalCharacters = table.cardinality(); + if (totalCharacters * 2 <= 65536) { + return CharMatcher.precomputedPositive(totalCharacters, table, this.description); + } + table.flip(0, 65536); + int negatedCharacters = 65536 - totalCharacters; + String suffix = ".negate()"; + if (this.description.endsWith(suffix)) { + string = this.description.substring(0, this.description.length() - suffix.length()); + } else { + String string2 = String.valueOf(this.description); + String string3 = String.valueOf(suffix); + string = string3.length() != 0 ? string2.concat(string3) : new String(string2); + } + String negatedDescription = string; + return new NegatedFastMatcher(this.toString(), CharMatcher.precomputedPositive(negatedCharacters, table, negatedDescription)); + } + + @GwtIncompatible(value="java.util.BitSet") + private static CharMatcher precomputedPositive(int totalCharacters, BitSet table, String description) { + switch (totalCharacters) { + case 0: { + return NONE; + } + case 1: { + return CharMatcher.is((char)table.nextSetBit(0)); + } + case 2: { + char c1 = (char)table.nextSetBit(0); + char c2 = (char)table.nextSetBit(c1 + '\u0001'); + return CharMatcher.isEither(c1, c2); + } + } + return CharMatcher.isSmall(totalCharacters, table.length()) ? SmallCharMatcher.from(table, description) : new BitSetMatcher(table, description); + } + + @GwtIncompatible(value="SmallCharMatcher") + private static boolean isSmall(int totalCharacters, int tableLength) { + return totalCharacters <= 1023 && tableLength > totalCharacters * 4 * 16; + } + + @GwtIncompatible(value="java.util.BitSet") + void setBits(BitSet table) { + for (int c = 65535; c >= 0; --c) { + if (!this.matches((char)c)) continue; + table.set(c); + } + } + + public boolean matchesAnyOf(CharSequence sequence) { + return !this.matchesNoneOf(sequence); + } + + public boolean matchesAllOf(CharSequence sequence) { + for (int i = sequence.length() - 1; i >= 0; --i) { + if (this.matches(sequence.charAt(i))) continue; + return false; + } + return true; + } + + public boolean matchesNoneOf(CharSequence sequence) { + return this.indexIn(sequence) == -1; + } + + public int indexIn(CharSequence sequence) { + int length = sequence.length(); + for (int i = 0; i < length; ++i) { + if (!this.matches(sequence.charAt(i))) continue; + return i; + } + return -1; + } + + public int indexIn(CharSequence sequence, int start) { + int length = sequence.length(); + Preconditions.checkPositionIndex(start, length); + for (int i = start; i < length; ++i) { + if (!this.matches(sequence.charAt(i))) continue; + return i; + } + return -1; + } + + public int lastIndexIn(CharSequence sequence) { + for (int i = sequence.length() - 1; i >= 0; --i) { + if (!this.matches(sequence.charAt(i))) continue; + return i; + } + return -1; + } + + public int countIn(CharSequence sequence) { + int count = 0; + for (int i = 0; i < sequence.length(); ++i) { + if (!this.matches(sequence.charAt(i))) continue; + ++count; + } + return count; + } + + @CheckReturnValue + public String removeFrom(CharSequence sequence) { + String string = sequence.toString(); + int pos = this.indexIn(string); + if (pos == -1) { + return string; + } + char[] chars = string.toCharArray(); + int spread = 1; + block0: while (true) { + ++pos; + while (pos != chars.length) { + if (!this.matches(chars[pos])) { + chars[pos - spread] = chars[pos]; + ++pos; + continue; + } + ++spread; + continue block0; + } + break; + } + return new String(chars, 0, pos - spread); + } + + @CheckReturnValue + public String retainFrom(CharSequence sequence) { + return this.negate().removeFrom(sequence); + } + + @CheckReturnValue + public String replaceFrom(CharSequence sequence, char replacement) { + String string = sequence.toString(); + int pos = this.indexIn(string); + if (pos == -1) { + return string; + } + char[] chars = string.toCharArray(); + chars[pos] = replacement; + for (int i = pos + 1; i < chars.length; ++i) { + if (!this.matches(chars[i])) continue; + chars[i] = replacement; + } + return new String(chars); + } + + @CheckReturnValue + public String replaceFrom(CharSequence sequence, CharSequence replacement) { + int replacementLen = replacement.length(); + if (replacementLen == 0) { + return this.removeFrom(sequence); + } + if (replacementLen == 1) { + return this.replaceFrom(sequence, replacement.charAt(0)); + } + String string = sequence.toString(); + int pos = this.indexIn(string); + if (pos == -1) { + return string; + } + int len = string.length(); + StringBuilder buf = new StringBuilder(len * 3 / 2 + 16); + int oldpos = 0; + do { + buf.append(string, oldpos, pos); + buf.append(replacement); + } while ((pos = this.indexIn(string, oldpos = pos + 1)) != -1); + buf.append(string, oldpos, len); + return buf.toString(); + } + + @CheckReturnValue + public String trimFrom(CharSequence sequence) { + int last; + int first; + int len = sequence.length(); + for (first = 0; first < len && this.matches(sequence.charAt(first)); ++first) { + } + for (last = len - 1; last > first && this.matches(sequence.charAt(last)); --last) { + } + return sequence.subSequence(first, last + 1).toString(); + } + + @CheckReturnValue + public String trimLeadingFrom(CharSequence sequence) { + int len = sequence.length(); + for (int first = 0; first < len; ++first) { + if (this.matches(sequence.charAt(first))) continue; + return sequence.subSequence(first, len).toString(); + } + return ""; + } + + @CheckReturnValue + public String trimTrailingFrom(CharSequence sequence) { + int len = sequence.length(); + for (int last = len - 1; last >= 0; --last) { + if (this.matches(sequence.charAt(last))) continue; + return sequence.subSequence(0, last + 1).toString(); + } + return ""; + } + + @CheckReturnValue + public String collapseFrom(CharSequence sequence, char replacement) { + int len = sequence.length(); + for (int i = 0; i < len; ++i) { + char c = sequence.charAt(i); + if (!this.matches(c)) continue; + if (!(c != replacement || i != len - 1 && this.matches(sequence.charAt(i + 1)))) { + ++i; + continue; + } + StringBuilder builder = new StringBuilder(len).append(sequence.subSequence(0, i)).append(replacement); + return this.finishCollapseFrom(sequence, i + 1, len, replacement, builder, true); + } + return sequence.toString(); + } + + @CheckReturnValue + public String trimAndCollapseFrom(CharSequence sequence, char replacement) { + int last; + int first; + int len = sequence.length(); + for (first = 0; first < len && this.matches(sequence.charAt(first)); ++first) { + } + for (last = len - 1; last > first && this.matches(sequence.charAt(last)); --last) { + } + return first == 0 && last == len - 1 ? this.collapseFrom(sequence, replacement) : this.finishCollapseFrom(sequence, first, last + 1, replacement, new StringBuilder(last + 1 - first), false); + } + + private String finishCollapseFrom(CharSequence sequence, int start, int end, char replacement, StringBuilder builder, boolean inMatchingGroup) { + for (int i = start; i < end; ++i) { + char c = sequence.charAt(i); + if (this.matches(c)) { + if (inMatchingGroup) continue; + builder.append(replacement); + inMatchingGroup = true; + continue; + } + builder.append(c); + inMatchingGroup = false; + } + return builder.toString(); + } + + @Override + @Deprecated + public boolean apply(Character character) { + return this.matches(character.charValue()); + } + + public String toString() { + return this.description; + } + + static { + StringBuilder builder = new StringBuilder(ZEROES.length()); + for (int i = 0; i < ZEROES.length(); ++i) { + builder.append((char)(ZEROES.charAt(i) + 9)); + } + NINES = builder.toString(); + DIGIT = new RangesMatcher("CharMatcher.DIGIT", ZEROES.toCharArray(), NINES.toCharArray()); + JAVA_DIGIT = new CharMatcher("CharMatcher.JAVA_DIGIT"){ + + @Override + public boolean matches(char c) { + return Character.isDigit(c); + } + }; + JAVA_LETTER = new CharMatcher("CharMatcher.JAVA_LETTER"){ + + @Override + public boolean matches(char c) { + return Character.isLetter(c); + } + }; + JAVA_LETTER_OR_DIGIT = new CharMatcher("CharMatcher.JAVA_LETTER_OR_DIGIT"){ + + @Override + public boolean matches(char c) { + return Character.isLetterOrDigit(c); + } + }; + JAVA_UPPER_CASE = new CharMatcher("CharMatcher.JAVA_UPPER_CASE"){ + + @Override + public boolean matches(char c) { + return Character.isUpperCase(c); + } + }; + JAVA_LOWER_CASE = new CharMatcher("CharMatcher.JAVA_LOWER_CASE"){ + + @Override + public boolean matches(char c) { + return Character.isLowerCase(c); + } + }; + JAVA_ISO_CONTROL = CharMatcher.inRange('\u0000', '\u001f').or(CharMatcher.inRange('\u007f', '\u009f')).withToString("CharMatcher.JAVA_ISO_CONTROL"); + INVISIBLE = new RangesMatcher("CharMatcher.INVISIBLE", "\u0000\u007f\u00ad\u0600\u061c\u06dd\u070f\u1680\u180e\u2000\u2028\u205f\u2066\u2067\u2068\u2069\u206a\u3000\ud800\ufeff\ufff9\ufffa".toCharArray(), " \u00a0\u00ad\u0604\u061c\u06dd\u070f\u1680\u180e\u200f\u202f\u2064\u2066\u2067\u2068\u2069\u206f\u3000\uf8ff\ufeff\ufff9\ufffb".toCharArray()); + SINGLE_WIDTH = new RangesMatcher("CharMatcher.SINGLE_WIDTH", "\u0000\u05be\u05d0\u05f3\u0600\u0750\u0e00\u1e00\u2100\ufb50\ufe70\uff61".toCharArray(), "\u04f9\u05be\u05ea\u05f4\u06ff\u077f\u0e7f\u20af\u213a\ufdff\ufeff\uffdc".toCharArray()); + ANY = new FastMatcher("CharMatcher.ANY"){ + + @Override + public boolean matches(char c) { + return true; + } + + @Override + public int indexIn(CharSequence sequence) { + return sequence.length() == 0 ? -1 : 0; + } + + @Override + public int indexIn(CharSequence sequence, int start) { + int length = sequence.length(); + Preconditions.checkPositionIndex(start, length); + return start == length ? -1 : start; + } + + @Override + public int lastIndexIn(CharSequence sequence) { + return sequence.length() - 1; + } + + @Override + public boolean matchesAllOf(CharSequence sequence) { + Preconditions.checkNotNull(sequence); + return true; + } + + @Override + public boolean matchesNoneOf(CharSequence sequence) { + return sequence.length() == 0; + } + + @Override + public String removeFrom(CharSequence sequence) { + Preconditions.checkNotNull(sequence); + return ""; + } + + @Override + public String replaceFrom(CharSequence sequence, char replacement) { + char[] array = new char[sequence.length()]; + Arrays.fill(array, replacement); + return new String(array); + } + + @Override + public String replaceFrom(CharSequence sequence, CharSequence replacement) { + StringBuilder retval = new StringBuilder(sequence.length() * replacement.length()); + for (int i = 0; i < sequence.length(); ++i) { + retval.append(replacement); + } + return retval.toString(); + } + + @Override + public String collapseFrom(CharSequence sequence, char replacement) { + return sequence.length() == 0 ? "" : String.valueOf(replacement); + } + + @Override + public String trimFrom(CharSequence sequence) { + Preconditions.checkNotNull(sequence); + return ""; + } + + @Override + public int countIn(CharSequence sequence) { + return sequence.length(); + } + + @Override + public CharMatcher and(CharMatcher other) { + return Preconditions.checkNotNull(other); + } + + @Override + public CharMatcher or(CharMatcher other) { + Preconditions.checkNotNull(other); + return this; + } + + @Override + public CharMatcher negate() { + return NONE; + } + }; + NONE = new FastMatcher("CharMatcher.NONE"){ + + @Override + public boolean matches(char c) { + return false; + } + + @Override + public int indexIn(CharSequence sequence) { + Preconditions.checkNotNull(sequence); + return -1; + } + + @Override + public int indexIn(CharSequence sequence, int start) { + int length = sequence.length(); + Preconditions.checkPositionIndex(start, length); + return -1; + } + + @Override + public int lastIndexIn(CharSequence sequence) { + Preconditions.checkNotNull(sequence); + return -1; + } + + @Override + public boolean matchesAllOf(CharSequence sequence) { + return sequence.length() == 0; + } + + @Override + public boolean matchesNoneOf(CharSequence sequence) { + Preconditions.checkNotNull(sequence); + return true; + } + + @Override + public String removeFrom(CharSequence sequence) { + return sequence.toString(); + } + + @Override + public String replaceFrom(CharSequence sequence, char replacement) { + return sequence.toString(); + } + + @Override + public String replaceFrom(CharSequence sequence, CharSequence replacement) { + Preconditions.checkNotNull(replacement); + return sequence.toString(); + } + + @Override + public String collapseFrom(CharSequence sequence, char replacement) { + return sequence.toString(); + } + + @Override + public String trimFrom(CharSequence sequence) { + return sequence.toString(); + } + + @Override + public String trimLeadingFrom(CharSequence sequence) { + return sequence.toString(); + } + + @Override + public String trimTrailingFrom(CharSequence sequence) { + return sequence.toString(); + } + + @Override + public int countIn(CharSequence sequence) { + Preconditions.checkNotNull(sequence); + return 0; + } + + @Override + public CharMatcher and(CharMatcher other) { + Preconditions.checkNotNull(other); + return this; + } + + @Override + public CharMatcher or(CharMatcher other) { + return Preconditions.checkNotNull(other); + } + + @Override + public CharMatcher negate() { + return ANY; + } + }; + WHITESPACE_SHIFT = Integer.numberOfLeadingZeros(WHITESPACE_TABLE.length() - 1); + WHITESPACE = new FastMatcher("WHITESPACE"){ + + @Override + public boolean matches(char c) { + return CharMatcher.WHITESPACE_TABLE.charAt(1682554634 * c >>> WHITESPACE_SHIFT) == c; + } + + @Override + @GwtIncompatible(value="java.util.BitSet") + void setBits(BitSet table) { + for (int i = 0; i < CharMatcher.WHITESPACE_TABLE.length(); ++i) { + table.set(CharMatcher.WHITESPACE_TABLE.charAt(i)); + } + } + }; + } + + @GwtIncompatible(value="java.util.BitSet") + private static class BitSetMatcher + extends FastMatcher { + private final BitSet table; + + private BitSetMatcher(BitSet table, String description) { + super(description); + if (table.length() + 64 < table.size()) { + table = (BitSet)table.clone(); + } + this.table = table; + } + + @Override + public boolean matches(char c) { + return this.table.get(c); + } + + @Override + void setBits(BitSet bitSet) { + bitSet.or(this.table); + } + } + + static final class NegatedFastMatcher + extends NegatedMatcher { + NegatedFastMatcher(CharMatcher original) { + super(original); + } + + NegatedFastMatcher(String toString, CharMatcher original) { + super(toString, original); + } + + @Override + public final CharMatcher precomputed() { + return this; + } + + @Override + CharMatcher withToString(String description) { + return new NegatedFastMatcher(description, this.original); + } + } + + static abstract class FastMatcher + extends CharMatcher { + FastMatcher() { + } + + FastMatcher(String description) { + super(description); + } + + @Override + public final CharMatcher precomputed() { + return this; + } + + @Override + public CharMatcher negate() { + return new NegatedFastMatcher(this); + } + } + + private static class Or + extends CharMatcher { + final CharMatcher first; + final CharMatcher second; + + Or(CharMatcher a, CharMatcher b, String description) { + super(description); + this.first = Preconditions.checkNotNull(a); + this.second = Preconditions.checkNotNull(b); + } + + Or(CharMatcher a, CharMatcher b) { + String string = String.valueOf(String.valueOf(a)); + String string2 = String.valueOf(String.valueOf(b)); + this(a, b, new StringBuilder(18 + string.length() + string2.length()).append("CharMatcher.or(").append(string).append(", ").append(string2).append(")").toString()); + } + + @Override + @GwtIncompatible(value="java.util.BitSet") + void setBits(BitSet table) { + this.first.setBits(table); + this.second.setBits(table); + } + + @Override + public boolean matches(char c) { + return this.first.matches(c) || this.second.matches(c); + } + + @Override + CharMatcher withToString(String description) { + return new Or(this.first, this.second, description); + } + } + + private static class And + extends CharMatcher { + final CharMatcher first; + final CharMatcher second; + + And(CharMatcher a, CharMatcher b) { + String string = String.valueOf(String.valueOf(a)); + String string2 = String.valueOf(String.valueOf(b)); + this(a, b, new StringBuilder(19 + string.length() + string2.length()).append("CharMatcher.and(").append(string).append(", ").append(string2).append(")").toString()); + } + + And(CharMatcher a, CharMatcher b, String description) { + super(description); + this.first = Preconditions.checkNotNull(a); + this.second = Preconditions.checkNotNull(b); + } + + @Override + public boolean matches(char c) { + return this.first.matches(c) && this.second.matches(c); + } + + @Override + @GwtIncompatible(value="java.util.BitSet") + void setBits(BitSet table) { + BitSet tmp1 = new BitSet(); + this.first.setBits(tmp1); + BitSet tmp2 = new BitSet(); + this.second.setBits(tmp2); + tmp1.and(tmp2); + table.or(tmp1); + } + + @Override + CharMatcher withToString(String description) { + return new And(this.first, this.second, description); + } + } + + private static class NegatedMatcher + extends CharMatcher { + final CharMatcher original; + + NegatedMatcher(String toString, CharMatcher original) { + super(toString); + this.original = original; + } + + NegatedMatcher(CharMatcher original) { + String string = String.valueOf(String.valueOf(original)); + this(new StringBuilder(9 + string.length()).append(string).append(".negate()").toString(), original); + } + + @Override + public boolean matches(char c) { + return !this.original.matches(c); + } + + @Override + public boolean matchesAllOf(CharSequence sequence) { + return this.original.matchesNoneOf(sequence); + } + + @Override + public boolean matchesNoneOf(CharSequence sequence) { + return this.original.matchesAllOf(sequence); + } + + @Override + public int countIn(CharSequence sequence) { + return sequence.length() - this.original.countIn(sequence); + } + + @Override + @GwtIncompatible(value="java.util.BitSet") + void setBits(BitSet table) { + BitSet tmp = new BitSet(); + this.original.setBits(tmp); + tmp.flip(0, 65536); + table.or(tmp); + } + + @Override + public CharMatcher negate() { + return this.original; + } + + @Override + CharMatcher withToString(String description) { + return new NegatedMatcher(description, this.original); + } + } + + private static class RangesMatcher + extends CharMatcher { + private final char[] rangeStarts; + private final char[] rangeEnds; + + RangesMatcher(String description, char[] rangeStarts, char[] rangeEnds) { + super(description); + this.rangeStarts = rangeStarts; + this.rangeEnds = rangeEnds; + Preconditions.checkArgument(rangeStarts.length == rangeEnds.length); + for (int i = 0; i < rangeStarts.length; ++i) { + Preconditions.checkArgument(rangeStarts[i] <= rangeEnds[i]); + if (i + 1 >= rangeStarts.length) continue; + Preconditions.checkArgument(rangeEnds[i] < rangeStarts[i + 1]); + } + } + + @Override + public boolean matches(char c) { + int index = Arrays.binarySearch(this.rangeStarts, c); + if (index >= 0) { + return true; + } + return (index = ~index - 1) >= 0 && c <= this.rangeEnds[index]; + } + } +} diff --git a/src/com/google/common/base/Charsets.java b/src/com/google/common/base/Charsets.java new file mode 100644 index 0000000..00cb6da --- /dev/null +++ b/src/com/google/common/base/Charsets.java @@ -0,0 +1,26 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.base; + +import com.google.common.annotations.GwtCompatible; +import com.google.common.annotations.GwtIncompatible; +import java.nio.charset.Charset; + +@GwtCompatible(emulated=true) +public final class Charsets { + @GwtIncompatible(value="Non-UTF-8 Charset") + public static final Charset US_ASCII = Charset.forName("US-ASCII"); + @GwtIncompatible(value="Non-UTF-8 Charset") + public static final Charset ISO_8859_1 = Charset.forName("ISO-8859-1"); + public static final Charset UTF_8 = Charset.forName("UTF-8"); + @GwtIncompatible(value="Non-UTF-8 Charset") + public static final Charset UTF_16BE = Charset.forName("UTF-16BE"); + @GwtIncompatible(value="Non-UTF-8 Charset") + public static final Charset UTF_16LE = Charset.forName("UTF-16LE"); + @GwtIncompatible(value="Non-UTF-8 Charset") + public static final Charset UTF_16 = Charset.forName("UTF-16"); + + private Charsets() { + } +} diff --git a/src/com/google/common/base/Converter.java b/src/com/google/common/base/Converter.java new file mode 100644 index 0000000..36468eb --- /dev/null +++ b/src/com/google/common/base/Converter.java @@ -0,0 +1,305 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.base; + +import com.google.common.annotations.Beta; +import com.google.common.annotations.GwtCompatible; +import com.google.common.base.Function; +import com.google.common.base.Preconditions; +import java.io.Serializable; +import java.util.Iterator; +import javax.annotation.Nullable; + +@Beta +@GwtCompatible +public abstract class Converter +implements Function { + private final boolean handleNullAutomatically; + private transient Converter reverse; + + protected Converter() { + this(true); + } + + Converter(boolean handleNullAutomatically) { + this.handleNullAutomatically = handleNullAutomatically; + } + + protected abstract B doForward(A var1); + + protected abstract A doBackward(B var1); + + @Nullable + public final B convert(@Nullable A a) { + return this.correctedDoForward(a); + } + + @Nullable + B correctedDoForward(@Nullable A a) { + if (this.handleNullAutomatically) { + return a == null ? null : (B)Preconditions.checkNotNull(this.doForward(a)); + } + return this.doForward(a); + } + + @Nullable + A correctedDoBackward(@Nullable B b) { + if (this.handleNullAutomatically) { + return b == null ? null : (A)Preconditions.checkNotNull(this.doBackward(b)); + } + return this.doBackward(b); + } + + public Iterable convertAll(final Iterable fromIterable) { + Preconditions.checkNotNull(fromIterable, "fromIterable"); + return new Iterable(){ + + @Override + public Iterator iterator() { + return new Iterator(){ + private final Iterator fromIterator; + { + this.fromIterator = fromIterable.iterator(); + } + + @Override + public boolean hasNext() { + return this.fromIterator.hasNext(); + } + + @Override + public B next() { + return Converter.this.convert(this.fromIterator.next()); + } + + @Override + public void remove() { + this.fromIterator.remove(); + } + }; + } + }; + } + + public Converter reverse() { + Converter result = this.reverse; + return result == null ? (this.reverse = new ReverseConverter(this)) : result; + } + + public final Converter andThen(Converter secondConverter) { + return this.doAndThen(secondConverter); + } + + Converter doAndThen(Converter secondConverter) { + return new ConverterComposition(this, Preconditions.checkNotNull(secondConverter)); + } + + @Override + @Deprecated + @Nullable + public final B apply(@Nullable A a) { + return this.convert(a); + } + + @Override + public boolean equals(@Nullable Object object) { + return super.equals(object); + } + + public static Converter from(Function forwardFunction, Function backwardFunction) { + return new FunctionBasedConverter(forwardFunction, backwardFunction); + } + + public static Converter identity() { + return IdentityConverter.INSTANCE; + } + + private static final class IdentityConverter + extends Converter + implements Serializable { + static final IdentityConverter INSTANCE = new IdentityConverter(); + private static final long serialVersionUID = 0L; + + private IdentityConverter() { + } + + @Override + protected T doForward(T t) { + return t; + } + + @Override + protected T doBackward(T t) { + return t; + } + + public IdentityConverter reverse() { + return this; + } + + @Override + Converter doAndThen(Converter otherConverter) { + return Preconditions.checkNotNull(otherConverter, "otherConverter"); + } + + public String toString() { + return "Converter.identity()"; + } + + private Object readResolve() { + return INSTANCE; + } + } + + private static final class FunctionBasedConverter + extends Converter + implements Serializable { + private final Function forwardFunction; + private final Function backwardFunction; + + private FunctionBasedConverter(Function forwardFunction, Function backwardFunction) { + this.forwardFunction = Preconditions.checkNotNull(forwardFunction); + this.backwardFunction = Preconditions.checkNotNull(backwardFunction); + } + + @Override + protected B doForward(A a) { + return this.forwardFunction.apply(a); + } + + @Override + protected A doBackward(B b) { + return this.backwardFunction.apply(b); + } + + @Override + public boolean equals(@Nullable Object object) { + if (object instanceof FunctionBasedConverter) { + FunctionBasedConverter that = (FunctionBasedConverter)object; + return this.forwardFunction.equals(that.forwardFunction) && this.backwardFunction.equals(that.backwardFunction); + } + return false; + } + + public int hashCode() { + return this.forwardFunction.hashCode() * 31 + this.backwardFunction.hashCode(); + } + + public String toString() { + String string = String.valueOf(String.valueOf(this.forwardFunction)); + String string2 = String.valueOf(String.valueOf(this.backwardFunction)); + return new StringBuilder(18 + string.length() + string2.length()).append("Converter.from(").append(string).append(", ").append(string2).append(")").toString(); + } + } + + private static final class ConverterComposition + extends Converter + implements Serializable { + final Converter first; + final Converter second; + private static final long serialVersionUID = 0L; + + ConverterComposition(Converter first, Converter second) { + this.first = first; + this.second = second; + } + + @Override + protected C doForward(A a) { + throw new AssertionError(); + } + + @Override + protected A doBackward(C c) { + throw new AssertionError(); + } + + @Override + @Nullable + C correctedDoForward(@Nullable A a) { + return this.second.correctedDoForward(this.first.correctedDoForward(a)); + } + + @Override + @Nullable + A correctedDoBackward(@Nullable C c) { + return this.first.correctedDoBackward(this.second.correctedDoBackward(c)); + } + + @Override + public boolean equals(@Nullable Object object) { + if (object instanceof ConverterComposition) { + ConverterComposition that = (ConverterComposition)object; + return this.first.equals(that.first) && this.second.equals(that.second); + } + return false; + } + + public int hashCode() { + return 31 * this.first.hashCode() + this.second.hashCode(); + } + + public String toString() { + String string = String.valueOf(String.valueOf(this.first)); + String string2 = String.valueOf(String.valueOf(this.second)); + return new StringBuilder(10 + string.length() + string2.length()).append(string).append(".andThen(").append(string2).append(")").toString(); + } + } + + private static final class ReverseConverter + extends Converter + implements Serializable { + final Converter original; + private static final long serialVersionUID = 0L; + + ReverseConverter(Converter original) { + this.original = original; + } + + @Override + protected A doForward(B b) { + throw new AssertionError(); + } + + @Override + protected B doBackward(A a) { + throw new AssertionError(); + } + + @Override + @Nullable + A correctedDoForward(@Nullable B b) { + return this.original.correctedDoBackward(b); + } + + @Override + @Nullable + B correctedDoBackward(@Nullable A a) { + return this.original.correctedDoForward(a); + } + + @Override + public Converter reverse() { + return this.original; + } + + @Override + public boolean equals(@Nullable Object object) { + if (object instanceof ReverseConverter) { + ReverseConverter that = (ReverseConverter)object; + return this.original.equals(that.original); + } + return false; + } + + public int hashCode() { + return ~this.original.hashCode(); + } + + public String toString() { + String string = String.valueOf(String.valueOf(this.original)); + return new StringBuilder(10 + string.length()).append(string).append(".reverse()").toString(); + } + } +} diff --git a/src/com/google/common/base/Defaults.java b/src/com/google/common/base/Defaults.java new file mode 100644 index 0000000..6f2862d --- /dev/null +++ b/src/com/google/common/base/Defaults.java @@ -0,0 +1,40 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.base; + +import com.google.common.base.Preconditions; +import java.util.Collections; +import java.util.HashMap; +import java.util.Map; +import javax.annotation.Nullable; + +public final class Defaults { + private static final Map, Object> DEFAULTS; + + private Defaults() { + } + + private static void put(Map, Object> map, Class type, T value) { + map.put(type, value); + } + + @Nullable + public static T defaultValue(Class type) { + Object t = DEFAULTS.get(Preconditions.checkNotNull(type)); + return (T)t; + } + + static { + HashMap map = new HashMap(); + Defaults.put(map, Boolean.TYPE, false); + Defaults.put(map, Character.TYPE, Character.valueOf('\u0000')); + Defaults.put(map, Byte.TYPE, (byte)0); + Defaults.put(map, Short.TYPE, (short)0); + Defaults.put(map, Integer.TYPE, 0); + Defaults.put(map, Long.TYPE, 0L); + Defaults.put(map, Float.TYPE, Float.valueOf(0.0f)); + Defaults.put(map, Double.TYPE, 0.0); + DEFAULTS = Collections.unmodifiableMap(map); + } +} diff --git a/src/com/google/common/base/Enums.java b/src/com/google/common/base/Enums.java new file mode 100644 index 0000000..d482b99 --- /dev/null +++ b/src/com/google/common/base/Enums.java @@ -0,0 +1,115 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.base; + +import com.google.common.annotations.Beta; +import com.google.common.annotations.GwtCompatible; +import com.google.common.annotations.GwtIncompatible; +import com.google.common.base.Converter; +import com.google.common.base.Optional; +import com.google.common.base.Platform; +import com.google.common.base.Preconditions; +import java.io.Serializable; +import java.lang.ref.WeakReference; +import java.lang.reflect.Field; +import java.util.EnumSet; +import java.util.HashMap; +import java.util.Map; +import java.util.WeakHashMap; +import javax.annotation.Nullable; + +@GwtCompatible(emulated=true) +@Beta +public final class Enums { + @GwtIncompatible(value="java.lang.ref.WeakReference") + private static final Map>, Map>>> enumConstantCache = new WeakHashMap(); + + private Enums() { + } + + @GwtIncompatible(value="reflection") + public static Field getField(Enum enumValue) { + Class clazz = enumValue.getDeclaringClass(); + try { + return clazz.getDeclaredField(enumValue.name()); + } + catch (NoSuchFieldException impossible) { + throw new AssertionError((Object)impossible); + } + } + + public static > Optional getIfPresent(Class enumClass, String value) { + Preconditions.checkNotNull(enumClass); + Preconditions.checkNotNull(value); + return Platform.getEnumIfPresent(enumClass, value); + } + + @GwtIncompatible(value="java.lang.ref.WeakReference") + private static > Map>> populateCache(Class enumClass) { + HashMap result = new HashMap(); + for (Enum enumInstance : EnumSet.allOf(enumClass)) { + result.put(enumInstance.name(), new WeakReference(enumInstance)); + } + enumConstantCache.put(enumClass, result); + return result; + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @GwtIncompatible(value="java.lang.ref.WeakReference") + static > Map>> getEnumConstants(Class enumClass) { + Map>, Map>>> map = enumConstantCache; + synchronized (map) { + Map> constants = enumConstantCache.get(enumClass); + if (constants == null) { + constants = Enums.populateCache(enumClass); + } + return constants; + } + } + + public static > Converter stringConverter(Class enumClass) { + return new StringConverter(enumClass); + } + + private static final class StringConverter> + extends Converter + implements Serializable { + private final Class enumClass; + private static final long serialVersionUID = 0L; + + StringConverter(Class enumClass) { + this.enumClass = Preconditions.checkNotNull(enumClass); + } + + @Override + protected T doForward(String value) { + return Enum.valueOf(this.enumClass, value); + } + + @Override + protected String doBackward(T enumValue) { + return ((Enum)enumValue).name(); + } + + @Override + public boolean equals(@Nullable Object object) { + if (object instanceof StringConverter) { + StringConverter that = (StringConverter)object; + return this.enumClass.equals(that.enumClass); + } + return false; + } + + public int hashCode() { + return this.enumClass.hashCode(); + } + + public String toString() { + String string = String.valueOf(String.valueOf(this.enumClass.getName())); + return new StringBuilder(29 + string.length()).append("Enums.stringConverter(").append(string).append(".class)").toString(); + } + } +} diff --git a/src/com/google/common/base/Equivalence.java b/src/com/google/common/base/Equivalence.java new file mode 100644 index 0000000..2fcaced --- /dev/null +++ b/src/com/google/common/base/Equivalence.java @@ -0,0 +1,199 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.base; + +import com.google.common.annotations.Beta; +import com.google.common.annotations.GwtCompatible; +import com.google.common.base.Function; +import com.google.common.base.FunctionalEquivalence; +import com.google.common.base.Objects; +import com.google.common.base.PairwiseEquivalence; +import com.google.common.base.Preconditions; +import com.google.common.base.Predicate; +import java.io.Serializable; +import javax.annotation.Nullable; + +@GwtCompatible +public abstract class Equivalence { + protected Equivalence() { + } + + public final boolean equivalent(@Nullable T a, @Nullable T b) { + if (a == b) { + return true; + } + if (a == null || b == null) { + return false; + } + return this.doEquivalent(a, b); + } + + protected abstract boolean doEquivalent(T var1, T var2); + + public final int hash(@Nullable T t) { + if (t == null) { + return 0; + } + return this.doHash(t); + } + + protected abstract int doHash(T var1); + + public final Equivalence onResultOf(Function function) { + return new FunctionalEquivalence(function, this); + } + + public final Wrapper wrap(@Nullable S reference) { + return new Wrapper(this, reference); + } + + @GwtCompatible(serializable=true) + public final Equivalence> pairwise() { + return new PairwiseEquivalence(this); + } + + @Beta + public final Predicate equivalentTo(@Nullable T target) { + return new EquivalentToPredicate(this, target); + } + + public static Equivalence equals() { + return Equals.INSTANCE; + } + + public static Equivalence identity() { + return Identity.INSTANCE; + } + + static final class Identity + extends Equivalence + implements Serializable { + static final Identity INSTANCE = new Identity(); + private static final long serialVersionUID = 1L; + + Identity() { + } + + @Override + protected boolean doEquivalent(Object a, Object b) { + return false; + } + + @Override + protected int doHash(Object o) { + return System.identityHashCode(o); + } + + private Object readResolve() { + return INSTANCE; + } + } + + static final class Equals + extends Equivalence + implements Serializable { + static final Equals INSTANCE = new Equals(); + private static final long serialVersionUID = 1L; + + Equals() { + } + + @Override + protected boolean doEquivalent(Object a, Object b) { + return a.equals(b); + } + + @Override + protected int doHash(Object o) { + return o.hashCode(); + } + + private Object readResolve() { + return INSTANCE; + } + } + + private static final class EquivalentToPredicate + implements Predicate, + Serializable { + private final Equivalence equivalence; + @Nullable + private final T target; + private static final long serialVersionUID = 0L; + + EquivalentToPredicate(Equivalence equivalence, @Nullable T target) { + this.equivalence = Preconditions.checkNotNull(equivalence); + this.target = target; + } + + @Override + public boolean apply(@Nullable T input) { + return this.equivalence.equivalent(input, this.target); + } + + @Override + public boolean equals(@Nullable Object obj) { + if (this == obj) { + return true; + } + if (obj instanceof EquivalentToPredicate) { + EquivalentToPredicate that = (EquivalentToPredicate)obj; + return this.equivalence.equals(that.equivalence) && Objects.equal(this.target, that.target); + } + return false; + } + + public int hashCode() { + return Objects.hashCode(this.equivalence, this.target); + } + + public String toString() { + String string = String.valueOf(String.valueOf(this.equivalence)); + String string2 = String.valueOf(String.valueOf(this.target)); + return new StringBuilder(15 + string.length() + string2.length()).append(string).append(".equivalentTo(").append(string2).append(")").toString(); + } + } + + public static final class Wrapper + implements Serializable { + private final Equivalence equivalence; + @Nullable + private final T reference; + private static final long serialVersionUID = 0L; + + private Wrapper(Equivalence equivalence, @Nullable T reference) { + this.equivalence = Preconditions.checkNotNull(equivalence); + this.reference = reference; + } + + @Nullable + public T get() { + return this.reference; + } + + public boolean equals(@Nullable Object obj) { + if (obj == this) { + return true; + } + if (obj instanceof Wrapper) { + Wrapper that = (Wrapper)obj; + if (this.equivalence.equals(that.equivalence)) { + Equivalence equivalence = this.equivalence; + return equivalence.equivalent(this.reference, that.reference); + } + } + return false; + } + + public int hashCode() { + return this.equivalence.hash(this.reference); + } + + public String toString() { + String string = String.valueOf(String.valueOf(this.equivalence)); + String string2 = String.valueOf(String.valueOf(this.reference)); + return new StringBuilder(7 + string.length() + string2.length()).append(string).append(".wrap(").append(string2).append(")").toString(); + } + } +} diff --git a/src/com/google/common/base/FinalizablePhantomReference.java b/src/com/google/common/base/FinalizablePhantomReference.java new file mode 100644 index 0000000..d7db526 --- /dev/null +++ b/src/com/google/common/base/FinalizablePhantomReference.java @@ -0,0 +1,17 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.base; + +import com.google.common.base.FinalizableReference; +import com.google.common.base.FinalizableReferenceQueue; +import java.lang.ref.PhantomReference; + +public abstract class FinalizablePhantomReference +extends PhantomReference +implements FinalizableReference { + protected FinalizablePhantomReference(T referent, FinalizableReferenceQueue queue) { + super(referent, queue.queue); + queue.cleanUp(); + } +} diff --git a/src/com/google/common/base/FinalizableReference.java b/src/com/google/common/base/FinalizableReference.java new file mode 100644 index 0000000..a0afedb --- /dev/null +++ b/src/com/google/common/base/FinalizableReference.java @@ -0,0 +1,8 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.base; + +public interface FinalizableReference { + public void finalizeReferent(); +} diff --git a/src/com/google/common/base/FinalizableReferenceQueue.java b/src/com/google/common/base/FinalizableReferenceQueue.java new file mode 100644 index 0000000..2102cd3 --- /dev/null +++ b/src/com/google/common/base/FinalizableReferenceQueue.java @@ -0,0 +1,182 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.base; + +import com.google.common.annotations.VisibleForTesting; +import com.google.common.base.FinalizableReference; +import java.io.Closeable; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.lang.ref.PhantomReference; +import java.lang.ref.Reference; +import java.lang.ref.ReferenceQueue; +import java.lang.reflect.Method; +import java.net.URL; +import java.net.URLClassLoader; +import java.util.logging.Level; +import java.util.logging.Logger; +import javax.annotation.Nullable; + +public class FinalizableReferenceQueue +implements Closeable { + private static final Logger logger = Logger.getLogger(FinalizableReferenceQueue.class.getName()); + private static final String FINALIZER_CLASS_NAME = "com.google.common.base.internal.Finalizer"; + private static final Method startFinalizer; + final ReferenceQueue queue = new ReferenceQueue(); + final PhantomReference frqRef = new PhantomReference(this, this.queue); + final boolean threadStarted; + + public FinalizableReferenceQueue() { + boolean threadStarted = false; + try { + startFinalizer.invoke(null, FinalizableReference.class, this.queue, this.frqRef); + threadStarted = true; + } + catch (IllegalAccessException impossible) { + throw new AssertionError((Object)impossible); + } + catch (Throwable t) { + logger.log(Level.INFO, "Failed to start reference finalizer thread. Reference cleanup will only occur when new references are created.", t); + } + this.threadStarted = threadStarted; + } + + @Override + public void close() { + this.frqRef.enqueue(); + this.cleanUp(); + } + + void cleanUp() { + Reference reference; + if (this.threadStarted) { + return; + } + while ((reference = this.queue.poll()) != null) { + reference.clear(); + try { + ((FinalizableReference)((Object)reference)).finalizeReferent(); + } + catch (Throwable t) { + logger.log(Level.SEVERE, "Error cleaning up after reference.", t); + } + } + } + + private static Class loadFinalizer(FinalizerLoader ... loaders) { + for (FinalizerLoader loader : loaders) { + Class finalizer = loader.loadFinalizer(); + if (finalizer == null) continue; + return finalizer; + } + throw new AssertionError(); + } + + static Method getStartFinalizer(Class finalizer) { + try { + return finalizer.getMethod("startFinalizer", Class.class, ReferenceQueue.class, PhantomReference.class); + } + catch (NoSuchMethodException e) { + throw new AssertionError((Object)e); + } + } + + static { + Class finalizer = FinalizableReferenceQueue.loadFinalizer(new SystemLoader(), new DecoupledLoader(), new DirectLoader()); + startFinalizer = FinalizableReferenceQueue.getStartFinalizer(finalizer); + } + + static class DirectLoader + implements FinalizerLoader { + DirectLoader() { + } + + @Override + public Class loadFinalizer() { + try { + return Class.forName(FinalizableReferenceQueue.FINALIZER_CLASS_NAME); + } + catch (ClassNotFoundException e) { + throw new AssertionError((Object)e); + } + } + } + + static class DecoupledLoader + implements FinalizerLoader { + private static final String LOADING_ERROR = "Could not load Finalizer in its own class loader.Loading Finalizer in the current class loader instead. As a result, you will not be ableto garbage collect this class loader. To support reclaiming this class loader, eitherresolve the underlying issue, or move Google Collections to your system class path."; + + DecoupledLoader() { + } + + @Override + public Class loadFinalizer() { + try { + URLClassLoader finalizerLoader = this.newLoader(this.getBaseUrl()); + return finalizerLoader.loadClass(FinalizableReferenceQueue.FINALIZER_CLASS_NAME); + } + catch (Exception e) { + logger.log(Level.WARNING, LOADING_ERROR, e); + return null; + } + } + + URL getBaseUrl() throws IOException { + String finalizerPath = String.valueOf(FinalizableReferenceQueue.FINALIZER_CLASS_NAME.replace('.', '/')).concat(".class"); + URL finalizerUrl = this.getClass().getClassLoader().getResource(finalizerPath); + if (finalizerUrl == null) { + throw new FileNotFoundException(finalizerPath); + } + String urlString = finalizerUrl.toString(); + if (!urlString.endsWith(finalizerPath)) { + String string = String.valueOf(urlString); + throw new IOException(string.length() != 0 ? "Unsupported path style: ".concat(string) : new String("Unsupported path style: ")); + } + urlString = urlString.substring(0, urlString.length() - finalizerPath.length()); + return new URL(finalizerUrl, urlString); + } + + URLClassLoader newLoader(URL base) { + return new URLClassLoader(new URL[]{base}, null); + } + } + + static class SystemLoader + implements FinalizerLoader { + @VisibleForTesting + static boolean disabled; + + SystemLoader() { + } + + @Override + public Class loadFinalizer() { + ClassLoader systemLoader; + if (disabled) { + return null; + } + try { + systemLoader = ClassLoader.getSystemClassLoader(); + } + catch (SecurityException e) { + logger.info("Not allowed to access system class loader."); + return null; + } + if (systemLoader != null) { + try { + return systemLoader.loadClass(FinalizableReferenceQueue.FINALIZER_CLASS_NAME); + } + catch (ClassNotFoundException e) { + return null; + } + } + return null; + } + } + + static interface FinalizerLoader { + @Nullable + public Class loadFinalizer(); + } +} diff --git a/src/com/google/common/base/FinalizableSoftReference.java b/src/com/google/common/base/FinalizableSoftReference.java new file mode 100644 index 0000000..61838e0 --- /dev/null +++ b/src/com/google/common/base/FinalizableSoftReference.java @@ -0,0 +1,17 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.base; + +import com.google.common.base.FinalizableReference; +import com.google.common.base.FinalizableReferenceQueue; +import java.lang.ref.SoftReference; + +public abstract class FinalizableSoftReference +extends SoftReference +implements FinalizableReference { + protected FinalizableSoftReference(T referent, FinalizableReferenceQueue queue) { + super(referent, queue.queue); + queue.cleanUp(); + } +} diff --git a/src/com/google/common/base/FinalizableWeakReference.java b/src/com/google/common/base/FinalizableWeakReference.java new file mode 100644 index 0000000..3b3f0f0 --- /dev/null +++ b/src/com/google/common/base/FinalizableWeakReference.java @@ -0,0 +1,17 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.base; + +import com.google.common.base.FinalizableReference; +import com.google.common.base.FinalizableReferenceQueue; +import java.lang.ref.WeakReference; + +public abstract class FinalizableWeakReference +extends WeakReference +implements FinalizableReference { + protected FinalizableWeakReference(T referent, FinalizableReferenceQueue queue) { + super(referent, queue.queue); + queue.cleanUp(); + } +} diff --git a/src/com/google/common/base/Function.java b/src/com/google/common/base/Function.java new file mode 100644 index 0000000..77bebd1 --- /dev/null +++ b/src/com/google/common/base/Function.java @@ -0,0 +1,15 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.base; + +import com.google.common.annotations.GwtCompatible; +import javax.annotation.Nullable; + +@GwtCompatible +public interface Function { + @Nullable + public T apply(@Nullable F var1); + + public boolean equals(@Nullable Object var1); +} diff --git a/src/com/google/common/base/FunctionalEquivalence.java b/src/com/google/common/base/FunctionalEquivalence.java new file mode 100644 index 0000000..853dd99 --- /dev/null +++ b/src/com/google/common/base/FunctionalEquivalence.java @@ -0,0 +1,59 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.base; + +import com.google.common.annotations.Beta; +import com.google.common.annotations.GwtCompatible; +import com.google.common.base.Equivalence; +import com.google.common.base.Function; +import com.google.common.base.Objects; +import com.google.common.base.Preconditions; +import java.io.Serializable; +import javax.annotation.Nullable; + +@Beta +@GwtCompatible +final class FunctionalEquivalence +extends Equivalence +implements Serializable { + private static final long serialVersionUID = 0L; + private final Function function; + private final Equivalence resultEquivalence; + + FunctionalEquivalence(Function function, Equivalence resultEquivalence) { + this.function = Preconditions.checkNotNull(function); + this.resultEquivalence = Preconditions.checkNotNull(resultEquivalence); + } + + @Override + protected boolean doEquivalent(F a, F b) { + return this.resultEquivalence.equivalent(this.function.apply(a), this.function.apply(b)); + } + + @Override + protected int doHash(F a) { + return this.resultEquivalence.hash(this.function.apply(a)); + } + + public boolean equals(@Nullable Object obj) { + if (obj == this) { + return true; + } + if (obj instanceof FunctionalEquivalence) { + FunctionalEquivalence that = (FunctionalEquivalence)obj; + return this.function.equals(that.function) && this.resultEquivalence.equals(that.resultEquivalence); + } + return false; + } + + public int hashCode() { + return Objects.hashCode(this.function, this.resultEquivalence); + } + + public String toString() { + String string = String.valueOf(String.valueOf(this.resultEquivalence)); + String string2 = String.valueOf(String.valueOf(this.function)); + return new StringBuilder(13 + string.length() + string2.length()).append(string).append(".onResultOf(").append(string2).append(")").toString(); + } +} diff --git a/src/com/google/common/base/Functions.java b/src/com/google/common/base/Functions.java new file mode 100644 index 0000000..c3c4a7b --- /dev/null +++ b/src/com/google/common/base/Functions.java @@ -0,0 +1,299 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.base; + +import com.google.common.annotations.Beta; +import com.google.common.annotations.GwtCompatible; +import com.google.common.base.Function; +import com.google.common.base.Objects; +import com.google.common.base.Preconditions; +import com.google.common.base.Predicate; +import com.google.common.base.Supplier; +import java.io.Serializable; +import java.util.Map; +import javax.annotation.Nullable; + +@GwtCompatible +public final class Functions { + private Functions() { + } + + public static Function toStringFunction() { + return ToStringFunction.INSTANCE; + } + + public static Function identity() { + return IdentityFunction.INSTANCE; + } + + public static Function forMap(Map map) { + return new FunctionForMapNoDefault(map); + } + + public static Function forMap(Map map, @Nullable V defaultValue) { + return new ForMapWithDefault(map, defaultValue); + } + + public static Function compose(Function g, Function f) { + return new FunctionComposition(g, f); + } + + public static Function forPredicate(Predicate predicate) { + return new PredicateFunction(predicate); + } + + public static Function constant(@Nullable E value) { + return new ConstantFunction(value); + } + + @Beta + public static Function forSupplier(Supplier supplier) { + return new SupplierFunction(supplier); + } + + private static class SupplierFunction + implements Function, + Serializable { + private final Supplier supplier; + private static final long serialVersionUID = 0L; + + private SupplierFunction(Supplier supplier) { + this.supplier = Preconditions.checkNotNull(supplier); + } + + @Override + public T apply(@Nullable Object input) { + return this.supplier.get(); + } + + @Override + public boolean equals(@Nullable Object obj) { + if (obj instanceof SupplierFunction) { + SupplierFunction that = (SupplierFunction)obj; + return this.supplier.equals(that.supplier); + } + return false; + } + + public int hashCode() { + return this.supplier.hashCode(); + } + + public String toString() { + String string = String.valueOf(String.valueOf(this.supplier)); + return new StringBuilder(13 + string.length()).append("forSupplier(").append(string).append(")").toString(); + } + } + + private static class ConstantFunction + implements Function, + Serializable { + private final E value; + private static final long serialVersionUID = 0L; + + public ConstantFunction(@Nullable E value) { + this.value = value; + } + + @Override + public E apply(@Nullable Object from) { + return this.value; + } + + @Override + public boolean equals(@Nullable Object obj) { + if (obj instanceof ConstantFunction) { + ConstantFunction that = (ConstantFunction)obj; + return Objects.equal(this.value, that.value); + } + return false; + } + + public int hashCode() { + return this.value == null ? 0 : this.value.hashCode(); + } + + public String toString() { + String string = String.valueOf(String.valueOf(this.value)); + return new StringBuilder(10 + string.length()).append("constant(").append(string).append(")").toString(); + } + } + + private static class PredicateFunction + implements Function, + Serializable { + private final Predicate predicate; + private static final long serialVersionUID = 0L; + + private PredicateFunction(Predicate predicate) { + this.predicate = Preconditions.checkNotNull(predicate); + } + + @Override + public Boolean apply(@Nullable T t) { + return this.predicate.apply(t); + } + + @Override + public boolean equals(@Nullable Object obj) { + if (obj instanceof PredicateFunction) { + PredicateFunction that = (PredicateFunction)obj; + return this.predicate.equals(that.predicate); + } + return false; + } + + public int hashCode() { + return this.predicate.hashCode(); + } + + public String toString() { + String string = String.valueOf(String.valueOf(this.predicate)); + return new StringBuilder(14 + string.length()).append("forPredicate(").append(string).append(")").toString(); + } + } + + private static class FunctionComposition + implements Function, + Serializable { + private final Function g; + private final Function f; + private static final long serialVersionUID = 0L; + + public FunctionComposition(Function g, Function f) { + this.g = Preconditions.checkNotNull(g); + this.f = Preconditions.checkNotNull(f); + } + + @Override + public C apply(@Nullable A a) { + return this.g.apply(this.f.apply(a)); + } + + @Override + public boolean equals(@Nullable Object obj) { + if (obj instanceof FunctionComposition) { + FunctionComposition that = (FunctionComposition)obj; + return this.f.equals(that.f) && this.g.equals(that.g); + } + return false; + } + + public int hashCode() { + return this.f.hashCode() ^ this.g.hashCode(); + } + + public String toString() { + String string = String.valueOf(String.valueOf(this.g)); + String string2 = String.valueOf(String.valueOf(this.f)); + return new StringBuilder(2 + string.length() + string2.length()).append(string).append("(").append(string2).append(")").toString(); + } + } + + private static class ForMapWithDefault + implements Function, + Serializable { + final Map map; + final V defaultValue; + private static final long serialVersionUID = 0L; + + ForMapWithDefault(Map map, @Nullable V defaultValue) { + this.map = Preconditions.checkNotNull(map); + this.defaultValue = defaultValue; + } + + @Override + public V apply(@Nullable K key) { + V result = this.map.get(key); + return result != null || this.map.containsKey(key) ? result : this.defaultValue; + } + + @Override + public boolean equals(@Nullable Object o) { + if (o instanceof ForMapWithDefault) { + ForMapWithDefault that = (ForMapWithDefault)o; + return this.map.equals(that.map) && Objects.equal(this.defaultValue, that.defaultValue); + } + return false; + } + + public int hashCode() { + return Objects.hashCode(this.map, this.defaultValue); + } + + public String toString() { + String string = String.valueOf(String.valueOf(this.map)); + String string2 = String.valueOf(String.valueOf(this.defaultValue)); + return new StringBuilder(23 + string.length() + string2.length()).append("forMap(").append(string).append(", defaultValue=").append(string2).append(")").toString(); + } + } + + private static class FunctionForMapNoDefault + implements Function, + Serializable { + final Map map; + private static final long serialVersionUID = 0L; + + FunctionForMapNoDefault(Map map) { + this.map = Preconditions.checkNotNull(map); + } + + @Override + public V apply(@Nullable K key) { + V result = this.map.get(key); + Preconditions.checkArgument(result != null || this.map.containsKey(key), "Key '%s' not present in map", key); + return result; + } + + @Override + public boolean equals(@Nullable Object o) { + if (o instanceof FunctionForMapNoDefault) { + FunctionForMapNoDefault that = (FunctionForMapNoDefault)o; + return this.map.equals(that.map); + } + return false; + } + + public int hashCode() { + return this.map.hashCode(); + } + + public String toString() { + String string = String.valueOf(String.valueOf(this.map)); + return new StringBuilder(8 + string.length()).append("forMap(").append(string).append(")").toString(); + } + } + + private static enum IdentityFunction implements Function + { + INSTANCE; + + + @Override + @Nullable + public Object apply(@Nullable Object o) { + return o; + } + + public String toString() { + return "identity"; + } + } + + private static enum ToStringFunction implements Function + { + INSTANCE; + + + @Override + public String apply(Object o) { + Preconditions.checkNotNull(o); + return o.toString(); + } + + public String toString() { + return "toString"; + } + } +} diff --git a/src/com/google/common/base/Joiner.java b/src/com/google/common/base/Joiner.java new file mode 100644 index 0000000..b3d2deb --- /dev/null +++ b/src/com/google/common/base/Joiner.java @@ -0,0 +1,267 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.base; + +import com.google.common.annotations.Beta; +import com.google.common.annotations.GwtCompatible; +import com.google.common.base.Preconditions; +import java.io.IOException; +import java.util.AbstractList; +import java.util.Arrays; +import java.util.Iterator; +import java.util.Map; +import javax.annotation.CheckReturnValue; +import javax.annotation.Nullable; + +@GwtCompatible +public class Joiner { + private final String separator; + + public static Joiner on(String separator) { + return new Joiner(separator); + } + + public static Joiner on(char separator) { + return new Joiner(String.valueOf(separator)); + } + + private Joiner(String separator) { + this.separator = Preconditions.checkNotNull(separator); + } + + private Joiner(Joiner prototype) { + this.separator = prototype.separator; + } + + public A appendTo(A appendable, Iterable parts) throws IOException { + return this.appendTo(appendable, parts.iterator()); + } + + public A appendTo(A appendable, Iterator parts) throws IOException { + Preconditions.checkNotNull(appendable); + if (parts.hasNext()) { + appendable.append(this.toString(parts.next())); + while (parts.hasNext()) { + appendable.append(this.separator); + appendable.append(this.toString(parts.next())); + } + } + return appendable; + } + + public final A appendTo(A appendable, Object[] parts) throws IOException { + return this.appendTo(appendable, Arrays.asList(parts)); + } + + public final A appendTo(A appendable, @Nullable Object first, @Nullable Object second, Object ... rest) throws IOException { + return this.appendTo(appendable, Joiner.iterable(first, second, rest)); + } + + public final StringBuilder appendTo(StringBuilder builder, Iterable parts) { + return this.appendTo(builder, parts.iterator()); + } + + public final StringBuilder appendTo(StringBuilder builder, Iterator parts) { + try { + this.appendTo((Appendable)builder, parts); + } + catch (IOException impossible) { + throw new AssertionError((Object)impossible); + } + return builder; + } + + public final StringBuilder appendTo(StringBuilder builder, Object[] parts) { + return this.appendTo(builder, (Iterable)Arrays.asList(parts)); + } + + public final StringBuilder appendTo(StringBuilder builder, @Nullable Object first, @Nullable Object second, Object ... rest) { + return this.appendTo(builder, Joiner.iterable(first, second, rest)); + } + + public final String join(Iterable parts) { + return this.join(parts.iterator()); + } + + public final String join(Iterator parts) { + return this.appendTo(new StringBuilder(), parts).toString(); + } + + public final String join(Object[] parts) { + return this.join(Arrays.asList(parts)); + } + + public final String join(@Nullable Object first, @Nullable Object second, Object ... rest) { + return this.join(Joiner.iterable(first, second, rest)); + } + + @CheckReturnValue + public Joiner useForNull(final String nullText) { + Preconditions.checkNotNull(nullText); + return new Joiner(this){ + + @Override + CharSequence toString(@Nullable Object part) { + return part == null ? nullText : Joiner.this.toString(part); + } + + @Override + public Joiner useForNull(String nullText2) { + throw new UnsupportedOperationException("already specified useForNull"); + } + + @Override + public Joiner skipNulls() { + throw new UnsupportedOperationException("already specified useForNull"); + } + }; + } + + @CheckReturnValue + public Joiner skipNulls() { + return new Joiner(this){ + + @Override + public A appendTo(A appendable, Iterator parts) throws IOException { + Object part; + Preconditions.checkNotNull(appendable, "appendable"); + Preconditions.checkNotNull(parts, "parts"); + while (parts.hasNext()) { + part = parts.next(); + if (part == null) continue; + appendable.append(Joiner.this.toString(part)); + break; + } + while (parts.hasNext()) { + part = parts.next(); + if (part == null) continue; + appendable.append(Joiner.this.separator); + appendable.append(Joiner.this.toString(part)); + } + return appendable; + } + + @Override + public Joiner useForNull(String nullText) { + throw new UnsupportedOperationException("already specified skipNulls"); + } + + @Override + public MapJoiner withKeyValueSeparator(String kvs) { + throw new UnsupportedOperationException("can't use .skipNulls() with maps"); + } + }; + } + + @CheckReturnValue + public MapJoiner withKeyValueSeparator(String keyValueSeparator) { + return new MapJoiner(this, keyValueSeparator); + } + + CharSequence toString(Object part) { + Preconditions.checkNotNull(part); + return part instanceof CharSequence ? (CharSequence)part : part.toString(); + } + + private static Iterable iterable(final Object first, final Object second, final Object[] rest) { + Preconditions.checkNotNull(rest); + return new AbstractList(){ + + @Override + public int size() { + return rest.length + 2; + } + + @Override + public Object get(int index) { + switch (index) { + case 0: { + return first; + } + case 1: { + return second; + } + } + return rest[index - 2]; + } + }; + } + + public static final class MapJoiner { + private final Joiner joiner; + private final String keyValueSeparator; + + private MapJoiner(Joiner joiner, String keyValueSeparator) { + this.joiner = joiner; + this.keyValueSeparator = Preconditions.checkNotNull(keyValueSeparator); + } + + public A appendTo(A appendable, Map map) throws IOException { + return this.appendTo(appendable, map.entrySet()); + } + + public StringBuilder appendTo(StringBuilder builder, Map map) { + return this.appendTo(builder, (Iterable>)map.entrySet()); + } + + public String join(Map map) { + return this.join(map.entrySet()); + } + + @Beta + public A appendTo(A appendable, Iterable> entries) throws IOException { + return this.appendTo(appendable, entries.iterator()); + } + + @Beta + public A appendTo(A appendable, Iterator> parts) throws IOException { + Preconditions.checkNotNull(appendable); + if (parts.hasNext()) { + Map.Entry entry = parts.next(); + appendable.append(this.joiner.toString(entry.getKey())); + appendable.append(this.keyValueSeparator); + appendable.append(this.joiner.toString(entry.getValue())); + while (parts.hasNext()) { + appendable.append(this.joiner.separator); + Map.Entry e = parts.next(); + appendable.append(this.joiner.toString(e.getKey())); + appendable.append(this.keyValueSeparator); + appendable.append(this.joiner.toString(e.getValue())); + } + } + return appendable; + } + + @Beta + public StringBuilder appendTo(StringBuilder builder, Iterable> entries) { + return this.appendTo(builder, entries.iterator()); + } + + @Beta + public StringBuilder appendTo(StringBuilder builder, Iterator> entries) { + try { + this.appendTo((Appendable)builder, entries); + } + catch (IOException impossible) { + throw new AssertionError((Object)impossible); + } + return builder; + } + + @Beta + public String join(Iterable> entries) { + return this.join(entries.iterator()); + } + + @Beta + public String join(Iterator> entries) { + return this.appendTo(new StringBuilder(), entries).toString(); + } + + @CheckReturnValue + public MapJoiner useForNull(String nullText) { + return new MapJoiner(this.joiner.useForNull(nullText), this.keyValueSeparator); + } + } +} diff --git a/src/com/google/common/base/MoreObjects.java b/src/com/google/common/base/MoreObjects.java new file mode 100644 index 0000000..3408cbe --- /dev/null +++ b/src/com/google/common/base/MoreObjects.java @@ -0,0 +1,160 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.base; + +import com.google.common.annotations.GwtCompatible; +import com.google.common.base.Preconditions; +import javax.annotation.Nullable; + +@GwtCompatible +public final class MoreObjects { + public static T firstNonNull(@Nullable T first, @Nullable T second) { + return first != null ? first : Preconditions.checkNotNull(second); + } + + public static ToStringHelper toStringHelper(Object self) { + return new ToStringHelper(MoreObjects.simpleName(self.getClass())); + } + + public static ToStringHelper toStringHelper(Class clazz) { + return new ToStringHelper(MoreObjects.simpleName(clazz)); + } + + public static ToStringHelper toStringHelper(String className) { + return new ToStringHelper(className); + } + + static String simpleName(Class clazz) { + String name = clazz.getName(); + int start = (name = name.replaceAll("\\$[0-9]+", "\\$")).lastIndexOf(36); + if (start == -1) { + start = name.lastIndexOf(46); + } + return name.substring(start + 1); + } + + private MoreObjects() { + } + + public static final class ToStringHelper { + private final String className; + private ValueHolder holderHead; + private ValueHolder holderTail; + private boolean omitNullValues; + + private ToStringHelper(String className) { + this.holderTail = this.holderHead = new ValueHolder(); + this.omitNullValues = false; + this.className = Preconditions.checkNotNull(className); + } + + public ToStringHelper omitNullValues() { + this.omitNullValues = true; + return this; + } + + public ToStringHelper add(String name, @Nullable Object value) { + return this.addHolder(name, value); + } + + public ToStringHelper add(String name, boolean value) { + return this.addHolder(name, String.valueOf(value)); + } + + public ToStringHelper add(String name, char value) { + return this.addHolder(name, String.valueOf(value)); + } + + public ToStringHelper add(String name, double value) { + return this.addHolder(name, String.valueOf(value)); + } + + public ToStringHelper add(String name, float value) { + return this.addHolder(name, String.valueOf(value)); + } + + public ToStringHelper add(String name, int value) { + return this.addHolder(name, String.valueOf(value)); + } + + public ToStringHelper add(String name, long value) { + return this.addHolder(name, String.valueOf(value)); + } + + public ToStringHelper addValue(@Nullable Object value) { + return this.addHolder(value); + } + + public ToStringHelper addValue(boolean value) { + return this.addHolder(String.valueOf(value)); + } + + public ToStringHelper addValue(char value) { + return this.addHolder(String.valueOf(value)); + } + + public ToStringHelper addValue(double value) { + return this.addHolder(String.valueOf(value)); + } + + public ToStringHelper addValue(float value) { + return this.addHolder(String.valueOf(value)); + } + + public ToStringHelper addValue(int value) { + return this.addHolder(String.valueOf(value)); + } + + public ToStringHelper addValue(long value) { + return this.addHolder(String.valueOf(value)); + } + + public String toString() { + boolean omitNullValuesSnapshot = this.omitNullValues; + String nextSeparator = ""; + StringBuilder builder = new StringBuilder(32).append(this.className).append('{'); + ValueHolder valueHolder = this.holderHead.next; + while (valueHolder != null) { + if (!omitNullValuesSnapshot || valueHolder.value != null) { + builder.append(nextSeparator); + nextSeparator = ", "; + if (valueHolder.name != null) { + builder.append(valueHolder.name).append('='); + } + builder.append(valueHolder.value); + } + valueHolder = valueHolder.next; + } + return builder.append('}').toString(); + } + + private ValueHolder addHolder() { + ValueHolder valueHolder; + this.holderTail = this.holderTail.next = (valueHolder = new ValueHolder()); + return valueHolder; + } + + private ToStringHelper addHolder(@Nullable Object value) { + ValueHolder valueHolder = this.addHolder(); + valueHolder.value = value; + return this; + } + + private ToStringHelper addHolder(String name, @Nullable Object value) { + ValueHolder valueHolder = this.addHolder(); + valueHolder.value = value; + valueHolder.name = Preconditions.checkNotNull(name); + return this; + } + + private static final class ValueHolder { + String name; + Object value; + ValueHolder next; + + private ValueHolder() { + } + } + } +} diff --git a/src/com/google/common/base/Objects.java b/src/com/google/common/base/Objects.java new file mode 100644 index 0000000..62bfb7c --- /dev/null +++ b/src/com/google/common/base/Objects.java @@ -0,0 +1,168 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.base; + +import com.google.common.annotations.GwtCompatible; +import com.google.common.base.MoreObjects; +import com.google.common.base.Preconditions; +import java.util.Arrays; +import javax.annotation.CheckReturnValue; +import javax.annotation.Nullable; + +@GwtCompatible +public final class Objects { + private Objects() { + } + + @CheckReturnValue + public static boolean equal(@Nullable Object a, @Nullable Object b) { + return a == b || a != null && a.equals(b); + } + + public static int hashCode(Object ... objects) { + return Arrays.hashCode(objects); + } + + @Deprecated + public static ToStringHelper toStringHelper(Object self) { + return new ToStringHelper(MoreObjects.simpleName(self.getClass())); + } + + @Deprecated + public static ToStringHelper toStringHelper(Class clazz) { + return new ToStringHelper(MoreObjects.simpleName(clazz)); + } + + @Deprecated + public static ToStringHelper toStringHelper(String className) { + return new ToStringHelper(className); + } + + @Deprecated + public static T firstNonNull(@Nullable T first, @Nullable T second) { + return MoreObjects.firstNonNull(first, second); + } + + @Deprecated + public static final class ToStringHelper { + private final String className; + private ValueHolder holderHead; + private ValueHolder holderTail; + private boolean omitNullValues; + + private ToStringHelper(String className) { + this.holderTail = this.holderHead = new ValueHolder(); + this.omitNullValues = false; + this.className = Preconditions.checkNotNull(className); + } + + public ToStringHelper omitNullValues() { + this.omitNullValues = true; + return this; + } + + public ToStringHelper add(String name, @Nullable Object value) { + return this.addHolder(name, value); + } + + public ToStringHelper add(String name, boolean value) { + return this.addHolder(name, String.valueOf(value)); + } + + public ToStringHelper add(String name, char value) { + return this.addHolder(name, String.valueOf(value)); + } + + public ToStringHelper add(String name, double value) { + return this.addHolder(name, String.valueOf(value)); + } + + public ToStringHelper add(String name, float value) { + return this.addHolder(name, String.valueOf(value)); + } + + public ToStringHelper add(String name, int value) { + return this.addHolder(name, String.valueOf(value)); + } + + public ToStringHelper add(String name, long value) { + return this.addHolder(name, String.valueOf(value)); + } + + public ToStringHelper addValue(@Nullable Object value) { + return this.addHolder(value); + } + + public ToStringHelper addValue(boolean value) { + return this.addHolder(String.valueOf(value)); + } + + public ToStringHelper addValue(char value) { + return this.addHolder(String.valueOf(value)); + } + + public ToStringHelper addValue(double value) { + return this.addHolder(String.valueOf(value)); + } + + public ToStringHelper addValue(float value) { + return this.addHolder(String.valueOf(value)); + } + + public ToStringHelper addValue(int value) { + return this.addHolder(String.valueOf(value)); + } + + public ToStringHelper addValue(long value) { + return this.addHolder(String.valueOf(value)); + } + + public String toString() { + boolean omitNullValuesSnapshot = this.omitNullValues; + String nextSeparator = ""; + StringBuilder builder = new StringBuilder(32).append(this.className).append('{'); + ValueHolder valueHolder = this.holderHead.next; + while (valueHolder != null) { + if (!omitNullValuesSnapshot || valueHolder.value != null) { + builder.append(nextSeparator); + nextSeparator = ", "; + if (valueHolder.name != null) { + builder.append(valueHolder.name).append('='); + } + builder.append(valueHolder.value); + } + valueHolder = valueHolder.next; + } + return builder.append('}').toString(); + } + + private ValueHolder addHolder() { + ValueHolder valueHolder; + this.holderTail = this.holderTail.next = (valueHolder = new ValueHolder()); + return valueHolder; + } + + private ToStringHelper addHolder(@Nullable Object value) { + ValueHolder valueHolder = this.addHolder(); + valueHolder.value = value; + return this; + } + + private ToStringHelper addHolder(String name, @Nullable Object value) { + ValueHolder valueHolder = this.addHolder(); + valueHolder.value = value; + valueHolder.name = Preconditions.checkNotNull(name); + return this; + } + + private static final class ValueHolder { + String name; + Object value; + ValueHolder next; + + private ValueHolder() { + } + } + } +} diff --git a/src/com/google/common/base/Optional.java b/src/com/google/common/base/Optional.java new file mode 100644 index 0000000..e817827 --- /dev/null +++ b/src/com/google/common/base/Optional.java @@ -0,0 +1,89 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.base; + +import com.google.common.annotations.Beta; +import com.google.common.annotations.GwtCompatible; +import com.google.common.base.Absent; +import com.google.common.base.AbstractIterator; +import com.google.common.base.Function; +import com.google.common.base.Preconditions; +import com.google.common.base.Present; +import com.google.common.base.Supplier; +import java.io.Serializable; +import java.util.Iterator; +import java.util.Set; +import javax.annotation.Nullable; + +@GwtCompatible(serializable=true) +public abstract class Optional +implements Serializable { + private static final long serialVersionUID = 0L; + + public static Optional absent() { + return Absent.withType(); + } + + public static Optional of(T reference) { + return new Present(Preconditions.checkNotNull(reference)); + } + + public static Optional fromNullable(@Nullable T nullableReference) { + return nullableReference == null ? Optional.absent() : new Present(nullableReference); + } + + Optional() { + } + + public abstract boolean isPresent(); + + public abstract T get(); + + public abstract T or(T var1); + + public abstract Optional or(Optional var1); + + @Beta + public abstract T or(Supplier var1); + + @Nullable + public abstract T orNull(); + + public abstract Set asSet(); + + public abstract Optional transform(Function var1); + + public abstract boolean equals(@Nullable Object var1); + + public abstract int hashCode(); + + public abstract String toString(); + + @Beta + public static Iterable presentInstances(final Iterable> optionals) { + Preconditions.checkNotNull(optionals); + return new Iterable(){ + + @Override + public Iterator iterator() { + return new AbstractIterator(){ + private final Iterator> iterator; + { + this.iterator = Preconditions.checkNotNull(optionals.iterator()); + } + + @Override + protected T computeNext() { + while (this.iterator.hasNext()) { + Optional optional = this.iterator.next(); + if (!optional.isPresent()) continue; + return optional.get(); + } + return this.endOfData(); + } + }; + } + }; + } +} diff --git a/src/com/google/common/base/PairwiseEquivalence.java b/src/com/google/common/base/PairwiseEquivalence.java new file mode 100644 index 0000000..07201d5 --- /dev/null +++ b/src/com/google/common/base/PairwiseEquivalence.java @@ -0,0 +1,60 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.base; + +import com.google.common.annotations.GwtCompatible; +import com.google.common.base.Equivalence; +import com.google.common.base.Preconditions; +import java.io.Serializable; +import java.util.Iterator; +import javax.annotation.Nullable; + +@GwtCompatible(serializable=true) +final class PairwiseEquivalence +extends Equivalence> +implements Serializable { + final Equivalence elementEquivalence; + private static final long serialVersionUID = 1L; + + PairwiseEquivalence(Equivalence elementEquivalence) { + this.elementEquivalence = Preconditions.checkNotNull(elementEquivalence); + } + + @Override + protected boolean doEquivalent(Iterable iterableA, Iterable iterableB) { + Iterator iteratorA = iterableA.iterator(); + Iterator iteratorB = iterableB.iterator(); + while (iteratorA.hasNext() && iteratorB.hasNext()) { + if (this.elementEquivalence.equivalent(iteratorA.next(), iteratorB.next())) continue; + return false; + } + return !iteratorA.hasNext() && !iteratorB.hasNext(); + } + + @Override + protected int doHash(Iterable iterable) { + int hash = 78721; + for (T element : iterable) { + hash = hash * 24943 + this.elementEquivalence.hash(element); + } + return hash; + } + + public boolean equals(@Nullable Object object) { + if (object instanceof PairwiseEquivalence) { + PairwiseEquivalence that = (PairwiseEquivalence)object; + return this.elementEquivalence.equals(that.elementEquivalence); + } + return false; + } + + public int hashCode() { + return this.elementEquivalence.hashCode() ^ 0x46A3EB07; + } + + public String toString() { + String string = String.valueOf(String.valueOf(this.elementEquivalence)); + return new StringBuilder(11 + string.length()).append(string).append(".pairwise()").toString(); + } +} diff --git a/src/com/google/common/base/Platform.java b/src/com/google/common/base/Platform.java new file mode 100644 index 0000000..c0d053d --- /dev/null +++ b/src/com/google/common/base/Platform.java @@ -0,0 +1,29 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.base; + +import com.google.common.annotations.GwtCompatible; +import com.google.common.base.CharMatcher; +import com.google.common.base.Enums; +import com.google.common.base.Optional; +import java.lang.ref.WeakReference; + +@GwtCompatible(emulated=true) +final class Platform { + private Platform() { + } + + static long systemNanoTime() { + return System.nanoTime(); + } + + static CharMatcher precomputeCharMatcher(CharMatcher matcher) { + return matcher.precomputedInternal(); + } + + static > Optional getEnumIfPresent(Class enumClass, String value) { + WeakReference> ref = Enums.getEnumConstants(enumClass).get(value); + return ref == null ? Optional.absent() : Optional.of(enumClass.cast(ref.get())); + } +} diff --git a/src/com/google/common/base/Preconditions.java b/src/com/google/common/base/Preconditions.java new file mode 100644 index 0000000..e1d0b3e --- /dev/null +++ b/src/com/google/common/base/Preconditions.java @@ -0,0 +1,154 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.base; + +import com.google.common.annotations.GwtCompatible; +import javax.annotation.Nullable; + +@GwtCompatible +public final class Preconditions { + private Preconditions() { + } + + public static void checkArgument(boolean expression) { + if (!expression) { + throw new IllegalArgumentException(); + } + } + + public static void checkArgument(boolean expression, @Nullable Object errorMessage) { + if (!expression) { + throw new IllegalArgumentException(String.valueOf(errorMessage)); + } + } + + public static void checkArgument(boolean expression, @Nullable String errorMessageTemplate, Object ... errorMessageArgs) { + if (!expression) { + throw new IllegalArgumentException(Preconditions.format(errorMessageTemplate, errorMessageArgs)); + } + } + + public static void checkState(boolean expression) { + if (!expression) { + throw new IllegalStateException(); + } + } + + public static void checkState(boolean expression, @Nullable Object errorMessage) { + if (!expression) { + throw new IllegalStateException(String.valueOf(errorMessage)); + } + } + + public static void checkState(boolean expression, @Nullable String errorMessageTemplate, Object ... errorMessageArgs) { + if (!expression) { + throw new IllegalStateException(Preconditions.format(errorMessageTemplate, errorMessageArgs)); + } + } + + public static T checkNotNull(T reference) { + if (reference == null) { + throw new NullPointerException(); + } + return reference; + } + + public static T checkNotNull(T reference, @Nullable Object errorMessage) { + if (reference == null) { + throw new NullPointerException(String.valueOf(errorMessage)); + } + return reference; + } + + public static T checkNotNull(T reference, @Nullable String errorMessageTemplate, Object ... errorMessageArgs) { + if (reference == null) { + throw new NullPointerException(Preconditions.format(errorMessageTemplate, errorMessageArgs)); + } + return reference; + } + + public static int checkElementIndex(int index, int size) { + return Preconditions.checkElementIndex(index, size, "index"); + } + + public static int checkElementIndex(int index, int size, @Nullable String desc) { + if (index < 0 || index >= size) { + throw new IndexOutOfBoundsException(Preconditions.badElementIndex(index, size, desc)); + } + return index; + } + + private static String badElementIndex(int index, int size, String desc) { + if (index < 0) { + return Preconditions.format("%s (%s) must not be negative", desc, index); + } + if (size < 0) { + int n = size; + throw new IllegalArgumentException(new StringBuilder(26).append("negative size: ").append(n).toString()); + } + return Preconditions.format("%s (%s) must be less than size (%s)", desc, index, size); + } + + public static int checkPositionIndex(int index, int size) { + return Preconditions.checkPositionIndex(index, size, "index"); + } + + public static int checkPositionIndex(int index, int size, @Nullable String desc) { + if (index < 0 || index > size) { + throw new IndexOutOfBoundsException(Preconditions.badPositionIndex(index, size, desc)); + } + return index; + } + + private static String badPositionIndex(int index, int size, String desc) { + if (index < 0) { + return Preconditions.format("%s (%s) must not be negative", desc, index); + } + if (size < 0) { + int n = size; + throw new IllegalArgumentException(new StringBuilder(26).append("negative size: ").append(n).toString()); + } + return Preconditions.format("%s (%s) must not be greater than size (%s)", desc, index, size); + } + + public static void checkPositionIndexes(int start, int end, int size) { + if (start < 0 || end < start || end > size) { + throw new IndexOutOfBoundsException(Preconditions.badPositionIndexes(start, end, size)); + } + } + + private static String badPositionIndexes(int start, int end, int size) { + if (start < 0 || start > size) { + return Preconditions.badPositionIndex(start, size, "start index"); + } + if (end < 0 || end > size) { + return Preconditions.badPositionIndex(end, size, "end index"); + } + return Preconditions.format("end index (%s) must not be less than start index (%s)", end, start); + } + + static String format(String template, Object ... args) { + int placeholderStart; + template = String.valueOf(template); + StringBuilder builder = new StringBuilder(template.length() + 16 * args.length); + int templateStart = 0; + int i = 0; + while (i < args.length && (placeholderStart = template.indexOf("%s", templateStart)) != -1) { + builder.append(template.substring(templateStart, placeholderStart)); + builder.append(args[i++]); + templateStart = placeholderStart + 2; + } + builder.append(template.substring(templateStart)); + if (i < args.length) { + builder.append(" ["); + builder.append(args[i++]); + while (i < args.length) { + builder.append(", "); + builder.append(args[i++]); + } + builder.append(']'); + } + return builder.toString(); + } +} diff --git a/src/com/google/common/base/Predicate.java b/src/com/google/common/base/Predicate.java new file mode 100644 index 0000000..4e297cb --- /dev/null +++ b/src/com/google/common/base/Predicate.java @@ -0,0 +1,14 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.base; + +import com.google.common.annotations.GwtCompatible; +import javax.annotation.Nullable; + +@GwtCompatible +public interface Predicate { + public boolean apply(@Nullable T var1); + + public boolean equals(@Nullable Object var1); +} diff --git a/src/com/google/common/base/Predicates.java b/src/com/google/common/base/Predicates.java new file mode 100644 index 0000000..a126550 --- /dev/null +++ b/src/com/google/common/base/Predicates.java @@ -0,0 +1,526 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.base; + +import com.google.common.annotations.Beta; +import com.google.common.annotations.GwtCompatible; +import com.google.common.annotations.GwtIncompatible; +import com.google.common.base.Function; +import com.google.common.base.Joiner; +import com.google.common.base.Objects; +import com.google.common.base.Preconditions; +import com.google.common.base.Predicate; +import java.io.Serializable; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.List; +import java.util.regex.Pattern; +import javax.annotation.Nullable; + +@GwtCompatible(emulated=true) +public final class Predicates { + private static final Joiner COMMA_JOINER = Joiner.on(','); + + private Predicates() { + } + + @GwtCompatible(serializable=true) + public static Predicate alwaysTrue() { + return ObjectPredicate.ALWAYS_TRUE.withNarrowedType(); + } + + @GwtCompatible(serializable=true) + public static Predicate alwaysFalse() { + return ObjectPredicate.ALWAYS_FALSE.withNarrowedType(); + } + + @GwtCompatible(serializable=true) + public static Predicate isNull() { + return ObjectPredicate.IS_NULL.withNarrowedType(); + } + + @GwtCompatible(serializable=true) + public static Predicate notNull() { + return ObjectPredicate.NOT_NULL.withNarrowedType(); + } + + public static Predicate not(Predicate predicate) { + return new NotPredicate(predicate); + } + + public static Predicate and(Iterable> components) { + return new AndPredicate(Predicates.defensiveCopy(components)); + } + + public static Predicate and(Predicate ... components) { + return new AndPredicate(Predicates.defensiveCopy(components)); + } + + public static Predicate and(Predicate first, Predicate second) { + return new AndPredicate(Predicates.asList(Preconditions.checkNotNull(first), Preconditions.checkNotNull(second))); + } + + public static Predicate or(Iterable> components) { + return new OrPredicate(Predicates.defensiveCopy(components)); + } + + public static Predicate or(Predicate ... components) { + return new OrPredicate(Predicates.defensiveCopy(components)); + } + + public static Predicate or(Predicate first, Predicate second) { + return new OrPredicate(Predicates.asList(Preconditions.checkNotNull(first), Preconditions.checkNotNull(second))); + } + + public static Predicate equalTo(@Nullable T target) { + return target == null ? Predicates.isNull() : new IsEqualToPredicate(target); + } + + @GwtIncompatible(value="Class.isInstance") + public static Predicate instanceOf(Class clazz) { + return new InstanceOfPredicate(clazz); + } + + @GwtIncompatible(value="Class.isAssignableFrom") + @Beta + public static Predicate> assignableFrom(Class clazz) { + return new AssignableFromPredicate(clazz); + } + + public static Predicate in(Collection target) { + return new InPredicate(target); + } + + public static Predicate compose(Predicate predicate, Function function) { + return new CompositionPredicate(predicate, function); + } + + @GwtIncompatible(value="java.util.regex.Pattern") + public static Predicate containsPattern(String pattern) { + return new ContainsPatternFromStringPredicate(pattern); + } + + @GwtIncompatible(value="java.util.regex.Pattern") + public static Predicate contains(Pattern pattern) { + return new ContainsPatternPredicate(pattern); + } + + private static List> asList(Predicate first, Predicate second) { + return Arrays.asList(first, second); + } + + private static List defensiveCopy(T ... array) { + return Predicates.defensiveCopy(Arrays.asList(array)); + } + + static List defensiveCopy(Iterable iterable) { + ArrayList list = new ArrayList(); + for (T element : iterable) { + list.add(Preconditions.checkNotNull(element)); + } + return list; + } + + @GwtIncompatible(value="Only used by other GWT-incompatible code.") + private static class ContainsPatternFromStringPredicate + extends ContainsPatternPredicate { + private static final long serialVersionUID = 0L; + + ContainsPatternFromStringPredicate(String string) { + super(Pattern.compile(string)); + } + + @Override + public String toString() { + String string = String.valueOf(String.valueOf(this.pattern.pattern())); + return new StringBuilder(28 + string.length()).append("Predicates.containsPattern(").append(string).append(")").toString(); + } + } + + @GwtIncompatible(value="Only used by other GWT-incompatible code.") + private static class ContainsPatternPredicate + implements Predicate, + Serializable { + final Pattern pattern; + private static final long serialVersionUID = 0L; + + ContainsPatternPredicate(Pattern pattern) { + this.pattern = Preconditions.checkNotNull(pattern); + } + + @Override + public boolean apply(CharSequence t) { + return this.pattern.matcher(t).find(); + } + + public int hashCode() { + return Objects.hashCode(this.pattern.pattern(), this.pattern.flags()); + } + + @Override + public boolean equals(@Nullable Object obj) { + if (obj instanceof ContainsPatternPredicate) { + ContainsPatternPredicate that = (ContainsPatternPredicate)obj; + return Objects.equal(this.pattern.pattern(), that.pattern.pattern()) && Objects.equal(this.pattern.flags(), that.pattern.flags()); + } + return false; + } + + public String toString() { + String patternString = Objects.toStringHelper(this.pattern).add("pattern", this.pattern.pattern()).add("pattern.flags", this.pattern.flags()).toString(); + String string = String.valueOf(String.valueOf(patternString)); + return new StringBuilder(21 + string.length()).append("Predicates.contains(").append(string).append(")").toString(); + } + } + + private static class CompositionPredicate + implements Predicate, + Serializable { + final Predicate p; + final Function f; + private static final long serialVersionUID = 0L; + + private CompositionPredicate(Predicate p, Function f) { + this.p = Preconditions.checkNotNull(p); + this.f = Preconditions.checkNotNull(f); + } + + @Override + public boolean apply(@Nullable A a) { + return this.p.apply(this.f.apply(a)); + } + + @Override + public boolean equals(@Nullable Object obj) { + if (obj instanceof CompositionPredicate) { + CompositionPredicate that = (CompositionPredicate)obj; + return this.f.equals(that.f) && this.p.equals(that.p); + } + return false; + } + + public int hashCode() { + return this.f.hashCode() ^ this.p.hashCode(); + } + + public String toString() { + String string = String.valueOf(String.valueOf(this.p.toString())); + String string2 = String.valueOf(String.valueOf(this.f.toString())); + return new StringBuilder(2 + string.length() + string2.length()).append(string).append("(").append(string2).append(")").toString(); + } + } + + private static class InPredicate + implements Predicate, + Serializable { + private final Collection target; + private static final long serialVersionUID = 0L; + + private InPredicate(Collection target) { + this.target = Preconditions.checkNotNull(target); + } + + @Override + public boolean apply(@Nullable T t) { + try { + return this.target.contains(t); + } + catch (NullPointerException e) { + return false; + } + catch (ClassCastException e) { + return false; + } + } + + @Override + public boolean equals(@Nullable Object obj) { + if (obj instanceof InPredicate) { + InPredicate that = (InPredicate)obj; + return this.target.equals(that.target); + } + return false; + } + + public int hashCode() { + return this.target.hashCode(); + } + + public String toString() { + String string = String.valueOf(String.valueOf(this.target)); + return new StringBuilder(15 + string.length()).append("Predicates.in(").append(string).append(")").toString(); + } + } + + @GwtIncompatible(value="Class.isAssignableFrom") + private static class AssignableFromPredicate + implements Predicate>, + Serializable { + private final Class clazz; + private static final long serialVersionUID = 0L; + + private AssignableFromPredicate(Class clazz) { + this.clazz = Preconditions.checkNotNull(clazz); + } + + @Override + public boolean apply(Class input) { + return this.clazz.isAssignableFrom(input); + } + + public int hashCode() { + return this.clazz.hashCode(); + } + + @Override + public boolean equals(@Nullable Object obj) { + if (obj instanceof AssignableFromPredicate) { + AssignableFromPredicate that = (AssignableFromPredicate)obj; + return this.clazz == that.clazz; + } + return false; + } + + public String toString() { + String string = String.valueOf(String.valueOf(this.clazz.getName())); + return new StringBuilder(27 + string.length()).append("Predicates.assignableFrom(").append(string).append(")").toString(); + } + } + + @GwtIncompatible(value="Class.isInstance") + private static class InstanceOfPredicate + implements Predicate, + Serializable { + private final Class clazz; + private static final long serialVersionUID = 0L; + + private InstanceOfPredicate(Class clazz) { + this.clazz = Preconditions.checkNotNull(clazz); + } + + @Override + public boolean apply(@Nullable Object o) { + return this.clazz.isInstance(o); + } + + public int hashCode() { + return this.clazz.hashCode(); + } + + @Override + public boolean equals(@Nullable Object obj) { + if (obj instanceof InstanceOfPredicate) { + InstanceOfPredicate that = (InstanceOfPredicate)obj; + return this.clazz == that.clazz; + } + return false; + } + + public String toString() { + String string = String.valueOf(String.valueOf(this.clazz.getName())); + return new StringBuilder(23 + string.length()).append("Predicates.instanceOf(").append(string).append(")").toString(); + } + } + + private static class IsEqualToPredicate + implements Predicate, + Serializable { + private final T target; + private static final long serialVersionUID = 0L; + + private IsEqualToPredicate(T target) { + this.target = target; + } + + @Override + public boolean apply(T t) { + return this.target.equals(t); + } + + public int hashCode() { + return this.target.hashCode(); + } + + @Override + public boolean equals(@Nullable Object obj) { + if (obj instanceof IsEqualToPredicate) { + IsEqualToPredicate that = (IsEqualToPredicate)obj; + return this.target.equals(that.target); + } + return false; + } + + public String toString() { + String string = String.valueOf(String.valueOf(this.target)); + return new StringBuilder(20 + string.length()).append("Predicates.equalTo(").append(string).append(")").toString(); + } + } + + private static class OrPredicate + implements Predicate, + Serializable { + private final List> components; + private static final long serialVersionUID = 0L; + + private OrPredicate(List> components) { + this.components = components; + } + + @Override + public boolean apply(@Nullable T t) { + for (int i = 0; i < this.components.size(); ++i) { + if (!this.components.get(i).apply(t)) continue; + return true; + } + return false; + } + + public int hashCode() { + return this.components.hashCode() + 87855567; + } + + @Override + public boolean equals(@Nullable Object obj) { + if (obj instanceof OrPredicate) { + OrPredicate that = (OrPredicate)obj; + return this.components.equals(that.components); + } + return false; + } + + public String toString() { + String string = String.valueOf(String.valueOf(COMMA_JOINER.join(this.components))); + return new StringBuilder(15 + string.length()).append("Predicates.or(").append(string).append(")").toString(); + } + } + + private static class AndPredicate + implements Predicate, + Serializable { + private final List> components; + private static final long serialVersionUID = 0L; + + private AndPredicate(List> components) { + this.components = components; + } + + @Override + public boolean apply(@Nullable T t) { + for (int i = 0; i < this.components.size(); ++i) { + if (this.components.get(i).apply(t)) continue; + return false; + } + return true; + } + + public int hashCode() { + return this.components.hashCode() + 306654252; + } + + @Override + public boolean equals(@Nullable Object obj) { + if (obj instanceof AndPredicate) { + AndPredicate that = (AndPredicate)obj; + return this.components.equals(that.components); + } + return false; + } + + public String toString() { + String string = String.valueOf(String.valueOf(COMMA_JOINER.join(this.components))); + return new StringBuilder(16 + string.length()).append("Predicates.and(").append(string).append(")").toString(); + } + } + + private static class NotPredicate + implements Predicate, + Serializable { + final Predicate predicate; + private static final long serialVersionUID = 0L; + + NotPredicate(Predicate predicate) { + this.predicate = Preconditions.checkNotNull(predicate); + } + + @Override + public boolean apply(@Nullable T t) { + return !this.predicate.apply(t); + } + + public int hashCode() { + return ~this.predicate.hashCode(); + } + + @Override + public boolean equals(@Nullable Object obj) { + if (obj instanceof NotPredicate) { + NotPredicate that = (NotPredicate)obj; + return this.predicate.equals(that.predicate); + } + return false; + } + + public String toString() { + String string = String.valueOf(String.valueOf(this.predicate.toString())); + return new StringBuilder(16 + string.length()).append("Predicates.not(").append(string).append(")").toString(); + } + } + + static enum ObjectPredicate implements Predicate + { + ALWAYS_TRUE{ + + @Override + public boolean apply(@Nullable Object o) { + return true; + } + + public String toString() { + return "Predicates.alwaysTrue()"; + } + } + , + ALWAYS_FALSE{ + + @Override + public boolean apply(@Nullable Object o) { + return false; + } + + public String toString() { + return "Predicates.alwaysFalse()"; + } + } + , + IS_NULL{ + + @Override + public boolean apply(@Nullable Object o) { + return o == null; + } + + public String toString() { + return "Predicates.isNull()"; + } + } + , + NOT_NULL{ + + @Override + public boolean apply(@Nullable Object o) { + return o != null; + } + + public String toString() { + return "Predicates.notNull()"; + } + }; + + + Predicate withNarrowedType() { + return this; + } + } +} diff --git a/src/com/google/common/base/Present.java b/src/com/google/common/base/Present.java new file mode 100644 index 0000000..1047845 --- /dev/null +++ b/src/com/google/common/base/Present.java @@ -0,0 +1,87 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.base; + +import com.google.common.annotations.GwtCompatible; +import com.google.common.base.Function; +import com.google.common.base.Optional; +import com.google.common.base.Preconditions; +import com.google.common.base.Supplier; +import java.util.Collections; +import java.util.Set; +import javax.annotation.Nullable; + +@GwtCompatible +final class Present +extends Optional { + private final T reference; + private static final long serialVersionUID = 0L; + + Present(T reference) { + this.reference = reference; + } + + @Override + public boolean isPresent() { + return true; + } + + @Override + public T get() { + return this.reference; + } + + @Override + public T or(T defaultValue) { + Preconditions.checkNotNull(defaultValue, "use Optional.orNull() instead of Optional.or(null)"); + return this.reference; + } + + @Override + public Optional or(Optional secondChoice) { + Preconditions.checkNotNull(secondChoice); + return this; + } + + @Override + public T or(Supplier supplier) { + Preconditions.checkNotNull(supplier); + return this.reference; + } + + @Override + public T orNull() { + return this.reference; + } + + @Override + public Set asSet() { + return Collections.singleton(this.reference); + } + + @Override + public Optional transform(Function function) { + return new Present(Preconditions.checkNotNull(function.apply(this.reference), "the Function passed to Optional.transform() must not return null.")); + } + + @Override + public boolean equals(@Nullable Object object) { + if (object instanceof Present) { + Present other = (Present)object; + return this.reference.equals(other.reference); + } + return false; + } + + @Override + public int hashCode() { + return 1502476572 + this.reference.hashCode(); + } + + @Override + public String toString() { + String string = String.valueOf(String.valueOf(this.reference)); + return new StringBuilder(13 + string.length()).append("Optional.of(").append(string).append(")").toString(); + } +} diff --git a/src/com/google/common/base/SmallCharMatcher.java b/src/com/google/common/base/SmallCharMatcher.java new file mode 100644 index 0000000..c887db3 --- /dev/null +++ b/src/com/google/common/base/SmallCharMatcher.java @@ -0,0 +1,100 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.base; + +import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.VisibleForTesting; +import com.google.common.base.CharMatcher; +import java.util.BitSet; + +@GwtIncompatible(value="no precomputation is done in GWT") +final class SmallCharMatcher +extends CharMatcher.FastMatcher { + static final int MAX_SIZE = 1023; + private final char[] table; + private final boolean containsZero; + private final long filter; + private static final int C1 = -862048943; + private static final int C2 = 461845907; + private static final double DESIRED_LOAD_FACTOR = 0.5; + + private SmallCharMatcher(char[] table, long filter, boolean containsZero, String description) { + super(description); + this.table = table; + this.filter = filter; + this.containsZero = containsZero; + } + + static int smear(int hashCode) { + return 461845907 * Integer.rotateLeft(hashCode * -862048943, 15); + } + + private boolean checkFilter(int c) { + return 1L == (1L & this.filter >> c); + } + + @VisibleForTesting + static int chooseTableSize(int setSize) { + if (setSize == 1) { + return 2; + } + int tableSize = Integer.highestOneBit(setSize - 1) << 1; + while ((double)tableSize * 0.5 < (double)setSize) { + tableSize <<= 1; + } + return tableSize; + } + + static CharMatcher from(BitSet chars, String description) { + long filter = 0L; + int size = chars.cardinality(); + boolean containsZero = chars.get(0); + char[] table = new char[SmallCharMatcher.chooseTableSize(size)]; + int mask = table.length - 1; + int c = chars.nextSetBit(0); + while (c != -1) { + filter |= 1L << c; + int index = SmallCharMatcher.smear(c) & mask; + while (true) { + if (table[index] == '\u0000') break; + index = index + 1 & mask; + } + table[index] = (char)c; + c = chars.nextSetBit(c + 1); + } + return new SmallCharMatcher(table, filter, containsZero, description); + } + + @Override + public boolean matches(char c) { + int startingIndex; + if (c == '\u0000') { + return this.containsZero; + } + if (!this.checkFilter(c)) { + return false; + } + int mask = this.table.length - 1; + int index = startingIndex = SmallCharMatcher.smear(c) & mask; + do { + if (this.table[index] == '\u0000') { + return false; + } + if (this.table[index] != c) continue; + return true; + } while ((index = index + 1 & mask) != startingIndex); + return false; + } + + @Override + void setBits(BitSet table) { + if (this.containsZero) { + table.set(0); + } + for (char c : this.table) { + if (c == '\u0000') continue; + table.set(c); + } + } +} diff --git a/src/com/google/common/base/Splitter.java b/src/com/google/common/base/Splitter.java new file mode 100644 index 0000000..09798bf --- /dev/null +++ b/src/com/google/common/base/Splitter.java @@ -0,0 +1,308 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.base; + +import com.google.common.annotations.Beta; +import com.google.common.annotations.GwtCompatible; +import com.google.common.annotations.GwtIncompatible; +import com.google.common.base.AbstractIterator; +import com.google.common.base.CharMatcher; +import com.google.common.base.Joiner; +import com.google.common.base.Preconditions; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Iterator; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import java.util.regex.Matcher; +import java.util.regex.Pattern; +import javax.annotation.CheckReturnValue; + +@GwtCompatible(emulated=true) +public final class Splitter { + private final CharMatcher trimmer; + private final boolean omitEmptyStrings; + private final Strategy strategy; + private final int limit; + + private Splitter(Strategy strategy) { + this(strategy, false, CharMatcher.NONE, Integer.MAX_VALUE); + } + + private Splitter(Strategy strategy, boolean omitEmptyStrings, CharMatcher trimmer, int limit) { + this.strategy = strategy; + this.omitEmptyStrings = omitEmptyStrings; + this.trimmer = trimmer; + this.limit = limit; + } + + public static Splitter on(char separator) { + return Splitter.on(CharMatcher.is(separator)); + } + + public static Splitter on(final CharMatcher separatorMatcher) { + Preconditions.checkNotNull(separatorMatcher); + return new Splitter(new Strategy(){ + + public SplittingIterator iterator(Splitter splitter, CharSequence toSplit) { + return new SplittingIterator(splitter, toSplit){ + + @Override + int separatorStart(int start) { + return separatorMatcher.indexIn(this.toSplit, start); + } + + @Override + int separatorEnd(int separatorPosition) { + return separatorPosition + 1; + } + }; + } + }); + } + + public static Splitter on(final String separator) { + Preconditions.checkArgument(separator.length() != 0, "The separator may not be the empty string."); + return new Splitter(new Strategy(){ + + public SplittingIterator iterator(Splitter splitter, CharSequence toSplit) { + return new SplittingIterator(splitter, toSplit){ + + @Override + public int separatorStart(int start) { + int separatorLength = separator.length(); + int last = this.toSplit.length() - separatorLength; + block0: for (int p = start; p <= last; ++p) { + for (int i = 0; i < separatorLength; ++i) { + if (this.toSplit.charAt(i + p) != separator.charAt(i)) continue block0; + } + return p; + } + return -1; + } + + @Override + public int separatorEnd(int separatorPosition) { + return separatorPosition + separator.length(); + } + }; + } + }); + } + + @GwtIncompatible(value="java.util.regex") + public static Splitter on(final Pattern separatorPattern) { + Preconditions.checkNotNull(separatorPattern); + Preconditions.checkArgument(!separatorPattern.matcher("").matches(), "The pattern may not match the empty string: %s", separatorPattern); + return new Splitter(new Strategy(){ + + public SplittingIterator iterator(Splitter splitter, CharSequence toSplit) { + final Matcher matcher = separatorPattern.matcher(toSplit); + return new SplittingIterator(splitter, toSplit){ + + @Override + public int separatorStart(int start) { + return matcher.find(start) ? matcher.start() : -1; + } + + @Override + public int separatorEnd(int separatorPosition) { + return matcher.end(); + } + }; + } + }); + } + + @GwtIncompatible(value="java.util.regex") + public static Splitter onPattern(String separatorPattern) { + return Splitter.on(Pattern.compile(separatorPattern)); + } + + public static Splitter fixedLength(final int length) { + Preconditions.checkArgument(length > 0, "The length may not be less than 1"); + return new Splitter(new Strategy(){ + + public SplittingIterator iterator(Splitter splitter, CharSequence toSplit) { + return new SplittingIterator(splitter, toSplit){ + + @Override + public int separatorStart(int start) { + int nextChunkStart = start + length; + return nextChunkStart < this.toSplit.length() ? nextChunkStart : -1; + } + + @Override + public int separatorEnd(int separatorPosition) { + return separatorPosition; + } + }; + } + }); + } + + @CheckReturnValue + public Splitter omitEmptyStrings() { + return new Splitter(this.strategy, true, this.trimmer, this.limit); + } + + @CheckReturnValue + public Splitter limit(int limit) { + Preconditions.checkArgument(limit > 0, "must be greater than zero: %s", limit); + return new Splitter(this.strategy, this.omitEmptyStrings, this.trimmer, limit); + } + + @CheckReturnValue + public Splitter trimResults() { + return this.trimResults(CharMatcher.WHITESPACE); + } + + @CheckReturnValue + public Splitter trimResults(CharMatcher trimmer) { + Preconditions.checkNotNull(trimmer); + return new Splitter(this.strategy, this.omitEmptyStrings, trimmer, this.limit); + } + + public Iterable split(final CharSequence sequence) { + Preconditions.checkNotNull(sequence); + return new Iterable(){ + + @Override + public Iterator iterator() { + return Splitter.this.splittingIterator(sequence); + } + + public String toString() { + return Joiner.on(", ").appendTo(new StringBuilder().append('['), (Iterable)this).append(']').toString(); + } + }; + } + + private Iterator splittingIterator(CharSequence sequence) { + return this.strategy.iterator(this, sequence); + } + + @Beta + public List splitToList(CharSequence sequence) { + Preconditions.checkNotNull(sequence); + Iterator iterator = this.splittingIterator(sequence); + ArrayList result = new ArrayList(); + while (iterator.hasNext()) { + result.add(iterator.next()); + } + return Collections.unmodifiableList(result); + } + + @CheckReturnValue + @Beta + public MapSplitter withKeyValueSeparator(String separator) { + return this.withKeyValueSeparator(Splitter.on(separator)); + } + + @CheckReturnValue + @Beta + public MapSplitter withKeyValueSeparator(char separator) { + return this.withKeyValueSeparator(Splitter.on(separator)); + } + + @CheckReturnValue + @Beta + public MapSplitter withKeyValueSeparator(Splitter keyValueSplitter) { + return new MapSplitter(this, keyValueSplitter); + } + + private static abstract class SplittingIterator + extends AbstractIterator { + final CharSequence toSplit; + final CharMatcher trimmer; + final boolean omitEmptyStrings; + int offset = 0; + int limit; + + abstract int separatorStart(int var1); + + abstract int separatorEnd(int var1); + + protected SplittingIterator(Splitter splitter, CharSequence toSplit) { + this.trimmer = splitter.trimmer; + this.omitEmptyStrings = splitter.omitEmptyStrings; + this.limit = splitter.limit; + this.toSplit = toSplit; + } + + @Override + protected String computeNext() { + int nextStart = this.offset; + while (this.offset != -1) { + int end; + int start = nextStart; + int separatorPosition = this.separatorStart(this.offset); + if (separatorPosition == -1) { + end = this.toSplit.length(); + this.offset = -1; + } else { + end = separatorPosition; + this.offset = this.separatorEnd(separatorPosition); + } + if (this.offset == nextStart) { + ++this.offset; + if (this.offset < this.toSplit.length()) continue; + this.offset = -1; + continue; + } + while (start < end && this.trimmer.matches(this.toSplit.charAt(start))) { + ++start; + } + while (end > start && this.trimmer.matches(this.toSplit.charAt(end - 1))) { + --end; + } + if (this.omitEmptyStrings && start == end) { + nextStart = this.offset; + continue; + } + if (this.limit == 1) { + this.offset = -1; + for (end = this.toSplit.length(); end > start && this.trimmer.matches(this.toSplit.charAt(end - 1)); --end) { + } + } else { + --this.limit; + } + return this.toSplit.subSequence(start, end).toString(); + } + return (String)this.endOfData(); + } + } + + private static interface Strategy { + public Iterator iterator(Splitter var1, CharSequence var2); + } + + @Beta + public static final class MapSplitter { + private static final String INVALID_ENTRY_MESSAGE = "Chunk [%s] is not a valid entry"; + private final Splitter outerSplitter; + private final Splitter entrySplitter; + + private MapSplitter(Splitter outerSplitter, Splitter entrySplitter) { + this.outerSplitter = outerSplitter; + this.entrySplitter = Preconditions.checkNotNull(entrySplitter); + } + + public Map split(CharSequence sequence) { + LinkedHashMap map = new LinkedHashMap(); + for (String entry : this.outerSplitter.split(sequence)) { + Iterator entryFields = this.entrySplitter.splittingIterator(entry); + Preconditions.checkArgument(entryFields.hasNext(), INVALID_ENTRY_MESSAGE, entry); + String key = (String)entryFields.next(); + Preconditions.checkArgument(!map.containsKey(key), "Duplicate key [%s] found.", key); + Preconditions.checkArgument(entryFields.hasNext(), INVALID_ENTRY_MESSAGE, entry); + String value = (String)entryFields.next(); + map.put(key, value); + Preconditions.checkArgument(!entryFields.hasNext(), INVALID_ENTRY_MESSAGE, entry); + } + return Collections.unmodifiableMap(map); + } + } +} diff --git a/src/com/google/common/base/StandardSystemProperty.java b/src/com/google/common/base/StandardSystemProperty.java new file mode 100644 index 0000000..66c42b3 --- /dev/null +++ b/src/com/google/common/base/StandardSystemProperty.java @@ -0,0 +1,62 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.base; + +import com.google.common.annotations.Beta; +import com.google.common.annotations.GwtIncompatible; +import javax.annotation.Nullable; + +@Beta +@GwtIncompatible(value="java.lang.System#getProperty") +public enum StandardSystemProperty { + JAVA_VERSION("java.version"), + JAVA_VENDOR("java.vendor"), + JAVA_VENDOR_URL("java.vendor.url"), + JAVA_HOME("java.home"), + JAVA_VM_SPECIFICATION_VERSION("java.vm.specification.version"), + JAVA_VM_SPECIFICATION_VENDOR("java.vm.specification.vendor"), + JAVA_VM_SPECIFICATION_NAME("java.vm.specification.name"), + JAVA_VM_VERSION("java.vm.version"), + JAVA_VM_VENDOR("java.vm.vendor"), + JAVA_VM_NAME("java.vm.name"), + JAVA_SPECIFICATION_VERSION("java.specification.version"), + JAVA_SPECIFICATION_VENDOR("java.specification.vendor"), + JAVA_SPECIFICATION_NAME("java.specification.name"), + JAVA_CLASS_VERSION("java.class.version"), + JAVA_CLASS_PATH("java.class.path"), + JAVA_LIBRARY_PATH("java.library.path"), + JAVA_IO_TMPDIR("java.io.tmpdir"), + JAVA_COMPILER("java.compiler"), + JAVA_EXT_DIRS("java.ext.dirs"), + OS_NAME("os.name"), + OS_ARCH("os.arch"), + OS_VERSION("os.version"), + FILE_SEPARATOR("file.separator"), + PATH_SEPARATOR("path.separator"), + LINE_SEPARATOR("line.separator"), + USER_NAME("user.name"), + USER_HOME("user.home"), + USER_DIR("user.dir"); + + private final String key; + + private StandardSystemProperty(String key) { + this.key = key; + } + + public String key() { + return this.key; + } + + @Nullable + public String value() { + return System.getProperty(this.key); + } + + public String toString() { + String string = String.valueOf(String.valueOf(this.key())); + String string2 = String.valueOf(String.valueOf(this.value())); + return new StringBuilder(1 + string.length() + string2.length()).append(string).append("=").append(string2).toString(); + } +} diff --git a/src/com/google/common/base/Stopwatch.java b/src/com/google/common/base/Stopwatch.java new file mode 100644 index 0000000..d00acdf --- /dev/null +++ b/src/com/google/common/base/Stopwatch.java @@ -0,0 +1,136 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.base; + +import com.google.common.annotations.Beta; +import com.google.common.annotations.GwtCompatible; +import com.google.common.annotations.GwtIncompatible; +import com.google.common.base.Preconditions; +import com.google.common.base.Ticker; +import java.util.concurrent.TimeUnit; + +@Beta +@GwtCompatible(emulated=true) +public final class Stopwatch { + private final Ticker ticker; + private boolean isRunning; + private long elapsedNanos; + private long startTick; + + public static Stopwatch createUnstarted() { + return new Stopwatch(); + } + + public static Stopwatch createUnstarted(Ticker ticker) { + return new Stopwatch(ticker); + } + + public static Stopwatch createStarted() { + return new Stopwatch().start(); + } + + public static Stopwatch createStarted(Ticker ticker) { + return new Stopwatch(ticker).start(); + } + + @Deprecated + Stopwatch() { + this(Ticker.systemTicker()); + } + + @Deprecated + Stopwatch(Ticker ticker) { + this.ticker = Preconditions.checkNotNull(ticker, "ticker"); + } + + public boolean isRunning() { + return this.isRunning; + } + + public Stopwatch start() { + Preconditions.checkState(!this.isRunning, "This stopwatch is already running."); + this.isRunning = true; + this.startTick = this.ticker.read(); + return this; + } + + public Stopwatch stop() { + long tick = this.ticker.read(); + Preconditions.checkState(this.isRunning, "This stopwatch is already stopped."); + this.isRunning = false; + this.elapsedNanos += tick - this.startTick; + return this; + } + + public Stopwatch reset() { + this.elapsedNanos = 0L; + this.isRunning = false; + return this; + } + + private long elapsedNanos() { + return this.isRunning ? this.ticker.read() - this.startTick + this.elapsedNanos : this.elapsedNanos; + } + + public long elapsed(TimeUnit desiredUnit) { + return desiredUnit.convert(this.elapsedNanos(), TimeUnit.NANOSECONDS); + } + + @GwtIncompatible(value="String.format()") + public String toString() { + long nanos = this.elapsedNanos(); + TimeUnit unit = Stopwatch.chooseUnit(nanos); + double value = (double)nanos / (double)TimeUnit.NANOSECONDS.convert(1L, unit); + return String.format("%.4g %s", value, Stopwatch.abbreviate(unit)); + } + + private static TimeUnit chooseUnit(long nanos) { + if (TimeUnit.DAYS.convert(nanos, TimeUnit.NANOSECONDS) > 0L) { + return TimeUnit.DAYS; + } + if (TimeUnit.HOURS.convert(nanos, TimeUnit.NANOSECONDS) > 0L) { + return TimeUnit.HOURS; + } + if (TimeUnit.MINUTES.convert(nanos, TimeUnit.NANOSECONDS) > 0L) { + return TimeUnit.MINUTES; + } + if (TimeUnit.SECONDS.convert(nanos, TimeUnit.NANOSECONDS) > 0L) { + return TimeUnit.SECONDS; + } + if (TimeUnit.MILLISECONDS.convert(nanos, TimeUnit.NANOSECONDS) > 0L) { + return TimeUnit.MILLISECONDS; + } + if (TimeUnit.MICROSECONDS.convert(nanos, TimeUnit.NANOSECONDS) > 0L) { + return TimeUnit.MICROSECONDS; + } + return TimeUnit.NANOSECONDS; + } + + private static String abbreviate(TimeUnit unit) { + switch (unit) { + case NANOSECONDS: { + return "ns"; + } + case MICROSECONDS: { + return "\u03bcs"; + } + case MILLISECONDS: { + return "ms"; + } + case SECONDS: { + return "s"; + } + case MINUTES: { + return "min"; + } + case HOURS: { + return "h"; + } + case DAYS: { + return "d"; + } + } + throw new AssertionError(); + } +} diff --git a/src/com/google/common/base/Strings.java b/src/com/google/common/base/Strings.java new file mode 100644 index 0000000..3ab343a --- /dev/null +++ b/src/com/google/common/base/Strings.java @@ -0,0 +1,108 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.base; + +import com.google.common.annotations.GwtCompatible; +import com.google.common.annotations.VisibleForTesting; +import com.google.common.base.Preconditions; +import javax.annotation.Nullable; + +@GwtCompatible +public final class Strings { + private Strings() { + } + + public static String nullToEmpty(@Nullable String string) { + return string == null ? "" : string; + } + + @Nullable + public static String emptyToNull(@Nullable String string) { + return Strings.isNullOrEmpty(string) ? null : string; + } + + public static boolean isNullOrEmpty(@Nullable String string) { + return string == null || string.length() == 0; + } + + public static String padStart(String string, int minLength, char padChar) { + Preconditions.checkNotNull(string); + if (string.length() >= minLength) { + return string; + } + StringBuilder sb = new StringBuilder(minLength); + for (int i = string.length(); i < minLength; ++i) { + sb.append(padChar); + } + sb.append(string); + return sb.toString(); + } + + public static String padEnd(String string, int minLength, char padChar) { + Preconditions.checkNotNull(string); + if (string.length() >= minLength) { + return string; + } + StringBuilder sb = new StringBuilder(minLength); + sb.append(string); + for (int i = string.length(); i < minLength; ++i) { + sb.append(padChar); + } + return sb.toString(); + } + + public static String repeat(String string, int count) { + int n; + Preconditions.checkNotNull(string); + if (count <= 1) { + Preconditions.checkArgument(count >= 0, "invalid count: %s", count); + return count == 0 ? "" : string; + } + int len = string.length(); + long longSize = (long)len * (long)count; + int size = (int)longSize; + if ((long)size != longSize) { + long l = longSize; + throw new ArrayIndexOutOfBoundsException(new StringBuilder(51).append("Required array size too large: ").append(l).toString()); + } + char[] array = new char[size]; + string.getChars(0, len, array, 0); + for (n = len; n < size - n; n <<= 1) { + System.arraycopy(array, 0, array, n, n); + } + System.arraycopy(array, 0, array, n, size - n); + return new String(array); + } + + public static String commonPrefix(CharSequence a, CharSequence b) { + int p; + Preconditions.checkNotNull(a); + Preconditions.checkNotNull(b); + int maxPrefixLength = Math.min(a.length(), b.length()); + for (p = 0; p < maxPrefixLength && a.charAt(p) == b.charAt(p); ++p) { + } + if (Strings.validSurrogatePairAt(a, p - 1) || Strings.validSurrogatePairAt(b, p - 1)) { + --p; + } + return a.subSequence(0, p).toString(); + } + + public static String commonSuffix(CharSequence a, CharSequence b) { + int s; + Preconditions.checkNotNull(a); + Preconditions.checkNotNull(b); + int maxSuffixLength = Math.min(a.length(), b.length()); + for (s = 0; s < maxSuffixLength && a.charAt(a.length() - s - 1) == b.charAt(b.length() - s - 1); ++s) { + } + if (Strings.validSurrogatePairAt(a, a.length() - s - 1) || Strings.validSurrogatePairAt(b, b.length() - s - 1)) { + --s; + } + return a.subSequence(a.length() - s, a.length()).toString(); + } + + @VisibleForTesting + static boolean validSurrogatePairAt(CharSequence string, int index) { + return index >= 0 && index <= string.length() - 2 && Character.isHighSurrogate(string.charAt(index)) && Character.isLowSurrogate(string.charAt(index + 1)); + } +} diff --git a/src/com/google/common/base/Supplier.java b/src/com/google/common/base/Supplier.java new file mode 100644 index 0000000..70cbabf --- /dev/null +++ b/src/com/google/common/base/Supplier.java @@ -0,0 +1,11 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.base; + +import com.google.common.annotations.GwtCompatible; + +@GwtCompatible +public interface Supplier { + public T get(); +} diff --git a/src/com/google/common/base/Suppliers.java b/src/com/google/common/base/Suppliers.java new file mode 100644 index 0000000..e6affa3 --- /dev/null +++ b/src/com/google/common/base/Suppliers.java @@ -0,0 +1,248 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.base; + +import com.google.common.annotations.Beta; +import com.google.common.annotations.GwtCompatible; +import com.google.common.annotations.VisibleForTesting; +import com.google.common.base.Function; +import com.google.common.base.Objects; +import com.google.common.base.Platform; +import com.google.common.base.Preconditions; +import com.google.common.base.Supplier; +import java.io.Serializable; +import java.util.concurrent.TimeUnit; +import javax.annotation.Nullable; + +@GwtCompatible +public final class Suppliers { + private Suppliers() { + } + + public static Supplier compose(Function function, Supplier supplier) { + Preconditions.checkNotNull(function); + Preconditions.checkNotNull(supplier); + return new SupplierComposition(function, supplier); + } + + public static Supplier memoize(Supplier delegate) { + return delegate instanceof MemoizingSupplier ? delegate : new MemoizingSupplier(Preconditions.checkNotNull(delegate)); + } + + public static Supplier memoizeWithExpiration(Supplier delegate, long duration, TimeUnit unit) { + return new ExpiringMemoizingSupplier(delegate, duration, unit); + } + + public static Supplier ofInstance(@Nullable T instance) { + return new SupplierOfInstance(instance); + } + + public static Supplier synchronizedSupplier(Supplier delegate) { + return new ThreadSafeSupplier(Preconditions.checkNotNull(delegate)); + } + + @Beta + public static Function, T> supplierFunction() { + SupplierFunctionImpl sf = SupplierFunctionImpl.INSTANCE; + return sf; + } + + private static enum SupplierFunctionImpl implements SupplierFunction + { + INSTANCE; + + + @Override + public Object apply(Supplier input) { + return input.get(); + } + + public String toString() { + return "Suppliers.supplierFunction()"; + } + } + + private static interface SupplierFunction + extends Function, T> { + } + + private static class ThreadSafeSupplier + implements Supplier, + Serializable { + final Supplier delegate; + private static final long serialVersionUID = 0L; + + ThreadSafeSupplier(Supplier delegate) { + this.delegate = delegate; + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public T get() { + Supplier supplier = this.delegate; + synchronized (supplier) { + return this.delegate.get(); + } + } + + public String toString() { + String string = String.valueOf(String.valueOf(this.delegate)); + return new StringBuilder(32 + string.length()).append("Suppliers.synchronizedSupplier(").append(string).append(")").toString(); + } + } + + private static class SupplierOfInstance + implements Supplier, + Serializable { + final T instance; + private static final long serialVersionUID = 0L; + + SupplierOfInstance(@Nullable T instance) { + this.instance = instance; + } + + @Override + public T get() { + return this.instance; + } + + public boolean equals(@Nullable Object obj) { + if (obj instanceof SupplierOfInstance) { + SupplierOfInstance that = (SupplierOfInstance)obj; + return Objects.equal(this.instance, that.instance); + } + return false; + } + + public int hashCode() { + return Objects.hashCode(this.instance); + } + + public String toString() { + String string = String.valueOf(String.valueOf(this.instance)); + return new StringBuilder(22 + string.length()).append("Suppliers.ofInstance(").append(string).append(")").toString(); + } + } + + @VisibleForTesting + static class ExpiringMemoizingSupplier + implements Supplier, + Serializable { + final Supplier delegate; + final long durationNanos; + volatile transient T value; + volatile transient long expirationNanos; + private static final long serialVersionUID = 0L; + + ExpiringMemoizingSupplier(Supplier delegate, long duration, TimeUnit unit) { + this.delegate = Preconditions.checkNotNull(delegate); + this.durationNanos = unit.toNanos(duration); + Preconditions.checkArgument(duration > 0L); + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public T get() { + long nanos = this.expirationNanos; + long now = Platform.systemNanoTime(); + if (nanos == 0L || now - nanos >= 0L) { + ExpiringMemoizingSupplier expiringMemoizingSupplier = this; + synchronized (expiringMemoizingSupplier) { + if (nanos == this.expirationNanos) { + T t = this.delegate.get(); + this.value = t; + nanos = now + this.durationNanos; + this.expirationNanos = nanos == 0L ? 1L : nanos; + return t; + } + } + } + return this.value; + } + + public String toString() { + String string = String.valueOf(String.valueOf(this.delegate)); + long l = this.durationNanos; + return new StringBuilder(62 + string.length()).append("Suppliers.memoizeWithExpiration(").append(string).append(", ").append(l).append(", NANOS)").toString(); + } + } + + @VisibleForTesting + static class MemoizingSupplier + implements Supplier, + Serializable { + final Supplier delegate; + volatile transient boolean initialized; + transient T value; + private static final long serialVersionUID = 0L; + + MemoizingSupplier(Supplier delegate) { + this.delegate = delegate; + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public T get() { + if (!this.initialized) { + MemoizingSupplier memoizingSupplier = this; + synchronized (memoizingSupplier) { + if (!this.initialized) { + T t = this.delegate.get(); + this.value = t; + this.initialized = true; + return t; + } + } + } + return this.value; + } + + public String toString() { + String string = String.valueOf(String.valueOf(this.delegate)); + return new StringBuilder(19 + string.length()).append("Suppliers.memoize(").append(string).append(")").toString(); + } + } + + private static class SupplierComposition + implements Supplier, + Serializable { + final Function function; + final Supplier supplier; + private static final long serialVersionUID = 0L; + + SupplierComposition(Function function, Supplier supplier) { + this.function = function; + this.supplier = supplier; + } + + @Override + public T get() { + return this.function.apply(this.supplier.get()); + } + + public boolean equals(@Nullable Object obj) { + if (obj instanceof SupplierComposition) { + SupplierComposition that = (SupplierComposition)obj; + return this.function.equals(that.function) && this.supplier.equals(that.supplier); + } + return false; + } + + public int hashCode() { + return Objects.hashCode(this.function, this.supplier); + } + + public String toString() { + String string = String.valueOf(String.valueOf(this.function)); + String string2 = String.valueOf(String.valueOf(this.supplier)); + return new StringBuilder(21 + string.length() + string2.length()).append("Suppliers.compose(").append(string).append(", ").append(string2).append(")").toString(); + } + } +} diff --git a/src/com/google/common/base/Throwables.java b/src/com/google/common/base/Throwables.java new file mode 100644 index 0000000..7b2e300 --- /dev/null +++ b/src/com/google/common/base/Throwables.java @@ -0,0 +1,70 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.base; + +import com.google.common.annotations.Beta; +import com.google.common.base.Preconditions; +import java.io.PrintWriter; +import java.io.StringWriter; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import javax.annotation.Nullable; + +public final class Throwables { + private Throwables() { + } + + public static void propagateIfInstanceOf(@Nullable Throwable throwable, Class declaredType) throws X { + if (throwable != null && declaredType.isInstance(throwable)) { + throw (Throwable)declaredType.cast(throwable); + } + } + + public static void propagateIfPossible(@Nullable Throwable throwable) { + Throwables.propagateIfInstanceOf(throwable, Error.class); + Throwables.propagateIfInstanceOf(throwable, RuntimeException.class); + } + + public static void propagateIfPossible(@Nullable Throwable throwable, Class declaredType) throws X { + Throwables.propagateIfInstanceOf(throwable, declaredType); + Throwables.propagateIfPossible(throwable); + } + + public static void propagateIfPossible(@Nullable Throwable throwable, Class declaredType1, Class declaredType2) throws X1, X2 { + Preconditions.checkNotNull(declaredType2); + Throwables.propagateIfInstanceOf(throwable, declaredType1); + Throwables.propagateIfPossible(throwable, declaredType2); + } + + public static RuntimeException propagate(Throwable throwable) { + Throwables.propagateIfPossible(Preconditions.checkNotNull(throwable)); + throw new RuntimeException(throwable); + } + + public static Throwable getRootCause(Throwable throwable) { + Throwable cause; + while ((cause = throwable.getCause()) != null) { + throwable = cause; + } + return throwable; + } + + @Beta + public static List getCausalChain(Throwable throwable) { + Preconditions.checkNotNull(throwable); + ArrayList causes = new ArrayList(4); + while (throwable != null) { + causes.add(throwable); + throwable = throwable.getCause(); + } + return Collections.unmodifiableList(causes); + } + + public static String getStackTraceAsString(Throwable throwable) { + StringWriter stringWriter = new StringWriter(); + throwable.printStackTrace(new PrintWriter(stringWriter)); + return stringWriter.toString(); + } +} diff --git a/src/com/google/common/base/Ticker.java b/src/com/google/common/base/Ticker.java new file mode 100644 index 0000000..ceeacd3 --- /dev/null +++ b/src/com/google/common/base/Ticker.java @@ -0,0 +1,29 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.base; + +import com.google.common.annotations.Beta; +import com.google.common.annotations.GwtCompatible; +import com.google.common.base.Platform; + +@Beta +@GwtCompatible +public abstract class Ticker { + private static final Ticker SYSTEM_TICKER = new Ticker(){ + + @Override + public long read() { + return Platform.systemNanoTime(); + } + }; + + protected Ticker() { + } + + public abstract long read(); + + public static Ticker systemTicker() { + return SYSTEM_TICKER; + } +} diff --git a/src/com/google/common/base/Utf8.java b/src/com/google/common/base/Utf8.java new file mode 100644 index 0000000..56ee509 --- /dev/null +++ b/src/com/google/common/base/Utf8.java @@ -0,0 +1,104 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.base; + +import com.google.common.annotations.Beta; +import com.google.common.annotations.GwtCompatible; +import com.google.common.base.Preconditions; + +@Beta +@GwtCompatible +public final class Utf8 { + public static int encodedLength(CharSequence sequence) { + int i; + int utf16Length; + int utf8Length = utf16Length = sequence.length(); + for (i = 0; i < utf16Length && sequence.charAt(i) < '\u0080'; ++i) { + } + while (i < utf16Length) { + char c = sequence.charAt(i); + if (c < '\u0800') { + utf8Length += 127 - c >>> 31; + } else { + utf8Length += Utf8.encodedLengthGeneral(sequence, i); + break; + } + ++i; + } + if (utf8Length < utf16Length) { + long l = (long)utf8Length + 0x100000000L; + throw new IllegalArgumentException(new StringBuilder(54).append("UTF-8 length does not fit in int: ").append(l).toString()); + } + return utf8Length; + } + + private static int encodedLengthGeneral(CharSequence sequence, int start) { + int utf16Length = sequence.length(); + int utf8Length = 0; + for (int i = start; i < utf16Length; ++i) { + char c = sequence.charAt(i); + if (c < '\u0800') { + utf8Length += 127 - c >>> 31; + continue; + } + utf8Length += 2; + if ('\ud800' > c || c > '\udfff') continue; + int cp = Character.codePointAt(sequence, i); + if (cp < 65536) { + int n = i; + throw new IllegalArgumentException(new StringBuilder(39).append("Unpaired surrogate at index ").append(n).toString()); + } + ++i; + } + return utf8Length; + } + + public static boolean isWellFormed(byte[] bytes) { + return Utf8.isWellFormed(bytes, 0, bytes.length); + } + + public static boolean isWellFormed(byte[] bytes, int off, int len) { + int end = off + len; + Preconditions.checkPositionIndexes(off, end, bytes.length); + for (int i = off; i < end; ++i) { + if (bytes[i] >= 0) continue; + return Utf8.isWellFormedSlowPath(bytes, i, end); + } + return true; + } + + private static boolean isWellFormedSlowPath(byte[] bytes, int off, int end) { + int index = off; + while (true) { + byte byte2; + byte byte1; + if (index >= end) { + return true; + } + if ((byte1 = bytes[index++]) >= 0) continue; + if (byte1 < -32) { + if (index == end) { + return false; + } + if (byte1 >= -62 && bytes[index++] <= -65) continue; + return false; + } + if (byte1 < -16) { + if (index + 1 >= end) { + return false; + } + if (!((byte2 = bytes[index++]) > -65 || byte1 == -32 && byte2 < -96 || byte1 == -19 && -96 <= byte2) && bytes[index++] <= -65) continue; + return false; + } + if (index + 2 >= end) { + return false; + } + if ((byte2 = bytes[index++]) > -65 || (byte1 << 28) + (byte2 - -112) >> 30 != 0 || bytes[index++] > -65 || bytes[index++] > -65) break; + } + return false; + } + + private Utf8() { + } +} diff --git a/src/com/google/common/base/Verify.java b/src/com/google/common/base/Verify.java new file mode 100644 index 0000000..46bd27c --- /dev/null +++ b/src/com/google/common/base/Verify.java @@ -0,0 +1,38 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.base; + +import com.google.common.annotations.Beta; +import com.google.common.annotations.GwtCompatible; +import com.google.common.base.Preconditions; +import com.google.common.base.VerifyException; +import javax.annotation.Nullable; + +@Beta +@GwtCompatible +public final class Verify { + public static void verify(boolean expression) { + if (!expression) { + throw new VerifyException(); + } + } + + public static void verify(boolean expression, @Nullable String errorMessageTemplate, Object ... errorMessageArgs) { + if (!expression) { + throw new VerifyException(Preconditions.format(errorMessageTemplate, errorMessageArgs)); + } + } + + public static T verifyNotNull(@Nullable T reference) { + return Verify.verifyNotNull(reference, "expected a non-null reference", new Object[0]); + } + + public static T verifyNotNull(@Nullable T reference, @Nullable String errorMessageTemplate, Object ... errorMessageArgs) { + Verify.verify(reference != null, errorMessageTemplate, errorMessageArgs); + return reference; + } + + private Verify() { + } +} diff --git a/src/com/google/common/base/VerifyException.java b/src/com/google/common/base/VerifyException.java new file mode 100644 index 0000000..0e03d9b --- /dev/null +++ b/src/com/google/common/base/VerifyException.java @@ -0,0 +1,20 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.base; + +import com.google.common.annotations.Beta; +import com.google.common.annotations.GwtCompatible; +import javax.annotation.Nullable; + +@Beta +@GwtCompatible +public class VerifyException +extends RuntimeException { + public VerifyException() { + } + + public VerifyException(@Nullable String message) { + super(message); + } +} diff --git a/src/com/google/common/base/internal/Finalizer.java b/src/com/google/common/base/internal/Finalizer.java new file mode 100644 index 0000000..415ea71 --- /dev/null +++ b/src/com/google/common/base/internal/Finalizer.java @@ -0,0 +1,107 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.base.internal; + +import java.lang.ref.PhantomReference; +import java.lang.ref.Reference; +import java.lang.ref.ReferenceQueue; +import java.lang.ref.WeakReference; +import java.lang.reflect.Field; +import java.lang.reflect.Method; +import java.util.logging.Level; +import java.util.logging.Logger; + +public class Finalizer +implements Runnable { + private static final Logger logger = Logger.getLogger(Finalizer.class.getName()); + private static final String FINALIZABLE_REFERENCE = "com.google.common.base.FinalizableReference"; + private final WeakReference> finalizableReferenceClassReference; + private final PhantomReference frqReference; + private final ReferenceQueue queue; + private static final Field inheritableThreadLocals = Finalizer.getInheritableThreadLocalsField(); + + public static void startFinalizer(Class finalizableReferenceClass, ReferenceQueue queue, PhantomReference frqReference) { + if (!finalizableReferenceClass.getName().equals(FINALIZABLE_REFERENCE)) { + throw new IllegalArgumentException("Expected com.google.common.base.FinalizableReference."); + } + Finalizer finalizer = new Finalizer(finalizableReferenceClass, queue, frqReference); + Thread thread = new Thread(finalizer); + thread.setName(Finalizer.class.getName()); + thread.setDaemon(true); + try { + if (inheritableThreadLocals != null) { + inheritableThreadLocals.set(thread, null); + } + } + catch (Throwable t) { + logger.log(Level.INFO, "Failed to clear thread local values inherited by reference finalizer thread.", t); + } + thread.start(); + } + + private Finalizer(Class finalizableReferenceClass, ReferenceQueue queue, PhantomReference frqReference) { + this.queue = queue; + this.finalizableReferenceClassReference = new WeakReference(finalizableReferenceClass); + this.frqReference = frqReference; + } + + @Override + public void run() { + while (true) { + try { + while (this.cleanUp(this.queue.remove())) { + } + } + catch (InterruptedException interruptedException) { + continue; + } + break; + } + } + + private boolean cleanUp(Reference reference) { + Method finalizeReferentMethod = this.getFinalizeReferentMethod(); + if (finalizeReferentMethod == null) { + return false; + } + do { + reference.clear(); + if (reference == this.frqReference) { + return false; + } + try { + finalizeReferentMethod.invoke(reference, new Object[0]); + } + catch (Throwable t) { + logger.log(Level.SEVERE, "Error cleaning up after reference.", t); + } + } while ((reference = this.queue.poll()) != null); + return true; + } + + private Method getFinalizeReferentMethod() { + Class finalizableReferenceClass = (Class)this.finalizableReferenceClassReference.get(); + if (finalizableReferenceClass == null) { + return null; + } + try { + return finalizableReferenceClass.getMethod("finalizeReferent", new Class[0]); + } + catch (NoSuchMethodException e) { + throw new AssertionError((Object)e); + } + } + + public static Field getInheritableThreadLocalsField() { + try { + Field inheritableThreadLocals = Thread.class.getDeclaredField("inheritableThreadLocals"); + inheritableThreadLocals.setAccessible(true); + return inheritableThreadLocals; + } + catch (Throwable t) { + logger.log(Level.INFO, "Couldn't access Thread.inheritableThreadLocals. Reference finalizer threads will inherit thread local values."); + return null; + } + } +} diff --git a/src/com/google/common/base/package-info.java b/src/com/google/common/base/package-info.java new file mode 100644 index 0000000..bb0dd62 --- /dev/null +++ b/src/com/google/common/base/package-info.java @@ -0,0 +1,8 @@ +/* + * Decompiled with CFR 0.152. + */ +@ParametersAreNonnullByDefault +package com.google.common.base; + +import javax.annotation.ParametersAreNonnullByDefault; + diff --git a/src/com/google/common/cache/AbstractCache.java b/src/com/google/common/cache/AbstractCache.java new file mode 100644 index 0000000..84d176c --- /dev/null +++ b/src/com/google/common/cache/AbstractCache.java @@ -0,0 +1,160 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.cache; + +import com.google.common.annotations.Beta; +import com.google.common.annotations.GwtCompatible; +import com.google.common.cache.Cache; +import com.google.common.cache.CacheStats; +import com.google.common.cache.LongAddable; +import com.google.common.cache.LongAddables; +import com.google.common.collect.ImmutableMap; +import com.google.common.collect.Maps; +import java.util.LinkedHashMap; +import java.util.Map; +import java.util.concurrent.Callable; +import java.util.concurrent.ConcurrentMap; +import java.util.concurrent.ExecutionException; + +@Beta +@GwtCompatible +public abstract class AbstractCache +implements Cache { + protected AbstractCache() { + } + + @Override + public V get(K key, Callable valueLoader) throws ExecutionException { + throw new UnsupportedOperationException(); + } + + @Override + public ImmutableMap getAllPresent(Iterable keys) { + LinkedHashMap result = Maps.newLinkedHashMap(); + for (Object key : keys) { + if (result.containsKey(key)) continue; + Object castKey = key; + Object value = this.getIfPresent(key); + if (value == null) continue; + result.put(castKey, value); + } + return ImmutableMap.copyOf(result); + } + + @Override + public void put(K key, V value) { + throw new UnsupportedOperationException(); + } + + @Override + public void putAll(Map m) { + for (Map.Entry entry : m.entrySet()) { + this.put(entry.getKey(), entry.getValue()); + } + } + + @Override + public void cleanUp() { + } + + @Override + public long size() { + throw new UnsupportedOperationException(); + } + + @Override + public void invalidate(Object key) { + throw new UnsupportedOperationException(); + } + + @Override + public void invalidateAll(Iterable keys) { + for (Object key : keys) { + this.invalidate(key); + } + } + + @Override + public void invalidateAll() { + throw new UnsupportedOperationException(); + } + + @Override + public CacheStats stats() { + throw new UnsupportedOperationException(); + } + + @Override + public ConcurrentMap asMap() { + throw new UnsupportedOperationException(); + } + + @Beta + public static final class SimpleStatsCounter + implements StatsCounter { + private final LongAddable hitCount = LongAddables.create(); + private final LongAddable missCount = LongAddables.create(); + private final LongAddable loadSuccessCount = LongAddables.create(); + private final LongAddable loadExceptionCount = LongAddables.create(); + private final LongAddable totalLoadTime = LongAddables.create(); + private final LongAddable evictionCount = LongAddables.create(); + + @Override + public void recordHits(int count) { + this.hitCount.add(count); + } + + @Override + public void recordMisses(int count) { + this.missCount.add(count); + } + + @Override + public void recordLoadSuccess(long loadTime) { + this.loadSuccessCount.increment(); + this.totalLoadTime.add(loadTime); + } + + @Override + public void recordLoadException(long loadTime) { + this.loadExceptionCount.increment(); + this.totalLoadTime.add(loadTime); + } + + @Override + public void recordEviction() { + this.evictionCount.increment(); + } + + @Override + public CacheStats snapshot() { + return new CacheStats(this.hitCount.sum(), this.missCount.sum(), this.loadSuccessCount.sum(), this.loadExceptionCount.sum(), this.totalLoadTime.sum(), this.evictionCount.sum()); + } + + public void incrementBy(StatsCounter other) { + CacheStats otherStats = other.snapshot(); + this.hitCount.add(otherStats.hitCount()); + this.missCount.add(otherStats.missCount()); + this.loadSuccessCount.add(otherStats.loadSuccessCount()); + this.loadExceptionCount.add(otherStats.loadExceptionCount()); + this.totalLoadTime.add(otherStats.totalLoadTime()); + this.evictionCount.add(otherStats.evictionCount()); + } + } + + @Beta + public static interface StatsCounter { + public void recordHits(int var1); + + public void recordMisses(int var1); + + public void recordLoadSuccess(long var1); + + public void recordLoadException(long var1); + + public void recordEviction(); + + public CacheStats snapshot(); + } +} diff --git a/src/com/google/common/cache/AbstractLoadingCache.java b/src/com/google/common/cache/AbstractLoadingCache.java new file mode 100644 index 0000000..bda1535 --- /dev/null +++ b/src/com/google/common/cache/AbstractLoadingCache.java @@ -0,0 +1,51 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.cache; + +import com.google.common.annotations.Beta; +import com.google.common.cache.AbstractCache; +import com.google.common.cache.LoadingCache; +import com.google.common.collect.ImmutableMap; +import com.google.common.collect.Maps; +import com.google.common.util.concurrent.UncheckedExecutionException; +import java.util.LinkedHashMap; +import java.util.concurrent.ExecutionException; + +@Beta +public abstract class AbstractLoadingCache +extends AbstractCache +implements LoadingCache { + protected AbstractLoadingCache() { + } + + @Override + public V getUnchecked(K key) { + try { + return this.get(key); + } + catch (ExecutionException e) { + throw new UncheckedExecutionException(e.getCause()); + } + } + + @Override + public ImmutableMap getAll(Iterable keys) throws ExecutionException { + LinkedHashMap result = Maps.newLinkedHashMap(); + for (K key : keys) { + if (result.containsKey(key)) continue; + result.put(key, this.get(key)); + } + return ImmutableMap.copyOf(result); + } + + @Override + public final V apply(K key) { + return this.getUnchecked(key); + } + + @Override + public void refresh(K key) { + throw new UnsupportedOperationException(); + } +} diff --git a/src/com/google/common/cache/Cache.java b/src/com/google/common/cache/Cache.java new file mode 100644 index 0000000..6bf3c93 --- /dev/null +++ b/src/com/google/common/cache/Cache.java @@ -0,0 +1,43 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.cache; + +import com.google.common.annotations.Beta; +import com.google.common.annotations.GwtCompatible; +import com.google.common.cache.CacheStats; +import com.google.common.collect.ImmutableMap; +import java.util.Map; +import java.util.concurrent.Callable; +import java.util.concurrent.ConcurrentMap; +import java.util.concurrent.ExecutionException; +import javax.annotation.Nullable; + +@Beta +@GwtCompatible +public interface Cache { + @Nullable + public V getIfPresent(Object var1); + + public V get(K var1, Callable var2) throws ExecutionException; + + public ImmutableMap getAllPresent(Iterable var1); + + public void put(K var1, V var2); + + public void putAll(Map var1); + + public void invalidate(Object var1); + + public void invalidateAll(Iterable var1); + + public void invalidateAll(); + + public long size(); + + public CacheStats stats(); + + public ConcurrentMap asMap(); + + public void cleanUp(); +} diff --git a/src/com/google/common/cache/CacheBuilder.java b/src/com/google/common/cache/CacheBuilder.java new file mode 100644 index 0000000..bd99385 --- /dev/null +++ b/src/com/google/common/cache/CacheBuilder.java @@ -0,0 +1,402 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.cache; + +import com.google.common.annotations.Beta; +import com.google.common.annotations.GwtCompatible; +import com.google.common.annotations.GwtIncompatible; +import com.google.common.base.Ascii; +import com.google.common.base.Equivalence; +import com.google.common.base.MoreObjects; +import com.google.common.base.Preconditions; +import com.google.common.base.Supplier; +import com.google.common.base.Suppliers; +import com.google.common.base.Ticker; +import com.google.common.cache.AbstractCache; +import com.google.common.cache.Cache; +import com.google.common.cache.CacheBuilderSpec; +import com.google.common.cache.CacheLoader; +import com.google.common.cache.CacheStats; +import com.google.common.cache.LoadingCache; +import com.google.common.cache.LocalCache; +import com.google.common.cache.RemovalListener; +import com.google.common.cache.RemovalNotification; +import com.google.common.cache.Weigher; +import java.util.concurrent.TimeUnit; +import java.util.logging.Level; +import java.util.logging.Logger; +import javax.annotation.CheckReturnValue; + +@GwtCompatible(emulated=true) +public final class CacheBuilder { + private static final int DEFAULT_INITIAL_CAPACITY = 16; + private static final int DEFAULT_CONCURRENCY_LEVEL = 4; + private static final int DEFAULT_EXPIRATION_NANOS = 0; + private static final int DEFAULT_REFRESH_NANOS = 0; + static final Supplier NULL_STATS_COUNTER = Suppliers.ofInstance(new AbstractCache.StatsCounter(){ + + @Override + public void recordHits(int count) { + } + + @Override + public void recordMisses(int count) { + } + + @Override + public void recordLoadSuccess(long loadTime) { + } + + @Override + public void recordLoadException(long loadTime) { + } + + @Override + public void recordEviction() { + } + + @Override + public CacheStats snapshot() { + return EMPTY_STATS; + } + }); + static final CacheStats EMPTY_STATS = new CacheStats(0L, 0L, 0L, 0L, 0L, 0L); + static final Supplier CACHE_STATS_COUNTER = new Supplier(){ + + @Override + public AbstractCache.StatsCounter get() { + return new AbstractCache.SimpleStatsCounter(); + } + }; + static final Ticker NULL_TICKER = new Ticker(){ + + @Override + public long read() { + return 0L; + } + }; + private static final Logger logger = Logger.getLogger(CacheBuilder.class.getName()); + static final int UNSET_INT = -1; + boolean strictParsing = true; + int initialCapacity = -1; + int concurrencyLevel = -1; + long maximumSize = -1L; + long maximumWeight = -1L; + Weigher weigher; + LocalCache.Strength keyStrength; + LocalCache.Strength valueStrength; + long expireAfterWriteNanos = -1L; + long expireAfterAccessNanos = -1L; + long refreshNanos = -1L; + Equivalence keyEquivalence; + Equivalence valueEquivalence; + RemovalListener removalListener; + Ticker ticker; + Supplier statsCounterSupplier = NULL_STATS_COUNTER; + + CacheBuilder() { + } + + public static CacheBuilder newBuilder() { + return new CacheBuilder(); + } + + @Beta + @GwtIncompatible(value="To be supported") + public static CacheBuilder from(CacheBuilderSpec spec) { + return spec.toCacheBuilder().lenientParsing(); + } + + @Beta + @GwtIncompatible(value="To be supported") + public static CacheBuilder from(String spec) { + return CacheBuilder.from(CacheBuilderSpec.parse(spec)); + } + + @GwtIncompatible(value="To be supported") + CacheBuilder lenientParsing() { + this.strictParsing = false; + return this; + } + + @GwtIncompatible(value="To be supported") + CacheBuilder keyEquivalence(Equivalence equivalence) { + Preconditions.checkState(this.keyEquivalence == null, "key equivalence was already set to %s", this.keyEquivalence); + this.keyEquivalence = Preconditions.checkNotNull(equivalence); + return this; + } + + Equivalence getKeyEquivalence() { + return MoreObjects.firstNonNull(this.keyEquivalence, this.getKeyStrength().defaultEquivalence()); + } + + @GwtIncompatible(value="To be supported") + CacheBuilder valueEquivalence(Equivalence equivalence) { + Preconditions.checkState(this.valueEquivalence == null, "value equivalence was already set to %s", this.valueEquivalence); + this.valueEquivalence = Preconditions.checkNotNull(equivalence); + return this; + } + + Equivalence getValueEquivalence() { + return MoreObjects.firstNonNull(this.valueEquivalence, this.getValueStrength().defaultEquivalence()); + } + + public CacheBuilder initialCapacity(int initialCapacity) { + Preconditions.checkState(this.initialCapacity == -1, "initial capacity was already set to %s", this.initialCapacity); + Preconditions.checkArgument(initialCapacity >= 0); + this.initialCapacity = initialCapacity; + return this; + } + + int getInitialCapacity() { + return this.initialCapacity == -1 ? 16 : this.initialCapacity; + } + + public CacheBuilder concurrencyLevel(int concurrencyLevel) { + Preconditions.checkState(this.concurrencyLevel == -1, "concurrency level was already set to %s", this.concurrencyLevel); + Preconditions.checkArgument(concurrencyLevel > 0); + this.concurrencyLevel = concurrencyLevel; + return this; + } + + int getConcurrencyLevel() { + return this.concurrencyLevel == -1 ? 4 : this.concurrencyLevel; + } + + public CacheBuilder maximumSize(long size) { + Preconditions.checkState(this.maximumSize == -1L, "maximum size was already set to %s", this.maximumSize); + Preconditions.checkState(this.maximumWeight == -1L, "maximum weight was already set to %s", this.maximumWeight); + Preconditions.checkState(this.weigher == null, "maximum size can not be combined with weigher"); + Preconditions.checkArgument(size >= 0L, "maximum size must not be negative"); + this.maximumSize = size; + return this; + } + + @GwtIncompatible(value="To be supported") + public CacheBuilder maximumWeight(long weight) { + Preconditions.checkState(this.maximumWeight == -1L, "maximum weight was already set to %s", this.maximumWeight); + Preconditions.checkState(this.maximumSize == -1L, "maximum size was already set to %s", this.maximumSize); + this.maximumWeight = weight; + Preconditions.checkArgument(weight >= 0L, "maximum weight must not be negative"); + return this; + } + + @GwtIncompatible(value="To be supported") + public CacheBuilder weigher(Weigher weigher) { + Preconditions.checkState(this.weigher == null); + if (this.strictParsing) { + Preconditions.checkState(this.maximumSize == -1L, "weigher can not be combined with maximum size", this.maximumSize); + } + CacheBuilder me = this; + me.weigher = Preconditions.checkNotNull(weigher); + return me; + } + + long getMaximumWeight() { + if (this.expireAfterWriteNanos == 0L || this.expireAfterAccessNanos == 0L) { + return 0L; + } + return this.weigher == null ? this.maximumSize : this.maximumWeight; + } + + Weigher getWeigher() { + return MoreObjects.firstNonNull(this.weigher, OneWeigher.INSTANCE); + } + + @GwtIncompatible(value="java.lang.ref.WeakReference") + public CacheBuilder weakKeys() { + return this.setKeyStrength(LocalCache.Strength.WEAK); + } + + CacheBuilder setKeyStrength(LocalCache.Strength strength) { + Preconditions.checkState(this.keyStrength == null, "Key strength was already set to %s", new Object[]{this.keyStrength}); + this.keyStrength = Preconditions.checkNotNull(strength); + return this; + } + + LocalCache.Strength getKeyStrength() { + return MoreObjects.firstNonNull(this.keyStrength, LocalCache.Strength.STRONG); + } + + @GwtIncompatible(value="java.lang.ref.WeakReference") + public CacheBuilder weakValues() { + return this.setValueStrength(LocalCache.Strength.WEAK); + } + + @GwtIncompatible(value="java.lang.ref.SoftReference") + public CacheBuilder softValues() { + return this.setValueStrength(LocalCache.Strength.SOFT); + } + + CacheBuilder setValueStrength(LocalCache.Strength strength) { + Preconditions.checkState(this.valueStrength == null, "Value strength was already set to %s", new Object[]{this.valueStrength}); + this.valueStrength = Preconditions.checkNotNull(strength); + return this; + } + + LocalCache.Strength getValueStrength() { + return MoreObjects.firstNonNull(this.valueStrength, LocalCache.Strength.STRONG); + } + + public CacheBuilder expireAfterWrite(long duration, TimeUnit unit) { + Preconditions.checkState(this.expireAfterWriteNanos == -1L, "expireAfterWrite was already set to %s ns", this.expireAfterWriteNanos); + Preconditions.checkArgument(duration >= 0L, "duration cannot be negative: %s %s", new Object[]{duration, unit}); + this.expireAfterWriteNanos = unit.toNanos(duration); + return this; + } + + long getExpireAfterWriteNanos() { + return this.expireAfterWriteNanos == -1L ? 0L : this.expireAfterWriteNanos; + } + + public CacheBuilder expireAfterAccess(long duration, TimeUnit unit) { + Preconditions.checkState(this.expireAfterAccessNanos == -1L, "expireAfterAccess was already set to %s ns", this.expireAfterAccessNanos); + Preconditions.checkArgument(duration >= 0L, "duration cannot be negative: %s %s", new Object[]{duration, unit}); + this.expireAfterAccessNanos = unit.toNanos(duration); + return this; + } + + long getExpireAfterAccessNanos() { + return this.expireAfterAccessNanos == -1L ? 0L : this.expireAfterAccessNanos; + } + + @Beta + @GwtIncompatible(value="To be supported (synchronously).") + public CacheBuilder refreshAfterWrite(long duration, TimeUnit unit) { + Preconditions.checkNotNull(unit); + Preconditions.checkState(this.refreshNanos == -1L, "refresh was already set to %s ns", this.refreshNanos); + Preconditions.checkArgument(duration > 0L, "duration must be positive: %s %s", new Object[]{duration, unit}); + this.refreshNanos = unit.toNanos(duration); + return this; + } + + long getRefreshNanos() { + return this.refreshNanos == -1L ? 0L : this.refreshNanos; + } + + public CacheBuilder ticker(Ticker ticker) { + Preconditions.checkState(this.ticker == null); + this.ticker = Preconditions.checkNotNull(ticker); + return this; + } + + Ticker getTicker(boolean recordsTime) { + if (this.ticker != null) { + return this.ticker; + } + return recordsTime ? Ticker.systemTicker() : NULL_TICKER; + } + + @CheckReturnValue + public CacheBuilder removalListener(RemovalListener listener) { + Preconditions.checkState(this.removalListener == null); + CacheBuilder me = this; + me.removalListener = Preconditions.checkNotNull(listener); + return me; + } + + RemovalListener getRemovalListener() { + return MoreObjects.firstNonNull(this.removalListener, NullListener.INSTANCE); + } + + public CacheBuilder recordStats() { + this.statsCounterSupplier = CACHE_STATS_COUNTER; + return this; + } + + boolean isRecordingStats() { + return this.statsCounterSupplier == CACHE_STATS_COUNTER; + } + + Supplier getStatsCounterSupplier() { + return this.statsCounterSupplier; + } + + public LoadingCache build(CacheLoader loader) { + this.checkWeightWithWeigher(); + return new LocalCache.LocalLoadingCache(this, loader); + } + + public Cache build() { + this.checkWeightWithWeigher(); + this.checkNonLoadingCache(); + return new LocalCache.LocalManualCache(this); + } + + private void checkNonLoadingCache() { + Preconditions.checkState(this.refreshNanos == -1L, "refreshAfterWrite requires a LoadingCache"); + } + + private void checkWeightWithWeigher() { + if (this.weigher == null) { + Preconditions.checkState(this.maximumWeight == -1L, "maximumWeight requires weigher"); + } else if (this.strictParsing) { + Preconditions.checkState(this.maximumWeight != -1L, "weigher requires maximumWeight"); + } else if (this.maximumWeight == -1L) { + logger.log(Level.WARNING, "ignoring weigher specified without maximumWeight"); + } + } + + public String toString() { + long l; + MoreObjects.ToStringHelper s = MoreObjects.toStringHelper(this); + if (this.initialCapacity != -1) { + s.add("initialCapacity", this.initialCapacity); + } + if (this.concurrencyLevel != -1) { + s.add("concurrencyLevel", this.concurrencyLevel); + } + if (this.maximumSize != -1L) { + s.add("maximumSize", this.maximumSize); + } + if (this.maximumWeight != -1L) { + s.add("maximumWeight", this.maximumWeight); + } + if (this.expireAfterWriteNanos != -1L) { + l = this.expireAfterWriteNanos; + s.add("expireAfterWrite", new StringBuilder(22).append(l).append("ns").toString()); + } + if (this.expireAfterAccessNanos != -1L) { + l = this.expireAfterAccessNanos; + s.add("expireAfterAccess", new StringBuilder(22).append(l).append("ns").toString()); + } + if (this.keyStrength != null) { + s.add("keyStrength", Ascii.toLowerCase(this.keyStrength.toString())); + } + if (this.valueStrength != null) { + s.add("valueStrength", Ascii.toLowerCase(this.valueStrength.toString())); + } + if (this.keyEquivalence != null) { + s.addValue("keyEquivalence"); + } + if (this.valueEquivalence != null) { + s.addValue("valueEquivalence"); + } + if (this.removalListener != null) { + s.addValue("removalListener"); + } + return s.toString(); + } + + static enum OneWeigher implements Weigher + { + INSTANCE; + + + @Override + public int weigh(Object key, Object value) { + return 1; + } + } + + static enum NullListener implements RemovalListener + { + INSTANCE; + + + @Override + public void onRemoval(RemovalNotification notification) { + } + } +} diff --git a/src/com/google/common/cache/CacheBuilderSpec.java b/src/com/google/common/cache/CacheBuilderSpec.java new file mode 100644 index 0000000..f0bb88a --- /dev/null +++ b/src/com/google/common/cache/CacheBuilderSpec.java @@ -0,0 +1,378 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.cache; + +import com.google.common.annotations.Beta; +import com.google.common.annotations.VisibleForTesting; +import com.google.common.base.MoreObjects; +import com.google.common.base.Objects; +import com.google.common.base.Preconditions; +import com.google.common.base.Splitter; +import com.google.common.cache.CacheBuilder; +import com.google.common.cache.LocalCache; +import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableMap; +import java.util.concurrent.TimeUnit; +import javax.annotation.Nullable; + +@Beta +public final class CacheBuilderSpec { + private static final Splitter KEYS_SPLITTER = Splitter.on(',').trimResults(); + private static final Splitter KEY_VALUE_SPLITTER = Splitter.on('=').trimResults(); + private static final ImmutableMap VALUE_PARSERS = ImmutableMap.builder().put("initialCapacity", new InitialCapacityParser()).put("maximumSize", (InitialCapacityParser)((Object)new MaximumSizeParser())).put("maximumWeight", (InitialCapacityParser)((Object)new MaximumWeightParser())).put("concurrencyLevel", (InitialCapacityParser)((Object)new ConcurrencyLevelParser())).put("weakKeys", (InitialCapacityParser)((Object)new KeyStrengthParser(LocalCache.Strength.WEAK))).put("softValues", (InitialCapacityParser)((Object)new ValueStrengthParser(LocalCache.Strength.SOFT))).put("weakValues", (InitialCapacityParser)((Object)new ValueStrengthParser(LocalCache.Strength.WEAK))).put("recordStats", (InitialCapacityParser)((Object)new RecordStatsParser())).put("expireAfterAccess", (InitialCapacityParser)((Object)new AccessDurationParser())).put("expireAfterWrite", (InitialCapacityParser)((Object)new WriteDurationParser())).put("refreshAfterWrite", (InitialCapacityParser)((Object)new RefreshDurationParser())).put("refreshInterval", (InitialCapacityParser)((Object)new RefreshDurationParser())).build(); + @VisibleForTesting + Integer initialCapacity; + @VisibleForTesting + Long maximumSize; + @VisibleForTesting + Long maximumWeight; + @VisibleForTesting + Integer concurrencyLevel; + @VisibleForTesting + LocalCache.Strength keyStrength; + @VisibleForTesting + LocalCache.Strength valueStrength; + @VisibleForTesting + Boolean recordStats; + @VisibleForTesting + long writeExpirationDuration; + @VisibleForTesting + TimeUnit writeExpirationTimeUnit; + @VisibleForTesting + long accessExpirationDuration; + @VisibleForTesting + TimeUnit accessExpirationTimeUnit; + @VisibleForTesting + long refreshDuration; + @VisibleForTesting + TimeUnit refreshTimeUnit; + private final String specification; + + private CacheBuilderSpec(String specification) { + this.specification = specification; + } + + public static CacheBuilderSpec parse(String cacheBuilderSpecification) { + CacheBuilderSpec spec = new CacheBuilderSpec(cacheBuilderSpecification); + if (!cacheBuilderSpecification.isEmpty()) { + for (String keyValuePair : KEYS_SPLITTER.split(cacheBuilderSpecification)) { + ImmutableList keyAndValue = ImmutableList.copyOf(KEY_VALUE_SPLITTER.split(keyValuePair)); + Preconditions.checkArgument(!keyAndValue.isEmpty(), "blank key-value pair"); + Preconditions.checkArgument(keyAndValue.size() <= 2, "key-value pair %s with more than one equals sign", keyValuePair); + String key = (String)keyAndValue.get(0); + ValueParser valueParser = VALUE_PARSERS.get(key); + Preconditions.checkArgument(valueParser != null, "unknown key %s", key); + String value = keyAndValue.size() == 1 ? null : (String)keyAndValue.get(1); + valueParser.parse(spec, key, value); + } + } + return spec; + } + + public static CacheBuilderSpec disableCaching() { + return CacheBuilderSpec.parse("maximumSize=0"); + } + + CacheBuilder toCacheBuilder() { + CacheBuilder builder = CacheBuilder.newBuilder(); + if (this.initialCapacity != null) { + builder.initialCapacity(this.initialCapacity); + } + if (this.maximumSize != null) { + builder.maximumSize(this.maximumSize); + } + if (this.maximumWeight != null) { + builder.maximumWeight(this.maximumWeight); + } + if (this.concurrencyLevel != null) { + builder.concurrencyLevel(this.concurrencyLevel); + } + if (this.keyStrength != null) { + switch (this.keyStrength) { + case WEAK: { + builder.weakKeys(); + break; + } + default: { + throw new AssertionError(); + } + } + } + if (this.valueStrength != null) { + switch (this.valueStrength) { + case SOFT: { + builder.softValues(); + break; + } + case WEAK: { + builder.weakValues(); + break; + } + default: { + throw new AssertionError(); + } + } + } + if (this.recordStats != null && this.recordStats.booleanValue()) { + builder.recordStats(); + } + if (this.writeExpirationTimeUnit != null) { + builder.expireAfterWrite(this.writeExpirationDuration, this.writeExpirationTimeUnit); + } + if (this.accessExpirationTimeUnit != null) { + builder.expireAfterAccess(this.accessExpirationDuration, this.accessExpirationTimeUnit); + } + if (this.refreshTimeUnit != null) { + builder.refreshAfterWrite(this.refreshDuration, this.refreshTimeUnit); + } + return builder; + } + + public String toParsableString() { + return this.specification; + } + + public String toString() { + return MoreObjects.toStringHelper(this).addValue(this.toParsableString()).toString(); + } + + public int hashCode() { + return Objects.hashCode(new Object[]{this.initialCapacity, this.maximumSize, this.maximumWeight, this.concurrencyLevel, this.keyStrength, this.valueStrength, this.recordStats, CacheBuilderSpec.durationInNanos(this.writeExpirationDuration, this.writeExpirationTimeUnit), CacheBuilderSpec.durationInNanos(this.accessExpirationDuration, this.accessExpirationTimeUnit), CacheBuilderSpec.durationInNanos(this.refreshDuration, this.refreshTimeUnit)}); + } + + public boolean equals(@Nullable Object obj) { + if (this == obj) { + return true; + } + if (!(obj instanceof CacheBuilderSpec)) { + return false; + } + CacheBuilderSpec that = (CacheBuilderSpec)obj; + return Objects.equal(this.initialCapacity, that.initialCapacity) && Objects.equal(this.maximumSize, that.maximumSize) && Objects.equal(this.maximumWeight, that.maximumWeight) && Objects.equal(this.concurrencyLevel, that.concurrencyLevel) && Objects.equal((Object)this.keyStrength, (Object)that.keyStrength) && Objects.equal((Object)this.valueStrength, (Object)that.valueStrength) && Objects.equal(this.recordStats, that.recordStats) && Objects.equal(CacheBuilderSpec.durationInNanos(this.writeExpirationDuration, this.writeExpirationTimeUnit), CacheBuilderSpec.durationInNanos(that.writeExpirationDuration, that.writeExpirationTimeUnit)) && Objects.equal(CacheBuilderSpec.durationInNanos(this.accessExpirationDuration, this.accessExpirationTimeUnit), CacheBuilderSpec.durationInNanos(that.accessExpirationDuration, that.accessExpirationTimeUnit)) && Objects.equal(CacheBuilderSpec.durationInNanos(this.refreshDuration, this.refreshTimeUnit), CacheBuilderSpec.durationInNanos(that.refreshDuration, that.refreshTimeUnit)); + } + + @Nullable + private static Long durationInNanos(long duration, @Nullable TimeUnit unit) { + return unit == null ? null : Long.valueOf(unit.toNanos(duration)); + } + + static class RefreshDurationParser + extends DurationParser { + RefreshDurationParser() { + } + + @Override + protected void parseDuration(CacheBuilderSpec spec, long duration, TimeUnit unit) { + Preconditions.checkArgument(spec.refreshTimeUnit == null, "refreshAfterWrite already set"); + spec.refreshDuration = duration; + spec.refreshTimeUnit = unit; + } + } + + static class WriteDurationParser + extends DurationParser { + WriteDurationParser() { + } + + @Override + protected void parseDuration(CacheBuilderSpec spec, long duration, TimeUnit unit) { + Preconditions.checkArgument(spec.writeExpirationTimeUnit == null, "expireAfterWrite already set"); + spec.writeExpirationDuration = duration; + spec.writeExpirationTimeUnit = unit; + } + } + + static class AccessDurationParser + extends DurationParser { + AccessDurationParser() { + } + + @Override + protected void parseDuration(CacheBuilderSpec spec, long duration, TimeUnit unit) { + Preconditions.checkArgument(spec.accessExpirationTimeUnit == null, "expireAfterAccess already set"); + spec.accessExpirationDuration = duration; + spec.accessExpirationTimeUnit = unit; + } + } + + static abstract class DurationParser + implements ValueParser { + DurationParser() { + } + + protected abstract void parseDuration(CacheBuilderSpec var1, long var2, TimeUnit var4); + + @Override + public void parse(CacheBuilderSpec spec, String key, String value) { + Preconditions.checkArgument(value != null && !value.isEmpty(), "value of key %s omitted", key); + try { + TimeUnit timeUnit; + char lastChar = value.charAt(value.length() - 1); + switch (lastChar) { + case 'd': { + timeUnit = TimeUnit.DAYS; + break; + } + case 'h': { + timeUnit = TimeUnit.HOURS; + break; + } + case 'm': { + timeUnit = TimeUnit.MINUTES; + break; + } + case 's': { + timeUnit = TimeUnit.SECONDS; + break; + } + default: { + throw new IllegalArgumentException(String.format("key %s invalid format. was %s, must end with one of [dDhHmMsS]", key, value)); + } + } + long duration = Long.parseLong(value.substring(0, value.length() - 1)); + this.parseDuration(spec, duration, timeUnit); + } + catch (NumberFormatException e) { + throw new IllegalArgumentException(String.format("key %s value set to %s, must be integer", key, value)); + } + } + } + + static class RecordStatsParser + implements ValueParser { + RecordStatsParser() { + } + + @Override + public void parse(CacheBuilderSpec spec, String key, @Nullable String value) { + Preconditions.checkArgument(value == null, "recordStats does not take values"); + Preconditions.checkArgument(spec.recordStats == null, "recordStats already set"); + spec.recordStats = true; + } + } + + static class ValueStrengthParser + implements ValueParser { + private final LocalCache.Strength strength; + + public ValueStrengthParser(LocalCache.Strength strength) { + this.strength = strength; + } + + @Override + public void parse(CacheBuilderSpec spec, String key, @Nullable String value) { + Preconditions.checkArgument(value == null, "key %s does not take values", key); + Preconditions.checkArgument(spec.valueStrength == null, "%s was already set to %s", new Object[]{key, spec.valueStrength}); + spec.valueStrength = this.strength; + } + } + + static class KeyStrengthParser + implements ValueParser { + private final LocalCache.Strength strength; + + public KeyStrengthParser(LocalCache.Strength strength) { + this.strength = strength; + } + + @Override + public void parse(CacheBuilderSpec spec, String key, @Nullable String value) { + Preconditions.checkArgument(value == null, "key %s does not take values", key); + Preconditions.checkArgument(spec.keyStrength == null, "%s was already set to %s", new Object[]{key, spec.keyStrength}); + spec.keyStrength = this.strength; + } + } + + static class ConcurrencyLevelParser + extends IntegerParser { + ConcurrencyLevelParser() { + } + + @Override + protected void parseInteger(CacheBuilderSpec spec, int value) { + Preconditions.checkArgument(spec.concurrencyLevel == null, "concurrency level was already set to ", spec.concurrencyLevel); + spec.concurrencyLevel = value; + } + } + + static class MaximumWeightParser + extends LongParser { + MaximumWeightParser() { + } + + @Override + protected void parseLong(CacheBuilderSpec spec, long value) { + Preconditions.checkArgument(spec.maximumWeight == null, "maximum weight was already set to ", spec.maximumWeight); + Preconditions.checkArgument(spec.maximumSize == null, "maximum size was already set to ", spec.maximumSize); + spec.maximumWeight = value; + } + } + + static class MaximumSizeParser + extends LongParser { + MaximumSizeParser() { + } + + @Override + protected void parseLong(CacheBuilderSpec spec, long value) { + Preconditions.checkArgument(spec.maximumSize == null, "maximum size was already set to ", spec.maximumSize); + Preconditions.checkArgument(spec.maximumWeight == null, "maximum weight was already set to ", spec.maximumWeight); + spec.maximumSize = value; + } + } + + static class InitialCapacityParser + extends IntegerParser { + InitialCapacityParser() { + } + + @Override + protected void parseInteger(CacheBuilderSpec spec, int value) { + Preconditions.checkArgument(spec.initialCapacity == null, "initial capacity was already set to ", spec.initialCapacity); + spec.initialCapacity = value; + } + } + + static abstract class LongParser + implements ValueParser { + LongParser() { + } + + protected abstract void parseLong(CacheBuilderSpec var1, long var2); + + @Override + public void parse(CacheBuilderSpec spec, String key, String value) { + Preconditions.checkArgument(value != null && !value.isEmpty(), "value of key %s omitted", key); + try { + this.parseLong(spec, Long.parseLong(value)); + } + catch (NumberFormatException e) { + throw new IllegalArgumentException(String.format("key %s value set to %s, must be integer", key, value), e); + } + } + } + + static abstract class IntegerParser + implements ValueParser { + IntegerParser() { + } + + protected abstract void parseInteger(CacheBuilderSpec var1, int var2); + + @Override + public void parse(CacheBuilderSpec spec, String key, String value) { + Preconditions.checkArgument(value != null && !value.isEmpty(), "value of key %s omitted", key); + try { + this.parseInteger(spec, Integer.parseInt(value)); + } + catch (NumberFormatException e) { + throw new IllegalArgumentException(String.format("key %s value set to %s, must be integer", key, value), e); + } + } + } + + private static interface ValueParser { + public void parse(CacheBuilderSpec var1, String var2, @Nullable String var3); + } +} diff --git a/src/com/google/common/cache/CacheLoader.java b/src/com/google/common/cache/CacheLoader.java new file mode 100644 index 0000000..967e118 --- /dev/null +++ b/src/com/google/common/cache/CacheLoader.java @@ -0,0 +1,125 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.cache; + +import com.google.common.annotations.Beta; +import com.google.common.annotations.GwtCompatible; +import com.google.common.annotations.GwtIncompatible; +import com.google.common.base.Function; +import com.google.common.base.Preconditions; +import com.google.common.base.Supplier; +import com.google.common.util.concurrent.Futures; +import com.google.common.util.concurrent.ListenableFuture; +import com.google.common.util.concurrent.ListenableFutureTask; +import java.io.Serializable; +import java.util.Map; +import java.util.concurrent.Callable; +import java.util.concurrent.Executor; + +@GwtCompatible(emulated=true) +public abstract class CacheLoader { + protected CacheLoader() { + } + + public abstract V load(K var1) throws Exception; + + @GwtIncompatible(value="Futures") + public ListenableFuture reload(K key, V oldValue) throws Exception { + Preconditions.checkNotNull(key); + Preconditions.checkNotNull(oldValue); + return Futures.immediateFuture(this.load(key)); + } + + public Map loadAll(Iterable keys) throws Exception { + throw new UnsupportedLoadingOperationException(); + } + + @Beta + public static CacheLoader from(Function function) { + return new FunctionToCacheLoader(function); + } + + @Beta + public static CacheLoader from(Supplier supplier) { + return new SupplierToCacheLoader(supplier); + } + + @Beta + @GwtIncompatible(value="Executor + Futures") + public static CacheLoader asyncReloading(final CacheLoader loader, final Executor executor) { + Preconditions.checkNotNull(loader); + Preconditions.checkNotNull(executor); + return new CacheLoader(){ + + @Override + public V load(K key) throws Exception { + return loader.load(key); + } + + @Override + public ListenableFuture reload(final K key, final V oldValue) throws Exception { + ListenableFutureTask task = ListenableFutureTask.create(new Callable(){ + + @Override + public V call() throws Exception { + return loader.reload(key, oldValue).get(); + } + }); + executor.execute(task); + return task; + } + + @Override + public Map loadAll(Iterable keys) throws Exception { + return loader.loadAll(keys); + } + }; + } + + public static final class InvalidCacheLoadException + extends RuntimeException { + public InvalidCacheLoadException(String message) { + super(message); + } + } + + static final class UnsupportedLoadingOperationException + extends UnsupportedOperationException { + UnsupportedLoadingOperationException() { + } + } + + private static final class SupplierToCacheLoader + extends CacheLoader + implements Serializable { + private final Supplier computingSupplier; + private static final long serialVersionUID = 0L; + + public SupplierToCacheLoader(Supplier computingSupplier) { + this.computingSupplier = Preconditions.checkNotNull(computingSupplier); + } + + @Override + public V load(Object key) { + Preconditions.checkNotNull(key); + return this.computingSupplier.get(); + } + } + + private static final class FunctionToCacheLoader + extends CacheLoader + implements Serializable { + private final Function computingFunction; + private static final long serialVersionUID = 0L; + + public FunctionToCacheLoader(Function computingFunction) { + this.computingFunction = Preconditions.checkNotNull(computingFunction); + } + + @Override + public V load(K key) { + return this.computingFunction.apply(Preconditions.checkNotNull(key)); + } + } +} diff --git a/src/com/google/common/cache/CacheStats.java b/src/com/google/common/cache/CacheStats.java new file mode 100644 index 0000000..a2883a7 --- /dev/null +++ b/src/com/google/common/cache/CacheStats.java @@ -0,0 +1,113 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.cache; + +import com.google.common.annotations.Beta; +import com.google.common.annotations.GwtCompatible; +import com.google.common.base.MoreObjects; +import com.google.common.base.Objects; +import com.google.common.base.Preconditions; +import javax.annotation.Nullable; + +@Beta +@GwtCompatible +public final class CacheStats { + private final long hitCount; + private final long missCount; + private final long loadSuccessCount; + private final long loadExceptionCount; + private final long totalLoadTime; + private final long evictionCount; + + public CacheStats(long hitCount, long missCount, long loadSuccessCount, long loadExceptionCount, long totalLoadTime, long evictionCount) { + Preconditions.checkArgument(hitCount >= 0L); + Preconditions.checkArgument(missCount >= 0L); + Preconditions.checkArgument(loadSuccessCount >= 0L); + Preconditions.checkArgument(loadExceptionCount >= 0L); + Preconditions.checkArgument(totalLoadTime >= 0L); + Preconditions.checkArgument(evictionCount >= 0L); + this.hitCount = hitCount; + this.missCount = missCount; + this.loadSuccessCount = loadSuccessCount; + this.loadExceptionCount = loadExceptionCount; + this.totalLoadTime = totalLoadTime; + this.evictionCount = evictionCount; + } + + public long requestCount() { + return this.hitCount + this.missCount; + } + + public long hitCount() { + return this.hitCount; + } + + public double hitRate() { + long requestCount = this.requestCount(); + return requestCount == 0L ? 1.0 : (double)this.hitCount / (double)requestCount; + } + + public long missCount() { + return this.missCount; + } + + public double missRate() { + long requestCount = this.requestCount(); + return requestCount == 0L ? 0.0 : (double)this.missCount / (double)requestCount; + } + + public long loadCount() { + return this.loadSuccessCount + this.loadExceptionCount; + } + + public long loadSuccessCount() { + return this.loadSuccessCount; + } + + public long loadExceptionCount() { + return this.loadExceptionCount; + } + + public double loadExceptionRate() { + long totalLoadCount = this.loadSuccessCount + this.loadExceptionCount; + return totalLoadCount == 0L ? 0.0 : (double)this.loadExceptionCount / (double)totalLoadCount; + } + + public long totalLoadTime() { + return this.totalLoadTime; + } + + public double averageLoadPenalty() { + long totalLoadCount = this.loadSuccessCount + this.loadExceptionCount; + return totalLoadCount == 0L ? 0.0 : (double)this.totalLoadTime / (double)totalLoadCount; + } + + public long evictionCount() { + return this.evictionCount; + } + + public CacheStats minus(CacheStats other) { + return new CacheStats(Math.max(0L, this.hitCount - other.hitCount), Math.max(0L, this.missCount - other.missCount), Math.max(0L, this.loadSuccessCount - other.loadSuccessCount), Math.max(0L, this.loadExceptionCount - other.loadExceptionCount), Math.max(0L, this.totalLoadTime - other.totalLoadTime), Math.max(0L, this.evictionCount - other.evictionCount)); + } + + public CacheStats plus(CacheStats other) { + return new CacheStats(this.hitCount + other.hitCount, this.missCount + other.missCount, this.loadSuccessCount + other.loadSuccessCount, this.loadExceptionCount + other.loadExceptionCount, this.totalLoadTime + other.totalLoadTime, this.evictionCount + other.evictionCount); + } + + public int hashCode() { + return Objects.hashCode(this.hitCount, this.missCount, this.loadSuccessCount, this.loadExceptionCount, this.totalLoadTime, this.evictionCount); + } + + public boolean equals(@Nullable Object object) { + if (object instanceof CacheStats) { + CacheStats other = (CacheStats)object; + return this.hitCount == other.hitCount && this.missCount == other.missCount && this.loadSuccessCount == other.loadSuccessCount && this.loadExceptionCount == other.loadExceptionCount && this.totalLoadTime == other.totalLoadTime && this.evictionCount == other.evictionCount; + } + return false; + } + + public String toString() { + return MoreObjects.toStringHelper(this).add("hitCount", this.hitCount).add("missCount", this.missCount).add("loadSuccessCount", this.loadSuccessCount).add("loadExceptionCount", this.loadExceptionCount).add("totalLoadTime", this.totalLoadTime).add("evictionCount", this.evictionCount).toString(); + } +} diff --git a/src/com/google/common/cache/ForwardingCache.java b/src/com/google/common/cache/ForwardingCache.java new file mode 100644 index 0000000..053e3af --- /dev/null +++ b/src/com/google/common/cache/ForwardingCache.java @@ -0,0 +1,103 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.cache; + +import com.google.common.annotations.Beta; +import com.google.common.base.Preconditions; +import com.google.common.cache.Cache; +import com.google.common.cache.CacheStats; +import com.google.common.collect.ForwardingObject; +import com.google.common.collect.ImmutableMap; +import java.util.Map; +import java.util.concurrent.Callable; +import java.util.concurrent.ConcurrentMap; +import java.util.concurrent.ExecutionException; +import javax.annotation.Nullable; + +@Beta +public abstract class ForwardingCache +extends ForwardingObject +implements Cache { + protected ForwardingCache() { + } + + @Override + protected abstract Cache delegate(); + + @Override + @Nullable + public V getIfPresent(Object key) { + return this.delegate().getIfPresent(key); + } + + @Override + public V get(K key, Callable valueLoader) throws ExecutionException { + return this.delegate().get(key, valueLoader); + } + + @Override + public ImmutableMap getAllPresent(Iterable keys) { + return this.delegate().getAllPresent(keys); + } + + @Override + public void put(K key, V value) { + this.delegate().put(key, value); + } + + @Override + public void putAll(Map m) { + this.delegate().putAll(m); + } + + @Override + public void invalidate(Object key) { + this.delegate().invalidate(key); + } + + @Override + public void invalidateAll(Iterable keys) { + this.delegate().invalidateAll(keys); + } + + @Override + public void invalidateAll() { + this.delegate().invalidateAll(); + } + + @Override + public long size() { + return this.delegate().size(); + } + + @Override + public CacheStats stats() { + return this.delegate().stats(); + } + + @Override + public ConcurrentMap asMap() { + return this.delegate().asMap(); + } + + @Override + public void cleanUp() { + this.delegate().cleanUp(); + } + + @Beta + public static abstract class SimpleForwardingCache + extends ForwardingCache { + private final Cache delegate; + + protected SimpleForwardingCache(Cache delegate) { + this.delegate = Preconditions.checkNotNull(delegate); + } + + @Override + protected final Cache delegate() { + return this.delegate; + } + } +} diff --git a/src/com/google/common/cache/ForwardingLoadingCache.java b/src/com/google/common/cache/ForwardingLoadingCache.java new file mode 100644 index 0000000..b9cca2e --- /dev/null +++ b/src/com/google/common/cache/ForwardingLoadingCache.java @@ -0,0 +1,62 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.cache; + +import com.google.common.annotations.Beta; +import com.google.common.base.Preconditions; +import com.google.common.cache.ForwardingCache; +import com.google.common.cache.LoadingCache; +import com.google.common.collect.ImmutableMap; +import java.util.concurrent.ExecutionException; + +@Beta +public abstract class ForwardingLoadingCache +extends ForwardingCache +implements LoadingCache { + protected ForwardingLoadingCache() { + } + + @Override + protected abstract LoadingCache delegate(); + + @Override + public V get(K key) throws ExecutionException { + return this.delegate().get(key); + } + + @Override + public V getUnchecked(K key) { + return this.delegate().getUnchecked(key); + } + + @Override + public ImmutableMap getAll(Iterable keys) throws ExecutionException { + return this.delegate().getAll(keys); + } + + @Override + public V apply(K key) { + return this.delegate().apply(key); + } + + @Override + public void refresh(K key) { + this.delegate().refresh(key); + } + + @Beta + public static abstract class SimpleForwardingLoadingCache + extends ForwardingLoadingCache { + private final LoadingCache delegate; + + protected SimpleForwardingLoadingCache(LoadingCache delegate) { + this.delegate = Preconditions.checkNotNull(delegate); + } + + @Override + protected final LoadingCache delegate() { + return this.delegate; + } + } +} diff --git a/src/com/google/common/cache/LoadingCache.java b/src/com/google/common/cache/LoadingCache.java new file mode 100644 index 0000000..285c63a --- /dev/null +++ b/src/com/google/common/cache/LoadingCache.java @@ -0,0 +1,33 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.cache; + +import com.google.common.annotations.Beta; +import com.google.common.annotations.GwtCompatible; +import com.google.common.base.Function; +import com.google.common.cache.Cache; +import com.google.common.collect.ImmutableMap; +import java.util.concurrent.ConcurrentMap; +import java.util.concurrent.ExecutionException; + +@Beta +@GwtCompatible +public interface LoadingCache +extends Cache, +Function { + public V get(K var1) throws ExecutionException; + + public V getUnchecked(K var1); + + public ImmutableMap getAll(Iterable var1) throws ExecutionException; + + @Override + @Deprecated + public V apply(K var1); + + public void refresh(K var1); + + @Override + public ConcurrentMap asMap(); +} diff --git a/src/com/google/common/cache/LocalCache.java b/src/com/google/common/cache/LocalCache.java new file mode 100644 index 0000000..c2a6ce6 --- /dev/null +++ b/src/com/google/common/cache/LocalCache.java @@ -0,0 +1,3939 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.cache; + +import com.google.common.annotations.GwtCompatible; +import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.VisibleForTesting; +import com.google.common.base.Equivalence; +import com.google.common.base.Function; +import com.google.common.base.Preconditions; +import com.google.common.base.Stopwatch; +import com.google.common.base.Ticker; +import com.google.common.cache.AbstractCache; +import com.google.common.cache.Cache; +import com.google.common.cache.CacheBuilder; +import com.google.common.cache.CacheLoader; +import com.google.common.cache.CacheStats; +import com.google.common.cache.ForwardingCache; +import com.google.common.cache.LoadingCache; +import com.google.common.cache.RemovalCause; +import com.google.common.cache.RemovalListener; +import com.google.common.cache.RemovalNotification; +import com.google.common.cache.Weigher; +import com.google.common.collect.AbstractSequentialIterator; +import com.google.common.collect.ImmutableMap; +import com.google.common.collect.ImmutableSet; +import com.google.common.collect.Maps; +import com.google.common.collect.Sets; +import com.google.common.primitives.Ints; +import com.google.common.util.concurrent.ExecutionError; +import com.google.common.util.concurrent.Futures; +import com.google.common.util.concurrent.ListenableFuture; +import com.google.common.util.concurrent.MoreExecutors; +import com.google.common.util.concurrent.SettableFuture; +import com.google.common.util.concurrent.UncheckedExecutionException; +import com.google.common.util.concurrent.Uninterruptibles; +import java.io.IOException; +import java.io.ObjectInputStream; +import java.io.Serializable; +import java.lang.ref.Reference; +import java.lang.ref.ReferenceQueue; +import java.lang.ref.SoftReference; +import java.lang.ref.WeakReference; +import java.util.AbstractCollection; +import java.util.AbstractMap; +import java.util.AbstractQueue; +import java.util.AbstractSet; +import java.util.Collection; +import java.util.Iterator; +import java.util.LinkedHashMap; +import java.util.LinkedHashSet; +import java.util.Map; +import java.util.NoSuchElementException; +import java.util.Queue; +import java.util.Set; +import java.util.concurrent.Callable; +import java.util.concurrent.ConcurrentLinkedQueue; +import java.util.concurrent.ConcurrentMap; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.atomic.AtomicInteger; +import java.util.concurrent.atomic.AtomicReferenceArray; +import java.util.concurrent.locks.ReentrantLock; +import java.util.logging.Level; +import java.util.logging.Logger; +import javax.annotation.Nullable; +import javax.annotation.concurrent.GuardedBy; + +@GwtCompatible(emulated=true) +class LocalCache +extends AbstractMap +implements ConcurrentMap { + static final int MAXIMUM_CAPACITY = 0x40000000; + static final int MAX_SEGMENTS = 65536; + static final int CONTAINS_VALUE_RETRIES = 3; + static final int DRAIN_THRESHOLD = 63; + static final int DRAIN_MAX = 16; + static final Logger logger = Logger.getLogger(LocalCache.class.getName()); + final int segmentMask; + final int segmentShift; + final Segment[] segments; + final int concurrencyLevel; + final Equivalence keyEquivalence; + final Equivalence valueEquivalence; + final Strength keyStrength; + final Strength valueStrength; + final long maxWeight; + final Weigher weigher; + final long expireAfterAccessNanos; + final long expireAfterWriteNanos; + final long refreshNanos; + final Queue> removalNotificationQueue; + final RemovalListener removalListener; + final Ticker ticker; + final EntryFactory entryFactory; + final AbstractCache.StatsCounter globalStatsCounter; + @Nullable + final CacheLoader defaultLoader; + static final ValueReference UNSET = new ValueReference(){ + + @Override + public Object get() { + return null; + } + + @Override + public int getWeight() { + return 0; + } + + @Override + public ReferenceEntry getEntry() { + return null; + } + + @Override + public ValueReference copyFor(ReferenceQueue queue, @Nullable Object value, ReferenceEntry entry) { + return this; + } + + @Override + public boolean isLoading() { + return false; + } + + @Override + public boolean isActive() { + return false; + } + + @Override + public Object waitForValue() { + return null; + } + + @Override + public void notifyNewValue(Object newValue) { + } + }; + static final Queue DISCARDING_QUEUE = new AbstractQueue(){ + + @Override + public boolean offer(Object o) { + return true; + } + + @Override + public Object peek() { + return null; + } + + @Override + public Object poll() { + return null; + } + + @Override + public int size() { + return 0; + } + + @Override + public Iterator iterator() { + return ImmutableSet.of().iterator(); + } + }; + Set keySet; + Collection values; + Set> entrySet; + + LocalCache(CacheBuilder builder, @Nullable CacheLoader loader) { + int segmentSize; + int segmentCount; + this.concurrencyLevel = Math.min(builder.getConcurrencyLevel(), 65536); + this.keyStrength = builder.getKeyStrength(); + this.valueStrength = builder.getValueStrength(); + this.keyEquivalence = builder.getKeyEquivalence(); + this.valueEquivalence = builder.getValueEquivalence(); + this.maxWeight = builder.getMaximumWeight(); + this.weigher = builder.getWeigher(); + this.expireAfterAccessNanos = builder.getExpireAfterAccessNanos(); + this.expireAfterWriteNanos = builder.getExpireAfterWriteNanos(); + this.refreshNanos = builder.getRefreshNanos(); + this.removalListener = builder.getRemovalListener(); + this.removalNotificationQueue = this.removalListener == CacheBuilder.NullListener.INSTANCE ? LocalCache.discardingQueue() : new ConcurrentLinkedQueue(); + this.ticker = builder.getTicker(this.recordsTime()); + this.entryFactory = EntryFactory.getFactory(this.keyStrength, this.usesAccessEntries(), this.usesWriteEntries()); + this.globalStatsCounter = builder.getStatsCounterSupplier().get(); + this.defaultLoader = loader; + int initialCapacity = Math.min(builder.getInitialCapacity(), 0x40000000); + if (this.evictsBySize() && !this.customWeigher()) { + initialCapacity = Math.min(initialCapacity, (int)this.maxWeight); + } + int segmentShift = 0; + for (segmentCount = 1; !(segmentCount >= this.concurrencyLevel || this.evictsBySize() && (long)(segmentCount * 20) > this.maxWeight); segmentCount <<= 1) { + ++segmentShift; + } + this.segmentShift = 32 - segmentShift; + this.segmentMask = segmentCount - 1; + this.segments = this.newSegmentArray(segmentCount); + int segmentCapacity = initialCapacity / segmentCount; + if (segmentCapacity * segmentCount < initialCapacity) { + ++segmentCapacity; + } + for (segmentSize = 1; segmentSize < segmentCapacity; segmentSize <<= 1) { + } + if (this.evictsBySize()) { + long maxSegmentWeight = this.maxWeight / (long)segmentCount + 1L; + long remainder = this.maxWeight % (long)segmentCount; + for (int i = 0; i < this.segments.length; ++i) { + if ((long)i == remainder) { + --maxSegmentWeight; + } + this.segments[i] = this.createSegment(segmentSize, maxSegmentWeight, builder.getStatsCounterSupplier().get()); + } + } else { + for (int i = 0; i < this.segments.length; ++i) { + this.segments[i] = this.createSegment(segmentSize, -1L, builder.getStatsCounterSupplier().get()); + } + } + } + + boolean evictsBySize() { + return this.maxWeight >= 0L; + } + + boolean customWeigher() { + return this.weigher != CacheBuilder.OneWeigher.INSTANCE; + } + + boolean expires() { + return this.expiresAfterWrite() || this.expiresAfterAccess(); + } + + boolean expiresAfterWrite() { + return this.expireAfterWriteNanos > 0L; + } + + boolean expiresAfterAccess() { + return this.expireAfterAccessNanos > 0L; + } + + boolean refreshes() { + return this.refreshNanos > 0L; + } + + boolean usesAccessQueue() { + return this.expiresAfterAccess() || this.evictsBySize(); + } + + boolean usesWriteQueue() { + return this.expiresAfterWrite(); + } + + boolean recordsWrite() { + return this.expiresAfterWrite() || this.refreshes(); + } + + boolean recordsAccess() { + return this.expiresAfterAccess(); + } + + boolean recordsTime() { + return this.recordsWrite() || this.recordsAccess(); + } + + boolean usesWriteEntries() { + return this.usesWriteQueue() || this.recordsWrite(); + } + + boolean usesAccessEntries() { + return this.usesAccessQueue() || this.recordsAccess(); + } + + boolean usesKeyReferences() { + return this.keyStrength != Strength.STRONG; + } + + boolean usesValueReferences() { + return this.valueStrength != Strength.STRONG; + } + + static ValueReference unset() { + return UNSET; + } + + static ReferenceEntry nullEntry() { + return NullEntry.INSTANCE; + } + + static Queue discardingQueue() { + return DISCARDING_QUEUE; + } + + static int rehash(int h) { + h += h << 15 ^ 0xFFFFCD7D; + h ^= h >>> 10; + h += h << 3; + h ^= h >>> 6; + h += (h << 2) + (h << 14); + return h ^ h >>> 16; + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @VisibleForTesting + ReferenceEntry newEntry(K key, int hash, @Nullable ReferenceEntry next) { + Segment segment = this.segmentFor(hash); + segment.lock(); + try { + ReferenceEntry referenceEntry = segment.newEntry(key, hash, next); + return referenceEntry; + } + finally { + segment.unlock(); + } + } + + @VisibleForTesting + ReferenceEntry copyEntry(ReferenceEntry original, ReferenceEntry newNext) { + int hash = original.getHash(); + return this.segmentFor(hash).copyEntry(original, newNext); + } + + @VisibleForTesting + ValueReference newValueReference(ReferenceEntry entry, V value, int weight) { + int hash = entry.getHash(); + return this.valueStrength.referenceValue(this.segmentFor(hash), entry, Preconditions.checkNotNull(value), weight); + } + + int hash(@Nullable Object key) { + int h = this.keyEquivalence.hash(key); + return LocalCache.rehash(h); + } + + void reclaimValue(ValueReference valueReference) { + ReferenceEntry entry = valueReference.getEntry(); + int hash = entry.getHash(); + this.segmentFor(hash).reclaimValue(entry.getKey(), hash, valueReference); + } + + void reclaimKey(ReferenceEntry entry) { + int hash = entry.getHash(); + this.segmentFor(hash).reclaimKey(entry, hash); + } + + @VisibleForTesting + boolean isLive(ReferenceEntry entry, long now) { + return this.segmentFor(entry.getHash()).getLiveValue(entry, now) != null; + } + + Segment segmentFor(int hash) { + return this.segments[hash >>> this.segmentShift & this.segmentMask]; + } + + Segment createSegment(int initialCapacity, long maxSegmentWeight, AbstractCache.StatsCounter statsCounter) { + return new Segment(this, initialCapacity, maxSegmentWeight, statsCounter); + } + + @Nullable + V getLiveValue(ReferenceEntry entry, long now) { + if (entry.getKey() == null) { + return null; + } + V value = entry.getValueReference().get(); + if (value == null) { + return null; + } + if (this.isExpired(entry, now)) { + return null; + } + return value; + } + + boolean isExpired(ReferenceEntry entry, long now) { + Preconditions.checkNotNull(entry); + if (this.expiresAfterAccess() && now - entry.getAccessTime() >= this.expireAfterAccessNanos) { + return true; + } + return this.expiresAfterWrite() && now - entry.getWriteTime() >= this.expireAfterWriteNanos; + } + + static void connectAccessOrder(ReferenceEntry previous, ReferenceEntry next) { + previous.setNextInAccessQueue(next); + next.setPreviousInAccessQueue(previous); + } + + static void nullifyAccessOrder(ReferenceEntry nulled) { + ReferenceEntry nullEntry = LocalCache.nullEntry(); + nulled.setNextInAccessQueue(nullEntry); + nulled.setPreviousInAccessQueue(nullEntry); + } + + static void connectWriteOrder(ReferenceEntry previous, ReferenceEntry next) { + previous.setNextInWriteQueue(next); + next.setPreviousInWriteQueue(previous); + } + + static void nullifyWriteOrder(ReferenceEntry nulled) { + ReferenceEntry nullEntry = LocalCache.nullEntry(); + nulled.setNextInWriteQueue(nullEntry); + nulled.setPreviousInWriteQueue(nullEntry); + } + + void processPendingNotifications() { + RemovalNotification notification; + while ((notification = this.removalNotificationQueue.poll()) != null) { + try { + this.removalListener.onRemoval(notification); + } + catch (Throwable e) { + logger.log(Level.WARNING, "Exception thrown by removal listener", e); + } + } + } + + final Segment[] newSegmentArray(int ssize) { + return new Segment[ssize]; + } + + public void cleanUp() { + for (Segment segment : this.segments) { + segment.cleanUp(); + } + } + + @Override + public boolean isEmpty() { + int i; + long sum = 0L; + Segment[] segments = this.segments; + for (i = 0; i < segments.length; ++i) { + if (segments[i].count != 0) { + return false; + } + sum += (long)segments[i].modCount; + } + if (sum != 0L) { + for (i = 0; i < segments.length; ++i) { + if (segments[i].count != 0) { + return false; + } + sum -= (long)segments[i].modCount; + } + if (sum != 0L) { + return false; + } + } + return true; + } + + long longSize() { + Segment[] segments = this.segments; + long sum = 0L; + for (int i = 0; i < segments.length; ++i) { + sum += (long)segments[i].count; + } + return sum; + } + + @Override + public int size() { + return Ints.saturatedCast(this.longSize()); + } + + @Override + @Nullable + public V get(@Nullable Object key) { + if (key == null) { + return null; + } + int hash = this.hash(key); + return this.segmentFor(hash).get(key, hash); + } + + @Nullable + public V getIfPresent(Object key) { + int hash = this.hash(Preconditions.checkNotNull(key)); + V value = this.segmentFor(hash).get(key, hash); + if (value == null) { + this.globalStatsCounter.recordMisses(1); + } else { + this.globalStatsCounter.recordHits(1); + } + return value; + } + + V get(K key, CacheLoader loader) throws ExecutionException { + int hash = this.hash(Preconditions.checkNotNull(key)); + return this.segmentFor(hash).get((K)key, hash, loader); + } + + V getOrLoad(K key) throws ExecutionException { + return this.get(key, this.defaultLoader); + } + + ImmutableMap getAllPresent(Iterable keys) { + int hits = 0; + int misses = 0; + LinkedHashMap result = Maps.newLinkedHashMap(); + for (Object key : keys) { + V value = this.get(key); + if (value == null) { + ++misses; + continue; + } + Object castKey = key; + result.put(castKey, value); + ++hits; + } + this.globalStatsCounter.recordHits(hits); + this.globalStatsCounter.recordMisses(misses); + return ImmutableMap.copyOf(result); + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + ImmutableMap getAll(Iterable keys) throws ExecutionException { + int hits = 0; + int misses = 0; + LinkedHashMap result = Maps.newLinkedHashMap(); + LinkedHashSet keysToLoad = Sets.newLinkedHashSet(); + for (K key : keys) { + V value = this.get(key); + if (result.containsKey(key)) continue; + result.put(key, value); + if (value == null) { + ++misses; + keysToLoad.add(key); + continue; + } + ++hits; + } + try { + if (!keysToLoad.isEmpty()) { + try { + Map newEntries = this.loadAll(keysToLoad, this.defaultLoader); + for (Object key : keysToLoad) { + V value = newEntries.get(key); + if (value == null) { + String string = String.valueOf(String.valueOf(key)); + throw new CacheLoader.InvalidCacheLoadException(new StringBuilder(37 + string.length()).append("loadAll failed to return a value for ").append(string).toString()); + } + result.put(key, value); + } + } + catch (CacheLoader.UnsupportedLoadingOperationException e) { + for (Object key : keysToLoad) { + --misses; + result.put(key, this.get(key, this.defaultLoader)); + } + } + } + ImmutableMap immutableMap = ImmutableMap.copyOf(result); + return immutableMap; + } + finally { + this.globalStatsCounter.recordHits(hits); + this.globalStatsCounter.recordMisses(misses); + } + } + + @Nullable + Map loadAll(Set keys, CacheLoader loader) throws ExecutionException { + Map result; + Preconditions.checkNotNull(loader); + Preconditions.checkNotNull(keys); + Stopwatch stopwatch = Stopwatch.createStarted(); + boolean success = false; + try { + Map map; + result = map = loader.loadAll(keys); + success = true; + } + catch (CacheLoader.UnsupportedLoadingOperationException e) { + success = true; + throw e; + } + catch (InterruptedException e) { + Thread.currentThread().interrupt(); + throw new ExecutionException(e); + } + catch (RuntimeException e) { + throw new UncheckedExecutionException(e); + } + catch (Exception e) { + throw new ExecutionException(e); + } + catch (Error e) { + throw new ExecutionError(e); + } + finally { + if (!success) { + this.globalStatsCounter.recordLoadException(stopwatch.elapsed(TimeUnit.NANOSECONDS)); + } + } + if (result == null) { + this.globalStatsCounter.recordLoadException(stopwatch.elapsed(TimeUnit.NANOSECONDS)); + String e = String.valueOf(String.valueOf(loader)); + throw new CacheLoader.InvalidCacheLoadException(new StringBuilder(31 + e.length()).append(e).append(" returned null map from loadAll").toString()); + } + stopwatch.stop(); + boolean nullsPresent = false; + for (Map.Entry entry : result.entrySet()) { + K key = entry.getKey(); + V value = entry.getValue(); + if (key == null || value == null) { + nullsPresent = true; + continue; + } + this.put(key, value); + } + if (nullsPresent) { + this.globalStatsCounter.recordLoadException(stopwatch.elapsed(TimeUnit.NANOSECONDS)); + String string = String.valueOf(String.valueOf(loader)); + throw new CacheLoader.InvalidCacheLoadException(new StringBuilder(42 + string.length()).append(string).append(" returned null keys or values from loadAll").toString()); + } + this.globalStatsCounter.recordLoadSuccess(stopwatch.elapsed(TimeUnit.NANOSECONDS)); + return result; + } + + ReferenceEntry getEntry(@Nullable Object key) { + if (key == null) { + return null; + } + int hash = this.hash(key); + return this.segmentFor(hash).getEntry(key, hash); + } + + void refresh(K key) { + int hash = this.hash(Preconditions.checkNotNull(key)); + this.segmentFor(hash).refresh((K)key, hash, this.defaultLoader, false); + } + + @Override + public boolean containsKey(@Nullable Object key) { + if (key == null) { + return false; + } + int hash = this.hash(key); + return this.segmentFor(hash).containsKey(key, hash); + } + + @Override + public boolean containsValue(@Nullable Object value) { + if (value == null) { + return false; + } + long now = this.ticker.read(); + Segment[] segments = this.segments; + long last = -1L; + for (int i = 0; i < 3; ++i) { + long sum = 0L; + for (Segment segment : segments) { + int c = segment.count; + AtomicReferenceArray table = segment.table; + for (int j = 0; j < table.length(); ++j) { + for (ReferenceEntry e = table.get(j); e != null; e = e.getNext()) { + V v = segment.getLiveValue(e, now); + if (v == null || !this.valueEquivalence.equivalent(value, v)) continue; + return true; + } + } + sum += (long)segment.modCount; + } + if (sum == last) break; + last = sum; + } + return false; + } + + @Override + public V put(K key, V value) { + Preconditions.checkNotNull(key); + Preconditions.checkNotNull(value); + int hash = this.hash(key); + return this.segmentFor(hash).put(key, hash, value, false); + } + + @Override + public V putIfAbsent(K key, V value) { + Preconditions.checkNotNull(key); + Preconditions.checkNotNull(value); + int hash = this.hash(key); + return this.segmentFor(hash).put(key, hash, value, true); + } + + @Override + public void putAll(Map m) { + for (Map.Entry e : m.entrySet()) { + this.put(e.getKey(), e.getValue()); + } + } + + @Override + public V remove(@Nullable Object key) { + if (key == null) { + return null; + } + int hash = this.hash(key); + return this.segmentFor(hash).remove(key, hash); + } + + @Override + public boolean remove(@Nullable Object key, @Nullable Object value) { + if (key == null || value == null) { + return false; + } + int hash = this.hash(key); + return this.segmentFor(hash).remove(key, hash, value); + } + + @Override + public boolean replace(K key, @Nullable V oldValue, V newValue) { + Preconditions.checkNotNull(key); + Preconditions.checkNotNull(newValue); + if (oldValue == null) { + return false; + } + int hash = this.hash(key); + return this.segmentFor(hash).replace(key, hash, oldValue, newValue); + } + + @Override + public V replace(K key, V value) { + Preconditions.checkNotNull(key); + Preconditions.checkNotNull(value); + int hash = this.hash(key); + return this.segmentFor(hash).replace(key, hash, value); + } + + @Override + public void clear() { + for (Segment segment : this.segments) { + segment.clear(); + } + } + + void invalidateAll(Iterable keys) { + for (Object key : keys) { + this.remove(key); + } + } + + @Override + public Set keySet() { + KeySet ks = this.keySet; + return ks != null ? ks : (this.keySet = new KeySet(this)); + } + + @Override + public Collection values() { + Values vs = this.values; + return vs != null ? vs : (this.values = new Values(this)); + } + + @Override + @GwtIncompatible(value="Not supported.") + public Set> entrySet() { + EntrySet es = this.entrySet; + return es != null ? es : (this.entrySet = new EntrySet(this)); + } + + static class LocalLoadingCache + extends LocalManualCache + implements LoadingCache { + private static final long serialVersionUID = 1L; + + LocalLoadingCache(CacheBuilder builder, CacheLoader loader) { + super(new LocalCache(builder, Preconditions.checkNotNull(loader))); + } + + @Override + public V get(K key) throws ExecutionException { + return this.localCache.getOrLoad(key); + } + + @Override + public V getUnchecked(K key) { + try { + return this.get(key); + } + catch (ExecutionException e) { + throw new UncheckedExecutionException(e.getCause()); + } + } + + @Override + public ImmutableMap getAll(Iterable keys) throws ExecutionException { + return this.localCache.getAll(keys); + } + + @Override + public void refresh(K key) { + this.localCache.refresh(key); + } + + @Override + public final V apply(K key) { + return this.getUnchecked(key); + } + + @Override + Object writeReplace() { + return new LoadingSerializationProxy(this.localCache); + } + } + + static class LocalManualCache + implements Cache, + Serializable { + final LocalCache localCache; + private static final long serialVersionUID = 1L; + + LocalManualCache(CacheBuilder builder) { + this(new LocalCache(builder, null)); + } + + private LocalManualCache(LocalCache localCache) { + this.localCache = localCache; + } + + @Override + @Nullable + public V getIfPresent(Object key) { + return this.localCache.getIfPresent(key); + } + + @Override + public V get(K key, final Callable valueLoader) throws ExecutionException { + Preconditions.checkNotNull(valueLoader); + return this.localCache.get(key, new CacheLoader(){ + + @Override + public V load(Object key) throws Exception { + return valueLoader.call(); + } + }); + } + + @Override + public ImmutableMap getAllPresent(Iterable keys) { + return this.localCache.getAllPresent(keys); + } + + @Override + public void put(K key, V value) { + this.localCache.put(key, value); + } + + @Override + public void putAll(Map m) { + this.localCache.putAll(m); + } + + @Override + public void invalidate(Object key) { + Preconditions.checkNotNull(key); + this.localCache.remove(key); + } + + @Override + public void invalidateAll(Iterable keys) { + this.localCache.invalidateAll(keys); + } + + @Override + public void invalidateAll() { + this.localCache.clear(); + } + + @Override + public long size() { + return this.localCache.longSize(); + } + + @Override + public ConcurrentMap asMap() { + return this.localCache; + } + + @Override + public CacheStats stats() { + AbstractCache.SimpleStatsCounter aggregator = new AbstractCache.SimpleStatsCounter(); + aggregator.incrementBy(this.localCache.globalStatsCounter); + for (Segment segment : this.localCache.segments) { + aggregator.incrementBy(segment.statsCounter); + } + return aggregator.snapshot(); + } + + @Override + public void cleanUp() { + this.localCache.cleanUp(); + } + + Object writeReplace() { + return new ManualSerializationProxy(this.localCache); + } + } + + static final class LoadingSerializationProxy + extends ManualSerializationProxy + implements LoadingCache, + Serializable { + private static final long serialVersionUID = 1L; + transient LoadingCache autoDelegate; + + LoadingSerializationProxy(LocalCache cache) { + super(cache); + } + + private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException { + in.defaultReadObject(); + CacheBuilder builder = this.recreateCacheBuilder(); + this.autoDelegate = builder.build(this.loader); + } + + @Override + public V get(K key) throws ExecutionException { + return this.autoDelegate.get(key); + } + + @Override + public V getUnchecked(K key) { + return this.autoDelegate.getUnchecked(key); + } + + @Override + public ImmutableMap getAll(Iterable keys) throws ExecutionException { + return this.autoDelegate.getAll(keys); + } + + @Override + public final V apply(K key) { + return this.autoDelegate.apply(key); + } + + @Override + public void refresh(K key) { + this.autoDelegate.refresh(key); + } + + private Object readResolve() { + return this.autoDelegate; + } + } + + static class ManualSerializationProxy + extends ForwardingCache + implements Serializable { + private static final long serialVersionUID = 1L; + final Strength keyStrength; + final Strength valueStrength; + final Equivalence keyEquivalence; + final Equivalence valueEquivalence; + final long expireAfterWriteNanos; + final long expireAfterAccessNanos; + final long maxWeight; + final Weigher weigher; + final int concurrencyLevel; + final RemovalListener removalListener; + final Ticker ticker; + final CacheLoader loader; + transient Cache delegate; + + ManualSerializationProxy(LocalCache cache) { + this(cache.keyStrength, cache.valueStrength, cache.keyEquivalence, cache.valueEquivalence, cache.expireAfterWriteNanos, cache.expireAfterAccessNanos, cache.maxWeight, cache.weigher, cache.concurrencyLevel, cache.removalListener, cache.ticker, cache.defaultLoader); + } + + private ManualSerializationProxy(Strength keyStrength, Strength valueStrength, Equivalence keyEquivalence, Equivalence valueEquivalence, long expireAfterWriteNanos, long expireAfterAccessNanos, long maxWeight, Weigher weigher, int concurrencyLevel, RemovalListener removalListener, Ticker ticker, CacheLoader loader) { + this.keyStrength = keyStrength; + this.valueStrength = valueStrength; + this.keyEquivalence = keyEquivalence; + this.valueEquivalence = valueEquivalence; + this.expireAfterWriteNanos = expireAfterWriteNanos; + this.expireAfterAccessNanos = expireAfterAccessNanos; + this.maxWeight = maxWeight; + this.weigher = weigher; + this.concurrencyLevel = concurrencyLevel; + this.removalListener = removalListener; + this.ticker = ticker == Ticker.systemTicker() || ticker == CacheBuilder.NULL_TICKER ? null : ticker; + this.loader = loader; + } + + CacheBuilder recreateCacheBuilder() { + CacheBuilder builder = CacheBuilder.newBuilder().setKeyStrength(this.keyStrength).setValueStrength(this.valueStrength).keyEquivalence(this.keyEquivalence).valueEquivalence(this.valueEquivalence).concurrencyLevel(this.concurrencyLevel).removalListener(this.removalListener); + builder.strictParsing = false; + if (this.expireAfterWriteNanos > 0L) { + builder.expireAfterWrite(this.expireAfterWriteNanos, TimeUnit.NANOSECONDS); + } + if (this.expireAfterAccessNanos > 0L) { + builder.expireAfterAccess(this.expireAfterAccessNanos, TimeUnit.NANOSECONDS); + } + if (this.weigher != CacheBuilder.OneWeigher.INSTANCE) { + builder.weigher(this.weigher); + if (this.maxWeight != -1L) { + builder.maximumWeight(this.maxWeight); + } + } else if (this.maxWeight != -1L) { + builder.maximumSize(this.maxWeight); + } + if (this.ticker != null) { + builder.ticker(this.ticker); + } + return builder; + } + + private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException { + in.defaultReadObject(); + CacheBuilder builder = this.recreateCacheBuilder(); + this.delegate = builder.build(); + } + + private Object readResolve() { + return this.delegate; + } + + @Override + protected Cache delegate() { + return this.delegate; + } + } + + final class EntrySet + extends AbstractCacheSet> { + EntrySet(ConcurrentMap map) { + super(map); + } + + @Override + public Iterator> iterator() { + return new EntryIterator(); + } + + @Override + public boolean contains(Object o) { + if (!(o instanceof Map.Entry)) { + return false; + } + Map.Entry e = (Map.Entry)o; + Object key = e.getKey(); + if (key == null) { + return false; + } + Object v = LocalCache.this.get(key); + return v != null && LocalCache.this.valueEquivalence.equivalent(e.getValue(), v); + } + + @Override + public boolean remove(Object o) { + if (!(o instanceof Map.Entry)) { + return false; + } + Map.Entry e = (Map.Entry)o; + Object key = e.getKey(); + return key != null && LocalCache.this.remove(key, e.getValue()); + } + } + + final class Values + extends AbstractCollection { + private final ConcurrentMap map; + + Values(ConcurrentMap map) { + this.map = map; + } + + @Override + public int size() { + return this.map.size(); + } + + @Override + public boolean isEmpty() { + return this.map.isEmpty(); + } + + @Override + public void clear() { + this.map.clear(); + } + + @Override + public Iterator iterator() { + return new ValueIterator(); + } + + @Override + public boolean contains(Object o) { + return this.map.containsValue(o); + } + } + + final class KeySet + extends AbstractCacheSet { + KeySet(ConcurrentMap map) { + super(map); + } + + @Override + public Iterator iterator() { + return new KeyIterator(); + } + + @Override + public boolean contains(Object o) { + return this.map.containsKey(o); + } + + @Override + public boolean remove(Object o) { + return this.map.remove(o) != null; + } + } + + abstract class AbstractCacheSet + extends AbstractSet { + final ConcurrentMap map; + + AbstractCacheSet(ConcurrentMap map) { + this.map = map; + } + + @Override + public int size() { + return this.map.size(); + } + + @Override + public boolean isEmpty() { + return this.map.isEmpty(); + } + + @Override + public void clear() { + this.map.clear(); + } + } + + final class EntryIterator + extends HashIterator> { + EntryIterator() { + } + + @Override + public Map.Entry next() { + return this.nextEntry(); + } + } + + final class WriteThroughEntry + implements Map.Entry { + final K key; + V value; + + WriteThroughEntry(K key, V value) { + this.key = key; + this.value = value; + } + + @Override + public K getKey() { + return this.key; + } + + @Override + public V getValue() { + return this.value; + } + + @Override + public boolean equals(@Nullable Object object) { + if (object instanceof Map.Entry) { + Map.Entry that = (Map.Entry)object; + return this.key.equals(that.getKey()) && this.value.equals(that.getValue()); + } + return false; + } + + @Override + public int hashCode() { + return this.key.hashCode() ^ this.value.hashCode(); + } + + @Override + public V setValue(V newValue) { + throw new UnsupportedOperationException(); + } + + public String toString() { + String string = String.valueOf(String.valueOf(this.getKey())); + String string2 = String.valueOf(String.valueOf(this.getValue())); + return new StringBuilder(1 + string.length() + string2.length()).append(string).append("=").append(string2).toString(); + } + } + + final class ValueIterator + extends HashIterator { + ValueIterator() { + } + + @Override + public V next() { + return this.nextEntry().getValue(); + } + } + + final class KeyIterator + extends HashIterator { + KeyIterator() { + } + + @Override + public K next() { + return this.nextEntry().getKey(); + } + } + + abstract class HashIterator + implements Iterator { + int nextSegmentIndex; + int nextTableIndex; + Segment currentSegment; + AtomicReferenceArray> currentTable; + ReferenceEntry nextEntry; + WriteThroughEntry nextExternal; + WriteThroughEntry lastReturned; + + HashIterator() { + this.nextSegmentIndex = LocalCache.this.segments.length - 1; + this.nextTableIndex = -1; + this.advance(); + } + + @Override + public abstract T next(); + + final void advance() { + this.nextExternal = null; + if (this.nextInChain()) { + return; + } + if (this.nextInTable()) { + return; + } + while (this.nextSegmentIndex >= 0) { + this.currentSegment = LocalCache.this.segments[this.nextSegmentIndex--]; + if (this.currentSegment.count == 0) continue; + this.currentTable = this.currentSegment.table; + this.nextTableIndex = this.currentTable.length() - 1; + if (!this.nextInTable()) continue; + return; + } + } + + boolean nextInChain() { + if (this.nextEntry != null) { + this.nextEntry = this.nextEntry.getNext(); + while (this.nextEntry != null) { + if (this.advanceTo(this.nextEntry)) { + return true; + } + this.nextEntry = this.nextEntry.getNext(); + } + } + return false; + } + + boolean nextInTable() { + while (this.nextTableIndex >= 0) { + if ((this.nextEntry = this.currentTable.get(this.nextTableIndex--)) == null || !this.advanceTo(this.nextEntry) && !this.nextInChain()) continue; + return true; + } + return false; + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + boolean advanceTo(ReferenceEntry entry) { + try { + long now = LocalCache.this.ticker.read(); + Object key = entry.getKey(); + Object value = LocalCache.this.getLiveValue(entry, now); + if (value != null) { + this.nextExternal = new WriteThroughEntry(key, value); + boolean bl = true; + return bl; + } + boolean bl = false; + return bl; + } + finally { + this.currentSegment.postReadCleanup(); + } + } + + @Override + public boolean hasNext() { + return this.nextExternal != null; + } + + WriteThroughEntry nextEntry() { + if (this.nextExternal == null) { + throw new NoSuchElementException(); + } + this.lastReturned = this.nextExternal; + this.advance(); + return this.lastReturned; + } + + @Override + public void remove() { + Preconditions.checkState(this.lastReturned != null); + LocalCache.this.remove(this.lastReturned.getKey()); + this.lastReturned = null; + } + } + + static final class AccessQueue + extends AbstractQueue> { + final ReferenceEntry head = new AbstractReferenceEntry(){ + ReferenceEntry nextAccess = this; + ReferenceEntry previousAccess = this; + + @Override + public long getAccessTime() { + return Long.MAX_VALUE; + } + + @Override + public void setAccessTime(long time) { + } + + @Override + public ReferenceEntry getNextInAccessQueue() { + return this.nextAccess; + } + + @Override + public void setNextInAccessQueue(ReferenceEntry next) { + this.nextAccess = next; + } + + @Override + public ReferenceEntry getPreviousInAccessQueue() { + return this.previousAccess; + } + + @Override + public void setPreviousInAccessQueue(ReferenceEntry previous) { + this.previousAccess = previous; + } + }; + + AccessQueue() { + } + + @Override + public boolean offer(ReferenceEntry entry) { + LocalCache.connectAccessOrder(entry.getPreviousInAccessQueue(), entry.getNextInAccessQueue()); + LocalCache.connectAccessOrder(this.head.getPreviousInAccessQueue(), entry); + LocalCache.connectAccessOrder(entry, this.head); + return true; + } + + @Override + public ReferenceEntry peek() { + ReferenceEntry next = this.head.getNextInAccessQueue(); + return next == this.head ? null : next; + } + + @Override + public ReferenceEntry poll() { + ReferenceEntry next = this.head.getNextInAccessQueue(); + if (next == this.head) { + return null; + } + this.remove(next); + return next; + } + + @Override + public boolean remove(Object o) { + ReferenceEntry e = (ReferenceEntry)o; + ReferenceEntry previous = e.getPreviousInAccessQueue(); + ReferenceEntry next = e.getNextInAccessQueue(); + LocalCache.connectAccessOrder(previous, next); + LocalCache.nullifyAccessOrder(e); + return next != NullEntry.INSTANCE; + } + + @Override + public boolean contains(Object o) { + ReferenceEntry e = (ReferenceEntry)o; + return e.getNextInAccessQueue() != NullEntry.INSTANCE; + } + + @Override + public boolean isEmpty() { + return this.head.getNextInAccessQueue() == this.head; + } + + @Override + public int size() { + int size = 0; + for (ReferenceEntry e = this.head.getNextInAccessQueue(); e != this.head; e = e.getNextInAccessQueue()) { + ++size; + } + return size; + } + + @Override + public void clear() { + ReferenceEntry e = this.head.getNextInAccessQueue(); + while (e != this.head) { + ReferenceEntry next = e.getNextInAccessQueue(); + LocalCache.nullifyAccessOrder(e); + e = next; + } + this.head.setNextInAccessQueue(this.head); + this.head.setPreviousInAccessQueue(this.head); + } + + @Override + public Iterator> iterator() { + return new AbstractSequentialIterator>((ReferenceEntry)this.peek()){ + + @Override + protected ReferenceEntry computeNext(ReferenceEntry previous) { + ReferenceEntry next = previous.getNextInAccessQueue(); + return next == AccessQueue.this.head ? null : next; + } + }; + } + } + + static final class WriteQueue + extends AbstractQueue> { + final ReferenceEntry head = new AbstractReferenceEntry(){ + ReferenceEntry nextWrite = this; + ReferenceEntry previousWrite = this; + + @Override + public long getWriteTime() { + return Long.MAX_VALUE; + } + + @Override + public void setWriteTime(long time) { + } + + @Override + public ReferenceEntry getNextInWriteQueue() { + return this.nextWrite; + } + + @Override + public void setNextInWriteQueue(ReferenceEntry next) { + this.nextWrite = next; + } + + @Override + public ReferenceEntry getPreviousInWriteQueue() { + return this.previousWrite; + } + + @Override + public void setPreviousInWriteQueue(ReferenceEntry previous) { + this.previousWrite = previous; + } + }; + + WriteQueue() { + } + + @Override + public boolean offer(ReferenceEntry entry) { + LocalCache.connectWriteOrder(entry.getPreviousInWriteQueue(), entry.getNextInWriteQueue()); + LocalCache.connectWriteOrder(this.head.getPreviousInWriteQueue(), entry); + LocalCache.connectWriteOrder(entry, this.head); + return true; + } + + @Override + public ReferenceEntry peek() { + ReferenceEntry next = this.head.getNextInWriteQueue(); + return next == this.head ? null : next; + } + + @Override + public ReferenceEntry poll() { + ReferenceEntry next = this.head.getNextInWriteQueue(); + if (next == this.head) { + return null; + } + this.remove(next); + return next; + } + + @Override + public boolean remove(Object o) { + ReferenceEntry e = (ReferenceEntry)o; + ReferenceEntry previous = e.getPreviousInWriteQueue(); + ReferenceEntry next = e.getNextInWriteQueue(); + LocalCache.connectWriteOrder(previous, next); + LocalCache.nullifyWriteOrder(e); + return next != NullEntry.INSTANCE; + } + + @Override + public boolean contains(Object o) { + ReferenceEntry e = (ReferenceEntry)o; + return e.getNextInWriteQueue() != NullEntry.INSTANCE; + } + + @Override + public boolean isEmpty() { + return this.head.getNextInWriteQueue() == this.head; + } + + @Override + public int size() { + int size = 0; + for (ReferenceEntry e = this.head.getNextInWriteQueue(); e != this.head; e = e.getNextInWriteQueue()) { + ++size; + } + return size; + } + + @Override + public void clear() { + ReferenceEntry e = this.head.getNextInWriteQueue(); + while (e != this.head) { + ReferenceEntry next = e.getNextInWriteQueue(); + LocalCache.nullifyWriteOrder(e); + e = next; + } + this.head.setNextInWriteQueue(this.head); + this.head.setPreviousInWriteQueue(this.head); + } + + @Override + public Iterator> iterator() { + return new AbstractSequentialIterator>((ReferenceEntry)this.peek()){ + + @Override + protected ReferenceEntry computeNext(ReferenceEntry previous) { + ReferenceEntry next = previous.getNextInWriteQueue(); + return next == WriteQueue.this.head ? null : next; + } + }; + } + } + + static class LoadingValueReference + implements ValueReference { + volatile ValueReference oldValue; + final SettableFuture futureValue = SettableFuture.create(); + final Stopwatch stopwatch = Stopwatch.createUnstarted(); + + public LoadingValueReference() { + this(LocalCache.unset()); + } + + public LoadingValueReference(ValueReference oldValue) { + this.oldValue = oldValue; + } + + @Override + public boolean isLoading() { + return true; + } + + @Override + public boolean isActive() { + return this.oldValue.isActive(); + } + + @Override + public int getWeight() { + return this.oldValue.getWeight(); + } + + public boolean set(@Nullable V newValue) { + return this.futureValue.set(newValue); + } + + public boolean setException(Throwable t) { + return this.futureValue.setException(t); + } + + private ListenableFuture fullyFailedFuture(Throwable t) { + return Futures.immediateFailedFuture(t); + } + + @Override + public void notifyNewValue(@Nullable V newValue) { + if (newValue != null) { + this.set(newValue); + } else { + this.oldValue = LocalCache.unset(); + } + } + + public ListenableFuture loadFuture(K key, CacheLoader loader) { + this.stopwatch.start(); + V previousValue = this.oldValue.get(); + try { + if (previousValue == null) { + V newValue = loader.load(key); + return this.set(newValue) ? this.futureValue : Futures.immediateFuture(newValue); + } + ListenableFuture newValue = loader.reload(key, previousValue); + if (newValue == null) { + return Futures.immediateFuture(null); + } + return Futures.transform(newValue, new Function(){ + + @Override + public V apply(V newValue) { + LoadingValueReference.this.set(newValue); + return newValue; + } + }); + } + catch (Throwable t) { + if (t instanceof InterruptedException) { + Thread.currentThread().interrupt(); + } + return this.setException(t) ? this.futureValue : this.fullyFailedFuture(t); + } + } + + public long elapsedNanos() { + return this.stopwatch.elapsed(TimeUnit.NANOSECONDS); + } + + @Override + public V waitForValue() throws ExecutionException { + return Uninterruptibles.getUninterruptibly(this.futureValue); + } + + @Override + public V get() { + return this.oldValue.get(); + } + + public ValueReference getOldValue() { + return this.oldValue; + } + + @Override + public ReferenceEntry getEntry() { + return null; + } + + @Override + public ValueReference copyFor(ReferenceQueue queue, @Nullable V value, ReferenceEntry entry) { + return this; + } + } + + static class Segment + extends ReentrantLock { + final LocalCache map; + volatile int count; + @GuardedBy(value="this") + long totalWeight; + int modCount; + int threshold; + volatile AtomicReferenceArray> table; + final long maxSegmentWeight; + final ReferenceQueue keyReferenceQueue; + final ReferenceQueue valueReferenceQueue; + final Queue> recencyQueue; + final AtomicInteger readCount = new AtomicInteger(); + @GuardedBy(value="this") + final Queue> writeQueue; + @GuardedBy(value="this") + final Queue> accessQueue; + final AbstractCache.StatsCounter statsCounter; + + Segment(LocalCache map, int initialCapacity, long maxSegmentWeight, AbstractCache.StatsCounter statsCounter) { + this.map = map; + this.maxSegmentWeight = maxSegmentWeight; + this.statsCounter = Preconditions.checkNotNull(statsCounter); + this.initTable(this.newEntryArray(initialCapacity)); + this.keyReferenceQueue = map.usesKeyReferences() ? new ReferenceQueue() : null; + this.valueReferenceQueue = map.usesValueReferences() ? new ReferenceQueue() : null; + this.recencyQueue = map.usesAccessQueue() ? new ConcurrentLinkedQueue() : LocalCache.discardingQueue(); + this.writeQueue = map.usesWriteQueue() ? new WriteQueue() : LocalCache.discardingQueue(); + this.accessQueue = map.usesAccessQueue() ? new AccessQueue() : LocalCache.discardingQueue(); + } + + AtomicReferenceArray> newEntryArray(int size) { + return new AtomicReferenceArray>(size); + } + + void initTable(AtomicReferenceArray> newTable) { + this.threshold = newTable.length() * 3 / 4; + if (!this.map.customWeigher() && (long)this.threshold == this.maxSegmentWeight) { + ++this.threshold; + } + this.table = newTable; + } + + @GuardedBy(value="this") + ReferenceEntry newEntry(K key, int hash, @Nullable ReferenceEntry next) { + return this.map.entryFactory.newEntry(this, Preconditions.checkNotNull(key), hash, next); + } + + @GuardedBy(value="this") + ReferenceEntry copyEntry(ReferenceEntry original, ReferenceEntry newNext) { + if (original.getKey() == null) { + return null; + } + ValueReference valueReference = original.getValueReference(); + V value = valueReference.get(); + if (value == null && valueReference.isActive()) { + return null; + } + ReferenceEntry newEntry = this.map.entryFactory.copyEntry(this, original, newNext); + newEntry.setValueReference(valueReference.copyFor(this.valueReferenceQueue, value, newEntry)); + return newEntry; + } + + @GuardedBy(value="this") + void setValue(ReferenceEntry entry, K key, V value, long now) { + ValueReference previous = entry.getValueReference(); + int weight = this.map.weigher.weigh(key, value); + Preconditions.checkState(weight >= 0, "Weights must be non-negative"); + ValueReference valueReference = this.map.valueStrength.referenceValue(this, entry, value, weight); + entry.setValueReference(valueReference); + this.recordWrite(entry, weight, now); + previous.notifyNewValue(value); + } + + V get(K key, int hash, CacheLoader loader) throws ExecutionException { + Preconditions.checkNotNull(key); + Preconditions.checkNotNull(loader); + try { + ReferenceEntry e; + if (this.count != 0 && (e = this.getEntry(key, hash)) != null) { + long now = this.map.ticker.read(); + V value = this.getLiveValue(e, now); + if (value != null) { + this.recordRead(e, now); + this.statsCounter.recordHits(1); + V v = this.scheduleRefresh(e, key, hash, value, now, loader); + return v; + } + ValueReference valueReference = e.getValueReference(); + if (valueReference.isLoading()) { + V v = this.waitForLoadingValue(e, key, valueReference); + return v; + } + } + e = this.lockedGetOrLoad(key, hash, loader); + return (V)e; + } + catch (ExecutionException ee) { + Throwable cause = ee.getCause(); + if (cause instanceof Error) { + throw new ExecutionError((Error)cause); + } + if (cause instanceof RuntimeException) { + throw new UncheckedExecutionException(cause); + } + throw ee; + } + finally { + this.postReadCleanup(); + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + V lockedGetOrLoad(K key, int hash, CacheLoader loader) throws ExecutionException { + ReferenceEntry e; + ValueReference valueReference = null; + LoadingValueReference loadingValueReference = null; + boolean createNewEntry = true; + this.lock(); + try { + ReferenceEntry first; + long now = this.map.ticker.read(); + this.preWriteCleanup(now); + int newCount = this.count - 1; + AtomicReferenceArray> table = this.table; + int index = hash & table.length() - 1; + for (e = first = table.get(index); e != null; e = e.getNext()) { + K entryKey = e.getKey(); + if (e.getHash() != hash || entryKey == null || !this.map.keyEquivalence.equivalent(key, entryKey)) continue; + valueReference = e.getValueReference(); + if (valueReference.isLoading()) { + createNewEntry = false; + break; + } + V value = valueReference.get(); + if (value == null) { + this.enqueueNotification(entryKey, hash, valueReference, RemovalCause.COLLECTED); + } else if (this.map.isExpired(e, now)) { + this.enqueueNotification(entryKey, hash, valueReference, RemovalCause.EXPIRED); + } else { + this.recordLockedRead(e, now); + this.statsCounter.recordHits(1); + V v = value; + return v; + } + this.writeQueue.remove(e); + this.accessQueue.remove(e); + this.count = newCount; + break; + } + if (createNewEntry) { + loadingValueReference = new LoadingValueReference(); + if (e == null) { + e = this.newEntry(key, hash, first); + e.setValueReference(loadingValueReference); + table.set(index, e); + } else { + e.setValueReference(loadingValueReference); + } + } + } + finally { + this.unlock(); + this.postWriteCleanup(); + } + if (createNewEntry) { + try { + ReferenceEntry referenceEntry = e; + synchronized (referenceEntry) { + Object v = this.loadSync(key, hash, loadingValueReference, loader); + return v; + } + } + finally { + this.statsCounter.recordMisses(1); + } + } + return this.waitForLoadingValue(e, key, valueReference); + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + V waitForLoadingValue(ReferenceEntry e, K key, ValueReference valueReference) throws ExecutionException { + if (!valueReference.isLoading()) { + throw new AssertionError(); + } + Preconditions.checkState(!Thread.holdsLock(e), "Recursive load of: %s", key); + try { + V value = valueReference.waitForValue(); + if (value == null) { + String string = String.valueOf(String.valueOf(key)); + throw new CacheLoader.InvalidCacheLoadException(new StringBuilder(35 + string.length()).append("CacheLoader returned null for key ").append(string).append(".").toString()); + } + long now = this.map.ticker.read(); + this.recordRead(e, now); + V v = value; + return v; + } + finally { + this.statsCounter.recordMisses(1); + } + } + + V loadSync(K key, int hash, LoadingValueReference loadingValueReference, CacheLoader loader) throws ExecutionException { + ListenableFuture loadingFuture = loadingValueReference.loadFuture((K)key, loader); + return this.getAndRecordStats(key, hash, loadingValueReference, loadingFuture); + } + + ListenableFuture loadAsync(final K key, final int hash, final LoadingValueReference loadingValueReference, CacheLoader loader) { + final ListenableFuture loadingFuture = loadingValueReference.loadFuture((K)key, loader); + loadingFuture.addListener(new Runnable(){ + + @Override + public void run() { + try { + Object newValue = Segment.this.getAndRecordStats(key, hash, loadingValueReference, loadingFuture); + } + catch (Throwable t) { + logger.log(Level.WARNING, "Exception thrown during refresh", t); + loadingValueReference.setException(t); + } + } + }, MoreExecutors.directExecutor()); + return loadingFuture; + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + V getAndRecordStats(K key, int hash, LoadingValueReference loadingValueReference, ListenableFuture newValue) throws ExecutionException { + V value = null; + try { + value = Uninterruptibles.getUninterruptibly(newValue); + if (value == null) { + String string = String.valueOf(String.valueOf(key)); + throw new CacheLoader.InvalidCacheLoadException(new StringBuilder(35 + string.length()).append("CacheLoader returned null for key ").append(string).append(".").toString()); + } + this.statsCounter.recordLoadSuccess(loadingValueReference.elapsedNanos()); + this.storeLoadedValue(key, hash, loadingValueReference, value); + V v = value; + return v; + } + finally { + if (value == null) { + this.statsCounter.recordLoadException(loadingValueReference.elapsedNanos()); + this.removeLoadingValue(key, hash, loadingValueReference); + } + } + } + + V scheduleRefresh(ReferenceEntry entry, K key, int hash, V oldValue, long now, CacheLoader loader) { + V newValue; + if (this.map.refreshes() && now - entry.getWriteTime() > this.map.refreshNanos && !entry.getValueReference().isLoading() && (newValue = this.refresh(key, hash, loader, true)) != null) { + return newValue; + } + return oldValue; + } + + @Nullable + V refresh(K key, int hash, CacheLoader loader, boolean checkTime) { + LoadingValueReference loadingValueReference = this.insertLoadingValueReference(key, hash, checkTime); + if (loadingValueReference == null) { + return null; + } + ListenableFuture result = this.loadAsync(key, hash, loadingValueReference, loader); + if (result.isDone()) { + try { + return Uninterruptibles.getUninterruptibly(result); + } + catch (Throwable t) { + // empty catch block + } + } + return null; + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Nullable + LoadingValueReference insertLoadingValueReference(K key, int hash, boolean checkTime) { + ReferenceEntry e = null; + this.lock(); + try { + ReferenceEntry first; + long now = this.map.ticker.read(); + this.preWriteCleanup(now); + AtomicReferenceArray> table = this.table; + int index = hash & table.length() - 1; + for (e = first = table.get(index); e != null; e = e.getNext()) { + K entryKey = e.getKey(); + if (e.getHash() != hash || entryKey == null || !this.map.keyEquivalence.equivalent(key, entryKey)) continue; + ValueReference valueReference = e.getValueReference(); + if (valueReference.isLoading() || checkTime && now - e.getWriteTime() < this.map.refreshNanos) { + LoadingValueReference loadingValueReference = null; + return loadingValueReference; + } + ++this.modCount; + LoadingValueReference loadingValueReference = new LoadingValueReference(valueReference); + e.setValueReference(loadingValueReference); + LoadingValueReference loadingValueReference2 = loadingValueReference; + return loadingValueReference2; + } + ++this.modCount; + LoadingValueReference loadingValueReference = new LoadingValueReference(); + e = this.newEntry(key, hash, first); + e.setValueReference(loadingValueReference); + table.set(index, e); + LoadingValueReference loadingValueReference3 = loadingValueReference; + return loadingValueReference3; + } + finally { + this.unlock(); + this.postWriteCleanup(); + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + void tryDrainReferenceQueues() { + if (this.tryLock()) { + try { + this.drainReferenceQueues(); + } + finally { + this.unlock(); + } + } + } + + @GuardedBy(value="this") + void drainReferenceQueues() { + if (this.map.usesKeyReferences()) { + this.drainKeyReferenceQueue(); + } + if (this.map.usesValueReferences()) { + this.drainValueReferenceQueue(); + } + } + + @GuardedBy(value="this") + void drainKeyReferenceQueue() { + Reference ref; + int i = 0; + while ((ref = this.keyReferenceQueue.poll()) != null) { + ReferenceEntry entry = (ReferenceEntry)((Object)ref); + this.map.reclaimKey(entry); + if (++i != 16) continue; + break; + } + } + + @GuardedBy(value="this") + void drainValueReferenceQueue() { + Reference ref; + int i = 0; + while ((ref = this.valueReferenceQueue.poll()) != null) { + ValueReference valueReference = (ValueReference)((Object)ref); + this.map.reclaimValue(valueReference); + if (++i != 16) continue; + break; + } + } + + void clearReferenceQueues() { + if (this.map.usesKeyReferences()) { + this.clearKeyReferenceQueue(); + } + if (this.map.usesValueReferences()) { + this.clearValueReferenceQueue(); + } + } + + void clearKeyReferenceQueue() { + while (this.keyReferenceQueue.poll() != null) { + } + } + + void clearValueReferenceQueue() { + while (this.valueReferenceQueue.poll() != null) { + } + } + + void recordRead(ReferenceEntry entry, long now) { + if (this.map.recordsAccess()) { + entry.setAccessTime(now); + } + this.recencyQueue.add(entry); + } + + @GuardedBy(value="this") + void recordLockedRead(ReferenceEntry entry, long now) { + if (this.map.recordsAccess()) { + entry.setAccessTime(now); + } + this.accessQueue.add(entry); + } + + @GuardedBy(value="this") + void recordWrite(ReferenceEntry entry, int weight, long now) { + this.drainRecencyQueue(); + this.totalWeight += (long)weight; + if (this.map.recordsAccess()) { + entry.setAccessTime(now); + } + if (this.map.recordsWrite()) { + entry.setWriteTime(now); + } + this.accessQueue.add(entry); + this.writeQueue.add(entry); + } + + @GuardedBy(value="this") + void drainRecencyQueue() { + ReferenceEntry e; + while ((e = this.recencyQueue.poll()) != null) { + if (!this.accessQueue.contains(e)) continue; + this.accessQueue.add(e); + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + void tryExpireEntries(long now) { + if (this.tryLock()) { + try { + this.expireEntries(now); + } + finally { + this.unlock(); + } + } + } + + @GuardedBy(value="this") + void expireEntries(long now) { + ReferenceEntry e; + this.drainRecencyQueue(); + while ((e = this.writeQueue.peek()) != null && this.map.isExpired(e, now)) { + if (!this.removeEntry(e, e.getHash(), RemovalCause.EXPIRED)) { + throw new AssertionError(); + } + } + while ((e = this.accessQueue.peek()) != null && this.map.isExpired(e, now)) { + if (!this.removeEntry(e, e.getHash(), RemovalCause.EXPIRED)) { + throw new AssertionError(); + } + } + } + + @GuardedBy(value="this") + void enqueueNotification(ReferenceEntry entry, RemovalCause cause) { + this.enqueueNotification(entry.getKey(), entry.getHash(), entry.getValueReference(), cause); + } + + @GuardedBy(value="this") + void enqueueNotification(@Nullable K key, int hash, ValueReference valueReference, RemovalCause cause) { + this.totalWeight -= (long)valueReference.getWeight(); + if (cause.wasEvicted()) { + this.statsCounter.recordEviction(); + } + if (this.map.removalNotificationQueue != DISCARDING_QUEUE) { + V value = valueReference.get(); + RemovalNotification notification = new RemovalNotification(key, value, cause); + this.map.removalNotificationQueue.offer(notification); + } + } + + @GuardedBy(value="this") + void evictEntries() { + if (!this.map.evictsBySize()) { + return; + } + this.drainRecencyQueue(); + while (this.totalWeight > this.maxSegmentWeight) { + ReferenceEntry e = this.getNextEvictable(); + if (!this.removeEntry(e, e.getHash(), RemovalCause.SIZE)) { + throw new AssertionError(); + } + } + } + + @GuardedBy(value="this") + ReferenceEntry getNextEvictable() { + for (ReferenceEntry referenceEntry : this.accessQueue) { + int weight = referenceEntry.getValueReference().getWeight(); + if (weight <= 0) continue; + return referenceEntry; + } + throw new AssertionError(); + } + + ReferenceEntry getFirst(int hash) { + AtomicReferenceArray> table = this.table; + return table.get(hash & table.length() - 1); + } + + @Nullable + ReferenceEntry getEntry(Object key, int hash) { + for (ReferenceEntry e = this.getFirst(hash); e != null; e = e.getNext()) { + if (e.getHash() != hash) continue; + K entryKey = e.getKey(); + if (entryKey == null) { + this.tryDrainReferenceQueues(); + continue; + } + if (!this.map.keyEquivalence.equivalent(key, entryKey)) continue; + return e; + } + return null; + } + + @Nullable + ReferenceEntry getLiveEntry(Object key, int hash, long now) { + ReferenceEntry e = this.getEntry(key, hash); + if (e == null) { + return null; + } + if (this.map.isExpired(e, now)) { + this.tryExpireEntries(now); + return null; + } + return e; + } + + V getLiveValue(ReferenceEntry entry, long now) { + if (entry.getKey() == null) { + this.tryDrainReferenceQueues(); + return null; + } + V value = entry.getValueReference().get(); + if (value == null) { + this.tryDrainReferenceQueues(); + return null; + } + if (this.map.isExpired(entry, now)) { + this.tryExpireEntries(now); + return null; + } + return value; + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Nullable + V get(Object key, int hash) { + try { + if (this.count != 0) { + long now = this.map.ticker.read(); + ReferenceEntry e = this.getLiveEntry(key, hash, now); + if (e == null) { + V v = null; + return v; + } + V value = e.getValueReference().get(); + if (value != null) { + this.recordRead(e, now); + V v = this.scheduleRefresh(e, e.getKey(), hash, value, now, this.map.defaultLoader); + return v; + } + this.tryDrainReferenceQueues(); + } + V v = null; + return v; + } + finally { + this.postReadCleanup(); + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + boolean containsKey(Object key, int hash) { + try { + if (this.count != 0) { + long now = this.map.ticker.read(); + ReferenceEntry e = this.getLiveEntry(key, hash, now); + if (e == null) { + boolean bl = false; + return bl; + } + boolean bl = e.getValueReference().get() != null; + return bl; + } + boolean bl = false; + return bl; + } + finally { + this.postReadCleanup(); + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @VisibleForTesting + boolean containsValue(Object value) { + try { + if (this.count != 0) { + long now = this.map.ticker.read(); + AtomicReferenceArray> table = this.table; + int length = table.length(); + for (int i = 0; i < length; ++i) { + for (ReferenceEntry e = table.get(i); e != null; e = e.getNext()) { + V entryValue = this.getLiveValue(e, now); + if (entryValue == null || !this.map.valueEquivalence.equivalent(value, entryValue)) continue; + boolean bl = true; + return bl; + } + } + } + boolean bl = false; + return bl; + } + finally { + this.postReadCleanup(); + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Nullable + V put(K key, int hash, V value, boolean onlyIfAbsent) { + this.lock(); + try { + ReferenceEntry first; + long now = this.map.ticker.read(); + this.preWriteCleanup(now); + int newCount = this.count + 1; + if (newCount > this.threshold) { + this.expand(); + newCount = this.count + 1; + } + AtomicReferenceArray> table = this.table; + int index = hash & table.length() - 1; + for (ReferenceEntry e = first = table.get(index); e != null; e = e.getNext()) { + K entryKey = e.getKey(); + if (e.getHash() != hash || entryKey == null || !this.map.keyEquivalence.equivalent(key, entryKey)) continue; + ValueReference valueReference = e.getValueReference(); + V entryValue = valueReference.get(); + if (entryValue == null) { + ++this.modCount; + if (valueReference.isActive()) { + this.enqueueNotification(key, hash, valueReference, RemovalCause.COLLECTED); + this.setValue(e, key, value, now); + newCount = this.count; + } else { + this.setValue(e, key, value, now); + newCount = this.count + 1; + } + this.count = newCount; + this.evictEntries(); + V v = null; + return v; + } + if (onlyIfAbsent) { + this.recordLockedRead(e, now); + V v = entryValue; + return v; + } + ++this.modCount; + this.enqueueNotification(key, hash, valueReference, RemovalCause.REPLACED); + this.setValue(e, key, value, now); + this.evictEntries(); + V v = entryValue; + return v; + } + ++this.modCount; + ReferenceEntry newEntry = this.newEntry(key, hash, first); + this.setValue(newEntry, key, value, now); + table.set(index, newEntry); + this.count = newCount = this.count + 1; + this.evictEntries(); + V v = null; + return v; + } + finally { + this.unlock(); + this.postWriteCleanup(); + } + } + + @GuardedBy(value="this") + void expand() { + AtomicReferenceArray> oldTable = this.table; + int oldCapacity = oldTable.length(); + if (oldCapacity >= 0x40000000) { + return; + } + int newCount = this.count; + AtomicReferenceArray> newTable = this.newEntryArray(oldCapacity << 1); + this.threshold = newTable.length() * 3 / 4; + int newMask = newTable.length() - 1; + for (int oldIndex = 0; oldIndex < oldCapacity; ++oldIndex) { + int newIndex; + ReferenceEntry e; + ReferenceEntry head = oldTable.get(oldIndex); + if (head == null) continue; + ReferenceEntry next = head.getNext(); + int headIndex = head.getHash() & newMask; + if (next == null) { + newTable.set(headIndex, head); + continue; + } + ReferenceEntry tail = head; + int tailIndex = headIndex; + for (e = next; e != null; e = e.getNext()) { + newIndex = e.getHash() & newMask; + if (newIndex == tailIndex) continue; + tailIndex = newIndex; + tail = e; + } + newTable.set(tailIndex, tail); + for (e = head; e != tail; e = e.getNext()) { + newIndex = e.getHash() & newMask; + ReferenceEntry newNext = newTable.get(newIndex); + ReferenceEntry newFirst = this.copyEntry(e, newNext); + if (newFirst != null) { + newTable.set(newIndex, newFirst); + continue; + } + this.removeCollectedEntry(e); + --newCount; + } + } + this.table = newTable; + this.count = newCount; + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + boolean replace(K key, int hash, V oldValue, V newValue) { + this.lock(); + try { + ReferenceEntry first; + long now = this.map.ticker.read(); + this.preWriteCleanup(now); + AtomicReferenceArray> table = this.table; + int index = hash & table.length() - 1; + for (ReferenceEntry e = first = table.get(index); e != null; e = e.getNext()) { + K entryKey = e.getKey(); + if (e.getHash() != hash || entryKey == null || !this.map.keyEquivalence.equivalent(key, entryKey)) continue; + ValueReference valueReference = e.getValueReference(); + V entryValue = valueReference.get(); + if (entryValue == null) { + if (valueReference.isActive()) { + int newCount = this.count - 1; + ++this.modCount; + ReferenceEntry newFirst = this.removeValueFromChain(first, e, entryKey, hash, valueReference, RemovalCause.COLLECTED); + newCount = this.count - 1; + table.set(index, newFirst); + this.count = newCount; + } + boolean bl = false; + return bl; + } + if (this.map.valueEquivalence.equivalent(oldValue, entryValue)) { + ++this.modCount; + this.enqueueNotification(key, hash, valueReference, RemovalCause.REPLACED); + this.setValue(e, key, newValue, now); + this.evictEntries(); + boolean bl = true; + return bl; + } + this.recordLockedRead(e, now); + boolean bl = false; + return bl; + } + boolean bl = false; + return bl; + } + finally { + this.unlock(); + this.postWriteCleanup(); + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Nullable + V replace(K key, int hash, V newValue) { + this.lock(); + try { + ReferenceEntry first; + long now = this.map.ticker.read(); + this.preWriteCleanup(now); + AtomicReferenceArray> table = this.table; + int index = hash & table.length() - 1; + for (ReferenceEntry e = first = table.get(index); e != null; e = e.getNext()) { + K entryKey = e.getKey(); + if (e.getHash() != hash || entryKey == null || !this.map.keyEquivalence.equivalent(key, entryKey)) continue; + ValueReference valueReference = e.getValueReference(); + V entryValue = valueReference.get(); + if (entryValue == null) { + if (valueReference.isActive()) { + int newCount = this.count - 1; + ++this.modCount; + ReferenceEntry newFirst = this.removeValueFromChain(first, e, entryKey, hash, valueReference, RemovalCause.COLLECTED); + newCount = this.count - 1; + table.set(index, newFirst); + this.count = newCount; + } + V v = null; + return v; + } + ++this.modCount; + this.enqueueNotification(key, hash, valueReference, RemovalCause.REPLACED); + this.setValue(e, key, newValue, now); + this.evictEntries(); + V v = entryValue; + return v; + } + V v = null; + return v; + } + finally { + this.unlock(); + this.postWriteCleanup(); + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Nullable + V remove(Object key, int hash) { + this.lock(); + try { + ReferenceEntry first; + long now = this.map.ticker.read(); + this.preWriteCleanup(now); + int newCount = this.count - 1; + AtomicReferenceArray> table = this.table; + int index = hash & table.length() - 1; + for (ReferenceEntry e = first = table.get(index); e != null; e = e.getNext()) { + RemovalCause cause; + K entryKey = e.getKey(); + if (e.getHash() != hash || entryKey == null || !this.map.keyEquivalence.equivalent(key, entryKey)) continue; + ValueReference valueReference = e.getValueReference(); + V entryValue = valueReference.get(); + if (entryValue != null) { + cause = RemovalCause.EXPLICIT; + } else if (valueReference.isActive()) { + cause = RemovalCause.COLLECTED; + } else { + V v = null; + return v; + } + ++this.modCount; + ReferenceEntry newFirst = this.removeValueFromChain(first, e, entryKey, hash, valueReference, cause); + newCount = this.count - 1; + table.set(index, newFirst); + this.count = newCount; + V v = entryValue; + return v; + } + V v = null; + return v; + } + finally { + this.unlock(); + this.postWriteCleanup(); + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + boolean storeLoadedValue(K key, int hash, LoadingValueReference oldValueReference, V newValue) { + this.lock(); + try { + ReferenceEntry first; + long now = this.map.ticker.read(); + this.preWriteCleanup(now); + int newCount = this.count + 1; + if (newCount > this.threshold) { + this.expand(); + newCount = this.count + 1; + } + AtomicReferenceArray> table = this.table; + int index = hash & table.length() - 1; + for (ReferenceEntry e = first = table.get(index); e != null; e = e.getNext()) { + K entryKey = e.getKey(); + if (e.getHash() != hash || entryKey == null || !this.map.keyEquivalence.equivalent(key, entryKey)) continue; + ValueReference valueReference = e.getValueReference(); + V entryValue = valueReference.get(); + if (oldValueReference == valueReference || entryValue == null && valueReference != UNSET) { + ++this.modCount; + if (oldValueReference.isActive()) { + RemovalCause cause = entryValue == null ? RemovalCause.COLLECTED : RemovalCause.REPLACED; + this.enqueueNotification(key, hash, oldValueReference, cause); + --newCount; + } + this.setValue(e, key, newValue, now); + this.count = newCount; + this.evictEntries(); + boolean bl = true; + return bl; + } + valueReference = new WeightedStrongValueReference(newValue, 0); + this.enqueueNotification(key, hash, valueReference, RemovalCause.REPLACED); + boolean bl = false; + return bl; + } + ++this.modCount; + ReferenceEntry newEntry = this.newEntry(key, hash, first); + this.setValue(newEntry, key, newValue, now); + table.set(index, newEntry); + this.count = newCount; + this.evictEntries(); + boolean bl = true; + return bl; + } + finally { + this.unlock(); + this.postWriteCleanup(); + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + boolean remove(Object key, int hash, Object value) { + this.lock(); + try { + ReferenceEntry first; + long now = this.map.ticker.read(); + this.preWriteCleanup(now); + int newCount = this.count - 1; + AtomicReferenceArray> table = this.table; + int index = hash & table.length() - 1; + for (ReferenceEntry e = first = table.get(index); e != null; e = e.getNext()) { + RemovalCause cause; + K entryKey = e.getKey(); + if (e.getHash() != hash || entryKey == null || !this.map.keyEquivalence.equivalent(key, entryKey)) continue; + ValueReference valueReference = e.getValueReference(); + V entryValue = valueReference.get(); + if (this.map.valueEquivalence.equivalent(value, entryValue)) { + cause = RemovalCause.EXPLICIT; + } else if (entryValue == null && valueReference.isActive()) { + cause = RemovalCause.COLLECTED; + } else { + boolean bl = false; + return bl; + } + ++this.modCount; + ReferenceEntry newFirst = this.removeValueFromChain(first, e, entryKey, hash, valueReference, cause); + newCount = this.count - 1; + table.set(index, newFirst); + this.count = newCount; + boolean bl = cause == RemovalCause.EXPLICIT; + return bl; + } + boolean bl = false; + return bl; + } + finally { + this.unlock(); + this.postWriteCleanup(); + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + void clear() { + if (this.count != 0) { + this.lock(); + try { + int i; + AtomicReferenceArray> table = this.table; + for (i = 0; i < table.length(); ++i) { + for (ReferenceEntry e = table.get(i); e != null; e = e.getNext()) { + if (!e.getValueReference().isActive()) continue; + this.enqueueNotification(e, RemovalCause.EXPLICIT); + } + } + for (i = 0; i < table.length(); ++i) { + table.set(i, null); + } + this.clearReferenceQueues(); + this.writeQueue.clear(); + this.accessQueue.clear(); + this.readCount.set(0); + ++this.modCount; + this.count = 0; + } + finally { + this.unlock(); + this.postWriteCleanup(); + } + } + } + + @Nullable + @GuardedBy(value="this") + ReferenceEntry removeValueFromChain(ReferenceEntry first, ReferenceEntry entry, @Nullable K key, int hash, ValueReference valueReference, RemovalCause cause) { + this.enqueueNotification(key, hash, valueReference, cause); + this.writeQueue.remove(entry); + this.accessQueue.remove(entry); + if (valueReference.isLoading()) { + valueReference.notifyNewValue(null); + return first; + } + return this.removeEntryFromChain(first, entry); + } + + @Nullable + @GuardedBy(value="this") + ReferenceEntry removeEntryFromChain(ReferenceEntry first, ReferenceEntry entry) { + int newCount = this.count; + ReferenceEntry newFirst = entry.getNext(); + for (ReferenceEntry e = first; e != entry; e = e.getNext()) { + ReferenceEntry next = this.copyEntry(e, newFirst); + if (next != null) { + newFirst = next; + continue; + } + this.removeCollectedEntry(e); + --newCount; + } + this.count = newCount; + return newFirst; + } + + @GuardedBy(value="this") + void removeCollectedEntry(ReferenceEntry entry) { + this.enqueueNotification(entry, RemovalCause.COLLECTED); + this.writeQueue.remove(entry); + this.accessQueue.remove(entry); + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + boolean reclaimKey(ReferenceEntry entry, int hash) { + this.lock(); + try { + ReferenceEntry first; + int newCount = this.count - 1; + AtomicReferenceArray> table = this.table; + int index = hash & table.length() - 1; + for (ReferenceEntry e = first = table.get(index); e != null; e = e.getNext()) { + if (e != entry) continue; + ++this.modCount; + ReferenceEntry newFirst = this.removeValueFromChain(first, e, e.getKey(), hash, e.getValueReference(), RemovalCause.COLLECTED); + newCount = this.count - 1; + table.set(index, newFirst); + this.count = newCount; + boolean bl = true; + return bl; + } + boolean bl = false; + return bl; + } + finally { + this.unlock(); + this.postWriteCleanup(); + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + boolean reclaimValue(K key, int hash, ValueReference valueReference) { + this.lock(); + try { + ReferenceEntry first; + int newCount = this.count - 1; + AtomicReferenceArray> table = this.table; + int index = hash & table.length() - 1; + for (ReferenceEntry e = first = table.get(index); e != null; e = e.getNext()) { + K entryKey = e.getKey(); + if (e.getHash() != hash || entryKey == null || !this.map.keyEquivalence.equivalent(key, entryKey)) continue; + ValueReference v = e.getValueReference(); + if (v == valueReference) { + ++this.modCount; + ReferenceEntry newFirst = this.removeValueFromChain(first, e, entryKey, hash, valueReference, RemovalCause.COLLECTED); + newCount = this.count - 1; + table.set(index, newFirst); + this.count = newCount; + boolean bl = true; + return bl; + } + boolean bl = false; + return bl; + } + boolean bl = false; + return bl; + } + finally { + this.unlock(); + if (!this.isHeldByCurrentThread()) { + this.postWriteCleanup(); + } + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + boolean removeLoadingValue(K key, int hash, LoadingValueReference valueReference) { + this.lock(); + try { + ReferenceEntry first; + AtomicReferenceArray> table = this.table; + int index = hash & table.length() - 1; + for (ReferenceEntry e = first = table.get(index); e != null; e = e.getNext()) { + K entryKey = e.getKey(); + if (e.getHash() != hash || entryKey == null || !this.map.keyEquivalence.equivalent(key, entryKey)) continue; + ValueReference v = e.getValueReference(); + if (v == valueReference) { + if (valueReference.isActive()) { + e.setValueReference(valueReference.getOldValue()); + } else { + ReferenceEntry newFirst = this.removeEntryFromChain(first, e); + table.set(index, newFirst); + } + boolean bl = true; + return bl; + } + boolean bl = false; + return bl; + } + boolean bl = false; + return bl; + } + finally { + this.unlock(); + this.postWriteCleanup(); + } + } + + @GuardedBy(value="this") + boolean removeEntry(ReferenceEntry entry, int hash, RemovalCause cause) { + ReferenceEntry first; + int newCount = this.count - 1; + AtomicReferenceArray> table = this.table; + int index = hash & table.length() - 1; + for (ReferenceEntry e = first = table.get(index); e != null; e = e.getNext()) { + if (e != entry) continue; + ++this.modCount; + ReferenceEntry newFirst = this.removeValueFromChain(first, e, e.getKey(), hash, e.getValueReference(), cause); + newCount = this.count - 1; + table.set(index, newFirst); + this.count = newCount; + return true; + } + return false; + } + + void postReadCleanup() { + if ((this.readCount.incrementAndGet() & 0x3F) == 0) { + this.cleanUp(); + } + } + + @GuardedBy(value="this") + void preWriteCleanup(long now) { + this.runLockedCleanup(now); + } + + void postWriteCleanup() { + this.runUnlockedCleanup(); + } + + void cleanUp() { + long now = this.map.ticker.read(); + this.runLockedCleanup(now); + this.runUnlockedCleanup(); + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + void runLockedCleanup(long now) { + if (this.tryLock()) { + try { + this.drainReferenceQueues(); + this.expireEntries(now); + this.readCount.set(0); + } + finally { + this.unlock(); + } + } + } + + void runUnlockedCleanup() { + if (!this.isHeldByCurrentThread()) { + this.map.processPendingNotifications(); + } + } + } + + static final class WeightedStrongValueReference + extends StrongValueReference { + final int weight; + + WeightedStrongValueReference(V referent, int weight) { + super(referent); + this.weight = weight; + } + + @Override + public int getWeight() { + return this.weight; + } + } + + static final class WeightedSoftValueReference + extends SoftValueReference { + final int weight; + + WeightedSoftValueReference(ReferenceQueue queue, V referent, ReferenceEntry entry, int weight) { + super(queue, referent, entry); + this.weight = weight; + } + + @Override + public int getWeight() { + return this.weight; + } + + @Override + public ValueReference copyFor(ReferenceQueue queue, V value, ReferenceEntry entry) { + return new WeightedSoftValueReference(queue, value, entry, this.weight); + } + } + + static final class WeightedWeakValueReference + extends WeakValueReference { + final int weight; + + WeightedWeakValueReference(ReferenceQueue queue, V referent, ReferenceEntry entry, int weight) { + super(queue, referent, entry); + this.weight = weight; + } + + @Override + public int getWeight() { + return this.weight; + } + + @Override + public ValueReference copyFor(ReferenceQueue queue, V value, ReferenceEntry entry) { + return new WeightedWeakValueReference(queue, value, entry, this.weight); + } + } + + static class StrongValueReference + implements ValueReference { + final V referent; + + StrongValueReference(V referent) { + this.referent = referent; + } + + @Override + public V get() { + return this.referent; + } + + @Override + public int getWeight() { + return 1; + } + + @Override + public ReferenceEntry getEntry() { + return null; + } + + @Override + public ValueReference copyFor(ReferenceQueue queue, V value, ReferenceEntry entry) { + return this; + } + + @Override + public boolean isLoading() { + return false; + } + + @Override + public boolean isActive() { + return true; + } + + @Override + public V waitForValue() { + return this.get(); + } + + @Override + public void notifyNewValue(V newValue) { + } + } + + static class SoftValueReference + extends SoftReference + implements ValueReference { + final ReferenceEntry entry; + + SoftValueReference(ReferenceQueue queue, V referent, ReferenceEntry entry) { + super(referent, queue); + this.entry = entry; + } + + @Override + public int getWeight() { + return 1; + } + + @Override + public ReferenceEntry getEntry() { + return this.entry; + } + + @Override + public void notifyNewValue(V newValue) { + } + + @Override + public ValueReference copyFor(ReferenceQueue queue, V value, ReferenceEntry entry) { + return new SoftValueReference(queue, value, entry); + } + + @Override + public boolean isLoading() { + return false; + } + + @Override + public boolean isActive() { + return true; + } + + @Override + public V waitForValue() { + return (V)this.get(); + } + } + + static class WeakValueReference + extends WeakReference + implements ValueReference { + final ReferenceEntry entry; + + WeakValueReference(ReferenceQueue queue, V referent, ReferenceEntry entry) { + super(referent, queue); + this.entry = entry; + } + + @Override + public int getWeight() { + return 1; + } + + @Override + public ReferenceEntry getEntry() { + return this.entry; + } + + @Override + public void notifyNewValue(V newValue) { + } + + @Override + public ValueReference copyFor(ReferenceQueue queue, V value, ReferenceEntry entry) { + return new WeakValueReference(queue, value, entry); + } + + @Override + public boolean isLoading() { + return false; + } + + @Override + public boolean isActive() { + return true; + } + + @Override + public V waitForValue() { + return (V)this.get(); + } + } + + static final class WeakAccessWriteEntry + extends WeakEntry { + volatile long accessTime = Long.MAX_VALUE; + ReferenceEntry nextAccess = LocalCache.nullEntry(); + ReferenceEntry previousAccess = LocalCache.nullEntry(); + volatile long writeTime = Long.MAX_VALUE; + ReferenceEntry nextWrite = LocalCache.nullEntry(); + ReferenceEntry previousWrite = LocalCache.nullEntry(); + + WeakAccessWriteEntry(ReferenceQueue queue, K key, int hash, @Nullable ReferenceEntry next) { + super(queue, key, hash, next); + } + + @Override + public long getAccessTime() { + return this.accessTime; + } + + @Override + public void setAccessTime(long time) { + this.accessTime = time; + } + + @Override + public ReferenceEntry getNextInAccessQueue() { + return this.nextAccess; + } + + @Override + public void setNextInAccessQueue(ReferenceEntry next) { + this.nextAccess = next; + } + + @Override + public ReferenceEntry getPreviousInAccessQueue() { + return this.previousAccess; + } + + @Override + public void setPreviousInAccessQueue(ReferenceEntry previous) { + this.previousAccess = previous; + } + + @Override + public long getWriteTime() { + return this.writeTime; + } + + @Override + public void setWriteTime(long time) { + this.writeTime = time; + } + + @Override + public ReferenceEntry getNextInWriteQueue() { + return this.nextWrite; + } + + @Override + public void setNextInWriteQueue(ReferenceEntry next) { + this.nextWrite = next; + } + + @Override + public ReferenceEntry getPreviousInWriteQueue() { + return this.previousWrite; + } + + @Override + public void setPreviousInWriteQueue(ReferenceEntry previous) { + this.previousWrite = previous; + } + } + + static final class WeakWriteEntry + extends WeakEntry { + volatile long writeTime = Long.MAX_VALUE; + ReferenceEntry nextWrite = LocalCache.nullEntry(); + ReferenceEntry previousWrite = LocalCache.nullEntry(); + + WeakWriteEntry(ReferenceQueue queue, K key, int hash, @Nullable ReferenceEntry next) { + super(queue, key, hash, next); + } + + @Override + public long getWriteTime() { + return this.writeTime; + } + + @Override + public void setWriteTime(long time) { + this.writeTime = time; + } + + @Override + public ReferenceEntry getNextInWriteQueue() { + return this.nextWrite; + } + + @Override + public void setNextInWriteQueue(ReferenceEntry next) { + this.nextWrite = next; + } + + @Override + public ReferenceEntry getPreviousInWriteQueue() { + return this.previousWrite; + } + + @Override + public void setPreviousInWriteQueue(ReferenceEntry previous) { + this.previousWrite = previous; + } + } + + static final class WeakAccessEntry + extends WeakEntry { + volatile long accessTime = Long.MAX_VALUE; + ReferenceEntry nextAccess = LocalCache.nullEntry(); + ReferenceEntry previousAccess = LocalCache.nullEntry(); + + WeakAccessEntry(ReferenceQueue queue, K key, int hash, @Nullable ReferenceEntry next) { + super(queue, key, hash, next); + } + + @Override + public long getAccessTime() { + return this.accessTime; + } + + @Override + public void setAccessTime(long time) { + this.accessTime = time; + } + + @Override + public ReferenceEntry getNextInAccessQueue() { + return this.nextAccess; + } + + @Override + public void setNextInAccessQueue(ReferenceEntry next) { + this.nextAccess = next; + } + + @Override + public ReferenceEntry getPreviousInAccessQueue() { + return this.previousAccess; + } + + @Override + public void setPreviousInAccessQueue(ReferenceEntry previous) { + this.previousAccess = previous; + } + } + + static class WeakEntry + extends WeakReference + implements ReferenceEntry { + final int hash; + final ReferenceEntry next; + volatile ValueReference valueReference = LocalCache.unset(); + + WeakEntry(ReferenceQueue queue, K key, int hash, @Nullable ReferenceEntry next) { + super(key, queue); + this.hash = hash; + this.next = next; + } + + @Override + public K getKey() { + return (K)this.get(); + } + + @Override + public long getAccessTime() { + throw new UnsupportedOperationException(); + } + + @Override + public void setAccessTime(long time) { + throw new UnsupportedOperationException(); + } + + @Override + public ReferenceEntry getNextInAccessQueue() { + throw new UnsupportedOperationException(); + } + + @Override + public void setNextInAccessQueue(ReferenceEntry next) { + throw new UnsupportedOperationException(); + } + + @Override + public ReferenceEntry getPreviousInAccessQueue() { + throw new UnsupportedOperationException(); + } + + @Override + public void setPreviousInAccessQueue(ReferenceEntry previous) { + throw new UnsupportedOperationException(); + } + + @Override + public long getWriteTime() { + throw new UnsupportedOperationException(); + } + + @Override + public void setWriteTime(long time) { + throw new UnsupportedOperationException(); + } + + @Override + public ReferenceEntry getNextInWriteQueue() { + throw new UnsupportedOperationException(); + } + + @Override + public void setNextInWriteQueue(ReferenceEntry next) { + throw new UnsupportedOperationException(); + } + + @Override + public ReferenceEntry getPreviousInWriteQueue() { + throw new UnsupportedOperationException(); + } + + @Override + public void setPreviousInWriteQueue(ReferenceEntry previous) { + throw new UnsupportedOperationException(); + } + + @Override + public ValueReference getValueReference() { + return this.valueReference; + } + + @Override + public void setValueReference(ValueReference valueReference) { + this.valueReference = valueReference; + } + + @Override + public int getHash() { + return this.hash; + } + + @Override + public ReferenceEntry getNext() { + return this.next; + } + } + + static final class StrongAccessWriteEntry + extends StrongEntry { + volatile long accessTime = Long.MAX_VALUE; + ReferenceEntry nextAccess = LocalCache.nullEntry(); + ReferenceEntry previousAccess = LocalCache.nullEntry(); + volatile long writeTime = Long.MAX_VALUE; + ReferenceEntry nextWrite = LocalCache.nullEntry(); + ReferenceEntry previousWrite = LocalCache.nullEntry(); + + StrongAccessWriteEntry(K key, int hash, @Nullable ReferenceEntry next) { + super(key, hash, next); + } + + @Override + public long getAccessTime() { + return this.accessTime; + } + + @Override + public void setAccessTime(long time) { + this.accessTime = time; + } + + @Override + public ReferenceEntry getNextInAccessQueue() { + return this.nextAccess; + } + + @Override + public void setNextInAccessQueue(ReferenceEntry next) { + this.nextAccess = next; + } + + @Override + public ReferenceEntry getPreviousInAccessQueue() { + return this.previousAccess; + } + + @Override + public void setPreviousInAccessQueue(ReferenceEntry previous) { + this.previousAccess = previous; + } + + @Override + public long getWriteTime() { + return this.writeTime; + } + + @Override + public void setWriteTime(long time) { + this.writeTime = time; + } + + @Override + public ReferenceEntry getNextInWriteQueue() { + return this.nextWrite; + } + + @Override + public void setNextInWriteQueue(ReferenceEntry next) { + this.nextWrite = next; + } + + @Override + public ReferenceEntry getPreviousInWriteQueue() { + return this.previousWrite; + } + + @Override + public void setPreviousInWriteQueue(ReferenceEntry previous) { + this.previousWrite = previous; + } + } + + static final class StrongWriteEntry + extends StrongEntry { + volatile long writeTime = Long.MAX_VALUE; + ReferenceEntry nextWrite = LocalCache.nullEntry(); + ReferenceEntry previousWrite = LocalCache.nullEntry(); + + StrongWriteEntry(K key, int hash, @Nullable ReferenceEntry next) { + super(key, hash, next); + } + + @Override + public long getWriteTime() { + return this.writeTime; + } + + @Override + public void setWriteTime(long time) { + this.writeTime = time; + } + + @Override + public ReferenceEntry getNextInWriteQueue() { + return this.nextWrite; + } + + @Override + public void setNextInWriteQueue(ReferenceEntry next) { + this.nextWrite = next; + } + + @Override + public ReferenceEntry getPreviousInWriteQueue() { + return this.previousWrite; + } + + @Override + public void setPreviousInWriteQueue(ReferenceEntry previous) { + this.previousWrite = previous; + } + } + + static final class StrongAccessEntry + extends StrongEntry { + volatile long accessTime = Long.MAX_VALUE; + ReferenceEntry nextAccess = LocalCache.nullEntry(); + ReferenceEntry previousAccess = LocalCache.nullEntry(); + + StrongAccessEntry(K key, int hash, @Nullable ReferenceEntry next) { + super(key, hash, next); + } + + @Override + public long getAccessTime() { + return this.accessTime; + } + + @Override + public void setAccessTime(long time) { + this.accessTime = time; + } + + @Override + public ReferenceEntry getNextInAccessQueue() { + return this.nextAccess; + } + + @Override + public void setNextInAccessQueue(ReferenceEntry next) { + this.nextAccess = next; + } + + @Override + public ReferenceEntry getPreviousInAccessQueue() { + return this.previousAccess; + } + + @Override + public void setPreviousInAccessQueue(ReferenceEntry previous) { + this.previousAccess = previous; + } + } + + static class StrongEntry + extends AbstractReferenceEntry { + final K key; + final int hash; + final ReferenceEntry next; + volatile ValueReference valueReference = LocalCache.unset(); + + StrongEntry(K key, int hash, @Nullable ReferenceEntry next) { + this.key = key; + this.hash = hash; + this.next = next; + } + + @Override + public K getKey() { + return this.key; + } + + @Override + public ValueReference getValueReference() { + return this.valueReference; + } + + @Override + public void setValueReference(ValueReference valueReference) { + this.valueReference = valueReference; + } + + @Override + public int getHash() { + return this.hash; + } + + @Override + public ReferenceEntry getNext() { + return this.next; + } + } + + static abstract class AbstractReferenceEntry + implements ReferenceEntry { + AbstractReferenceEntry() { + } + + @Override + public ValueReference getValueReference() { + throw new UnsupportedOperationException(); + } + + @Override + public void setValueReference(ValueReference valueReference) { + throw new UnsupportedOperationException(); + } + + @Override + public ReferenceEntry getNext() { + throw new UnsupportedOperationException(); + } + + @Override + public int getHash() { + throw new UnsupportedOperationException(); + } + + @Override + public K getKey() { + throw new UnsupportedOperationException(); + } + + @Override + public long getAccessTime() { + throw new UnsupportedOperationException(); + } + + @Override + public void setAccessTime(long time) { + throw new UnsupportedOperationException(); + } + + @Override + public ReferenceEntry getNextInAccessQueue() { + throw new UnsupportedOperationException(); + } + + @Override + public void setNextInAccessQueue(ReferenceEntry next) { + throw new UnsupportedOperationException(); + } + + @Override + public ReferenceEntry getPreviousInAccessQueue() { + throw new UnsupportedOperationException(); + } + + @Override + public void setPreviousInAccessQueue(ReferenceEntry previous) { + throw new UnsupportedOperationException(); + } + + @Override + public long getWriteTime() { + throw new UnsupportedOperationException(); + } + + @Override + public void setWriteTime(long time) { + throw new UnsupportedOperationException(); + } + + @Override + public ReferenceEntry getNextInWriteQueue() { + throw new UnsupportedOperationException(); + } + + @Override + public void setNextInWriteQueue(ReferenceEntry next) { + throw new UnsupportedOperationException(); + } + + @Override + public ReferenceEntry getPreviousInWriteQueue() { + throw new UnsupportedOperationException(); + } + + @Override + public void setPreviousInWriteQueue(ReferenceEntry previous) { + throw new UnsupportedOperationException(); + } + } + + private static enum NullEntry implements ReferenceEntry + { + INSTANCE; + + + @Override + public ValueReference getValueReference() { + return null; + } + + @Override + public void setValueReference(ValueReference valueReference) { + } + + @Override + public ReferenceEntry getNext() { + return null; + } + + @Override + public int getHash() { + return 0; + } + + @Override + public Object getKey() { + return null; + } + + @Override + public long getAccessTime() { + return 0L; + } + + @Override + public void setAccessTime(long time) { + } + + @Override + public ReferenceEntry getNextInAccessQueue() { + return this; + } + + @Override + public void setNextInAccessQueue(ReferenceEntry next) { + } + + @Override + public ReferenceEntry getPreviousInAccessQueue() { + return this; + } + + @Override + public void setPreviousInAccessQueue(ReferenceEntry previous) { + } + + @Override + public long getWriteTime() { + return 0L; + } + + @Override + public void setWriteTime(long time) { + } + + @Override + public ReferenceEntry getNextInWriteQueue() { + return this; + } + + @Override + public void setNextInWriteQueue(ReferenceEntry next) { + } + + @Override + public ReferenceEntry getPreviousInWriteQueue() { + return this; + } + + @Override + public void setPreviousInWriteQueue(ReferenceEntry previous) { + } + } + + static interface ReferenceEntry { + public ValueReference getValueReference(); + + public void setValueReference(ValueReference var1); + + @Nullable + public ReferenceEntry getNext(); + + public int getHash(); + + @Nullable + public K getKey(); + + public long getAccessTime(); + + public void setAccessTime(long var1); + + public ReferenceEntry getNextInAccessQueue(); + + public void setNextInAccessQueue(ReferenceEntry var1); + + public ReferenceEntry getPreviousInAccessQueue(); + + public void setPreviousInAccessQueue(ReferenceEntry var1); + + public long getWriteTime(); + + public void setWriteTime(long var1); + + public ReferenceEntry getNextInWriteQueue(); + + public void setNextInWriteQueue(ReferenceEntry var1); + + public ReferenceEntry getPreviousInWriteQueue(); + + public void setPreviousInWriteQueue(ReferenceEntry var1); + } + + static interface ValueReference { + @Nullable + public V get(); + + public V waitForValue() throws ExecutionException; + + public int getWeight(); + + @Nullable + public ReferenceEntry getEntry(); + + public ValueReference copyFor(ReferenceQueue var1, @Nullable V var2, ReferenceEntry var3); + + public void notifyNewValue(@Nullable V var1); + + public boolean isLoading(); + + public boolean isActive(); + } + + static enum EntryFactory { + STRONG{ + + @Override + ReferenceEntry newEntry(Segment segment, K key, int hash, @Nullable ReferenceEntry next) { + return new StrongEntry(key, hash, next); + } + } + , + STRONG_ACCESS{ + + @Override + ReferenceEntry newEntry(Segment segment, K key, int hash, @Nullable ReferenceEntry next) { + return new StrongAccessEntry(key, hash, next); + } + + @Override + ReferenceEntry copyEntry(Segment segment, ReferenceEntry original, ReferenceEntry newNext) { + ReferenceEntry newEntry = super.copyEntry(segment, original, newNext); + this.copyAccessEntry(original, newEntry); + return newEntry; + } + } + , + STRONG_WRITE{ + + @Override + ReferenceEntry newEntry(Segment segment, K key, int hash, @Nullable ReferenceEntry next) { + return new StrongWriteEntry(key, hash, next); + } + + @Override + ReferenceEntry copyEntry(Segment segment, ReferenceEntry original, ReferenceEntry newNext) { + ReferenceEntry newEntry = super.copyEntry(segment, original, newNext); + this.copyWriteEntry(original, newEntry); + return newEntry; + } + } + , + STRONG_ACCESS_WRITE{ + + @Override + ReferenceEntry newEntry(Segment segment, K key, int hash, @Nullable ReferenceEntry next) { + return new StrongAccessWriteEntry(key, hash, next); + } + + @Override + ReferenceEntry copyEntry(Segment segment, ReferenceEntry original, ReferenceEntry newNext) { + ReferenceEntry newEntry = super.copyEntry(segment, original, newNext); + this.copyAccessEntry(original, newEntry); + this.copyWriteEntry(original, newEntry); + return newEntry; + } + } + , + WEAK{ + + @Override + ReferenceEntry newEntry(Segment segment, K key, int hash, @Nullable ReferenceEntry next) { + return new WeakEntry(segment.keyReferenceQueue, key, hash, next); + } + } + , + WEAK_ACCESS{ + + @Override + ReferenceEntry newEntry(Segment segment, K key, int hash, @Nullable ReferenceEntry next) { + return new WeakAccessEntry(segment.keyReferenceQueue, key, hash, next); + } + + @Override + ReferenceEntry copyEntry(Segment segment, ReferenceEntry original, ReferenceEntry newNext) { + ReferenceEntry newEntry = super.copyEntry(segment, original, newNext); + this.copyAccessEntry(original, newEntry); + return newEntry; + } + } + , + WEAK_WRITE{ + + @Override + ReferenceEntry newEntry(Segment segment, K key, int hash, @Nullable ReferenceEntry next) { + return new WeakWriteEntry(segment.keyReferenceQueue, key, hash, next); + } + + @Override + ReferenceEntry copyEntry(Segment segment, ReferenceEntry original, ReferenceEntry newNext) { + ReferenceEntry newEntry = super.copyEntry(segment, original, newNext); + this.copyWriteEntry(original, newEntry); + return newEntry; + } + } + , + WEAK_ACCESS_WRITE{ + + @Override + ReferenceEntry newEntry(Segment segment, K key, int hash, @Nullable ReferenceEntry next) { + return new WeakAccessWriteEntry(segment.keyReferenceQueue, key, hash, next); + } + + @Override + ReferenceEntry copyEntry(Segment segment, ReferenceEntry original, ReferenceEntry newNext) { + ReferenceEntry newEntry = super.copyEntry(segment, original, newNext); + this.copyAccessEntry(original, newEntry); + this.copyWriteEntry(original, newEntry); + return newEntry; + } + }; + + static final int ACCESS_MASK = 1; + static final int WRITE_MASK = 2; + static final int WEAK_MASK = 4; + static final EntryFactory[] factories; + + static EntryFactory getFactory(Strength keyStrength, boolean usesAccessQueue, boolean usesWriteQueue) { + int flags = (keyStrength == Strength.WEAK ? 4 : 0) | (usesAccessQueue ? 1 : 0) | (usesWriteQueue ? 2 : 0); + return factories[flags]; + } + + abstract ReferenceEntry newEntry(Segment var1, K var2, int var3, @Nullable ReferenceEntry var4); + + ReferenceEntry copyEntry(Segment segment, ReferenceEntry original, ReferenceEntry newNext) { + return this.newEntry(segment, original.getKey(), original.getHash(), newNext); + } + + void copyAccessEntry(ReferenceEntry original, ReferenceEntry newEntry) { + newEntry.setAccessTime(original.getAccessTime()); + LocalCache.connectAccessOrder(original.getPreviousInAccessQueue(), newEntry); + LocalCache.connectAccessOrder(newEntry, original.getNextInAccessQueue()); + LocalCache.nullifyAccessOrder(original); + } + + void copyWriteEntry(ReferenceEntry original, ReferenceEntry newEntry) { + newEntry.setWriteTime(original.getWriteTime()); + LocalCache.connectWriteOrder(original.getPreviousInWriteQueue(), newEntry); + LocalCache.connectWriteOrder(newEntry, original.getNextInWriteQueue()); + LocalCache.nullifyWriteOrder(original); + } + + static { + factories = new EntryFactory[]{STRONG, STRONG_ACCESS, STRONG_WRITE, STRONG_ACCESS_WRITE, WEAK, WEAK_ACCESS, WEAK_WRITE, WEAK_ACCESS_WRITE}; + } + } + + static enum Strength { + STRONG{ + + @Override + ValueReference referenceValue(Segment segment, ReferenceEntry entry, V value, int weight) { + return weight == 1 ? new StrongValueReference(value) : new WeightedStrongValueReference(value, weight); + } + + @Override + Equivalence defaultEquivalence() { + return Equivalence.equals(); + } + } + , + SOFT{ + + @Override + ValueReference referenceValue(Segment segment, ReferenceEntry entry, V value, int weight) { + return weight == 1 ? new SoftValueReference(segment.valueReferenceQueue, value, entry) : new WeightedSoftValueReference(segment.valueReferenceQueue, value, entry, weight); + } + + @Override + Equivalence defaultEquivalence() { + return Equivalence.identity(); + } + } + , + WEAK{ + + @Override + ValueReference referenceValue(Segment segment, ReferenceEntry entry, V value, int weight) { + return weight == 1 ? new WeakValueReference(segment.valueReferenceQueue, value, entry) : new WeightedWeakValueReference(segment.valueReferenceQueue, value, entry, weight); + } + + @Override + Equivalence defaultEquivalence() { + return Equivalence.identity(); + } + }; + + + abstract ValueReference referenceValue(Segment var1, ReferenceEntry var2, V var3, int var4); + + abstract Equivalence defaultEquivalence(); + } +} diff --git a/src/com/google/common/cache/LongAddable.java b/src/com/google/common/cache/LongAddable.java new file mode 100644 index 0000000..8870c85 --- /dev/null +++ b/src/com/google/common/cache/LongAddable.java @@ -0,0 +1,15 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.cache; + +import com.google.common.annotations.GwtCompatible; + +@GwtCompatible +interface LongAddable { + public void increment(); + + public void add(long var1); + + public long sum(); +} diff --git a/src/com/google/common/cache/LongAddables.java b/src/com/google/common/cache/LongAddables.java new file mode 100644 index 0000000..998fef6 --- /dev/null +++ b/src/com/google/common/cache/LongAddables.java @@ -0,0 +1,68 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.cache; + +import com.google.common.annotations.GwtCompatible; +import com.google.common.base.Supplier; +import com.google.common.cache.LongAddable; +import com.google.common.cache.LongAdder; +import java.util.concurrent.atomic.AtomicLong; + +@GwtCompatible(emulated=true) +final class LongAddables { + private static final Supplier SUPPLIER; + + LongAddables() { + } + + public static LongAddable create() { + return SUPPLIER.get(); + } + + static { + Supplier supplier; + try { + new LongAdder(); + supplier = new Supplier(){ + + @Override + public LongAddable get() { + return new LongAdder(); + } + }; + } + catch (Throwable t) { + supplier = new Supplier(){ + + @Override + public LongAddable get() { + return new PureJavaLongAddable(); + } + }; + } + SUPPLIER = supplier; + } + + private static final class PureJavaLongAddable + extends AtomicLong + implements LongAddable { + private PureJavaLongAddable() { + } + + @Override + public void increment() { + this.getAndIncrement(); + } + + @Override + public void add(long x) { + this.getAndAdd(x); + } + + @Override + public long sum() { + return this.get(); + } + } +} diff --git a/src/com/google/common/cache/LongAdder.java b/src/com/google/common/cache/LongAdder.java new file mode 100644 index 0000000..fa93bd5 --- /dev/null +++ b/src/com/google/common/cache/LongAdder.java @@ -0,0 +1,117 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.cache; + +import com.google.common.annotations.GwtCompatible; +import com.google.common.cache.LongAddable; +import com.google.common.cache.Striped64; +import java.io.IOException; +import java.io.ObjectInputStream; +import java.io.ObjectOutputStream; +import java.io.Serializable; + +@GwtCompatible(emulated=true) +final class LongAdder +extends Striped64 +implements Serializable, +LongAddable { + private static final long serialVersionUID = 7249069246863182397L; + + @Override + final long fn(long v, long x) { + return v + x; + } + + @Override + public void add(long x) { + long b; + Striped64.Cell[] as = this.cells; + if (this.cells != null || !this.casBase(b = this.base, b + x)) { + long v; + Striped64.Cell a; + int n; + boolean uncontended = true; + int[] hc = (int[])threadHashCode.get(); + if (hc == null || as == null || (n = as.length) < 1 || (a = as[n - 1 & hc[0]]) == null || !(uncontended = a.cas(v = a.value, v + x))) { + this.retryUpdate(x, hc, uncontended); + } + } + } + + @Override + public void increment() { + this.add(1L); + } + + public void decrement() { + this.add(-1L); + } + + @Override + public long sum() { + long sum = this.base; + Striped64.Cell[] as = this.cells; + if (as != null) { + for (Striped64.Cell a : as) { + if (a == null) continue; + sum += a.value; + } + } + return sum; + } + + public void reset() { + this.internalReset(0L); + } + + public long sumThenReset() { + long sum = this.base; + Striped64.Cell[] as = this.cells; + this.base = 0L; + if (as != null) { + for (Striped64.Cell a : as) { + if (a == null) continue; + sum += a.value; + a.value = 0L; + } + } + return sum; + } + + public String toString() { + return Long.toString(this.sum()); + } + + @Override + public long longValue() { + return this.sum(); + } + + @Override + public int intValue() { + return (int)this.sum(); + } + + @Override + public float floatValue() { + return this.sum(); + } + + @Override + public double doubleValue() { + return this.sum(); + } + + private void writeObject(ObjectOutputStream s) throws IOException { + s.defaultWriteObject(); + s.writeLong(this.sum()); + } + + private void readObject(ObjectInputStream s) throws IOException, ClassNotFoundException { + s.defaultReadObject(); + this.busy = 0; + this.cells = null; + this.base = s.readLong(); + } +} diff --git a/src/com/google/common/cache/RemovalCause.java b/src/com/google/common/cache/RemovalCause.java new file mode 100644 index 0000000..98992b6 --- /dev/null +++ b/src/com/google/common/cache/RemovalCause.java @@ -0,0 +1,54 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.cache; + +import com.google.common.annotations.Beta; +import com.google.common.annotations.GwtCompatible; + +@Beta +@GwtCompatible +public enum RemovalCause { + EXPLICIT{ + + @Override + boolean wasEvicted() { + return false; + } + } + , + REPLACED{ + + @Override + boolean wasEvicted() { + return false; + } + } + , + COLLECTED{ + + @Override + boolean wasEvicted() { + return true; + } + } + , + EXPIRED{ + + @Override + boolean wasEvicted() { + return true; + } + } + , + SIZE{ + + @Override + boolean wasEvicted() { + return true; + } + }; + + + abstract boolean wasEvicted(); +} diff --git a/src/com/google/common/cache/RemovalListener.java b/src/com/google/common/cache/RemovalListener.java new file mode 100644 index 0000000..9678320 --- /dev/null +++ b/src/com/google/common/cache/RemovalListener.java @@ -0,0 +1,14 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.cache; + +import com.google.common.annotations.Beta; +import com.google.common.annotations.GwtCompatible; +import com.google.common.cache.RemovalNotification; + +@Beta +@GwtCompatible +public interface RemovalListener { + public void onRemoval(RemovalNotification var1); +} diff --git a/src/com/google/common/cache/RemovalListeners.java b/src/com/google/common/cache/RemovalListeners.java new file mode 100644 index 0000000..ff777b7 --- /dev/null +++ b/src/com/google/common/cache/RemovalListeners.java @@ -0,0 +1,34 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.cache; + +import com.google.common.annotations.Beta; +import com.google.common.base.Preconditions; +import com.google.common.cache.RemovalListener; +import com.google.common.cache.RemovalNotification; +import java.util.concurrent.Executor; + +@Beta +public final class RemovalListeners { + private RemovalListeners() { + } + + public static RemovalListener asynchronous(final RemovalListener listener, final Executor executor) { + Preconditions.checkNotNull(listener); + Preconditions.checkNotNull(executor); + return new RemovalListener(){ + + @Override + public void onRemoval(final RemovalNotification notification) { + executor.execute(new Runnable(){ + + @Override + public void run() { + listener.onRemoval(notification); + } + }); + } + }; + } +} diff --git a/src/com/google/common/cache/RemovalNotification.java b/src/com/google/common/cache/RemovalNotification.java new file mode 100644 index 0000000..901ffce --- /dev/null +++ b/src/com/google/common/cache/RemovalNotification.java @@ -0,0 +1,77 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.cache; + +import com.google.common.annotations.Beta; +import com.google.common.annotations.GwtCompatible; +import com.google.common.base.Objects; +import com.google.common.base.Preconditions; +import com.google.common.cache.RemovalCause; +import java.util.Map; +import javax.annotation.Nullable; + +@Beta +@GwtCompatible +public final class RemovalNotification +implements Map.Entry { + @Nullable + private final K key; + @Nullable + private final V value; + private final RemovalCause cause; + private static final long serialVersionUID = 0L; + + RemovalNotification(@Nullable K key, @Nullable V value, RemovalCause cause) { + this.key = key; + this.value = value; + this.cause = Preconditions.checkNotNull(cause); + } + + public RemovalCause getCause() { + return this.cause; + } + + public boolean wasEvicted() { + return this.cause.wasEvicted(); + } + + @Override + @Nullable + public K getKey() { + return this.key; + } + + @Override + @Nullable + public V getValue() { + return this.value; + } + + @Override + public final V setValue(V value) { + throw new UnsupportedOperationException(); + } + + @Override + public boolean equals(@Nullable Object object) { + if (object instanceof Map.Entry) { + Map.Entry that = (Map.Entry)object; + return Objects.equal(this.getKey(), that.getKey()) && Objects.equal(this.getValue(), that.getValue()); + } + return false; + } + + @Override + public int hashCode() { + K k = this.getKey(); + V v = this.getValue(); + return (k == null ? 0 : k.hashCode()) ^ (v == null ? 0 : v.hashCode()); + } + + public String toString() { + String string = String.valueOf(String.valueOf(this.getKey())); + String string2 = String.valueOf(String.valueOf(this.getValue())); + return new StringBuilder(1 + string.length() + string2.length()).append(string).append("=").append(string2).toString(); + } +} diff --git a/src/com/google/common/cache/Striped64.java b/src/com/google/common/cache/Striped64.java new file mode 100644 index 0000000..8ad45f0 --- /dev/null +++ b/src/com/google/common/cache/Striped64.java @@ -0,0 +1,224 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.cache; + +import java.lang.reflect.Field; +import java.security.AccessController; +import java.security.PrivilegedActionException; +import java.security.PrivilegedExceptionAction; +import java.util.Random; +import sun.misc.Unsafe; + +abstract class Striped64 +extends Number { + static final ThreadLocal threadHashCode = new ThreadLocal(); + static final Random rng = new Random(); + static final int NCPU = Runtime.getRuntime().availableProcessors(); + volatile transient Cell[] cells; + volatile transient long base; + volatile transient int busy; + private static final Unsafe UNSAFE; + private static final long baseOffset; + private static final long busyOffset; + + Striped64() { + } + + final boolean casBase(long cmp, long val) { + return UNSAFE.compareAndSwapLong(this, baseOffset, cmp, val); + } + + final boolean casBusy() { + return UNSAFE.compareAndSwapInt(this, busyOffset, 0, 1); + } + + abstract long fn(long var1, long var3); + + /* + * WARNING - Removed try catching itself - possible behaviour change. + * Enabled force condition propagation + * Lifted jumps to return sites + */ + final void retryUpdate(long x, int[] hc, boolean wasUncontended) { + int h; + if (hc == null) { + hc = new int[1]; + threadHashCode.set(hc); + int r = rng.nextInt(); + hc[0] = r == 0 ? 1 : r; + h = hc[0]; + } else { + h = hc[0]; + } + boolean collide = false; + while (true) { + long v; + int n; + Cell[] as = this.cells; + if (this.cells != null && (n = as.length) > 0) { + Cell a = as[n - 1 & h]; + if (a == null) { + if (this.busy == 0) { + Cell r = new Cell(x); + if (this.busy == 0 && this.casBusy()) { + boolean created = false; + try { + int j; + int m; + Cell[] rs = this.cells; + if (this.cells != null && (m = rs.length) > 0 && rs[j = m - 1 & h] == null) { + rs[j] = r; + created = true; + } + } + finally { + this.busy = 0; + } + if (!created) continue; + return; + } + } + collide = false; + } else if (!wasUncontended) { + wasUncontended = true; + } else { + v = a.value; + if (a.cas(v, this.fn(v, x))) return; + if (n >= NCPU || this.cells != as) { + collide = false; + } else if (!collide) { + collide = true; + } else if (this.busy == 0 && this.casBusy()) { + try { + if (this.cells == as) { + Cell[] rs = new Cell[n << 1]; + for (int i = 0; i < n; ++i) { + rs[i] = as[i]; + } + this.cells = rs; + } + } + finally { + this.busy = 0; + } + collide = false; + continue; + } + } + h ^= h << 13; + h ^= h >>> 17; + h ^= h << 5; + hc[0] = h; + continue; + } + if (this.busy == 0 && this.cells == as && this.casBusy()) { + boolean init = false; + try { + if (this.cells == as) { + Cell[] rs = new Cell[2]; + rs[h & 1] = new Cell(x); + this.cells = rs; + init = true; + } + } + finally { + this.busy = 0; + } + if (!init) continue; + return; + } + v = this.base; + if (this.casBase(v, this.fn(v, x))) return; + } + } + + final void internalReset(long initialValue) { + Cell[] as = this.cells; + this.base = initialValue; + if (as != null) { + for (Cell a : as) { + if (a == null) continue; + a.value = initialValue; + } + } + } + + private static Unsafe getUnsafe() { + try { + return Unsafe.getUnsafe(); + } + catch (SecurityException tryReflectionInstead) { + try { + return AccessController.doPrivileged(new PrivilegedExceptionAction(){ + + @Override + public Unsafe run() throws Exception { + Class k = Unsafe.class; + for (Field f : k.getDeclaredFields()) { + f.setAccessible(true); + Object x = f.get(null); + if (!k.isInstance(x)) continue; + return (Unsafe)k.cast(x); + } + throw new NoSuchFieldError("the Unsafe"); + } + }); + } + catch (PrivilegedActionException e) { + throw new RuntimeException("Could not initialize intrinsics", e.getCause()); + } + } + } + + static { + try { + UNSAFE = Striped64.getUnsafe(); + Class sk = Striped64.class; + baseOffset = UNSAFE.objectFieldOffset(sk.getDeclaredField("base")); + busyOffset = UNSAFE.objectFieldOffset(sk.getDeclaredField("busy")); + } + catch (Exception e) { + throw new Error(e); + } + } + + static final class Cell { + volatile long p0; + volatile long p1; + volatile long p2; + volatile long p3; + volatile long p4; + volatile long p5; + volatile long p6; + volatile long value; + volatile long q0; + volatile long q1; + volatile long q2; + volatile long q3; + volatile long q4; + volatile long q5; + volatile long q6; + private static final Unsafe UNSAFE; + private static final long valueOffset; + + Cell(long x) { + this.value = x; + } + + final boolean cas(long cmp, long val) { + return UNSAFE.compareAndSwapLong(this, valueOffset, cmp, val); + } + + static { + try { + UNSAFE = Striped64.getUnsafe(); + Class ak = Cell.class; + valueOffset = UNSAFE.objectFieldOffset(ak.getDeclaredField("value")); + } + catch (Exception e) { + throw new Error(e); + } + } + } +} diff --git a/src/com/google/common/cache/Weigher.java b/src/com/google/common/cache/Weigher.java new file mode 100644 index 0000000..397a3d7 --- /dev/null +++ b/src/com/google/common/cache/Weigher.java @@ -0,0 +1,13 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.cache; + +import com.google.common.annotations.Beta; +import com.google.common.annotations.GwtCompatible; + +@Beta +@GwtCompatible +public interface Weigher { + public int weigh(K var1, V var2); +} diff --git a/src/com/google/common/cache/package-info.java b/src/com/google/common/cache/package-info.java new file mode 100644 index 0000000..98e3b2a --- /dev/null +++ b/src/com/google/common/cache/package-info.java @@ -0,0 +1,8 @@ +/* + * Decompiled with CFR 0.152. + */ +@ParametersAreNonnullByDefault +package com.google.common.cache; + +import javax.annotation.ParametersAreNonnullByDefault; + diff --git a/src/com/google/common/collect/AbstractBiMap.java b/src/com/google/common/collect/AbstractBiMap.java new file mode 100644 index 0000000..b52343c --- /dev/null +++ b/src/com/google/common/collect/AbstractBiMap.java @@ -0,0 +1,382 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.GwtCompatible; +import com.google.common.annotations.GwtIncompatible; +import com.google.common.base.Objects; +import com.google.common.base.Preconditions; +import com.google.common.collect.BiMap; +import com.google.common.collect.CollectPreconditions; +import com.google.common.collect.ForwardingMap; +import com.google.common.collect.ForwardingMapEntry; +import com.google.common.collect.ForwardingSet; +import com.google.common.collect.Maps; +import java.io.IOException; +import java.io.ObjectInputStream; +import java.io.ObjectOutputStream; +import java.io.Serializable; +import java.util.Collection; +import java.util.Iterator; +import java.util.Map; +import java.util.Set; +import javax.annotation.Nullable; + +@GwtCompatible(emulated=true) +abstract class AbstractBiMap +extends ForwardingMap +implements BiMap, +Serializable { + private transient Map delegate; + transient AbstractBiMap inverse; + private transient Set keySet; + private transient Set valueSet; + private transient Set> entrySet; + @GwtIncompatible(value="Not needed in emulated source.") + private static final long serialVersionUID = 0L; + + AbstractBiMap(Map forward, Map backward) { + this.setDelegates(forward, backward); + } + + private AbstractBiMap(Map backward, AbstractBiMap forward) { + this.delegate = backward; + this.inverse = forward; + } + + @Override + protected Map delegate() { + return this.delegate; + } + + K checkKey(@Nullable K key) { + return key; + } + + V checkValue(@Nullable V value) { + return value; + } + + void setDelegates(Map forward, Map backward) { + Preconditions.checkState(this.delegate == null); + Preconditions.checkState(this.inverse == null); + Preconditions.checkArgument(forward.isEmpty()); + Preconditions.checkArgument(backward.isEmpty()); + Preconditions.checkArgument(forward != backward); + this.delegate = forward; + this.inverse = new Inverse(backward, this); + } + + void setInverse(AbstractBiMap inverse) { + this.inverse = inverse; + } + + @Override + public boolean containsValue(@Nullable Object value) { + return this.inverse.containsKey(value); + } + + @Override + public V put(@Nullable K key, @Nullable V value) { + return this.putInBothMaps(key, value, false); + } + + @Override + public V forcePut(@Nullable K key, @Nullable V value) { + return this.putInBothMaps(key, value, true); + } + + private V putInBothMaps(@Nullable K key, @Nullable V value, boolean force) { + this.checkKey(key); + this.checkValue(value); + boolean containedKey = this.containsKey(key); + if (containedKey && Objects.equal(value, this.get(key))) { + return value; + } + if (force) { + this.inverse().remove(value); + } else { + Preconditions.checkArgument(!this.containsValue(value), "value already present: %s", value); + } + V oldValue = this.delegate.put(key, value); + this.updateInverseMap(key, containedKey, oldValue, value); + return oldValue; + } + + private void updateInverseMap(K key, boolean containedKey, V oldValue, V newValue) { + if (containedKey) { + this.removeFromInverseMap(oldValue); + } + this.inverse.delegate.put(newValue, key); + } + + @Override + public V remove(@Nullable Object key) { + return this.containsKey(key) ? (V)this.removeFromBothMaps(key) : null; + } + + private V removeFromBothMaps(Object key) { + V oldValue = this.delegate.remove(key); + this.removeFromInverseMap(oldValue); + return oldValue; + } + + private void removeFromInverseMap(V oldValue) { + this.inverse.delegate.remove(oldValue); + } + + @Override + public void putAll(Map map) { + for (Map.Entry entry : map.entrySet()) { + this.put(entry.getKey(), entry.getValue()); + } + } + + @Override + public void clear() { + this.delegate.clear(); + this.inverse.delegate.clear(); + } + + @Override + public BiMap inverse() { + return this.inverse; + } + + @Override + public Set keySet() { + KeySet result = this.keySet; + return result == null ? (this.keySet = new KeySet()) : result; + } + + @Override + public Set values() { + ValueSet result = this.valueSet; + return result == null ? (this.valueSet = new ValueSet()) : result; + } + + @Override + public Set> entrySet() { + EntrySet result = this.entrySet; + return result == null ? (this.entrySet = new EntrySet()) : result; + } + + private static class Inverse + extends AbstractBiMap { + @GwtIncompatible(value="Not needed in emulated source.") + private static final long serialVersionUID = 0L; + + private Inverse(Map backward, AbstractBiMap forward) { + super(backward, forward); + } + + @Override + K checkKey(K key) { + return this.inverse.checkValue(key); + } + + @Override + V checkValue(V value) { + return this.inverse.checkKey(value); + } + + @GwtIncompatible(value="java.io.ObjectOuputStream") + private void writeObject(ObjectOutputStream stream) throws IOException { + stream.defaultWriteObject(); + stream.writeObject(this.inverse()); + } + + @GwtIncompatible(value="java.io.ObjectInputStream") + private void readObject(ObjectInputStream stream) throws IOException, ClassNotFoundException { + stream.defaultReadObject(); + this.setInverse((AbstractBiMap)stream.readObject()); + } + + @GwtIncompatible(value="Not needed in the emulated source.") + Object readResolve() { + return this.inverse().inverse(); + } + } + + private class EntrySet + extends ForwardingSet> { + final Set> esDelegate; + + private EntrySet() { + this.esDelegate = AbstractBiMap.this.delegate.entrySet(); + } + + @Override + protected Set> delegate() { + return this.esDelegate; + } + + @Override + public void clear() { + AbstractBiMap.this.clear(); + } + + @Override + public boolean remove(Object object) { + if (!this.esDelegate.contains(object)) { + return false; + } + Map.Entry entry = (Map.Entry)object; + AbstractBiMap.this.inverse.delegate.remove(entry.getValue()); + this.esDelegate.remove(entry); + return true; + } + + @Override + public Iterator> iterator() { + final Iterator iterator = this.esDelegate.iterator(); + return new Iterator>(){ + Map.Entry entry; + + @Override + public boolean hasNext() { + return iterator.hasNext(); + } + + @Override + public Map.Entry next() { + this.entry = (Map.Entry)iterator.next(); + final Map.Entry finalEntry = this.entry; + return new ForwardingMapEntry(){ + + @Override + protected Map.Entry delegate() { + return finalEntry; + } + + @Override + public V setValue(V value) { + Preconditions.checkState(EntrySet.this.contains(this), "entry no longer in map"); + if (Objects.equal(value, this.getValue())) { + return value; + } + Preconditions.checkArgument(!AbstractBiMap.this.containsValue(value), "value already present: %s", value); + Object oldValue = finalEntry.setValue(value); + Preconditions.checkState(Objects.equal(value, AbstractBiMap.this.get(this.getKey())), "entry no longer in map"); + AbstractBiMap.this.updateInverseMap(this.getKey(), true, oldValue, value); + return oldValue; + } + }; + } + + @Override + public void remove() { + CollectPreconditions.checkRemove(this.entry != null); + Object value = this.entry.getValue(); + iterator.remove(); + AbstractBiMap.this.removeFromInverseMap(value); + } + }; + } + + @Override + public Object[] toArray() { + return this.standardToArray(); + } + + @Override + public T[] toArray(T[] array) { + return this.standardToArray(array); + } + + @Override + public boolean contains(Object o) { + return Maps.containsEntryImpl(this.delegate(), o); + } + + @Override + public boolean containsAll(Collection c) { + return this.standardContainsAll(c); + } + + @Override + public boolean removeAll(Collection c) { + return this.standardRemoveAll(c); + } + + @Override + public boolean retainAll(Collection c) { + return this.standardRetainAll(c); + } + } + + private class ValueSet + extends ForwardingSet { + final Set valuesDelegate; + + private ValueSet() { + this.valuesDelegate = AbstractBiMap.this.inverse.keySet(); + } + + @Override + protected Set delegate() { + return this.valuesDelegate; + } + + @Override + public Iterator iterator() { + return Maps.valueIterator(AbstractBiMap.this.entrySet().iterator()); + } + + @Override + public Object[] toArray() { + return this.standardToArray(); + } + + @Override + public T[] toArray(T[] array) { + return this.standardToArray(array); + } + + @Override + public String toString() { + return this.standardToString(); + } + } + + private class KeySet + extends ForwardingSet { + private KeySet() { + } + + @Override + protected Set delegate() { + return AbstractBiMap.this.delegate.keySet(); + } + + @Override + public void clear() { + AbstractBiMap.this.clear(); + } + + @Override + public boolean remove(Object key) { + if (!this.contains(key)) { + return false; + } + AbstractBiMap.this.removeFromBothMaps(key); + return true; + } + + @Override + public boolean removeAll(Collection keysToRemove) { + return this.standardRemoveAll(keysToRemove); + } + + @Override + public boolean retainAll(Collection keysToRetain) { + return this.standardRetainAll(keysToRetain); + } + + @Override + public Iterator iterator() { + return Maps.keyIterator(AbstractBiMap.this.entrySet().iterator()); + } + } +} diff --git a/src/com/google/common/collect/AbstractIndexedListIterator.java b/src/com/google/common/collect/AbstractIndexedListIterator.java new file mode 100644 index 0000000..975ecc0 --- /dev/null +++ b/src/com/google/common/collect/AbstractIndexedListIterator.java @@ -0,0 +1,64 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.GwtCompatible; +import com.google.common.base.Preconditions; +import com.google.common.collect.UnmodifiableListIterator; +import java.util.NoSuchElementException; + +@GwtCompatible +abstract class AbstractIndexedListIterator +extends UnmodifiableListIterator { + private final int size; + private int position; + + protected abstract E get(int var1); + + protected AbstractIndexedListIterator(int size) { + this(size, 0); + } + + protected AbstractIndexedListIterator(int size, int position) { + Preconditions.checkPositionIndex(position, size); + this.size = size; + this.position = position; + } + + @Override + public final boolean hasNext() { + return this.position < this.size; + } + + @Override + public final E next() { + if (!this.hasNext()) { + throw new NoSuchElementException(); + } + return this.get(this.position++); + } + + @Override + public final int nextIndex() { + return this.position; + } + + @Override + public final boolean hasPrevious() { + return this.position > 0; + } + + @Override + public final E previous() { + if (!this.hasPrevious()) { + throw new NoSuchElementException(); + } + return this.get(--this.position); + } + + @Override + public final int previousIndex() { + return this.position - 1; + } +} diff --git a/src/com/google/common/collect/AbstractIterator.java b/src/com/google/common/collect/AbstractIterator.java new file mode 100644 index 0000000..961b64c --- /dev/null +++ b/src/com/google/common/collect/AbstractIterator.java @@ -0,0 +1,76 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.GwtCompatible; +import com.google.common.base.Preconditions; +import com.google.common.collect.UnmodifiableIterator; +import java.util.NoSuchElementException; + +@GwtCompatible +public abstract class AbstractIterator +extends UnmodifiableIterator { + private State state = State.NOT_READY; + private T next; + + protected AbstractIterator() { + } + + protected abstract T computeNext(); + + protected final T endOfData() { + this.state = State.DONE; + return null; + } + + @Override + public final boolean hasNext() { + Preconditions.checkState(this.state != State.FAILED); + switch (this.state) { + case DONE: { + return false; + } + case READY: { + return true; + } + } + return this.tryToComputeNext(); + } + + private boolean tryToComputeNext() { + this.state = State.FAILED; + this.next = this.computeNext(); + if (this.state != State.DONE) { + this.state = State.READY; + return true; + } + return false; + } + + @Override + public final T next() { + if (!this.hasNext()) { + throw new NoSuchElementException(); + } + this.state = State.NOT_READY; + T result = this.next; + this.next = null; + return result; + } + + public final T peek() { + if (!this.hasNext()) { + throw new NoSuchElementException(); + } + return this.next; + } + + private static enum State { + READY, + NOT_READY, + DONE, + FAILED; + + } +} diff --git a/src/com/google/common/collect/AbstractListMultimap.java b/src/com/google/common/collect/AbstractListMultimap.java new file mode 100644 index 0000000..ae609db --- /dev/null +++ b/src/com/google/common/collect/AbstractListMultimap.java @@ -0,0 +1,62 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.GwtCompatible; +import com.google.common.collect.AbstractMapBasedMultimap; +import com.google.common.collect.ImmutableList; +import com.google.common.collect.ListMultimap; +import java.util.Collection; +import java.util.List; +import java.util.Map; +import javax.annotation.Nullable; + +@GwtCompatible +abstract class AbstractListMultimap +extends AbstractMapBasedMultimap +implements ListMultimap { + private static final long serialVersionUID = 6588350623831699109L; + + protected AbstractListMultimap(Map> map) { + super(map); + } + + @Override + abstract List createCollection(); + + @Override + List createUnmodifiableEmptyCollection() { + return ImmutableList.of(); + } + + @Override + public List get(@Nullable K key) { + return (List)super.get(key); + } + + @Override + public List removeAll(@Nullable Object key) { + return (List)super.removeAll(key); + } + + @Override + public List replaceValues(@Nullable K key, Iterable values) { + return (List)super.replaceValues(key, values); + } + + @Override + public boolean put(@Nullable K key, @Nullable V value) { + return super.put(key, value); + } + + @Override + public Map> asMap() { + return super.asMap(); + } + + @Override + public boolean equals(@Nullable Object object) { + return super.equals(object); + } +} diff --git a/src/com/google/common/collect/AbstractMapBasedMultimap.java b/src/com/google/common/collect/AbstractMapBasedMultimap.java new file mode 100644 index 0000000..7497d0a --- /dev/null +++ b/src/com/google/common/collect/AbstractMapBasedMultimap.java @@ -0,0 +1,1336 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.GwtCompatible; +import com.google.common.annotations.GwtIncompatible; +import com.google.common.base.Preconditions; +import com.google.common.collect.AbstractMultimap; +import com.google.common.collect.CollectPreconditions; +import com.google.common.collect.Collections2; +import com.google.common.collect.Iterators; +import com.google.common.collect.Maps; +import com.google.common.collect.Sets; +import java.io.Serializable; +import java.util.AbstractCollection; +import java.util.Collection; +import java.util.Collections; +import java.util.Comparator; +import java.util.ConcurrentModificationException; +import java.util.Iterator; +import java.util.List; +import java.util.ListIterator; +import java.util.Map; +import java.util.NavigableMap; +import java.util.NavigableSet; +import java.util.RandomAccess; +import java.util.Set; +import java.util.SortedMap; +import java.util.SortedSet; +import javax.annotation.Nullable; + +@GwtCompatible(emulated=true) +abstract class AbstractMapBasedMultimap +extends AbstractMultimap +implements Serializable { + private transient Map> map; + private transient int totalSize; + private static final long serialVersionUID = 2447537837011683357L; + + protected AbstractMapBasedMultimap(Map> map) { + Preconditions.checkArgument(map.isEmpty()); + this.map = map; + } + + final void setMap(Map> map) { + this.map = map; + this.totalSize = 0; + for (Collection> values : map.values()) { + Preconditions.checkArgument(!values.isEmpty()); + this.totalSize += values.size(); + } + } + + Collection createUnmodifiableEmptyCollection() { + return this.unmodifiableCollectionSubclass(this.createCollection()); + } + + abstract Collection createCollection(); + + Collection createCollection(@Nullable K key) { + return this.createCollection(); + } + + Map> backingMap() { + return this.map; + } + + @Override + public int size() { + return this.totalSize; + } + + @Override + public boolean containsKey(@Nullable Object key) { + return this.map.containsKey(key); + } + + @Override + public boolean put(@Nullable K key, @Nullable V value) { + Collection collection = this.map.get(key); + if (collection == null) { + collection = this.createCollection(key); + if (collection.add(value)) { + ++this.totalSize; + this.map.put(key, collection); + return true; + } + throw new AssertionError((Object)"New Collection violated the Collection spec"); + } + if (collection.add(value)) { + ++this.totalSize; + return true; + } + return false; + } + + private Collection getOrCreateCollection(@Nullable K key) { + Collection collection = this.map.get(key); + if (collection == null) { + collection = this.createCollection(key); + this.map.put(key, collection); + } + return collection; + } + + @Override + public Collection replaceValues(@Nullable K key, Iterable values) { + Iterator iterator = values.iterator(); + if (!iterator.hasNext()) { + return this.removeAll(key); + } + Collection collection = this.getOrCreateCollection(key); + Collection oldValues = this.createCollection(); + oldValues.addAll(collection); + this.totalSize -= collection.size(); + collection.clear(); + while (iterator.hasNext()) { + if (!collection.add(iterator.next())) continue; + ++this.totalSize; + } + return this.unmodifiableCollectionSubclass(oldValues); + } + + @Override + public Collection removeAll(@Nullable Object key) { + Collection collection = this.map.remove(key); + if (collection == null) { + return this.createUnmodifiableEmptyCollection(); + } + Collection output = this.createCollection(); + output.addAll(collection); + this.totalSize -= collection.size(); + collection.clear(); + return this.unmodifiableCollectionSubclass(output); + } + + Collection unmodifiableCollectionSubclass(Collection collection) { + if (collection instanceof SortedSet) { + return Collections.unmodifiableSortedSet((SortedSet)collection); + } + if (collection instanceof Set) { + return Collections.unmodifiableSet((Set)collection); + } + if (collection instanceof List) { + return Collections.unmodifiableList((List)collection); + } + return Collections.unmodifiableCollection(collection); + } + + @Override + public void clear() { + for (Collection collection : this.map.values()) { + collection.clear(); + } + this.map.clear(); + this.totalSize = 0; + } + + @Override + public Collection get(@Nullable K key) { + Collection collection = this.map.get(key); + if (collection == null) { + collection = this.createCollection(key); + } + return this.wrapCollection(key, collection); + } + + Collection wrapCollection(@Nullable K key, Collection collection) { + if (collection instanceof SortedSet) { + return new WrappedSortedSet(key, (SortedSet)collection, null); + } + if (collection instanceof Set) { + return new WrappedSet(key, (Set)collection); + } + if (collection instanceof List) { + return this.wrapList(key, (List)collection, null); + } + return new WrappedCollection(key, collection, null); + } + + private List wrapList(@Nullable K key, List list, @Nullable WrappedCollection ancestor) { + return list instanceof RandomAccess ? new RandomAccessWrappedList(key, list, ancestor) : new WrappedList(key, list, ancestor); + } + + private Iterator iteratorOrListIterator(Collection collection) { + return collection instanceof List ? ((List)collection).listIterator() : collection.iterator(); + } + + @Override + Set createKeySet() { + return this.map instanceof SortedMap ? new SortedKeySet((SortedMap)this.map) : new KeySet(this.map); + } + + private int removeValuesForKey(Object key) { + Collection collection = Maps.safeRemove(this.map, key); + int count = 0; + if (collection != null) { + count = collection.size(); + collection.clear(); + this.totalSize -= count; + } + return count; + } + + @Override + public Collection values() { + return super.values(); + } + + @Override + Iterator valueIterator() { + return new Itr(){ + + @Override + V output(K key, V value) { + return value; + } + }; + } + + @Override + public Collection> entries() { + return super.entries(); + } + + @Override + Iterator> entryIterator() { + return new Itr>(){ + + @Override + Map.Entry output(K key, V value) { + return Maps.immutableEntry(key, value); + } + }; + } + + @Override + Map> createAsMap() { + return this.map instanceof SortedMap ? new SortedAsMap((SortedMap)this.map) : new AsMap(this.map); + } + + @GwtIncompatible(value="NavigableAsMap") + class NavigableAsMap + extends SortedAsMap + implements NavigableMap> { + NavigableAsMap(NavigableMap> submap) { + super(submap); + } + + NavigableMap> sortedMap() { + return (NavigableMap)super.sortedMap(); + } + + @Override + public Map.Entry> lowerEntry(K key) { + Map.Entry entry = this.sortedMap().lowerEntry(key); + return entry == null ? null : this.wrapEntry(entry); + } + + @Override + public K lowerKey(K key) { + return this.sortedMap().lowerKey(key); + } + + @Override + public Map.Entry> floorEntry(K key) { + Map.Entry entry = this.sortedMap().floorEntry(key); + return entry == null ? null : this.wrapEntry(entry); + } + + @Override + public K floorKey(K key) { + return this.sortedMap().floorKey(key); + } + + @Override + public Map.Entry> ceilingEntry(K key) { + Map.Entry entry = this.sortedMap().ceilingEntry(key); + return entry == null ? null : this.wrapEntry(entry); + } + + @Override + public K ceilingKey(K key) { + return this.sortedMap().ceilingKey(key); + } + + @Override + public Map.Entry> higherEntry(K key) { + Map.Entry entry = this.sortedMap().higherEntry(key); + return entry == null ? null : this.wrapEntry(entry); + } + + @Override + public K higherKey(K key) { + return this.sortedMap().higherKey(key); + } + + @Override + public Map.Entry> firstEntry() { + Map.Entry entry = this.sortedMap().firstEntry(); + return entry == null ? null : this.wrapEntry(entry); + } + + @Override + public Map.Entry> lastEntry() { + Map.Entry entry = this.sortedMap().lastEntry(); + return entry == null ? null : this.wrapEntry(entry); + } + + @Override + public Map.Entry> pollFirstEntry() { + return this.pollAsMapEntry(this.entrySet().iterator()); + } + + @Override + public Map.Entry> pollLastEntry() { + return this.pollAsMapEntry(this.descendingMap().entrySet().iterator()); + } + + Map.Entry> pollAsMapEntry(Iterator>> entryIterator) { + if (!entryIterator.hasNext()) { + return null; + } + Map.Entry entry = entryIterator.next(); + Collection output = AbstractMapBasedMultimap.this.createCollection(); + output.addAll(entry.getValue()); + entryIterator.remove(); + return Maps.immutableEntry(entry.getKey(), AbstractMapBasedMultimap.this.unmodifiableCollectionSubclass(output)); + } + + @Override + public NavigableMap> descendingMap() { + return new NavigableAsMap(this.sortedMap().descendingMap()); + } + + @Override + public NavigableSet keySet() { + return (NavigableSet)super.keySet(); + } + + @Override + NavigableSet createKeySet() { + return new NavigableKeySet(this.sortedMap()); + } + + @Override + public NavigableSet navigableKeySet() { + return this.keySet(); + } + + @Override + public NavigableSet descendingKeySet() { + return this.descendingMap().navigableKeySet(); + } + + @Override + public NavigableMap> subMap(K fromKey, K toKey) { + return this.subMap(fromKey, true, toKey, false); + } + + @Override + public NavigableMap> subMap(K fromKey, boolean fromInclusive, K toKey, boolean toInclusive) { + return new NavigableAsMap(this.sortedMap().subMap(fromKey, fromInclusive, toKey, toInclusive)); + } + + @Override + public NavigableMap> headMap(K toKey) { + return this.headMap(toKey, false); + } + + @Override + public NavigableMap> headMap(K toKey, boolean inclusive) { + return new NavigableAsMap(this.sortedMap().headMap(toKey, inclusive)); + } + + @Override + public NavigableMap> tailMap(K fromKey) { + return this.tailMap(fromKey, true); + } + + @Override + public NavigableMap> tailMap(K fromKey, boolean inclusive) { + return new NavigableAsMap(this.sortedMap().tailMap(fromKey, inclusive)); + } + } + + private class SortedAsMap + extends AsMap + implements SortedMap> { + SortedSet sortedKeySet; + + SortedAsMap(SortedMap> submap) { + super(submap); + } + + SortedMap> sortedMap() { + return (SortedMap)this.submap; + } + + @Override + public Comparator comparator() { + return this.sortedMap().comparator(); + } + + @Override + public K firstKey() { + return this.sortedMap().firstKey(); + } + + @Override + public K lastKey() { + return this.sortedMap().lastKey(); + } + + @Override + public SortedMap> headMap(K toKey) { + return new SortedAsMap(this.sortedMap().headMap(toKey)); + } + + @Override + public SortedMap> subMap(K fromKey, K toKey) { + return new SortedAsMap(this.sortedMap().subMap(fromKey, toKey)); + } + + @Override + public SortedMap> tailMap(K fromKey) { + return new SortedAsMap(this.sortedMap().tailMap(fromKey)); + } + + @Override + public SortedSet keySet() { + SortedSet result = this.sortedKeySet; + return result == null ? (this.sortedKeySet = this.createKeySet()) : result; + } + + @Override + SortedSet createKeySet() { + return new SortedKeySet(this.sortedMap()); + } + } + + private class AsMap + extends Maps.ImprovedAbstractMap> { + final transient Map> submap; + + AsMap(Map> submap) { + this.submap = submap; + } + + @Override + protected Set>> createEntrySet() { + return new AsMapEntries(); + } + + @Override + public boolean containsKey(Object key) { + return Maps.safeContainsKey(this.submap, key); + } + + @Override + public Collection get(Object key) { + Collection collection = Maps.safeGet(this.submap, key); + if (collection == null) { + return null; + } + Object k = key; + return AbstractMapBasedMultimap.this.wrapCollection(k, collection); + } + + @Override + public Set keySet() { + return AbstractMapBasedMultimap.this.keySet(); + } + + @Override + public int size() { + return this.submap.size(); + } + + @Override + public Collection remove(Object key) { + Collection collection = this.submap.remove(key); + if (collection == null) { + return null; + } + Collection output = AbstractMapBasedMultimap.this.createCollection(); + output.addAll(collection); + AbstractMapBasedMultimap.this.totalSize -= collection.size(); + collection.clear(); + return output; + } + + @Override + public boolean equals(@Nullable Object object) { + return this == object || this.submap.equals(object); + } + + @Override + public int hashCode() { + return this.submap.hashCode(); + } + + @Override + public String toString() { + return this.submap.toString(); + } + + @Override + public void clear() { + if (this.submap == AbstractMapBasedMultimap.this.map) { + AbstractMapBasedMultimap.this.clear(); + } else { + Iterators.clear(new AsMapIterator()); + } + } + + Map.Entry> wrapEntry(Map.Entry> entry) { + Object key = entry.getKey(); + return Maps.immutableEntry(key, AbstractMapBasedMultimap.this.wrapCollection(key, entry.getValue())); + } + + class AsMapIterator + implements Iterator>> { + final Iterator>> delegateIterator; + Collection collection; + + AsMapIterator() { + this.delegateIterator = AsMap.this.submap.entrySet().iterator(); + } + + @Override + public boolean hasNext() { + return this.delegateIterator.hasNext(); + } + + @Override + public Map.Entry> next() { + Map.Entry entry = this.delegateIterator.next(); + this.collection = entry.getValue(); + return AsMap.this.wrapEntry(entry); + } + + @Override + public void remove() { + this.delegateIterator.remove(); + AbstractMapBasedMultimap.this.totalSize -= this.collection.size(); + this.collection.clear(); + } + } + + class AsMapEntries + extends Maps.EntrySet> { + AsMapEntries() { + } + + @Override + Map> map() { + return AsMap.this; + } + + @Override + public Iterator>> iterator() { + return new AsMapIterator(); + } + + @Override + public boolean contains(Object o) { + return Collections2.safeContains(AsMap.this.submap.entrySet(), o); + } + + @Override + public boolean remove(Object o) { + if (!this.contains(o)) { + return false; + } + Map.Entry entry = (Map.Entry)o; + AbstractMapBasedMultimap.this.removeValuesForKey(entry.getKey()); + return true; + } + } + } + + private abstract class Itr + implements Iterator { + final Iterator>> keyIterator; + K key; + Collection collection; + Iterator valueIterator; + + Itr() { + this.keyIterator = AbstractMapBasedMultimap.this.map.entrySet().iterator(); + this.key = null; + this.collection = null; + this.valueIterator = Iterators.emptyModifiableIterator(); + } + + abstract T output(K var1, V var2); + + @Override + public boolean hasNext() { + return this.keyIterator.hasNext() || this.valueIterator.hasNext(); + } + + @Override + public T next() { + if (!this.valueIterator.hasNext()) { + Map.Entry mapEntry = this.keyIterator.next(); + this.key = mapEntry.getKey(); + this.collection = mapEntry.getValue(); + this.valueIterator = this.collection.iterator(); + } + return this.output(this.key, this.valueIterator.next()); + } + + @Override + public void remove() { + this.valueIterator.remove(); + if (this.collection.isEmpty()) { + this.keyIterator.remove(); + } + AbstractMapBasedMultimap.this.totalSize--; + } + } + + @GwtIncompatible(value="NavigableSet") + class NavigableKeySet + extends SortedKeySet + implements NavigableSet { + NavigableKeySet(NavigableMap> subMap) { + super(subMap); + } + + NavigableMap> sortedMap() { + return (NavigableMap)super.sortedMap(); + } + + @Override + public K lower(K k) { + return this.sortedMap().lowerKey(k); + } + + @Override + public K floor(K k) { + return this.sortedMap().floorKey(k); + } + + @Override + public K ceiling(K k) { + return this.sortedMap().ceilingKey(k); + } + + @Override + public K higher(K k) { + return this.sortedMap().higherKey(k); + } + + @Override + public K pollFirst() { + return Iterators.pollNext(this.iterator()); + } + + @Override + public K pollLast() { + return Iterators.pollNext(this.descendingIterator()); + } + + @Override + public NavigableSet descendingSet() { + return new NavigableKeySet(this.sortedMap().descendingMap()); + } + + @Override + public Iterator descendingIterator() { + return this.descendingSet().iterator(); + } + + @Override + public NavigableSet headSet(K toElement) { + return this.headSet((K)toElement, false); + } + + @Override + public NavigableSet headSet(K toElement, boolean inclusive) { + return new NavigableKeySet(this.sortedMap().headMap(toElement, inclusive)); + } + + @Override + public NavigableSet subSet(K fromElement, K toElement) { + return this.subSet((K)fromElement, true, (K)toElement, false); + } + + @Override + public NavigableSet subSet(K fromElement, boolean fromInclusive, K toElement, boolean toInclusive) { + return new NavigableKeySet(this.sortedMap().subMap(fromElement, fromInclusive, toElement, toInclusive)); + } + + @Override + public NavigableSet tailSet(K fromElement) { + return this.tailSet((K)fromElement, true); + } + + @Override + public NavigableSet tailSet(K fromElement, boolean inclusive) { + return new NavigableKeySet(this.sortedMap().tailMap(fromElement, inclusive)); + } + } + + private class SortedKeySet + extends KeySet + implements SortedSet { + SortedKeySet(SortedMap> subMap) { + super(subMap); + } + + SortedMap> sortedMap() { + return (SortedMap)super.map(); + } + + @Override + public Comparator comparator() { + return this.sortedMap().comparator(); + } + + @Override + public K first() { + return this.sortedMap().firstKey(); + } + + @Override + public SortedSet headSet(K toElement) { + return new SortedKeySet(this.sortedMap().headMap(toElement)); + } + + @Override + public K last() { + return this.sortedMap().lastKey(); + } + + @Override + public SortedSet subSet(K fromElement, K toElement) { + return new SortedKeySet(this.sortedMap().subMap(fromElement, toElement)); + } + + @Override + public SortedSet tailSet(K fromElement) { + return new SortedKeySet(this.sortedMap().tailMap(fromElement)); + } + } + + private class KeySet + extends Maps.KeySet> { + KeySet(Map> subMap) { + super(subMap); + } + + @Override + public Iterator iterator() { + final Iterator entryIterator = this.map().entrySet().iterator(); + return new Iterator(){ + Map.Entry> entry; + + @Override + public boolean hasNext() { + return entryIterator.hasNext(); + } + + @Override + public K next() { + this.entry = (Map.Entry)entryIterator.next(); + return this.entry.getKey(); + } + + @Override + public void remove() { + CollectPreconditions.checkRemove(this.entry != null); + Collection collection = this.entry.getValue(); + entryIterator.remove(); + AbstractMapBasedMultimap.this.totalSize -= collection.size(); + collection.clear(); + } + }; + } + + @Override + public boolean remove(Object key) { + int count = 0; + Collection collection = (Collection)this.map().remove(key); + if (collection != null) { + count = collection.size(); + collection.clear(); + AbstractMapBasedMultimap.this.totalSize -= count; + } + return count > 0; + } + + @Override + public void clear() { + Iterators.clear(this.iterator()); + } + + @Override + public boolean containsAll(Collection c) { + return this.map().keySet().containsAll(c); + } + + @Override + public boolean equals(@Nullable Object object) { + return this == object || this.map().keySet().equals(object); + } + + @Override + public int hashCode() { + return this.map().keySet().hashCode(); + } + } + + private class RandomAccessWrappedList + extends WrappedList + implements RandomAccess { + RandomAccessWrappedList(K key, @Nullable List delegate, WrappedCollection ancestor) { + super(key, delegate, ancestor); + } + } + + private class WrappedList + extends WrappedCollection + implements List { + WrappedList(K key, @Nullable List delegate, WrappedCollection ancestor) { + super(key, delegate, ancestor); + } + + List getListDelegate() { + return (List)this.getDelegate(); + } + + @Override + public boolean addAll(int index, Collection c) { + if (c.isEmpty()) { + return false; + } + int oldSize = this.size(); + boolean changed = this.getListDelegate().addAll(index, c); + if (changed) { + int newSize = this.getDelegate().size(); + AbstractMapBasedMultimap.this.totalSize += newSize - oldSize; + if (oldSize == 0) { + this.addToMap(); + } + } + return changed; + } + + @Override + public V get(int index) { + this.refreshIfEmpty(); + return this.getListDelegate().get(index); + } + + @Override + public V set(int index, V element) { + this.refreshIfEmpty(); + return this.getListDelegate().set(index, element); + } + + @Override + public void add(int index, V element) { + this.refreshIfEmpty(); + boolean wasEmpty = this.getDelegate().isEmpty(); + this.getListDelegate().add(index, element); + AbstractMapBasedMultimap.this.totalSize++; + if (wasEmpty) { + this.addToMap(); + } + } + + @Override + public V remove(int index) { + this.refreshIfEmpty(); + Object value = this.getListDelegate().remove(index); + AbstractMapBasedMultimap.this.totalSize--; + this.removeIfEmpty(); + return value; + } + + @Override + public int indexOf(Object o) { + this.refreshIfEmpty(); + return this.getListDelegate().indexOf(o); + } + + @Override + public int lastIndexOf(Object o) { + this.refreshIfEmpty(); + return this.getListDelegate().lastIndexOf(o); + } + + @Override + public ListIterator listIterator() { + this.refreshIfEmpty(); + return new WrappedListIterator(); + } + + @Override + public ListIterator listIterator(int index) { + this.refreshIfEmpty(); + return new WrappedListIterator(index); + } + + @Override + public List subList(int fromIndex, int toIndex) { + this.refreshIfEmpty(); + return AbstractMapBasedMultimap.this.wrapList(this.getKey(), this.getListDelegate().subList(fromIndex, toIndex), this.getAncestor() == null ? this : this.getAncestor()); + } + + /* + * Signature claims super is com.google.common.collect.AbstractMapBasedMultimap$WrappedCollection.WrappedIterator, not com.google.common.collect.AbstractMapBasedMultimap$WrappedCollection$WrappedIterator - discarding signature. + */ + private class WrappedListIterator + extends WrappedCollection.WrappedIterator + implements ListIterator { + WrappedListIterator() { + } + + public WrappedListIterator(int index) { + super(WrappedList.this.getListDelegate().listIterator(index)); + } + + private ListIterator getDelegateListIterator() { + return (ListIterator)this.getDelegateIterator(); + } + + @Override + public boolean hasPrevious() { + return this.getDelegateListIterator().hasPrevious(); + } + + public V previous() { + return this.getDelegateListIterator().previous(); + } + + @Override + public int nextIndex() { + return this.getDelegateListIterator().nextIndex(); + } + + @Override + public int previousIndex() { + return this.getDelegateListIterator().previousIndex(); + } + + public void set(V value) { + this.getDelegateListIterator().set(value); + } + + public void add(V value) { + boolean wasEmpty = WrappedList.this.isEmpty(); + this.getDelegateListIterator().add(value); + AbstractMapBasedMultimap.this.totalSize++; + if (wasEmpty) { + WrappedList.this.addToMap(); + } + } + } + } + + @GwtIncompatible(value="NavigableSet") + class WrappedNavigableSet + extends WrappedSortedSet + implements NavigableSet { + WrappedNavigableSet(K key, @Nullable NavigableSet delegate, WrappedCollection ancestor) { + super(key, delegate, ancestor); + } + + NavigableSet getSortedSetDelegate() { + return (NavigableSet)super.getSortedSetDelegate(); + } + + @Override + public V lower(V v) { + return this.getSortedSetDelegate().lower(v); + } + + @Override + public V floor(V v) { + return this.getSortedSetDelegate().floor(v); + } + + @Override + public V ceiling(V v) { + return this.getSortedSetDelegate().ceiling(v); + } + + @Override + public V higher(V v) { + return this.getSortedSetDelegate().higher(v); + } + + @Override + public V pollFirst() { + return Iterators.pollNext(this.iterator()); + } + + @Override + public V pollLast() { + return Iterators.pollNext(this.descendingIterator()); + } + + private NavigableSet wrap(NavigableSet wrapped) { + return new WrappedNavigableSet(this.key, wrapped, this.getAncestor() == null ? this : this.getAncestor()); + } + + @Override + public NavigableSet descendingSet() { + return this.wrap(this.getSortedSetDelegate().descendingSet()); + } + + @Override + public Iterator descendingIterator() { + return new WrappedCollection.WrappedIterator(this.getSortedSetDelegate().descendingIterator()); + } + + @Override + public NavigableSet subSet(V fromElement, boolean fromInclusive, V toElement, boolean toInclusive) { + return this.wrap(this.getSortedSetDelegate().subSet(fromElement, fromInclusive, toElement, toInclusive)); + } + + @Override + public NavigableSet headSet(V toElement, boolean inclusive) { + return this.wrap(this.getSortedSetDelegate().headSet(toElement, inclusive)); + } + + @Override + public NavigableSet tailSet(V fromElement, boolean inclusive) { + return this.wrap(this.getSortedSetDelegate().tailSet(fromElement, inclusive)); + } + } + + private class WrappedSortedSet + extends WrappedCollection + implements SortedSet { + WrappedSortedSet(K key, @Nullable SortedSet delegate, WrappedCollection ancestor) { + super(key, delegate, ancestor); + } + + SortedSet getSortedSetDelegate() { + return (SortedSet)this.getDelegate(); + } + + @Override + public Comparator comparator() { + return this.getSortedSetDelegate().comparator(); + } + + @Override + public V first() { + this.refreshIfEmpty(); + return this.getSortedSetDelegate().first(); + } + + @Override + public V last() { + this.refreshIfEmpty(); + return this.getSortedSetDelegate().last(); + } + + @Override + public SortedSet headSet(V toElement) { + this.refreshIfEmpty(); + return new WrappedSortedSet(this.getKey(), this.getSortedSetDelegate().headSet(toElement), this.getAncestor() == null ? this : this.getAncestor()); + } + + @Override + public SortedSet subSet(V fromElement, V toElement) { + this.refreshIfEmpty(); + return new WrappedSortedSet(this.getKey(), this.getSortedSetDelegate().subSet(fromElement, toElement), this.getAncestor() == null ? this : this.getAncestor()); + } + + @Override + public SortedSet tailSet(V fromElement) { + this.refreshIfEmpty(); + return new WrappedSortedSet(this.getKey(), this.getSortedSetDelegate().tailSet(fromElement), this.getAncestor() == null ? this : this.getAncestor()); + } + } + + private class WrappedSet + extends WrappedCollection + implements Set { + WrappedSet(K key, Set delegate) { + super(key, delegate, null); + } + + @Override + public boolean removeAll(Collection c) { + if (c.isEmpty()) { + return false; + } + int oldSize = this.size(); + boolean changed = Sets.removeAllImpl((Set)this.delegate, c); + if (changed) { + int newSize = this.delegate.size(); + AbstractMapBasedMultimap.this.totalSize += newSize - oldSize; + this.removeIfEmpty(); + } + return changed; + } + } + + private class WrappedCollection + extends AbstractCollection { + final K key; + Collection delegate; + final WrappedCollection ancestor; + final Collection ancestorDelegate; + + WrappedCollection(K key, @Nullable Collection delegate, WrappedCollection ancestor) { + this.key = key; + this.delegate = delegate; + this.ancestor = ancestor; + this.ancestorDelegate = ancestor == null ? null : ancestor.getDelegate(); + } + + void refreshIfEmpty() { + Collection newDelegate; + if (this.ancestor != null) { + this.ancestor.refreshIfEmpty(); + if (this.ancestor.getDelegate() != this.ancestorDelegate) { + throw new ConcurrentModificationException(); + } + } else if (this.delegate.isEmpty() && (newDelegate = (Collection)AbstractMapBasedMultimap.this.map.get(this.key)) != null) { + this.delegate = newDelegate; + } + } + + void removeIfEmpty() { + if (this.ancestor != null) { + this.ancestor.removeIfEmpty(); + } else if (this.delegate.isEmpty()) { + AbstractMapBasedMultimap.this.map.remove(this.key); + } + } + + K getKey() { + return this.key; + } + + void addToMap() { + if (this.ancestor != null) { + this.ancestor.addToMap(); + } else { + AbstractMapBasedMultimap.this.map.put(this.key, this.delegate); + } + } + + @Override + public int size() { + this.refreshIfEmpty(); + return this.delegate.size(); + } + + @Override + public boolean equals(@Nullable Object object) { + if (object == this) { + return true; + } + this.refreshIfEmpty(); + return this.delegate.equals(object); + } + + @Override + public int hashCode() { + this.refreshIfEmpty(); + return this.delegate.hashCode(); + } + + @Override + public String toString() { + this.refreshIfEmpty(); + return this.delegate.toString(); + } + + Collection getDelegate() { + return this.delegate; + } + + @Override + public Iterator iterator() { + this.refreshIfEmpty(); + return new WrappedIterator(); + } + + @Override + public boolean add(V value) { + this.refreshIfEmpty(); + boolean wasEmpty = this.delegate.isEmpty(); + boolean changed = this.delegate.add(value); + if (changed) { + AbstractMapBasedMultimap.this.totalSize++; + if (wasEmpty) { + this.addToMap(); + } + } + return changed; + } + + WrappedCollection getAncestor() { + return this.ancestor; + } + + @Override + public boolean addAll(Collection collection) { + if (collection.isEmpty()) { + return false; + } + int oldSize = this.size(); + boolean changed = this.delegate.addAll(collection); + if (changed) { + int newSize = this.delegate.size(); + AbstractMapBasedMultimap.this.totalSize += newSize - oldSize; + if (oldSize == 0) { + this.addToMap(); + } + } + return changed; + } + + @Override + public boolean contains(Object o) { + this.refreshIfEmpty(); + return this.delegate.contains(o); + } + + @Override + public boolean containsAll(Collection c) { + this.refreshIfEmpty(); + return this.delegate.containsAll(c); + } + + @Override + public void clear() { + int oldSize = this.size(); + if (oldSize == 0) { + return; + } + this.delegate.clear(); + AbstractMapBasedMultimap.this.totalSize -= oldSize; + this.removeIfEmpty(); + } + + @Override + public boolean remove(Object o) { + this.refreshIfEmpty(); + boolean changed = this.delegate.remove(o); + if (changed) { + AbstractMapBasedMultimap.this.totalSize--; + this.removeIfEmpty(); + } + return changed; + } + + @Override + public boolean removeAll(Collection c) { + if (c.isEmpty()) { + return false; + } + int oldSize = this.size(); + boolean changed = this.delegate.removeAll(c); + if (changed) { + int newSize = this.delegate.size(); + AbstractMapBasedMultimap.this.totalSize += newSize - oldSize; + this.removeIfEmpty(); + } + return changed; + } + + @Override + public boolean retainAll(Collection c) { + Preconditions.checkNotNull(c); + int oldSize = this.size(); + boolean changed = this.delegate.retainAll(c); + if (changed) { + int newSize = this.delegate.size(); + AbstractMapBasedMultimap.this.totalSize += newSize - oldSize; + this.removeIfEmpty(); + } + return changed; + } + + class WrappedIterator + implements Iterator { + final Iterator delegateIterator; + final Collection originalDelegate; + + WrappedIterator() { + this.originalDelegate = WrappedCollection.this.delegate; + this.delegateIterator = AbstractMapBasedMultimap.this.iteratorOrListIterator(WrappedCollection.this.delegate); + } + + WrappedIterator(Iterator delegateIterator) { + this.originalDelegate = WrappedCollection.this.delegate; + this.delegateIterator = delegateIterator; + } + + void validateIterator() { + WrappedCollection.this.refreshIfEmpty(); + if (WrappedCollection.this.delegate != this.originalDelegate) { + throw new ConcurrentModificationException(); + } + } + + @Override + public boolean hasNext() { + this.validateIterator(); + return this.delegateIterator.hasNext(); + } + + @Override + public V next() { + this.validateIterator(); + return this.delegateIterator.next(); + } + + @Override + public void remove() { + this.delegateIterator.remove(); + AbstractMapBasedMultimap.this.totalSize--; + WrappedCollection.this.removeIfEmpty(); + } + + Iterator getDelegateIterator() { + this.validateIterator(); + return this.delegateIterator; + } + } + } +} diff --git a/src/com/google/common/collect/AbstractMapBasedMultiset.java b/src/com/google/common/collect/AbstractMapBasedMultiset.java new file mode 100644 index 0000000..2efd32e --- /dev/null +++ b/src/com/google/common/collect/AbstractMapBasedMultiset.java @@ -0,0 +1,237 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.GwtCompatible; +import com.google.common.annotations.GwtIncompatible; +import com.google.common.base.Preconditions; +import com.google.common.collect.AbstractMultiset; +import com.google.common.collect.CollectPreconditions; +import com.google.common.collect.Count; +import com.google.common.collect.Maps; +import com.google.common.collect.Multiset; +import com.google.common.collect.Multisets; +import com.google.common.primitives.Ints; +import java.io.InvalidObjectException; +import java.io.ObjectStreamException; +import java.io.Serializable; +import java.util.ConcurrentModificationException; +import java.util.Iterator; +import java.util.Map; +import java.util.Set; +import javax.annotation.Nullable; + +@GwtCompatible(emulated=true) +abstract class AbstractMapBasedMultiset +extends AbstractMultiset +implements Serializable { + private transient Map backingMap; + private transient long size; + @GwtIncompatible(value="not needed in emulated source.") + private static final long serialVersionUID = -2250766705698539974L; + + protected AbstractMapBasedMultiset(Map backingMap) { + this.backingMap = Preconditions.checkNotNull(backingMap); + this.size = super.size(); + } + + void setBackingMap(Map backingMap) { + this.backingMap = backingMap; + } + + @Override + public Set> entrySet() { + return super.entrySet(); + } + + @Override + Iterator> entryIterator() { + final Iterator> backingEntries = this.backingMap.entrySet().iterator(); + return new Iterator>(){ + Map.Entry toRemove; + + @Override + public boolean hasNext() { + return backingEntries.hasNext(); + } + + @Override + public Multiset.Entry next() { + Map.Entry mapEntry; + this.toRemove = mapEntry = (Map.Entry)backingEntries.next(); + return new Multisets.AbstractEntry(){ + + @Override + public E getElement() { + return mapEntry.getKey(); + } + + @Override + public int getCount() { + Count frequency; + Count count = (Count)mapEntry.getValue(); + if ((count == null || count.get() == 0) && (frequency = (Count)AbstractMapBasedMultiset.this.backingMap.get(this.getElement())) != null) { + return frequency.get(); + } + return count == null ? 0 : count.get(); + } + }; + } + + @Override + public void remove() { + CollectPreconditions.checkRemove(this.toRemove != null); + AbstractMapBasedMultiset.this.size -= this.toRemove.getValue().getAndSet(0); + backingEntries.remove(); + this.toRemove = null; + } + }; + } + + @Override + public void clear() { + for (Count frequency : this.backingMap.values()) { + frequency.set(0); + } + this.backingMap.clear(); + this.size = 0L; + } + + @Override + int distinctElements() { + return this.backingMap.size(); + } + + @Override + public int size() { + return Ints.saturatedCast(this.size); + } + + @Override + public Iterator iterator() { + return new MapBasedMultisetIterator(); + } + + @Override + public int count(@Nullable Object element) { + Count frequency = Maps.safeGet(this.backingMap, element); + return frequency == null ? 0 : frequency.get(); + } + + @Override + public int add(@Nullable E element, int occurrences) { + int oldCount; + if (occurrences == 0) { + return this.count(element); + } + Preconditions.checkArgument(occurrences > 0, "occurrences cannot be negative: %s", occurrences); + Count frequency = this.backingMap.get(element); + if (frequency == null) { + oldCount = 0; + this.backingMap.put(element, new Count(occurrences)); + } else { + oldCount = frequency.get(); + long newCount = (long)oldCount + (long)occurrences; + Preconditions.checkArgument(newCount <= Integer.MAX_VALUE, "too many occurrences: %s", newCount); + frequency.getAndAdd(occurrences); + } + this.size += (long)occurrences; + return oldCount; + } + + @Override + public int remove(@Nullable Object element, int occurrences) { + int numberRemoved; + if (occurrences == 0) { + return this.count(element); + } + Preconditions.checkArgument(occurrences > 0, "occurrences cannot be negative: %s", occurrences); + Count frequency = this.backingMap.get(element); + if (frequency == null) { + return 0; + } + int oldCount = frequency.get(); + if (oldCount > occurrences) { + numberRemoved = occurrences; + } else { + numberRemoved = oldCount; + this.backingMap.remove(element); + } + frequency.addAndGet(-numberRemoved); + this.size -= (long)numberRemoved; + return oldCount; + } + + @Override + public int setCount(@Nullable E element, int count) { + int oldCount; + CollectPreconditions.checkNonnegative(count, "count"); + if (count == 0) { + Count existingCounter = this.backingMap.remove(element); + oldCount = AbstractMapBasedMultiset.getAndSet(existingCounter, count); + } else { + Count existingCounter = this.backingMap.get(element); + oldCount = AbstractMapBasedMultiset.getAndSet(existingCounter, count); + if (existingCounter == null) { + this.backingMap.put(element, new Count(count)); + } + } + this.size += (long)(count - oldCount); + return oldCount; + } + + private static int getAndSet(Count i, int count) { + if (i == null) { + return 0; + } + return i.getAndSet(count); + } + + @GwtIncompatible(value="java.io.ObjectStreamException") + private void readObjectNoData() throws ObjectStreamException { + throw new InvalidObjectException("Stream data required"); + } + + private class MapBasedMultisetIterator + implements Iterator { + final Iterator> entryIterator; + Map.Entry currentEntry; + int occurrencesLeft; + boolean canRemove; + + MapBasedMultisetIterator() { + this.entryIterator = AbstractMapBasedMultiset.this.backingMap.entrySet().iterator(); + } + + @Override + public boolean hasNext() { + return this.occurrencesLeft > 0 || this.entryIterator.hasNext(); + } + + @Override + public E next() { + if (this.occurrencesLeft == 0) { + this.currentEntry = this.entryIterator.next(); + this.occurrencesLeft = this.currentEntry.getValue().get(); + } + --this.occurrencesLeft; + this.canRemove = true; + return this.currentEntry.getKey(); + } + + @Override + public void remove() { + CollectPreconditions.checkRemove(this.canRemove); + int frequency = this.currentEntry.getValue().get(); + if (frequency <= 0) { + throw new ConcurrentModificationException(); + } + if (this.currentEntry.getValue().addAndGet(-1) == 0) { + this.entryIterator.remove(); + } + AbstractMapBasedMultiset.this.size--; + this.canRemove = false; + } + } +} diff --git a/src/com/google/common/collect/AbstractMapEntry.java b/src/com/google/common/collect/AbstractMapEntry.java new file mode 100644 index 0000000..2626d74 --- /dev/null +++ b/src/com/google/common/collect/AbstractMapEntry.java @@ -0,0 +1,49 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.GwtCompatible; +import com.google.common.base.Objects; +import java.util.Map; +import javax.annotation.Nullable; + +@GwtCompatible +abstract class AbstractMapEntry +implements Map.Entry { + AbstractMapEntry() { + } + + @Override + public abstract K getKey(); + + @Override + public abstract V getValue(); + + @Override + public V setValue(V value) { + throw new UnsupportedOperationException(); + } + + @Override + public boolean equals(@Nullable Object object) { + if (object instanceof Map.Entry) { + Map.Entry that = (Map.Entry)object; + return Objects.equal(this.getKey(), that.getKey()) && Objects.equal(this.getValue(), that.getValue()); + } + return false; + } + + @Override + public int hashCode() { + K k = this.getKey(); + V v = this.getValue(); + return (k == null ? 0 : k.hashCode()) ^ (v == null ? 0 : v.hashCode()); + } + + public String toString() { + String string = String.valueOf(String.valueOf(this.getKey())); + String string2 = String.valueOf(String.valueOf(this.getValue())); + return new StringBuilder(1 + string.length() + string2.length()).append(string).append("=").append(string2).toString(); + } +} diff --git a/src/com/google/common/collect/AbstractMultimap.java b/src/com/google/common/collect/AbstractMultimap.java new file mode 100644 index 0000000..8f8d0ac --- /dev/null +++ b/src/com/google/common/collect/AbstractMultimap.java @@ -0,0 +1,222 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.GwtCompatible; +import com.google.common.base.Preconditions; +import com.google.common.collect.Iterators; +import com.google.common.collect.Maps; +import com.google.common.collect.Multimap; +import com.google.common.collect.Multimaps; +import com.google.common.collect.Multiset; +import com.google.common.collect.SetMultimap; +import com.google.common.collect.Sets; +import java.util.AbstractCollection; +import java.util.Collection; +import java.util.Iterator; +import java.util.Map; +import java.util.Set; +import javax.annotation.Nullable; + +@GwtCompatible +abstract class AbstractMultimap +implements Multimap { + private transient Collection> entries; + private transient Set keySet; + private transient Multiset keys; + private transient Collection values; + private transient Map> asMap; + + AbstractMultimap() { + } + + @Override + public boolean isEmpty() { + return this.size() == 0; + } + + @Override + public boolean containsValue(@Nullable Object value) { + for (Collection collection : this.asMap().values()) { + if (!collection.contains(value)) continue; + return true; + } + return false; + } + + @Override + public boolean containsEntry(@Nullable Object key, @Nullable Object value) { + Collection collection = this.asMap().get(key); + return collection != null && collection.contains(value); + } + + @Override + public boolean remove(@Nullable Object key, @Nullable Object value) { + Collection collection = this.asMap().get(key); + return collection != null && collection.remove(value); + } + + @Override + public boolean put(@Nullable K key, @Nullable V value) { + return this.get(key).add(value); + } + + @Override + public boolean putAll(@Nullable K key, Iterable values) { + Preconditions.checkNotNull(values); + if (values instanceof Collection) { + Collection valueCollection = (Collection)values; + return !valueCollection.isEmpty() && this.get(key).addAll(valueCollection); + } + Iterator valueItr = values.iterator(); + return valueItr.hasNext() && Iterators.addAll(this.get(key), valueItr); + } + + @Override + public boolean putAll(Multimap multimap) { + boolean changed = false; + for (Map.Entry entry : multimap.entries()) { + changed |= this.put(entry.getKey(), entry.getValue()); + } + return changed; + } + + @Override + public Collection replaceValues(@Nullable K key, Iterable values) { + Preconditions.checkNotNull(values); + Collection result = this.removeAll(key); + this.putAll(key, values); + return result; + } + + @Override + public Collection> entries() { + Collection> result = this.entries; + return result == null ? (this.entries = this.createEntries()) : result; + } + + Collection> createEntries() { + if (this instanceof SetMultimap) { + return new EntrySet(); + } + return new Entries(); + } + + abstract Iterator> entryIterator(); + + @Override + public Set keySet() { + Set result = this.keySet; + return result == null ? (this.keySet = this.createKeySet()) : result; + } + + Set createKeySet() { + return new Maps.KeySet>(this.asMap()); + } + + @Override + public Multiset keys() { + Multiset result = this.keys; + return result == null ? (this.keys = this.createKeys()) : result; + } + + Multiset createKeys() { + return new Multimaps.Keys(this); + } + + @Override + public Collection values() { + Collection result = this.values; + return result == null ? (this.values = this.createValues()) : result; + } + + Collection createValues() { + return new Values(); + } + + Iterator valueIterator() { + return Maps.valueIterator(this.entries().iterator()); + } + + @Override + public Map> asMap() { + Map>> result = this.asMap; + return result == null ? (this.asMap = this.createAsMap()) : result; + } + + abstract Map> createAsMap(); + + @Override + public boolean equals(@Nullable Object object) { + return Multimaps.equalsImpl(this, object); + } + + @Override + public int hashCode() { + return this.asMap().hashCode(); + } + + public String toString() { + return this.asMap().toString(); + } + + class Values + extends AbstractCollection { + Values() { + } + + @Override + public Iterator iterator() { + return AbstractMultimap.this.valueIterator(); + } + + @Override + public int size() { + return AbstractMultimap.this.size(); + } + + @Override + public boolean contains(@Nullable Object o) { + return AbstractMultimap.this.containsValue(o); + } + + @Override + public void clear() { + AbstractMultimap.this.clear(); + } + } + + private class EntrySet + extends Entries + implements Set> { + private EntrySet() { + } + + @Override + public int hashCode() { + return Sets.hashCodeImpl(this); + } + + @Override + public boolean equals(@Nullable Object obj) { + return Sets.equalsImpl(this, obj); + } + } + + private class Entries + extends Multimaps.Entries { + private Entries() { + } + + @Override + Multimap multimap() { + return AbstractMultimap.this; + } + + @Override + public Iterator> iterator() { + return AbstractMultimap.this.entryIterator(); + } + } +} diff --git a/src/com/google/common/collect/AbstractMultiset.java b/src/com/google/common/collect/AbstractMultiset.java new file mode 100644 index 0000000..7f51672 --- /dev/null +++ b/src/com/google/common/collect/AbstractMultiset.java @@ -0,0 +1,183 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.GwtCompatible; +import com.google.common.base.Objects; +import com.google.common.collect.Iterators; +import com.google.common.collect.Multiset; +import com.google.common.collect.Multisets; +import java.util.AbstractCollection; +import java.util.Collection; +import java.util.Iterator; +import java.util.Set; +import javax.annotation.Nullable; + +@GwtCompatible +abstract class AbstractMultiset +extends AbstractCollection +implements Multiset { + private transient Set elementSet; + private transient Set> entrySet; + + AbstractMultiset() { + } + + @Override + public int size() { + return Multisets.sizeImpl(this); + } + + @Override + public boolean isEmpty() { + return this.entrySet().isEmpty(); + } + + @Override + public boolean contains(@Nullable Object element) { + return this.count(element) > 0; + } + + @Override + public Iterator iterator() { + return Multisets.iteratorImpl(this); + } + + @Override + public int count(@Nullable Object element) { + for (Multiset.Entry entry : this.entrySet()) { + if (!Objects.equal(entry.getElement(), element)) continue; + return entry.getCount(); + } + return 0; + } + + @Override + public boolean add(@Nullable E element) { + this.add(element, 1); + return true; + } + + @Override + public int add(@Nullable E element, int occurrences) { + throw new UnsupportedOperationException(); + } + + @Override + public boolean remove(@Nullable Object element) { + return this.remove(element, 1) > 0; + } + + @Override + public int remove(@Nullable Object element, int occurrences) { + throw new UnsupportedOperationException(); + } + + @Override + public int setCount(@Nullable E element, int count) { + return Multisets.setCountImpl(this, element, count); + } + + @Override + public boolean setCount(@Nullable E element, int oldCount, int newCount) { + return Multisets.setCountImpl(this, element, oldCount, newCount); + } + + @Override + public boolean addAll(Collection elementsToAdd) { + return Multisets.addAllImpl(this, elementsToAdd); + } + + @Override + public boolean removeAll(Collection elementsToRemove) { + return Multisets.removeAllImpl(this, elementsToRemove); + } + + @Override + public boolean retainAll(Collection elementsToRetain) { + return Multisets.retainAllImpl(this, elementsToRetain); + } + + @Override + public void clear() { + Iterators.clear(this.entryIterator()); + } + + @Override + public Set elementSet() { + Set result = this.elementSet; + if (result == null) { + this.elementSet = result = this.createElementSet(); + } + return result; + } + + Set createElementSet() { + return new ElementSet(); + } + + abstract Iterator> entryIterator(); + + abstract int distinctElements(); + + @Override + public Set> entrySet() { + Set>> result = this.entrySet; + if (result == null) { + this.entrySet = result = this.createEntrySet(); + } + return result; + } + + Set> createEntrySet() { + return new EntrySet(); + } + + @Override + public boolean equals(@Nullable Object object) { + return Multisets.equalsImpl(this, object); + } + + @Override + public int hashCode() { + return this.entrySet().hashCode(); + } + + @Override + public String toString() { + return this.entrySet().toString(); + } + + class EntrySet + extends Multisets.EntrySet { + EntrySet() { + } + + @Override + Multiset multiset() { + return AbstractMultiset.this; + } + + @Override + public Iterator> iterator() { + return AbstractMultiset.this.entryIterator(); + } + + @Override + public int size() { + return AbstractMultiset.this.distinctElements(); + } + } + + class ElementSet + extends Multisets.ElementSet { + ElementSet() { + } + + @Override + Multiset multiset() { + return AbstractMultiset.this; + } + } +} diff --git a/src/com/google/common/collect/AbstractNavigableMap.java b/src/com/google/common/collect/AbstractNavigableMap.java new file mode 100644 index 0000000..b608561 --- /dev/null +++ b/src/com/google/common/collect/AbstractNavigableMap.java @@ -0,0 +1,187 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.collect.Iterators; +import com.google.common.collect.Maps; +import java.util.AbstractMap; +import java.util.Iterator; +import java.util.Map; +import java.util.NavigableMap; +import java.util.NavigableSet; +import java.util.NoSuchElementException; +import java.util.Set; +import java.util.SortedMap; +import javax.annotation.Nullable; + +abstract class AbstractNavigableMap +extends AbstractMap +implements NavigableMap { + AbstractNavigableMap() { + } + + @Override + @Nullable + public abstract V get(@Nullable Object var1); + + @Override + @Nullable + public Map.Entry firstEntry() { + return Iterators.getNext(this.entryIterator(), null); + } + + @Override + @Nullable + public Map.Entry lastEntry() { + return Iterators.getNext(this.descendingEntryIterator(), null); + } + + @Override + @Nullable + public Map.Entry pollFirstEntry() { + return Iterators.pollNext(this.entryIterator()); + } + + @Override + @Nullable + public Map.Entry pollLastEntry() { + return Iterators.pollNext(this.descendingEntryIterator()); + } + + @Override + public K firstKey() { + Map.Entry entry = this.firstEntry(); + if (entry == null) { + throw new NoSuchElementException(); + } + return entry.getKey(); + } + + @Override + public K lastKey() { + Map.Entry entry = this.lastEntry(); + if (entry == null) { + throw new NoSuchElementException(); + } + return entry.getKey(); + } + + @Override + @Nullable + public Map.Entry lowerEntry(K key) { + return this.headMap(key, false).lastEntry(); + } + + @Override + @Nullable + public Map.Entry floorEntry(K key) { + return this.headMap(key, true).lastEntry(); + } + + @Override + @Nullable + public Map.Entry ceilingEntry(K key) { + return this.tailMap(key, true).firstEntry(); + } + + @Override + @Nullable + public Map.Entry higherEntry(K key) { + return this.tailMap(key, false).firstEntry(); + } + + @Override + public K lowerKey(K key) { + return Maps.keyOrNull(this.lowerEntry(key)); + } + + @Override + public K floorKey(K key) { + return Maps.keyOrNull(this.floorEntry(key)); + } + + @Override + public K ceilingKey(K key) { + return Maps.keyOrNull(this.ceilingEntry(key)); + } + + @Override + public K higherKey(K key) { + return Maps.keyOrNull(this.higherEntry(key)); + } + + abstract Iterator> entryIterator(); + + abstract Iterator> descendingEntryIterator(); + + @Override + public SortedMap subMap(K fromKey, K toKey) { + return this.subMap(fromKey, true, toKey, false); + } + + @Override + public SortedMap headMap(K toKey) { + return this.headMap(toKey, false); + } + + @Override + public SortedMap tailMap(K fromKey) { + return this.tailMap(fromKey, true); + } + + @Override + public NavigableSet navigableKeySet() { + return new Maps.NavigableKeySet(this); + } + + @Override + public Set keySet() { + return this.navigableKeySet(); + } + + @Override + public abstract int size(); + + @Override + public Set> entrySet() { + return new Maps.EntrySet(){ + + @Override + Map map() { + return AbstractNavigableMap.this; + } + + @Override + public Iterator> iterator() { + return AbstractNavigableMap.this.entryIterator(); + } + }; + } + + @Override + public NavigableSet descendingKeySet() { + return this.descendingMap().navigableKeySet(); + } + + @Override + public NavigableMap descendingMap() { + return new DescendingMap(); + } + + private final class DescendingMap + extends Maps.DescendingMap { + private DescendingMap() { + } + + @Override + NavigableMap forward() { + return AbstractNavigableMap.this; + } + + @Override + Iterator> entryIterator() { + return AbstractNavigableMap.this.descendingEntryIterator(); + } + } +} diff --git a/src/com/google/common/collect/AbstractRangeSet.java b/src/com/google/common/collect/AbstractRangeSet.java new file mode 100644 index 0000000..e574a9f --- /dev/null +++ b/src/com/google/common/collect/AbstractRangeSet.java @@ -0,0 +1,90 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.collect.Range; +import com.google.common.collect.RangeSet; +import javax.annotation.Nullable; + +abstract class AbstractRangeSet +implements RangeSet { + AbstractRangeSet() { + } + + @Override + public boolean contains(C value) { + return this.rangeContaining(value) != null; + } + + @Override + public abstract Range rangeContaining(C var1); + + @Override + public boolean isEmpty() { + return this.asRanges().isEmpty(); + } + + @Override + public void add(Range range) { + throw new UnsupportedOperationException(); + } + + @Override + public void remove(Range range) { + throw new UnsupportedOperationException(); + } + + @Override + public void clear() { + this.remove(Range.all()); + } + + @Override + public boolean enclosesAll(RangeSet other) { + for (Range range : other.asRanges()) { + if (this.encloses(range)) continue; + return false; + } + return true; + } + + @Override + public void addAll(RangeSet other) { + for (Range range : other.asRanges()) { + this.add(range); + } + } + + @Override + public void removeAll(RangeSet other) { + for (Range range : other.asRanges()) { + this.remove(range); + } + } + + @Override + public abstract boolean encloses(Range var1); + + @Override + public boolean equals(@Nullable Object obj) { + if (obj == this) { + return true; + } + if (obj instanceof RangeSet) { + RangeSet other = (RangeSet)obj; + return this.asRanges().equals(other.asRanges()); + } + return false; + } + + @Override + public final int hashCode() { + return this.asRanges().hashCode(); + } + + @Override + public final String toString() { + return this.asRanges().toString(); + } +} diff --git a/src/com/google/common/collect/AbstractSequentialIterator.java b/src/com/google/common/collect/AbstractSequentialIterator.java new file mode 100644 index 0000000..8d027fa --- /dev/null +++ b/src/com/google/common/collect/AbstractSequentialIterator.java @@ -0,0 +1,43 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.GwtCompatible; +import com.google.common.collect.UnmodifiableIterator; +import java.util.NoSuchElementException; +import javax.annotation.Nullable; + +@GwtCompatible +public abstract class AbstractSequentialIterator +extends UnmodifiableIterator { + private T nextOrNull; + + protected AbstractSequentialIterator(@Nullable T firstOrNull) { + this.nextOrNull = firstOrNull; + } + + protected abstract T computeNext(T var1); + + @Override + public final boolean hasNext() { + return this.nextOrNull != null; + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public final T next() { + if (!this.hasNext()) { + throw new NoSuchElementException(); + } + try { + T t = this.nextOrNull; + return t; + } + finally { + this.nextOrNull = this.computeNext(this.nextOrNull); + } + } +} diff --git a/src/com/google/common/collect/AbstractSetMultimap.java b/src/com/google/common/collect/AbstractSetMultimap.java new file mode 100644 index 0000000..aaa6d7b --- /dev/null +++ b/src/com/google/common/collect/AbstractSetMultimap.java @@ -0,0 +1,67 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.GwtCompatible; +import com.google.common.collect.AbstractMapBasedMultimap; +import com.google.common.collect.ImmutableSet; +import com.google.common.collect.SetMultimap; +import java.util.Collection; +import java.util.Map; +import java.util.Set; +import javax.annotation.Nullable; + +@GwtCompatible +abstract class AbstractSetMultimap +extends AbstractMapBasedMultimap +implements SetMultimap { + private static final long serialVersionUID = 7431625294878419160L; + + protected AbstractSetMultimap(Map> map) { + super(map); + } + + @Override + abstract Set createCollection(); + + @Override + Set createUnmodifiableEmptyCollection() { + return ImmutableSet.of(); + } + + @Override + public Set get(@Nullable K key) { + return (Set)super.get(key); + } + + @Override + public Set> entries() { + return (Set)super.entries(); + } + + @Override + public Set removeAll(@Nullable Object key) { + return (Set)super.removeAll(key); + } + + @Override + public Set replaceValues(@Nullable K key, Iterable values) { + return (Set)super.replaceValues(key, values); + } + + @Override + public Map> asMap() { + return super.asMap(); + } + + @Override + public boolean put(@Nullable K key, @Nullable V value) { + return super.put(key, value); + } + + @Override + public boolean equals(@Nullable Object object) { + return super.equals(object); + } +} diff --git a/src/com/google/common/collect/AbstractSortedKeySortedSetMultimap.java b/src/com/google/common/collect/AbstractSortedKeySortedSetMultimap.java new file mode 100644 index 0000000..f264eb4 --- /dev/null +++ b/src/com/google/common/collect/AbstractSortedKeySortedSetMultimap.java @@ -0,0 +1,33 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.GwtCompatible; +import com.google.common.collect.AbstractSortedSetMultimap; +import java.util.Collection; +import java.util.SortedMap; +import java.util.SortedSet; + +@GwtCompatible +abstract class AbstractSortedKeySortedSetMultimap +extends AbstractSortedSetMultimap { + AbstractSortedKeySortedSetMultimap(SortedMap> map) { + super(map); + } + + @Override + public SortedMap> asMap() { + return (SortedMap)super.asMap(); + } + + @Override + SortedMap> backingMap() { + return (SortedMap)super.backingMap(); + } + + @Override + public SortedSet keySet() { + return (SortedSet)super.keySet(); + } +} diff --git a/src/com/google/common/collect/AbstractSortedMultiset.java b/src/com/google/common/collect/AbstractSortedMultiset.java new file mode 100644 index 0000000..8ee29fb --- /dev/null +++ b/src/com/google/common/collect/AbstractSortedMultiset.java @@ -0,0 +1,127 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.GwtCompatible; +import com.google.common.base.Preconditions; +import com.google.common.collect.AbstractMultiset; +import com.google.common.collect.BoundType; +import com.google.common.collect.DescendingMultiset; +import com.google.common.collect.GwtTransient; +import com.google.common.collect.Multiset; +import com.google.common.collect.Multisets; +import com.google.common.collect.Ordering; +import com.google.common.collect.SortedMultiset; +import com.google.common.collect.SortedMultisets; +import java.util.Comparator; +import java.util.Iterator; +import java.util.NavigableSet; +import javax.annotation.Nullable; + +@GwtCompatible(emulated=true) +abstract class AbstractSortedMultiset +extends AbstractMultiset +implements SortedMultiset { + @GwtTransient + final Comparator comparator; + private transient SortedMultiset descendingMultiset; + + AbstractSortedMultiset() { + this(Ordering.natural()); + } + + AbstractSortedMultiset(Comparator comparator) { + this.comparator = Preconditions.checkNotNull(comparator); + } + + @Override + public NavigableSet elementSet() { + return (NavigableSet)super.elementSet(); + } + + @Override + NavigableSet createElementSet() { + return new SortedMultisets.NavigableElementSet(this); + } + + @Override + public Comparator comparator() { + return this.comparator; + } + + @Override + public Multiset.Entry firstEntry() { + Iterator entryIterator = this.entryIterator(); + return entryIterator.hasNext() ? entryIterator.next() : null; + } + + @Override + public Multiset.Entry lastEntry() { + Iterator> entryIterator = this.descendingEntryIterator(); + return entryIterator.hasNext() ? entryIterator.next() : null; + } + + @Override + public Multiset.Entry pollFirstEntry() { + Iterator entryIterator = this.entryIterator(); + if (entryIterator.hasNext()) { + Multiset.Entry result = entryIterator.next(); + result = Multisets.immutableEntry(result.getElement(), result.getCount()); + entryIterator.remove(); + return result; + } + return null; + } + + @Override + public Multiset.Entry pollLastEntry() { + Iterator> entryIterator = this.descendingEntryIterator(); + if (entryIterator.hasNext()) { + Multiset.Entry result = entryIterator.next(); + result = Multisets.immutableEntry(result.getElement(), result.getCount()); + entryIterator.remove(); + return result; + } + return null; + } + + @Override + public SortedMultiset subMultiset(@Nullable E fromElement, BoundType fromBoundType, @Nullable E toElement, BoundType toBoundType) { + Preconditions.checkNotNull(fromBoundType); + Preconditions.checkNotNull(toBoundType); + return this.tailMultiset(fromElement, fromBoundType).headMultiset(toElement, toBoundType); + } + + abstract Iterator> descendingEntryIterator(); + + Iterator descendingIterator() { + return Multisets.iteratorImpl(this.descendingMultiset()); + } + + @Override + public SortedMultiset descendingMultiset() { + SortedMultiset result = this.descendingMultiset; + return result == null ? (this.descendingMultiset = this.createDescendingMultiset()) : result; + } + + SortedMultiset createDescendingMultiset() { + return new DescendingMultiset(){ + + @Override + SortedMultiset forwardMultiset() { + return AbstractSortedMultiset.this; + } + + @Override + Iterator> entryIterator() { + return AbstractSortedMultiset.this.descendingEntryIterator(); + } + + @Override + public Iterator iterator() { + return AbstractSortedMultiset.this.descendingIterator(); + } + }; + } +} diff --git a/src/com/google/common/collect/AbstractSortedSetMultimap.java b/src/com/google/common/collect/AbstractSortedSetMultimap.java new file mode 100644 index 0000000..b6ff1d7 --- /dev/null +++ b/src/com/google/common/collect/AbstractSortedSetMultimap.java @@ -0,0 +1,63 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.GwtCompatible; +import com.google.common.collect.AbstractSetMultimap; +import com.google.common.collect.ImmutableSortedSet; +import com.google.common.collect.SortedSetMultimap; +import java.util.Collection; +import java.util.Collections; +import java.util.Comparator; +import java.util.Map; +import java.util.SortedSet; +import javax.annotation.Nullable; + +@GwtCompatible +abstract class AbstractSortedSetMultimap +extends AbstractSetMultimap +implements SortedSetMultimap { + private static final long serialVersionUID = 430848587173315748L; + + protected AbstractSortedSetMultimap(Map> map) { + super(map); + } + + @Override + abstract SortedSet createCollection(); + + @Override + SortedSet createUnmodifiableEmptyCollection() { + Comparator comparator = this.valueComparator(); + if (comparator == null) { + return Collections.unmodifiableSortedSet(this.createCollection()); + } + return ImmutableSortedSet.emptySet(this.valueComparator()); + } + + @Override + public SortedSet get(@Nullable K key) { + return (SortedSet)super.get((Object)key); + } + + @Override + public SortedSet removeAll(@Nullable Object key) { + return (SortedSet)super.removeAll(key); + } + + @Override + public SortedSet replaceValues(@Nullable K key, Iterable values) { + return (SortedSet)super.replaceValues((Object)key, (Iterable)values); + } + + @Override + public Map> asMap() { + return super.asMap(); + } + + @Override + public Collection values() { + return super.values(); + } +} diff --git a/src/com/google/common/collect/AbstractTable.java b/src/com/google/common/collect/AbstractTable.java new file mode 100644 index 0000000..f5c8da1 --- /dev/null +++ b/src/com/google/common/collect/AbstractTable.java @@ -0,0 +1,211 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.GwtCompatible; +import com.google.common.collect.Collections2; +import com.google.common.collect.Iterators; +import com.google.common.collect.Maps; +import com.google.common.collect.Table; +import com.google.common.collect.Tables; +import com.google.common.collect.TransformedIterator; +import java.util.AbstractCollection; +import java.util.AbstractSet; +import java.util.Collection; +import java.util.Iterator; +import java.util.Map; +import java.util.Set; +import javax.annotation.Nullable; + +@GwtCompatible +abstract class AbstractTable +implements Table { + private transient Set> cellSet; + private transient Collection values; + + AbstractTable() { + } + + @Override + public boolean containsRow(@Nullable Object rowKey) { + return Maps.safeContainsKey(this.rowMap(), rowKey); + } + + @Override + public boolean containsColumn(@Nullable Object columnKey) { + return Maps.safeContainsKey(this.columnMap(), columnKey); + } + + @Override + public Set rowKeySet() { + return this.rowMap().keySet(); + } + + @Override + public Set columnKeySet() { + return this.columnMap().keySet(); + } + + @Override + public boolean containsValue(@Nullable Object value) { + for (Map row : this.rowMap().values()) { + if (!row.containsValue(value)) continue; + return true; + } + return false; + } + + @Override + public boolean contains(@Nullable Object rowKey, @Nullable Object columnKey) { + Map row = Maps.safeGet(this.rowMap(), rowKey); + return row != null && Maps.safeContainsKey(row, columnKey); + } + + @Override + public V get(@Nullable Object rowKey, @Nullable Object columnKey) { + Map row = Maps.safeGet(this.rowMap(), rowKey); + return row == null ? null : (V)Maps.safeGet(row, columnKey); + } + + @Override + public boolean isEmpty() { + return this.size() == 0; + } + + @Override + public void clear() { + Iterators.clear(this.cellSet().iterator()); + } + + @Override + public V remove(@Nullable Object rowKey, @Nullable Object columnKey) { + Map row = Maps.safeGet(this.rowMap(), rowKey); + return row == null ? null : (V)Maps.safeRemove(row, columnKey); + } + + @Override + public V put(R rowKey, C columnKey, V value) { + return this.row(rowKey).put(columnKey, value); + } + + @Override + public void putAll(Table table) { + for (Table.Cell cell : table.cellSet()) { + this.put(cell.getRowKey(), cell.getColumnKey(), cell.getValue()); + } + } + + @Override + public Set> cellSet() { + Set> result = this.cellSet; + return result == null ? (this.cellSet = this.createCellSet()) : result; + } + + Set> createCellSet() { + return new CellSet(); + } + + abstract Iterator> cellIterator(); + + @Override + public Collection values() { + Collection result = this.values; + return result == null ? (this.values = this.createValues()) : result; + } + + Collection createValues() { + return new Values(); + } + + Iterator valuesIterator() { + return new TransformedIterator, V>(this.cellSet().iterator()){ + + @Override + V transform(Table.Cell cell) { + return cell.getValue(); + } + }; + } + + @Override + public boolean equals(@Nullable Object obj) { + return Tables.equalsImpl(this, obj); + } + + @Override + public int hashCode() { + return this.cellSet().hashCode(); + } + + public String toString() { + return this.rowMap().toString(); + } + + class Values + extends AbstractCollection { + Values() { + } + + @Override + public Iterator iterator() { + return AbstractTable.this.valuesIterator(); + } + + @Override + public boolean contains(Object o) { + return AbstractTable.this.containsValue(o); + } + + @Override + public void clear() { + AbstractTable.this.clear(); + } + + @Override + public int size() { + return AbstractTable.this.size(); + } + } + + class CellSet + extends AbstractSet> { + CellSet() { + } + + @Override + public boolean contains(Object o) { + if (o instanceof Table.Cell) { + Table.Cell cell = (Table.Cell)o; + Map row = Maps.safeGet(AbstractTable.this.rowMap(), cell.getRowKey()); + return row != null && Collections2.safeContains(row.entrySet(), Maps.immutableEntry(cell.getColumnKey(), cell.getValue())); + } + return false; + } + + @Override + public boolean remove(@Nullable Object o) { + if (o instanceof Table.Cell) { + Table.Cell cell = (Table.Cell)o; + Map row = Maps.safeGet(AbstractTable.this.rowMap(), cell.getRowKey()); + return row != null && Collections2.safeRemove(row.entrySet(), Maps.immutableEntry(cell.getColumnKey(), cell.getValue())); + } + return false; + } + + @Override + public void clear() { + AbstractTable.this.clear(); + } + + @Override + public Iterator> iterator() { + return AbstractTable.this.cellIterator(); + } + + @Override + public int size() { + return AbstractTable.this.size(); + } + } +} diff --git a/src/com/google/common/collect/AllEqualOrdering.java b/src/com/google/common/collect/AllEqualOrdering.java new file mode 100644 index 0000000..cf2db97 --- /dev/null +++ b/src/com/google/common/collect/AllEqualOrdering.java @@ -0,0 +1,51 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.GwtCompatible; +import com.google.common.collect.ImmutableList; +import com.google.common.collect.Lists; +import com.google.common.collect.Ordering; +import java.io.Serializable; +import java.util.List; +import javax.annotation.Nullable; + +@GwtCompatible(serializable=true) +final class AllEqualOrdering +extends Ordering +implements Serializable { + static final AllEqualOrdering INSTANCE = new AllEqualOrdering(); + private static final long serialVersionUID = 0L; + + AllEqualOrdering() { + } + + @Override + public int compare(@Nullable Object left, @Nullable Object right) { + return 0; + } + + @Override + public List sortedCopy(Iterable iterable) { + return Lists.newArrayList(iterable); + } + + @Override + public ImmutableList immutableSortedCopy(Iterable iterable) { + return ImmutableList.copyOf(iterable); + } + + @Override + public Ordering reverse() { + return this; + } + + private Object readResolve() { + return INSTANCE; + } + + public String toString() { + return "Ordering.allEqual()"; + } +} diff --git a/src/com/google/common/collect/ArrayListMultimap.java b/src/com/google/common/collect/ArrayListMultimap.java new file mode 100644 index 0000000..c3960b2 --- /dev/null +++ b/src/com/google/common/collect/ArrayListMultimap.java @@ -0,0 +1,87 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.GwtCompatible; +import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.VisibleForTesting; +import com.google.common.collect.AbstractListMultimap; +import com.google.common.collect.CollectPreconditions; +import com.google.common.collect.Maps; +import com.google.common.collect.Multimap; +import com.google.common.collect.Serialization; +import java.io.IOException; +import java.io.ObjectInputStream; +import java.io.ObjectOutputStream; +import java.util.ArrayList; +import java.util.Collection; +import java.util.HashMap; +import java.util.List; + +@GwtCompatible(serializable=true, emulated=true) +public final class ArrayListMultimap +extends AbstractListMultimap { + private static final int DEFAULT_VALUES_PER_KEY = 3; + @VisibleForTesting + transient int expectedValuesPerKey; + @GwtIncompatible(value="Not needed in emulated source.") + private static final long serialVersionUID = 0L; + + public static ArrayListMultimap create() { + return new ArrayListMultimap(); + } + + public static ArrayListMultimap create(int expectedKeys, int expectedValuesPerKey) { + return new ArrayListMultimap(expectedKeys, expectedValuesPerKey); + } + + public static ArrayListMultimap create(Multimap multimap) { + return new ArrayListMultimap(multimap); + } + + private ArrayListMultimap() { + super(new HashMap()); + this.expectedValuesPerKey = 3; + } + + private ArrayListMultimap(int expectedKeys, int expectedValuesPerKey) { + super(Maps.newHashMapWithExpectedSize(expectedKeys)); + CollectPreconditions.checkNonnegative(expectedValuesPerKey, "expectedValuesPerKey"); + this.expectedValuesPerKey = expectedValuesPerKey; + } + + private ArrayListMultimap(Multimap multimap) { + this(multimap.keySet().size(), multimap instanceof ArrayListMultimap ? ((ArrayListMultimap)multimap).expectedValuesPerKey : 3); + this.putAll((Multimap)multimap); + } + + @Override + List createCollection() { + return new ArrayList(this.expectedValuesPerKey); + } + + public void trimToSize() { + for (Collection collection : this.backingMap().values()) { + ArrayList arrayList = (ArrayList)collection; + arrayList.trimToSize(); + } + } + + @GwtIncompatible(value="java.io.ObjectOutputStream") + private void writeObject(ObjectOutputStream stream) throws IOException { + stream.defaultWriteObject(); + stream.writeInt(this.expectedValuesPerKey); + Serialization.writeMultimap(this, stream); + } + + @GwtIncompatible(value="java.io.ObjectOutputStream") + private void readObject(ObjectInputStream stream) throws IOException, ClassNotFoundException { + stream.defaultReadObject(); + this.expectedValuesPerKey = stream.readInt(); + int distinctKeys = Serialization.readCount(stream); + HashMap map = Maps.newHashMapWithExpectedSize(distinctKeys); + this.setMap(map); + Serialization.populateMultimap(this, stream, distinctKeys); + } +} diff --git a/src/com/google/common/collect/ArrayTable.java b/src/com/google/common/collect/ArrayTable.java new file mode 100644 index 0000000..d302eff --- /dev/null +++ b/src/com/google/common/collect/ArrayTable.java @@ -0,0 +1,503 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.Beta; +import com.google.common.annotations.GwtCompatible; +import com.google.common.annotations.GwtIncompatible; +import com.google.common.base.Objects; +import com.google.common.base.Preconditions; +import com.google.common.collect.AbstractIndexedListIterator; +import com.google.common.collect.AbstractMapEntry; +import com.google.common.collect.AbstractTable; +import com.google.common.collect.ImmutableCollection; +import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableMap; +import com.google.common.collect.ImmutableSet; +import com.google.common.collect.Maps; +import com.google.common.collect.Table; +import com.google.common.collect.Tables; +import java.io.Serializable; +import java.lang.reflect.Array; +import java.util.Arrays; +import java.util.Collection; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Set; +import javax.annotation.Nullable; + +@Beta +@GwtCompatible(emulated=true) +public final class ArrayTable +extends AbstractTable +implements Serializable { + private final ImmutableList rowList; + private final ImmutableList columnList; + private final ImmutableMap rowKeyToIndex; + private final ImmutableMap columnKeyToIndex; + private final V[][] array; + private transient ColumnMap columnMap; + private transient RowMap rowMap; + private static final long serialVersionUID = 0L; + + public static ArrayTable create(Iterable rowKeys, Iterable columnKeys) { + return new ArrayTable(rowKeys, columnKeys); + } + + public static ArrayTable create(Table table) { + return table instanceof ArrayTable ? new ArrayTable((ArrayTable)table) : new ArrayTable(table); + } + + private ArrayTable(Iterable rowKeys, Iterable columnKeys) { + this.rowList = ImmutableList.copyOf(rowKeys); + this.columnList = ImmutableList.copyOf(columnKeys); + Preconditions.checkArgument(!this.rowList.isEmpty()); + Preconditions.checkArgument(!this.columnList.isEmpty()); + this.rowKeyToIndex = ArrayTable.index(this.rowList); + this.columnKeyToIndex = ArrayTable.index(this.columnList); + Object[][] tmpArray = new Object[this.rowList.size()][this.columnList.size()]; + this.array = tmpArray; + this.eraseAll(); + } + + private static ImmutableMap index(List list) { + ImmutableMap.Builder columnBuilder = ImmutableMap.builder(); + for (int i = 0; i < list.size(); ++i) { + columnBuilder.put(list.get(i), i); + } + return columnBuilder.build(); + } + + private ArrayTable(Table table) { + this(table.rowKeySet(), table.columnKeySet()); + this.putAll(table); + } + + private ArrayTable(ArrayTable table) { + this.rowList = table.rowList; + this.columnList = table.columnList; + this.rowKeyToIndex = table.rowKeyToIndex; + this.columnKeyToIndex = table.columnKeyToIndex; + Object[][] copy = new Object[this.rowList.size()][this.columnList.size()]; + this.array = copy; + this.eraseAll(); + for (int i = 0; i < this.rowList.size(); ++i) { + System.arraycopy(table.array[i], 0, copy[i], 0, table.array[i].length); + } + } + + public ImmutableList rowKeyList() { + return this.rowList; + } + + public ImmutableList columnKeyList() { + return this.columnList; + } + + public V at(int rowIndex, int columnIndex) { + Preconditions.checkElementIndex(rowIndex, this.rowList.size()); + Preconditions.checkElementIndex(columnIndex, this.columnList.size()); + return this.array[rowIndex][columnIndex]; + } + + public V set(int rowIndex, int columnIndex, @Nullable V value) { + Preconditions.checkElementIndex(rowIndex, this.rowList.size()); + Preconditions.checkElementIndex(columnIndex, this.columnList.size()); + V oldValue = this.array[rowIndex][columnIndex]; + this.array[rowIndex][columnIndex] = value; + return oldValue; + } + + @GwtIncompatible(value="reflection") + public V[][] toArray(Class valueClass) { + Object[][] copy = (Object[][])Array.newInstance(valueClass, this.rowList.size(), this.columnList.size()); + for (int i = 0; i < this.rowList.size(); ++i) { + System.arraycopy(this.array[i], 0, copy[i], 0, this.array[i].length); + } + return copy; + } + + @Override + @Deprecated + public void clear() { + throw new UnsupportedOperationException(); + } + + public void eraseAll() { + for (Object[] objectArray : this.array) { + Arrays.fill(objectArray, null); + } + } + + @Override + public boolean contains(@Nullable Object rowKey, @Nullable Object columnKey) { + return this.containsRow(rowKey) && this.containsColumn(columnKey); + } + + @Override + public boolean containsColumn(@Nullable Object columnKey) { + return this.columnKeyToIndex.containsKey(columnKey); + } + + @Override + public boolean containsRow(@Nullable Object rowKey) { + return this.rowKeyToIndex.containsKey(rowKey); + } + + @Override + public boolean containsValue(@Nullable Object value) { + V[][] arr$ = this.array; + int len$ = arr$.length; + for (int i$ = 0; i$ < len$; ++i$) { + V[] row; + for (V element : row = arr$[i$]) { + if (!Objects.equal(value, element)) continue; + return true; + } + } + return false; + } + + @Override + public V get(@Nullable Object rowKey, @Nullable Object columnKey) { + Integer rowIndex = this.rowKeyToIndex.get(rowKey); + Integer columnIndex = this.columnKeyToIndex.get(columnKey); + return rowIndex == null || columnIndex == null ? null : (V)this.at(rowIndex, columnIndex); + } + + @Override + public boolean isEmpty() { + return false; + } + + @Override + public V put(R rowKey, C columnKey, @Nullable V value) { + Preconditions.checkNotNull(rowKey); + Preconditions.checkNotNull(columnKey); + Integer rowIndex = this.rowKeyToIndex.get(rowKey); + Preconditions.checkArgument(rowIndex != null, "Row %s not in %s", rowKey, this.rowList); + Integer columnIndex = this.columnKeyToIndex.get(columnKey); + Preconditions.checkArgument(columnIndex != null, "Column %s not in %s", columnKey, this.columnList); + return this.set(rowIndex, columnIndex, value); + } + + @Override + public void putAll(Table table) { + super.putAll(table); + } + + @Override + @Deprecated + public V remove(Object rowKey, Object columnKey) { + throw new UnsupportedOperationException(); + } + + public V erase(@Nullable Object rowKey, @Nullable Object columnKey) { + Integer rowIndex = this.rowKeyToIndex.get(rowKey); + Integer columnIndex = this.columnKeyToIndex.get(columnKey); + if (rowIndex == null || columnIndex == null) { + return null; + } + return this.set(rowIndex, columnIndex, null); + } + + @Override + public int size() { + return this.rowList.size() * this.columnList.size(); + } + + @Override + public Set> cellSet() { + return super.cellSet(); + } + + @Override + Iterator> cellIterator() { + return new AbstractIndexedListIterator>(this.size()){ + + @Override + protected Table.Cell get(final int index) { + return new Tables.AbstractCell(){ + final int rowIndex; + final int columnIndex; + { + this.rowIndex = index / ArrayTable.this.columnList.size(); + this.columnIndex = index % ArrayTable.this.columnList.size(); + } + + @Override + public R getRowKey() { + return ArrayTable.this.rowList.get(this.rowIndex); + } + + @Override + public C getColumnKey() { + return ArrayTable.this.columnList.get(this.columnIndex); + } + + @Override + public V getValue() { + return ArrayTable.this.at(this.rowIndex, this.columnIndex); + } + }; + } + }; + } + + @Override + public Map column(C columnKey) { + Preconditions.checkNotNull(columnKey); + Integer columnIndex = this.columnKeyToIndex.get(columnKey); + return columnIndex == null ? ImmutableMap.of() : new Column(columnIndex); + } + + @Override + public ImmutableSet columnKeySet() { + return this.columnKeyToIndex.keySet(); + } + + @Override + public Map> columnMap() { + ColumnMap map = this.columnMap; + return map == null ? (this.columnMap = new ColumnMap()) : map; + } + + @Override + public Map row(R rowKey) { + Preconditions.checkNotNull(rowKey); + Integer rowIndex = this.rowKeyToIndex.get(rowKey); + return rowIndex == null ? ImmutableMap.of() : new Row(rowIndex); + } + + @Override + public ImmutableSet rowKeySet() { + return this.rowKeyToIndex.keySet(); + } + + @Override + public Map> rowMap() { + RowMap map = this.rowMap; + return map == null ? (this.rowMap = new RowMap()) : map; + } + + @Override + public Collection values() { + return super.values(); + } + + private class RowMap + extends ArrayMap> { + private RowMap() { + super(ArrayTable.this.rowKeyToIndex); + } + + @Override + String getKeyRole() { + return "Row"; + } + + @Override + Map getValue(int index) { + return new Row(index); + } + + @Override + Map setValue(int index, Map newValue) { + throw new UnsupportedOperationException(); + } + + @Override + public Map put(R key, Map value) { + throw new UnsupportedOperationException(); + } + } + + private class Row + extends ArrayMap { + final int rowIndex; + + Row(int rowIndex) { + super(ArrayTable.this.columnKeyToIndex); + this.rowIndex = rowIndex; + } + + @Override + String getKeyRole() { + return "Column"; + } + + @Override + V getValue(int index) { + return ArrayTable.this.at(this.rowIndex, index); + } + + @Override + V setValue(int index, V newValue) { + return ArrayTable.this.set(this.rowIndex, index, newValue); + } + } + + private class ColumnMap + extends ArrayMap> { + private ColumnMap() { + super(ArrayTable.this.columnKeyToIndex); + } + + @Override + String getKeyRole() { + return "Column"; + } + + @Override + Map getValue(int index) { + return new Column(index); + } + + @Override + Map setValue(int index, Map newValue) { + throw new UnsupportedOperationException(); + } + + @Override + public Map put(C key, Map value) { + throw new UnsupportedOperationException(); + } + } + + private class Column + extends ArrayMap { + final int columnIndex; + + Column(int columnIndex) { + super(ArrayTable.this.rowKeyToIndex); + this.columnIndex = columnIndex; + } + + @Override + String getKeyRole() { + return "Row"; + } + + @Override + V getValue(int index) { + return ArrayTable.this.at(index, this.columnIndex); + } + + @Override + V setValue(int index, V newValue) { + return ArrayTable.this.set(index, this.columnIndex, newValue); + } + } + + private static abstract class ArrayMap + extends Maps.ImprovedAbstractMap { + private final ImmutableMap keyIndex; + + private ArrayMap(ImmutableMap keyIndex) { + this.keyIndex = keyIndex; + } + + @Override + public Set keySet() { + return this.keyIndex.keySet(); + } + + K getKey(int index) { + return (K)((ImmutableCollection)((Object)this.keyIndex.keySet())).asList().get(index); + } + + abstract String getKeyRole(); + + @Nullable + abstract V getValue(int var1); + + @Nullable + abstract V setValue(int var1, V var2); + + @Override + public int size() { + return this.keyIndex.size(); + } + + @Override + public boolean isEmpty() { + return this.keyIndex.isEmpty(); + } + + @Override + protected Set> createEntrySet() { + return new Maps.EntrySet(){ + + @Override + Map map() { + return ArrayMap.this; + } + + @Override + public Iterator> iterator() { + return new AbstractIndexedListIterator>(this.size()){ + + @Override + protected Map.Entry get(final int index) { + return new AbstractMapEntry(){ + + @Override + public K getKey() { + return ArrayMap.this.getKey(index); + } + + @Override + public V getValue() { + return ArrayMap.this.getValue(index); + } + + @Override + public V setValue(V value) { + return ArrayMap.this.setValue(index, value); + } + }; + } + }; + } + }; + } + + @Override + public boolean containsKey(@Nullable Object key) { + return this.keyIndex.containsKey(key); + } + + @Override + public V get(@Nullable Object key) { + Integer index = this.keyIndex.get(key); + if (index == null) { + return null; + } + return this.getValue(index); + } + + @Override + public V put(K key, V value) { + Integer index = this.keyIndex.get(key); + if (index == null) { + String string = String.valueOf(String.valueOf(this.getKeyRole())); + String string2 = String.valueOf(String.valueOf(key)); + String string3 = String.valueOf(String.valueOf(this.keyIndex.keySet())); + throw new IllegalArgumentException(new StringBuilder(9 + string.length() + string2.length() + string3.length()).append(string).append(" ").append(string2).append(" not in ").append(string3).toString()); + } + return this.setValue(index, value); + } + + @Override + public V remove(Object key) { + throw new UnsupportedOperationException(); + } + + @Override + public void clear() { + throw new UnsupportedOperationException(); + } + } +} diff --git a/src/com/google/common/collect/BiMap.java b/src/com/google/common/collect/BiMap.java new file mode 100644 index 0000000..748e1d5 --- /dev/null +++ b/src/com/google/common/collect/BiMap.java @@ -0,0 +1,26 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.GwtCompatible; +import java.util.Map; +import java.util.Set; +import javax.annotation.Nullable; + +@GwtCompatible +public interface BiMap +extends Map { + @Override + public V put(@Nullable K var1, @Nullable V var2); + + public V forcePut(@Nullable K var1, @Nullable V var2); + + @Override + public void putAll(Map var1); + + @Override + public Set values(); + + public BiMap inverse(); +} diff --git a/src/com/google/common/collect/BinaryTreeTraverser.java b/src/com/google/common/collect/BinaryTreeTraverser.java new file mode 100644 index 0000000..adfc17c --- /dev/null +++ b/src/com/google/common/collect/BinaryTreeTraverser.java @@ -0,0 +1,174 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.Beta; +import com.google.common.annotations.GwtCompatible; +import com.google.common.base.Optional; +import com.google.common.base.Preconditions; +import com.google.common.collect.AbstractIterator; +import com.google.common.collect.FluentIterable; +import com.google.common.collect.PeekingIterator; +import com.google.common.collect.TreeTraverser; +import com.google.common.collect.UnmodifiableIterator; +import java.util.ArrayDeque; +import java.util.BitSet; +import java.util.Deque; +import java.util.Iterator; + +@Beta +@GwtCompatible(emulated=true) +public abstract class BinaryTreeTraverser +extends TreeTraverser { + public abstract Optional leftChild(T var1); + + public abstract Optional rightChild(T var1); + + @Override + public final Iterable children(final T root) { + Preconditions.checkNotNull(root); + return new FluentIterable(){ + + @Override + public Iterator iterator() { + return new AbstractIterator(){ + boolean doneLeft; + boolean doneRight; + + @Override + protected T computeNext() { + if (!this.doneLeft) { + this.doneLeft = true; + Optional left = BinaryTreeTraverser.this.leftChild(root); + if (left.isPresent()) { + return left.get(); + } + } + if (!this.doneRight) { + this.doneRight = true; + Optional right = BinaryTreeTraverser.this.rightChild(root); + if (right.isPresent()) { + return right.get(); + } + } + return this.endOfData(); + } + }; + } + }; + } + + @Override + UnmodifiableIterator preOrderIterator(T root) { + return new PreOrderIterator(root); + } + + @Override + UnmodifiableIterator postOrderIterator(T root) { + return new PostOrderIterator(root); + } + + public final FluentIterable inOrderTraversal(final T root) { + Preconditions.checkNotNull(root); + return new FluentIterable(){ + + @Override + public UnmodifiableIterator iterator() { + return new InOrderIterator(root); + } + }; + } + + private static void pushIfPresent(Deque stack, Optional node) { + if (node.isPresent()) { + stack.addLast(node.get()); + } + } + + private final class InOrderIterator + extends AbstractIterator { + private final Deque stack = new ArrayDeque(); + private final BitSet hasExpandedLeft = new BitSet(); + + InOrderIterator(T root) { + this.stack.addLast(root); + } + + @Override + protected T computeNext() { + while (!this.stack.isEmpty()) { + Object node = this.stack.getLast(); + if (this.hasExpandedLeft.get(this.stack.size() - 1)) { + this.stack.removeLast(); + this.hasExpandedLeft.clear(this.stack.size()); + BinaryTreeTraverser.pushIfPresent(this.stack, BinaryTreeTraverser.this.rightChild(node)); + return node; + } + this.hasExpandedLeft.set(this.stack.size() - 1); + BinaryTreeTraverser.pushIfPresent(this.stack, BinaryTreeTraverser.this.leftChild(node)); + } + return this.endOfData(); + } + } + + private final class PostOrderIterator + extends UnmodifiableIterator { + private final Deque stack = new ArrayDeque(); + private final BitSet hasExpanded; + + PostOrderIterator(T root) { + this.stack.addLast(root); + this.hasExpanded = new BitSet(); + } + + @Override + public boolean hasNext() { + return !this.stack.isEmpty(); + } + + @Override + public T next() { + while (true) { + Object node = this.stack.getLast(); + boolean expandedNode = this.hasExpanded.get(this.stack.size() - 1); + if (expandedNode) { + this.stack.removeLast(); + this.hasExpanded.clear(this.stack.size()); + return node; + } + this.hasExpanded.set(this.stack.size() - 1); + BinaryTreeTraverser.pushIfPresent(this.stack, BinaryTreeTraverser.this.rightChild(node)); + BinaryTreeTraverser.pushIfPresent(this.stack, BinaryTreeTraverser.this.leftChild(node)); + } + } + } + + private final class PreOrderIterator + extends UnmodifiableIterator + implements PeekingIterator { + private final Deque stack = new ArrayDeque(); + + PreOrderIterator(T root) { + this.stack.addLast(root); + } + + @Override + public boolean hasNext() { + return !this.stack.isEmpty(); + } + + @Override + public T next() { + Object result = this.stack.removeLast(); + BinaryTreeTraverser.pushIfPresent(this.stack, BinaryTreeTraverser.this.rightChild(result)); + BinaryTreeTraverser.pushIfPresent(this.stack, BinaryTreeTraverser.this.leftChild(result)); + return result; + } + + @Override + public T peek() { + return this.stack.getLast(); + } + } +} diff --git a/src/com/google/common/collect/BoundType.java b/src/com/google/common/collect/BoundType.java new file mode 100644 index 0000000..e28fc0c --- /dev/null +++ b/src/com/google/common/collect/BoundType.java @@ -0,0 +1,32 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.GwtCompatible; + +@GwtCompatible +public enum BoundType { + OPEN{ + + @Override + BoundType flip() { + return CLOSED; + } + } + , + CLOSED{ + + @Override + BoundType flip() { + return OPEN; + } + }; + + + static BoundType forBoolean(boolean inclusive) { + return inclusive ? CLOSED : OPEN; + } + + abstract BoundType flip(); +} diff --git a/src/com/google/common/collect/ByFunctionOrdering.java b/src/com/google/common/collect/ByFunctionOrdering.java new file mode 100644 index 0000000..135880e --- /dev/null +++ b/src/com/google/common/collect/ByFunctionOrdering.java @@ -0,0 +1,53 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.GwtCompatible; +import com.google.common.base.Function; +import com.google.common.base.Objects; +import com.google.common.base.Preconditions; +import com.google.common.collect.Ordering; +import java.io.Serializable; +import javax.annotation.Nullable; + +@GwtCompatible(serializable=true) +final class ByFunctionOrdering +extends Ordering +implements Serializable { + final Function function; + final Ordering ordering; + private static final long serialVersionUID = 0L; + + ByFunctionOrdering(Function function, Ordering ordering) { + this.function = Preconditions.checkNotNull(function); + this.ordering = Preconditions.checkNotNull(ordering); + } + + @Override + public int compare(F left, F right) { + return this.ordering.compare(this.function.apply(left), this.function.apply(right)); + } + + @Override + public boolean equals(@Nullable Object object) { + if (object == this) { + return true; + } + if (object instanceof ByFunctionOrdering) { + ByFunctionOrdering that = (ByFunctionOrdering)object; + return this.function.equals(that.function) && this.ordering.equals(that.ordering); + } + return false; + } + + public int hashCode() { + return Objects.hashCode(this.function, this.ordering); + } + + public String toString() { + String string = String.valueOf(String.valueOf(this.ordering)); + String string2 = String.valueOf(String.valueOf(this.function)); + return new StringBuilder(13 + string.length() + string2.length()).append(string).append(".onResultOf(").append(string2).append(")").toString(); + } +} diff --git a/src/com/google/common/collect/CartesianList.java b/src/com/google/common/collect/CartesianList.java new file mode 100644 index 0000000..8d7be2e --- /dev/null +++ b/src/com/google/common/collect/CartesianList.java @@ -0,0 +1,100 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.GwtCompatible; +import com.google.common.base.Preconditions; +import com.google.common.collect.ImmutableList; +import com.google.common.math.IntMath; +import java.util.AbstractList; +import java.util.List; +import java.util.ListIterator; +import java.util.RandomAccess; +import javax.annotation.Nullable; + +@GwtCompatible +final class CartesianList +extends AbstractList> +implements RandomAccess { + private final transient ImmutableList> axes; + private final transient int[] axesSizeProduct; + + static List> create(List> lists) { + ImmutableList.Builder axesBuilder = new ImmutableList.Builder(lists.size()); + for (List list : lists) { + ImmutableList copy = ImmutableList.copyOf(list); + if (copy.isEmpty()) { + return ImmutableList.of(); + } + axesBuilder.add(copy); + } + return new CartesianList(axesBuilder.build()); + } + + CartesianList(ImmutableList> axes) { + this.axes = axes; + int[] axesSizeProduct = new int[axes.size() + 1]; + axesSizeProduct[axes.size()] = 1; + try { + for (int i = axes.size() - 1; i >= 0; --i) { + axesSizeProduct[i] = IntMath.checkedMultiply(axesSizeProduct[i + 1], ((List)axes.get(i)).size()); + } + } + catch (ArithmeticException e) { + throw new IllegalArgumentException("Cartesian product too large; must have size at most Integer.MAX_VALUE"); + } + this.axesSizeProduct = axesSizeProduct; + } + + private int getAxisIndexForProductIndex(int index, int axis) { + return index / this.axesSizeProduct[axis + 1] % ((List)this.axes.get(axis)).size(); + } + + @Override + public ImmutableList get(final int index) { + Preconditions.checkElementIndex(index, this.size()); + return new ImmutableList(){ + + @Override + public int size() { + return CartesianList.this.axes.size(); + } + + @Override + public E get(int axis) { + Preconditions.checkElementIndex(axis, this.size()); + int axisIndex = CartesianList.this.getAxisIndexForProductIndex(index, axis); + return ((List)CartesianList.this.axes.get(axis)).get(axisIndex); + } + + @Override + boolean isPartialView() { + return true; + } + }; + } + + @Override + public int size() { + return this.axesSizeProduct[0]; + } + + @Override + public boolean contains(@Nullable Object o) { + if (!(o instanceof List)) { + return false; + } + List list = (List)o; + if (list.size() != this.axes.size()) { + return false; + } + ListIterator itr = list.listIterator(); + while (itr.hasNext()) { + int index = itr.nextIndex(); + if (((List)this.axes.get(index)).contains(itr.next())) continue; + return false; + } + return true; + } +} diff --git a/src/com/google/common/collect/ClassToInstanceMap.java b/src/com/google/common/collect/ClassToInstanceMap.java new file mode 100644 index 0000000..5810c00 --- /dev/null +++ b/src/com/google/common/collect/ClassToInstanceMap.java @@ -0,0 +1,16 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.GwtCompatible; +import java.util.Map; +import javax.annotation.Nullable; + +@GwtCompatible +public interface ClassToInstanceMap +extends Map, B> { + public T getInstance(Class var1); + + public T putInstance(Class var1, @Nullable T var2); +} diff --git a/src/com/google/common/collect/CollectPreconditions.java b/src/com/google/common/collect/CollectPreconditions.java new file mode 100644 index 0000000..d524b3c --- /dev/null +++ b/src/com/google/common/collect/CollectPreconditions.java @@ -0,0 +1,37 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.GwtCompatible; +import com.google.common.base.Preconditions; + +@GwtCompatible +final class CollectPreconditions { + CollectPreconditions() { + } + + static void checkEntryNotNull(Object key, Object value) { + if (key == null) { + String string = String.valueOf(String.valueOf(value)); + throw new NullPointerException(new StringBuilder(24 + string.length()).append("null key in entry: null=").append(string).toString()); + } + if (value == null) { + String string = String.valueOf(String.valueOf(key)); + throw new NullPointerException(new StringBuilder(26 + string.length()).append("null value in entry: ").append(string).append("=null").toString()); + } + } + + static int checkNonnegative(int value, String name) { + if (value < 0) { + String string = String.valueOf(String.valueOf(name)); + int n = value; + throw new IllegalArgumentException(new StringBuilder(40 + string.length()).append(string).append(" cannot be negative but was: ").append(n).toString()); + } + return value; + } + + static void checkRemove(boolean canRemove) { + Preconditions.checkState(canRemove, "no calls to next() since the last call to remove()"); + } +} diff --git a/src/com/google/common/collect/Collections2.java b/src/com/google/common/collect/Collections2.java new file mode 100644 index 0000000..ba4568e --- /dev/null +++ b/src/com/google/common/collect/Collections2.java @@ -0,0 +1,462 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.Beta; +import com.google.common.annotations.GwtCompatible; +import com.google.common.base.Function; +import com.google.common.base.Joiner; +import com.google.common.base.Preconditions; +import com.google.common.base.Predicate; +import com.google.common.base.Predicates; +import com.google.common.collect.AbstractIterator; +import com.google.common.collect.CollectPreconditions; +import com.google.common.collect.HashMultiset; +import com.google.common.collect.ImmutableList; +import com.google.common.collect.Iterables; +import com.google.common.collect.Iterators; +import com.google.common.collect.Lists; +import com.google.common.collect.Ordering; +import com.google.common.math.IntMath; +import com.google.common.math.LongMath; +import java.util.AbstractCollection; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.Collections; +import java.util.Comparator; +import java.util.Iterator; +import java.util.List; +import javax.annotation.Nullable; + +@GwtCompatible +public final class Collections2 { + static final Joiner STANDARD_JOINER = Joiner.on(", ").useForNull("null"); + + private Collections2() { + } + + public static Collection filter(Collection unfiltered, Predicate predicate) { + if (unfiltered instanceof FilteredCollection) { + return ((FilteredCollection)unfiltered).createCombined(predicate); + } + return new FilteredCollection(Preconditions.checkNotNull(unfiltered), Preconditions.checkNotNull(predicate)); + } + + static boolean safeContains(Collection collection, @Nullable Object object) { + Preconditions.checkNotNull(collection); + try { + return collection.contains(object); + } + catch (ClassCastException e) { + return false; + } + catch (NullPointerException e) { + return false; + } + } + + static boolean safeRemove(Collection collection, @Nullable Object object) { + Preconditions.checkNotNull(collection); + try { + return collection.remove(object); + } + catch (ClassCastException e) { + return false; + } + catch (NullPointerException e) { + return false; + } + } + + public static Collection transform(Collection fromCollection, Function function) { + return new TransformedCollection(fromCollection, function); + } + + static boolean containsAllImpl(Collection self, Collection c) { + return Iterables.all(c, Predicates.in(self)); + } + + static String toStringImpl(final Collection collection) { + StringBuilder sb = Collections2.newStringBuilderForCollection(collection.size()).append('['); + STANDARD_JOINER.appendTo(sb, Iterables.transform(collection, new Function(){ + + @Override + public Object apply(Object input) { + return input == collection ? "(this Collection)" : input; + } + })); + return sb.append(']').toString(); + } + + static StringBuilder newStringBuilderForCollection(int size) { + CollectPreconditions.checkNonnegative(size, "size"); + return new StringBuilder((int)Math.min((long)size * 8L, 0x40000000L)); + } + + static Collection cast(Iterable iterable) { + return (Collection)iterable; + } + + @Beta + public static > Collection> orderedPermutations(Iterable elements) { + return Collections2.orderedPermutations(elements, Ordering.natural()); + } + + @Beta + public static Collection> orderedPermutations(Iterable elements, Comparator comparator) { + return new OrderedPermutationCollection(elements, comparator); + } + + @Beta + public static Collection> permutations(Collection elements) { + return new PermutationCollection(ImmutableList.copyOf(elements)); + } + + private static boolean isPermutation(List first, List second) { + if (first.size() != second.size()) { + return false; + } + HashMultiset firstMultiset = HashMultiset.create(first); + HashMultiset secondMultiset = HashMultiset.create(second); + return firstMultiset.equals(secondMultiset); + } + + private static boolean isPositiveInt(long n) { + return n >= 0L && n <= Integer.MAX_VALUE; + } + + private static class PermutationIterator + extends AbstractIterator> { + final List list; + final int[] c; + final int[] o; + int j; + + PermutationIterator(List list) { + this.list = new ArrayList(list); + int n = list.size(); + this.c = new int[n]; + this.o = new int[n]; + Arrays.fill(this.c, 0); + Arrays.fill(this.o, 1); + this.j = Integer.MAX_VALUE; + } + + @Override + protected List computeNext() { + if (this.j <= 0) { + return (List)this.endOfData(); + } + ImmutableList next = ImmutableList.copyOf(this.list); + this.calculateNextPermutation(); + return next; + } + + void calculateNextPermutation() { + block4: { + int q; + this.j = this.list.size() - 1; + int s = 0; + if (this.j == -1) { + return; + } + while (true) { + if ((q = this.c[this.j] + this.o[this.j]) < 0) { + this.switchDirection(); + continue; + } + if (q != this.j + 1) break; + if (this.j != 0) { + ++s; + this.switchDirection(); + continue; + } + break block4; + break; + } + Collections.swap(this.list, this.j - this.c[this.j] + s, this.j - q + s); + this.c[this.j] = q; + } + } + + void switchDirection() { + this.o[this.j] = -this.o[this.j]; + --this.j; + } + } + + private static final class PermutationCollection + extends AbstractCollection> { + final ImmutableList inputList; + + PermutationCollection(ImmutableList input) { + this.inputList = input; + } + + @Override + public int size() { + return IntMath.factorial(this.inputList.size()); + } + + @Override + public boolean isEmpty() { + return false; + } + + @Override + public Iterator> iterator() { + return new PermutationIterator(this.inputList); + } + + @Override + public boolean contains(@Nullable Object obj) { + if (obj instanceof List) { + List list = (List)obj; + return Collections2.isPermutation(this.inputList, list); + } + return false; + } + + @Override + public String toString() { + String string = String.valueOf(String.valueOf(this.inputList)); + return new StringBuilder(14 + string.length()).append("permutations(").append(string).append(")").toString(); + } + } + + private static final class OrderedPermutationIterator + extends AbstractIterator> { + List nextPermutation; + final Comparator comparator; + + OrderedPermutationIterator(List list, Comparator comparator) { + this.nextPermutation = Lists.newArrayList(list); + this.comparator = comparator; + } + + @Override + protected List computeNext() { + if (this.nextPermutation == null) { + return (List)this.endOfData(); + } + ImmutableList next = ImmutableList.copyOf(this.nextPermutation); + this.calculateNextPermutation(); + return next; + } + + void calculateNextPermutation() { + int j = this.findNextJ(); + if (j == -1) { + this.nextPermutation = null; + return; + } + int l = this.findNextL(j); + Collections.swap(this.nextPermutation, j, l); + int n = this.nextPermutation.size(); + Collections.reverse(this.nextPermutation.subList(j + 1, n)); + } + + int findNextJ() { + for (int k = this.nextPermutation.size() - 2; k >= 0; --k) { + if (this.comparator.compare(this.nextPermutation.get(k), this.nextPermutation.get(k + 1)) >= 0) continue; + return k; + } + return -1; + } + + int findNextL(int j) { + E ak = this.nextPermutation.get(j); + for (int l = this.nextPermutation.size() - 1; l > j; --l) { + if (this.comparator.compare(ak, this.nextPermutation.get(l)) >= 0) continue; + return l; + } + throw new AssertionError((Object)"this statement should be unreachable"); + } + } + + private static final class OrderedPermutationCollection + extends AbstractCollection> { + final ImmutableList inputList; + final Comparator comparator; + final int size; + + OrderedPermutationCollection(Iterable input, Comparator comparator) { + this.inputList = Ordering.from(comparator).immutableSortedCopy(input); + this.comparator = comparator; + this.size = OrderedPermutationCollection.calculateSize(this.inputList, comparator); + } + + private static int calculateSize(List sortedInputList, Comparator comparator) { + long permutations = 1L; + int n = 1; + int r = 1; + while (n < sortedInputList.size()) { + int comparison = comparator.compare(sortedInputList.get(n - 1), sortedInputList.get(n)); + if (comparison < 0) { + permutations *= LongMath.binomial(n, r); + r = 0; + if (!Collections2.isPositiveInt(permutations)) { + return Integer.MAX_VALUE; + } + } + ++n; + ++r; + } + if (!Collections2.isPositiveInt(permutations *= LongMath.binomial(n, r))) { + return Integer.MAX_VALUE; + } + return (int)permutations; + } + + @Override + public int size() { + return this.size; + } + + @Override + public boolean isEmpty() { + return false; + } + + @Override + public Iterator> iterator() { + return new OrderedPermutationIterator(this.inputList, this.comparator); + } + + @Override + public boolean contains(@Nullable Object obj) { + if (obj instanceof List) { + List list = (List)obj; + return Collections2.isPermutation(this.inputList, list); + } + return false; + } + + @Override + public String toString() { + String string = String.valueOf(String.valueOf(this.inputList)); + return new StringBuilder(30 + string.length()).append("orderedPermutationCollection(").append(string).append(")").toString(); + } + } + + static class TransformedCollection + extends AbstractCollection { + final Collection fromCollection; + final Function function; + + TransformedCollection(Collection fromCollection, Function function) { + this.fromCollection = Preconditions.checkNotNull(fromCollection); + this.function = Preconditions.checkNotNull(function); + } + + @Override + public void clear() { + this.fromCollection.clear(); + } + + @Override + public boolean isEmpty() { + return this.fromCollection.isEmpty(); + } + + @Override + public Iterator iterator() { + return Iterators.transform(this.fromCollection.iterator(), this.function); + } + + @Override + public int size() { + return this.fromCollection.size(); + } + } + + static class FilteredCollection + extends AbstractCollection { + final Collection unfiltered; + final Predicate predicate; + + FilteredCollection(Collection unfiltered, Predicate predicate) { + this.unfiltered = unfiltered; + this.predicate = predicate; + } + + FilteredCollection createCombined(Predicate newPredicate) { + return new FilteredCollection(this.unfiltered, Predicates.and(this.predicate, newPredicate)); + } + + @Override + public boolean add(E element) { + Preconditions.checkArgument(this.predicate.apply(element)); + return this.unfiltered.add(element); + } + + @Override + public boolean addAll(Collection collection) { + for (E element : collection) { + Preconditions.checkArgument(this.predicate.apply(element)); + } + return this.unfiltered.addAll(collection); + } + + @Override + public void clear() { + Iterables.removeIf(this.unfiltered, this.predicate); + } + + @Override + public boolean contains(@Nullable Object element) { + if (Collections2.safeContains(this.unfiltered, element)) { + Object e = element; + return this.predicate.apply(e); + } + return false; + } + + @Override + public boolean containsAll(Collection collection) { + return Collections2.containsAllImpl(this, collection); + } + + @Override + public boolean isEmpty() { + return !Iterables.any(this.unfiltered, this.predicate); + } + + @Override + public Iterator iterator() { + return Iterators.filter(this.unfiltered.iterator(), this.predicate); + } + + @Override + public boolean remove(Object element) { + return this.contains(element) && this.unfiltered.remove(element); + } + + @Override + public boolean removeAll(Collection collection) { + return Iterables.removeIf(this.unfiltered, Predicates.and(this.predicate, Predicates.in(collection))); + } + + @Override + public boolean retainAll(Collection collection) { + return Iterables.removeIf(this.unfiltered, Predicates.and(this.predicate, Predicates.not(Predicates.in(collection)))); + } + + @Override + public int size() { + return Iterators.size(this.iterator()); + } + + @Override + public Object[] toArray() { + return Lists.newArrayList(this.iterator()).toArray(); + } + + @Override + public T[] toArray(T[] array) { + return Lists.newArrayList(this.iterator()).toArray(array); + } + } +} diff --git a/src/com/google/common/collect/ComparatorOrdering.java b/src/com/google/common/collect/ComparatorOrdering.java new file mode 100644 index 0000000..ea17e9d --- /dev/null +++ b/src/com/google/common/collect/ComparatorOrdering.java @@ -0,0 +1,48 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.GwtCompatible; +import com.google.common.base.Preconditions; +import com.google.common.collect.Ordering; +import java.io.Serializable; +import java.util.Comparator; +import javax.annotation.Nullable; + +@GwtCompatible(serializable=true) +final class ComparatorOrdering +extends Ordering +implements Serializable { + final Comparator comparator; + private static final long serialVersionUID = 0L; + + ComparatorOrdering(Comparator comparator) { + this.comparator = Preconditions.checkNotNull(comparator); + } + + @Override + public int compare(T a, T b) { + return this.comparator.compare(a, b); + } + + @Override + public boolean equals(@Nullable Object object) { + if (object == this) { + return true; + } + if (object instanceof ComparatorOrdering) { + ComparatorOrdering that = (ComparatorOrdering)object; + return this.comparator.equals(that.comparator); + } + return false; + } + + public int hashCode() { + return this.comparator.hashCode(); + } + + public String toString() { + return this.comparator.toString(); + } +} diff --git a/src/com/google/common/collect/ComparisonChain.java b/src/com/google/common/collect/ComparisonChain.java new file mode 100644 index 0000000..f6916bf --- /dev/null +++ b/src/com/google/common/collect/ComparisonChain.java @@ -0,0 +1,145 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.GwtCompatible; +import com.google.common.primitives.Booleans; +import com.google.common.primitives.Ints; +import com.google.common.primitives.Longs; +import java.util.Comparator; +import javax.annotation.Nullable; + +@GwtCompatible +public abstract class ComparisonChain { + private static final ComparisonChain ACTIVE = new ComparisonChain(){ + + public ComparisonChain compare(Comparable left, Comparable right) { + return this.classify(left.compareTo(right)); + } + + @Override + public ComparisonChain compare(@Nullable T left, @Nullable T right, Comparator comparator) { + return this.classify(comparator.compare(left, right)); + } + + @Override + public ComparisonChain compare(int left, int right) { + return this.classify(Ints.compare(left, right)); + } + + @Override + public ComparisonChain compare(long left, long right) { + return this.classify(Longs.compare(left, right)); + } + + @Override + public ComparisonChain compare(float left, float right) { + return this.classify(Float.compare(left, right)); + } + + @Override + public ComparisonChain compare(double left, double right) { + return this.classify(Double.compare(left, right)); + } + + @Override + public ComparisonChain compareTrueFirst(boolean left, boolean right) { + return this.classify(Booleans.compare(right, left)); + } + + @Override + public ComparisonChain compareFalseFirst(boolean left, boolean right) { + return this.classify(Booleans.compare(left, right)); + } + + ComparisonChain classify(int result) { + return result < 0 ? LESS : (result > 0 ? GREATER : ACTIVE); + } + + @Override + public int result() { + return 0; + } + }; + private static final ComparisonChain LESS = new InactiveComparisonChain(-1); + private static final ComparisonChain GREATER = new InactiveComparisonChain(1); + + private ComparisonChain() { + } + + public static ComparisonChain start() { + return ACTIVE; + } + + public abstract ComparisonChain compare(Comparable var1, Comparable var2); + + public abstract ComparisonChain compare(@Nullable T var1, @Nullable T var2, Comparator var3); + + public abstract ComparisonChain compare(int var1, int var2); + + public abstract ComparisonChain compare(long var1, long var3); + + public abstract ComparisonChain compare(float var1, float var2); + + public abstract ComparisonChain compare(double var1, double var3); + + public abstract ComparisonChain compareTrueFirst(boolean var1, boolean var2); + + public abstract ComparisonChain compareFalseFirst(boolean var1, boolean var2); + + public abstract int result(); + + private static final class InactiveComparisonChain + extends ComparisonChain { + final int result; + + InactiveComparisonChain(int result) { + this.result = result; + } + + public ComparisonChain compare(@Nullable Comparable left, @Nullable Comparable right) { + return this; + } + + @Override + public ComparisonChain compare(@Nullable T left, @Nullable T right, @Nullable Comparator comparator) { + return this; + } + + @Override + public ComparisonChain compare(int left, int right) { + return this; + } + + @Override + public ComparisonChain compare(long left, long right) { + return this; + } + + @Override + public ComparisonChain compare(float left, float right) { + return this; + } + + @Override + public ComparisonChain compare(double left, double right) { + return this; + } + + @Override + public ComparisonChain compareTrueFirst(boolean left, boolean right) { + return this; + } + + @Override + public ComparisonChain compareFalseFirst(boolean left, boolean right) { + return this; + } + + @Override + public int result() { + return this.result; + } + } +} diff --git a/src/com/google/common/collect/CompoundOrdering.java b/src/com/google/common/collect/CompoundOrdering.java new file mode 100644 index 0000000..1f79679 --- /dev/null +++ b/src/com/google/common/collect/CompoundOrdering.java @@ -0,0 +1,58 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.GwtCompatible; +import com.google.common.collect.ImmutableList; +import com.google.common.collect.Ordering; +import java.io.Serializable; +import java.util.Comparator; + +@GwtCompatible(serializable=true) +final class CompoundOrdering +extends Ordering +implements Serializable { + final ImmutableList> comparators; + private static final long serialVersionUID = 0L; + + CompoundOrdering(Comparator primary, Comparator secondary) { + this.comparators = ImmutableList.of(primary, secondary); + } + + CompoundOrdering(Iterable> comparators) { + this.comparators = ImmutableList.copyOf(comparators); + } + + @Override + public int compare(T left, T right) { + int size = this.comparators.size(); + for (int i = 0; i < size; ++i) { + int result = ((Comparator)this.comparators.get(i)).compare(left, right); + if (result == 0) continue; + return result; + } + return 0; + } + + @Override + public boolean equals(Object object) { + if (object == this) { + return true; + } + if (object instanceof CompoundOrdering) { + CompoundOrdering that = (CompoundOrdering)object; + return this.comparators.equals(that.comparators); + } + return false; + } + + public int hashCode() { + return this.comparators.hashCode(); + } + + public String toString() { + String string = String.valueOf(String.valueOf(this.comparators)); + return new StringBuilder(19 + string.length()).append("Ordering.compound(").append(string).append(")").toString(); + } +} diff --git a/src/com/google/common/collect/ComputationException.java b/src/com/google/common/collect/ComputationException.java new file mode 100644 index 0000000..e028ae3 --- /dev/null +++ b/src/com/google/common/collect/ComputationException.java @@ -0,0 +1,17 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.GwtCompatible; +import javax.annotation.Nullable; + +@GwtCompatible +public class ComputationException +extends RuntimeException { + private static final long serialVersionUID = 0L; + + public ComputationException(@Nullable Throwable cause) { + super(cause); + } +} diff --git a/src/com/google/common/collect/ComputingConcurrentHashMap.java b/src/com/google/common/collect/ComputingConcurrentHashMap.java new file mode 100644 index 0000000..1b442d9 --- /dev/null +++ b/src/com/google/common/collect/ComputingConcurrentHashMap.java @@ -0,0 +1,365 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.base.Equivalence; +import com.google.common.base.Function; +import com.google.common.base.Preconditions; +import com.google.common.collect.MapMaker; +import com.google.common.collect.MapMakerInternalMap; +import java.io.IOException; +import java.io.ObjectInputStream; +import java.io.ObjectOutputStream; +import java.lang.ref.ReferenceQueue; +import java.util.concurrent.ConcurrentMap; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.atomic.AtomicReferenceArray; +import javax.annotation.Nullable; +import javax.annotation.concurrent.GuardedBy; + +class ComputingConcurrentHashMap +extends MapMakerInternalMap { + final Function computingFunction; + private static final long serialVersionUID = 4L; + + ComputingConcurrentHashMap(MapMaker builder, Function computingFunction) { + super(builder); + this.computingFunction = Preconditions.checkNotNull(computingFunction); + } + + @Override + MapMakerInternalMap.Segment createSegment(int initialCapacity, int maxSegmentSize) { + return new ComputingSegment(this, initialCapacity, maxSegmentSize); + } + + @Override + ComputingSegment segmentFor(int hash) { + return (ComputingSegment)super.segmentFor(hash); + } + + V getOrCompute(K key) throws ExecutionException { + int hash = this.hash(Preconditions.checkNotNull(key)); + return ((ComputingSegment)this.segmentFor(hash)).getOrCompute(key, hash, this.computingFunction); + } + + @Override + Object writeReplace() { + return new ComputingSerializationProxy(this.keyStrength, this.valueStrength, this.keyEquivalence, this.valueEquivalence, this.expireAfterWriteNanos, this.expireAfterAccessNanos, this.maximumSize, this.concurrencyLevel, this.removalListener, this, this.computingFunction); + } + + static final class ComputingSerializationProxy + extends MapMakerInternalMap.AbstractSerializationProxy { + final Function computingFunction; + private static final long serialVersionUID = 4L; + + ComputingSerializationProxy(MapMakerInternalMap.Strength keyStrength, MapMakerInternalMap.Strength valueStrength, Equivalence keyEquivalence, Equivalence valueEquivalence, long expireAfterWriteNanos, long expireAfterAccessNanos, int maximumSize, int concurrencyLevel, MapMaker.RemovalListener removalListener, ConcurrentMap delegate, Function computingFunction) { + super(keyStrength, valueStrength, keyEquivalence, valueEquivalence, expireAfterWriteNanos, expireAfterAccessNanos, maximumSize, concurrencyLevel, removalListener, delegate); + this.computingFunction = computingFunction; + } + + private void writeObject(ObjectOutputStream out) throws IOException { + out.defaultWriteObject(); + this.writeMapTo(out); + } + + private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException { + in.defaultReadObject(); + MapMaker mapMaker = this.readMapMaker(in); + this.delegate = mapMaker.makeComputingMap(this.computingFunction); + this.readEntries(in); + } + + Object readResolve() { + return this.delegate; + } + } + + private static final class ComputingValueReference + implements MapMakerInternalMap.ValueReference { + final Function computingFunction; + @GuardedBy(value="ComputingValueReference.this") + volatile MapMakerInternalMap.ValueReference computedReference = MapMakerInternalMap.unset(); + + public ComputingValueReference(Function computingFunction) { + this.computingFunction = computingFunction; + } + + @Override + public V get() { + return null; + } + + @Override + public MapMakerInternalMap.ReferenceEntry getEntry() { + return null; + } + + @Override + public MapMakerInternalMap.ValueReference copyFor(ReferenceQueue queue, @Nullable V value, MapMakerInternalMap.ReferenceEntry entry) { + return this; + } + + @Override + public boolean isComputingReference() { + return true; + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public V waitForValue() throws ExecutionException { + if (this.computedReference == MapMakerInternalMap.UNSET) { + boolean interrupted = false; + try { + ComputingValueReference computingValueReference = this; + synchronized (computingValueReference) { + while (this.computedReference == MapMakerInternalMap.UNSET) { + try { + this.wait(); + } + catch (InterruptedException ie) { + interrupted = true; + } + } + } + } + finally { + if (interrupted) { + Thread.currentThread().interrupt(); + } + } + } + return this.computedReference.waitForValue(); + } + + @Override + public void clear(MapMakerInternalMap.ValueReference newValue) { + this.setValueReference(newValue); + } + + V compute(K key, int hash) throws ExecutionException { + V value; + try { + value = this.computingFunction.apply(key); + } + catch (Throwable t) { + this.setValueReference(new ComputationExceptionReference(t)); + throw new ExecutionException(t); + } + this.setValueReference(new ComputedReference(value)); + return value; + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + void setValueReference(MapMakerInternalMap.ValueReference valueReference) { + ComputingValueReference computingValueReference = this; + synchronized (computingValueReference) { + if (this.computedReference == MapMakerInternalMap.UNSET) { + this.computedReference = valueReference; + this.notifyAll(); + } + } + } + } + + private static final class ComputedReference + implements MapMakerInternalMap.ValueReference { + final V value; + + ComputedReference(@Nullable V value) { + this.value = value; + } + + @Override + public V get() { + return this.value; + } + + @Override + public MapMakerInternalMap.ReferenceEntry getEntry() { + return null; + } + + @Override + public MapMakerInternalMap.ValueReference copyFor(ReferenceQueue queue, V value, MapMakerInternalMap.ReferenceEntry entry) { + return this; + } + + @Override + public boolean isComputingReference() { + return false; + } + + @Override + public V waitForValue() { + return this.get(); + } + + @Override + public void clear(MapMakerInternalMap.ValueReference newValue) { + } + } + + private static final class ComputationExceptionReference + implements MapMakerInternalMap.ValueReference { + final Throwable t; + + ComputationExceptionReference(Throwable t) { + this.t = t; + } + + @Override + public V get() { + return null; + } + + @Override + public MapMakerInternalMap.ReferenceEntry getEntry() { + return null; + } + + @Override + public MapMakerInternalMap.ValueReference copyFor(ReferenceQueue queue, V value, MapMakerInternalMap.ReferenceEntry entry) { + return this; + } + + @Override + public boolean isComputingReference() { + return false; + } + + @Override + public V waitForValue() throws ExecutionException { + throw new ExecutionException(this.t); + } + + @Override + public void clear(MapMakerInternalMap.ValueReference newValue) { + } + } + + static final class ComputingSegment + extends MapMakerInternalMap.Segment { + ComputingSegment(MapMakerInternalMap map, int initialCapacity, int maxSegmentSize) { + super(map, initialCapacity, maxSegmentSize); + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + * Enabled aggressive block sorting + * Enabled unnecessary exception pruning + * Enabled aggressive exception aggregation + */ + V getOrCompute(K key, int hash, Function computingFunction) throws ExecutionException { + try { + Object v; + MapMakerInternalMap.ReferenceEntry e; + Object value; + do { + if ((e = this.getEntry(key, hash)) != null && (value = this.getLiveValue(e)) != null) { + this.recordRead(e); + v = value; + return v; + } + if (e == null || !e.getValueReference().isComputingReference()) { + ComputingValueReference computingValueReference; + boolean createNewEntry; + block22: { + createNewEntry = true; + computingValueReference = null; + this.lock(); + try { + MapMakerInternalMap.ReferenceEntry first; + this.preWriteCleanup(); + int newCount = this.count - 1; + AtomicReferenceArray table = this.table; + int index = hash & table.length() - 1; + for (e = first = (MapMakerInternalMap.ReferenceEntry)table.get(index); e != null; e = e.getNext()) { + Object entryKey = e.getKey(); + if (e.getHash() != hash || entryKey == null || !this.map.keyEquivalence.equivalent(key, entryKey)) continue; + MapMakerInternalMap.ValueReference valueReference = e.getValueReference(); + if (valueReference.isComputingReference()) { + createNewEntry = false; + break; + } + Object value2 = e.getValueReference().get(); + if (value2 == null) { + this.enqueueNotification(entryKey, hash, value2, MapMaker.RemovalCause.COLLECTED); + } else if (this.map.expires() && this.map.isExpired(e)) { + this.enqueueNotification(entryKey, hash, value2, MapMaker.RemovalCause.EXPIRED); + } else { + this.recordLockedRead(e); + Object v2 = value2; + return v2; + } + this.evictionQueue.remove(e); + this.expirationQueue.remove(e); + this.count = newCount; + break; + } + if (!createNewEntry) break block22; + computingValueReference = new ComputingValueReference(computingFunction); + if (e == null) { + e = this.newEntry(key, hash, first); + e.setValueReference(computingValueReference); + table.set(index, e); + } else { + e.setValueReference(computingValueReference); + } + } + finally { + this.unlock(); + this.postWriteCleanup(); + } + } + if (createNewEntry) { + V v3 = this.compute(key, hash, e, computingValueReference); + return v3; + } + } + Preconditions.checkState(!Thread.holdsLock(e), "Recursive computation"); + } while ((value = e.getValueReference().waitForValue()) == null); + this.recordRead(e); + v = value; + return v; + } + finally { + this.postReadCleanup(); + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + V compute(K key, int hash, MapMakerInternalMap.ReferenceEntry e, ComputingValueReference computingValueReference) throws ExecutionException { + Object value = null; + long start = System.nanoTime(); + long end = 0L; + try { + Object oldValue; + MapMakerInternalMap.ReferenceEntry referenceEntry = e; + synchronized (referenceEntry) { + value = computingValueReference.compute(key, hash); + end = System.nanoTime(); + } + if (value != null && (oldValue = this.put(key, hash, value, true)) != null) { + this.enqueueNotification(key, hash, value, MapMaker.RemovalCause.REPLACED); + } + referenceEntry = value; + return (V)referenceEntry; + } + finally { + if (end == 0L) { + end = System.nanoTime(); + } + if (value == null) { + this.clearValue(key, hash, computingValueReference); + } + } + } + } +} diff --git a/src/com/google/common/collect/ConcurrentHashMultiset.java b/src/com/google/common/collect/ConcurrentHashMultiset.java new file mode 100644 index 0000000..1dfb007 --- /dev/null +++ b/src/com/google/common/collect/ConcurrentHashMultiset.java @@ -0,0 +1,383 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.Beta; +import com.google.common.annotations.VisibleForTesting; +import com.google.common.base.Preconditions; +import com.google.common.collect.AbstractIterator; +import com.google.common.collect.AbstractMultiset; +import com.google.common.collect.CollectPreconditions; +import com.google.common.collect.Collections2; +import com.google.common.collect.ForwardingIterator; +import com.google.common.collect.ForwardingSet; +import com.google.common.collect.Iterables; +import com.google.common.collect.Iterators; +import com.google.common.collect.Lists; +import com.google.common.collect.MapMaker; +import com.google.common.collect.Maps; +import com.google.common.collect.Multiset; +import com.google.common.collect.Multisets; +import com.google.common.collect.Serialization; +import com.google.common.math.IntMath; +import com.google.common.primitives.Ints; +import java.io.IOException; +import java.io.ObjectInputStream; +import java.io.ObjectOutputStream; +import java.io.Serializable; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ConcurrentMap; +import java.util.concurrent.atomic.AtomicInteger; +import javax.annotation.Nullable; + +public final class ConcurrentHashMultiset +extends AbstractMultiset +implements Serializable { + private final transient ConcurrentMap countMap; + private static final long serialVersionUID = 1L; + + public static ConcurrentHashMultiset create() { + return new ConcurrentHashMultiset(new ConcurrentHashMap()); + } + + public static ConcurrentHashMultiset create(Iterable elements) { + ConcurrentHashMultiset multiset = ConcurrentHashMultiset.create(); + Iterables.addAll(multiset, elements); + return multiset; + } + + @Beta + public static ConcurrentHashMultiset create(MapMaker mapMaker) { + return new ConcurrentHashMultiset(mapMaker.makeMap()); + } + + @VisibleForTesting + ConcurrentHashMultiset(ConcurrentMap countMap) { + Preconditions.checkArgument(countMap.isEmpty()); + this.countMap = countMap; + } + + @Override + public int count(@Nullable Object element) { + AtomicInteger existingCounter = Maps.safeGet(this.countMap, element); + return existingCounter == null ? 0 : existingCounter.get(); + } + + @Override + public int size() { + long sum = 0L; + for (AtomicInteger value : this.countMap.values()) { + sum += (long)value.get(); + } + return Ints.saturatedCast(sum); + } + + @Override + public Object[] toArray() { + return this.snapshot().toArray(); + } + + @Override + public T[] toArray(T[] array) { + return this.snapshot().toArray(array); + } + + private List snapshot() { + ArrayList list = Lists.newArrayListWithExpectedSize(this.size()); + for (Multiset.Entry entry : this.entrySet()) { + Object element = entry.getElement(); + for (int i = entry.getCount(); i > 0; --i) { + list.add(element); + } + } + return list; + } + + @Override + public int add(E element, int occurrences) { + AtomicInteger existingCounter; + AtomicInteger newCounter; + Preconditions.checkNotNull(element); + if (occurrences == 0) { + return this.count(element); + } + Preconditions.checkArgument(occurrences > 0, "Invalid occurrences: %s", occurrences); + do { + int oldValue; + if ((existingCounter = Maps.safeGet(this.countMap, element)) == null && (existingCounter = this.countMap.putIfAbsent(element, new AtomicInteger(occurrences))) == null) { + return 0; + } + while ((oldValue = existingCounter.get()) != 0) { + try { + int newValue = IntMath.checkedAdd(oldValue, occurrences); + if (!existingCounter.compareAndSet(oldValue, newValue)) continue; + return oldValue; + } + catch (ArithmeticException overflow) { + int n = occurrences; + int n2 = oldValue; + throw new IllegalArgumentException(new StringBuilder(65).append("Overflow adding ").append(n).append(" occurrences to a count of ").append(n2).toString()); + } + } + } while (this.countMap.putIfAbsent(element, newCounter = new AtomicInteger(occurrences)) != null && !this.countMap.replace(element, existingCounter, newCounter)); + return 0; + } + + @Override + public int remove(@Nullable Object element, int occurrences) { + int oldValue; + if (occurrences == 0) { + return this.count(element); + } + Preconditions.checkArgument(occurrences > 0, "Invalid occurrences: %s", occurrences); + AtomicInteger existingCounter = Maps.safeGet(this.countMap, element); + if (existingCounter == null) { + return 0; + } + while ((oldValue = existingCounter.get()) != 0) { + int newValue = Math.max(0, oldValue - occurrences); + if (!existingCounter.compareAndSet(oldValue, newValue)) continue; + if (newValue == 0) { + this.countMap.remove(element, existingCounter); + } + return oldValue; + } + return 0; + } + + public boolean removeExactly(@Nullable Object element, int occurrences) { + int newValue; + int oldValue; + if (occurrences == 0) { + return true; + } + Preconditions.checkArgument(occurrences > 0, "Invalid occurrences: %s", occurrences); + AtomicInteger existingCounter = Maps.safeGet(this.countMap, element); + if (existingCounter == null) { + return false; + } + do { + if ((oldValue = existingCounter.get()) >= occurrences) continue; + return false; + } while (!existingCounter.compareAndSet(oldValue, newValue = oldValue - occurrences)); + if (newValue == 0) { + this.countMap.remove(element, existingCounter); + } + return true; + } + + @Override + public int setCount(E element, int count) { + int oldValue; + AtomicInteger existingCounter; + Preconditions.checkNotNull(element); + CollectPreconditions.checkNonnegative(count, "count"); + block0: while (true) { + if ((existingCounter = Maps.safeGet(this.countMap, element)) == null) { + if (count == 0) { + return 0; + } + existingCounter = this.countMap.putIfAbsent(element, new AtomicInteger(count)); + if (existingCounter == null) { + return 0; + } + } + do { + if ((oldValue = existingCounter.get()) != 0) continue; + if (count == 0) { + return 0; + } + AtomicInteger newCounter = new AtomicInteger(count); + if (this.countMap.putIfAbsent(element, newCounter) != null && !this.countMap.replace(element, existingCounter, newCounter)) continue block0; + return 0; + } while (!existingCounter.compareAndSet(oldValue, count)); + break; + } + if (count == 0) { + this.countMap.remove(element, existingCounter); + } + return oldValue; + } + + @Override + public boolean setCount(E element, int expectedOldCount, int newCount) { + Preconditions.checkNotNull(element); + CollectPreconditions.checkNonnegative(expectedOldCount, "oldCount"); + CollectPreconditions.checkNonnegative(newCount, "newCount"); + AtomicInteger existingCounter = Maps.safeGet(this.countMap, element); + if (existingCounter == null) { + if (expectedOldCount != 0) { + return false; + } + if (newCount == 0) { + return true; + } + return this.countMap.putIfAbsent(element, new AtomicInteger(newCount)) == null; + } + int oldValue = existingCounter.get(); + if (oldValue == expectedOldCount) { + if (oldValue == 0) { + if (newCount == 0) { + this.countMap.remove(element, existingCounter); + return true; + } + AtomicInteger newCounter = new AtomicInteger(newCount); + return this.countMap.putIfAbsent(element, newCounter) == null || this.countMap.replace(element, existingCounter, newCounter); + } + if (existingCounter.compareAndSet(oldValue, newCount)) { + if (newCount == 0) { + this.countMap.remove(element, existingCounter); + } + return true; + } + } + return false; + } + + @Override + Set createElementSet() { + final Set delegate = this.countMap.keySet(); + return new ForwardingSet(){ + + @Override + protected Set delegate() { + return delegate; + } + + @Override + public boolean contains(@Nullable Object object) { + return object != null && Collections2.safeContains(delegate, object); + } + + @Override + public boolean containsAll(Collection collection) { + return this.standardContainsAll(collection); + } + + @Override + public boolean remove(Object object) { + return object != null && Collections2.safeRemove(delegate, object); + } + + @Override + public boolean removeAll(Collection c) { + return this.standardRemoveAll(c); + } + }; + } + + @Override + public Set> createEntrySet() { + return new EntrySet(); + } + + @Override + int distinctElements() { + return this.countMap.size(); + } + + @Override + public boolean isEmpty() { + return this.countMap.isEmpty(); + } + + @Override + Iterator> entryIterator() { + final AbstractIterator readOnlyIterator = new AbstractIterator>(){ + private Iterator> mapEntries; + { + this.mapEntries = ConcurrentHashMultiset.this.countMap.entrySet().iterator(); + } + + @Override + protected Multiset.Entry computeNext() { + Map.Entry mapEntry; + int count; + do { + if (this.mapEntries.hasNext()) continue; + return (Multiset.Entry)this.endOfData(); + } while ((count = (mapEntry = this.mapEntries.next()).getValue().get()) == 0); + return Multisets.immutableEntry(mapEntry.getKey(), count); + } + }; + return new ForwardingIterator>(){ + private Multiset.Entry last; + + @Override + protected Iterator> delegate() { + return readOnlyIterator; + } + + @Override + public Multiset.Entry next() { + this.last = (Multiset.Entry)super.next(); + return this.last; + } + + @Override + public void remove() { + CollectPreconditions.checkRemove(this.last != null); + ConcurrentHashMultiset.this.setCount(this.last.getElement(), 0); + this.last = null; + } + }; + } + + @Override + public void clear() { + this.countMap.clear(); + } + + private void writeObject(ObjectOutputStream stream) throws IOException { + stream.defaultWriteObject(); + stream.writeObject(this.countMap); + } + + private void readObject(ObjectInputStream stream) throws IOException, ClassNotFoundException { + stream.defaultReadObject(); + ConcurrentMap deserializedCountMap = (ConcurrentMap)stream.readObject(); + FieldSettersHolder.COUNT_MAP_FIELD_SETTER.set(this, deserializedCountMap); + } + + private class EntrySet + extends AbstractMultiset.EntrySet { + private EntrySet() { + super(ConcurrentHashMultiset.this); + } + + @Override + ConcurrentHashMultiset multiset() { + return ConcurrentHashMultiset.this; + } + + @Override + public Object[] toArray() { + return this.snapshot().toArray(); + } + + @Override + public T[] toArray(T[] array) { + return this.snapshot().toArray(array); + } + + private List> snapshot() { + ArrayList list = Lists.newArrayListWithExpectedSize(this.size()); + Iterators.addAll(list, this.iterator()); + return list; + } + } + + private static class FieldSettersHolder { + static final Serialization.FieldSetter COUNT_MAP_FIELD_SETTER = Serialization.getFieldSetter(ConcurrentHashMultiset.class, "countMap"); + + private FieldSettersHolder() { + } + } +} diff --git a/src/com/google/common/collect/Constraint.java b/src/com/google/common/collect/Constraint.java new file mode 100644 index 0000000..f4325ad --- /dev/null +++ b/src/com/google/common/collect/Constraint.java @@ -0,0 +1,13 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.GwtCompatible; + +@GwtCompatible +interface Constraint { + public E checkElement(E var1); + + public String toString(); +} diff --git a/src/com/google/common/collect/Constraints.java b/src/com/google/common/collect/Constraints.java new file mode 100644 index 0000000..7e56aa6 --- /dev/null +++ b/src/com/google/common/collect/Constraints.java @@ -0,0 +1,260 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.GwtCompatible; +import com.google.common.base.Preconditions; +import com.google.common.collect.Constraint; +import com.google.common.collect.ForwardingCollection; +import com.google.common.collect.ForwardingList; +import com.google.common.collect.ForwardingListIterator; +import com.google.common.collect.ForwardingSet; +import com.google.common.collect.ForwardingSortedSet; +import com.google.common.collect.Lists; +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; +import java.util.ListIterator; +import java.util.RandomAccess; +import java.util.Set; +import java.util.SortedSet; + +@GwtCompatible +final class Constraints { + private Constraints() { + } + + public static Collection constrainedCollection(Collection collection, Constraint constraint) { + return new ConstrainedCollection(collection, constraint); + } + + public static Set constrainedSet(Set set, Constraint constraint) { + return new ConstrainedSet(set, constraint); + } + + public static SortedSet constrainedSortedSet(SortedSet sortedSet, Constraint constraint) { + return new ConstrainedSortedSet(sortedSet, constraint); + } + + public static List constrainedList(List list, Constraint constraint) { + return list instanceof RandomAccess ? new ConstrainedRandomAccessList(list, constraint) : new ConstrainedList(list, constraint); + } + + private static ListIterator constrainedListIterator(ListIterator listIterator, Constraint constraint) { + return new ConstrainedListIterator(listIterator, constraint); + } + + static Collection constrainedTypePreservingCollection(Collection collection, Constraint constraint) { + if (collection instanceof SortedSet) { + return Constraints.constrainedSortedSet((SortedSet)collection, constraint); + } + if (collection instanceof Set) { + return Constraints.constrainedSet((Set)collection, constraint); + } + if (collection instanceof List) { + return Constraints.constrainedList((List)collection, constraint); + } + return Constraints.constrainedCollection(collection, constraint); + } + + private static Collection checkElements(Collection elements, Constraint constraint) { + ArrayList copy = Lists.newArrayList(elements); + for (Object element : copy) { + constraint.checkElement(element); + } + return copy; + } + + static class ConstrainedListIterator + extends ForwardingListIterator { + private final ListIterator delegate; + private final Constraint constraint; + + public ConstrainedListIterator(ListIterator delegate, Constraint constraint) { + this.delegate = delegate; + this.constraint = constraint; + } + + @Override + protected ListIterator delegate() { + return this.delegate; + } + + @Override + public void add(E element) { + this.constraint.checkElement(element); + this.delegate.add(element); + } + + @Override + public void set(E element) { + this.constraint.checkElement(element); + this.delegate.set(element); + } + } + + static class ConstrainedRandomAccessList + extends ConstrainedList + implements RandomAccess { + ConstrainedRandomAccessList(List delegate, Constraint constraint) { + super(delegate, constraint); + } + } + + @GwtCompatible + private static class ConstrainedList + extends ForwardingList { + final List delegate; + final Constraint constraint; + + ConstrainedList(List delegate, Constraint constraint) { + this.delegate = Preconditions.checkNotNull(delegate); + this.constraint = Preconditions.checkNotNull(constraint); + } + + @Override + protected List delegate() { + return this.delegate; + } + + @Override + public boolean add(E element) { + this.constraint.checkElement(element); + return this.delegate.add(element); + } + + @Override + public void add(int index, E element) { + this.constraint.checkElement(element); + this.delegate.add(index, element); + } + + @Override + public boolean addAll(Collection elements) { + return this.delegate.addAll(Constraints.checkElements(elements, this.constraint)); + } + + @Override + public boolean addAll(int index, Collection elements) { + return this.delegate.addAll(index, Constraints.checkElements(elements, this.constraint)); + } + + @Override + public ListIterator listIterator() { + return Constraints.constrainedListIterator(this.delegate.listIterator(), this.constraint); + } + + @Override + public ListIterator listIterator(int index) { + return Constraints.constrainedListIterator(this.delegate.listIterator(index), this.constraint); + } + + @Override + public E set(int index, E element) { + this.constraint.checkElement(element); + return this.delegate.set(index, element); + } + + @Override + public List subList(int fromIndex, int toIndex) { + return Constraints.constrainedList(this.delegate.subList(fromIndex, toIndex), this.constraint); + } + } + + private static class ConstrainedSortedSet + extends ForwardingSortedSet { + final SortedSet delegate; + final Constraint constraint; + + ConstrainedSortedSet(SortedSet delegate, Constraint constraint) { + this.delegate = Preconditions.checkNotNull(delegate); + this.constraint = Preconditions.checkNotNull(constraint); + } + + @Override + protected SortedSet delegate() { + return this.delegate; + } + + @Override + public SortedSet headSet(E toElement) { + return Constraints.constrainedSortedSet(this.delegate.headSet(toElement), this.constraint); + } + + @Override + public SortedSet subSet(E fromElement, E toElement) { + return Constraints.constrainedSortedSet(this.delegate.subSet(fromElement, toElement), this.constraint); + } + + @Override + public SortedSet tailSet(E fromElement) { + return Constraints.constrainedSortedSet(this.delegate.tailSet(fromElement), this.constraint); + } + + @Override + public boolean add(E element) { + this.constraint.checkElement(element); + return this.delegate.add(element); + } + + @Override + public boolean addAll(Collection elements) { + return this.delegate.addAll(Constraints.checkElements(elements, this.constraint)); + } + } + + static class ConstrainedSet + extends ForwardingSet { + private final Set delegate; + private final Constraint constraint; + + public ConstrainedSet(Set delegate, Constraint constraint) { + this.delegate = Preconditions.checkNotNull(delegate); + this.constraint = Preconditions.checkNotNull(constraint); + } + + @Override + protected Set delegate() { + return this.delegate; + } + + @Override + public boolean add(E element) { + this.constraint.checkElement(element); + return this.delegate.add(element); + } + + @Override + public boolean addAll(Collection elements) { + return this.delegate.addAll(Constraints.checkElements(elements, this.constraint)); + } + } + + static class ConstrainedCollection + extends ForwardingCollection { + private final Collection delegate; + private final Constraint constraint; + + public ConstrainedCollection(Collection delegate, Constraint constraint) { + this.delegate = Preconditions.checkNotNull(delegate); + this.constraint = Preconditions.checkNotNull(constraint); + } + + @Override + protected Collection delegate() { + return this.delegate; + } + + @Override + public boolean add(E element) { + this.constraint.checkElement(element); + return this.delegate.add(element); + } + + @Override + public boolean addAll(Collection elements) { + return this.delegate.addAll(Constraints.checkElements(elements, this.constraint)); + } + } +} diff --git a/src/com/google/common/collect/ContiguousSet.java b/src/com/google/common/collect/ContiguousSet.java new file mode 100644 index 0000000..aa09538 --- /dev/null +++ b/src/com/google/common/collect/ContiguousSet.java @@ -0,0 +1,112 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.Beta; +import com.google.common.annotations.GwtCompatible; +import com.google.common.annotations.GwtIncompatible; +import com.google.common.base.Preconditions; +import com.google.common.collect.BoundType; +import com.google.common.collect.DiscreteDomain; +import com.google.common.collect.EmptyContiguousSet; +import com.google.common.collect.ImmutableSortedSet; +import com.google.common.collect.Ordering; +import com.google.common.collect.Range; +import com.google.common.collect.RegularContiguousSet; +import java.util.NoSuchElementException; + +@Beta +@GwtCompatible(emulated=true) +public abstract class ContiguousSet +extends ImmutableSortedSet { + final DiscreteDomain domain; + + public static ContiguousSet create(Range range, DiscreteDomain domain) { + Preconditions.checkNotNull(range); + Preconditions.checkNotNull(domain); + Range effectiveRange = range; + try { + if (!range.hasLowerBound()) { + effectiveRange = effectiveRange.intersection(Range.atLeast(domain.minValue())); + } + if (!range.hasUpperBound()) { + effectiveRange = effectiveRange.intersection(Range.atMost(domain.maxValue())); + } + } + catch (NoSuchElementException e) { + throw new IllegalArgumentException(e); + } + boolean empty = effectiveRange.isEmpty() || Range.compareOrThrow(range.lowerBound.leastValueAbove(domain), range.upperBound.greatestValueBelow(domain)) > 0; + return empty ? new EmptyContiguousSet(domain) : new RegularContiguousSet(effectiveRange, domain); + } + + ContiguousSet(DiscreteDomain domain) { + super(Ordering.natural()); + this.domain = domain; + } + + @Override + public ContiguousSet headSet(C toElement) { + return this.headSetImpl((C)((Comparable)Preconditions.checkNotNull(toElement)), false); + } + + @Override + @GwtIncompatible(value="NavigableSet") + public ContiguousSet headSet(C toElement, boolean inclusive) { + return this.headSetImpl((C)((Comparable)Preconditions.checkNotNull(toElement)), inclusive); + } + + @Override + public ContiguousSet subSet(C fromElement, C toElement) { + Preconditions.checkNotNull(fromElement); + Preconditions.checkNotNull(toElement); + Preconditions.checkArgument(this.comparator().compare(fromElement, toElement) <= 0); + return this.subSetImpl(fromElement, true, toElement, false); + } + + @Override + @GwtIncompatible(value="NavigableSet") + public ContiguousSet subSet(C fromElement, boolean fromInclusive, C toElement, boolean toInclusive) { + Preconditions.checkNotNull(fromElement); + Preconditions.checkNotNull(toElement); + Preconditions.checkArgument(this.comparator().compare(fromElement, toElement) <= 0); + return this.subSetImpl(fromElement, fromInclusive, toElement, toInclusive); + } + + @Override + public ContiguousSet tailSet(C fromElement) { + return this.tailSetImpl((C)((Comparable)Preconditions.checkNotNull(fromElement)), true); + } + + @Override + @GwtIncompatible(value="NavigableSet") + public ContiguousSet tailSet(C fromElement, boolean inclusive) { + return this.tailSetImpl((C)((Comparable)Preconditions.checkNotNull(fromElement)), inclusive); + } + + @Override + abstract ContiguousSet headSetImpl(C var1, boolean var2); + + @Override + abstract ContiguousSet subSetImpl(C var1, boolean var2, C var3, boolean var4); + + @Override + abstract ContiguousSet tailSetImpl(C var1, boolean var2); + + public abstract ContiguousSet intersection(ContiguousSet var1); + + public abstract Range range(); + + public abstract Range range(BoundType var1, BoundType var2); + + @Override + public String toString() { + return this.range().toString(); + } + + @Deprecated + public static ImmutableSortedSet.Builder builder() { + throw new UnsupportedOperationException(); + } +} diff --git a/src/com/google/common/collect/Count.java b/src/com/google/common/collect/Count.java new file mode 100644 index 0000000..c55aafa --- /dev/null +++ b/src/com/google/common/collect/Count.java @@ -0,0 +1,54 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.GwtCompatible; +import java.io.Serializable; +import javax.annotation.Nullable; + +@GwtCompatible +final class Count +implements Serializable { + private int value; + + Count(int value) { + this.value = value; + } + + public int get() { + return this.value; + } + + public int getAndAdd(int delta) { + int result = this.value; + this.value = result + delta; + return result; + } + + public int addAndGet(int delta) { + return this.value += delta; + } + + public void set(int newValue) { + this.value = newValue; + } + + public int getAndSet(int newValue) { + int result = this.value; + this.value = newValue; + return result; + } + + public int hashCode() { + return this.value; + } + + public boolean equals(@Nullable Object obj) { + return obj instanceof Count && ((Count)obj).value == this.value; + } + + public String toString() { + return Integer.toString(this.value); + } +} diff --git a/src/com/google/common/collect/Cut.java b/src/com/google/common/collect/Cut.java new file mode 100644 index 0000000..024234e --- /dev/null +++ b/src/com/google/common/collect/Cut.java @@ -0,0 +1,421 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.GwtCompatible; +import com.google.common.base.Preconditions; +import com.google.common.collect.BoundType; +import com.google.common.collect.DiscreteDomain; +import com.google.common.collect.Range; +import com.google.common.primitives.Booleans; +import java.io.Serializable; +import java.util.NoSuchElementException; +import javax.annotation.Nullable; + +@GwtCompatible +abstract class Cut +implements Comparable>, +Serializable { + final C endpoint; + private static final long serialVersionUID = 0L; + + Cut(@Nullable C endpoint) { + this.endpoint = endpoint; + } + + abstract boolean isLessThan(C var1); + + abstract BoundType typeAsLowerBound(); + + abstract BoundType typeAsUpperBound(); + + abstract Cut withLowerBoundType(BoundType var1, DiscreteDomain var2); + + abstract Cut withUpperBoundType(BoundType var1, DiscreteDomain var2); + + abstract void describeAsLowerBound(StringBuilder var1); + + abstract void describeAsUpperBound(StringBuilder var1); + + abstract C leastValueAbove(DiscreteDomain var1); + + abstract C greatestValueBelow(DiscreteDomain var1); + + Cut canonical(DiscreteDomain domain) { + return this; + } + + @Override + public int compareTo(Cut that) { + if (that == Cut.belowAll()) { + return 1; + } + if (that == Cut.aboveAll()) { + return -1; + } + int result = Range.compareOrThrow(this.endpoint, that.endpoint); + if (result != 0) { + return result; + } + return Booleans.compare(this instanceof AboveValue, that instanceof AboveValue); + } + + C endpoint() { + return this.endpoint; + } + + public boolean equals(Object obj) { + if (obj instanceof Cut) { + Cut that = (Cut)obj; + try { + int compareResult = this.compareTo(that); + return compareResult == 0; + } + catch (ClassCastException classCastException) { + // empty catch block + } + } + return false; + } + + static Cut belowAll() { + return BelowAll.INSTANCE; + } + + static Cut aboveAll() { + return AboveAll.INSTANCE; + } + + static Cut belowValue(C endpoint) { + return new BelowValue(endpoint); + } + + static Cut aboveValue(C endpoint) { + return new AboveValue(endpoint); + } + + private static final class AboveValue + extends Cut { + private static final long serialVersionUID = 0L; + + AboveValue(C endpoint) { + super((Comparable)Preconditions.checkNotNull(endpoint)); + } + + @Override + boolean isLessThan(C value) { + return Range.compareOrThrow(this.endpoint, value) < 0; + } + + @Override + BoundType typeAsLowerBound() { + return BoundType.OPEN; + } + + @Override + BoundType typeAsUpperBound() { + return BoundType.CLOSED; + } + + @Override + Cut withLowerBoundType(BoundType boundType, DiscreteDomain domain) { + switch (boundType) { + case OPEN: { + return this; + } + case CLOSED: { + Comparable next = domain.next(this.endpoint); + return next == null ? Cut.belowAll() : AboveValue.belowValue(next); + } + } + throw new AssertionError(); + } + + @Override + Cut withUpperBoundType(BoundType boundType, DiscreteDomain domain) { + switch (boundType) { + case OPEN: { + Comparable next = domain.next(this.endpoint); + return next == null ? Cut.aboveAll() : AboveValue.belowValue(next); + } + case CLOSED: { + return this; + } + } + throw new AssertionError(); + } + + @Override + void describeAsLowerBound(StringBuilder sb) { + sb.append('(').append(this.endpoint); + } + + @Override + void describeAsUpperBound(StringBuilder sb) { + sb.append(this.endpoint).append(']'); + } + + @Override + C leastValueAbove(DiscreteDomain domain) { + return (C)domain.next(this.endpoint); + } + + @Override + C greatestValueBelow(DiscreteDomain domain) { + return (C)this.endpoint; + } + + @Override + Cut canonical(DiscreteDomain domain) { + C next = this.leastValueAbove(domain); + return next != null ? AboveValue.belowValue(next) : Cut.aboveAll(); + } + + public int hashCode() { + return ~this.endpoint.hashCode(); + } + + public String toString() { + String string = String.valueOf(String.valueOf(this.endpoint)); + return new StringBuilder(2 + string.length()).append("/").append(string).append("\\").toString(); + } + } + + private static final class BelowValue + extends Cut { + private static final long serialVersionUID = 0L; + + BelowValue(C endpoint) { + super((Comparable)Preconditions.checkNotNull(endpoint)); + } + + @Override + boolean isLessThan(C value) { + return Range.compareOrThrow(this.endpoint, value) <= 0; + } + + @Override + BoundType typeAsLowerBound() { + return BoundType.CLOSED; + } + + @Override + BoundType typeAsUpperBound() { + return BoundType.OPEN; + } + + @Override + Cut withLowerBoundType(BoundType boundType, DiscreteDomain domain) { + switch (boundType) { + case CLOSED: { + return this; + } + case OPEN: { + Comparable previous = domain.previous(this.endpoint); + return previous == null ? Cut.belowAll() : new AboveValue(previous); + } + } + throw new AssertionError(); + } + + @Override + Cut withUpperBoundType(BoundType boundType, DiscreteDomain domain) { + switch (boundType) { + case CLOSED: { + Comparable previous = domain.previous(this.endpoint); + return previous == null ? Cut.aboveAll() : new AboveValue(previous); + } + case OPEN: { + return this; + } + } + throw new AssertionError(); + } + + @Override + void describeAsLowerBound(StringBuilder sb) { + sb.append('[').append(this.endpoint); + } + + @Override + void describeAsUpperBound(StringBuilder sb) { + sb.append(this.endpoint).append(')'); + } + + @Override + C leastValueAbove(DiscreteDomain domain) { + return (C)this.endpoint; + } + + @Override + C greatestValueBelow(DiscreteDomain domain) { + return (C)domain.previous(this.endpoint); + } + + public int hashCode() { + return this.endpoint.hashCode(); + } + + public String toString() { + String string = String.valueOf(String.valueOf(this.endpoint)); + return new StringBuilder(2 + string.length()).append("\\").append(string).append("/").toString(); + } + } + + private static final class AboveAll + extends Cut> { + private static final AboveAll INSTANCE = new AboveAll(); + private static final long serialVersionUID = 0L; + + private AboveAll() { + super(null); + } + + @Override + Comparable endpoint() { + throw new IllegalStateException("range unbounded on this side"); + } + + @Override + boolean isLessThan(Comparable value) { + return false; + } + + @Override + BoundType typeAsLowerBound() { + throw new AssertionError((Object)"this statement should be unreachable"); + } + + @Override + BoundType typeAsUpperBound() { + throw new IllegalStateException(); + } + + @Override + Cut> withLowerBoundType(BoundType boundType, DiscreteDomain> domain) { + throw new AssertionError((Object)"this statement should be unreachable"); + } + + @Override + Cut> withUpperBoundType(BoundType boundType, DiscreteDomain> domain) { + throw new IllegalStateException(); + } + + @Override + void describeAsLowerBound(StringBuilder sb) { + throw new AssertionError(); + } + + @Override + void describeAsUpperBound(StringBuilder sb) { + sb.append("+\u221e)"); + } + + @Override + Comparable leastValueAbove(DiscreteDomain> domain) { + throw new AssertionError(); + } + + @Override + Comparable greatestValueBelow(DiscreteDomain> domain) { + return domain.maxValue(); + } + + @Override + public int compareTo(Cut> o) { + return o == this ? 0 : 1; + } + + public String toString() { + return "+\u221e"; + } + + private Object readResolve() { + return INSTANCE; + } + } + + private static final class BelowAll + extends Cut> { + private static final BelowAll INSTANCE = new BelowAll(); + private static final long serialVersionUID = 0L; + + private BelowAll() { + super(null); + } + + @Override + Comparable endpoint() { + throw new IllegalStateException("range unbounded on this side"); + } + + @Override + boolean isLessThan(Comparable value) { + return true; + } + + @Override + BoundType typeAsLowerBound() { + throw new IllegalStateException(); + } + + @Override + BoundType typeAsUpperBound() { + throw new AssertionError((Object)"this statement should be unreachable"); + } + + @Override + Cut> withLowerBoundType(BoundType boundType, DiscreteDomain> domain) { + throw new IllegalStateException(); + } + + @Override + Cut> withUpperBoundType(BoundType boundType, DiscreteDomain> domain) { + throw new AssertionError((Object)"this statement should be unreachable"); + } + + @Override + void describeAsLowerBound(StringBuilder sb) { + sb.append("(-\u221e"); + } + + @Override + void describeAsUpperBound(StringBuilder sb) { + throw new AssertionError(); + } + + @Override + Comparable leastValueAbove(DiscreteDomain> domain) { + return domain.minValue(); + } + + @Override + Comparable greatestValueBelow(DiscreteDomain> domain) { + throw new AssertionError(); + } + + @Override + Cut> canonical(DiscreteDomain> domain) { + try { + return Cut.belowValue(domain.minValue()); + } + catch (NoSuchElementException e) { + return this; + } + } + + @Override + public int compareTo(Cut> o) { + return o == this ? 0 : -1; + } + + public String toString() { + return "-\u221e"; + } + + private Object readResolve() { + return INSTANCE; + } + } +} diff --git a/src/com/google/common/collect/DenseImmutableTable.java b/src/com/google/common/collect/DenseImmutableTable.java new file mode 100644 index 0000000..6d2d0d2 --- /dev/null +++ b/src/com/google/common/collect/DenseImmutableTable.java @@ -0,0 +1,280 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.GwtCompatible; +import com.google.common.base.Preconditions; +import com.google.common.collect.AbstractIterator; +import com.google.common.collect.ImmutableCollection; +import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableMap; +import com.google.common.collect.ImmutableMapEntrySet; +import com.google.common.collect.ImmutableSet; +import com.google.common.collect.Maps; +import com.google.common.collect.RegularImmutableTable; +import com.google.common.collect.Table; +import com.google.common.collect.UnmodifiableIterator; +import java.util.Map; +import javax.annotation.Nullable; +import javax.annotation.concurrent.Immutable; + +@GwtCompatible +@Immutable +final class DenseImmutableTable +extends RegularImmutableTable { + private final ImmutableMap rowKeyToIndex; + private final ImmutableMap columnKeyToIndex; + private final ImmutableMap> rowMap; + private final ImmutableMap> columnMap; + private final int[] rowCounts; + private final int[] columnCounts; + private final V[][] values; + private final int[] iterationOrderRow; + private final int[] iterationOrderColumn; + + private static ImmutableMap makeIndex(ImmutableSet set) { + ImmutableMap.Builder indexBuilder = ImmutableMap.builder(); + int i = 0; + for (Object key : set) { + indexBuilder.put(key, i); + ++i; + } + return indexBuilder.build(); + } + + DenseImmutableTable(ImmutableList> cellList, ImmutableSet rowSpace, ImmutableSet columnSpace) { + Object[][] array = new Object[rowSpace.size()][columnSpace.size()]; + this.values = array; + this.rowKeyToIndex = DenseImmutableTable.makeIndex(rowSpace); + this.columnKeyToIndex = DenseImmutableTable.makeIndex(columnSpace); + this.rowCounts = new int[this.rowKeyToIndex.size()]; + this.columnCounts = new int[this.columnKeyToIndex.size()]; + int[] iterationOrderRow = new int[cellList.size()]; + int[] iterationOrderColumn = new int[cellList.size()]; + for (int i = 0; i < cellList.size(); ++i) { + int columnIndex; + Table.Cell cell = (Table.Cell)cellList.get(i); + Object rowKey = cell.getRowKey(); + Object columnKey = cell.getColumnKey(); + int rowIndex = this.rowKeyToIndex.get(rowKey); + V existingValue = this.values[rowIndex][columnIndex = this.columnKeyToIndex.get(columnKey).intValue()]; + Preconditions.checkArgument(existingValue == null, "duplicate key: (%s, %s)", rowKey, columnKey); + this.values[rowIndex][columnIndex] = cell.getValue(); + int n = rowIndex; + this.rowCounts[n] = this.rowCounts[n] + 1; + int n2 = columnIndex; + this.columnCounts[n2] = this.columnCounts[n2] + 1; + iterationOrderRow[i] = rowIndex; + iterationOrderColumn[i] = columnIndex; + } + this.iterationOrderRow = iterationOrderRow; + this.iterationOrderColumn = iterationOrderColumn; + this.rowMap = new RowMap(); + this.columnMap = new ColumnMap(); + } + + @Override + public ImmutableMap> columnMap() { + return this.columnMap; + } + + @Override + public ImmutableMap> rowMap() { + return this.rowMap; + } + + @Override + public V get(@Nullable Object rowKey, @Nullable Object columnKey) { + Integer rowIndex = this.rowKeyToIndex.get(rowKey); + Integer columnIndex = this.columnKeyToIndex.get(columnKey); + return rowIndex == null || columnIndex == null ? null : (V)this.values[rowIndex][columnIndex]; + } + + @Override + public int size() { + return this.iterationOrderRow.length; + } + + @Override + Table.Cell getCell(int index) { + int rowIndex = this.iterationOrderRow[index]; + int columnIndex = this.iterationOrderColumn[index]; + Object rowKey = ((ImmutableCollection)((Object)this.rowKeySet())).asList().get(rowIndex); + Object columnKey = ((ImmutableCollection)((Object)this.columnKeySet())).asList().get(columnIndex); + V value = this.values[rowIndex][columnIndex]; + return DenseImmutableTable.cellOf(rowKey, columnKey, value); + } + + @Override + V getValue(int index) { + return this.values[this.iterationOrderRow[index]][this.iterationOrderColumn[index]]; + } + + private final class ColumnMap + extends ImmutableArrayMap> { + private ColumnMap() { + super(DenseImmutableTable.this.columnCounts.length); + } + + @Override + ImmutableMap keyToIndex() { + return DenseImmutableTable.this.columnKeyToIndex; + } + + @Override + Map getValue(int keyIndex) { + return new Column(keyIndex); + } + + @Override + boolean isPartialView() { + return false; + } + } + + private final class RowMap + extends ImmutableArrayMap> { + private RowMap() { + super(DenseImmutableTable.this.rowCounts.length); + } + + @Override + ImmutableMap keyToIndex() { + return DenseImmutableTable.this.rowKeyToIndex; + } + + @Override + Map getValue(int keyIndex) { + return new Row(keyIndex); + } + + @Override + boolean isPartialView() { + return false; + } + } + + private final class Column + extends ImmutableArrayMap { + private final int columnIndex; + + Column(int columnIndex) { + super(DenseImmutableTable.this.columnCounts[columnIndex]); + this.columnIndex = columnIndex; + } + + @Override + ImmutableMap keyToIndex() { + return DenseImmutableTable.this.rowKeyToIndex; + } + + @Override + V getValue(int keyIndex) { + return DenseImmutableTable.this.values[keyIndex][this.columnIndex]; + } + + @Override + boolean isPartialView() { + return true; + } + } + + private final class Row + extends ImmutableArrayMap { + private final int rowIndex; + + Row(int rowIndex) { + super(DenseImmutableTable.this.rowCounts[rowIndex]); + this.rowIndex = rowIndex; + } + + @Override + ImmutableMap keyToIndex() { + return DenseImmutableTable.this.columnKeyToIndex; + } + + @Override + V getValue(int keyIndex) { + return DenseImmutableTable.this.values[this.rowIndex][keyIndex]; + } + + @Override + boolean isPartialView() { + return true; + } + } + + private static abstract class ImmutableArrayMap + extends ImmutableMap { + private final int size; + + ImmutableArrayMap(int size) { + this.size = size; + } + + abstract ImmutableMap keyToIndex(); + + private boolean isFull() { + return this.size == this.keyToIndex().size(); + } + + K getKey(int index) { + return (K)((ImmutableCollection)((Object)this.keyToIndex().keySet())).asList().get(index); + } + + @Nullable + abstract V getValue(int var1); + + @Override + ImmutableSet createKeySet() { + return this.isFull() ? this.keyToIndex().keySet() : super.createKeySet(); + } + + @Override + public int size() { + return this.size; + } + + @Override + public V get(@Nullable Object key) { + Integer keyIndex = this.keyToIndex().get(key); + return keyIndex == null ? null : (V)this.getValue(keyIndex); + } + + @Override + ImmutableSet> createEntrySet() { + return new ImmutableMapEntrySet(){ + + @Override + ImmutableMap map() { + return ImmutableArrayMap.this; + } + + @Override + public UnmodifiableIterator> iterator() { + return new AbstractIterator>(){ + private int index = -1; + private final int maxIndex; + { + this.maxIndex = ImmutableArrayMap.this.keyToIndex().size(); + } + + @Override + protected Map.Entry computeNext() { + ++this.index; + while (this.index < this.maxIndex) { + Object value = ImmutableArrayMap.this.getValue(this.index); + if (value != null) { + return Maps.immutableEntry(ImmutableArrayMap.this.getKey(this.index), value); + } + ++this.index; + } + return (Map.Entry)this.endOfData(); + } + }; + } + }; + } + } +} diff --git a/src/com/google/common/collect/DescendingImmutableSortedMultiset.java b/src/com/google/common/collect/DescendingImmutableSortedMultiset.java new file mode 100644 index 0000000..15efbc2 --- /dev/null +++ b/src/com/google/common/collect/DescendingImmutableSortedMultiset.java @@ -0,0 +1,70 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.collect.BoundType; +import com.google.common.collect.ImmutableCollection; +import com.google.common.collect.ImmutableSortedMultiset; +import com.google.common.collect.ImmutableSortedSet; +import com.google.common.collect.Multiset; +import javax.annotation.Nullable; + +final class DescendingImmutableSortedMultiset +extends ImmutableSortedMultiset { + private final transient ImmutableSortedMultiset forward; + + DescendingImmutableSortedMultiset(ImmutableSortedMultiset forward) { + this.forward = forward; + } + + @Override + public int count(@Nullable Object element) { + return this.forward.count(element); + } + + @Override + public Multiset.Entry firstEntry() { + return this.forward.lastEntry(); + } + + @Override + public Multiset.Entry lastEntry() { + return this.forward.firstEntry(); + } + + @Override + public int size() { + return this.forward.size(); + } + + @Override + public ImmutableSortedSet elementSet() { + return ((ImmutableSortedSet)this.forward.elementSet()).descendingSet(); + } + + @Override + Multiset.Entry getEntry(int index) { + return (Multiset.Entry)((ImmutableCollection)((Object)this.forward.entrySet())).asList().reverse().get(index); + } + + @Override + public ImmutableSortedMultiset descendingMultiset() { + return this.forward; + } + + @Override + public ImmutableSortedMultiset headMultiset(E upperBound, BoundType boundType) { + return ((ImmutableSortedMultiset)this.forward.tailMultiset((Object)upperBound, boundType)).descendingMultiset(); + } + + @Override + public ImmutableSortedMultiset tailMultiset(E lowerBound, BoundType boundType) { + return ((ImmutableSortedMultiset)this.forward.headMultiset((Object)lowerBound, boundType)).descendingMultiset(); + } + + @Override + boolean isPartialView() { + return this.forward.isPartialView(); + } +} diff --git a/src/com/google/common/collect/DescendingImmutableSortedSet.java b/src/com/google/common/collect/DescendingImmutableSortedSet.java new file mode 100644 index 0000000..7ab440c --- /dev/null +++ b/src/com/google/common/collect/DescendingImmutableSortedSet.java @@ -0,0 +1,97 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.GwtIncompatible; +import com.google.common.collect.ImmutableSortedSet; +import com.google.common.collect.Ordering; +import com.google.common.collect.UnmodifiableIterator; +import javax.annotation.Nullable; + +class DescendingImmutableSortedSet +extends ImmutableSortedSet { + private final ImmutableSortedSet forward; + + DescendingImmutableSortedSet(ImmutableSortedSet forward) { + super(Ordering.from(forward.comparator()).reverse()); + this.forward = forward; + } + + @Override + public int size() { + return this.forward.size(); + } + + @Override + public UnmodifiableIterator iterator() { + return this.forward.descendingIterator(); + } + + @Override + ImmutableSortedSet headSetImpl(E toElement, boolean inclusive) { + return ((ImmutableSortedSet)this.forward.tailSet((Object)toElement, inclusive)).descendingSet(); + } + + @Override + ImmutableSortedSet subSetImpl(E fromElement, boolean fromInclusive, E toElement, boolean toInclusive) { + return ((ImmutableSortedSet)this.forward.subSet((Object)toElement, toInclusive, (Object)fromElement, fromInclusive)).descendingSet(); + } + + @Override + ImmutableSortedSet tailSetImpl(E fromElement, boolean inclusive) { + return ((ImmutableSortedSet)this.forward.headSet((Object)fromElement, inclusive)).descendingSet(); + } + + @Override + @GwtIncompatible(value="NavigableSet") + public ImmutableSortedSet descendingSet() { + return this.forward; + } + + @Override + @GwtIncompatible(value="NavigableSet") + public UnmodifiableIterator descendingIterator() { + return this.forward.iterator(); + } + + @Override + @GwtIncompatible(value="NavigableSet") + ImmutableSortedSet createDescendingSet() { + throw new AssertionError((Object)"should never be called"); + } + + @Override + public E lower(E element) { + return this.forward.higher(element); + } + + @Override + public E floor(E element) { + return this.forward.ceiling(element); + } + + @Override + public E ceiling(E element) { + return this.forward.floor(element); + } + + @Override + public E higher(E element) { + return this.forward.lower(element); + } + + @Override + int indexOf(@Nullable Object target) { + int index = this.forward.indexOf(target); + if (index == -1) { + return index; + } + return this.size() - 1 - index; + } + + @Override + boolean isPartialView() { + return this.forward.isPartialView(); + } +} diff --git a/src/com/google/common/collect/DescendingMultiset.java b/src/com/google/common/collect/DescendingMultiset.java new file mode 100644 index 0000000..37d18b0 --- /dev/null +++ b/src/com/google/common/collect/DescendingMultiset.java @@ -0,0 +1,144 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.GwtCompatible; +import com.google.common.collect.BoundType; +import com.google.common.collect.ForwardingMultiset; +import com.google.common.collect.Multiset; +import com.google.common.collect.Multisets; +import com.google.common.collect.Ordering; +import com.google.common.collect.SortedMultiset; +import com.google.common.collect.SortedMultisets; +import java.util.Comparator; +import java.util.Iterator; +import java.util.NavigableSet; +import java.util.Set; + +@GwtCompatible(emulated=true) +abstract class DescendingMultiset +extends ForwardingMultiset +implements SortedMultiset { + private transient Comparator comparator; + private transient NavigableSet elementSet; + private transient Set> entrySet; + + DescendingMultiset() { + } + + abstract SortedMultiset forwardMultiset(); + + @Override + public Comparator comparator() { + Comparator result = this.comparator; + if (result == null) { + this.comparator = Ordering.from(this.forwardMultiset().comparator()).reverse(); + return this.comparator; + } + return result; + } + + @Override + public NavigableSet elementSet() { + NavigableSet result = this.elementSet; + if (result == null) { + this.elementSet = new SortedMultisets.NavigableElementSet(this); + return this.elementSet; + } + return result; + } + + @Override + public Multiset.Entry pollFirstEntry() { + return this.forwardMultiset().pollLastEntry(); + } + + @Override + public Multiset.Entry pollLastEntry() { + return this.forwardMultiset().pollFirstEntry(); + } + + @Override + public SortedMultiset headMultiset(E toElement, BoundType boundType) { + return this.forwardMultiset().tailMultiset(toElement, boundType).descendingMultiset(); + } + + @Override + public SortedMultiset subMultiset(E fromElement, BoundType fromBoundType, E toElement, BoundType toBoundType) { + return this.forwardMultiset().subMultiset(toElement, toBoundType, fromElement, fromBoundType).descendingMultiset(); + } + + @Override + public SortedMultiset tailMultiset(E fromElement, BoundType boundType) { + return this.forwardMultiset().headMultiset(fromElement, boundType).descendingMultiset(); + } + + @Override + protected Multiset delegate() { + return this.forwardMultiset(); + } + + @Override + public SortedMultiset descendingMultiset() { + return this.forwardMultiset(); + } + + @Override + public Multiset.Entry firstEntry() { + return this.forwardMultiset().lastEntry(); + } + + @Override + public Multiset.Entry lastEntry() { + return this.forwardMultiset().firstEntry(); + } + + abstract Iterator> entryIterator(); + + @Override + public Set> entrySet() { + Set>> result = this.entrySet; + return result == null ? (this.entrySet = this.createEntrySet()) : result; + } + + Set> createEntrySet() { + return new Multisets.EntrySet(){ + + @Override + Multiset multiset() { + return DescendingMultiset.this; + } + + @Override + public Iterator> iterator() { + return DescendingMultiset.this.entryIterator(); + } + + @Override + public int size() { + return DescendingMultiset.this.forwardMultiset().entrySet().size(); + } + }; + } + + @Override + public Iterator iterator() { + return Multisets.iteratorImpl(this); + } + + @Override + public Object[] toArray() { + return this.standardToArray(); + } + + @Override + public T[] toArray(T[] array) { + return this.standardToArray(array); + } + + @Override + public String toString() { + return this.entrySet().toString(); + } +} diff --git a/src/com/google/common/collect/DiscreteDomain.java b/src/com/google/common/collect/DiscreteDomain.java new file mode 100644 index 0000000..7012145 --- /dev/null +++ b/src/com/google/common/collect/DiscreteDomain.java @@ -0,0 +1,175 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.Beta; +import com.google.common.annotations.GwtCompatible; +import java.io.Serializable; +import java.math.BigInteger; +import java.util.NoSuchElementException; + +@GwtCompatible +@Beta +public abstract class DiscreteDomain { + public static DiscreteDomain integers() { + return IntegerDomain.INSTANCE; + } + + public static DiscreteDomain longs() { + return LongDomain.INSTANCE; + } + + public static DiscreteDomain bigIntegers() { + return BigIntegerDomain.INSTANCE; + } + + protected DiscreteDomain() { + } + + public abstract C next(C var1); + + public abstract C previous(C var1); + + public abstract long distance(C var1, C var2); + + public C minValue() { + throw new NoSuchElementException(); + } + + public C maxValue() { + throw new NoSuchElementException(); + } + + private static final class BigIntegerDomain + extends DiscreteDomain + implements Serializable { + private static final BigIntegerDomain INSTANCE = new BigIntegerDomain(); + private static final BigInteger MIN_LONG = BigInteger.valueOf(Long.MIN_VALUE); + private static final BigInteger MAX_LONG = BigInteger.valueOf(Long.MAX_VALUE); + private static final long serialVersionUID = 0L; + + private BigIntegerDomain() { + } + + @Override + public BigInteger next(BigInteger value) { + return value.add(BigInteger.ONE); + } + + @Override + public BigInteger previous(BigInteger value) { + return value.subtract(BigInteger.ONE); + } + + @Override + public long distance(BigInteger start, BigInteger end) { + return end.subtract(start).max(MIN_LONG).min(MAX_LONG).longValue(); + } + + private Object readResolve() { + return INSTANCE; + } + + public String toString() { + return "DiscreteDomain.bigIntegers()"; + } + } + + private static final class LongDomain + extends DiscreteDomain + implements Serializable { + private static final LongDomain INSTANCE = new LongDomain(); + private static final long serialVersionUID = 0L; + + private LongDomain() { + } + + @Override + public Long next(Long value) { + long l = value; + return l == Long.MAX_VALUE ? null : Long.valueOf(l + 1L); + } + + @Override + public Long previous(Long value) { + long l = value; + return l == Long.MIN_VALUE ? null : Long.valueOf(l - 1L); + } + + @Override + public long distance(Long start, Long end) { + long result = end - start; + if (end > start && result < 0L) { + return Long.MAX_VALUE; + } + if (end < start && result > 0L) { + return Long.MIN_VALUE; + } + return result; + } + + @Override + public Long minValue() { + return Long.MIN_VALUE; + } + + @Override + public Long maxValue() { + return Long.MAX_VALUE; + } + + private Object readResolve() { + return INSTANCE; + } + + public String toString() { + return "DiscreteDomain.longs()"; + } + } + + private static final class IntegerDomain + extends DiscreteDomain + implements Serializable { + private static final IntegerDomain INSTANCE = new IntegerDomain(); + private static final long serialVersionUID = 0L; + + private IntegerDomain() { + } + + @Override + public Integer next(Integer value) { + int i = value; + return i == Integer.MAX_VALUE ? null : Integer.valueOf(i + 1); + } + + @Override + public Integer previous(Integer value) { + int i = value; + return i == Integer.MIN_VALUE ? null : Integer.valueOf(i - 1); + } + + @Override + public long distance(Integer start, Integer end) { + return (long)end.intValue() - (long)start.intValue(); + } + + @Override + public Integer minValue() { + return Integer.MIN_VALUE; + } + + @Override + public Integer maxValue() { + return Integer.MAX_VALUE; + } + + private Object readResolve() { + return INSTANCE; + } + + public String toString() { + return "DiscreteDomain.integers()"; + } + } +} diff --git a/src/com/google/common/collect/EmptyContiguousSet.java b/src/com/google/common/collect/EmptyContiguousSet.java new file mode 100644 index 0000000..66ddc20 --- /dev/null +++ b/src/com/google/common/collect/EmptyContiguousSet.java @@ -0,0 +1,152 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.GwtCompatible; +import com.google.common.annotations.GwtIncompatible; +import com.google.common.collect.BoundType; +import com.google.common.collect.ContiguousSet; +import com.google.common.collect.DiscreteDomain; +import com.google.common.collect.EmptyImmutableSortedSet; +import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableSortedSet; +import com.google.common.collect.Iterators; +import com.google.common.collect.Ordering; +import com.google.common.collect.Range; +import com.google.common.collect.UnmodifiableIterator; +import java.io.Serializable; +import java.util.NoSuchElementException; +import java.util.Set; +import javax.annotation.Nullable; + +@GwtCompatible(emulated=true) +final class EmptyContiguousSet +extends ContiguousSet { + EmptyContiguousSet(DiscreteDomain domain) { + super(domain); + } + + @Override + public C first() { + throw new NoSuchElementException(); + } + + @Override + public C last() { + throw new NoSuchElementException(); + } + + @Override + public int size() { + return 0; + } + + @Override + public ContiguousSet intersection(ContiguousSet other) { + return this; + } + + @Override + public Range range() { + throw new NoSuchElementException(); + } + + @Override + public Range range(BoundType lowerBoundType, BoundType upperBoundType) { + throw new NoSuchElementException(); + } + + @Override + ContiguousSet headSetImpl(C toElement, boolean inclusive) { + return this; + } + + @Override + ContiguousSet subSetImpl(C fromElement, boolean fromInclusive, C toElement, boolean toInclusive) { + return this; + } + + @Override + ContiguousSet tailSetImpl(C fromElement, boolean fromInclusive) { + return this; + } + + @Override + @GwtIncompatible(value="not used by GWT emulation") + int indexOf(Object target) { + return -1; + } + + @Override + public UnmodifiableIterator iterator() { + return Iterators.emptyIterator(); + } + + @Override + @GwtIncompatible(value="NavigableSet") + public UnmodifiableIterator descendingIterator() { + return Iterators.emptyIterator(); + } + + @Override + boolean isPartialView() { + return false; + } + + @Override + public boolean isEmpty() { + return true; + } + + @Override + public ImmutableList asList() { + return ImmutableList.of(); + } + + @Override + public String toString() { + return "[]"; + } + + @Override + public boolean equals(@Nullable Object object) { + if (object instanceof Set) { + Set that = (Set)object; + return that.isEmpty(); + } + return false; + } + + @Override + public int hashCode() { + return 0; + } + + @Override + @GwtIncompatible(value="serialization") + Object writeReplace() { + return new SerializedForm(this.domain); + } + + @Override + @GwtIncompatible(value="NavigableSet") + ImmutableSortedSet createDescendingSet() { + return new EmptyImmutableSortedSet(Ordering.natural().reverse()); + } + + @GwtIncompatible(value="serialization") + private static final class SerializedForm + implements Serializable { + private final DiscreteDomain domain; + private static final long serialVersionUID = 0L; + + private SerializedForm(DiscreteDomain domain) { + this.domain = domain; + } + + private Object readResolve() { + return new EmptyContiguousSet(this.domain); + } + } +} diff --git a/src/com/google/common/collect/EmptyImmutableBiMap.java b/src/com/google/common/collect/EmptyImmutableBiMap.java new file mode 100644 index 0000000..1e763d8 --- /dev/null +++ b/src/com/google/common/collect/EmptyImmutableBiMap.java @@ -0,0 +1,69 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.GwtCompatible; +import com.google.common.collect.ImmutableBiMap; +import com.google.common.collect.ImmutableSet; +import com.google.common.collect.ImmutableSetMultimap; +import java.util.Map; +import javax.annotation.Nullable; + +@GwtCompatible(emulated=true) +final class EmptyImmutableBiMap +extends ImmutableBiMap { + static final EmptyImmutableBiMap INSTANCE = new EmptyImmutableBiMap(); + + private EmptyImmutableBiMap() { + } + + @Override + public ImmutableBiMap inverse() { + return this; + } + + @Override + public int size() { + return 0; + } + + @Override + public boolean isEmpty() { + return true; + } + + @Override + public Object get(@Nullable Object key) { + return null; + } + + @Override + public ImmutableSet> entrySet() { + return ImmutableSet.of(); + } + + @Override + ImmutableSet> createEntrySet() { + throw new AssertionError((Object)"should never be called"); + } + + @Override + public ImmutableSetMultimap asMultimap() { + return ImmutableSetMultimap.of(); + } + + @Override + public ImmutableSet keySet() { + return ImmutableSet.of(); + } + + @Override + boolean isPartialView() { + return false; + } + + Object readResolve() { + return INSTANCE; + } +} diff --git a/src/com/google/common/collect/EmptyImmutableListMultimap.java b/src/com/google/common/collect/EmptyImmutableListMultimap.java new file mode 100644 index 0000000..8aa7ff0 --- /dev/null +++ b/src/com/google/common/collect/EmptyImmutableListMultimap.java @@ -0,0 +1,23 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.GwtCompatible; +import com.google.common.collect.ImmutableListMultimap; +import com.google.common.collect.ImmutableMap; + +@GwtCompatible(serializable=true) +class EmptyImmutableListMultimap +extends ImmutableListMultimap { + static final EmptyImmutableListMultimap INSTANCE = new EmptyImmutableListMultimap(); + private static final long serialVersionUID = 0L; + + private EmptyImmutableListMultimap() { + super(ImmutableMap.of(), 0); + } + + private Object readResolve() { + return INSTANCE; + } +} diff --git a/src/com/google/common/collect/EmptyImmutableSet.java b/src/com/google/common/collect/EmptyImmutableSet.java new file mode 100644 index 0000000..96693f3 --- /dev/null +++ b/src/com/google/common/collect/EmptyImmutableSet.java @@ -0,0 +1,91 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.GwtCompatible; +import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableSet; +import com.google.common.collect.Iterators; +import com.google.common.collect.UnmodifiableIterator; +import java.util.Collection; +import java.util.Set; +import javax.annotation.Nullable; + +@GwtCompatible(serializable=true, emulated=true) +final class EmptyImmutableSet +extends ImmutableSet { + static final EmptyImmutableSet INSTANCE = new EmptyImmutableSet(); + private static final long serialVersionUID = 0L; + + private EmptyImmutableSet() { + } + + @Override + public int size() { + return 0; + } + + @Override + public boolean isEmpty() { + return true; + } + + @Override + public boolean contains(@Nullable Object target) { + return false; + } + + @Override + public boolean containsAll(Collection targets) { + return targets.isEmpty(); + } + + @Override + public UnmodifiableIterator iterator() { + return Iterators.emptyIterator(); + } + + @Override + boolean isPartialView() { + return false; + } + + @Override + int copyIntoArray(Object[] dst, int offset) { + return offset; + } + + @Override + public ImmutableList asList() { + return ImmutableList.of(); + } + + @Override + public boolean equals(@Nullable Object object) { + if (object instanceof Set) { + Set that = (Set)object; + return that.isEmpty(); + } + return false; + } + + @Override + public final int hashCode() { + return 0; + } + + @Override + boolean isHashCodeFast() { + return true; + } + + @Override + public String toString() { + return "[]"; + } + + Object readResolve() { + return INSTANCE; + } +} diff --git a/src/com/google/common/collect/EmptyImmutableSetMultimap.java b/src/com/google/common/collect/EmptyImmutableSetMultimap.java new file mode 100644 index 0000000..bdc9330 --- /dev/null +++ b/src/com/google/common/collect/EmptyImmutableSetMultimap.java @@ -0,0 +1,23 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.GwtCompatible; +import com.google.common.collect.ImmutableMap; +import com.google.common.collect.ImmutableSetMultimap; + +@GwtCompatible(serializable=true) +class EmptyImmutableSetMultimap +extends ImmutableSetMultimap { + static final EmptyImmutableSetMultimap INSTANCE = new EmptyImmutableSetMultimap(); + private static final long serialVersionUID = 0L; + + private EmptyImmutableSetMultimap() { + super(ImmutableMap.of(), 0, null); + } + + private Object readResolve() { + return INSTANCE; + } +} diff --git a/src/com/google/common/collect/EmptyImmutableSortedMap.java b/src/com/google/common/collect/EmptyImmutableSortedMap.java new file mode 100644 index 0000000..5602bf6 --- /dev/null +++ b/src/com/google/common/collect/EmptyImmutableSortedMap.java @@ -0,0 +1,99 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.GwtCompatible; +import com.google.common.base.Preconditions; +import com.google.common.collect.ImmutableCollection; +import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableSet; +import com.google.common.collect.ImmutableSetMultimap; +import com.google.common.collect.ImmutableSortedMap; +import com.google.common.collect.ImmutableSortedSet; +import com.google.common.collect.Ordering; +import java.util.Comparator; +import java.util.Map; +import javax.annotation.Nullable; + +@GwtCompatible(emulated=true) +final class EmptyImmutableSortedMap +extends ImmutableSortedMap { + private final transient ImmutableSortedSet keySet; + + EmptyImmutableSortedMap(Comparator comparator) { + this.keySet = ImmutableSortedSet.emptySet(comparator); + } + + EmptyImmutableSortedMap(Comparator comparator, ImmutableSortedMap descendingMap) { + super(descendingMap); + this.keySet = ImmutableSortedSet.emptySet(comparator); + } + + @Override + public V get(@Nullable Object key) { + return null; + } + + @Override + public ImmutableSortedSet keySet() { + return this.keySet; + } + + @Override + public int size() { + return 0; + } + + @Override + public boolean isEmpty() { + return true; + } + + @Override + public ImmutableCollection values() { + return ImmutableList.of(); + } + + @Override + public String toString() { + return "{}"; + } + + @Override + boolean isPartialView() { + return false; + } + + @Override + public ImmutableSet> entrySet() { + return ImmutableSet.of(); + } + + @Override + ImmutableSet> createEntrySet() { + throw new AssertionError((Object)"should never be called"); + } + + @Override + public ImmutableSetMultimap asMultimap() { + return ImmutableSetMultimap.of(); + } + + @Override + public ImmutableSortedMap headMap(K toKey, boolean inclusive) { + Preconditions.checkNotNull(toKey); + return this; + } + + @Override + public ImmutableSortedMap tailMap(K fromKey, boolean inclusive) { + Preconditions.checkNotNull(fromKey); + return this; + } + + @Override + ImmutableSortedMap createDescendingMap() { + return new EmptyImmutableSortedMap(Ordering.from(this.comparator()).reverse(), this); + } +} diff --git a/src/com/google/common/collect/EmptyImmutableSortedMultiset.java b/src/com/google/common/collect/EmptyImmutableSortedMultiset.java new file mode 100644 index 0000000..24ebebf --- /dev/null +++ b/src/com/google/common/collect/EmptyImmutableSortedMultiset.java @@ -0,0 +1,103 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.base.Preconditions; +import com.google.common.collect.BoundType; +import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableSortedMultiset; +import com.google.common.collect.ImmutableSortedSet; +import com.google.common.collect.Iterators; +import com.google.common.collect.Multiset; +import com.google.common.collect.UnmodifiableIterator; +import java.util.Collection; +import java.util.Comparator; +import javax.annotation.Nullable; + +final class EmptyImmutableSortedMultiset +extends ImmutableSortedMultiset { + private final ImmutableSortedSet elementSet; + + EmptyImmutableSortedMultiset(Comparator comparator) { + this.elementSet = ImmutableSortedSet.emptySet(comparator); + } + + @Override + public Multiset.Entry firstEntry() { + return null; + } + + @Override + public Multiset.Entry lastEntry() { + return null; + } + + @Override + public int count(@Nullable Object element) { + return 0; + } + + @Override + public boolean containsAll(Collection targets) { + return targets.isEmpty(); + } + + @Override + public int size() { + return 0; + } + + @Override + public ImmutableSortedSet elementSet() { + return this.elementSet; + } + + @Override + Multiset.Entry getEntry(int index) { + throw new AssertionError((Object)"should never be called"); + } + + @Override + public ImmutableSortedMultiset headMultiset(E upperBound, BoundType boundType) { + Preconditions.checkNotNull(upperBound); + Preconditions.checkNotNull(boundType); + return this; + } + + @Override + public ImmutableSortedMultiset tailMultiset(E lowerBound, BoundType boundType) { + Preconditions.checkNotNull(lowerBound); + Preconditions.checkNotNull(boundType); + return this; + } + + @Override + public UnmodifiableIterator iterator() { + return Iterators.emptyIterator(); + } + + @Override + public boolean equals(@Nullable Object object) { + if (object instanceof Multiset) { + Multiset other = (Multiset)object; + return other.isEmpty(); + } + return false; + } + + @Override + boolean isPartialView() { + return false; + } + + @Override + int copyIntoArray(Object[] dst, int offset) { + return offset; + } + + @Override + public ImmutableList asList() { + return ImmutableList.of(); + } +} diff --git a/src/com/google/common/collect/EmptyImmutableSortedSet.java b/src/com/google/common/collect/EmptyImmutableSortedSet.java new file mode 100644 index 0000000..6224aea --- /dev/null +++ b/src/com/google/common/collect/EmptyImmutableSortedSet.java @@ -0,0 +1,125 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.GwtCompatible; +import com.google.common.annotations.GwtIncompatible; +import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableSortedSet; +import com.google.common.collect.Iterators; +import com.google.common.collect.Ordering; +import com.google.common.collect.UnmodifiableIterator; +import java.util.Collection; +import java.util.Comparator; +import java.util.NoSuchElementException; +import java.util.Set; +import javax.annotation.Nullable; + +@GwtCompatible(serializable=true, emulated=true) +class EmptyImmutableSortedSet +extends ImmutableSortedSet { + EmptyImmutableSortedSet(Comparator comparator) { + super(comparator); + } + + @Override + public int size() { + return 0; + } + + @Override + public boolean isEmpty() { + return true; + } + + @Override + public boolean contains(@Nullable Object target) { + return false; + } + + @Override + public boolean containsAll(Collection targets) { + return targets.isEmpty(); + } + + @Override + public UnmodifiableIterator iterator() { + return Iterators.emptyIterator(); + } + + @Override + @GwtIncompatible(value="NavigableSet") + public UnmodifiableIterator descendingIterator() { + return Iterators.emptyIterator(); + } + + @Override + boolean isPartialView() { + return false; + } + + @Override + public ImmutableList asList() { + return ImmutableList.of(); + } + + @Override + int copyIntoArray(Object[] dst, int offset) { + return offset; + } + + @Override + public boolean equals(@Nullable Object object) { + if (object instanceof Set) { + Set that = (Set)object; + return that.isEmpty(); + } + return false; + } + + @Override + public int hashCode() { + return 0; + } + + @Override + public String toString() { + return "[]"; + } + + @Override + public E first() { + throw new NoSuchElementException(); + } + + @Override + public E last() { + throw new NoSuchElementException(); + } + + @Override + ImmutableSortedSet headSetImpl(E toElement, boolean inclusive) { + return this; + } + + @Override + ImmutableSortedSet subSetImpl(E fromElement, boolean fromInclusive, E toElement, boolean toInclusive) { + return this; + } + + @Override + ImmutableSortedSet tailSetImpl(E fromElement, boolean inclusive) { + return this; + } + + @Override + int indexOf(@Nullable Object target) { + return -1; + } + + @Override + ImmutableSortedSet createDescendingSet() { + return new EmptyImmutableSortedSet(Ordering.from(this.comparator).reverse()); + } +} diff --git a/src/com/google/common/collect/EnumBiMap.java b/src/com/google/common/collect/EnumBiMap.java new file mode 100644 index 0000000..df4e412 --- /dev/null +++ b/src/com/google/common/collect/EnumBiMap.java @@ -0,0 +1,96 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.GwtCompatible; +import com.google.common.annotations.GwtIncompatible; +import com.google.common.base.Preconditions; +import com.google.common.collect.AbstractBiMap; +import com.google.common.collect.EnumHashBiMap; +import com.google.common.collect.Serialization; +import com.google.common.collect.WellBehavedMap; +import java.io.IOException; +import java.io.ObjectInputStream; +import java.io.ObjectOutputStream; +import java.util.EnumMap; +import java.util.Map; + +@GwtCompatible(emulated=true) +public final class EnumBiMap, V extends Enum> +extends AbstractBiMap { + private transient Class keyType; + private transient Class valueType; + @GwtIncompatible(value="not needed in emulated source.") + private static final long serialVersionUID = 0L; + + public static , V extends Enum> EnumBiMap create(Class keyType, Class valueType) { + return new EnumBiMap(keyType, valueType); + } + + public static , V extends Enum> EnumBiMap create(Map map) { + EnumBiMap bimap = EnumBiMap.create(EnumBiMap.inferKeyType(map), EnumBiMap.inferValueType(map)); + bimap.putAll((Map)map); + return bimap; + } + + private EnumBiMap(Class keyType, Class valueType) { + super(WellBehavedMap.wrap(new EnumMap(keyType)), WellBehavedMap.wrap(new EnumMap(valueType))); + this.keyType = keyType; + this.valueType = valueType; + } + + static > Class inferKeyType(Map map) { + if (map instanceof EnumBiMap) { + return ((EnumBiMap)map).keyType(); + } + if (map instanceof EnumHashBiMap) { + return ((EnumHashBiMap)map).keyType(); + } + Preconditions.checkArgument(!map.isEmpty()); + return ((Enum)map.keySet().iterator().next()).getDeclaringClass(); + } + + private static > Class inferValueType(Map map) { + if (map instanceof EnumBiMap) { + return ((EnumBiMap)map).valueType; + } + Preconditions.checkArgument(!map.isEmpty()); + return ((Enum)map.values().iterator().next()).getDeclaringClass(); + } + + public Class keyType() { + return this.keyType; + } + + public Class valueType() { + return this.valueType; + } + + @Override + K checkKey(K key) { + return (K)((Enum)Preconditions.checkNotNull(key)); + } + + @Override + V checkValue(V value) { + return (V)((Enum)Preconditions.checkNotNull(value)); + } + + @GwtIncompatible(value="java.io.ObjectOutputStream") + private void writeObject(ObjectOutputStream stream) throws IOException { + stream.defaultWriteObject(); + stream.writeObject(this.keyType); + stream.writeObject(this.valueType); + Serialization.writeMap(this, stream); + } + + @GwtIncompatible(value="java.io.ObjectInputStream") + private void readObject(ObjectInputStream stream) throws IOException, ClassNotFoundException { + stream.defaultReadObject(); + this.keyType = (Class)stream.readObject(); + this.valueType = (Class)stream.readObject(); + this.setDelegates(WellBehavedMap.wrap(new EnumMap(this.keyType)), WellBehavedMap.wrap(new EnumMap(this.valueType))); + Serialization.populateMap(this, stream); + } +} diff --git a/src/com/google/common/collect/EnumHashBiMap.java b/src/com/google/common/collect/EnumHashBiMap.java new file mode 100644 index 0000000..d615573 --- /dev/null +++ b/src/com/google/common/collect/EnumHashBiMap.java @@ -0,0 +1,77 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.GwtCompatible; +import com.google.common.annotations.GwtIncompatible; +import com.google.common.base.Preconditions; +import com.google.common.collect.AbstractBiMap; +import com.google.common.collect.EnumBiMap; +import com.google.common.collect.Maps; +import com.google.common.collect.Serialization; +import com.google.common.collect.WellBehavedMap; +import java.io.IOException; +import java.io.ObjectInputStream; +import java.io.ObjectOutputStream; +import java.util.EnumMap; +import java.util.HashMap; +import java.util.Map; +import javax.annotation.Nullable; + +@GwtCompatible(emulated=true) +public final class EnumHashBiMap, V> +extends AbstractBiMap { + private transient Class keyType; + @GwtIncompatible(value="only needed in emulated source.") + private static final long serialVersionUID = 0L; + + public static , V> EnumHashBiMap create(Class keyType) { + return new EnumHashBiMap(keyType); + } + + public static , V> EnumHashBiMap create(Map map) { + EnumHashBiMap bimap = EnumHashBiMap.create(EnumBiMap.inferKeyType(map)); + bimap.putAll((Map)map); + return bimap; + } + + private EnumHashBiMap(Class keyType) { + super(WellBehavedMap.wrap(new EnumMap(keyType)), Maps.newHashMapWithExpectedSize(((Enum[])keyType.getEnumConstants()).length)); + this.keyType = keyType; + } + + @Override + K checkKey(K key) { + return (K)((Enum)Preconditions.checkNotNull(key)); + } + + @Override + public V put(K key, @Nullable V value) { + return super.put(key, value); + } + + @Override + public V forcePut(K key, @Nullable V value) { + return super.forcePut(key, value); + } + + public Class keyType() { + return this.keyType; + } + + @GwtIncompatible(value="java.io.ObjectOutputStream") + private void writeObject(ObjectOutputStream stream) throws IOException { + stream.defaultWriteObject(); + stream.writeObject(this.keyType); + Serialization.writeMap(this, stream); + } + + @GwtIncompatible(value="java.io.ObjectInputStream") + private void readObject(ObjectInputStream stream) throws IOException, ClassNotFoundException { + stream.defaultReadObject(); + this.keyType = (Class)stream.readObject(); + this.setDelegates(WellBehavedMap.wrap(new EnumMap(this.keyType)), new HashMap(((Enum[])this.keyType.getEnumConstants()).length * 3 / 2)); + Serialization.populateMap(this, stream); + } +} diff --git a/src/com/google/common/collect/EnumMultiset.java b/src/com/google/common/collect/EnumMultiset.java new file mode 100644 index 0000000..d9540af --- /dev/null +++ b/src/com/google/common/collect/EnumMultiset.java @@ -0,0 +1,64 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.GwtCompatible; +import com.google.common.annotations.GwtIncompatible; +import com.google.common.base.Preconditions; +import com.google.common.collect.AbstractMapBasedMultiset; +import com.google.common.collect.Iterables; +import com.google.common.collect.Serialization; +import com.google.common.collect.WellBehavedMap; +import java.io.IOException; +import java.io.ObjectInputStream; +import java.io.ObjectOutputStream; +import java.util.EnumMap; +import java.util.Iterator; + +@GwtCompatible(emulated=true) +public final class EnumMultiset> +extends AbstractMapBasedMultiset { + private transient Class type; + @GwtIncompatible(value="Not needed in emulated source") + private static final long serialVersionUID = 0L; + + public static > EnumMultiset create(Class type) { + return new EnumMultiset(type); + } + + public static > EnumMultiset create(Iterable elements) { + Iterator iterator = elements.iterator(); + Preconditions.checkArgument(iterator.hasNext(), "EnumMultiset constructor passed empty Iterable"); + EnumMultiset multiset = new EnumMultiset(((Enum)iterator.next()).getDeclaringClass()); + Iterables.addAll(multiset, elements); + return multiset; + } + + public static > EnumMultiset create(Iterable elements, Class type) { + EnumMultiset result = EnumMultiset.create(type); + Iterables.addAll(result, elements); + return result; + } + + private EnumMultiset(Class type) { + super(WellBehavedMap.wrap(new EnumMap(type))); + this.type = type; + } + + @GwtIncompatible(value="java.io.ObjectOutputStream") + private void writeObject(ObjectOutputStream stream) throws IOException { + stream.defaultWriteObject(); + stream.writeObject(this.type); + Serialization.writeMultiset(this, stream); + } + + @GwtIncompatible(value="java.io.ObjectInputStream") + private void readObject(ObjectInputStream stream) throws IOException, ClassNotFoundException { + Class localType; + stream.defaultReadObject(); + this.type = localType = (Class)stream.readObject(); + this.setBackingMap(WellBehavedMap.wrap(new EnumMap(this.type))); + Serialization.populateMultiset(this, stream); + } +} diff --git a/src/com/google/common/collect/EvictingQueue.java b/src/com/google/common/collect/EvictingQueue.java new file mode 100644 index 0000000..f6966bb --- /dev/null +++ b/src/com/google/common/collect/EvictingQueue.java @@ -0,0 +1,77 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.Beta; +import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.VisibleForTesting; +import com.google.common.base.Preconditions; +import com.google.common.collect.ForwardingQueue; +import java.io.Serializable; +import java.util.ArrayDeque; +import java.util.Collection; +import java.util.Queue; + +@Beta +@GwtIncompatible(value="java.util.ArrayDeque") +public final class EvictingQueue +extends ForwardingQueue +implements Serializable { + private final Queue delegate; + @VisibleForTesting + final int maxSize; + private static final long serialVersionUID = 0L; + + private EvictingQueue(int maxSize) { + Preconditions.checkArgument(maxSize >= 0, "maxSize (%s) must >= 0", maxSize); + this.delegate = new ArrayDeque(maxSize); + this.maxSize = maxSize; + } + + public static EvictingQueue create(int maxSize) { + return new EvictingQueue(maxSize); + } + + public int remainingCapacity() { + return this.maxSize - this.size(); + } + + @Override + protected Queue delegate() { + return this.delegate; + } + + @Override + public boolean offer(E e) { + return this.add(e); + } + + @Override + public boolean add(E e) { + Preconditions.checkNotNull(e); + if (this.maxSize == 0) { + return true; + } + if (this.size() == this.maxSize) { + this.delegate.remove(); + } + this.delegate.add(e); + return true; + } + + @Override + public boolean addAll(Collection collection) { + return this.standardAddAll(collection); + } + + @Override + public boolean contains(Object object) { + return this.delegate().contains(Preconditions.checkNotNull(object)); + } + + @Override + public boolean remove(Object object) { + return this.delegate().remove(Preconditions.checkNotNull(object)); + } +} diff --git a/src/com/google/common/collect/ExplicitOrdering.java b/src/com/google/common/collect/ExplicitOrdering.java new file mode 100644 index 0000000..311abdd --- /dev/null +++ b/src/com/google/common/collect/ExplicitOrdering.java @@ -0,0 +1,67 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.GwtCompatible; +import com.google.common.collect.ImmutableMap; +import com.google.common.collect.Ordering; +import java.io.Serializable; +import java.util.List; +import javax.annotation.Nullable; + +@GwtCompatible(serializable=true) +final class ExplicitOrdering +extends Ordering +implements Serializable { + final ImmutableMap rankMap; + private static final long serialVersionUID = 0L; + + ExplicitOrdering(List valuesInOrder) { + this(ExplicitOrdering.buildRankMap(valuesInOrder)); + } + + ExplicitOrdering(ImmutableMap rankMap) { + this.rankMap = rankMap; + } + + @Override + public int compare(T left, T right) { + return this.rank(left) - this.rank(right); + } + + private int rank(T value) { + Integer rank = this.rankMap.get(value); + if (rank == null) { + throw new Ordering.IncomparableValueException(value); + } + return rank; + } + + private static ImmutableMap buildRankMap(List valuesInOrder) { + ImmutableMap.Builder builder = ImmutableMap.builder(); + int rank = 0; + for (T value : valuesInOrder) { + builder.put(value, rank++); + } + return builder.build(); + } + + @Override + public boolean equals(@Nullable Object object) { + if (object instanceof ExplicitOrdering) { + ExplicitOrdering that = (ExplicitOrdering)object; + return this.rankMap.equals(that.rankMap); + } + return false; + } + + public int hashCode() { + return this.rankMap.hashCode(); + } + + public String toString() { + String string = String.valueOf(String.valueOf(this.rankMap.keySet())); + return new StringBuilder(19 + string.length()).append("Ordering.explicit(").append(string).append(")").toString(); + } +} diff --git a/src/com/google/common/collect/FilteredEntryMultimap.java b/src/com/google/common/collect/FilteredEntryMultimap.java new file mode 100644 index 0000000..0aab9b9 --- /dev/null +++ b/src/com/google/common/collect/FilteredEntryMultimap.java @@ -0,0 +1,382 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.GwtCompatible; +import com.google.common.base.MoreObjects; +import com.google.common.base.Preconditions; +import com.google.common.base.Predicate; +import com.google.common.base.Predicates; +import com.google.common.collect.AbstractIterator; +import com.google.common.collect.AbstractMultimap; +import com.google.common.collect.CollectPreconditions; +import com.google.common.collect.Collections2; +import com.google.common.collect.FilteredMultimap; +import com.google.common.collect.FilteredMultimapValues; +import com.google.common.collect.Iterators; +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import com.google.common.collect.Multimap; +import com.google.common.collect.Multimaps; +import com.google.common.collect.Multiset; +import com.google.common.collect.Multisets; +import com.google.common.collect.SetMultimap; +import com.google.common.collect.Sets; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.Iterator; +import java.util.Map; +import java.util.Set; +import javax.annotation.Nullable; + +@GwtCompatible +class FilteredEntryMultimap +extends AbstractMultimap +implements FilteredMultimap { + final Multimap unfiltered; + final Predicate> predicate; + + FilteredEntryMultimap(Multimap unfiltered, Predicate> predicate) { + this.unfiltered = Preconditions.checkNotNull(unfiltered); + this.predicate = Preconditions.checkNotNull(predicate); + } + + @Override + public Multimap unfiltered() { + return this.unfiltered; + } + + @Override + public Predicate> entryPredicate() { + return this.predicate; + } + + @Override + public int size() { + return this.entries().size(); + } + + private boolean satisfies(K key, V value) { + return this.predicate.apply(Maps.immutableEntry(key, value)); + } + + static Collection filterCollection(Collection collection, Predicate predicate) { + if (collection instanceof Set) { + return Sets.filter((Set)collection, predicate); + } + return Collections2.filter(collection, predicate); + } + + @Override + public boolean containsKey(@Nullable Object key) { + return this.asMap().get(key) != null; + } + + @Override + public Collection removeAll(@Nullable Object key) { + return MoreObjects.firstNonNull(this.asMap().remove(key), this.unmodifiableEmptyCollection()); + } + + Collection unmodifiableEmptyCollection() { + return this.unfiltered instanceof SetMultimap ? Collections.emptySet() : Collections.emptyList(); + } + + @Override + public void clear() { + this.entries().clear(); + } + + @Override + public Collection get(K key) { + return FilteredEntryMultimap.filterCollection(this.unfiltered.get(key), new ValuePredicate(key)); + } + + @Override + Collection> createEntries() { + return FilteredEntryMultimap.filterCollection(this.unfiltered.entries(), this.predicate); + } + + @Override + Collection createValues() { + return new FilteredMultimapValues(this); + } + + @Override + Iterator> entryIterator() { + throw new AssertionError((Object)"should never be called"); + } + + @Override + Map> createAsMap() { + return new AsMap(); + } + + @Override + public Set keySet() { + return this.asMap().keySet(); + } + + boolean removeEntriesIf(Predicate>> predicate) { + Iterator>> entryIterator = this.unfiltered.asMap().entrySet().iterator(); + boolean changed = false; + while (entryIterator.hasNext()) { + Map.Entry> entry = entryIterator.next(); + K key = entry.getKey(); + Collection collection = FilteredEntryMultimap.filterCollection(entry.getValue(), new ValuePredicate(key)); + if (collection.isEmpty() || !predicate.apply(Maps.immutableEntry(key, collection))) continue; + if (collection.size() == entry.getValue().size()) { + entryIterator.remove(); + } else { + collection.clear(); + } + changed = true; + } + return changed; + } + + @Override + Multiset createKeys() { + return new Keys(); + } + + class Keys + extends Multimaps.Keys { + Keys() { + super(FilteredEntryMultimap.this); + } + + @Override + public int remove(@Nullable Object key, int occurrences) { + CollectPreconditions.checkNonnegative(occurrences, "occurrences"); + if (occurrences == 0) { + return this.count(key); + } + Collection collection = FilteredEntryMultimap.this.unfiltered.asMap().get(key); + if (collection == null) { + return 0; + } + Object k = key; + int oldCount = 0; + Iterator itr = collection.iterator(); + while (itr.hasNext()) { + Object v = itr.next(); + if (!FilteredEntryMultimap.this.satisfies(k, v) || ++oldCount > occurrences) continue; + itr.remove(); + } + return oldCount; + } + + @Override + public Set> entrySet() { + return new Multisets.EntrySet(){ + + @Override + Multiset multiset() { + return Keys.this; + } + + @Override + public Iterator> iterator() { + return Keys.this.entryIterator(); + } + + @Override + public int size() { + return FilteredEntryMultimap.this.keySet().size(); + } + + private boolean removeEntriesIf(final Predicate> predicate) { + return FilteredEntryMultimap.this.removeEntriesIf(new Predicate>>(){ + + @Override + public boolean apply(Map.Entry> entry) { + return predicate.apply(Multisets.immutableEntry(entry.getKey(), entry.getValue().size())); + } + }); + } + + @Override + public boolean removeAll(Collection c) { + return this.removeEntriesIf(Predicates.in(c)); + } + + @Override + public boolean retainAll(Collection c) { + return this.removeEntriesIf(Predicates.not(Predicates.in(c))); + } + }; + } + } + + class AsMap + extends Maps.ImprovedAbstractMap> { + AsMap() { + } + + @Override + public boolean containsKey(@Nullable Object key) { + return this.get(key) != null; + } + + @Override + public void clear() { + FilteredEntryMultimap.this.clear(); + } + + @Override + public Collection get(@Nullable Object key) { + Collection result = FilteredEntryMultimap.this.unfiltered.asMap().get(key); + if (result == null) { + return null; + } + Object k = key; + return (result = FilteredEntryMultimap.filterCollection(result, new ValuePredicate(k))).isEmpty() ? null : result; + } + + @Override + public Collection remove(@Nullable Object key) { + Collection collection = FilteredEntryMultimap.this.unfiltered.asMap().get(key); + if (collection == null) { + return null; + } + Object k = key; + ArrayList result = Lists.newArrayList(); + Iterator itr = collection.iterator(); + while (itr.hasNext()) { + Object v = itr.next(); + if (!FilteredEntryMultimap.this.satisfies(k, v)) continue; + itr.remove(); + result.add(v); + } + if (result.isEmpty()) { + return null; + } + if (FilteredEntryMultimap.this.unfiltered instanceof SetMultimap) { + return Collections.unmodifiableSet(Sets.newLinkedHashSet(result)); + } + return Collections.unmodifiableList(result); + } + + @Override + Set createKeySet() { + return new Maps.KeySet>(this){ + + @Override + public boolean removeAll(Collection c) { + return FilteredEntryMultimap.this.removeEntriesIf(Maps.keyPredicateOnEntries(Predicates.in(c))); + } + + @Override + public boolean retainAll(Collection c) { + return FilteredEntryMultimap.this.removeEntriesIf(Maps.keyPredicateOnEntries(Predicates.not(Predicates.in(c)))); + } + + @Override + public boolean remove(@Nullable Object o) { + return AsMap.this.remove(o) != null; + } + }; + } + + @Override + Set>> createEntrySet() { + return new Maps.EntrySet>(){ + + @Override + Map> map() { + return AsMap.this; + } + + @Override + public Iterator>> iterator() { + return new AbstractIterator>>(){ + final Iterator>> backingIterator; + { + this.backingIterator = FilteredEntryMultimap.this.unfiltered.asMap().entrySet().iterator(); + } + + @Override + protected Map.Entry> computeNext() { + while (this.backingIterator.hasNext()) { + Map.Entry entry = this.backingIterator.next(); + Object key = entry.getKey(); + Collection collection = FilteredEntryMultimap.filterCollection(entry.getValue(), new ValuePredicate(key)); + if (collection.isEmpty()) continue; + return Maps.immutableEntry(key, collection); + } + return (Map.Entry)this.endOfData(); + } + }; + } + + @Override + public boolean removeAll(Collection c) { + return FilteredEntryMultimap.this.removeEntriesIf(Predicates.in(c)); + } + + @Override + public boolean retainAll(Collection c) { + return FilteredEntryMultimap.this.removeEntriesIf(Predicates.not(Predicates.in(c))); + } + + @Override + public int size() { + return Iterators.size(this.iterator()); + } + }; + } + + @Override + Collection> createValues() { + return new Maps.Values>(this){ + + @Override + public boolean remove(@Nullable Object o) { + if (o instanceof Collection) { + Collection c = (Collection)o; + Iterator entryIterator = FilteredEntryMultimap.this.unfiltered.asMap().entrySet().iterator(); + while (entryIterator.hasNext()) { + Map.Entry entry = entryIterator.next(); + Object key = entry.getKey(); + Collection collection = FilteredEntryMultimap.filterCollection(entry.getValue(), new ValuePredicate(key)); + if (collection.isEmpty() || !c.equals(collection)) continue; + if (collection.size() == entry.getValue().size()) { + entryIterator.remove(); + } else { + collection.clear(); + } + return true; + } + } + return false; + } + + @Override + public boolean removeAll(Collection c) { + return FilteredEntryMultimap.this.removeEntriesIf(Maps.valuePredicateOnEntries(Predicates.in(c))); + } + + @Override + public boolean retainAll(Collection c) { + return FilteredEntryMultimap.this.removeEntriesIf(Maps.valuePredicateOnEntries(Predicates.not(Predicates.in(c)))); + } + }; + } + } + + final class ValuePredicate + implements Predicate { + private final K key; + + ValuePredicate(K key) { + this.key = key; + } + + @Override + public boolean apply(@Nullable V value) { + return FilteredEntryMultimap.this.satisfies(this.key, value); + } + } +} diff --git a/src/com/google/common/collect/FilteredEntrySetMultimap.java b/src/com/google/common/collect/FilteredEntrySetMultimap.java new file mode 100644 index 0000000..e6ce04f --- /dev/null +++ b/src/com/google/common/collect/FilteredEntrySetMultimap.java @@ -0,0 +1,52 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.GwtCompatible; +import com.google.common.base.Predicate; +import com.google.common.collect.FilteredEntryMultimap; +import com.google.common.collect.FilteredSetMultimap; +import com.google.common.collect.SetMultimap; +import com.google.common.collect.Sets; +import java.util.Map; +import java.util.Set; + +@GwtCompatible +final class FilteredEntrySetMultimap +extends FilteredEntryMultimap +implements FilteredSetMultimap { + FilteredEntrySetMultimap(SetMultimap unfiltered, Predicate> predicate) { + super(unfiltered, predicate); + } + + @Override + public SetMultimap unfiltered() { + return (SetMultimap)this.unfiltered; + } + + @Override + public Set get(K key) { + return (Set)super.get(key); + } + + @Override + public Set removeAll(Object key) { + return (Set)super.removeAll(key); + } + + @Override + public Set replaceValues(K key, Iterable values) { + return (Set)super.replaceValues(key, values); + } + + @Override + Set> createEntries() { + return Sets.filter(this.unfiltered().entries(), this.entryPredicate()); + } + + @Override + public Set> entries() { + return (Set)super.entries(); + } +} diff --git a/src/com/google/common/collect/FilteredKeyListMultimap.java b/src/com/google/common/collect/FilteredKeyListMultimap.java new file mode 100644 index 0000000..87438a1 --- /dev/null +++ b/src/com/google/common/collect/FilteredKeyListMultimap.java @@ -0,0 +1,40 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.GwtCompatible; +import com.google.common.base.Predicate; +import com.google.common.collect.FilteredKeyMultimap; +import com.google.common.collect.ListMultimap; +import java.util.List; +import javax.annotation.Nullable; + +@GwtCompatible +final class FilteredKeyListMultimap +extends FilteredKeyMultimap +implements ListMultimap { + FilteredKeyListMultimap(ListMultimap unfiltered, Predicate keyPredicate) { + super(unfiltered, keyPredicate); + } + + @Override + public ListMultimap unfiltered() { + return (ListMultimap)super.unfiltered(); + } + + @Override + public List get(K key) { + return (List)super.get(key); + } + + @Override + public List removeAll(@Nullable Object key) { + return (List)super.removeAll(key); + } + + @Override + public List replaceValues(K key, Iterable values) { + return (List)super.replaceValues(key, values); + } +} diff --git a/src/com/google/common/collect/FilteredKeyMultimap.java b/src/com/google/common/collect/FilteredKeyMultimap.java new file mode 100644 index 0000000..ed4fab7 --- /dev/null +++ b/src/com/google/common/collect/FilteredKeyMultimap.java @@ -0,0 +1,217 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.GwtCompatible; +import com.google.common.base.Preconditions; +import com.google.common.base.Predicate; +import com.google.common.collect.AbstractMultimap; +import com.google.common.collect.Collections2; +import com.google.common.collect.FilteredMultimap; +import com.google.common.collect.FilteredMultimapValues; +import com.google.common.collect.ForwardingCollection; +import com.google.common.collect.ForwardingList; +import com.google.common.collect.ForwardingSet; +import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableSet; +import com.google.common.collect.Maps; +import com.google.common.collect.Multimap; +import com.google.common.collect.Multiset; +import com.google.common.collect.Multisets; +import com.google.common.collect.SetMultimap; +import com.google.common.collect.Sets; +import java.util.Collection; +import java.util.Collections; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Set; +import javax.annotation.Nullable; + +@GwtCompatible +class FilteredKeyMultimap +extends AbstractMultimap +implements FilteredMultimap { + final Multimap unfiltered; + final Predicate keyPredicate; + + FilteredKeyMultimap(Multimap unfiltered, Predicate keyPredicate) { + this.unfiltered = Preconditions.checkNotNull(unfiltered); + this.keyPredicate = Preconditions.checkNotNull(keyPredicate); + } + + @Override + public Multimap unfiltered() { + return this.unfiltered; + } + + @Override + public Predicate> entryPredicate() { + return Maps.keyPredicateOnEntries(this.keyPredicate); + } + + @Override + public int size() { + int size = 0; + for (Collection collection : this.asMap().values()) { + size += collection.size(); + } + return size; + } + + @Override + public boolean containsKey(@Nullable Object key) { + if (this.unfiltered.containsKey(key)) { + Object k = key; + return this.keyPredicate.apply(k); + } + return false; + } + + @Override + public Collection removeAll(Object key) { + return this.containsKey(key) ? this.unfiltered.removeAll(key) : this.unmodifiableEmptyCollection(); + } + + Collection unmodifiableEmptyCollection() { + if (this.unfiltered instanceof SetMultimap) { + return ImmutableSet.of(); + } + return ImmutableList.of(); + } + + @Override + public void clear() { + this.keySet().clear(); + } + + @Override + Set createKeySet() { + return Sets.filter(this.unfiltered.keySet(), this.keyPredicate); + } + + @Override + public Collection get(K key) { + if (this.keyPredicate.apply(key)) { + return this.unfiltered.get(key); + } + if (this.unfiltered instanceof SetMultimap) { + return new AddRejectingSet(key); + } + return new AddRejectingList(key); + } + + @Override + Iterator> entryIterator() { + throw new AssertionError((Object)"should never be called"); + } + + @Override + Collection> createEntries() { + return new Entries(); + } + + @Override + Collection createValues() { + return new FilteredMultimapValues(this); + } + + @Override + Map> createAsMap() { + return Maps.filterKeys(this.unfiltered.asMap(), this.keyPredicate); + } + + @Override + Multiset createKeys() { + return Multisets.filter(this.unfiltered.keys(), this.keyPredicate); + } + + class Entries + extends ForwardingCollection> { + Entries() { + } + + @Override + protected Collection> delegate() { + return Collections2.filter(FilteredKeyMultimap.this.unfiltered.entries(), FilteredKeyMultimap.this.entryPredicate()); + } + + @Override + public boolean remove(@Nullable Object o) { + Map.Entry entry; + if (o instanceof Map.Entry && FilteredKeyMultimap.this.unfiltered.containsKey((entry = (Map.Entry)o).getKey()) && FilteredKeyMultimap.this.keyPredicate.apply(entry.getKey())) { + return FilteredKeyMultimap.this.unfiltered.remove(entry.getKey(), entry.getValue()); + } + return false; + } + } + + static class AddRejectingList + extends ForwardingList { + final K key; + + AddRejectingList(K key) { + this.key = key; + } + + @Override + public boolean add(V v) { + this.add(0, v); + return true; + } + + @Override + public boolean addAll(Collection collection) { + this.addAll(0, collection); + return true; + } + + @Override + public void add(int index, V element) { + Preconditions.checkPositionIndex(index, 0); + String string = String.valueOf(String.valueOf(this.key)); + throw new IllegalArgumentException(new StringBuilder(32 + string.length()).append("Key does not satisfy predicate: ").append(string).toString()); + } + + @Override + public boolean addAll(int index, Collection elements) { + Preconditions.checkNotNull(elements); + Preconditions.checkPositionIndex(index, 0); + String string = String.valueOf(String.valueOf(this.key)); + throw new IllegalArgumentException(new StringBuilder(32 + string.length()).append("Key does not satisfy predicate: ").append(string).toString()); + } + + @Override + protected List delegate() { + return Collections.emptyList(); + } + } + + static class AddRejectingSet + extends ForwardingSet { + final K key; + + AddRejectingSet(K key) { + this.key = key; + } + + @Override + public boolean add(V element) { + String string = String.valueOf(String.valueOf(this.key)); + throw new IllegalArgumentException(new StringBuilder(32 + string.length()).append("Key does not satisfy predicate: ").append(string).toString()); + } + + @Override + public boolean addAll(Collection collection) { + Preconditions.checkNotNull(collection); + String string = String.valueOf(String.valueOf(this.key)); + throw new IllegalArgumentException(new StringBuilder(32 + string.length()).append("Key does not satisfy predicate: ").append(string).toString()); + } + + @Override + protected Set delegate() { + return Collections.emptySet(); + } + } +} diff --git a/src/com/google/common/collect/FilteredKeySetMultimap.java b/src/com/google/common/collect/FilteredKeySetMultimap.java new file mode 100644 index 0000000..9bf23e5 --- /dev/null +++ b/src/com/google/common/collect/FilteredKeySetMultimap.java @@ -0,0 +1,71 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.GwtCompatible; +import com.google.common.base.Predicate; +import com.google.common.collect.FilteredKeyMultimap; +import com.google.common.collect.FilteredSetMultimap; +import com.google.common.collect.SetMultimap; +import com.google.common.collect.Sets; +import java.util.Map; +import java.util.Set; +import javax.annotation.Nullable; + +@GwtCompatible +final class FilteredKeySetMultimap +extends FilteredKeyMultimap +implements FilteredSetMultimap { + FilteredKeySetMultimap(SetMultimap unfiltered, Predicate keyPredicate) { + super(unfiltered, keyPredicate); + } + + @Override + public SetMultimap unfiltered() { + return (SetMultimap)this.unfiltered; + } + + @Override + public Set get(K key) { + return (Set)super.get(key); + } + + @Override + public Set removeAll(Object key) { + return (Set)super.removeAll(key); + } + + @Override + public Set replaceValues(K key, Iterable values) { + return (Set)super.replaceValues(key, values); + } + + @Override + public Set> entries() { + return (Set)super.entries(); + } + + @Override + Set> createEntries() { + return new EntrySet(); + } + + class EntrySet + extends FilteredKeyMultimap.Entries + implements Set> { + EntrySet() { + super(FilteredKeySetMultimap.this); + } + + @Override + public int hashCode() { + return Sets.hashCodeImpl(this); + } + + @Override + public boolean equals(@Nullable Object o) { + return Sets.equalsImpl(this, o); + } + } +} diff --git a/src/com/google/common/collect/FilteredMultimap.java b/src/com/google/common/collect/FilteredMultimap.java new file mode 100644 index 0000000..066db97 --- /dev/null +++ b/src/com/google/common/collect/FilteredMultimap.java @@ -0,0 +1,17 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.GwtCompatible; +import com.google.common.base.Predicate; +import com.google.common.collect.Multimap; +import java.util.Map; + +@GwtCompatible +interface FilteredMultimap +extends Multimap { + public Multimap unfiltered(); + + public Predicate> entryPredicate(); +} diff --git a/src/com/google/common/collect/FilteredMultimapValues.java b/src/com/google/common/collect/FilteredMultimapValues.java new file mode 100644 index 0000000..eb18545 --- /dev/null +++ b/src/com/google/common/collect/FilteredMultimapValues.java @@ -0,0 +1,71 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.GwtCompatible; +import com.google.common.base.Objects; +import com.google.common.base.Preconditions; +import com.google.common.base.Predicate; +import com.google.common.base.Predicates; +import com.google.common.collect.FilteredMultimap; +import com.google.common.collect.Iterables; +import com.google.common.collect.Maps; +import java.util.AbstractCollection; +import java.util.Collection; +import java.util.Iterator; +import java.util.Map; +import javax.annotation.Nullable; + +@GwtCompatible +final class FilteredMultimapValues +extends AbstractCollection { + private final FilteredMultimap multimap; + + FilteredMultimapValues(FilteredMultimap multimap) { + this.multimap = Preconditions.checkNotNull(multimap); + } + + @Override + public Iterator iterator() { + return Maps.valueIterator(this.multimap.entries().iterator()); + } + + @Override + public boolean contains(@Nullable Object o) { + return this.multimap.containsValue(o); + } + + @Override + public int size() { + return this.multimap.size(); + } + + @Override + public boolean remove(@Nullable Object o) { + Predicate> entryPredicate = this.multimap.entryPredicate(); + Iterator> unfilteredItr = this.multimap.unfiltered().entries().iterator(); + while (unfilteredItr.hasNext()) { + Map.Entry entry = unfilteredItr.next(); + if (!entryPredicate.apply(entry) || !Objects.equal(entry.getValue(), o)) continue; + unfilteredItr.remove(); + return true; + } + return false; + } + + @Override + public boolean removeAll(Collection c) { + return Iterables.removeIf(this.multimap.unfiltered().entries(), Predicates.and(this.multimap.entryPredicate(), Maps.valuePredicateOnEntries(Predicates.in(c)))); + } + + @Override + public boolean retainAll(Collection c) { + return Iterables.removeIf(this.multimap.unfiltered().entries(), Predicates.and(this.multimap.entryPredicate(), Maps.valuePredicateOnEntries(Predicates.not(Predicates.in(c))))); + } + + @Override + public void clear() { + this.multimap.clear(); + } +} diff --git a/src/com/google/common/collect/FilteredSetMultimap.java b/src/com/google/common/collect/FilteredSetMultimap.java new file mode 100644 index 0000000..216671d --- /dev/null +++ b/src/com/google/common/collect/FilteredSetMultimap.java @@ -0,0 +1,16 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.GwtCompatible; +import com.google.common.collect.FilteredMultimap; +import com.google.common.collect.SetMultimap; + +@GwtCompatible +interface FilteredSetMultimap +extends FilteredMultimap, +SetMultimap { + @Override + public SetMultimap unfiltered(); +} diff --git a/src/com/google/common/collect/FluentIterable.java b/src/com/google/common/collect/FluentIterable.java new file mode 100644 index 0000000..ffbffaf --- /dev/null +++ b/src/com/google/common/collect/FluentIterable.java @@ -0,0 +1,233 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.Beta; +import com.google.common.annotations.GwtCompatible; +import com.google.common.annotations.GwtIncompatible; +import com.google.common.base.Function; +import com.google.common.base.Joiner; +import com.google.common.base.Optional; +import com.google.common.base.Preconditions; +import com.google.common.base.Predicate; +import com.google.common.collect.Collections2; +import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableListMultimap; +import com.google.common.collect.ImmutableMap; +import com.google.common.collect.ImmutableSet; +import com.google.common.collect.ImmutableSortedSet; +import com.google.common.collect.Iterables; +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import com.google.common.collect.Multimaps; +import com.google.common.collect.Ordering; +import java.util.Arrays; +import java.util.Collection; +import java.util.Comparator; +import java.util.Iterator; +import java.util.List; +import java.util.SortedSet; +import javax.annotation.CheckReturnValue; +import javax.annotation.Nullable; + +@GwtCompatible(emulated=true) +public abstract class FluentIterable +implements Iterable { + private final Iterable iterable; + + protected FluentIterable() { + this.iterable = this; + } + + FluentIterable(Iterable iterable) { + this.iterable = Preconditions.checkNotNull(iterable); + } + + public static FluentIterable from(final Iterable iterable) { + return iterable instanceof FluentIterable ? (FluentIterable)iterable : new FluentIterable(iterable){ + + @Override + public Iterator iterator() { + return iterable.iterator(); + } + }; + } + + @Deprecated + public static FluentIterable from(FluentIterable iterable) { + return Preconditions.checkNotNull(iterable); + } + + @Beta + public static FluentIterable of(E[] elements) { + return FluentIterable.from(Lists.newArrayList(elements)); + } + + public String toString() { + return Iterables.toString(this.iterable); + } + + public final int size() { + return Iterables.size(this.iterable); + } + + public final boolean contains(@Nullable Object element) { + return Iterables.contains(this.iterable, element); + } + + @CheckReturnValue + public final FluentIterable cycle() { + return FluentIterable.from(Iterables.cycle(this.iterable)); + } + + @CheckReturnValue + @Beta + public final FluentIterable append(Iterable other) { + return FluentIterable.from(Iterables.concat(this.iterable, other)); + } + + @CheckReturnValue + @Beta + public final FluentIterable append(E ... elements) { + return FluentIterable.from(Iterables.concat(this.iterable, Arrays.asList(elements))); + } + + @CheckReturnValue + public final FluentIterable filter(Predicate predicate) { + return FluentIterable.from(Iterables.filter(this.iterable, predicate)); + } + + @CheckReturnValue + @GwtIncompatible(value="Class.isInstance") + public final FluentIterable filter(Class type) { + return FluentIterable.from(Iterables.filter(this.iterable, type)); + } + + public final boolean anyMatch(Predicate predicate) { + return Iterables.any(this.iterable, predicate); + } + + public final boolean allMatch(Predicate predicate) { + return Iterables.all(this.iterable, predicate); + } + + public final Optional firstMatch(Predicate predicate) { + return Iterables.tryFind(this.iterable, predicate); + } + + public final FluentIterable transform(Function function) { + return FluentIterable.from(Iterables.transform(this.iterable, function)); + } + + public FluentIterable transformAndConcat(Function> function) { + return FluentIterable.from(Iterables.concat(this.transform(function))); + } + + public final Optional first() { + Iterator iterator = this.iterable.iterator(); + return iterator.hasNext() ? Optional.of(iterator.next()) : Optional.absent(); + } + + public final Optional last() { + E current; + if (this.iterable instanceof List) { + List list = (List)this.iterable; + if (list.isEmpty()) { + return Optional.absent(); + } + return Optional.of(list.get(list.size() - 1)); + } + Iterator iterator = this.iterable.iterator(); + if (!iterator.hasNext()) { + return Optional.absent(); + } + if (this.iterable instanceof SortedSet) { + SortedSet sortedSet = (SortedSet)this.iterable; + return Optional.of(sortedSet.last()); + } + do { + current = iterator.next(); + } while (iterator.hasNext()); + return Optional.of(current); + } + + @CheckReturnValue + public final FluentIterable skip(int numberToSkip) { + return FluentIterable.from(Iterables.skip(this.iterable, numberToSkip)); + } + + @CheckReturnValue + public final FluentIterable limit(int size) { + return FluentIterable.from(Iterables.limit(this.iterable, size)); + } + + public final boolean isEmpty() { + return !this.iterable.iterator().hasNext(); + } + + public final ImmutableList toList() { + return ImmutableList.copyOf(this.iterable); + } + + public final ImmutableList toSortedList(Comparator comparator) { + return Ordering.from(comparator).immutableSortedCopy(this.iterable); + } + + public final ImmutableSet toSet() { + return ImmutableSet.copyOf(this.iterable); + } + + public final ImmutableSortedSet toSortedSet(Comparator comparator) { + return ImmutableSortedSet.copyOf(comparator, this.iterable); + } + + public final ImmutableMap toMap(Function valueFunction) { + return Maps.toMap(this.iterable, valueFunction); + } + + public final ImmutableListMultimap index(Function keyFunction) { + return Multimaps.index(this.iterable, keyFunction); + } + + public final ImmutableMap uniqueIndex(Function keyFunction) { + return Maps.uniqueIndex(this.iterable, keyFunction); + } + + @GwtIncompatible(value="Array.newArray(Class, int)") + public final E[] toArray(Class type) { + return Iterables.toArray(this.iterable, type); + } + + public final > C copyInto(C collection) { + Preconditions.checkNotNull(collection); + if (this.iterable instanceof Collection) { + collection.addAll(Collections2.cast(this.iterable)); + } else { + for (E item : this.iterable) { + collection.add(item); + } + } + return collection; + } + + @Beta + public final String join(Joiner joiner) { + return joiner.join(this); + } + + public final E get(int position) { + return Iterables.get(this.iterable, position); + } + + private static class FromIterableFunction + implements Function, FluentIterable> { + private FromIterableFunction() { + } + + @Override + public FluentIterable apply(Iterable fromObject) { + return FluentIterable.from(fromObject); + } + } +} diff --git a/src/com/google/common/collect/ForwardingBlockingDeque.java b/src/com/google/common/collect/ForwardingBlockingDeque.java new file mode 100644 index 0000000..708b5a2 --- /dev/null +++ b/src/com/google/common/collect/ForwardingBlockingDeque.java @@ -0,0 +1,94 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.collect.ForwardingDeque; +import java.util.Collection; +import java.util.concurrent.BlockingDeque; +import java.util.concurrent.TimeUnit; + +public abstract class ForwardingBlockingDeque +extends ForwardingDeque +implements BlockingDeque { + protected ForwardingBlockingDeque() { + } + + @Override + protected abstract BlockingDeque delegate(); + + @Override + public int remainingCapacity() { + return this.delegate().remainingCapacity(); + } + + @Override + public void putFirst(E e) throws InterruptedException { + this.delegate().putFirst(e); + } + + @Override + public void putLast(E e) throws InterruptedException { + this.delegate().putLast(e); + } + + @Override + public boolean offerFirst(E e, long timeout, TimeUnit unit) throws InterruptedException { + return this.delegate().offerFirst(e, timeout, unit); + } + + @Override + public boolean offerLast(E e, long timeout, TimeUnit unit) throws InterruptedException { + return this.delegate().offerLast(e, timeout, unit); + } + + @Override + public E takeFirst() throws InterruptedException { + return this.delegate().takeFirst(); + } + + @Override + public E takeLast() throws InterruptedException { + return this.delegate().takeLast(); + } + + @Override + public E pollFirst(long timeout, TimeUnit unit) throws InterruptedException { + return this.delegate().pollFirst(timeout, unit); + } + + @Override + public E pollLast(long timeout, TimeUnit unit) throws InterruptedException { + return this.delegate().pollLast(timeout, unit); + } + + @Override + public void put(E e) throws InterruptedException { + this.delegate().put(e); + } + + @Override + public boolean offer(E e, long timeout, TimeUnit unit) throws InterruptedException { + return this.delegate().offer(e, timeout, unit); + } + + @Override + public E take() throws InterruptedException { + return this.delegate().take(); + } + + @Override + public E poll(long timeout, TimeUnit unit) throws InterruptedException { + return this.delegate().poll(timeout, unit); + } + + @Override + public int drainTo(Collection c) { + return this.delegate().drainTo(c); + } + + @Override + public int drainTo(Collection c, int maxElements) { + return this.delegate().drainTo(c, maxElements); + } +} diff --git a/src/com/google/common/collect/ForwardingCollection.java b/src/com/google/common/collect/ForwardingCollection.java new file mode 100644 index 0000000..391d09b --- /dev/null +++ b/src/com/google/common/collect/ForwardingCollection.java @@ -0,0 +1,141 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.GwtCompatible; +import com.google.common.base.Objects; +import com.google.common.collect.Collections2; +import com.google.common.collect.ForwardingObject; +import com.google.common.collect.Iterators; +import com.google.common.collect.ObjectArrays; +import java.util.Collection; +import java.util.Iterator; +import javax.annotation.Nullable; + +@GwtCompatible +public abstract class ForwardingCollection +extends ForwardingObject +implements Collection { + protected ForwardingCollection() { + } + + @Override + protected abstract Collection delegate(); + + @Override + public Iterator iterator() { + return this.delegate().iterator(); + } + + @Override + public int size() { + return this.delegate().size(); + } + + @Override + public boolean removeAll(Collection collection) { + return this.delegate().removeAll(collection); + } + + @Override + public boolean isEmpty() { + return this.delegate().isEmpty(); + } + + @Override + public boolean contains(Object object) { + return this.delegate().contains(object); + } + + @Override + public boolean add(E element) { + return this.delegate().add(element); + } + + @Override + public boolean remove(Object object) { + return this.delegate().remove(object); + } + + @Override + public boolean containsAll(Collection collection) { + return this.delegate().containsAll(collection); + } + + @Override + public boolean addAll(Collection collection) { + return this.delegate().addAll(collection); + } + + @Override + public boolean retainAll(Collection collection) { + return this.delegate().retainAll(collection); + } + + @Override + public void clear() { + this.delegate().clear(); + } + + @Override + public Object[] toArray() { + return this.delegate().toArray(); + } + + @Override + public T[] toArray(T[] array) { + return this.delegate().toArray(array); + } + + protected boolean standardContains(@Nullable Object object) { + return Iterators.contains(this.iterator(), object); + } + + protected boolean standardContainsAll(Collection collection) { + return Collections2.containsAllImpl(this, collection); + } + + protected boolean standardAddAll(Collection collection) { + return Iterators.addAll(this, collection.iterator()); + } + + protected boolean standardRemove(@Nullable Object object) { + Iterator iterator = this.iterator(); + while (iterator.hasNext()) { + if (!Objects.equal(iterator.next(), object)) continue; + iterator.remove(); + return true; + } + return false; + } + + protected boolean standardRemoveAll(Collection collection) { + return Iterators.removeAll(this.iterator(), collection); + } + + protected boolean standardRetainAll(Collection collection) { + return Iterators.retainAll(this.iterator(), collection); + } + + protected void standardClear() { + Iterators.clear(this.iterator()); + } + + protected boolean standardIsEmpty() { + return !this.iterator().hasNext(); + } + + protected String standardToString() { + return Collections2.toStringImpl(this); + } + + protected Object[] standardToArray() { + Object[] newArray = new Object[this.size()]; + return this.toArray(newArray); + } + + protected T[] standardToArray(T[] array) { + return ObjectArrays.toArrayImpl(this, array); + } +} diff --git a/src/com/google/common/collect/ForwardingConcurrentMap.java b/src/com/google/common/collect/ForwardingConcurrentMap.java new file mode 100644 index 0000000..8b02ec2 --- /dev/null +++ b/src/com/google/common/collect/ForwardingConcurrentMap.java @@ -0,0 +1,39 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.GwtCompatible; +import com.google.common.collect.ForwardingMap; +import java.util.concurrent.ConcurrentMap; + +@GwtCompatible +public abstract class ForwardingConcurrentMap +extends ForwardingMap +implements ConcurrentMap { + protected ForwardingConcurrentMap() { + } + + @Override + protected abstract ConcurrentMap delegate(); + + @Override + public V putIfAbsent(K key, V value) { + return this.delegate().putIfAbsent(key, value); + } + + @Override + public boolean remove(Object key, Object value) { + return this.delegate().remove(key, value); + } + + @Override + public V replace(K key, V value) { + return this.delegate().replace(key, value); + } + + @Override + public boolean replace(K key, V oldValue, V newValue) { + return this.delegate().replace(key, oldValue, newValue); + } +} diff --git a/src/com/google/common/collect/ForwardingDeque.java b/src/com/google/common/collect/ForwardingDeque.java new file mode 100644 index 0000000..df59745 --- /dev/null +++ b/src/com/google/common/collect/ForwardingDeque.java @@ -0,0 +1,103 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.collect.ForwardingQueue; +import java.util.Deque; +import java.util.Iterator; + +public abstract class ForwardingDeque +extends ForwardingQueue +implements Deque { + protected ForwardingDeque() { + } + + @Override + protected abstract Deque delegate(); + + @Override + public void addFirst(E e) { + this.delegate().addFirst(e); + } + + @Override + public void addLast(E e) { + this.delegate().addLast(e); + } + + @Override + public Iterator descendingIterator() { + return this.delegate().descendingIterator(); + } + + @Override + public E getFirst() { + return this.delegate().getFirst(); + } + + @Override + public E getLast() { + return this.delegate().getLast(); + } + + @Override + public boolean offerFirst(E e) { + return this.delegate().offerFirst(e); + } + + @Override + public boolean offerLast(E e) { + return this.delegate().offerLast(e); + } + + @Override + public E peekFirst() { + return this.delegate().peekFirst(); + } + + @Override + public E peekLast() { + return this.delegate().peekLast(); + } + + @Override + public E pollFirst() { + return this.delegate().pollFirst(); + } + + @Override + public E pollLast() { + return this.delegate().pollLast(); + } + + @Override + public E pop() { + return this.delegate().pop(); + } + + @Override + public void push(E e) { + this.delegate().push(e); + } + + @Override + public E removeFirst() { + return this.delegate().removeFirst(); + } + + @Override + public E removeLast() { + return this.delegate().removeLast(); + } + + @Override + public boolean removeFirstOccurrence(Object o) { + return this.delegate().removeFirstOccurrence(o); + } + + @Override + public boolean removeLastOccurrence(Object o) { + return this.delegate().removeLastOccurrence(o); + } +} diff --git a/src/com/google/common/collect/ForwardingImmutableCollection.java b/src/com/google/common/collect/ForwardingImmutableCollection.java new file mode 100644 index 0000000..7a9e336 --- /dev/null +++ b/src/com/google/common/collect/ForwardingImmutableCollection.java @@ -0,0 +1,12 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.GwtCompatible; + +@GwtCompatible(emulated=true) +class ForwardingImmutableCollection { + private ForwardingImmutableCollection() { + } +} diff --git a/src/com/google/common/collect/ForwardingImmutableList.java b/src/com/google/common/collect/ForwardingImmutableList.java new file mode 100644 index 0000000..3c30876 --- /dev/null +++ b/src/com/google/common/collect/ForwardingImmutableList.java @@ -0,0 +1,12 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.GwtCompatible; + +@GwtCompatible(emulated=true) +abstract class ForwardingImmutableList { + private ForwardingImmutableList() { + } +} diff --git a/src/com/google/common/collect/ForwardingImmutableMap.java b/src/com/google/common/collect/ForwardingImmutableMap.java new file mode 100644 index 0000000..4ddefe4 --- /dev/null +++ b/src/com/google/common/collect/ForwardingImmutableMap.java @@ -0,0 +1,12 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.GwtCompatible; + +@GwtCompatible(emulated=true) +abstract class ForwardingImmutableMap { + private ForwardingImmutableMap() { + } +} diff --git a/src/com/google/common/collect/ForwardingImmutableSet.java b/src/com/google/common/collect/ForwardingImmutableSet.java new file mode 100644 index 0000000..80af387 --- /dev/null +++ b/src/com/google/common/collect/ForwardingImmutableSet.java @@ -0,0 +1,12 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.GwtCompatible; + +@GwtCompatible(emulated=true) +abstract class ForwardingImmutableSet { + private ForwardingImmutableSet() { + } +} diff --git a/src/com/google/common/collect/ForwardingIterator.java b/src/com/google/common/collect/ForwardingIterator.java new file mode 100644 index 0000000..a821547 --- /dev/null +++ b/src/com/google/common/collect/ForwardingIterator.java @@ -0,0 +1,34 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.GwtCompatible; +import com.google.common.collect.ForwardingObject; +import java.util.Iterator; + +@GwtCompatible +public abstract class ForwardingIterator +extends ForwardingObject +implements Iterator { + protected ForwardingIterator() { + } + + @Override + protected abstract Iterator delegate(); + + @Override + public boolean hasNext() { + return this.delegate().hasNext(); + } + + @Override + public T next() { + return (T)this.delegate().next(); + } + + @Override + public void remove() { + this.delegate().remove(); + } +} diff --git a/src/com/google/common/collect/ForwardingList.java b/src/com/google/common/collect/ForwardingList.java new file mode 100644 index 0000000..b87c8ad --- /dev/null +++ b/src/com/google/common/collect/ForwardingList.java @@ -0,0 +1,130 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.Beta; +import com.google.common.annotations.GwtCompatible; +import com.google.common.collect.ForwardingCollection; +import com.google.common.collect.Lists; +import java.util.Collection; +import java.util.Iterator; +import java.util.List; +import java.util.ListIterator; +import javax.annotation.Nullable; + +@GwtCompatible +public abstract class ForwardingList +extends ForwardingCollection +implements List { + protected ForwardingList() { + } + + @Override + protected abstract List delegate(); + + @Override + public void add(int index, E element) { + this.delegate().add(index, element); + } + + @Override + public boolean addAll(int index, Collection elements) { + return this.delegate().addAll(index, elements); + } + + @Override + public E get(int index) { + return this.delegate().get(index); + } + + @Override + public int indexOf(Object element) { + return this.delegate().indexOf(element); + } + + @Override + public int lastIndexOf(Object element) { + return this.delegate().lastIndexOf(element); + } + + @Override + public ListIterator listIterator() { + return this.delegate().listIterator(); + } + + @Override + public ListIterator listIterator(int index) { + return this.delegate().listIterator(index); + } + + @Override + public E remove(int index) { + return this.delegate().remove(index); + } + + @Override + public E set(int index, E element) { + return this.delegate().set(index, element); + } + + @Override + public List subList(int fromIndex, int toIndex) { + return this.delegate().subList(fromIndex, toIndex); + } + + @Override + public boolean equals(@Nullable Object object) { + return object == this || this.delegate().equals(object); + } + + @Override + public int hashCode() { + return this.delegate().hashCode(); + } + + protected boolean standardAdd(E element) { + this.add(this.size(), element); + return true; + } + + protected boolean standardAddAll(int index, Iterable elements) { + return Lists.addAllImpl(this, index, elements); + } + + protected int standardIndexOf(@Nullable Object element) { + return Lists.indexOfImpl(this, element); + } + + protected int standardLastIndexOf(@Nullable Object element) { + return Lists.lastIndexOfImpl(this, element); + } + + protected Iterator standardIterator() { + return this.listIterator(); + } + + protected ListIterator standardListIterator() { + return this.listIterator(0); + } + + @Beta + protected ListIterator standardListIterator(int start) { + return Lists.listIteratorImpl(this, start); + } + + @Beta + protected List standardSubList(int fromIndex, int toIndex) { + return Lists.subListImpl(this, fromIndex, toIndex); + } + + @Beta + protected boolean standardEquals(@Nullable Object object) { + return Lists.equalsImpl(this, object); + } + + @Beta + protected int standardHashCode() { + return Lists.hashCodeImpl(this); + } +} diff --git a/src/com/google/common/collect/ForwardingListIterator.java b/src/com/google/common/collect/ForwardingListIterator.java new file mode 100644 index 0000000..eda3293 --- /dev/null +++ b/src/com/google/common/collect/ForwardingListIterator.java @@ -0,0 +1,49 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.GwtCompatible; +import com.google.common.collect.ForwardingIterator; +import java.util.ListIterator; + +@GwtCompatible +public abstract class ForwardingListIterator +extends ForwardingIterator +implements ListIterator { + protected ForwardingListIterator() { + } + + @Override + protected abstract ListIterator delegate(); + + @Override + public void add(E element) { + this.delegate().add(element); + } + + @Override + public boolean hasPrevious() { + return this.delegate().hasPrevious(); + } + + @Override + public int nextIndex() { + return this.delegate().nextIndex(); + } + + @Override + public E previous() { + return this.delegate().previous(); + } + + @Override + public int previousIndex() { + return this.delegate().previousIndex(); + } + + @Override + public void set(E element) { + this.delegate().set(element); + } +} diff --git a/src/com/google/common/collect/ForwardingListMultimap.java b/src/com/google/common/collect/ForwardingListMultimap.java new file mode 100644 index 0000000..5925649 --- /dev/null +++ b/src/com/google/common/collect/ForwardingListMultimap.java @@ -0,0 +1,36 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.GwtCompatible; +import com.google.common.collect.ForwardingMultimap; +import com.google.common.collect.ListMultimap; +import java.util.List; +import javax.annotation.Nullable; + +@GwtCompatible +public abstract class ForwardingListMultimap +extends ForwardingMultimap +implements ListMultimap { + protected ForwardingListMultimap() { + } + + @Override + protected abstract ListMultimap delegate(); + + @Override + public List get(@Nullable K key) { + return this.delegate().get(key); + } + + @Override + public List removeAll(@Nullable Object key) { + return this.delegate().removeAll(key); + } + + @Override + public List replaceValues(K key, Iterable values) { + return this.delegate().replaceValues(key, values); + } +} diff --git a/src/com/google/common/collect/ForwardingMap.java b/src/com/google/common/collect/ForwardingMap.java new file mode 100644 index 0000000..40e7fb4 --- /dev/null +++ b/src/com/google/common/collect/ForwardingMap.java @@ -0,0 +1,169 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.Beta; +import com.google.common.annotations.GwtCompatible; +import com.google.common.base.Objects; +import com.google.common.collect.ForwardingObject; +import com.google.common.collect.Iterators; +import com.google.common.collect.Maps; +import com.google.common.collect.Sets; +import java.util.Collection; +import java.util.Iterator; +import java.util.Map; +import java.util.Set; +import javax.annotation.Nullable; + +@GwtCompatible +public abstract class ForwardingMap +extends ForwardingObject +implements Map { + protected ForwardingMap() { + } + + @Override + protected abstract Map delegate(); + + @Override + public int size() { + return this.delegate().size(); + } + + @Override + public boolean isEmpty() { + return this.delegate().isEmpty(); + } + + @Override + public V remove(Object object) { + return this.delegate().remove(object); + } + + @Override + public void clear() { + this.delegate().clear(); + } + + @Override + public boolean containsKey(@Nullable Object key) { + return this.delegate().containsKey(key); + } + + @Override + public boolean containsValue(@Nullable Object value) { + return this.delegate().containsValue(value); + } + + @Override + public V get(@Nullable Object key) { + return this.delegate().get(key); + } + + @Override + public V put(K key, V value) { + return this.delegate().put(key, value); + } + + @Override + public void putAll(Map map) { + this.delegate().putAll(map); + } + + @Override + public Set keySet() { + return this.delegate().keySet(); + } + + @Override + public Collection values() { + return this.delegate().values(); + } + + @Override + public Set> entrySet() { + return this.delegate().entrySet(); + } + + @Override + public boolean equals(@Nullable Object object) { + return object == this || this.delegate().equals(object); + } + + @Override + public int hashCode() { + return this.delegate().hashCode(); + } + + protected void standardPutAll(Map map) { + Maps.putAllImpl(this, map); + } + + @Beta + protected V standardRemove(@Nullable Object key) { + Iterator> entryIterator = this.entrySet().iterator(); + while (entryIterator.hasNext()) { + Map.Entry entry = entryIterator.next(); + if (!Objects.equal(entry.getKey(), key)) continue; + V value = entry.getValue(); + entryIterator.remove(); + return value; + } + return null; + } + + protected void standardClear() { + Iterators.clear(this.entrySet().iterator()); + } + + @Beta + protected boolean standardContainsKey(@Nullable Object key) { + return Maps.containsKeyImpl(this, key); + } + + protected boolean standardContainsValue(@Nullable Object value) { + return Maps.containsValueImpl(this, value); + } + + protected boolean standardIsEmpty() { + return !this.entrySet().iterator().hasNext(); + } + + protected boolean standardEquals(@Nullable Object object) { + return Maps.equalsImpl(this, object); + } + + protected int standardHashCode() { + return Sets.hashCodeImpl(this.entrySet()); + } + + protected String standardToString() { + return Maps.toStringImpl(this); + } + + @Beta + protected abstract class StandardEntrySet + extends Maps.EntrySet { + @Override + Map map() { + return ForwardingMap.this; + } + } + + @Beta + protected class StandardValues + extends Maps.Values { + public StandardValues() { + super(ForwardingMap.this); + } + } + + @Beta + protected class StandardKeySet + extends Maps.KeySet { + public StandardKeySet() { + super(ForwardingMap.this); + } + } +} diff --git a/src/com/google/common/collect/ForwardingMapEntry.java b/src/com/google/common/collect/ForwardingMapEntry.java new file mode 100644 index 0000000..11df3b1 --- /dev/null +++ b/src/com/google/common/collect/ForwardingMapEntry.java @@ -0,0 +1,68 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.Beta; +import com.google.common.annotations.GwtCompatible; +import com.google.common.base.Objects; +import com.google.common.collect.ForwardingObject; +import java.util.Map; +import javax.annotation.Nullable; + +@GwtCompatible +public abstract class ForwardingMapEntry +extends ForwardingObject +implements Map.Entry { + protected ForwardingMapEntry() { + } + + @Override + protected abstract Map.Entry delegate(); + + @Override + public K getKey() { + return this.delegate().getKey(); + } + + @Override + public V getValue() { + return this.delegate().getValue(); + } + + @Override + public V setValue(V value) { + return this.delegate().setValue(value); + } + + @Override + public boolean equals(@Nullable Object object) { + return this.delegate().equals(object); + } + + @Override + public int hashCode() { + return this.delegate().hashCode(); + } + + protected boolean standardEquals(@Nullable Object object) { + if (object instanceof Map.Entry) { + Map.Entry that = (Map.Entry)object; + return Objects.equal(this.getKey(), that.getKey()) && Objects.equal(this.getValue(), that.getValue()); + } + return false; + } + + protected int standardHashCode() { + K k = this.getKey(); + V v = this.getValue(); + return (k == null ? 0 : k.hashCode()) ^ (v == null ? 0 : v.hashCode()); + } + + @Beta + protected String standardToString() { + String string = String.valueOf(String.valueOf(this.getKey())); + String string2 = String.valueOf(String.valueOf(this.getValue())); + return new StringBuilder(1 + string.length() + string2.length()).append(string).append("=").append(string2).toString(); + } +} diff --git a/src/com/google/common/collect/ForwardingMultimap.java b/src/com/google/common/collect/ForwardingMultimap.java new file mode 100644 index 0000000..6d5632c --- /dev/null +++ b/src/com/google/common/collect/ForwardingMultimap.java @@ -0,0 +1,124 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.GwtCompatible; +import com.google.common.collect.ForwardingObject; +import com.google.common.collect.Multimap; +import com.google.common.collect.Multiset; +import java.util.Collection; +import java.util.Map; +import java.util.Set; +import javax.annotation.Nullable; + +@GwtCompatible +public abstract class ForwardingMultimap +extends ForwardingObject +implements Multimap { + protected ForwardingMultimap() { + } + + @Override + protected abstract Multimap delegate(); + + @Override + public Map> asMap() { + return this.delegate().asMap(); + } + + @Override + public void clear() { + this.delegate().clear(); + } + + @Override + public boolean containsEntry(@Nullable Object key, @Nullable Object value) { + return this.delegate().containsEntry(key, value); + } + + @Override + public boolean containsKey(@Nullable Object key) { + return this.delegate().containsKey(key); + } + + @Override + public boolean containsValue(@Nullable Object value) { + return this.delegate().containsValue(value); + } + + @Override + public Collection> entries() { + return this.delegate().entries(); + } + + @Override + public Collection get(@Nullable K key) { + return this.delegate().get(key); + } + + @Override + public boolean isEmpty() { + return this.delegate().isEmpty(); + } + + @Override + public Multiset keys() { + return this.delegate().keys(); + } + + @Override + public Set keySet() { + return this.delegate().keySet(); + } + + @Override + public boolean put(K key, V value) { + return this.delegate().put(key, value); + } + + @Override + public boolean putAll(K key, Iterable values) { + return this.delegate().putAll(key, values); + } + + @Override + public boolean putAll(Multimap multimap) { + return this.delegate().putAll(multimap); + } + + @Override + public boolean remove(@Nullable Object key, @Nullable Object value) { + return this.delegate().remove(key, value); + } + + @Override + public Collection removeAll(@Nullable Object key) { + return this.delegate().removeAll(key); + } + + @Override + public Collection replaceValues(K key, Iterable values) { + return this.delegate().replaceValues(key, values); + } + + @Override + public int size() { + return this.delegate().size(); + } + + @Override + public Collection values() { + return this.delegate().values(); + } + + @Override + public boolean equals(@Nullable Object object) { + return object == this || this.delegate().equals(object); + } + + @Override + public int hashCode() { + return this.delegate().hashCode(); + } +} diff --git a/src/com/google/common/collect/ForwardingMultiset.java b/src/com/google/common/collect/ForwardingMultiset.java new file mode 100644 index 0000000..81d96c5 --- /dev/null +++ b/src/com/google/common/collect/ForwardingMultiset.java @@ -0,0 +1,155 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.Beta; +import com.google.common.annotations.GwtCompatible; +import com.google.common.base.Objects; +import com.google.common.collect.ForwardingCollection; +import com.google.common.collect.Iterators; +import com.google.common.collect.Multiset; +import com.google.common.collect.Multisets; +import java.util.Collection; +import java.util.Iterator; +import java.util.Set; +import javax.annotation.Nullable; + +@GwtCompatible +public abstract class ForwardingMultiset +extends ForwardingCollection +implements Multiset { + protected ForwardingMultiset() { + } + + @Override + protected abstract Multiset delegate(); + + @Override + public int count(Object element) { + return this.delegate().count(element); + } + + @Override + public int add(E element, int occurrences) { + return this.delegate().add(element, occurrences); + } + + @Override + public int remove(Object element, int occurrences) { + return this.delegate().remove(element, occurrences); + } + + @Override + public Set elementSet() { + return this.delegate().elementSet(); + } + + @Override + public Set> entrySet() { + return this.delegate().entrySet(); + } + + @Override + public boolean equals(@Nullable Object object) { + return object == this || this.delegate().equals(object); + } + + @Override + public int hashCode() { + return this.delegate().hashCode(); + } + + @Override + public int setCount(E element, int count) { + return this.delegate().setCount(element, count); + } + + @Override + public boolean setCount(E element, int oldCount, int newCount) { + return this.delegate().setCount(element, oldCount, newCount); + } + + @Override + protected boolean standardContains(@Nullable Object object) { + return this.count(object) > 0; + } + + @Override + protected void standardClear() { + Iterators.clear(this.entrySet().iterator()); + } + + @Beta + protected int standardCount(@Nullable Object object) { + for (Multiset.Entry entry : this.entrySet()) { + if (!Objects.equal(entry.getElement(), object)) continue; + return entry.getCount(); + } + return 0; + } + + protected boolean standardAdd(E element) { + this.add(element, 1); + return true; + } + + @Override + @Beta + protected boolean standardAddAll(Collection elementsToAdd) { + return Multisets.addAllImpl(this, elementsToAdd); + } + + @Override + protected boolean standardRemove(Object element) { + return this.remove(element, 1) > 0; + } + + @Override + protected boolean standardRemoveAll(Collection elementsToRemove) { + return Multisets.removeAllImpl(this, elementsToRemove); + } + + @Override + protected boolean standardRetainAll(Collection elementsToRetain) { + return Multisets.retainAllImpl(this, elementsToRetain); + } + + protected int standardSetCount(E element, int count) { + return Multisets.setCountImpl(this, element, count); + } + + protected boolean standardSetCount(E element, int oldCount, int newCount) { + return Multisets.setCountImpl(this, element, oldCount, newCount); + } + + protected Iterator standardIterator() { + return Multisets.iteratorImpl(this); + } + + protected int standardSize() { + return Multisets.sizeImpl(this); + } + + protected boolean standardEquals(@Nullable Object object) { + return Multisets.equalsImpl(this, object); + } + + protected int standardHashCode() { + return this.entrySet().hashCode(); + } + + @Override + protected String standardToString() { + return this.entrySet().toString(); + } + + @Beta + protected class StandardElementSet + extends Multisets.ElementSet { + @Override + Multiset multiset() { + return ForwardingMultiset.this; + } + } +} diff --git a/src/com/google/common/collect/ForwardingNavigableMap.java b/src/com/google/common/collect/ForwardingNavigableMap.java new file mode 100644 index 0000000..6206dc6 --- /dev/null +++ b/src/com/google/common/collect/ForwardingNavigableMap.java @@ -0,0 +1,254 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.Beta; +import com.google.common.collect.CollectPreconditions; +import com.google.common.collect.ForwardingSortedMap; +import com.google.common.collect.Iterables; +import com.google.common.collect.Iterators; +import com.google.common.collect.Maps; +import java.util.Iterator; +import java.util.Map; +import java.util.NavigableMap; +import java.util.NavigableSet; +import java.util.NoSuchElementException; +import java.util.SortedMap; + +public abstract class ForwardingNavigableMap +extends ForwardingSortedMap +implements NavigableMap { + protected ForwardingNavigableMap() { + } + + @Override + protected abstract NavigableMap delegate(); + + @Override + public Map.Entry lowerEntry(K key) { + return this.delegate().lowerEntry(key); + } + + protected Map.Entry standardLowerEntry(K key) { + return this.headMap(key, false).lastEntry(); + } + + @Override + public K lowerKey(K key) { + return this.delegate().lowerKey(key); + } + + protected K standardLowerKey(K key) { + return Maps.keyOrNull(this.lowerEntry(key)); + } + + @Override + public Map.Entry floorEntry(K key) { + return this.delegate().floorEntry(key); + } + + protected Map.Entry standardFloorEntry(K key) { + return this.headMap(key, true).lastEntry(); + } + + @Override + public K floorKey(K key) { + return this.delegate().floorKey(key); + } + + protected K standardFloorKey(K key) { + return Maps.keyOrNull(this.floorEntry(key)); + } + + @Override + public Map.Entry ceilingEntry(K key) { + return this.delegate().ceilingEntry(key); + } + + protected Map.Entry standardCeilingEntry(K key) { + return this.tailMap(key, true).firstEntry(); + } + + @Override + public K ceilingKey(K key) { + return this.delegate().ceilingKey(key); + } + + protected K standardCeilingKey(K key) { + return Maps.keyOrNull(this.ceilingEntry(key)); + } + + @Override + public Map.Entry higherEntry(K key) { + return this.delegate().higherEntry(key); + } + + protected Map.Entry standardHigherEntry(K key) { + return this.tailMap(key, false).firstEntry(); + } + + @Override + public K higherKey(K key) { + return this.delegate().higherKey(key); + } + + protected K standardHigherKey(K key) { + return Maps.keyOrNull(this.higherEntry(key)); + } + + @Override + public Map.Entry firstEntry() { + return this.delegate().firstEntry(); + } + + protected Map.Entry standardFirstEntry() { + return Iterables.getFirst(this.entrySet(), null); + } + + protected K standardFirstKey() { + Map.Entry entry = this.firstEntry(); + if (entry == null) { + throw new NoSuchElementException(); + } + return entry.getKey(); + } + + @Override + public Map.Entry lastEntry() { + return this.delegate().lastEntry(); + } + + protected Map.Entry standardLastEntry() { + return Iterables.getFirst(this.descendingMap().entrySet(), null); + } + + protected K standardLastKey() { + Map.Entry entry = this.lastEntry(); + if (entry == null) { + throw new NoSuchElementException(); + } + return entry.getKey(); + } + + @Override + public Map.Entry pollFirstEntry() { + return this.delegate().pollFirstEntry(); + } + + protected Map.Entry standardPollFirstEntry() { + return Iterators.pollNext(this.entrySet().iterator()); + } + + @Override + public Map.Entry pollLastEntry() { + return this.delegate().pollLastEntry(); + } + + protected Map.Entry standardPollLastEntry() { + return Iterators.pollNext(this.descendingMap().entrySet().iterator()); + } + + @Override + public NavigableMap descendingMap() { + return this.delegate().descendingMap(); + } + + @Override + public NavigableSet navigableKeySet() { + return this.delegate().navigableKeySet(); + } + + @Override + public NavigableSet descendingKeySet() { + return this.delegate().descendingKeySet(); + } + + @Beta + protected NavigableSet standardDescendingKeySet() { + return this.descendingMap().navigableKeySet(); + } + + @Override + protected SortedMap standardSubMap(K fromKey, K toKey) { + return this.subMap(fromKey, true, toKey, false); + } + + @Override + public NavigableMap subMap(K fromKey, boolean fromInclusive, K toKey, boolean toInclusive) { + return this.delegate().subMap(fromKey, fromInclusive, toKey, toInclusive); + } + + @Override + public NavigableMap headMap(K toKey, boolean inclusive) { + return this.delegate().headMap(toKey, inclusive); + } + + @Override + public NavigableMap tailMap(K fromKey, boolean inclusive) { + return this.delegate().tailMap(fromKey, inclusive); + } + + protected SortedMap standardHeadMap(K toKey) { + return this.headMap(toKey, false); + } + + protected SortedMap standardTailMap(K fromKey) { + return this.tailMap(fromKey, true); + } + + @Beta + protected class StandardNavigableKeySet + extends Maps.NavigableKeySet { + public StandardNavigableKeySet() { + super(ForwardingNavigableMap.this); + } + } + + @Beta + protected class StandardDescendingMap + extends Maps.DescendingMap { + @Override + NavigableMap forward() { + return ForwardingNavigableMap.this; + } + + @Override + protected Iterator> entryIterator() { + return new Iterator>(){ + private Map.Entry toRemove = null; + private Map.Entry nextOrNull = StandardDescendingMap.this.forward().lastEntry(); + + @Override + public boolean hasNext() { + return this.nextOrNull != null; + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public Map.Entry next() { + if (!this.hasNext()) { + throw new NoSuchElementException(); + } + try { + Map.Entry entry = this.nextOrNull; + return entry; + } + finally { + this.toRemove = this.nextOrNull; + this.nextOrNull = StandardDescendingMap.this.forward().lowerEntry(this.nextOrNull.getKey()); + } + } + + @Override + public void remove() { + CollectPreconditions.checkRemove(this.toRemove != null); + StandardDescendingMap.this.forward().remove(this.toRemove.getKey()); + this.toRemove = null; + } + }; + } + } +} diff --git a/src/com/google/common/collect/ForwardingNavigableSet.java b/src/com/google/common/collect/ForwardingNavigableSet.java new file mode 100644 index 0000000..79b5210 --- /dev/null +++ b/src/com/google/common/collect/ForwardingNavigableSet.java @@ -0,0 +1,135 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.Beta; +import com.google.common.collect.ForwardingSortedSet; +import com.google.common.collect.Iterators; +import com.google.common.collect.Sets; +import java.util.Iterator; +import java.util.NavigableSet; +import java.util.SortedSet; + +public abstract class ForwardingNavigableSet +extends ForwardingSortedSet +implements NavigableSet { + protected ForwardingNavigableSet() { + } + + @Override + protected abstract NavigableSet delegate(); + + @Override + public E lower(E e) { + return this.delegate().lower(e); + } + + protected E standardLower(E e) { + return Iterators.getNext(this.headSet(e, false).descendingIterator(), null); + } + + @Override + public E floor(E e) { + return this.delegate().floor(e); + } + + protected E standardFloor(E e) { + return Iterators.getNext(this.headSet(e, true).descendingIterator(), null); + } + + @Override + public E ceiling(E e) { + return this.delegate().ceiling(e); + } + + protected E standardCeiling(E e) { + return Iterators.getNext(this.tailSet(e, true).iterator(), null); + } + + @Override + public E higher(E e) { + return this.delegate().higher(e); + } + + protected E standardHigher(E e) { + return Iterators.getNext(this.tailSet(e, false).iterator(), null); + } + + @Override + public E pollFirst() { + return this.delegate().pollFirst(); + } + + protected E standardPollFirst() { + return Iterators.pollNext(this.iterator()); + } + + @Override + public E pollLast() { + return this.delegate().pollLast(); + } + + protected E standardPollLast() { + return Iterators.pollNext(this.descendingIterator()); + } + + protected E standardFirst() { + return this.iterator().next(); + } + + protected E standardLast() { + return this.descendingIterator().next(); + } + + @Override + public NavigableSet descendingSet() { + return this.delegate().descendingSet(); + } + + @Override + public Iterator descendingIterator() { + return this.delegate().descendingIterator(); + } + + @Override + public NavigableSet subSet(E fromElement, boolean fromInclusive, E toElement, boolean toInclusive) { + return this.delegate().subSet(fromElement, fromInclusive, toElement, toInclusive); + } + + @Beta + protected NavigableSet standardSubSet(E fromElement, boolean fromInclusive, E toElement, boolean toInclusive) { + return this.tailSet(fromElement, fromInclusive).headSet(toElement, toInclusive); + } + + @Override + protected SortedSet standardSubSet(E fromElement, E toElement) { + return this.subSet(fromElement, true, toElement, false); + } + + @Override + public NavigableSet headSet(E toElement, boolean inclusive) { + return this.delegate().headSet(toElement, inclusive); + } + + protected SortedSet standardHeadSet(E toElement) { + return this.headSet(toElement, false); + } + + @Override + public NavigableSet tailSet(E fromElement, boolean inclusive) { + return this.delegate().tailSet(fromElement, inclusive); + } + + protected SortedSet standardTailSet(E fromElement) { + return this.tailSet(fromElement, true); + } + + @Beta + protected class StandardDescendingSet + extends Sets.DescendingSet { + public StandardDescendingSet() { + super(ForwardingNavigableSet.this); + } + } +} diff --git a/src/com/google/common/collect/ForwardingObject.java b/src/com/google/common/collect/ForwardingObject.java new file mode 100644 index 0000000..7a450e5 --- /dev/null +++ b/src/com/google/common/collect/ForwardingObject.java @@ -0,0 +1,18 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.GwtCompatible; + +@GwtCompatible +public abstract class ForwardingObject { + protected ForwardingObject() { + } + + protected abstract Object delegate(); + + public String toString() { + return this.delegate().toString(); + } +} diff --git a/src/com/google/common/collect/ForwardingQueue.java b/src/com/google/common/collect/ForwardingQueue.java new file mode 100644 index 0000000..b402bbb --- /dev/null +++ b/src/com/google/common/collect/ForwardingQueue.java @@ -0,0 +1,72 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.GwtCompatible; +import com.google.common.collect.ForwardingCollection; +import java.util.NoSuchElementException; +import java.util.Queue; + +@GwtCompatible +public abstract class ForwardingQueue +extends ForwardingCollection +implements Queue { + protected ForwardingQueue() { + } + + @Override + protected abstract Queue delegate(); + + @Override + public boolean offer(E o) { + return this.delegate().offer(o); + } + + @Override + public E poll() { + return this.delegate().poll(); + } + + @Override + public E remove() { + return this.delegate().remove(); + } + + @Override + public E peek() { + return this.delegate().peek(); + } + + @Override + public E element() { + return this.delegate().element(); + } + + protected boolean standardOffer(E e) { + try { + return this.add(e); + } + catch (IllegalStateException caught) { + return false; + } + } + + protected E standardPeek() { + try { + return this.element(); + } + catch (NoSuchElementException caught) { + return null; + } + } + + protected E standardPoll() { + try { + return this.remove(); + } + catch (NoSuchElementException caught) { + return null; + } + } +} diff --git a/src/com/google/common/collect/ForwardingSet.java b/src/com/google/common/collect/ForwardingSet.java new file mode 100644 index 0000000..7694836 --- /dev/null +++ b/src/com/google/common/collect/ForwardingSet.java @@ -0,0 +1,46 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.GwtCompatible; +import com.google.common.base.Preconditions; +import com.google.common.collect.ForwardingCollection; +import com.google.common.collect.Sets; +import java.util.Collection; +import java.util.Set; +import javax.annotation.Nullable; + +@GwtCompatible +public abstract class ForwardingSet +extends ForwardingCollection +implements Set { + protected ForwardingSet() { + } + + @Override + protected abstract Set delegate(); + + @Override + public boolean equals(@Nullable Object object) { + return object == this || this.delegate().equals(object); + } + + @Override + public int hashCode() { + return this.delegate().hashCode(); + } + + @Override + protected boolean standardRemoveAll(Collection collection) { + return Sets.removeAllImpl(this, Preconditions.checkNotNull(collection)); + } + + protected boolean standardEquals(@Nullable Object object) { + return Sets.equalsImpl(this, object); + } + + protected int standardHashCode() { + return Sets.hashCodeImpl(this); + } +} diff --git a/src/com/google/common/collect/ForwardingSetMultimap.java b/src/com/google/common/collect/ForwardingSetMultimap.java new file mode 100644 index 0000000..e2593b9 --- /dev/null +++ b/src/com/google/common/collect/ForwardingSetMultimap.java @@ -0,0 +1,39 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.GwtCompatible; +import com.google.common.collect.ForwardingMultimap; +import com.google.common.collect.SetMultimap; +import java.util.Map; +import java.util.Set; +import javax.annotation.Nullable; + +@GwtCompatible +public abstract class ForwardingSetMultimap +extends ForwardingMultimap +implements SetMultimap { + @Override + protected abstract SetMultimap delegate(); + + @Override + public Set> entries() { + return this.delegate().entries(); + } + + @Override + public Set get(@Nullable K key) { + return this.delegate().get(key); + } + + @Override + public Set removeAll(@Nullable Object key) { + return this.delegate().removeAll(key); + } + + @Override + public Set replaceValues(K key, Iterable values) { + return this.delegate().replaceValues(key, values); + } +} diff --git a/src/com/google/common/collect/ForwardingSortedMap.java b/src/com/google/common/collect/ForwardingSortedMap.java new file mode 100644 index 0000000..aace637 --- /dev/null +++ b/src/com/google/common/collect/ForwardingSortedMap.java @@ -0,0 +1,96 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.Beta; +import com.google.common.annotations.GwtCompatible; +import com.google.common.base.Preconditions; +import com.google.common.collect.ForwardingMap; +import com.google.common.collect.Maps; +import java.util.Comparator; +import java.util.NoSuchElementException; +import java.util.SortedMap; +import javax.annotation.Nullable; + +@GwtCompatible +public abstract class ForwardingSortedMap +extends ForwardingMap +implements SortedMap { + protected ForwardingSortedMap() { + } + + @Override + protected abstract SortedMap delegate(); + + @Override + public Comparator comparator() { + return this.delegate().comparator(); + } + + @Override + public K firstKey() { + return this.delegate().firstKey(); + } + + @Override + public SortedMap headMap(K toKey) { + return this.delegate().headMap(toKey); + } + + @Override + public K lastKey() { + return this.delegate().lastKey(); + } + + @Override + public SortedMap subMap(K fromKey, K toKey) { + return this.delegate().subMap(fromKey, toKey); + } + + @Override + public SortedMap tailMap(K fromKey) { + return this.delegate().tailMap(fromKey); + } + + private int unsafeCompare(Object k1, Object k2) { + Comparator comparator = this.comparator(); + if (comparator == null) { + return ((Comparable)k1).compareTo(k2); + } + return comparator.compare(k1, k2); + } + + @Override + @Beta + protected boolean standardContainsKey(@Nullable Object key) { + try { + ForwardingSortedMap self = this; + Object ceilingKey = self.tailMap(key).firstKey(); + return this.unsafeCompare(ceilingKey, key) == 0; + } + catch (ClassCastException e) { + return false; + } + catch (NoSuchElementException e) { + return false; + } + catch (NullPointerException e) { + return false; + } + } + + @Beta + protected SortedMap standardSubMap(K fromKey, K toKey) { + Preconditions.checkArgument(this.unsafeCompare(fromKey, toKey) <= 0, "fromKey must be <= toKey"); + return this.tailMap(fromKey).headMap(toKey); + } + + @Beta + protected class StandardKeySet + extends Maps.SortedKeySet { + public StandardKeySet() { + super(ForwardingSortedMap.this); + } + } +} diff --git a/src/com/google/common/collect/ForwardingSortedMultiset.java b/src/com/google/common/collect/ForwardingSortedMultiset.java new file mode 100644 index 0000000..237c701 --- /dev/null +++ b/src/com/google/common/collect/ForwardingSortedMultiset.java @@ -0,0 +1,138 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.Beta; +import com.google.common.annotations.GwtCompatible; +import com.google.common.collect.BoundType; +import com.google.common.collect.DescendingMultiset; +import com.google.common.collect.ForwardingMultiset; +import com.google.common.collect.Multiset; +import com.google.common.collect.Multisets; +import com.google.common.collect.SortedMultiset; +import com.google.common.collect.SortedMultisets; +import java.util.Comparator; +import java.util.Iterator; +import java.util.NavigableSet; + +@Beta +@GwtCompatible(emulated=true) +public abstract class ForwardingSortedMultiset +extends ForwardingMultiset +implements SortedMultiset { + protected ForwardingSortedMultiset() { + } + + @Override + protected abstract SortedMultiset delegate(); + + @Override + public NavigableSet elementSet() { + return (NavigableSet)super.elementSet(); + } + + @Override + public Comparator comparator() { + return this.delegate().comparator(); + } + + @Override + public SortedMultiset descendingMultiset() { + return this.delegate().descendingMultiset(); + } + + @Override + public Multiset.Entry firstEntry() { + return this.delegate().firstEntry(); + } + + protected Multiset.Entry standardFirstEntry() { + Iterator entryIterator = this.entrySet().iterator(); + if (!entryIterator.hasNext()) { + return null; + } + Multiset.Entry entry = entryIterator.next(); + return Multisets.immutableEntry(entry.getElement(), entry.getCount()); + } + + @Override + public Multiset.Entry lastEntry() { + return this.delegate().lastEntry(); + } + + protected Multiset.Entry standardLastEntry() { + Iterator> entryIterator = this.descendingMultiset().entrySet().iterator(); + if (!entryIterator.hasNext()) { + return null; + } + Multiset.Entry entry = entryIterator.next(); + return Multisets.immutableEntry(entry.getElement(), entry.getCount()); + } + + @Override + public Multiset.Entry pollFirstEntry() { + return this.delegate().pollFirstEntry(); + } + + protected Multiset.Entry standardPollFirstEntry() { + Iterator entryIterator = this.entrySet().iterator(); + if (!entryIterator.hasNext()) { + return null; + } + Multiset.Entry entry = entryIterator.next(); + entry = Multisets.immutableEntry(entry.getElement(), entry.getCount()); + entryIterator.remove(); + return entry; + } + + @Override + public Multiset.Entry pollLastEntry() { + return this.delegate().pollLastEntry(); + } + + protected Multiset.Entry standardPollLastEntry() { + Iterator> entryIterator = this.descendingMultiset().entrySet().iterator(); + if (!entryIterator.hasNext()) { + return null; + } + Multiset.Entry entry = entryIterator.next(); + entry = Multisets.immutableEntry(entry.getElement(), entry.getCount()); + entryIterator.remove(); + return entry; + } + + @Override + public SortedMultiset headMultiset(E upperBound, BoundType boundType) { + return this.delegate().headMultiset(upperBound, boundType); + } + + @Override + public SortedMultiset subMultiset(E lowerBound, BoundType lowerBoundType, E upperBound, BoundType upperBoundType) { + return this.delegate().subMultiset(lowerBound, lowerBoundType, upperBound, upperBoundType); + } + + protected SortedMultiset standardSubMultiset(E lowerBound, BoundType lowerBoundType, E upperBound, BoundType upperBoundType) { + return this.tailMultiset(lowerBound, lowerBoundType).headMultiset(upperBound, upperBoundType); + } + + @Override + public SortedMultiset tailMultiset(E lowerBound, BoundType boundType) { + return this.delegate().tailMultiset(lowerBound, boundType); + } + + protected abstract class StandardDescendingMultiset + extends DescendingMultiset { + @Override + SortedMultiset forwardMultiset() { + return ForwardingSortedMultiset.this; + } + } + + protected class StandardElementSet + extends SortedMultisets.NavigableElementSet { + public StandardElementSet() { + super(ForwardingSortedMultiset.this); + } + } +} diff --git a/src/com/google/common/collect/ForwardingSortedSet.java b/src/com/google/common/collect/ForwardingSortedSet.java new file mode 100644 index 0000000..5141a33 --- /dev/null +++ b/src/com/google/common/collect/ForwardingSortedSet.java @@ -0,0 +1,104 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.Beta; +import com.google.common.annotations.GwtCompatible; +import com.google.common.collect.ForwardingSet; +import java.util.Comparator; +import java.util.Iterator; +import java.util.NoSuchElementException; +import java.util.SortedSet; +import javax.annotation.Nullable; + +@GwtCompatible +public abstract class ForwardingSortedSet +extends ForwardingSet +implements SortedSet { + protected ForwardingSortedSet() { + } + + @Override + protected abstract SortedSet delegate(); + + @Override + public Comparator comparator() { + return this.delegate().comparator(); + } + + @Override + public E first() { + return this.delegate().first(); + } + + @Override + public SortedSet headSet(E toElement) { + return this.delegate().headSet(toElement); + } + + @Override + public E last() { + return this.delegate().last(); + } + + @Override + public SortedSet subSet(E fromElement, E toElement) { + return this.delegate().subSet(fromElement, toElement); + } + + @Override + public SortedSet tailSet(E fromElement) { + return this.delegate().tailSet(fromElement); + } + + private int unsafeCompare(Object o1, Object o2) { + Comparator comparator = this.comparator(); + return comparator == null ? ((Comparable)o1).compareTo(o2) : comparator.compare(o1, o2); + } + + @Override + @Beta + protected boolean standardContains(@Nullable Object object) { + try { + ForwardingSortedSet self = this; + Object ceiling = self.tailSet(object).first(); + return this.unsafeCompare(ceiling, object) == 0; + } + catch (ClassCastException e) { + return false; + } + catch (NoSuchElementException e) { + return false; + } + catch (NullPointerException e) { + return false; + } + } + + @Override + @Beta + protected boolean standardRemove(@Nullable Object object) { + try { + Object ceiling; + ForwardingSortedSet self = this; + Iterator iterator = self.tailSet(object).iterator(); + if (iterator.hasNext() && this.unsafeCompare(ceiling = iterator.next(), object) == 0) { + iterator.remove(); + return true; + } + } + catch (ClassCastException e) { + return false; + } + catch (NullPointerException e) { + return false; + } + return false; + } + + @Beta + protected SortedSet standardSubSet(E fromElement, E toElement) { + return this.tailSet(fromElement).headSet(toElement); + } +} diff --git a/src/com/google/common/collect/ForwardingSortedSetMultimap.java b/src/com/google/common/collect/ForwardingSortedSetMultimap.java new file mode 100644 index 0000000..4a6246f --- /dev/null +++ b/src/com/google/common/collect/ForwardingSortedSetMultimap.java @@ -0,0 +1,42 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.GwtCompatible; +import com.google.common.collect.ForwardingSetMultimap; +import com.google.common.collect.SortedSetMultimap; +import java.util.Comparator; +import java.util.SortedSet; +import javax.annotation.Nullable; + +@GwtCompatible +public abstract class ForwardingSortedSetMultimap +extends ForwardingSetMultimap +implements SortedSetMultimap { + protected ForwardingSortedSetMultimap() { + } + + @Override + protected abstract SortedSetMultimap delegate(); + + @Override + public SortedSet get(@Nullable K key) { + return this.delegate().get(key); + } + + @Override + public SortedSet removeAll(@Nullable Object key) { + return this.delegate().removeAll(key); + } + + @Override + public SortedSet replaceValues(K key, Iterable values) { + return this.delegate().replaceValues(key, values); + } + + @Override + public Comparator valueComparator() { + return this.delegate().valueComparator(); + } +} diff --git a/src/com/google/common/collect/ForwardingTable.java b/src/com/google/common/collect/ForwardingTable.java new file mode 100644 index 0000000..8a4a19e --- /dev/null +++ b/src/com/google/common/collect/ForwardingTable.java @@ -0,0 +1,127 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.GwtCompatible; +import com.google.common.collect.ForwardingObject; +import com.google.common.collect.Table; +import java.util.Collection; +import java.util.Map; +import java.util.Set; + +@GwtCompatible +public abstract class ForwardingTable +extends ForwardingObject +implements Table { + protected ForwardingTable() { + } + + @Override + protected abstract Table delegate(); + + @Override + public Set> cellSet() { + return this.delegate().cellSet(); + } + + @Override + public void clear() { + this.delegate().clear(); + } + + @Override + public Map column(C columnKey) { + return this.delegate().column(columnKey); + } + + @Override + public Set columnKeySet() { + return this.delegate().columnKeySet(); + } + + @Override + public Map> columnMap() { + return this.delegate().columnMap(); + } + + @Override + public boolean contains(Object rowKey, Object columnKey) { + return this.delegate().contains(rowKey, columnKey); + } + + @Override + public boolean containsColumn(Object columnKey) { + return this.delegate().containsColumn(columnKey); + } + + @Override + public boolean containsRow(Object rowKey) { + return this.delegate().containsRow(rowKey); + } + + @Override + public boolean containsValue(Object value) { + return this.delegate().containsValue(value); + } + + @Override + public V get(Object rowKey, Object columnKey) { + return this.delegate().get(rowKey, columnKey); + } + + @Override + public boolean isEmpty() { + return this.delegate().isEmpty(); + } + + @Override + public V put(R rowKey, C columnKey, V value) { + return this.delegate().put(rowKey, columnKey, value); + } + + @Override + public void putAll(Table table) { + this.delegate().putAll(table); + } + + @Override + public V remove(Object rowKey, Object columnKey) { + return this.delegate().remove(rowKey, columnKey); + } + + @Override + public Map row(R rowKey) { + return this.delegate().row(rowKey); + } + + @Override + public Set rowKeySet() { + return this.delegate().rowKeySet(); + } + + @Override + public Map> rowMap() { + return this.delegate().rowMap(); + } + + @Override + public int size() { + return this.delegate().size(); + } + + @Override + public Collection values() { + return this.delegate().values(); + } + + @Override + public boolean equals(Object obj) { + return obj == this || this.delegate().equals(obj); + } + + @Override + public int hashCode() { + return this.delegate().hashCode(); + } +} diff --git a/src/com/google/common/collect/GeneralRange.java b/src/com/google/common/collect/GeneralRange.java new file mode 100644 index 0000000..5979d22 --- /dev/null +++ b/src/com/google/common/collect/GeneralRange.java @@ -0,0 +1,192 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.GwtCompatible; +import com.google.common.base.Objects; +import com.google.common.base.Preconditions; +import com.google.common.collect.BoundType; +import com.google.common.collect.Ordering; +import com.google.common.collect.Range; +import java.io.Serializable; +import java.util.Comparator; +import javax.annotation.Nullable; + +@GwtCompatible(serializable=true) +final class GeneralRange +implements Serializable { + private final Comparator comparator; + private final boolean hasLowerBound; + @Nullable + private final T lowerEndpoint; + private final BoundType lowerBoundType; + private final boolean hasUpperBound; + @Nullable + private final T upperEndpoint; + private final BoundType upperBoundType; + private transient GeneralRange reverse; + + static GeneralRange from(Range range) { + T lowerEndpoint = range.hasLowerBound() ? (T)range.lowerEndpoint() : null; + BoundType lowerBoundType = range.hasLowerBound() ? range.lowerBoundType() : BoundType.OPEN; + T upperEndpoint = range.hasUpperBound() ? (T)range.upperEndpoint() : null; + BoundType upperBoundType = range.hasUpperBound() ? range.upperBoundType() : BoundType.OPEN; + return new GeneralRange(Ordering.natural(), range.hasLowerBound(), lowerEndpoint, lowerBoundType, range.hasUpperBound(), upperEndpoint, upperBoundType); + } + + static GeneralRange all(Comparator comparator) { + return new GeneralRange(comparator, false, null, BoundType.OPEN, false, null, BoundType.OPEN); + } + + static GeneralRange downTo(Comparator comparator, @Nullable T endpoint, BoundType boundType) { + return new GeneralRange((Comparator)comparator, true, endpoint, boundType, false, null, BoundType.OPEN); + } + + static GeneralRange upTo(Comparator comparator, @Nullable T endpoint, BoundType boundType) { + return new GeneralRange((Comparator)comparator, false, null, BoundType.OPEN, true, endpoint, boundType); + } + + static GeneralRange range(Comparator comparator, @Nullable T lower, BoundType lowerType, @Nullable T upper, BoundType upperType) { + return new GeneralRange(comparator, true, lower, lowerType, true, upper, upperType); + } + + private GeneralRange(Comparator comparator, boolean hasLowerBound, @Nullable T lowerEndpoint, BoundType lowerBoundType, boolean hasUpperBound, @Nullable T upperEndpoint, BoundType upperBoundType) { + this.comparator = Preconditions.checkNotNull(comparator); + this.hasLowerBound = hasLowerBound; + this.hasUpperBound = hasUpperBound; + this.lowerEndpoint = lowerEndpoint; + this.lowerBoundType = Preconditions.checkNotNull(lowerBoundType); + this.upperEndpoint = upperEndpoint; + this.upperBoundType = Preconditions.checkNotNull(upperBoundType); + if (hasLowerBound) { + comparator.compare(lowerEndpoint, lowerEndpoint); + } + if (hasUpperBound) { + comparator.compare(upperEndpoint, upperEndpoint); + } + if (hasLowerBound && hasUpperBound) { + int cmp = comparator.compare(lowerEndpoint, upperEndpoint); + Preconditions.checkArgument(cmp <= 0, "lowerEndpoint (%s) > upperEndpoint (%s)", lowerEndpoint, upperEndpoint); + if (cmp == 0) { + Preconditions.checkArgument(lowerBoundType != BoundType.OPEN | upperBoundType != BoundType.OPEN); + } + } + } + + Comparator comparator() { + return this.comparator; + } + + boolean hasLowerBound() { + return this.hasLowerBound; + } + + boolean hasUpperBound() { + return this.hasUpperBound; + } + + boolean isEmpty() { + return this.hasUpperBound() && this.tooLow(this.getUpperEndpoint()) || this.hasLowerBound() && this.tooHigh(this.getLowerEndpoint()); + } + + boolean tooLow(@Nullable T t) { + if (!this.hasLowerBound()) { + return false; + } + T lbound = this.getLowerEndpoint(); + int cmp = this.comparator.compare(t, lbound); + return cmp < 0 | cmp == 0 & this.getLowerBoundType() == BoundType.OPEN; + } + + boolean tooHigh(@Nullable T t) { + if (!this.hasUpperBound()) { + return false; + } + T ubound = this.getUpperEndpoint(); + int cmp = this.comparator.compare(t, ubound); + return cmp > 0 | cmp == 0 & this.getUpperBoundType() == BoundType.OPEN; + } + + boolean contains(@Nullable T t) { + return !this.tooLow(t) && !this.tooHigh(t); + } + + GeneralRange intersect(GeneralRange other) { + int cmp; + int cmp2; + Preconditions.checkNotNull(other); + Preconditions.checkArgument(this.comparator.equals(other.comparator)); + boolean hasLowBound = this.hasLowerBound; + T lowEnd = this.getLowerEndpoint(); + BoundType lowType = this.getLowerBoundType(); + if (!this.hasLowerBound()) { + hasLowBound = other.hasLowerBound; + lowEnd = other.getLowerEndpoint(); + lowType = other.getLowerBoundType(); + } else if (other.hasLowerBound() && ((cmp2 = this.comparator.compare(this.getLowerEndpoint(), other.getLowerEndpoint())) < 0 || cmp2 == 0 && other.getLowerBoundType() == BoundType.OPEN)) { + lowEnd = other.getLowerEndpoint(); + lowType = other.getLowerBoundType(); + } + boolean hasUpBound = this.hasUpperBound; + T upEnd = this.getUpperEndpoint(); + BoundType upType = this.getUpperBoundType(); + if (!this.hasUpperBound()) { + hasUpBound = other.hasUpperBound; + upEnd = other.getUpperEndpoint(); + upType = other.getUpperBoundType(); + } else if (other.hasUpperBound() && ((cmp = this.comparator.compare(this.getUpperEndpoint(), other.getUpperEndpoint())) > 0 || cmp == 0 && other.getUpperBoundType() == BoundType.OPEN)) { + upEnd = other.getUpperEndpoint(); + upType = other.getUpperBoundType(); + } + if (hasLowBound && hasUpBound && ((cmp = this.comparator.compare(lowEnd, upEnd)) > 0 || cmp == 0 && lowType == BoundType.OPEN && upType == BoundType.OPEN)) { + lowEnd = upEnd; + lowType = BoundType.OPEN; + upType = BoundType.CLOSED; + } + return new GeneralRange(this.comparator, hasLowBound, lowEnd, lowType, hasUpBound, upEnd, upType); + } + + public boolean equals(@Nullable Object obj) { + if (obj instanceof GeneralRange) { + GeneralRange r = (GeneralRange)obj; + return this.comparator.equals(r.comparator) && this.hasLowerBound == r.hasLowerBound && this.hasUpperBound == r.hasUpperBound && this.getLowerBoundType().equals((Object)r.getLowerBoundType()) && this.getUpperBoundType().equals((Object)r.getUpperBoundType()) && Objects.equal(this.getLowerEndpoint(), r.getLowerEndpoint()) && Objects.equal(this.getUpperEndpoint(), r.getUpperEndpoint()); + } + return false; + } + + public int hashCode() { + return Objects.hashCode(new Object[]{this.comparator, this.getLowerEndpoint(), this.getLowerBoundType(), this.getUpperEndpoint(), this.getUpperBoundType()}); + } + + GeneralRange reverse() { + GeneralRange result = this.reverse; + if (result == null) { + result = new GeneralRange(Ordering.from(this.comparator).reverse(), this.hasUpperBound, this.getUpperEndpoint(), this.getUpperBoundType(), this.hasLowerBound, this.getLowerEndpoint(), this.getLowerBoundType()); + result.reverse = this; + this.reverse = result; + return this.reverse; + } + return result; + } + + public String toString() { + return this.comparator + ":" + (this.lowerBoundType == BoundType.CLOSED ? (char)'[' : '(') + (this.hasLowerBound ? this.lowerEndpoint : "-\u221e") + ',' + (this.hasUpperBound ? this.upperEndpoint : "\u221e") + (this.upperBoundType == BoundType.CLOSED ? (char)']' : ')'); + } + + T getLowerEndpoint() { + return this.lowerEndpoint; + } + + BoundType getLowerBoundType() { + return this.lowerBoundType; + } + + T getUpperEndpoint() { + return this.upperEndpoint; + } + + BoundType getUpperBoundType() { + return this.upperBoundType; + } +} diff --git a/src/com/google/common/collect/GenericMapMaker.java b/src/com/google/common/collect/GenericMapMaker.java new file mode 100644 index 0000000..7c851bc --- /dev/null +++ b/src/com/google/common/collect/GenericMapMaker.java @@ -0,0 +1,74 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.Beta; +import com.google.common.annotations.GwtCompatible; +import com.google.common.annotations.GwtIncompatible; +import com.google.common.base.Equivalence; +import com.google.common.base.Function; +import com.google.common.base.MoreObjects; +import com.google.common.collect.MapMaker; +import com.google.common.collect.MapMakerInternalMap; +import java.util.concurrent.ConcurrentMap; +import java.util.concurrent.TimeUnit; + +@Deprecated +@Beta +@GwtCompatible(emulated=true) +abstract class GenericMapMaker { + @GwtIncompatible(value="To be supported") + MapMaker.RemovalListener removalListener; + + GenericMapMaker() { + } + + @GwtIncompatible(value="To be supported") + abstract GenericMapMaker keyEquivalence(Equivalence var1); + + public abstract GenericMapMaker initialCapacity(int var1); + + abstract GenericMapMaker maximumSize(int var1); + + public abstract GenericMapMaker concurrencyLevel(int var1); + + @GwtIncompatible(value="java.lang.ref.WeakReference") + public abstract GenericMapMaker weakKeys(); + + @GwtIncompatible(value="java.lang.ref.WeakReference") + public abstract GenericMapMaker weakValues(); + + @Deprecated + @GwtIncompatible(value="java.lang.ref.SoftReference") + public abstract GenericMapMaker softValues(); + + abstract GenericMapMaker expireAfterWrite(long var1, TimeUnit var3); + + @GwtIncompatible(value="To be supported") + abstract GenericMapMaker expireAfterAccess(long var1, TimeUnit var3); + + @GwtIncompatible(value="To be supported") + MapMaker.RemovalListener getRemovalListener() { + return MoreObjects.firstNonNull(this.removalListener, NullListener.INSTANCE); + } + + public abstract ConcurrentMap makeMap(); + + @GwtIncompatible(value="MapMakerInternalMap") + abstract MapMakerInternalMap makeCustomMap(); + + @Deprecated + abstract ConcurrentMap makeComputingMap(Function var1); + + @GwtIncompatible(value="To be supported") + static enum NullListener implements MapMaker.RemovalListener + { + INSTANCE; + + + @Override + public void onRemoval(MapMaker.RemovalNotification notification) { + } + } +} diff --git a/src/main/com/google/common/collect/GwtTransient.java b/src/com/google/common/collect/GwtTransient.java similarity index 75% rename from src/main/com/google/common/collect/GwtTransient.java rename to src/com/google/common/collect/GwtTransient.java index f5a4a30..74690d4 100644 --- a/src/main/com/google/common/collect/GwtTransient.java +++ b/src/com/google/common/collect/GwtTransient.java @@ -1,3 +1,6 @@ +/* + * Decompiled with CFR 0.152. + */ package com.google.common.collect; import com.google.common.annotations.GwtCompatible; @@ -8,8 +11,8 @@ import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; @Documented -@Retention(RetentionPolicy.RUNTIME) -@Target({ElementType.FIELD}) +@Retention(value=RetentionPolicy.RUNTIME) +@Target(value={ElementType.FIELD}) @GwtCompatible @interface GwtTransient { } diff --git a/src/com/google/common/collect/HashBasedTable.java b/src/com/google/common/collect/HashBasedTable.java new file mode 100644 index 0000000..bf0f85d --- /dev/null +++ b/src/com/google/common/collect/HashBasedTable.java @@ -0,0 +1,92 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.GwtCompatible; +import com.google.common.base.Supplier; +import com.google.common.collect.CollectPreconditions; +import com.google.common.collect.Maps; +import com.google.common.collect.StandardTable; +import com.google.common.collect.Table; +import java.io.Serializable; +import java.util.HashMap; +import java.util.Map; +import javax.annotation.Nullable; + +@GwtCompatible(serializable=true) +public class HashBasedTable +extends StandardTable { + private static final long serialVersionUID = 0L; + + public static HashBasedTable create() { + return new HashBasedTable(new HashMap(), new Factory(0)); + } + + public static HashBasedTable create(int expectedRows, int expectedCellsPerRow) { + CollectPreconditions.checkNonnegative(expectedCellsPerRow, "expectedCellsPerRow"); + HashMap backingMap = Maps.newHashMapWithExpectedSize(expectedRows); + return new HashBasedTable(backingMap, new Factory(expectedCellsPerRow)); + } + + public static HashBasedTable create(Table table) { + HashBasedTable result = HashBasedTable.create(); + result.putAll((Table)table); + return result; + } + + HashBasedTable(Map> backingMap, Factory factory) { + super(backingMap, factory); + } + + @Override + public boolean contains(@Nullable Object rowKey, @Nullable Object columnKey) { + return super.contains(rowKey, columnKey); + } + + @Override + public boolean containsColumn(@Nullable Object columnKey) { + return super.containsColumn(columnKey); + } + + @Override + public boolean containsRow(@Nullable Object rowKey) { + return super.containsRow(rowKey); + } + + @Override + public boolean containsValue(@Nullable Object value) { + return super.containsValue(value); + } + + @Override + public V get(@Nullable Object rowKey, @Nullable Object columnKey) { + return super.get(rowKey, columnKey); + } + + @Override + public boolean equals(@Nullable Object obj) { + return super.equals(obj); + } + + @Override + public V remove(@Nullable Object rowKey, @Nullable Object columnKey) { + return super.remove(rowKey, columnKey); + } + + private static class Factory + implements Supplier>, + Serializable { + final int expectedSize; + private static final long serialVersionUID = 0L; + + Factory(int expectedSize) { + this.expectedSize = expectedSize; + } + + @Override + public Map get() { + return Maps.newHashMapWithExpectedSize(this.expectedSize); + } + } +} diff --git a/src/com/google/common/collect/HashBiMap.java b/src/com/google/common/collect/HashBiMap.java new file mode 100644 index 0000000..dca43c2 --- /dev/null +++ b/src/com/google/common/collect/HashBiMap.java @@ -0,0 +1,632 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.GwtCompatible; +import com.google.common.annotations.GwtIncompatible; +import com.google.common.base.Objects; +import com.google.common.base.Preconditions; +import com.google.common.collect.AbstractMapEntry; +import com.google.common.collect.BiMap; +import com.google.common.collect.CollectPreconditions; +import com.google.common.collect.Hashing; +import com.google.common.collect.ImmutableEntry; +import com.google.common.collect.Maps; +import com.google.common.collect.Serialization; +import java.io.IOException; +import java.io.ObjectInputStream; +import java.io.ObjectOutputStream; +import java.io.Serializable; +import java.util.AbstractMap; +import java.util.Arrays; +import java.util.ConcurrentModificationException; +import java.util.Iterator; +import java.util.Map; +import java.util.NoSuchElementException; +import java.util.Set; +import javax.annotation.Nullable; + +@GwtCompatible(emulated=true) +public final class HashBiMap +extends AbstractMap +implements BiMap, +Serializable { + private static final double LOAD_FACTOR = 1.0; + private transient BiEntry[] hashTableKToV; + private transient BiEntry[] hashTableVToK; + private transient int size; + private transient int mask; + private transient int modCount; + private transient BiMap inverse; + @GwtIncompatible(value="Not needed in emulated source") + private static final long serialVersionUID = 0L; + + public static HashBiMap create() { + return HashBiMap.create(16); + } + + public static HashBiMap create(int expectedSize) { + return new HashBiMap(expectedSize); + } + + public static HashBiMap create(Map map) { + HashBiMap bimap = HashBiMap.create(map.size()); + bimap.putAll(map); + return bimap; + } + + private HashBiMap(int expectedSize) { + this.init(expectedSize); + } + + private void init(int expectedSize) { + CollectPreconditions.checkNonnegative(expectedSize, "expectedSize"); + int tableSize = Hashing.closedTableSize(expectedSize, 1.0); + this.hashTableKToV = this.createTable(tableSize); + this.hashTableVToK = this.createTable(tableSize); + this.mask = tableSize - 1; + this.modCount = 0; + this.size = 0; + } + + private void delete(BiEntry entry) { + int keyBucket = entry.keyHash & this.mask; + BiEntry prevBucketEntry = null; + BiEntry bucketEntry = this.hashTableKToV[keyBucket]; + while (true) { + if (bucketEntry == entry) { + if (prevBucketEntry == null) { + this.hashTableKToV[keyBucket] = entry.nextInKToVBucket; + break; + } + prevBucketEntry.nextInKToVBucket = entry.nextInKToVBucket; + break; + } + prevBucketEntry = bucketEntry; + bucketEntry = bucketEntry.nextInKToVBucket; + } + int valueBucket = entry.valueHash & this.mask; + prevBucketEntry = null; + BiEntry bucketEntry2 = this.hashTableVToK[valueBucket]; + while (true) { + if (bucketEntry2 == entry) { + if (prevBucketEntry == null) { + this.hashTableVToK[valueBucket] = entry.nextInVToKBucket; + break; + } + prevBucketEntry.nextInVToKBucket = entry.nextInVToKBucket; + break; + } + prevBucketEntry = bucketEntry2; + bucketEntry2 = bucketEntry2.nextInVToKBucket; + } + --this.size; + ++this.modCount; + } + + private void insert(BiEntry entry) { + int keyBucket = entry.keyHash & this.mask; + entry.nextInKToVBucket = this.hashTableKToV[keyBucket]; + this.hashTableKToV[keyBucket] = entry; + int valueBucket = entry.valueHash & this.mask; + entry.nextInVToKBucket = this.hashTableVToK[valueBucket]; + this.hashTableVToK[valueBucket] = entry; + ++this.size; + ++this.modCount; + } + + private static int hash(@Nullable Object o) { + return Hashing.smear(o == null ? 0 : o.hashCode()); + } + + private BiEntry seekByKey(@Nullable Object key, int keyHash) { + BiEntry entry = this.hashTableKToV[keyHash & this.mask]; + while (entry != null) { + if (keyHash == entry.keyHash && Objects.equal(key, entry.key)) { + return entry; + } + entry = entry.nextInKToVBucket; + } + return null; + } + + private BiEntry seekByValue(@Nullable Object value, int valueHash) { + BiEntry entry = this.hashTableVToK[valueHash & this.mask]; + while (entry != null) { + if (valueHash == entry.valueHash && Objects.equal(value, entry.value)) { + return entry; + } + entry = entry.nextInVToKBucket; + } + return null; + } + + @Override + public boolean containsKey(@Nullable Object key) { + return this.seekByKey(key, HashBiMap.hash(key)) != null; + } + + @Override + public boolean containsValue(@Nullable Object value) { + return this.seekByValue(value, HashBiMap.hash(value)) != null; + } + + @Override + @Nullable + public V get(@Nullable Object key) { + BiEntry entry = this.seekByKey(key, HashBiMap.hash(key)); + return (V)(entry == null ? null : entry.value); + } + + @Override + public V put(@Nullable K key, @Nullable V value) { + return this.put(key, value, false); + } + + @Override + public V forcePut(@Nullable K key, @Nullable V value) { + return this.put(key, value, true); + } + + private V put(@Nullable K key, @Nullable V value, boolean force) { + int keyHash = HashBiMap.hash(key); + int valueHash = HashBiMap.hash(value); + BiEntry oldEntryForKey = this.seekByKey(key, keyHash); + if (oldEntryForKey != null && valueHash == oldEntryForKey.valueHash && Objects.equal(value, oldEntryForKey.value)) { + return value; + } + BiEntry oldEntryForValue = this.seekByValue(value, valueHash); + if (oldEntryForValue != null) { + if (force) { + this.delete(oldEntryForValue); + } else { + String string = String.valueOf(String.valueOf(value)); + throw new IllegalArgumentException(new StringBuilder(23 + string.length()).append("value already present: ").append(string).toString()); + } + } + if (oldEntryForKey != null) { + this.delete(oldEntryForKey); + } + BiEntry newEntry = new BiEntry(key, keyHash, value, valueHash); + this.insert(newEntry); + this.rehashIfNecessary(); + return (V)(oldEntryForKey == null ? null : oldEntryForKey.value); + } + + @Nullable + private K putInverse(@Nullable V value, @Nullable K key, boolean force) { + int valueHash = HashBiMap.hash(value); + int keyHash = HashBiMap.hash(key); + BiEntry oldEntryForValue = this.seekByValue(value, valueHash); + if (oldEntryForValue != null && keyHash == oldEntryForValue.keyHash && Objects.equal(key, oldEntryForValue.key)) { + return key; + } + BiEntry oldEntryForKey = this.seekByKey(key, keyHash); + if (oldEntryForKey != null) { + if (force) { + this.delete(oldEntryForKey); + } else { + String string = String.valueOf(String.valueOf(key)); + throw new IllegalArgumentException(new StringBuilder(23 + string.length()).append("value already present: ").append(string).toString()); + } + } + if (oldEntryForValue != null) { + this.delete(oldEntryForValue); + } + BiEntry newEntry = new BiEntry(key, keyHash, value, valueHash); + this.insert(newEntry); + this.rehashIfNecessary(); + return (K)(oldEntryForValue == null ? null : oldEntryForValue.key); + } + + private void rehashIfNecessary() { + BiEntry[] oldKToV = this.hashTableKToV; + if (Hashing.needsResizing(this.size, oldKToV.length, 1.0)) { + int newTableSize = oldKToV.length * 2; + this.hashTableKToV = this.createTable(newTableSize); + this.hashTableVToK = this.createTable(newTableSize); + this.mask = newTableSize - 1; + this.size = 0; + for (int bucket = 0; bucket < oldKToV.length; ++bucket) { + BiEntry entry = oldKToV[bucket]; + while (entry != null) { + BiEntry nextEntry = entry.nextInKToVBucket; + this.insert(entry); + entry = nextEntry; + } + } + ++this.modCount; + } + } + + private BiEntry[] createTable(int length) { + return new BiEntry[length]; + } + + @Override + public V remove(@Nullable Object key) { + BiEntry entry = this.seekByKey(key, HashBiMap.hash(key)); + if (entry == null) { + return null; + } + this.delete(entry); + return (V)entry.value; + } + + @Override + public void clear() { + this.size = 0; + Arrays.fill(this.hashTableKToV, null); + Arrays.fill(this.hashTableVToK, null); + ++this.modCount; + } + + @Override + public int size() { + return this.size; + } + + @Override + public Set keySet() { + return new KeySet(); + } + + @Override + public Set values() { + return this.inverse().keySet(); + } + + @Override + public Set> entrySet() { + return new EntrySet(); + } + + @Override + public BiMap inverse() { + return this.inverse == null ? (this.inverse = new Inverse()) : this.inverse; + } + + @GwtIncompatible(value="java.io.ObjectOutputStream") + private void writeObject(ObjectOutputStream stream) throws IOException { + stream.defaultWriteObject(); + Serialization.writeMap(this, stream); + } + + @GwtIncompatible(value="java.io.ObjectInputStream") + private void readObject(ObjectInputStream stream) throws IOException, ClassNotFoundException { + stream.defaultReadObject(); + int size = Serialization.readCount(stream); + this.init(size); + Serialization.populateMap(this, stream, size); + } + + private static final class InverseSerializedForm + implements Serializable { + private final HashBiMap bimap; + + InverseSerializedForm(HashBiMap bimap) { + this.bimap = bimap; + } + + Object readResolve() { + return this.bimap.inverse(); + } + } + + private final class Inverse + extends AbstractMap + implements BiMap, + Serializable { + private Inverse() { + } + + BiMap forward() { + return HashBiMap.this; + } + + @Override + public int size() { + return HashBiMap.this.size; + } + + @Override + public void clear() { + this.forward().clear(); + } + + @Override + public boolean containsKey(@Nullable Object value) { + return this.forward().containsValue(value); + } + + @Override + public K get(@Nullable Object value) { + BiEntry entry = HashBiMap.this.seekByValue(value, HashBiMap.hash(value)); + return entry == null ? null : entry.key; + } + + @Override + public K put(@Nullable V value, @Nullable K key) { + return HashBiMap.this.putInverse(value, key, false); + } + + @Override + public K forcePut(@Nullable V value, @Nullable K key) { + return HashBiMap.this.putInverse(value, key, true); + } + + @Override + public K remove(@Nullable Object value) { + BiEntry entry = HashBiMap.this.seekByValue(value, HashBiMap.hash(value)); + if (entry == null) { + return null; + } + HashBiMap.this.delete(entry); + return entry.key; + } + + @Override + public BiMap inverse() { + return this.forward(); + } + + @Override + public Set keySet() { + return new InverseKeySet(); + } + + @Override + public Set values() { + return this.forward().keySet(); + } + + @Override + public Set> entrySet() { + return new Maps.EntrySet(){ + + @Override + Map map() { + return Inverse.this; + } + + @Override + public Iterator> iterator() { + return new Itr>(){ + + @Override + Map.Entry output(BiEntry entry) { + return new InverseEntry(entry); + } + + class InverseEntry + extends AbstractMapEntry { + BiEntry delegate; + + InverseEntry(BiEntry entry) { + this.delegate = entry; + } + + @Override + public V getKey() { + return this.delegate.value; + } + + @Override + public K getValue() { + return this.delegate.key; + } + + @Override + public K setValue(K key) { + Object oldKey = this.delegate.key; + int keyHash = HashBiMap.hash(key); + if (keyHash == this.delegate.keyHash && Objects.equal(key, oldKey)) { + return key; + } + Preconditions.checkArgument(HashBiMap.this.seekByKey(key, keyHash) == null, "value already present: %s", key); + HashBiMap.this.delete(this.delegate); + BiEntry newEntry = new BiEntry(key, keyHash, this.delegate.value, this.delegate.valueHash); + HashBiMap.this.insert(newEntry); + expectedModCount = HashBiMap.this.modCount; + return oldKey; + } + } + }; + } + }; + } + + Object writeReplace() { + return new InverseSerializedForm(HashBiMap.this); + } + + private final class InverseKeySet + extends Maps.KeySet { + InverseKeySet() { + super(Inverse.this); + } + + @Override + public boolean remove(@Nullable Object o) { + BiEntry entry = HashBiMap.this.seekByValue(o, HashBiMap.hash(o)); + if (entry == null) { + return false; + } + HashBiMap.this.delete(entry); + return true; + } + + @Override + public Iterator iterator() { + return new Itr(){ + + @Override + V output(BiEntry entry) { + return entry.value; + } + }; + } + } + } + + private final class EntrySet + extends Maps.EntrySet { + private EntrySet() { + } + + @Override + Map map() { + return HashBiMap.this; + } + + @Override + public Iterator> iterator() { + return new Itr>(){ + + @Override + Map.Entry output(BiEntry entry) { + return new MapEntry(entry); + } + + class MapEntry + extends AbstractMapEntry { + BiEntry delegate; + + MapEntry(BiEntry entry) { + this.delegate = entry; + } + + @Override + public K getKey() { + return this.delegate.key; + } + + @Override + public V getValue() { + return this.delegate.value; + } + + @Override + public V setValue(V value) { + Object oldValue = this.delegate.value; + int valueHash = HashBiMap.hash(value); + if (valueHash == this.delegate.valueHash && Objects.equal(value, oldValue)) { + return value; + } + Preconditions.checkArgument(HashBiMap.this.seekByValue(value, valueHash) == null, "value already present: %s", value); + HashBiMap.this.delete(this.delegate); + BiEntry newEntry = new BiEntry(this.delegate.key, this.delegate.keyHash, value, valueHash); + HashBiMap.this.insert(newEntry); + expectedModCount = HashBiMap.this.modCount; + if (toRemove == this.delegate) { + toRemove = newEntry; + } + this.delegate = newEntry; + return oldValue; + } + } + }; + } + } + + private final class KeySet + extends Maps.KeySet { + KeySet() { + super(HashBiMap.this); + } + + @Override + public Iterator iterator() { + return new Itr(){ + + @Override + K output(BiEntry entry) { + return entry.key; + } + }; + } + + @Override + public boolean remove(@Nullable Object o) { + BiEntry entry = HashBiMap.this.seekByKey(o, HashBiMap.hash(o)); + if (entry == null) { + return false; + } + HashBiMap.this.delete(entry); + return true; + } + } + + abstract class Itr + implements Iterator { + int nextBucket = 0; + BiEntry next = null; + BiEntry toRemove = null; + int expectedModCount = HashBiMap.access$000(HashBiMap.this); + + Itr() { + } + + private void checkForConcurrentModification() { + if (HashBiMap.this.modCount != this.expectedModCount) { + throw new ConcurrentModificationException(); + } + } + + @Override + public boolean hasNext() { + this.checkForConcurrentModification(); + if (this.next != null) { + return true; + } + while (this.nextBucket < HashBiMap.this.hashTableKToV.length) { + if (HashBiMap.this.hashTableKToV[this.nextBucket] != null) { + this.next = HashBiMap.this.hashTableKToV[this.nextBucket++]; + return true; + } + ++this.nextBucket; + } + return false; + } + + @Override + public T next() { + this.checkForConcurrentModification(); + if (!this.hasNext()) { + throw new NoSuchElementException(); + } + BiEntry entry = this.next; + this.next = entry.nextInKToVBucket; + this.toRemove = entry; + return this.output(entry); + } + + @Override + public void remove() { + this.checkForConcurrentModification(); + CollectPreconditions.checkRemove(this.toRemove != null); + HashBiMap.this.delete(this.toRemove); + this.expectedModCount = HashBiMap.this.modCount; + this.toRemove = null; + } + + abstract T output(BiEntry var1); + } + + private static final class BiEntry + extends ImmutableEntry { + final int keyHash; + final int valueHash; + @Nullable + BiEntry nextInKToVBucket; + @Nullable + BiEntry nextInVToKBucket; + + BiEntry(K key, int keyHash, V value, int valueHash) { + super(key, value); + this.keyHash = keyHash; + this.valueHash = valueHash; + } + } +} diff --git a/src/com/google/common/collect/HashMultimap.java b/src/com/google/common/collect/HashMultimap.java new file mode 100644 index 0000000..fd8837c --- /dev/null +++ b/src/com/google/common/collect/HashMultimap.java @@ -0,0 +1,78 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.GwtCompatible; +import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.VisibleForTesting; +import com.google.common.base.Preconditions; +import com.google.common.collect.AbstractSetMultimap; +import com.google.common.collect.Maps; +import com.google.common.collect.Multimap; +import com.google.common.collect.Serialization; +import com.google.common.collect.Sets; +import java.io.IOException; +import java.io.ObjectInputStream; +import java.io.ObjectOutputStream; +import java.util.HashMap; +import java.util.Set; + +@GwtCompatible(serializable=true, emulated=true) +public final class HashMultimap +extends AbstractSetMultimap { + private static final int DEFAULT_VALUES_PER_KEY = 2; + @VisibleForTesting + transient int expectedValuesPerKey = 2; + @GwtIncompatible(value="Not needed in emulated source") + private static final long serialVersionUID = 0L; + + public static HashMultimap create() { + return new HashMultimap(); + } + + public static HashMultimap create(int expectedKeys, int expectedValuesPerKey) { + return new HashMultimap(expectedKeys, expectedValuesPerKey); + } + + public static HashMultimap create(Multimap multimap) { + return new HashMultimap(multimap); + } + + private HashMultimap() { + super(new HashMap()); + } + + private HashMultimap(int expectedKeys, int expectedValuesPerKey) { + super(Maps.newHashMapWithExpectedSize(expectedKeys)); + Preconditions.checkArgument(expectedValuesPerKey >= 0); + this.expectedValuesPerKey = expectedValuesPerKey; + } + + private HashMultimap(Multimap multimap) { + super(Maps.newHashMapWithExpectedSize(multimap.keySet().size())); + this.putAll(multimap); + } + + @Override + Set createCollection() { + return Sets.newHashSetWithExpectedSize(this.expectedValuesPerKey); + } + + @GwtIncompatible(value="java.io.ObjectOutputStream") + private void writeObject(ObjectOutputStream stream) throws IOException { + stream.defaultWriteObject(); + stream.writeInt(this.expectedValuesPerKey); + Serialization.writeMultimap(this, stream); + } + + @GwtIncompatible(value="java.io.ObjectInputStream") + private void readObject(ObjectInputStream stream) throws IOException, ClassNotFoundException { + stream.defaultReadObject(); + this.expectedValuesPerKey = stream.readInt(); + int distinctKeys = Serialization.readCount(stream); + HashMap map = Maps.newHashMapWithExpectedSize(distinctKeys); + this.setMap(map); + Serialization.populateMultimap(this, stream, distinctKeys); + } +} diff --git a/src/com/google/common/collect/HashMultiset.java b/src/com/google/common/collect/HashMultiset.java new file mode 100644 index 0000000..cc2b172 --- /dev/null +++ b/src/com/google/common/collect/HashMultiset.java @@ -0,0 +1,59 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.GwtCompatible; +import com.google.common.annotations.GwtIncompatible; +import com.google.common.collect.AbstractMapBasedMultiset; +import com.google.common.collect.Iterables; +import com.google.common.collect.Maps; +import com.google.common.collect.Multisets; +import com.google.common.collect.Serialization; +import java.io.IOException; +import java.io.ObjectInputStream; +import java.io.ObjectOutputStream; +import java.util.HashMap; + +@GwtCompatible(serializable=true, emulated=true) +public final class HashMultiset +extends AbstractMapBasedMultiset { + @GwtIncompatible(value="Not needed in emulated source.") + private static final long serialVersionUID = 0L; + + public static HashMultiset create() { + return new HashMultiset(); + } + + public static HashMultiset create(int distinctElements) { + return new HashMultiset(distinctElements); + } + + public static HashMultiset create(Iterable elements) { + HashMultiset multiset = HashMultiset.create(Multisets.inferDistinctElements(elements)); + Iterables.addAll(multiset, elements); + return multiset; + } + + private HashMultiset() { + super(new HashMap()); + } + + private HashMultiset(int distinctElements) { + super(Maps.newHashMapWithExpectedSize(distinctElements)); + } + + @GwtIncompatible(value="java.io.ObjectOutputStream") + private void writeObject(ObjectOutputStream stream) throws IOException { + stream.defaultWriteObject(); + Serialization.writeMultiset(this, stream); + } + + @GwtIncompatible(value="java.io.ObjectInputStream") + private void readObject(ObjectInputStream stream) throws IOException, ClassNotFoundException { + stream.defaultReadObject(); + int distinctElements = Serialization.readCount(stream); + this.setBackingMap(Maps.newHashMapWithExpectedSize(distinctElements)); + Serialization.populateMultiset(this, stream, distinctElements); + } +} diff --git a/src/com/google/common/collect/Hashing.java b/src/com/google/common/collect/Hashing.java new file mode 100644 index 0000000..295116c --- /dev/null +++ b/src/com/google/common/collect/Hashing.java @@ -0,0 +1,37 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.GwtCompatible; +import javax.annotation.Nullable; + +@GwtCompatible +final class Hashing { + private static final int C1 = -862048943; + private static final int C2 = 461845907; + private static int MAX_TABLE_SIZE = 0x40000000; + + private Hashing() { + } + + static int smear(int hashCode) { + return 461845907 * Integer.rotateLeft(hashCode * -862048943, 15); + } + + static int smearedHash(@Nullable Object o) { + return Hashing.smear(o == null ? 0 : o.hashCode()); + } + + static int closedTableSize(int expectedEntries, double loadFactor) { + int tableSize; + if ((expectedEntries = Math.max(expectedEntries, 2)) > (int)(loadFactor * (double)(tableSize = Integer.highestOneBit(expectedEntries)))) { + return (tableSize <<= 1) > 0 ? tableSize : MAX_TABLE_SIZE; + } + return tableSize; + } + + static boolean needsResizing(int size, int tableSize, double loadFactor) { + return (double)size > loadFactor * (double)tableSize && tableSize < MAX_TABLE_SIZE; + } +} diff --git a/src/com/google/common/collect/ImmutableAsList.java b/src/com/google/common/collect/ImmutableAsList.java new file mode 100644 index 0000000..0c56c45 --- /dev/null +++ b/src/com/google/common/collect/ImmutableAsList.java @@ -0,0 +1,67 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.GwtCompatible; +import com.google.common.annotations.GwtIncompatible; +import com.google.common.collect.ImmutableCollection; +import com.google.common.collect.ImmutableList; +import java.io.InvalidObjectException; +import java.io.ObjectInputStream; +import java.io.Serializable; + +@GwtCompatible(serializable=true, emulated=true) +abstract class ImmutableAsList +extends ImmutableList { + ImmutableAsList() { + } + + abstract ImmutableCollection delegateCollection(); + + @Override + public boolean contains(Object target) { + return this.delegateCollection().contains(target); + } + + @Override + public int size() { + return this.delegateCollection().size(); + } + + @Override + public boolean isEmpty() { + return this.delegateCollection().isEmpty(); + } + + @Override + boolean isPartialView() { + return this.delegateCollection().isPartialView(); + } + + @GwtIncompatible(value="serialization") + private void readObject(ObjectInputStream stream) throws InvalidObjectException { + throw new InvalidObjectException("Use SerializedForm"); + } + + @Override + @GwtIncompatible(value="serialization") + Object writeReplace() { + return new SerializedForm(this.delegateCollection()); + } + + @GwtIncompatible(value="serialization") + static class SerializedForm + implements Serializable { + final ImmutableCollection collection; + private static final long serialVersionUID = 0L; + + SerializedForm(ImmutableCollection collection) { + this.collection = collection; + } + + Object readResolve() { + return this.collection.asList(); + } + } +} diff --git a/src/com/google/common/collect/ImmutableBiMap.java b/src/com/google/common/collect/ImmutableBiMap.java new file mode 100644 index 0000000..7be68a2 --- /dev/null +++ b/src/com/google/common/collect/ImmutableBiMap.java @@ -0,0 +1,131 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.GwtCompatible; +import com.google.common.collect.BiMap; +import com.google.common.collect.EmptyImmutableBiMap; +import com.google.common.collect.ImmutableMap; +import com.google.common.collect.ImmutableSet; +import com.google.common.collect.RegularImmutableBiMap; +import com.google.common.collect.SingletonImmutableBiMap; +import java.util.Map; + +@GwtCompatible(serializable=true, emulated=true) +public abstract class ImmutableBiMap +extends ImmutableMap +implements BiMap { + private static final Map.Entry[] EMPTY_ENTRY_ARRAY = new Map.Entry[0]; + + public static ImmutableBiMap of() { + return EmptyImmutableBiMap.INSTANCE; + } + + public static ImmutableBiMap of(K k1, V v1) { + return new SingletonImmutableBiMap(k1, v1); + } + + public static ImmutableBiMap of(K k1, V v1, K k2, V v2) { + return new RegularImmutableBiMap(ImmutableBiMap.entryOf(k1, v1), ImmutableBiMap.entryOf(k2, v2)); + } + + public static ImmutableBiMap of(K k1, V v1, K k2, V v2, K k3, V v3) { + return new RegularImmutableBiMap(ImmutableBiMap.entryOf(k1, v1), ImmutableBiMap.entryOf(k2, v2), ImmutableBiMap.entryOf(k3, v3)); + } + + public static ImmutableBiMap of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4) { + return new RegularImmutableBiMap(ImmutableBiMap.entryOf(k1, v1), ImmutableBiMap.entryOf(k2, v2), ImmutableBiMap.entryOf(k3, v3), ImmutableBiMap.entryOf(k4, v4)); + } + + public static ImmutableBiMap of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5) { + return new RegularImmutableBiMap(ImmutableBiMap.entryOf(k1, v1), ImmutableBiMap.entryOf(k2, v2), ImmutableBiMap.entryOf(k3, v3), ImmutableBiMap.entryOf(k4, v4), ImmutableBiMap.entryOf(k5, v5)); + } + + public static Builder builder() { + return new Builder(); + } + + public static ImmutableBiMap copyOf(Map map) { + ImmutableBiMap bimap; + if (map instanceof ImmutableBiMap && !(bimap = (ImmutableBiMap)map).isPartialView()) { + return bimap; + } + Map.Entry[] entries = map.entrySet().toArray(EMPTY_ENTRY_ARRAY); + switch (entries.length) { + case 0: { + return ImmutableBiMap.of(); + } + case 1: { + Map.Entry entry = entries[0]; + return ImmutableBiMap.of(entry.getKey(), entry.getValue()); + } + } + return new RegularImmutableBiMap(entries); + } + + ImmutableBiMap() { + } + + @Override + public abstract ImmutableBiMap inverse(); + + @Override + public ImmutableSet values() { + return ((ImmutableMap)((Object)this.inverse())).keySet(); + } + + @Override + @Deprecated + public V forcePut(K key, V value) { + throw new UnsupportedOperationException(); + } + + @Override + Object writeReplace() { + return new SerializedForm(this); + } + + private static class SerializedForm + extends ImmutableMap.SerializedForm { + private static final long serialVersionUID = 0L; + + SerializedForm(ImmutableBiMap bimap) { + super(bimap); + } + + @Override + Object readResolve() { + Builder builder = new Builder(); + return this.createMap(builder); + } + } + + public static final class Builder + extends ImmutableMap.Builder { + @Override + public Builder put(K key, V value) { + super.put(key, value); + return this; + } + + @Override + public Builder putAll(Map map) { + super.putAll(map); + return this; + } + + @Override + public ImmutableBiMap build() { + switch (this.size) { + case 0: { + return ImmutableBiMap.of(); + } + case 1: { + return ImmutableBiMap.of(this.entries[0].getKey(), this.entries[0].getValue()); + } + } + return new RegularImmutableBiMap(this.size, this.entries); + } + } +} diff --git a/src/com/google/common/collect/ImmutableClassToInstanceMap.java b/src/com/google/common/collect/ImmutableClassToInstanceMap.java new file mode 100644 index 0000000..6470b01 --- /dev/null +++ b/src/com/google/common/collect/ImmutableClassToInstanceMap.java @@ -0,0 +1,79 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.base.Preconditions; +import com.google.common.collect.ClassToInstanceMap; +import com.google.common.collect.ForwardingMap; +import com.google.common.collect.ImmutableMap; +import com.google.common.primitives.Primitives; +import java.io.Serializable; +import java.util.Map; +import javax.annotation.Nullable; + +public final class ImmutableClassToInstanceMap +extends ForwardingMap, B> +implements ClassToInstanceMap, +Serializable { + private final ImmutableMap, B> delegate; + + public static Builder builder() { + return new Builder(); + } + + public static ImmutableClassToInstanceMap copyOf(Map, ? extends S> map) { + if (map instanceof ImmutableClassToInstanceMap) { + ImmutableClassToInstanceMap cast = (ImmutableClassToInstanceMap)map; + return cast; + } + return new Builder().putAll(map).build(); + } + + private ImmutableClassToInstanceMap(ImmutableMap, B> delegate) { + this.delegate = delegate; + } + + @Override + protected Map, B> delegate() { + return this.delegate; + } + + @Override + @Nullable + public T getInstance(Class type) { + return (T)this.delegate.get(Preconditions.checkNotNull(type)); + } + + @Override + @Deprecated + public T putInstance(Class type, T value) { + throw new UnsupportedOperationException(); + } + + public static final class Builder { + private final ImmutableMap.Builder, B> mapBuilder = ImmutableMap.builder(); + + public Builder put(Class key, T value) { + this.mapBuilder.put(key, value); + return this; + } + + public Builder putAll(Map, ? extends T> map) { + for (Map.Entry, T> entry : map.entrySet()) { + Class type = entry.getKey(); + T value = entry.getValue(); + this.mapBuilder.put(type, Builder.cast(type, value)); + } + return this; + } + + private static T cast(Class type, B value) { + return Primitives.wrap(type).cast(value); + } + + public ImmutableClassToInstanceMap build() { + return new ImmutableClassToInstanceMap(this.mapBuilder.build()); + } + } +} diff --git a/src/com/google/common/collect/ImmutableCollection.java b/src/com/google/common/collect/ImmutableCollection.java new file mode 100644 index 0000000..08fe9ab --- /dev/null +++ b/src/com/google/common/collect/ImmutableCollection.java @@ -0,0 +1,216 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.GwtCompatible; +import com.google.common.base.Preconditions; +import com.google.common.collect.CollectPreconditions; +import com.google.common.collect.ImmutableList; +import com.google.common.collect.ObjectArrays; +import com.google.common.collect.RegularImmutableAsList; +import com.google.common.collect.UnmodifiableIterator; +import java.io.Serializable; +import java.util.AbstractCollection; +import java.util.Collection; +import java.util.Iterator; +import javax.annotation.Nullable; + +@GwtCompatible(emulated=true) +public abstract class ImmutableCollection +extends AbstractCollection +implements Serializable { + private transient ImmutableList asList; + + ImmutableCollection() { + } + + @Override + public abstract UnmodifiableIterator iterator(); + + @Override + public final Object[] toArray() { + int size = this.size(); + if (size == 0) { + return ObjectArrays.EMPTY_ARRAY; + } + Object[] result = new Object[size]; + this.copyIntoArray(result, 0); + return result; + } + + @Override + public final T[] toArray(T[] other) { + Preconditions.checkNotNull(other); + int size = this.size(); + if (other.length < size) { + other = ObjectArrays.newArray(other, size); + } else if (other.length > size) { + other[size] = null; + } + this.copyIntoArray(other, 0); + return other; + } + + @Override + public boolean contains(@Nullable Object object) { + return object != null && super.contains(object); + } + + @Override + @Deprecated + public final boolean add(E e) { + throw new UnsupportedOperationException(); + } + + @Override + @Deprecated + public final boolean remove(Object object) { + throw new UnsupportedOperationException(); + } + + @Override + @Deprecated + public final boolean addAll(Collection newElements) { + throw new UnsupportedOperationException(); + } + + @Override + @Deprecated + public final boolean removeAll(Collection oldElements) { + throw new UnsupportedOperationException(); + } + + @Override + @Deprecated + public final boolean retainAll(Collection elementsToKeep) { + throw new UnsupportedOperationException(); + } + + @Override + @Deprecated + public final void clear() { + throw new UnsupportedOperationException(); + } + + public ImmutableList asList() { + ImmutableList list = this.asList; + return list == null ? (this.asList = this.createAsList()) : list; + } + + ImmutableList createAsList() { + switch (this.size()) { + case 0: { + return ImmutableList.of(); + } + case 1: { + return ImmutableList.of(this.iterator().next()); + } + } + return new RegularImmutableAsList(this, this.toArray()); + } + + abstract boolean isPartialView(); + + int copyIntoArray(Object[] dst, int offset) { + for (Object e : this) { + dst[offset++] = e; + } + return offset; + } + + Object writeReplace() { + return new ImmutableList.SerializedForm(this.toArray()); + } + + static abstract class ArrayBasedBuilder + extends Builder { + Object[] contents; + int size; + + ArrayBasedBuilder(int initialCapacity) { + CollectPreconditions.checkNonnegative(initialCapacity, "initialCapacity"); + this.contents = new Object[initialCapacity]; + this.size = 0; + } + + private void ensureCapacity(int minCapacity) { + if (this.contents.length < minCapacity) { + this.contents = ObjectArrays.arraysCopyOf(this.contents, ArrayBasedBuilder.expandedCapacity(this.contents.length, minCapacity)); + } + } + + @Override + public ArrayBasedBuilder add(E element) { + Preconditions.checkNotNull(element); + this.ensureCapacity(this.size + 1); + this.contents[this.size++] = element; + return this; + } + + @Override + public Builder add(E ... elements) { + ObjectArrays.checkElementsNotNull((Object[])elements); + this.ensureCapacity(this.size + elements.length); + System.arraycopy(elements, 0, this.contents, this.size, elements.length); + this.size += elements.length; + return this; + } + + @Override + public Builder addAll(Iterable elements) { + if (elements instanceof Collection) { + Collection collection = (Collection)elements; + this.ensureCapacity(this.size + collection.size()); + } + super.addAll(elements); + return this; + } + } + + public static abstract class Builder { + static final int DEFAULT_INITIAL_CAPACITY = 4; + + static int expandedCapacity(int oldCapacity, int minCapacity) { + if (minCapacity < 0) { + throw new AssertionError((Object)"cannot store more than MAX_VALUE elements"); + } + int newCapacity = oldCapacity + (oldCapacity >> 1) + 1; + if (newCapacity < minCapacity) { + newCapacity = Integer.highestOneBit(minCapacity - 1) << 1; + } + if (newCapacity < 0) { + newCapacity = Integer.MAX_VALUE; + } + return newCapacity; + } + + Builder() { + } + + public abstract Builder add(E var1); + + public Builder add(E ... elements) { + for (E element : elements) { + this.add(element); + } + return this; + } + + public Builder addAll(Iterable elements) { + for (E element : elements) { + this.add(element); + } + return this; + } + + public Builder addAll(Iterator elements) { + while (elements.hasNext()) { + this.add(elements.next()); + } + return this; + } + + public abstract ImmutableCollection build(); + } +} diff --git a/src/com/google/common/collect/ImmutableEntry.java b/src/com/google/common/collect/ImmutableEntry.java new file mode 100644 index 0000000..6282bcf --- /dev/null +++ b/src/com/google/common/collect/ImmutableEntry.java @@ -0,0 +1,40 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.GwtCompatible; +import com.google.common.collect.AbstractMapEntry; +import java.io.Serializable; +import javax.annotation.Nullable; + +@GwtCompatible(serializable=true) +class ImmutableEntry +extends AbstractMapEntry +implements Serializable { + final K key; + final V value; + private static final long serialVersionUID = 0L; + + ImmutableEntry(@Nullable K key, @Nullable V value) { + this.key = key; + this.value = value; + } + + @Override + @Nullable + public final K getKey() { + return this.key; + } + + @Override + @Nullable + public final V getValue() { + return this.value; + } + + @Override + public final V setValue(V value) { + throw new UnsupportedOperationException(); + } +} diff --git a/src/com/google/common/collect/ImmutableEnumMap.java b/src/com/google/common/collect/ImmutableEnumMap.java new file mode 100644 index 0000000..438b262 --- /dev/null +++ b/src/com/google/common/collect/ImmutableEnumMap.java @@ -0,0 +1,140 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.GwtCompatible; +import com.google.common.base.Preconditions; +import com.google.common.collect.ImmutableMap; +import com.google.common.collect.ImmutableMapEntrySet; +import com.google.common.collect.ImmutableSet; +import com.google.common.collect.Iterables; +import com.google.common.collect.Iterators; +import com.google.common.collect.Maps; +import com.google.common.collect.UnmodifiableIterator; +import java.io.Serializable; +import java.util.EnumMap; +import java.util.Iterator; +import java.util.Map; +import javax.annotation.Nullable; + +@GwtCompatible(serializable=true, emulated=true) +final class ImmutableEnumMap, V> +extends ImmutableMap { + private final transient EnumMap delegate; + + static , V> ImmutableMap asImmutable(EnumMap map) { + switch (map.size()) { + case 0: { + return ImmutableMap.of(); + } + case 1: { + Map.Entry entry = Iterables.getOnlyElement(map.entrySet()); + return ImmutableMap.of(entry.getKey(), entry.getValue()); + } + } + return new ImmutableEnumMap(map); + } + + private ImmutableEnumMap(EnumMap delegate) { + this.delegate = delegate; + Preconditions.checkArgument(!delegate.isEmpty()); + } + + @Override + ImmutableSet createKeySet() { + return new ImmutableSet(){ + + @Override + public boolean contains(Object object) { + return ImmutableEnumMap.this.delegate.containsKey(object); + } + + @Override + public int size() { + return ImmutableEnumMap.this.size(); + } + + @Override + public UnmodifiableIterator iterator() { + return Iterators.unmodifiableIterator(ImmutableEnumMap.this.delegate.keySet().iterator()); + } + + @Override + boolean isPartialView() { + return true; + } + }; + } + + @Override + public int size() { + return this.delegate.size(); + } + + @Override + public boolean containsKey(@Nullable Object key) { + return this.delegate.containsKey(key); + } + + @Override + public V get(Object key) { + return this.delegate.get(key); + } + + @Override + ImmutableSet> createEntrySet() { + return new ImmutableMapEntrySet(){ + + @Override + ImmutableMap map() { + return ImmutableEnumMap.this; + } + + @Override + public UnmodifiableIterator> iterator() { + return new UnmodifiableIterator>(){ + private final Iterator> backingIterator; + { + this.backingIterator = ImmutableEnumMap.this.delegate.entrySet().iterator(); + } + + @Override + public boolean hasNext() { + return this.backingIterator.hasNext(); + } + + @Override + public Map.Entry next() { + Map.Entry entry = this.backingIterator.next(); + return Maps.immutableEntry(entry.getKey(), entry.getValue()); + } + }; + } + }; + } + + @Override + boolean isPartialView() { + return false; + } + + @Override + Object writeReplace() { + return new EnumSerializedForm(this.delegate); + } + + private static class EnumSerializedForm, V> + implements Serializable { + final EnumMap delegate; + private static final long serialVersionUID = 0L; + + EnumSerializedForm(EnumMap delegate) { + this.delegate = delegate; + } + + Object readResolve() { + return new ImmutableEnumMap(this.delegate); + } + } +} diff --git a/src/com/google/common/collect/ImmutableEnumSet.java b/src/com/google/common/collect/ImmutableEnumSet.java new file mode 100644 index 0000000..953ac97 --- /dev/null +++ b/src/com/google/common/collect/ImmutableEnumSet.java @@ -0,0 +1,101 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.GwtCompatible; +import com.google.common.collect.ImmutableSet; +import com.google.common.collect.Iterables; +import com.google.common.collect.Iterators; +import com.google.common.collect.UnmodifiableIterator; +import java.io.Serializable; +import java.util.Collection; +import java.util.EnumSet; + +@GwtCompatible(serializable=true, emulated=true) +final class ImmutableEnumSet> +extends ImmutableSet { + private final transient EnumSet delegate; + private transient int hashCode; + + static > ImmutableSet asImmutable(EnumSet set) { + switch (set.size()) { + case 0: { + return ImmutableSet.of(); + } + case 1: { + return ImmutableSet.of(Iterables.getOnlyElement(set)); + } + } + return new ImmutableEnumSet(set); + } + + private ImmutableEnumSet(EnumSet delegate) { + this.delegate = delegate; + } + + @Override + boolean isPartialView() { + return false; + } + + @Override + public UnmodifiableIterator iterator() { + return Iterators.unmodifiableIterator(this.delegate.iterator()); + } + + @Override + public int size() { + return this.delegate.size(); + } + + @Override + public boolean contains(Object object) { + return this.delegate.contains(object); + } + + @Override + public boolean containsAll(Collection collection) { + return this.delegate.containsAll(collection); + } + + @Override + public boolean isEmpty() { + return this.delegate.isEmpty(); + } + + @Override + public boolean equals(Object object) { + return object == this || this.delegate.equals(object); + } + + @Override + public int hashCode() { + int result = this.hashCode; + return result == 0 ? (this.hashCode = this.delegate.hashCode()) : result; + } + + @Override + public String toString() { + return this.delegate.toString(); + } + + @Override + Object writeReplace() { + return new EnumSerializedForm(this.delegate); + } + + private static class EnumSerializedForm> + implements Serializable { + final EnumSet delegate; + private static final long serialVersionUID = 0L; + + EnumSerializedForm(EnumSet delegate) { + this.delegate = delegate; + } + + Object readResolve() { + return new ImmutableEnumSet((EnumSet)this.delegate.clone()); + } + } +} diff --git a/src/com/google/common/collect/ImmutableList.java b/src/com/google/common/collect/ImmutableList.java new file mode 100644 index 0000000..147580b --- /dev/null +++ b/src/com/google/common/collect/ImmutableList.java @@ -0,0 +1,434 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.GwtCompatible; +import com.google.common.base.Preconditions; +import com.google.common.collect.AbstractIndexedListIterator; +import com.google.common.collect.ImmutableCollection; +import com.google.common.collect.Lists; +import com.google.common.collect.ObjectArrays; +import com.google.common.collect.RegularImmutableList; +import com.google.common.collect.SingletonImmutableList; +import com.google.common.collect.UnmodifiableIterator; +import com.google.common.collect.UnmodifiableListIterator; +import java.io.InvalidObjectException; +import java.io.ObjectInputStream; +import java.io.Serializable; +import java.util.Collection; +import java.util.Iterator; +import java.util.List; +import java.util.RandomAccess; +import javax.annotation.Nullable; + +@GwtCompatible(serializable=true, emulated=true) +public abstract class ImmutableList +extends ImmutableCollection +implements List, +RandomAccess { + private static final ImmutableList EMPTY = new RegularImmutableList(ObjectArrays.EMPTY_ARRAY); + + public static ImmutableList of() { + return EMPTY; + } + + public static ImmutableList of(E element) { + return new SingletonImmutableList(element); + } + + public static ImmutableList of(E e1, E e2) { + return ImmutableList.construct(e1, e2); + } + + public static ImmutableList of(E e1, E e2, E e3) { + return ImmutableList.construct(e1, e2, e3); + } + + public static ImmutableList of(E e1, E e2, E e3, E e4) { + return ImmutableList.construct(e1, e2, e3, e4); + } + + public static ImmutableList of(E e1, E e2, E e3, E e4, E e5) { + return ImmutableList.construct(e1, e2, e3, e4, e5); + } + + public static ImmutableList of(E e1, E e2, E e3, E e4, E e5, E e6) { + return ImmutableList.construct(e1, e2, e3, e4, e5, e6); + } + + public static ImmutableList of(E e1, E e2, E e3, E e4, E e5, E e6, E e7) { + return ImmutableList.construct(e1, e2, e3, e4, e5, e6, e7); + } + + public static ImmutableList of(E e1, E e2, E e3, E e4, E e5, E e6, E e7, E e8) { + return ImmutableList.construct(e1, e2, e3, e4, e5, e6, e7, e8); + } + + public static ImmutableList of(E e1, E e2, E e3, E e4, E e5, E e6, E e7, E e8, E e9) { + return ImmutableList.construct(e1, e2, e3, e4, e5, e6, e7, e8, e9); + } + + public static ImmutableList of(E e1, E e2, E e3, E e4, E e5, E e6, E e7, E e8, E e9, E e10) { + return ImmutableList.construct(e1, e2, e3, e4, e5, e6, e7, e8, e9, e10); + } + + public static ImmutableList of(E e1, E e2, E e3, E e4, E e5, E e6, E e7, E e8, E e9, E e10, E e11) { + return ImmutableList.construct(e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11); + } + + public static ImmutableList of(E e1, E e2, E e3, E e4, E e5, E e6, E e7, E e8, E e9, E e10, E e11, E e12, E ... others) { + Object[] array = new Object[12 + others.length]; + array[0] = e1; + array[1] = e2; + array[2] = e3; + array[3] = e4; + array[4] = e5; + array[5] = e6; + array[6] = e7; + array[7] = e8; + array[8] = e9; + array[9] = e10; + array[10] = e11; + array[11] = e12; + System.arraycopy(others, 0, array, 12, others.length); + return ImmutableList.construct(array); + } + + public static ImmutableList copyOf(Iterable elements) { + Preconditions.checkNotNull(elements); + return elements instanceof Collection ? ImmutableList.copyOf((Collection)elements) : ImmutableList.copyOf(elements.iterator()); + } + + public static ImmutableList copyOf(Collection elements) { + if (elements instanceof ImmutableCollection) { + ImmutableList list = ((ImmutableCollection)elements).asList(); + return list.isPartialView() ? ImmutableList.asImmutableList(list.toArray()) : list; + } + return ImmutableList.construct(elements.toArray()); + } + + public static ImmutableList copyOf(Iterator elements) { + if (!elements.hasNext()) { + return ImmutableList.of(); + } + E first = elements.next(); + if (!elements.hasNext()) { + return ImmutableList.of(first); + } + return ((Builder)((Builder)new Builder().add((Object)first)).addAll(elements)).build(); + } + + public static ImmutableList copyOf(E[] elements) { + switch (elements.length) { + case 0: { + return ImmutableList.of(); + } + case 1: { + return new SingletonImmutableList(elements[0]); + } + } + return new RegularImmutableList(ObjectArrays.checkElementsNotNull((Object[])elements.clone())); + } + + private static ImmutableList construct(Object ... elements) { + return ImmutableList.asImmutableList(ObjectArrays.checkElementsNotNull(elements)); + } + + static ImmutableList asImmutableList(Object[] elements) { + return ImmutableList.asImmutableList(elements, elements.length); + } + + static ImmutableList asImmutableList(Object[] elements, int length) { + switch (length) { + case 0: { + return ImmutableList.of(); + } + case 1: { + SingletonImmutableList list = new SingletonImmutableList(elements[0]); + return list; + } + } + if (length < elements.length) { + elements = ObjectArrays.arraysCopyOf(elements, length); + } + return new RegularImmutableList(elements); + } + + ImmutableList() { + } + + @Override + public UnmodifiableIterator iterator() { + return this.listIterator(); + } + + @Override + public UnmodifiableListIterator listIterator() { + return this.listIterator(0); + } + + @Override + public UnmodifiableListIterator listIterator(int index) { + return new AbstractIndexedListIterator(this.size(), index){ + + @Override + protected E get(int index) { + return ImmutableList.this.get(index); + } + }; + } + + @Override + public int indexOf(@Nullable Object object) { + return object == null ? -1 : Lists.indexOfImpl(this, object); + } + + @Override + public int lastIndexOf(@Nullable Object object) { + return object == null ? -1 : Lists.lastIndexOfImpl(this, object); + } + + @Override + public boolean contains(@Nullable Object object) { + return this.indexOf(object) >= 0; + } + + @Override + public ImmutableList subList(int fromIndex, int toIndex) { + Preconditions.checkPositionIndexes(fromIndex, toIndex, this.size()); + int length = toIndex - fromIndex; + switch (length) { + case 0: { + return ImmutableList.of(); + } + case 1: { + return ImmutableList.of(this.get(fromIndex)); + } + } + return this.subListUnchecked(fromIndex, toIndex); + } + + ImmutableList subListUnchecked(int fromIndex, int toIndex) { + return new SubList(fromIndex, toIndex - fromIndex); + } + + @Override + @Deprecated + public final boolean addAll(int index, Collection newElements) { + throw new UnsupportedOperationException(); + } + + @Override + @Deprecated + public final E set(int index, E element) { + throw new UnsupportedOperationException(); + } + + @Override + @Deprecated + public final void add(int index, E element) { + throw new UnsupportedOperationException(); + } + + @Override + @Deprecated + public final E remove(int index) { + throw new UnsupportedOperationException(); + } + + @Override + public final ImmutableList asList() { + return this; + } + + @Override + int copyIntoArray(Object[] dst, int offset) { + int size = this.size(); + for (int i = 0; i < size; ++i) { + dst[offset + i] = this.get(i); + } + return offset + size; + } + + public ImmutableList reverse() { + return new ReverseImmutableList(this); + } + + @Override + public boolean equals(@Nullable Object obj) { + return Lists.equalsImpl(this, obj); + } + + @Override + public int hashCode() { + int hashCode = 1; + int n = this.size(); + for (int i = 0; i < n; ++i) { + hashCode = 31 * hashCode + this.get(i).hashCode(); + hashCode = ~(~hashCode); + } + return hashCode; + } + + private void readObject(ObjectInputStream stream) throws InvalidObjectException { + throw new InvalidObjectException("Use SerializedForm"); + } + + @Override + Object writeReplace() { + return new SerializedForm(this.toArray()); + } + + public static Builder builder() { + return new Builder(); + } + + public static final class Builder + extends ImmutableCollection.ArrayBasedBuilder { + public Builder() { + this(4); + } + + Builder(int capacity) { + super(capacity); + } + + @Override + public Builder add(E element) { + super.add((Object)element); + return this; + } + + @Override + public Builder addAll(Iterable elements) { + super.addAll(elements); + return this; + } + + @Override + public Builder add(E ... elements) { + super.add(elements); + return this; + } + + @Override + public Builder addAll(Iterator elements) { + super.addAll(elements); + return this; + } + + @Override + public ImmutableList build() { + return ImmutableList.asImmutableList(this.contents, this.size); + } + } + + static class SerializedForm + implements Serializable { + final Object[] elements; + private static final long serialVersionUID = 0L; + + SerializedForm(Object[] elements) { + this.elements = elements; + } + + Object readResolve() { + return ImmutableList.copyOf(this.elements); + } + } + + private static class ReverseImmutableList + extends ImmutableList { + private final transient ImmutableList forwardList; + + ReverseImmutableList(ImmutableList backingList) { + this.forwardList = backingList; + } + + private int reverseIndex(int index) { + return this.size() - 1 - index; + } + + private int reversePosition(int index) { + return this.size() - index; + } + + @Override + public ImmutableList reverse() { + return this.forwardList; + } + + @Override + public boolean contains(@Nullable Object object) { + return this.forwardList.contains(object); + } + + @Override + public int indexOf(@Nullable Object object) { + int index = this.forwardList.lastIndexOf(object); + return index >= 0 ? this.reverseIndex(index) : -1; + } + + @Override + public int lastIndexOf(@Nullable Object object) { + int index = this.forwardList.indexOf(object); + return index >= 0 ? this.reverseIndex(index) : -1; + } + + @Override + public ImmutableList subList(int fromIndex, int toIndex) { + Preconditions.checkPositionIndexes(fromIndex, toIndex, this.size()); + return ((ImmutableList)this.forwardList.subList(this.reversePosition(toIndex), this.reversePosition(fromIndex))).reverse(); + } + + @Override + public E get(int index) { + Preconditions.checkElementIndex(index, this.size()); + return this.forwardList.get(this.reverseIndex(index)); + } + + @Override + public int size() { + return this.forwardList.size(); + } + + @Override + boolean isPartialView() { + return this.forwardList.isPartialView(); + } + } + + class SubList + extends ImmutableList { + final transient int offset; + final transient int length; + + SubList(int offset, int length) { + this.offset = offset; + this.length = length; + } + + @Override + public int size() { + return this.length; + } + + @Override + public E get(int index) { + Preconditions.checkElementIndex(index, this.length); + return ImmutableList.this.get(index + this.offset); + } + + @Override + public ImmutableList subList(int fromIndex, int toIndex) { + Preconditions.checkPositionIndexes(fromIndex, toIndex, this.length); + return ImmutableList.this.subList(fromIndex + this.offset, toIndex + this.offset); + } + + @Override + boolean isPartialView() { + return true; + } + } +} diff --git a/src/com/google/common/collect/ImmutableListMultimap.java b/src/com/google/common/collect/ImmutableListMultimap.java new file mode 100644 index 0000000..2b34af6 --- /dev/null +++ b/src/com/google/common/collect/ImmutableListMultimap.java @@ -0,0 +1,227 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.GwtCompatible; +import com.google.common.annotations.GwtIncompatible; +import com.google.common.collect.EmptyImmutableListMultimap; +import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableMap; +import com.google.common.collect.ImmutableMultimap; +import com.google.common.collect.ListMultimap; +import com.google.common.collect.Multimap; +import com.google.common.collect.Serialization; +import java.io.IOException; +import java.io.InvalidObjectException; +import java.io.ObjectInputStream; +import java.io.ObjectOutputStream; +import java.util.Collection; +import java.util.Comparator; +import java.util.Map; +import javax.annotation.Nullable; + +@GwtCompatible(serializable=true, emulated=true) +public class ImmutableListMultimap +extends ImmutableMultimap +implements ListMultimap { + private transient ImmutableListMultimap inverse; + @GwtIncompatible(value="Not needed in emulated source") + private static final long serialVersionUID = 0L; + + public static ImmutableListMultimap of() { + return EmptyImmutableListMultimap.INSTANCE; + } + + public static ImmutableListMultimap of(K k1, V v1) { + Builder builder = ImmutableListMultimap.builder(); + builder.put((Object)k1, (Object)v1); + return builder.build(); + } + + public static ImmutableListMultimap of(K k1, V v1, K k2, V v2) { + Builder builder = ImmutableListMultimap.builder(); + builder.put((Object)k1, (Object)v1); + builder.put((Object)k2, (Object)v2); + return builder.build(); + } + + public static ImmutableListMultimap of(K k1, V v1, K k2, V v2, K k3, V v3) { + Builder builder = ImmutableListMultimap.builder(); + builder.put((Object)k1, (Object)v1); + builder.put((Object)k2, (Object)v2); + builder.put((Object)k3, (Object)v3); + return builder.build(); + } + + public static ImmutableListMultimap of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4) { + Builder builder = ImmutableListMultimap.builder(); + builder.put((Object)k1, (Object)v1); + builder.put((Object)k2, (Object)v2); + builder.put((Object)k3, (Object)v3); + builder.put((Object)k4, (Object)v4); + return builder.build(); + } + + public static ImmutableListMultimap of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5) { + Builder builder = ImmutableListMultimap.builder(); + builder.put((Object)k1, (Object)v1); + builder.put((Object)k2, (Object)v2); + builder.put((Object)k3, (Object)v3); + builder.put((Object)k4, (Object)v4); + builder.put((Object)k5, (Object)v5); + return builder.build(); + } + + public static Builder builder() { + return new Builder(); + } + + public static ImmutableListMultimap copyOf(Multimap multimap) { + ImmutableListMultimap kvMultimap; + if (multimap.isEmpty()) { + return ImmutableListMultimap.of(); + } + if (multimap instanceof ImmutableListMultimap && !(kvMultimap = (ImmutableListMultimap)multimap).isPartialView()) { + return kvMultimap; + } + ImmutableMap.Builder> builder = ImmutableMap.builder(); + int size = 0; + for (Map.Entry> entry : multimap.asMap().entrySet()) { + ImmutableList list = ImmutableList.copyOf(entry.getValue()); + if (list.isEmpty()) continue; + builder.put(entry.getKey(), list); + size += list.size(); + } + return new ImmutableListMultimap(builder.build(), size); + } + + ImmutableListMultimap(ImmutableMap> map, int size) { + super(map, size); + } + + @Override + public ImmutableList get(@Nullable K key) { + ImmutableList list = (ImmutableList)this.map.get(key); + return list == null ? ImmutableList.of() : list; + } + + @Override + public ImmutableListMultimap inverse() { + ImmutableListMultimap result = this.inverse; + return result == null ? (this.inverse = this.invert()) : result; + } + + private ImmutableListMultimap invert() { + Builder builder = ImmutableListMultimap.builder(); + for (Map.Entry entry : this.entries()) { + builder.put(entry.getValue(), entry.getKey()); + } + ImmutableMultimap invertedMultimap = builder.build(); + ((ImmutableListMultimap)invertedMultimap).inverse = this; + return invertedMultimap; + } + + @Override + @Deprecated + public ImmutableList removeAll(Object key) { + throw new UnsupportedOperationException(); + } + + @Override + @Deprecated + public ImmutableList replaceValues(K key, Iterable values) { + throw new UnsupportedOperationException(); + } + + @GwtIncompatible(value="java.io.ObjectOutputStream") + private void writeObject(ObjectOutputStream stream) throws IOException { + stream.defaultWriteObject(); + Serialization.writeMultimap(this, stream); + } + + @GwtIncompatible(value="java.io.ObjectInputStream") + private void readObject(ObjectInputStream stream) throws IOException, ClassNotFoundException { + ImmutableMap tmpMap; + stream.defaultReadObject(); + int keyCount = stream.readInt(); + if (keyCount < 0) { + int n = keyCount; + throw new InvalidObjectException(new StringBuilder(29).append("Invalid key count ").append(n).toString()); + } + ImmutableMap.Builder> builder = ImmutableMap.builder(); + int tmpSize = 0; + for (int i = 0; i < keyCount; ++i) { + Object key = stream.readObject(); + int valueCount = stream.readInt(); + if (valueCount <= 0) { + int n = valueCount; + throw new InvalidObjectException(new StringBuilder(31).append("Invalid value count ").append(n).toString()); + } + Object[] array = new Object[valueCount]; + for (int j = 0; j < valueCount; ++j) { + array[j] = stream.readObject(); + } + builder.put(key, ImmutableList.copyOf(array)); + tmpSize += valueCount; + } + try { + tmpMap = builder.build(); + } + catch (IllegalArgumentException e) { + throw (InvalidObjectException)new InvalidObjectException(e.getMessage()).initCause(e); + } + ImmutableMultimap.FieldSettersHolder.MAP_FIELD_SETTER.set((ImmutableMultimap)this, tmpMap); + ImmutableMultimap.FieldSettersHolder.SIZE_FIELD_SETTER.set((ImmutableMultimap)this, tmpSize); + } + + public static final class Builder + extends ImmutableMultimap.Builder { + @Override + public Builder put(K key, V value) { + super.put(key, value); + return this; + } + + @Override + public Builder put(Map.Entry entry) { + super.put(entry); + return this; + } + + @Override + public Builder putAll(K key, Iterable values) { + super.putAll(key, values); + return this; + } + + @Override + public Builder putAll(K key, V ... values) { + super.putAll(key, values); + return this; + } + + @Override + public Builder putAll(Multimap multimap) { + super.putAll(multimap); + return this; + } + + @Override + public Builder orderKeysBy(Comparator keyComparator) { + super.orderKeysBy(keyComparator); + return this; + } + + @Override + public Builder orderValuesBy(Comparator valueComparator) { + super.orderValuesBy(valueComparator); + return this; + } + + @Override + public ImmutableListMultimap build() { + return (ImmutableListMultimap)super.build(); + } + } +} diff --git a/src/com/google/common/collect/ImmutableMap.java b/src/com/google/common/collect/ImmutableMap.java new file mode 100644 index 0000000..d0df598 --- /dev/null +++ b/src/com/google/common/collect/ImmutableMap.java @@ -0,0 +1,371 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.Beta; +import com.google.common.annotations.GwtCompatible; +import com.google.common.base.Preconditions; +import com.google.common.collect.AbstractMapEntry; +import com.google.common.collect.CollectPreconditions; +import com.google.common.collect.ImmutableBiMap; +import com.google.common.collect.ImmutableCollection; +import com.google.common.collect.ImmutableEnumMap; +import com.google.common.collect.ImmutableMapEntry; +import com.google.common.collect.ImmutableMapEntrySet; +import com.google.common.collect.ImmutableMapKeySet; +import com.google.common.collect.ImmutableMapValues; +import com.google.common.collect.ImmutableSet; +import com.google.common.collect.ImmutableSetMultimap; +import com.google.common.collect.ImmutableSortedMap; +import com.google.common.collect.Maps; +import com.google.common.collect.ObjectArrays; +import com.google.common.collect.RegularImmutableMap; +import com.google.common.collect.UnmodifiableIterator; +import java.io.Serializable; +import java.util.EnumMap; +import java.util.Iterator; +import java.util.Map; +import javax.annotation.Nullable; + +@GwtCompatible(serializable=true, emulated=true) +public abstract class ImmutableMap +implements Map, +Serializable { + private static final Map.Entry[] EMPTY_ENTRY_ARRAY = new Map.Entry[0]; + private transient ImmutableSet> entrySet; + private transient ImmutableSet keySet; + private transient ImmutableCollection values; + private transient ImmutableSetMultimap multimapView; + + public static ImmutableMap of() { + return ImmutableBiMap.of(); + } + + public static ImmutableMap of(K k1, V v1) { + return ImmutableBiMap.of(k1, v1); + } + + public static ImmutableMap of(K k1, V v1, K k2, V v2) { + return new RegularImmutableMap(ImmutableMap.entryOf(k1, v1), ImmutableMap.entryOf(k2, v2)); + } + + public static ImmutableMap of(K k1, V v1, K k2, V v2, K k3, V v3) { + return new RegularImmutableMap(ImmutableMap.entryOf(k1, v1), ImmutableMap.entryOf(k2, v2), ImmutableMap.entryOf(k3, v3)); + } + + public static ImmutableMap of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4) { + return new RegularImmutableMap(ImmutableMap.entryOf(k1, v1), ImmutableMap.entryOf(k2, v2), ImmutableMap.entryOf(k3, v3), ImmutableMap.entryOf(k4, v4)); + } + + public static ImmutableMap of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5) { + return new RegularImmutableMap(ImmutableMap.entryOf(k1, v1), ImmutableMap.entryOf(k2, v2), ImmutableMap.entryOf(k3, v3), ImmutableMap.entryOf(k4, v4), ImmutableMap.entryOf(k5, v5)); + } + + static ImmutableMapEntry.TerminalEntry entryOf(K key, V value) { + CollectPreconditions.checkEntryNotNull(key, value); + return new ImmutableMapEntry.TerminalEntry(key, value); + } + + public static Builder builder() { + return new Builder(); + } + + static void checkNoConflict(boolean safe, String conflictDescription, Map.Entry entry1, Map.Entry entry2) { + if (!safe) { + String string = String.valueOf(String.valueOf(conflictDescription)); + String string2 = String.valueOf(String.valueOf(entry1)); + String string3 = String.valueOf(String.valueOf(entry2)); + throw new IllegalArgumentException(new StringBuilder(34 + string.length() + string2.length() + string3.length()).append("Multiple entries with same ").append(string).append(": ").append(string2).append(" and ").append(string3).toString()); + } + } + + public static ImmutableMap copyOf(Map map) { + if (map instanceof ImmutableMap && !(map instanceof ImmutableSortedMap)) { + ImmutableMap kvMap = (ImmutableMap)map; + if (!kvMap.isPartialView()) { + return kvMap; + } + } else if (map instanceof EnumMap) { + return ImmutableMap.copyOfEnumMapUnsafe(map); + } + Map.Entry[] entries = map.entrySet().toArray(EMPTY_ENTRY_ARRAY); + switch (entries.length) { + case 0: { + return ImmutableMap.of(); + } + case 1: { + Map.Entry onlyEntry = entries[0]; + return ImmutableMap.of(onlyEntry.getKey(), onlyEntry.getValue()); + } + } + return new RegularImmutableMap(entries); + } + + private static ImmutableMap copyOfEnumMapUnsafe(Map map) { + return ImmutableMap.copyOfEnumMap((EnumMap)map); + } + + private static , V> ImmutableMap copyOfEnumMap(Map original) { + EnumMap copy = new EnumMap(original); + for (Map.Entry entry : copy.entrySet()) { + CollectPreconditions.checkEntryNotNull(entry.getKey(), entry.getValue()); + } + return ImmutableEnumMap.asImmutable(copy); + } + + ImmutableMap() { + } + + @Override + @Deprecated + public final V put(K k, V v) { + throw new UnsupportedOperationException(); + } + + @Override + @Deprecated + public final V remove(Object o) { + throw new UnsupportedOperationException(); + } + + @Override + @Deprecated + public final void putAll(Map map) { + throw new UnsupportedOperationException(); + } + + @Override + @Deprecated + public final void clear() { + throw new UnsupportedOperationException(); + } + + @Override + public boolean isEmpty() { + return this.size() == 0; + } + + @Override + public boolean containsKey(@Nullable Object key) { + return this.get(key) != null; + } + + @Override + public boolean containsValue(@Nullable Object value) { + return ((ImmutableCollection)this.values()).contains(value); + } + + @Override + public abstract V get(@Nullable Object var1); + + @Override + public ImmutableSet> entrySet() { + ImmutableSet> result = this.entrySet; + return result == null ? (this.entrySet = this.createEntrySet()) : result; + } + + abstract ImmutableSet> createEntrySet(); + + @Override + public ImmutableSet keySet() { + ImmutableSet result = this.keySet; + return result == null ? (this.keySet = this.createKeySet()) : result; + } + + ImmutableSet createKeySet() { + return new ImmutableMapKeySet(this); + } + + @Override + public ImmutableCollection values() { + ImmutableCollection result = this.values; + return result == null ? (this.values = new ImmutableMapValues(this)) : result; + } + + @Beta + public ImmutableSetMultimap asMultimap() { + ImmutableSetMultimap result = this.multimapView; + return result == null ? (this.multimapView = this.createMultimapView()) : result; + } + + private ImmutableSetMultimap createMultimapView() { + ImmutableMap> map = this.viewMapValuesAsSingletonSets(); + return new ImmutableSetMultimap(map, map.size(), null); + } + + private ImmutableMap> viewMapValuesAsSingletonSets() { + return new MapViewOfValuesAsSingletonSets(this); + } + + @Override + public boolean equals(@Nullable Object object) { + return Maps.equalsImpl(this, object); + } + + abstract boolean isPartialView(); + + @Override + public int hashCode() { + return ((ImmutableSet)this.entrySet()).hashCode(); + } + + public String toString() { + return Maps.toStringImpl(this); + } + + Object writeReplace() { + return new SerializedForm(this); + } + + static class SerializedForm + implements Serializable { + private final Object[] keys; + private final Object[] values; + private static final long serialVersionUID = 0L; + + SerializedForm(ImmutableMap map) { + this.keys = new Object[map.size()]; + this.values = new Object[map.size()]; + int i = 0; + for (Map.Entry entry : map.entrySet()) { + this.keys[i] = entry.getKey(); + this.values[i] = entry.getValue(); + ++i; + } + } + + Object readResolve() { + Builder builder = new Builder(); + return this.createMap(builder); + } + + Object createMap(Builder builder) { + for (int i = 0; i < this.keys.length; ++i) { + builder.put(this.keys[i], this.values[i]); + } + return builder.build(); + } + } + + private static final class MapViewOfValuesAsSingletonSets + extends ImmutableMap> { + private final ImmutableMap delegate; + + MapViewOfValuesAsSingletonSets(ImmutableMap delegate) { + this.delegate = Preconditions.checkNotNull(delegate); + } + + @Override + public int size() { + return this.delegate.size(); + } + + @Override + public boolean containsKey(@Nullable Object key) { + return this.delegate.containsKey(key); + } + + @Override + public ImmutableSet get(@Nullable Object key) { + V outerValue = this.delegate.get(key); + return outerValue == null ? null : ImmutableSet.of(outerValue); + } + + @Override + boolean isPartialView() { + return false; + } + + @Override + ImmutableSet>> createEntrySet() { + return new ImmutableMapEntrySet>(){ + + @Override + ImmutableMap> map() { + return MapViewOfValuesAsSingletonSets.this; + } + + @Override + public UnmodifiableIterator>> iterator() { + final Iterator backingIterator = ((ImmutableSet)MapViewOfValuesAsSingletonSets.this.delegate.entrySet()).iterator(); + return new UnmodifiableIterator>>(){ + + @Override + public boolean hasNext() { + return backingIterator.hasNext(); + } + + @Override + public Map.Entry> next() { + final Map.Entry backingEntry = (Map.Entry)backingIterator.next(); + return new AbstractMapEntry>(){ + + @Override + public K getKey() { + return backingEntry.getKey(); + } + + @Override + public ImmutableSet getValue() { + return ImmutableSet.of(backingEntry.getValue()); + } + }; + } + }; + } + }; + } + } + + public static class Builder { + ImmutableMapEntry.TerminalEntry[] entries; + int size; + + public Builder() { + this(4); + } + + Builder(int initialCapacity) { + this.entries = new ImmutableMapEntry.TerminalEntry[initialCapacity]; + this.size = 0; + } + + private void ensureCapacity(int minCapacity) { + if (minCapacity > this.entries.length) { + this.entries = ObjectArrays.arraysCopyOf(this.entries, ImmutableCollection.Builder.expandedCapacity(this.entries.length, minCapacity)); + } + } + + public Builder put(K key, V value) { + this.ensureCapacity(this.size + 1); + ImmutableMapEntry.TerminalEntry entry = ImmutableMap.entryOf(key, value); + this.entries[this.size++] = entry; + return this; + } + + public Builder put(Map.Entry entry) { + return this.put(entry.getKey(), entry.getValue()); + } + + public Builder putAll(Map map) { + this.ensureCapacity(this.size + map.size()); + for (Map.Entry entry : map.entrySet()) { + this.put(entry); + } + return this; + } + + public ImmutableMap build() { + switch (this.size) { + case 0: { + return ImmutableMap.of(); + } + case 1: { + return ImmutableMap.of(this.entries[0].getKey(), this.entries[0].getValue()); + } + } + return new RegularImmutableMap(this.size, this.entries); + } + } +} diff --git a/src/com/google/common/collect/ImmutableMapEntry.java b/src/com/google/common/collect/ImmutableMapEntry.java new file mode 100644 index 0000000..6eb10ba --- /dev/null +++ b/src/com/google/common/collect/ImmutableMapEntry.java @@ -0,0 +1,51 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.GwtIncompatible; +import com.google.common.collect.CollectPreconditions; +import com.google.common.collect.ImmutableEntry; +import javax.annotation.Nullable; + +@GwtIncompatible(value="unnecessary") +abstract class ImmutableMapEntry +extends ImmutableEntry { + ImmutableMapEntry(K key, V value) { + super(key, value); + CollectPreconditions.checkEntryNotNull(key, value); + } + + ImmutableMapEntry(ImmutableMapEntry contents) { + super(contents.getKey(), contents.getValue()); + } + + @Nullable + abstract ImmutableMapEntry getNextInKeyBucket(); + + @Nullable + abstract ImmutableMapEntry getNextInValueBucket(); + + static final class TerminalEntry + extends ImmutableMapEntry { + TerminalEntry(ImmutableMapEntry contents) { + super(contents); + } + + TerminalEntry(K key, V value) { + super(key, value); + } + + @Override + @Nullable + ImmutableMapEntry getNextInKeyBucket() { + return null; + } + + @Override + @Nullable + ImmutableMapEntry getNextInValueBucket() { + return null; + } + } +} diff --git a/src/com/google/common/collect/ImmutableMapEntrySet.java b/src/com/google/common/collect/ImmutableMapEntrySet.java new file mode 100644 index 0000000..e3cb38f --- /dev/null +++ b/src/com/google/common/collect/ImmutableMapEntrySet.java @@ -0,0 +1,62 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.GwtCompatible; +import com.google.common.annotations.GwtIncompatible; +import com.google.common.collect.ImmutableMap; +import com.google.common.collect.ImmutableSet; +import java.io.Serializable; +import java.util.Map; +import javax.annotation.Nullable; + +@GwtCompatible(emulated=true) +abstract class ImmutableMapEntrySet +extends ImmutableSet> { + ImmutableMapEntrySet() { + } + + abstract ImmutableMap map(); + + @Override + public int size() { + return this.map().size(); + } + + @Override + public boolean contains(@Nullable Object object) { + if (object instanceof Map.Entry) { + Map.Entry entry = (Map.Entry)object; + V value = this.map().get(entry.getKey()); + return value != null && value.equals(entry.getValue()); + } + return false; + } + + @Override + boolean isPartialView() { + return this.map().isPartialView(); + } + + @Override + @GwtIncompatible(value="serialization") + Object writeReplace() { + return new EntrySetSerializedForm(this.map()); + } + + @GwtIncompatible(value="serialization") + private static class EntrySetSerializedForm + implements Serializable { + final ImmutableMap map; + private static final long serialVersionUID = 0L; + + EntrySetSerializedForm(ImmutableMap map) { + this.map = map; + } + + Object readResolve() { + return this.map.entrySet(); + } + } +} diff --git a/src/com/google/common/collect/ImmutableMapKeySet.java b/src/com/google/common/collect/ImmutableMapKeySet.java new file mode 100644 index 0000000..72d20ec --- /dev/null +++ b/src/com/google/common/collect/ImmutableMapKeySet.java @@ -0,0 +1,84 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.GwtCompatible; +import com.google.common.annotations.GwtIncompatible; +import com.google.common.collect.ImmutableAsList; +import com.google.common.collect.ImmutableCollection; +import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableMap; +import com.google.common.collect.ImmutableSet; +import com.google.common.collect.UnmodifiableIterator; +import java.io.Serializable; +import java.util.Map; +import javax.annotation.Nullable; + +@GwtCompatible(emulated=true) +final class ImmutableMapKeySet +extends ImmutableSet { + private final ImmutableMap map; + + ImmutableMapKeySet(ImmutableMap map) { + this.map = map; + } + + @Override + public int size() { + return this.map.size(); + } + + @Override + public UnmodifiableIterator iterator() { + return this.asList().iterator(); + } + + @Override + public boolean contains(@Nullable Object object) { + return this.map.containsKey(object); + } + + @Override + ImmutableList createAsList() { + final ImmutableList entryList = ((ImmutableCollection)((Object)this.map.entrySet())).asList(); + return new ImmutableAsList(){ + + @Override + public K get(int index) { + return ((Map.Entry)entryList.get(index)).getKey(); + } + + @Override + ImmutableCollection delegateCollection() { + return ImmutableMapKeySet.this; + } + }; + } + + @Override + boolean isPartialView() { + return true; + } + + @Override + @GwtIncompatible(value="serialization") + Object writeReplace() { + return new KeySetSerializedForm(this.map); + } + + @GwtIncompatible(value="serialization") + private static class KeySetSerializedForm + implements Serializable { + final ImmutableMap map; + private static final long serialVersionUID = 0L; + + KeySetSerializedForm(ImmutableMap map) { + this.map = map; + } + + Object readResolve() { + return this.map.keySet(); + } + } +} diff --git a/src/com/google/common/collect/ImmutableMapValues.java b/src/com/google/common/collect/ImmutableMapValues.java new file mode 100644 index 0000000..958212d --- /dev/null +++ b/src/com/google/common/collect/ImmutableMapValues.java @@ -0,0 +1,86 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.GwtCompatible; +import com.google.common.annotations.GwtIncompatible; +import com.google.common.collect.ImmutableAsList; +import com.google.common.collect.ImmutableCollection; +import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableMap; +import com.google.common.collect.ImmutableSet; +import com.google.common.collect.Iterators; +import com.google.common.collect.Maps; +import com.google.common.collect.UnmodifiableIterator; +import java.io.Serializable; +import java.util.Map; +import javax.annotation.Nullable; + +@GwtCompatible(emulated=true) +final class ImmutableMapValues +extends ImmutableCollection { + private final ImmutableMap map; + + ImmutableMapValues(ImmutableMap map) { + this.map = map; + } + + @Override + public int size() { + return this.map.size(); + } + + @Override + public UnmodifiableIterator iterator() { + return Maps.valueIterator(((ImmutableSet)this.map.entrySet()).iterator()); + } + + @Override + public boolean contains(@Nullable Object object) { + return object != null && Iterators.contains(this.iterator(), object); + } + + @Override + boolean isPartialView() { + return true; + } + + @Override + ImmutableList createAsList() { + final ImmutableList entryList = ((ImmutableCollection)((Object)this.map.entrySet())).asList(); + return new ImmutableAsList(){ + + @Override + public V get(int index) { + return ((Map.Entry)entryList.get(index)).getValue(); + } + + @Override + ImmutableCollection delegateCollection() { + return ImmutableMapValues.this; + } + }; + } + + @Override + @GwtIncompatible(value="serialization") + Object writeReplace() { + return new SerializedForm(this.map); + } + + @GwtIncompatible(value="serialization") + private static class SerializedForm + implements Serializable { + final ImmutableMap map; + private static final long serialVersionUID = 0L; + + SerializedForm(ImmutableMap map) { + this.map = map; + } + + Object readResolve() { + return this.map.values(); + } + } +} diff --git a/src/com/google/common/collect/ImmutableMultimap.java b/src/com/google/common/collect/ImmutableMultimap.java new file mode 100644 index 0000000..d9fbbee --- /dev/null +++ b/src/com/google/common/collect/ImmutableMultimap.java @@ -0,0 +1,456 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.GwtCompatible; +import com.google.common.annotations.GwtIncompatible; +import com.google.common.base.Preconditions; +import com.google.common.collect.AbstractMapBasedMultimap; +import com.google.common.collect.AbstractMultimap; +import com.google.common.collect.CollectPreconditions; +import com.google.common.collect.ImmutableCollection; +import com.google.common.collect.ImmutableListMultimap; +import com.google.common.collect.ImmutableMap; +import com.google.common.collect.ImmutableMultiset; +import com.google.common.collect.ImmutableSet; +import com.google.common.collect.ImmutableSetMultimap; +import com.google.common.collect.Iterables; +import com.google.common.collect.Iterators; +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import com.google.common.collect.Multimap; +import com.google.common.collect.Multiset; +import com.google.common.collect.Multisets; +import com.google.common.collect.Ordering; +import com.google.common.collect.Serialization; +import com.google.common.collect.UnmodifiableIterator; +import java.io.Serializable; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.Collections; +import java.util.Comparator; +import java.util.Iterator; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import java.util.Set; +import javax.annotation.Nullable; + +@GwtCompatible(emulated=true) +public abstract class ImmutableMultimap +extends AbstractMultimap +implements Serializable { + final transient ImmutableMap> map; + final transient int size; + private static final long serialVersionUID = 0L; + + public static ImmutableMultimap of() { + return ImmutableListMultimap.of(); + } + + public static ImmutableMultimap of(K k1, V v1) { + return ImmutableListMultimap.of(k1, v1); + } + + public static ImmutableMultimap of(K k1, V v1, K k2, V v2) { + return ImmutableListMultimap.of(k1, v1, k2, v2); + } + + public static ImmutableMultimap of(K k1, V v1, K k2, V v2, K k3, V v3) { + return ImmutableListMultimap.of(k1, v1, k2, v2, k3, v3); + } + + public static ImmutableMultimap of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4) { + return ImmutableListMultimap.of(k1, v1, k2, v2, k3, v3, k4, v4); + } + + public static ImmutableMultimap of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5) { + return ImmutableListMultimap.of(k1, v1, k2, v2, k3, v3, k4, v4, k5, v5); + } + + public static Builder builder() { + return new Builder(); + } + + public static ImmutableMultimap copyOf(Multimap multimap) { + ImmutableMultimap kvMultimap; + if (multimap instanceof ImmutableMultimap && !(kvMultimap = (ImmutableMultimap)multimap).isPartialView()) { + return kvMultimap; + } + return ImmutableListMultimap.copyOf(multimap); + } + + ImmutableMultimap(ImmutableMap> map, int size) { + this.map = map; + this.size = size; + } + + @Override + @Deprecated + public ImmutableCollection removeAll(Object key) { + throw new UnsupportedOperationException(); + } + + @Override + @Deprecated + public ImmutableCollection replaceValues(K key, Iterable values) { + throw new UnsupportedOperationException(); + } + + @Override + @Deprecated + public void clear() { + throw new UnsupportedOperationException(); + } + + @Override + public abstract ImmutableCollection get(K var1); + + public abstract ImmutableMultimap inverse(); + + @Override + @Deprecated + public boolean put(K key, V value) { + throw new UnsupportedOperationException(); + } + + @Override + @Deprecated + public boolean putAll(K key, Iterable values) { + throw new UnsupportedOperationException(); + } + + @Override + @Deprecated + public boolean putAll(Multimap multimap) { + throw new UnsupportedOperationException(); + } + + @Override + @Deprecated + public boolean remove(Object key, Object value) { + throw new UnsupportedOperationException(); + } + + boolean isPartialView() { + return this.map.isPartialView(); + } + + @Override + public boolean containsKey(@Nullable Object key) { + return this.map.containsKey(key); + } + + @Override + public boolean containsValue(@Nullable Object value) { + return value != null && super.containsValue(value); + } + + @Override + public int size() { + return this.size; + } + + @Override + public ImmutableSet keySet() { + return this.map.keySet(); + } + + @Override + public ImmutableMap> asMap() { + return this.map; + } + + @Override + Map> createAsMap() { + throw new AssertionError((Object)"should never be called"); + } + + @Override + public ImmutableCollection> entries() { + return (ImmutableCollection)super.entries(); + } + + @Override + ImmutableCollection> createEntries() { + return new EntryCollection(this); + } + + @Override + UnmodifiableIterator> entryIterator() { + return new Itr>(){ + + @Override + Map.Entry output(K key, V value) { + return Maps.immutableEntry(key, value); + } + }; + } + + @Override + public ImmutableMultiset keys() { + return (ImmutableMultiset)super.keys(); + } + + @Override + ImmutableMultiset createKeys() { + return new Keys(); + } + + @Override + public ImmutableCollection values() { + return (ImmutableCollection)super.values(); + } + + @Override + ImmutableCollection createValues() { + return new Values(this); + } + + @Override + UnmodifiableIterator valueIterator() { + return new Itr(){ + + @Override + V output(K key, V value) { + return value; + } + }; + } + + private static final class Values + extends ImmutableCollection { + private final transient ImmutableMultimap multimap; + private static final long serialVersionUID = 0L; + + Values(ImmutableMultimap multimap) { + this.multimap = multimap; + } + + @Override + public boolean contains(@Nullable Object object) { + return this.multimap.containsValue(object); + } + + @Override + public UnmodifiableIterator iterator() { + return this.multimap.valueIterator(); + } + + @Override + @GwtIncompatible(value="not present in emulated superclass") + int copyIntoArray(Object[] dst, int offset) { + for (ImmutableCollection valueCollection : this.multimap.map.values()) { + offset = valueCollection.copyIntoArray(dst, offset); + } + return offset; + } + + @Override + public int size() { + return this.multimap.size(); + } + + @Override + boolean isPartialView() { + return true; + } + } + + class Keys + extends ImmutableMultiset { + Keys() { + } + + @Override + public boolean contains(@Nullable Object object) { + return ImmutableMultimap.this.containsKey(object); + } + + @Override + public int count(@Nullable Object element) { + Collection values = ImmutableMultimap.this.map.get(element); + return values == null ? 0 : values.size(); + } + + @Override + public Set elementSet() { + return ImmutableMultimap.this.keySet(); + } + + @Override + public int size() { + return ImmutableMultimap.this.size(); + } + + @Override + Multiset.Entry getEntry(int index) { + Map.Entry entry = (Map.Entry)((ImmutableCollection)((Object)ImmutableMultimap.this.map.entrySet())).asList().get(index); + return Multisets.immutableEntry(entry.getKey(), ((Collection)entry.getValue()).size()); + } + + @Override + boolean isPartialView() { + return true; + } + } + + private abstract class Itr + extends UnmodifiableIterator { + final Iterator>> mapIterator; + K key; + Iterator valueIterator; + + private Itr() { + this.mapIterator = ((ImmutableSet)((ImmutableMap)ImmutableMultimap.this.asMap()).entrySet()).iterator(); + this.key = null; + this.valueIterator = Iterators.emptyIterator(); + } + + abstract T output(K var1, V var2); + + @Override + public boolean hasNext() { + return this.mapIterator.hasNext() || this.valueIterator.hasNext(); + } + + @Override + public T next() { + if (!this.valueIterator.hasNext()) { + Map.Entry mapEntry = this.mapIterator.next(); + this.key = mapEntry.getKey(); + this.valueIterator = mapEntry.getValue().iterator(); + } + return this.output(this.key, this.valueIterator.next()); + } + } + + private static class EntryCollection + extends ImmutableCollection> { + final ImmutableMultimap multimap; + private static final long serialVersionUID = 0L; + + EntryCollection(ImmutableMultimap multimap) { + this.multimap = multimap; + } + + @Override + public UnmodifiableIterator> iterator() { + return this.multimap.entryIterator(); + } + + @Override + boolean isPartialView() { + return this.multimap.isPartialView(); + } + + @Override + public int size() { + return this.multimap.size(); + } + + @Override + public boolean contains(Object object) { + if (object instanceof Map.Entry) { + Map.Entry entry = (Map.Entry)object; + return this.multimap.containsEntry(entry.getKey(), entry.getValue()); + } + return false; + } + } + + @GwtIncompatible(value="java serialization is not supported") + static class FieldSettersHolder { + static final Serialization.FieldSetter MAP_FIELD_SETTER = Serialization.getFieldSetter(ImmutableMultimap.class, "map"); + static final Serialization.FieldSetter SIZE_FIELD_SETTER = Serialization.getFieldSetter(ImmutableMultimap.class, "size"); + static final Serialization.FieldSetter EMPTY_SET_FIELD_SETTER = Serialization.getFieldSetter(ImmutableSetMultimap.class, "emptySet"); + + FieldSettersHolder() { + } + } + + public static class Builder { + Multimap builderMultimap = new BuilderMultimap(); + Comparator keyComparator; + Comparator valueComparator; + + public Builder put(K key, V value) { + CollectPreconditions.checkEntryNotNull(key, value); + this.builderMultimap.put(key, value); + return this; + } + + public Builder put(Map.Entry entry) { + return this.put(entry.getKey(), entry.getValue()); + } + + public Builder putAll(K key, Iterable values) { + if (key == null) { + String string = String.valueOf(Iterables.toString(values)); + throw new NullPointerException(string.length() != 0 ? "null key in entry: null=".concat(string) : new String("null key in entry: null=")); + } + Collection valueList = this.builderMultimap.get(key); + for (V value : values) { + CollectPreconditions.checkEntryNotNull(key, value); + valueList.add(value); + } + return this; + } + + public Builder putAll(K key, V ... values) { + return this.putAll(key, (Iterable)Arrays.asList(values)); + } + + public Builder putAll(Multimap multimap) { + for (Map.Entry> entry : multimap.asMap().entrySet()) { + this.putAll(entry.getKey(), (Iterable)entry.getValue()); + } + return this; + } + + public Builder orderKeysBy(Comparator keyComparator) { + this.keyComparator = Preconditions.checkNotNull(keyComparator); + return this; + } + + public Builder orderValuesBy(Comparator valueComparator) { + this.valueComparator = Preconditions.checkNotNull(valueComparator); + return this; + } + + public ImmutableMultimap build() { + if (this.valueComparator != null) { + for (Collection values : this.builderMultimap.asMap().values()) { + List list = (List)values; + Collections.sort(list, this.valueComparator); + } + } + if (this.keyComparator != null) { + BuilderMultimap sortedCopy = new BuilderMultimap(); + ArrayList>> entries = Lists.newArrayList(this.builderMultimap.asMap().entrySet()); + Collections.sort(entries, Ordering.from(this.keyComparator).onKeys()); + for (Map.Entry entry : entries) { + sortedCopy.putAll(entry.getKey(), (Iterable)entry.getValue()); + } + this.builderMultimap = sortedCopy; + } + return ImmutableMultimap.copyOf(this.builderMultimap); + } + } + + private static class BuilderMultimap + extends AbstractMapBasedMultimap { + private static final long serialVersionUID = 0L; + + BuilderMultimap() { + super(new LinkedHashMap()); + } + + @Override + Collection createCollection() { + return Lists.newArrayList(); + } + } +} diff --git a/src/com/google/common/collect/ImmutableMultiset.java b/src/com/google/common/collect/ImmutableMultiset.java new file mode 100644 index 0000000..1ffee92 --- /dev/null +++ b/src/com/google/common/collect/ImmutableMultiset.java @@ -0,0 +1,374 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.GwtCompatible; +import com.google.common.annotations.GwtIncompatible; +import com.google.common.base.Preconditions; +import com.google.common.collect.ImmutableAsList; +import com.google.common.collect.ImmutableCollection; +import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableMap; +import com.google.common.collect.ImmutableSet; +import com.google.common.collect.Iterators; +import com.google.common.collect.LinkedHashMultiset; +import com.google.common.collect.Multiset; +import com.google.common.collect.Multisets; +import com.google.common.collect.RegularImmutableMultiset; +import com.google.common.collect.Sets; +import com.google.common.collect.UnmodifiableIterator; +import com.google.common.primitives.Ints; +import java.io.Serializable; +import java.util.AbstractCollection; +import java.util.Arrays; +import java.util.Collection; +import java.util.Iterator; +import javax.annotation.Nullable; + +@GwtCompatible(serializable=true, emulated=true) +public abstract class ImmutableMultiset +extends ImmutableCollection +implements Multiset { + private static final ImmutableMultiset EMPTY = new RegularImmutableMultiset(ImmutableMap.of(), 0); + private transient ImmutableSet> entrySet; + + public static ImmutableMultiset of() { + return EMPTY; + } + + public static ImmutableMultiset of(E element) { + return ImmutableMultiset.copyOfInternal(element); + } + + public static ImmutableMultiset of(E e1, E e2) { + return ImmutableMultiset.copyOfInternal(e1, e2); + } + + public static ImmutableMultiset of(E e1, E e2, E e3) { + return ImmutableMultiset.copyOfInternal(e1, e2, e3); + } + + public static ImmutableMultiset of(E e1, E e2, E e3, E e4) { + return ImmutableMultiset.copyOfInternal(e1, e2, e3, e4); + } + + public static ImmutableMultiset of(E e1, E e2, E e3, E e4, E e5) { + return ImmutableMultiset.copyOfInternal(e1, e2, e3, e4, e5); + } + + public static ImmutableMultiset of(E e1, E e2, E e3, E e4, E e5, E e6, E ... others) { + return ((Builder)((Builder)((Builder)((Builder)((Builder)((Builder)((Builder)new Builder().add((Object)e1)).add((Object)e2)).add((Object)e3)).add((Object)e4)).add((Object)e5)).add((Object)e6)).add((Object[])others)).build(); + } + + public static ImmutableMultiset copyOf(E[] elements) { + return ImmutableMultiset.copyOf(Arrays.asList(elements)); + } + + public static ImmutableMultiset copyOf(Iterable elements) { + ImmutableMultiset result; + if (elements instanceof ImmutableMultiset && !(result = (ImmutableMultiset)elements).isPartialView()) { + return result; + } + Multiset multiset = elements instanceof Multiset ? Multisets.cast(elements) : LinkedHashMultiset.create(elements); + return ImmutableMultiset.copyOfInternal(multiset); + } + + private static ImmutableMultiset copyOfInternal(E ... elements) { + return ImmutableMultiset.copyOf(Arrays.asList(elements)); + } + + private static ImmutableMultiset copyOfInternal(Multiset multiset) { + return ImmutableMultiset.copyFromEntries(multiset.entrySet()); + } + + static ImmutableMultiset copyFromEntries(Collection> entries) { + long size = 0L; + ImmutableMap.Builder builder = ImmutableMap.builder(); + for (Multiset.Entry entry : entries) { + int count = entry.getCount(); + if (count <= 0) continue; + builder.put(entry.getElement(), count); + size += (long)count; + } + if (size == 0L) { + return ImmutableMultiset.of(); + } + return new RegularImmutableMultiset(builder.build(), Ints.saturatedCast(size)); + } + + public static ImmutableMultiset copyOf(Iterator elements) { + LinkedHashMultiset multiset = LinkedHashMultiset.create(); + Iterators.addAll(multiset, elements); + return ImmutableMultiset.copyOfInternal(multiset); + } + + ImmutableMultiset() { + } + + @Override + public UnmodifiableIterator iterator() { + final Iterator entryIterator = ((ImmutableSet)this.entrySet()).iterator(); + return new UnmodifiableIterator(){ + int remaining; + E element; + + @Override + public boolean hasNext() { + return this.remaining > 0 || entryIterator.hasNext(); + } + + @Override + public E next() { + if (this.remaining <= 0) { + Multiset.Entry entry = (Multiset.Entry)entryIterator.next(); + this.element = entry.getElement(); + this.remaining = entry.getCount(); + } + --this.remaining; + return this.element; + } + }; + } + + @Override + public boolean contains(@Nullable Object object) { + return this.count(object) > 0; + } + + @Override + public boolean containsAll(Collection targets) { + return this.elementSet().containsAll(targets); + } + + @Override + @Deprecated + public final int add(E element, int occurrences) { + throw new UnsupportedOperationException(); + } + + @Override + @Deprecated + public final int remove(Object element, int occurrences) { + throw new UnsupportedOperationException(); + } + + @Override + @Deprecated + public final int setCount(E element, int count) { + throw new UnsupportedOperationException(); + } + + @Override + @Deprecated + public final boolean setCount(E element, int oldCount, int newCount) { + throw new UnsupportedOperationException(); + } + + @Override + @GwtIncompatible(value="not present in emulated superclass") + int copyIntoArray(Object[] dst, int offset) { + for (Multiset.Entry entry : this.entrySet()) { + Arrays.fill(dst, offset, offset + entry.getCount(), entry.getElement()); + offset += entry.getCount(); + } + return offset; + } + + @Override + public boolean equals(@Nullable Object object) { + return Multisets.equalsImpl(this, object); + } + + @Override + public int hashCode() { + return Sets.hashCodeImpl(this.entrySet()); + } + + @Override + public String toString() { + return ((AbstractCollection)((Object)this.entrySet())).toString(); + } + + @Override + public ImmutableSet> entrySet() { + ImmutableSet>> es = this.entrySet; + return es == null ? (this.entrySet = this.createEntrySet()) : es; + } + + private final ImmutableSet> createEntrySet() { + return this.isEmpty() ? ImmutableSet.of() : new EntrySet(); + } + + abstract Multiset.Entry getEntry(int var1); + + @Override + Object writeReplace() { + return new SerializedForm(this); + } + + public static Builder builder() { + return new Builder(); + } + + public static class Builder + extends ImmutableCollection.Builder { + final Multiset contents; + + public Builder() { + this(LinkedHashMultiset.create()); + } + + Builder(Multiset contents) { + this.contents = contents; + } + + @Override + public Builder add(E element) { + this.contents.add(Preconditions.checkNotNull(element)); + return this; + } + + public Builder addCopies(E element, int occurrences) { + this.contents.add(Preconditions.checkNotNull(element), occurrences); + return this; + } + + public Builder setCount(E element, int count) { + this.contents.setCount(Preconditions.checkNotNull(element), count); + return this; + } + + @Override + public Builder add(E ... elements) { + super.add(elements); + return this; + } + + @Override + public Builder addAll(Iterable elements) { + if (elements instanceof Multiset) { + Multiset multiset = Multisets.cast(elements); + for (Multiset.Entry entry : multiset.entrySet()) { + this.addCopies(entry.getElement(), entry.getCount()); + } + } else { + super.addAll(elements); + } + return this; + } + + @Override + public Builder addAll(Iterator elements) { + super.addAll(elements); + return this; + } + + @Override + public ImmutableMultiset build() { + return ImmutableMultiset.copyOf(this.contents); + } + } + + private static class SerializedForm + implements Serializable { + final Object[] elements; + final int[] counts; + private static final long serialVersionUID = 0L; + + SerializedForm(Multiset multiset) { + int distinct = multiset.entrySet().size(); + this.elements = new Object[distinct]; + this.counts = new int[distinct]; + int i = 0; + for (Multiset.Entry entry : multiset.entrySet()) { + this.elements[i] = entry.getElement(); + this.counts[i] = entry.getCount(); + ++i; + } + } + + Object readResolve() { + LinkedHashMultiset multiset = LinkedHashMultiset.create(this.elements.length); + for (int i = 0; i < this.elements.length; ++i) { + multiset.add(this.elements[i], this.counts[i]); + } + return ImmutableMultiset.copyOf(multiset); + } + } + + static class EntrySetSerializedForm + implements Serializable { + final ImmutableMultiset multiset; + + EntrySetSerializedForm(ImmutableMultiset multiset) { + this.multiset = multiset; + } + + Object readResolve() { + return this.multiset.entrySet(); + } + } + + private final class EntrySet + extends ImmutableSet> { + private static final long serialVersionUID = 0L; + + private EntrySet() { + } + + @Override + boolean isPartialView() { + return ImmutableMultiset.this.isPartialView(); + } + + @Override + public UnmodifiableIterator> iterator() { + return this.asList().iterator(); + } + + @Override + ImmutableList> createAsList() { + return new ImmutableAsList>(){ + + @Override + public Multiset.Entry get(int index) { + return ImmutableMultiset.this.getEntry(index); + } + + @Override + ImmutableCollection> delegateCollection() { + return EntrySet.this; + } + }; + } + + @Override + public int size() { + return ImmutableMultiset.this.elementSet().size(); + } + + @Override + public boolean contains(Object o) { + if (o instanceof Multiset.Entry) { + Multiset.Entry entry = (Multiset.Entry)o; + if (entry.getCount() <= 0) { + return false; + } + int count = ImmutableMultiset.this.count(entry.getElement()); + return count == entry.getCount(); + } + return false; + } + + @Override + public int hashCode() { + return ImmutableMultiset.this.hashCode(); + } + + @Override + Object writeReplace() { + return new EntrySetSerializedForm(ImmutableMultiset.this); + } + } +} diff --git a/src/com/google/common/collect/ImmutableRangeMap.java b/src/com/google/common/collect/ImmutableRangeMap.java new file mode 100644 index 0000000..4995c7c --- /dev/null +++ b/src/com/google/common/collect/ImmutableRangeMap.java @@ -0,0 +1,233 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.Beta; +import com.google.common.annotations.GwtIncompatible; +import com.google.common.base.Preconditions; +import com.google.common.collect.Cut; +import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableMap; +import com.google.common.collect.Maps; +import com.google.common.collect.Range; +import com.google.common.collect.RangeMap; +import com.google.common.collect.RangeSet; +import com.google.common.collect.RegularImmutableSortedMap; +import com.google.common.collect.RegularImmutableSortedSet; +import com.google.common.collect.SortedLists; +import com.google.common.collect.TreeRangeMap; +import com.google.common.collect.TreeRangeSet; +import java.util.Map; +import java.util.NoSuchElementException; +import javax.annotation.Nullable; + +@Beta +@GwtIncompatible(value="NavigableMap") +public class ImmutableRangeMap, V> +implements RangeMap { + private static final ImmutableRangeMap, Object> EMPTY = new ImmutableRangeMap(ImmutableList.of(), ImmutableList.of()); + private final ImmutableList> ranges; + private final ImmutableList values; + + public static , V> ImmutableRangeMap of() { + return EMPTY; + } + + public static , V> ImmutableRangeMap of(Range range, V value) { + return new ImmutableRangeMap(ImmutableList.of(range), ImmutableList.of(value)); + } + + public static , V> ImmutableRangeMap copyOf(RangeMap rangeMap) { + if (rangeMap instanceof ImmutableRangeMap) { + return (ImmutableRangeMap)rangeMap; + } + Map, V> map = rangeMap.asMapOfRanges(); + ImmutableList.Builder rangesBuilder = new ImmutableList.Builder(map.size()); + ImmutableList.Builder valuesBuilder = new ImmutableList.Builder(map.size()); + for (Map.Entry, V> entry : map.entrySet()) { + rangesBuilder.add(entry.getKey()); + valuesBuilder.add(entry.getValue()); + } + return new ImmutableRangeMap(rangesBuilder.build(), valuesBuilder.build()); + } + + public static , V> Builder builder() { + return new Builder(); + } + + ImmutableRangeMap(ImmutableList> ranges, ImmutableList values) { + this.ranges = ranges; + this.values = values; + } + + @Override + @Nullable + public V get(K key) { + int index = SortedLists.binarySearch(this.ranges, Range.lowerBoundFn(), Cut.belowValue(key), SortedLists.KeyPresentBehavior.ANY_PRESENT, SortedLists.KeyAbsentBehavior.NEXT_LOWER); + if (index == -1) { + return null; + } + Range range = (Range)this.ranges.get(index); + return range.contains(key) ? (V)this.values.get(index) : null; + } + + @Override + @Nullable + public Map.Entry, V> getEntry(K key) { + int index = SortedLists.binarySearch(this.ranges, Range.lowerBoundFn(), Cut.belowValue(key), SortedLists.KeyPresentBehavior.ANY_PRESENT, SortedLists.KeyAbsentBehavior.NEXT_LOWER); + if (index == -1) { + return null; + } + Range range = (Range)this.ranges.get(index); + return range.contains(key) ? Maps.immutableEntry(range, this.values.get(index)) : null; + } + + @Override + public Range span() { + if (this.ranges.isEmpty()) { + throw new NoSuchElementException(); + } + Range firstRange = (Range)this.ranges.get(0); + Range lastRange = (Range)this.ranges.get(this.ranges.size() - 1); + return Range.create(firstRange.lowerBound, lastRange.upperBound); + } + + @Override + public void put(Range range, V value) { + throw new UnsupportedOperationException(); + } + + @Override + public void putAll(RangeMap rangeMap) { + throw new UnsupportedOperationException(); + } + + @Override + public void clear() { + throw new UnsupportedOperationException(); + } + + @Override + public void remove(Range range) { + throw new UnsupportedOperationException(); + } + + @Override + public ImmutableMap, V> asMapOfRanges() { + if (this.ranges.isEmpty()) { + return ImmutableMap.of(); + } + RegularImmutableSortedSet rangeSet = new RegularImmutableSortedSet(this.ranges, Range.RANGE_LEX_ORDERING); + return new RegularImmutableSortedMap(rangeSet, this.values); + } + + @Override + public ImmutableRangeMap subRangeMap(final Range range) { + int upperIndex; + if (Preconditions.checkNotNull(range).isEmpty()) { + return ImmutableRangeMap.of(); + } + if (this.ranges.isEmpty() || range.encloses(this.span())) { + return this; + } + int lowerIndex = SortedLists.binarySearch(this.ranges, Range.upperBoundFn(), range.lowerBound, SortedLists.KeyPresentBehavior.FIRST_AFTER, SortedLists.KeyAbsentBehavior.NEXT_HIGHER); + if (lowerIndex >= (upperIndex = SortedLists.binarySearch(this.ranges, Range.lowerBoundFn(), range.upperBound, SortedLists.KeyPresentBehavior.ANY_PRESENT, SortedLists.KeyAbsentBehavior.NEXT_HIGHER))) { + return ImmutableRangeMap.of(); + } + final int off = lowerIndex; + final int len = upperIndex - lowerIndex; + ImmutableList subRanges = new ImmutableList>(){ + + @Override + public int size() { + return len; + } + + @Override + public Range get(int index) { + Preconditions.checkElementIndex(index, len); + if (index == 0 || index == len - 1) { + return ((Range)ImmutableRangeMap.this.ranges.get(index + off)).intersection(range); + } + return (Range)ImmutableRangeMap.this.ranges.get(index + off); + } + + @Override + boolean isPartialView() { + return true; + } + }; + final ImmutableRangeMap outer = this; + return new ImmutableRangeMap(subRanges, (ImmutableList)this.values.subList(lowerIndex, upperIndex)){ + + @Override + public ImmutableRangeMap subRangeMap(Range subRange) { + if (range.isConnected(subRange)) { + return outer.subRangeMap(subRange.intersection(range)); + } + return ImmutableRangeMap.of(); + } + }; + } + + @Override + public int hashCode() { + return ((ImmutableMap)this.asMapOfRanges()).hashCode(); + } + + @Override + public boolean equals(@Nullable Object o) { + if (o instanceof RangeMap) { + RangeMap rangeMap = (RangeMap)o; + return ((ImmutableMap)this.asMapOfRanges()).equals(rangeMap.asMapOfRanges()); + } + return false; + } + + @Override + public String toString() { + return ((ImmutableMap)this.asMapOfRanges()).toString(); + } + + public static final class Builder, V> { + private final RangeSet keyRanges = TreeRangeSet.create(); + private final RangeMap rangeMap = TreeRangeMap.create(); + + public Builder put(Range range, V value) { + Preconditions.checkNotNull(range); + Preconditions.checkNotNull(value); + Preconditions.checkArgument(!range.isEmpty(), "Range must not be empty, but was %s", range); + if (!this.keyRanges.complement().encloses(range)) { + for (Map.Entry, V> entry : this.rangeMap.asMapOfRanges().entrySet()) { + Range key = entry.getKey(); + if (!key.isConnected(range) || key.intersection(range).isEmpty()) continue; + String string = String.valueOf(String.valueOf(range)); + String string2 = String.valueOf(String.valueOf(entry)); + throw new IllegalArgumentException(new StringBuilder(47 + string.length() + string2.length()).append("Overlapping ranges: range ").append(string).append(" overlaps with entry ").append(string2).toString()); + } + } + this.keyRanges.add(range); + this.rangeMap.put(range, value); + return this; + } + + public Builder putAll(RangeMap rangeMap) { + for (Map.Entry, V> entry : rangeMap.asMapOfRanges().entrySet()) { + this.put(entry.getKey(), entry.getValue()); + } + return this; + } + + public ImmutableRangeMap build() { + Map, V> map = this.rangeMap.asMapOfRanges(); + ImmutableList.Builder rangesBuilder = new ImmutableList.Builder(map.size()); + ImmutableList.Builder valuesBuilder = new ImmutableList.Builder(map.size()); + for (Map.Entry, V> entry : map.entrySet()) { + rangesBuilder.add(entry.getKey()); + valuesBuilder.add(entry.getValue()); + } + return new ImmutableRangeMap(rangesBuilder.build(), valuesBuilder.build()); + } + } +} diff --git a/src/com/google/common/collect/ImmutableRangeSet.java b/src/com/google/common/collect/ImmutableRangeSet.java new file mode 100644 index 0000000..b878906 --- /dev/null +++ b/src/com/google/common/collect/ImmutableRangeSet.java @@ -0,0 +1,485 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.Beta; +import com.google.common.annotations.GwtIncompatible; +import com.google.common.base.Preconditions; +import com.google.common.collect.AbstractIterator; +import com.google.common.collect.AbstractRangeSet; +import com.google.common.collect.BoundType; +import com.google.common.collect.ContiguousSet; +import com.google.common.collect.Cut; +import com.google.common.collect.DiscreteDomain; +import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableSet; +import com.google.common.collect.ImmutableSortedSet; +import com.google.common.collect.Iterables; +import com.google.common.collect.Iterators; +import com.google.common.collect.Ordering; +import com.google.common.collect.Range; +import com.google.common.collect.RangeSet; +import com.google.common.collect.RegularImmutableSortedSet; +import com.google.common.collect.SortedLists; +import com.google.common.collect.TreeRangeSet; +import com.google.common.collect.UnmodifiableIterator; +import com.google.common.primitives.Ints; +import java.io.Serializable; +import java.util.Iterator; +import java.util.NoSuchElementException; +import javax.annotation.Nullable; + +@Beta +public final class ImmutableRangeSet +extends AbstractRangeSet +implements Serializable { + private static final ImmutableRangeSet> EMPTY = new ImmutableRangeSet(ImmutableList.of()); + private static final ImmutableRangeSet> ALL = new ImmutableRangeSet(ImmutableList.of(Range.all())); + private final transient ImmutableList> ranges; + private transient ImmutableRangeSet complement; + + public static ImmutableRangeSet of() { + return EMPTY; + } + + static ImmutableRangeSet all() { + return ALL; + } + + public static ImmutableRangeSet of(Range range) { + Preconditions.checkNotNull(range); + if (range.isEmpty()) { + return ImmutableRangeSet.of(); + } + if (range.equals(Range.all())) { + return ImmutableRangeSet.all(); + } + return new ImmutableRangeSet(ImmutableList.of(range)); + } + + public static ImmutableRangeSet copyOf(RangeSet rangeSet) { + ImmutableRangeSet immutableRangeSet; + Preconditions.checkNotNull(rangeSet); + if (rangeSet.isEmpty()) { + return ImmutableRangeSet.of(); + } + if (rangeSet.encloses(Range.all())) { + return ImmutableRangeSet.all(); + } + if (rangeSet instanceof ImmutableRangeSet && !(immutableRangeSet = (ImmutableRangeSet)rangeSet).isPartialView()) { + return immutableRangeSet; + } + return new ImmutableRangeSet(ImmutableList.copyOf(rangeSet.asRanges())); + } + + ImmutableRangeSet(ImmutableList> ranges) { + this.ranges = ranges; + } + + private ImmutableRangeSet(ImmutableList> ranges, ImmutableRangeSet complement) { + this.ranges = ranges; + this.complement = complement; + } + + @Override + public boolean encloses(Range otherRange) { + int index = SortedLists.binarySearch(this.ranges, Range.lowerBoundFn(), otherRange.lowerBound, Ordering.natural(), SortedLists.KeyPresentBehavior.ANY_PRESENT, SortedLists.KeyAbsentBehavior.NEXT_LOWER); + return index != -1 && ((Range)this.ranges.get(index)).encloses(otherRange); + } + + @Override + public Range rangeContaining(C value) { + int index = SortedLists.binarySearch(this.ranges, Range.lowerBoundFn(), Cut.belowValue(value), Ordering.natural(), SortedLists.KeyPresentBehavior.ANY_PRESENT, SortedLists.KeyAbsentBehavior.NEXT_LOWER); + if (index != -1) { + Range range = (Range)this.ranges.get(index); + return range.contains(value) ? range : null; + } + return null; + } + + @Override + public Range span() { + if (this.ranges.isEmpty()) { + throw new NoSuchElementException(); + } + return Range.create(((Range)this.ranges.get((int)0)).lowerBound, ((Range)this.ranges.get((int)(this.ranges.size() - 1))).upperBound); + } + + @Override + public boolean isEmpty() { + return this.ranges.isEmpty(); + } + + @Override + public void add(Range range) { + throw new UnsupportedOperationException(); + } + + @Override + public void addAll(RangeSet other) { + throw new UnsupportedOperationException(); + } + + @Override + public void remove(Range range) { + throw new UnsupportedOperationException(); + } + + @Override + public void removeAll(RangeSet other) { + throw new UnsupportedOperationException(); + } + + @Override + public ImmutableSet> asRanges() { + if (this.ranges.isEmpty()) { + return ImmutableSet.of(); + } + return new RegularImmutableSortedSet>(this.ranges, Range.RANGE_LEX_ORDERING); + } + + @Override + public ImmutableRangeSet complement() { + ImmutableRangeSet result = this.complement; + if (result != null) { + return result; + } + if (this.ranges.isEmpty()) { + this.complement = ImmutableRangeSet.all(); + return this.complement; + } + if (this.ranges.size() == 1 && ((Range)this.ranges.get(0)).equals(Range.all())) { + this.complement = ImmutableRangeSet.of(); + return this.complement; + } + ComplementRanges complementRanges = new ComplementRanges(); + result = this.complement = new ImmutableRangeSet(complementRanges, this); + return result; + } + + private ImmutableList> intersectRanges(final Range range) { + if (this.ranges.isEmpty() || range.isEmpty()) { + return ImmutableList.of(); + } + if (range.encloses(this.span())) { + return this.ranges; + } + final int fromIndex = range.hasLowerBound() ? SortedLists.binarySearch(this.ranges, Range.upperBoundFn(), range.lowerBound, SortedLists.KeyPresentBehavior.FIRST_AFTER, SortedLists.KeyAbsentBehavior.NEXT_HIGHER) : 0; + int toIndex = range.hasUpperBound() ? SortedLists.binarySearch(this.ranges, Range.lowerBoundFn(), range.upperBound, SortedLists.KeyPresentBehavior.FIRST_PRESENT, SortedLists.KeyAbsentBehavior.NEXT_HIGHER) : this.ranges.size(); + final int length = toIndex - fromIndex; + if (length == 0) { + return ImmutableList.of(); + } + return new ImmutableList>(){ + + @Override + public int size() { + return length; + } + + @Override + public Range get(int index) { + Preconditions.checkElementIndex(index, length); + if (index == 0 || index == length - 1) { + return ((Range)ImmutableRangeSet.this.ranges.get(index + fromIndex)).intersection(range); + } + return (Range)ImmutableRangeSet.this.ranges.get(index + fromIndex); + } + + @Override + boolean isPartialView() { + return true; + } + }; + } + + @Override + public ImmutableRangeSet subRangeSet(Range range) { + if (!this.isEmpty()) { + Range span = this.span(); + if (range.encloses(span)) { + return this; + } + if (range.isConnected(span)) { + return new ImmutableRangeSet(this.intersectRanges(range)); + } + } + return ImmutableRangeSet.of(); + } + + public ImmutableSortedSet asSet(DiscreteDomain domain) { + Preconditions.checkNotNull(domain); + if (this.isEmpty()) { + return ImmutableSortedSet.of(); + } + Range span = this.span().canonical(domain); + if (!span.hasLowerBound()) { + throw new IllegalArgumentException("Neither the DiscreteDomain nor this range set are bounded below"); + } + if (!span.hasUpperBound()) { + try { + domain.maxValue(); + } + catch (NoSuchElementException e) { + throw new IllegalArgumentException("Neither the DiscreteDomain nor this range set are bounded above"); + } + } + return new AsSet(domain); + } + + boolean isPartialView() { + return this.ranges.isPartialView(); + } + + public static > Builder builder() { + return new Builder(); + } + + Object writeReplace() { + return new SerializedForm(this.ranges); + } + + private static final class SerializedForm + implements Serializable { + private final ImmutableList> ranges; + + SerializedForm(ImmutableList> ranges) { + this.ranges = ranges; + } + + Object readResolve() { + if (this.ranges.isEmpty()) { + return ImmutableRangeSet.of(); + } + if (this.ranges.equals(ImmutableList.of(Range.all()))) { + return ImmutableRangeSet.all(); + } + return new ImmutableRangeSet(this.ranges); + } + } + + public static class Builder> { + private final RangeSet rangeSet = TreeRangeSet.create(); + + public Builder add(Range range) { + if (range.isEmpty()) { + String string = String.valueOf(String.valueOf(range)); + throw new IllegalArgumentException(new StringBuilder(33 + string.length()).append("range must not be empty, but was ").append(string).toString()); + } + if (!this.rangeSet.complement().encloses(range)) { + for (Range currentRange : this.rangeSet.asRanges()) { + Preconditions.checkArgument(!currentRange.isConnected(range) || currentRange.intersection(range).isEmpty(), "Ranges may not overlap, but received %s and %s", currentRange, range); + } + throw new AssertionError((Object)"should have thrown an IAE above"); + } + this.rangeSet.add(range); + return this; + } + + public Builder addAll(RangeSet ranges) { + for (Range range : ranges.asRanges()) { + this.add(range); + } + return this; + } + + public ImmutableRangeSet build() { + return ImmutableRangeSet.copyOf(this.rangeSet); + } + } + + private static class AsSetSerializedForm + implements Serializable { + private final ImmutableList> ranges; + private final DiscreteDomain domain; + + AsSetSerializedForm(ImmutableList> ranges, DiscreteDomain domain) { + this.ranges = ranges; + this.domain = domain; + } + + Object readResolve() { + return new ImmutableRangeSet(this.ranges).asSet(this.domain); + } + } + + private final class AsSet + extends ImmutableSortedSet { + private final DiscreteDomain domain; + private transient Integer size; + + AsSet(DiscreteDomain domain) { + super(Ordering.natural()); + this.domain = domain; + } + + @Override + public int size() { + Integer result = this.size; + if (result == null) { + Range range; + long total = 0L; + Iterator i$ = ImmutableRangeSet.this.ranges.iterator(); + while (i$.hasNext() && (total += (long)ContiguousSet.create(range = (Range)i$.next(), this.domain).size()) < Integer.MAX_VALUE) { + } + result = this.size = Integer.valueOf(Ints.saturatedCast(total)); + } + return result; + } + + @Override + public UnmodifiableIterator iterator() { + return new AbstractIterator(){ + final Iterator> rangeItr; + Iterator elemItr; + { + this.rangeItr = ImmutableRangeSet.this.ranges.iterator(); + this.elemItr = Iterators.emptyIterator(); + } + + @Override + protected C computeNext() { + while (!this.elemItr.hasNext()) { + if (this.rangeItr.hasNext()) { + this.elemItr = ContiguousSet.create(this.rangeItr.next(), AsSet.this.domain).iterator(); + continue; + } + return (Comparable)this.endOfData(); + } + return (Comparable)this.elemItr.next(); + } + }; + } + + @Override + @GwtIncompatible(value="NavigableSet") + public UnmodifiableIterator descendingIterator() { + return new AbstractIterator(){ + final Iterator> rangeItr; + Iterator elemItr; + { + this.rangeItr = ImmutableRangeSet.this.ranges.reverse().iterator(); + this.elemItr = Iterators.emptyIterator(); + } + + @Override + protected C computeNext() { + while (!this.elemItr.hasNext()) { + if (this.rangeItr.hasNext()) { + this.elemItr = ContiguousSet.create(this.rangeItr.next(), AsSet.this.domain).descendingIterator(); + continue; + } + return (Comparable)this.endOfData(); + } + return (Comparable)this.elemItr.next(); + } + }; + } + + ImmutableSortedSet subSet(Range range) { + return ((ImmutableRangeSet)ImmutableRangeSet.this.subRangeSet(range)).asSet(this.domain); + } + + @Override + ImmutableSortedSet headSetImpl(C toElement, boolean inclusive) { + return this.subSet(Range.upTo(toElement, BoundType.forBoolean(inclusive))); + } + + @Override + ImmutableSortedSet subSetImpl(C fromElement, boolean fromInclusive, C toElement, boolean toInclusive) { + if (!fromInclusive && !toInclusive && Range.compareOrThrow(fromElement, toElement) == 0) { + return ImmutableSortedSet.of(); + } + return this.subSet(Range.range(fromElement, BoundType.forBoolean(fromInclusive), toElement, BoundType.forBoolean(toInclusive))); + } + + @Override + ImmutableSortedSet tailSetImpl(C fromElement, boolean inclusive) { + return this.subSet(Range.downTo(fromElement, BoundType.forBoolean(inclusive))); + } + + @Override + public boolean contains(@Nullable Object o) { + if (o == null) { + return false; + } + try { + Comparable c = (Comparable)o; + return ImmutableRangeSet.this.contains(c); + } + catch (ClassCastException e) { + return false; + } + } + + @Override + int indexOf(Object target) { + if (this.contains(target)) { + Comparable c = (Comparable)target; + long total = 0L; + for (Range range : ImmutableRangeSet.this.ranges) { + if (range.contains(c)) { + return Ints.saturatedCast(total + (long)ContiguousSet.create(range, this.domain).indexOf(c)); + } + total += (long)ContiguousSet.create(range, this.domain).size(); + } + throw new AssertionError((Object)"impossible"); + } + return -1; + } + + @Override + boolean isPartialView() { + return ImmutableRangeSet.this.ranges.isPartialView(); + } + + @Override + public String toString() { + return ImmutableRangeSet.this.ranges.toString(); + } + + @Override + Object writeReplace() { + return new AsSetSerializedForm(ImmutableRangeSet.this.ranges, this.domain); + } + } + + private final class ComplementRanges + extends ImmutableList> { + private final boolean positiveBoundedBelow; + private final boolean positiveBoundedAbove; + private final int size; + + ComplementRanges() { + this.positiveBoundedBelow = ((Range)ImmutableRangeSet.this.ranges.get(0)).hasLowerBound(); + this.positiveBoundedAbove = ((Range)Iterables.getLast(ImmutableRangeSet.this.ranges)).hasUpperBound(); + int size = ImmutableRangeSet.this.ranges.size() - 1; + if (this.positiveBoundedBelow) { + ++size; + } + if (this.positiveBoundedAbove) { + ++size; + } + this.size = size; + } + + @Override + public int size() { + return this.size; + } + + @Override + public Range get(int index) { + Preconditions.checkElementIndex(index, this.size); + Cut lowerBound = this.positiveBoundedBelow ? (index == 0 ? Cut.belowAll() : ((Range)((ImmutableRangeSet)ImmutableRangeSet.this).ranges.get((int)(index - 1))).upperBound) : ((Range)((ImmutableRangeSet)ImmutableRangeSet.this).ranges.get((int)index)).upperBound; + Cut upperBound = this.positiveBoundedAbove && index == this.size - 1 ? Cut.aboveAll() : ((Range)((ImmutableRangeSet)ImmutableRangeSet.this).ranges.get((int)(index + (this.positiveBoundedBelow ? 0 : 1)))).lowerBound; + return Range.create(lowerBound, upperBound); + } + + @Override + boolean isPartialView() { + return true; + } + } +} diff --git a/src/com/google/common/collect/ImmutableSet.java b/src/com/google/common/collect/ImmutableSet.java new file mode 100644 index 0000000..8a2c174 --- /dev/null +++ b/src/com/google/common/collect/ImmutableSet.java @@ -0,0 +1,263 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.GwtCompatible; +import com.google.common.annotations.VisibleForTesting; +import com.google.common.base.Preconditions; +import com.google.common.collect.EmptyImmutableSet; +import com.google.common.collect.Hashing; +import com.google.common.collect.ImmutableCollection; +import com.google.common.collect.ImmutableEnumSet; +import com.google.common.collect.ImmutableSortedSet; +import com.google.common.collect.ObjectArrays; +import com.google.common.collect.RegularImmutableSet; +import com.google.common.collect.Sets; +import com.google.common.collect.SingletonImmutableSet; +import com.google.common.collect.UnmodifiableIterator; +import java.io.Serializable; +import java.util.Arrays; +import java.util.Collection; +import java.util.EnumSet; +import java.util.Iterator; +import java.util.Set; +import javax.annotation.Nullable; + +@GwtCompatible(serializable=true, emulated=true) +public abstract class ImmutableSet +extends ImmutableCollection +implements Set { + static final int MAX_TABLE_SIZE = 0x40000000; + private static final double DESIRED_LOAD_FACTOR = 0.7; + private static final int CUTOFF = 0x2CCCCCCC; + + public static ImmutableSet of() { + return EmptyImmutableSet.INSTANCE; + } + + public static ImmutableSet of(E element) { + return new SingletonImmutableSet(element); + } + + public static ImmutableSet of(E e1, E e2) { + return ImmutableSet.construct(2, e1, e2); + } + + public static ImmutableSet of(E e1, E e2, E e3) { + return ImmutableSet.construct(3, e1, e2, e3); + } + + public static ImmutableSet of(E e1, E e2, E e3, E e4) { + return ImmutableSet.construct(4, e1, e2, e3, e4); + } + + public static ImmutableSet of(E e1, E e2, E e3, E e4, E e5) { + return ImmutableSet.construct(5, e1, e2, e3, e4, e5); + } + + public static ImmutableSet of(E e1, E e2, E e3, E e4, E e5, E e6, E ... others) { + int paramCount = 6; + Object[] elements = new Object[6 + others.length]; + elements[0] = e1; + elements[1] = e2; + elements[2] = e3; + elements[3] = e4; + elements[4] = e5; + elements[5] = e6; + System.arraycopy(others, 0, elements, 6, others.length); + return ImmutableSet.construct(elements.length, elements); + } + + private static ImmutableSet construct(int n, Object ... elements) { + switch (n) { + case 0: { + return ImmutableSet.of(); + } + case 1: { + Object elem = elements[0]; + return ImmutableSet.of(elem); + } + } + int tableSize = ImmutableSet.chooseTableSize(n); + Object[] table = new Object[tableSize]; + int mask = tableSize - 1; + int hashCode = 0; + int uniques = 0; + block4: for (int i = 0; i < n; ++i) { + Object element = ObjectArrays.checkElementNotNull(elements[i], i); + int hash = element.hashCode(); + int j = Hashing.smear(hash); + while (true) { + int index; + Object value; + if ((value = table[index = j & mask]) == null) { + elements[uniques++] = element; + table[index] = element; + hashCode += hash; + continue block4; + } + if (value.equals(element)) continue block4; + ++j; + } + } + Arrays.fill(elements, uniques, n, null); + if (uniques == 1) { + Object element = elements[0]; + return new SingletonImmutableSet(element, hashCode); + } + if (tableSize != ImmutableSet.chooseTableSize(uniques)) { + return ImmutableSet.construct(uniques, elements); + } + Object[] uniqueElements = uniques < elements.length ? ObjectArrays.arraysCopyOf(elements, uniques) : elements; + return new RegularImmutableSet(uniqueElements, hashCode, table, mask); + } + + @VisibleForTesting + static int chooseTableSize(int setSize) { + if (setSize < 0x2CCCCCCC) { + int tableSize = Integer.highestOneBit(setSize - 1) << 1; + while ((double)tableSize * 0.7 < (double)setSize) { + tableSize <<= 1; + } + return tableSize; + } + Preconditions.checkArgument(setSize < 0x40000000, "collection too large"); + return 0x40000000; + } + + public static ImmutableSet copyOf(E[] elements) { + switch (elements.length) { + case 0: { + return ImmutableSet.of(); + } + case 1: { + return ImmutableSet.of(elements[0]); + } + } + return ImmutableSet.construct(elements.length, (Object[])elements.clone()); + } + + public static ImmutableSet copyOf(Iterable elements) { + return elements instanceof Collection ? ImmutableSet.copyOf((Collection)elements) : ImmutableSet.copyOf(elements.iterator()); + } + + public static ImmutableSet copyOf(Iterator elements) { + if (!elements.hasNext()) { + return ImmutableSet.of(); + } + E first = elements.next(); + if (!elements.hasNext()) { + return ImmutableSet.of(first); + } + return ((Builder)((Builder)new Builder().add((Object)first)).addAll(elements)).build(); + } + + public static ImmutableSet copyOf(Collection elements) { + if (elements instanceof ImmutableSet && !(elements instanceof ImmutableSortedSet)) { + ImmutableSet set = (ImmutableSet)elements; + if (!set.isPartialView()) { + return set; + } + } else if (elements instanceof EnumSet) { + return ImmutableSet.copyOfEnumSet((EnumSet)elements); + } + Object[] array = elements.toArray(); + return ImmutableSet.construct(array.length, array); + } + + private static > ImmutableSet copyOfEnumSet(EnumSet enumSet) { + return ImmutableEnumSet.asImmutable(EnumSet.copyOf(enumSet)); + } + + ImmutableSet() { + } + + boolean isHashCodeFast() { + return false; + } + + @Override + public boolean equals(@Nullable Object object) { + if (object == this) { + return true; + } + if (object instanceof ImmutableSet && this.isHashCodeFast() && ((ImmutableSet)object).isHashCodeFast() && this.hashCode() != object.hashCode()) { + return false; + } + return Sets.equalsImpl(this, object); + } + + @Override + public int hashCode() { + return Sets.hashCodeImpl(this); + } + + @Override + public abstract UnmodifiableIterator iterator(); + + @Override + Object writeReplace() { + return new SerializedForm(this.toArray()); + } + + public static Builder builder() { + return new Builder(); + } + + public static class Builder + extends ImmutableCollection.ArrayBasedBuilder { + public Builder() { + this(4); + } + + Builder(int capacity) { + super(capacity); + } + + @Override + public Builder add(E element) { + super.add((Object)element); + return this; + } + + @Override + public Builder add(E ... elements) { + super.add(elements); + return this; + } + + @Override + public Builder addAll(Iterable elements) { + super.addAll(elements); + return this; + } + + @Override + public Builder addAll(Iterator elements) { + super.addAll(elements); + return this; + } + + @Override + public ImmutableSet build() { + ImmutableSet result = ImmutableSet.construct(this.size, this.contents); + this.size = result.size(); + return result; + } + } + + private static class SerializedForm + implements Serializable { + final Object[] elements; + private static final long serialVersionUID = 0L; + + SerializedForm(Object[] elements) { + this.elements = elements; + } + + Object readResolve() { + return ImmutableSet.copyOf(this.elements); + } + } +} diff --git a/src/com/google/common/collect/ImmutableSetMultimap.java b/src/com/google/common/collect/ImmutableSetMultimap.java new file mode 100644 index 0000000..ca98d6e --- /dev/null +++ b/src/com/google/common/collect/ImmutableSetMultimap.java @@ -0,0 +1,340 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.GwtCompatible; +import com.google.common.annotations.GwtIncompatible; +import com.google.common.base.MoreObjects; +import com.google.common.base.Preconditions; +import com.google.common.collect.AbstractMapBasedMultimap; +import com.google.common.collect.EmptyImmutableSetMultimap; +import com.google.common.collect.ImmutableMap; +import com.google.common.collect.ImmutableMultimap; +import com.google.common.collect.ImmutableSet; +import com.google.common.collect.ImmutableSortedSet; +import com.google.common.collect.Lists; +import com.google.common.collect.Multimap; +import com.google.common.collect.Ordering; +import com.google.common.collect.Serialization; +import com.google.common.collect.SetMultimap; +import com.google.common.collect.Sets; +import com.google.common.collect.UnmodifiableIterator; +import java.io.IOException; +import java.io.InvalidObjectException; +import java.io.ObjectInputStream; +import java.io.ObjectOutputStream; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.Collections; +import java.util.Comparator; +import java.util.LinkedHashMap; +import java.util.Map; +import javax.annotation.Nullable; + +@GwtCompatible(serializable=true, emulated=true) +public class ImmutableSetMultimap +extends ImmutableMultimap +implements SetMultimap { + private final transient ImmutableSet emptySet; + private transient ImmutableSetMultimap inverse; + private transient ImmutableSet> entries; + @GwtIncompatible(value="not needed in emulated source.") + private static final long serialVersionUID = 0L; + + public static ImmutableSetMultimap of() { + return EmptyImmutableSetMultimap.INSTANCE; + } + + public static ImmutableSetMultimap of(K k1, V v1) { + Builder builder = ImmutableSetMultimap.builder(); + builder.put((Object)k1, (Object)v1); + return builder.build(); + } + + public static ImmutableSetMultimap of(K k1, V v1, K k2, V v2) { + Builder builder = ImmutableSetMultimap.builder(); + builder.put((Object)k1, (Object)v1); + builder.put((Object)k2, (Object)v2); + return builder.build(); + } + + public static ImmutableSetMultimap of(K k1, V v1, K k2, V v2, K k3, V v3) { + Builder builder = ImmutableSetMultimap.builder(); + builder.put((Object)k1, (Object)v1); + builder.put((Object)k2, (Object)v2); + builder.put((Object)k3, (Object)v3); + return builder.build(); + } + + public static ImmutableSetMultimap of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4) { + Builder builder = ImmutableSetMultimap.builder(); + builder.put((Object)k1, (Object)v1); + builder.put((Object)k2, (Object)v2); + builder.put((Object)k3, (Object)v3); + builder.put((Object)k4, (Object)v4); + return builder.build(); + } + + public static ImmutableSetMultimap of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5) { + Builder builder = ImmutableSetMultimap.builder(); + builder.put((Object)k1, (Object)v1); + builder.put((Object)k2, (Object)v2); + builder.put((Object)k3, (Object)v3); + builder.put((Object)k4, (Object)v4); + builder.put((Object)k5, (Object)v5); + return builder.build(); + } + + public static Builder builder() { + return new Builder(); + } + + public static ImmutableSetMultimap copyOf(Multimap multimap) { + return ImmutableSetMultimap.copyOf(multimap, null); + } + + private static ImmutableSetMultimap copyOf(Multimap multimap, Comparator valueComparator) { + ImmutableSetMultimap kvMultimap; + Preconditions.checkNotNull(multimap); + if (multimap.isEmpty() && valueComparator == null) { + return ImmutableSetMultimap.of(); + } + if (multimap instanceof ImmutableSetMultimap && !(kvMultimap = (ImmutableSetMultimap)multimap).isPartialView()) { + return kvMultimap; + } + ImmutableMap.Builder> builder = ImmutableMap.builder(); + int size = 0; + for (Map.Entry> entry : multimap.asMap().entrySet()) { + K key = entry.getKey(); + Collection values = entry.getValue(); + ImmutableSet set = ImmutableSetMultimap.valueSet(valueComparator, values); + if (set.isEmpty()) continue; + builder.put(key, set); + size += set.size(); + } + return new ImmutableSetMultimap(builder.build(), size, valueComparator); + } + + ImmutableSetMultimap(ImmutableMap> map, int size, @Nullable Comparator valueComparator) { + super(map, size); + this.emptySet = ImmutableSetMultimap.emptySet(valueComparator); + } + + @Override + public ImmutableSet get(@Nullable K key) { + ImmutableSet set = (ImmutableSet)this.map.get(key); + return MoreObjects.firstNonNull(set, this.emptySet); + } + + @Override + public ImmutableSetMultimap inverse() { + ImmutableSetMultimap result = this.inverse; + return result == null ? (this.inverse = this.invert()) : result; + } + + private ImmutableSetMultimap invert() { + Builder builder = ImmutableSetMultimap.builder(); + for (Map.Entry entry : this.entries()) { + builder.put(entry.getValue(), entry.getKey()); + } + ImmutableMultimap invertedMultimap = builder.build(); + ((ImmutableSetMultimap)invertedMultimap).inverse = this; + return invertedMultimap; + } + + @Override + @Deprecated + public ImmutableSet removeAll(Object key) { + throw new UnsupportedOperationException(); + } + + @Override + @Deprecated + public ImmutableSet replaceValues(K key, Iterable values) { + throw new UnsupportedOperationException(); + } + + @Override + public ImmutableSet> entries() { + ImmutableSet> result = this.entries; + return result == null ? (this.entries = new EntrySet(this)) : result; + } + + private static ImmutableSet valueSet(@Nullable Comparator valueComparator, Collection values) { + return valueComparator == null ? ImmutableSet.copyOf(values) : ImmutableSortedSet.copyOf(valueComparator, values); + } + + private static ImmutableSet emptySet(@Nullable Comparator valueComparator) { + return valueComparator == null ? ImmutableSet.of() : ImmutableSortedSet.emptySet(valueComparator); + } + + @GwtIncompatible(value="java.io.ObjectOutputStream") + private void writeObject(ObjectOutputStream stream) throws IOException { + stream.defaultWriteObject(); + stream.writeObject(this.valueComparator()); + Serialization.writeMultimap(this, stream); + } + + @Nullable + Comparator valueComparator() { + return this.emptySet instanceof ImmutableSortedSet ? ((ImmutableSortedSet)this.emptySet).comparator() : null; + } + + @GwtIncompatible(value="java.io.ObjectInputStream") + private void readObject(ObjectInputStream stream) throws IOException, ClassNotFoundException { + ImmutableMap tmpMap; + stream.defaultReadObject(); + Comparator valueComparator = (Comparator)stream.readObject(); + int keyCount = stream.readInt(); + if (keyCount < 0) { + int n = keyCount; + throw new InvalidObjectException(new StringBuilder(29).append("Invalid key count ").append(n).toString()); + } + ImmutableMap.Builder> builder = ImmutableMap.builder(); + int tmpSize = 0; + for (int i = 0; i < keyCount; ++i) { + Object key = stream.readObject(); + int valueCount = stream.readInt(); + if (valueCount <= 0) { + int n = valueCount; + throw new InvalidObjectException(new StringBuilder(31).append("Invalid value count ").append(n).toString()); + } + Object[] array = new Object[valueCount]; + for (int j = 0; j < valueCount; ++j) { + array[j] = stream.readObject(); + } + ImmutableSet valueSet = ImmutableSetMultimap.valueSet(valueComparator, Arrays.asList(array)); + if (valueSet.size() != array.length) { + String string = String.valueOf(String.valueOf(key)); + throw new InvalidObjectException(new StringBuilder(40 + string.length()).append("Duplicate key-value pairs exist for key ").append(string).toString()); + } + builder.put(key, valueSet); + tmpSize += valueCount; + } + try { + tmpMap = builder.build(); + } + catch (IllegalArgumentException e) { + throw (InvalidObjectException)new InvalidObjectException(e.getMessage()).initCause(e); + } + ImmutableMultimap.FieldSettersHolder.MAP_FIELD_SETTER.set((ImmutableMultimap)this, tmpMap); + ImmutableMultimap.FieldSettersHolder.SIZE_FIELD_SETTER.set((ImmutableMultimap)this, tmpSize); + ImmutableMultimap.FieldSettersHolder.EMPTY_SET_FIELD_SETTER.set(this, ImmutableSetMultimap.emptySet(valueComparator)); + } + + private static final class EntrySet + extends ImmutableSet> { + private final transient ImmutableSetMultimap multimap; + + EntrySet(ImmutableSetMultimap multimap) { + this.multimap = multimap; + } + + @Override + public boolean contains(@Nullable Object object) { + if (object instanceof Map.Entry) { + Map.Entry entry = (Map.Entry)object; + return this.multimap.containsEntry(entry.getKey(), entry.getValue()); + } + return false; + } + + @Override + public int size() { + return this.multimap.size(); + } + + @Override + public UnmodifiableIterator> iterator() { + return this.multimap.entryIterator(); + } + + @Override + boolean isPartialView() { + return false; + } + } + + public static final class Builder + extends ImmutableMultimap.Builder { + public Builder() { + this.builderMultimap = new BuilderMultimap(); + } + + @Override + public Builder put(K key, V value) { + this.builderMultimap.put(Preconditions.checkNotNull(key), Preconditions.checkNotNull(value)); + return this; + } + + @Override + public Builder put(Map.Entry entry) { + this.builderMultimap.put(Preconditions.checkNotNull(entry.getKey()), Preconditions.checkNotNull(entry.getValue())); + return this; + } + + @Override + public Builder putAll(K key, Iterable values) { + Collection collection = this.builderMultimap.get(Preconditions.checkNotNull(key)); + for (V value : values) { + collection.add(Preconditions.checkNotNull(value)); + } + return this; + } + + @Override + public Builder putAll(K key, V ... values) { + return this.putAll((Object)key, Arrays.asList(values)); + } + + @Override + public Builder putAll(Multimap multimap) { + for (Map.Entry> entry : multimap.asMap().entrySet()) { + this.putAll((Object)entry.getKey(), entry.getValue()); + } + return this; + } + + @Override + public Builder orderKeysBy(Comparator keyComparator) { + this.keyComparator = Preconditions.checkNotNull(keyComparator); + return this; + } + + @Override + public Builder orderValuesBy(Comparator valueComparator) { + super.orderValuesBy(valueComparator); + return this; + } + + @Override + public ImmutableSetMultimap build() { + if (this.keyComparator != null) { + BuilderMultimap sortedCopy = new BuilderMultimap(); + ArrayList entries = Lists.newArrayList(this.builderMultimap.asMap().entrySet()); + Collections.sort(entries, Ordering.from(this.keyComparator).onKeys()); + for (Map.Entry entry : entries) { + sortedCopy.putAll(entry.getKey(), (Iterable)entry.getValue()); + } + this.builderMultimap = sortedCopy; + } + return ImmutableSetMultimap.copyOf(this.builderMultimap, this.valueComparator); + } + } + + private static class BuilderMultimap + extends AbstractMapBasedMultimap { + private static final long serialVersionUID = 0L; + + BuilderMultimap() { + super(new LinkedHashMap()); + } + + @Override + Collection createCollection() { + return Sets.newLinkedHashSet(); + } + } +} diff --git a/src/com/google/common/collect/ImmutableSortedAsList.java b/src/com/google/common/collect/ImmutableSortedAsList.java new file mode 100644 index 0000000..f426559 --- /dev/null +++ b/src/com/google/common/collect/ImmutableSortedAsList.java @@ -0,0 +1,57 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.GwtCompatible; +import com.google.common.annotations.GwtIncompatible; +import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableSortedSet; +import com.google.common.collect.RegularImmutableAsList; +import com.google.common.collect.RegularImmutableSortedSet; +import com.google.common.collect.SortedIterable; +import java.util.Comparator; +import javax.annotation.Nullable; + +@GwtCompatible(emulated=true) +final class ImmutableSortedAsList +extends RegularImmutableAsList +implements SortedIterable { + ImmutableSortedAsList(ImmutableSortedSet backingSet, ImmutableList backingList) { + super(backingSet, backingList); + } + + @Override + ImmutableSortedSet delegateCollection() { + return (ImmutableSortedSet)super.delegateCollection(); + } + + @Override + public Comparator comparator() { + return ((ImmutableSortedSet)this.delegateCollection()).comparator(); + } + + @Override + @GwtIncompatible(value="ImmutableSortedSet.indexOf") + public int indexOf(@Nullable Object target) { + int index = ((ImmutableSortedSet)this.delegateCollection()).indexOf(target); + return index >= 0 && this.get(index).equals(target) ? index : -1; + } + + @Override + @GwtIncompatible(value="ImmutableSortedSet.indexOf") + public int lastIndexOf(@Nullable Object target) { + return this.indexOf(target); + } + + @Override + public boolean contains(Object target) { + return this.indexOf(target) >= 0; + } + + @Override + @GwtIncompatible(value="super.subListUnchecked does not exist; inherited subList is valid if slow") + ImmutableList subListUnchecked(int fromIndex, int toIndex) { + return new RegularImmutableSortedSet(super.subListUnchecked(fromIndex, toIndex), this.comparator()).asList(); + } +} diff --git a/src/com/google/common/collect/ImmutableSortedMap.java b/src/com/google/common/collect/ImmutableSortedMap.java new file mode 100644 index 0000000..250b3fd --- /dev/null +++ b/src/com/google/common/collect/ImmutableSortedMap.java @@ -0,0 +1,367 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.GwtCompatible; +import com.google.common.base.Preconditions; +import com.google.common.collect.EmptyImmutableSortedMap; +import com.google.common.collect.ImmutableCollection; +import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableMap; +import com.google.common.collect.ImmutableSet; +import com.google.common.collect.ImmutableSortedMapFauxverideShim; +import com.google.common.collect.ImmutableSortedSet; +import com.google.common.collect.Maps; +import com.google.common.collect.Ordering; +import com.google.common.collect.RegularImmutableSortedMap; +import com.google.common.collect.RegularImmutableSortedSet; +import java.util.AbstractCollection; +import java.util.Arrays; +import java.util.Comparator; +import java.util.Map; +import java.util.NavigableMap; +import java.util.SortedMap; +import javax.annotation.Nullable; + +@GwtCompatible(serializable=true, emulated=true) +public abstract class ImmutableSortedMap +extends ImmutableSortedMapFauxverideShim +implements NavigableMap { + private static final Comparator NATURAL_ORDER = Ordering.natural(); + private static final ImmutableSortedMap NATURAL_EMPTY_MAP = new EmptyImmutableSortedMap(NATURAL_ORDER); + private transient ImmutableSortedMap descendingMap; + private static final long serialVersionUID = 0L; + + static ImmutableSortedMap emptyMap(Comparator comparator) { + if (Ordering.natural().equals(comparator)) { + return ImmutableSortedMap.of(); + } + return new EmptyImmutableSortedMap(comparator); + } + + static ImmutableSortedMap fromSortedEntries(Comparator comparator, int size, Map.Entry[] entries) { + if (size == 0) { + return ImmutableSortedMap.emptyMap(comparator); + } + ImmutableList.Builder keyBuilder = ImmutableList.builder(); + ImmutableList.Builder valueBuilder = ImmutableList.builder(); + for (int i = 0; i < size; ++i) { + Map.Entry entry = entries[i]; + keyBuilder.add(entry.getKey()); + valueBuilder.add(entry.getValue()); + } + return new RegularImmutableSortedMap(new RegularImmutableSortedSet(keyBuilder.build(), comparator), valueBuilder.build()); + } + + static ImmutableSortedMap from(ImmutableSortedSet keySet, ImmutableList valueList) { + if (keySet.isEmpty()) { + return ImmutableSortedMap.emptyMap(keySet.comparator()); + } + return new RegularImmutableSortedMap((RegularImmutableSortedSet)keySet, valueList); + } + + public static ImmutableSortedMap of() { + return NATURAL_EMPTY_MAP; + } + + public static , V> ImmutableSortedMap of(K k1, V v1) { + return ImmutableSortedMap.from(ImmutableSortedSet.of(k1), ImmutableList.of(v1)); + } + + public static , V> ImmutableSortedMap of(K k1, V v1, K k2, V v2) { + return ImmutableSortedMap.fromEntries(Ordering.natural(), false, 2, ImmutableSortedMap.entryOf(k1, v1), ImmutableSortedMap.entryOf(k2, v2)); + } + + public static , V> ImmutableSortedMap of(K k1, V v1, K k2, V v2, K k3, V v3) { + return ImmutableSortedMap.fromEntries(Ordering.natural(), false, 3, ImmutableSortedMap.entryOf(k1, v1), ImmutableSortedMap.entryOf(k2, v2), ImmutableSortedMap.entryOf(k3, v3)); + } + + public static , V> ImmutableSortedMap of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4) { + return ImmutableSortedMap.fromEntries(Ordering.natural(), false, 4, ImmutableSortedMap.entryOf(k1, v1), ImmutableSortedMap.entryOf(k2, v2), ImmutableSortedMap.entryOf(k3, v3), ImmutableSortedMap.entryOf(k4, v4)); + } + + public static , V> ImmutableSortedMap of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5) { + return ImmutableSortedMap.fromEntries(Ordering.natural(), false, 5, ImmutableSortedMap.entryOf(k1, v1), ImmutableSortedMap.entryOf(k2, v2), ImmutableSortedMap.entryOf(k3, v3), ImmutableSortedMap.entryOf(k4, v4), ImmutableSortedMap.entryOf(k5, v5)); + } + + public static ImmutableSortedMap copyOf(Map map) { + Ordering naturalOrder = Ordering.natural(); + return ImmutableSortedMap.copyOfInternal(map, naturalOrder); + } + + public static ImmutableSortedMap copyOf(Map map, Comparator comparator) { + return ImmutableSortedMap.copyOfInternal(map, Preconditions.checkNotNull(comparator)); + } + + public static ImmutableSortedMap copyOfSorted(SortedMap map) { + Comparator comparator = map.comparator(); + if (comparator == null) { + comparator = NATURAL_ORDER; + } + return ImmutableSortedMap.copyOfInternal(map, comparator); + } + + private static ImmutableSortedMap copyOfInternal(Map map, Comparator comparator) { + ImmutableSortedMap kvMap; + boolean sameComparator = false; + if (map instanceof SortedMap) { + SortedMap sortedMap = (SortedMap)map; + Comparator comparator2 = sortedMap.comparator(); + boolean bl = comparator2 == null ? comparator == NATURAL_ORDER : (sameComparator = comparator.equals(comparator2)); + } + if (sameComparator && map instanceof ImmutableSortedMap && !(kvMap = (ImmutableSortedMap)map).isPartialView()) { + return kvMap; + } + Map.Entry[] entries = map.entrySet().toArray(new Map.Entry[0]); + return ImmutableSortedMap.fromEntries(comparator, sameComparator, entries.length, entries); + } + + static ImmutableSortedMap fromEntries(Comparator comparator, boolean sameComparator, int size, Map.Entry ... entries) { + for (int i = 0; i < size; ++i) { + Map.Entry entry = entries[i]; + entries[i] = ImmutableSortedMap.entryOf(entry.getKey(), entry.getValue()); + } + if (!sameComparator) { + ImmutableSortedMap.sortEntries(comparator, size, entries); + ImmutableSortedMap.validateEntries(size, entries, comparator); + } + return ImmutableSortedMap.fromSortedEntries(comparator, size, entries); + } + + private static void sortEntries(Comparator comparator, int size, Map.Entry[] entries) { + Arrays.sort(entries, 0, size, Ordering.from(comparator).onKeys()); + } + + private static void validateEntries(int size, Map.Entry[] entries, Comparator comparator) { + for (int i = 1; i < size; ++i) { + ImmutableSortedMap.checkNoConflict(comparator.compare(entries[i - 1].getKey(), entries[i].getKey()) != 0, "key", entries[i - 1], entries[i]); + } + } + + public static , V> Builder naturalOrder() { + return new Builder(Ordering.natural()); + } + + public static Builder orderedBy(Comparator comparator) { + return new Builder(comparator); + } + + public static , V> Builder reverseOrder() { + return new Builder(Ordering.natural().reverse()); + } + + ImmutableSortedMap() { + } + + ImmutableSortedMap(ImmutableSortedMap descendingMap) { + this.descendingMap = descendingMap; + } + + @Override + public int size() { + return ((AbstractCollection)this.values()).size(); + } + + @Override + public boolean containsValue(@Nullable Object value) { + return ((ImmutableCollection)this.values()).contains(value); + } + + @Override + boolean isPartialView() { + return this.keySet().isPartialView() || ((ImmutableCollection)this.values()).isPartialView(); + } + + @Override + public ImmutableSet> entrySet() { + return super.entrySet(); + } + + @Override + public abstract ImmutableSortedSet keySet(); + + @Override + public abstract ImmutableCollection values(); + + @Override + public Comparator comparator() { + return ((ImmutableSortedSet)this.keySet()).comparator(); + } + + @Override + public K firstKey() { + return (K)((ImmutableSortedSet)this.keySet()).first(); + } + + @Override + public K lastKey() { + return (K)((ImmutableSortedSet)this.keySet()).last(); + } + + @Override + public ImmutableSortedMap headMap(K toKey) { + return this.headMap((Object)toKey, false); + } + + @Override + public abstract ImmutableSortedMap headMap(K var1, boolean var2); + + @Override + public ImmutableSortedMap subMap(K fromKey, K toKey) { + return this.subMap((Object)fromKey, true, (Object)toKey, false); + } + + @Override + public ImmutableSortedMap subMap(K fromKey, boolean fromInclusive, K toKey, boolean toInclusive) { + Preconditions.checkNotNull(fromKey); + Preconditions.checkNotNull(toKey); + Preconditions.checkArgument(this.comparator().compare(fromKey, toKey) <= 0, "expected fromKey <= toKey but %s > %s", fromKey, toKey); + return ((ImmutableSortedMap)this.headMap((Object)toKey, toInclusive)).tailMap((Object)fromKey, fromInclusive); + } + + @Override + public ImmutableSortedMap tailMap(K fromKey) { + return this.tailMap((Object)fromKey, true); + } + + @Override + public abstract ImmutableSortedMap tailMap(K var1, boolean var2); + + @Override + public Map.Entry lowerEntry(K key) { + return ((ImmutableSortedMap)this.headMap((Object)key, false)).lastEntry(); + } + + @Override + public K lowerKey(K key) { + return Maps.keyOrNull(this.lowerEntry(key)); + } + + @Override + public Map.Entry floorEntry(K key) { + return ((ImmutableSortedMap)this.headMap((Object)key, true)).lastEntry(); + } + + @Override + public K floorKey(K key) { + return Maps.keyOrNull(this.floorEntry(key)); + } + + @Override + public Map.Entry ceilingEntry(K key) { + return ((ImmutableSortedMap)this.tailMap((Object)key, true)).firstEntry(); + } + + @Override + public K ceilingKey(K key) { + return Maps.keyOrNull(this.ceilingEntry(key)); + } + + @Override + public Map.Entry higherEntry(K key) { + return ((ImmutableSortedMap)this.tailMap((Object)key, false)).firstEntry(); + } + + @Override + public K higherKey(K key) { + return Maps.keyOrNull(this.higherEntry(key)); + } + + @Override + public Map.Entry firstEntry() { + return this.isEmpty() ? null : (Map.Entry)((ImmutableCollection)((Object)this.entrySet())).asList().get(0); + } + + @Override + public Map.Entry lastEntry() { + return this.isEmpty() ? null : (Map.Entry)((ImmutableCollection)((Object)this.entrySet())).asList().get(this.size() - 1); + } + + @Override + @Deprecated + public final Map.Entry pollFirstEntry() { + throw new UnsupportedOperationException(); + } + + @Override + @Deprecated + public final Map.Entry pollLastEntry() { + throw new UnsupportedOperationException(); + } + + @Override + public ImmutableSortedMap descendingMap() { + ImmutableSortedMap result = this.descendingMap; + if (result == null) { + result = this.descendingMap = this.createDescendingMap(); + } + return result; + } + + abstract ImmutableSortedMap createDescendingMap(); + + @Override + public ImmutableSortedSet navigableKeySet() { + return this.keySet(); + } + + @Override + public ImmutableSortedSet descendingKeySet() { + return ((ImmutableSortedSet)this.keySet()).descendingSet(); + } + + @Override + Object writeReplace() { + return new SerializedForm(this); + } + + private static class SerializedForm + extends ImmutableMap.SerializedForm { + private final Comparator comparator; + private static final long serialVersionUID = 0L; + + SerializedForm(ImmutableSortedMap sortedMap) { + super(sortedMap); + this.comparator = sortedMap.comparator(); + } + + @Override + Object readResolve() { + Builder builder = new Builder(this.comparator); + return this.createMap(builder); + } + } + + public static class Builder + extends ImmutableMap.Builder { + private final Comparator comparator; + + public Builder(Comparator comparator) { + this.comparator = Preconditions.checkNotNull(comparator); + } + + @Override + public Builder put(K key, V value) { + super.put(key, value); + return this; + } + + @Override + public Builder put(Map.Entry entry) { + super.put(entry); + return this; + } + + @Override + public Builder putAll(Map map) { + super.putAll(map); + return this; + } + + @Override + public ImmutableSortedMap build() { + return ImmutableSortedMap.fromEntries(this.comparator, false, this.size, this.entries); + } + } +} diff --git a/src/com/google/common/collect/ImmutableSortedMapFauxverideShim.java b/src/com/google/common/collect/ImmutableSortedMapFauxverideShim.java new file mode 100644 index 0000000..ae8a712 --- /dev/null +++ b/src/com/google/common/collect/ImmutableSortedMapFauxverideShim.java @@ -0,0 +1,43 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.collect.ImmutableMap; +import com.google.common.collect.ImmutableSortedMap; + +abstract class ImmutableSortedMapFauxverideShim +extends ImmutableMap { + ImmutableSortedMapFauxverideShim() { + } + + @Deprecated + public static ImmutableSortedMap.Builder builder() { + throw new UnsupportedOperationException(); + } + + @Deprecated + public static ImmutableSortedMap of(K k1, V v1) { + throw new UnsupportedOperationException(); + } + + @Deprecated + public static ImmutableSortedMap of(K k1, V v1, K k2, V v2) { + throw new UnsupportedOperationException(); + } + + @Deprecated + public static ImmutableSortedMap of(K k1, V v1, K k2, V v2, K k3, V v3) { + throw new UnsupportedOperationException(); + } + + @Deprecated + public static ImmutableSortedMap of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4) { + throw new UnsupportedOperationException(); + } + + @Deprecated + public static ImmutableSortedMap of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5) { + throw new UnsupportedOperationException(); + } +} diff --git a/src/com/google/common/collect/ImmutableSortedMultiset.java b/src/com/google/common/collect/ImmutableSortedMultiset.java new file mode 100644 index 0000000..fc2b542 --- /dev/null +++ b/src/com/google/common/collect/ImmutableSortedMultiset.java @@ -0,0 +1,276 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.Beta; +import com.google.common.annotations.GwtIncompatible; +import com.google.common.base.Preconditions; +import com.google.common.collect.BoundType; +import com.google.common.collect.DescendingImmutableSortedMultiset; +import com.google.common.collect.EmptyImmutableSortedMultiset; +import com.google.common.collect.ImmutableCollection; +import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableMultiset; +import com.google.common.collect.ImmutableSortedMultisetFauxverideShim; +import com.google.common.collect.ImmutableSortedSet; +import com.google.common.collect.Iterables; +import com.google.common.collect.Lists; +import com.google.common.collect.Multiset; +import com.google.common.collect.Ordering; +import com.google.common.collect.RegularImmutableSortedMultiset; +import com.google.common.collect.RegularImmutableSortedSet; +import com.google.common.collect.SortedMultiset; +import com.google.common.collect.TreeMultiset; +import java.io.Serializable; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.Collections; +import java.util.Comparator; +import java.util.Iterator; + +@Beta +@GwtIncompatible(value="hasn't been tested yet") +public abstract class ImmutableSortedMultiset +extends ImmutableSortedMultisetFauxverideShim +implements SortedMultiset { + private static final Comparator NATURAL_ORDER = Ordering.natural(); + private static final ImmutableSortedMultiset NATURAL_EMPTY_MULTISET = new EmptyImmutableSortedMultiset(NATURAL_ORDER); + transient ImmutableSortedMultiset descendingMultiset; + + public static ImmutableSortedMultiset of() { + return NATURAL_EMPTY_MULTISET; + } + + public static > ImmutableSortedMultiset of(E element) { + RegularImmutableSortedSet elementSet = (RegularImmutableSortedSet)ImmutableSortedSet.of(element); + int[] counts = new int[]{1}; + long[] cumulativeCounts = new long[]{0L, 1L}; + return new RegularImmutableSortedMultiset(elementSet, counts, cumulativeCounts, 0, 1); + } + + public static > ImmutableSortedMultiset of(E e1, E e2) { + return ImmutableSortedMultiset.copyOf(Ordering.natural(), Arrays.asList(e1, e2)); + } + + public static > ImmutableSortedMultiset of(E e1, E e2, E e3) { + return ImmutableSortedMultiset.copyOf(Ordering.natural(), Arrays.asList(e1, e2, e3)); + } + + public static > ImmutableSortedMultiset of(E e1, E e2, E e3, E e4) { + return ImmutableSortedMultiset.copyOf(Ordering.natural(), Arrays.asList(e1, e2, e3, e4)); + } + + public static > ImmutableSortedMultiset of(E e1, E e2, E e3, E e4, E e5) { + return ImmutableSortedMultiset.copyOf(Ordering.natural(), Arrays.asList(e1, e2, e3, e4, e5)); + } + + public static > ImmutableSortedMultiset of(E e1, E e2, E e3, E e4, E e5, E e6, E ... remaining) { + int size = remaining.length + 6; + ArrayList all = Lists.newArrayListWithCapacity(size); + Collections.addAll(all, e1, e2, e3, e4, e5, e6); + Collections.addAll(all, remaining); + return ImmutableSortedMultiset.copyOf(Ordering.natural(), all); + } + + public static > ImmutableSortedMultiset copyOf(E[] elements) { + return ImmutableSortedMultiset.copyOf(Ordering.natural(), Arrays.asList(elements)); + } + + public static ImmutableSortedMultiset copyOf(Iterable elements) { + Ordering naturalOrder = Ordering.natural(); + return ImmutableSortedMultiset.copyOf(naturalOrder, elements); + } + + public static ImmutableSortedMultiset copyOf(Iterator elements) { + Ordering naturalOrder = Ordering.natural(); + return ImmutableSortedMultiset.copyOf(naturalOrder, elements); + } + + public static ImmutableSortedMultiset copyOf(Comparator comparator, Iterator elements) { + Preconditions.checkNotNull(comparator); + return ((Builder)new Builder(comparator).addAll((Iterator)elements)).build(); + } + + public static ImmutableSortedMultiset copyOf(Comparator comparator, Iterable elements) { + ImmutableSortedMultiset multiset; + if (elements instanceof ImmutableSortedMultiset && comparator.equals((multiset = (ImmutableSortedMultiset)elements).comparator())) { + if (multiset.isPartialView()) { + return ImmutableSortedMultiset.copyOfSortedEntries(comparator, ((ImmutableCollection)((Object)multiset.entrySet())).asList()); + } + return multiset; + } + elements = Lists.newArrayList(elements); + TreeMultiset sortedCopy = TreeMultiset.create(Preconditions.checkNotNull(comparator)); + Iterables.addAll(sortedCopy, elements); + return ImmutableSortedMultiset.copyOfSortedEntries(comparator, sortedCopy.entrySet()); + } + + public static ImmutableSortedMultiset copyOfSorted(SortedMultiset sortedMultiset) { + return ImmutableSortedMultiset.copyOfSortedEntries(sortedMultiset.comparator(), Lists.newArrayList(sortedMultiset.entrySet())); + } + + private static ImmutableSortedMultiset copyOfSortedEntries(Comparator comparator, Collection> entries) { + if (entries.isEmpty()) { + return ImmutableSortedMultiset.emptyMultiset(comparator); + } + ImmutableList.Builder elementsBuilder = new ImmutableList.Builder(entries.size()); + int[] counts = new int[entries.size()]; + long[] cumulativeCounts = new long[entries.size() + 1]; + int i = 0; + for (Multiset.Entry entry : entries) { + elementsBuilder.add((Object)entry.getElement()); + counts[i] = entry.getCount(); + cumulativeCounts[i + 1] = cumulativeCounts[i] + (long)counts[i]; + ++i; + } + return new RegularImmutableSortedMultiset(new RegularImmutableSortedSet(elementsBuilder.build(), comparator), counts, cumulativeCounts, 0, entries.size()); + } + + static ImmutableSortedMultiset emptyMultiset(Comparator comparator) { + if (NATURAL_ORDER.equals(comparator)) { + return NATURAL_EMPTY_MULTISET; + } + return new EmptyImmutableSortedMultiset(comparator); + } + + ImmutableSortedMultiset() { + } + + @Override + public final Comparator comparator() { + return ((ImmutableSortedSet)this.elementSet()).comparator(); + } + + @Override + public abstract ImmutableSortedSet elementSet(); + + @Override + public ImmutableSortedMultiset descendingMultiset() { + ImmutableSortedMultiset result = this.descendingMultiset; + if (result == null) { + this.descendingMultiset = new DescendingImmutableSortedMultiset(this); + return this.descendingMultiset; + } + return result; + } + + @Override + @Deprecated + public final Multiset.Entry pollFirstEntry() { + throw new UnsupportedOperationException(); + } + + @Override + @Deprecated + public final Multiset.Entry pollLastEntry() { + throw new UnsupportedOperationException(); + } + + @Override + public abstract ImmutableSortedMultiset headMultiset(E var1, BoundType var2); + + @Override + public ImmutableSortedMultiset subMultiset(E lowerBound, BoundType lowerBoundType, E upperBound, BoundType upperBoundType) { + Preconditions.checkArgument(this.comparator().compare(lowerBound, upperBound) <= 0, "Expected lowerBound <= upperBound but %s > %s", lowerBound, upperBound); + return ((ImmutableSortedMultiset)this.tailMultiset((Object)lowerBound, lowerBoundType)).headMultiset((Object)upperBound, upperBoundType); + } + + @Override + public abstract ImmutableSortedMultiset tailMultiset(E var1, BoundType var2); + + public static Builder orderedBy(Comparator comparator) { + return new Builder(comparator); + } + + public static > Builder reverseOrder() { + return new Builder(Ordering.natural().reverse()); + } + + public static > Builder naturalOrder() { + return new Builder(Ordering.natural()); + } + + @Override + Object writeReplace() { + return new SerializedForm(this); + } + + private static final class SerializedForm + implements Serializable { + Comparator comparator; + E[] elements; + int[] counts; + + SerializedForm(SortedMultiset multiset) { + this.comparator = multiset.comparator(); + int n = multiset.entrySet().size(); + this.elements = new Object[n]; + this.counts = new int[n]; + int i = 0; + for (Multiset.Entry entry : multiset.entrySet()) { + this.elements[i] = entry.getElement(); + this.counts[i] = entry.getCount(); + ++i; + } + } + + Object readResolve() { + int n = this.elements.length; + Builder builder = new Builder(this.comparator); + for (int i = 0; i < n; ++i) { + builder.addCopies((Object)this.elements[i], this.counts[i]); + } + return builder.build(); + } + } + + public static class Builder + extends ImmutableMultiset.Builder { + public Builder(Comparator comparator) { + super(TreeMultiset.create(Preconditions.checkNotNull(comparator))); + } + + @Override + public Builder add(E element) { + super.add((Object)element); + return this; + } + + @Override + public Builder addCopies(E element, int occurrences) { + super.addCopies(element, occurrences); + return this; + } + + @Override + public Builder setCount(E element, int count) { + super.setCount(element, count); + return this; + } + + @Override + public Builder add(E ... elements) { + super.add((Object[])elements); + return this; + } + + @Override + public Builder addAll(Iterable elements) { + super.addAll((Iterable)elements); + return this; + } + + @Override + public Builder addAll(Iterator elements) { + super.addAll((Iterator)elements); + return this; + } + + @Override + public ImmutableSortedMultiset build() { + return ImmutableSortedMultiset.copyOfSorted((SortedMultiset)this.contents); + } + } +} diff --git a/src/com/google/common/collect/ImmutableSortedMultisetFauxverideShim.java b/src/com/google/common/collect/ImmutableSortedMultisetFauxverideShim.java new file mode 100644 index 0000000..5c52e80 --- /dev/null +++ b/src/com/google/common/collect/ImmutableSortedMultisetFauxverideShim.java @@ -0,0 +1,53 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.collect.ImmutableMultiset; +import com.google.common.collect.ImmutableSortedMultiset; + +abstract class ImmutableSortedMultisetFauxverideShim +extends ImmutableMultiset { + ImmutableSortedMultisetFauxverideShim() { + } + + @Deprecated + public static ImmutableSortedMultiset.Builder builder() { + throw new UnsupportedOperationException(); + } + + @Deprecated + public static ImmutableSortedMultiset of(E element) { + throw new UnsupportedOperationException(); + } + + @Deprecated + public static ImmutableSortedMultiset of(E e1, E e2) { + throw new UnsupportedOperationException(); + } + + @Deprecated + public static ImmutableSortedMultiset of(E e1, E e2, E e3) { + throw new UnsupportedOperationException(); + } + + @Deprecated + public static ImmutableSortedMultiset of(E e1, E e2, E e3, E e4) { + throw new UnsupportedOperationException(); + } + + @Deprecated + public static ImmutableSortedMultiset of(E e1, E e2, E e3, E e4, E e5) { + throw new UnsupportedOperationException(); + } + + @Deprecated + public static ImmutableSortedMultiset of(E e1, E e2, E e3, E e4, E e5, E e6, E ... remaining) { + throw new UnsupportedOperationException(); + } + + @Deprecated + public static ImmutableSortedMultiset copyOf(E[] elements) { + throw new UnsupportedOperationException(); + } +} diff --git a/src/com/google/common/collect/ImmutableSortedSet.java b/src/com/google/common/collect/ImmutableSortedSet.java new file mode 100644 index 0000000..02a7986 --- /dev/null +++ b/src/com/google/common/collect/ImmutableSortedSet.java @@ -0,0 +1,365 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.GwtCompatible; +import com.google.common.annotations.GwtIncompatible; +import com.google.common.base.Preconditions; +import com.google.common.collect.DescendingImmutableSortedSet; +import com.google.common.collect.EmptyImmutableSortedSet; +import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableSet; +import com.google.common.collect.ImmutableSortedSetFauxverideShim; +import com.google.common.collect.Iterables; +import com.google.common.collect.Iterators; +import com.google.common.collect.ObjectArrays; +import com.google.common.collect.Ordering; +import com.google.common.collect.RegularImmutableSortedSet; +import com.google.common.collect.SortedIterable; +import com.google.common.collect.SortedIterables; +import com.google.common.collect.UnmodifiableIterator; +import java.io.InvalidObjectException; +import java.io.ObjectInputStream; +import java.io.Serializable; +import java.util.Arrays; +import java.util.Collection; +import java.util.Comparator; +import java.util.Iterator; +import java.util.NavigableSet; +import java.util.SortedSet; +import javax.annotation.Nullable; + +@GwtCompatible(serializable=true, emulated=true) +public abstract class ImmutableSortedSet +extends ImmutableSortedSetFauxverideShim +implements NavigableSet, +SortedIterable { + private static final Comparator NATURAL_ORDER = Ordering.natural(); + private static final ImmutableSortedSet NATURAL_EMPTY_SET = new EmptyImmutableSortedSet(NATURAL_ORDER); + final transient Comparator comparator; + @GwtIncompatible(value="NavigableSet") + transient ImmutableSortedSet descendingSet; + + private static ImmutableSortedSet emptySet() { + return NATURAL_EMPTY_SET; + } + + static ImmutableSortedSet emptySet(Comparator comparator) { + if (NATURAL_ORDER.equals(comparator)) { + return ImmutableSortedSet.emptySet(); + } + return new EmptyImmutableSortedSet(comparator); + } + + public static ImmutableSortedSet of() { + return ImmutableSortedSet.emptySet(); + } + + public static > ImmutableSortedSet of(E element) { + return new RegularImmutableSortedSet(ImmutableList.of(element), Ordering.natural()); + } + + public static > ImmutableSortedSet of(E e1, E e2) { + return ImmutableSortedSet.construct(Ordering.natural(), 2, e1, e2); + } + + public static > ImmutableSortedSet of(E e1, E e2, E e3) { + return ImmutableSortedSet.construct(Ordering.natural(), 3, e1, e2, e3); + } + + public static > ImmutableSortedSet of(E e1, E e2, E e3, E e4) { + return ImmutableSortedSet.construct(Ordering.natural(), 4, e1, e2, e3, e4); + } + + public static > ImmutableSortedSet of(E e1, E e2, E e3, E e4, E e5) { + return ImmutableSortedSet.construct(Ordering.natural(), 5, e1, e2, e3, e4, e5); + } + + public static > ImmutableSortedSet of(E e1, E e2, E e3, E e4, E e5, E e6, E ... remaining) { + Comparable[] contents = new Comparable[6 + remaining.length]; + contents[0] = e1; + contents[1] = e2; + contents[2] = e3; + contents[3] = e4; + contents[4] = e5; + contents[5] = e6; + System.arraycopy(remaining, 0, contents, 6, remaining.length); + return ImmutableSortedSet.construct(Ordering.natural(), contents.length, contents); + } + + public static > ImmutableSortedSet copyOf(E[] elements) { + return ImmutableSortedSet.construct(Ordering.natural(), elements.length, (Object[])elements.clone()); + } + + public static ImmutableSortedSet copyOf(Iterable elements) { + Ordering naturalOrder = Ordering.natural(); + return ImmutableSortedSet.copyOf(naturalOrder, elements); + } + + public static ImmutableSortedSet copyOf(Collection elements) { + Ordering naturalOrder = Ordering.natural(); + return ImmutableSortedSet.copyOf(naturalOrder, elements); + } + + public static ImmutableSortedSet copyOf(Iterator elements) { + Ordering naturalOrder = Ordering.natural(); + return ImmutableSortedSet.copyOf(naturalOrder, elements); + } + + public static ImmutableSortedSet copyOf(Comparator comparator, Iterator elements) { + return ((Builder)new Builder(comparator).addAll((Iterator)elements)).build(); + } + + public static ImmutableSortedSet copyOf(Comparator comparator, Iterable elements) { + ImmutableSortedSet original; + Preconditions.checkNotNull(comparator); + boolean hasSameComparator = SortedIterables.hasSameComparator(comparator, elements); + if (hasSameComparator && elements instanceof ImmutableSortedSet && !(original = (ImmutableSortedSet)elements).isPartialView()) { + return original; + } + Object[] array = Iterables.toArray(elements); + return ImmutableSortedSet.construct(comparator, array.length, array); + } + + public static ImmutableSortedSet copyOf(Comparator comparator, Collection elements) { + return ImmutableSortedSet.copyOf(comparator, elements); + } + + public static ImmutableSortedSet copyOfSorted(SortedSet sortedSet) { + Comparator comparator = SortedIterables.comparator(sortedSet); + ImmutableList list = ImmutableList.copyOf(sortedSet); + if (list.isEmpty()) { + return ImmutableSortedSet.emptySet(comparator); + } + return new RegularImmutableSortedSet(list, comparator); + } + + static ImmutableSortedSet construct(Comparator comparator, int n, E ... contents) { + if (n == 0) { + return ImmutableSortedSet.emptySet(comparator); + } + ObjectArrays.checkElementsNotNull((Object[])contents, n); + Arrays.sort(contents, 0, n, comparator); + int uniques = 1; + for (int i = 1; i < n; ++i) { + E cur = contents[i]; + E prev = contents[uniques - 1]; + if (comparator.compare(cur, prev) == 0) continue; + contents[uniques++] = cur; + } + Arrays.fill(contents, uniques, n, null); + return new RegularImmutableSortedSet(ImmutableList.asImmutableList(contents, uniques), comparator); + } + + public static Builder orderedBy(Comparator comparator) { + return new Builder(comparator); + } + + public static > Builder reverseOrder() { + return new Builder(Ordering.natural().reverse()); + } + + public static > Builder naturalOrder() { + return new Builder(Ordering.natural()); + } + + int unsafeCompare(Object a, Object b) { + return ImmutableSortedSet.unsafeCompare(this.comparator, a, b); + } + + static int unsafeCompare(Comparator comparator, Object a, Object b) { + Comparator unsafeComparator = comparator; + return unsafeComparator.compare(a, b); + } + + ImmutableSortedSet(Comparator comparator) { + this.comparator = comparator; + } + + @Override + public Comparator comparator() { + return this.comparator; + } + + @Override + public abstract UnmodifiableIterator iterator(); + + @Override + public ImmutableSortedSet headSet(E toElement) { + return this.headSet((Object)toElement, false); + } + + @Override + @GwtIncompatible(value="NavigableSet") + public ImmutableSortedSet headSet(E toElement, boolean inclusive) { + return this.headSetImpl(Preconditions.checkNotNull(toElement), inclusive); + } + + @Override + public ImmutableSortedSet subSet(E fromElement, E toElement) { + return this.subSet((Object)fromElement, true, (Object)toElement, false); + } + + @Override + @GwtIncompatible(value="NavigableSet") + public ImmutableSortedSet subSet(E fromElement, boolean fromInclusive, E toElement, boolean toInclusive) { + Preconditions.checkNotNull(fromElement); + Preconditions.checkNotNull(toElement); + Preconditions.checkArgument(this.comparator.compare(fromElement, toElement) <= 0); + return this.subSetImpl(fromElement, fromInclusive, toElement, toInclusive); + } + + @Override + public ImmutableSortedSet tailSet(E fromElement) { + return this.tailSet((Object)fromElement, true); + } + + @Override + @GwtIncompatible(value="NavigableSet") + public ImmutableSortedSet tailSet(E fromElement, boolean inclusive) { + return this.tailSetImpl(Preconditions.checkNotNull(fromElement), inclusive); + } + + abstract ImmutableSortedSet headSetImpl(E var1, boolean var2); + + abstract ImmutableSortedSet subSetImpl(E var1, boolean var2, E var3, boolean var4); + + abstract ImmutableSortedSet tailSetImpl(E var1, boolean var2); + + @Override + @GwtIncompatible(value="NavigableSet") + public E lower(E e) { + return Iterators.getNext(((ImmutableSortedSet)this.headSet((Object)e, false)).descendingIterator(), null); + } + + @Override + @GwtIncompatible(value="NavigableSet") + public E floor(E e) { + return Iterators.getNext(((ImmutableSortedSet)this.headSet((Object)e, true)).descendingIterator(), null); + } + + @Override + @GwtIncompatible(value="NavigableSet") + public E ceiling(E e) { + return Iterables.getFirst(this.tailSet((Object)e, true), null); + } + + @Override + @GwtIncompatible(value="NavigableSet") + public E higher(E e) { + return Iterables.getFirst(this.tailSet((Object)e, false), null); + } + + @Override + public E first() { + return this.iterator().next(); + } + + @Override + public E last() { + return this.descendingIterator().next(); + } + + @Override + @Deprecated + @GwtIncompatible(value="NavigableSet") + public final E pollFirst() { + throw new UnsupportedOperationException(); + } + + @Override + @Deprecated + @GwtIncompatible(value="NavigableSet") + public final E pollLast() { + throw new UnsupportedOperationException(); + } + + @Override + @GwtIncompatible(value="NavigableSet") + public ImmutableSortedSet descendingSet() { + ImmutableSortedSet result = this.descendingSet; + if (result == null) { + result = this.descendingSet = this.createDescendingSet(); + result.descendingSet = this; + } + return result; + } + + @GwtIncompatible(value="NavigableSet") + ImmutableSortedSet createDescendingSet() { + return new DescendingImmutableSortedSet(this); + } + + @Override + @GwtIncompatible(value="NavigableSet") + public abstract UnmodifiableIterator descendingIterator(); + + abstract int indexOf(@Nullable Object var1); + + private void readObject(ObjectInputStream stream) throws InvalidObjectException { + throw new InvalidObjectException("Use SerializedForm"); + } + + @Override + Object writeReplace() { + return new SerializedForm(this.comparator, this.toArray()); + } + + private static class SerializedForm + implements Serializable { + final Comparator comparator; + final Object[] elements; + private static final long serialVersionUID = 0L; + + public SerializedForm(Comparator comparator, Object[] elements) { + this.comparator = comparator; + this.elements = elements; + } + + Object readResolve() { + return ((Builder)new Builder(this.comparator).add(this.elements)).build(); + } + } + + public static final class Builder + extends ImmutableSet.Builder { + private final Comparator comparator; + + public Builder(Comparator comparator) { + this.comparator = Preconditions.checkNotNull(comparator); + } + + @Override + public Builder add(E element) { + super.add((Object)element); + return this; + } + + @Override + public Builder add(E ... elements) { + super.add((Object[])elements); + return this; + } + + @Override + public Builder addAll(Iterable elements) { + super.addAll((Iterable)elements); + return this; + } + + @Override + public Builder addAll(Iterator elements) { + super.addAll((Iterator)elements); + return this; + } + + @Override + public ImmutableSortedSet build() { + Object[] contentsArray = this.contents; + ImmutableSortedSet result = ImmutableSortedSet.construct(this.comparator, this.size, contentsArray); + this.size = result.size(); + return result; + } + } +} diff --git a/src/com/google/common/collect/ImmutableSortedSetFauxverideShim.java b/src/com/google/common/collect/ImmutableSortedSetFauxverideShim.java new file mode 100644 index 0000000..1b83c78 --- /dev/null +++ b/src/com/google/common/collect/ImmutableSortedSetFauxverideShim.java @@ -0,0 +1,53 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.collect.ImmutableSet; +import com.google.common.collect.ImmutableSortedSet; + +abstract class ImmutableSortedSetFauxverideShim +extends ImmutableSet { + ImmutableSortedSetFauxverideShim() { + } + + @Deprecated + public static ImmutableSortedSet.Builder builder() { + throw new UnsupportedOperationException(); + } + + @Deprecated + public static ImmutableSortedSet of(E element) { + throw new UnsupportedOperationException(); + } + + @Deprecated + public static ImmutableSortedSet of(E e1, E e2) { + throw new UnsupportedOperationException(); + } + + @Deprecated + public static ImmutableSortedSet of(E e1, E e2, E e3) { + throw new UnsupportedOperationException(); + } + + @Deprecated + public static ImmutableSortedSet of(E e1, E e2, E e3, E e4) { + throw new UnsupportedOperationException(); + } + + @Deprecated + public static ImmutableSortedSet of(E e1, E e2, E e3, E e4, E e5) { + throw new UnsupportedOperationException(); + } + + @Deprecated + public static ImmutableSortedSet of(E e1, E e2, E e3, E e4, E e5, E e6, E ... remaining) { + throw new UnsupportedOperationException(); + } + + @Deprecated + public static ImmutableSortedSet copyOf(E[] elements) { + throw new UnsupportedOperationException(); + } +} diff --git a/src/com/google/common/collect/ImmutableTable.java b/src/com/google/common/collect/ImmutableTable.java new file mode 100644 index 0000000..f1e4e10 --- /dev/null +++ b/src/com/google/common/collect/ImmutableTable.java @@ -0,0 +1,215 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.GwtCompatible; +import com.google.common.base.MoreObjects; +import com.google.common.base.Preconditions; +import com.google.common.collect.AbstractTable; +import com.google.common.collect.ImmutableCollection; +import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableMap; +import com.google.common.collect.ImmutableSet; +import com.google.common.collect.Iterables; +import com.google.common.collect.Lists; +import com.google.common.collect.RegularImmutableTable; +import com.google.common.collect.SingletonImmutableTable; +import com.google.common.collect.SparseImmutableTable; +import com.google.common.collect.Table; +import com.google.common.collect.Tables; +import com.google.common.collect.UnmodifiableIterator; +import java.util.Comparator; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import javax.annotation.Nullable; + +@GwtCompatible +public abstract class ImmutableTable +extends AbstractTable { + private static final ImmutableTable EMPTY = new SparseImmutableTable(ImmutableList.of(), ImmutableSet.of(), ImmutableSet.of()); + + public static ImmutableTable of() { + return EMPTY; + } + + public static ImmutableTable of(R rowKey, C columnKey, V value) { + return new SingletonImmutableTable(rowKey, columnKey, value); + } + + public static ImmutableTable copyOf(Table table) { + if (table instanceof ImmutableTable) { + ImmutableTable parameterizedTable = (ImmutableTable)table; + return parameterizedTable; + } + int size = table.size(); + switch (size) { + case 0: { + return ImmutableTable.of(); + } + case 1: { + Table.Cell onlyCell = Iterables.getOnlyElement(table.cellSet()); + return ImmutableTable.of(onlyCell.getRowKey(), onlyCell.getColumnKey(), onlyCell.getValue()); + } + } + ImmutableSet.Builder cellSetBuilder = ImmutableSet.builder(); + for (Table.Cell cell : table.cellSet()) { + cellSetBuilder.add(ImmutableTable.cellOf(cell.getRowKey(), cell.getColumnKey(), cell.getValue())); + } + return RegularImmutableTable.forCells(cellSetBuilder.build()); + } + + public static Builder builder() { + return new Builder(); + } + + static Table.Cell cellOf(R rowKey, C columnKey, V value) { + return Tables.immutableCell(Preconditions.checkNotNull(rowKey), Preconditions.checkNotNull(columnKey), Preconditions.checkNotNull(value)); + } + + ImmutableTable() { + } + + @Override + public ImmutableSet> cellSet() { + return (ImmutableSet)super.cellSet(); + } + + @Override + abstract ImmutableSet> createCellSet(); + + @Override + final UnmodifiableIterator> cellIterator() { + throw new AssertionError((Object)"should never be called"); + } + + @Override + public ImmutableCollection values() { + return (ImmutableCollection)super.values(); + } + + @Override + abstract ImmutableCollection createValues(); + + @Override + final Iterator valuesIterator() { + throw new AssertionError((Object)"should never be called"); + } + + @Override + public ImmutableMap column(C columnKey) { + Preconditions.checkNotNull(columnKey); + return MoreObjects.firstNonNull((ImmutableMap)((ImmutableMap)this.columnMap()).get(columnKey), ImmutableMap.of()); + } + + @Override + public ImmutableSet columnKeySet() { + return ((ImmutableMap)this.columnMap()).keySet(); + } + + @Override + public abstract ImmutableMap> columnMap(); + + @Override + public ImmutableMap row(R rowKey) { + Preconditions.checkNotNull(rowKey); + return MoreObjects.firstNonNull((ImmutableMap)((ImmutableMap)this.rowMap()).get(rowKey), ImmutableMap.of()); + } + + @Override + public ImmutableSet rowKeySet() { + return ((ImmutableMap)this.rowMap()).keySet(); + } + + @Override + public abstract ImmutableMap> rowMap(); + + @Override + public boolean contains(@Nullable Object rowKey, @Nullable Object columnKey) { + return this.get(rowKey, columnKey) != null; + } + + @Override + public boolean containsValue(@Nullable Object value) { + return ((ImmutableCollection)this.values()).contains(value); + } + + @Override + @Deprecated + public final void clear() { + throw new UnsupportedOperationException(); + } + + @Override + @Deprecated + public final V put(R rowKey, C columnKey, V value) { + throw new UnsupportedOperationException(); + } + + @Override + @Deprecated + public final void putAll(Table table) { + throw new UnsupportedOperationException(); + } + + @Override + @Deprecated + public final V remove(Object rowKey, Object columnKey) { + throw new UnsupportedOperationException(); + } + + public static final class Builder { + private final List> cells = Lists.newArrayList(); + private Comparator rowComparator; + private Comparator columnComparator; + + public Builder orderRowsBy(Comparator rowComparator) { + this.rowComparator = Preconditions.checkNotNull(rowComparator); + return this; + } + + public Builder orderColumnsBy(Comparator columnComparator) { + this.columnComparator = Preconditions.checkNotNull(columnComparator); + return this; + } + + public Builder put(R rowKey, C columnKey, V value) { + this.cells.add(ImmutableTable.cellOf(rowKey, columnKey, value)); + return this; + } + + public Builder put(Table.Cell cell) { + if (cell instanceof Tables.ImmutableCell) { + Preconditions.checkNotNull(cell.getRowKey()); + Preconditions.checkNotNull(cell.getColumnKey()); + Preconditions.checkNotNull(cell.getValue()); + Table.Cell immutableCell = cell; + this.cells.add(immutableCell); + } else { + this.put(cell.getRowKey(), cell.getColumnKey(), cell.getValue()); + } + return this; + } + + public Builder putAll(Table table) { + for (Table.Cell cell : table.cellSet()) { + this.put(cell); + } + return this; + } + + public ImmutableTable build() { + int size = this.cells.size(); + switch (size) { + case 0: { + return ImmutableTable.of(); + } + case 1: { + return new SingletonImmutableTable(Iterables.getOnlyElement(this.cells)); + } + } + return RegularImmutableTable.forCells(this.cells, this.rowComparator, this.columnComparator); + } + } +} diff --git a/src/com/google/common/collect/Interner.java b/src/com/google/common/collect/Interner.java new file mode 100644 index 0000000..d342bc9 --- /dev/null +++ b/src/com/google/common/collect/Interner.java @@ -0,0 +1,11 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.Beta; + +@Beta +public interface Interner { + public E intern(E var1); +} diff --git a/src/com/google/common/collect/Interners.java b/src/com/google/common/collect/Interners.java new file mode 100644 index 0000000..a2d3e77 --- /dev/null +++ b/src/com/google/common/collect/Interners.java @@ -0,0 +1,93 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.Beta; +import com.google.common.annotations.GwtIncompatible; +import com.google.common.base.Equivalence; +import com.google.common.base.Function; +import com.google.common.base.Preconditions; +import com.google.common.collect.Interner; +import com.google.common.collect.MapMaker; +import com.google.common.collect.MapMakerInternalMap; +import java.util.concurrent.ConcurrentMap; + +@Beta +public final class Interners { + private Interners() { + } + + public static Interner newStrongInterner() { + final ConcurrentMap map = new MapMaker().makeMap(); + return new Interner(){ + + @Override + public E intern(E sample) { + Object canonical = map.putIfAbsent(Preconditions.checkNotNull(sample), sample); + return canonical == null ? sample : canonical; + } + }; + } + + @GwtIncompatible(value="java.lang.ref.WeakReference") + public static Interner newWeakInterner() { + return new WeakInterner(); + } + + public static Function asFunction(Interner interner) { + return new InternerFunction(Preconditions.checkNotNull(interner)); + } + + private static class InternerFunction + implements Function { + private final Interner interner; + + public InternerFunction(Interner interner) { + this.interner = interner; + } + + @Override + public E apply(E input) { + return this.interner.intern(input); + } + + public int hashCode() { + return this.interner.hashCode(); + } + + @Override + public boolean equals(Object other) { + if (other instanceof InternerFunction) { + InternerFunction that = (InternerFunction)other; + return this.interner.equals(that.interner); + } + return false; + } + } + + private static class WeakInterner + implements Interner { + private final MapMakerInternalMap map = ((MapMaker)new MapMaker().weakKeys().keyEquivalence((Equivalence)Equivalence.equals())).makeCustomMap(); + + private WeakInterner() { + } + + @Override + public E intern(E sample) { + Dummy sneaky; + do { + E canonical; + MapMakerInternalMap.ReferenceEntry entry; + if ((entry = this.map.getEntry(sample)) == null || (canonical = entry.getKey()) == null) continue; + return canonical; + } while ((sneaky = this.map.putIfAbsent(sample, Dummy.VALUE)) != null); + return sample; + } + + private static enum Dummy { + VALUE; + + } + } +} diff --git a/src/com/google/common/collect/Iterables.java b/src/com/google/common/collect/Iterables.java new file mode 100644 index 0000000..aedb566 --- /dev/null +++ b/src/com/google/common/collect/Iterables.java @@ -0,0 +1,532 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.Beta; +import com.google.common.annotations.GwtCompatible; +import com.google.common.annotations.GwtIncompatible; +import com.google.common.base.Function; +import com.google.common.base.Optional; +import com.google.common.base.Preconditions; +import com.google.common.base.Predicate; +import com.google.common.collect.AbstractIterator; +import com.google.common.collect.CollectPreconditions; +import com.google.common.collect.Collections2; +import com.google.common.collect.FluentIterable; +import com.google.common.collect.ImmutableCollection; +import com.google.common.collect.ImmutableList; +import com.google.common.collect.Iterators; +import com.google.common.collect.Lists; +import com.google.common.collect.Multiset; +import com.google.common.collect.ObjectArrays; +import com.google.common.collect.TransformedIterator; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Comparator; +import java.util.Iterator; +import java.util.List; +import java.util.NoSuchElementException; +import java.util.Queue; +import java.util.RandomAccess; +import java.util.Set; +import javax.annotation.Nullable; + +@GwtCompatible(emulated=true) +public final class Iterables { + private Iterables() { + } + + public static Iterable unmodifiableIterable(Iterable iterable) { + Preconditions.checkNotNull(iterable); + if (iterable instanceof UnmodifiableIterable || iterable instanceof ImmutableCollection) { + return iterable; + } + return new UnmodifiableIterable(iterable); + } + + @Deprecated + public static Iterable unmodifiableIterable(ImmutableCollection iterable) { + return Preconditions.checkNotNull(iterable); + } + + public static int size(Iterable iterable) { + return iterable instanceof Collection ? ((Collection)iterable).size() : Iterators.size(iterable.iterator()); + } + + public static boolean contains(Iterable iterable, @Nullable Object element) { + if (iterable instanceof Collection) { + Collection collection = (Collection)iterable; + return Collections2.safeContains(collection, element); + } + return Iterators.contains(iterable.iterator(), element); + } + + public static boolean removeAll(Iterable removeFrom, Collection elementsToRemove) { + return removeFrom instanceof Collection ? ((Collection)removeFrom).removeAll(Preconditions.checkNotNull(elementsToRemove)) : Iterators.removeAll(removeFrom.iterator(), elementsToRemove); + } + + public static boolean retainAll(Iterable removeFrom, Collection elementsToRetain) { + return removeFrom instanceof Collection ? ((Collection)removeFrom).retainAll(Preconditions.checkNotNull(elementsToRetain)) : Iterators.retainAll(removeFrom.iterator(), elementsToRetain); + } + + public static boolean removeIf(Iterable removeFrom, Predicate predicate) { + if (removeFrom instanceof RandomAccess && removeFrom instanceof List) { + return Iterables.removeIfFromRandomAccessList((List)removeFrom, Preconditions.checkNotNull(predicate)); + } + return Iterators.removeIf(removeFrom.iterator(), predicate); + } + + private static boolean removeIfFromRandomAccessList(List list, Predicate predicate) { + int from; + int to = 0; + for (from = 0; from < list.size(); ++from) { + T element = list.get(from); + if (predicate.apply(element)) continue; + if (from > to) { + try { + list.set(to, element); + } + catch (UnsupportedOperationException e) { + Iterables.slowRemoveIfForRemainingElements(list, predicate, to, from); + return true; + } + } + ++to; + } + list.subList(to, list.size()).clear(); + return from != to; + } + + private static void slowRemoveIfForRemainingElements(List list, Predicate predicate, int to, int from) { + int n; + for (n = list.size() - 1; n > from; --n) { + if (!predicate.apply(list.get(n))) continue; + list.remove(n); + } + for (n = from - 1; n >= to; --n) { + list.remove(n); + } + } + + @Nullable + static T removeFirstMatching(Iterable removeFrom, Predicate predicate) { + Preconditions.checkNotNull(predicate); + Iterator iterator = removeFrom.iterator(); + while (iterator.hasNext()) { + T next = iterator.next(); + if (!predicate.apply(next)) continue; + iterator.remove(); + return next; + } + return null; + } + + public static boolean elementsEqual(Iterable iterable1, Iterable iterable2) { + if (iterable1 instanceof Collection && iterable2 instanceof Collection) { + Collection collection1 = (Collection)iterable1; + Collection collection2 = (Collection)iterable2; + if (collection1.size() != collection2.size()) { + return false; + } + } + return Iterators.elementsEqual(iterable1.iterator(), iterable2.iterator()); + } + + public static String toString(Iterable iterable) { + return Iterators.toString(iterable.iterator()); + } + + public static T getOnlyElement(Iterable iterable) { + return Iterators.getOnlyElement(iterable.iterator()); + } + + @Nullable + public static T getOnlyElement(Iterable iterable, @Nullable T defaultValue) { + return Iterators.getOnlyElement(iterable.iterator(), defaultValue); + } + + @GwtIncompatible(value="Array.newInstance(Class, int)") + public static T[] toArray(Iterable iterable, Class type) { + Collection collection = Iterables.toCollection(iterable); + T[] array = ObjectArrays.newArray(type, collection.size()); + return collection.toArray(array); + } + + static Object[] toArray(Iterable iterable) { + return Iterables.toCollection(iterable).toArray(); + } + + private static Collection toCollection(Iterable iterable) { + return iterable instanceof Collection ? (ArrayList)iterable : Lists.newArrayList(iterable.iterator()); + } + + public static boolean addAll(Collection addTo, Iterable elementsToAdd) { + if (elementsToAdd instanceof Collection) { + Collection c = Collections2.cast(elementsToAdd); + return addTo.addAll(c); + } + return Iterators.addAll(addTo, Preconditions.checkNotNull(elementsToAdd).iterator()); + } + + public static int frequency(Iterable iterable, @Nullable Object element) { + if (iterable instanceof Multiset) { + return ((Multiset)iterable).count(element); + } + if (iterable instanceof Set) { + return ((Set)iterable).contains(element) ? 1 : 0; + } + return Iterators.frequency(iterable.iterator(), element); + } + + public static Iterable cycle(final Iterable iterable) { + Preconditions.checkNotNull(iterable); + return new FluentIterable(){ + + @Override + public Iterator iterator() { + return Iterators.cycle(iterable); + } + + @Override + public String toString() { + return String.valueOf(iterable.toString()).concat(" (cycled)"); + } + }; + } + + public static Iterable cycle(T ... elements) { + return Iterables.cycle(Lists.newArrayList(elements)); + } + + public static Iterable concat(Iterable a, Iterable b) { + return Iterables.concat(ImmutableList.of(a, b)); + } + + public static Iterable concat(Iterable a, Iterable b, Iterable c) { + return Iterables.concat(ImmutableList.of(a, b, c)); + } + + public static Iterable concat(Iterable a, Iterable b, Iterable c, Iterable d) { + return Iterables.concat(ImmutableList.of(a, b, c, d)); + } + + public static Iterable concat(Iterable ... inputs) { + return Iterables.concat(ImmutableList.copyOf(inputs)); + } + + public static Iterable concat(final Iterable> inputs) { + Preconditions.checkNotNull(inputs); + return new FluentIterable(){ + + @Override + public Iterator iterator() { + return Iterators.concat(Iterables.iterators(inputs)); + } + }; + } + + private static Iterator> iterators(Iterable> iterables) { + return new TransformedIterator, Iterator>(iterables.iterator()){ + + @Override + Iterator transform(Iterable from) { + return from.iterator(); + } + }; + } + + public static Iterable> partition(final Iterable iterable, final int size) { + Preconditions.checkNotNull(iterable); + Preconditions.checkArgument(size > 0); + return new FluentIterable>(){ + + @Override + public Iterator> iterator() { + return Iterators.partition(iterable.iterator(), size); + } + }; + } + + public static Iterable> paddedPartition(final Iterable iterable, final int size) { + Preconditions.checkNotNull(iterable); + Preconditions.checkArgument(size > 0); + return new FluentIterable>(){ + + @Override + public Iterator> iterator() { + return Iterators.paddedPartition(iterable.iterator(), size); + } + }; + } + + public static Iterable filter(final Iterable unfiltered, final Predicate predicate) { + Preconditions.checkNotNull(unfiltered); + Preconditions.checkNotNull(predicate); + return new FluentIterable(){ + + @Override + public Iterator iterator() { + return Iterators.filter(unfiltered.iterator(), predicate); + } + }; + } + + @GwtIncompatible(value="Class.isInstance") + public static Iterable filter(final Iterable unfiltered, final Class type) { + Preconditions.checkNotNull(unfiltered); + Preconditions.checkNotNull(type); + return new FluentIterable(){ + + @Override + public Iterator iterator() { + return Iterators.filter(unfiltered.iterator(), type); + } + }; + } + + public static boolean any(Iterable iterable, Predicate predicate) { + return Iterators.any(iterable.iterator(), predicate); + } + + public static boolean all(Iterable iterable, Predicate predicate) { + return Iterators.all(iterable.iterator(), predicate); + } + + public static T find(Iterable iterable, Predicate predicate) { + return Iterators.find(iterable.iterator(), predicate); + } + + @Nullable + public static T find(Iterable iterable, Predicate predicate, @Nullable T defaultValue) { + return Iterators.find(iterable.iterator(), predicate, defaultValue); + } + + public static Optional tryFind(Iterable iterable, Predicate predicate) { + return Iterators.tryFind(iterable.iterator(), predicate); + } + + public static int indexOf(Iterable iterable, Predicate predicate) { + return Iterators.indexOf(iterable.iterator(), predicate); + } + + public static Iterable transform(final Iterable fromIterable, final Function function) { + Preconditions.checkNotNull(fromIterable); + Preconditions.checkNotNull(function); + return new FluentIterable(){ + + @Override + public Iterator iterator() { + return Iterators.transform(fromIterable.iterator(), function); + } + }; + } + + public static T get(Iterable iterable, int position) { + Preconditions.checkNotNull(iterable); + return (T)(iterable instanceof List ? ((List)iterable).get(position) : Iterators.get(iterable.iterator(), position)); + } + + @Nullable + public static T get(Iterable iterable, int position, @Nullable T defaultValue) { + Preconditions.checkNotNull(iterable); + Iterators.checkNonnegative(position); + if (iterable instanceof List) { + List list = Lists.cast(iterable); + return position < list.size() ? list.get(position) : defaultValue; + } + Iterator iterator = iterable.iterator(); + Iterators.advance(iterator, position); + return Iterators.getNext(iterator, defaultValue); + } + + @Nullable + public static T getFirst(Iterable iterable, @Nullable T defaultValue) { + return Iterators.getNext(iterable.iterator(), defaultValue); + } + + public static T getLast(Iterable iterable) { + if (iterable instanceof List) { + List list = (List)iterable; + if (list.isEmpty()) { + throw new NoSuchElementException(); + } + return Iterables.getLastInNonemptyList(list); + } + return Iterators.getLast(iterable.iterator()); + } + + @Nullable + public static T getLast(Iterable iterable, @Nullable T defaultValue) { + if (iterable instanceof Collection) { + Collection c = Collections2.cast(iterable); + if (c.isEmpty()) { + return defaultValue; + } + if (iterable instanceof List) { + return Iterables.getLastInNonemptyList(Lists.cast(iterable)); + } + } + return Iterators.getLast(iterable.iterator(), defaultValue); + } + + private static T getLastInNonemptyList(List list) { + return list.get(list.size() - 1); + } + + public static Iterable skip(final Iterable iterable, final int numberToSkip) { + Preconditions.checkNotNull(iterable); + Preconditions.checkArgument(numberToSkip >= 0, "number to skip cannot be negative"); + if (iterable instanceof List) { + final List list = (List)iterable; + return new FluentIterable(){ + + @Override + public Iterator iterator() { + int toSkip = Math.min(list.size(), numberToSkip); + return list.subList(toSkip, list.size()).iterator(); + } + }; + } + return new FluentIterable(){ + + @Override + public Iterator iterator() { + final Iterator iterator = iterable.iterator(); + Iterators.advance(iterator, numberToSkip); + return new Iterator(){ + boolean atStart = true; + + @Override + public boolean hasNext() { + return iterator.hasNext(); + } + + @Override + public T next() { + Object result = iterator.next(); + this.atStart = false; + return result; + } + + @Override + public void remove() { + CollectPreconditions.checkRemove(!this.atStart); + iterator.remove(); + } + }; + } + }; + } + + public static Iterable limit(final Iterable iterable, final int limitSize) { + Preconditions.checkNotNull(iterable); + Preconditions.checkArgument(limitSize >= 0, "limit is negative"); + return new FluentIterable(){ + + @Override + public Iterator iterator() { + return Iterators.limit(iterable.iterator(), limitSize); + } + }; + } + + public static Iterable consumingIterable(final Iterable iterable) { + if (iterable instanceof Queue) { + return new FluentIterable(){ + + @Override + public Iterator iterator() { + return new ConsumingQueueIterator((Queue)iterable); + } + + @Override + public String toString() { + return "Iterables.consumingIterable(...)"; + } + }; + } + Preconditions.checkNotNull(iterable); + return new FluentIterable(){ + + @Override + public Iterator iterator() { + return Iterators.consumingIterator(iterable.iterator()); + } + + @Override + public String toString() { + return "Iterables.consumingIterable(...)"; + } + }; + } + + public static boolean isEmpty(Iterable iterable) { + if (iterable instanceof Collection) { + return ((Collection)iterable).isEmpty(); + } + return !iterable.iterator().hasNext(); + } + + @Beta + public static Iterable mergeSorted(final Iterable> iterables, final Comparator comparator) { + Preconditions.checkNotNull(iterables, "iterables"); + Preconditions.checkNotNull(comparator, "comparator"); + FluentIterable iterable = new FluentIterable(){ + + @Override + public Iterator iterator() { + return Iterators.mergeSorted(Iterables.transform(iterables, Iterables.toIterator()), comparator); + } + }; + return new UnmodifiableIterable(iterable); + } + + private static Function, Iterator> toIterator() { + return new Function, Iterator>(){ + + @Override + public Iterator apply(Iterable iterable) { + return iterable.iterator(); + } + }; + } + + private static class ConsumingQueueIterator + extends AbstractIterator { + private final Queue queue; + + private ConsumingQueueIterator(Queue queue) { + this.queue = queue; + } + + @Override + public T computeNext() { + try { + return this.queue.remove(); + } + catch (NoSuchElementException e) { + return this.endOfData(); + } + } + } + + private static final class UnmodifiableIterable + extends FluentIterable { + private final Iterable iterable; + + private UnmodifiableIterable(Iterable iterable) { + this.iterable = iterable; + } + + @Override + public Iterator iterator() { + return Iterators.unmodifiableIterator(this.iterable.iterator()); + } + + @Override + public String toString() { + return this.iterable.toString(); + } + } +} diff --git a/src/com/google/common/collect/Iterators.java b/src/com/google/common/collect/Iterators.java new file mode 100644 index 0000000..5fbfc7f --- /dev/null +++ b/src/com/google/common/collect/Iterators.java @@ -0,0 +1,714 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.Beta; +import com.google.common.annotations.GwtCompatible; +import com.google.common.annotations.GwtIncompatible; +import com.google.common.base.Function; +import com.google.common.base.Objects; +import com.google.common.base.Optional; +import com.google.common.base.Preconditions; +import com.google.common.base.Predicate; +import com.google.common.base.Predicates; +import com.google.common.collect.AbstractIndexedListIterator; +import com.google.common.collect.AbstractIterator; +import com.google.common.collect.CollectPreconditions; +import com.google.common.collect.Collections2; +import com.google.common.collect.ImmutableList; +import com.google.common.collect.Iterables; +import com.google.common.collect.Lists; +import com.google.common.collect.PeekingIterator; +import com.google.common.collect.TransformedIterator; +import com.google.common.collect.UnmodifiableIterator; +import com.google.common.collect.UnmodifiableListIterator; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.Collections; +import java.util.Comparator; +import java.util.Enumeration; +import java.util.Iterator; +import java.util.List; +import java.util.ListIterator; +import java.util.NoSuchElementException; +import java.util.PriorityQueue; +import java.util.Queue; +import javax.annotation.Nullable; + +@GwtCompatible(emulated=true) +public final class Iterators { + static final UnmodifiableListIterator EMPTY_LIST_ITERATOR = new UnmodifiableListIterator(){ + + @Override + public boolean hasNext() { + return false; + } + + @Override + public Object next() { + throw new NoSuchElementException(); + } + + @Override + public boolean hasPrevious() { + return false; + } + + @Override + public Object previous() { + throw new NoSuchElementException(); + } + + @Override + public int nextIndex() { + return 0; + } + + @Override + public int previousIndex() { + return -1; + } + }; + private static final Iterator EMPTY_MODIFIABLE_ITERATOR = new Iterator(){ + + @Override + public boolean hasNext() { + return false; + } + + @Override + public Object next() { + throw new NoSuchElementException(); + } + + @Override + public void remove() { + CollectPreconditions.checkRemove(false); + } + }; + + private Iterators() { + } + + @Deprecated + public static UnmodifiableIterator emptyIterator() { + return Iterators.emptyListIterator(); + } + + static UnmodifiableListIterator emptyListIterator() { + return EMPTY_LIST_ITERATOR; + } + + static Iterator emptyModifiableIterator() { + return EMPTY_MODIFIABLE_ITERATOR; + } + + public static UnmodifiableIterator unmodifiableIterator(final Iterator iterator) { + Preconditions.checkNotNull(iterator); + if (iterator instanceof UnmodifiableIterator) { + return (UnmodifiableIterator)iterator; + } + return new UnmodifiableIterator(){ + + @Override + public boolean hasNext() { + return iterator.hasNext(); + } + + @Override + public T next() { + return iterator.next(); + } + }; + } + + @Deprecated + public static UnmodifiableIterator unmodifiableIterator(UnmodifiableIterator iterator) { + return Preconditions.checkNotNull(iterator); + } + + public static int size(Iterator iterator) { + int count = 0; + while (iterator.hasNext()) { + iterator.next(); + ++count; + } + return count; + } + + public static boolean contains(Iterator iterator, @Nullable Object element) { + return Iterators.any(iterator, Predicates.equalTo(element)); + } + + public static boolean removeAll(Iterator removeFrom, Collection elementsToRemove) { + return Iterators.removeIf(removeFrom, Predicates.in(elementsToRemove)); + } + + public static boolean removeIf(Iterator removeFrom, Predicate predicate) { + Preconditions.checkNotNull(predicate); + boolean modified = false; + while (removeFrom.hasNext()) { + if (!predicate.apply(removeFrom.next())) continue; + removeFrom.remove(); + modified = true; + } + return modified; + } + + public static boolean retainAll(Iterator removeFrom, Collection elementsToRetain) { + return Iterators.removeIf(removeFrom, Predicates.not(Predicates.in(elementsToRetain))); + } + + public static boolean elementsEqual(Iterator iterator1, Iterator iterator2) { + while (iterator1.hasNext()) { + Object o2; + if (!iterator2.hasNext()) { + return false; + } + Object o1 = iterator1.next(); + if (Objects.equal(o1, o2 = iterator2.next())) continue; + return false; + } + return !iterator2.hasNext(); + } + + public static String toString(Iterator iterator) { + return Collections2.STANDARD_JOINER.appendTo(new StringBuilder().append('['), iterator).append(']').toString(); + } + + public static T getOnlyElement(Iterator iterator) { + T first = iterator.next(); + if (!iterator.hasNext()) { + return first; + } + StringBuilder sb = new StringBuilder(); + String string = String.valueOf(String.valueOf(first)); + sb.append(new StringBuilder(31 + string.length()).append("expected one element but was: <").append(string).toString()); + for (int i = 0; i < 4 && iterator.hasNext(); ++i) { + String string2 = String.valueOf(String.valueOf(iterator.next())); + sb.append(new StringBuilder(2 + string2.length()).append(", ").append(string2).toString()); + } + if (iterator.hasNext()) { + sb.append(", ..."); + } + sb.append('>'); + throw new IllegalArgumentException(sb.toString()); + } + + @Nullable + public static T getOnlyElement(Iterator iterator, @Nullable T defaultValue) { + return iterator.hasNext() ? Iterators.getOnlyElement(iterator) : defaultValue; + } + + @GwtIncompatible(value="Array.newInstance(Class, int)") + public static T[] toArray(Iterator iterator, Class type) { + ArrayList list = Lists.newArrayList(iterator); + return Iterables.toArray(list, type); + } + + public static boolean addAll(Collection addTo, Iterator iterator) { + Preconditions.checkNotNull(addTo); + Preconditions.checkNotNull(iterator); + boolean wasModified = false; + while (iterator.hasNext()) { + wasModified |= addTo.add(iterator.next()); + } + return wasModified; + } + + public static int frequency(Iterator iterator, @Nullable Object element) { + return Iterators.size(Iterators.filter(iterator, Predicates.equalTo(element))); + } + + public static Iterator cycle(final Iterable iterable) { + Preconditions.checkNotNull(iterable); + return new Iterator(){ + Iterator iterator = Iterators.emptyIterator(); + Iterator removeFrom; + + @Override + public boolean hasNext() { + if (!this.iterator.hasNext()) { + this.iterator = iterable.iterator(); + } + return this.iterator.hasNext(); + } + + @Override + public T next() { + if (!this.hasNext()) { + throw new NoSuchElementException(); + } + this.removeFrom = this.iterator; + return this.iterator.next(); + } + + @Override + public void remove() { + CollectPreconditions.checkRemove(this.removeFrom != null); + this.removeFrom.remove(); + this.removeFrom = null; + } + }; + } + + public static Iterator cycle(T ... elements) { + return Iterators.cycle(Lists.newArrayList(elements)); + } + + public static Iterator concat(Iterator a, Iterator b) { + return Iterators.concat(ImmutableList.of(a, b).iterator()); + } + + public static Iterator concat(Iterator a, Iterator b, Iterator c) { + return Iterators.concat(ImmutableList.of(a, b, c).iterator()); + } + + public static Iterator concat(Iterator a, Iterator b, Iterator c, Iterator d) { + return Iterators.concat(ImmutableList.of(a, b, c, d).iterator()); + } + + public static Iterator concat(Iterator ... inputs) { + return Iterators.concat(ImmutableList.copyOf(inputs).iterator()); + } + + public static Iterator concat(final Iterator> inputs) { + Preconditions.checkNotNull(inputs); + return new Iterator(){ + Iterator current = Iterators.emptyIterator(); + Iterator removeFrom; + + @Override + public boolean hasNext() { + boolean currentHasNext; + while (!(currentHasNext = Preconditions.checkNotNull(this.current).hasNext()) && inputs.hasNext()) { + this.current = (Iterator)inputs.next(); + } + return currentHasNext; + } + + @Override + public T next() { + if (!this.hasNext()) { + throw new NoSuchElementException(); + } + this.removeFrom = this.current; + return this.current.next(); + } + + @Override + public void remove() { + CollectPreconditions.checkRemove(this.removeFrom != null); + this.removeFrom.remove(); + this.removeFrom = null; + } + }; + } + + public static UnmodifiableIterator> partition(Iterator iterator, int size) { + return Iterators.partitionImpl(iterator, size, false); + } + + public static UnmodifiableIterator> paddedPartition(Iterator iterator, int size) { + return Iterators.partitionImpl(iterator, size, true); + } + + private static UnmodifiableIterator> partitionImpl(final Iterator iterator, final int size, final boolean pad) { + Preconditions.checkNotNull(iterator); + Preconditions.checkArgument(size > 0); + return new UnmodifiableIterator>(){ + + @Override + public boolean hasNext() { + return iterator.hasNext(); + } + + @Override + public List next() { + int count; + if (!this.hasNext()) { + throw new NoSuchElementException(); + } + Object[] array = new Object[size]; + for (count = 0; count < size && iterator.hasNext(); ++count) { + array[count] = iterator.next(); + } + for (int i = count; i < size; ++i) { + array[i] = null; + } + List list = Collections.unmodifiableList(Arrays.asList(array)); + return pad || count == size ? list : list.subList(0, count); + } + }; + } + + public static UnmodifiableIterator filter(final Iterator unfiltered, final Predicate predicate) { + Preconditions.checkNotNull(unfiltered); + Preconditions.checkNotNull(predicate); + return new AbstractIterator(){ + + @Override + protected T computeNext() { + while (unfiltered.hasNext()) { + Object element = unfiltered.next(); + if (!predicate.apply(element)) continue; + return element; + } + return this.endOfData(); + } + }; + } + + @GwtIncompatible(value="Class.isInstance") + public static UnmodifiableIterator filter(Iterator unfiltered, Class type) { + return Iterators.filter(unfiltered, Predicates.instanceOf(type)); + } + + public static boolean any(Iterator iterator, Predicate predicate) { + return Iterators.indexOf(iterator, predicate) != -1; + } + + public static boolean all(Iterator iterator, Predicate predicate) { + Preconditions.checkNotNull(predicate); + while (iterator.hasNext()) { + T element = iterator.next(); + if (predicate.apply(element)) continue; + return false; + } + return true; + } + + public static T find(Iterator iterator, Predicate predicate) { + return (T)Iterators.filter(iterator, predicate).next(); + } + + @Nullable + public static T find(Iterator iterator, Predicate predicate, @Nullable T defaultValue) { + return Iterators.getNext(Iterators.filter(iterator, predicate), defaultValue); + } + + public static Optional tryFind(Iterator iterator, Predicate predicate) { + UnmodifiableIterator filteredIterator = Iterators.filter(iterator, predicate); + return filteredIterator.hasNext() ? Optional.of(filteredIterator.next()) : Optional.absent(); + } + + public static int indexOf(Iterator iterator, Predicate predicate) { + Preconditions.checkNotNull(predicate, "predicate"); + int i = 0; + while (iterator.hasNext()) { + T current = iterator.next(); + if (predicate.apply(current)) { + return i; + } + ++i; + } + return -1; + } + + public static Iterator transform(Iterator fromIterator, final Function function) { + Preconditions.checkNotNull(function); + return new TransformedIterator(fromIterator){ + + @Override + T transform(F from) { + return function.apply(from); + } + }; + } + + public static T get(Iterator iterator, int position) { + Iterators.checkNonnegative(position); + int skipped = Iterators.advance(iterator, position); + if (!iterator.hasNext()) { + int n = position; + int n2 = skipped; + throw new IndexOutOfBoundsException(new StringBuilder(91).append("position (").append(n).append(") must be less than the number of elements that remained (").append(n2).append(")").toString()); + } + return iterator.next(); + } + + static void checkNonnegative(int position) { + if (position < 0) { + int n = position; + throw new IndexOutOfBoundsException(new StringBuilder(43).append("position (").append(n).append(") must not be negative").toString()); + } + } + + @Nullable + public static T get(Iterator iterator, int position, @Nullable T defaultValue) { + Iterators.checkNonnegative(position); + Iterators.advance(iterator, position); + return Iterators.getNext(iterator, defaultValue); + } + + @Nullable + public static T getNext(Iterator iterator, @Nullable T defaultValue) { + return iterator.hasNext() ? iterator.next() : defaultValue; + } + + public static T getLast(Iterator iterator) { + T current; + do { + current = iterator.next(); + } while (iterator.hasNext()); + return current; + } + + @Nullable + public static T getLast(Iterator iterator, @Nullable T defaultValue) { + return iterator.hasNext() ? Iterators.getLast(iterator) : defaultValue; + } + + public static int advance(Iterator iterator, int numberToAdvance) { + int i; + Preconditions.checkNotNull(iterator); + Preconditions.checkArgument(numberToAdvance >= 0, "numberToAdvance must be nonnegative"); + for (i = 0; i < numberToAdvance && iterator.hasNext(); ++i) { + iterator.next(); + } + return i; + } + + public static Iterator limit(final Iterator iterator, final int limitSize) { + Preconditions.checkNotNull(iterator); + Preconditions.checkArgument(limitSize >= 0, "limit is negative"); + return new Iterator(){ + private int count; + + @Override + public boolean hasNext() { + return this.count < limitSize && iterator.hasNext(); + } + + @Override + public T next() { + if (!this.hasNext()) { + throw new NoSuchElementException(); + } + ++this.count; + return iterator.next(); + } + + @Override + public void remove() { + iterator.remove(); + } + }; + } + + public static Iterator consumingIterator(final Iterator iterator) { + Preconditions.checkNotNull(iterator); + return new UnmodifiableIterator(){ + + @Override + public boolean hasNext() { + return iterator.hasNext(); + } + + @Override + public T next() { + Object next = iterator.next(); + iterator.remove(); + return next; + } + + public String toString() { + return "Iterators.consumingIterator(...)"; + } + }; + } + + @Nullable + static T pollNext(Iterator iterator) { + if (iterator.hasNext()) { + T result = iterator.next(); + iterator.remove(); + return result; + } + return null; + } + + static void clear(Iterator iterator) { + Preconditions.checkNotNull(iterator); + while (iterator.hasNext()) { + iterator.next(); + iterator.remove(); + } + } + + public static UnmodifiableIterator forArray(T ... array) { + return Iterators.forArray(array, 0, array.length, 0); + } + + static UnmodifiableListIterator forArray(final T[] array, final int offset, int length, int index) { + Preconditions.checkArgument(length >= 0); + int end = offset + length; + Preconditions.checkPositionIndexes(offset, end, array.length); + Preconditions.checkPositionIndex(index, length); + if (length == 0) { + return Iterators.emptyListIterator(); + } + return new AbstractIndexedListIterator(length, index){ + + @Override + protected T get(int index) { + return array[offset + index]; + } + }; + } + + public static UnmodifiableIterator singletonIterator(final @Nullable T value) { + return new UnmodifiableIterator(){ + boolean done; + + @Override + public boolean hasNext() { + return !this.done; + } + + @Override + public T next() { + if (this.done) { + throw new NoSuchElementException(); + } + this.done = true; + return value; + } + }; + } + + public static UnmodifiableIterator forEnumeration(final Enumeration enumeration) { + Preconditions.checkNotNull(enumeration); + return new UnmodifiableIterator(){ + + @Override + public boolean hasNext() { + return enumeration.hasMoreElements(); + } + + @Override + public T next() { + return enumeration.nextElement(); + } + }; + } + + public static Enumeration asEnumeration(final Iterator iterator) { + Preconditions.checkNotNull(iterator); + return new Enumeration(){ + + @Override + public boolean hasMoreElements() { + return iterator.hasNext(); + } + + @Override + public T nextElement() { + return iterator.next(); + } + }; + } + + public static PeekingIterator peekingIterator(Iterator iterator) { + if (iterator instanceof PeekingImpl) { + PeekingImpl peeking = (PeekingImpl)iterator; + return peeking; + } + return new PeekingImpl(iterator); + } + + @Deprecated + public static PeekingIterator peekingIterator(PeekingIterator iterator) { + return Preconditions.checkNotNull(iterator); + } + + @Beta + public static UnmodifiableIterator mergeSorted(Iterable> iterators, Comparator comparator) { + Preconditions.checkNotNull(iterators, "iterators"); + Preconditions.checkNotNull(comparator, "comparator"); + return new MergingIterator(iterators, comparator); + } + + static ListIterator cast(Iterator iterator) { + return (ListIterator)iterator; + } + + private static class MergingIterator + extends UnmodifiableIterator { + final Queue> queue; + + public MergingIterator(Iterable> iterators, final Comparator itemComparator) { + Comparator heapComparator = new Comparator>(){ + + @Override + public int compare(PeekingIterator o1, PeekingIterator o2) { + return itemComparator.compare(o1.peek(), o2.peek()); + } + }; + this.queue = new PriorityQueue>(2, heapComparator); + for (Iterator iterator : iterators) { + if (!iterator.hasNext()) continue; + this.queue.add(Iterators.peekingIterator(iterator)); + } + } + + @Override + public boolean hasNext() { + return !this.queue.isEmpty(); + } + + @Override + public T next() { + PeekingIterator nextIter = this.queue.remove(); + T next = nextIter.next(); + if (nextIter.hasNext()) { + this.queue.add(nextIter); + } + return next; + } + } + + private static class PeekingImpl + implements PeekingIterator { + private final Iterator iterator; + private boolean hasPeeked; + private E peekedElement; + + public PeekingImpl(Iterator iterator) { + this.iterator = Preconditions.checkNotNull(iterator); + } + + @Override + public boolean hasNext() { + return this.hasPeeked || this.iterator.hasNext(); + } + + @Override + public E next() { + if (!this.hasPeeked) { + return this.iterator.next(); + } + E result = this.peekedElement; + this.hasPeeked = false; + this.peekedElement = null; + return result; + } + + @Override + public void remove() { + Preconditions.checkState(!this.hasPeeked, "Can't remove after you've peeked at next"); + this.iterator.remove(); + } + + @Override + public E peek() { + if (!this.hasPeeked) { + this.peekedElement = this.iterator.next(); + this.hasPeeked = true; + } + return this.peekedElement; + } + } +} diff --git a/src/com/google/common/collect/LexicographicalOrdering.java b/src/com/google/common/collect/LexicographicalOrdering.java new file mode 100644 index 0000000..05213fa --- /dev/null +++ b/src/com/google/common/collect/LexicographicalOrdering.java @@ -0,0 +1,61 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.GwtCompatible; +import com.google.common.collect.Ordering; +import java.io.Serializable; +import java.util.Iterator; +import javax.annotation.Nullable; + +@GwtCompatible(serializable=true) +final class LexicographicalOrdering +extends Ordering> +implements Serializable { + final Ordering elementOrder; + private static final long serialVersionUID = 0L; + + LexicographicalOrdering(Ordering elementOrder) { + this.elementOrder = elementOrder; + } + + @Override + public int compare(Iterable leftIterable, Iterable rightIterable) { + Iterator left = leftIterable.iterator(); + Iterator right = rightIterable.iterator(); + while (left.hasNext()) { + if (!right.hasNext()) { + return 1; + } + int result = this.elementOrder.compare(left.next(), right.next()); + if (result == 0) continue; + return result; + } + if (right.hasNext()) { + return -1; + } + return 0; + } + + @Override + public boolean equals(@Nullable Object object) { + if (object == this) { + return true; + } + if (object instanceof LexicographicalOrdering) { + LexicographicalOrdering that = (LexicographicalOrdering)object; + return this.elementOrder.equals(that.elementOrder); + } + return false; + } + + public int hashCode() { + return this.elementOrder.hashCode() ^ 0x7BB78CF5; + } + + public String toString() { + String string = String.valueOf(String.valueOf(this.elementOrder)); + return new StringBuilder(18 + string.length()).append(string).append(".lexicographical()").toString(); + } +} diff --git a/src/com/google/common/collect/LinkedHashMultimap.java b/src/com/google/common/collect/LinkedHashMultimap.java new file mode 100644 index 0000000..c2b5db0 --- /dev/null +++ b/src/com/google/common/collect/LinkedHashMultimap.java @@ -0,0 +1,443 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.GwtCompatible; +import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.VisibleForTesting; +import com.google.common.base.Objects; +import com.google.common.collect.AbstractSetMultimap; +import com.google.common.collect.CollectPreconditions; +import com.google.common.collect.Hashing; +import com.google.common.collect.ImmutableEntry; +import com.google.common.collect.Maps; +import com.google.common.collect.Multimap; +import com.google.common.collect.Sets; +import java.io.IOException; +import java.io.ObjectInputStream; +import java.io.ObjectOutputStream; +import java.util.Arrays; +import java.util.Collection; +import java.util.ConcurrentModificationException; +import java.util.Iterator; +import java.util.LinkedHashMap; +import java.util.LinkedHashSet; +import java.util.Map; +import java.util.NoSuchElementException; +import java.util.Set; +import javax.annotation.Nullable; + +@GwtCompatible(serializable=true, emulated=true) +public final class LinkedHashMultimap +extends AbstractSetMultimap { + private static final int DEFAULT_KEY_CAPACITY = 16; + private static final int DEFAULT_VALUE_SET_CAPACITY = 2; + @VisibleForTesting + static final double VALUE_SET_LOAD_FACTOR = 1.0; + @VisibleForTesting + transient int valueSetCapacity = 2; + private transient ValueEntry multimapHeaderEntry; + @GwtIncompatible(value="java serialization not supported") + private static final long serialVersionUID = 1L; + + public static LinkedHashMultimap create() { + return new LinkedHashMultimap(16, 2); + } + + public static LinkedHashMultimap create(int expectedKeys, int expectedValuesPerKey) { + return new LinkedHashMultimap(Maps.capacity(expectedKeys), Maps.capacity(expectedValuesPerKey)); + } + + public static LinkedHashMultimap create(Multimap multimap) { + LinkedHashMultimap result = LinkedHashMultimap.create(multimap.keySet().size(), 2); + result.putAll((Multimap)multimap); + return result; + } + + private static void succeedsInValueSet(ValueSetLink pred, ValueSetLink succ) { + pred.setSuccessorInValueSet(succ); + succ.setPredecessorInValueSet(pred); + } + + private static void succeedsInMultimap(ValueEntry pred, ValueEntry succ) { + pred.setSuccessorInMultimap(succ); + succ.setPredecessorInMultimap(pred); + } + + private static void deleteFromValueSet(ValueSetLink entry) { + LinkedHashMultimap.succeedsInValueSet(entry.getPredecessorInValueSet(), entry.getSuccessorInValueSet()); + } + + private static void deleteFromMultimap(ValueEntry entry) { + LinkedHashMultimap.succeedsInMultimap(entry.getPredecessorInMultimap(), entry.getSuccessorInMultimap()); + } + + private LinkedHashMultimap(int keyCapacity, int valueSetCapacity) { + super(new LinkedHashMap(keyCapacity)); + CollectPreconditions.checkNonnegative(valueSetCapacity, "expectedValuesPerKey"); + this.valueSetCapacity = valueSetCapacity; + this.multimapHeaderEntry = new ValueEntry(null, null, 0, null); + LinkedHashMultimap.succeedsInMultimap(this.multimapHeaderEntry, this.multimapHeaderEntry); + } + + @Override + Set createCollection() { + return new LinkedHashSet(this.valueSetCapacity); + } + + @Override + Collection createCollection(K key) { + return new ValueSet(key, this.valueSetCapacity); + } + + @Override + public Set replaceValues(@Nullable K key, Iterable values) { + return super.replaceValues((Object)key, (Iterable)values); + } + + @Override + public Set> entries() { + return super.entries(); + } + + @Override + public Collection values() { + return super.values(); + } + + @Override + Iterator> entryIterator() { + return new Iterator>(){ + ValueEntry nextEntry; + ValueEntry toRemove; + { + this.nextEntry = ((LinkedHashMultimap)LinkedHashMultimap.this).multimapHeaderEntry.successorInMultimap; + } + + @Override + public boolean hasNext() { + return this.nextEntry != LinkedHashMultimap.this.multimapHeaderEntry; + } + + @Override + public Map.Entry next() { + if (!this.hasNext()) { + throw new NoSuchElementException(); + } + ValueEntry result = this.nextEntry; + this.toRemove = result; + this.nextEntry = this.nextEntry.successorInMultimap; + return result; + } + + @Override + public void remove() { + CollectPreconditions.checkRemove(this.toRemove != null); + LinkedHashMultimap.this.remove(this.toRemove.getKey(), this.toRemove.getValue()); + this.toRemove = null; + } + }; + } + + @Override + Iterator valueIterator() { + return Maps.valueIterator(this.entryIterator()); + } + + @Override + public void clear() { + super.clear(); + LinkedHashMultimap.succeedsInMultimap(this.multimapHeaderEntry, this.multimapHeaderEntry); + } + + @GwtIncompatible(value="java.io.ObjectOutputStream") + private void writeObject(ObjectOutputStream stream) throws IOException { + stream.defaultWriteObject(); + stream.writeInt(this.valueSetCapacity); + stream.writeInt(this.keySet().size()); + for (Object key : this.keySet()) { + stream.writeObject(key); + } + stream.writeInt(this.size()); + for (Map.Entry entry : this.entries()) { + stream.writeObject(entry.getKey()); + stream.writeObject(entry.getValue()); + } + } + + @GwtIncompatible(value="java.io.ObjectInputStream") + private void readObject(ObjectInputStream stream) throws IOException, ClassNotFoundException { + stream.defaultReadObject(); + this.multimapHeaderEntry = new ValueEntry(null, null, 0, null); + LinkedHashMultimap.succeedsInMultimap(this.multimapHeaderEntry, this.multimapHeaderEntry); + this.valueSetCapacity = stream.readInt(); + int distinctKeys = stream.readInt(); + LinkedHashMap> map = new LinkedHashMap>(Maps.capacity(distinctKeys)); + for (int i = 0; i < distinctKeys; ++i) { + Object key = stream.readObject(); + map.put(key, this.createCollection(key)); + } + int entries = stream.readInt(); + for (int i = 0; i < entries; ++i) { + Object key = stream.readObject(); + Object value = stream.readObject(); + ((Collection)map.get(key)).add(value); + } + this.setMap(map); + } + + @VisibleForTesting + final class ValueSet + extends Sets.ImprovedAbstractSet + implements ValueSetLink { + private final K key; + @VisibleForTesting + ValueEntry[] hashTable; + private int size = 0; + private int modCount = 0; + private ValueSetLink firstEntry; + private ValueSetLink lastEntry; + + ValueSet(K key, int expectedValues) { + this.key = key; + this.firstEntry = this; + this.lastEntry = this; + int tableSize = Hashing.closedTableSize(expectedValues, 1.0); + ValueEntry[] hashTable = new ValueEntry[tableSize]; + this.hashTable = hashTable; + } + + private int mask() { + return this.hashTable.length - 1; + } + + @Override + public ValueSetLink getPredecessorInValueSet() { + return this.lastEntry; + } + + @Override + public ValueSetLink getSuccessorInValueSet() { + return this.firstEntry; + } + + @Override + public void setPredecessorInValueSet(ValueSetLink entry) { + this.lastEntry = entry; + } + + @Override + public void setSuccessorInValueSet(ValueSetLink entry) { + this.firstEntry = entry; + } + + @Override + public Iterator iterator() { + return new Iterator(){ + ValueSetLink nextEntry; + ValueEntry toRemove; + int expectedModCount; + { + this.nextEntry = ValueSet.this.firstEntry; + this.expectedModCount = ValueSet.this.modCount; + } + + private void checkForComodification() { + if (ValueSet.this.modCount != this.expectedModCount) { + throw new ConcurrentModificationException(); + } + } + + @Override + public boolean hasNext() { + this.checkForComodification(); + return this.nextEntry != ValueSet.this; + } + + @Override + public V next() { + if (!this.hasNext()) { + throw new NoSuchElementException(); + } + ValueEntry entry = (ValueEntry)this.nextEntry; + Object result = entry.getValue(); + this.toRemove = entry; + this.nextEntry = entry.getSuccessorInValueSet(); + return result; + } + + @Override + public void remove() { + this.checkForComodification(); + CollectPreconditions.checkRemove(this.toRemove != null); + ValueSet.this.remove(this.toRemove.getValue()); + this.expectedModCount = ValueSet.this.modCount; + this.toRemove = null; + } + }; + } + + @Override + public int size() { + return this.size; + } + + @Override + public boolean contains(@Nullable Object o) { + int smearedHash = Hashing.smearedHash(o); + ValueEntry entry = this.hashTable[smearedHash & this.mask()]; + while (entry != null) { + if (entry.matchesValue(o, smearedHash)) { + return true; + } + entry = entry.nextInValueBucket; + } + return false; + } + + @Override + public boolean add(@Nullable V value) { + ValueEntry rowHead; + int smearedHash = Hashing.smearedHash(value); + int bucket = smearedHash & this.mask(); + ValueEntry entry = rowHead = this.hashTable[bucket]; + while (entry != null) { + if (entry.matchesValue(value, smearedHash)) { + return false; + } + entry = entry.nextInValueBucket; + } + ValueEntry newEntry = new ValueEntry(this.key, value, smearedHash, rowHead); + LinkedHashMultimap.succeedsInValueSet(this.lastEntry, newEntry); + LinkedHashMultimap.succeedsInValueSet(newEntry, this); + LinkedHashMultimap.succeedsInMultimap(LinkedHashMultimap.this.multimapHeaderEntry.getPredecessorInMultimap(), newEntry); + LinkedHashMultimap.succeedsInMultimap(newEntry, LinkedHashMultimap.this.multimapHeaderEntry); + this.hashTable[bucket] = newEntry; + ++this.size; + ++this.modCount; + this.rehashIfNecessary(); + return true; + } + + private void rehashIfNecessary() { + if (Hashing.needsResizing(this.size, this.hashTable.length, 1.0)) { + ValueEntry[] hashTable = new ValueEntry[this.hashTable.length * 2]; + this.hashTable = hashTable; + int mask = hashTable.length - 1; + for (ValueSetLink entry = this.firstEntry; entry != this; entry = entry.getSuccessorInValueSet()) { + ValueEntry valueEntry = (ValueEntry)entry; + int bucket = valueEntry.smearedValueHash & mask; + valueEntry.nextInValueBucket = hashTable[bucket]; + hashTable[bucket] = valueEntry; + } + } + } + + @Override + public boolean remove(@Nullable Object o) { + int smearedHash = Hashing.smearedHash(o); + int bucket = smearedHash & this.mask(); + ValueEntry prev = null; + ValueEntry entry = this.hashTable[bucket]; + while (entry != null) { + if (entry.matchesValue(o, smearedHash)) { + if (prev == null) { + this.hashTable[bucket] = entry.nextInValueBucket; + } else { + prev.nextInValueBucket = entry.nextInValueBucket; + } + LinkedHashMultimap.deleteFromValueSet(entry); + LinkedHashMultimap.deleteFromMultimap(entry); + --this.size; + ++this.modCount; + return true; + } + prev = entry; + entry = entry.nextInValueBucket; + } + return false; + } + + @Override + public void clear() { + Arrays.fill(this.hashTable, null); + this.size = 0; + for (ValueSetLink entry = this.firstEntry; entry != this; entry = entry.getSuccessorInValueSet()) { + ValueEntry valueEntry = (ValueEntry)entry; + LinkedHashMultimap.deleteFromMultimap(valueEntry); + } + LinkedHashMultimap.succeedsInValueSet(this, this); + ++this.modCount; + } + } + + @VisibleForTesting + static final class ValueEntry + extends ImmutableEntry + implements ValueSetLink { + final int smearedValueHash; + @Nullable + ValueEntry nextInValueBucket; + ValueSetLink predecessorInValueSet; + ValueSetLink successorInValueSet; + ValueEntry predecessorInMultimap; + ValueEntry successorInMultimap; + + ValueEntry(@Nullable K key, @Nullable V value, int smearedValueHash, @Nullable ValueEntry nextInValueBucket) { + super(key, value); + this.smearedValueHash = smearedValueHash; + this.nextInValueBucket = nextInValueBucket; + } + + boolean matchesValue(@Nullable Object v, int smearedVHash) { + return this.smearedValueHash == smearedVHash && Objects.equal(this.getValue(), v); + } + + @Override + public ValueSetLink getPredecessorInValueSet() { + return this.predecessorInValueSet; + } + + @Override + public ValueSetLink getSuccessorInValueSet() { + return this.successorInValueSet; + } + + @Override + public void setPredecessorInValueSet(ValueSetLink entry) { + this.predecessorInValueSet = entry; + } + + @Override + public void setSuccessorInValueSet(ValueSetLink entry) { + this.successorInValueSet = entry; + } + + public ValueEntry getPredecessorInMultimap() { + return this.predecessorInMultimap; + } + + public ValueEntry getSuccessorInMultimap() { + return this.successorInMultimap; + } + + public void setSuccessorInMultimap(ValueEntry multimapSuccessor) { + this.successorInMultimap = multimapSuccessor; + } + + public void setPredecessorInMultimap(ValueEntry multimapPredecessor) { + this.predecessorInMultimap = multimapPredecessor; + } + } + + private static interface ValueSetLink { + public ValueSetLink getPredecessorInValueSet(); + + public ValueSetLink getSuccessorInValueSet(); + + public void setPredecessorInValueSet(ValueSetLink var1); + + public void setSuccessorInValueSet(ValueSetLink var1); + } +} diff --git a/src/com/google/common/collect/LinkedHashMultiset.java b/src/com/google/common/collect/LinkedHashMultiset.java new file mode 100644 index 0000000..8c1d47e --- /dev/null +++ b/src/com/google/common/collect/LinkedHashMultiset.java @@ -0,0 +1,59 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.GwtCompatible; +import com.google.common.annotations.GwtIncompatible; +import com.google.common.collect.AbstractMapBasedMultiset; +import com.google.common.collect.Iterables; +import com.google.common.collect.Maps; +import com.google.common.collect.Multisets; +import com.google.common.collect.Serialization; +import java.io.IOException; +import java.io.ObjectInputStream; +import java.io.ObjectOutputStream; +import java.util.LinkedHashMap; + +@GwtCompatible(serializable=true, emulated=true) +public final class LinkedHashMultiset +extends AbstractMapBasedMultiset { + @GwtIncompatible(value="not needed in emulated source") + private static final long serialVersionUID = 0L; + + public static LinkedHashMultiset create() { + return new LinkedHashMultiset(); + } + + public static LinkedHashMultiset create(int distinctElements) { + return new LinkedHashMultiset(distinctElements); + } + + public static LinkedHashMultiset create(Iterable elements) { + LinkedHashMultiset multiset = LinkedHashMultiset.create(Multisets.inferDistinctElements(elements)); + Iterables.addAll(multiset, elements); + return multiset; + } + + private LinkedHashMultiset() { + super(new LinkedHashMap()); + } + + private LinkedHashMultiset(int distinctElements) { + super(new LinkedHashMap(Maps.capacity(distinctElements))); + } + + @GwtIncompatible(value="java.io.ObjectOutputStream") + private void writeObject(ObjectOutputStream stream) throws IOException { + stream.defaultWriteObject(); + Serialization.writeMultiset(this, stream); + } + + @GwtIncompatible(value="java.io.ObjectInputStream") + private void readObject(ObjectInputStream stream) throws IOException, ClassNotFoundException { + stream.defaultReadObject(); + int distinctElements = Serialization.readCount(stream); + this.setBackingMap(new LinkedHashMap(Maps.capacity(distinctElements))); + Serialization.populateMultiset(this, stream, distinctElements); + } +} diff --git a/src/com/google/common/collect/LinkedListMultimap.java b/src/com/google/common/collect/LinkedListMultimap.java new file mode 100644 index 0000000..d066db4 --- /dev/null +++ b/src/com/google/common/collect/LinkedListMultimap.java @@ -0,0 +1,659 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.GwtCompatible; +import com.google.common.annotations.GwtIncompatible; +import com.google.common.base.Preconditions; +import com.google.common.collect.AbstractMapEntry; +import com.google.common.collect.AbstractMultimap; +import com.google.common.collect.CollectPreconditions; +import com.google.common.collect.Iterators; +import com.google.common.collect.ListMultimap; +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import com.google.common.collect.Multimap; +import com.google.common.collect.Multimaps; +import com.google.common.collect.Sets; +import com.google.common.collect.TransformedListIterator; +import java.io.IOException; +import java.io.ObjectInputStream; +import java.io.ObjectOutputStream; +import java.io.Serializable; +import java.util.AbstractSequentialList; +import java.util.Collection; +import java.util.Collections; +import java.util.ConcurrentModificationException; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.ListIterator; +import java.util.Map; +import java.util.NoSuchElementException; +import java.util.Set; +import javax.annotation.Nullable; + +@GwtCompatible(serializable=true, emulated=true) +public class LinkedListMultimap +extends AbstractMultimap +implements ListMultimap, +Serializable { + private transient Node head; + private transient Node tail; + private transient Map> keyToKeyList; + private transient int size; + private transient int modCount; + @GwtIncompatible(value="java serialization not supported") + private static final long serialVersionUID = 0L; + + public static LinkedListMultimap create() { + return new LinkedListMultimap(); + } + + public static LinkedListMultimap create(int expectedKeys) { + return new LinkedListMultimap(expectedKeys); + } + + public static LinkedListMultimap create(Multimap multimap) { + return new LinkedListMultimap(multimap); + } + + LinkedListMultimap() { + this.keyToKeyList = Maps.newHashMap(); + } + + private LinkedListMultimap(int expectedKeys) { + this.keyToKeyList = new HashMap>(expectedKeys); + } + + private LinkedListMultimap(Multimap multimap) { + this(multimap.keySet().size()); + this.putAll((Multimap)multimap); + } + + private Node addNode(@Nullable K key, @Nullable V value, @Nullable Node nextSibling) { + Node node = new Node(key, value); + if (this.head == null) { + this.tail = node; + this.head = this.tail; + this.keyToKeyList.put(key, new KeyList(node)); + ++this.modCount; + } else if (nextSibling == null) { + this.tail.next = node; + node.previous = this.tail; + this.tail = node; + KeyList keyList = this.keyToKeyList.get(key); + if (keyList == null) { + keyList = new KeyList(node); + this.keyToKeyList.put(key, keyList); + ++this.modCount; + } else { + ++keyList.count; + Node keyTail = keyList.tail; + keyTail.nextSibling = node; + node.previousSibling = keyTail; + keyList.tail = node; + } + } else { + KeyList keyList = this.keyToKeyList.get(key); + ++keyList.count; + node.previous = nextSibling.previous; + node.previousSibling = nextSibling.previousSibling; + node.next = nextSibling; + node.nextSibling = nextSibling; + if (nextSibling.previousSibling == null) { + this.keyToKeyList.get(key).head = node; + } else { + nextSibling.previousSibling.nextSibling = node; + } + if (nextSibling.previous == null) { + this.head = node; + } else { + nextSibling.previous.next = node; + } + nextSibling.previous = node; + nextSibling.previousSibling = node; + } + ++this.size; + return node; + } + + private void removeNode(Node node) { + if (node.previous != null) { + node.previous.next = node.next; + } else { + this.head = node.next; + } + if (node.next != null) { + node.next.previous = node.previous; + } else { + this.tail = node.previous; + } + if (node.previousSibling == null && node.nextSibling == null) { + KeyList keyList = this.keyToKeyList.remove(node.key); + keyList.count = 0; + ++this.modCount; + } else { + KeyList keyList = this.keyToKeyList.get(node.key); + --keyList.count; + if (node.previousSibling == null) { + keyList.head = node.nextSibling; + } else { + node.previousSibling.nextSibling = node.nextSibling; + } + if (node.nextSibling == null) { + keyList.tail = node.previousSibling; + } else { + node.nextSibling.previousSibling = node.previousSibling; + } + } + --this.size; + } + + private void removeAllNodes(@Nullable Object key) { + Iterators.clear(new ValueForKeyIterator(key)); + } + + private static void checkElement(@Nullable Object node) { + if (node == null) { + throw new NoSuchElementException(); + } + } + + @Override + public int size() { + return this.size; + } + + @Override + public boolean isEmpty() { + return this.head == null; + } + + @Override + public boolean containsKey(@Nullable Object key) { + return this.keyToKeyList.containsKey(key); + } + + @Override + public boolean containsValue(@Nullable Object value) { + return this.values().contains(value); + } + + @Override + public boolean put(@Nullable K key, @Nullable V value) { + this.addNode(key, value, null); + return true; + } + + @Override + public List replaceValues(@Nullable K key, Iterable values) { + List oldValues = this.getCopy(key); + ValueForKeyIterator keyValues = new ValueForKeyIterator(key); + Iterator newValues = values.iterator(); + while (keyValues.hasNext() && newValues.hasNext()) { + keyValues.next(); + keyValues.set(newValues.next()); + } + while (keyValues.hasNext()) { + keyValues.next(); + keyValues.remove(); + } + while (newValues.hasNext()) { + keyValues.add(newValues.next()); + } + return oldValues; + } + + private List getCopy(@Nullable Object key) { + return Collections.unmodifiableList(Lists.newArrayList(new ValueForKeyIterator(key))); + } + + @Override + public List removeAll(@Nullable Object key) { + List oldValues = this.getCopy(key); + this.removeAllNodes(key); + return oldValues; + } + + @Override + public void clear() { + this.head = null; + this.tail = null; + this.keyToKeyList.clear(); + this.size = 0; + ++this.modCount; + } + + @Override + public List get(final @Nullable K key) { + return new AbstractSequentialList(){ + + @Override + public int size() { + KeyList keyList = (KeyList)LinkedListMultimap.this.keyToKeyList.get(key); + return keyList == null ? 0 : keyList.count; + } + + @Override + public ListIterator listIterator(int index) { + return new ValueForKeyIterator(key, index); + } + }; + } + + @Override + Set createKeySet() { + return new Sets.ImprovedAbstractSet(){ + + @Override + public int size() { + return LinkedListMultimap.this.keyToKeyList.size(); + } + + @Override + public Iterator iterator() { + return new DistinctKeyIterator(); + } + + @Override + public boolean contains(Object key) { + return LinkedListMultimap.this.containsKey(key); + } + + @Override + public boolean remove(Object o) { + return !LinkedListMultimap.this.removeAll(o).isEmpty(); + } + }; + } + + @Override + public List values() { + return (List)super.values(); + } + + @Override + List createValues() { + return new AbstractSequentialList(){ + + @Override + public int size() { + return LinkedListMultimap.this.size; + } + + @Override + public ListIterator listIterator(int index) { + final NodeIterator nodeItr = new NodeIterator(index); + return new TransformedListIterator, V>(nodeItr){ + + @Override + V transform(Map.Entry entry) { + return entry.getValue(); + } + + @Override + public void set(V value) { + nodeItr.setValue(value); + } + }; + } + }; + } + + @Override + public List> entries() { + return (List)super.entries(); + } + + @Override + List> createEntries() { + return new AbstractSequentialList>(){ + + @Override + public int size() { + return LinkedListMultimap.this.size; + } + + @Override + public ListIterator> listIterator(int index) { + return new NodeIterator(index); + } + }; + } + + @Override + Iterator> entryIterator() { + throw new AssertionError((Object)"should never be called"); + } + + @Override + Map> createAsMap() { + return new Multimaps.AsMap(this); + } + + @GwtIncompatible(value="java.io.ObjectOutputStream") + private void writeObject(ObjectOutputStream stream) throws IOException { + stream.defaultWriteObject(); + stream.writeInt(this.size()); + for (Map.Entry entry : this.entries()) { + stream.writeObject(entry.getKey()); + stream.writeObject(entry.getValue()); + } + } + + @GwtIncompatible(value="java.io.ObjectInputStream") + private void readObject(ObjectInputStream stream) throws IOException, ClassNotFoundException { + stream.defaultReadObject(); + this.keyToKeyList = Maps.newLinkedHashMap(); + int size = stream.readInt(); + for (int i = 0; i < size; ++i) { + Object key = stream.readObject(); + Object value = stream.readObject(); + this.put(key, value); + } + } + + private class ValueForKeyIterator + implements ListIterator { + final Object key; + int nextIndex; + Node next; + Node current; + Node previous; + + ValueForKeyIterator(Object key) { + this.key = key; + KeyList keyList = (KeyList)LinkedListMultimap.this.keyToKeyList.get(key); + this.next = keyList == null ? null : keyList.head; + } + + public ValueForKeyIterator(Object key, int index) { + KeyList keyList = (KeyList)LinkedListMultimap.this.keyToKeyList.get(key); + int size = keyList == null ? 0 : keyList.count; + Preconditions.checkPositionIndex(index, size); + if (index >= size / 2) { + this.previous = keyList == null ? null : keyList.tail; + this.nextIndex = size; + while (index++ < size) { + this.previous(); + } + } else { + Node node = this.next = keyList == null ? null : keyList.head; + while (index-- > 0) { + this.next(); + } + } + this.key = key; + this.current = null; + } + + @Override + public boolean hasNext() { + return this.next != null; + } + + @Override + public V next() { + LinkedListMultimap.checkElement(this.next); + this.current = this.next; + this.previous = this.current; + this.next = this.next.nextSibling; + ++this.nextIndex; + return this.current.value; + } + + @Override + public boolean hasPrevious() { + return this.previous != null; + } + + @Override + public V previous() { + LinkedListMultimap.checkElement(this.previous); + this.current = this.previous; + this.next = this.current; + this.previous = this.previous.previousSibling; + --this.nextIndex; + return this.current.value; + } + + @Override + public int nextIndex() { + return this.nextIndex; + } + + @Override + public int previousIndex() { + return this.nextIndex - 1; + } + + @Override + public void remove() { + CollectPreconditions.checkRemove(this.current != null); + if (this.current != this.next) { + this.previous = this.current.previousSibling; + --this.nextIndex; + } else { + this.next = this.current.nextSibling; + } + LinkedListMultimap.this.removeNode(this.current); + this.current = null; + } + + @Override + public void set(V value) { + Preconditions.checkState(this.current != null); + this.current.value = value; + } + + @Override + public void add(V value) { + this.previous = LinkedListMultimap.this.addNode(this.key, value, this.next); + ++this.nextIndex; + this.current = null; + } + } + + private class DistinctKeyIterator + implements Iterator { + final Set seenKeys; + Node next; + Node current; + int expectedModCount; + + private DistinctKeyIterator() { + this.seenKeys = Sets.newHashSetWithExpectedSize(LinkedListMultimap.this.keySet().size()); + this.next = LinkedListMultimap.this.head; + this.expectedModCount = LinkedListMultimap.this.modCount; + } + + private void checkForConcurrentModification() { + if (LinkedListMultimap.this.modCount != this.expectedModCount) { + throw new ConcurrentModificationException(); + } + } + + @Override + public boolean hasNext() { + this.checkForConcurrentModification(); + return this.next != null; + } + + @Override + public K next() { + this.checkForConcurrentModification(); + LinkedListMultimap.checkElement(this.next); + this.current = this.next; + this.seenKeys.add(this.current.key); + do { + this.next = this.next.next; + } while (this.next != null && !this.seenKeys.add(this.next.key)); + return this.current.key; + } + + @Override + public void remove() { + this.checkForConcurrentModification(); + CollectPreconditions.checkRemove(this.current != null); + LinkedListMultimap.this.removeAllNodes(this.current.key); + this.current = null; + this.expectedModCount = LinkedListMultimap.this.modCount; + } + } + + private class NodeIterator + implements ListIterator> { + int nextIndex; + Node next; + Node current; + Node previous; + int expectedModCount; + + NodeIterator(int index) { + this.expectedModCount = LinkedListMultimap.this.modCount; + int size = LinkedListMultimap.this.size(); + Preconditions.checkPositionIndex(index, size); + if (index >= size / 2) { + this.previous = LinkedListMultimap.this.tail; + this.nextIndex = size; + while (index++ < size) { + this.previous(); + } + } else { + this.next = LinkedListMultimap.this.head; + while (index-- > 0) { + this.next(); + } + } + this.current = null; + } + + private void checkForConcurrentModification() { + if (LinkedListMultimap.this.modCount != this.expectedModCount) { + throw new ConcurrentModificationException(); + } + } + + @Override + public boolean hasNext() { + this.checkForConcurrentModification(); + return this.next != null; + } + + @Override + public Node next() { + this.checkForConcurrentModification(); + LinkedListMultimap.checkElement(this.next); + this.current = this.next; + this.previous = this.current; + this.next = this.next.next; + ++this.nextIndex; + return this.current; + } + + @Override + public void remove() { + this.checkForConcurrentModification(); + CollectPreconditions.checkRemove(this.current != null); + if (this.current != this.next) { + this.previous = this.current.previous; + --this.nextIndex; + } else { + this.next = this.current.next; + } + LinkedListMultimap.this.removeNode(this.current); + this.current = null; + this.expectedModCount = LinkedListMultimap.this.modCount; + } + + @Override + public boolean hasPrevious() { + this.checkForConcurrentModification(); + return this.previous != null; + } + + @Override + public Node previous() { + this.checkForConcurrentModification(); + LinkedListMultimap.checkElement(this.previous); + this.current = this.previous; + this.next = this.current; + this.previous = this.previous.previous; + --this.nextIndex; + return this.current; + } + + @Override + public int nextIndex() { + return this.nextIndex; + } + + @Override + public int previousIndex() { + return this.nextIndex - 1; + } + + @Override + public void set(Map.Entry e) { + throw new UnsupportedOperationException(); + } + + @Override + public void add(Map.Entry e) { + throw new UnsupportedOperationException(); + } + + void setValue(V value) { + Preconditions.checkState(this.current != null); + this.current.value = value; + } + } + + private static class KeyList { + Node head; + Node tail; + int count; + + KeyList(Node firstNode) { + this.head = firstNode; + this.tail = firstNode; + firstNode.previousSibling = null; + firstNode.nextSibling = null; + this.count = 1; + } + } + + private static final class Node + extends AbstractMapEntry { + final K key; + V value; + Node next; + Node previous; + Node nextSibling; + Node previousSibling; + + Node(@Nullable K key, @Nullable V value) { + this.key = key; + this.value = value; + } + + @Override + public K getKey() { + return this.key; + } + + @Override + public V getValue() { + return this.value; + } + + @Override + public V setValue(@Nullable V newValue) { + V result = this.value; + this.value = newValue; + return result; + } + } +} diff --git a/src/com/google/common/collect/ListMultimap.java b/src/com/google/common/collect/ListMultimap.java new file mode 100644 index 0000000..256bf1d --- /dev/null +++ b/src/com/google/common/collect/ListMultimap.java @@ -0,0 +1,30 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.GwtCompatible; +import com.google.common.collect.Multimap; +import java.util.Collection; +import java.util.List; +import java.util.Map; +import javax.annotation.Nullable; + +@GwtCompatible +public interface ListMultimap +extends Multimap { + @Override + public List get(@Nullable K var1); + + @Override + public List removeAll(@Nullable Object var1); + + @Override + public List replaceValues(K var1, Iterable var2); + + @Override + public Map> asMap(); + + @Override + public boolean equals(@Nullable Object var1); +} diff --git a/src/com/google/common/collect/Lists.java b/src/com/google/common/collect/Lists.java new file mode 100644 index 0000000..a30697a --- /dev/null +++ b/src/com/google/common/collect/Lists.java @@ -0,0 +1,679 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.Beta; +import com.google.common.annotations.GwtCompatible; +import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.VisibleForTesting; +import com.google.common.base.Function; +import com.google.common.base.Objects; +import com.google.common.base.Preconditions; +import com.google.common.collect.CartesianList; +import com.google.common.collect.CollectPreconditions; +import com.google.common.collect.Collections2; +import com.google.common.collect.ImmutableList; +import com.google.common.collect.Iterables; +import com.google.common.collect.Iterators; +import com.google.common.collect.TransformedListIterator; +import com.google.common.math.IntMath; +import com.google.common.primitives.Ints; +import java.io.Serializable; +import java.math.RoundingMode; +import java.util.AbstractList; +import java.util.AbstractSequentialList; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.Collections; +import java.util.Iterator; +import java.util.LinkedList; +import java.util.List; +import java.util.ListIterator; +import java.util.NoSuchElementException; +import java.util.RandomAccess; +import java.util.concurrent.CopyOnWriteArrayList; +import javax.annotation.Nullable; + +@GwtCompatible(emulated=true) +public final class Lists { + private Lists() { + } + + @GwtCompatible(serializable=true) + public static ArrayList newArrayList() { + return new ArrayList(); + } + + @GwtCompatible(serializable=true) + public static ArrayList newArrayList(E ... elements) { + Preconditions.checkNotNull(elements); + int capacity = Lists.computeArrayListCapacity(elements.length); + ArrayList list = new ArrayList(capacity); + Collections.addAll(list, elements); + return list; + } + + @VisibleForTesting + static int computeArrayListCapacity(int arraySize) { + CollectPreconditions.checkNonnegative(arraySize, "arraySize"); + return Ints.saturatedCast(5L + (long)arraySize + (long)(arraySize / 10)); + } + + @GwtCompatible(serializable=true) + public static ArrayList newArrayList(Iterable elements) { + Preconditions.checkNotNull(elements); + return elements instanceof Collection ? new ArrayList(Collections2.cast(elements)) : Lists.newArrayList(elements.iterator()); + } + + @GwtCompatible(serializable=true) + public static ArrayList newArrayList(Iterator elements) { + ArrayList list = Lists.newArrayList(); + Iterators.addAll(list, elements); + return list; + } + + @GwtCompatible(serializable=true) + public static ArrayList newArrayListWithCapacity(int initialArraySize) { + CollectPreconditions.checkNonnegative(initialArraySize, "initialArraySize"); + return new ArrayList(initialArraySize); + } + + @GwtCompatible(serializable=true) + public static ArrayList newArrayListWithExpectedSize(int estimatedSize) { + return new ArrayList(Lists.computeArrayListCapacity(estimatedSize)); + } + + @GwtCompatible(serializable=true) + public static LinkedList newLinkedList() { + return new LinkedList(); + } + + @GwtCompatible(serializable=true) + public static LinkedList newLinkedList(Iterable elements) { + LinkedList list = Lists.newLinkedList(); + Iterables.addAll(list, elements); + return list; + } + + @GwtIncompatible(value="CopyOnWriteArrayList") + public static CopyOnWriteArrayList newCopyOnWriteArrayList() { + return new CopyOnWriteArrayList(); + } + + @GwtIncompatible(value="CopyOnWriteArrayList") + public static CopyOnWriteArrayList newCopyOnWriteArrayList(Iterable elements) { + Collection elementsCollection = elements instanceof Collection ? Collections2.cast(elements) : Lists.newArrayList(elements); + return new CopyOnWriteArrayList(elementsCollection); + } + + public static List asList(@Nullable E first, E[] rest) { + return new OnePlusArrayList(first, rest); + } + + public static List asList(@Nullable E first, @Nullable E second, E[] rest) { + return new TwoPlusArrayList(first, second, rest); + } + + static List> cartesianProduct(List> lists) { + return CartesianList.create(lists); + } + + static List> cartesianProduct(List ... lists) { + return Lists.cartesianProduct(Arrays.asList(lists)); + } + + public static List transform(List fromList, Function function) { + return fromList instanceof RandomAccess ? new TransformingRandomAccessList(fromList, function) : new TransformingSequentialList(fromList, function); + } + + public static List> partition(List list, int size) { + Preconditions.checkNotNull(list); + Preconditions.checkArgument(size > 0); + return list instanceof RandomAccess ? new RandomAccessPartition(list, size) : new Partition(list, size); + } + + @Beta + public static ImmutableList charactersOf(String string) { + return new StringAsImmutableList(Preconditions.checkNotNull(string)); + } + + @Beta + public static List charactersOf(CharSequence sequence) { + return new CharSequenceAsList(Preconditions.checkNotNull(sequence)); + } + + public static List reverse(List list) { + if (list instanceof ImmutableList) { + return ((ImmutableList)list).reverse(); + } + if (list instanceof ReverseList) { + return ((ReverseList)list).getForwardList(); + } + if (list instanceof RandomAccess) { + return new RandomAccessReverseList(list); + } + return new ReverseList(list); + } + + static int hashCodeImpl(List list) { + int hashCode = 1; + for (Object o : list) { + hashCode = 31 * hashCode + (o == null ? 0 : o.hashCode()); + hashCode = ~(~hashCode); + } + return hashCode; + } + + static boolean equalsImpl(List list, @Nullable Object object) { + if (object == Preconditions.checkNotNull(list)) { + return true; + } + if (!(object instanceof List)) { + return false; + } + List o = (List)object; + return list.size() == o.size() && Iterators.elementsEqual(list.iterator(), o.iterator()); + } + + static boolean addAllImpl(List list, int index, Iterable elements) { + boolean changed = false; + ListIterator listIterator = list.listIterator(index); + for (E e : elements) { + listIterator.add(e); + changed = true; + } + return changed; + } + + static int indexOfImpl(List list, @Nullable Object element) { + ListIterator listIterator = list.listIterator(); + while (listIterator.hasNext()) { + if (!Objects.equal(element, listIterator.next())) continue; + return listIterator.previousIndex(); + } + return -1; + } + + static int lastIndexOfImpl(List list, @Nullable Object element) { + ListIterator listIterator = list.listIterator(list.size()); + while (listIterator.hasPrevious()) { + if (!Objects.equal(element, listIterator.previous())) continue; + return listIterator.nextIndex(); + } + return -1; + } + + static ListIterator listIteratorImpl(List list, int index) { + return new AbstractListWrapper(list).listIterator(index); + } + + static List subListImpl(List list, int fromIndex, int toIndex) { + AbstractListWrapper wrapper = list instanceof RandomAccess ? new RandomAccessListWrapper((List)list){ + private static final long serialVersionUID = 0L; + + @Override + public ListIterator listIterator(int index) { + return this.backingList.listIterator(index); + } + } : new AbstractListWrapper((List)list){ + private static final long serialVersionUID = 0L; + + @Override + public ListIterator listIterator(int index) { + return this.backingList.listIterator(index); + } + }; + return wrapper.subList(fromIndex, toIndex); + } + + static List cast(Iterable iterable) { + return (List)iterable; + } + + private static class RandomAccessListWrapper + extends AbstractListWrapper + implements RandomAccess { + RandomAccessListWrapper(List backingList) { + super(backingList); + } + } + + private static class AbstractListWrapper + extends AbstractList { + final List backingList; + + AbstractListWrapper(List backingList) { + this.backingList = Preconditions.checkNotNull(backingList); + } + + @Override + public void add(int index, E element) { + this.backingList.add(index, element); + } + + @Override + public boolean addAll(int index, Collection c) { + return this.backingList.addAll(index, c); + } + + @Override + public E get(int index) { + return this.backingList.get(index); + } + + @Override + public E remove(int index) { + return this.backingList.remove(index); + } + + @Override + public E set(int index, E element) { + return this.backingList.set(index, element); + } + + @Override + public boolean contains(Object o) { + return this.backingList.contains(o); + } + + @Override + public int size() { + return this.backingList.size(); + } + } + + private static class RandomAccessReverseList + extends ReverseList + implements RandomAccess { + RandomAccessReverseList(List forwardList) { + super(forwardList); + } + } + + private static class ReverseList + extends AbstractList { + private final List forwardList; + + ReverseList(List forwardList) { + this.forwardList = Preconditions.checkNotNull(forwardList); + } + + List getForwardList() { + return this.forwardList; + } + + private int reverseIndex(int index) { + int size = this.size(); + Preconditions.checkElementIndex(index, size); + return size - 1 - index; + } + + private int reversePosition(int index) { + int size = this.size(); + Preconditions.checkPositionIndex(index, size); + return size - index; + } + + @Override + public void add(int index, @Nullable T element) { + this.forwardList.add(this.reversePosition(index), element); + } + + @Override + public void clear() { + this.forwardList.clear(); + } + + @Override + public T remove(int index) { + return this.forwardList.remove(this.reverseIndex(index)); + } + + @Override + protected void removeRange(int fromIndex, int toIndex) { + this.subList(fromIndex, toIndex).clear(); + } + + @Override + public T set(int index, @Nullable T element) { + return this.forwardList.set(this.reverseIndex(index), element); + } + + @Override + public T get(int index) { + return this.forwardList.get(this.reverseIndex(index)); + } + + @Override + public int size() { + return this.forwardList.size(); + } + + @Override + public List subList(int fromIndex, int toIndex) { + Preconditions.checkPositionIndexes(fromIndex, toIndex, this.size()); + return Lists.reverse(this.forwardList.subList(this.reversePosition(toIndex), this.reversePosition(fromIndex))); + } + + @Override + public Iterator iterator() { + return this.listIterator(); + } + + @Override + public ListIterator listIterator(int index) { + int start = this.reversePosition(index); + final ListIterator forwardIterator = this.forwardList.listIterator(start); + return new ListIterator(){ + boolean canRemoveOrSet; + + @Override + public void add(T e) { + forwardIterator.add(e); + forwardIterator.previous(); + this.canRemoveOrSet = false; + } + + @Override + public boolean hasNext() { + return forwardIterator.hasPrevious(); + } + + @Override + public boolean hasPrevious() { + return forwardIterator.hasNext(); + } + + @Override + public T next() { + if (!this.hasNext()) { + throw new NoSuchElementException(); + } + this.canRemoveOrSet = true; + return forwardIterator.previous(); + } + + @Override + public int nextIndex() { + return ReverseList.this.reversePosition(forwardIterator.nextIndex()); + } + + @Override + public T previous() { + if (!this.hasPrevious()) { + throw new NoSuchElementException(); + } + this.canRemoveOrSet = true; + return forwardIterator.next(); + } + + @Override + public int previousIndex() { + return this.nextIndex() - 1; + } + + @Override + public void remove() { + CollectPreconditions.checkRemove(this.canRemoveOrSet); + forwardIterator.remove(); + this.canRemoveOrSet = false; + } + + @Override + public void set(T e) { + Preconditions.checkState(this.canRemoveOrSet); + forwardIterator.set(e); + } + }; + } + } + + private static final class CharSequenceAsList + extends AbstractList { + private final CharSequence sequence; + + CharSequenceAsList(CharSequence sequence) { + this.sequence = sequence; + } + + @Override + public Character get(int index) { + Preconditions.checkElementIndex(index, this.size()); + return Character.valueOf(this.sequence.charAt(index)); + } + + @Override + public int size() { + return this.sequence.length(); + } + } + + private static final class StringAsImmutableList + extends ImmutableList { + private final String string; + + StringAsImmutableList(String string) { + this.string = string; + } + + @Override + public int indexOf(@Nullable Object object) { + return object instanceof Character ? this.string.indexOf(((Character)object).charValue()) : -1; + } + + @Override + public int lastIndexOf(@Nullable Object object) { + return object instanceof Character ? this.string.lastIndexOf(((Character)object).charValue()) : -1; + } + + @Override + public ImmutableList subList(int fromIndex, int toIndex) { + Preconditions.checkPositionIndexes(fromIndex, toIndex, this.size()); + return Lists.charactersOf(this.string.substring(fromIndex, toIndex)); + } + + @Override + boolean isPartialView() { + return false; + } + + @Override + public Character get(int index) { + Preconditions.checkElementIndex(index, this.size()); + return Character.valueOf(this.string.charAt(index)); + } + + @Override + public int size() { + return this.string.length(); + } + } + + private static class RandomAccessPartition + extends Partition + implements RandomAccess { + RandomAccessPartition(List list, int size) { + super(list, size); + } + } + + private static class Partition + extends AbstractList> { + final List list; + final int size; + + Partition(List list, int size) { + this.list = list; + this.size = size; + } + + @Override + public List get(int index) { + Preconditions.checkElementIndex(index, this.size()); + int start = index * this.size; + int end = Math.min(start + this.size, this.list.size()); + return this.list.subList(start, end); + } + + @Override + public int size() { + return IntMath.divide(this.list.size(), this.size, RoundingMode.CEILING); + } + + @Override + public boolean isEmpty() { + return this.list.isEmpty(); + } + } + + private static class TransformingRandomAccessList + extends AbstractList + implements RandomAccess, + Serializable { + final List fromList; + final Function function; + private static final long serialVersionUID = 0L; + + TransformingRandomAccessList(List fromList, Function function) { + this.fromList = Preconditions.checkNotNull(fromList); + this.function = Preconditions.checkNotNull(function); + } + + @Override + public void clear() { + this.fromList.clear(); + } + + @Override + public T get(int index) { + return this.function.apply(this.fromList.get(index)); + } + + @Override + public Iterator iterator() { + return this.listIterator(); + } + + @Override + public ListIterator listIterator(int index) { + return new TransformedListIterator(this.fromList.listIterator(index)){ + + @Override + T transform(F from) { + return TransformingRandomAccessList.this.function.apply(from); + } + }; + } + + @Override + public boolean isEmpty() { + return this.fromList.isEmpty(); + } + + @Override + public T remove(int index) { + return this.function.apply(this.fromList.remove(index)); + } + + @Override + public int size() { + return this.fromList.size(); + } + } + + private static class TransformingSequentialList + extends AbstractSequentialList + implements Serializable { + final List fromList; + final Function function; + private static final long serialVersionUID = 0L; + + TransformingSequentialList(List fromList, Function function) { + this.fromList = Preconditions.checkNotNull(fromList); + this.function = Preconditions.checkNotNull(function); + } + + @Override + public void clear() { + this.fromList.clear(); + } + + @Override + public int size() { + return this.fromList.size(); + } + + @Override + public ListIterator listIterator(int index) { + return new TransformedListIterator(this.fromList.listIterator(index)){ + + @Override + T transform(F from) { + return TransformingSequentialList.this.function.apply(from); + } + }; + } + } + + private static class TwoPlusArrayList + extends AbstractList + implements Serializable, + RandomAccess { + final E first; + final E second; + final E[] rest; + private static final long serialVersionUID = 0L; + + TwoPlusArrayList(@Nullable E first, @Nullable E second, E[] rest) { + this.first = first; + this.second = second; + this.rest = Preconditions.checkNotNull(rest); + } + + @Override + public int size() { + return this.rest.length + 2; + } + + @Override + public E get(int index) { + switch (index) { + case 0: { + return this.first; + } + case 1: { + return this.second; + } + } + Preconditions.checkElementIndex(index, this.size()); + return this.rest[index - 2]; + } + } + + private static class OnePlusArrayList + extends AbstractList + implements Serializable, + RandomAccess { + final E first; + final E[] rest; + private static final long serialVersionUID = 0L; + + OnePlusArrayList(@Nullable E first, E[] rest) { + this.first = first; + this.rest = Preconditions.checkNotNull(rest); + } + + @Override + public int size() { + return this.rest.length + 1; + } + + @Override + public E get(int index) { + Preconditions.checkElementIndex(index, this.size()); + return index == 0 ? this.first : this.rest[index - 1]; + } + } +} diff --git a/src/com/google/common/collect/MapConstraint.java b/src/com/google/common/collect/MapConstraint.java new file mode 100644 index 0000000..86c4cb8 --- /dev/null +++ b/src/com/google/common/collect/MapConstraint.java @@ -0,0 +1,16 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.Beta; +import com.google.common.annotations.GwtCompatible; +import javax.annotation.Nullable; + +@GwtCompatible +@Beta +public interface MapConstraint { + public void checkKeyValue(@Nullable K var1, @Nullable V var2); + + public String toString(); +} diff --git a/src/com/google/common/collect/MapConstraints.java b/src/com/google/common/collect/MapConstraints.java new file mode 100644 index 0000000..7bc4779 --- /dev/null +++ b/src/com/google/common/collect/MapConstraints.java @@ -0,0 +1,680 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.Beta; +import com.google.common.annotations.GwtCompatible; +import com.google.common.base.Preconditions; +import com.google.common.collect.BiMap; +import com.google.common.collect.Constraint; +import com.google.common.collect.Constraints; +import com.google.common.collect.ForwardingCollection; +import com.google.common.collect.ForwardingIterator; +import com.google.common.collect.ForwardingMap; +import com.google.common.collect.ForwardingMapEntry; +import com.google.common.collect.ForwardingMultimap; +import com.google.common.collect.ForwardingSet; +import com.google.common.collect.ListMultimap; +import com.google.common.collect.Lists; +import com.google.common.collect.MapConstraint; +import com.google.common.collect.Maps; +import com.google.common.collect.Multimap; +import com.google.common.collect.SetMultimap; +import com.google.common.collect.Sets; +import com.google.common.collect.SortedSetMultimap; +import java.io.Serializable; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Comparator; +import java.util.Iterator; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.SortedSet; +import javax.annotation.Nullable; + +@Beta +@GwtCompatible +public final class MapConstraints { + private MapConstraints() { + } + + public static MapConstraint notNull() { + return NotNullMapConstraint.INSTANCE; + } + + public static Map constrainedMap(Map map, MapConstraint constraint) { + return new ConstrainedMap(map, constraint); + } + + public static Multimap constrainedMultimap(Multimap multimap, MapConstraint constraint) { + return new ConstrainedMultimap(multimap, constraint); + } + + public static ListMultimap constrainedListMultimap(ListMultimap multimap, MapConstraint constraint) { + return new ConstrainedListMultimap(multimap, constraint); + } + + public static SetMultimap constrainedSetMultimap(SetMultimap multimap, MapConstraint constraint) { + return new ConstrainedSetMultimap(multimap, constraint); + } + + public static SortedSetMultimap constrainedSortedSetMultimap(SortedSetMultimap multimap, MapConstraint constraint) { + return new ConstrainedSortedSetMultimap(multimap, constraint); + } + + private static Map.Entry constrainedEntry(final Map.Entry entry, final MapConstraint constraint) { + Preconditions.checkNotNull(entry); + Preconditions.checkNotNull(constraint); + return new ForwardingMapEntry(){ + + @Override + protected Map.Entry delegate() { + return entry; + } + + @Override + public V setValue(V value) { + constraint.checkKeyValue(this.getKey(), value); + return entry.setValue(value); + } + }; + } + + private static Map.Entry> constrainedAsMapEntry(final Map.Entry> entry, final MapConstraint constraint) { + Preconditions.checkNotNull(entry); + Preconditions.checkNotNull(constraint); + return new ForwardingMapEntry>(){ + + @Override + protected Map.Entry> delegate() { + return entry; + } + + @Override + public Collection getValue() { + return Constraints.constrainedTypePreservingCollection((Collection)entry.getValue(), new Constraint(){ + + @Override + public V checkElement(V value) { + constraint.checkKeyValue(this.getKey(), value); + return value; + } + }); + } + }; + } + + private static Set>> constrainedAsMapEntries(Set>> entries, MapConstraint constraint) { + return new ConstrainedAsMapEntries(entries, constraint); + } + + private static Collection> constrainedEntries(Collection> entries, MapConstraint constraint) { + if (entries instanceof Set) { + return MapConstraints.constrainedEntrySet((Set)entries, constraint); + } + return new ConstrainedEntries(entries, constraint); + } + + private static Set> constrainedEntrySet(Set> entries, MapConstraint constraint) { + return new ConstrainedEntrySet(entries, constraint); + } + + public static BiMap constrainedBiMap(BiMap map, MapConstraint constraint) { + return new ConstrainedBiMap(map, null, constraint); + } + + private static Collection checkValues(K key, Iterable values, MapConstraint constraint) { + ArrayList copy = Lists.newArrayList(values); + for (Object value : copy) { + constraint.checkKeyValue(key, value); + } + return copy; + } + + private static Map checkMap(Map map, MapConstraint constraint) { + LinkedHashMap copy = new LinkedHashMap(map); + for (Map.Entry entry : copy.entrySet()) { + constraint.checkKeyValue(entry.getKey(), entry.getValue()); + } + return copy; + } + + private static class ConstrainedSortedSetMultimap + extends ConstrainedSetMultimap + implements SortedSetMultimap { + ConstrainedSortedSetMultimap(SortedSetMultimap delegate, MapConstraint constraint) { + super(delegate, constraint); + } + + @Override + public SortedSet get(K key) { + return (SortedSet)super.get((Object)key); + } + + @Override + public SortedSet removeAll(Object key) { + return (SortedSet)super.removeAll(key); + } + + @Override + public SortedSet replaceValues(K key, Iterable values) { + return (SortedSet)super.replaceValues((Object)key, (Iterable)values); + } + + @Override + public Comparator valueComparator() { + return ((SortedSetMultimap)this.delegate()).valueComparator(); + } + } + + private static class ConstrainedSetMultimap + extends ConstrainedMultimap + implements SetMultimap { + ConstrainedSetMultimap(SetMultimap delegate, MapConstraint constraint) { + super(delegate, constraint); + } + + @Override + public Set get(K key) { + return (Set)super.get(key); + } + + @Override + public Set> entries() { + return (Set)super.entries(); + } + + @Override + public Set removeAll(Object key) { + return (Set)super.removeAll(key); + } + + @Override + public Set replaceValues(K key, Iterable values) { + return (Set)super.replaceValues(key, values); + } + } + + private static class ConstrainedListMultimap + extends ConstrainedMultimap + implements ListMultimap { + ConstrainedListMultimap(ListMultimap delegate, MapConstraint constraint) { + super(delegate, constraint); + } + + @Override + public List get(K key) { + return (List)super.get(key); + } + + @Override + public List removeAll(Object key) { + return (List)super.removeAll(key); + } + + @Override + public List replaceValues(K key, Iterable values) { + return (List)super.replaceValues(key, values); + } + } + + static class ConstrainedAsMapEntries + extends ForwardingSet>> { + private final MapConstraint constraint; + private final Set>> entries; + + ConstrainedAsMapEntries(Set>> entries, MapConstraint constraint) { + this.entries = entries; + this.constraint = constraint; + } + + @Override + protected Set>> delegate() { + return this.entries; + } + + @Override + public Iterator>> iterator() { + final Iterator>> iterator = this.entries.iterator(); + return new ForwardingIterator>>(){ + + @Override + public Map.Entry> next() { + return MapConstraints.constrainedAsMapEntry((Map.Entry)iterator.next(), ConstrainedAsMapEntries.this.constraint); + } + + @Override + protected Iterator>> delegate() { + return iterator; + } + }; + } + + @Override + public Object[] toArray() { + return this.standardToArray(); + } + + @Override + public T[] toArray(T[] array) { + return this.standardToArray(array); + } + + @Override + public boolean contains(Object o) { + return Maps.containsEntryImpl(this.delegate(), o); + } + + @Override + public boolean containsAll(Collection c) { + return this.standardContainsAll(c); + } + + @Override + public boolean equals(@Nullable Object object) { + return this.standardEquals(object); + } + + @Override + public int hashCode() { + return this.standardHashCode(); + } + + @Override + public boolean remove(Object o) { + return Maps.removeEntryImpl(this.delegate(), o); + } + + @Override + public boolean removeAll(Collection c) { + return this.standardRemoveAll(c); + } + + @Override + public boolean retainAll(Collection c) { + return this.standardRetainAll(c); + } + } + + static class ConstrainedEntrySet + extends ConstrainedEntries + implements Set> { + ConstrainedEntrySet(Set> entries, MapConstraint constraint) { + super(entries, constraint); + } + + @Override + public boolean equals(@Nullable Object object) { + return Sets.equalsImpl(this, object); + } + + @Override + public int hashCode() { + return Sets.hashCodeImpl(this); + } + } + + private static class ConstrainedEntries + extends ForwardingCollection> { + final MapConstraint constraint; + final Collection> entries; + + ConstrainedEntries(Collection> entries, MapConstraint constraint) { + this.entries = entries; + this.constraint = constraint; + } + + @Override + protected Collection> delegate() { + return this.entries; + } + + @Override + public Iterator> iterator() { + final Iterator> iterator = this.entries.iterator(); + return new ForwardingIterator>(){ + + @Override + public Map.Entry next() { + return MapConstraints.constrainedEntry((Map.Entry)iterator.next(), ConstrainedEntries.this.constraint); + } + + @Override + protected Iterator> delegate() { + return iterator; + } + }; + } + + @Override + public Object[] toArray() { + return this.standardToArray(); + } + + @Override + public T[] toArray(T[] array) { + return this.standardToArray(array); + } + + @Override + public boolean contains(Object o) { + return Maps.containsEntryImpl(this.delegate(), o); + } + + @Override + public boolean containsAll(Collection c) { + return this.standardContainsAll(c); + } + + @Override + public boolean remove(Object o) { + return Maps.removeEntryImpl(this.delegate(), o); + } + + @Override + public boolean removeAll(Collection c) { + return this.standardRemoveAll(c); + } + + @Override + public boolean retainAll(Collection c) { + return this.standardRetainAll(c); + } + } + + private static class ConstrainedAsMapValues + extends ForwardingCollection> { + final Collection> delegate; + final Set>> entrySet; + + ConstrainedAsMapValues(Collection> delegate, Set>> entrySet) { + this.delegate = delegate; + this.entrySet = entrySet; + } + + @Override + protected Collection> delegate() { + return this.delegate; + } + + @Override + public Iterator> iterator() { + final Iterator>> iterator = this.entrySet.iterator(); + return new Iterator>(){ + + @Override + public boolean hasNext() { + return iterator.hasNext(); + } + + @Override + public Collection next() { + return (Collection)((Map.Entry)iterator.next()).getValue(); + } + + @Override + public void remove() { + iterator.remove(); + } + }; + } + + @Override + public Object[] toArray() { + return this.standardToArray(); + } + + @Override + public T[] toArray(T[] array) { + return this.standardToArray(array); + } + + @Override + public boolean contains(Object o) { + return this.standardContains(o); + } + + @Override + public boolean containsAll(Collection c) { + return this.standardContainsAll(c); + } + + @Override + public boolean remove(Object o) { + return this.standardRemove(o); + } + + @Override + public boolean removeAll(Collection c) { + return this.standardRemoveAll(c); + } + + @Override + public boolean retainAll(Collection c) { + return this.standardRetainAll(c); + } + } + + private static class ConstrainedMultimap + extends ForwardingMultimap + implements Serializable { + final MapConstraint constraint; + final Multimap delegate; + transient Collection> entries; + transient Map> asMap; + + public ConstrainedMultimap(Multimap delegate, MapConstraint constraint) { + this.delegate = Preconditions.checkNotNull(delegate); + this.constraint = Preconditions.checkNotNull(constraint); + } + + @Override + protected Multimap delegate() { + return this.delegate; + } + + @Override + public Map> asMap() { + ForwardingMap result = this.asMap; + if (result == null) { + final Map> asMapDelegate = this.delegate.asMap(); + this.asMap = result = new ForwardingMap>(){ + Set>> entrySet; + Collection> values; + + @Override + protected Map> delegate() { + return asMapDelegate; + } + + @Override + public Set>> entrySet() { + Set result = this.entrySet; + if (result == null) { + this.entrySet = result = MapConstraints.constrainedAsMapEntries(asMapDelegate.entrySet(), ConstrainedMultimap.this.constraint); + } + return result; + } + + @Override + public Collection get(Object key) { + try { + Collection collection = ConstrainedMultimap.this.get(key); + return collection.isEmpty() ? null : collection; + } + catch (ClassCastException e) { + return null; + } + } + + @Override + public Collection> values() { + Collection result = this.values; + if (result == null) { + this.values = result = new ConstrainedAsMapValues(this.delegate().values(), this.entrySet()); + } + return result; + } + + @Override + public boolean containsValue(Object o) { + return this.values().contains(o); + } + }; + } + return result; + } + + @Override + public Collection> entries() { + Collection result = this.entries; + if (result == null) { + this.entries = result = MapConstraints.constrainedEntries(this.delegate.entries(), this.constraint); + } + return result; + } + + @Override + public Collection get(final K key) { + return Constraints.constrainedTypePreservingCollection(this.delegate.get(key), new Constraint(){ + + @Override + public V checkElement(V value) { + ConstrainedMultimap.this.constraint.checkKeyValue(key, value); + return value; + } + }); + } + + @Override + public boolean put(K key, V value) { + this.constraint.checkKeyValue(key, value); + return this.delegate.put(key, value); + } + + @Override + public boolean putAll(K key, Iterable values) { + return this.delegate.putAll(key, MapConstraints.checkValues(key, values, this.constraint)); + } + + @Override + public boolean putAll(Multimap multimap) { + boolean changed = false; + for (Map.Entry entry : multimap.entries()) { + changed |= this.put(entry.getKey(), entry.getValue()); + } + return changed; + } + + @Override + public Collection replaceValues(K key, Iterable values) { + return this.delegate.replaceValues(key, MapConstraints.checkValues(key, values, this.constraint)); + } + } + + private static class InverseConstraint + implements MapConstraint { + final MapConstraint constraint; + + public InverseConstraint(MapConstraint constraint) { + this.constraint = Preconditions.checkNotNull(constraint); + } + + @Override + public void checkKeyValue(K key, V value) { + this.constraint.checkKeyValue(value, key); + } + } + + private static class ConstrainedBiMap + extends ConstrainedMap + implements BiMap { + volatile BiMap inverse; + + ConstrainedBiMap(BiMap delegate, @Nullable BiMap inverse, MapConstraint constraint) { + super(delegate, constraint); + this.inverse = inverse; + } + + @Override + protected BiMap delegate() { + return (BiMap)super.delegate(); + } + + @Override + public V forcePut(K key, V value) { + this.constraint.checkKeyValue(key, value); + return this.delegate().forcePut(key, value); + } + + @Override + public BiMap inverse() { + if (this.inverse == null) { + this.inverse = new ConstrainedBiMap(this.delegate().inverse(), this, new InverseConstraint(this.constraint)); + } + return this.inverse; + } + + @Override + public Set values() { + return this.delegate().values(); + } + } + + static class ConstrainedMap + extends ForwardingMap { + private final Map delegate; + final MapConstraint constraint; + private transient Set> entrySet; + + ConstrainedMap(Map delegate, MapConstraint constraint) { + this.delegate = Preconditions.checkNotNull(delegate); + this.constraint = Preconditions.checkNotNull(constraint); + } + + @Override + protected Map delegate() { + return this.delegate; + } + + @Override + public Set> entrySet() { + Set result = this.entrySet; + if (result == null) { + this.entrySet = result = MapConstraints.constrainedEntrySet(this.delegate.entrySet(), this.constraint); + } + return result; + } + + @Override + public V put(K key, V value) { + this.constraint.checkKeyValue(key, value); + return this.delegate.put(key, value); + } + + @Override + public void putAll(Map map) { + this.delegate.putAll(MapConstraints.checkMap(map, this.constraint)); + } + } + + private static enum NotNullMapConstraint implements MapConstraint + { + INSTANCE; + + + @Override + public void checkKeyValue(Object key, Object value) { + Preconditions.checkNotNull(key); + Preconditions.checkNotNull(value); + } + + @Override + public String toString() { + return "Not null"; + } + } +} diff --git a/src/com/google/common/collect/MapDifference.java b/src/com/google/common/collect/MapDifference.java new file mode 100644 index 0000000..1e9cec4 --- /dev/null +++ b/src/com/google/common/collect/MapDifference.java @@ -0,0 +1,35 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.GwtCompatible; +import java.util.Map; +import javax.annotation.Nullable; + +@GwtCompatible +public interface MapDifference { + public boolean areEqual(); + + public Map entriesOnlyOnLeft(); + + public Map entriesOnlyOnRight(); + + public Map entriesInCommon(); + + public Map> entriesDiffering(); + + public boolean equals(@Nullable Object var1); + + public int hashCode(); + + public static interface ValueDifference { + public V leftValue(); + + public V rightValue(); + + public boolean equals(@Nullable Object var1); + + public int hashCode(); + } +} diff --git a/src/com/google/common/collect/MapMaker.java b/src/com/google/common/collect/MapMaker.java new file mode 100644 index 0000000..11f7b51 --- /dev/null +++ b/src/com/google/common/collect/MapMaker.java @@ -0,0 +1,450 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.GwtCompatible; +import com.google.common.annotations.GwtIncompatible; +import com.google.common.base.Ascii; +import com.google.common.base.Equivalence; +import com.google.common.base.Function; +import com.google.common.base.MoreObjects; +import com.google.common.base.Preconditions; +import com.google.common.base.Throwables; +import com.google.common.base.Ticker; +import com.google.common.collect.ComputationException; +import com.google.common.collect.ComputingConcurrentHashMap; +import com.google.common.collect.GenericMapMaker; +import com.google.common.collect.ImmutableEntry; +import com.google.common.collect.MapMakerInternalMap; +import java.io.Serializable; +import java.util.AbstractMap; +import java.util.Collections; +import java.util.Map; +import java.util.Set; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ConcurrentMap; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.TimeUnit; +import javax.annotation.Nullable; + +@GwtCompatible(emulated=true) +public final class MapMaker +extends GenericMapMaker { + private static final int DEFAULT_INITIAL_CAPACITY = 16; + private static final int DEFAULT_CONCURRENCY_LEVEL = 4; + private static final int DEFAULT_EXPIRATION_NANOS = 0; + static final int UNSET_INT = -1; + boolean useCustomMap; + int initialCapacity = -1; + int concurrencyLevel = -1; + int maximumSize = -1; + MapMakerInternalMap.Strength keyStrength; + MapMakerInternalMap.Strength valueStrength; + long expireAfterWriteNanos = -1L; + long expireAfterAccessNanos = -1L; + RemovalCause nullRemovalCause; + Equivalence keyEquivalence; + Ticker ticker; + + @GwtIncompatible(value="To be supported") + MapMaker keyEquivalence(Equivalence equivalence) { + Preconditions.checkState(this.keyEquivalence == null, "key equivalence was already set to %s", this.keyEquivalence); + this.keyEquivalence = Preconditions.checkNotNull(equivalence); + this.useCustomMap = true; + return this; + } + + Equivalence getKeyEquivalence() { + return MoreObjects.firstNonNull(this.keyEquivalence, this.getKeyStrength().defaultEquivalence()); + } + + public MapMaker initialCapacity(int initialCapacity) { + Preconditions.checkState(this.initialCapacity == -1, "initial capacity was already set to %s", this.initialCapacity); + Preconditions.checkArgument(initialCapacity >= 0); + this.initialCapacity = initialCapacity; + return this; + } + + int getInitialCapacity() { + return this.initialCapacity == -1 ? 16 : this.initialCapacity; + } + + @Deprecated + MapMaker maximumSize(int size) { + Preconditions.checkState(this.maximumSize == -1, "maximum size was already set to %s", this.maximumSize); + Preconditions.checkArgument(size >= 0, "maximum size must not be negative"); + this.maximumSize = size; + this.useCustomMap = true; + if (this.maximumSize == 0) { + this.nullRemovalCause = RemovalCause.SIZE; + } + return this; + } + + public MapMaker concurrencyLevel(int concurrencyLevel) { + Preconditions.checkState(this.concurrencyLevel == -1, "concurrency level was already set to %s", this.concurrencyLevel); + Preconditions.checkArgument(concurrencyLevel > 0); + this.concurrencyLevel = concurrencyLevel; + return this; + } + + int getConcurrencyLevel() { + return this.concurrencyLevel == -1 ? 4 : this.concurrencyLevel; + } + + @GwtIncompatible(value="java.lang.ref.WeakReference") + public MapMaker weakKeys() { + return this.setKeyStrength(MapMakerInternalMap.Strength.WEAK); + } + + MapMaker setKeyStrength(MapMakerInternalMap.Strength strength) { + Preconditions.checkState(this.keyStrength == null, "Key strength was already set to %s", new Object[]{this.keyStrength}); + this.keyStrength = Preconditions.checkNotNull(strength); + Preconditions.checkArgument(this.keyStrength != MapMakerInternalMap.Strength.SOFT, "Soft keys are not supported"); + if (strength != MapMakerInternalMap.Strength.STRONG) { + this.useCustomMap = true; + } + return this; + } + + MapMakerInternalMap.Strength getKeyStrength() { + return MoreObjects.firstNonNull(this.keyStrength, MapMakerInternalMap.Strength.STRONG); + } + + @GwtIncompatible(value="java.lang.ref.WeakReference") + public MapMaker weakValues() { + return this.setValueStrength(MapMakerInternalMap.Strength.WEAK); + } + + @Deprecated + @GwtIncompatible(value="java.lang.ref.SoftReference") + public MapMaker softValues() { + return this.setValueStrength(MapMakerInternalMap.Strength.SOFT); + } + + MapMaker setValueStrength(MapMakerInternalMap.Strength strength) { + Preconditions.checkState(this.valueStrength == null, "Value strength was already set to %s", new Object[]{this.valueStrength}); + this.valueStrength = Preconditions.checkNotNull(strength); + if (strength != MapMakerInternalMap.Strength.STRONG) { + this.useCustomMap = true; + } + return this; + } + + MapMakerInternalMap.Strength getValueStrength() { + return MoreObjects.firstNonNull(this.valueStrength, MapMakerInternalMap.Strength.STRONG); + } + + @Deprecated + MapMaker expireAfterWrite(long duration, TimeUnit unit) { + this.checkExpiration(duration, unit); + this.expireAfterWriteNanos = unit.toNanos(duration); + if (duration == 0L && this.nullRemovalCause == null) { + this.nullRemovalCause = RemovalCause.EXPIRED; + } + this.useCustomMap = true; + return this; + } + + private void checkExpiration(long duration, TimeUnit unit) { + Preconditions.checkState(this.expireAfterWriteNanos == -1L, "expireAfterWrite was already set to %s ns", this.expireAfterWriteNanos); + Preconditions.checkState(this.expireAfterAccessNanos == -1L, "expireAfterAccess was already set to %s ns", this.expireAfterAccessNanos); + Preconditions.checkArgument(duration >= 0L, "duration cannot be negative: %s %s", new Object[]{duration, unit}); + } + + long getExpireAfterWriteNanos() { + return this.expireAfterWriteNanos == -1L ? 0L : this.expireAfterWriteNanos; + } + + @Deprecated + @GwtIncompatible(value="To be supported") + MapMaker expireAfterAccess(long duration, TimeUnit unit) { + this.checkExpiration(duration, unit); + this.expireAfterAccessNanos = unit.toNanos(duration); + if (duration == 0L && this.nullRemovalCause == null) { + this.nullRemovalCause = RemovalCause.EXPIRED; + } + this.useCustomMap = true; + return this; + } + + long getExpireAfterAccessNanos() { + return this.expireAfterAccessNanos == -1L ? 0L : this.expireAfterAccessNanos; + } + + Ticker getTicker() { + return MoreObjects.firstNonNull(this.ticker, Ticker.systemTicker()); + } + + @Deprecated + @GwtIncompatible(value="To be supported") + GenericMapMaker removalListener(RemovalListener listener) { + Preconditions.checkState(this.removalListener == null); + MapMaker me = this; + me.removalListener = Preconditions.checkNotNull(listener); + this.useCustomMap = true; + return me; + } + + @Override + public ConcurrentMap makeMap() { + if (!this.useCustomMap) { + return new ConcurrentHashMap(this.getInitialCapacity(), 0.75f, this.getConcurrencyLevel()); + } + return (ConcurrentMap)((Object)(this.nullRemovalCause == null ? new MapMakerInternalMap(this) : new NullConcurrentMap(this))); + } + + @Override + @GwtIncompatible(value="MapMakerInternalMap") + MapMakerInternalMap makeCustomMap() { + return new MapMakerInternalMap(this); + } + + @Override + @Deprecated + ConcurrentMap makeComputingMap(Function computingFunction) { + return (ConcurrentMap)((Object)(this.nullRemovalCause == null ? new ComputingMapAdapter(this, computingFunction) : new NullComputingConcurrentMap(this, computingFunction))); + } + + public String toString() { + long l; + MoreObjects.ToStringHelper s = MoreObjects.toStringHelper(this); + if (this.initialCapacity != -1) { + s.add("initialCapacity", this.initialCapacity); + } + if (this.concurrencyLevel != -1) { + s.add("concurrencyLevel", this.concurrencyLevel); + } + if (this.maximumSize != -1) { + s.add("maximumSize", this.maximumSize); + } + if (this.expireAfterWriteNanos != -1L) { + l = this.expireAfterWriteNanos; + s.add("expireAfterWrite", new StringBuilder(22).append(l).append("ns").toString()); + } + if (this.expireAfterAccessNanos != -1L) { + l = this.expireAfterAccessNanos; + s.add("expireAfterAccess", new StringBuilder(22).append(l).append("ns").toString()); + } + if (this.keyStrength != null) { + s.add("keyStrength", Ascii.toLowerCase(this.keyStrength.toString())); + } + if (this.valueStrength != null) { + s.add("valueStrength", Ascii.toLowerCase(this.valueStrength.toString())); + } + if (this.keyEquivalence != null) { + s.addValue("keyEquivalence"); + } + if (this.removalListener != null) { + s.addValue("removalListener"); + } + return s.toString(); + } + + static final class ComputingMapAdapter + extends ComputingConcurrentHashMap + implements Serializable { + private static final long serialVersionUID = 0L; + + ComputingMapAdapter(MapMaker mapMaker, Function computingFunction) { + super(mapMaker, computingFunction); + } + + @Override + public V get(Object key) { + Object value; + try { + value = this.getOrCompute(key); + } + catch (ExecutionException e) { + Throwable cause = e.getCause(); + Throwables.propagateIfInstanceOf(cause, ComputationException.class); + throw new ComputationException(cause); + } + if (value == null) { + String string = String.valueOf(String.valueOf(this.computingFunction)); + String string2 = String.valueOf(String.valueOf(key)); + throw new NullPointerException(new StringBuilder(24 + string.length() + string2.length()).append(string).append(" returned null for key ").append(string2).append(".").toString()); + } + return value; + } + } + + static final class NullComputingConcurrentMap + extends NullConcurrentMap { + private static final long serialVersionUID = 0L; + final Function computingFunction; + + NullComputingConcurrentMap(MapMaker mapMaker, Function computingFunction) { + super(mapMaker); + this.computingFunction = Preconditions.checkNotNull(computingFunction); + } + + @Override + public V get(Object k) { + Object key = k; + V value = this.compute(key); + Preconditions.checkNotNull(value, "%s returned null for key %s.", this.computingFunction, key); + this.notifyRemoval(key, value); + return value; + } + + private V compute(K key) { + Preconditions.checkNotNull(key); + try { + return this.computingFunction.apply(key); + } + catch (ComputationException e) { + throw e; + } + catch (Throwable t) { + throw new ComputationException(t); + } + } + } + + static class NullConcurrentMap + extends AbstractMap + implements ConcurrentMap, + Serializable { + private static final long serialVersionUID = 0L; + private final RemovalListener removalListener; + private final RemovalCause removalCause; + + NullConcurrentMap(MapMaker mapMaker) { + this.removalListener = mapMaker.getRemovalListener(); + this.removalCause = mapMaker.nullRemovalCause; + } + + @Override + public boolean containsKey(@Nullable Object key) { + return false; + } + + @Override + public boolean containsValue(@Nullable Object value) { + return false; + } + + @Override + public V get(@Nullable Object key) { + return null; + } + + void notifyRemoval(K key, V value) { + RemovalNotification notification = new RemovalNotification(key, value, this.removalCause); + this.removalListener.onRemoval(notification); + } + + @Override + public V put(K key, V value) { + Preconditions.checkNotNull(key); + Preconditions.checkNotNull(value); + this.notifyRemoval(key, value); + return null; + } + + @Override + public V putIfAbsent(K key, V value) { + return this.put(key, value); + } + + @Override + public V remove(@Nullable Object key) { + return null; + } + + @Override + public boolean remove(@Nullable Object key, @Nullable Object value) { + return false; + } + + @Override + public V replace(K key, V value) { + Preconditions.checkNotNull(key); + Preconditions.checkNotNull(value); + return null; + } + + @Override + public boolean replace(K key, @Nullable V oldValue, V newValue) { + Preconditions.checkNotNull(key); + Preconditions.checkNotNull(newValue); + return false; + } + + @Override + public Set> entrySet() { + return Collections.emptySet(); + } + } + + static enum RemovalCause { + EXPLICIT{ + + @Override + boolean wasEvicted() { + return false; + } + } + , + REPLACED{ + + @Override + boolean wasEvicted() { + return false; + } + } + , + COLLECTED{ + + @Override + boolean wasEvicted() { + return true; + } + } + , + EXPIRED{ + + @Override + boolean wasEvicted() { + return true; + } + } + , + SIZE{ + + @Override + boolean wasEvicted() { + return true; + } + }; + + + abstract boolean wasEvicted(); + } + + static final class RemovalNotification + extends ImmutableEntry { + private static final long serialVersionUID = 0L; + private final RemovalCause cause; + + RemovalNotification(@Nullable K key, @Nullable V value, RemovalCause cause) { + super(key, value); + this.cause = cause; + } + + public RemovalCause getCause() { + return this.cause; + } + + public boolean wasEvicted() { + return this.cause.wasEvicted(); + } + } + + static interface RemovalListener { + public void onRemoval(RemovalNotification var1); + } +} diff --git a/src/com/google/common/collect/MapMakerInternalMap.java b/src/com/google/common/collect/MapMakerInternalMap.java new file mode 100644 index 0000000..c920c8f --- /dev/null +++ b/src/com/google/common/collect/MapMakerInternalMap.java @@ -0,0 +1,3192 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.VisibleForTesting; +import com.google.common.base.Equivalence; +import com.google.common.base.Preconditions; +import com.google.common.base.Ticker; +import com.google.common.collect.AbstractMapEntry; +import com.google.common.collect.AbstractSequentialIterator; +import com.google.common.collect.CollectPreconditions; +import com.google.common.collect.ForwardingConcurrentMap; +import com.google.common.collect.GenericMapMaker; +import com.google.common.collect.Iterators; +import com.google.common.collect.MapMaker; +import com.google.common.primitives.Ints; +import java.io.IOException; +import java.io.ObjectInputStream; +import java.io.ObjectOutputStream; +import java.io.Serializable; +import java.lang.ref.Reference; +import java.lang.ref.ReferenceQueue; +import java.lang.ref.SoftReference; +import java.lang.ref.WeakReference; +import java.util.AbstractCollection; +import java.util.AbstractMap; +import java.util.AbstractQueue; +import java.util.AbstractSet; +import java.util.Collection; +import java.util.Iterator; +import java.util.Map; +import java.util.NoSuchElementException; +import java.util.Queue; +import java.util.Set; +import java.util.concurrent.CancellationException; +import java.util.concurrent.ConcurrentLinkedQueue; +import java.util.concurrent.ConcurrentMap; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.atomic.AtomicInteger; +import java.util.concurrent.atomic.AtomicReferenceArray; +import java.util.concurrent.locks.ReentrantLock; +import java.util.logging.Level; +import java.util.logging.Logger; +import javax.annotation.Nullable; +import javax.annotation.concurrent.GuardedBy; + +class MapMakerInternalMap +extends AbstractMap +implements ConcurrentMap, +Serializable { + static final int MAXIMUM_CAPACITY = 0x40000000; + static final int MAX_SEGMENTS = 65536; + static final int CONTAINS_VALUE_RETRIES = 3; + static final int DRAIN_THRESHOLD = 63; + static final int DRAIN_MAX = 16; + static final long CLEANUP_EXECUTOR_DELAY_SECS = 60L; + private static final Logger logger = Logger.getLogger(MapMakerInternalMap.class.getName()); + final transient int segmentMask; + final transient int segmentShift; + final transient Segment[] segments; + final int concurrencyLevel; + final Equivalence keyEquivalence; + final Equivalence valueEquivalence; + final Strength keyStrength; + final Strength valueStrength; + final int maximumSize; + final long expireAfterAccessNanos; + final long expireAfterWriteNanos; + final Queue> removalNotificationQueue; + final MapMaker.RemovalListener removalListener; + final transient EntryFactory entryFactory; + final Ticker ticker; + static final ValueReference UNSET = new ValueReference(){ + + @Override + public Object get() { + return null; + } + + @Override + public ReferenceEntry getEntry() { + return null; + } + + @Override + public ValueReference copyFor(ReferenceQueue queue, @Nullable Object value, ReferenceEntry entry) { + return this; + } + + @Override + public boolean isComputingReference() { + return false; + } + + @Override + public Object waitForValue() { + return null; + } + + @Override + public void clear(ValueReference newValue) { + } + }; + static final Queue DISCARDING_QUEUE = new AbstractQueue(){ + + @Override + public boolean offer(Object o) { + return true; + } + + @Override + public Object peek() { + return null; + } + + @Override + public Object poll() { + return null; + } + + @Override + public int size() { + return 0; + } + + @Override + public Iterator iterator() { + return Iterators.emptyIterator(); + } + }; + transient Set keySet; + transient Collection values; + transient Set> entrySet; + private static final long serialVersionUID = 5L; + + MapMakerInternalMap(MapMaker builder) { + int segmentSize; + int segmentCount; + this.concurrencyLevel = Math.min(builder.getConcurrencyLevel(), 65536); + this.keyStrength = builder.getKeyStrength(); + this.valueStrength = builder.getValueStrength(); + this.keyEquivalence = builder.getKeyEquivalence(); + this.valueEquivalence = this.valueStrength.defaultEquivalence(); + this.maximumSize = builder.maximumSize; + this.expireAfterAccessNanos = builder.getExpireAfterAccessNanos(); + this.expireAfterWriteNanos = builder.getExpireAfterWriteNanos(); + this.entryFactory = EntryFactory.getFactory(this.keyStrength, this.expires(), this.evictsBySize()); + this.ticker = builder.getTicker(); + this.removalListener = builder.getRemovalListener(); + this.removalNotificationQueue = this.removalListener == GenericMapMaker.NullListener.INSTANCE ? MapMakerInternalMap.discardingQueue() : new ConcurrentLinkedQueue(); + int initialCapacity = Math.min(builder.getInitialCapacity(), 0x40000000); + if (this.evictsBySize()) { + initialCapacity = Math.min(initialCapacity, this.maximumSize); + } + int segmentShift = 0; + for (segmentCount = 1; !(segmentCount >= this.concurrencyLevel || this.evictsBySize() && segmentCount * 2 > this.maximumSize); segmentCount <<= 1) { + ++segmentShift; + } + this.segmentShift = 32 - segmentShift; + this.segmentMask = segmentCount - 1; + this.segments = this.newSegmentArray(segmentCount); + int segmentCapacity = initialCapacity / segmentCount; + if (segmentCapacity * segmentCount < initialCapacity) { + ++segmentCapacity; + } + for (segmentSize = 1; segmentSize < segmentCapacity; segmentSize <<= 1) { + } + if (this.evictsBySize()) { + int maximumSegmentSize = this.maximumSize / segmentCount + 1; + int remainder = this.maximumSize % segmentCount; + for (int i = 0; i < this.segments.length; ++i) { + if (i == remainder) { + --maximumSegmentSize; + } + this.segments[i] = this.createSegment(segmentSize, maximumSegmentSize); + } + } else { + for (int i = 0; i < this.segments.length; ++i) { + this.segments[i] = this.createSegment(segmentSize, -1); + } + } + } + + boolean evictsBySize() { + return this.maximumSize != -1; + } + + boolean expires() { + return this.expiresAfterWrite() || this.expiresAfterAccess(); + } + + boolean expiresAfterWrite() { + return this.expireAfterWriteNanos > 0L; + } + + boolean expiresAfterAccess() { + return this.expireAfterAccessNanos > 0L; + } + + boolean usesKeyReferences() { + return this.keyStrength != Strength.STRONG; + } + + boolean usesValueReferences() { + return this.valueStrength != Strength.STRONG; + } + + static ValueReference unset() { + return UNSET; + } + + static ReferenceEntry nullEntry() { + return NullEntry.INSTANCE; + } + + static Queue discardingQueue() { + return DISCARDING_QUEUE; + } + + static int rehash(int h) { + h += h << 15 ^ 0xFFFFCD7D; + h ^= h >>> 10; + h += h << 3; + h ^= h >>> 6; + h += (h << 2) + (h << 14); + return h ^ h >>> 16; + } + + @VisibleForTesting + ReferenceEntry newEntry(K key, int hash, @Nullable ReferenceEntry next) { + return this.segmentFor(hash).newEntry(key, hash, next); + } + + @VisibleForTesting + ReferenceEntry copyEntry(ReferenceEntry original, ReferenceEntry newNext) { + int hash = original.getHash(); + return this.segmentFor(hash).copyEntry(original, newNext); + } + + @VisibleForTesting + ValueReference newValueReference(ReferenceEntry entry, V value) { + int hash = entry.getHash(); + return this.valueStrength.referenceValue(this.segmentFor(hash), entry, value); + } + + int hash(Object key) { + int h = this.keyEquivalence.hash(key); + return MapMakerInternalMap.rehash(h); + } + + void reclaimValue(ValueReference valueReference) { + ReferenceEntry entry = valueReference.getEntry(); + int hash = entry.getHash(); + this.segmentFor(hash).reclaimValue(entry.getKey(), hash, valueReference); + } + + void reclaimKey(ReferenceEntry entry) { + int hash = entry.getHash(); + this.segmentFor(hash).reclaimKey(entry, hash); + } + + @VisibleForTesting + boolean isLive(ReferenceEntry entry) { + return this.segmentFor(entry.getHash()).getLiveValue(entry) != null; + } + + Segment segmentFor(int hash) { + return this.segments[hash >>> this.segmentShift & this.segmentMask]; + } + + Segment createSegment(int initialCapacity, int maxSegmentSize) { + return new Segment(this, initialCapacity, maxSegmentSize); + } + + V getLiveValue(ReferenceEntry entry) { + if (entry.getKey() == null) { + return null; + } + V value = entry.getValueReference().get(); + if (value == null) { + return null; + } + if (this.expires() && this.isExpired(entry)) { + return null; + } + return value; + } + + boolean isExpired(ReferenceEntry entry) { + return this.isExpired(entry, this.ticker.read()); + } + + boolean isExpired(ReferenceEntry entry, long now) { + return now - entry.getExpirationTime() > 0L; + } + + static void connectExpirables(ReferenceEntry previous, ReferenceEntry next) { + previous.setNextExpirable(next); + next.setPreviousExpirable(previous); + } + + static void nullifyExpirable(ReferenceEntry nulled) { + ReferenceEntry nullEntry = MapMakerInternalMap.nullEntry(); + nulled.setNextExpirable(nullEntry); + nulled.setPreviousExpirable(nullEntry); + } + + void processPendingNotifications() { + MapMaker.RemovalNotification notification; + while ((notification = this.removalNotificationQueue.poll()) != null) { + try { + this.removalListener.onRemoval(notification); + } + catch (Exception e) { + logger.log(Level.WARNING, "Exception thrown by removal listener", e); + } + } + } + + static void connectEvictables(ReferenceEntry previous, ReferenceEntry next) { + previous.setNextEvictable(next); + next.setPreviousEvictable(previous); + } + + static void nullifyEvictable(ReferenceEntry nulled) { + ReferenceEntry nullEntry = MapMakerInternalMap.nullEntry(); + nulled.setNextEvictable(nullEntry); + nulled.setPreviousEvictable(nullEntry); + } + + final Segment[] newSegmentArray(int ssize) { + return new Segment[ssize]; + } + + @Override + public boolean isEmpty() { + int i; + long sum = 0L; + Segment[] segments = this.segments; + for (i = 0; i < segments.length; ++i) { + if (segments[i].count != 0) { + return false; + } + sum += (long)segments[i].modCount; + } + if (sum != 0L) { + for (i = 0; i < segments.length; ++i) { + if (segments[i].count != 0) { + return false; + } + sum -= (long)segments[i].modCount; + } + if (sum != 0L) { + return false; + } + } + return true; + } + + @Override + public int size() { + Segment[] segments = this.segments; + long sum = 0L; + for (int i = 0; i < segments.length; ++i) { + sum += (long)segments[i].count; + } + return Ints.saturatedCast(sum); + } + + @Override + public V get(@Nullable Object key) { + if (key == null) { + return null; + } + int hash = this.hash(key); + return this.segmentFor(hash).get(key, hash); + } + + ReferenceEntry getEntry(@Nullable Object key) { + if (key == null) { + return null; + } + int hash = this.hash(key); + return this.segmentFor(hash).getEntry(key, hash); + } + + @Override + public boolean containsKey(@Nullable Object key) { + if (key == null) { + return false; + } + int hash = this.hash(key); + return this.segmentFor(hash).containsKey(key, hash); + } + + @Override + public boolean containsValue(@Nullable Object value) { + if (value == null) { + return false; + } + Segment[] segments = this.segments; + long last = -1L; + for (int i = 0; i < 3; ++i) { + long sum = 0L; + for (Segment segment : segments) { + int c = segment.count; + AtomicReferenceArray table = segment.table; + for (int j = 0; j < table.length(); ++j) { + for (ReferenceEntry e = table.get(j); e != null; e = e.getNext()) { + V v = segment.getLiveValue(e); + if (v == null || !this.valueEquivalence.equivalent(value, v)) continue; + return true; + } + } + sum += (long)segment.modCount; + } + if (sum == last) break; + last = sum; + } + return false; + } + + @Override + public V put(K key, V value) { + Preconditions.checkNotNull(key); + Preconditions.checkNotNull(value); + int hash = this.hash(key); + return this.segmentFor(hash).put(key, hash, value, false); + } + + @Override + public V putIfAbsent(K key, V value) { + Preconditions.checkNotNull(key); + Preconditions.checkNotNull(value); + int hash = this.hash(key); + return this.segmentFor(hash).put(key, hash, value, true); + } + + @Override + public void putAll(Map m) { + for (Map.Entry e : m.entrySet()) { + this.put(e.getKey(), e.getValue()); + } + } + + @Override + public V remove(@Nullable Object key) { + if (key == null) { + return null; + } + int hash = this.hash(key); + return this.segmentFor(hash).remove(key, hash); + } + + @Override + public boolean remove(@Nullable Object key, @Nullable Object value) { + if (key == null || value == null) { + return false; + } + int hash = this.hash(key); + return this.segmentFor(hash).remove(key, hash, value); + } + + @Override + public boolean replace(K key, @Nullable V oldValue, V newValue) { + Preconditions.checkNotNull(key); + Preconditions.checkNotNull(newValue); + if (oldValue == null) { + return false; + } + int hash = this.hash(key); + return this.segmentFor(hash).replace(key, hash, oldValue, newValue); + } + + @Override + public V replace(K key, V value) { + Preconditions.checkNotNull(key); + Preconditions.checkNotNull(value); + int hash = this.hash(key); + return this.segmentFor(hash).replace(key, hash, value); + } + + @Override + public void clear() { + for (Segment segment : this.segments) { + segment.clear(); + } + } + + @Override + public Set keySet() { + KeySet ks = this.keySet; + return ks != null ? ks : (this.keySet = new KeySet()); + } + + @Override + public Collection values() { + Values vs = this.values; + return vs != null ? vs : (this.values = new Values()); + } + + @Override + public Set> entrySet() { + EntrySet es = this.entrySet; + return es != null ? es : (this.entrySet = new EntrySet()); + } + + Object writeReplace() { + return new SerializationProxy(this.keyStrength, this.valueStrength, this.keyEquivalence, this.valueEquivalence, this.expireAfterWriteNanos, this.expireAfterAccessNanos, this.maximumSize, this.concurrencyLevel, this.removalListener, this); + } + + private static final class SerializationProxy + extends AbstractSerializationProxy { + private static final long serialVersionUID = 3L; + + SerializationProxy(Strength keyStrength, Strength valueStrength, Equivalence keyEquivalence, Equivalence valueEquivalence, long expireAfterWriteNanos, long expireAfterAccessNanos, int maximumSize, int concurrencyLevel, MapMaker.RemovalListener removalListener, ConcurrentMap delegate) { + super(keyStrength, valueStrength, keyEquivalence, valueEquivalence, expireAfterWriteNanos, expireAfterAccessNanos, maximumSize, concurrencyLevel, removalListener, delegate); + } + + private void writeObject(ObjectOutputStream out) throws IOException { + out.defaultWriteObject(); + this.writeMapTo(out); + } + + private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException { + in.defaultReadObject(); + MapMaker mapMaker = this.readMapMaker(in); + this.delegate = mapMaker.makeMap(); + this.readEntries(in); + } + + private Object readResolve() { + return this.delegate; + } + } + + static abstract class AbstractSerializationProxy + extends ForwardingConcurrentMap + implements Serializable { + private static final long serialVersionUID = 3L; + final Strength keyStrength; + final Strength valueStrength; + final Equivalence keyEquivalence; + final Equivalence valueEquivalence; + final long expireAfterWriteNanos; + final long expireAfterAccessNanos; + final int maximumSize; + final int concurrencyLevel; + final MapMaker.RemovalListener removalListener; + transient ConcurrentMap delegate; + + AbstractSerializationProxy(Strength keyStrength, Strength valueStrength, Equivalence keyEquivalence, Equivalence valueEquivalence, long expireAfterWriteNanos, long expireAfterAccessNanos, int maximumSize, int concurrencyLevel, MapMaker.RemovalListener removalListener, ConcurrentMap delegate) { + this.keyStrength = keyStrength; + this.valueStrength = valueStrength; + this.keyEquivalence = keyEquivalence; + this.valueEquivalence = valueEquivalence; + this.expireAfterWriteNanos = expireAfterWriteNanos; + this.expireAfterAccessNanos = expireAfterAccessNanos; + this.maximumSize = maximumSize; + this.concurrencyLevel = concurrencyLevel; + this.removalListener = removalListener; + this.delegate = delegate; + } + + @Override + protected ConcurrentMap delegate() { + return this.delegate; + } + + void writeMapTo(ObjectOutputStream out) throws IOException { + out.writeInt(this.delegate.size()); + for (Map.Entry entry : this.delegate.entrySet()) { + out.writeObject(entry.getKey()); + out.writeObject(entry.getValue()); + } + out.writeObject(null); + } + + MapMaker readMapMaker(ObjectInputStream in) throws IOException { + int size = in.readInt(); + MapMaker mapMaker = ((MapMaker)new MapMaker().initialCapacity(size).setKeyStrength(this.keyStrength).setValueStrength(this.valueStrength).keyEquivalence((Equivalence)this.keyEquivalence)).concurrencyLevel(this.concurrencyLevel); + mapMaker.removalListener(this.removalListener); + if (this.expireAfterWriteNanos > 0L) { + mapMaker.expireAfterWrite(this.expireAfterWriteNanos, TimeUnit.NANOSECONDS); + } + if (this.expireAfterAccessNanos > 0L) { + mapMaker.expireAfterAccess(this.expireAfterAccessNanos, TimeUnit.NANOSECONDS); + } + if (this.maximumSize != -1) { + mapMaker.maximumSize(this.maximumSize); + } + return mapMaker; + } + + void readEntries(ObjectInputStream in) throws IOException, ClassNotFoundException { + Object key; + while ((key = in.readObject()) != null) { + Object value = in.readObject(); + this.delegate.put(key, value); + } + } + } + + final class EntrySet + extends AbstractSet> { + EntrySet() { + } + + @Override + public Iterator> iterator() { + return new EntryIterator(); + } + + @Override + public boolean contains(Object o) { + if (!(o instanceof Map.Entry)) { + return false; + } + Map.Entry e = (Map.Entry)o; + Object key = e.getKey(); + if (key == null) { + return false; + } + Object v = MapMakerInternalMap.this.get(key); + return v != null && MapMakerInternalMap.this.valueEquivalence.equivalent(e.getValue(), v); + } + + @Override + public boolean remove(Object o) { + if (!(o instanceof Map.Entry)) { + return false; + } + Map.Entry e = (Map.Entry)o; + Object key = e.getKey(); + return key != null && MapMakerInternalMap.this.remove(key, e.getValue()); + } + + @Override + public int size() { + return MapMakerInternalMap.this.size(); + } + + @Override + public boolean isEmpty() { + return MapMakerInternalMap.this.isEmpty(); + } + + @Override + public void clear() { + MapMakerInternalMap.this.clear(); + } + } + + final class Values + extends AbstractCollection { + Values() { + } + + @Override + public Iterator iterator() { + return new ValueIterator(); + } + + @Override + public int size() { + return MapMakerInternalMap.this.size(); + } + + @Override + public boolean isEmpty() { + return MapMakerInternalMap.this.isEmpty(); + } + + @Override + public boolean contains(Object o) { + return MapMakerInternalMap.this.containsValue(o); + } + + @Override + public void clear() { + MapMakerInternalMap.this.clear(); + } + } + + final class KeySet + extends AbstractSet { + KeySet() { + } + + @Override + public Iterator iterator() { + return new KeyIterator(); + } + + @Override + public int size() { + return MapMakerInternalMap.this.size(); + } + + @Override + public boolean isEmpty() { + return MapMakerInternalMap.this.isEmpty(); + } + + @Override + public boolean contains(Object o) { + return MapMakerInternalMap.this.containsKey(o); + } + + @Override + public boolean remove(Object o) { + return MapMakerInternalMap.this.remove(o) != null; + } + + @Override + public void clear() { + MapMakerInternalMap.this.clear(); + } + } + + final class EntryIterator + extends HashIterator> { + EntryIterator() { + } + + @Override + public Map.Entry next() { + return this.nextEntry(); + } + } + + final class WriteThroughEntry + extends AbstractMapEntry { + final K key; + V value; + + WriteThroughEntry(K key, V value) { + this.key = key; + this.value = value; + } + + @Override + public K getKey() { + return this.key; + } + + @Override + public V getValue() { + return this.value; + } + + @Override + public boolean equals(@Nullable Object object) { + if (object instanceof Map.Entry) { + Map.Entry that = (Map.Entry)object; + return this.key.equals(that.getKey()) && this.value.equals(that.getValue()); + } + return false; + } + + @Override + public int hashCode() { + return this.key.hashCode() ^ this.value.hashCode(); + } + + @Override + public V setValue(V newValue) { + Object oldValue = MapMakerInternalMap.this.put(this.key, newValue); + this.value = newValue; + return oldValue; + } + } + + final class ValueIterator + extends HashIterator { + ValueIterator() { + } + + @Override + public V next() { + return this.nextEntry().getValue(); + } + } + + final class KeyIterator + extends HashIterator { + KeyIterator() { + } + + @Override + public K next() { + return this.nextEntry().getKey(); + } + } + + abstract class HashIterator + implements Iterator { + int nextSegmentIndex; + int nextTableIndex; + Segment currentSegment; + AtomicReferenceArray> currentTable; + ReferenceEntry nextEntry; + WriteThroughEntry nextExternal; + WriteThroughEntry lastReturned; + + HashIterator() { + this.nextSegmentIndex = MapMakerInternalMap.this.segments.length - 1; + this.nextTableIndex = -1; + this.advance(); + } + + @Override + public abstract E next(); + + final void advance() { + this.nextExternal = null; + if (this.nextInChain()) { + return; + } + if (this.nextInTable()) { + return; + } + while (this.nextSegmentIndex >= 0) { + this.currentSegment = MapMakerInternalMap.this.segments[this.nextSegmentIndex--]; + if (this.currentSegment.count == 0) continue; + this.currentTable = this.currentSegment.table; + this.nextTableIndex = this.currentTable.length() - 1; + if (!this.nextInTable()) continue; + return; + } + } + + boolean nextInChain() { + if (this.nextEntry != null) { + this.nextEntry = this.nextEntry.getNext(); + while (this.nextEntry != null) { + if (this.advanceTo(this.nextEntry)) { + return true; + } + this.nextEntry = this.nextEntry.getNext(); + } + } + return false; + } + + boolean nextInTable() { + while (this.nextTableIndex >= 0) { + if ((this.nextEntry = this.currentTable.get(this.nextTableIndex--)) == null || !this.advanceTo(this.nextEntry) && !this.nextInChain()) continue; + return true; + } + return false; + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + boolean advanceTo(ReferenceEntry entry) { + try { + Object key = entry.getKey(); + Object value = MapMakerInternalMap.this.getLiveValue(entry); + if (value != null) { + this.nextExternal = new WriteThroughEntry(key, value); + boolean bl = true; + return bl; + } + boolean bl = false; + return bl; + } + finally { + this.currentSegment.postReadCleanup(); + } + } + + @Override + public boolean hasNext() { + return this.nextExternal != null; + } + + WriteThroughEntry nextEntry() { + if (this.nextExternal == null) { + throw new NoSuchElementException(); + } + this.lastReturned = this.nextExternal; + this.advance(); + return this.lastReturned; + } + + @Override + public void remove() { + CollectPreconditions.checkRemove(this.lastReturned != null); + MapMakerInternalMap.this.remove(this.lastReturned.getKey()); + this.lastReturned = null; + } + } + + static final class CleanupMapTask + implements Runnable { + final WeakReference> mapReference; + + public CleanupMapTask(MapMakerInternalMap map) { + this.mapReference = new WeakReference(map); + } + + @Override + public void run() { + MapMakerInternalMap map = (MapMakerInternalMap)this.mapReference.get(); + if (map == null) { + throw new CancellationException(); + } + for (Segment segment : map.segments) { + segment.runCleanup(); + } + } + } + + static final class ExpirationQueue + extends AbstractQueue> { + final ReferenceEntry head = new AbstractReferenceEntry(){ + ReferenceEntry nextExpirable = this; + ReferenceEntry previousExpirable = this; + + @Override + public long getExpirationTime() { + return Long.MAX_VALUE; + } + + @Override + public void setExpirationTime(long time) { + } + + @Override + public ReferenceEntry getNextExpirable() { + return this.nextExpirable; + } + + @Override + public void setNextExpirable(ReferenceEntry next) { + this.nextExpirable = next; + } + + @Override + public ReferenceEntry getPreviousExpirable() { + return this.previousExpirable; + } + + @Override + public void setPreviousExpirable(ReferenceEntry previous) { + this.previousExpirable = previous; + } + }; + + ExpirationQueue() { + } + + @Override + public boolean offer(ReferenceEntry entry) { + MapMakerInternalMap.connectExpirables(entry.getPreviousExpirable(), entry.getNextExpirable()); + MapMakerInternalMap.connectExpirables(this.head.getPreviousExpirable(), entry); + MapMakerInternalMap.connectExpirables(entry, this.head); + return true; + } + + @Override + public ReferenceEntry peek() { + ReferenceEntry next = this.head.getNextExpirable(); + return next == this.head ? null : next; + } + + @Override + public ReferenceEntry poll() { + ReferenceEntry next = this.head.getNextExpirable(); + if (next == this.head) { + return null; + } + this.remove(next); + return next; + } + + @Override + public boolean remove(Object o) { + ReferenceEntry e = (ReferenceEntry)o; + ReferenceEntry previous = e.getPreviousExpirable(); + ReferenceEntry next = e.getNextExpirable(); + MapMakerInternalMap.connectExpirables(previous, next); + MapMakerInternalMap.nullifyExpirable(e); + return next != NullEntry.INSTANCE; + } + + @Override + public boolean contains(Object o) { + ReferenceEntry e = (ReferenceEntry)o; + return e.getNextExpirable() != NullEntry.INSTANCE; + } + + @Override + public boolean isEmpty() { + return this.head.getNextExpirable() == this.head; + } + + @Override + public int size() { + int size = 0; + for (ReferenceEntry e = this.head.getNextExpirable(); e != this.head; e = e.getNextExpirable()) { + ++size; + } + return size; + } + + @Override + public void clear() { + ReferenceEntry e = this.head.getNextExpirable(); + while (e != this.head) { + ReferenceEntry next = e.getNextExpirable(); + MapMakerInternalMap.nullifyExpirable(e); + e = next; + } + this.head.setNextExpirable(this.head); + this.head.setPreviousExpirable(this.head); + } + + @Override + public Iterator> iterator() { + return new AbstractSequentialIterator>((ReferenceEntry)this.peek()){ + + @Override + protected ReferenceEntry computeNext(ReferenceEntry previous) { + ReferenceEntry next = previous.getNextExpirable(); + return next == ExpirationQueue.this.head ? null : next; + } + }; + } + } + + static final class EvictionQueue + extends AbstractQueue> { + final ReferenceEntry head = new AbstractReferenceEntry(){ + ReferenceEntry nextEvictable = this; + ReferenceEntry previousEvictable = this; + + @Override + public ReferenceEntry getNextEvictable() { + return this.nextEvictable; + } + + @Override + public void setNextEvictable(ReferenceEntry next) { + this.nextEvictable = next; + } + + @Override + public ReferenceEntry getPreviousEvictable() { + return this.previousEvictable; + } + + @Override + public void setPreviousEvictable(ReferenceEntry previous) { + this.previousEvictable = previous; + } + }; + + EvictionQueue() { + } + + @Override + public boolean offer(ReferenceEntry entry) { + MapMakerInternalMap.connectEvictables(entry.getPreviousEvictable(), entry.getNextEvictable()); + MapMakerInternalMap.connectEvictables(this.head.getPreviousEvictable(), entry); + MapMakerInternalMap.connectEvictables(entry, this.head); + return true; + } + + @Override + public ReferenceEntry peek() { + ReferenceEntry next = this.head.getNextEvictable(); + return next == this.head ? null : next; + } + + @Override + public ReferenceEntry poll() { + ReferenceEntry next = this.head.getNextEvictable(); + if (next == this.head) { + return null; + } + this.remove(next); + return next; + } + + @Override + public boolean remove(Object o) { + ReferenceEntry e = (ReferenceEntry)o; + ReferenceEntry previous = e.getPreviousEvictable(); + ReferenceEntry next = e.getNextEvictable(); + MapMakerInternalMap.connectEvictables(previous, next); + MapMakerInternalMap.nullifyEvictable(e); + return next != NullEntry.INSTANCE; + } + + @Override + public boolean contains(Object o) { + ReferenceEntry e = (ReferenceEntry)o; + return e.getNextEvictable() != NullEntry.INSTANCE; + } + + @Override + public boolean isEmpty() { + return this.head.getNextEvictable() == this.head; + } + + @Override + public int size() { + int size = 0; + for (ReferenceEntry e = this.head.getNextEvictable(); e != this.head; e = e.getNextEvictable()) { + ++size; + } + return size; + } + + @Override + public void clear() { + ReferenceEntry e = this.head.getNextEvictable(); + while (e != this.head) { + ReferenceEntry next = e.getNextEvictable(); + MapMakerInternalMap.nullifyEvictable(e); + e = next; + } + this.head.setNextEvictable(this.head); + this.head.setPreviousEvictable(this.head); + } + + @Override + public Iterator> iterator() { + return new AbstractSequentialIterator>((ReferenceEntry)this.peek()){ + + @Override + protected ReferenceEntry computeNext(ReferenceEntry previous) { + ReferenceEntry next = previous.getNextEvictable(); + return next == EvictionQueue.this.head ? null : next; + } + }; + } + } + + static class Segment + extends ReentrantLock { + final MapMakerInternalMap map; + volatile int count; + int modCount; + int threshold; + volatile AtomicReferenceArray> table; + final int maxSegmentSize; + final ReferenceQueue keyReferenceQueue; + final ReferenceQueue valueReferenceQueue; + final Queue> recencyQueue; + final AtomicInteger readCount = new AtomicInteger(); + @GuardedBy(value="Segment.this") + final Queue> evictionQueue; + @GuardedBy(value="Segment.this") + final Queue> expirationQueue; + + Segment(MapMakerInternalMap map, int initialCapacity, int maxSegmentSize) { + this.map = map; + this.maxSegmentSize = maxSegmentSize; + this.initTable(this.newEntryArray(initialCapacity)); + this.keyReferenceQueue = map.usesKeyReferences() ? new ReferenceQueue() : null; + this.valueReferenceQueue = map.usesValueReferences() ? new ReferenceQueue() : null; + this.recencyQueue = map.evictsBySize() || map.expiresAfterAccess() ? new ConcurrentLinkedQueue() : MapMakerInternalMap.discardingQueue(); + this.evictionQueue = map.evictsBySize() ? new EvictionQueue() : MapMakerInternalMap.discardingQueue(); + this.expirationQueue = map.expires() ? new ExpirationQueue() : MapMakerInternalMap.discardingQueue(); + } + + AtomicReferenceArray> newEntryArray(int size) { + return new AtomicReferenceArray>(size); + } + + void initTable(AtomicReferenceArray> newTable) { + this.threshold = newTable.length() * 3 / 4; + if (this.threshold == this.maxSegmentSize) { + ++this.threshold; + } + this.table = newTable; + } + + @GuardedBy(value="Segment.this") + ReferenceEntry newEntry(K key, int hash, @Nullable ReferenceEntry next) { + return this.map.entryFactory.newEntry(this, key, hash, next); + } + + @GuardedBy(value="Segment.this") + ReferenceEntry copyEntry(ReferenceEntry original, ReferenceEntry newNext) { + if (original.getKey() == null) { + return null; + } + ValueReference valueReference = original.getValueReference(); + V value = valueReference.get(); + if (value == null && !valueReference.isComputingReference()) { + return null; + } + ReferenceEntry newEntry = this.map.entryFactory.copyEntry(this, original, newNext); + newEntry.setValueReference(valueReference.copyFor(this.valueReferenceQueue, value, newEntry)); + return newEntry; + } + + @GuardedBy(value="Segment.this") + void setValue(ReferenceEntry entry, V value) { + ValueReference valueReference = this.map.valueStrength.referenceValue(this, entry, value); + entry.setValueReference(valueReference); + this.recordWrite(entry); + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + void tryDrainReferenceQueues() { + if (this.tryLock()) { + try { + this.drainReferenceQueues(); + } + finally { + this.unlock(); + } + } + } + + @GuardedBy(value="Segment.this") + void drainReferenceQueues() { + if (this.map.usesKeyReferences()) { + this.drainKeyReferenceQueue(); + } + if (this.map.usesValueReferences()) { + this.drainValueReferenceQueue(); + } + } + + @GuardedBy(value="Segment.this") + void drainKeyReferenceQueue() { + Reference ref; + int i = 0; + while ((ref = this.keyReferenceQueue.poll()) != null) { + ReferenceEntry entry = (ReferenceEntry)((Object)ref); + this.map.reclaimKey(entry); + if (++i != 16) continue; + break; + } + } + + @GuardedBy(value="Segment.this") + void drainValueReferenceQueue() { + Reference ref; + int i = 0; + while ((ref = this.valueReferenceQueue.poll()) != null) { + ValueReference valueReference = (ValueReference)((Object)ref); + this.map.reclaimValue(valueReference); + if (++i != 16) continue; + break; + } + } + + void clearReferenceQueues() { + if (this.map.usesKeyReferences()) { + this.clearKeyReferenceQueue(); + } + if (this.map.usesValueReferences()) { + this.clearValueReferenceQueue(); + } + } + + void clearKeyReferenceQueue() { + while (this.keyReferenceQueue.poll() != null) { + } + } + + void clearValueReferenceQueue() { + while (this.valueReferenceQueue.poll() != null) { + } + } + + void recordRead(ReferenceEntry entry) { + if (this.map.expiresAfterAccess()) { + this.recordExpirationTime(entry, this.map.expireAfterAccessNanos); + } + this.recencyQueue.add(entry); + } + + @GuardedBy(value="Segment.this") + void recordLockedRead(ReferenceEntry entry) { + this.evictionQueue.add(entry); + if (this.map.expiresAfterAccess()) { + this.recordExpirationTime(entry, this.map.expireAfterAccessNanos); + this.expirationQueue.add(entry); + } + } + + @GuardedBy(value="Segment.this") + void recordWrite(ReferenceEntry entry) { + this.drainRecencyQueue(); + this.evictionQueue.add(entry); + if (this.map.expires()) { + long expiration = this.map.expiresAfterAccess() ? this.map.expireAfterAccessNanos : this.map.expireAfterWriteNanos; + this.recordExpirationTime(entry, expiration); + this.expirationQueue.add(entry); + } + } + + @GuardedBy(value="Segment.this") + void drainRecencyQueue() { + ReferenceEntry e; + while ((e = this.recencyQueue.poll()) != null) { + if (this.evictionQueue.contains(e)) { + this.evictionQueue.add(e); + } + if (!this.map.expiresAfterAccess() || !this.expirationQueue.contains(e)) continue; + this.expirationQueue.add(e); + } + } + + void recordExpirationTime(ReferenceEntry entry, long expirationNanos) { + entry.setExpirationTime(this.map.ticker.read() + expirationNanos); + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + void tryExpireEntries() { + if (this.tryLock()) { + try { + this.expireEntries(); + } + finally { + this.unlock(); + } + } + } + + @GuardedBy(value="Segment.this") + void expireEntries() { + ReferenceEntry e; + this.drainRecencyQueue(); + if (this.expirationQueue.isEmpty()) { + return; + } + long now = this.map.ticker.read(); + while ((e = this.expirationQueue.peek()) != null && this.map.isExpired(e, now)) { + if (!this.removeEntry(e, e.getHash(), MapMaker.RemovalCause.EXPIRED)) { + throw new AssertionError(); + } + } + } + + void enqueueNotification(ReferenceEntry entry, MapMaker.RemovalCause cause) { + this.enqueueNotification(entry.getKey(), entry.getHash(), entry.getValueReference().get(), cause); + } + + void enqueueNotification(@Nullable K key, int hash, @Nullable V value, MapMaker.RemovalCause cause) { + if (this.map.removalNotificationQueue != DISCARDING_QUEUE) { + MapMaker.RemovalNotification notification = new MapMaker.RemovalNotification(key, value, cause); + this.map.removalNotificationQueue.offer(notification); + } + } + + @GuardedBy(value="Segment.this") + boolean evictEntries() { + if (this.map.evictsBySize() && this.count >= this.maxSegmentSize) { + this.drainRecencyQueue(); + ReferenceEntry e = this.evictionQueue.remove(); + if (!this.removeEntry(e, e.getHash(), MapMaker.RemovalCause.SIZE)) { + throw new AssertionError(); + } + return true; + } + return false; + } + + ReferenceEntry getFirst(int hash) { + AtomicReferenceArray> table = this.table; + return table.get(hash & table.length() - 1); + } + + ReferenceEntry getEntry(Object key, int hash) { + if (this.count != 0) { + for (ReferenceEntry e = this.getFirst(hash); e != null; e = e.getNext()) { + if (e.getHash() != hash) continue; + K entryKey = e.getKey(); + if (entryKey == null) { + this.tryDrainReferenceQueues(); + continue; + } + if (!this.map.keyEquivalence.equivalent(key, entryKey)) continue; + return e; + } + } + return null; + } + + ReferenceEntry getLiveEntry(Object key, int hash) { + ReferenceEntry e = this.getEntry(key, hash); + if (e == null) { + return null; + } + if (this.map.expires() && this.map.isExpired(e)) { + this.tryExpireEntries(); + return null; + } + return e; + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + V get(Object key, int hash) { + try { + ReferenceEntry e = this.getLiveEntry(key, hash); + if (e == null) { + V v = null; + return v; + } + V value = e.getValueReference().get(); + if (value != null) { + this.recordRead(e); + } else { + this.tryDrainReferenceQueues(); + } + V v = value; + return v; + } + finally { + this.postReadCleanup(); + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + boolean containsKey(Object key, int hash) { + try { + if (this.count != 0) { + ReferenceEntry e = this.getLiveEntry(key, hash); + if (e == null) { + boolean bl = false; + return bl; + } + boolean bl = e.getValueReference().get() != null; + return bl; + } + boolean bl = false; + return bl; + } + finally { + this.postReadCleanup(); + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @VisibleForTesting + boolean containsValue(Object value) { + try { + if (this.count != 0) { + AtomicReferenceArray> table = this.table; + int length = table.length(); + for (int i = 0; i < length; ++i) { + for (ReferenceEntry e = table.get(i); e != null; e = e.getNext()) { + V entryValue = this.getLiveValue(e); + if (entryValue == null || !this.map.valueEquivalence.equivalent(value, entryValue)) continue; + boolean bl = true; + return bl; + } + } + } + boolean bl = false; + return bl; + } + finally { + this.postReadCleanup(); + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + V put(K key, int hash, V value, boolean onlyIfAbsent) { + this.lock(); + try { + ReferenceEntry first; + this.preWriteCleanup(); + int newCount = this.count + 1; + if (newCount > this.threshold) { + this.expand(); + newCount = this.count + 1; + } + AtomicReferenceArray> table = this.table; + int index = hash & table.length() - 1; + for (ReferenceEntry e = first = table.get(index); e != null; e = e.getNext()) { + K entryKey = e.getKey(); + if (e.getHash() != hash || entryKey == null || !this.map.keyEquivalence.equivalent(key, entryKey)) continue; + ValueReference valueReference = e.getValueReference(); + V entryValue = valueReference.get(); + if (entryValue == null) { + ++this.modCount; + this.setValue(e, value); + if (!valueReference.isComputingReference()) { + this.enqueueNotification(key, hash, entryValue, MapMaker.RemovalCause.COLLECTED); + newCount = this.count; + } else if (this.evictEntries()) { + newCount = this.count + 1; + } + this.count = newCount; + V v = null; + return v; + } + if (onlyIfAbsent) { + this.recordLockedRead(e); + V v = entryValue; + return v; + } + ++this.modCount; + this.enqueueNotification(key, hash, entryValue, MapMaker.RemovalCause.REPLACED); + this.setValue(e, value); + V v = entryValue; + return v; + } + ++this.modCount; + ReferenceEntry newEntry = this.newEntry(key, hash, first); + this.setValue(newEntry, value); + table.set(index, newEntry); + if (this.evictEntries()) { + newCount = this.count + 1; + } + this.count = newCount; + V v = null; + return v; + } + finally { + this.unlock(); + this.postWriteCleanup(); + } + } + + @GuardedBy(value="Segment.this") + void expand() { + AtomicReferenceArray> oldTable = this.table; + int oldCapacity = oldTable.length(); + if (oldCapacity >= 0x40000000) { + return; + } + int newCount = this.count; + AtomicReferenceArray> newTable = this.newEntryArray(oldCapacity << 1); + this.threshold = newTable.length() * 3 / 4; + int newMask = newTable.length() - 1; + for (int oldIndex = 0; oldIndex < oldCapacity; ++oldIndex) { + int newIndex; + ReferenceEntry e; + ReferenceEntry head = oldTable.get(oldIndex); + if (head == null) continue; + ReferenceEntry next = head.getNext(); + int headIndex = head.getHash() & newMask; + if (next == null) { + newTable.set(headIndex, head); + continue; + } + ReferenceEntry tail = head; + int tailIndex = headIndex; + for (e = next; e != null; e = e.getNext()) { + newIndex = e.getHash() & newMask; + if (newIndex == tailIndex) continue; + tailIndex = newIndex; + tail = e; + } + newTable.set(tailIndex, tail); + for (e = head; e != tail; e = e.getNext()) { + newIndex = e.getHash() & newMask; + ReferenceEntry newNext = newTable.get(newIndex); + ReferenceEntry newFirst = this.copyEntry(e, newNext); + if (newFirst != null) { + newTable.set(newIndex, newFirst); + continue; + } + this.removeCollectedEntry(e); + --newCount; + } + } + this.table = newTable; + this.count = newCount; + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + boolean replace(K key, int hash, V oldValue, V newValue) { + this.lock(); + try { + ReferenceEntry first; + this.preWriteCleanup(); + AtomicReferenceArray> table = this.table; + int index = hash & table.length() - 1; + for (ReferenceEntry e = first = table.get(index); e != null; e = e.getNext()) { + K entryKey = e.getKey(); + if (e.getHash() != hash || entryKey == null || !this.map.keyEquivalence.equivalent(key, entryKey)) continue; + ValueReference valueReference = e.getValueReference(); + V entryValue = valueReference.get(); + if (entryValue == null) { + if (this.isCollected(valueReference)) { + int newCount = this.count - 1; + ++this.modCount; + this.enqueueNotification(entryKey, hash, entryValue, MapMaker.RemovalCause.COLLECTED); + ReferenceEntry newFirst = this.removeFromChain(first, e); + newCount = this.count - 1; + table.set(index, newFirst); + this.count = newCount; + } + boolean bl = false; + return bl; + } + if (this.map.valueEquivalence.equivalent(oldValue, entryValue)) { + ++this.modCount; + this.enqueueNotification(key, hash, entryValue, MapMaker.RemovalCause.REPLACED); + this.setValue(e, newValue); + boolean bl = true; + return bl; + } + this.recordLockedRead(e); + boolean bl = false; + return bl; + } + boolean bl = false; + return bl; + } + finally { + this.unlock(); + this.postWriteCleanup(); + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + V replace(K key, int hash, V newValue) { + this.lock(); + try { + ReferenceEntry first; + this.preWriteCleanup(); + AtomicReferenceArray> table = this.table; + int index = hash & table.length() - 1; + for (ReferenceEntry e = first = table.get(index); e != null; e = e.getNext()) { + K entryKey = e.getKey(); + if (e.getHash() != hash || entryKey == null || !this.map.keyEquivalence.equivalent(key, entryKey)) continue; + ValueReference valueReference = e.getValueReference(); + V entryValue = valueReference.get(); + if (entryValue == null) { + if (this.isCollected(valueReference)) { + int newCount = this.count - 1; + ++this.modCount; + this.enqueueNotification(entryKey, hash, entryValue, MapMaker.RemovalCause.COLLECTED); + ReferenceEntry newFirst = this.removeFromChain(first, e); + newCount = this.count - 1; + table.set(index, newFirst); + this.count = newCount; + } + V v = null; + return v; + } + ++this.modCount; + this.enqueueNotification(key, hash, entryValue, MapMaker.RemovalCause.REPLACED); + this.setValue(e, newValue); + V v = entryValue; + return v; + } + V v = null; + return v; + } + finally { + this.unlock(); + this.postWriteCleanup(); + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + V remove(Object key, int hash) { + this.lock(); + try { + ReferenceEntry first; + this.preWriteCleanup(); + int newCount = this.count - 1; + AtomicReferenceArray> table = this.table; + int index = hash & table.length() - 1; + for (ReferenceEntry e = first = table.get(index); e != null; e = e.getNext()) { + MapMaker.RemovalCause cause; + K entryKey = e.getKey(); + if (e.getHash() != hash || entryKey == null || !this.map.keyEquivalence.equivalent(key, entryKey)) continue; + ValueReference valueReference = e.getValueReference(); + V entryValue = valueReference.get(); + if (entryValue != null) { + cause = MapMaker.RemovalCause.EXPLICIT; + } else if (this.isCollected(valueReference)) { + cause = MapMaker.RemovalCause.COLLECTED; + } else { + V v = null; + return v; + } + ++this.modCount; + this.enqueueNotification(entryKey, hash, entryValue, cause); + ReferenceEntry newFirst = this.removeFromChain(first, e); + newCount = this.count - 1; + table.set(index, newFirst); + this.count = newCount; + V v = entryValue; + return v; + } + V v = null; + return v; + } + finally { + this.unlock(); + this.postWriteCleanup(); + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + boolean remove(Object key, int hash, Object value) { + this.lock(); + try { + ReferenceEntry first; + this.preWriteCleanup(); + int newCount = this.count - 1; + AtomicReferenceArray> table = this.table; + int index = hash & table.length() - 1; + for (ReferenceEntry e = first = table.get(index); e != null; e = e.getNext()) { + MapMaker.RemovalCause cause; + K entryKey = e.getKey(); + if (e.getHash() != hash || entryKey == null || !this.map.keyEquivalence.equivalent(key, entryKey)) continue; + ValueReference valueReference = e.getValueReference(); + V entryValue = valueReference.get(); + if (this.map.valueEquivalence.equivalent(value, entryValue)) { + cause = MapMaker.RemovalCause.EXPLICIT; + } else if (this.isCollected(valueReference)) { + cause = MapMaker.RemovalCause.COLLECTED; + } else { + boolean bl = false; + return bl; + } + ++this.modCount; + this.enqueueNotification(entryKey, hash, entryValue, cause); + ReferenceEntry newFirst = this.removeFromChain(first, e); + newCount = this.count - 1; + table.set(index, newFirst); + this.count = newCount; + boolean bl = cause == MapMaker.RemovalCause.EXPLICIT; + return bl; + } + boolean bl = false; + return bl; + } + finally { + this.unlock(); + this.postWriteCleanup(); + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + void clear() { + if (this.count != 0) { + this.lock(); + try { + int i; + AtomicReferenceArray> table = this.table; + if (this.map.removalNotificationQueue != DISCARDING_QUEUE) { + for (i = 0; i < table.length(); ++i) { + for (ReferenceEntry e = table.get(i); e != null; e = e.getNext()) { + if (e.getValueReference().isComputingReference()) continue; + this.enqueueNotification(e, MapMaker.RemovalCause.EXPLICIT); + } + } + } + for (i = 0; i < table.length(); ++i) { + table.set(i, null); + } + this.clearReferenceQueues(); + this.evictionQueue.clear(); + this.expirationQueue.clear(); + this.readCount.set(0); + ++this.modCount; + this.count = 0; + } + finally { + this.unlock(); + this.postWriteCleanup(); + } + } + } + + @GuardedBy(value="Segment.this") + ReferenceEntry removeFromChain(ReferenceEntry first, ReferenceEntry entry) { + this.evictionQueue.remove(entry); + this.expirationQueue.remove(entry); + int newCount = this.count; + ReferenceEntry newFirst = entry.getNext(); + for (ReferenceEntry e = first; e != entry; e = e.getNext()) { + ReferenceEntry next = this.copyEntry(e, newFirst); + if (next != null) { + newFirst = next; + continue; + } + this.removeCollectedEntry(e); + --newCount; + } + this.count = newCount; + return newFirst; + } + + void removeCollectedEntry(ReferenceEntry entry) { + this.enqueueNotification(entry, MapMaker.RemovalCause.COLLECTED); + this.evictionQueue.remove(entry); + this.expirationQueue.remove(entry); + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + boolean reclaimKey(ReferenceEntry entry, int hash) { + this.lock(); + try { + ReferenceEntry first; + int newCount = this.count - 1; + AtomicReferenceArray> table = this.table; + int index = hash & table.length() - 1; + for (ReferenceEntry e = first = table.get(index); e != null; e = e.getNext()) { + if (e != entry) continue; + ++this.modCount; + this.enqueueNotification(e.getKey(), hash, e.getValueReference().get(), MapMaker.RemovalCause.COLLECTED); + ReferenceEntry newFirst = this.removeFromChain(first, e); + newCount = this.count - 1; + table.set(index, newFirst); + this.count = newCount; + boolean bl = true; + return bl; + } + boolean bl = false; + return bl; + } + finally { + this.unlock(); + this.postWriteCleanup(); + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + boolean reclaimValue(K key, int hash, ValueReference valueReference) { + this.lock(); + try { + ReferenceEntry first; + int newCount = this.count - 1; + AtomicReferenceArray> table = this.table; + int index = hash & table.length() - 1; + for (ReferenceEntry e = first = table.get(index); e != null; e = e.getNext()) { + K entryKey = e.getKey(); + if (e.getHash() != hash || entryKey == null || !this.map.keyEquivalence.equivalent(key, entryKey)) continue; + ValueReference v = e.getValueReference(); + if (v == valueReference) { + ++this.modCount; + this.enqueueNotification(key, hash, valueReference.get(), MapMaker.RemovalCause.COLLECTED); + ReferenceEntry newFirst = this.removeFromChain(first, e); + newCount = this.count - 1; + table.set(index, newFirst); + this.count = newCount; + boolean bl = true; + return bl; + } + boolean bl = false; + return bl; + } + boolean bl = false; + return bl; + } + finally { + this.unlock(); + if (!this.isHeldByCurrentThread()) { + this.postWriteCleanup(); + } + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + boolean clearValue(K key, int hash, ValueReference valueReference) { + this.lock(); + try { + ReferenceEntry first; + AtomicReferenceArray> table = this.table; + int index = hash & table.length() - 1; + for (ReferenceEntry e = first = table.get(index); e != null; e = e.getNext()) { + K entryKey = e.getKey(); + if (e.getHash() != hash || entryKey == null || !this.map.keyEquivalence.equivalent(key, entryKey)) continue; + ValueReference v = e.getValueReference(); + if (v == valueReference) { + ReferenceEntry newFirst = this.removeFromChain(first, e); + table.set(index, newFirst); + boolean bl = true; + return bl; + } + boolean bl = false; + return bl; + } + boolean bl = false; + return bl; + } + finally { + this.unlock(); + this.postWriteCleanup(); + } + } + + @GuardedBy(value="Segment.this") + boolean removeEntry(ReferenceEntry entry, int hash, MapMaker.RemovalCause cause) { + ReferenceEntry first; + int newCount = this.count - 1; + AtomicReferenceArray> table = this.table; + int index = hash & table.length() - 1; + for (ReferenceEntry e = first = table.get(index); e != null; e = e.getNext()) { + if (e != entry) continue; + ++this.modCount; + this.enqueueNotification(e.getKey(), hash, e.getValueReference().get(), cause); + ReferenceEntry newFirst = this.removeFromChain(first, e); + newCount = this.count - 1; + table.set(index, newFirst); + this.count = newCount; + return true; + } + return false; + } + + boolean isCollected(ValueReference valueReference) { + if (valueReference.isComputingReference()) { + return false; + } + return valueReference.get() == null; + } + + V getLiveValue(ReferenceEntry entry) { + if (entry.getKey() == null) { + this.tryDrainReferenceQueues(); + return null; + } + V value = entry.getValueReference().get(); + if (value == null) { + this.tryDrainReferenceQueues(); + return null; + } + if (this.map.expires() && this.map.isExpired(entry)) { + this.tryExpireEntries(); + return null; + } + return value; + } + + void postReadCleanup() { + if ((this.readCount.incrementAndGet() & 0x3F) == 0) { + this.runCleanup(); + } + } + + @GuardedBy(value="Segment.this") + void preWriteCleanup() { + this.runLockedCleanup(); + } + + void postWriteCleanup() { + this.runUnlockedCleanup(); + } + + void runCleanup() { + this.runLockedCleanup(); + this.runUnlockedCleanup(); + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + void runLockedCleanup() { + if (this.tryLock()) { + try { + this.drainReferenceQueues(); + this.expireEntries(); + this.readCount.set(0); + } + finally { + this.unlock(); + } + } + } + + void runUnlockedCleanup() { + if (!this.isHeldByCurrentThread()) { + this.map.processPendingNotifications(); + } + } + } + + static final class StrongValueReference + implements ValueReference { + final V referent; + + StrongValueReference(V referent) { + this.referent = referent; + } + + @Override + public V get() { + return this.referent; + } + + @Override + public ReferenceEntry getEntry() { + return null; + } + + @Override + public ValueReference copyFor(ReferenceQueue queue, V value, ReferenceEntry entry) { + return this; + } + + @Override + public boolean isComputingReference() { + return false; + } + + @Override + public V waitForValue() { + return this.get(); + } + + @Override + public void clear(ValueReference newValue) { + } + } + + static final class SoftValueReference + extends SoftReference + implements ValueReference { + final ReferenceEntry entry; + + SoftValueReference(ReferenceQueue queue, V referent, ReferenceEntry entry) { + super(referent, queue); + this.entry = entry; + } + + @Override + public ReferenceEntry getEntry() { + return this.entry; + } + + @Override + public void clear(ValueReference newValue) { + this.clear(); + } + + @Override + public ValueReference copyFor(ReferenceQueue queue, V value, ReferenceEntry entry) { + return new SoftValueReference(queue, value, entry); + } + + @Override + public boolean isComputingReference() { + return false; + } + + @Override + public V waitForValue() { + return (V)this.get(); + } + } + + static final class WeakValueReference + extends WeakReference + implements ValueReference { + final ReferenceEntry entry; + + WeakValueReference(ReferenceQueue queue, V referent, ReferenceEntry entry) { + super(referent, queue); + this.entry = entry; + } + + @Override + public ReferenceEntry getEntry() { + return this.entry; + } + + @Override + public void clear(ValueReference newValue) { + this.clear(); + } + + @Override + public ValueReference copyFor(ReferenceQueue queue, V value, ReferenceEntry entry) { + return new WeakValueReference(queue, value, entry); + } + + @Override + public boolean isComputingReference() { + return false; + } + + @Override + public V waitForValue() { + return (V)this.get(); + } + } + + static final class WeakExpirableEvictableEntry + extends WeakEntry + implements ReferenceEntry { + volatile long time = Long.MAX_VALUE; + ReferenceEntry nextExpirable = MapMakerInternalMap.nullEntry(); + ReferenceEntry previousExpirable = MapMakerInternalMap.nullEntry(); + ReferenceEntry nextEvictable = MapMakerInternalMap.nullEntry(); + ReferenceEntry previousEvictable = MapMakerInternalMap.nullEntry(); + + WeakExpirableEvictableEntry(ReferenceQueue queue, K key, int hash, @Nullable ReferenceEntry next) { + super(queue, key, hash, next); + } + + @Override + public long getExpirationTime() { + return this.time; + } + + @Override + public void setExpirationTime(long time) { + this.time = time; + } + + @Override + public ReferenceEntry getNextExpirable() { + return this.nextExpirable; + } + + @Override + public void setNextExpirable(ReferenceEntry next) { + this.nextExpirable = next; + } + + @Override + public ReferenceEntry getPreviousExpirable() { + return this.previousExpirable; + } + + @Override + public void setPreviousExpirable(ReferenceEntry previous) { + this.previousExpirable = previous; + } + + @Override + public ReferenceEntry getNextEvictable() { + return this.nextEvictable; + } + + @Override + public void setNextEvictable(ReferenceEntry next) { + this.nextEvictable = next; + } + + @Override + public ReferenceEntry getPreviousEvictable() { + return this.previousEvictable; + } + + @Override + public void setPreviousEvictable(ReferenceEntry previous) { + this.previousEvictable = previous; + } + } + + static final class WeakEvictableEntry + extends WeakEntry + implements ReferenceEntry { + ReferenceEntry nextEvictable = MapMakerInternalMap.nullEntry(); + ReferenceEntry previousEvictable = MapMakerInternalMap.nullEntry(); + + WeakEvictableEntry(ReferenceQueue queue, K key, int hash, @Nullable ReferenceEntry next) { + super(queue, key, hash, next); + } + + @Override + public ReferenceEntry getNextEvictable() { + return this.nextEvictable; + } + + @Override + public void setNextEvictable(ReferenceEntry next) { + this.nextEvictable = next; + } + + @Override + public ReferenceEntry getPreviousEvictable() { + return this.previousEvictable; + } + + @Override + public void setPreviousEvictable(ReferenceEntry previous) { + this.previousEvictable = previous; + } + } + + static final class WeakExpirableEntry + extends WeakEntry + implements ReferenceEntry { + volatile long time = Long.MAX_VALUE; + ReferenceEntry nextExpirable = MapMakerInternalMap.nullEntry(); + ReferenceEntry previousExpirable = MapMakerInternalMap.nullEntry(); + + WeakExpirableEntry(ReferenceQueue queue, K key, int hash, @Nullable ReferenceEntry next) { + super(queue, key, hash, next); + } + + @Override + public long getExpirationTime() { + return this.time; + } + + @Override + public void setExpirationTime(long time) { + this.time = time; + } + + @Override + public ReferenceEntry getNextExpirable() { + return this.nextExpirable; + } + + @Override + public void setNextExpirable(ReferenceEntry next) { + this.nextExpirable = next; + } + + @Override + public ReferenceEntry getPreviousExpirable() { + return this.previousExpirable; + } + + @Override + public void setPreviousExpirable(ReferenceEntry previous) { + this.previousExpirable = previous; + } + } + + static class WeakEntry + extends WeakReference + implements ReferenceEntry { + final int hash; + final ReferenceEntry next; + volatile ValueReference valueReference = MapMakerInternalMap.unset(); + + WeakEntry(ReferenceQueue queue, K key, int hash, @Nullable ReferenceEntry next) { + super(key, queue); + this.hash = hash; + this.next = next; + } + + @Override + public K getKey() { + return (K)this.get(); + } + + @Override + public long getExpirationTime() { + throw new UnsupportedOperationException(); + } + + @Override + public void setExpirationTime(long time) { + throw new UnsupportedOperationException(); + } + + @Override + public ReferenceEntry getNextExpirable() { + throw new UnsupportedOperationException(); + } + + @Override + public void setNextExpirable(ReferenceEntry next) { + throw new UnsupportedOperationException(); + } + + @Override + public ReferenceEntry getPreviousExpirable() { + throw new UnsupportedOperationException(); + } + + @Override + public void setPreviousExpirable(ReferenceEntry previous) { + throw new UnsupportedOperationException(); + } + + @Override + public ReferenceEntry getNextEvictable() { + throw new UnsupportedOperationException(); + } + + @Override + public void setNextEvictable(ReferenceEntry next) { + throw new UnsupportedOperationException(); + } + + @Override + public ReferenceEntry getPreviousEvictable() { + throw new UnsupportedOperationException(); + } + + @Override + public void setPreviousEvictable(ReferenceEntry previous) { + throw new UnsupportedOperationException(); + } + + @Override + public ValueReference getValueReference() { + return this.valueReference; + } + + @Override + public void setValueReference(ValueReference valueReference) { + ValueReference previous = this.valueReference; + this.valueReference = valueReference; + previous.clear(valueReference); + } + + @Override + public int getHash() { + return this.hash; + } + + @Override + public ReferenceEntry getNext() { + return this.next; + } + } + + static final class SoftExpirableEvictableEntry + extends SoftEntry + implements ReferenceEntry { + volatile long time = Long.MAX_VALUE; + ReferenceEntry nextExpirable = MapMakerInternalMap.nullEntry(); + ReferenceEntry previousExpirable = MapMakerInternalMap.nullEntry(); + ReferenceEntry nextEvictable = MapMakerInternalMap.nullEntry(); + ReferenceEntry previousEvictable = MapMakerInternalMap.nullEntry(); + + SoftExpirableEvictableEntry(ReferenceQueue queue, K key, int hash, @Nullable ReferenceEntry next) { + super(queue, key, hash, next); + } + + @Override + public long getExpirationTime() { + return this.time; + } + + @Override + public void setExpirationTime(long time) { + this.time = time; + } + + @Override + public ReferenceEntry getNextExpirable() { + return this.nextExpirable; + } + + @Override + public void setNextExpirable(ReferenceEntry next) { + this.nextExpirable = next; + } + + @Override + public ReferenceEntry getPreviousExpirable() { + return this.previousExpirable; + } + + @Override + public void setPreviousExpirable(ReferenceEntry previous) { + this.previousExpirable = previous; + } + + @Override + public ReferenceEntry getNextEvictable() { + return this.nextEvictable; + } + + @Override + public void setNextEvictable(ReferenceEntry next) { + this.nextEvictable = next; + } + + @Override + public ReferenceEntry getPreviousEvictable() { + return this.previousEvictable; + } + + @Override + public void setPreviousEvictable(ReferenceEntry previous) { + this.previousEvictable = previous; + } + } + + static final class SoftEvictableEntry + extends SoftEntry + implements ReferenceEntry { + ReferenceEntry nextEvictable = MapMakerInternalMap.nullEntry(); + ReferenceEntry previousEvictable = MapMakerInternalMap.nullEntry(); + + SoftEvictableEntry(ReferenceQueue queue, K key, int hash, @Nullable ReferenceEntry next) { + super(queue, key, hash, next); + } + + @Override + public ReferenceEntry getNextEvictable() { + return this.nextEvictable; + } + + @Override + public void setNextEvictable(ReferenceEntry next) { + this.nextEvictable = next; + } + + @Override + public ReferenceEntry getPreviousEvictable() { + return this.previousEvictable; + } + + @Override + public void setPreviousEvictable(ReferenceEntry previous) { + this.previousEvictable = previous; + } + } + + static final class SoftExpirableEntry + extends SoftEntry + implements ReferenceEntry { + volatile long time = Long.MAX_VALUE; + ReferenceEntry nextExpirable = MapMakerInternalMap.nullEntry(); + ReferenceEntry previousExpirable = MapMakerInternalMap.nullEntry(); + + SoftExpirableEntry(ReferenceQueue queue, K key, int hash, @Nullable ReferenceEntry next) { + super(queue, key, hash, next); + } + + @Override + public long getExpirationTime() { + return this.time; + } + + @Override + public void setExpirationTime(long time) { + this.time = time; + } + + @Override + public ReferenceEntry getNextExpirable() { + return this.nextExpirable; + } + + @Override + public void setNextExpirable(ReferenceEntry next) { + this.nextExpirable = next; + } + + @Override + public ReferenceEntry getPreviousExpirable() { + return this.previousExpirable; + } + + @Override + public void setPreviousExpirable(ReferenceEntry previous) { + this.previousExpirable = previous; + } + } + + static class SoftEntry + extends SoftReference + implements ReferenceEntry { + final int hash; + final ReferenceEntry next; + volatile ValueReference valueReference = MapMakerInternalMap.unset(); + + SoftEntry(ReferenceQueue queue, K key, int hash, @Nullable ReferenceEntry next) { + super(key, queue); + this.hash = hash; + this.next = next; + } + + @Override + public K getKey() { + return (K)this.get(); + } + + @Override + public long getExpirationTime() { + throw new UnsupportedOperationException(); + } + + @Override + public void setExpirationTime(long time) { + throw new UnsupportedOperationException(); + } + + @Override + public ReferenceEntry getNextExpirable() { + throw new UnsupportedOperationException(); + } + + @Override + public void setNextExpirable(ReferenceEntry next) { + throw new UnsupportedOperationException(); + } + + @Override + public ReferenceEntry getPreviousExpirable() { + throw new UnsupportedOperationException(); + } + + @Override + public void setPreviousExpirable(ReferenceEntry previous) { + throw new UnsupportedOperationException(); + } + + @Override + public ReferenceEntry getNextEvictable() { + throw new UnsupportedOperationException(); + } + + @Override + public void setNextEvictable(ReferenceEntry next) { + throw new UnsupportedOperationException(); + } + + @Override + public ReferenceEntry getPreviousEvictable() { + throw new UnsupportedOperationException(); + } + + @Override + public void setPreviousEvictable(ReferenceEntry previous) { + throw new UnsupportedOperationException(); + } + + @Override + public ValueReference getValueReference() { + return this.valueReference; + } + + @Override + public void setValueReference(ValueReference valueReference) { + ValueReference previous = this.valueReference; + this.valueReference = valueReference; + previous.clear(valueReference); + } + + @Override + public int getHash() { + return this.hash; + } + + @Override + public ReferenceEntry getNext() { + return this.next; + } + } + + static final class StrongExpirableEvictableEntry + extends StrongEntry + implements ReferenceEntry { + volatile long time = Long.MAX_VALUE; + ReferenceEntry nextExpirable = MapMakerInternalMap.nullEntry(); + ReferenceEntry previousExpirable = MapMakerInternalMap.nullEntry(); + ReferenceEntry nextEvictable = MapMakerInternalMap.nullEntry(); + ReferenceEntry previousEvictable = MapMakerInternalMap.nullEntry(); + + StrongExpirableEvictableEntry(K key, int hash, @Nullable ReferenceEntry next) { + super(key, hash, next); + } + + @Override + public long getExpirationTime() { + return this.time; + } + + @Override + public void setExpirationTime(long time) { + this.time = time; + } + + @Override + public ReferenceEntry getNextExpirable() { + return this.nextExpirable; + } + + @Override + public void setNextExpirable(ReferenceEntry next) { + this.nextExpirable = next; + } + + @Override + public ReferenceEntry getPreviousExpirable() { + return this.previousExpirable; + } + + @Override + public void setPreviousExpirable(ReferenceEntry previous) { + this.previousExpirable = previous; + } + + @Override + public ReferenceEntry getNextEvictable() { + return this.nextEvictable; + } + + @Override + public void setNextEvictable(ReferenceEntry next) { + this.nextEvictable = next; + } + + @Override + public ReferenceEntry getPreviousEvictable() { + return this.previousEvictable; + } + + @Override + public void setPreviousEvictable(ReferenceEntry previous) { + this.previousEvictable = previous; + } + } + + static final class StrongEvictableEntry + extends StrongEntry + implements ReferenceEntry { + ReferenceEntry nextEvictable = MapMakerInternalMap.nullEntry(); + ReferenceEntry previousEvictable = MapMakerInternalMap.nullEntry(); + + StrongEvictableEntry(K key, int hash, @Nullable ReferenceEntry next) { + super(key, hash, next); + } + + @Override + public ReferenceEntry getNextEvictable() { + return this.nextEvictable; + } + + @Override + public void setNextEvictable(ReferenceEntry next) { + this.nextEvictable = next; + } + + @Override + public ReferenceEntry getPreviousEvictable() { + return this.previousEvictable; + } + + @Override + public void setPreviousEvictable(ReferenceEntry previous) { + this.previousEvictable = previous; + } + } + + static final class StrongExpirableEntry + extends StrongEntry + implements ReferenceEntry { + volatile long time = Long.MAX_VALUE; + ReferenceEntry nextExpirable = MapMakerInternalMap.nullEntry(); + ReferenceEntry previousExpirable = MapMakerInternalMap.nullEntry(); + + StrongExpirableEntry(K key, int hash, @Nullable ReferenceEntry next) { + super(key, hash, next); + } + + @Override + public long getExpirationTime() { + return this.time; + } + + @Override + public void setExpirationTime(long time) { + this.time = time; + } + + @Override + public ReferenceEntry getNextExpirable() { + return this.nextExpirable; + } + + @Override + public void setNextExpirable(ReferenceEntry next) { + this.nextExpirable = next; + } + + @Override + public ReferenceEntry getPreviousExpirable() { + return this.previousExpirable; + } + + @Override + public void setPreviousExpirable(ReferenceEntry previous) { + this.previousExpirable = previous; + } + } + + static class StrongEntry + implements ReferenceEntry { + final K key; + final int hash; + final ReferenceEntry next; + volatile ValueReference valueReference = MapMakerInternalMap.unset(); + + StrongEntry(K key, int hash, @Nullable ReferenceEntry next) { + this.key = key; + this.hash = hash; + this.next = next; + } + + @Override + public K getKey() { + return this.key; + } + + @Override + public long getExpirationTime() { + throw new UnsupportedOperationException(); + } + + @Override + public void setExpirationTime(long time) { + throw new UnsupportedOperationException(); + } + + @Override + public ReferenceEntry getNextExpirable() { + throw new UnsupportedOperationException(); + } + + @Override + public void setNextExpirable(ReferenceEntry next) { + throw new UnsupportedOperationException(); + } + + @Override + public ReferenceEntry getPreviousExpirable() { + throw new UnsupportedOperationException(); + } + + @Override + public void setPreviousExpirable(ReferenceEntry previous) { + throw new UnsupportedOperationException(); + } + + @Override + public ReferenceEntry getNextEvictable() { + throw new UnsupportedOperationException(); + } + + @Override + public void setNextEvictable(ReferenceEntry next) { + throw new UnsupportedOperationException(); + } + + @Override + public ReferenceEntry getPreviousEvictable() { + throw new UnsupportedOperationException(); + } + + @Override + public void setPreviousEvictable(ReferenceEntry previous) { + throw new UnsupportedOperationException(); + } + + @Override + public ValueReference getValueReference() { + return this.valueReference; + } + + @Override + public void setValueReference(ValueReference valueReference) { + ValueReference previous = this.valueReference; + this.valueReference = valueReference; + previous.clear(valueReference); + } + + @Override + public int getHash() { + return this.hash; + } + + @Override + public ReferenceEntry getNext() { + return this.next; + } + } + + static abstract class AbstractReferenceEntry + implements ReferenceEntry { + AbstractReferenceEntry() { + } + + @Override + public ValueReference getValueReference() { + throw new UnsupportedOperationException(); + } + + @Override + public void setValueReference(ValueReference valueReference) { + throw new UnsupportedOperationException(); + } + + @Override + public ReferenceEntry getNext() { + throw new UnsupportedOperationException(); + } + + @Override + public int getHash() { + throw new UnsupportedOperationException(); + } + + @Override + public K getKey() { + throw new UnsupportedOperationException(); + } + + @Override + public long getExpirationTime() { + throw new UnsupportedOperationException(); + } + + @Override + public void setExpirationTime(long time) { + throw new UnsupportedOperationException(); + } + + @Override + public ReferenceEntry getNextExpirable() { + throw new UnsupportedOperationException(); + } + + @Override + public void setNextExpirable(ReferenceEntry next) { + throw new UnsupportedOperationException(); + } + + @Override + public ReferenceEntry getPreviousExpirable() { + throw new UnsupportedOperationException(); + } + + @Override + public void setPreviousExpirable(ReferenceEntry previous) { + throw new UnsupportedOperationException(); + } + + @Override + public ReferenceEntry getNextEvictable() { + throw new UnsupportedOperationException(); + } + + @Override + public void setNextEvictable(ReferenceEntry next) { + throw new UnsupportedOperationException(); + } + + @Override + public ReferenceEntry getPreviousEvictable() { + throw new UnsupportedOperationException(); + } + + @Override + public void setPreviousEvictable(ReferenceEntry previous) { + throw new UnsupportedOperationException(); + } + } + + private static enum NullEntry implements ReferenceEntry + { + INSTANCE; + + + @Override + public ValueReference getValueReference() { + return null; + } + + @Override + public void setValueReference(ValueReference valueReference) { + } + + @Override + public ReferenceEntry getNext() { + return null; + } + + @Override + public int getHash() { + return 0; + } + + @Override + public Object getKey() { + return null; + } + + @Override + public long getExpirationTime() { + return 0L; + } + + @Override + public void setExpirationTime(long time) { + } + + @Override + public ReferenceEntry getNextExpirable() { + return this; + } + + @Override + public void setNextExpirable(ReferenceEntry next) { + } + + @Override + public ReferenceEntry getPreviousExpirable() { + return this; + } + + @Override + public void setPreviousExpirable(ReferenceEntry previous) { + } + + @Override + public ReferenceEntry getNextEvictable() { + return this; + } + + @Override + public void setNextEvictable(ReferenceEntry next) { + } + + @Override + public ReferenceEntry getPreviousEvictable() { + return this; + } + + @Override + public void setPreviousEvictable(ReferenceEntry previous) { + } + } + + static interface ReferenceEntry { + public ValueReference getValueReference(); + + public void setValueReference(ValueReference var1); + + public ReferenceEntry getNext(); + + public int getHash(); + + public K getKey(); + + public long getExpirationTime(); + + public void setExpirationTime(long var1); + + public ReferenceEntry getNextExpirable(); + + public void setNextExpirable(ReferenceEntry var1); + + public ReferenceEntry getPreviousExpirable(); + + public void setPreviousExpirable(ReferenceEntry var1); + + public ReferenceEntry getNextEvictable(); + + public void setNextEvictable(ReferenceEntry var1); + + public ReferenceEntry getPreviousEvictable(); + + public void setPreviousEvictable(ReferenceEntry var1); + } + + static interface ValueReference { + public V get(); + + public V waitForValue() throws ExecutionException; + + public ReferenceEntry getEntry(); + + public ValueReference copyFor(ReferenceQueue var1, @Nullable V var2, ReferenceEntry var3); + + public void clear(@Nullable ValueReference var1); + + public boolean isComputingReference(); + } + + static enum EntryFactory { + STRONG{ + + @Override + ReferenceEntry newEntry(Segment segment, K key, int hash, @Nullable ReferenceEntry next) { + return new StrongEntry(key, hash, next); + } + } + , + STRONG_EXPIRABLE{ + + @Override + ReferenceEntry newEntry(Segment segment, K key, int hash, @Nullable ReferenceEntry next) { + return new StrongExpirableEntry(key, hash, next); + } + + @Override + ReferenceEntry copyEntry(Segment segment, ReferenceEntry original, ReferenceEntry newNext) { + ReferenceEntry newEntry = super.copyEntry(segment, original, newNext); + this.copyExpirableEntry(original, newEntry); + return newEntry; + } + } + , + STRONG_EVICTABLE{ + + @Override + ReferenceEntry newEntry(Segment segment, K key, int hash, @Nullable ReferenceEntry next) { + return new StrongEvictableEntry(key, hash, next); + } + + @Override + ReferenceEntry copyEntry(Segment segment, ReferenceEntry original, ReferenceEntry newNext) { + ReferenceEntry newEntry = super.copyEntry(segment, original, newNext); + this.copyEvictableEntry(original, newEntry); + return newEntry; + } + } + , + STRONG_EXPIRABLE_EVICTABLE{ + + @Override + ReferenceEntry newEntry(Segment segment, K key, int hash, @Nullable ReferenceEntry next) { + return new StrongExpirableEvictableEntry(key, hash, next); + } + + @Override + ReferenceEntry copyEntry(Segment segment, ReferenceEntry original, ReferenceEntry newNext) { + ReferenceEntry newEntry = super.copyEntry(segment, original, newNext); + this.copyExpirableEntry(original, newEntry); + this.copyEvictableEntry(original, newEntry); + return newEntry; + } + } + , + WEAK{ + + @Override + ReferenceEntry newEntry(Segment segment, K key, int hash, @Nullable ReferenceEntry next) { + return new WeakEntry(segment.keyReferenceQueue, key, hash, next); + } + } + , + WEAK_EXPIRABLE{ + + @Override + ReferenceEntry newEntry(Segment segment, K key, int hash, @Nullable ReferenceEntry next) { + return new WeakExpirableEntry(segment.keyReferenceQueue, key, hash, next); + } + + @Override + ReferenceEntry copyEntry(Segment segment, ReferenceEntry original, ReferenceEntry newNext) { + ReferenceEntry newEntry = super.copyEntry(segment, original, newNext); + this.copyExpirableEntry(original, newEntry); + return newEntry; + } + } + , + WEAK_EVICTABLE{ + + @Override + ReferenceEntry newEntry(Segment segment, K key, int hash, @Nullable ReferenceEntry next) { + return new WeakEvictableEntry(segment.keyReferenceQueue, key, hash, next); + } + + @Override + ReferenceEntry copyEntry(Segment segment, ReferenceEntry original, ReferenceEntry newNext) { + ReferenceEntry newEntry = super.copyEntry(segment, original, newNext); + this.copyEvictableEntry(original, newEntry); + return newEntry; + } + } + , + WEAK_EXPIRABLE_EVICTABLE{ + + @Override + ReferenceEntry newEntry(Segment segment, K key, int hash, @Nullable ReferenceEntry next) { + return new WeakExpirableEvictableEntry(segment.keyReferenceQueue, key, hash, next); + } + + @Override + ReferenceEntry copyEntry(Segment segment, ReferenceEntry original, ReferenceEntry newNext) { + ReferenceEntry newEntry = super.copyEntry(segment, original, newNext); + this.copyExpirableEntry(original, newEntry); + this.copyEvictableEntry(original, newEntry); + return newEntry; + } + }; + + static final int EXPIRABLE_MASK = 1; + static final int EVICTABLE_MASK = 2; + static final EntryFactory[][] factories; + + static EntryFactory getFactory(Strength keyStrength, boolean expireAfterWrite, boolean evictsBySize) { + int flags = (expireAfterWrite ? 1 : 0) | (evictsBySize ? 2 : 0); + return factories[keyStrength.ordinal()][flags]; + } + + abstract ReferenceEntry newEntry(Segment var1, K var2, int var3, @Nullable ReferenceEntry var4); + + ReferenceEntry copyEntry(Segment segment, ReferenceEntry original, ReferenceEntry newNext) { + return this.newEntry(segment, original.getKey(), original.getHash(), newNext); + } + + void copyExpirableEntry(ReferenceEntry original, ReferenceEntry newEntry) { + newEntry.setExpirationTime(original.getExpirationTime()); + MapMakerInternalMap.connectExpirables(original.getPreviousExpirable(), newEntry); + MapMakerInternalMap.connectExpirables(newEntry, original.getNextExpirable()); + MapMakerInternalMap.nullifyExpirable(original); + } + + void copyEvictableEntry(ReferenceEntry original, ReferenceEntry newEntry) { + MapMakerInternalMap.connectEvictables(original.getPreviousEvictable(), newEntry); + MapMakerInternalMap.connectEvictables(newEntry, original.getNextEvictable()); + MapMakerInternalMap.nullifyEvictable(original); + } + + static { + factories = new EntryFactory[][]{{STRONG, STRONG_EXPIRABLE, STRONG_EVICTABLE, STRONG_EXPIRABLE_EVICTABLE}, new EntryFactory[0], {WEAK, WEAK_EXPIRABLE, WEAK_EVICTABLE, WEAK_EXPIRABLE_EVICTABLE}}; + } + } + + static enum Strength { + STRONG{ + + @Override + ValueReference referenceValue(Segment segment, ReferenceEntry entry, V value) { + return new StrongValueReference(value); + } + + @Override + Equivalence defaultEquivalence() { + return Equivalence.equals(); + } + } + , + SOFT{ + + @Override + ValueReference referenceValue(Segment segment, ReferenceEntry entry, V value) { + return new SoftValueReference(segment.valueReferenceQueue, value, entry); + } + + @Override + Equivalence defaultEquivalence() { + return Equivalence.identity(); + } + } + , + WEAK{ + + @Override + ValueReference referenceValue(Segment segment, ReferenceEntry entry, V value) { + return new WeakValueReference(segment.valueReferenceQueue, value, entry); + } + + @Override + Equivalence defaultEquivalence() { + return Equivalence.identity(); + } + }; + + + abstract ValueReference referenceValue(Segment var1, ReferenceEntry var2, V var3); + + abstract Equivalence defaultEquivalence(); + } +} diff --git a/src/com/google/common/collect/Maps.java b/src/com/google/common/collect/Maps.java new file mode 100644 index 0000000..b05a84f --- /dev/null +++ b/src/com/google/common/collect/Maps.java @@ -0,0 +1,2691 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.Beta; +import com.google.common.annotations.GwtCompatible; +import com.google.common.annotations.GwtIncompatible; +import com.google.common.base.Converter; +import com.google.common.base.Equivalence; +import com.google.common.base.Function; +import com.google.common.base.Joiner; +import com.google.common.base.Objects; +import com.google.common.base.Preconditions; +import com.google.common.base.Predicate; +import com.google.common.base.Predicates; +import com.google.common.collect.AbstractMapEntry; +import com.google.common.collect.AbstractNavigableMap; +import com.google.common.collect.BiMap; +import com.google.common.collect.CollectPreconditions; +import com.google.common.collect.Collections2; +import com.google.common.collect.ForwardingCollection; +import com.google.common.collect.ForwardingMap; +import com.google.common.collect.ForwardingMapEntry; +import com.google.common.collect.ForwardingNavigableSet; +import com.google.common.collect.ForwardingSet; +import com.google.common.collect.ForwardingSortedMap; +import com.google.common.collect.ForwardingSortedSet; +import com.google.common.collect.ImmutableEntry; +import com.google.common.collect.ImmutableEnumMap; +import com.google.common.collect.ImmutableMap; +import com.google.common.collect.Iterables; +import com.google.common.collect.Iterators; +import com.google.common.collect.Lists; +import com.google.common.collect.MapDifference; +import com.google.common.collect.MapMaker; +import com.google.common.collect.Ordering; +import com.google.common.collect.Platform; +import com.google.common.collect.Sets; +import com.google.common.collect.SortedMapDifference; +import com.google.common.collect.Synchronized; +import com.google.common.collect.TransformedIterator; +import com.google.common.collect.UnmodifiableIterator; +import java.io.Serializable; +import java.util.AbstractCollection; +import java.util.AbstractMap; +import java.util.Collection; +import java.util.Collections; +import java.util.Comparator; +import java.util.EnumMap; +import java.util.Enumeration; +import java.util.HashMap; +import java.util.HashSet; +import java.util.IdentityHashMap; +import java.util.Iterator; +import java.util.LinkedHashMap; +import java.util.Map; +import java.util.NavigableMap; +import java.util.NavigableSet; +import java.util.Properties; +import java.util.Set; +import java.util.SortedMap; +import java.util.SortedSet; +import java.util.TreeMap; +import java.util.concurrent.ConcurrentMap; +import javax.annotation.Nullable; + +@GwtCompatible(emulated=true) +public final class Maps { + static final Joiner.MapJoiner STANDARD_JOINER = Collections2.STANDARD_JOINER.withKeyValueSeparator("="); + + private Maps() { + } + + static Function, K> keyFunction() { + return EntryFunction.KEY; + } + + static Function, V> valueFunction() { + return EntryFunction.VALUE; + } + + static Iterator keyIterator(Iterator> entryIterator) { + return Iterators.transform(entryIterator, Maps.keyFunction()); + } + + static Iterator valueIterator(Iterator> entryIterator) { + return Iterators.transform(entryIterator, Maps.valueFunction()); + } + + static UnmodifiableIterator valueIterator(final UnmodifiableIterator> entryIterator) { + return new UnmodifiableIterator(){ + + @Override + public boolean hasNext() { + return entryIterator.hasNext(); + } + + @Override + public V next() { + return ((Map.Entry)entryIterator.next()).getValue(); + } + }; + } + + @GwtCompatible(serializable=true) + @Beta + public static , V> ImmutableMap immutableEnumMap(Map map) { + if (map instanceof ImmutableEnumMap) { + ImmutableEnumMap result = (ImmutableEnumMap)map; + return result; + } + if (map.isEmpty()) { + return ImmutableMap.of(); + } + for (Map.Entry entry : map.entrySet()) { + Preconditions.checkNotNull(entry.getKey()); + Preconditions.checkNotNull(entry.getValue()); + } + return ImmutableEnumMap.asImmutable(new EnumMap(map)); + } + + public static HashMap newHashMap() { + return new HashMap(); + } + + public static HashMap newHashMapWithExpectedSize(int expectedSize) { + return new HashMap(Maps.capacity(expectedSize)); + } + + static int capacity(int expectedSize) { + if (expectedSize < 3) { + CollectPreconditions.checkNonnegative(expectedSize, "expectedSize"); + return expectedSize + 1; + } + if (expectedSize < 0x40000000) { + return expectedSize + expectedSize / 3; + } + return Integer.MAX_VALUE; + } + + public static HashMap newHashMap(Map map) { + return new HashMap(map); + } + + public static LinkedHashMap newLinkedHashMap() { + return new LinkedHashMap(); + } + + public static LinkedHashMap newLinkedHashMap(Map map) { + return new LinkedHashMap(map); + } + + public static ConcurrentMap newConcurrentMap() { + return new MapMaker().makeMap(); + } + + public static TreeMap newTreeMap() { + return new TreeMap(); + } + + public static TreeMap newTreeMap(SortedMap map) { + return new TreeMap(map); + } + + public static TreeMap newTreeMap(@Nullable Comparator comparator) { + return new TreeMap(comparator); + } + + public static , V> EnumMap newEnumMap(Class type) { + return new EnumMap(Preconditions.checkNotNull(type)); + } + + public static , V> EnumMap newEnumMap(Map map) { + return new EnumMap(map); + } + + public static IdentityHashMap newIdentityHashMap() { + return new IdentityHashMap(); + } + + public static MapDifference difference(Map left, Map right) { + if (left instanceof SortedMap) { + SortedMap sortedLeft = (SortedMap)left; + SortedMapDifference result = Maps.difference(sortedLeft, right); + return result; + } + return Maps.difference(left, right, Equivalence.equals()); + } + + @Beta + public static MapDifference difference(Map left, Map right, Equivalence valueEquivalence) { + Preconditions.checkNotNull(valueEquivalence); + HashMap onlyOnLeft = Maps.newHashMap(); + HashMap onlyOnRight = new HashMap(right); + HashMap onBoth = Maps.newHashMap(); + HashMap differences = Maps.newHashMap(); + Maps.doDifference(left, right, valueEquivalence, onlyOnLeft, onlyOnRight, onBoth, differences); + return new MapDifferenceImpl(onlyOnLeft, onlyOnRight, onBoth, differences); + } + + private static void doDifference(Map left, Map right, Equivalence valueEquivalence, Map onlyOnLeft, Map onlyOnRight, Map onBoth, Map> differences) { + for (Map.Entry entry : left.entrySet()) { + K leftKey = entry.getKey(); + V leftValue = entry.getValue(); + if (right.containsKey(leftKey)) { + V rightValue = onlyOnRight.remove(leftKey); + if (valueEquivalence.equivalent(leftValue, rightValue)) { + onBoth.put(leftKey, leftValue); + continue; + } + differences.put(leftKey, ValueDifferenceImpl.create(leftValue, rightValue)); + continue; + } + onlyOnLeft.put(leftKey, leftValue); + } + } + + private static Map unmodifiableMap(Map map) { + if (map instanceof SortedMap) { + return Collections.unmodifiableSortedMap((SortedMap)map); + } + return Collections.unmodifiableMap(map); + } + + public static SortedMapDifference difference(SortedMap left, Map right) { + Preconditions.checkNotNull(left); + Preconditions.checkNotNull(right); + Comparator comparator = Maps.orNaturalOrder(left.comparator()); + TreeMap onlyOnLeft = Maps.newTreeMap(comparator); + TreeMap onlyOnRight = Maps.newTreeMap(comparator); + onlyOnRight.putAll(right); + TreeMap onBoth = Maps.newTreeMap(comparator); + TreeMap differences = Maps.newTreeMap(comparator); + Maps.doDifference(left, right, Equivalence.equals(), onlyOnLeft, onlyOnRight, onBoth, differences); + return new SortedMapDifferenceImpl(onlyOnLeft, onlyOnRight, onBoth, differences); + } + + static Comparator orNaturalOrder(@Nullable Comparator comparator) { + if (comparator != null) { + return comparator; + } + return Ordering.natural(); + } + + @Beta + public static Map asMap(Set set, Function function) { + if (set instanceof SortedSet) { + return Maps.asMap((SortedSet)set, function); + } + return new AsMapView(set, function); + } + + @Beta + public static SortedMap asMap(SortedSet set, Function function) { + return Platform.mapsAsMapSortedSet(set, function); + } + + static SortedMap asMapSortedIgnoreNavigable(SortedSet set, Function function) { + return new SortedAsMapView(set, function); + } + + @Beta + @GwtIncompatible(value="NavigableMap") + public static NavigableMap asMap(NavigableSet set, Function function) { + return new NavigableAsMapView(set, function); + } + + static Iterator> asMapEntryIterator(Set set, final Function function) { + return new TransformedIterator>(set.iterator()){ + + @Override + Map.Entry transform(K key) { + return Maps.immutableEntry(key, function.apply(key)); + } + }; + } + + private static Set removeOnlySet(final Set set) { + return new ForwardingSet(){ + + @Override + protected Set delegate() { + return set; + } + + @Override + public boolean add(E element) { + throw new UnsupportedOperationException(); + } + + @Override + public boolean addAll(Collection es) { + throw new UnsupportedOperationException(); + } + }; + } + + private static SortedSet removeOnlySortedSet(final SortedSet set) { + return new ForwardingSortedSet(){ + + @Override + protected SortedSet delegate() { + return set; + } + + @Override + public boolean add(E element) { + throw new UnsupportedOperationException(); + } + + @Override + public boolean addAll(Collection es) { + throw new UnsupportedOperationException(); + } + + @Override + public SortedSet headSet(E toElement) { + return Maps.removeOnlySortedSet(super.headSet(toElement)); + } + + @Override + public SortedSet subSet(E fromElement, E toElement) { + return Maps.removeOnlySortedSet(super.subSet(fromElement, toElement)); + } + + @Override + public SortedSet tailSet(E fromElement) { + return Maps.removeOnlySortedSet(super.tailSet(fromElement)); + } + }; + } + + @GwtIncompatible(value="NavigableSet") + private static NavigableSet removeOnlyNavigableSet(final NavigableSet set) { + return new ForwardingNavigableSet(){ + + @Override + protected NavigableSet delegate() { + return set; + } + + @Override + public boolean add(E element) { + throw new UnsupportedOperationException(); + } + + @Override + public boolean addAll(Collection es) { + throw new UnsupportedOperationException(); + } + + @Override + public SortedSet headSet(E toElement) { + return Maps.removeOnlySortedSet(super.headSet(toElement)); + } + + @Override + public SortedSet subSet(E fromElement, E toElement) { + return Maps.removeOnlySortedSet(super.subSet(fromElement, toElement)); + } + + @Override + public SortedSet tailSet(E fromElement) { + return Maps.removeOnlySortedSet(super.tailSet(fromElement)); + } + + @Override + public NavigableSet headSet(E toElement, boolean inclusive) { + return Maps.removeOnlyNavigableSet(super.headSet(toElement, inclusive)); + } + + @Override + public NavigableSet tailSet(E fromElement, boolean inclusive) { + return Maps.removeOnlyNavigableSet(super.tailSet(fromElement, inclusive)); + } + + @Override + public NavigableSet subSet(E fromElement, boolean fromInclusive, E toElement, boolean toInclusive) { + return Maps.removeOnlyNavigableSet(super.subSet(fromElement, fromInclusive, toElement, toInclusive)); + } + + @Override + public NavigableSet descendingSet() { + return Maps.removeOnlyNavigableSet(super.descendingSet()); + } + }; + } + + @Beta + public static ImmutableMap toMap(Iterable keys, Function valueFunction) { + return Maps.toMap(keys.iterator(), valueFunction); + } + + @Beta + public static ImmutableMap toMap(Iterator keys, Function valueFunction) { + Preconditions.checkNotNull(valueFunction); + LinkedHashMap builder = Maps.newLinkedHashMap(); + while (keys.hasNext()) { + K key = keys.next(); + builder.put(key, valueFunction.apply(key)); + } + return ImmutableMap.copyOf(builder); + } + + public static ImmutableMap uniqueIndex(Iterable values, Function keyFunction) { + return Maps.uniqueIndex(values.iterator(), keyFunction); + } + + public static ImmutableMap uniqueIndex(Iterator values, Function keyFunction) { + Preconditions.checkNotNull(keyFunction); + ImmutableMap.Builder builder = ImmutableMap.builder(); + while (values.hasNext()) { + V value = values.next(); + builder.put(keyFunction.apply(value), value); + } + return builder.build(); + } + + @GwtIncompatible(value="java.util.Properties") + public static ImmutableMap fromProperties(Properties properties) { + ImmutableMap.Builder builder = ImmutableMap.builder(); + Enumeration e = properties.propertyNames(); + while (e.hasMoreElements()) { + String key = (String)e.nextElement(); + builder.put(key, properties.getProperty(key)); + } + return builder.build(); + } + + @GwtCompatible(serializable=true) + public static Map.Entry immutableEntry(@Nullable K key, @Nullable V value) { + return new ImmutableEntry(key, value); + } + + static Set> unmodifiableEntrySet(Set> entrySet) { + return new UnmodifiableEntrySet(Collections.unmodifiableSet(entrySet)); + } + + static Map.Entry unmodifiableEntry(final Map.Entry entry) { + Preconditions.checkNotNull(entry); + return new AbstractMapEntry(){ + + @Override + public K getKey() { + return entry.getKey(); + } + + @Override + public V getValue() { + return entry.getValue(); + } + }; + } + + @Beta + public static Converter asConverter(BiMap bimap) { + return new BiMapConverter(bimap); + } + + public static BiMap synchronizedBiMap(BiMap bimap) { + return Synchronized.biMap(bimap, null); + } + + public static BiMap unmodifiableBiMap(BiMap bimap) { + return new UnmodifiableBiMap(bimap, null); + } + + public static Map transformValues(Map fromMap, Function function) { + return Maps.transformEntries(fromMap, Maps.asEntryTransformer(function)); + } + + public static SortedMap transformValues(SortedMap fromMap, Function function) { + return Maps.transformEntries(fromMap, Maps.asEntryTransformer(function)); + } + + @GwtIncompatible(value="NavigableMap") + public static NavigableMap transformValues(NavigableMap fromMap, Function function) { + return Maps.transformEntries(fromMap, Maps.asEntryTransformer(function)); + } + + public static Map transformEntries(Map fromMap, EntryTransformer transformer) { + if (fromMap instanceof SortedMap) { + return Maps.transformEntries((SortedMap)fromMap, transformer); + } + return new TransformedEntriesMap(fromMap, transformer); + } + + public static SortedMap transformEntries(SortedMap fromMap, EntryTransformer transformer) { + return Platform.mapsTransformEntriesSortedMap(fromMap, transformer); + } + + @GwtIncompatible(value="NavigableMap") + public static NavigableMap transformEntries(NavigableMap fromMap, EntryTransformer transformer) { + return new TransformedEntriesNavigableMap(fromMap, transformer); + } + + static SortedMap transformEntriesIgnoreNavigable(SortedMap fromMap, EntryTransformer transformer) { + return new TransformedEntriesSortedMap(fromMap, transformer); + } + + static EntryTransformer asEntryTransformer(final Function function) { + Preconditions.checkNotNull(function); + return new EntryTransformer(){ + + @Override + public V2 transformEntry(K key, V1 value) { + return function.apply(value); + } + }; + } + + static Function asValueToValueFunction(final EntryTransformer transformer, final K key) { + Preconditions.checkNotNull(transformer); + return new Function(){ + + @Override + public V2 apply(@Nullable V1 v1) { + return transformer.transformEntry(key, v1); + } + }; + } + + static Function, V2> asEntryToValueFunction(final EntryTransformer transformer) { + Preconditions.checkNotNull(transformer); + return new Function, V2>(){ + + @Override + public V2 apply(Map.Entry entry) { + return transformer.transformEntry(entry.getKey(), entry.getValue()); + } + }; + } + + static Map.Entry transformEntry(final EntryTransformer transformer, final Map.Entry entry) { + Preconditions.checkNotNull(transformer); + Preconditions.checkNotNull(entry); + return new AbstractMapEntry(){ + + @Override + public K getKey() { + return entry.getKey(); + } + + @Override + public V2 getValue() { + return transformer.transformEntry(entry.getKey(), entry.getValue()); + } + }; + } + + static Function, Map.Entry> asEntryToEntryFunction(final EntryTransformer transformer) { + Preconditions.checkNotNull(transformer); + return new Function, Map.Entry>(){ + + @Override + public Map.Entry apply(Map.Entry entry) { + return Maps.transformEntry(transformer, entry); + } + }; + } + + static Predicate> keyPredicateOnEntries(Predicate keyPredicate) { + return Predicates.compose(keyPredicate, Maps.keyFunction()); + } + + static Predicate> valuePredicateOnEntries(Predicate valuePredicate) { + return Predicates.compose(valuePredicate, Maps.valueFunction()); + } + + public static Map filterKeys(Map unfiltered, Predicate keyPredicate) { + if (unfiltered instanceof SortedMap) { + return Maps.filterKeys((SortedMap)unfiltered, keyPredicate); + } + if (unfiltered instanceof BiMap) { + return Maps.filterKeys((BiMap)unfiltered, keyPredicate); + } + Preconditions.checkNotNull(keyPredicate); + Predicate> entryPredicate = Maps.keyPredicateOnEntries(keyPredicate); + return unfiltered instanceof AbstractFilteredMap ? Maps.filterFiltered((AbstractFilteredMap)unfiltered, entryPredicate) : new FilteredKeyMap(Preconditions.checkNotNull(unfiltered), keyPredicate, entryPredicate); + } + + public static SortedMap filterKeys(SortedMap unfiltered, Predicate keyPredicate) { + return Maps.filterEntries(unfiltered, Maps.keyPredicateOnEntries(keyPredicate)); + } + + @GwtIncompatible(value="NavigableMap") + public static NavigableMap filterKeys(NavigableMap unfiltered, Predicate keyPredicate) { + return Maps.filterEntries(unfiltered, Maps.keyPredicateOnEntries(keyPredicate)); + } + + public static BiMap filterKeys(BiMap unfiltered, Predicate keyPredicate) { + Preconditions.checkNotNull(keyPredicate); + return Maps.filterEntries(unfiltered, Maps.keyPredicateOnEntries(keyPredicate)); + } + + public static Map filterValues(Map unfiltered, Predicate valuePredicate) { + if (unfiltered instanceof SortedMap) { + return Maps.filterValues((SortedMap)unfiltered, valuePredicate); + } + if (unfiltered instanceof BiMap) { + return Maps.filterValues((BiMap)unfiltered, valuePredicate); + } + return Maps.filterEntries(unfiltered, Maps.valuePredicateOnEntries(valuePredicate)); + } + + public static SortedMap filterValues(SortedMap unfiltered, Predicate valuePredicate) { + return Maps.filterEntries(unfiltered, Maps.valuePredicateOnEntries(valuePredicate)); + } + + @GwtIncompatible(value="NavigableMap") + public static NavigableMap filterValues(NavigableMap unfiltered, Predicate valuePredicate) { + return Maps.filterEntries(unfiltered, Maps.valuePredicateOnEntries(valuePredicate)); + } + + public static BiMap filterValues(BiMap unfiltered, Predicate valuePredicate) { + return Maps.filterEntries(unfiltered, Maps.valuePredicateOnEntries(valuePredicate)); + } + + public static Map filterEntries(Map unfiltered, Predicate> entryPredicate) { + if (unfiltered instanceof SortedMap) { + return Maps.filterEntries((SortedMap)unfiltered, entryPredicate); + } + if (unfiltered instanceof BiMap) { + return Maps.filterEntries((BiMap)unfiltered, entryPredicate); + } + Preconditions.checkNotNull(entryPredicate); + return unfiltered instanceof AbstractFilteredMap ? Maps.filterFiltered((AbstractFilteredMap)unfiltered, entryPredicate) : new FilteredEntryMap(Preconditions.checkNotNull(unfiltered), entryPredicate); + } + + public static SortedMap filterEntries(SortedMap unfiltered, Predicate> entryPredicate) { + return Platform.mapsFilterSortedMap(unfiltered, entryPredicate); + } + + static SortedMap filterSortedIgnoreNavigable(SortedMap unfiltered, Predicate> entryPredicate) { + Preconditions.checkNotNull(entryPredicate); + return unfiltered instanceof FilteredEntrySortedMap ? Maps.filterFiltered((FilteredEntrySortedMap)unfiltered, entryPredicate) : new FilteredEntrySortedMap(Preconditions.checkNotNull(unfiltered), entryPredicate); + } + + @GwtIncompatible(value="NavigableMap") + public static NavigableMap filterEntries(NavigableMap unfiltered, Predicate> entryPredicate) { + Preconditions.checkNotNull(entryPredicate); + return unfiltered instanceof FilteredEntryNavigableMap ? Maps.filterFiltered((FilteredEntryNavigableMap)unfiltered, entryPredicate) : new FilteredEntryNavigableMap(Preconditions.checkNotNull(unfiltered), entryPredicate); + } + + public static BiMap filterEntries(BiMap unfiltered, Predicate> entryPredicate) { + Preconditions.checkNotNull(unfiltered); + Preconditions.checkNotNull(entryPredicate); + return unfiltered instanceof FilteredEntryBiMap ? Maps.filterFiltered((FilteredEntryBiMap)unfiltered, entryPredicate) : new FilteredEntryBiMap(unfiltered, entryPredicate); + } + + private static Map filterFiltered(AbstractFilteredMap map, Predicate> entryPredicate) { + return new FilteredEntryMap(map.unfiltered, Predicates.and(map.predicate, entryPredicate)); + } + + private static SortedMap filterFiltered(FilteredEntrySortedMap map, Predicate> entryPredicate) { + Predicate> predicate = Predicates.and(map.predicate, entryPredicate); + return new FilteredEntrySortedMap(map.sortedMap(), predicate); + } + + @GwtIncompatible(value="NavigableMap") + private static NavigableMap filterFiltered(FilteredEntryNavigableMap map, Predicate> entryPredicate) { + Predicate> predicate = Predicates.and(((FilteredEntryNavigableMap)map).entryPredicate, entryPredicate); + return new FilteredEntryNavigableMap(((FilteredEntryNavigableMap)map).unfiltered, predicate); + } + + private static BiMap filterFiltered(FilteredEntryBiMap map, Predicate> entryPredicate) { + Predicate> predicate = Predicates.and(map.predicate, entryPredicate); + return new FilteredEntryBiMap(map.unfiltered(), predicate); + } + + @GwtIncompatible(value="NavigableMap") + public static NavigableMap unmodifiableNavigableMap(NavigableMap map) { + Preconditions.checkNotNull(map); + if (map instanceof UnmodifiableNavigableMap) { + return map; + } + return new UnmodifiableNavigableMap(map); + } + + @Nullable + private static Map.Entry unmodifiableOrNull(@Nullable Map.Entry entry) { + return entry == null ? null : Maps.unmodifiableEntry(entry); + } + + @GwtIncompatible(value="NavigableMap") + public static NavigableMap synchronizedNavigableMap(NavigableMap navigableMap) { + return Synchronized.navigableMap(navigableMap); + } + + static V safeGet(Map map, @Nullable Object key) { + Preconditions.checkNotNull(map); + try { + return map.get(key); + } + catch (ClassCastException e) { + return null; + } + catch (NullPointerException e) { + return null; + } + } + + static boolean safeContainsKey(Map map, Object key) { + Preconditions.checkNotNull(map); + try { + return map.containsKey(key); + } + catch (ClassCastException e) { + return false; + } + catch (NullPointerException e) { + return false; + } + } + + static V safeRemove(Map map, Object key) { + Preconditions.checkNotNull(map); + try { + return map.remove(key); + } + catch (ClassCastException e) { + return null; + } + catch (NullPointerException e) { + return null; + } + } + + static boolean containsKeyImpl(Map map, @Nullable Object key) { + return Iterators.contains(Maps.keyIterator(map.entrySet().iterator()), key); + } + + static boolean containsValueImpl(Map map, @Nullable Object value) { + return Iterators.contains(Maps.valueIterator(map.entrySet().iterator()), value); + } + + static boolean containsEntryImpl(Collection> c, Object o) { + if (!(o instanceof Map.Entry)) { + return false; + } + return c.contains(Maps.unmodifiableEntry((Map.Entry)o)); + } + + static boolean removeEntryImpl(Collection> c, Object o) { + if (!(o instanceof Map.Entry)) { + return false; + } + return c.remove(Maps.unmodifiableEntry((Map.Entry)o)); + } + + static boolean equalsImpl(Map map, Object object) { + if (map == object) { + return true; + } + if (object instanceof Map) { + Map o = (Map)object; + return map.entrySet().equals(o.entrySet()); + } + return false; + } + + static String toStringImpl(Map map) { + StringBuilder sb = Collections2.newStringBuilderForCollection(map.size()).append('{'); + STANDARD_JOINER.appendTo(sb, map); + return sb.append('}').toString(); + } + + static void putAllImpl(Map self, Map map) { + for (Map.Entry entry : map.entrySet()) { + self.put(entry.getKey(), entry.getValue()); + } + } + + @Nullable + static K keyOrNull(@Nullable Map.Entry entry) { + return entry == null ? null : (K)entry.getKey(); + } + + @Nullable + static V valueOrNull(@Nullable Map.Entry entry) { + return entry == null ? null : (V)entry.getValue(); + } + + @GwtIncompatible(value="NavigableMap") + static abstract class DescendingMap + extends ForwardingMap + implements NavigableMap { + private transient Comparator comparator; + private transient Set> entrySet; + private transient NavigableSet navigableKeySet; + + DescendingMap() { + } + + abstract NavigableMap forward(); + + @Override + protected final Map delegate() { + return this.forward(); + } + + @Override + public Comparator comparator() { + Comparator result = this.comparator; + if (result == null) { + Comparator forwardCmp = this.forward().comparator(); + if (forwardCmp == null) { + forwardCmp = Ordering.natural(); + } + result = this.comparator = DescendingMap.reverse(forwardCmp); + } + return result; + } + + private static Ordering reverse(Comparator forward) { + return Ordering.from(forward).reverse(); + } + + @Override + public K firstKey() { + return this.forward().lastKey(); + } + + @Override + public K lastKey() { + return this.forward().firstKey(); + } + + @Override + public Map.Entry lowerEntry(K key) { + return this.forward().higherEntry(key); + } + + @Override + public K lowerKey(K key) { + return this.forward().higherKey(key); + } + + @Override + public Map.Entry floorEntry(K key) { + return this.forward().ceilingEntry(key); + } + + @Override + public K floorKey(K key) { + return this.forward().ceilingKey(key); + } + + @Override + public Map.Entry ceilingEntry(K key) { + return this.forward().floorEntry(key); + } + + @Override + public K ceilingKey(K key) { + return this.forward().floorKey(key); + } + + @Override + public Map.Entry higherEntry(K key) { + return this.forward().lowerEntry(key); + } + + @Override + public K higherKey(K key) { + return this.forward().lowerKey(key); + } + + @Override + public Map.Entry firstEntry() { + return this.forward().lastEntry(); + } + + @Override + public Map.Entry lastEntry() { + return this.forward().firstEntry(); + } + + @Override + public Map.Entry pollFirstEntry() { + return this.forward().pollLastEntry(); + } + + @Override + public Map.Entry pollLastEntry() { + return this.forward().pollFirstEntry(); + } + + @Override + public NavigableMap descendingMap() { + return this.forward(); + } + + @Override + public Set> entrySet() { + Set> result = this.entrySet; + return result == null ? (this.entrySet = this.createEntrySet()) : result; + } + + abstract Iterator> entryIterator(); + + Set> createEntrySet() { + return new EntrySet(){ + + @Override + Map map() { + return DescendingMap.this; + } + + @Override + public Iterator> iterator() { + return DescendingMap.this.entryIterator(); + } + }; + } + + @Override + public Set keySet() { + return this.navigableKeySet(); + } + + @Override + public NavigableSet navigableKeySet() { + NavigableSet result = this.navigableKeySet; + return result == null ? (this.navigableKeySet = new NavigableKeySet(this)) : result; + } + + @Override + public NavigableSet descendingKeySet() { + return this.forward().navigableKeySet(); + } + + @Override + public NavigableMap subMap(K fromKey, boolean fromInclusive, K toKey, boolean toInclusive) { + return this.forward().subMap(toKey, toInclusive, fromKey, fromInclusive).descendingMap(); + } + + @Override + public NavigableMap headMap(K toKey, boolean inclusive) { + return this.forward().tailMap(toKey, inclusive).descendingMap(); + } + + @Override + public NavigableMap tailMap(K fromKey, boolean inclusive) { + return this.forward().headMap(fromKey, inclusive).descendingMap(); + } + + @Override + public SortedMap subMap(K fromKey, K toKey) { + return this.subMap(fromKey, true, toKey, false); + } + + @Override + public SortedMap headMap(K toKey) { + return this.headMap(toKey, false); + } + + @Override + public SortedMap tailMap(K fromKey) { + return this.tailMap(fromKey, true); + } + + @Override + public Collection values() { + return new Values(this); + } + + @Override + public String toString() { + return this.standardToString(); + } + } + + static abstract class EntrySet + extends Sets.ImprovedAbstractSet> { + EntrySet() { + } + + abstract Map map(); + + @Override + public int size() { + return this.map().size(); + } + + @Override + public void clear() { + this.map().clear(); + } + + @Override + public boolean contains(Object o) { + if (o instanceof Map.Entry) { + Map.Entry entry = (Map.Entry)o; + Object key = entry.getKey(); + V value = Maps.safeGet(this.map(), key); + return Objects.equal(value, entry.getValue()) && (value != null || this.map().containsKey(key)); + } + return false; + } + + @Override + public boolean isEmpty() { + return this.map().isEmpty(); + } + + @Override + public boolean remove(Object o) { + if (this.contains(o)) { + Map.Entry entry = (Map.Entry)o; + return this.map().keySet().remove(entry.getKey()); + } + return false; + } + + @Override + public boolean removeAll(Collection c) { + try { + return super.removeAll(Preconditions.checkNotNull(c)); + } + catch (UnsupportedOperationException e) { + return Sets.removeAllImpl(this, c.iterator()); + } + } + + @Override + public boolean retainAll(Collection c) { + try { + return super.retainAll(Preconditions.checkNotNull(c)); + } + catch (UnsupportedOperationException e) { + HashSet keys = Sets.newHashSetWithExpectedSize(c.size()); + for (Object o : c) { + if (!this.contains(o)) continue; + Map.Entry entry = (Map.Entry)o; + keys.add(entry.getKey()); + } + return this.map().keySet().retainAll(keys); + } + } + } + + static class Values + extends AbstractCollection { + final Map map; + + Values(Map map) { + this.map = Preconditions.checkNotNull(map); + } + + final Map map() { + return this.map; + } + + @Override + public Iterator iterator() { + return Maps.valueIterator(this.map().entrySet().iterator()); + } + + @Override + public boolean remove(Object o) { + try { + return super.remove(o); + } + catch (UnsupportedOperationException e) { + for (Map.Entry entry : this.map().entrySet()) { + if (!Objects.equal(o, entry.getValue())) continue; + this.map().remove(entry.getKey()); + return true; + } + return false; + } + } + + @Override + public boolean removeAll(Collection c) { + try { + return super.removeAll(Preconditions.checkNotNull(c)); + } + catch (UnsupportedOperationException e) { + HashSet toRemove = Sets.newHashSet(); + for (Map.Entry entry : this.map().entrySet()) { + if (!c.contains(entry.getValue())) continue; + toRemove.add(entry.getKey()); + } + return this.map().keySet().removeAll(toRemove); + } + } + + @Override + public boolean retainAll(Collection c) { + try { + return super.retainAll(Preconditions.checkNotNull(c)); + } + catch (UnsupportedOperationException e) { + HashSet toRetain = Sets.newHashSet(); + for (Map.Entry entry : this.map().entrySet()) { + if (!c.contains(entry.getValue())) continue; + toRetain.add(entry.getKey()); + } + return this.map().keySet().retainAll(toRetain); + } + } + + @Override + public int size() { + return this.map().size(); + } + + @Override + public boolean isEmpty() { + return this.map().isEmpty(); + } + + @Override + public boolean contains(@Nullable Object o) { + return this.map().containsValue(o); + } + + @Override + public void clear() { + this.map().clear(); + } + } + + @GwtIncompatible(value="NavigableMap") + static class NavigableKeySet + extends SortedKeySet + implements NavigableSet { + NavigableKeySet(NavigableMap map) { + super(map); + } + + @Override + NavigableMap map() { + return (NavigableMap)this.map; + } + + @Override + public K lower(K e) { + return this.map().lowerKey(e); + } + + @Override + public K floor(K e) { + return this.map().floorKey(e); + } + + @Override + public K ceiling(K e) { + return this.map().ceilingKey(e); + } + + @Override + public K higher(K e) { + return this.map().higherKey(e); + } + + @Override + public K pollFirst() { + return Maps.keyOrNull(this.map().pollFirstEntry()); + } + + @Override + public K pollLast() { + return Maps.keyOrNull(this.map().pollLastEntry()); + } + + @Override + public NavigableSet descendingSet() { + return this.map().descendingKeySet(); + } + + @Override + public Iterator descendingIterator() { + return this.descendingSet().iterator(); + } + + @Override + public NavigableSet subSet(K fromElement, boolean fromInclusive, K toElement, boolean toInclusive) { + return this.map().subMap(fromElement, fromInclusive, toElement, toInclusive).navigableKeySet(); + } + + @Override + public NavigableSet headSet(K toElement, boolean inclusive) { + return this.map().headMap(toElement, inclusive).navigableKeySet(); + } + + @Override + public NavigableSet tailSet(K fromElement, boolean inclusive) { + return this.map().tailMap(fromElement, inclusive).navigableKeySet(); + } + + @Override + public SortedSet subSet(K fromElement, K toElement) { + return this.subSet(fromElement, true, toElement, false); + } + + @Override + public SortedSet headSet(K toElement) { + return this.headSet(toElement, false); + } + + @Override + public SortedSet tailSet(K fromElement) { + return this.tailSet(fromElement, true); + } + } + + static class SortedKeySet + extends KeySet + implements SortedSet { + SortedKeySet(SortedMap map) { + super(map); + } + + @Override + SortedMap map() { + return (SortedMap)super.map(); + } + + @Override + public Comparator comparator() { + return this.map().comparator(); + } + + @Override + public SortedSet subSet(K fromElement, K toElement) { + return new SortedKeySet(this.map().subMap(fromElement, toElement)); + } + + @Override + public SortedSet headSet(K toElement) { + return new SortedKeySet(this.map().headMap(toElement)); + } + + @Override + public SortedSet tailSet(K fromElement) { + return new SortedKeySet(this.map().tailMap(fromElement)); + } + + @Override + public K first() { + return this.map().firstKey(); + } + + @Override + public K last() { + return this.map().lastKey(); + } + } + + static class KeySet + extends Sets.ImprovedAbstractSet { + final Map map; + + KeySet(Map map) { + this.map = Preconditions.checkNotNull(map); + } + + Map map() { + return this.map; + } + + @Override + public Iterator iterator() { + return Maps.keyIterator(this.map().entrySet().iterator()); + } + + @Override + public int size() { + return this.map().size(); + } + + @Override + public boolean isEmpty() { + return this.map().isEmpty(); + } + + @Override + public boolean contains(Object o) { + return this.map().containsKey(o); + } + + @Override + public boolean remove(Object o) { + if (this.contains(o)) { + this.map().remove(o); + return true; + } + return false; + } + + @Override + public void clear() { + this.map().clear(); + } + } + + @GwtCompatible + static abstract class ImprovedAbstractMap + extends AbstractMap { + private transient Set> entrySet; + private transient Set keySet; + private transient Collection values; + + ImprovedAbstractMap() { + } + + abstract Set> createEntrySet(); + + @Override + public Set> entrySet() { + Set> result = this.entrySet; + return result == null ? (this.entrySet = this.createEntrySet()) : result; + } + + @Override + public Set keySet() { + Set result = this.keySet; + return result == null ? (this.keySet = this.createKeySet()) : result; + } + + Set createKeySet() { + return new KeySet(this); + } + + @Override + public Collection values() { + Collection result = this.values; + return result == null ? (this.values = this.createValues()) : result; + } + + Collection createValues() { + return new Values(this); + } + } + + @GwtIncompatible(value="NavigableMap") + static class UnmodifiableNavigableMap + extends ForwardingSortedMap + implements NavigableMap, + Serializable { + private final NavigableMap delegate; + private transient UnmodifiableNavigableMap descendingMap; + + UnmodifiableNavigableMap(NavigableMap delegate) { + this.delegate = delegate; + } + + UnmodifiableNavigableMap(NavigableMap delegate, UnmodifiableNavigableMap descendingMap) { + this.delegate = delegate; + this.descendingMap = descendingMap; + } + + @Override + protected SortedMap delegate() { + return Collections.unmodifiableSortedMap(this.delegate); + } + + @Override + public Map.Entry lowerEntry(K key) { + return Maps.unmodifiableOrNull(this.delegate.lowerEntry(key)); + } + + @Override + public K lowerKey(K key) { + return this.delegate.lowerKey(key); + } + + @Override + public Map.Entry floorEntry(K key) { + return Maps.unmodifiableOrNull(this.delegate.floorEntry(key)); + } + + @Override + public K floorKey(K key) { + return this.delegate.floorKey(key); + } + + @Override + public Map.Entry ceilingEntry(K key) { + return Maps.unmodifiableOrNull(this.delegate.ceilingEntry(key)); + } + + @Override + public K ceilingKey(K key) { + return this.delegate.ceilingKey(key); + } + + @Override + public Map.Entry higherEntry(K key) { + return Maps.unmodifiableOrNull(this.delegate.higherEntry(key)); + } + + @Override + public K higherKey(K key) { + return this.delegate.higherKey(key); + } + + @Override + public Map.Entry firstEntry() { + return Maps.unmodifiableOrNull(this.delegate.firstEntry()); + } + + @Override + public Map.Entry lastEntry() { + return Maps.unmodifiableOrNull(this.delegate.lastEntry()); + } + + @Override + public final Map.Entry pollFirstEntry() { + throw new UnsupportedOperationException(); + } + + @Override + public final Map.Entry pollLastEntry() { + throw new UnsupportedOperationException(); + } + + @Override + public NavigableMap descendingMap() { + UnmodifiableNavigableMap result = this.descendingMap; + return result == null ? (this.descendingMap = new UnmodifiableNavigableMap(this.delegate.descendingMap(), this)) : result; + } + + @Override + public Set keySet() { + return this.navigableKeySet(); + } + + @Override + public NavigableSet navigableKeySet() { + return Sets.unmodifiableNavigableSet(this.delegate.navigableKeySet()); + } + + @Override + public NavigableSet descendingKeySet() { + return Sets.unmodifiableNavigableSet(this.delegate.descendingKeySet()); + } + + @Override + public SortedMap subMap(K fromKey, K toKey) { + return this.subMap(fromKey, true, toKey, false); + } + + @Override + public SortedMap headMap(K toKey) { + return this.headMap(toKey, false); + } + + @Override + public SortedMap tailMap(K fromKey) { + return this.tailMap(fromKey, true); + } + + @Override + public NavigableMap subMap(K fromKey, boolean fromInclusive, K toKey, boolean toInclusive) { + return Maps.unmodifiableNavigableMap(this.delegate.subMap(fromKey, fromInclusive, toKey, toInclusive)); + } + + @Override + public NavigableMap headMap(K toKey, boolean inclusive) { + return Maps.unmodifiableNavigableMap(this.delegate.headMap(toKey, inclusive)); + } + + @Override + public NavigableMap tailMap(K fromKey, boolean inclusive) { + return Maps.unmodifiableNavigableMap(this.delegate.tailMap(fromKey, inclusive)); + } + } + + static final class FilteredEntryBiMap + extends FilteredEntryMap + implements BiMap { + private final BiMap inverse; + + private static Predicate> inversePredicate(final Predicate> forwardPredicate) { + return new Predicate>(){ + + @Override + public boolean apply(Map.Entry input) { + return forwardPredicate.apply(Maps.immutableEntry(input.getValue(), input.getKey())); + } + }; + } + + FilteredEntryBiMap(BiMap delegate, Predicate> predicate) { + super(delegate, predicate); + this.inverse = new FilteredEntryBiMap(delegate.inverse(), FilteredEntryBiMap.inversePredicate(predicate), this); + } + + private FilteredEntryBiMap(BiMap delegate, Predicate> predicate, BiMap inverse) { + super(delegate, predicate); + this.inverse = inverse; + } + + BiMap unfiltered() { + return (BiMap)this.unfiltered; + } + + @Override + public V forcePut(@Nullable K key, @Nullable V value) { + Preconditions.checkArgument(this.apply(key, value)); + return this.unfiltered().forcePut(key, value); + } + + @Override + public BiMap inverse() { + return this.inverse; + } + + @Override + public Set values() { + return this.inverse.keySet(); + } + } + + @GwtIncompatible(value="NavigableMap") + private static class FilteredEntryNavigableMap + extends AbstractNavigableMap { + private final NavigableMap unfiltered; + private final Predicate> entryPredicate; + private final Map filteredDelegate; + + FilteredEntryNavigableMap(NavigableMap unfiltered, Predicate> entryPredicate) { + this.unfiltered = Preconditions.checkNotNull(unfiltered); + this.entryPredicate = entryPredicate; + this.filteredDelegate = new FilteredEntryMap(unfiltered, entryPredicate); + } + + @Override + public Comparator comparator() { + return this.unfiltered.comparator(); + } + + @Override + public NavigableSet navigableKeySet() { + return new NavigableKeySet(this){ + + @Override + public boolean removeAll(Collection c) { + return Iterators.removeIf(FilteredEntryNavigableMap.this.unfiltered.entrySet().iterator(), Predicates.and(FilteredEntryNavigableMap.this.entryPredicate, Maps.keyPredicateOnEntries(Predicates.in(c)))); + } + + @Override + public boolean retainAll(Collection c) { + return Iterators.removeIf(FilteredEntryNavigableMap.this.unfiltered.entrySet().iterator(), Predicates.and(FilteredEntryNavigableMap.this.entryPredicate, Maps.keyPredicateOnEntries(Predicates.not(Predicates.in(c))))); + } + }; + } + + @Override + public Collection values() { + return new FilteredMapValues(this, this.unfiltered, this.entryPredicate); + } + + @Override + Iterator> entryIterator() { + return Iterators.filter(this.unfiltered.entrySet().iterator(), this.entryPredicate); + } + + @Override + Iterator> descendingEntryIterator() { + return Iterators.filter(this.unfiltered.descendingMap().entrySet().iterator(), this.entryPredicate); + } + + @Override + public int size() { + return this.filteredDelegate.size(); + } + + @Override + public boolean isEmpty() { + return !Iterables.any(this.unfiltered.entrySet(), this.entryPredicate); + } + + @Override + @Nullable + public V get(@Nullable Object key) { + return this.filteredDelegate.get(key); + } + + @Override + public boolean containsKey(@Nullable Object key) { + return this.filteredDelegate.containsKey(key); + } + + @Override + public V put(K key, V value) { + return this.filteredDelegate.put(key, value); + } + + @Override + public V remove(@Nullable Object key) { + return this.filteredDelegate.remove(key); + } + + @Override + public void putAll(Map m) { + this.filteredDelegate.putAll(m); + } + + @Override + public void clear() { + this.filteredDelegate.clear(); + } + + @Override + public Set> entrySet() { + return this.filteredDelegate.entrySet(); + } + + @Override + public Map.Entry pollFirstEntry() { + return Iterables.removeFirstMatching(this.unfiltered.entrySet(), this.entryPredicate); + } + + @Override + public Map.Entry pollLastEntry() { + return Iterables.removeFirstMatching(this.unfiltered.descendingMap().entrySet(), this.entryPredicate); + } + + @Override + public NavigableMap descendingMap() { + return Maps.filterEntries(this.unfiltered.descendingMap(), this.entryPredicate); + } + + @Override + public NavigableMap subMap(K fromKey, boolean fromInclusive, K toKey, boolean toInclusive) { + return Maps.filterEntries(this.unfiltered.subMap(fromKey, fromInclusive, toKey, toInclusive), this.entryPredicate); + } + + @Override + public NavigableMap headMap(K toKey, boolean inclusive) { + return Maps.filterEntries(this.unfiltered.headMap(toKey, inclusive), this.entryPredicate); + } + + @Override + public NavigableMap tailMap(K fromKey, boolean inclusive) { + return Maps.filterEntries(this.unfiltered.tailMap(fromKey, inclusive), this.entryPredicate); + } + } + + private static class FilteredEntrySortedMap + extends FilteredEntryMap + implements SortedMap { + FilteredEntrySortedMap(SortedMap unfiltered, Predicate> entryPredicate) { + super(unfiltered, entryPredicate); + } + + SortedMap sortedMap() { + return (SortedMap)this.unfiltered; + } + + @Override + public SortedSet keySet() { + return (SortedSet)super.keySet(); + } + + @Override + SortedSet createKeySet() { + return new SortedKeySet(); + } + + @Override + public Comparator comparator() { + return this.sortedMap().comparator(); + } + + @Override + public K firstKey() { + return (K)this.keySet().iterator().next(); + } + + @Override + public K lastKey() { + SortedMap headMap = this.sortedMap(); + K key; + while (!this.apply(key = headMap.lastKey(), this.unfiltered.get(key))) { + headMap = this.sortedMap().headMap(key); + } + return key; + } + + @Override + public SortedMap headMap(K toKey) { + return new FilteredEntrySortedMap(this.sortedMap().headMap(toKey), this.predicate); + } + + @Override + public SortedMap subMap(K fromKey, K toKey) { + return new FilteredEntrySortedMap(this.sortedMap().subMap(fromKey, toKey), this.predicate); + } + + @Override + public SortedMap tailMap(K fromKey) { + return new FilteredEntrySortedMap(this.sortedMap().tailMap(fromKey), this.predicate); + } + + class SortedKeySet + extends FilteredEntryMap.KeySet + implements SortedSet { + SortedKeySet() { + } + + @Override + public Comparator comparator() { + return FilteredEntrySortedMap.this.sortedMap().comparator(); + } + + @Override + public SortedSet subSet(K fromElement, K toElement) { + return (SortedSet)FilteredEntrySortedMap.this.subMap(fromElement, toElement).keySet(); + } + + @Override + public SortedSet headSet(K toElement) { + return (SortedSet)FilteredEntrySortedMap.this.headMap(toElement).keySet(); + } + + @Override + public SortedSet tailSet(K fromElement) { + return (SortedSet)FilteredEntrySortedMap.this.tailMap(fromElement).keySet(); + } + + @Override + public K first() { + return FilteredEntrySortedMap.this.firstKey(); + } + + @Override + public K last() { + return FilteredEntrySortedMap.this.lastKey(); + } + } + } + + static class FilteredEntryMap + extends AbstractFilteredMap { + final Set> filteredEntrySet; + + FilteredEntryMap(Map unfiltered, Predicate> entryPredicate) { + super(unfiltered, entryPredicate); + this.filteredEntrySet = Sets.filter(unfiltered.entrySet(), this.predicate); + } + + @Override + protected Set> createEntrySet() { + return new EntrySet(); + } + + @Override + Set createKeySet() { + return new KeySet(); + } + + class KeySet + extends com.google.common.collect.Maps$KeySet { + KeySet() { + super(FilteredEntryMap.this); + } + + @Override + public boolean remove(Object o) { + if (FilteredEntryMap.this.containsKey(o)) { + FilteredEntryMap.this.unfiltered.remove(o); + return true; + } + return false; + } + + @Override + private boolean removeIf(Predicate keyPredicate) { + return Iterables.removeIf(FilteredEntryMap.this.unfiltered.entrySet(), Predicates.and(FilteredEntryMap.this.predicate, Maps.keyPredicateOnEntries(keyPredicate))); + } + + @Override + public boolean removeAll(Collection c) { + return this.removeIf(Predicates.in(c)); + } + + @Override + public boolean retainAll(Collection c) { + return this.removeIf(Predicates.not(Predicates.in(c))); + } + + @Override + public Object[] toArray() { + return Lists.newArrayList(this.iterator()).toArray(); + } + + @Override + public T[] toArray(T[] array) { + return Lists.newArrayList(this.iterator()).toArray(array); + } + } + + private class EntrySet + extends ForwardingSet> { + private EntrySet() { + } + + @Override + protected Set> delegate() { + return FilteredEntryMap.this.filteredEntrySet; + } + + @Override + public Iterator> iterator() { + return new TransformedIterator, Map.Entry>(FilteredEntryMap.this.filteredEntrySet.iterator()){ + + @Override + Map.Entry transform(final Map.Entry entry) { + return new ForwardingMapEntry(){ + + @Override + protected Map.Entry delegate() { + return entry; + } + + @Override + public V setValue(V newValue) { + Preconditions.checkArgument(FilteredEntryMap.this.apply(this.getKey(), newValue)); + return super.setValue(newValue); + } + }; + } + }; + } + } + } + + private static class FilteredKeyMap + extends AbstractFilteredMap { + Predicate keyPredicate; + + FilteredKeyMap(Map unfiltered, Predicate keyPredicate, Predicate> entryPredicate) { + super(unfiltered, entryPredicate); + this.keyPredicate = keyPredicate; + } + + @Override + protected Set> createEntrySet() { + return Sets.filter(this.unfiltered.entrySet(), this.predicate); + } + + @Override + Set createKeySet() { + return Sets.filter(this.unfiltered.keySet(), this.keyPredicate); + } + + @Override + public boolean containsKey(Object key) { + return this.unfiltered.containsKey(key) && this.keyPredicate.apply(key); + } + } + + private static final class FilteredMapValues + extends Values { + Map unfiltered; + Predicate> predicate; + + FilteredMapValues(Map filteredMap, Map unfiltered, Predicate> predicate) { + super(filteredMap); + this.unfiltered = unfiltered; + this.predicate = predicate; + } + + @Override + public boolean remove(Object o) { + return Iterables.removeFirstMatching(this.unfiltered.entrySet(), Predicates.and(this.predicate, Maps.valuePredicateOnEntries(Predicates.equalTo(o)))) != null; + } + + @Override + private boolean removeIf(Predicate valuePredicate) { + return Iterables.removeIf(this.unfiltered.entrySet(), Predicates.and(this.predicate, Maps.valuePredicateOnEntries(valuePredicate))); + } + + @Override + public boolean removeAll(Collection collection) { + return this.removeIf(Predicates.in(collection)); + } + + @Override + public boolean retainAll(Collection collection) { + return this.removeIf(Predicates.not(Predicates.in(collection))); + } + + @Override + public Object[] toArray() { + return Lists.newArrayList(this.iterator()).toArray(); + } + + @Override + public T[] toArray(T[] array) { + return Lists.newArrayList(this.iterator()).toArray(array); + } + } + + private static abstract class AbstractFilteredMap + extends ImprovedAbstractMap { + final Map unfiltered; + final Predicate> predicate; + + AbstractFilteredMap(Map unfiltered, Predicate> predicate) { + this.unfiltered = unfiltered; + this.predicate = predicate; + } + + boolean apply(@Nullable Object key, @Nullable V value) { + Object k = key; + return this.predicate.apply(Maps.immutableEntry(k, value)); + } + + @Override + public V put(K key, V value) { + Preconditions.checkArgument(this.apply(key, value)); + return this.unfiltered.put(key, value); + } + + @Override + public void putAll(Map map) { + for (Map.Entry entry : map.entrySet()) { + Preconditions.checkArgument(this.apply(entry.getKey(), entry.getValue())); + } + this.unfiltered.putAll(map); + } + + @Override + public boolean containsKey(Object key) { + return this.unfiltered.containsKey(key) && this.apply(key, this.unfiltered.get(key)); + } + + @Override + public V get(Object key) { + V value = this.unfiltered.get(key); + return value != null && this.apply(key, value) ? (V)value : null; + } + + @Override + public boolean isEmpty() { + return this.entrySet().isEmpty(); + } + + @Override + public V remove(Object key) { + return this.containsKey(key) ? (V)this.unfiltered.remove(key) : null; + } + + @Override + Collection createValues() { + return new FilteredMapValues(this, this.unfiltered, this.predicate); + } + } + + @GwtIncompatible(value="NavigableMap") + private static class TransformedEntriesNavigableMap + extends TransformedEntriesSortedMap + implements NavigableMap { + TransformedEntriesNavigableMap(NavigableMap fromMap, EntryTransformer transformer) { + super(fromMap, transformer); + } + + @Override + public Map.Entry ceilingEntry(K key) { + return this.transformEntry(this.fromMap().ceilingEntry(key)); + } + + @Override + public K ceilingKey(K key) { + return this.fromMap().ceilingKey(key); + } + + @Override + public NavigableSet descendingKeySet() { + return this.fromMap().descendingKeySet(); + } + + @Override + public NavigableMap descendingMap() { + return Maps.transformEntries(this.fromMap().descendingMap(), this.transformer); + } + + @Override + public Map.Entry firstEntry() { + return this.transformEntry(this.fromMap().firstEntry()); + } + + @Override + public Map.Entry floorEntry(K key) { + return this.transformEntry(this.fromMap().floorEntry(key)); + } + + @Override + public K floorKey(K key) { + return this.fromMap().floorKey(key); + } + + @Override + public NavigableMap headMap(K toKey) { + return this.headMap(toKey, false); + } + + @Override + public NavigableMap headMap(K toKey, boolean inclusive) { + return Maps.transformEntries(this.fromMap().headMap(toKey, inclusive), this.transformer); + } + + @Override + public Map.Entry higherEntry(K key) { + return this.transformEntry(this.fromMap().higherEntry(key)); + } + + @Override + public K higherKey(K key) { + return this.fromMap().higherKey(key); + } + + @Override + public Map.Entry lastEntry() { + return this.transformEntry(this.fromMap().lastEntry()); + } + + @Override + public Map.Entry lowerEntry(K key) { + return this.transformEntry(this.fromMap().lowerEntry(key)); + } + + @Override + public K lowerKey(K key) { + return this.fromMap().lowerKey(key); + } + + @Override + public NavigableSet navigableKeySet() { + return this.fromMap().navigableKeySet(); + } + + @Override + public Map.Entry pollFirstEntry() { + return this.transformEntry(this.fromMap().pollFirstEntry()); + } + + @Override + public Map.Entry pollLastEntry() { + return this.transformEntry(this.fromMap().pollLastEntry()); + } + + @Override + public NavigableMap subMap(K fromKey, boolean fromInclusive, K toKey, boolean toInclusive) { + return Maps.transformEntries(this.fromMap().subMap(fromKey, fromInclusive, toKey, toInclusive), this.transformer); + } + + @Override + public NavigableMap subMap(K fromKey, K toKey) { + return this.subMap(fromKey, true, toKey, false); + } + + @Override + public NavigableMap tailMap(K fromKey) { + return this.tailMap(fromKey, true); + } + + @Override + public NavigableMap tailMap(K fromKey, boolean inclusive) { + return Maps.transformEntries(this.fromMap().tailMap(fromKey, inclusive), this.transformer); + } + + @Nullable + private Map.Entry transformEntry(@Nullable Map.Entry entry) { + return entry == null ? null : Maps.transformEntry(this.transformer, entry); + } + + @Override + protected NavigableMap fromMap() { + return (NavigableMap)super.fromMap(); + } + } + + static class TransformedEntriesSortedMap + extends TransformedEntriesMap + implements SortedMap { + protected SortedMap fromMap() { + return (SortedMap)this.fromMap; + } + + TransformedEntriesSortedMap(SortedMap fromMap, EntryTransformer transformer) { + super(fromMap, transformer); + } + + @Override + public Comparator comparator() { + return this.fromMap().comparator(); + } + + @Override + public K firstKey() { + return this.fromMap().firstKey(); + } + + @Override + public SortedMap headMap(K toKey) { + return Maps.transformEntries(this.fromMap().headMap(toKey), this.transformer); + } + + @Override + public K lastKey() { + return this.fromMap().lastKey(); + } + + @Override + public SortedMap subMap(K fromKey, K toKey) { + return Maps.transformEntries(this.fromMap().subMap(fromKey, toKey), this.transformer); + } + + @Override + public SortedMap tailMap(K fromKey) { + return Maps.transformEntries(this.fromMap().tailMap(fromKey), this.transformer); + } + } + + static class TransformedEntriesMap + extends ImprovedAbstractMap { + final Map fromMap; + final EntryTransformer transformer; + + TransformedEntriesMap(Map fromMap, EntryTransformer transformer) { + this.fromMap = Preconditions.checkNotNull(fromMap); + this.transformer = Preconditions.checkNotNull(transformer); + } + + @Override + public int size() { + return this.fromMap.size(); + } + + @Override + public boolean containsKey(Object key) { + return this.fromMap.containsKey(key); + } + + @Override + public V2 get(Object key) { + V1 value = this.fromMap.get(key); + return (V2)(value != null || this.fromMap.containsKey(key) ? this.transformer.transformEntry(key, value) : null); + } + + @Override + public V2 remove(Object key) { + return this.fromMap.containsKey(key) ? (V2)this.transformer.transformEntry((K)key, (V1)this.fromMap.remove(key)) : null; + } + + @Override + public void clear() { + this.fromMap.clear(); + } + + @Override + public Set keySet() { + return this.fromMap.keySet(); + } + + @Override + protected Set> createEntrySet() { + return new EntrySet(){ + + @Override + Map map() { + return TransformedEntriesMap.this; + } + + @Override + public Iterator> iterator() { + return Iterators.transform(TransformedEntriesMap.this.fromMap.entrySet().iterator(), Maps.asEntryToEntryFunction(TransformedEntriesMap.this.transformer)); + } + }; + } + } + + public static interface EntryTransformer { + public V2 transformEntry(@Nullable K var1, @Nullable V1 var2); + } + + private static class UnmodifiableBiMap + extends ForwardingMap + implements BiMap, + Serializable { + final Map unmodifiableMap; + final BiMap delegate; + BiMap inverse; + transient Set values; + private static final long serialVersionUID = 0L; + + UnmodifiableBiMap(BiMap delegate, @Nullable BiMap inverse) { + this.unmodifiableMap = Collections.unmodifiableMap(delegate); + this.delegate = delegate; + this.inverse = inverse; + } + + @Override + protected Map delegate() { + return this.unmodifiableMap; + } + + @Override + public V forcePut(K key, V value) { + throw new UnsupportedOperationException(); + } + + @Override + public BiMap inverse() { + BiMap result = this.inverse; + return result == null ? (this.inverse = new UnmodifiableBiMap(this.delegate.inverse(), this)) : result; + } + + @Override + public Set values() { + Set result = this.values; + return result == null ? (this.values = Collections.unmodifiableSet(this.delegate.values())) : result; + } + } + + private static final class BiMapConverter + extends Converter + implements Serializable { + private final BiMap bimap; + private static final long serialVersionUID = 0L; + + BiMapConverter(BiMap bimap) { + this.bimap = Preconditions.checkNotNull(bimap); + } + + @Override + protected B doForward(A a) { + return BiMapConverter.convert(this.bimap, a); + } + + @Override + protected A doBackward(B b) { + return BiMapConverter.convert(this.bimap.inverse(), b); + } + + private static Y convert(BiMap bimap, X input) { + Object output = bimap.get(input); + Preconditions.checkArgument(output != null, "No non-null mapping present for input: %s", input); + return (Y)output; + } + + @Override + public boolean equals(@Nullable Object object) { + if (object instanceof BiMapConverter) { + BiMapConverter that = (BiMapConverter)object; + return this.bimap.equals(that.bimap); + } + return false; + } + + public int hashCode() { + return this.bimap.hashCode(); + } + + public String toString() { + String string = String.valueOf(String.valueOf(this.bimap)); + return new StringBuilder(18 + string.length()).append("Maps.asConverter(").append(string).append(")").toString(); + } + } + + static class UnmodifiableEntrySet + extends UnmodifiableEntries + implements Set> { + UnmodifiableEntrySet(Set> entries) { + super(entries); + } + + @Override + public boolean equals(@Nullable Object object) { + return Sets.equalsImpl(this, object); + } + + @Override + public int hashCode() { + return Sets.hashCodeImpl(this); + } + } + + static class UnmodifiableEntries + extends ForwardingCollection> { + private final Collection> entries; + + UnmodifiableEntries(Collection> entries) { + this.entries = entries; + } + + @Override + protected Collection> delegate() { + return this.entries; + } + + @Override + public Iterator> iterator() { + final Iterator delegate = super.iterator(); + return new UnmodifiableIterator>(){ + + @Override + public boolean hasNext() { + return delegate.hasNext(); + } + + @Override + public Map.Entry next() { + return Maps.unmodifiableEntry((Map.Entry)delegate.next()); + } + }; + } + + @Override + public Object[] toArray() { + return this.standardToArray(); + } + + @Override + public T[] toArray(T[] array) { + return this.standardToArray(array); + } + } + + @GwtIncompatible(value="NavigableMap") + private static final class NavigableAsMapView + extends AbstractNavigableMap { + private final NavigableSet set; + private final Function function; + + NavigableAsMapView(NavigableSet ks, Function vFunction) { + this.set = Preconditions.checkNotNull(ks); + this.function = Preconditions.checkNotNull(vFunction); + } + + @Override + public NavigableMap subMap(K fromKey, boolean fromInclusive, K toKey, boolean toInclusive) { + return Maps.asMap(this.set.subSet(fromKey, fromInclusive, toKey, toInclusive), this.function); + } + + @Override + public NavigableMap headMap(K toKey, boolean inclusive) { + return Maps.asMap(this.set.headSet(toKey, inclusive), this.function); + } + + @Override + public NavigableMap tailMap(K fromKey, boolean inclusive) { + return Maps.asMap(this.set.tailSet(fromKey, inclusive), this.function); + } + + @Override + public Comparator comparator() { + return this.set.comparator(); + } + + @Override + @Nullable + public V get(@Nullable Object key) { + if (Collections2.safeContains(this.set, key)) { + Object k = key; + return this.function.apply(k); + } + return null; + } + + @Override + public void clear() { + this.set.clear(); + } + + @Override + Iterator> entryIterator() { + return Maps.asMapEntryIterator(this.set, this.function); + } + + @Override + Iterator> descendingEntryIterator() { + return this.descendingMap().entrySet().iterator(); + } + + @Override + public NavigableSet navigableKeySet() { + return Maps.removeOnlyNavigableSet(this.set); + } + + @Override + public int size() { + return this.set.size(); + } + + @Override + public NavigableMap descendingMap() { + return Maps.asMap(this.set.descendingSet(), this.function); + } + } + + private static class SortedAsMapView + extends AsMapView + implements SortedMap { + SortedAsMapView(SortedSet set, Function function) { + super(set, function); + } + + @Override + SortedSet backingSet() { + return (SortedSet)super.backingSet(); + } + + @Override + public Comparator comparator() { + return this.backingSet().comparator(); + } + + @Override + public Set keySet() { + return Maps.removeOnlySortedSet((SortedSet)this.backingSet()); + } + + @Override + public SortedMap subMap(K fromKey, K toKey) { + return Maps.asMap(this.backingSet().subSet(fromKey, toKey), this.function); + } + + @Override + public SortedMap headMap(K toKey) { + return Maps.asMap(this.backingSet().headSet(toKey), this.function); + } + + @Override + public SortedMap tailMap(K fromKey) { + return Maps.asMap(this.backingSet().tailSet(fromKey), this.function); + } + + @Override + public K firstKey() { + return (K)this.backingSet().first(); + } + + @Override + public K lastKey() { + return (K)this.backingSet().last(); + } + } + + private static class AsMapView + extends ImprovedAbstractMap { + private final Set set; + final Function function; + + Set backingSet() { + return this.set; + } + + AsMapView(Set set, Function function) { + this.set = Preconditions.checkNotNull(set); + this.function = Preconditions.checkNotNull(function); + } + + @Override + public Set createKeySet() { + return Maps.removeOnlySet(this.backingSet()); + } + + @Override + Collection createValues() { + return Collections2.transform(this.set, this.function); + } + + @Override + public int size() { + return this.backingSet().size(); + } + + @Override + public boolean containsKey(@Nullable Object key) { + return this.backingSet().contains(key); + } + + @Override + public V get(@Nullable Object key) { + if (Collections2.safeContains(this.backingSet(), key)) { + Object k = key; + return this.function.apply(k); + } + return null; + } + + @Override + public V remove(@Nullable Object key) { + if (this.backingSet().remove(key)) { + Object k = key; + return this.function.apply(k); + } + return null; + } + + @Override + public void clear() { + this.backingSet().clear(); + } + + @Override + protected Set> createEntrySet() { + return new EntrySet(){ + + @Override + Map map() { + return AsMapView.this; + } + + @Override + public Iterator> iterator() { + return Maps.asMapEntryIterator(AsMapView.this.backingSet(), AsMapView.this.function); + } + }; + } + } + + static class SortedMapDifferenceImpl + extends MapDifferenceImpl + implements SortedMapDifference { + SortedMapDifferenceImpl(SortedMap onlyOnLeft, SortedMap onlyOnRight, SortedMap onBoth, SortedMap> differences) { + super(onlyOnLeft, onlyOnRight, onBoth, differences); + } + + @Override + public SortedMap> entriesDiffering() { + return (SortedMap)super.entriesDiffering(); + } + + @Override + public SortedMap entriesInCommon() { + return (SortedMap)super.entriesInCommon(); + } + + @Override + public SortedMap entriesOnlyOnLeft() { + return (SortedMap)super.entriesOnlyOnLeft(); + } + + @Override + public SortedMap entriesOnlyOnRight() { + return (SortedMap)super.entriesOnlyOnRight(); + } + } + + static class ValueDifferenceImpl + implements MapDifference.ValueDifference { + private final V left; + private final V right; + + static MapDifference.ValueDifference create(@Nullable V left, @Nullable V right) { + return new ValueDifferenceImpl(left, right); + } + + private ValueDifferenceImpl(@Nullable V left, @Nullable V right) { + this.left = left; + this.right = right; + } + + @Override + public V leftValue() { + return this.left; + } + + @Override + public V rightValue() { + return this.right; + } + + @Override + public boolean equals(@Nullable Object object) { + if (object instanceof MapDifference.ValueDifference) { + MapDifference.ValueDifference that = (MapDifference.ValueDifference)object; + return Objects.equal(this.left, that.leftValue()) && Objects.equal(this.right, that.rightValue()); + } + return false; + } + + @Override + public int hashCode() { + return Objects.hashCode(this.left, this.right); + } + + public String toString() { + String string = String.valueOf(String.valueOf(this.left)); + String string2 = String.valueOf(String.valueOf(this.right)); + return new StringBuilder(4 + string.length() + string2.length()).append("(").append(string).append(", ").append(string2).append(")").toString(); + } + } + + static class MapDifferenceImpl + implements MapDifference { + final Map onlyOnLeft; + final Map onlyOnRight; + final Map onBoth; + final Map> differences; + + MapDifferenceImpl(Map onlyOnLeft, Map onlyOnRight, Map onBoth, Map> differences) { + this.onlyOnLeft = Maps.unmodifiableMap(onlyOnLeft); + this.onlyOnRight = Maps.unmodifiableMap(onlyOnRight); + this.onBoth = Maps.unmodifiableMap(onBoth); + this.differences = Maps.unmodifiableMap(differences); + } + + @Override + public boolean areEqual() { + return this.onlyOnLeft.isEmpty() && this.onlyOnRight.isEmpty() && this.differences.isEmpty(); + } + + @Override + public Map entriesOnlyOnLeft() { + return this.onlyOnLeft; + } + + @Override + public Map entriesOnlyOnRight() { + return this.onlyOnRight; + } + + @Override + public Map entriesInCommon() { + return this.onBoth; + } + + @Override + public Map> entriesDiffering() { + return this.differences; + } + + @Override + public boolean equals(Object object) { + if (object == this) { + return true; + } + if (object instanceof MapDifference) { + MapDifference other = (MapDifference)object; + return this.entriesOnlyOnLeft().equals(other.entriesOnlyOnLeft()) && this.entriesOnlyOnRight().equals(other.entriesOnlyOnRight()) && this.entriesInCommon().equals(other.entriesInCommon()) && this.entriesDiffering().equals(other.entriesDiffering()); + } + return false; + } + + @Override + public int hashCode() { + return Objects.hashCode(this.entriesOnlyOnLeft(), this.entriesOnlyOnRight(), this.entriesInCommon(), this.entriesDiffering()); + } + + public String toString() { + if (this.areEqual()) { + return "equal"; + } + StringBuilder result = new StringBuilder("not equal"); + if (!this.onlyOnLeft.isEmpty()) { + result.append(": only on left=").append(this.onlyOnLeft); + } + if (!this.onlyOnRight.isEmpty()) { + result.append(": only on right=").append(this.onlyOnRight); + } + if (!this.differences.isEmpty()) { + result.append(": value differences=").append(this.differences); + } + return result.toString(); + } + } + + private static enum EntryFunction implements Function, Object> + { + KEY{ + + @Override + @Nullable + public Object apply(Map.Entry entry) { + return entry.getKey(); + } + } + , + VALUE{ + + @Override + @Nullable + public Object apply(Map.Entry entry) { + return entry.getValue(); + } + }; + + } +} diff --git a/src/com/google/common/collect/MinMaxPriorityQueue.java b/src/com/google/common/collect/MinMaxPriorityQueue.java new file mode 100644 index 0000000..955ffd4 --- /dev/null +++ b/src/com/google/common/collect/MinMaxPriorityQueue.java @@ -0,0 +1,570 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.Beta; +import com.google.common.annotations.VisibleForTesting; +import com.google.common.base.Preconditions; +import com.google.common.collect.CollectPreconditions; +import com.google.common.collect.Ordering; +import com.google.common.math.IntMath; +import java.util.AbstractQueue; +import java.util.ArrayDeque; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.Comparator; +import java.util.ConcurrentModificationException; +import java.util.Iterator; +import java.util.List; +import java.util.NoSuchElementException; +import java.util.Queue; + +@Beta +public final class MinMaxPriorityQueue +extends AbstractQueue { + private final Heap minHeap; + private final Heap maxHeap; + @VisibleForTesting + final int maximumSize; + private Object[] queue; + private int size; + private int modCount; + private static final int EVEN_POWERS_OF_TWO = 0x55555555; + private static final int ODD_POWERS_OF_TWO = -1431655766; + private static final int DEFAULT_CAPACITY = 11; + + public static > MinMaxPriorityQueue create() { + return new Builder(Ordering.natural()).create(); + } + + public static > MinMaxPriorityQueue create(Iterable initialContents) { + return new Builder(Ordering.natural()).create(initialContents); + } + + public static Builder orderedBy(Comparator comparator) { + return new Builder(comparator); + } + + public static Builder expectedSize(int expectedSize) { + return new Builder(Ordering.natural()).expectedSize(expectedSize); + } + + public static Builder maximumSize(int maximumSize) { + return new Builder(Ordering.natural()).maximumSize(maximumSize); + } + + private MinMaxPriorityQueue(Builder builder, int queueSize) { + Ordering ordering = ((Builder)builder).ordering(); + this.minHeap = new Heap(ordering); + this.minHeap.otherHeap = this.maxHeap = new Heap(ordering.reverse()); + this.maxHeap.otherHeap = this.minHeap; + this.maximumSize = ((Builder)builder).maximumSize; + this.queue = new Object[queueSize]; + } + + @Override + public int size() { + return this.size; + } + + @Override + public boolean add(E element) { + this.offer(element); + return true; + } + + @Override + public boolean addAll(Collection newElements) { + boolean modified = false; + for (E element : newElements) { + this.offer(element); + modified = true; + } + return modified; + } + + @Override + public boolean offer(E element) { + Preconditions.checkNotNull(element); + ++this.modCount; + int insertIndex = this.size++; + this.growIfNeeded(); + this.heapForIndex(insertIndex).bubbleUp(insertIndex, element); + return this.size <= this.maximumSize || this.pollLast() != element; + } + + @Override + public E poll() { + return this.isEmpty() ? null : (E)this.removeAndGet(0); + } + + E elementData(int index) { + return (E)this.queue[index]; + } + + @Override + public E peek() { + return this.isEmpty() ? null : (E)this.elementData(0); + } + + private int getMaxElementIndex() { + switch (this.size) { + case 1: { + return 0; + } + case 2: { + return 1; + } + } + return this.maxHeap.compareElements(1, 2) <= 0 ? 1 : 2; + } + + public E pollFirst() { + return this.poll(); + } + + public E removeFirst() { + return this.remove(); + } + + public E peekFirst() { + return this.peek(); + } + + public E pollLast() { + return this.isEmpty() ? null : (E)this.removeAndGet(this.getMaxElementIndex()); + } + + public E removeLast() { + if (this.isEmpty()) { + throw new NoSuchElementException(); + } + return this.removeAndGet(this.getMaxElementIndex()); + } + + public E peekLast() { + return this.isEmpty() ? null : (E)this.elementData(this.getMaxElementIndex()); + } + + @VisibleForTesting + MoveDesc removeAt(int index) { + Preconditions.checkPositionIndex(index, this.size); + ++this.modCount; + --this.size; + if (this.size == index) { + this.queue[this.size] = null; + return null; + } + E actualLastElement = this.elementData(this.size); + int lastElementAt = this.heapForIndex(this.size).getCorrectLastElement(actualLastElement); + E toTrickle = this.elementData(this.size); + this.queue[this.size] = null; + MoveDesc changes = this.fillHole(index, toTrickle); + if (lastElementAt < index) { + if (changes == null) { + return new MoveDesc(actualLastElement, toTrickle); + } + return new MoveDesc(actualLastElement, changes.replaced); + } + return changes; + } + + private MoveDesc fillHole(int index, E toTrickle) { + int vacated; + Heap heap = this.heapForIndex(index); + int bubbledTo = heap.bubbleUpAlternatingLevels(vacated = heap.fillHoleAt(index), toTrickle); + if (bubbledTo == vacated) { + return heap.tryCrossOverAndBubbleUp(index, vacated, toTrickle); + } + return bubbledTo < index ? new MoveDesc(toTrickle, this.elementData(index)) : null; + } + + private E removeAndGet(int index) { + E value = this.elementData(index); + this.removeAt(index); + return value; + } + + private Heap heapForIndex(int i) { + return MinMaxPriorityQueue.isEvenLevel(i) ? this.minHeap : this.maxHeap; + } + + @VisibleForTesting + static boolean isEvenLevel(int index) { + int oneBased = index + 1; + Preconditions.checkState(oneBased > 0, "negative index"); + return (oneBased & 0x55555555) > (oneBased & 0xAAAAAAAA); + } + + @VisibleForTesting + boolean isIntact() { + for (int i = 1; i < this.size; ++i) { + if (this.heapForIndex(i).verifyIndex(i)) continue; + return false; + } + return true; + } + + @Override + public Iterator iterator() { + return new QueueIterator(); + } + + @Override + public void clear() { + for (int i = 0; i < this.size; ++i) { + this.queue[i] = null; + } + this.size = 0; + } + + @Override + public Object[] toArray() { + Object[] copyTo = new Object[this.size]; + System.arraycopy(this.queue, 0, copyTo, 0, this.size); + return copyTo; + } + + public Comparator comparator() { + return this.minHeap.ordering; + } + + @VisibleForTesting + int capacity() { + return this.queue.length; + } + + @VisibleForTesting + static int initialQueueSize(int configuredExpectedSize, int maximumSize, Iterable initialContents) { + int result; + int n = result = configuredExpectedSize == -1 ? 11 : configuredExpectedSize; + if (initialContents instanceof Collection) { + int initialSize = ((Collection)initialContents).size(); + result = Math.max(result, initialSize); + } + return MinMaxPriorityQueue.capAtMaximumSize(result, maximumSize); + } + + private void growIfNeeded() { + if (this.size > this.queue.length) { + int newCapacity = this.calculateNewCapacity(); + Object[] newQueue = new Object[newCapacity]; + System.arraycopy(this.queue, 0, newQueue, 0, this.queue.length); + this.queue = newQueue; + } + } + + private int calculateNewCapacity() { + int oldCapacity = this.queue.length; + int newCapacity = oldCapacity < 64 ? (oldCapacity + 1) * 2 : IntMath.checkedMultiply(oldCapacity / 2, 3); + return MinMaxPriorityQueue.capAtMaximumSize(newCapacity, this.maximumSize); + } + + private static int capAtMaximumSize(int queueSize, int maximumSize) { + return Math.min(queueSize - 1, maximumSize) + 1; + } + + private class QueueIterator + implements Iterator { + private int cursor = -1; + private int expectedModCount = MinMaxPriorityQueue.access$700(MinMaxPriorityQueue.this); + private Queue forgetMeNot; + private List skipMe; + private E lastFromForgetMeNot; + private boolean canRemove; + + private QueueIterator() { + } + + @Override + public boolean hasNext() { + this.checkModCount(); + return this.nextNotInSkipMe(this.cursor + 1) < MinMaxPriorityQueue.this.size() || this.forgetMeNot != null && !this.forgetMeNot.isEmpty(); + } + + @Override + public E next() { + this.checkModCount(); + int tempCursor = this.nextNotInSkipMe(this.cursor + 1); + if (tempCursor < MinMaxPriorityQueue.this.size()) { + this.cursor = tempCursor; + this.canRemove = true; + return MinMaxPriorityQueue.this.elementData(this.cursor); + } + if (this.forgetMeNot != null) { + this.cursor = MinMaxPriorityQueue.this.size(); + this.lastFromForgetMeNot = this.forgetMeNot.poll(); + if (this.lastFromForgetMeNot != null) { + this.canRemove = true; + return this.lastFromForgetMeNot; + } + } + throw new NoSuchElementException("iterator moved past last element in queue."); + } + + @Override + public void remove() { + CollectPreconditions.checkRemove(this.canRemove); + this.checkModCount(); + this.canRemove = false; + ++this.expectedModCount; + if (this.cursor < MinMaxPriorityQueue.this.size()) { + MoveDesc moved = MinMaxPriorityQueue.this.removeAt(this.cursor); + if (moved != null) { + if (this.forgetMeNot == null) { + this.forgetMeNot = new ArrayDeque(); + this.skipMe = new ArrayList(3); + } + this.forgetMeNot.add(moved.toTrickle); + this.skipMe.add(moved.replaced); + } + --this.cursor; + } else { + Preconditions.checkState(this.removeExact(this.lastFromForgetMeNot)); + this.lastFromForgetMeNot = null; + } + } + + private boolean containsExact(Iterable elements, E target) { + for (Object element : elements) { + if (element != target) continue; + return true; + } + return false; + } + + boolean removeExact(Object target) { + for (int i = 0; i < MinMaxPriorityQueue.this.size; ++i) { + if (MinMaxPriorityQueue.this.queue[i] != target) continue; + MinMaxPriorityQueue.this.removeAt(i); + return true; + } + return false; + } + + void checkModCount() { + if (MinMaxPriorityQueue.this.modCount != this.expectedModCount) { + throw new ConcurrentModificationException(); + } + } + + private int nextNotInSkipMe(int c) { + if (this.skipMe != null) { + while (c < MinMaxPriorityQueue.this.size() && this.containsExact(this.skipMe, MinMaxPriorityQueue.this.elementData(c))) { + ++c; + } + } + return c; + } + } + + private class Heap { + final Ordering ordering; + Heap otherHeap; + + Heap(Ordering ordering) { + this.ordering = ordering; + } + + int compareElements(int a, int b) { + return this.ordering.compare(MinMaxPriorityQueue.this.elementData(a), MinMaxPriorityQueue.this.elementData(b)); + } + + MoveDesc tryCrossOverAndBubbleUp(int removeIndex, int vacated, E toTrickle) { + int crossOver = this.crossOver(vacated, toTrickle); + if (crossOver == vacated) { + return null; + } + Object parent = crossOver < removeIndex ? MinMaxPriorityQueue.this.elementData(removeIndex) : MinMaxPriorityQueue.this.elementData(this.getParentIndex(removeIndex)); + if (this.otherHeap.bubbleUpAlternatingLevels(crossOver, toTrickle) < removeIndex) { + return new MoveDesc(toTrickle, parent); + } + return null; + } + + void bubbleUp(int index, E x) { + Heap heap; + int crossOver = this.crossOverUp(index, x); + if (crossOver == index) { + heap = this; + } else { + index = crossOver; + heap = this.otherHeap; + } + heap.bubbleUpAlternatingLevels(index, x); + } + + int bubbleUpAlternatingLevels(int index, E x) { + int grandParentIndex; + Object e; + while (index > 2 && this.ordering.compare(e = MinMaxPriorityQueue.this.elementData(grandParentIndex = this.getGrandparentIndex(index)), x) > 0) { + ((MinMaxPriorityQueue)MinMaxPriorityQueue.this).queue[index] = e; + index = grandParentIndex; + } + ((MinMaxPriorityQueue)MinMaxPriorityQueue.this).queue[index] = x; + return index; + } + + int findMin(int index, int len) { + if (index >= MinMaxPriorityQueue.this.size) { + return -1; + } + Preconditions.checkState(index > 0); + int limit = Math.min(index, MinMaxPriorityQueue.this.size - len) + len; + int minIndex = index; + for (int i = index + 1; i < limit; ++i) { + if (this.compareElements(i, minIndex) >= 0) continue; + minIndex = i; + } + return minIndex; + } + + int findMinChild(int index) { + return this.findMin(this.getLeftChildIndex(index), 2); + } + + int findMinGrandChild(int index) { + int leftChildIndex = this.getLeftChildIndex(index); + if (leftChildIndex < 0) { + return -1; + } + return this.findMin(this.getLeftChildIndex(leftChildIndex), 4); + } + + int crossOverUp(int index, E x) { + Object uncleElement; + int grandparentIndex; + int uncleIndex; + if (index == 0) { + ((MinMaxPriorityQueue)MinMaxPriorityQueue.this).queue[0] = x; + return 0; + } + int parentIndex = this.getParentIndex(index); + Object parentElement = MinMaxPriorityQueue.this.elementData(parentIndex); + if (parentIndex != 0 && (uncleIndex = this.getRightChildIndex(grandparentIndex = this.getParentIndex(parentIndex))) != parentIndex && this.getLeftChildIndex(uncleIndex) >= MinMaxPriorityQueue.this.size && this.ordering.compare(uncleElement = MinMaxPriorityQueue.this.elementData(uncleIndex), parentElement) < 0) { + parentIndex = uncleIndex; + parentElement = uncleElement; + } + if (this.ordering.compare(parentElement, x) < 0) { + ((MinMaxPriorityQueue)MinMaxPriorityQueue.this).queue[index] = parentElement; + ((MinMaxPriorityQueue)MinMaxPriorityQueue.this).queue[parentIndex] = x; + return parentIndex; + } + ((MinMaxPriorityQueue)MinMaxPriorityQueue.this).queue[index] = x; + return index; + } + + int getCorrectLastElement(E actualLastElement) { + Object uncleElement; + int grandparentIndex; + int uncleIndex; + int parentIndex = this.getParentIndex(MinMaxPriorityQueue.this.size); + if (parentIndex != 0 && (uncleIndex = this.getRightChildIndex(grandparentIndex = this.getParentIndex(parentIndex))) != parentIndex && this.getLeftChildIndex(uncleIndex) >= MinMaxPriorityQueue.this.size && this.ordering.compare(uncleElement = MinMaxPriorityQueue.this.elementData(uncleIndex), actualLastElement) < 0) { + ((MinMaxPriorityQueue)MinMaxPriorityQueue.this).queue[uncleIndex] = actualLastElement; + ((MinMaxPriorityQueue)MinMaxPriorityQueue.this).queue[((MinMaxPriorityQueue)MinMaxPriorityQueue.this).size] = uncleElement; + return uncleIndex; + } + return MinMaxPriorityQueue.this.size; + } + + int crossOver(int index, E x) { + int minChildIndex = this.findMinChild(index); + if (minChildIndex > 0 && this.ordering.compare(MinMaxPriorityQueue.this.elementData(minChildIndex), x) < 0) { + ((MinMaxPriorityQueue)MinMaxPriorityQueue.this).queue[index] = MinMaxPriorityQueue.this.elementData(minChildIndex); + ((MinMaxPriorityQueue)MinMaxPriorityQueue.this).queue[minChildIndex] = x; + return minChildIndex; + } + return this.crossOverUp(index, x); + } + + int fillHoleAt(int index) { + int minGrandchildIndex; + while ((minGrandchildIndex = this.findMinGrandChild(index)) > 0) { + ((MinMaxPriorityQueue)MinMaxPriorityQueue.this).queue[index] = MinMaxPriorityQueue.this.elementData(minGrandchildIndex); + index = minGrandchildIndex; + } + return index; + } + + private boolean verifyIndex(int i) { + if (this.getLeftChildIndex(i) < MinMaxPriorityQueue.this.size && this.compareElements(i, this.getLeftChildIndex(i)) > 0) { + return false; + } + if (this.getRightChildIndex(i) < MinMaxPriorityQueue.this.size && this.compareElements(i, this.getRightChildIndex(i)) > 0) { + return false; + } + if (i > 0 && this.compareElements(i, this.getParentIndex(i)) > 0) { + return false; + } + return i <= 2 || this.compareElements(this.getGrandparentIndex(i), i) <= 0; + } + + private int getLeftChildIndex(int i) { + return i * 2 + 1; + } + + private int getRightChildIndex(int i) { + return i * 2 + 2; + } + + private int getParentIndex(int i) { + return (i - 1) / 2; + } + + private int getGrandparentIndex(int i) { + return this.getParentIndex(this.getParentIndex(i)); + } + } + + static class MoveDesc { + final E toTrickle; + final E replaced; + + MoveDesc(E toTrickle, E replaced) { + this.toTrickle = toTrickle; + this.replaced = replaced; + } + } + + @Beta + public static final class Builder { + private static final int UNSET_EXPECTED_SIZE = -1; + private final Comparator comparator; + private int expectedSize = -1; + private int maximumSize = Integer.MAX_VALUE; + + private Builder(Comparator comparator) { + this.comparator = Preconditions.checkNotNull(comparator); + } + + public Builder expectedSize(int expectedSize) { + Preconditions.checkArgument(expectedSize >= 0); + this.expectedSize = expectedSize; + return this; + } + + public Builder maximumSize(int maximumSize) { + Preconditions.checkArgument(maximumSize > 0); + this.maximumSize = maximumSize; + return this; + } + + public MinMaxPriorityQueue create() { + return this.create(Collections.emptySet()); + } + + public MinMaxPriorityQueue create(Iterable initialContents) { + MinMaxPriorityQueue queue = new MinMaxPriorityQueue(this, MinMaxPriorityQueue.initialQueueSize(this.expectedSize, this.maximumSize, initialContents)); + for (T element : initialContents) { + queue.offer(element); + } + return queue; + } + + private Ordering ordering() { + return Ordering.from(this.comparator); + } + } +} diff --git a/src/com/google/common/collect/Multimap.java b/src/com/google/common/collect/Multimap.java new file mode 100644 index 0000000..88d50bf --- /dev/null +++ b/src/com/google/common/collect/Multimap.java @@ -0,0 +1,54 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.GwtCompatible; +import com.google.common.collect.Multiset; +import java.util.Collection; +import java.util.Map; +import java.util.Set; +import javax.annotation.Nullable; + +@GwtCompatible +public interface Multimap { + public int size(); + + public boolean isEmpty(); + + public boolean containsKey(@Nullable Object var1); + + public boolean containsValue(@Nullable Object var1); + + public boolean containsEntry(@Nullable Object var1, @Nullable Object var2); + + public boolean put(@Nullable K var1, @Nullable V var2); + + public boolean remove(@Nullable Object var1, @Nullable Object var2); + + public boolean putAll(@Nullable K var1, Iterable var2); + + public boolean putAll(Multimap var1); + + public Collection replaceValues(@Nullable K var1, Iterable var2); + + public Collection removeAll(@Nullable Object var1); + + public void clear(); + + public Collection get(@Nullable K var1); + + public Set keySet(); + + public Multiset keys(); + + public Collection values(); + + public Collection> entries(); + + public Map> asMap(); + + public boolean equals(@Nullable Object var1); + + public int hashCode(); +} diff --git a/src/com/google/common/collect/MultimapBuilder.java b/src/com/google/common/collect/MultimapBuilder.java new file mode 100644 index 0000000..d65edc7 --- /dev/null +++ b/src/com/google/common/collect/MultimapBuilder.java @@ -0,0 +1,330 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.Beta; +import com.google.common.annotations.GwtCompatible; +import com.google.common.base.Preconditions; +import com.google.common.base.Supplier; +import com.google.common.collect.CollectPreconditions; +import com.google.common.collect.ListMultimap; +import com.google.common.collect.Multimap; +import com.google.common.collect.Multimaps; +import com.google.common.collect.Ordering; +import com.google.common.collect.SetMultimap; +import com.google.common.collect.SortedSetMultimap; +import java.io.Serializable; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Comparator; +import java.util.EnumMap; +import java.util.EnumSet; +import java.util.HashMap; +import java.util.HashSet; +import java.util.LinkedHashMap; +import java.util.LinkedHashSet; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.SortedSet; +import java.util.TreeMap; +import java.util.TreeSet; + +@Beta +@GwtCompatible +public abstract class MultimapBuilder { + private static final int DEFAULT_EXPECTED_KEYS = 8; + + private MultimapBuilder() { + } + + public static MultimapBuilderWithKeys hashKeys() { + return MultimapBuilder.hashKeys(8); + } + + public static MultimapBuilderWithKeys hashKeys(final int expectedKeys) { + CollectPreconditions.checkNonnegative(expectedKeys, "expectedKeys"); + return new MultimapBuilderWithKeys(){ + + @Override + Map> createMap() { + return new HashMap(expectedKeys); + } + }; + } + + public static MultimapBuilderWithKeys linkedHashKeys() { + return MultimapBuilder.linkedHashKeys(8); + } + + public static MultimapBuilderWithKeys linkedHashKeys(final int expectedKeys) { + CollectPreconditions.checkNonnegative(expectedKeys, "expectedKeys"); + return new MultimapBuilderWithKeys(){ + + @Override + Map> createMap() { + return new LinkedHashMap(expectedKeys); + } + }; + } + + public static MultimapBuilderWithKeys treeKeys() { + return MultimapBuilder.treeKeys(Ordering.natural()); + } + + public static MultimapBuilderWithKeys treeKeys(final Comparator comparator) { + Preconditions.checkNotNull(comparator); + return new MultimapBuilderWithKeys(){ + + @Override + Map> createMap() { + return new TreeMap(comparator); + } + }; + } + + public static > MultimapBuilderWithKeys enumKeys(final Class keyClass) { + Preconditions.checkNotNull(keyClass); + return new MultimapBuilderWithKeys(){ + + @Override + Map> createMap() { + return new EnumMap(keyClass); + } + }; + } + + public abstract Multimap build(); + + public Multimap build(Multimap multimap) { + Multimap result = this.build(); + result.putAll(multimap); + return result; + } + + public static abstract class SortedSetMultimapBuilder + extends SetMultimapBuilder { + SortedSetMultimapBuilder() { + } + + @Override + public abstract SortedSetMultimap build(); + + @Override + public SortedSetMultimap build(Multimap multimap) { + return (SortedSetMultimap)super.build((Multimap)multimap); + } + } + + public static abstract class SetMultimapBuilder + extends MultimapBuilder { + SetMultimapBuilder() { + } + + @Override + public abstract SetMultimap build(); + + @Override + public SetMultimap build(Multimap multimap) { + return (SetMultimap)super.build(multimap); + } + } + + public static abstract class ListMultimapBuilder + extends MultimapBuilder { + ListMultimapBuilder() { + } + + @Override + public abstract ListMultimap build(); + + @Override + public ListMultimap build(Multimap multimap) { + return (ListMultimap)super.build(multimap); + } + } + + public static abstract class MultimapBuilderWithKeys { + private static final int DEFAULT_EXPECTED_VALUES_PER_KEY = 2; + + MultimapBuilderWithKeys() { + } + + abstract Map> createMap(); + + public ListMultimapBuilder arrayListValues() { + return this.arrayListValues(2); + } + + public ListMultimapBuilder arrayListValues(final int expectedValuesPerKey) { + CollectPreconditions.checkNonnegative(expectedValuesPerKey, "expectedValuesPerKey"); + return new ListMultimapBuilder(){ + + @Override + public ListMultimap build() { + return Multimaps.newListMultimap(MultimapBuilderWithKeys.this.createMap(), new ArrayListSupplier(expectedValuesPerKey)); + } + }; + } + + public ListMultimapBuilder linkedListValues() { + return new ListMultimapBuilder(){ + + @Override + public ListMultimap build() { + return Multimaps.newListMultimap(MultimapBuilderWithKeys.this.createMap(), LinkedListSupplier.instance()); + } + }; + } + + public SetMultimapBuilder hashSetValues() { + return this.hashSetValues(2); + } + + public SetMultimapBuilder hashSetValues(final int expectedValuesPerKey) { + CollectPreconditions.checkNonnegative(expectedValuesPerKey, "expectedValuesPerKey"); + return new SetMultimapBuilder(){ + + @Override + public SetMultimap build() { + return Multimaps.newSetMultimap(MultimapBuilderWithKeys.this.createMap(), new HashSetSupplier(expectedValuesPerKey)); + } + }; + } + + public SetMultimapBuilder linkedHashSetValues() { + return this.linkedHashSetValues(2); + } + + public SetMultimapBuilder linkedHashSetValues(final int expectedValuesPerKey) { + CollectPreconditions.checkNonnegative(expectedValuesPerKey, "expectedValuesPerKey"); + return new SetMultimapBuilder(){ + + @Override + public SetMultimap build() { + return Multimaps.newSetMultimap(MultimapBuilderWithKeys.this.createMap(), new LinkedHashSetSupplier(expectedValuesPerKey)); + } + }; + } + + public SortedSetMultimapBuilder treeSetValues() { + return this.treeSetValues(Ordering.natural()); + } + + public SortedSetMultimapBuilder treeSetValues(final Comparator comparator) { + Preconditions.checkNotNull(comparator, "comparator"); + return new SortedSetMultimapBuilder(){ + + @Override + public SortedSetMultimap build() { + return Multimaps.newSortedSetMultimap(MultimapBuilderWithKeys.this.createMap(), new TreeSetSupplier(comparator)); + } + }; + } + + public > SetMultimapBuilder enumSetValues(final Class valueClass) { + Preconditions.checkNotNull(valueClass, "valueClass"); + return new SetMultimapBuilder(){ + + @Override + public SetMultimap build() { + EnumSetSupplier factory = new EnumSetSupplier(valueClass); + return Multimaps.newSetMultimap(MultimapBuilderWithKeys.this.createMap(), factory); + } + }; + } + } + + private static final class EnumSetSupplier> + implements Supplier>, + Serializable { + private final Class clazz; + + EnumSetSupplier(Class clazz) { + this.clazz = Preconditions.checkNotNull(clazz); + } + + @Override + public Set get() { + return EnumSet.noneOf(this.clazz); + } + } + + private static final class TreeSetSupplier + implements Supplier>, + Serializable { + private final Comparator comparator; + + TreeSetSupplier(Comparator comparator) { + this.comparator = Preconditions.checkNotNull(comparator); + } + + @Override + public SortedSet get() { + return new TreeSet(this.comparator); + } + } + + private static final class LinkedHashSetSupplier + implements Supplier>, + Serializable { + private final int expectedValuesPerKey; + + LinkedHashSetSupplier(int expectedValuesPerKey) { + this.expectedValuesPerKey = CollectPreconditions.checkNonnegative(expectedValuesPerKey, "expectedValuesPerKey"); + } + + @Override + public Set get() { + return new LinkedHashSet(this.expectedValuesPerKey); + } + } + + private static final class HashSetSupplier + implements Supplier>, + Serializable { + private final int expectedValuesPerKey; + + HashSetSupplier(int expectedValuesPerKey) { + this.expectedValuesPerKey = CollectPreconditions.checkNonnegative(expectedValuesPerKey, "expectedValuesPerKey"); + } + + @Override + public Set get() { + return new HashSet(this.expectedValuesPerKey); + } + } + + private static enum LinkedListSupplier implements Supplier> + { + INSTANCE; + + + public static Supplier> instance() { + LinkedListSupplier result = INSTANCE; + return result; + } + + @Override + public List get() { + return new LinkedList(); + } + } + + private static final class ArrayListSupplier + implements Supplier>, + Serializable { + private final int expectedValuesPerKey; + + ArrayListSupplier(int expectedValuesPerKey) { + this.expectedValuesPerKey = CollectPreconditions.checkNonnegative(expectedValuesPerKey, "expectedValuesPerKey"); + } + + @Override + public List get() { + return new ArrayList(this.expectedValuesPerKey); + } + } +} diff --git a/src/com/google/common/collect/Multimaps.java b/src/com/google/common/collect/Multimaps.java new file mode 100644 index 0000000..45b4b1d --- /dev/null +++ b/src/com/google/common/collect/Multimaps.java @@ -0,0 +1,1190 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.Beta; +import com.google.common.annotations.GwtCompatible; +import com.google.common.annotations.GwtIncompatible; +import com.google.common.base.Function; +import com.google.common.base.Preconditions; +import com.google.common.base.Predicate; +import com.google.common.base.Predicates; +import com.google.common.base.Supplier; +import com.google.common.collect.AbstractListMultimap; +import com.google.common.collect.AbstractMapBasedMultimap; +import com.google.common.collect.AbstractMultimap; +import com.google.common.collect.AbstractMultiset; +import com.google.common.collect.AbstractSetMultimap; +import com.google.common.collect.AbstractSortedSetMultimap; +import com.google.common.collect.CollectPreconditions; +import com.google.common.collect.Collections2; +import com.google.common.collect.FilteredEntryMultimap; +import com.google.common.collect.FilteredEntrySetMultimap; +import com.google.common.collect.FilteredKeyListMultimap; +import com.google.common.collect.FilteredKeyMultimap; +import com.google.common.collect.FilteredKeySetMultimap; +import com.google.common.collect.FilteredMultimap; +import com.google.common.collect.FilteredSetMultimap; +import com.google.common.collect.ForwardingMultimap; +import com.google.common.collect.ImmutableListMultimap; +import com.google.common.collect.ImmutableMultimap; +import com.google.common.collect.ImmutableSetMultimap; +import com.google.common.collect.Iterators; +import com.google.common.collect.ListMultimap; +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import com.google.common.collect.Multimap; +import com.google.common.collect.Multiset; +import com.google.common.collect.Multisets; +import com.google.common.collect.SetMultimap; +import com.google.common.collect.Sets; +import com.google.common.collect.SortedSetMultimap; +import com.google.common.collect.Synchronized; +import com.google.common.collect.TransformedIterator; +import java.io.IOException; +import java.io.ObjectInputStream; +import java.io.ObjectOutputStream; +import java.io.Serializable; +import java.util.AbstractCollection; +import java.util.Collection; +import java.util.Collections; +import java.util.Comparator; +import java.util.HashSet; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.NoSuchElementException; +import java.util.Set; +import java.util.SortedSet; +import javax.annotation.Nullable; + +@GwtCompatible(emulated=true) +public final class Multimaps { + private Multimaps() { + } + + public static Multimap newMultimap(Map> map, Supplier> factory) { + return new CustomMultimap(map, factory); + } + + public static ListMultimap newListMultimap(Map> map, Supplier> factory) { + return new CustomListMultimap(map, factory); + } + + public static SetMultimap newSetMultimap(Map> map, Supplier> factory) { + return new CustomSetMultimap(map, factory); + } + + public static SortedSetMultimap newSortedSetMultimap(Map> map, Supplier> factory) { + return new CustomSortedSetMultimap(map, factory); + } + + public static > M invertFrom(Multimap source, M dest) { + Preconditions.checkNotNull(dest); + for (Map.Entry entry : source.entries()) { + dest.put(entry.getValue(), entry.getKey()); + } + return dest; + } + + public static Multimap synchronizedMultimap(Multimap multimap) { + return Synchronized.multimap(multimap, null); + } + + public static Multimap unmodifiableMultimap(Multimap delegate) { + if (delegate instanceof UnmodifiableMultimap || delegate instanceof ImmutableMultimap) { + return delegate; + } + return new UnmodifiableMultimap(delegate); + } + + @Deprecated + public static Multimap unmodifiableMultimap(ImmutableMultimap delegate) { + return Preconditions.checkNotNull(delegate); + } + + public static SetMultimap synchronizedSetMultimap(SetMultimap multimap) { + return Synchronized.setMultimap(multimap, null); + } + + public static SetMultimap unmodifiableSetMultimap(SetMultimap delegate) { + if (delegate instanceof UnmodifiableSetMultimap || delegate instanceof ImmutableSetMultimap) { + return delegate; + } + return new UnmodifiableSetMultimap(delegate); + } + + @Deprecated + public static SetMultimap unmodifiableSetMultimap(ImmutableSetMultimap delegate) { + return Preconditions.checkNotNull(delegate); + } + + public static SortedSetMultimap synchronizedSortedSetMultimap(SortedSetMultimap multimap) { + return Synchronized.sortedSetMultimap(multimap, null); + } + + public static SortedSetMultimap unmodifiableSortedSetMultimap(SortedSetMultimap delegate) { + if (delegate instanceof UnmodifiableSortedSetMultimap) { + return delegate; + } + return new UnmodifiableSortedSetMultimap(delegate); + } + + public static ListMultimap synchronizedListMultimap(ListMultimap multimap) { + return Synchronized.listMultimap(multimap, null); + } + + public static ListMultimap unmodifiableListMultimap(ListMultimap delegate) { + if (delegate instanceof UnmodifiableListMultimap || delegate instanceof ImmutableListMultimap) { + return delegate; + } + return new UnmodifiableListMultimap(delegate); + } + + @Deprecated + public static ListMultimap unmodifiableListMultimap(ImmutableListMultimap delegate) { + return Preconditions.checkNotNull(delegate); + } + + private static Collection unmodifiableValueCollection(Collection collection) { + if (collection instanceof SortedSet) { + return Collections.unmodifiableSortedSet((SortedSet)collection); + } + if (collection instanceof Set) { + return Collections.unmodifiableSet((Set)collection); + } + if (collection instanceof List) { + return Collections.unmodifiableList((List)collection); + } + return Collections.unmodifiableCollection(collection); + } + + private static Collection> unmodifiableEntries(Collection> entries) { + if (entries instanceof Set) { + return Maps.unmodifiableEntrySet((Set)entries); + } + return new Maps.UnmodifiableEntries(Collections.unmodifiableCollection(entries)); + } + + @Beta + public static Map> asMap(ListMultimap multimap) { + return multimap.asMap(); + } + + @Beta + public static Map> asMap(SetMultimap multimap) { + return multimap.asMap(); + } + + @Beta + public static Map> asMap(SortedSetMultimap multimap) { + return multimap.asMap(); + } + + @Beta + public static Map> asMap(Multimap multimap) { + return multimap.asMap(); + } + + public static SetMultimap forMap(Map map) { + return new MapMultimap(map); + } + + public static Multimap transformValues(Multimap fromMultimap, Function function) { + Preconditions.checkNotNull(function); + Maps.EntryTransformer transformer = Maps.asEntryTransformer(function); + return Multimaps.transformEntries(fromMultimap, transformer); + } + + public static Multimap transformEntries(Multimap fromMap, Maps.EntryTransformer transformer) { + return new TransformedEntriesMultimap(fromMap, transformer); + } + + public static ListMultimap transformValues(ListMultimap fromMultimap, Function function) { + Preconditions.checkNotNull(function); + Maps.EntryTransformer transformer = Maps.asEntryTransformer(function); + return Multimaps.transformEntries(fromMultimap, transformer); + } + + public static ListMultimap transformEntries(ListMultimap fromMap, Maps.EntryTransformer transformer) { + return new TransformedEntriesListMultimap(fromMap, transformer); + } + + public static ImmutableListMultimap index(Iterable values, Function keyFunction) { + return Multimaps.index(values.iterator(), keyFunction); + } + + public static ImmutableListMultimap index(Iterator values, Function keyFunction) { + Preconditions.checkNotNull(keyFunction); + ImmutableListMultimap.Builder builder = ImmutableListMultimap.builder(); + while (values.hasNext()) { + V value = values.next(); + Preconditions.checkNotNull(value, values); + builder.put((Object)keyFunction.apply(value), (Object)value); + } + return builder.build(); + } + + public static Multimap filterKeys(Multimap unfiltered, Predicate keyPredicate) { + if (unfiltered instanceof SetMultimap) { + return Multimaps.filterKeys((SetMultimap)unfiltered, keyPredicate); + } + if (unfiltered instanceof ListMultimap) { + return Multimaps.filterKeys((ListMultimap)unfiltered, keyPredicate); + } + if (unfiltered instanceof FilteredKeyMultimap) { + FilteredKeyMultimap prev = (FilteredKeyMultimap)unfiltered; + return new FilteredKeyMultimap(prev.unfiltered, Predicates.and(prev.keyPredicate, keyPredicate)); + } + if (unfiltered instanceof FilteredMultimap) { + FilteredMultimap prev = (FilteredMultimap)unfiltered; + return Multimaps.filterFiltered(prev, Maps.keyPredicateOnEntries(keyPredicate)); + } + return new FilteredKeyMultimap(unfiltered, keyPredicate); + } + + public static SetMultimap filterKeys(SetMultimap unfiltered, Predicate keyPredicate) { + if (unfiltered instanceof FilteredKeySetMultimap) { + FilteredKeySetMultimap prev = (FilteredKeySetMultimap)unfiltered; + return new FilteredKeySetMultimap(prev.unfiltered(), Predicates.and(prev.keyPredicate, keyPredicate)); + } + if (unfiltered instanceof FilteredSetMultimap) { + FilteredSetMultimap prev = (FilteredSetMultimap)unfiltered; + return Multimaps.filterFiltered(prev, Maps.keyPredicateOnEntries(keyPredicate)); + } + return new FilteredKeySetMultimap(unfiltered, keyPredicate); + } + + public static ListMultimap filterKeys(ListMultimap unfiltered, Predicate keyPredicate) { + if (unfiltered instanceof FilteredKeyListMultimap) { + FilteredKeyListMultimap prev = (FilteredKeyListMultimap)unfiltered; + return new FilteredKeyListMultimap(prev.unfiltered(), Predicates.and(prev.keyPredicate, keyPredicate)); + } + return new FilteredKeyListMultimap(unfiltered, keyPredicate); + } + + public static Multimap filterValues(Multimap unfiltered, Predicate valuePredicate) { + return Multimaps.filterEntries(unfiltered, Maps.valuePredicateOnEntries(valuePredicate)); + } + + public static SetMultimap filterValues(SetMultimap unfiltered, Predicate valuePredicate) { + return Multimaps.filterEntries(unfiltered, Maps.valuePredicateOnEntries(valuePredicate)); + } + + public static Multimap filterEntries(Multimap unfiltered, Predicate> entryPredicate) { + Preconditions.checkNotNull(entryPredicate); + if (unfiltered instanceof SetMultimap) { + return Multimaps.filterEntries((SetMultimap)unfiltered, entryPredicate); + } + return unfiltered instanceof FilteredMultimap ? Multimaps.filterFiltered((FilteredMultimap)unfiltered, entryPredicate) : new FilteredEntryMultimap(Preconditions.checkNotNull(unfiltered), entryPredicate); + } + + public static SetMultimap filterEntries(SetMultimap unfiltered, Predicate> entryPredicate) { + Preconditions.checkNotNull(entryPredicate); + return unfiltered instanceof FilteredSetMultimap ? Multimaps.filterFiltered((FilteredSetMultimap)unfiltered, entryPredicate) : new FilteredEntrySetMultimap(Preconditions.checkNotNull(unfiltered), entryPredicate); + } + + private static Multimap filterFiltered(FilteredMultimap multimap, Predicate> entryPredicate) { + Predicate> predicate = Predicates.and(multimap.entryPredicate(), entryPredicate); + return new FilteredEntryMultimap(multimap.unfiltered(), predicate); + } + + private static SetMultimap filterFiltered(FilteredSetMultimap multimap, Predicate> entryPredicate) { + Predicate> predicate = Predicates.and(multimap.entryPredicate(), entryPredicate); + return new FilteredEntrySetMultimap(multimap.unfiltered(), predicate); + } + + static boolean equalsImpl(Multimap multimap, @Nullable Object object) { + if (object == multimap) { + return true; + } + if (object instanceof Multimap) { + Multimap that = (Multimap)object; + return multimap.asMap().equals(that.asMap()); + } + return false; + } + + static final class AsMap + extends Maps.ImprovedAbstractMap> { + private final Multimap multimap; + + AsMap(Multimap multimap) { + this.multimap = Preconditions.checkNotNull(multimap); + } + + @Override + public int size() { + return this.multimap.keySet().size(); + } + + @Override + protected Set>> createEntrySet() { + return new EntrySet(); + } + + void removeValuesForKey(Object key) { + this.multimap.keySet().remove(key); + } + + @Override + public Collection get(Object key) { + return this.containsKey(key) ? this.multimap.get(key) : null; + } + + @Override + public Collection remove(Object key) { + return this.containsKey(key) ? this.multimap.removeAll(key) : null; + } + + @Override + public Set keySet() { + return this.multimap.keySet(); + } + + @Override + public boolean isEmpty() { + return this.multimap.isEmpty(); + } + + @Override + public boolean containsKey(Object key) { + return this.multimap.containsKey(key); + } + + @Override + public void clear() { + this.multimap.clear(); + } + + class EntrySet + extends Maps.EntrySet> { + EntrySet() { + } + + @Override + Map> map() { + return AsMap.this; + } + + @Override + public Iterator>> iterator() { + return Maps.asMapEntryIterator(AsMap.this.multimap.keySet(), new Function>(){ + + @Override + public Collection apply(K key) { + return AsMap.this.multimap.get(key); + } + }); + } + + @Override + public boolean remove(Object o) { + if (!this.contains(o)) { + return false; + } + Map.Entry entry = (Map.Entry)o; + AsMap.this.removeValuesForKey(entry.getKey()); + return true; + } + } + } + + static abstract class Entries + extends AbstractCollection> { + Entries() { + } + + abstract Multimap multimap(); + + @Override + public int size() { + return this.multimap().size(); + } + + @Override + public boolean contains(@Nullable Object o) { + if (o instanceof Map.Entry) { + Map.Entry entry = (Map.Entry)o; + return this.multimap().containsEntry(entry.getKey(), entry.getValue()); + } + return false; + } + + @Override + public boolean remove(@Nullable Object o) { + if (o instanceof Map.Entry) { + Map.Entry entry = (Map.Entry)o; + return this.multimap().remove(entry.getKey(), entry.getValue()); + } + return false; + } + + @Override + public void clear() { + this.multimap().clear(); + } + } + + static class Keys + extends AbstractMultiset { + final Multimap multimap; + + Keys(Multimap multimap) { + this.multimap = multimap; + } + + @Override + Iterator> entryIterator() { + return new TransformedIterator>, Multiset.Entry>(this.multimap.asMap().entrySet().iterator()){ + + @Override + Multiset.Entry transform(final Map.Entry> backingEntry) { + return new Multisets.AbstractEntry(){ + + @Override + public K getElement() { + return backingEntry.getKey(); + } + + @Override + public int getCount() { + return ((Collection)backingEntry.getValue()).size(); + } + }; + } + }; + } + + @Override + int distinctElements() { + return this.multimap.asMap().size(); + } + + @Override + Set> createEntrySet() { + return new KeysEntrySet(); + } + + @Override + public boolean contains(@Nullable Object element) { + return this.multimap.containsKey(element); + } + + @Override + public Iterator iterator() { + return Maps.keyIterator(this.multimap.entries().iterator()); + } + + @Override + public int count(@Nullable Object element) { + Collection values = Maps.safeGet(this.multimap.asMap(), element); + return values == null ? 0 : values.size(); + } + + @Override + public int remove(@Nullable Object element, int occurrences) { + CollectPreconditions.checkNonnegative(occurrences, "occurrences"); + if (occurrences == 0) { + return this.count(element); + } + Collection values = Maps.safeGet(this.multimap.asMap(), element); + if (values == null) { + return 0; + } + int oldCount = values.size(); + if (occurrences >= oldCount) { + values.clear(); + } else { + Iterator iterator = values.iterator(); + for (int i = 0; i < occurrences; ++i) { + iterator.next(); + iterator.remove(); + } + } + return oldCount; + } + + @Override + public void clear() { + this.multimap.clear(); + } + + @Override + public Set elementSet() { + return this.multimap.keySet(); + } + + class KeysEntrySet + extends Multisets.EntrySet { + KeysEntrySet() { + } + + @Override + Multiset multiset() { + return Keys.this; + } + + @Override + public Iterator> iterator() { + return Keys.this.entryIterator(); + } + + @Override + public int size() { + return Keys.this.distinctElements(); + } + + @Override + public boolean isEmpty() { + return Keys.this.multimap.isEmpty(); + } + + @Override + public boolean contains(@Nullable Object o) { + if (o instanceof Multiset.Entry) { + Multiset.Entry entry = (Multiset.Entry)o; + Collection collection = Keys.this.multimap.asMap().get(entry.getElement()); + return collection != null && collection.size() == entry.getCount(); + } + return false; + } + + @Override + public boolean remove(@Nullable Object o) { + if (o instanceof Multiset.Entry) { + Multiset.Entry entry = (Multiset.Entry)o; + Collection collection = Keys.this.multimap.asMap().get(entry.getElement()); + if (collection != null && collection.size() == entry.getCount()) { + collection.clear(); + return true; + } + } + return false; + } + } + } + + private static final class TransformedEntriesListMultimap + extends TransformedEntriesMultimap + implements ListMultimap { + TransformedEntriesListMultimap(ListMultimap fromMultimap, Maps.EntryTransformer transformer) { + super(fromMultimap, transformer); + } + + @Override + List transform(K key, Collection values) { + return Lists.transform((List)values, Maps.asValueToValueFunction(this.transformer, key)); + } + + @Override + public List get(K key) { + return this.transform((Object)key, this.fromMultimap.get(key)); + } + + @Override + public List removeAll(Object key) { + return this.transform(key, this.fromMultimap.removeAll(key)); + } + + @Override + public List replaceValues(K key, Iterable values) { + throw new UnsupportedOperationException(); + } + } + + private static class TransformedEntriesMultimap + extends AbstractMultimap { + final Multimap fromMultimap; + final Maps.EntryTransformer transformer; + + TransformedEntriesMultimap(Multimap fromMultimap, Maps.EntryTransformer transformer) { + this.fromMultimap = Preconditions.checkNotNull(fromMultimap); + this.transformer = Preconditions.checkNotNull(transformer); + } + + Collection transform(K key, Collection values) { + Function function = Maps.asValueToValueFunction(this.transformer, key); + if (values instanceof List) { + return Lists.transform((List)values, function); + } + return Collections2.transform(values, function); + } + + @Override + Map> createAsMap() { + return Maps.transformEntries(this.fromMultimap.asMap(), new Maps.EntryTransformer, Collection>(){ + + @Override + public Collection transformEntry(K key, Collection value) { + return TransformedEntriesMultimap.this.transform(key, value); + } + }); + } + + @Override + public void clear() { + this.fromMultimap.clear(); + } + + @Override + public boolean containsKey(Object key) { + return this.fromMultimap.containsKey(key); + } + + @Override + Iterator> entryIterator() { + return Iterators.transform(this.fromMultimap.entries().iterator(), Maps.asEntryToEntryFunction(this.transformer)); + } + + @Override + public Collection get(K key) { + return this.transform(key, this.fromMultimap.get(key)); + } + + @Override + public boolean isEmpty() { + return this.fromMultimap.isEmpty(); + } + + @Override + public Set keySet() { + return this.fromMultimap.keySet(); + } + + @Override + public Multiset keys() { + return this.fromMultimap.keys(); + } + + @Override + public boolean put(K key, V2 value) { + throw new UnsupportedOperationException(); + } + + @Override + public boolean putAll(K key, Iterable values) { + throw new UnsupportedOperationException(); + } + + @Override + public boolean putAll(Multimap multimap) { + throw new UnsupportedOperationException(); + } + + @Override + public boolean remove(Object key, Object value) { + return this.get(key).remove(value); + } + + @Override + public Collection removeAll(Object key) { + return this.transform(key, this.fromMultimap.removeAll(key)); + } + + @Override + public Collection replaceValues(K key, Iterable values) { + throw new UnsupportedOperationException(); + } + + @Override + public int size() { + return this.fromMultimap.size(); + } + + @Override + Collection createValues() { + return Collections2.transform(this.fromMultimap.entries(), Maps.asEntryToValueFunction(this.transformer)); + } + } + + private static class MapMultimap + extends AbstractMultimap + implements SetMultimap, + Serializable { + final Map map; + private static final long serialVersionUID = 7845222491160860175L; + + MapMultimap(Map map) { + this.map = Preconditions.checkNotNull(map); + } + + @Override + public int size() { + return this.map.size(); + } + + @Override + public boolean containsKey(Object key) { + return this.map.containsKey(key); + } + + @Override + public boolean containsValue(Object value) { + return this.map.containsValue(value); + } + + @Override + public boolean containsEntry(Object key, Object value) { + return this.map.entrySet().contains(Maps.immutableEntry(key, value)); + } + + @Override + public Set get(final K key) { + return new Sets.ImprovedAbstractSet(){ + + @Override + public Iterator iterator() { + return new Iterator(){ + int i; + + @Override + public boolean hasNext() { + return this.i == 0 && MapMultimap.this.map.containsKey(key); + } + + @Override + public V next() { + if (!this.hasNext()) { + throw new NoSuchElementException(); + } + ++this.i; + return MapMultimap.this.map.get(key); + } + + @Override + public void remove() { + CollectPreconditions.checkRemove(this.i == 1); + this.i = -1; + MapMultimap.this.map.remove(key); + } + }; + } + + @Override + public int size() { + return MapMultimap.this.map.containsKey(key) ? 1 : 0; + } + }; + } + + @Override + public boolean put(K key, V value) { + throw new UnsupportedOperationException(); + } + + @Override + public boolean putAll(K key, Iterable values) { + throw new UnsupportedOperationException(); + } + + @Override + public boolean putAll(Multimap multimap) { + throw new UnsupportedOperationException(); + } + + @Override + public Set replaceValues(K key, Iterable values) { + throw new UnsupportedOperationException(); + } + + @Override + public boolean remove(Object key, Object value) { + return this.map.entrySet().remove(Maps.immutableEntry(key, value)); + } + + @Override + public Set removeAll(Object key) { + HashSet values = new HashSet(2); + if (!this.map.containsKey(key)) { + return values; + } + values.add(this.map.remove(key)); + return values; + } + + @Override + public void clear() { + this.map.clear(); + } + + @Override + public Set keySet() { + return this.map.keySet(); + } + + @Override + public Collection values() { + return this.map.values(); + } + + @Override + public Set> entries() { + return this.map.entrySet(); + } + + @Override + Iterator> entryIterator() { + return this.map.entrySet().iterator(); + } + + @Override + Map> createAsMap() { + return new AsMap(this); + } + + @Override + public int hashCode() { + return this.map.hashCode(); + } + } + + private static class UnmodifiableSortedSetMultimap + extends UnmodifiableSetMultimap + implements SortedSetMultimap { + private static final long serialVersionUID = 0L; + + UnmodifiableSortedSetMultimap(SortedSetMultimap delegate) { + super(delegate); + } + + @Override + public SortedSetMultimap delegate() { + return (SortedSetMultimap)super.delegate(); + } + + @Override + public SortedSet get(K key) { + return Collections.unmodifiableSortedSet(this.delegate().get(key)); + } + + @Override + public SortedSet removeAll(Object key) { + throw new UnsupportedOperationException(); + } + + @Override + public SortedSet replaceValues(K key, Iterable values) { + throw new UnsupportedOperationException(); + } + + @Override + public Comparator valueComparator() { + return this.delegate().valueComparator(); + } + } + + private static class UnmodifiableSetMultimap + extends UnmodifiableMultimap + implements SetMultimap { + private static final long serialVersionUID = 0L; + + UnmodifiableSetMultimap(SetMultimap delegate) { + super(delegate); + } + + @Override + public SetMultimap delegate() { + return (SetMultimap)super.delegate(); + } + + @Override + public Set get(K key) { + return Collections.unmodifiableSet(this.delegate().get(key)); + } + + @Override + public Set> entries() { + return Maps.unmodifiableEntrySet(this.delegate().entries()); + } + + @Override + public Set removeAll(Object key) { + throw new UnsupportedOperationException(); + } + + @Override + public Set replaceValues(K key, Iterable values) { + throw new UnsupportedOperationException(); + } + } + + private static class UnmodifiableListMultimap + extends UnmodifiableMultimap + implements ListMultimap { + private static final long serialVersionUID = 0L; + + UnmodifiableListMultimap(ListMultimap delegate) { + super(delegate); + } + + @Override + public ListMultimap delegate() { + return (ListMultimap)super.delegate(); + } + + @Override + public List get(K key) { + return Collections.unmodifiableList(this.delegate().get(key)); + } + + @Override + public List removeAll(Object key) { + throw new UnsupportedOperationException(); + } + + @Override + public List replaceValues(K key, Iterable values) { + throw new UnsupportedOperationException(); + } + } + + private static class UnmodifiableMultimap + extends ForwardingMultimap + implements Serializable { + final Multimap delegate; + transient Collection> entries; + transient Multiset keys; + transient Set keySet; + transient Collection values; + transient Map> map; + private static final long serialVersionUID = 0L; + + UnmodifiableMultimap(Multimap delegate) { + this.delegate = Preconditions.checkNotNull(delegate); + } + + @Override + protected Multimap delegate() { + return this.delegate; + } + + @Override + public void clear() { + throw new UnsupportedOperationException(); + } + + @Override + public Map> asMap() { + Map> result = this.map; + if (result == null) { + result = this.map = Collections.unmodifiableMap(Maps.transformValues(this.delegate.asMap(), new Function, Collection>(){ + + @Override + public Collection apply(Collection collection) { + return Multimaps.unmodifiableValueCollection(collection); + } + })); + } + return result; + } + + @Override + public Collection> entries() { + Collection result = this.entries; + if (result == null) { + this.entries = result = Multimaps.unmodifiableEntries(this.delegate.entries()); + } + return result; + } + + @Override + public Collection get(K key) { + return Multimaps.unmodifiableValueCollection(this.delegate.get(key)); + } + + @Override + public Multiset keys() { + Multiset result = this.keys; + if (result == null) { + this.keys = result = Multisets.unmodifiableMultiset(this.delegate.keys()); + } + return result; + } + + @Override + public Set keySet() { + Set result = this.keySet; + if (result == null) { + this.keySet = result = Collections.unmodifiableSet(this.delegate.keySet()); + } + return result; + } + + @Override + public boolean put(K key, V value) { + throw new UnsupportedOperationException(); + } + + @Override + public boolean putAll(K key, Iterable values) { + throw new UnsupportedOperationException(); + } + + @Override + public boolean putAll(Multimap multimap) { + throw new UnsupportedOperationException(); + } + + @Override + public boolean remove(Object key, Object value) { + throw new UnsupportedOperationException(); + } + + @Override + public Collection removeAll(Object key) { + throw new UnsupportedOperationException(); + } + + @Override + public Collection replaceValues(K key, Iterable values) { + throw new UnsupportedOperationException(); + } + + @Override + public Collection values() { + Collection result = this.values; + if (result == null) { + this.values = result = Collections.unmodifiableCollection(this.delegate.values()); + } + return result; + } + } + + private static class CustomSortedSetMultimap + extends AbstractSortedSetMultimap { + transient Supplier> factory; + transient Comparator valueComparator; + @GwtIncompatible(value="not needed in emulated source") + private static final long serialVersionUID = 0L; + + CustomSortedSetMultimap(Map> map, Supplier> factory) { + super(map); + this.factory = Preconditions.checkNotNull(factory); + this.valueComparator = factory.get().comparator(); + } + + @Override + protected SortedSet createCollection() { + return this.factory.get(); + } + + @Override + public Comparator valueComparator() { + return this.valueComparator; + } + + @GwtIncompatible(value="java.io.ObjectOutputStream") + private void writeObject(ObjectOutputStream stream) throws IOException { + stream.defaultWriteObject(); + stream.writeObject(this.factory); + stream.writeObject(this.backingMap()); + } + + @GwtIncompatible(value="java.io.ObjectInputStream") + private void readObject(ObjectInputStream stream) throws IOException, ClassNotFoundException { + stream.defaultReadObject(); + this.factory = (Supplier)stream.readObject(); + this.valueComparator = this.factory.get().comparator(); + Map map = (Map)stream.readObject(); + this.setMap(map); + } + } + + private static class CustomSetMultimap + extends AbstractSetMultimap { + transient Supplier> factory; + @GwtIncompatible(value="not needed in emulated source") + private static final long serialVersionUID = 0L; + + CustomSetMultimap(Map> map, Supplier> factory) { + super(map); + this.factory = Preconditions.checkNotNull(factory); + } + + @Override + protected Set createCollection() { + return this.factory.get(); + } + + @GwtIncompatible(value="java.io.ObjectOutputStream") + private void writeObject(ObjectOutputStream stream) throws IOException { + stream.defaultWriteObject(); + stream.writeObject(this.factory); + stream.writeObject(this.backingMap()); + } + + @GwtIncompatible(value="java.io.ObjectInputStream") + private void readObject(ObjectInputStream stream) throws IOException, ClassNotFoundException { + stream.defaultReadObject(); + this.factory = (Supplier)stream.readObject(); + Map map = (Map)stream.readObject(); + this.setMap(map); + } + } + + private static class CustomListMultimap + extends AbstractListMultimap { + transient Supplier> factory; + @GwtIncompatible(value="java serialization not supported") + private static final long serialVersionUID = 0L; + + CustomListMultimap(Map> map, Supplier> factory) { + super(map); + this.factory = Preconditions.checkNotNull(factory); + } + + @Override + protected List createCollection() { + return this.factory.get(); + } + + @GwtIncompatible(value="java.io.ObjectOutputStream") + private void writeObject(ObjectOutputStream stream) throws IOException { + stream.defaultWriteObject(); + stream.writeObject(this.factory); + stream.writeObject(this.backingMap()); + } + + @GwtIncompatible(value="java.io.ObjectInputStream") + private void readObject(ObjectInputStream stream) throws IOException, ClassNotFoundException { + stream.defaultReadObject(); + this.factory = (Supplier)stream.readObject(); + Map map = (Map)stream.readObject(); + this.setMap(map); + } + } + + private static class CustomMultimap + extends AbstractMapBasedMultimap { + transient Supplier> factory; + @GwtIncompatible(value="java serialization not supported") + private static final long serialVersionUID = 0L; + + CustomMultimap(Map> map, Supplier> factory) { + super(map); + this.factory = Preconditions.checkNotNull(factory); + } + + @Override + protected Collection createCollection() { + return this.factory.get(); + } + + @GwtIncompatible(value="java.io.ObjectOutputStream") + private void writeObject(ObjectOutputStream stream) throws IOException { + stream.defaultWriteObject(); + stream.writeObject(this.factory); + stream.writeObject(this.backingMap()); + } + + @GwtIncompatible(value="java.io.ObjectInputStream") + private void readObject(ObjectInputStream stream) throws IOException, ClassNotFoundException { + stream.defaultReadObject(); + this.factory = (Supplier)stream.readObject(); + Map map = (Map)stream.readObject(); + this.setMap(map); + } + } +} diff --git a/src/com/google/common/collect/Multiset.java b/src/com/google/common/collect/Multiset.java new file mode 100644 index 0000000..89cb56c --- /dev/null +++ b/src/com/google/common/collect/Multiset.java @@ -0,0 +1,69 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.GwtCompatible; +import java.util.Collection; +import java.util.Iterator; +import java.util.Set; +import javax.annotation.Nullable; + +@GwtCompatible +public interface Multiset +extends Collection { + public int count(@Nullable Object var1); + + public int add(@Nullable E var1, int var2); + + public int remove(@Nullable Object var1, int var2); + + public int setCount(E var1, int var2); + + public boolean setCount(E var1, int var2, int var3); + + public Set elementSet(); + + public Set> entrySet(); + + @Override + public boolean equals(@Nullable Object var1); + + @Override + public int hashCode(); + + public String toString(); + + @Override + public Iterator iterator(); + + @Override + public boolean contains(@Nullable Object var1); + + @Override + public boolean containsAll(Collection var1); + + @Override + public boolean add(E var1); + + @Override + public boolean remove(@Nullable Object var1); + + @Override + public boolean removeAll(Collection var1); + + @Override + public boolean retainAll(Collection var1); + + public static interface Entry { + public E getElement(); + + public int getCount(); + + public boolean equals(Object var1); + + public int hashCode(); + + public String toString(); + } +} diff --git a/src/com/google/common/collect/Multisets.java b/src/com/google/common/collect/Multisets.java new file mode 100644 index 0000000..929a18d --- /dev/null +++ b/src/com/google/common/collect/Multisets.java @@ -0,0 +1,810 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.Beta; +import com.google.common.annotations.GwtCompatible; +import com.google.common.base.Objects; +import com.google.common.base.Preconditions; +import com.google.common.base.Predicate; +import com.google.common.base.Predicates; +import com.google.common.collect.AbstractIterator; +import com.google.common.collect.AbstractMultiset; +import com.google.common.collect.CollectPreconditions; +import com.google.common.collect.ForwardingMultiset; +import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableMultiset; +import com.google.common.collect.Iterators; +import com.google.common.collect.Multiset; +import com.google.common.collect.Ordering; +import com.google.common.collect.Sets; +import com.google.common.collect.SortedMultiset; +import com.google.common.collect.TransformedIterator; +import com.google.common.collect.UnmodifiableIterator; +import com.google.common.collect.UnmodifiableSortedMultiset; +import com.google.common.primitives.Ints; +import java.io.Serializable; +import java.util.Collection; +import java.util.Collections; +import java.util.Iterator; +import java.util.NoSuchElementException; +import java.util.Set; +import javax.annotation.Nullable; + +@GwtCompatible +public final class Multisets { + private static final Ordering> DECREASING_COUNT_ORDERING = new Ordering>(){ + + @Override + public int compare(Multiset.Entry entry1, Multiset.Entry entry2) { + return Ints.compare(entry2.getCount(), entry1.getCount()); + } + }; + + private Multisets() { + } + + public static Multiset unmodifiableMultiset(Multiset multiset) { + if (multiset instanceof UnmodifiableMultiset || multiset instanceof ImmutableMultiset) { + Multiset result = multiset; + return result; + } + return new UnmodifiableMultiset(Preconditions.checkNotNull(multiset)); + } + + @Deprecated + public static Multiset unmodifiableMultiset(ImmutableMultiset multiset) { + return Preconditions.checkNotNull(multiset); + } + + @Beta + public static SortedMultiset unmodifiableSortedMultiset(SortedMultiset sortedMultiset) { + return new UnmodifiableSortedMultiset(Preconditions.checkNotNull(sortedMultiset)); + } + + public static Multiset.Entry immutableEntry(@Nullable E e, int n) { + return new ImmutableEntry(e, n); + } + + @Beta + public static Multiset filter(Multiset unfiltered, Predicate predicate) { + if (unfiltered instanceof FilteredMultiset) { + FilteredMultiset filtered = (FilteredMultiset)unfiltered; + Predicate combinedPredicate = Predicates.and(filtered.predicate, predicate); + return new FilteredMultiset(filtered.unfiltered, combinedPredicate); + } + return new FilteredMultiset(unfiltered, predicate); + } + + static int inferDistinctElements(Iterable elements) { + if (elements instanceof Multiset) { + return ((Multiset)elements).elementSet().size(); + } + return 11; + } + + @Beta + public static Multiset union(final Multiset multiset1, final Multiset multiset2) { + Preconditions.checkNotNull(multiset1); + Preconditions.checkNotNull(multiset2); + return new AbstractMultiset(){ + + @Override + public boolean contains(@Nullable Object element) { + return multiset1.contains(element) || multiset2.contains(element); + } + + @Override + public boolean isEmpty() { + return multiset1.isEmpty() && multiset2.isEmpty(); + } + + @Override + public int count(Object element) { + return Math.max(multiset1.count(element), multiset2.count(element)); + } + + @Override + Set createElementSet() { + return Sets.union(multiset1.elementSet(), multiset2.elementSet()); + } + + @Override + Iterator> entryIterator() { + final Iterator iterator1 = multiset1.entrySet().iterator(); + final Iterator iterator2 = multiset2.entrySet().iterator(); + return new AbstractIterator>(){ + + @Override + protected Multiset.Entry computeNext() { + if (iterator1.hasNext()) { + Multiset.Entry entry1 = (Multiset.Entry)iterator1.next(); + Object element = entry1.getElement(); + int count = Math.max(entry1.getCount(), multiset2.count(element)); + return Multisets.immutableEntry(element, count); + } + while (iterator2.hasNext()) { + Multiset.Entry entry2 = (Multiset.Entry)iterator2.next(); + Object element = entry2.getElement(); + if (multiset1.contains(element)) continue; + return Multisets.immutableEntry(element, entry2.getCount()); + } + return (Multiset.Entry)this.endOfData(); + } + }; + } + + @Override + int distinctElements() { + return this.elementSet().size(); + } + }; + } + + public static Multiset intersection(final Multiset multiset1, final Multiset multiset2) { + Preconditions.checkNotNull(multiset1); + Preconditions.checkNotNull(multiset2); + return new AbstractMultiset(){ + + @Override + public int count(Object element) { + int count1 = multiset1.count(element); + return count1 == 0 ? 0 : Math.min(count1, multiset2.count(element)); + } + + @Override + Set createElementSet() { + return Sets.intersection(multiset1.elementSet(), multiset2.elementSet()); + } + + @Override + Iterator> entryIterator() { + final Iterator iterator1 = multiset1.entrySet().iterator(); + return new AbstractIterator>(){ + + @Override + protected Multiset.Entry computeNext() { + while (iterator1.hasNext()) { + Multiset.Entry entry1 = (Multiset.Entry)iterator1.next(); + Object element = entry1.getElement(); + int count = Math.min(entry1.getCount(), multiset2.count(element)); + if (count <= 0) continue; + return Multisets.immutableEntry(element, count); + } + return (Multiset.Entry)this.endOfData(); + } + }; + } + + @Override + int distinctElements() { + return this.elementSet().size(); + } + }; + } + + @Beta + public static Multiset sum(final Multiset multiset1, final Multiset multiset2) { + Preconditions.checkNotNull(multiset1); + Preconditions.checkNotNull(multiset2); + return new AbstractMultiset(){ + + @Override + public boolean contains(@Nullable Object element) { + return multiset1.contains(element) || multiset2.contains(element); + } + + @Override + public boolean isEmpty() { + return multiset1.isEmpty() && multiset2.isEmpty(); + } + + @Override + public int size() { + return multiset1.size() + multiset2.size(); + } + + @Override + public int count(Object element) { + return multiset1.count(element) + multiset2.count(element); + } + + @Override + Set createElementSet() { + return Sets.union(multiset1.elementSet(), multiset2.elementSet()); + } + + @Override + Iterator> entryIterator() { + final Iterator iterator1 = multiset1.entrySet().iterator(); + final Iterator iterator2 = multiset2.entrySet().iterator(); + return new AbstractIterator>(){ + + @Override + protected Multiset.Entry computeNext() { + if (iterator1.hasNext()) { + Multiset.Entry entry1 = (Multiset.Entry)iterator1.next(); + Object element = entry1.getElement(); + int count = entry1.getCount() + multiset2.count(element); + return Multisets.immutableEntry(element, count); + } + while (iterator2.hasNext()) { + Multiset.Entry entry2 = (Multiset.Entry)iterator2.next(); + Object element = entry2.getElement(); + if (multiset1.contains(element)) continue; + return Multisets.immutableEntry(element, entry2.getCount()); + } + return (Multiset.Entry)this.endOfData(); + } + }; + } + + @Override + int distinctElements() { + return this.elementSet().size(); + } + }; + } + + @Beta + public static Multiset difference(final Multiset multiset1, final Multiset multiset2) { + Preconditions.checkNotNull(multiset1); + Preconditions.checkNotNull(multiset2); + return new AbstractMultiset(){ + + @Override + public int count(@Nullable Object element) { + int count1 = multiset1.count(element); + return count1 == 0 ? 0 : Math.max(0, count1 - multiset2.count(element)); + } + + @Override + Iterator> entryIterator() { + final Iterator iterator1 = multiset1.entrySet().iterator(); + return new AbstractIterator>(){ + + @Override + protected Multiset.Entry computeNext() { + while (iterator1.hasNext()) { + Multiset.Entry entry1 = (Multiset.Entry)iterator1.next(); + Object element = entry1.getElement(); + int count = entry1.getCount() - multiset2.count(element); + if (count <= 0) continue; + return Multisets.immutableEntry(element, count); + } + return (Multiset.Entry)this.endOfData(); + } + }; + } + + @Override + int distinctElements() { + return Iterators.size(this.entryIterator()); + } + }; + } + + public static boolean containsOccurrences(Multiset superMultiset, Multiset subMultiset) { + Preconditions.checkNotNull(superMultiset); + Preconditions.checkNotNull(subMultiset); + for (Multiset.Entry entry : subMultiset.entrySet()) { + int superCount = superMultiset.count(entry.getElement()); + if (superCount >= entry.getCount()) continue; + return false; + } + return true; + } + + public static boolean retainOccurrences(Multiset multisetToModify, Multiset multisetToRetain) { + return Multisets.retainOccurrencesImpl(multisetToModify, multisetToRetain); + } + + private static boolean retainOccurrencesImpl(Multiset multisetToModify, Multiset occurrencesToRetain) { + Preconditions.checkNotNull(multisetToModify); + Preconditions.checkNotNull(occurrencesToRetain); + Iterator> entryIterator = multisetToModify.entrySet().iterator(); + boolean changed = false; + while (entryIterator.hasNext()) { + Multiset.Entry entry = entryIterator.next(); + int retainCount = occurrencesToRetain.count(entry.getElement()); + if (retainCount == 0) { + entryIterator.remove(); + changed = true; + continue; + } + if (retainCount >= entry.getCount()) continue; + multisetToModify.setCount(entry.getElement(), retainCount); + changed = true; + } + return changed; + } + + public static boolean removeOccurrences(Multiset multisetToModify, Iterable occurrencesToRemove) { + if (occurrencesToRemove instanceof Multiset) { + return Multisets.removeOccurrencesImpl(multisetToModify, (Multiset)occurrencesToRemove); + } + return Multisets.removeOccurrencesImpl(multisetToModify, occurrencesToRemove); + } + + private static boolean removeOccurrencesImpl(Multiset multisetToModify, Iterable occurrencesToRemove) { + Preconditions.checkNotNull(multisetToModify); + Preconditions.checkNotNull(occurrencesToRemove); + boolean changed = false; + for (Object o : occurrencesToRemove) { + changed |= multisetToModify.remove(o); + } + return changed; + } + + private static boolean removeOccurrencesImpl(Multiset multisetToModify, Multiset occurrencesToRemove) { + Preconditions.checkNotNull(multisetToModify); + Preconditions.checkNotNull(occurrencesToRemove); + boolean changed = false; + Iterator> entryIterator = multisetToModify.entrySet().iterator(); + while (entryIterator.hasNext()) { + Multiset.Entry entry = entryIterator.next(); + int removeCount = occurrencesToRemove.count(entry.getElement()); + if (removeCount >= entry.getCount()) { + entryIterator.remove(); + changed = true; + continue; + } + if (removeCount <= 0) continue; + multisetToModify.remove(entry.getElement(), removeCount); + changed = true; + } + return changed; + } + + static boolean equalsImpl(Multiset multiset, @Nullable Object object) { + if (object == multiset) { + return true; + } + if (object instanceof Multiset) { + Multiset that = (Multiset)object; + if (multiset.size() != that.size() || multiset.entrySet().size() != that.entrySet().size()) { + return false; + } + for (Multiset.Entry entry : that.entrySet()) { + if (multiset.count(entry.getElement()) == entry.getCount()) continue; + return false; + } + return true; + } + return false; + } + + static boolean addAllImpl(Multiset self, Collection elements) { + if (elements.isEmpty()) { + return false; + } + if (elements instanceof Multiset) { + Multiset that = Multisets.cast(elements); + for (Multiset.Entry entry : that.entrySet()) { + self.add(entry.getElement(), entry.getCount()); + } + } else { + Iterators.addAll(self, elements.iterator()); + } + return true; + } + + static boolean removeAllImpl(Multiset self, Collection elementsToRemove) { + Collection collection = elementsToRemove instanceof Multiset ? ((Multiset)elementsToRemove).elementSet() : elementsToRemove; + return self.elementSet().removeAll(collection); + } + + static boolean retainAllImpl(Multiset self, Collection elementsToRetain) { + Preconditions.checkNotNull(elementsToRetain); + Collection collection = elementsToRetain instanceof Multiset ? ((Multiset)elementsToRetain).elementSet() : elementsToRetain; + return self.elementSet().retainAll(collection); + } + + static int setCountImpl(Multiset self, E element, int count) { + CollectPreconditions.checkNonnegative(count, "count"); + int oldCount = self.count(element); + int delta = count - oldCount; + if (delta > 0) { + self.add(element, delta); + } else if (delta < 0) { + self.remove(element, -delta); + } + return oldCount; + } + + static boolean setCountImpl(Multiset self, E element, int oldCount, int newCount) { + CollectPreconditions.checkNonnegative(oldCount, "oldCount"); + CollectPreconditions.checkNonnegative(newCount, "newCount"); + if (self.count(element) == oldCount) { + self.setCount(element, newCount); + return true; + } + return false; + } + + static Iterator iteratorImpl(Multiset multiset) { + return new MultisetIteratorImpl(multiset, multiset.entrySet().iterator()); + } + + static int sizeImpl(Multiset multiset) { + long size = 0L; + for (Multiset.Entry entry : multiset.entrySet()) { + size += (long)entry.getCount(); + } + return Ints.saturatedCast(size); + } + + static Multiset cast(Iterable iterable) { + return (Multiset)iterable; + } + + @Beta + public static ImmutableMultiset copyHighestCountFirst(Multiset multiset) { + ImmutableList> sortedEntries = DECREASING_COUNT_ORDERING.immutableSortedCopy(multiset.entrySet()); + return ImmutableMultiset.copyFromEntries(sortedEntries); + } + + static final class MultisetIteratorImpl + implements Iterator { + private final Multiset multiset; + private final Iterator> entryIterator; + private Multiset.Entry currentEntry; + private int laterCount; + private int totalCount; + private boolean canRemove; + + MultisetIteratorImpl(Multiset multiset, Iterator> entryIterator) { + this.multiset = multiset; + this.entryIterator = entryIterator; + } + + @Override + public boolean hasNext() { + return this.laterCount > 0 || this.entryIterator.hasNext(); + } + + @Override + public E next() { + if (!this.hasNext()) { + throw new NoSuchElementException(); + } + if (this.laterCount == 0) { + this.currentEntry = this.entryIterator.next(); + this.totalCount = this.laterCount = this.currentEntry.getCount(); + } + --this.laterCount; + this.canRemove = true; + return this.currentEntry.getElement(); + } + + @Override + public void remove() { + CollectPreconditions.checkRemove(this.canRemove); + if (this.totalCount == 1) { + this.entryIterator.remove(); + } else { + this.multiset.remove(this.currentEntry.getElement()); + } + --this.totalCount; + this.canRemove = false; + } + } + + static abstract class EntrySet + extends Sets.ImprovedAbstractSet> { + EntrySet() { + } + + abstract Multiset multiset(); + + @Override + public boolean contains(@Nullable Object o) { + if (o instanceof Multiset.Entry) { + Multiset.Entry entry = (Multiset.Entry)o; + if (entry.getCount() <= 0) { + return false; + } + int count = this.multiset().count(entry.getElement()); + return count == entry.getCount(); + } + return false; + } + + @Override + public boolean remove(Object object) { + if (object instanceof Multiset.Entry) { + Multiset.Entry entry = (Multiset.Entry)object; + Object element = entry.getElement(); + int entryCount = entry.getCount(); + if (entryCount != 0) { + Multiset multiset = this.multiset(); + return multiset.setCount(element, entryCount, 0); + } + } + return false; + } + + @Override + public void clear() { + this.multiset().clear(); + } + } + + static abstract class ElementSet + extends Sets.ImprovedAbstractSet { + ElementSet() { + } + + abstract Multiset multiset(); + + @Override + public void clear() { + this.multiset().clear(); + } + + @Override + public boolean contains(Object o) { + return this.multiset().contains(o); + } + + @Override + public boolean containsAll(Collection c) { + return this.multiset().containsAll(c); + } + + @Override + public boolean isEmpty() { + return this.multiset().isEmpty(); + } + + @Override + public Iterator iterator() { + return new TransformedIterator, E>(this.multiset().entrySet().iterator()){ + + @Override + E transform(Multiset.Entry entry) { + return entry.getElement(); + } + }; + } + + @Override + public boolean remove(Object o) { + int count = this.multiset().count(o); + if (count > 0) { + this.multiset().remove(o, count); + return true; + } + return false; + } + + @Override + public int size() { + return this.multiset().entrySet().size(); + } + } + + static abstract class AbstractEntry + implements Multiset.Entry { + AbstractEntry() { + } + + @Override + public boolean equals(@Nullable Object object) { + if (object instanceof Multiset.Entry) { + Multiset.Entry that = (Multiset.Entry)object; + return this.getCount() == that.getCount() && Objects.equal(this.getElement(), that.getElement()); + } + return false; + } + + @Override + public int hashCode() { + Object e = this.getElement(); + return (e == null ? 0 : e.hashCode()) ^ this.getCount(); + } + + @Override + public String toString() { + String string; + String text = String.valueOf(this.getElement()); + int n = this.getCount(); + if (n == 1) { + string = text; + } else { + String string2 = String.valueOf(String.valueOf(text)); + int n2 = n; + string = new StringBuilder(14 + string2.length()).append(string2).append(" x ").append(n2).toString(); + } + return string; + } + } + + private static final class FilteredMultiset + extends AbstractMultiset { + final Multiset unfiltered; + final Predicate predicate; + + FilteredMultiset(Multiset unfiltered, Predicate predicate) { + this.unfiltered = Preconditions.checkNotNull(unfiltered); + this.predicate = Preconditions.checkNotNull(predicate); + } + + @Override + public UnmodifiableIterator iterator() { + return Iterators.filter(this.unfiltered.iterator(), this.predicate); + } + + @Override + Set createElementSet() { + return Sets.filter(this.unfiltered.elementSet(), this.predicate); + } + + @Override + Set> createEntrySet() { + return Sets.filter(this.unfiltered.entrySet(), new Predicate>(){ + + @Override + public boolean apply(Multiset.Entry entry) { + return FilteredMultiset.this.predicate.apply(entry.getElement()); + } + }); + } + + @Override + Iterator> entryIterator() { + throw new AssertionError((Object)"should never be called"); + } + + @Override + int distinctElements() { + return this.elementSet().size(); + } + + @Override + public int count(@Nullable Object element) { + int count = this.unfiltered.count(element); + if (count > 0) { + Object e = element; + return this.predicate.apply(e) ? count : 0; + } + return 0; + } + + @Override + public int add(@Nullable E element, int occurrences) { + Preconditions.checkArgument(this.predicate.apply(element), "Element %s does not match predicate %s", element, this.predicate); + return this.unfiltered.add(element, occurrences); + } + + @Override + public int remove(@Nullable Object element, int occurrences) { + CollectPreconditions.checkNonnegative(occurrences, "occurrences"); + if (occurrences == 0) { + return this.count(element); + } + return this.contains(element) ? this.unfiltered.remove(element, occurrences) : 0; + } + + @Override + public void clear() { + this.elementSet().clear(); + } + } + + static final class ImmutableEntry + extends AbstractEntry + implements Serializable { + @Nullable + final E element; + final int count; + private static final long serialVersionUID = 0L; + + ImmutableEntry(@Nullable E element, int count) { + this.element = element; + this.count = count; + CollectPreconditions.checkNonnegative(count, "count"); + } + + @Override + @Nullable + public E getElement() { + return this.element; + } + + @Override + public int getCount() { + return this.count; + } + } + + static class UnmodifiableMultiset + extends ForwardingMultiset + implements Serializable { + final Multiset delegate; + transient Set elementSet; + transient Set> entrySet; + private static final long serialVersionUID = 0L; + + UnmodifiableMultiset(Multiset delegate) { + this.delegate = delegate; + } + + @Override + protected Multiset delegate() { + return this.delegate; + } + + Set createElementSet() { + return Collections.unmodifiableSet(this.delegate.elementSet()); + } + + @Override + public Set elementSet() { + Set es = this.elementSet; + return es == null ? (this.elementSet = this.createElementSet()) : es; + } + + @Override + public Set> entrySet() { + Set>> es = this.entrySet; + return es == null ? (this.entrySet = Collections.unmodifiableSet(this.delegate.entrySet())) : es; + } + + @Override + public Iterator iterator() { + return Iterators.unmodifiableIterator(this.delegate.iterator()); + } + + @Override + public boolean add(E element) { + throw new UnsupportedOperationException(); + } + + @Override + public int add(E element, int occurences) { + throw new UnsupportedOperationException(); + } + + @Override + public boolean addAll(Collection elementsToAdd) { + throw new UnsupportedOperationException(); + } + + @Override + public boolean remove(Object element) { + throw new UnsupportedOperationException(); + } + + @Override + public int remove(Object element, int occurrences) { + throw new UnsupportedOperationException(); + } + + @Override + public boolean removeAll(Collection elementsToRemove) { + throw new UnsupportedOperationException(); + } + + @Override + public boolean retainAll(Collection elementsToRetain) { + throw new UnsupportedOperationException(); + } + + @Override + public void clear() { + throw new UnsupportedOperationException(); + } + + @Override + public int setCount(E element, int count) { + throw new UnsupportedOperationException(); + } + + @Override + public boolean setCount(E element, int oldCount, int newCount) { + throw new UnsupportedOperationException(); + } + } +} diff --git a/src/com/google/common/collect/MutableClassToInstanceMap.java b/src/com/google/common/collect/MutableClassToInstanceMap.java new file mode 100644 index 0000000..57214af --- /dev/null +++ b/src/com/google/common/collect/MutableClassToInstanceMap.java @@ -0,0 +1,50 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.collect.ClassToInstanceMap; +import com.google.common.collect.MapConstraint; +import com.google.common.collect.MapConstraints; +import com.google.common.primitives.Primitives; +import java.util.HashMap; +import java.util.Map; + +public final class MutableClassToInstanceMap +extends MapConstraints.ConstrainedMap, B> +implements ClassToInstanceMap { + private static final MapConstraint, Object> VALUE_CAN_BE_CAST_TO_KEY = new MapConstraint, Object>(){ + + @Override + public void checkKeyValue(Class key, Object value) { + MutableClassToInstanceMap.cast(key, value); + } + }; + private static final long serialVersionUID = 0L; + + public static MutableClassToInstanceMap create() { + return new MutableClassToInstanceMap(new HashMap()); + } + + public static MutableClassToInstanceMap create(Map, B> backingMap) { + return new MutableClassToInstanceMap(backingMap); + } + + private MutableClassToInstanceMap(Map, B> delegate) { + super(delegate, VALUE_CAN_BE_CAST_TO_KEY); + } + + @Override + public T putInstance(Class type, T value) { + return MutableClassToInstanceMap.cast(type, this.put(type, value)); + } + + @Override + public T getInstance(Class type) { + return MutableClassToInstanceMap.cast(type, this.get(type)); + } + + private static T cast(Class type, B value) { + return Primitives.wrap(type).cast(value); + } +} diff --git a/src/com/google/common/collect/NaturalOrdering.java b/src/com/google/common/collect/NaturalOrdering.java new file mode 100644 index 0000000..e139fbc --- /dev/null +++ b/src/com/google/common/collect/NaturalOrdering.java @@ -0,0 +1,41 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.GwtCompatible; +import com.google.common.base.Preconditions; +import com.google.common.collect.Ordering; +import com.google.common.collect.ReverseNaturalOrdering; +import java.io.Serializable; + +@GwtCompatible(serializable=true) +final class NaturalOrdering +extends Ordering +implements Serializable { + static final NaturalOrdering INSTANCE = new NaturalOrdering(); + private static final long serialVersionUID = 0L; + + @Override + public int compare(Comparable left, Comparable right) { + Preconditions.checkNotNull(left); + Preconditions.checkNotNull(right); + return left.compareTo(right); + } + + @Override + public Ordering reverse() { + return ReverseNaturalOrdering.INSTANCE; + } + + private Object readResolve() { + return INSTANCE; + } + + public String toString() { + return "Ordering.natural()"; + } + + private NaturalOrdering() { + } +} diff --git a/src/com/google/common/collect/NullsFirstOrdering.java b/src/com/google/common/collect/NullsFirstOrdering.java new file mode 100644 index 0000000..e239dbf --- /dev/null +++ b/src/com/google/common/collect/NullsFirstOrdering.java @@ -0,0 +1,71 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.GwtCompatible; +import com.google.common.collect.Ordering; +import java.io.Serializable; +import javax.annotation.Nullable; + +@GwtCompatible(serializable=true) +final class NullsFirstOrdering +extends Ordering +implements Serializable { + final Ordering ordering; + private static final long serialVersionUID = 0L; + + NullsFirstOrdering(Ordering ordering) { + this.ordering = ordering; + } + + @Override + public int compare(@Nullable T left, @Nullable T right) { + if (left == right) { + return 0; + } + if (left == null) { + return -1; + } + if (right == null) { + return 1; + } + return this.ordering.compare(left, right); + } + + @Override + public Ordering reverse() { + return this.ordering.reverse().nullsLast(); + } + + @Override + public Ordering nullsFirst() { + return this; + } + + @Override + public Ordering nullsLast() { + return this.ordering.nullsLast(); + } + + @Override + public boolean equals(@Nullable Object object) { + if (object == this) { + return true; + } + if (object instanceof NullsFirstOrdering) { + NullsFirstOrdering that = (NullsFirstOrdering)object; + return this.ordering.equals(that.ordering); + } + return false; + } + + public int hashCode() { + return this.ordering.hashCode() ^ 0x39153A74; + } + + public String toString() { + String string = String.valueOf(String.valueOf(this.ordering)); + return new StringBuilder(13 + string.length()).append(string).append(".nullsFirst()").toString(); + } +} diff --git a/src/com/google/common/collect/NullsLastOrdering.java b/src/com/google/common/collect/NullsLastOrdering.java new file mode 100644 index 0000000..d3c0c09 --- /dev/null +++ b/src/com/google/common/collect/NullsLastOrdering.java @@ -0,0 +1,71 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.GwtCompatible; +import com.google.common.collect.Ordering; +import java.io.Serializable; +import javax.annotation.Nullable; + +@GwtCompatible(serializable=true) +final class NullsLastOrdering +extends Ordering +implements Serializable { + final Ordering ordering; + private static final long serialVersionUID = 0L; + + NullsLastOrdering(Ordering ordering) { + this.ordering = ordering; + } + + @Override + public int compare(@Nullable T left, @Nullable T right) { + if (left == right) { + return 0; + } + if (left == null) { + return 1; + } + if (right == null) { + return -1; + } + return this.ordering.compare(left, right); + } + + @Override + public Ordering reverse() { + return this.ordering.reverse().nullsFirst(); + } + + @Override + public Ordering nullsFirst() { + return this.ordering.nullsFirst(); + } + + @Override + public Ordering nullsLast() { + return this; + } + + @Override + public boolean equals(@Nullable Object object) { + if (object == this) { + return true; + } + if (object instanceof NullsLastOrdering) { + NullsLastOrdering that = (NullsLastOrdering)object; + return this.ordering.equals(that.ordering); + } + return false; + } + + public int hashCode() { + return this.ordering.hashCode() ^ 0xC9177248; + } + + public String toString() { + String string = String.valueOf(String.valueOf(this.ordering)); + return new StringBuilder(12 + string.length()).append(string).append(".nullsLast()").toString(); + } +} diff --git a/src/com/google/common/collect/ObjectArrays.java b/src/com/google/common/collect/ObjectArrays.java new file mode 100644 index 0000000..bb5ba3f --- /dev/null +++ b/src/com/google/common/collect/ObjectArrays.java @@ -0,0 +1,126 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.GwtCompatible; +import com.google.common.annotations.GwtIncompatible; +import com.google.common.base.Preconditions; +import com.google.common.collect.Platform; +import java.lang.reflect.Array; +import java.util.Collection; +import javax.annotation.Nullable; + +@GwtCompatible(emulated=true) +public final class ObjectArrays { + static final Object[] EMPTY_ARRAY = new Object[0]; + + private ObjectArrays() { + } + + @GwtIncompatible(value="Array.newInstance(Class, int)") + public static T[] newArray(Class type, int length) { + return (Object[])Array.newInstance(type, length); + } + + public static T[] newArray(T[] reference, int length) { + return Platform.newArray(reference, length); + } + + @GwtIncompatible(value="Array.newInstance(Class, int)") + public static T[] concat(T[] first, T[] second, Class type) { + T[] result = ObjectArrays.newArray(type, first.length + second.length); + System.arraycopy(first, 0, result, 0, first.length); + System.arraycopy(second, 0, result, first.length, second.length); + return result; + } + + public static T[] concat(@Nullable T element, T[] array) { + T[] result = ObjectArrays.newArray(array, array.length + 1); + result[0] = element; + System.arraycopy(array, 0, result, 1, array.length); + return result; + } + + public static T[] concat(T[] array, @Nullable T element) { + T[] result = ObjectArrays.arraysCopyOf(array, array.length + 1); + result[array.length] = element; + return result; + } + + static T[] arraysCopyOf(T[] original, int newLength) { + T[] copy = ObjectArrays.newArray(original, newLength); + System.arraycopy(original, 0, copy, 0, Math.min(original.length, newLength)); + return copy; + } + + static T[] toArrayImpl(Collection c, T[] array) { + int size = c.size(); + if (array.length < size) { + array = ObjectArrays.newArray(array, size); + } + ObjectArrays.fillArray(c, array); + if (array.length > size) { + array[size] = null; + } + return array; + } + + static T[] toArrayImpl(Object[] src, int offset, int len, T[] dst) { + Preconditions.checkPositionIndexes(offset, offset + len, src.length); + if (dst.length < len) { + dst = ObjectArrays.newArray(dst, len); + } else if (dst.length > len) { + dst[len] = null; + } + System.arraycopy(src, offset, dst, 0, len); + return dst; + } + + static Object[] toArrayImpl(Collection c) { + return ObjectArrays.fillArray(c, new Object[c.size()]); + } + + static Object[] copyAsObjectArray(Object[] elements, int offset, int length) { + Preconditions.checkPositionIndexes(offset, offset + length, elements.length); + if (length == 0) { + return EMPTY_ARRAY; + } + Object[] result = new Object[length]; + System.arraycopy(elements, offset, result, 0, length); + return result; + } + + private static Object[] fillArray(Iterable elements, Object[] array) { + int i = 0; + for (Object element : elements) { + array[i++] = element; + } + return array; + } + + static void swap(Object[] array, int i, int j) { + Object temp = array[i]; + array[i] = array[j]; + array[j] = temp; + } + + static Object[] checkElementsNotNull(Object ... array) { + return ObjectArrays.checkElementsNotNull(array, array.length); + } + + static Object[] checkElementsNotNull(Object[] array, int length) { + for (int i = 0; i < length; ++i) { + ObjectArrays.checkElementNotNull(array[i], i); + } + return array; + } + + static Object checkElementNotNull(Object element, int index) { + if (element == null) { + int n = index; + throw new NullPointerException(new StringBuilder(20).append("at index ").append(n).toString()); + } + return element; + } +} diff --git a/src/com/google/common/collect/Ordering.java b/src/com/google/common/collect/Ordering.java new file mode 100644 index 0000000..e3c1e96 --- /dev/null +++ b/src/com/google/common/collect/Ordering.java @@ -0,0 +1,385 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.GwtCompatible; +import com.google.common.annotations.VisibleForTesting; +import com.google.common.base.Function; +import com.google.common.base.Preconditions; +import com.google.common.collect.AllEqualOrdering; +import com.google.common.collect.ByFunctionOrdering; +import com.google.common.collect.CollectPreconditions; +import com.google.common.collect.ComparatorOrdering; +import com.google.common.collect.CompoundOrdering; +import com.google.common.collect.ExplicitOrdering; +import com.google.common.collect.ImmutableList; +import com.google.common.collect.Iterables; +import com.google.common.collect.LexicographicalOrdering; +import com.google.common.collect.Lists; +import com.google.common.collect.MapMaker; +import com.google.common.collect.Maps; +import com.google.common.collect.NaturalOrdering; +import com.google.common.collect.NullsFirstOrdering; +import com.google.common.collect.NullsLastOrdering; +import com.google.common.collect.ObjectArrays; +import com.google.common.collect.Platform; +import com.google.common.collect.ReverseOrdering; +import com.google.common.collect.UsingToStringOrdering; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.Collections; +import java.util.Comparator; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.concurrent.atomic.AtomicInteger; +import javax.annotation.Nullable; + +@GwtCompatible +public abstract class Ordering +implements Comparator { + static final int LEFT_IS_GREATER = 1; + static final int RIGHT_IS_GREATER = -1; + + @GwtCompatible(serializable=true) + public static Ordering natural() { + return NaturalOrdering.INSTANCE; + } + + @GwtCompatible(serializable=true) + public static Ordering from(Comparator comparator) { + return comparator instanceof Ordering ? (Ordering)comparator : new ComparatorOrdering(comparator); + } + + @Deprecated + @GwtCompatible(serializable=true) + public static Ordering from(Ordering ordering) { + return Preconditions.checkNotNull(ordering); + } + + @GwtCompatible(serializable=true) + public static Ordering explicit(List valuesInOrder) { + return new ExplicitOrdering(valuesInOrder); + } + + @GwtCompatible(serializable=true) + public static Ordering explicit(T leastValue, T ... remainingValuesInOrder) { + return Ordering.explicit(Lists.asList(leastValue, remainingValuesInOrder)); + } + + @GwtCompatible(serializable=true) + public static Ordering allEqual() { + return AllEqualOrdering.INSTANCE; + } + + @GwtCompatible(serializable=true) + public static Ordering usingToString() { + return UsingToStringOrdering.INSTANCE; + } + + public static Ordering arbitrary() { + return ArbitraryOrderingHolder.ARBITRARY_ORDERING; + } + + protected Ordering() { + } + + @GwtCompatible(serializable=true) + public Ordering reverse() { + return new ReverseOrdering(this); + } + + @GwtCompatible(serializable=true) + public Ordering nullsFirst() { + return new NullsFirstOrdering(this); + } + + @GwtCompatible(serializable=true) + public Ordering nullsLast() { + return new NullsLastOrdering(this); + } + + @GwtCompatible(serializable=true) + public Ordering onResultOf(Function function) { + return new ByFunctionOrdering(function, this); + } + + Ordering> onKeys() { + return this.onResultOf(Maps.keyFunction()); + } + + @GwtCompatible(serializable=true) + public Ordering compound(Comparator secondaryComparator) { + return new CompoundOrdering(this, Preconditions.checkNotNull(secondaryComparator)); + } + + @GwtCompatible(serializable=true) + public static Ordering compound(Iterable> comparators) { + return new CompoundOrdering(comparators); + } + + @GwtCompatible(serializable=true) + public Ordering> lexicographical() { + return new LexicographicalOrdering(this); + } + + @Override + public abstract int compare(@Nullable T var1, @Nullable T var2); + + public E min(Iterator iterator) { + E minSoFar = iterator.next(); + while (iterator.hasNext()) { + minSoFar = this.min(minSoFar, iterator.next()); + } + return minSoFar; + } + + public E min(Iterable iterable) { + return this.min(iterable.iterator()); + } + + public E min(@Nullable E a, @Nullable E b) { + return this.compare(a, b) <= 0 ? a : b; + } + + public E min(@Nullable E a, @Nullable E b, @Nullable E c, E ... rest) { + E minSoFar = this.min(this.min(a, b), c); + for (E r : rest) { + minSoFar = this.min(minSoFar, r); + } + return minSoFar; + } + + public E max(Iterator iterator) { + E maxSoFar = iterator.next(); + while (iterator.hasNext()) { + maxSoFar = this.max(maxSoFar, iterator.next()); + } + return maxSoFar; + } + + public E max(Iterable iterable) { + return this.max(iterable.iterator()); + } + + public E max(@Nullable E a, @Nullable E b) { + return this.compare(a, b) >= 0 ? a : b; + } + + public E max(@Nullable E a, @Nullable E b, @Nullable E c, E ... rest) { + E maxSoFar = this.max(this.max(a, b), c); + for (E r : rest) { + maxSoFar = this.max(maxSoFar, r); + } + return maxSoFar; + } + + public List leastOf(Iterable iterable, int k) { + Collection collection; + if (iterable instanceof Collection && (long)(collection = (Collection)iterable).size() <= 2L * (long)k) { + Object[] array = collection.toArray(); + Arrays.sort(array, this); + if (array.length > k) { + array = ObjectArrays.arraysCopyOf(array, k); + } + return Collections.unmodifiableList(Arrays.asList(array)); + } + return this.leastOf(iterable.iterator(), k); + } + + public List leastOf(Iterator elements, int k) { + E e; + Preconditions.checkNotNull(elements); + CollectPreconditions.checkNonnegative(k, "k"); + if (k == 0 || !elements.hasNext()) { + return ImmutableList.of(); + } + if (k >= 0x3FFFFFFF) { + ArrayList list = Lists.newArrayList(elements); + Collections.sort(list, this); + if (list.size() > k) { + list.subList(k, list.size()).clear(); + } + list.trimToSize(); + return Collections.unmodifiableList(list); + } + int bufferCap = k * 2; + Object[] buffer = new Object[bufferCap]; + Object threshold = elements.next(); + buffer[0] = threshold; + int bufferSize = 1; + while (bufferSize < k && elements.hasNext()) { + e = elements.next(); + buffer[bufferSize++] = e; + threshold = this.max(threshold, e); + } + while (elements.hasNext()) { + e = elements.next(); + if (this.compare(e, threshold) >= 0) continue; + buffer[bufferSize++] = e; + if (bufferSize != bufferCap) continue; + int left = 0; + int right = bufferCap - 1; + int minThresholdPosition = 0; + while (left < right) { + int pivotIndex = left + right + 1 >>> 1; + int pivotNewIndex = this.partition(buffer, left, right, pivotIndex); + if (pivotNewIndex > k) { + right = pivotNewIndex - 1; + continue; + } + if (pivotNewIndex >= k) break; + left = Math.max(pivotNewIndex, left + 1); + minThresholdPosition = pivotNewIndex; + } + bufferSize = k; + threshold = buffer[minThresholdPosition]; + for (int i = minThresholdPosition + 1; i < bufferSize; ++i) { + threshold = this.max(threshold, buffer[i]); + } + } + Arrays.sort(buffer, 0, bufferSize, this); + bufferSize = Math.min(bufferSize, k); + return Collections.unmodifiableList(Arrays.asList(ObjectArrays.arraysCopyOf(buffer, bufferSize))); + } + + private int partition(E[] values, int left, int right, int pivotIndex) { + E pivotValue = values[pivotIndex]; + values[pivotIndex] = values[right]; + values[right] = pivotValue; + int storeIndex = left; + for (int i = left; i < right; ++i) { + if (this.compare(values[i], pivotValue) >= 0) continue; + ObjectArrays.swap(values, storeIndex, i); + ++storeIndex; + } + ObjectArrays.swap(values, right, storeIndex); + return storeIndex; + } + + public List greatestOf(Iterable iterable, int k) { + return this.reverse().leastOf(iterable, k); + } + + public List greatestOf(Iterator iterator, int k) { + return this.reverse().leastOf(iterator, k); + } + + public List sortedCopy(Iterable elements) { + Object[] array = Iterables.toArray(elements); + Arrays.sort(array, this); + return Lists.newArrayList(Arrays.asList(array)); + } + + public ImmutableList immutableSortedCopy(Iterable elements) { + Object[] array; + for (Object e : array = Iterables.toArray(elements)) { + Preconditions.checkNotNull(e); + } + Arrays.sort(array, this); + return ImmutableList.asImmutableList(array); + } + + public boolean isOrdered(Iterable iterable) { + Iterator it = iterable.iterator(); + if (it.hasNext()) { + T prev = it.next(); + while (it.hasNext()) { + T next = it.next(); + if (this.compare(prev, next) > 0) { + return false; + } + prev = next; + } + } + return true; + } + + public boolean isStrictlyOrdered(Iterable iterable) { + Iterator it = iterable.iterator(); + if (it.hasNext()) { + T prev = it.next(); + while (it.hasNext()) { + T next = it.next(); + if (this.compare(prev, next) >= 0) { + return false; + } + prev = next; + } + } + return true; + } + + public int binarySearch(List sortedList, @Nullable T key) { + return Collections.binarySearch(sortedList, key, this); + } + + @VisibleForTesting + static class IncomparableValueException + extends ClassCastException { + final Object value; + private static final long serialVersionUID = 0L; + + IncomparableValueException(Object value) { + String string = String.valueOf(String.valueOf(value)); + super(new StringBuilder(22 + string.length()).append("Cannot compare value: ").append(string).toString()); + this.value = value; + } + } + + @VisibleForTesting + static class ArbitraryOrdering + extends Ordering { + private Map uids = Platform.tryWeakKeys(new MapMaker()).makeComputingMap(new Function(){ + final AtomicInteger counter = new AtomicInteger(0); + + @Override + public Integer apply(Object from) { + return this.counter.getAndIncrement(); + } + }); + + ArbitraryOrdering() { + } + + @Override + public int compare(Object left, Object right) { + int rightCode; + if (left == right) { + return 0; + } + if (left == null) { + return -1; + } + if (right == null) { + return 1; + } + int leftCode = this.identityHashCode(left); + if (leftCode != (rightCode = this.identityHashCode(right))) { + return leftCode < rightCode ? -1 : 1; + } + int result = this.uids.get(left).compareTo(this.uids.get(right)); + if (result == 0) { + throw new AssertionError(); + } + return result; + } + + public String toString() { + return "Ordering.arbitrary()"; + } + + int identityHashCode(Object object) { + return System.identityHashCode(object); + } + } + + private static class ArbitraryOrderingHolder { + static final Ordering ARBITRARY_ORDERING = new ArbitraryOrdering(); + + private ArbitraryOrderingHolder() { + } + } +} diff --git a/src/com/google/common/collect/PeekingIterator.java b/src/com/google/common/collect/PeekingIterator.java new file mode 100644 index 0000000..9d04ddd --- /dev/null +++ b/src/com/google/common/collect/PeekingIterator.java @@ -0,0 +1,19 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.GwtCompatible; +import java.util.Iterator; + +@GwtCompatible +public interface PeekingIterator +extends Iterator { + public E peek(); + + @Override + public E next(); + + @Override + public void remove(); +} diff --git a/src/com/google/common/collect/Platform.java b/src/com/google/common/collect/Platform.java new file mode 100644 index 0000000..509778c --- /dev/null +++ b/src/com/google/common/collect/Platform.java @@ -0,0 +1,55 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.GwtCompatible; +import com.google.common.base.Function; +import com.google.common.base.Predicate; +import com.google.common.collect.MapMaker; +import com.google.common.collect.Maps; +import com.google.common.collect.Sets; +import java.lang.reflect.Array; +import java.util.Collections; +import java.util.Map; +import java.util.NavigableMap; +import java.util.NavigableSet; +import java.util.Set; +import java.util.SortedMap; +import java.util.SortedSet; + +@GwtCompatible(emulated=true) +final class Platform { + static T[] newArray(T[] reference, int length) { + Class type = reference.getClass().getComponentType(); + Object[] result = (Object[])Array.newInstance(type, length); + return result; + } + + static Set newSetFromMap(Map map) { + return Collections.newSetFromMap(map); + } + + static MapMaker tryWeakKeys(MapMaker mapMaker) { + return mapMaker.weakKeys(); + } + + static SortedMap mapsTransformEntriesSortedMap(SortedMap fromMap, Maps.EntryTransformer transformer) { + return fromMap instanceof NavigableMap ? Maps.transformEntries((NavigableMap)fromMap, transformer) : Maps.transformEntriesIgnoreNavigable(fromMap, transformer); + } + + static SortedMap mapsAsMapSortedSet(SortedSet set, Function function) { + return set instanceof NavigableSet ? Maps.asMap((NavigableSet)set, function) : Maps.asMapSortedIgnoreNavigable(set, function); + } + + static SortedSet setsFilterSortedSet(SortedSet set, Predicate predicate) { + return set instanceof NavigableSet ? Sets.filter((NavigableSet)set, predicate) : Sets.filterSortedIgnoreNavigable(set, predicate); + } + + static SortedMap mapsFilterSortedMap(SortedMap map, Predicate> predicate) { + return map instanceof NavigableMap ? Maps.filterEntries((NavigableMap)map, predicate) : Maps.filterSortedIgnoreNavigable(map, predicate); + } + + private Platform() { + } +} diff --git a/src/com/google/common/collect/Queues.java b/src/com/google/common/collect/Queues.java new file mode 100644 index 0000000..a5348fe --- /dev/null +++ b/src/com/google/common/collect/Queues.java @@ -0,0 +1,183 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.Beta; +import com.google.common.base.Preconditions; +import com.google.common.collect.Collections2; +import com.google.common.collect.Iterables; +import com.google.common.collect.Synchronized; +import java.util.ArrayDeque; +import java.util.Collection; +import java.util.Deque; +import java.util.PriorityQueue; +import java.util.Queue; +import java.util.concurrent.ArrayBlockingQueue; +import java.util.concurrent.BlockingQueue; +import java.util.concurrent.ConcurrentLinkedQueue; +import java.util.concurrent.LinkedBlockingDeque; +import java.util.concurrent.LinkedBlockingQueue; +import java.util.concurrent.PriorityBlockingQueue; +import java.util.concurrent.SynchronousQueue; +import java.util.concurrent.TimeUnit; + +public final class Queues { + private Queues() { + } + + public static ArrayBlockingQueue newArrayBlockingQueue(int capacity) { + return new ArrayBlockingQueue(capacity); + } + + public static ArrayDeque newArrayDeque() { + return new ArrayDeque(); + } + + public static ArrayDeque newArrayDeque(Iterable elements) { + if (elements instanceof Collection) { + return new ArrayDeque(Collections2.cast(elements)); + } + ArrayDeque deque = new ArrayDeque(); + Iterables.addAll(deque, elements); + return deque; + } + + public static ConcurrentLinkedQueue newConcurrentLinkedQueue() { + return new ConcurrentLinkedQueue(); + } + + public static ConcurrentLinkedQueue newConcurrentLinkedQueue(Iterable elements) { + if (elements instanceof Collection) { + return new ConcurrentLinkedQueue(Collections2.cast(elements)); + } + ConcurrentLinkedQueue queue = new ConcurrentLinkedQueue(); + Iterables.addAll(queue, elements); + return queue; + } + + public static LinkedBlockingDeque newLinkedBlockingDeque() { + return new LinkedBlockingDeque(); + } + + public static LinkedBlockingDeque newLinkedBlockingDeque(int capacity) { + return new LinkedBlockingDeque(capacity); + } + + public static LinkedBlockingDeque newLinkedBlockingDeque(Iterable elements) { + if (elements instanceof Collection) { + return new LinkedBlockingDeque(Collections2.cast(elements)); + } + LinkedBlockingDeque deque = new LinkedBlockingDeque(); + Iterables.addAll(deque, elements); + return deque; + } + + public static LinkedBlockingQueue newLinkedBlockingQueue() { + return new LinkedBlockingQueue(); + } + + public static LinkedBlockingQueue newLinkedBlockingQueue(int capacity) { + return new LinkedBlockingQueue(capacity); + } + + public static LinkedBlockingQueue newLinkedBlockingQueue(Iterable elements) { + if (elements instanceof Collection) { + return new LinkedBlockingQueue(Collections2.cast(elements)); + } + LinkedBlockingQueue queue = new LinkedBlockingQueue(); + Iterables.addAll(queue, elements); + return queue; + } + + public static PriorityBlockingQueue newPriorityBlockingQueue() { + return new PriorityBlockingQueue(); + } + + public static PriorityBlockingQueue newPriorityBlockingQueue(Iterable elements) { + if (elements instanceof Collection) { + return new PriorityBlockingQueue(Collections2.cast(elements)); + } + PriorityBlockingQueue queue = new PriorityBlockingQueue(); + Iterables.addAll(queue, elements); + return queue; + } + + public static PriorityQueue newPriorityQueue() { + return new PriorityQueue(); + } + + public static PriorityQueue newPriorityQueue(Iterable elements) { + if (elements instanceof Collection) { + return new PriorityQueue(Collections2.cast(elements)); + } + PriorityQueue queue = new PriorityQueue(); + Iterables.addAll(queue, elements); + return queue; + } + + public static SynchronousQueue newSynchronousQueue() { + return new SynchronousQueue(); + } + + @Beta + public static int drain(BlockingQueue q, Collection buffer, int numElements, long timeout, TimeUnit unit) throws InterruptedException { + Preconditions.checkNotNull(buffer); + long deadline = System.nanoTime() + unit.toNanos(timeout); + int added = 0; + while (added < numElements) { + if ((added += q.drainTo(buffer, numElements - added)) >= numElements) continue; + E e = q.poll(deadline - System.nanoTime(), TimeUnit.NANOSECONDS); + if (e == null) break; + buffer.add(e); + ++added; + } + return added; + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Beta + public static int drainUninterruptibly(BlockingQueue q, Collection buffer, int numElements, long timeout, TimeUnit unit) { + Preconditions.checkNotNull(buffer); + long deadline = System.nanoTime() + unit.toNanos(timeout); + int added = 0; + boolean interrupted = false; + try { + while (added < numElements) { + E e; + if ((added += q.drainTo(buffer, numElements - added)) >= numElements) continue; + while (true) { + try { + e = q.poll(deadline - System.nanoTime(), TimeUnit.NANOSECONDS); + } + catch (InterruptedException ex) { + interrupted = true; + continue; + } + break; + } + if (e == null) { + break; + } + buffer.add(e); + ++added; + } + } + finally { + if (interrupted) { + Thread.currentThread().interrupt(); + } + } + return added; + } + + public static Queue synchronizedQueue(Queue queue) { + return Synchronized.queue(queue, null); + } + + public static Deque synchronizedDeque(Deque deque) { + return Synchronized.deque(deque, null); + } +} diff --git a/src/com/google/common/collect/Range.java b/src/com/google/common/collect/Range.java new file mode 100644 index 0000000..f81c974 --- /dev/null +++ b/src/com/google/common/collect/Range.java @@ -0,0 +1,301 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.GwtCompatible; +import com.google.common.base.Function; +import com.google.common.base.Preconditions; +import com.google.common.base.Predicate; +import com.google.common.collect.BoundType; +import com.google.common.collect.ComparisonChain; +import com.google.common.collect.ContiguousSet; +import com.google.common.collect.Cut; +import com.google.common.collect.DiscreteDomain; +import com.google.common.collect.Iterables; +import com.google.common.collect.Ordering; +import java.io.Serializable; +import java.util.Comparator; +import java.util.Iterator; +import java.util.SortedSet; +import javax.annotation.Nullable; + +@GwtCompatible +public final class Range +implements Predicate, +Serializable { + private static final Function LOWER_BOUND_FN = new Function(){ + + @Override + public Cut apply(Range range) { + return range.lowerBound; + } + }; + private static final Function UPPER_BOUND_FN = new Function(){ + + @Override + public Cut apply(Range range) { + return range.upperBound; + } + }; + static final Ordering> RANGE_LEX_ORDERING = new Ordering>(){ + + @Override + public int compare(Range left, Range right) { + return ComparisonChain.start().compare(left.lowerBound, right.lowerBound).compare(left.upperBound, right.upperBound).result(); + } + }; + private static final Range ALL = new Range(Cut.belowAll(), Cut.aboveAll()); + final Cut lowerBound; + final Cut upperBound; + private static final long serialVersionUID = 0L; + + static > Function, Cut> lowerBoundFn() { + return LOWER_BOUND_FN; + } + + static > Function, Cut> upperBoundFn() { + return UPPER_BOUND_FN; + } + + static > Range create(Cut lowerBound, Cut upperBound) { + return new Range(lowerBound, upperBound); + } + + public static > Range open(C lower, C upper) { + return Range.create(Cut.aboveValue(lower), Cut.belowValue(upper)); + } + + public static > Range closed(C lower, C upper) { + return Range.create(Cut.belowValue(lower), Cut.aboveValue(upper)); + } + + public static > Range closedOpen(C lower, C upper) { + return Range.create(Cut.belowValue(lower), Cut.belowValue(upper)); + } + + public static > Range openClosed(C lower, C upper) { + return Range.create(Cut.aboveValue(lower), Cut.aboveValue(upper)); + } + + public static > Range range(C lower, BoundType lowerType, C upper, BoundType upperType) { + Preconditions.checkNotNull(lowerType); + Preconditions.checkNotNull(upperType); + Cut lowerBound = lowerType == BoundType.OPEN ? Cut.aboveValue(lower) : Cut.belowValue(lower); + Cut upperBound = upperType == BoundType.OPEN ? Cut.belowValue(upper) : Cut.aboveValue(upper); + return Range.create(lowerBound, upperBound); + } + + public static > Range lessThan(C endpoint) { + return Range.create(Cut.belowAll(), Cut.belowValue(endpoint)); + } + + public static > Range atMost(C endpoint) { + return Range.create(Cut.belowAll(), Cut.aboveValue(endpoint)); + } + + public static > Range upTo(C endpoint, BoundType boundType) { + switch (boundType) { + case OPEN: { + return Range.lessThan(endpoint); + } + case CLOSED: { + return Range.atMost(endpoint); + } + } + throw new AssertionError(); + } + + public static > Range greaterThan(C endpoint) { + return Range.create(Cut.aboveValue(endpoint), Cut.aboveAll()); + } + + public static > Range atLeast(C endpoint) { + return Range.create(Cut.belowValue(endpoint), Cut.aboveAll()); + } + + public static > Range downTo(C endpoint, BoundType boundType) { + switch (boundType) { + case OPEN: { + return Range.greaterThan(endpoint); + } + case CLOSED: { + return Range.atLeast(endpoint); + } + } + throw new AssertionError(); + } + + public static > Range all() { + return ALL; + } + + public static > Range singleton(C value) { + return Range.closed(value, value); + } + + public static > Range encloseAll(Iterable values) { + Comparable min; + Preconditions.checkNotNull(values); + if (values instanceof ContiguousSet) { + return ((ContiguousSet)values).range(); + } + Iterator valueIterator = values.iterator(); + Comparable max = min = (Comparable)Preconditions.checkNotNull(valueIterator.next()); + while (valueIterator.hasNext()) { + Comparable value = (Comparable)Preconditions.checkNotNull(valueIterator.next()); + min = Ordering.natural().min(min, value); + max = Ordering.natural().max(max, value); + } + return Range.closed(min, max); + } + + private Range(Cut lowerBound, Cut upperBound) { + if (lowerBound.compareTo(upperBound) > 0 || lowerBound == Cut.aboveAll() || upperBound == Cut.belowAll()) { + String string = String.valueOf(Range.toString(lowerBound, upperBound)); + throw new IllegalArgumentException(string.length() != 0 ? "Invalid range: ".concat(string) : new String("Invalid range: ")); + } + this.lowerBound = Preconditions.checkNotNull(lowerBound); + this.upperBound = Preconditions.checkNotNull(upperBound); + } + + public boolean hasLowerBound() { + return this.lowerBound != Cut.belowAll(); + } + + public C lowerEndpoint() { + return this.lowerBound.endpoint(); + } + + public BoundType lowerBoundType() { + return this.lowerBound.typeAsLowerBound(); + } + + public boolean hasUpperBound() { + return this.upperBound != Cut.aboveAll(); + } + + public C upperEndpoint() { + return this.upperBound.endpoint(); + } + + public BoundType upperBoundType() { + return this.upperBound.typeAsUpperBound(); + } + + public boolean isEmpty() { + return this.lowerBound.equals(this.upperBound); + } + + public boolean contains(C value) { + Preconditions.checkNotNull(value); + return this.lowerBound.isLessThan(value) && !this.upperBound.isLessThan(value); + } + + @Override + @Deprecated + public boolean apply(C input) { + return this.contains(input); + } + + public boolean containsAll(Iterable values) { + if (Iterables.isEmpty(values)) { + return true; + } + if (values instanceof SortedSet) { + SortedSet set = Range.cast(values); + Comparator comparator = set.comparator(); + if (Ordering.natural().equals(comparator) || comparator == null) { + return this.contains((Comparable)set.first()) && this.contains((Comparable)set.last()); + } + } + for (Comparable value : values) { + if (this.contains(value)) continue; + return false; + } + return true; + } + + public boolean encloses(Range other) { + return this.lowerBound.compareTo(other.lowerBound) <= 0 && this.upperBound.compareTo(other.upperBound) >= 0; + } + + public boolean isConnected(Range other) { + return this.lowerBound.compareTo(other.upperBound) <= 0 && other.lowerBound.compareTo(this.upperBound) <= 0; + } + + public Range intersection(Range connectedRange) { + int lowerCmp = this.lowerBound.compareTo(connectedRange.lowerBound); + int upperCmp = this.upperBound.compareTo(connectedRange.upperBound); + if (lowerCmp >= 0 && upperCmp <= 0) { + return this; + } + if (lowerCmp <= 0 && upperCmp >= 0) { + return connectedRange; + } + Cut newLower = lowerCmp >= 0 ? this.lowerBound : connectedRange.lowerBound; + Cut newUpper = upperCmp <= 0 ? this.upperBound : connectedRange.upperBound; + return Range.create(newLower, newUpper); + } + + public Range span(Range other) { + int lowerCmp = this.lowerBound.compareTo(other.lowerBound); + int upperCmp = this.upperBound.compareTo(other.upperBound); + if (lowerCmp <= 0 && upperCmp >= 0) { + return this; + } + if (lowerCmp >= 0 && upperCmp <= 0) { + return other; + } + Cut newLower = lowerCmp <= 0 ? this.lowerBound : other.lowerBound; + Cut newUpper = upperCmp >= 0 ? this.upperBound : other.upperBound; + return Range.create(newLower, newUpper); + } + + public Range canonical(DiscreteDomain domain) { + Preconditions.checkNotNull(domain); + Cut lower = this.lowerBound.canonical(domain); + Cut upper = this.upperBound.canonical(domain); + return lower == this.lowerBound && upper == this.upperBound ? this : Range.create(lower, upper); + } + + @Override + public boolean equals(@Nullable Object object) { + if (object instanceof Range) { + Range other = (Range)object; + return this.lowerBound.equals(other.lowerBound) && this.upperBound.equals(other.upperBound); + } + return false; + } + + public int hashCode() { + return this.lowerBound.hashCode() * 31 + this.upperBound.hashCode(); + } + + public String toString() { + return Range.toString(this.lowerBound, this.upperBound); + } + + private static String toString(Cut lowerBound, Cut upperBound) { + StringBuilder sb = new StringBuilder(16); + lowerBound.describeAsLowerBound(sb); + sb.append('\u2025'); + upperBound.describeAsUpperBound(sb); + return sb.toString(); + } + + private static SortedSet cast(Iterable iterable) { + return (SortedSet)iterable; + } + + Object readResolve() { + if (this.equals(ALL)) { + return Range.all(); + } + return this; + } + + static int compareOrThrow(Comparable left, Comparable right) { + return left.compareTo(right); + } +} diff --git a/src/com/google/common/collect/RangeMap.java b/src/com/google/common/collect/RangeMap.java new file mode 100644 index 0000000..f73e1ec --- /dev/null +++ b/src/com/google/common/collect/RangeMap.java @@ -0,0 +1,38 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.Beta; +import com.google.common.collect.Range; +import java.util.Map; +import javax.annotation.Nullable; + +@Beta +public interface RangeMap { + @Nullable + public V get(K var1); + + @Nullable + public Map.Entry, V> getEntry(K var1); + + public Range span(); + + public void put(Range var1, V var2); + + public void putAll(RangeMap var1); + + public void clear(); + + public void remove(Range var1); + + public Map, V> asMapOfRanges(); + + public RangeMap subRangeMap(Range var1); + + public boolean equals(@Nullable Object var1); + + public int hashCode(); + + public String toString(); +} diff --git a/src/com/google/common/collect/RangeSet.java b/src/com/google/common/collect/RangeSet.java new file mode 100644 index 0000000..d39ad54 --- /dev/null +++ b/src/com/google/common/collect/RangeSet.java @@ -0,0 +1,46 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.Beta; +import com.google.common.collect.Range; +import java.util.Set; +import javax.annotation.Nullable; + +@Beta +public interface RangeSet { + public boolean contains(C var1); + + public Range rangeContaining(C var1); + + public boolean encloses(Range var1); + + public boolean enclosesAll(RangeSet var1); + + public boolean isEmpty(); + + public Range span(); + + public Set> asRanges(); + + public RangeSet complement(); + + public RangeSet subRangeSet(Range var1); + + public void add(Range var1); + + public void remove(Range var1); + + public void clear(); + + public void addAll(RangeSet var1); + + public void removeAll(RangeSet var1); + + public boolean equals(@Nullable Object var1); + + public int hashCode(); + + public String toString(); +} diff --git a/src/com/google/common/collect/RegularContiguousSet.java b/src/com/google/common/collect/RegularContiguousSet.java new file mode 100644 index 0000000..58af3f4 --- /dev/null +++ b/src/com/google/common/collect/RegularContiguousSet.java @@ -0,0 +1,203 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.GwtCompatible; +import com.google.common.annotations.GwtIncompatible; +import com.google.common.base.Preconditions; +import com.google.common.collect.AbstractSequentialIterator; +import com.google.common.collect.BoundType; +import com.google.common.collect.Collections2; +import com.google.common.collect.ContiguousSet; +import com.google.common.collect.DiscreteDomain; +import com.google.common.collect.EmptyContiguousSet; +import com.google.common.collect.Ordering; +import com.google.common.collect.Range; +import com.google.common.collect.Sets; +import com.google.common.collect.UnmodifiableIterator; +import java.io.Serializable; +import java.util.Collection; +import javax.annotation.Nullable; + +@GwtCompatible(emulated=true) +final class RegularContiguousSet +extends ContiguousSet { + private final Range range; + private static final long serialVersionUID = 0L; + + RegularContiguousSet(Range range, DiscreteDomain domain) { + super(domain); + this.range = range; + } + + private ContiguousSet intersectionInCurrentDomain(Range other) { + return this.range.isConnected(other) ? ContiguousSet.create(this.range.intersection(other), this.domain) : new EmptyContiguousSet(this.domain); + } + + @Override + ContiguousSet headSetImpl(C toElement, boolean inclusive) { + return this.intersectionInCurrentDomain(Range.upTo(toElement, BoundType.forBoolean(inclusive))); + } + + @Override + ContiguousSet subSetImpl(C fromElement, boolean fromInclusive, C toElement, boolean toInclusive) { + if (fromElement.compareTo(toElement) == 0 && !fromInclusive && !toInclusive) { + return new EmptyContiguousSet(this.domain); + } + return this.intersectionInCurrentDomain(Range.range(fromElement, BoundType.forBoolean(fromInclusive), toElement, BoundType.forBoolean(toInclusive))); + } + + @Override + ContiguousSet tailSetImpl(C fromElement, boolean inclusive) { + return this.intersectionInCurrentDomain(Range.downTo(fromElement, BoundType.forBoolean(inclusive))); + } + + @Override + @GwtIncompatible(value="not used by GWT emulation") + int indexOf(Object target) { + return this.contains(target) ? (int)this.domain.distance(this.first(), (Comparable)target) : -1; + } + + @Override + public UnmodifiableIterator iterator() { + return new AbstractSequentialIterator((Comparable)this.first()){ + final C last; + { + this.last = RegularContiguousSet.this.last(); + } + + @Override + protected C computeNext(C previous) { + return RegularContiguousSet.equalsOrThrow(previous, this.last) ? null : (Object)RegularContiguousSet.this.domain.next(previous); + } + }; + } + + @Override + @GwtIncompatible(value="NavigableSet") + public UnmodifiableIterator descendingIterator() { + return new AbstractSequentialIterator((Comparable)this.last()){ + final C first; + { + this.first = RegularContiguousSet.this.first(); + } + + @Override + protected C computeNext(C previous) { + return RegularContiguousSet.equalsOrThrow(previous, this.first) ? null : (Object)RegularContiguousSet.this.domain.previous(previous); + } + }; + } + + private static boolean equalsOrThrow(Comparable left, @Nullable Comparable right) { + return right != null && Range.compareOrThrow(left, right) == 0; + } + + @Override + boolean isPartialView() { + return false; + } + + @Override + public C first() { + return this.range.lowerBound.leastValueAbove(this.domain); + } + + @Override + public C last() { + return this.range.upperBound.greatestValueBelow(this.domain); + } + + @Override + public int size() { + long distance = this.domain.distance(this.first(), this.last()); + return distance >= Integer.MAX_VALUE ? Integer.MAX_VALUE : (int)distance + 1; + } + + @Override + public boolean contains(@Nullable Object object) { + if (object == null) { + return false; + } + try { + return this.range.contains((Comparable)object); + } + catch (ClassCastException e) { + return false; + } + } + + @Override + public boolean containsAll(Collection targets) { + return Collections2.containsAllImpl(this, targets); + } + + @Override + public boolean isEmpty() { + return false; + } + + @Override + public ContiguousSet intersection(ContiguousSet other) { + Comparable upperEndpoint; + Preconditions.checkNotNull(other); + Preconditions.checkArgument(this.domain.equals(other.domain)); + if (other.isEmpty()) { + return other; + } + Comparable lowerEndpoint = (Comparable)Ordering.natural().max(this.first(), other.first()); + return lowerEndpoint.compareTo(upperEndpoint = (Comparable)Ordering.natural().min(this.last(), other.last())) < 0 ? ContiguousSet.create(Range.closed(lowerEndpoint, upperEndpoint), this.domain) : new EmptyContiguousSet(this.domain); + } + + @Override + public Range range() { + return this.range(BoundType.CLOSED, BoundType.CLOSED); + } + + @Override + public Range range(BoundType lowerBoundType, BoundType upperBoundType) { + return Range.create(this.range.lowerBound.withLowerBoundType(lowerBoundType, this.domain), this.range.upperBound.withUpperBoundType(upperBoundType, this.domain)); + } + + @Override + public boolean equals(@Nullable Object object) { + if (object == this) { + return true; + } + if (object instanceof RegularContiguousSet) { + RegularContiguousSet that = (RegularContiguousSet)object; + if (this.domain.equals(that.domain)) { + return this.first().equals(that.first()) && this.last().equals(that.last()); + } + } + return super.equals(object); + } + + @Override + public int hashCode() { + return Sets.hashCodeImpl(this); + } + + @Override + @GwtIncompatible(value="serialization") + Object writeReplace() { + return new SerializedForm(this.range, this.domain); + } + + @GwtIncompatible(value="serialization") + private static final class SerializedForm + implements Serializable { + final Range range; + final DiscreteDomain domain; + + private SerializedForm(Range range, DiscreteDomain domain) { + this.range = range; + this.domain = domain; + } + + private Object readResolve() { + return new RegularContiguousSet(this.range, this.domain); + } + } +} diff --git a/src/com/google/common/collect/RegularImmutableAsList.java b/src/com/google/common/collect/RegularImmutableAsList.java new file mode 100644 index 0000000..8465999 --- /dev/null +++ b/src/com/google/common/collect/RegularImmutableAsList.java @@ -0,0 +1,52 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.GwtCompatible; +import com.google.common.annotations.GwtIncompatible; +import com.google.common.collect.ImmutableAsList; +import com.google.common.collect.ImmutableCollection; +import com.google.common.collect.ImmutableList; +import com.google.common.collect.UnmodifiableListIterator; + +@GwtCompatible(emulated=true) +class RegularImmutableAsList +extends ImmutableAsList { + private final ImmutableCollection delegate; + private final ImmutableList delegateList; + + RegularImmutableAsList(ImmutableCollection delegate, ImmutableList delegateList) { + this.delegate = delegate; + this.delegateList = delegateList; + } + + RegularImmutableAsList(ImmutableCollection delegate, Object[] array) { + this(delegate, ImmutableList.asImmutableList(array)); + } + + @Override + ImmutableCollection delegateCollection() { + return this.delegate; + } + + ImmutableList delegateList() { + return this.delegateList; + } + + @Override + public UnmodifiableListIterator listIterator(int index) { + return this.delegateList.listIterator(index); + } + + @Override + @GwtIncompatible(value="not present in emulated superclass") + int copyIntoArray(Object[] dst, int offset) { + return this.delegateList.copyIntoArray(dst, offset); + } + + @Override + public E get(int index) { + return this.delegateList.get(index); + } +} diff --git a/src/com/google/common/collect/RegularImmutableBiMap.java b/src/com/google/common/collect/RegularImmutableBiMap.java new file mode 100644 index 0000000..fe77a79 --- /dev/null +++ b/src/com/google/common/collect/RegularImmutableBiMap.java @@ -0,0 +1,308 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.GwtCompatible; +import com.google.common.collect.CollectPreconditions; +import com.google.common.collect.Hashing; +import com.google.common.collect.ImmutableAsList; +import com.google.common.collect.ImmutableBiMap; +import com.google.common.collect.ImmutableCollection; +import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableMap; +import com.google.common.collect.ImmutableMapEntry; +import com.google.common.collect.ImmutableMapEntrySet; +import com.google.common.collect.ImmutableSet; +import com.google.common.collect.Maps; +import com.google.common.collect.RegularImmutableAsList; +import com.google.common.collect.UnmodifiableIterator; +import java.io.Serializable; +import java.util.Map; +import javax.annotation.Nullable; + +@GwtCompatible(serializable=true, emulated=true) +class RegularImmutableBiMap +extends ImmutableBiMap { + static final double MAX_LOAD_FACTOR = 1.2; + private final transient ImmutableMapEntry[] keyTable; + private final transient ImmutableMapEntry[] valueTable; + private final transient ImmutableMapEntry[] entries; + private final transient int mask; + private final transient int hashCode; + private transient ImmutableBiMap inverse; + + RegularImmutableBiMap(ImmutableMapEntry.TerminalEntry ... entriesToAdd) { + this(entriesToAdd.length, entriesToAdd); + } + + RegularImmutableBiMap(int n, ImmutableMapEntry.TerminalEntry[] entriesToAdd) { + int tableSize = Hashing.closedTableSize(n, 1.2); + this.mask = tableSize - 1; + ImmutableMapEntry[] keyTable = RegularImmutableBiMap.createEntryArray(tableSize); + ImmutableMapEntry[] valueTable = RegularImmutableBiMap.createEntryArray(tableSize); + ImmutableMapEntry[] entries = RegularImmutableBiMap.createEntryArray(n); + int hashCode = 0; + for (int i = 0; i < n; ++i) { + ImmutableMapEntry nextInValueBucket; + ImmutableMapEntry nextInKeyBucket; + ImmutableMapEntry.TerminalEntry entry = entriesToAdd[i]; + Object key = entry.getKey(); + Object value = entry.getValue(); + int keyHash = key.hashCode(); + int valueHash = value.hashCode(); + int keyBucket = Hashing.smear(keyHash) & this.mask; + int valueBucket = Hashing.smear(valueHash) & this.mask; + for (ImmutableMapEntry keyEntry = nextInKeyBucket = keyTable[keyBucket]; keyEntry != null; keyEntry = keyEntry.getNextInKeyBucket()) { + RegularImmutableBiMap.checkNoConflict(!key.equals(keyEntry.getKey()), "key", entry, keyEntry); + } + for (ImmutableMapEntry valueEntry = nextInValueBucket = valueTable[valueBucket]; valueEntry != null; valueEntry = valueEntry.getNextInValueBucket()) { + RegularImmutableBiMap.checkNoConflict(!value.equals(valueEntry.getValue()), "value", entry, valueEntry); + } + ImmutableMapEntry newEntry = nextInKeyBucket == null && nextInValueBucket == null ? entry : new NonTerminalBiMapEntry(entry, nextInKeyBucket, nextInValueBucket); + keyTable[keyBucket] = newEntry; + valueTable[valueBucket] = newEntry; + entries[i] = newEntry; + hashCode += keyHash ^ valueHash; + } + this.keyTable = keyTable; + this.valueTable = valueTable; + this.entries = entries; + this.hashCode = hashCode; + } + + RegularImmutableBiMap(Map.Entry[] entriesToAdd) { + int n = entriesToAdd.length; + int tableSize = Hashing.closedTableSize(n, 1.2); + this.mask = tableSize - 1; + ImmutableMapEntry[] keyTable = RegularImmutableBiMap.createEntryArray(tableSize); + ImmutableMapEntry[] valueTable = RegularImmutableBiMap.createEntryArray(tableSize); + ImmutableMapEntry[] entries = RegularImmutableBiMap.createEntryArray(n); + int hashCode = 0; + for (int i = 0; i < n; ++i) { + ImmutableMapEntry nextInValueBucket; + ImmutableMapEntry nextInKeyBucket; + Map.Entry entry = entriesToAdd[i]; + Object key = entry.getKey(); + Object value = entry.getValue(); + CollectPreconditions.checkEntryNotNull(key, value); + int keyHash = key.hashCode(); + int valueHash = value.hashCode(); + int keyBucket = Hashing.smear(keyHash) & this.mask; + int valueBucket = Hashing.smear(valueHash) & this.mask; + for (ImmutableMapEntry keyEntry = nextInKeyBucket = keyTable[keyBucket]; keyEntry != null; keyEntry = keyEntry.getNextInKeyBucket()) { + RegularImmutableBiMap.checkNoConflict(!key.equals(keyEntry.getKey()), "key", entry, keyEntry); + } + for (ImmutableMapEntry valueEntry = nextInValueBucket = valueTable[valueBucket]; valueEntry != null; valueEntry = valueEntry.getNextInValueBucket()) { + RegularImmutableBiMap.checkNoConflict(!value.equals(valueEntry.getValue()), "value", entry, valueEntry); + } + ImmutableMapEntry newEntry = nextInKeyBucket == null && nextInValueBucket == null ? new ImmutableMapEntry.TerminalEntry(key, value) : new NonTerminalBiMapEntry(key, value, nextInKeyBucket, nextInValueBucket); + keyTable[keyBucket] = newEntry; + valueTable[valueBucket] = newEntry; + entries[i] = newEntry; + hashCode += keyHash ^ valueHash; + } + this.keyTable = keyTable; + this.valueTable = valueTable; + this.entries = entries; + this.hashCode = hashCode; + } + + private static ImmutableMapEntry[] createEntryArray(int length) { + return new ImmutableMapEntry[length]; + } + + @Override + @Nullable + public V get(@Nullable Object key) { + if (key == null) { + return null; + } + int bucket = Hashing.smear(key.hashCode()) & this.mask; + for (ImmutableMapEntry entry = this.keyTable[bucket]; entry != null; entry = entry.getNextInKeyBucket()) { + if (!key.equals(entry.getKey())) continue; + return entry.getValue(); + } + return null; + } + + @Override + ImmutableSet> createEntrySet() { + return new ImmutableMapEntrySet(){ + + @Override + ImmutableMap map() { + return RegularImmutableBiMap.this; + } + + @Override + public UnmodifiableIterator> iterator() { + return this.asList().iterator(); + } + + @Override + ImmutableList> createAsList() { + return new RegularImmutableAsList(this, RegularImmutableBiMap.this.entries); + } + + @Override + boolean isHashCodeFast() { + return true; + } + + @Override + public int hashCode() { + return RegularImmutableBiMap.this.hashCode; + } + }; + } + + @Override + boolean isPartialView() { + return false; + } + + @Override + public int size() { + return this.entries.length; + } + + @Override + public ImmutableBiMap inverse() { + Inverse result = this.inverse; + return result == null ? (this.inverse = new Inverse()) : result; + } + + private static class InverseSerializedForm + implements Serializable { + private final ImmutableBiMap forward; + private static final long serialVersionUID = 1L; + + InverseSerializedForm(ImmutableBiMap forward) { + this.forward = forward; + } + + Object readResolve() { + return this.forward.inverse(); + } + } + + private final class Inverse + extends ImmutableBiMap { + private Inverse() { + } + + @Override + public int size() { + return this.inverse().size(); + } + + @Override + public ImmutableBiMap inverse() { + return RegularImmutableBiMap.this; + } + + @Override + public K get(@Nullable Object value) { + if (value == null) { + return null; + } + int bucket = Hashing.smear(value.hashCode()) & RegularImmutableBiMap.this.mask; + for (ImmutableMapEntry entry = RegularImmutableBiMap.this.valueTable[bucket]; entry != null; entry = entry.getNextInValueBucket()) { + if (!value.equals(entry.getValue())) continue; + return entry.getKey(); + } + return null; + } + + @Override + ImmutableSet> createEntrySet() { + return new InverseEntrySet(); + } + + @Override + boolean isPartialView() { + return false; + } + + @Override + Object writeReplace() { + return new InverseSerializedForm(RegularImmutableBiMap.this); + } + + final class InverseEntrySet + extends ImmutableMapEntrySet { + InverseEntrySet() { + } + + @Override + ImmutableMap map() { + return Inverse.this; + } + + @Override + boolean isHashCodeFast() { + return true; + } + + @Override + public int hashCode() { + return RegularImmutableBiMap.this.hashCode; + } + + @Override + public UnmodifiableIterator> iterator() { + return this.asList().iterator(); + } + + @Override + ImmutableList> createAsList() { + return new ImmutableAsList>(){ + + @Override + public Map.Entry get(int index) { + ImmutableMapEntry entry = RegularImmutableBiMap.this.entries[index]; + return Maps.immutableEntry(entry.getValue(), entry.getKey()); + } + + @Override + ImmutableCollection> delegateCollection() { + return InverseEntrySet.this; + } + }; + } + } + } + + private static final class NonTerminalBiMapEntry + extends ImmutableMapEntry { + @Nullable + private final ImmutableMapEntry nextInKeyBucket; + @Nullable + private final ImmutableMapEntry nextInValueBucket; + + NonTerminalBiMapEntry(K key, V value, @Nullable ImmutableMapEntry nextInKeyBucket, @Nullable ImmutableMapEntry nextInValueBucket) { + super(key, value); + this.nextInKeyBucket = nextInKeyBucket; + this.nextInValueBucket = nextInValueBucket; + } + + NonTerminalBiMapEntry(ImmutableMapEntry contents, @Nullable ImmutableMapEntry nextInKeyBucket, @Nullable ImmutableMapEntry nextInValueBucket) { + super(contents); + this.nextInKeyBucket = nextInKeyBucket; + this.nextInValueBucket = nextInValueBucket; + } + + @Override + @Nullable + ImmutableMapEntry getNextInKeyBucket() { + return this.nextInKeyBucket; + } + + @Override + @Nullable + ImmutableMapEntry getNextInValueBucket() { + return this.nextInValueBucket; + } + } +} diff --git a/src/com/google/common/collect/RegularImmutableList.java b/src/com/google/common/collect/RegularImmutableList.java new file mode 100644 index 0000000..a8d8aef --- /dev/null +++ b/src/com/google/common/collect/RegularImmutableList.java @@ -0,0 +1,85 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.GwtCompatible; +import com.google.common.base.Preconditions; +import com.google.common.collect.ImmutableList; +import com.google.common.collect.Iterators; +import com.google.common.collect.UnmodifiableListIterator; +import javax.annotation.Nullable; + +@GwtCompatible(serializable=true, emulated=true) +class RegularImmutableList +extends ImmutableList { + private final transient int offset; + private final transient int size; + private final transient Object[] array; + + RegularImmutableList(Object[] array, int offset, int size) { + this.offset = offset; + this.size = size; + this.array = array; + } + + RegularImmutableList(Object[] array) { + this(array, 0, array.length); + } + + @Override + public int size() { + return this.size; + } + + @Override + boolean isPartialView() { + return this.size != this.array.length; + } + + @Override + int copyIntoArray(Object[] dst, int dstOff) { + System.arraycopy(this.array, this.offset, dst, dstOff, this.size); + return dstOff + this.size; + } + + @Override + public E get(int index) { + Preconditions.checkElementIndex(index, this.size); + return (E)this.array[index + this.offset]; + } + + @Override + public int indexOf(@Nullable Object object) { + if (object == null) { + return -1; + } + for (int i = 0; i < this.size; ++i) { + if (!this.array[this.offset + i].equals(object)) continue; + return i; + } + return -1; + } + + @Override + public int lastIndexOf(@Nullable Object object) { + if (object == null) { + return -1; + } + for (int i = this.size - 1; i >= 0; --i) { + if (!this.array[this.offset + i].equals(object)) continue; + return i; + } + return -1; + } + + @Override + ImmutableList subListUnchecked(int fromIndex, int toIndex) { + return new RegularImmutableList(this.array, this.offset + fromIndex, toIndex - fromIndex); + } + + @Override + public UnmodifiableListIterator listIterator(int index) { + return Iterators.forArray(this.array, this.offset, this.size, index); + } +} diff --git a/src/com/google/common/collect/RegularImmutableMap.java b/src/com/google/common/collect/RegularImmutableMap.java new file mode 100644 index 0000000..af5b7d4 --- /dev/null +++ b/src/com/google/common/collect/RegularImmutableMap.java @@ -0,0 +1,155 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.GwtCompatible; +import com.google.common.collect.CollectPreconditions; +import com.google.common.collect.Hashing; +import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableMap; +import com.google.common.collect.ImmutableMapEntry; +import com.google.common.collect.ImmutableMapEntrySet; +import com.google.common.collect.ImmutableSet; +import com.google.common.collect.RegularImmutableAsList; +import com.google.common.collect.UnmodifiableIterator; +import java.util.Map; +import javax.annotation.Nullable; + +@GwtCompatible(serializable=true, emulated=true) +final class RegularImmutableMap +extends ImmutableMap { + private final transient ImmutableMapEntry[] entries; + private final transient ImmutableMapEntry[] table; + private final transient int mask; + private static final double MAX_LOAD_FACTOR = 1.2; + private static final long serialVersionUID = 0L; + + RegularImmutableMap(ImmutableMapEntry.TerminalEntry ... theEntries) { + this(theEntries.length, theEntries); + } + + RegularImmutableMap(int size, ImmutableMapEntry.TerminalEntry[] theEntries) { + this.entries = this.createEntryArray(size); + int tableSize = Hashing.closedTableSize(size, 1.2); + this.table = this.createEntryArray(tableSize); + this.mask = tableSize - 1; + for (int entryIndex = 0; entryIndex < size; ++entryIndex) { + ImmutableMapEntry.TerminalEntry entry = theEntries[entryIndex]; + Object key = entry.getKey(); + int tableIndex = Hashing.smear(key.hashCode()) & this.mask; + ImmutableMapEntry existing = this.table[tableIndex]; + ImmutableMapEntry newEntry = existing == null ? entry : new NonTerminalMapEntry((ImmutableMapEntry)entry, existing); + this.table[tableIndex] = newEntry; + this.entries[entryIndex] = newEntry; + this.checkNoConflictInBucket(key, newEntry, existing); + } + } + + RegularImmutableMap(Map.Entry[] theEntries) { + int size = theEntries.length; + this.entries = this.createEntryArray(size); + int tableSize = Hashing.closedTableSize(size, 1.2); + this.table = this.createEntryArray(tableSize); + this.mask = tableSize - 1; + for (int entryIndex = 0; entryIndex < size; ++entryIndex) { + Map.Entry entry = theEntries[entryIndex]; + Object key = entry.getKey(); + Object value = entry.getValue(); + CollectPreconditions.checkEntryNotNull(key, value); + int tableIndex = Hashing.smear(key.hashCode()) & this.mask; + ImmutableMapEntry existing = this.table[tableIndex]; + ImmutableMapEntry newEntry = existing == null ? new ImmutableMapEntry.TerminalEntry(key, value) : new NonTerminalMapEntry(key, value, existing); + this.table[tableIndex] = newEntry; + this.entries[entryIndex] = newEntry; + this.checkNoConflictInBucket(key, newEntry, existing); + } + } + + private void checkNoConflictInBucket(K key, ImmutableMapEntry entry, ImmutableMapEntry bucketHead) { + while (bucketHead != null) { + RegularImmutableMap.checkNoConflict(!key.equals(bucketHead.getKey()), "key", entry, bucketHead); + bucketHead = bucketHead.getNextInKeyBucket(); + } + } + + private ImmutableMapEntry[] createEntryArray(int size) { + return new ImmutableMapEntry[size]; + } + + @Override + public V get(@Nullable Object key) { + if (key == null) { + return null; + } + int index = Hashing.smear(key.hashCode()) & this.mask; + for (ImmutableMapEntry entry = this.table[index]; entry != null; entry = entry.getNextInKeyBucket()) { + Object candidateKey = entry.getKey(); + if (!key.equals(candidateKey)) continue; + return entry.getValue(); + } + return null; + } + + @Override + public int size() { + return this.entries.length; + } + + @Override + boolean isPartialView() { + return false; + } + + @Override + ImmutableSet> createEntrySet() { + return new EntrySet(); + } + + private class EntrySet + extends ImmutableMapEntrySet { + private EntrySet() { + } + + @Override + ImmutableMap map() { + return RegularImmutableMap.this; + } + + @Override + public UnmodifiableIterator> iterator() { + return this.asList().iterator(); + } + + @Override + ImmutableList> createAsList() { + return new RegularImmutableAsList(this, RegularImmutableMap.this.entries); + } + } + + private static final class NonTerminalMapEntry + extends ImmutableMapEntry { + private final ImmutableMapEntry nextInKeyBucket; + + NonTerminalMapEntry(K key, V value, ImmutableMapEntry nextInKeyBucket) { + super(key, value); + this.nextInKeyBucket = nextInKeyBucket; + } + + NonTerminalMapEntry(ImmutableMapEntry contents, ImmutableMapEntry nextInKeyBucket) { + super(contents); + this.nextInKeyBucket = nextInKeyBucket; + } + + @Override + ImmutableMapEntry getNextInKeyBucket() { + return this.nextInKeyBucket; + } + + @Override + @Nullable + ImmutableMapEntry getNextInValueBucket() { + return null; + } + } +} diff --git a/src/com/google/common/collect/RegularImmutableMultiset.java b/src/com/google/common/collect/RegularImmutableMultiset.java new file mode 100644 index 0000000..20f938f --- /dev/null +++ b/src/com/google/common/collect/RegularImmutableMultiset.java @@ -0,0 +1,63 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.GwtCompatible; +import com.google.common.collect.ImmutableCollection; +import com.google.common.collect.ImmutableMap; +import com.google.common.collect.ImmutableMultiset; +import com.google.common.collect.ImmutableSet; +import com.google.common.collect.Multiset; +import com.google.common.collect.Multisets; +import java.util.Map; +import javax.annotation.Nullable; + +@GwtCompatible(serializable=true) +class RegularImmutableMultiset +extends ImmutableMultiset { + private final transient ImmutableMap map; + private final transient int size; + + RegularImmutableMultiset(ImmutableMap map, int size) { + this.map = map; + this.size = size; + } + + @Override + boolean isPartialView() { + return this.map.isPartialView(); + } + + @Override + public int count(@Nullable Object element) { + Integer value = this.map.get(element); + return value == null ? 0 : value; + } + + @Override + public int size() { + return this.size; + } + + @Override + public boolean contains(@Nullable Object element) { + return this.map.containsKey(element); + } + + @Override + public ImmutableSet elementSet() { + return this.map.keySet(); + } + + @Override + Multiset.Entry getEntry(int index) { + Map.Entry mapEntry = (Map.Entry)((ImmutableCollection)((Object)this.map.entrySet())).asList().get(index); + return Multisets.immutableEntry(mapEntry.getKey(), (Integer)mapEntry.getValue()); + } + + @Override + public int hashCode() { + return this.map.hashCode(); + } +} diff --git a/src/com/google/common/collect/RegularImmutableSet.java b/src/com/google/common/collect/RegularImmutableSet.java new file mode 100644 index 0000000..e4ebb39 --- /dev/null +++ b/src/com/google/common/collect/RegularImmutableSet.java @@ -0,0 +1,82 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.GwtCompatible; +import com.google.common.annotations.VisibleForTesting; +import com.google.common.collect.Hashing; +import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableSet; +import com.google.common.collect.Iterators; +import com.google.common.collect.RegularImmutableAsList; +import com.google.common.collect.UnmodifiableIterator; + +@GwtCompatible(serializable=true, emulated=true) +final class RegularImmutableSet +extends ImmutableSet { + private final Object[] elements; + @VisibleForTesting + final transient Object[] table; + private final transient int mask; + private final transient int hashCode; + + RegularImmutableSet(Object[] elements, int hashCode, Object[] table, int mask) { + this.elements = elements; + this.table = table; + this.mask = mask; + this.hashCode = hashCode; + } + + @Override + public boolean contains(Object target) { + if (target == null) { + return false; + } + int i = Hashing.smear(target.hashCode()); + Object candidate; + while ((candidate = this.table[i & this.mask]) != null) { + if (candidate.equals(target)) { + return true; + } + ++i; + } + return false; + } + + @Override + public int size() { + return this.elements.length; + } + + @Override + public UnmodifiableIterator iterator() { + return Iterators.forArray(this.elements); + } + + @Override + int copyIntoArray(Object[] dst, int offset) { + System.arraycopy(this.elements, 0, dst, offset, this.elements.length); + return offset + this.elements.length; + } + + @Override + ImmutableList createAsList() { + return new RegularImmutableAsList(this, this.elements); + } + + @Override + boolean isPartialView() { + return false; + } + + @Override + public int hashCode() { + return this.hashCode; + } + + @Override + boolean isHashCodeFast() { + return true; + } +} diff --git a/src/com/google/common/collect/RegularImmutableSortedMap.java b/src/com/google/common/collect/RegularImmutableSortedMap.java new file mode 100644 index 0000000..b89c86a --- /dev/null +++ b/src/com/google/common/collect/RegularImmutableSortedMap.java @@ -0,0 +1,120 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.GwtCompatible; +import com.google.common.base.Preconditions; +import com.google.common.collect.ImmutableAsList; +import com.google.common.collect.ImmutableCollection; +import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableMap; +import com.google.common.collect.ImmutableMapEntrySet; +import com.google.common.collect.ImmutableSet; +import com.google.common.collect.ImmutableSortedMap; +import com.google.common.collect.ImmutableSortedSet; +import com.google.common.collect.Maps; +import com.google.common.collect.RegularImmutableSortedSet; +import com.google.common.collect.UnmodifiableIterator; +import java.util.Map; +import javax.annotation.Nullable; + +@GwtCompatible(emulated=true) +final class RegularImmutableSortedMap +extends ImmutableSortedMap { + private final transient RegularImmutableSortedSet keySet; + private final transient ImmutableList valueList; + + RegularImmutableSortedMap(RegularImmutableSortedSet keySet, ImmutableList valueList) { + this.keySet = keySet; + this.valueList = valueList; + } + + RegularImmutableSortedMap(RegularImmutableSortedSet keySet, ImmutableList valueList, ImmutableSortedMap descendingMap) { + super(descendingMap); + this.keySet = keySet; + this.valueList = valueList; + } + + @Override + ImmutableSet> createEntrySet() { + return new EntrySet(); + } + + @Override + public ImmutableSortedSet keySet() { + return this.keySet; + } + + @Override + public ImmutableCollection values() { + return this.valueList; + } + + @Override + public V get(@Nullable Object key) { + int index = this.keySet.indexOf(key); + return index == -1 ? null : (V)this.valueList.get(index); + } + + private ImmutableSortedMap getSubMap(int fromIndex, int toIndex) { + if (fromIndex == 0 && toIndex == this.size()) { + return this; + } + if (fromIndex == toIndex) { + return RegularImmutableSortedMap.emptyMap(this.comparator()); + } + return RegularImmutableSortedMap.from(this.keySet.getSubSet(fromIndex, toIndex), this.valueList.subList(fromIndex, toIndex)); + } + + @Override + public ImmutableSortedMap headMap(K toKey, boolean inclusive) { + return this.getSubMap(0, this.keySet.headIndex(Preconditions.checkNotNull(toKey), inclusive)); + } + + @Override + public ImmutableSortedMap tailMap(K fromKey, boolean inclusive) { + return this.getSubMap(this.keySet.tailIndex(Preconditions.checkNotNull(fromKey), inclusive), this.size()); + } + + @Override + ImmutableSortedMap createDescendingMap() { + return new RegularImmutableSortedMap((RegularImmutableSortedSet)this.keySet.descendingSet(), this.valueList.reverse(), this); + } + + private class EntrySet + extends ImmutableMapEntrySet { + private EntrySet() { + } + + @Override + public UnmodifiableIterator> iterator() { + return this.asList().iterator(); + } + + @Override + ImmutableList> createAsList() { + return new ImmutableAsList>(){ + private final ImmutableList keyList; + { + this.keyList = ((ImmutableCollection)((Object)RegularImmutableSortedMap.this.keySet())).asList(); + } + + @Override + public Map.Entry get(int index) { + return Maps.immutableEntry(this.keyList.get(index), RegularImmutableSortedMap.this.valueList.get(index)); + } + + @Override + ImmutableCollection> delegateCollection() { + return EntrySet.this; + } + }; + } + + @Override + ImmutableMap map() { + return RegularImmutableSortedMap.this; + } + } +} diff --git a/src/com/google/common/collect/RegularImmutableSortedMultiset.java b/src/com/google/common/collect/RegularImmutableSortedMultiset.java new file mode 100644 index 0000000..3ee3454 --- /dev/null +++ b/src/com/google/common/collect/RegularImmutableSortedMultiset.java @@ -0,0 +1,90 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.base.Preconditions; +import com.google.common.collect.BoundType; +import com.google.common.collect.ImmutableSortedMultiset; +import com.google.common.collect.ImmutableSortedSet; +import com.google.common.collect.Multiset; +import com.google.common.collect.Multisets; +import com.google.common.collect.RegularImmutableSortedSet; +import com.google.common.primitives.Ints; +import javax.annotation.Nullable; + +final class RegularImmutableSortedMultiset +extends ImmutableSortedMultiset { + private final transient RegularImmutableSortedSet elementSet; + private final transient int[] counts; + private final transient long[] cumulativeCounts; + private final transient int offset; + private final transient int length; + + RegularImmutableSortedMultiset(RegularImmutableSortedSet elementSet, int[] counts, long[] cumulativeCounts, int offset, int length) { + this.elementSet = elementSet; + this.counts = counts; + this.cumulativeCounts = cumulativeCounts; + this.offset = offset; + this.length = length; + } + + @Override + Multiset.Entry getEntry(int index) { + return Multisets.immutableEntry(this.elementSet.asList().get(index), this.counts[this.offset + index]); + } + + @Override + public Multiset.Entry firstEntry() { + return this.getEntry(0); + } + + @Override + public Multiset.Entry lastEntry() { + return this.getEntry(this.length - 1); + } + + @Override + public int count(@Nullable Object element) { + int index = this.elementSet.indexOf(element); + return index == -1 ? 0 : this.counts[index + this.offset]; + } + + @Override + public int size() { + long size = this.cumulativeCounts[this.offset + this.length] - this.cumulativeCounts[this.offset]; + return Ints.saturatedCast(size); + } + + @Override + public ImmutableSortedSet elementSet() { + return this.elementSet; + } + + @Override + public ImmutableSortedMultiset headMultiset(E upperBound, BoundType boundType) { + return this.getSubMultiset(0, this.elementSet.headIndex(upperBound, Preconditions.checkNotNull(boundType) == BoundType.CLOSED)); + } + + @Override + public ImmutableSortedMultiset tailMultiset(E lowerBound, BoundType boundType) { + return this.getSubMultiset(this.elementSet.tailIndex(lowerBound, Preconditions.checkNotNull(boundType) == BoundType.CLOSED), this.length); + } + + ImmutableSortedMultiset getSubMultiset(int from, int to) { + Preconditions.checkPositionIndexes(from, to, this.length); + if (from == to) { + return RegularImmutableSortedMultiset.emptyMultiset(this.comparator()); + } + if (from == 0 && to == this.length) { + return this; + } + RegularImmutableSortedSet subElementSet = (RegularImmutableSortedSet)this.elementSet.getSubSet(from, to); + return new RegularImmutableSortedMultiset(subElementSet, this.counts, this.cumulativeCounts, this.offset + from, to - from); + } + + @Override + boolean isPartialView() { + return this.offset > 0 || this.length < this.counts.length; + } +} diff --git a/src/com/google/common/collect/RegularImmutableSortedSet.java b/src/com/google/common/collect/RegularImmutableSortedSet.java new file mode 100644 index 0000000..acb0662 --- /dev/null +++ b/src/com/google/common/collect/RegularImmutableSortedSet.java @@ -0,0 +1,248 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.GwtCompatible; +import com.google.common.annotations.GwtIncompatible; +import com.google.common.base.Preconditions; +import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableSortedAsList; +import com.google.common.collect.ImmutableSortedSet; +import com.google.common.collect.Iterators; +import com.google.common.collect.Multiset; +import com.google.common.collect.Ordering; +import com.google.common.collect.PeekingIterator; +import com.google.common.collect.SortedIterables; +import com.google.common.collect.SortedLists; +import com.google.common.collect.UnmodifiableIterator; +import java.util.Collection; +import java.util.Collections; +import java.util.Comparator; +import java.util.Iterator; +import java.util.NoSuchElementException; +import java.util.Set; +import javax.annotation.Nullable; + +@GwtCompatible(serializable=true, emulated=true) +final class RegularImmutableSortedSet +extends ImmutableSortedSet { + private final transient ImmutableList elements; + + RegularImmutableSortedSet(ImmutableList elements, Comparator comparator) { + super(comparator); + this.elements = elements; + Preconditions.checkArgument(!elements.isEmpty()); + } + + @Override + public UnmodifiableIterator iterator() { + return this.elements.iterator(); + } + + @Override + @GwtIncompatible(value="NavigableSet") + public UnmodifiableIterator descendingIterator() { + return this.elements.reverse().iterator(); + } + + @Override + public boolean isEmpty() { + return false; + } + + @Override + public int size() { + return this.elements.size(); + } + + @Override + public boolean contains(Object o) { + try { + return o != null && this.unsafeBinarySearch(o) >= 0; + } + catch (ClassCastException e) { + return false; + } + } + + @Override + public boolean containsAll(Collection targets) { + if (targets instanceof Multiset) { + targets = ((Multiset)targets).elementSet(); + } + if (!SortedIterables.hasSameComparator(this.comparator(), targets) || targets.size() <= 1) { + return super.containsAll(targets); + } + PeekingIterator thisIterator = Iterators.peekingIterator(this.iterator()); + Iterator thatIterator = targets.iterator(); + Object target = thatIterator.next(); + try { + while (thisIterator.hasNext()) { + int cmp = this.unsafeCompare(thisIterator.peek(), target); + if (cmp < 0) { + thisIterator.next(); + continue; + } + if (cmp == 0) { + if (!thatIterator.hasNext()) { + return true; + } + target = thatIterator.next(); + continue; + } + if (cmp <= 0) continue; + return false; + } + } + catch (NullPointerException e) { + return false; + } + catch (ClassCastException e) { + return false; + } + return false; + } + + private int unsafeBinarySearch(Object key) throws ClassCastException { + return Collections.binarySearch(this.elements, key, this.unsafeComparator()); + } + + @Override + boolean isPartialView() { + return this.elements.isPartialView(); + } + + @Override + int copyIntoArray(Object[] dst, int offset) { + return this.elements.copyIntoArray(dst, offset); + } + + @Override + public boolean equals(@Nullable Object object) { + if (object == this) { + return true; + } + if (!(object instanceof Set)) { + return false; + } + Set that = (Set)object; + if (this.size() != that.size()) { + return false; + } + if (SortedIterables.hasSameComparator(this.comparator, that)) { + Iterator otherIterator = that.iterator(); + try { + for (Object element : this) { + Object otherElement = otherIterator.next(); + if (otherElement != null && this.unsafeCompare(element, otherElement) == 0) continue; + return false; + } + return true; + } + catch (ClassCastException e) { + return false; + } + catch (NoSuchElementException e) { + return false; + } + } + return this.containsAll(that); + } + + @Override + public E first() { + return this.elements.get(0); + } + + @Override + public E last() { + return this.elements.get(this.size() - 1); + } + + @Override + public E lower(E element) { + int index = this.headIndex(element, false) - 1; + return index == -1 ? null : (E)this.elements.get(index); + } + + @Override + public E floor(E element) { + int index = this.headIndex(element, true) - 1; + return index == -1 ? null : (E)this.elements.get(index); + } + + @Override + public E ceiling(E element) { + int index = this.tailIndex(element, true); + return index == this.size() ? null : (E)this.elements.get(index); + } + + @Override + public E higher(E element) { + int index = this.tailIndex(element, false); + return index == this.size() ? null : (E)this.elements.get(index); + } + + @Override + ImmutableSortedSet headSetImpl(E toElement, boolean inclusive) { + return this.getSubSet(0, this.headIndex(toElement, inclusive)); + } + + int headIndex(E toElement, boolean inclusive) { + return SortedLists.binarySearch(this.elements, Preconditions.checkNotNull(toElement), this.comparator(), inclusive ? SortedLists.KeyPresentBehavior.FIRST_AFTER : SortedLists.KeyPresentBehavior.FIRST_PRESENT, SortedLists.KeyAbsentBehavior.NEXT_HIGHER); + } + + @Override + ImmutableSortedSet subSetImpl(E fromElement, boolean fromInclusive, E toElement, boolean toInclusive) { + return this.tailSetImpl(fromElement, fromInclusive).headSetImpl(toElement, toInclusive); + } + + @Override + ImmutableSortedSet tailSetImpl(E fromElement, boolean inclusive) { + return this.getSubSet(this.tailIndex(fromElement, inclusive), this.size()); + } + + int tailIndex(E fromElement, boolean inclusive) { + return SortedLists.binarySearch(this.elements, Preconditions.checkNotNull(fromElement), this.comparator(), inclusive ? SortedLists.KeyPresentBehavior.FIRST_PRESENT : SortedLists.KeyPresentBehavior.FIRST_AFTER, SortedLists.KeyAbsentBehavior.NEXT_HIGHER); + } + + Comparator unsafeComparator() { + return this.comparator; + } + + ImmutableSortedSet getSubSet(int newFromIndex, int newToIndex) { + if (newFromIndex == 0 && newToIndex == this.size()) { + return this; + } + if (newFromIndex < newToIndex) { + return new RegularImmutableSortedSet(this.elements.subList(newFromIndex, newToIndex), this.comparator); + } + return RegularImmutableSortedSet.emptySet(this.comparator); + } + + @Override + int indexOf(@Nullable Object target) { + int position; + if (target == null) { + return -1; + } + try { + position = SortedLists.binarySearch(this.elements, target, this.unsafeComparator(), SortedLists.KeyPresentBehavior.ANY_PRESENT, SortedLists.KeyAbsentBehavior.INVERTED_INSERTION_INDEX); + } + catch (ClassCastException e) { + return -1; + } + return position >= 0 ? position : -1; + } + + @Override + ImmutableList createAsList() { + return new ImmutableSortedAsList(this, this.elements); + } + + @Override + ImmutableSortedSet createDescendingSet() { + return new RegularImmutableSortedSet(this.elements.reverse(), Ordering.from(this.comparator).reverse()); + } +} diff --git a/src/com/google/common/collect/RegularImmutableTable.java b/src/com/google/common/collect/RegularImmutableTable.java new file mode 100644 index 0000000..07f32f5 --- /dev/null +++ b/src/com/google/common/collect/RegularImmutableTable.java @@ -0,0 +1,162 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.GwtCompatible; +import com.google.common.base.Preconditions; +import com.google.common.collect.DenseImmutableTable; +import com.google.common.collect.ImmutableAsList; +import com.google.common.collect.ImmutableCollection; +import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableSet; +import com.google.common.collect.ImmutableTable; +import com.google.common.collect.Lists; +import com.google.common.collect.SparseImmutableTable; +import com.google.common.collect.Table; +import com.google.common.collect.UnmodifiableIterator; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; +import java.util.List; +import javax.annotation.Nullable; + +@GwtCompatible +abstract class RegularImmutableTable +extends ImmutableTable { + RegularImmutableTable() { + } + + abstract Table.Cell getCell(int var1); + + @Override + final ImmutableSet> createCellSet() { + return this.isEmpty() ? ImmutableSet.of() : new CellSet(); + } + + abstract V getValue(int var1); + + @Override + final ImmutableCollection createValues() { + return this.isEmpty() ? ImmutableList.of() : new Values(); + } + + static RegularImmutableTable forCells(List> cells, final @Nullable Comparator rowComparator, final @Nullable Comparator columnComparator) { + Preconditions.checkNotNull(cells); + if (rowComparator != null || columnComparator != null) { + Comparator comparator = new Comparator>(){ + + @Override + public int compare(Table.Cell cell1, Table.Cell cell2) { + int rowCompare; + int n = rowCompare = rowComparator == null ? 0 : rowComparator.compare(cell1.getRowKey(), cell2.getRowKey()); + if (rowCompare != 0) { + return rowCompare; + } + return columnComparator == null ? 0 : columnComparator.compare(cell1.getColumnKey(), cell2.getColumnKey()); + } + }; + Collections.sort(cells, comparator); + } + return RegularImmutableTable.forCellsInternal(cells, rowComparator, columnComparator); + } + + static RegularImmutableTable forCells(Iterable> cells) { + return RegularImmutableTable.forCellsInternal(cells, null, null); + } + + /* + * WARNING - void declaration + */ + private static final RegularImmutableTable forCellsInternal(Iterable> cells, @Nullable Comparator rowComparator, @Nullable Comparator columnComparator) { + void var7_12; + ImmutableSet.Builder rowSpaceBuilder = ImmutableSet.builder(); + ImmutableSet.Builder columnSpaceBuilder = ImmutableSet.builder(); + ImmutableList> cellList = ImmutableList.copyOf(cells); + for (Table.Cell cell : cellList) { + rowSpaceBuilder.add(cell.getRowKey()); + columnSpaceBuilder.add(cell.getColumnKey()); + } + ImmutableSet rowSpace = rowSpaceBuilder.build(); + if (rowComparator != null) { + ArrayList arrayList = Lists.newArrayList(rowSpace); + Collections.sort(arrayList, rowComparator); + rowSpace = ImmutableSet.copyOf(arrayList); + } + ImmutableCollection immutableCollection = columnSpaceBuilder.build(); + if (columnComparator != null) { + ArrayList columnList = Lists.newArrayList(immutableCollection); + Collections.sort(columnList, columnComparator); + ImmutableSet immutableSet = ImmutableSet.copyOf(columnList); + } + return (long)cellList.size() > (long)rowSpace.size() * (long)var7_12.size() / 2L ? new DenseImmutableTable(cellList, rowSpace, var7_12) : new SparseImmutableTable(cellList, rowSpace, var7_12); + } + + private final class Values + extends ImmutableList { + private Values() { + } + + @Override + public int size() { + return RegularImmutableTable.this.size(); + } + + @Override + public V get(int index) { + return RegularImmutableTable.this.getValue(index); + } + + @Override + boolean isPartialView() { + return true; + } + } + + private final class CellSet + extends ImmutableSet> { + private CellSet() { + } + + @Override + public int size() { + return RegularImmutableTable.this.size(); + } + + @Override + public UnmodifiableIterator> iterator() { + return this.asList().iterator(); + } + + @Override + ImmutableList> createAsList() { + return new ImmutableAsList>(){ + + @Override + public Table.Cell get(int index) { + return RegularImmutableTable.this.getCell(index); + } + + @Override + ImmutableCollection> delegateCollection() { + return CellSet.this; + } + }; + } + + @Override + public boolean contains(@Nullable Object object) { + if (object instanceof Table.Cell) { + Table.Cell cell = (Table.Cell)object; + Object value = RegularImmutableTable.this.get(cell.getRowKey(), cell.getColumnKey()); + return value != null && value.equals(cell.getValue()); + } + return false; + } + + @Override + boolean isPartialView() { + return false; + } + } +} diff --git a/src/com/google/common/collect/ReverseNaturalOrdering.java b/src/com/google/common/collect/ReverseNaturalOrdering.java new file mode 100644 index 0000000..c477d97 --- /dev/null +++ b/src/com/google/common/collect/ReverseNaturalOrdering.java @@ -0,0 +1,84 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.GwtCompatible; +import com.google.common.base.Preconditions; +import com.google.common.collect.NaturalOrdering; +import com.google.common.collect.Ordering; +import java.io.Serializable; +import java.util.Iterator; + +@GwtCompatible(serializable=true) +final class ReverseNaturalOrdering +extends Ordering +implements Serializable { + static final ReverseNaturalOrdering INSTANCE = new ReverseNaturalOrdering(); + private static final long serialVersionUID = 0L; + + @Override + public int compare(Comparable left, Comparable right) { + Preconditions.checkNotNull(left); + if (left == right) { + return 0; + } + return right.compareTo(left); + } + + @Override + public Ordering reverse() { + return Ordering.natural(); + } + + @Override + public E min(E a, E b) { + return NaturalOrdering.INSTANCE.max(a, b); + } + + @Override + public E min(E a, E b, E c, E ... rest) { + return NaturalOrdering.INSTANCE.max(a, b, c, rest); + } + + @Override + public E min(Iterator iterator) { + return (E)((Comparable)NaturalOrdering.INSTANCE.max(iterator)); + } + + @Override + public E min(Iterable iterable) { + return (E)((Comparable)NaturalOrdering.INSTANCE.max(iterable)); + } + + @Override + public E max(E a, E b) { + return NaturalOrdering.INSTANCE.min(a, b); + } + + @Override + public E max(E a, E b, E c, E ... rest) { + return NaturalOrdering.INSTANCE.min(a, b, c, rest); + } + + @Override + public E max(Iterator iterator) { + return (E)((Comparable)NaturalOrdering.INSTANCE.min(iterator)); + } + + @Override + public E max(Iterable iterable) { + return (E)((Comparable)NaturalOrdering.INSTANCE.min(iterable)); + } + + private Object readResolve() { + return INSTANCE; + } + + public String toString() { + return "Ordering.natural().reverse()"; + } + + private ReverseNaturalOrdering() { + } +} diff --git a/src/com/google/common/collect/ReverseOrdering.java b/src/com/google/common/collect/ReverseOrdering.java new file mode 100644 index 0000000..19e6612 --- /dev/null +++ b/src/com/google/common/collect/ReverseOrdering.java @@ -0,0 +1,94 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.GwtCompatible; +import com.google.common.base.Preconditions; +import com.google.common.collect.Ordering; +import java.io.Serializable; +import java.util.Iterator; +import javax.annotation.Nullable; + +@GwtCompatible(serializable=true) +final class ReverseOrdering +extends Ordering +implements Serializable { + final Ordering forwardOrder; + private static final long serialVersionUID = 0L; + + ReverseOrdering(Ordering forwardOrder) { + this.forwardOrder = Preconditions.checkNotNull(forwardOrder); + } + + @Override + public int compare(T a, T b) { + return this.forwardOrder.compare(b, a); + } + + @Override + public Ordering reverse() { + return this.forwardOrder; + } + + @Override + public E min(E a, E b) { + return this.forwardOrder.max(a, b); + } + + @Override + public E min(E a, E b, E c, E ... rest) { + return this.forwardOrder.max(a, b, c, rest); + } + + @Override + public E min(Iterator iterator) { + return this.forwardOrder.max(iterator); + } + + @Override + public E min(Iterable iterable) { + return this.forwardOrder.max(iterable); + } + + @Override + public E max(E a, E b) { + return this.forwardOrder.min(a, b); + } + + @Override + public E max(E a, E b, E c, E ... rest) { + return this.forwardOrder.min(a, b, c, rest); + } + + @Override + public E max(Iterator iterator) { + return this.forwardOrder.min(iterator); + } + + @Override + public E max(Iterable iterable) { + return this.forwardOrder.min(iterable); + } + + public int hashCode() { + return -this.forwardOrder.hashCode(); + } + + @Override + public boolean equals(@Nullable Object object) { + if (object == this) { + return true; + } + if (object instanceof ReverseOrdering) { + ReverseOrdering that = (ReverseOrdering)object; + return this.forwardOrder.equals(that.forwardOrder); + } + return false; + } + + public String toString() { + String string = String.valueOf(String.valueOf(this.forwardOrder)); + return new StringBuilder(10 + string.length()).append(string).append(".reverse()").toString(); + } +} diff --git a/src/com/google/common/collect/RowSortedTable.java b/src/com/google/common/collect/RowSortedTable.java new file mode 100644 index 0000000..2df832d --- /dev/null +++ b/src/com/google/common/collect/RowSortedTable.java @@ -0,0 +1,22 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.Beta; +import com.google.common.annotations.GwtCompatible; +import com.google.common.collect.Table; +import java.util.Map; +import java.util.SortedMap; +import java.util.SortedSet; + +@GwtCompatible +@Beta +public interface RowSortedTable +extends Table { + @Override + public SortedSet rowKeySet(); + + @Override + public SortedMap> rowMap(); +} diff --git a/src/com/google/common/collect/Serialization.java b/src/com/google/common/collect/Serialization.java new file mode 100644 index 0000000..62f90f2 --- /dev/null +++ b/src/com/google/common/collect/Serialization.java @@ -0,0 +1,130 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.collect.Multimap; +import com.google.common.collect.Multiset; +import java.io.IOException; +import java.io.ObjectInputStream; +import java.io.ObjectOutputStream; +import java.lang.reflect.Field; +import java.util.Collection; +import java.util.Map; + +final class Serialization { + private Serialization() { + } + + static int readCount(ObjectInputStream stream) throws IOException { + return stream.readInt(); + } + + static void writeMap(Map map, ObjectOutputStream stream) throws IOException { + stream.writeInt(map.size()); + for (Map.Entry entry : map.entrySet()) { + stream.writeObject(entry.getKey()); + stream.writeObject(entry.getValue()); + } + } + + static void populateMap(Map map, ObjectInputStream stream) throws IOException, ClassNotFoundException { + int size = stream.readInt(); + Serialization.populateMap(map, stream, size); + } + + static void populateMap(Map map, ObjectInputStream stream, int size) throws IOException, ClassNotFoundException { + for (int i = 0; i < size; ++i) { + Object key = stream.readObject(); + Object value = stream.readObject(); + map.put(key, value); + } + } + + static void writeMultiset(Multiset multiset, ObjectOutputStream stream) throws IOException { + int entryCount = multiset.entrySet().size(); + stream.writeInt(entryCount); + for (Multiset.Entry entry : multiset.entrySet()) { + stream.writeObject(entry.getElement()); + stream.writeInt(entry.getCount()); + } + } + + static void populateMultiset(Multiset multiset, ObjectInputStream stream) throws IOException, ClassNotFoundException { + int distinctElements = stream.readInt(); + Serialization.populateMultiset(multiset, stream, distinctElements); + } + + static void populateMultiset(Multiset multiset, ObjectInputStream stream, int distinctElements) throws IOException, ClassNotFoundException { + for (int i = 0; i < distinctElements; ++i) { + Object element = stream.readObject(); + int count = stream.readInt(); + multiset.add(element, count); + } + } + + static void writeMultimap(Multimap multimap, ObjectOutputStream stream) throws IOException { + stream.writeInt(multimap.asMap().size()); + for (Map.Entry> entry : multimap.asMap().entrySet()) { + stream.writeObject(entry.getKey()); + stream.writeInt(entry.getValue().size()); + for (V value : entry.getValue()) { + stream.writeObject(value); + } + } + } + + static void populateMultimap(Multimap multimap, ObjectInputStream stream) throws IOException, ClassNotFoundException { + int distinctKeys = stream.readInt(); + Serialization.populateMultimap(multimap, stream, distinctKeys); + } + + static void populateMultimap(Multimap multimap, ObjectInputStream stream, int distinctKeys) throws IOException, ClassNotFoundException { + for (int i = 0; i < distinctKeys; ++i) { + Object key = stream.readObject(); + Collection values = multimap.get(key); + int valueCount = stream.readInt(); + for (int j = 0; j < valueCount; ++j) { + Object value = stream.readObject(); + values.add(value); + } + } + } + + static FieldSetter getFieldSetter(Class clazz, String fieldName) { + try { + Field field = clazz.getDeclaredField(fieldName); + return new FieldSetter(field); + } + catch (NoSuchFieldException e) { + throw new AssertionError((Object)e); + } + } + + static final class FieldSetter { + private final Field field; + + private FieldSetter(Field field) { + this.field = field; + field.setAccessible(true); + } + + void set(T instance, Object value) { + try { + this.field.set(instance, value); + } + catch (IllegalAccessException impossible) { + throw new AssertionError((Object)impossible); + } + } + + void set(T instance, int value) { + try { + this.field.set(instance, value); + } + catch (IllegalAccessException impossible) { + throw new AssertionError((Object)impossible); + } + } + } +} diff --git a/src/com/google/common/collect/SetMultimap.java b/src/com/google/common/collect/SetMultimap.java new file mode 100644 index 0000000..d802923 --- /dev/null +++ b/src/com/google/common/collect/SetMultimap.java @@ -0,0 +1,33 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.GwtCompatible; +import com.google.common.collect.Multimap; +import java.util.Collection; +import java.util.Map; +import java.util.Set; +import javax.annotation.Nullable; + +@GwtCompatible +public interface SetMultimap +extends Multimap { + @Override + public Set get(@Nullable K var1); + + @Override + public Set removeAll(@Nullable Object var1); + + @Override + public Set replaceValues(K var1, Iterable var2); + + @Override + public Set> entries(); + + @Override + public Map> asMap(); + + @Override + public boolean equals(@Nullable Object var1); +} diff --git a/src/com/google/common/collect/Sets.java b/src/com/google/common/collect/Sets.java new file mode 100644 index 0000000..47d55d3 --- /dev/null +++ b/src/com/google/common/collect/Sets.java @@ -0,0 +1,972 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.GwtCompatible; +import com.google.common.annotations.GwtIncompatible; +import com.google.common.base.Preconditions; +import com.google.common.base.Predicate; +import com.google.common.base.Predicates; +import com.google.common.collect.AbstractIndexedListIterator; +import com.google.common.collect.CartesianList; +import com.google.common.collect.Collections2; +import com.google.common.collect.ForwardingCollection; +import com.google.common.collect.ForwardingNavigableSet; +import com.google.common.collect.ForwardingSortedSet; +import com.google.common.collect.ImmutableCollection; +import com.google.common.collect.ImmutableEnumSet; +import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableMap; +import com.google.common.collect.ImmutableSet; +import com.google.common.collect.ImmutableSortedSet; +import com.google.common.collect.Iterables; +import com.google.common.collect.Iterators; +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import com.google.common.collect.Multiset; +import com.google.common.collect.Ordering; +import com.google.common.collect.Platform; +import com.google.common.collect.Synchronized; +import com.google.common.collect.UnmodifiableIterator; +import java.io.Serializable; +import java.util.AbstractCollection; +import java.util.AbstractSet; +import java.util.Arrays; +import java.util.Collection; +import java.util.Collections; +import java.util.Comparator; +import java.util.EnumSet; +import java.util.HashSet; +import java.util.Iterator; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Map; +import java.util.NavigableSet; +import java.util.NoSuchElementException; +import java.util.Set; +import java.util.SortedSet; +import java.util.TreeSet; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.CopyOnWriteArraySet; +import javax.annotation.Nullable; + +@GwtCompatible(emulated=true) +public final class Sets { + private Sets() { + } + + @GwtCompatible(serializable=true) + public static > ImmutableSet immutableEnumSet(E anElement, E ... otherElements) { + return ImmutableEnumSet.asImmutable(EnumSet.of(anElement, otherElements)); + } + + @GwtCompatible(serializable=true) + public static > ImmutableSet immutableEnumSet(Iterable elements) { + if (elements instanceof ImmutableEnumSet) { + return (ImmutableEnumSet)elements; + } + if (elements instanceof Collection) { + Collection collection = (Collection)elements; + if (collection.isEmpty()) { + return ImmutableSet.of(); + } + return ImmutableEnumSet.asImmutable(EnumSet.copyOf(collection)); + } + Iterator itr = elements.iterator(); + if (itr.hasNext()) { + EnumSet enumSet = EnumSet.of((Enum)itr.next()); + Iterators.addAll(enumSet, itr); + return ImmutableEnumSet.asImmutable(enumSet); + } + return ImmutableSet.of(); + } + + public static > EnumSet newEnumSet(Iterable iterable, Class elementType) { + EnumSet set = EnumSet.noneOf(elementType); + Iterables.addAll(set, iterable); + return set; + } + + public static HashSet newHashSet() { + return new HashSet(); + } + + public static HashSet newHashSet(E ... elements) { + HashSet set = Sets.newHashSetWithExpectedSize(elements.length); + Collections.addAll(set, elements); + return set; + } + + public static HashSet newHashSetWithExpectedSize(int expectedSize) { + return new HashSet(Maps.capacity(expectedSize)); + } + + public static HashSet newHashSet(Iterable elements) { + return elements instanceof Collection ? new HashSet(Collections2.cast(elements)) : Sets.newHashSet(elements.iterator()); + } + + public static HashSet newHashSet(Iterator elements) { + HashSet set = Sets.newHashSet(); + Iterators.addAll(set, elements); + return set; + } + + public static Set newConcurrentHashSet() { + return Sets.newSetFromMap(new ConcurrentHashMap()); + } + + public static Set newConcurrentHashSet(Iterable elements) { + Set set = Sets.newConcurrentHashSet(); + Iterables.addAll(set, elements); + return set; + } + + public static LinkedHashSet newLinkedHashSet() { + return new LinkedHashSet(); + } + + public static LinkedHashSet newLinkedHashSetWithExpectedSize(int expectedSize) { + return new LinkedHashSet(Maps.capacity(expectedSize)); + } + + public static LinkedHashSet newLinkedHashSet(Iterable elements) { + if (elements instanceof Collection) { + return new LinkedHashSet(Collections2.cast(elements)); + } + LinkedHashSet set = Sets.newLinkedHashSet(); + Iterables.addAll(set, elements); + return set; + } + + public static TreeSet newTreeSet() { + return new TreeSet(); + } + + public static TreeSet newTreeSet(Iterable elements) { + TreeSet set = Sets.newTreeSet(); + Iterables.addAll(set, elements); + return set; + } + + public static TreeSet newTreeSet(Comparator comparator) { + return new TreeSet(Preconditions.checkNotNull(comparator)); + } + + public static Set newIdentityHashSet() { + return Sets.newSetFromMap(Maps.newIdentityHashMap()); + } + + @GwtIncompatible(value="CopyOnWriteArraySet") + public static CopyOnWriteArraySet newCopyOnWriteArraySet() { + return new CopyOnWriteArraySet(); + } + + @GwtIncompatible(value="CopyOnWriteArraySet") + public static CopyOnWriteArraySet newCopyOnWriteArraySet(Iterable elements) { + Collection elementsCollection = elements instanceof Collection ? Collections2.cast(elements) : Lists.newArrayList(elements); + return new CopyOnWriteArraySet(elementsCollection); + } + + public static > EnumSet complementOf(Collection collection) { + if (collection instanceof EnumSet) { + return EnumSet.complementOf((EnumSet)collection); + } + Preconditions.checkArgument(!collection.isEmpty(), "collection is empty; use the other version of this method"); + Class type = ((Enum)collection.iterator().next()).getDeclaringClass(); + return Sets.makeComplementByHand(collection, type); + } + + public static > EnumSet complementOf(Collection collection, Class type) { + Preconditions.checkNotNull(collection); + return collection instanceof EnumSet ? EnumSet.complementOf((EnumSet)collection) : Sets.makeComplementByHand(collection, type); + } + + private static > EnumSet makeComplementByHand(Collection collection, Class type) { + EnumSet result = EnumSet.allOf(type); + result.removeAll(collection); + return result; + } + + public static Set newSetFromMap(Map map) { + return Platform.newSetFromMap(map); + } + + public static SetView union(final Set set1, final Set set2) { + Preconditions.checkNotNull(set1, "set1"); + Preconditions.checkNotNull(set2, "set2"); + final SetView set2minus1 = Sets.difference(set2, set1); + return new SetView(){ + + @Override + public int size() { + return set1.size() + set2minus1.size(); + } + + @Override + public boolean isEmpty() { + return set1.isEmpty() && set2.isEmpty(); + } + + @Override + public Iterator iterator() { + return Iterators.unmodifiableIterator(Iterators.concat(set1.iterator(), set2minus1.iterator())); + } + + @Override + public boolean contains(Object object) { + return set1.contains(object) || set2.contains(object); + } + + @Override + public > S copyInto(S set) { + set.addAll(set1); + set.addAll(set2); + return set; + } + + @Override + public ImmutableSet immutableCopy() { + return ((ImmutableSet.Builder)((ImmutableSet.Builder)new ImmutableSet.Builder().addAll((Iterable)set1)).addAll((Iterable)set2)).build(); + } + }; + } + + public static SetView intersection(final Set set1, final Set set2) { + Preconditions.checkNotNull(set1, "set1"); + Preconditions.checkNotNull(set2, "set2"); + final Predicate inSet2 = Predicates.in(set2); + return new SetView(){ + + @Override + public Iterator iterator() { + return Iterators.filter(set1.iterator(), inSet2); + } + + @Override + public int size() { + return Iterators.size(this.iterator()); + } + + @Override + public boolean isEmpty() { + return !this.iterator().hasNext(); + } + + @Override + public boolean contains(Object object) { + return set1.contains(object) && set2.contains(object); + } + + @Override + public boolean containsAll(Collection collection) { + return set1.containsAll(collection) && set2.containsAll(collection); + } + }; + } + + public static SetView difference(final Set set1, final Set set2) { + Preconditions.checkNotNull(set1, "set1"); + Preconditions.checkNotNull(set2, "set2"); + final Predicate notInSet2 = Predicates.not(Predicates.in(set2)); + return new SetView(){ + + @Override + public Iterator iterator() { + return Iterators.filter(set1.iterator(), notInSet2); + } + + @Override + public int size() { + return Iterators.size(this.iterator()); + } + + @Override + public boolean isEmpty() { + return set2.containsAll(set1); + } + + @Override + public boolean contains(Object element) { + return set1.contains(element) && !set2.contains(element); + } + }; + } + + public static SetView symmetricDifference(Set set1, Set set2) { + Preconditions.checkNotNull(set1, "set1"); + Preconditions.checkNotNull(set2, "set2"); + return Sets.difference(Sets.union(set1, set2), Sets.intersection(set1, set2)); + } + + public static Set filter(Set unfiltered, Predicate predicate) { + if (unfiltered instanceof SortedSet) { + return Sets.filter((SortedSet)unfiltered, predicate); + } + if (unfiltered instanceof FilteredSet) { + FilteredSet filtered = (FilteredSet)unfiltered; + Predicate combinedPredicate = Predicates.and(filtered.predicate, predicate); + return new FilteredSet((Set)filtered.unfiltered, combinedPredicate); + } + return new FilteredSet(Preconditions.checkNotNull(unfiltered), Preconditions.checkNotNull(predicate)); + } + + public static SortedSet filter(SortedSet unfiltered, Predicate predicate) { + return Platform.setsFilterSortedSet(unfiltered, predicate); + } + + static SortedSet filterSortedIgnoreNavigable(SortedSet unfiltered, Predicate predicate) { + if (unfiltered instanceof FilteredSet) { + FilteredSet filtered = (FilteredSet)((Object)unfiltered); + Predicate combinedPredicate = Predicates.and(filtered.predicate, predicate); + return new FilteredSortedSet((SortedSet)filtered.unfiltered, combinedPredicate); + } + return new FilteredSortedSet(Preconditions.checkNotNull(unfiltered), Preconditions.checkNotNull(predicate)); + } + + @GwtIncompatible(value="NavigableSet") + public static NavigableSet filter(NavigableSet unfiltered, Predicate predicate) { + if (unfiltered instanceof FilteredSet) { + FilteredSet filtered = (FilteredSet)((Object)unfiltered); + Predicate combinedPredicate = Predicates.and(filtered.predicate, predicate); + return new FilteredNavigableSet((NavigableSet)filtered.unfiltered, combinedPredicate); + } + return new FilteredNavigableSet(Preconditions.checkNotNull(unfiltered), Preconditions.checkNotNull(predicate)); + } + + public static Set> cartesianProduct(List> sets) { + return CartesianSet.create(sets); + } + + public static Set> cartesianProduct(Set ... sets) { + return Sets.cartesianProduct(Arrays.asList(sets)); + } + + @GwtCompatible(serializable=false) + public static Set> powerSet(Set set) { + return new PowerSet(set); + } + + static int hashCodeImpl(Set s) { + int hashCode = 0; + for (Object o : s) { + hashCode += o != null ? o.hashCode() : 0; + hashCode = ~(~hashCode); + } + return hashCode; + } + + static boolean equalsImpl(Set s, @Nullable Object object) { + if (s == object) { + return true; + } + if (object instanceof Set) { + Set o = (Set)object; + try { + return s.size() == o.size() && s.containsAll(o); + } + catch (NullPointerException ignored) { + return false; + } + catch (ClassCastException ignored) { + return false; + } + } + return false; + } + + @GwtIncompatible(value="NavigableSet") + public static NavigableSet unmodifiableNavigableSet(NavigableSet set) { + if (set instanceof ImmutableSortedSet || set instanceof UnmodifiableNavigableSet) { + return set; + } + return new UnmodifiableNavigableSet(set); + } + + @GwtIncompatible(value="NavigableSet") + public static NavigableSet synchronizedNavigableSet(NavigableSet navigableSet) { + return Synchronized.navigableSet(navigableSet); + } + + static boolean removeAllImpl(Set set, Iterator iterator) { + boolean changed = false; + while (iterator.hasNext()) { + changed |= set.remove(iterator.next()); + } + return changed; + } + + static boolean removeAllImpl(Set set, Collection collection) { + Preconditions.checkNotNull(collection); + if (collection instanceof Multiset) { + collection = ((Multiset)collection).elementSet(); + } + if (collection instanceof Set && collection.size() > set.size()) { + return Iterators.removeAll(set.iterator(), collection); + } + return Sets.removeAllImpl(set, collection.iterator()); + } + + @GwtIncompatible(value="NavigableSet") + static class DescendingSet + extends ForwardingNavigableSet { + private final NavigableSet forward; + + DescendingSet(NavigableSet forward) { + this.forward = forward; + } + + @Override + protected NavigableSet delegate() { + return this.forward; + } + + @Override + public E lower(E e) { + return this.forward.higher(e); + } + + @Override + public E floor(E e) { + return this.forward.ceiling(e); + } + + @Override + public E ceiling(E e) { + return this.forward.floor(e); + } + + @Override + public E higher(E e) { + return this.forward.lower(e); + } + + @Override + public E pollFirst() { + return this.forward.pollLast(); + } + + @Override + public E pollLast() { + return this.forward.pollFirst(); + } + + @Override + public NavigableSet descendingSet() { + return this.forward; + } + + @Override + public Iterator descendingIterator() { + return this.forward.iterator(); + } + + @Override + public NavigableSet subSet(E fromElement, boolean fromInclusive, E toElement, boolean toInclusive) { + return this.forward.subSet(toElement, toInclusive, fromElement, fromInclusive).descendingSet(); + } + + @Override + public NavigableSet headSet(E toElement, boolean inclusive) { + return this.forward.tailSet(toElement, inclusive).descendingSet(); + } + + @Override + public NavigableSet tailSet(E fromElement, boolean inclusive) { + return this.forward.headSet(fromElement, inclusive).descendingSet(); + } + + @Override + public Comparator comparator() { + Comparator forwardComparator = this.forward.comparator(); + if (forwardComparator == null) { + return Ordering.natural().reverse(); + } + return DescendingSet.reverse(forwardComparator); + } + + private static Ordering reverse(Comparator forward) { + return Ordering.from(forward).reverse(); + } + + @Override + public E first() { + return this.forward.last(); + } + + @Override + public SortedSet headSet(E toElement) { + return this.standardHeadSet(toElement); + } + + @Override + public E last() { + return this.forward.first(); + } + + @Override + public SortedSet subSet(E fromElement, E toElement) { + return this.standardSubSet(fromElement, toElement); + } + + @Override + public SortedSet tailSet(E fromElement) { + return this.standardTailSet(fromElement); + } + + @Override + public Iterator iterator() { + return this.forward.descendingIterator(); + } + + @Override + public Object[] toArray() { + return this.standardToArray(); + } + + @Override + public T[] toArray(T[] array) { + return this.standardToArray(array); + } + + @Override + public String toString() { + return this.standardToString(); + } + } + + @GwtIncompatible(value="NavigableSet") + static final class UnmodifiableNavigableSet + extends ForwardingSortedSet + implements NavigableSet, + Serializable { + private final NavigableSet delegate; + private transient UnmodifiableNavigableSet descendingSet; + private static final long serialVersionUID = 0L; + + UnmodifiableNavigableSet(NavigableSet delegate) { + this.delegate = Preconditions.checkNotNull(delegate); + } + + @Override + protected SortedSet delegate() { + return Collections.unmodifiableSortedSet(this.delegate); + } + + @Override + public E lower(E e) { + return this.delegate.lower(e); + } + + @Override + public E floor(E e) { + return this.delegate.floor(e); + } + + @Override + public E ceiling(E e) { + return this.delegate.ceiling(e); + } + + @Override + public E higher(E e) { + return this.delegate.higher(e); + } + + @Override + public E pollFirst() { + throw new UnsupportedOperationException(); + } + + @Override + public E pollLast() { + throw new UnsupportedOperationException(); + } + + @Override + public NavigableSet descendingSet() { + UnmodifiableNavigableSet result = this.descendingSet; + if (result == null) { + result = this.descendingSet = new UnmodifiableNavigableSet(this.delegate.descendingSet()); + result.descendingSet = this; + } + return result; + } + + @Override + public Iterator descendingIterator() { + return Iterators.unmodifiableIterator(this.delegate.descendingIterator()); + } + + @Override + public NavigableSet subSet(E fromElement, boolean fromInclusive, E toElement, boolean toInclusive) { + return Sets.unmodifiableNavigableSet(this.delegate.subSet(fromElement, fromInclusive, toElement, toInclusive)); + } + + @Override + public NavigableSet headSet(E toElement, boolean inclusive) { + return Sets.unmodifiableNavigableSet(this.delegate.headSet(toElement, inclusive)); + } + + @Override + public NavigableSet tailSet(E fromElement, boolean inclusive) { + return Sets.unmodifiableNavigableSet(this.delegate.tailSet(fromElement, inclusive)); + } + } + + private static final class PowerSet + extends AbstractSet> { + final ImmutableMap inputSet; + + PowerSet(Set input) { + ImmutableMap.Builder builder = ImmutableMap.builder(); + int i = 0; + for (E e : Preconditions.checkNotNull(input)) { + builder.put(e, i++); + } + this.inputSet = builder.build(); + Preconditions.checkArgument(this.inputSet.size() <= 30, "Too many elements to create power set: %s > 30", this.inputSet.size()); + } + + @Override + public int size() { + return 1 << this.inputSet.size(); + } + + @Override + public boolean isEmpty() { + return false; + } + + @Override + public Iterator> iterator() { + return new AbstractIndexedListIterator>(this.size()){ + + @Override + protected Set get(int setBits) { + return new SubSet(PowerSet.this.inputSet, setBits); + } + }; + } + + @Override + public boolean contains(@Nullable Object obj) { + if (obj instanceof Set) { + Set set = (Set)obj; + return ((AbstractCollection)((Object)this.inputSet.keySet())).containsAll(set); + } + return false; + } + + @Override + public boolean equals(@Nullable Object obj) { + if (obj instanceof PowerSet) { + PowerSet that = (PowerSet)obj; + return this.inputSet.equals(that.inputSet); + } + return super.equals(obj); + } + + @Override + public int hashCode() { + return ((ImmutableSet)this.inputSet.keySet()).hashCode() << this.inputSet.size() - 1; + } + + @Override + public String toString() { + String string = String.valueOf(String.valueOf(this.inputSet)); + return new StringBuilder(10 + string.length()).append("powerSet(").append(string).append(")").toString(); + } + } + + private static final class SubSet + extends AbstractSet { + private final ImmutableMap inputSet; + private final int mask; + + SubSet(ImmutableMap inputSet, int mask) { + this.inputSet = inputSet; + this.mask = mask; + } + + @Override + public Iterator iterator() { + return new UnmodifiableIterator(){ + final ImmutableList elements; + int remainingSetBits; + { + this.elements = ((ImmutableCollection)((Object)SubSet.this.inputSet.keySet())).asList(); + this.remainingSetBits = SubSet.this.mask; + } + + @Override + public boolean hasNext() { + return this.remainingSetBits != 0; + } + + @Override + public E next() { + int index = Integer.numberOfTrailingZeros(this.remainingSetBits); + if (index == 32) { + throw new NoSuchElementException(); + } + this.remainingSetBits &= ~(1 << index); + return this.elements.get(index); + } + }; + } + + @Override + public int size() { + return Integer.bitCount(this.mask); + } + + @Override + public boolean contains(@Nullable Object o) { + Integer index = this.inputSet.get(o); + return index != null && (this.mask & 1 << index) != 0; + } + } + + private static final class CartesianSet + extends ForwardingCollection> + implements Set> { + private final transient ImmutableList> axes; + private final transient CartesianList delegate; + + static Set> create(List> sets) { + ImmutableList.Builder axesBuilder = new ImmutableList.Builder(sets.size()); + for (Set set : sets) { + ImmutableSet copy = ImmutableSet.copyOf(set); + if (copy.isEmpty()) { + return ImmutableSet.of(); + } + axesBuilder.add(copy); + } + ImmutableCollection axes = axesBuilder.build(); + ImmutableList immutableList = new ImmutableList>((ImmutableList)axes){ + final /* synthetic */ ImmutableList val$axes; + { + this.val$axes = immutableList; + } + + @Override + public int size() { + return this.val$axes.size(); + } + + @Override + public List get(int index) { + return ((ImmutableSet)this.val$axes.get(index)).asList(); + } + + @Override + boolean isPartialView() { + return true; + } + }; + return new CartesianSet(axes, new CartesianList(immutableList)); + } + + private CartesianSet(ImmutableList> axes, CartesianList delegate) { + this.axes = axes; + this.delegate = delegate; + } + + @Override + protected Collection> delegate() { + return this.delegate; + } + + @Override + public boolean equals(@Nullable Object object) { + if (object instanceof CartesianSet) { + CartesianSet that = (CartesianSet)object; + return this.axes.equals(that.axes); + } + return super.equals(object); + } + + @Override + public int hashCode() { + int adjust = this.size() - 1; + for (int i = 0; i < this.axes.size(); ++i) { + adjust *= 31; + adjust = ~(~adjust); + } + int hash = 1; + for (Set set : this.axes) { + hash = 31 * hash + this.size() / set.size() * set.hashCode(); + hash = ~(~hash); + } + return ~(~(hash += adjust)); + } + } + + @GwtIncompatible(value="NavigableSet") + private static class FilteredNavigableSet + extends FilteredSortedSet + implements NavigableSet { + FilteredNavigableSet(NavigableSet unfiltered, Predicate predicate) { + super(unfiltered, predicate); + } + + NavigableSet unfiltered() { + return (NavigableSet)this.unfiltered; + } + + @Override + @Nullable + public E lower(E e) { + return Iterators.getNext(this.headSet(e, false).descendingIterator(), null); + } + + @Override + @Nullable + public E floor(E e) { + return Iterators.getNext(this.headSet(e, true).descendingIterator(), null); + } + + @Override + public E ceiling(E e) { + return Iterables.getFirst(this.tailSet(e, true), null); + } + + @Override + public E higher(E e) { + return Iterables.getFirst(this.tailSet(e, false), null); + } + + @Override + public E pollFirst() { + return Iterables.removeFirstMatching(this.unfiltered(), this.predicate); + } + + @Override + public E pollLast() { + return Iterables.removeFirstMatching(this.unfiltered().descendingSet(), this.predicate); + } + + @Override + public NavigableSet descendingSet() { + return Sets.filter(this.unfiltered().descendingSet(), this.predicate); + } + + @Override + public Iterator descendingIterator() { + return Iterators.filter(this.unfiltered().descendingIterator(), this.predicate); + } + + @Override + public E last() { + return this.descendingIterator().next(); + } + + @Override + public NavigableSet subSet(E fromElement, boolean fromInclusive, E toElement, boolean toInclusive) { + return Sets.filter(this.unfiltered().subSet(fromElement, fromInclusive, toElement, toInclusive), this.predicate); + } + + @Override + public NavigableSet headSet(E toElement, boolean inclusive) { + return Sets.filter(this.unfiltered().headSet(toElement, inclusive), this.predicate); + } + + @Override + public NavigableSet tailSet(E fromElement, boolean inclusive) { + return Sets.filter(this.unfiltered().tailSet(fromElement, inclusive), this.predicate); + } + } + + private static class FilteredSortedSet + extends FilteredSet + implements SortedSet { + FilteredSortedSet(SortedSet unfiltered, Predicate predicate) { + super(unfiltered, predicate); + } + + @Override + public Comparator comparator() { + return ((SortedSet)this.unfiltered).comparator(); + } + + @Override + public SortedSet subSet(E fromElement, E toElement) { + return new FilteredSortedSet(((SortedSet)this.unfiltered).subSet(fromElement, toElement), this.predicate); + } + + @Override + public SortedSet headSet(E toElement) { + return new FilteredSortedSet(((SortedSet)this.unfiltered).headSet(toElement), this.predicate); + } + + @Override + public SortedSet tailSet(E fromElement) { + return new FilteredSortedSet(((SortedSet)this.unfiltered).tailSet(fromElement), this.predicate); + } + + @Override + public E first() { + return this.iterator().next(); + } + + @Override + public E last() { + SortedSet sortedUnfiltered = (SortedSet)this.unfiltered; + Object element; + while (!this.predicate.apply(element = sortedUnfiltered.last())) { + sortedUnfiltered = sortedUnfiltered.headSet(element); + } + return element; + } + } + + private static class FilteredSet + extends Collections2.FilteredCollection + implements Set { + FilteredSet(Set unfiltered, Predicate predicate) { + super(unfiltered, predicate); + } + + @Override + public boolean equals(@Nullable Object object) { + return Sets.equalsImpl(this, object); + } + + @Override + public int hashCode() { + return Sets.hashCodeImpl(this); + } + } + + public static abstract class SetView + extends AbstractSet { + private SetView() { + } + + public ImmutableSet immutableCopy() { + return ImmutableSet.copyOf(this); + } + + public > S copyInto(S set) { + set.addAll(this); + return set; + } + } + + static abstract class ImprovedAbstractSet + extends AbstractSet { + ImprovedAbstractSet() { + } + + @Override + public boolean removeAll(Collection c) { + return Sets.removeAllImpl(this, c); + } + + @Override + public boolean retainAll(Collection c) { + return super.retainAll(Preconditions.checkNotNull(c)); + } + } +} diff --git a/src/com/google/common/collect/SingletonImmutableBiMap.java b/src/com/google/common/collect/SingletonImmutableBiMap.java new file mode 100644 index 0000000..96a1472 --- /dev/null +++ b/src/com/google/common/collect/SingletonImmutableBiMap.java @@ -0,0 +1,81 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.GwtCompatible; +import com.google.common.collect.CollectPreconditions; +import com.google.common.collect.ImmutableBiMap; +import com.google.common.collect.ImmutableSet; +import com.google.common.collect.Maps; +import java.util.Map; +import javax.annotation.Nullable; + +@GwtCompatible(serializable=true, emulated=true) +final class SingletonImmutableBiMap +extends ImmutableBiMap { + final transient K singleKey; + final transient V singleValue; + transient ImmutableBiMap inverse; + + SingletonImmutableBiMap(K singleKey, V singleValue) { + CollectPreconditions.checkEntryNotNull(singleKey, singleValue); + this.singleKey = singleKey; + this.singleValue = singleValue; + } + + private SingletonImmutableBiMap(K singleKey, V singleValue, ImmutableBiMap inverse) { + this.singleKey = singleKey; + this.singleValue = singleValue; + this.inverse = inverse; + } + + SingletonImmutableBiMap(Map.Entry entry) { + this(entry.getKey(), entry.getValue()); + } + + @Override + public V get(@Nullable Object key) { + return this.singleKey.equals(key) ? (V)this.singleValue : null; + } + + @Override + public int size() { + return 1; + } + + @Override + public boolean containsKey(@Nullable Object key) { + return this.singleKey.equals(key); + } + + @Override + public boolean containsValue(@Nullable Object value) { + return this.singleValue.equals(value); + } + + @Override + boolean isPartialView() { + return false; + } + + @Override + ImmutableSet> createEntrySet() { + return ImmutableSet.of(Maps.immutableEntry(this.singleKey, this.singleValue)); + } + + @Override + ImmutableSet createKeySet() { + return ImmutableSet.of(this.singleKey); + } + + @Override + public ImmutableBiMap inverse() { + ImmutableBiMap result = this.inverse; + if (result == null) { + this.inverse = new SingletonImmutableBiMap(this.singleValue, this.singleKey, this); + return this.inverse; + } + return result; + } +} diff --git a/src/com/google/common/collect/SingletonImmutableList.java b/src/com/google/common/collect/SingletonImmutableList.java new file mode 100644 index 0000000..47dc98f --- /dev/null +++ b/src/com/google/common/collect/SingletonImmutableList.java @@ -0,0 +1,103 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.GwtCompatible; +import com.google.common.base.Preconditions; +import com.google.common.collect.ImmutableList; +import com.google.common.collect.Iterators; +import com.google.common.collect.UnmodifiableIterator; +import java.util.List; +import javax.annotation.Nullable; + +@GwtCompatible(serializable=true, emulated=true) +final class SingletonImmutableList +extends ImmutableList { + final transient E element; + + SingletonImmutableList(E element) { + this.element = Preconditions.checkNotNull(element); + } + + @Override + public E get(int index) { + Preconditions.checkElementIndex(index, 1); + return this.element; + } + + @Override + public int indexOf(@Nullable Object object) { + return this.element.equals(object) ? 0 : -1; + } + + @Override + public UnmodifiableIterator iterator() { + return Iterators.singletonIterator(this.element); + } + + @Override + public int lastIndexOf(@Nullable Object object) { + return this.indexOf(object); + } + + @Override + public int size() { + return 1; + } + + @Override + public ImmutableList subList(int fromIndex, int toIndex) { + Preconditions.checkPositionIndexes(fromIndex, toIndex, 1); + return fromIndex == toIndex ? ImmutableList.of() : this; + } + + @Override + public ImmutableList reverse() { + return this; + } + + @Override + public boolean contains(@Nullable Object object) { + return this.element.equals(object); + } + + @Override + public boolean equals(@Nullable Object object) { + if (object == this) { + return true; + } + if (object instanceof List) { + List that = (List)object; + return that.size() == 1 && this.element.equals(that.get(0)); + } + return false; + } + + @Override + public int hashCode() { + return 31 + this.element.hashCode(); + } + + @Override + public String toString() { + String elementToString = this.element.toString(); + return new StringBuilder(elementToString.length() + 2).append('[').append(elementToString).append(']').toString(); + } + + @Override + public boolean isEmpty() { + return false; + } + + @Override + boolean isPartialView() { + return false; + } + + @Override + int copyIntoArray(Object[] dst, int offset) { + dst[offset] = this.element; + return offset + 1; + } +} diff --git a/src/com/google/common/collect/SingletonImmutableSet.java b/src/com/google/common/collect/SingletonImmutableSet.java new file mode 100644 index 0000000..e2c3836 --- /dev/null +++ b/src/com/google/common/collect/SingletonImmutableSet.java @@ -0,0 +1,91 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.GwtCompatible; +import com.google.common.base.Preconditions; +import com.google.common.collect.ImmutableSet; +import com.google.common.collect.Iterators; +import com.google.common.collect.UnmodifiableIterator; +import java.util.Set; +import javax.annotation.Nullable; + +@GwtCompatible(serializable=true, emulated=true) +final class SingletonImmutableSet +extends ImmutableSet { + final transient E element; + private transient int cachedHashCode; + + SingletonImmutableSet(E element) { + this.element = Preconditions.checkNotNull(element); + } + + SingletonImmutableSet(E element, int hashCode) { + this.element = element; + this.cachedHashCode = hashCode; + } + + @Override + public int size() { + return 1; + } + + @Override + public boolean isEmpty() { + return false; + } + + @Override + public boolean contains(Object target) { + return this.element.equals(target); + } + + @Override + public UnmodifiableIterator iterator() { + return Iterators.singletonIterator(this.element); + } + + @Override + boolean isPartialView() { + return false; + } + + @Override + int copyIntoArray(Object[] dst, int offset) { + dst[offset] = this.element; + return offset + 1; + } + + @Override + public boolean equals(@Nullable Object object) { + if (object == this) { + return true; + } + if (object instanceof Set) { + Set that = (Set)object; + return that.size() == 1 && this.element.equals(that.iterator().next()); + } + return false; + } + + @Override + public final int hashCode() { + int code = this.cachedHashCode; + if (code == 0) { + this.cachedHashCode = code = this.element.hashCode(); + } + return code; + } + + @Override + boolean isHashCodeFast() { + return this.cachedHashCode != 0; + } + + @Override + public String toString() { + String elementToString = this.element.toString(); + return new StringBuilder(elementToString.length() + 2).append('[').append(elementToString).append(']').toString(); + } +} diff --git a/src/com/google/common/collect/SingletonImmutableTable.java b/src/com/google/common/collect/SingletonImmutableTable.java new file mode 100644 index 0000000..05f51fd --- /dev/null +++ b/src/com/google/common/collect/SingletonImmutableTable.java @@ -0,0 +1,62 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.GwtCompatible; +import com.google.common.base.Preconditions; +import com.google.common.collect.ImmutableCollection; +import com.google.common.collect.ImmutableMap; +import com.google.common.collect.ImmutableSet; +import com.google.common.collect.ImmutableTable; +import com.google.common.collect.Table; +import java.util.Map; + +@GwtCompatible +class SingletonImmutableTable +extends ImmutableTable { + final R singleRowKey; + final C singleColumnKey; + final V singleValue; + + SingletonImmutableTable(R rowKey, C columnKey, V value) { + this.singleRowKey = Preconditions.checkNotNull(rowKey); + this.singleColumnKey = Preconditions.checkNotNull(columnKey); + this.singleValue = Preconditions.checkNotNull(value); + } + + SingletonImmutableTable(Table.Cell cell) { + this(cell.getRowKey(), cell.getColumnKey(), cell.getValue()); + } + + @Override + public ImmutableMap column(C columnKey) { + Preconditions.checkNotNull(columnKey); + return this.containsColumn(columnKey) ? ImmutableMap.of(this.singleRowKey, this.singleValue) : ImmutableMap.of(); + } + + @Override + public ImmutableMap> columnMap() { + return ImmutableMap.of(this.singleColumnKey, ImmutableMap.of(this.singleRowKey, this.singleValue)); + } + + @Override + public ImmutableMap> rowMap() { + return ImmutableMap.of(this.singleRowKey, ImmutableMap.of(this.singleColumnKey, this.singleValue)); + } + + @Override + public int size() { + return 1; + } + + @Override + ImmutableSet> createCellSet() { + return ImmutableSet.of(SingletonImmutableTable.cellOf(this.singleRowKey, this.singleColumnKey, this.singleValue)); + } + + @Override + ImmutableCollection createValues() { + return ImmutableSet.of(this.singleValue); + } +} diff --git a/src/com/google/common/collect/SortedIterable.java b/src/com/google/common/collect/SortedIterable.java new file mode 100644 index 0000000..ca065b1 --- /dev/null +++ b/src/com/google/common/collect/SortedIterable.java @@ -0,0 +1,17 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.GwtCompatible; +import java.util.Comparator; +import java.util.Iterator; + +@GwtCompatible +interface SortedIterable +extends Iterable { + public Comparator comparator(); + + @Override + public Iterator iterator(); +} diff --git a/src/com/google/common/collect/SortedIterables.java b/src/com/google/common/collect/SortedIterables.java new file mode 100644 index 0000000..bc9adcb --- /dev/null +++ b/src/com/google/common/collect/SortedIterables.java @@ -0,0 +1,39 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.GwtCompatible; +import com.google.common.base.Preconditions; +import com.google.common.collect.Ordering; +import com.google.common.collect.SortedIterable; +import java.util.Comparator; +import java.util.SortedSet; + +@GwtCompatible +final class SortedIterables { + private SortedIterables() { + } + + public static boolean hasSameComparator(Comparator comparator, Iterable elements) { + Comparator comparator2; + Preconditions.checkNotNull(comparator); + Preconditions.checkNotNull(elements); + if (elements instanceof SortedSet) { + comparator2 = SortedIterables.comparator((SortedSet)elements); + } else if (elements instanceof SortedIterable) { + comparator2 = ((SortedIterable)elements).comparator(); + } else { + return false; + } + return comparator.equals(comparator2); + } + + public static Comparator comparator(SortedSet sortedSet) { + Comparator result = sortedSet.comparator(); + if (result == null) { + result = Ordering.natural(); + } + return result; + } +} diff --git a/src/com/google/common/collect/SortedLists.java b/src/com/google/common/collect/SortedLists.java new file mode 100644 index 0000000..e1fe328 --- /dev/null +++ b/src/com/google/common/collect/SortedLists.java @@ -0,0 +1,157 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.Beta; +import com.google.common.annotations.GwtCompatible; +import com.google.common.base.Function; +import com.google.common.base.Preconditions; +import com.google.common.collect.Lists; +import com.google.common.collect.Ordering; +import java.util.Comparator; +import java.util.List; +import java.util.RandomAccess; +import javax.annotation.Nullable; + +@GwtCompatible +@Beta +final class SortedLists { + private SortedLists() { + } + + public static int binarySearch(List list, E e, KeyPresentBehavior presentBehavior, KeyAbsentBehavior absentBehavior) { + Preconditions.checkNotNull(e); + return SortedLists.binarySearch(list, Preconditions.checkNotNull(e), Ordering.natural(), presentBehavior, absentBehavior); + } + + public static int binarySearch(List list, Function keyFunction, @Nullable K key, KeyPresentBehavior presentBehavior, KeyAbsentBehavior absentBehavior) { + return SortedLists.binarySearch(list, keyFunction, key, Ordering.natural(), presentBehavior, absentBehavior); + } + + public static int binarySearch(List list, Function keyFunction, @Nullable K key, Comparator keyComparator, KeyPresentBehavior presentBehavior, KeyAbsentBehavior absentBehavior) { + return SortedLists.binarySearch(Lists.transform(list, keyFunction), key, keyComparator, presentBehavior, absentBehavior); + } + + public static int binarySearch(List list, @Nullable E key, Comparator comparator, KeyPresentBehavior presentBehavior, KeyAbsentBehavior absentBehavior) { + Preconditions.checkNotNull(comparator); + Preconditions.checkNotNull(list); + Preconditions.checkNotNull(presentBehavior); + Preconditions.checkNotNull(absentBehavior); + if (!(list instanceof RandomAccess)) { + list = Lists.newArrayList(list); + } + int lower = 0; + int upper = list.size() - 1; + while (lower <= upper) { + int middle = lower + upper >>> 1; + int c = comparator.compare(key, list.get(middle)); + if (c < 0) { + upper = middle - 1; + continue; + } + if (c > 0) { + lower = middle + 1; + continue; + } + return lower + presentBehavior.resultIndex(comparator, key, list.subList(lower, upper + 1), middle - lower); + } + return absentBehavior.resultIndex(lower); + } + + public static enum KeyAbsentBehavior { + NEXT_LOWER{ + + @Override + int resultIndex(int higherIndex) { + return higherIndex - 1; + } + } + , + NEXT_HIGHER{ + + @Override + public int resultIndex(int higherIndex) { + return higherIndex; + } + } + , + INVERTED_INSERTION_INDEX{ + + @Override + public int resultIndex(int higherIndex) { + return ~higherIndex; + } + }; + + + abstract int resultIndex(int var1); + } + + public static enum KeyPresentBehavior { + ANY_PRESENT{ + + @Override + int resultIndex(Comparator comparator, E key, List list, int foundIndex) { + return foundIndex; + } + } + , + LAST_PRESENT{ + + @Override + int resultIndex(Comparator comparator, E key, List list, int foundIndex) { + int lower = foundIndex; + int upper = list.size() - 1; + while (lower < upper) { + int middle = lower + upper + 1 >>> 1; + int c = comparator.compare(list.get(middle), key); + if (c > 0) { + upper = middle - 1; + continue; + } + lower = middle; + } + return lower; + } + } + , + FIRST_PRESENT{ + + @Override + int resultIndex(Comparator comparator, E key, List list, int foundIndex) { + int lower = 0; + int upper = foundIndex; + while (lower < upper) { + int middle = lower + upper >>> 1; + int c = comparator.compare(list.get(middle), key); + if (c < 0) { + lower = middle + 1; + continue; + } + upper = middle; + } + return lower; + } + } + , + FIRST_AFTER{ + + @Override + public int resultIndex(Comparator comparator, E key, List list, int foundIndex) { + return LAST_PRESENT.resultIndex(comparator, key, list, foundIndex) + 1; + } + } + , + LAST_BEFORE{ + + @Override + public int resultIndex(Comparator comparator, E key, List list, int foundIndex) { + return FIRST_PRESENT.resultIndex(comparator, key, list, foundIndex) - 1; + } + }; + + + abstract int resultIndex(Comparator var1, E var2, List var3, int var4); + } +} diff --git a/src/com/google/common/collect/SortedMapDifference.java b/src/com/google/common/collect/SortedMapDifference.java new file mode 100644 index 0000000..5935a5e --- /dev/null +++ b/src/com/google/common/collect/SortedMapDifference.java @@ -0,0 +1,24 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.GwtCompatible; +import com.google.common.collect.MapDifference; +import java.util.SortedMap; + +@GwtCompatible +public interface SortedMapDifference +extends MapDifference { + @Override + public SortedMap entriesOnlyOnLeft(); + + @Override + public SortedMap entriesOnlyOnRight(); + + @Override + public SortedMap entriesInCommon(); + + @Override + public SortedMap> entriesDiffering(); +} diff --git a/src/com/google/common/collect/SortedMultiset.java b/src/com/google/common/collect/SortedMultiset.java new file mode 100644 index 0000000..dee92ea --- /dev/null +++ b/src/com/google/common/collect/SortedMultiset.java @@ -0,0 +1,49 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.Beta; +import com.google.common.annotations.GwtCompatible; +import com.google.common.collect.BoundType; +import com.google.common.collect.Multiset; +import com.google.common.collect.SortedIterable; +import com.google.common.collect.SortedMultisetBridge; +import java.util.Comparator; +import java.util.Iterator; +import java.util.NavigableSet; +import java.util.Set; + +@Beta +@GwtCompatible(emulated=true) +public interface SortedMultiset +extends SortedMultisetBridge, +SortedIterable { + @Override + public Comparator comparator(); + + public Multiset.Entry firstEntry(); + + public Multiset.Entry lastEntry(); + + public Multiset.Entry pollFirstEntry(); + + public Multiset.Entry pollLastEntry(); + + @Override + public NavigableSet elementSet(); + + @Override + public Set> entrySet(); + + @Override + public Iterator iterator(); + + public SortedMultiset descendingMultiset(); + + public SortedMultiset headMultiset(E var1, BoundType var2); + + public SortedMultiset subMultiset(E var1, BoundType var2, E var3, BoundType var4); + + public SortedMultiset tailMultiset(E var1, BoundType var2); +} diff --git a/src/com/google/common/collect/SortedMultisetBridge.java b/src/com/google/common/collect/SortedMultisetBridge.java new file mode 100644 index 0000000..3d04227 --- /dev/null +++ b/src/com/google/common/collect/SortedMultisetBridge.java @@ -0,0 +1,13 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.collect.Multiset; +import java.util.SortedSet; + +interface SortedMultisetBridge +extends Multiset { + @Override + public SortedSet elementSet(); +} diff --git a/src/com/google/common/collect/SortedMultisets.java b/src/com/google/common/collect/SortedMultisets.java new file mode 100644 index 0000000..9459981 --- /dev/null +++ b/src/com/google/common/collect/SortedMultisets.java @@ -0,0 +1,143 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.GwtCompatible; +import com.google.common.annotations.GwtIncompatible; +import com.google.common.collect.BoundType; +import com.google.common.collect.Multiset; +import com.google.common.collect.Multisets; +import com.google.common.collect.SortedMultiset; +import java.util.Comparator; +import java.util.Iterator; +import java.util.NavigableSet; +import java.util.NoSuchElementException; +import java.util.SortedSet; +import javax.annotation.Nullable; + +@GwtCompatible(emulated=true) +final class SortedMultisets { + private SortedMultisets() { + } + + private static E getElementOrThrow(Multiset.Entry entry) { + if (entry == null) { + throw new NoSuchElementException(); + } + return entry.getElement(); + } + + private static E getElementOrNull(@Nullable Multiset.Entry entry) { + return entry == null ? null : (E)entry.getElement(); + } + + @GwtIncompatible(value="Navigable") + static class NavigableElementSet + extends ElementSet + implements NavigableSet { + NavigableElementSet(SortedMultiset multiset) { + super(multiset); + } + + @Override + public E lower(E e) { + return (E)SortedMultisets.getElementOrNull(this.multiset().headMultiset(e, BoundType.OPEN).lastEntry()); + } + + @Override + public E floor(E e) { + return (E)SortedMultisets.getElementOrNull(this.multiset().headMultiset(e, BoundType.CLOSED).lastEntry()); + } + + @Override + public E ceiling(E e) { + return (E)SortedMultisets.getElementOrNull(this.multiset().tailMultiset(e, BoundType.CLOSED).firstEntry()); + } + + @Override + public E higher(E e) { + return (E)SortedMultisets.getElementOrNull(this.multiset().tailMultiset(e, BoundType.OPEN).firstEntry()); + } + + @Override + public NavigableSet descendingSet() { + return new NavigableElementSet(this.multiset().descendingMultiset()); + } + + @Override + public Iterator descendingIterator() { + return this.descendingSet().iterator(); + } + + @Override + public E pollFirst() { + return (E)SortedMultisets.getElementOrNull(this.multiset().pollFirstEntry()); + } + + @Override + public E pollLast() { + return (E)SortedMultisets.getElementOrNull(this.multiset().pollLastEntry()); + } + + @Override + public NavigableSet subSet(E fromElement, boolean fromInclusive, E toElement, boolean toInclusive) { + return new NavigableElementSet(this.multiset().subMultiset(fromElement, BoundType.forBoolean(fromInclusive), toElement, BoundType.forBoolean(toInclusive))); + } + + @Override + public NavigableSet headSet(E toElement, boolean inclusive) { + return new NavigableElementSet(this.multiset().headMultiset(toElement, BoundType.forBoolean(inclusive))); + } + + @Override + public NavigableSet tailSet(E fromElement, boolean inclusive) { + return new NavigableElementSet(this.multiset().tailMultiset(fromElement, BoundType.forBoolean(inclusive))); + } + } + + static class ElementSet + extends Multisets.ElementSet + implements SortedSet { + private final SortedMultiset multiset; + + ElementSet(SortedMultiset multiset) { + this.multiset = multiset; + } + + @Override + final SortedMultiset multiset() { + return this.multiset; + } + + @Override + public Comparator comparator() { + return this.multiset().comparator(); + } + + @Override + public SortedSet subSet(E fromElement, E toElement) { + return this.multiset().subMultiset(fromElement, BoundType.CLOSED, toElement, BoundType.OPEN).elementSet(); + } + + @Override + public SortedSet headSet(E toElement) { + return this.multiset().headMultiset(toElement, BoundType.OPEN).elementSet(); + } + + @Override + public SortedSet tailSet(E fromElement) { + return this.multiset().tailMultiset(fromElement, BoundType.CLOSED).elementSet(); + } + + @Override + public E first() { + return (E)SortedMultisets.getElementOrThrow(this.multiset().firstEntry()); + } + + @Override + public E last() { + return (E)SortedMultisets.getElementOrThrow(this.multiset().lastEntry()); + } + } +} diff --git a/src/com/google/common/collect/SortedSetMultimap.java b/src/com/google/common/collect/SortedSetMultimap.java new file mode 100644 index 0000000..e6150a8 --- /dev/null +++ b/src/com/google/common/collect/SortedSetMultimap.java @@ -0,0 +1,30 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.GwtCompatible; +import com.google.common.collect.SetMultimap; +import java.util.Collection; +import java.util.Comparator; +import java.util.Map; +import java.util.SortedSet; +import javax.annotation.Nullable; + +@GwtCompatible +public interface SortedSetMultimap +extends SetMultimap { + @Override + public SortedSet get(@Nullable K var1); + + @Override + public SortedSet removeAll(@Nullable Object var1); + + @Override + public SortedSet replaceValues(K var1, Iterable var2); + + @Override + public Map> asMap(); + + public Comparator valueComparator(); +} diff --git a/src/com/google/common/collect/SparseImmutableTable.java b/src/com/google/common/collect/SparseImmutableTable.java new file mode 100644 index 0000000..315b160 --- /dev/null +++ b/src/com/google/common/collect/SparseImmutableTable.java @@ -0,0 +1,105 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.GwtCompatible; +import com.google.common.collect.ImmutableCollection; +import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableMap; +import com.google.common.collect.ImmutableSet; +import com.google.common.collect.Maps; +import com.google.common.collect.RegularImmutableTable; +import com.google.common.collect.Table; +import java.util.HashMap; +import java.util.LinkedHashMap; +import java.util.Map; +import javax.annotation.concurrent.Immutable; + +@GwtCompatible +@Immutable +final class SparseImmutableTable +extends RegularImmutableTable { + private final ImmutableMap> rowMap; + private final ImmutableMap> columnMap; + private final int[] iterationOrderRow; + private final int[] iterationOrderColumn; + + SparseImmutableTable(ImmutableList> cellList, ImmutableSet rowSpace, ImmutableSet columnSpace) { + HashMap rowIndex = Maps.newHashMap(); + LinkedHashMap rows = Maps.newLinkedHashMap(); + for (Object row : rowSpace) { + rowIndex.put(row, rows.size()); + rows.put(row, new LinkedHashMap()); + } + LinkedHashMap columns = Maps.newLinkedHashMap(); + for (Object col : columnSpace) { + columns.put(col, new LinkedHashMap()); + } + int[] iterationOrderRow = new int[cellList.size()]; + int[] iterationOrderColumn = new int[cellList.size()]; + for (int i = 0; i < cellList.size(); ++i) { + Table.Cell cell = (Table.Cell)cellList.get(i); + Object rowKey = cell.getRowKey(); + Object columnKey = cell.getColumnKey(); + Object value = cell.getValue(); + iterationOrderRow[i] = (Integer)rowIndex.get(rowKey); + Map thisRow = (Map)rows.get(rowKey); + iterationOrderColumn[i] = thisRow.size(); + Object oldValue = thisRow.put(columnKey, value); + if (oldValue != null) { + String string = String.valueOf(String.valueOf(rowKey)); + String string2 = String.valueOf(String.valueOf(columnKey)); + String string3 = String.valueOf(String.valueOf(value)); + String string4 = String.valueOf(String.valueOf(oldValue)); + throw new IllegalArgumentException(new StringBuilder(37 + string.length() + string2.length() + string3.length() + string4.length()).append("Duplicate value for row=").append(string).append(", column=").append(string2).append(": ").append(string3).append(", ").append(string4).toString()); + } + ((Map)columns.get(columnKey)).put(rowKey, value); + } + this.iterationOrderRow = iterationOrderRow; + this.iterationOrderColumn = iterationOrderColumn; + ImmutableMap.Builder rowBuilder = ImmutableMap.builder(); + for (Map.Entry row : rows.entrySet()) { + rowBuilder.put(row.getKey(), ImmutableMap.copyOf((Map)row.getValue())); + } + this.rowMap = rowBuilder.build(); + ImmutableMap.Builder columnBuilder = ImmutableMap.builder(); + for (Map.Entry col : columns.entrySet()) { + columnBuilder.put(col.getKey(), ImmutableMap.copyOf((Map)col.getValue())); + } + this.columnMap = columnBuilder.build(); + } + + @Override + public ImmutableMap> columnMap() { + return this.columnMap; + } + + @Override + public ImmutableMap> rowMap() { + return this.rowMap; + } + + @Override + public int size() { + return this.iterationOrderRow.length; + } + + @Override + Table.Cell getCell(int index) { + int rowIndex = this.iterationOrderRow[index]; + Map.Entry rowEntry = (Map.Entry)((ImmutableCollection)((Object)this.rowMap.entrySet())).asList().get(rowIndex); + ImmutableMap row = (ImmutableMap)rowEntry.getValue(); + int columnIndex = this.iterationOrderColumn[index]; + Map.Entry colEntry = (Map.Entry)((ImmutableCollection)((Object)row.entrySet())).asList().get(columnIndex); + return SparseImmutableTable.cellOf(rowEntry.getKey(), colEntry.getKey(), colEntry.getValue()); + } + + @Override + V getValue(int index) { + int rowIndex = this.iterationOrderRow[index]; + ImmutableMap row = (ImmutableMap)((ImmutableCollection)this.rowMap.values()).asList().get(rowIndex); + int columnIndex = this.iterationOrderColumn[index]; + return (V)((ImmutableCollection)row.values()).asList().get(columnIndex); + } +} diff --git a/src/com/google/common/collect/StandardRowSortedTable.java b/src/com/google/common/collect/StandardRowSortedTable.java new file mode 100644 index 0000000..c6b07ca --- /dev/null +++ b/src/com/google/common/collect/StandardRowSortedTable.java @@ -0,0 +1,97 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.GwtCompatible; +import com.google.common.base.Preconditions; +import com.google.common.base.Supplier; +import com.google.common.collect.Maps; +import com.google.common.collect.RowSortedTable; +import com.google.common.collect.StandardTable; +import java.util.Comparator; +import java.util.Map; +import java.util.SortedMap; +import java.util.SortedSet; + +@GwtCompatible +class StandardRowSortedTable +extends StandardTable +implements RowSortedTable { + private static final long serialVersionUID = 0L; + + StandardRowSortedTable(SortedMap> backingMap, Supplier> factory) { + super(backingMap, factory); + } + + private SortedMap> sortedBackingMap() { + return (SortedMap)this.backingMap; + } + + @Override + public SortedSet rowKeySet() { + return (SortedSet)this.rowMap().keySet(); + } + + @Override + public SortedMap> rowMap() { + return (SortedMap)super.rowMap(); + } + + @Override + SortedMap> createRowMap() { + return new RowSortedMap(); + } + + private class RowSortedMap + extends StandardTable.RowMap + implements SortedMap> { + private RowSortedMap() { + super(StandardRowSortedTable.this); + } + + @Override + public SortedSet keySet() { + return (SortedSet)super.keySet(); + } + + @Override + SortedSet createKeySet() { + return new Maps.SortedKeySet(this); + } + + @Override + public Comparator comparator() { + return StandardRowSortedTable.this.sortedBackingMap().comparator(); + } + + @Override + public R firstKey() { + return StandardRowSortedTable.this.sortedBackingMap().firstKey(); + } + + @Override + public R lastKey() { + return StandardRowSortedTable.this.sortedBackingMap().lastKey(); + } + + @Override + public SortedMap> headMap(R toKey) { + Preconditions.checkNotNull(toKey); + return new StandardRowSortedTable(StandardRowSortedTable.this.sortedBackingMap().headMap(toKey), StandardRowSortedTable.this.factory).rowMap(); + } + + @Override + public SortedMap> subMap(R fromKey, R toKey) { + Preconditions.checkNotNull(fromKey); + Preconditions.checkNotNull(toKey); + return new StandardRowSortedTable(StandardRowSortedTable.this.sortedBackingMap().subMap(fromKey, toKey), StandardRowSortedTable.this.factory).rowMap(); + } + + @Override + public SortedMap> tailMap(R fromKey) { + Preconditions.checkNotNull(fromKey); + return new StandardRowSortedTable(StandardRowSortedTable.this.sortedBackingMap().tailMap(fromKey), StandardRowSortedTable.this.factory).rowMap(); + } + } +} diff --git a/src/com/google/common/collect/StandardTable.java b/src/com/google/common/collect/StandardTable.java new file mode 100644 index 0000000..553e84b --- /dev/null +++ b/src/com/google/common/collect/StandardTable.java @@ -0,0 +1,898 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.GwtCompatible; +import com.google.common.base.Function; +import com.google.common.base.Preconditions; +import com.google.common.base.Predicate; +import com.google.common.base.Predicates; +import com.google.common.base.Supplier; +import com.google.common.collect.AbstractIterator; +import com.google.common.collect.AbstractMapEntry; +import com.google.common.collect.AbstractTable; +import com.google.common.collect.Collections2; +import com.google.common.collect.ForwardingMapEntry; +import com.google.common.collect.GwtTransient; +import com.google.common.collect.Iterators; +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import com.google.common.collect.Sets; +import com.google.common.collect.Table; +import com.google.common.collect.Tables; +import java.io.Serializable; +import java.util.Collection; +import java.util.Iterator; +import java.util.LinkedHashMap; +import java.util.Map; +import java.util.Set; +import javax.annotation.Nullable; + +@GwtCompatible +class StandardTable +extends AbstractTable +implements Serializable { + @GwtTransient + final Map> backingMap; + @GwtTransient + final Supplier> factory; + private transient Set columnKeySet; + private transient Map> rowMap; + private transient ColumnMap columnMap; + private static final long serialVersionUID = 0L; + + StandardTable(Map> backingMap, Supplier> factory) { + this.backingMap = backingMap; + this.factory = factory; + } + + @Override + public boolean contains(@Nullable Object rowKey, @Nullable Object columnKey) { + return rowKey != null && columnKey != null && super.contains(rowKey, columnKey); + } + + @Override + public boolean containsColumn(@Nullable Object columnKey) { + if (columnKey == null) { + return false; + } + for (Map map : this.backingMap.values()) { + if (!Maps.safeContainsKey(map, columnKey)) continue; + return true; + } + return false; + } + + @Override + public boolean containsRow(@Nullable Object rowKey) { + return rowKey != null && Maps.safeContainsKey(this.backingMap, rowKey); + } + + @Override + public boolean containsValue(@Nullable Object value) { + return value != null && super.containsValue(value); + } + + @Override + public V get(@Nullable Object rowKey, @Nullable Object columnKey) { + return rowKey == null || columnKey == null ? null : (V)super.get(rowKey, columnKey); + } + + @Override + public boolean isEmpty() { + return this.backingMap.isEmpty(); + } + + @Override + public int size() { + int size = 0; + for (Map map : this.backingMap.values()) { + size += map.size(); + } + return size; + } + + @Override + public void clear() { + this.backingMap.clear(); + } + + private Map getOrCreate(R rowKey) { + Map map = this.backingMap.get(rowKey); + if (map == null) { + map = this.factory.get(); + this.backingMap.put(rowKey, map); + } + return map; + } + + @Override + public V put(R rowKey, C columnKey, V value) { + Preconditions.checkNotNull(rowKey); + Preconditions.checkNotNull(columnKey); + Preconditions.checkNotNull(value); + return this.getOrCreate(rowKey).put(columnKey, value); + } + + @Override + public V remove(@Nullable Object rowKey, @Nullable Object columnKey) { + if (rowKey == null || columnKey == null) { + return null; + } + Map map = Maps.safeGet(this.backingMap, rowKey); + if (map == null) { + return null; + } + V value = map.remove(columnKey); + if (map.isEmpty()) { + this.backingMap.remove(rowKey); + } + return value; + } + + private Map removeColumn(Object column) { + LinkedHashMap output = new LinkedHashMap(); + Iterator>> iterator = this.backingMap.entrySet().iterator(); + while (iterator.hasNext()) { + Map.Entry> entry = iterator.next(); + V value = entry.getValue().remove(column); + if (value == null) continue; + output.put(entry.getKey(), value); + if (!entry.getValue().isEmpty()) continue; + iterator.remove(); + } + return output; + } + + private boolean containsMapping(Object rowKey, Object columnKey, Object value) { + return value != null && value.equals(this.get(rowKey, columnKey)); + } + + private boolean removeMapping(Object rowKey, Object columnKey, Object value) { + if (this.containsMapping(rowKey, columnKey, value)) { + this.remove(rowKey, columnKey); + return true; + } + return false; + } + + @Override + public Set> cellSet() { + return super.cellSet(); + } + + @Override + Iterator> cellIterator() { + return new CellIterator(); + } + + @Override + public Map row(R rowKey) { + return new Row(rowKey); + } + + @Override + public Map column(C columnKey) { + return new Column(columnKey); + } + + @Override + public Set rowKeySet() { + return this.rowMap().keySet(); + } + + @Override + public Set columnKeySet() { + ColumnKeySet result = this.columnKeySet; + return result == null ? (this.columnKeySet = new ColumnKeySet()) : result; + } + + Iterator createColumnKeyIterator() { + return new ColumnKeyIterator(); + } + + @Override + public Collection values() { + return super.values(); + } + + @Override + public Map> rowMap() { + Map>> result = this.rowMap; + return result == null ? (this.rowMap = this.createRowMap()) : result; + } + + Map> createRowMap() { + return new RowMap(); + } + + @Override + public Map> columnMap() { + ColumnMap result = this.columnMap; + return result == null ? (this.columnMap = new ColumnMap()) : result; + } + + private class ColumnMap + extends Maps.ImprovedAbstractMap> { + private ColumnMap() { + } + + @Override + public Map get(Object key) { + return StandardTable.this.containsColumn(key) ? StandardTable.this.column(key) : null; + } + + @Override + public boolean containsKey(Object key) { + return StandardTable.this.containsColumn(key); + } + + @Override + public Map remove(Object key) { + return StandardTable.this.containsColumn(key) ? StandardTable.this.removeColumn(key) : null; + } + + @Override + public Set>> createEntrySet() { + return new ColumnMapEntrySet(); + } + + @Override + public Set keySet() { + return StandardTable.this.columnKeySet(); + } + + @Override + Collection> createValues() { + return new ColumnMapValues(); + } + + private class ColumnMapValues + extends Maps.Values> { + ColumnMapValues() { + super(ColumnMap.this); + } + + @Override + public boolean remove(Object obj) { + for (Map.Entry entry : ColumnMap.this.entrySet()) { + if (!((Map)entry.getValue()).equals(obj)) continue; + StandardTable.this.removeColumn(entry.getKey()); + return true; + } + return false; + } + + @Override + public boolean removeAll(Collection c) { + Preconditions.checkNotNull(c); + boolean changed = false; + for (Object columnKey : Lists.newArrayList(StandardTable.this.columnKeySet().iterator())) { + if (!c.contains(StandardTable.this.column(columnKey))) continue; + StandardTable.this.removeColumn(columnKey); + changed = true; + } + return changed; + } + + @Override + public boolean retainAll(Collection c) { + Preconditions.checkNotNull(c); + boolean changed = false; + for (Object columnKey : Lists.newArrayList(StandardTable.this.columnKeySet().iterator())) { + if (c.contains(StandardTable.this.column(columnKey))) continue; + StandardTable.this.removeColumn(columnKey); + changed = true; + } + return changed; + } + } + + class ColumnMapEntrySet + extends TableSet>> { + ColumnMapEntrySet() { + } + + @Override + public Iterator>> iterator() { + return Maps.asMapEntryIterator(StandardTable.this.columnKeySet(), new Function>(){ + + @Override + public Map apply(C columnKey) { + return StandardTable.this.column(columnKey); + } + }); + } + + @Override + public int size() { + return StandardTable.this.columnKeySet().size(); + } + + @Override + public boolean contains(Object obj) { + Map.Entry entry; + if (obj instanceof Map.Entry && StandardTable.this.containsColumn((entry = (Map.Entry)obj).getKey())) { + Object columnKey = entry.getKey(); + return ColumnMap.this.get(columnKey).equals(entry.getValue()); + } + return false; + } + + @Override + public boolean remove(Object obj) { + if (this.contains(obj)) { + Map.Entry entry = (Map.Entry)obj; + StandardTable.this.removeColumn(entry.getKey()); + return true; + } + return false; + } + + @Override + public boolean removeAll(Collection c) { + Preconditions.checkNotNull(c); + return Sets.removeAllImpl(this, c.iterator()); + } + + @Override + public boolean retainAll(Collection c) { + Preconditions.checkNotNull(c); + boolean changed = false; + for (Object columnKey : Lists.newArrayList(StandardTable.this.columnKeySet().iterator())) { + if (c.contains(Maps.immutableEntry(columnKey, StandardTable.this.column(columnKey)))) continue; + StandardTable.this.removeColumn(columnKey); + changed = true; + } + return changed; + } + } + } + + class RowMap + extends Maps.ImprovedAbstractMap> { + RowMap() { + } + + @Override + public boolean containsKey(Object key) { + return StandardTable.this.containsRow(key); + } + + @Override + public Map get(Object key) { + return StandardTable.this.containsRow(key) ? StandardTable.this.row(key) : null; + } + + @Override + public Map remove(Object key) { + return key == null ? null : StandardTable.this.backingMap.remove(key); + } + + @Override + protected Set>> createEntrySet() { + return new EntrySet(); + } + + class EntrySet + extends TableSet>> { + EntrySet() { + } + + @Override + public Iterator>> iterator() { + return Maps.asMapEntryIterator(StandardTable.this.backingMap.keySet(), new Function>(){ + + @Override + public Map apply(R rowKey) { + return StandardTable.this.row(rowKey); + } + }); + } + + @Override + public int size() { + return StandardTable.this.backingMap.size(); + } + + @Override + public boolean contains(Object obj) { + if (obj instanceof Map.Entry) { + Map.Entry entry = (Map.Entry)obj; + return entry.getKey() != null && entry.getValue() instanceof Map && Collections2.safeContains(StandardTable.this.backingMap.entrySet(), entry); + } + return false; + } + + @Override + public boolean remove(Object obj) { + if (obj instanceof Map.Entry) { + Map.Entry entry = (Map.Entry)obj; + return entry.getKey() != null && entry.getValue() instanceof Map && StandardTable.this.backingMap.entrySet().remove(entry); + } + return false; + } + } + } + + private class ColumnKeyIterator + extends AbstractIterator { + final Map seen; + final Iterator> mapIterator; + Iterator> entryIterator; + + private ColumnKeyIterator() { + this.seen = StandardTable.this.factory.get(); + this.mapIterator = StandardTable.this.backingMap.values().iterator(); + this.entryIterator = Iterators.emptyIterator(); + } + + @Override + protected C computeNext() { + while (true) { + if (this.entryIterator.hasNext()) { + Map.Entry entry = this.entryIterator.next(); + if (this.seen.containsKey(entry.getKey())) continue; + this.seen.put(entry.getKey(), entry.getValue()); + return entry.getKey(); + } + if (!this.mapIterator.hasNext()) break; + this.entryIterator = this.mapIterator.next().entrySet().iterator(); + } + return this.endOfData(); + } + } + + private class ColumnKeySet + extends TableSet { + private ColumnKeySet() { + } + + @Override + public Iterator iterator() { + return StandardTable.this.createColumnKeyIterator(); + } + + @Override + public int size() { + return Iterators.size(this.iterator()); + } + + @Override + public boolean remove(Object obj) { + if (obj == null) { + return false; + } + boolean changed = false; + Iterator iterator = StandardTable.this.backingMap.values().iterator(); + while (iterator.hasNext()) { + Map map = iterator.next(); + if (!map.keySet().remove(obj)) continue; + changed = true; + if (!map.isEmpty()) continue; + iterator.remove(); + } + return changed; + } + + @Override + public boolean removeAll(Collection c) { + Preconditions.checkNotNull(c); + boolean changed = false; + Iterator iterator = StandardTable.this.backingMap.values().iterator(); + while (iterator.hasNext()) { + Map map = iterator.next(); + if (!Iterators.removeAll(map.keySet().iterator(), c)) continue; + changed = true; + if (!map.isEmpty()) continue; + iterator.remove(); + } + return changed; + } + + @Override + public boolean retainAll(Collection c) { + Preconditions.checkNotNull(c); + boolean changed = false; + Iterator iterator = StandardTable.this.backingMap.values().iterator(); + while (iterator.hasNext()) { + Map map = iterator.next(); + if (!map.keySet().retainAll(c)) continue; + changed = true; + if (!map.isEmpty()) continue; + iterator.remove(); + } + return changed; + } + + @Override + public boolean contains(Object obj) { + return StandardTable.this.containsColumn(obj); + } + } + + private class Column + extends Maps.ImprovedAbstractMap { + final C columnKey; + + Column(C columnKey) { + this.columnKey = Preconditions.checkNotNull(columnKey); + } + + @Override + public V put(R key, V value) { + return StandardTable.this.put(key, this.columnKey, value); + } + + @Override + public V get(Object key) { + return StandardTable.this.get(key, this.columnKey); + } + + @Override + public boolean containsKey(Object key) { + return StandardTable.this.contains(key, this.columnKey); + } + + @Override + public V remove(Object key) { + return StandardTable.this.remove(key, this.columnKey); + } + + boolean removeFromColumnIf(Predicate> predicate) { + boolean changed = false; + Iterator iterator = StandardTable.this.backingMap.entrySet().iterator(); + while (iterator.hasNext()) { + Map.Entry entry = iterator.next(); + Map map = entry.getValue(); + Object value = map.get(this.columnKey); + if (value == null || !predicate.apply(Maps.immutableEntry(entry.getKey(), value))) continue; + map.remove(this.columnKey); + changed = true; + if (!map.isEmpty()) continue; + iterator.remove(); + } + return changed; + } + + @Override + Set> createEntrySet() { + return new EntrySet(); + } + + @Override + Set createKeySet() { + return new KeySet(); + } + + @Override + Collection createValues() { + return new Values(); + } + + private class Values + extends Maps.Values { + Values() { + super(Column.this); + } + + @Override + public boolean remove(Object obj) { + return obj != null && Column.this.removeFromColumnIf(Maps.valuePredicateOnEntries(Predicates.equalTo(obj))); + } + + @Override + public boolean removeAll(Collection c) { + return Column.this.removeFromColumnIf(Maps.valuePredicateOnEntries(Predicates.in(c))); + } + + @Override + public boolean retainAll(Collection c) { + return Column.this.removeFromColumnIf(Maps.valuePredicateOnEntries(Predicates.not(Predicates.in(c)))); + } + } + + private class KeySet + extends Maps.KeySet { + KeySet() { + super(Column.this); + } + + @Override + public boolean contains(Object obj) { + return StandardTable.this.contains(obj, Column.this.columnKey); + } + + @Override + public boolean remove(Object obj) { + return StandardTable.this.remove(obj, Column.this.columnKey) != null; + } + + @Override + public boolean retainAll(Collection c) { + return Column.this.removeFromColumnIf(Maps.keyPredicateOnEntries(Predicates.not(Predicates.in(c)))); + } + } + + private class EntrySetIterator + extends AbstractIterator> { + final Iterator>> iterator; + + private EntrySetIterator() { + this.iterator = StandardTable.this.backingMap.entrySet().iterator(); + } + + @Override + protected Map.Entry computeNext() { + while (this.iterator.hasNext()) { + final Map.Entry entry = this.iterator.next(); + if (!entry.getValue().containsKey(Column.this.columnKey)) continue; + return new AbstractMapEntry(){ + + @Override + public R getKey() { + return entry.getKey(); + } + + @Override + public V getValue() { + return ((Map)entry.getValue()).get(Column.this.columnKey); + } + + @Override + public V setValue(V value) { + return ((Map)entry.getValue()).put(Column.this.columnKey, Preconditions.checkNotNull(value)); + } + }; + } + return (Map.Entry)this.endOfData(); + } + } + + private class EntrySet + extends Sets.ImprovedAbstractSet> { + private EntrySet() { + } + + @Override + public Iterator> iterator() { + return new EntrySetIterator(); + } + + @Override + public int size() { + int size = 0; + for (Map map : StandardTable.this.backingMap.values()) { + if (!map.containsKey(Column.this.columnKey)) continue; + ++size; + } + return size; + } + + @Override + public boolean isEmpty() { + return !StandardTable.this.containsColumn(Column.this.columnKey); + } + + @Override + public void clear() { + Column.this.removeFromColumnIf(Predicates.alwaysTrue()); + } + + @Override + public boolean contains(Object o) { + if (o instanceof Map.Entry) { + Map.Entry entry = (Map.Entry)o; + return StandardTable.this.containsMapping(entry.getKey(), Column.this.columnKey, entry.getValue()); + } + return false; + } + + @Override + public boolean remove(Object obj) { + if (obj instanceof Map.Entry) { + Map.Entry entry = (Map.Entry)obj; + return StandardTable.this.removeMapping(entry.getKey(), Column.this.columnKey, entry.getValue()); + } + return false; + } + + @Override + public boolean retainAll(Collection c) { + return Column.this.removeFromColumnIf(Predicates.not(Predicates.in(c))); + } + } + } + + class Row + extends Maps.ImprovedAbstractMap { + final R rowKey; + Map backingRowMap; + + Row(R rowKey) { + this.rowKey = Preconditions.checkNotNull(rowKey); + } + + Map backingRowMap() { + Map map; + if (this.backingRowMap == null || this.backingRowMap.isEmpty() && StandardTable.this.backingMap.containsKey(this.rowKey)) { + this.backingRowMap = this.computeBackingRowMap(); + map = this.backingRowMap; + } else { + map = this.backingRowMap; + } + return map; + } + + Map computeBackingRowMap() { + return StandardTable.this.backingMap.get(this.rowKey); + } + + void maintainEmptyInvariant() { + if (this.backingRowMap() != null && this.backingRowMap.isEmpty()) { + StandardTable.this.backingMap.remove(this.rowKey); + this.backingRowMap = null; + } + } + + @Override + public boolean containsKey(Object key) { + Map backingRowMap = this.backingRowMap(); + return key != null && backingRowMap != null && Maps.safeContainsKey(backingRowMap, key); + } + + @Override + public V get(Object key) { + Map backingRowMap = this.backingRowMap(); + return key != null && backingRowMap != null ? (Object)Maps.safeGet(backingRowMap, key) : null; + } + + @Override + public V put(C key, V value) { + Preconditions.checkNotNull(key); + Preconditions.checkNotNull(value); + if (this.backingRowMap != null && !this.backingRowMap.isEmpty()) { + return this.backingRowMap.put(key, value); + } + return StandardTable.this.put(this.rowKey, key, value); + } + + @Override + public V remove(Object key) { + Map backingRowMap = this.backingRowMap(); + if (backingRowMap == null) { + return null; + } + Object result = Maps.safeRemove(backingRowMap, key); + this.maintainEmptyInvariant(); + return result; + } + + @Override + public void clear() { + Map backingRowMap = this.backingRowMap(); + if (backingRowMap != null) { + backingRowMap.clear(); + } + this.maintainEmptyInvariant(); + } + + @Override + protected Set> createEntrySet() { + return new RowEntrySet(); + } + + private final class RowEntrySet + extends Maps.EntrySet { + private RowEntrySet() { + } + + @Override + Map map() { + return Row.this; + } + + @Override + public int size() { + Map map = Row.this.backingRowMap(); + return map == null ? 0 : map.size(); + } + + @Override + public Iterator> iterator() { + Map map = Row.this.backingRowMap(); + if (map == null) { + return Iterators.emptyModifiableIterator(); + } + final Iterator iterator = map.entrySet().iterator(); + return new Iterator>(){ + + @Override + public boolean hasNext() { + return iterator.hasNext(); + } + + @Override + public Map.Entry next() { + final Map.Entry entry = (Map.Entry)iterator.next(); + return new ForwardingMapEntry(){ + + @Override + protected Map.Entry delegate() { + return entry; + } + + @Override + public V setValue(V value) { + return super.setValue(Preconditions.checkNotNull(value)); + } + + @Override + public boolean equals(Object object) { + return this.standardEquals(object); + } + }; + } + + @Override + public void remove() { + iterator.remove(); + Row.this.maintainEmptyInvariant(); + } + }; + } + } + } + + private class CellIterator + implements Iterator> { + final Iterator>> rowIterator; + Map.Entry> rowEntry; + Iterator> columnIterator; + + private CellIterator() { + this.rowIterator = StandardTable.this.backingMap.entrySet().iterator(); + this.columnIterator = Iterators.emptyModifiableIterator(); + } + + @Override + public boolean hasNext() { + return this.rowIterator.hasNext() || this.columnIterator.hasNext(); + } + + @Override + public Table.Cell next() { + if (!this.columnIterator.hasNext()) { + this.rowEntry = this.rowIterator.next(); + this.columnIterator = this.rowEntry.getValue().entrySet().iterator(); + } + Map.Entry columnEntry = this.columnIterator.next(); + return Tables.immutableCell(this.rowEntry.getKey(), columnEntry.getKey(), columnEntry.getValue()); + } + + @Override + public void remove() { + this.columnIterator.remove(); + if (this.rowEntry.getValue().isEmpty()) { + this.rowIterator.remove(); + } + } + } + + private abstract class TableSet + extends Sets.ImprovedAbstractSet { + private TableSet() { + } + + @Override + public boolean isEmpty() { + return StandardTable.this.backingMap.isEmpty(); + } + + @Override + public void clear() { + StandardTable.this.backingMap.clear(); + } + } +} diff --git a/src/com/google/common/collect/Synchronized.java b/src/com/google/common/collect/Synchronized.java new file mode 100644 index 0000000..b801ea4 --- /dev/null +++ b/src/com/google/common/collect/Synchronized.java @@ -0,0 +1,2471 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.GwtCompatible; +import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.VisibleForTesting; +import com.google.common.base.Preconditions; +import com.google.common.collect.BiMap; +import com.google.common.collect.Collections2; +import com.google.common.collect.ForwardingIterator; +import com.google.common.collect.ForwardingMapEntry; +import com.google.common.collect.ImmutableBiMap; +import com.google.common.collect.ImmutableListMultimap; +import com.google.common.collect.ImmutableMultimap; +import com.google.common.collect.ImmutableMultiset; +import com.google.common.collect.ImmutableSetMultimap; +import com.google.common.collect.Iterators; +import com.google.common.collect.ListMultimap; +import com.google.common.collect.Maps; +import com.google.common.collect.Multimap; +import com.google.common.collect.Multiset; +import com.google.common.collect.ObjectArrays; +import com.google.common.collect.SetMultimap; +import com.google.common.collect.Sets; +import com.google.common.collect.SortedSetMultimap; +import java.io.IOException; +import java.io.ObjectOutputStream; +import java.io.Serializable; +import java.util.Collection; +import java.util.Comparator; +import java.util.Deque; +import java.util.Iterator; +import java.util.List; +import java.util.ListIterator; +import java.util.Map; +import java.util.NavigableMap; +import java.util.NavigableSet; +import java.util.Queue; +import java.util.RandomAccess; +import java.util.Set; +import java.util.SortedMap; +import java.util.SortedSet; +import javax.annotation.Nullable; + +@GwtCompatible(emulated=true) +final class Synchronized { + private Synchronized() { + } + + private static Collection collection(Collection collection, @Nullable Object mutex) { + return new SynchronizedCollection(collection, mutex); + } + + @VisibleForTesting + static Set set(Set set, @Nullable Object mutex) { + return new SynchronizedSet(set, mutex); + } + + private static SortedSet sortedSet(SortedSet set, @Nullable Object mutex) { + return new SynchronizedSortedSet(set, mutex); + } + + private static List list(List list, @Nullable Object mutex) { + return list instanceof RandomAccess ? new SynchronizedRandomAccessList(list, mutex) : new SynchronizedList(list, mutex); + } + + static Multiset multiset(Multiset multiset, @Nullable Object mutex) { + if (multiset instanceof SynchronizedMultiset || multiset instanceof ImmutableMultiset) { + return multiset; + } + return new SynchronizedMultiset(multiset, mutex); + } + + static Multimap multimap(Multimap multimap, @Nullable Object mutex) { + if (multimap instanceof SynchronizedMultimap || multimap instanceof ImmutableMultimap) { + return multimap; + } + return new SynchronizedMultimap(multimap, mutex); + } + + static ListMultimap listMultimap(ListMultimap multimap, @Nullable Object mutex) { + if (multimap instanceof SynchronizedListMultimap || multimap instanceof ImmutableListMultimap) { + return multimap; + } + return new SynchronizedListMultimap(multimap, mutex); + } + + static SetMultimap setMultimap(SetMultimap multimap, @Nullable Object mutex) { + if (multimap instanceof SynchronizedSetMultimap || multimap instanceof ImmutableSetMultimap) { + return multimap; + } + return new SynchronizedSetMultimap(multimap, mutex); + } + + static SortedSetMultimap sortedSetMultimap(SortedSetMultimap multimap, @Nullable Object mutex) { + if (multimap instanceof SynchronizedSortedSetMultimap) { + return multimap; + } + return new SynchronizedSortedSetMultimap(multimap, mutex); + } + + private static Collection typePreservingCollection(Collection collection, @Nullable Object mutex) { + if (collection instanceof SortedSet) { + return Synchronized.sortedSet((SortedSet)collection, mutex); + } + if (collection instanceof Set) { + return Synchronized.set((Set)collection, mutex); + } + if (collection instanceof List) { + return Synchronized.list((List)collection, mutex); + } + return Synchronized.collection(collection, mutex); + } + + private static Set typePreservingSet(Set set, @Nullable Object mutex) { + if (set instanceof SortedSet) { + return Synchronized.sortedSet((SortedSet)set, mutex); + } + return Synchronized.set(set, mutex); + } + + @VisibleForTesting + static Map map(Map map, @Nullable Object mutex) { + return new SynchronizedMap(map, mutex); + } + + static SortedMap sortedMap(SortedMap sortedMap, @Nullable Object mutex) { + return new SynchronizedSortedMap(sortedMap, mutex); + } + + static BiMap biMap(BiMap bimap, @Nullable Object mutex) { + if (bimap instanceof SynchronizedBiMap || bimap instanceof ImmutableBiMap) { + return bimap; + } + return new SynchronizedBiMap(bimap, mutex, null); + } + + @GwtIncompatible(value="NavigableSet") + static NavigableSet navigableSet(NavigableSet navigableSet, @Nullable Object mutex) { + return new SynchronizedNavigableSet(navigableSet, mutex); + } + + @GwtIncompatible(value="NavigableSet") + static NavigableSet navigableSet(NavigableSet navigableSet) { + return Synchronized.navigableSet(navigableSet, null); + } + + @GwtIncompatible(value="NavigableMap") + static NavigableMap navigableMap(NavigableMap navigableMap) { + return Synchronized.navigableMap(navigableMap, null); + } + + @GwtIncompatible(value="NavigableMap") + static NavigableMap navigableMap(NavigableMap navigableMap, @Nullable Object mutex) { + return new SynchronizedNavigableMap(navigableMap, mutex); + } + + @GwtIncompatible(value="works but is needed only for NavigableMap") + private static Map.Entry nullableSynchronizedEntry(@Nullable Map.Entry entry, @Nullable Object mutex) { + if (entry == null) { + return null; + } + return new SynchronizedEntry(entry, mutex); + } + + static Queue queue(Queue queue, @Nullable Object mutex) { + return queue instanceof SynchronizedQueue ? queue : new SynchronizedQueue(queue, mutex); + } + + @GwtIncompatible(value="Deque") + static Deque deque(Deque deque, @Nullable Object mutex) { + return new SynchronizedDeque(deque, mutex); + } + + @GwtIncompatible(value="Deque") + private static final class SynchronizedDeque + extends SynchronizedQueue + implements Deque { + private static final long serialVersionUID = 0L; + + SynchronizedDeque(Deque delegate, @Nullable Object mutex) { + super(delegate, mutex); + } + + @Override + Deque delegate() { + return (Deque)super.delegate(); + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public void addFirst(E e) { + Object object = this.mutex; + synchronized (object) { + this.delegate().addFirst(e); + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public void addLast(E e) { + Object object = this.mutex; + synchronized (object) { + this.delegate().addLast(e); + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public boolean offerFirst(E e) { + Object object = this.mutex; + synchronized (object) { + return this.delegate().offerFirst(e); + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public boolean offerLast(E e) { + Object object = this.mutex; + synchronized (object) { + return this.delegate().offerLast(e); + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public E removeFirst() { + Object object = this.mutex; + synchronized (object) { + return this.delegate().removeFirst(); + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public E removeLast() { + Object object = this.mutex; + synchronized (object) { + return this.delegate().removeLast(); + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public E pollFirst() { + Object object = this.mutex; + synchronized (object) { + return this.delegate().pollFirst(); + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public E pollLast() { + Object object = this.mutex; + synchronized (object) { + return this.delegate().pollLast(); + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public E getFirst() { + Object object = this.mutex; + synchronized (object) { + return this.delegate().getFirst(); + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public E getLast() { + Object object = this.mutex; + synchronized (object) { + return this.delegate().getLast(); + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public E peekFirst() { + Object object = this.mutex; + synchronized (object) { + return this.delegate().peekFirst(); + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public E peekLast() { + Object object = this.mutex; + synchronized (object) { + return this.delegate().peekLast(); + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public boolean removeFirstOccurrence(Object o) { + Object object = this.mutex; + synchronized (object) { + return this.delegate().removeFirstOccurrence(o); + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public boolean removeLastOccurrence(Object o) { + Object object = this.mutex; + synchronized (object) { + return this.delegate().removeLastOccurrence(o); + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public void push(E e) { + Object object = this.mutex; + synchronized (object) { + this.delegate().push(e); + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public E pop() { + Object object = this.mutex; + synchronized (object) { + return this.delegate().pop(); + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public Iterator descendingIterator() { + Object object = this.mutex; + synchronized (object) { + return this.delegate().descendingIterator(); + } + } + } + + private static class SynchronizedQueue + extends SynchronizedCollection + implements Queue { + private static final long serialVersionUID = 0L; + + SynchronizedQueue(Queue delegate, @Nullable Object mutex) { + super(delegate, mutex); + } + + @Override + Queue delegate() { + return (Queue)super.delegate(); + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public E element() { + Object object = this.mutex; + synchronized (object) { + return this.delegate().element(); + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public boolean offer(E e) { + Object object = this.mutex; + synchronized (object) { + return this.delegate().offer(e); + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public E peek() { + Object object = this.mutex; + synchronized (object) { + return this.delegate().peek(); + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public E poll() { + Object object = this.mutex; + synchronized (object) { + return this.delegate().poll(); + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public E remove() { + Object object = this.mutex; + synchronized (object) { + return this.delegate().remove(); + } + } + } + + @GwtIncompatible(value="works but is needed only for NavigableMap") + private static class SynchronizedEntry + extends SynchronizedObject + implements Map.Entry { + private static final long serialVersionUID = 0L; + + SynchronizedEntry(Map.Entry delegate, @Nullable Object mutex) { + super(delegate, mutex); + } + + @Override + Map.Entry delegate() { + return (Map.Entry)super.delegate(); + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public boolean equals(Object obj) { + Object object = this.mutex; + synchronized (object) { + return this.delegate().equals(obj); + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public int hashCode() { + Object object = this.mutex; + synchronized (object) { + return this.delegate().hashCode(); + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public K getKey() { + Object object = this.mutex; + synchronized (object) { + return this.delegate().getKey(); + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public V getValue() { + Object object = this.mutex; + synchronized (object) { + return this.delegate().getValue(); + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public V setValue(V value) { + Object object = this.mutex; + synchronized (object) { + return this.delegate().setValue(value); + } + } + } + + @GwtIncompatible(value="NavigableMap") + @VisibleForTesting + static class SynchronizedNavigableMap + extends SynchronizedSortedMap + implements NavigableMap { + transient NavigableSet descendingKeySet; + transient NavigableMap descendingMap; + transient NavigableSet navigableKeySet; + private static final long serialVersionUID = 0L; + + SynchronizedNavigableMap(NavigableMap delegate, @Nullable Object mutex) { + super(delegate, mutex); + } + + @Override + NavigableMap delegate() { + return (NavigableMap)super.delegate(); + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public Map.Entry ceilingEntry(K key) { + Object object = this.mutex; + synchronized (object) { + return Synchronized.nullableSynchronizedEntry(this.delegate().ceilingEntry(key), this.mutex); + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public K ceilingKey(K key) { + Object object = this.mutex; + synchronized (object) { + return this.delegate().ceilingKey(key); + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public NavigableSet descendingKeySet() { + Object object = this.mutex; + synchronized (object) { + if (this.descendingKeySet == null) { + this.descendingKeySet = Synchronized.navigableSet(this.delegate().descendingKeySet(), this.mutex); + return this.descendingKeySet; + } + return this.descendingKeySet; + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public NavigableMap descendingMap() { + Object object = this.mutex; + synchronized (object) { + if (this.descendingMap == null) { + this.descendingMap = Synchronized.navigableMap(this.delegate().descendingMap(), this.mutex); + return this.descendingMap; + } + return this.descendingMap; + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public Map.Entry firstEntry() { + Object object = this.mutex; + synchronized (object) { + return Synchronized.nullableSynchronizedEntry(this.delegate().firstEntry(), this.mutex); + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public Map.Entry floorEntry(K key) { + Object object = this.mutex; + synchronized (object) { + return Synchronized.nullableSynchronizedEntry(this.delegate().floorEntry(key), this.mutex); + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public K floorKey(K key) { + Object object = this.mutex; + synchronized (object) { + return this.delegate().floorKey(key); + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public NavigableMap headMap(K toKey, boolean inclusive) { + Object object = this.mutex; + synchronized (object) { + return Synchronized.navigableMap(this.delegate().headMap(toKey, inclusive), this.mutex); + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public Map.Entry higherEntry(K key) { + Object object = this.mutex; + synchronized (object) { + return Synchronized.nullableSynchronizedEntry(this.delegate().higherEntry(key), this.mutex); + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public K higherKey(K key) { + Object object = this.mutex; + synchronized (object) { + return this.delegate().higherKey(key); + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public Map.Entry lastEntry() { + Object object = this.mutex; + synchronized (object) { + return Synchronized.nullableSynchronizedEntry(this.delegate().lastEntry(), this.mutex); + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public Map.Entry lowerEntry(K key) { + Object object = this.mutex; + synchronized (object) { + return Synchronized.nullableSynchronizedEntry(this.delegate().lowerEntry(key), this.mutex); + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public K lowerKey(K key) { + Object object = this.mutex; + synchronized (object) { + return this.delegate().lowerKey(key); + } + } + + @Override + public Set keySet() { + return this.navigableKeySet(); + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public NavigableSet navigableKeySet() { + Object object = this.mutex; + synchronized (object) { + if (this.navigableKeySet == null) { + this.navigableKeySet = Synchronized.navigableSet(this.delegate().navigableKeySet(), this.mutex); + return this.navigableKeySet; + } + return this.navigableKeySet; + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public Map.Entry pollFirstEntry() { + Object object = this.mutex; + synchronized (object) { + return Synchronized.nullableSynchronizedEntry(this.delegate().pollFirstEntry(), this.mutex); + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public Map.Entry pollLastEntry() { + Object object = this.mutex; + synchronized (object) { + return Synchronized.nullableSynchronizedEntry(this.delegate().pollLastEntry(), this.mutex); + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public NavigableMap subMap(K fromKey, boolean fromInclusive, K toKey, boolean toInclusive) { + Object object = this.mutex; + synchronized (object) { + return Synchronized.navigableMap(this.delegate().subMap(fromKey, fromInclusive, toKey, toInclusive), this.mutex); + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public NavigableMap tailMap(K fromKey, boolean inclusive) { + Object object = this.mutex; + synchronized (object) { + return Synchronized.navigableMap(this.delegate().tailMap(fromKey, inclusive), this.mutex); + } + } + + @Override + public SortedMap headMap(K toKey) { + return this.headMap(toKey, false); + } + + @Override + public SortedMap subMap(K fromKey, K toKey) { + return this.subMap(fromKey, true, toKey, false); + } + + @Override + public SortedMap tailMap(K fromKey) { + return this.tailMap(fromKey, true); + } + } + + @GwtIncompatible(value="NavigableSet") + @VisibleForTesting + static class SynchronizedNavigableSet + extends SynchronizedSortedSet + implements NavigableSet { + transient NavigableSet descendingSet; + private static final long serialVersionUID = 0L; + + SynchronizedNavigableSet(NavigableSet delegate, @Nullable Object mutex) { + super(delegate, mutex); + } + + @Override + NavigableSet delegate() { + return (NavigableSet)super.delegate(); + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public E ceiling(E e) { + Object object = this.mutex; + synchronized (object) { + return this.delegate().ceiling(e); + } + } + + @Override + public Iterator descendingIterator() { + return this.delegate().descendingIterator(); + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public NavigableSet descendingSet() { + Object object = this.mutex; + synchronized (object) { + if (this.descendingSet == null) { + NavigableSet dS = Synchronized.navigableSet(this.delegate().descendingSet(), this.mutex); + this.descendingSet = dS; + return dS; + } + return this.descendingSet; + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public E floor(E e) { + Object object = this.mutex; + synchronized (object) { + return this.delegate().floor(e); + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public NavigableSet headSet(E toElement, boolean inclusive) { + Object object = this.mutex; + synchronized (object) { + return Synchronized.navigableSet(this.delegate().headSet(toElement, inclusive), this.mutex); + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public E higher(E e) { + Object object = this.mutex; + synchronized (object) { + return this.delegate().higher(e); + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public E lower(E e) { + Object object = this.mutex; + synchronized (object) { + return this.delegate().lower(e); + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public E pollFirst() { + Object object = this.mutex; + synchronized (object) { + return this.delegate().pollFirst(); + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public E pollLast() { + Object object = this.mutex; + synchronized (object) { + return this.delegate().pollLast(); + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public NavigableSet subSet(E fromElement, boolean fromInclusive, E toElement, boolean toInclusive) { + Object object = this.mutex; + synchronized (object) { + return Synchronized.navigableSet(this.delegate().subSet(fromElement, fromInclusive, toElement, toInclusive), this.mutex); + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public NavigableSet tailSet(E fromElement, boolean inclusive) { + Object object = this.mutex; + synchronized (object) { + return Synchronized.navigableSet(this.delegate().tailSet(fromElement, inclusive), this.mutex); + } + } + + @Override + public SortedSet headSet(E toElement) { + return this.headSet(toElement, false); + } + + @Override + public SortedSet subSet(E fromElement, E toElement) { + return this.subSet(fromElement, true, toElement, false); + } + + @Override + public SortedSet tailSet(E fromElement) { + return this.tailSet(fromElement, true); + } + } + + private static class SynchronizedAsMapValues + extends SynchronizedCollection> { + private static final long serialVersionUID = 0L; + + SynchronizedAsMapValues(Collection> delegate, @Nullable Object mutex) { + super(delegate, mutex); + } + + @Override + public Iterator> iterator() { + final Iterator iterator = super.iterator(); + return new ForwardingIterator>(){ + + @Override + protected Iterator> delegate() { + return iterator; + } + + @Override + public Collection next() { + return Synchronized.typePreservingCollection((Collection)super.next(), SynchronizedAsMapValues.this.mutex); + } + }; + } + } + + private static class SynchronizedAsMap + extends SynchronizedMap> { + transient Set>> asMapEntrySet; + transient Collection> asMapValues; + private static final long serialVersionUID = 0L; + + SynchronizedAsMap(Map> delegate, @Nullable Object mutex) { + super(delegate, mutex); + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public Collection get(Object key) { + Object object = this.mutex; + synchronized (object) { + Collection collection = (Collection)super.get(key); + return collection == null ? null : Synchronized.typePreservingCollection(collection, this.mutex); + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public Set>> entrySet() { + Object object = this.mutex; + synchronized (object) { + if (this.asMapEntrySet == null) { + this.asMapEntrySet = new SynchronizedAsMapEntries(this.delegate().entrySet(), this.mutex); + } + return this.asMapEntrySet; + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public Collection> values() { + Object object = this.mutex; + synchronized (object) { + if (this.asMapValues == null) { + this.asMapValues = new SynchronizedAsMapValues(this.delegate().values(), this.mutex); + } + return this.asMapValues; + } + } + + @Override + public boolean containsValue(Object o) { + return this.values().contains(o); + } + } + + @VisibleForTesting + static class SynchronizedBiMap + extends SynchronizedMap + implements BiMap, + Serializable { + private transient Set valueSet; + private transient BiMap inverse; + private static final long serialVersionUID = 0L; + + private SynchronizedBiMap(BiMap delegate, @Nullable Object mutex, @Nullable BiMap inverse) { + super(delegate, mutex); + this.inverse = inverse; + } + + @Override + BiMap delegate() { + return (BiMap)super.delegate(); + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public Set values() { + Object object = this.mutex; + synchronized (object) { + if (this.valueSet == null) { + this.valueSet = Synchronized.set(this.delegate().values(), this.mutex); + } + return this.valueSet; + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public V forcePut(K key, V value) { + Object object = this.mutex; + synchronized (object) { + return this.delegate().forcePut(key, value); + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public BiMap inverse() { + Object object = this.mutex; + synchronized (object) { + if (this.inverse == null) { + this.inverse = new SynchronizedBiMap(this.delegate().inverse(), this.mutex, this); + } + return this.inverse; + } + } + } + + static class SynchronizedSortedMap + extends SynchronizedMap + implements SortedMap { + private static final long serialVersionUID = 0L; + + SynchronizedSortedMap(SortedMap delegate, @Nullable Object mutex) { + super(delegate, mutex); + } + + @Override + SortedMap delegate() { + return (SortedMap)super.delegate(); + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public Comparator comparator() { + Object object = this.mutex; + synchronized (object) { + return this.delegate().comparator(); + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public K firstKey() { + Object object = this.mutex; + synchronized (object) { + return this.delegate().firstKey(); + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public SortedMap headMap(K toKey) { + Object object = this.mutex; + synchronized (object) { + return Synchronized.sortedMap(this.delegate().headMap(toKey), this.mutex); + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public K lastKey() { + Object object = this.mutex; + synchronized (object) { + return this.delegate().lastKey(); + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public SortedMap subMap(K fromKey, K toKey) { + Object object = this.mutex; + synchronized (object) { + return Synchronized.sortedMap(this.delegate().subMap(fromKey, toKey), this.mutex); + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public SortedMap tailMap(K fromKey) { + Object object = this.mutex; + synchronized (object) { + return Synchronized.sortedMap(this.delegate().tailMap(fromKey), this.mutex); + } + } + } + + private static class SynchronizedMap + extends SynchronizedObject + implements Map { + transient Set keySet; + transient Collection values; + transient Set> entrySet; + private static final long serialVersionUID = 0L; + + SynchronizedMap(Map delegate, @Nullable Object mutex) { + super(delegate, mutex); + } + + @Override + Map delegate() { + return (Map)super.delegate(); + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public void clear() { + Object object = this.mutex; + synchronized (object) { + this.delegate().clear(); + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public boolean containsKey(Object key) { + Object object = this.mutex; + synchronized (object) { + return this.delegate().containsKey(key); + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public boolean containsValue(Object value) { + Object object = this.mutex; + synchronized (object) { + return this.delegate().containsValue(value); + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public Set> entrySet() { + Object object = this.mutex; + synchronized (object) { + if (this.entrySet == null) { + this.entrySet = Synchronized.set(this.delegate().entrySet(), this.mutex); + } + return this.entrySet; + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public V get(Object key) { + Object object = this.mutex; + synchronized (object) { + return this.delegate().get(key); + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public boolean isEmpty() { + Object object = this.mutex; + synchronized (object) { + return this.delegate().isEmpty(); + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public Set keySet() { + Object object = this.mutex; + synchronized (object) { + if (this.keySet == null) { + this.keySet = Synchronized.set(this.delegate().keySet(), this.mutex); + } + return this.keySet; + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public V put(K key, V value) { + Object object = this.mutex; + synchronized (object) { + return this.delegate().put(key, value); + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public void putAll(Map map) { + Object object = this.mutex; + synchronized (object) { + this.delegate().putAll(map); + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public V remove(Object key) { + Object object = this.mutex; + synchronized (object) { + return this.delegate().remove(key); + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public int size() { + Object object = this.mutex; + synchronized (object) { + return this.delegate().size(); + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public Collection values() { + Object object = this.mutex; + synchronized (object) { + if (this.values == null) { + this.values = Synchronized.collection(this.delegate().values(), this.mutex); + } + return this.values; + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public boolean equals(Object o) { + if (o == this) { + return true; + } + Object object = this.mutex; + synchronized (object) { + return this.delegate().equals(o); + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public int hashCode() { + Object object = this.mutex; + synchronized (object) { + return this.delegate().hashCode(); + } + } + } + + private static class SynchronizedAsMapEntries + extends SynchronizedSet>> { + private static final long serialVersionUID = 0L; + + SynchronizedAsMapEntries(Set>> delegate, @Nullable Object mutex) { + super(delegate, mutex); + } + + @Override + public Iterator>> iterator() { + final Iterator iterator = super.iterator(); + return new ForwardingIterator>>(){ + + @Override + protected Iterator>> delegate() { + return iterator; + } + + @Override + public Map.Entry> next() { + final Map.Entry entry = (Map.Entry)super.next(); + return new ForwardingMapEntry>(){ + + @Override + protected Map.Entry> delegate() { + return entry; + } + + @Override + public Collection getValue() { + return Synchronized.typePreservingCollection((Collection)entry.getValue(), SynchronizedAsMapEntries.this.mutex); + } + }; + } + }; + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public Object[] toArray() { + Object object = this.mutex; + synchronized (object) { + return ObjectArrays.toArrayImpl(this.delegate()); + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public T[] toArray(T[] array) { + Object object = this.mutex; + synchronized (object) { + return ObjectArrays.toArrayImpl(this.delegate(), array); + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public boolean contains(Object o) { + Object object = this.mutex; + synchronized (object) { + return Maps.containsEntryImpl(this.delegate(), o); + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public boolean containsAll(Collection c) { + Object object = this.mutex; + synchronized (object) { + return Collections2.containsAllImpl(this.delegate(), c); + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public boolean equals(Object o) { + if (o == this) { + return true; + } + Object object = this.mutex; + synchronized (object) { + return Sets.equalsImpl(this.delegate(), o); + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public boolean remove(Object o) { + Object object = this.mutex; + synchronized (object) { + return Maps.removeEntryImpl(this.delegate(), o); + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public boolean removeAll(Collection c) { + Object object = this.mutex; + synchronized (object) { + return Iterators.removeAll(this.delegate().iterator(), c); + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public boolean retainAll(Collection c) { + Object object = this.mutex; + synchronized (object) { + return Iterators.retainAll(this.delegate().iterator(), c); + } + } + } + + private static class SynchronizedSortedSetMultimap + extends SynchronizedSetMultimap + implements SortedSetMultimap { + private static final long serialVersionUID = 0L; + + SynchronizedSortedSetMultimap(SortedSetMultimap delegate, @Nullable Object mutex) { + super(delegate, mutex); + } + + @Override + SortedSetMultimap delegate() { + return (SortedSetMultimap)super.delegate(); + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public SortedSet get(K key) { + Object object = this.mutex; + synchronized (object) { + return Synchronized.sortedSet(this.delegate().get(key), this.mutex); + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public SortedSet removeAll(Object key) { + Object object = this.mutex; + synchronized (object) { + return this.delegate().removeAll(key); + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public SortedSet replaceValues(K key, Iterable values) { + Object object = this.mutex; + synchronized (object) { + return this.delegate().replaceValues(key, values); + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public Comparator valueComparator() { + Object object = this.mutex; + synchronized (object) { + return this.delegate().valueComparator(); + } + } + } + + private static class SynchronizedSetMultimap + extends SynchronizedMultimap + implements SetMultimap { + transient Set> entrySet; + private static final long serialVersionUID = 0L; + + SynchronizedSetMultimap(SetMultimap delegate, @Nullable Object mutex) { + super(delegate, mutex); + } + + @Override + SetMultimap delegate() { + return (SetMultimap)super.delegate(); + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public Set get(K key) { + Object object = this.mutex; + synchronized (object) { + return Synchronized.set(this.delegate().get(key), this.mutex); + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public Set removeAll(Object key) { + Object object = this.mutex; + synchronized (object) { + return this.delegate().removeAll(key); + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public Set replaceValues(K key, Iterable values) { + Object object = this.mutex; + synchronized (object) { + return this.delegate().replaceValues(key, values); + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public Set> entries() { + Object object = this.mutex; + synchronized (object) { + if (this.entrySet == null) { + this.entrySet = Synchronized.set(this.delegate().entries(), this.mutex); + } + return this.entrySet; + } + } + } + + private static class SynchronizedListMultimap + extends SynchronizedMultimap + implements ListMultimap { + private static final long serialVersionUID = 0L; + + SynchronizedListMultimap(ListMultimap delegate, @Nullable Object mutex) { + super(delegate, mutex); + } + + @Override + ListMultimap delegate() { + return (ListMultimap)super.delegate(); + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public List get(K key) { + Object object = this.mutex; + synchronized (object) { + return Synchronized.list(this.delegate().get(key), this.mutex); + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public List removeAll(Object key) { + Object object = this.mutex; + synchronized (object) { + return this.delegate().removeAll(key); + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public List replaceValues(K key, Iterable values) { + Object object = this.mutex; + synchronized (object) { + return this.delegate().replaceValues(key, values); + } + } + } + + private static class SynchronizedMultimap + extends SynchronizedObject + implements Multimap { + transient Set keySet; + transient Collection valuesCollection; + transient Collection> entries; + transient Map> asMap; + transient Multiset keys; + private static final long serialVersionUID = 0L; + + @Override + Multimap delegate() { + return (Multimap)super.delegate(); + } + + SynchronizedMultimap(Multimap delegate, @Nullable Object mutex) { + super(delegate, mutex); + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public int size() { + Object object = this.mutex; + synchronized (object) { + return this.delegate().size(); + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public boolean isEmpty() { + Object object = this.mutex; + synchronized (object) { + return this.delegate().isEmpty(); + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public boolean containsKey(Object key) { + Object object = this.mutex; + synchronized (object) { + return this.delegate().containsKey(key); + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public boolean containsValue(Object value) { + Object object = this.mutex; + synchronized (object) { + return this.delegate().containsValue(value); + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public boolean containsEntry(Object key, Object value) { + Object object = this.mutex; + synchronized (object) { + return this.delegate().containsEntry(key, value); + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public Collection get(K key) { + Object object = this.mutex; + synchronized (object) { + return Synchronized.typePreservingCollection(this.delegate().get(key), this.mutex); + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public boolean put(K key, V value) { + Object object = this.mutex; + synchronized (object) { + return this.delegate().put(key, value); + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public boolean putAll(K key, Iterable values) { + Object object = this.mutex; + synchronized (object) { + return this.delegate().putAll(key, values); + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public boolean putAll(Multimap multimap) { + Object object = this.mutex; + synchronized (object) { + return this.delegate().putAll(multimap); + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public Collection replaceValues(K key, Iterable values) { + Object object = this.mutex; + synchronized (object) { + return this.delegate().replaceValues(key, values); + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public boolean remove(Object key, Object value) { + Object object = this.mutex; + synchronized (object) { + return this.delegate().remove(key, value); + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public Collection removeAll(Object key) { + Object object = this.mutex; + synchronized (object) { + return this.delegate().removeAll(key); + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public void clear() { + Object object = this.mutex; + synchronized (object) { + this.delegate().clear(); + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public Set keySet() { + Object object = this.mutex; + synchronized (object) { + if (this.keySet == null) { + this.keySet = Synchronized.typePreservingSet(this.delegate().keySet(), this.mutex); + } + return this.keySet; + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public Collection values() { + Object object = this.mutex; + synchronized (object) { + if (this.valuesCollection == null) { + this.valuesCollection = Synchronized.collection(this.delegate().values(), this.mutex); + } + return this.valuesCollection; + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public Collection> entries() { + Object object = this.mutex; + synchronized (object) { + if (this.entries == null) { + this.entries = Synchronized.typePreservingCollection(this.delegate().entries(), this.mutex); + } + return this.entries; + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public Map> asMap() { + Object object = this.mutex; + synchronized (object) { + if (this.asMap == null) { + this.asMap = new SynchronizedAsMap(this.delegate().asMap(), this.mutex); + } + return this.asMap; + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public Multiset keys() { + Object object = this.mutex; + synchronized (object) { + if (this.keys == null) { + this.keys = Synchronized.multiset(this.delegate().keys(), this.mutex); + } + return this.keys; + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public boolean equals(Object o) { + if (o == this) { + return true; + } + Object object = this.mutex; + synchronized (object) { + return this.delegate().equals(o); + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public int hashCode() { + Object object = this.mutex; + synchronized (object) { + return this.delegate().hashCode(); + } + } + } + + private static class SynchronizedMultiset + extends SynchronizedCollection + implements Multiset { + transient Set elementSet; + transient Set> entrySet; + private static final long serialVersionUID = 0L; + + SynchronizedMultiset(Multiset delegate, @Nullable Object mutex) { + super(delegate, mutex); + } + + @Override + Multiset delegate() { + return (Multiset)super.delegate(); + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public int count(Object o) { + Object object = this.mutex; + synchronized (object) { + return this.delegate().count(o); + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public int add(E e, int n) { + Object object = this.mutex; + synchronized (object) { + return this.delegate().add(e, n); + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public int remove(Object o, int n) { + Object object = this.mutex; + synchronized (object) { + return this.delegate().remove(o, n); + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public int setCount(E element, int count) { + Object object = this.mutex; + synchronized (object) { + return this.delegate().setCount(element, count); + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public boolean setCount(E element, int oldCount, int newCount) { + Object object = this.mutex; + synchronized (object) { + return this.delegate().setCount(element, oldCount, newCount); + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public Set elementSet() { + Object object = this.mutex; + synchronized (object) { + if (this.elementSet == null) { + this.elementSet = Synchronized.typePreservingSet(this.delegate().elementSet(), this.mutex); + } + return this.elementSet; + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public Set> entrySet() { + Object object = this.mutex; + synchronized (object) { + if (this.entrySet == null) { + this.entrySet = Synchronized.typePreservingSet(this.delegate().entrySet(), this.mutex); + } + return this.entrySet; + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public boolean equals(Object o) { + if (o == this) { + return true; + } + Object object = this.mutex; + synchronized (object) { + return this.delegate().equals(o); + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public int hashCode() { + Object object = this.mutex; + synchronized (object) { + return this.delegate().hashCode(); + } + } + } + + private static class SynchronizedRandomAccessList + extends SynchronizedList + implements RandomAccess { + private static final long serialVersionUID = 0L; + + SynchronizedRandomAccessList(List list, @Nullable Object mutex) { + super(list, mutex); + } + } + + private static class SynchronizedList + extends SynchronizedCollection + implements List { + private static final long serialVersionUID = 0L; + + SynchronizedList(List delegate, @Nullable Object mutex) { + super(delegate, mutex); + } + + @Override + List delegate() { + return (List)super.delegate(); + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public void add(int index, E element) { + Object object = this.mutex; + synchronized (object) { + this.delegate().add(index, element); + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public boolean addAll(int index, Collection c) { + Object object = this.mutex; + synchronized (object) { + return this.delegate().addAll(index, c); + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public E get(int index) { + Object object = this.mutex; + synchronized (object) { + return this.delegate().get(index); + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public int indexOf(Object o) { + Object object = this.mutex; + synchronized (object) { + return this.delegate().indexOf(o); + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public int lastIndexOf(Object o) { + Object object = this.mutex; + synchronized (object) { + return this.delegate().lastIndexOf(o); + } + } + + @Override + public ListIterator listIterator() { + return this.delegate().listIterator(); + } + + @Override + public ListIterator listIterator(int index) { + return this.delegate().listIterator(index); + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public E remove(int index) { + Object object = this.mutex; + synchronized (object) { + return this.delegate().remove(index); + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public E set(int index, E element) { + Object object = this.mutex; + synchronized (object) { + return this.delegate().set(index, element); + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public List subList(int fromIndex, int toIndex) { + Object object = this.mutex; + synchronized (object) { + return Synchronized.list(this.delegate().subList(fromIndex, toIndex), this.mutex); + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public boolean equals(Object o) { + if (o == this) { + return true; + } + Object object = this.mutex; + synchronized (object) { + return this.delegate().equals(o); + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public int hashCode() { + Object object = this.mutex; + synchronized (object) { + return this.delegate().hashCode(); + } + } + } + + static class SynchronizedSortedSet + extends SynchronizedSet + implements SortedSet { + private static final long serialVersionUID = 0L; + + SynchronizedSortedSet(SortedSet delegate, @Nullable Object mutex) { + super(delegate, mutex); + } + + @Override + SortedSet delegate() { + return (SortedSet)super.delegate(); + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public Comparator comparator() { + Object object = this.mutex; + synchronized (object) { + return this.delegate().comparator(); + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public SortedSet subSet(E fromElement, E toElement) { + Object object = this.mutex; + synchronized (object) { + return Synchronized.sortedSet(this.delegate().subSet(fromElement, toElement), this.mutex); + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public SortedSet headSet(E toElement) { + Object object = this.mutex; + synchronized (object) { + return Synchronized.sortedSet(this.delegate().headSet(toElement), this.mutex); + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public SortedSet tailSet(E fromElement) { + Object object = this.mutex; + synchronized (object) { + return Synchronized.sortedSet(this.delegate().tailSet(fromElement), this.mutex); + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public E first() { + Object object = this.mutex; + synchronized (object) { + return this.delegate().first(); + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public E last() { + Object object = this.mutex; + synchronized (object) { + return this.delegate().last(); + } + } + } + + static class SynchronizedSet + extends SynchronizedCollection + implements Set { + private static final long serialVersionUID = 0L; + + SynchronizedSet(Set delegate, @Nullable Object mutex) { + super(delegate, mutex); + } + + @Override + Set delegate() { + return (Set)super.delegate(); + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public boolean equals(Object o) { + if (o == this) { + return true; + } + Object object = this.mutex; + synchronized (object) { + return this.delegate().equals(o); + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public int hashCode() { + Object object = this.mutex; + synchronized (object) { + return this.delegate().hashCode(); + } + } + } + + @VisibleForTesting + static class SynchronizedCollection + extends SynchronizedObject + implements Collection { + private static final long serialVersionUID = 0L; + + private SynchronizedCollection(Collection delegate, @Nullable Object mutex) { + super(delegate, mutex); + } + + @Override + Collection delegate() { + return (Collection)super.delegate(); + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public boolean add(E e) { + Object object = this.mutex; + synchronized (object) { + return this.delegate().add(e); + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public boolean addAll(Collection c) { + Object object = this.mutex; + synchronized (object) { + return this.delegate().addAll(c); + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public void clear() { + Object object = this.mutex; + synchronized (object) { + this.delegate().clear(); + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public boolean contains(Object o) { + Object object = this.mutex; + synchronized (object) { + return this.delegate().contains(o); + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public boolean containsAll(Collection c) { + Object object = this.mutex; + synchronized (object) { + return this.delegate().containsAll(c); + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public boolean isEmpty() { + Object object = this.mutex; + synchronized (object) { + return this.delegate().isEmpty(); + } + } + + @Override + public Iterator iterator() { + return this.delegate().iterator(); + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public boolean remove(Object o) { + Object object = this.mutex; + synchronized (object) { + return this.delegate().remove(o); + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public boolean removeAll(Collection c) { + Object object = this.mutex; + synchronized (object) { + return this.delegate().removeAll(c); + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public boolean retainAll(Collection c) { + Object object = this.mutex; + synchronized (object) { + return this.delegate().retainAll(c); + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public int size() { + Object object = this.mutex; + synchronized (object) { + return this.delegate().size(); + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public Object[] toArray() { + Object object = this.mutex; + synchronized (object) { + return this.delegate().toArray(); + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public T[] toArray(T[] a) { + Object object = this.mutex; + synchronized (object) { + return this.delegate().toArray(a); + } + } + } + + static class SynchronizedObject + implements Serializable { + final Object delegate; + final Object mutex; + @GwtIncompatible(value="not needed in emulated source") + private static final long serialVersionUID = 0L; + + SynchronizedObject(Object delegate, @Nullable Object mutex) { + this.delegate = Preconditions.checkNotNull(delegate); + this.mutex = mutex == null ? this : mutex; + } + + Object delegate() { + return this.delegate; + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + public String toString() { + Object object = this.mutex; + synchronized (object) { + return this.delegate.toString(); + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @GwtIncompatible(value="java.io.ObjectOutputStream") + private void writeObject(ObjectOutputStream stream) throws IOException { + Object object = this.mutex; + synchronized (object) { + stream.defaultWriteObject(); + } + } + } +} diff --git a/src/com/google/common/collect/Table.java b/src/com/google/common/collect/Table.java new file mode 100644 index 0000000..92f33b0 --- /dev/null +++ b/src/com/google/common/collect/Table.java @@ -0,0 +1,67 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.GwtCompatible; +import java.util.Collection; +import java.util.Map; +import java.util.Set; +import javax.annotation.Nullable; + +@GwtCompatible +public interface Table { + public boolean contains(@Nullable Object var1, @Nullable Object var2); + + public boolean containsRow(@Nullable Object var1); + + public boolean containsColumn(@Nullable Object var1); + + public boolean containsValue(@Nullable Object var1); + + public V get(@Nullable Object var1, @Nullable Object var2); + + public boolean isEmpty(); + + public int size(); + + public boolean equals(@Nullable Object var1); + + public int hashCode(); + + public void clear(); + + public V put(R var1, C var2, V var3); + + public void putAll(Table var1); + + public V remove(@Nullable Object var1, @Nullable Object var2); + + public Map row(R var1); + + public Map column(C var1); + + public Set> cellSet(); + + public Set rowKeySet(); + + public Set columnKeySet(); + + public Collection values(); + + public Map> rowMap(); + + public Map> columnMap(); + + public static interface Cell { + public R getRowKey(); + + public C getColumnKey(); + + public V getValue(); + + public boolean equals(@Nullable Object var1); + + public int hashCode(); + } +} diff --git a/src/com/google/common/collect/Tables.java b/src/com/google/common/collect/Tables.java new file mode 100644 index 0000000..e38a45e --- /dev/null +++ b/src/com/google/common/collect/Tables.java @@ -0,0 +1,466 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.Beta; +import com.google.common.annotations.GwtCompatible; +import com.google.common.base.Function; +import com.google.common.base.Objects; +import com.google.common.base.Preconditions; +import com.google.common.base.Supplier; +import com.google.common.collect.AbstractTable; +import com.google.common.collect.Collections2; +import com.google.common.collect.ForwardingTable; +import com.google.common.collect.Iterators; +import com.google.common.collect.Maps; +import com.google.common.collect.RowSortedTable; +import com.google.common.collect.StandardTable; +import com.google.common.collect.Table; +import java.io.Serializable; +import java.util.Collection; +import java.util.Collections; +import java.util.Iterator; +import java.util.Map; +import java.util.Set; +import java.util.SortedMap; +import java.util.SortedSet; +import javax.annotation.Nullable; + +@GwtCompatible +public final class Tables { + private static final Function, ? extends Map> UNMODIFIABLE_WRAPPER = new Function, Map>(){ + + @Override + public Map apply(Map input) { + return Collections.unmodifiableMap(input); + } + }; + + private Tables() { + } + + public static Table.Cell immutableCell(@Nullable R rowKey, @Nullable C columnKey, @Nullable V value) { + return new ImmutableCell(rowKey, columnKey, value); + } + + public static Table transpose(Table table) { + return table instanceof TransposeTable ? ((TransposeTable)table).original : new TransposeTable(table); + } + + @Beta + public static Table newCustomTable(Map> backingMap, Supplier> factory) { + Preconditions.checkArgument(backingMap.isEmpty()); + Preconditions.checkNotNull(factory); + return new StandardTable(backingMap, factory); + } + + @Beta + public static Table transformValues(Table fromTable, Function function) { + return new TransformedTable(fromTable, function); + } + + public static Table unmodifiableTable(Table table) { + return new UnmodifiableTable(table); + } + + @Beta + public static RowSortedTable unmodifiableRowSortedTable(RowSortedTable table) { + return new UnmodifiableRowSortedMap(table); + } + + private static Function, Map> unmodifiableWrapper() { + return UNMODIFIABLE_WRAPPER; + } + + static boolean equalsImpl(Table table, @Nullable Object obj) { + if (obj == table) { + return true; + } + if (obj instanceof Table) { + Table that = (Table)obj; + return table.cellSet().equals(that.cellSet()); + } + return false; + } + + static final class UnmodifiableRowSortedMap + extends UnmodifiableTable + implements RowSortedTable { + private static final long serialVersionUID = 0L; + + public UnmodifiableRowSortedMap(RowSortedTable delegate) { + super(delegate); + } + + @Override + protected RowSortedTable delegate() { + return (RowSortedTable)super.delegate(); + } + + @Override + public SortedMap> rowMap() { + Function wrapper = Tables.unmodifiableWrapper(); + return Collections.unmodifiableSortedMap(Maps.transformValues(this.delegate().rowMap(), wrapper)); + } + + @Override + public SortedSet rowKeySet() { + return Collections.unmodifiableSortedSet(this.delegate().rowKeySet()); + } + } + + private static class UnmodifiableTable + extends ForwardingTable + implements Serializable { + final Table delegate; + private static final long serialVersionUID = 0L; + + UnmodifiableTable(Table delegate) { + this.delegate = Preconditions.checkNotNull(delegate); + } + + @Override + protected Table delegate() { + return this.delegate; + } + + @Override + public Set> cellSet() { + return Collections.unmodifiableSet(super.cellSet()); + } + + @Override + public void clear() { + throw new UnsupportedOperationException(); + } + + @Override + public Map column(@Nullable C columnKey) { + return Collections.unmodifiableMap(super.column(columnKey)); + } + + @Override + public Set columnKeySet() { + return Collections.unmodifiableSet(super.columnKeySet()); + } + + @Override + public Map> columnMap() { + Function wrapper = Tables.unmodifiableWrapper(); + return Collections.unmodifiableMap(Maps.transformValues(super.columnMap(), wrapper)); + } + + @Override + public V put(@Nullable R rowKey, @Nullable C columnKey, @Nullable V value) { + throw new UnsupportedOperationException(); + } + + @Override + public void putAll(Table table) { + throw new UnsupportedOperationException(); + } + + @Override + public V remove(@Nullable Object rowKey, @Nullable Object columnKey) { + throw new UnsupportedOperationException(); + } + + @Override + public Map row(@Nullable R rowKey) { + return Collections.unmodifiableMap(super.row(rowKey)); + } + + @Override + public Set rowKeySet() { + return Collections.unmodifiableSet(super.rowKeySet()); + } + + @Override + public Map> rowMap() { + Function wrapper = Tables.unmodifiableWrapper(); + return Collections.unmodifiableMap(Maps.transformValues(super.rowMap(), wrapper)); + } + + @Override + public Collection values() { + return Collections.unmodifiableCollection(super.values()); + } + } + + private static class TransformedTable + extends AbstractTable { + final Table fromTable; + final Function function; + + TransformedTable(Table fromTable, Function function) { + this.fromTable = Preconditions.checkNotNull(fromTable); + this.function = Preconditions.checkNotNull(function); + } + + @Override + public boolean contains(Object rowKey, Object columnKey) { + return this.fromTable.contains(rowKey, columnKey); + } + + @Override + public V2 get(Object rowKey, Object columnKey) { + return this.contains(rowKey, columnKey) ? (V2)this.function.apply((V1)this.fromTable.get(rowKey, columnKey)) : null; + } + + @Override + public int size() { + return this.fromTable.size(); + } + + @Override + public void clear() { + this.fromTable.clear(); + } + + @Override + public V2 put(R rowKey, C columnKey, V2 value) { + throw new UnsupportedOperationException(); + } + + @Override + public void putAll(Table table) { + throw new UnsupportedOperationException(); + } + + @Override + public V2 remove(Object rowKey, Object columnKey) { + return this.contains(rowKey, columnKey) ? (V2)this.function.apply((V1)this.fromTable.remove(rowKey, columnKey)) : null; + } + + @Override + public Map row(R rowKey) { + return Maps.transformValues(this.fromTable.row(rowKey), this.function); + } + + @Override + public Map column(C columnKey) { + return Maps.transformValues(this.fromTable.column(columnKey), this.function); + } + + Function, Table.Cell> cellFunction() { + return new Function, Table.Cell>(){ + + @Override + public Table.Cell apply(Table.Cell cell) { + return Tables.immutableCell(cell.getRowKey(), cell.getColumnKey(), TransformedTable.this.function.apply(cell.getValue())); + } + }; + } + + @Override + Iterator> cellIterator() { + return Iterators.transform(this.fromTable.cellSet().iterator(), this.cellFunction()); + } + + @Override + public Set rowKeySet() { + return this.fromTable.rowKeySet(); + } + + @Override + public Set columnKeySet() { + return this.fromTable.columnKeySet(); + } + + @Override + Collection createValues() { + return Collections2.transform(this.fromTable.values(), this.function); + } + + @Override + public Map> rowMap() { + Function rowFunction = new Function, Map>(){ + + @Override + public Map apply(Map row) { + return Maps.transformValues(row, TransformedTable.this.function); + } + }; + return Maps.transformValues(this.fromTable.rowMap(), rowFunction); + } + + @Override + public Map> columnMap() { + Function columnFunction = new Function, Map>(){ + + @Override + public Map apply(Map column) { + return Maps.transformValues(column, TransformedTable.this.function); + } + }; + return Maps.transformValues(this.fromTable.columnMap(), columnFunction); + } + } + + private static class TransposeTable + extends AbstractTable { + final Table original; + private static final Function, Table.Cell> TRANSPOSE_CELL = new Function, Table.Cell>(){ + + @Override + public Table.Cell apply(Table.Cell cell) { + return Tables.immutableCell(cell.getColumnKey(), cell.getRowKey(), cell.getValue()); + } + }; + + TransposeTable(Table original) { + this.original = Preconditions.checkNotNull(original); + } + + @Override + public void clear() { + this.original.clear(); + } + + @Override + public Map column(R columnKey) { + return this.original.row(columnKey); + } + + @Override + public Set columnKeySet() { + return this.original.rowKeySet(); + } + + @Override + public Map> columnMap() { + return this.original.rowMap(); + } + + @Override + public boolean contains(@Nullable Object rowKey, @Nullable Object columnKey) { + return this.original.contains(columnKey, rowKey); + } + + @Override + public boolean containsColumn(@Nullable Object columnKey) { + return this.original.containsRow(columnKey); + } + + @Override + public boolean containsRow(@Nullable Object rowKey) { + return this.original.containsColumn(rowKey); + } + + @Override + public boolean containsValue(@Nullable Object value) { + return this.original.containsValue(value); + } + + @Override + public V get(@Nullable Object rowKey, @Nullable Object columnKey) { + return this.original.get(columnKey, rowKey); + } + + @Override + public V put(C rowKey, R columnKey, V value) { + return this.original.put(columnKey, rowKey, value); + } + + @Override + public void putAll(Table table) { + this.original.putAll(Tables.transpose(table)); + } + + @Override + public V remove(@Nullable Object rowKey, @Nullable Object columnKey) { + return this.original.remove(columnKey, rowKey); + } + + @Override + public Map row(C rowKey) { + return this.original.column(rowKey); + } + + @Override + public Set rowKeySet() { + return this.original.columnKeySet(); + } + + @Override + public Map> rowMap() { + return this.original.columnMap(); + } + + @Override + public int size() { + return this.original.size(); + } + + @Override + public Collection values() { + return this.original.values(); + } + + @Override + Iterator> cellIterator() { + return Iterators.transform(this.original.cellSet().iterator(), TRANSPOSE_CELL); + } + } + + static abstract class AbstractCell + implements Table.Cell { + AbstractCell() { + } + + @Override + public boolean equals(Object obj) { + if (obj == this) { + return true; + } + if (obj instanceof Table.Cell) { + Table.Cell other = (Table.Cell)obj; + return Objects.equal(this.getRowKey(), other.getRowKey()) && Objects.equal(this.getColumnKey(), other.getColumnKey()) && Objects.equal(this.getValue(), other.getValue()); + } + return false; + } + + @Override + public int hashCode() { + return Objects.hashCode(this.getRowKey(), this.getColumnKey(), this.getValue()); + } + + public String toString() { + String string = String.valueOf(String.valueOf(this.getRowKey())); + String string2 = String.valueOf(String.valueOf(this.getColumnKey())); + String string3 = String.valueOf(String.valueOf(this.getValue())); + return new StringBuilder(4 + string.length() + string2.length() + string3.length()).append("(").append(string).append(",").append(string2).append(")=").append(string3).toString(); + } + } + + static final class ImmutableCell + extends AbstractCell + implements Serializable { + private final R rowKey; + private final C columnKey; + private final V value; + private static final long serialVersionUID = 0L; + + ImmutableCell(@Nullable R rowKey, @Nullable C columnKey, @Nullable V value) { + this.rowKey = rowKey; + this.columnKey = columnKey; + this.value = value; + } + + @Override + public R getRowKey() { + return this.rowKey; + } + + @Override + public C getColumnKey() { + return this.columnKey; + } + + @Override + public V getValue() { + return this.value; + } + } +} diff --git a/src/com/google/common/collect/TransformedIterator.java b/src/com/google/common/collect/TransformedIterator.java new file mode 100644 index 0000000..25d4423 --- /dev/null +++ b/src/com/google/common/collect/TransformedIterator.java @@ -0,0 +1,35 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.GwtCompatible; +import com.google.common.base.Preconditions; +import java.util.Iterator; + +@GwtCompatible +abstract class TransformedIterator +implements Iterator { + final Iterator backingIterator; + + TransformedIterator(Iterator backingIterator) { + this.backingIterator = Preconditions.checkNotNull(backingIterator); + } + + abstract T transform(F var1); + + @Override + public final boolean hasNext() { + return this.backingIterator.hasNext(); + } + + @Override + public final T next() { + return this.transform(this.backingIterator.next()); + } + + @Override + public final void remove() { + this.backingIterator.remove(); + } +} diff --git a/src/com/google/common/collect/TransformedListIterator.java b/src/com/google/common/collect/TransformedListIterator.java new file mode 100644 index 0000000..026a4db --- /dev/null +++ b/src/com/google/common/collect/TransformedListIterator.java @@ -0,0 +1,52 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.GwtCompatible; +import com.google.common.collect.Iterators; +import com.google.common.collect.TransformedIterator; +import java.util.ListIterator; + +@GwtCompatible +abstract class TransformedListIterator +extends TransformedIterator +implements ListIterator { + TransformedListIterator(ListIterator backingIterator) { + super(backingIterator); + } + + private ListIterator backingIterator() { + return Iterators.cast(this.backingIterator); + } + + @Override + public final boolean hasPrevious() { + return this.backingIterator().hasPrevious(); + } + + @Override + public final T previous() { + return this.transform(this.backingIterator().previous()); + } + + @Override + public final int nextIndex() { + return this.backingIterator().nextIndex(); + } + + @Override + public final int previousIndex() { + return this.backingIterator().previousIndex(); + } + + @Override + public void set(T element) { + throw new UnsupportedOperationException(); + } + + @Override + public void add(T element) { + throw new UnsupportedOperationException(); + } +} diff --git a/src/com/google/common/collect/TreeBasedTable.java b/src/com/google/common/collect/TreeBasedTable.java new file mode 100644 index 0000000..9ca4a5d --- /dev/null +++ b/src/com/google/common/collect/TreeBasedTable.java @@ -0,0 +1,245 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.Beta; +import com.google.common.annotations.GwtCompatible; +import com.google.common.base.Function; +import com.google.common.base.Preconditions; +import com.google.common.base.Supplier; +import com.google.common.collect.AbstractIterator; +import com.google.common.collect.Iterables; +import com.google.common.collect.Iterators; +import com.google.common.collect.Maps; +import com.google.common.collect.Ordering; +import com.google.common.collect.StandardRowSortedTable; +import com.google.common.collect.StandardTable; +import com.google.common.collect.Table; +import com.google.common.collect.UnmodifiableIterator; +import java.io.Serializable; +import java.util.Comparator; +import java.util.Iterator; +import java.util.Map; +import java.util.NoSuchElementException; +import java.util.SortedMap; +import java.util.SortedSet; +import java.util.TreeMap; +import javax.annotation.Nullable; + +@GwtCompatible(serializable=true) +@Beta +public class TreeBasedTable +extends StandardRowSortedTable { + private final Comparator columnComparator; + private static final long serialVersionUID = 0L; + + public static TreeBasedTable create() { + return new TreeBasedTable(Ordering.natural(), Ordering.natural()); + } + + public static TreeBasedTable create(Comparator rowComparator, Comparator columnComparator) { + Preconditions.checkNotNull(rowComparator); + Preconditions.checkNotNull(columnComparator); + return new TreeBasedTable(rowComparator, columnComparator); + } + + public static TreeBasedTable create(TreeBasedTable table) { + TreeBasedTable result = new TreeBasedTable(table.rowComparator(), table.columnComparator()); + result.putAll((Table)table); + return result; + } + + TreeBasedTable(Comparator rowComparator, Comparator columnComparator) { + super(new TreeMap(rowComparator), new Factory(columnComparator)); + this.columnComparator = columnComparator; + } + + public Comparator rowComparator() { + return this.rowKeySet().comparator(); + } + + public Comparator columnComparator() { + return this.columnComparator; + } + + @Override + public SortedMap row(R rowKey) { + return new TreeRow(rowKey); + } + + @Override + public SortedSet rowKeySet() { + return super.rowKeySet(); + } + + @Override + public SortedMap> rowMap() { + return super.rowMap(); + } + + @Override + Iterator createColumnKeyIterator() { + final Comparator comparator = this.columnComparator(); + final UnmodifiableIterator merged = Iterators.mergeSorted(Iterables.transform(this.backingMap.values(), new Function, Iterator>(){ + + @Override + public Iterator apply(Map input) { + return input.keySet().iterator(); + } + }), comparator); + return new AbstractIterator(){ + C lastValue; + + @Override + protected C computeNext() { + while (merged.hasNext()) { + Object next = merged.next(); + boolean duplicate = this.lastValue != null && comparator.compare(next, this.lastValue) == 0; + if (duplicate) continue; + this.lastValue = next; + return this.lastValue; + } + this.lastValue = null; + return this.endOfData(); + } + }; + } + + private class TreeRow + extends StandardTable.Row + implements SortedMap { + @Nullable + final C lowerBound; + @Nullable + final C upperBound; + transient SortedMap wholeRow; + + TreeRow(R rowKey) { + this(rowKey, null, null); + } + + TreeRow(@Nullable R rowKey, @Nullable C lowerBound, C upperBound) { + super(TreeBasedTable.this, rowKey); + this.lowerBound = lowerBound; + this.upperBound = upperBound; + Preconditions.checkArgument(lowerBound == null || upperBound == null || this.compare(lowerBound, upperBound) <= 0); + } + + @Override + public SortedSet keySet() { + return new Maps.SortedKeySet(this); + } + + @Override + public Comparator comparator() { + return TreeBasedTable.this.columnComparator(); + } + + int compare(Object a, Object b) { + Comparator cmp = this.comparator(); + return cmp.compare(a, b); + } + + boolean rangeContains(@Nullable Object o) { + return !(o == null || this.lowerBound != null && this.compare(this.lowerBound, o) > 0 || this.upperBound != null && this.compare(this.upperBound, o) <= 0); + } + + @Override + public SortedMap subMap(C fromKey, C toKey) { + Preconditions.checkArgument(this.rangeContains(Preconditions.checkNotNull(fromKey)) && this.rangeContains(Preconditions.checkNotNull(toKey))); + return new TreeRow(this.rowKey, fromKey, toKey); + } + + @Override + public SortedMap headMap(C toKey) { + Preconditions.checkArgument(this.rangeContains(Preconditions.checkNotNull(toKey))); + return new TreeRow(this.rowKey, this.lowerBound, toKey); + } + + @Override + public SortedMap tailMap(C fromKey) { + Preconditions.checkArgument(this.rangeContains(Preconditions.checkNotNull(fromKey))); + return new TreeRow(this.rowKey, fromKey, this.upperBound); + } + + @Override + public C firstKey() { + Map backing = this.backingRowMap(); + if (backing == null) { + throw new NoSuchElementException(); + } + return this.backingRowMap().firstKey(); + } + + @Override + public C lastKey() { + Map backing = this.backingRowMap(); + if (backing == null) { + throw new NoSuchElementException(); + } + return this.backingRowMap().lastKey(); + } + + SortedMap wholeRow() { + if (this.wholeRow == null || this.wholeRow.isEmpty() && TreeBasedTable.this.backingMap.containsKey(this.rowKey)) { + this.wholeRow = (SortedMap)TreeBasedTable.this.backingMap.get(this.rowKey); + } + return this.wholeRow; + } + + SortedMap backingRowMap() { + return (SortedMap)super.backingRowMap(); + } + + SortedMap computeBackingRowMap() { + SortedMap map = this.wholeRow(); + if (map != null) { + if (this.lowerBound != null) { + map = map.tailMap(this.lowerBound); + } + if (this.upperBound != null) { + map = map.headMap(this.upperBound); + } + return map; + } + return null; + } + + @Override + void maintainEmptyInvariant() { + if (this.wholeRow() != null && this.wholeRow.isEmpty()) { + TreeBasedTable.this.backingMap.remove(this.rowKey); + this.wholeRow = null; + this.backingRowMap = null; + } + } + + @Override + public boolean containsKey(Object key) { + return this.rangeContains(key) && super.containsKey(key); + } + + @Override + public V put(C key, V value) { + Preconditions.checkArgument(this.rangeContains(Preconditions.checkNotNull(key))); + return super.put(key, value); + } + } + + private static class Factory + implements Supplier>, + Serializable { + final Comparator comparator; + private static final long serialVersionUID = 0L; + + Factory(Comparator comparator) { + this.comparator = comparator; + } + + @Override + public TreeMap get() { + return new TreeMap(this.comparator); + } + } +} diff --git a/src/com/google/common/collect/TreeMultimap.java b/src/com/google/common/collect/TreeMultimap.java new file mode 100644 index 0000000..2cac2b0 --- /dev/null +++ b/src/com/google/common/collect/TreeMultimap.java @@ -0,0 +1,144 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.GwtCompatible; +import com.google.common.annotations.GwtIncompatible; +import com.google.common.base.Preconditions; +import com.google.common.collect.AbstractMapBasedMultimap; +import com.google.common.collect.AbstractSortedKeySortedSetMultimap; +import com.google.common.collect.Multimap; +import com.google.common.collect.Ordering; +import com.google.common.collect.Serialization; +import com.google.common.collect.Sets; +import java.io.IOException; +import java.io.ObjectInputStream; +import java.io.ObjectOutputStream; +import java.util.Collection; +import java.util.Comparator; +import java.util.NavigableMap; +import java.util.NavigableSet; +import java.util.SortedSet; +import java.util.TreeMap; +import java.util.TreeSet; +import javax.annotation.Nullable; + +@GwtCompatible(serializable=true, emulated=true) +public class TreeMultimap +extends AbstractSortedKeySortedSetMultimap { + private transient Comparator keyComparator; + private transient Comparator valueComparator; + @GwtIncompatible(value="not needed in emulated source") + private static final long serialVersionUID = 0L; + + public static TreeMultimap create() { + return new TreeMultimap(Ordering.natural(), Ordering.natural()); + } + + public static TreeMultimap create(Comparator keyComparator, Comparator valueComparator) { + return new TreeMultimap(Preconditions.checkNotNull(keyComparator), Preconditions.checkNotNull(valueComparator)); + } + + public static TreeMultimap create(Multimap multimap) { + return new TreeMultimap(Ordering.natural(), Ordering.natural(), multimap); + } + + TreeMultimap(Comparator keyComparator, Comparator valueComparator) { + super(new TreeMap(keyComparator)); + this.keyComparator = keyComparator; + this.valueComparator = valueComparator; + } + + private TreeMultimap(Comparator keyComparator, Comparator valueComparator, Multimap multimap) { + this(keyComparator, valueComparator); + this.putAll((Multimap)multimap); + } + + @Override + SortedSet createCollection() { + return new TreeSet(this.valueComparator); + } + + @Override + Collection createCollection(@Nullable K key) { + if (key == null) { + this.keyComparator().compare(key, key); + } + return super.createCollection(key); + } + + public Comparator keyComparator() { + return this.keyComparator; + } + + @Override + public Comparator valueComparator() { + return this.valueComparator; + } + + @Override + @GwtIncompatible(value="NavigableMap") + NavigableMap> backingMap() { + return (NavigableMap)super.backingMap(); + } + + @Override + @GwtIncompatible(value="NavigableSet") + public NavigableSet get(@Nullable K key) { + return (NavigableSet)super.get((Object)key); + } + + @Override + @GwtIncompatible(value="NavigableSet") + Collection unmodifiableCollectionSubclass(Collection collection) { + return Sets.unmodifiableNavigableSet((NavigableSet)collection); + } + + @Override + @GwtIncompatible(value="NavigableSet") + Collection wrapCollection(K key, Collection collection) { + return new AbstractMapBasedMultimap.WrappedNavigableSet((AbstractMapBasedMultimap)this, key, (NavigableSet)collection, null); + } + + @Override + @GwtIncompatible(value="NavigableSet") + public NavigableSet keySet() { + return (NavigableSet)super.keySet(); + } + + @Override + @GwtIncompatible(value="NavigableSet") + NavigableSet createKeySet() { + return new AbstractMapBasedMultimap.NavigableKeySet((AbstractMapBasedMultimap)this, this.backingMap()); + } + + @Override + @GwtIncompatible(value="NavigableMap") + public NavigableMap> asMap() { + return (NavigableMap)super.asMap(); + } + + @Override + @GwtIncompatible(value="NavigableMap") + NavigableMap> createAsMap() { + return new AbstractMapBasedMultimap.NavigableAsMap((AbstractMapBasedMultimap)this, this.backingMap()); + } + + @GwtIncompatible(value="java.io.ObjectOutputStream") + private void writeObject(ObjectOutputStream stream) throws IOException { + stream.defaultWriteObject(); + stream.writeObject(this.keyComparator()); + stream.writeObject(this.valueComparator()); + Serialization.writeMultimap(this, stream); + } + + @GwtIncompatible(value="java.io.ObjectInputStream") + private void readObject(ObjectInputStream stream) throws IOException, ClassNotFoundException { + stream.defaultReadObject(); + this.keyComparator = Preconditions.checkNotNull((Comparator)stream.readObject()); + this.valueComparator = Preconditions.checkNotNull((Comparator)stream.readObject()); + this.setMap(new TreeMap(this.keyComparator)); + Serialization.populateMultimap(this, stream); + } +} diff --git a/src/com/google/common/collect/TreeMultiset.java b/src/com/google/common/collect/TreeMultiset.java new file mode 100644 index 0000000..8693760 --- /dev/null +++ b/src/com/google/common/collect/TreeMultiset.java @@ -0,0 +1,869 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.GwtCompatible; +import com.google.common.annotations.GwtIncompatible; +import com.google.common.base.MoreObjects; +import com.google.common.base.Preconditions; +import com.google.common.collect.AbstractSortedMultiset; +import com.google.common.collect.BoundType; +import com.google.common.collect.CollectPreconditions; +import com.google.common.collect.GeneralRange; +import com.google.common.collect.Iterables; +import com.google.common.collect.Multiset; +import com.google.common.collect.Multisets; +import com.google.common.collect.Ordering; +import com.google.common.collect.Serialization; +import com.google.common.collect.SortedMultiset; +import com.google.common.primitives.Ints; +import java.io.IOException; +import java.io.ObjectInputStream; +import java.io.ObjectOutputStream; +import java.io.Serializable; +import java.util.Comparator; +import java.util.ConcurrentModificationException; +import java.util.Iterator; +import java.util.NoSuchElementException; +import javax.annotation.Nullable; + +@GwtCompatible(emulated=true) +public final class TreeMultiset +extends AbstractSortedMultiset +implements Serializable { + private final transient Reference> rootReference; + private final transient GeneralRange range; + private final transient AvlNode header; + @GwtIncompatible(value="not needed in emulated source") + private static final long serialVersionUID = 1L; + + public static TreeMultiset create() { + return new TreeMultiset(Ordering.natural()); + } + + public static TreeMultiset create(@Nullable Comparator comparator) { + return comparator == null ? new TreeMultiset(Ordering.natural()) : new TreeMultiset(comparator); + } + + public static TreeMultiset create(Iterable elements) { + TreeMultiset multiset = TreeMultiset.create(); + Iterables.addAll(multiset, elements); + return multiset; + } + + TreeMultiset(Reference> rootReference, GeneralRange range, AvlNode endLink) { + super(range.comparator()); + this.rootReference = rootReference; + this.range = range; + this.header = endLink; + } + + TreeMultiset(Comparator comparator) { + super(comparator); + this.range = GeneralRange.all(comparator); + this.header = new AvlNode(null, 1); + TreeMultiset.successor(this.header, this.header); + this.rootReference = new Reference(); + } + + private long aggregateForEntries(Aggregate aggr) { + AvlNode root = this.rootReference.get(); + long total = aggr.treeAggregate(root); + if (this.range.hasLowerBound()) { + total -= this.aggregateBelowRange(aggr, root); + } + if (this.range.hasUpperBound()) { + total -= this.aggregateAboveRange(aggr, root); + } + return total; + } + + private long aggregateBelowRange(Aggregate aggr, @Nullable AvlNode node) { + if (node == null) { + return 0L; + } + int cmp = this.comparator().compare(this.range.getLowerEndpoint(), ((AvlNode)node).elem); + if (cmp < 0) { + return this.aggregateBelowRange(aggr, ((AvlNode)node).left); + } + if (cmp == 0) { + switch (this.range.getLowerBoundType()) { + case OPEN: { + return (long)aggr.nodeAggregate(node) + aggr.treeAggregate(((AvlNode)node).left); + } + case CLOSED: { + return aggr.treeAggregate(((AvlNode)node).left); + } + } + throw new AssertionError(); + } + return aggr.treeAggregate(((AvlNode)node).left) + (long)aggr.nodeAggregate(node) + this.aggregateBelowRange(aggr, ((AvlNode)node).right); + } + + private long aggregateAboveRange(Aggregate aggr, @Nullable AvlNode node) { + if (node == null) { + return 0L; + } + int cmp = this.comparator().compare(this.range.getUpperEndpoint(), ((AvlNode)node).elem); + if (cmp > 0) { + return this.aggregateAboveRange(aggr, ((AvlNode)node).right); + } + if (cmp == 0) { + switch (this.range.getUpperBoundType()) { + case OPEN: { + return (long)aggr.nodeAggregate(node) + aggr.treeAggregate(((AvlNode)node).right); + } + case CLOSED: { + return aggr.treeAggregate(((AvlNode)node).right); + } + } + throw new AssertionError(); + } + return aggr.treeAggregate(((AvlNode)node).right) + (long)aggr.nodeAggregate(node) + this.aggregateAboveRange(aggr, ((AvlNode)node).left); + } + + @Override + public int size() { + return Ints.saturatedCast(this.aggregateForEntries(Aggregate.SIZE)); + } + + @Override + int distinctElements() { + return Ints.saturatedCast(this.aggregateForEntries(Aggregate.DISTINCT)); + } + + @Override + public int count(@Nullable Object element) { + try { + Object e = element; + AvlNode root = this.rootReference.get(); + if (!this.range.contains(e) || root == null) { + return 0; + } + return root.count(this.comparator(), e); + } + catch (ClassCastException e) { + return 0; + } + catch (NullPointerException e) { + return 0; + } + } + + @Override + public int add(@Nullable E element, int occurrences) { + CollectPreconditions.checkNonnegative(occurrences, "occurrences"); + if (occurrences == 0) { + return this.count(element); + } + Preconditions.checkArgument(this.range.contains(element)); + AvlNode root = this.rootReference.get(); + if (root == null) { + this.comparator().compare(element, element); + AvlNode newRoot = new AvlNode(element, occurrences); + TreeMultiset.successor(this.header, newRoot, this.header); + this.rootReference.checkAndSet(root, newRoot); + return 0; + } + int[] result = new int[1]; + AvlNode newRoot = root.add(this.comparator(), element, occurrences, result); + this.rootReference.checkAndSet(root, newRoot); + return result[0]; + } + + @Override + public int remove(@Nullable Object element, int occurrences) { + AvlNode newRoot; + CollectPreconditions.checkNonnegative(occurrences, "occurrences"); + if (occurrences == 0) { + return this.count(element); + } + AvlNode root = this.rootReference.get(); + int[] result = new int[1]; + try { + Object e = element; + if (!this.range.contains(e) || root == null) { + return 0; + } + newRoot = root.remove(this.comparator(), e, occurrences, result); + } + catch (ClassCastException e) { + return 0; + } + catch (NullPointerException e) { + return 0; + } + this.rootReference.checkAndSet(root, newRoot); + return result[0]; + } + + @Override + public int setCount(@Nullable E element, int count) { + CollectPreconditions.checkNonnegative(count, "count"); + if (!this.range.contains(element)) { + Preconditions.checkArgument(count == 0); + return 0; + } + AvlNode root = this.rootReference.get(); + if (root == null) { + if (count > 0) { + this.add(element, count); + } + return 0; + } + int[] result = new int[1]; + AvlNode newRoot = root.setCount(this.comparator(), element, count, result); + this.rootReference.checkAndSet(root, newRoot); + return result[0]; + } + + @Override + public boolean setCount(@Nullable E element, int oldCount, int newCount) { + CollectPreconditions.checkNonnegative(newCount, "newCount"); + CollectPreconditions.checkNonnegative(oldCount, "oldCount"); + Preconditions.checkArgument(this.range.contains(element)); + AvlNode root = this.rootReference.get(); + if (root == null) { + if (oldCount == 0) { + if (newCount > 0) { + this.add(element, newCount); + } + return true; + } + return false; + } + int[] result = new int[1]; + AvlNode newRoot = root.setCount(this.comparator(), element, oldCount, newCount, result); + this.rootReference.checkAndSet(root, newRoot); + return result[0] == oldCount; + } + + private Multiset.Entry wrapEntry(final AvlNode baseEntry) { + return new Multisets.AbstractEntry(){ + + @Override + public E getElement() { + return baseEntry.getElement(); + } + + @Override + public int getCount() { + int result = baseEntry.getCount(); + if (result == 0) { + return TreeMultiset.this.count(this.getElement()); + } + return result; + } + }; + } + + @Nullable + private AvlNode firstNode() { + AvlNode node; + AvlNode root = this.rootReference.get(); + if (root == null) { + return null; + } + if (this.range.hasLowerBound()) { + E endpoint = this.range.getLowerEndpoint(); + node = ((AvlNode)this.rootReference.get()).ceiling(this.comparator(), endpoint); + if (node == null) { + return null; + } + if (this.range.getLowerBoundType() == BoundType.OPEN && this.comparator().compare(endpoint, node.getElement()) == 0) { + node = node.succ; + } + } else { + node = ((AvlNode)this.header).succ; + } + return node == this.header || !this.range.contains(node.getElement()) ? null : node; + } + + @Nullable + private AvlNode lastNode() { + AvlNode node; + AvlNode root = this.rootReference.get(); + if (root == null) { + return null; + } + if (this.range.hasUpperBound()) { + E endpoint = this.range.getUpperEndpoint(); + node = ((AvlNode)this.rootReference.get()).floor(this.comparator(), endpoint); + if (node == null) { + return null; + } + if (this.range.getUpperBoundType() == BoundType.OPEN && this.comparator().compare(endpoint, node.getElement()) == 0) { + node = node.pred; + } + } else { + node = ((AvlNode)this.header).pred; + } + return node == this.header || !this.range.contains(node.getElement()) ? null : node; + } + + @Override + Iterator> entryIterator() { + return new Iterator>(){ + AvlNode current; + Multiset.Entry prevEntry; + { + this.current = TreeMultiset.this.firstNode(); + } + + @Override + public boolean hasNext() { + if (this.current == null) { + return false; + } + if (TreeMultiset.this.range.tooHigh(this.current.getElement())) { + this.current = null; + return false; + } + return true; + } + + @Override + public Multiset.Entry next() { + Multiset.Entry result; + if (!this.hasNext()) { + throw new NoSuchElementException(); + } + this.prevEntry = result = TreeMultiset.this.wrapEntry(this.current); + this.current = this.current.succ == TreeMultiset.this.header ? null : this.current.succ; + return result; + } + + @Override + public void remove() { + CollectPreconditions.checkRemove(this.prevEntry != null); + TreeMultiset.this.setCount(this.prevEntry.getElement(), 0); + this.prevEntry = null; + } + }; + } + + @Override + Iterator> descendingEntryIterator() { + return new Iterator>(){ + AvlNode current; + Multiset.Entry prevEntry; + { + this.current = TreeMultiset.this.lastNode(); + this.prevEntry = null; + } + + @Override + public boolean hasNext() { + if (this.current == null) { + return false; + } + if (TreeMultiset.this.range.tooLow(this.current.getElement())) { + this.current = null; + return false; + } + return true; + } + + @Override + public Multiset.Entry next() { + Multiset.Entry result; + if (!this.hasNext()) { + throw new NoSuchElementException(); + } + this.prevEntry = result = TreeMultiset.this.wrapEntry(this.current); + this.current = this.current.pred == TreeMultiset.this.header ? null : this.current.pred; + return result; + } + + @Override + public void remove() { + CollectPreconditions.checkRemove(this.prevEntry != null); + TreeMultiset.this.setCount(this.prevEntry.getElement(), 0); + this.prevEntry = null; + } + }; + } + + @Override + public SortedMultiset headMultiset(@Nullable E upperBound, BoundType boundType) { + return new TreeMultiset(this.rootReference, this.range.intersect(GeneralRange.upTo(this.comparator(), upperBound, boundType)), this.header); + } + + @Override + public SortedMultiset tailMultiset(@Nullable E lowerBound, BoundType boundType) { + return new TreeMultiset(this.rootReference, this.range.intersect(GeneralRange.downTo(this.comparator(), lowerBound, boundType)), this.header); + } + + static int distinctElements(@Nullable AvlNode node) { + return node == null ? 0 : ((AvlNode)node).distinctElements; + } + + private static void successor(AvlNode a, AvlNode b) { + ((AvlNode)a).succ = (AvlNode)b; + ((AvlNode)b).pred = (AvlNode)a; + } + + private static void successor(AvlNode a, AvlNode b, AvlNode c) { + TreeMultiset.successor(a, b); + TreeMultiset.successor(b, c); + } + + @GwtIncompatible(value="java.io.ObjectOutputStream") + private void writeObject(ObjectOutputStream stream) throws IOException { + stream.defaultWriteObject(); + stream.writeObject(this.elementSet().comparator()); + Serialization.writeMultiset(this, stream); + } + + @GwtIncompatible(value="java.io.ObjectInputStream") + private void readObject(ObjectInputStream stream) throws IOException, ClassNotFoundException { + stream.defaultReadObject(); + Comparator comparator = (Comparator)stream.readObject(); + Serialization.getFieldSetter(AbstractSortedMultiset.class, "comparator").set((AbstractSortedMultiset)this, comparator); + Serialization.getFieldSetter(TreeMultiset.class, "range").set(this, GeneralRange.all(comparator)); + Serialization.getFieldSetter(TreeMultiset.class, "rootReference").set(this, new Reference()); + AvlNode header = new AvlNode(null, 1); + Serialization.getFieldSetter(TreeMultiset.class, "header").set(this, header); + TreeMultiset.successor(header, header); + Serialization.populateMultiset(this, stream); + } + + private static final class AvlNode + extends Multisets.AbstractEntry { + @Nullable + private final E elem; + private int elemCount; + private int distinctElements; + private long totalCount; + private int height; + private AvlNode left; + private AvlNode right; + private AvlNode pred; + private AvlNode succ; + + AvlNode(@Nullable E elem, int elemCount) { + Preconditions.checkArgument(elemCount > 0); + this.elem = elem; + this.elemCount = elemCount; + this.totalCount = elemCount; + this.distinctElements = 1; + this.height = 1; + this.left = null; + this.right = null; + } + + public int count(Comparator comparator, E e) { + int cmp = comparator.compare(e, this.elem); + if (cmp < 0) { + return this.left == null ? 0 : this.left.count(comparator, e); + } + if (cmp > 0) { + return this.right == null ? 0 : this.right.count(comparator, e); + } + return this.elemCount; + } + + private AvlNode addRightChild(E e, int count) { + this.right = new AvlNode(e, count); + TreeMultiset.successor(this, this.right, this.succ); + this.height = Math.max(2, this.height); + ++this.distinctElements; + this.totalCount += (long)count; + return this; + } + + private AvlNode addLeftChild(E e, int count) { + this.left = new AvlNode(e, count); + TreeMultiset.successor(this.pred, this.left, this); + this.height = Math.max(2, this.height); + ++this.distinctElements; + this.totalCount += (long)count; + return this; + } + + AvlNode add(Comparator comparator, @Nullable E e, int count, int[] result) { + int cmp = comparator.compare(e, this.elem); + if (cmp < 0) { + AvlNode initLeft = this.left; + if (initLeft == null) { + result[0] = 0; + return this.addLeftChild(e, count); + } + int initHeight = initLeft.height; + this.left = initLeft.add(comparator, e, count, result); + if (result[0] == 0) { + ++this.distinctElements; + } + this.totalCount += (long)count; + return this.left.height == initHeight ? this : this.rebalance(); + } + if (cmp > 0) { + AvlNode initRight = this.right; + if (initRight == null) { + result[0] = 0; + return this.addRightChild(e, count); + } + int initHeight = initRight.height; + this.right = initRight.add(comparator, e, count, result); + if (result[0] == 0) { + ++this.distinctElements; + } + this.totalCount += (long)count; + return this.right.height == initHeight ? this : super.rebalance(); + } + result[0] = this.elemCount; + long resultCount = (long)this.elemCount + (long)count; + Preconditions.checkArgument(resultCount <= Integer.MAX_VALUE); + this.elemCount += count; + this.totalCount += (long)count; + return this; + } + + AvlNode remove(Comparator comparator, @Nullable E e, int count, int[] result) { + int cmp = comparator.compare(e, this.elem); + if (cmp < 0) { + AvlNode initLeft = this.left; + if (initLeft == null) { + result[0] = 0; + return this; + } + this.left = initLeft.remove(comparator, e, count, result); + if (result[0] > 0) { + if (count >= result[0]) { + --this.distinctElements; + this.totalCount -= (long)result[0]; + } else { + this.totalCount -= (long)count; + } + } + return result[0] == 0 ? this : this.rebalance(); + } + if (cmp > 0) { + AvlNode initRight = this.right; + if (initRight == null) { + result[0] = 0; + return this; + } + this.right = initRight.remove(comparator, e, count, result); + if (result[0] > 0) { + if (count >= result[0]) { + --this.distinctElements; + this.totalCount -= (long)result[0]; + } else { + this.totalCount -= (long)count; + } + } + return this.rebalance(); + } + result[0] = this.elemCount; + if (count >= this.elemCount) { + return this.deleteMe(); + } + this.elemCount -= count; + this.totalCount -= (long)count; + return this; + } + + AvlNode setCount(Comparator comparator, @Nullable E e, int count, int[] result) { + int cmp = comparator.compare(e, this.elem); + if (cmp < 0) { + AvlNode initLeft = this.left; + if (initLeft == null) { + result[0] = 0; + return count > 0 ? this.addLeftChild(e, count) : this; + } + this.left = initLeft.setCount(comparator, e, count, result); + if (count == 0 && result[0] != 0) { + --this.distinctElements; + } else if (count > 0 && result[0] == 0) { + ++this.distinctElements; + } + this.totalCount += (long)(count - result[0]); + return super.rebalance(); + } + if (cmp > 0) { + AvlNode initRight = this.right; + if (initRight == null) { + result[0] = 0; + return count > 0 ? super.addRightChild(e, count) : this; + } + this.right = initRight.setCount(comparator, e, count, result); + if (count == 0 && result[0] != 0) { + --this.distinctElements; + } else if (count > 0 && result[0] == 0) { + ++this.distinctElements; + } + this.totalCount += (long)(count - result[0]); + return super.rebalance(); + } + result[0] = this.elemCount; + if (count == 0) { + return this.deleteMe(); + } + this.totalCount += (long)(count - this.elemCount); + this.elemCount = count; + return this; + } + + AvlNode setCount(Comparator comparator, @Nullable E e, int expectedCount, int newCount, int[] result) { + int cmp = comparator.compare(e, this.elem); + if (cmp < 0) { + AvlNode initLeft = this.left; + if (initLeft == null) { + result[0] = 0; + if (expectedCount == 0 && newCount > 0) { + return this.addLeftChild(e, newCount); + } + return this; + } + this.left = initLeft.setCount(comparator, e, expectedCount, newCount, result); + if (result[0] == expectedCount) { + if (newCount == 0 && result[0] != 0) { + --this.distinctElements; + } else if (newCount > 0 && result[0] == 0) { + ++this.distinctElements; + } + this.totalCount += (long)(newCount - result[0]); + } + return this.rebalance(); + } + if (cmp > 0) { + AvlNode initRight = this.right; + if (initRight == null) { + result[0] = 0; + if (expectedCount == 0 && newCount > 0) { + return this.addRightChild(e, newCount); + } + return this; + } + this.right = initRight.setCount(comparator, e, expectedCount, newCount, result); + if (result[0] == expectedCount) { + if (newCount == 0 && result[0] != 0) { + --this.distinctElements; + } else if (newCount > 0 && result[0] == 0) { + ++this.distinctElements; + } + this.totalCount += (long)(newCount - result[0]); + } + return this.rebalance(); + } + result[0] = this.elemCount; + if (expectedCount == this.elemCount) { + if (newCount == 0) { + return this.deleteMe(); + } + this.totalCount += (long)(newCount - this.elemCount); + this.elemCount = newCount; + } + return this; + } + + private AvlNode deleteMe() { + int oldElemCount = this.elemCount; + this.elemCount = 0; + TreeMultiset.successor(this.pred, this.succ); + if (this.left == null) { + return this.right; + } + if (this.right == null) { + return this.left; + } + if (this.left.height >= this.right.height) { + AvlNode newTop = this.pred; + newTop.left = super.removeMax(newTop); + newTop.right = this.right; + newTop.distinctElements = this.distinctElements - 1; + newTop.totalCount = this.totalCount - (long)oldElemCount; + return super.rebalance(); + } + AvlNode newTop = this.succ; + newTop.right = super.removeMin(newTop); + newTop.left = this.left; + newTop.distinctElements = this.distinctElements - 1; + newTop.totalCount = this.totalCount - (long)oldElemCount; + return super.rebalance(); + } + + private AvlNode removeMin(AvlNode node) { + if (this.left == null) { + return this.right; + } + this.left = super.removeMin(node); + --this.distinctElements; + this.totalCount -= (long)node.elemCount; + return this.rebalance(); + } + + private AvlNode removeMax(AvlNode node) { + if (this.right == null) { + return this.left; + } + this.right = super.removeMax(node); + --this.distinctElements; + this.totalCount -= (long)node.elemCount; + return this.rebalance(); + } + + private void recomputeMultiset() { + this.distinctElements = 1 + TreeMultiset.distinctElements(this.left) + TreeMultiset.distinctElements(this.right); + this.totalCount = (long)this.elemCount + AvlNode.totalCount(this.left) + AvlNode.totalCount(this.right); + } + + private void recomputeHeight() { + this.height = 1 + Math.max(AvlNode.height(this.left), AvlNode.height(this.right)); + } + + private void recompute() { + this.recomputeMultiset(); + this.recomputeHeight(); + } + + private AvlNode rebalance() { + switch (this.balanceFactor()) { + case -2: { + if (super.balanceFactor() > 0) { + this.right = super.rotateRight(); + } + return this.rotateLeft(); + } + case 2: { + if (super.balanceFactor() < 0) { + this.left = super.rotateLeft(); + } + return this.rotateRight(); + } + } + this.recomputeHeight(); + return this; + } + + private int balanceFactor() { + return AvlNode.height(this.left) - AvlNode.height(this.right); + } + + private AvlNode rotateLeft() { + Preconditions.checkState(this.right != null); + AvlNode newTop = this.right; + this.right = newTop.left; + newTop.left = this; + newTop.totalCount = this.totalCount; + newTop.distinctElements = this.distinctElements; + this.recompute(); + super.recomputeHeight(); + return newTop; + } + + private AvlNode rotateRight() { + Preconditions.checkState(this.left != null); + AvlNode newTop = this.left; + this.left = newTop.right; + newTop.right = this; + newTop.totalCount = this.totalCount; + newTop.distinctElements = this.distinctElements; + this.recompute(); + super.recomputeHeight(); + return newTop; + } + + private static long totalCount(@Nullable AvlNode node) { + return node == null ? 0L : node.totalCount; + } + + private static int height(@Nullable AvlNode node) { + return node == null ? 0 : node.height; + } + + @Nullable + private AvlNode ceiling(Comparator comparator, E e) { + int cmp = comparator.compare(e, this.elem); + if (cmp < 0) { + return this.left == null ? this : MoreObjects.firstNonNull(super.ceiling(comparator, e), this); + } + if (cmp == 0) { + return this; + } + return this.right == null ? null : super.ceiling(comparator, e); + } + + @Nullable + private AvlNode floor(Comparator comparator, E e) { + int cmp = comparator.compare(e, this.elem); + if (cmp > 0) { + return this.right == null ? this : MoreObjects.firstNonNull(super.floor(comparator, e), this); + } + if (cmp == 0) { + return this; + } + return this.left == null ? null : super.floor(comparator, e); + } + + @Override + public E getElement() { + return this.elem; + } + + @Override + public int getCount() { + return this.elemCount; + } + + @Override + public String toString() { + return Multisets.immutableEntry(this.getElement(), this.getCount()).toString(); + } + } + + private static final class Reference { + @Nullable + private T value; + + private Reference() { + } + + @Nullable + public T get() { + return this.value; + } + + public void checkAndSet(@Nullable T expected, T newValue) { + if (this.value != expected) { + throw new ConcurrentModificationException(); + } + this.value = newValue; + } + } + + private static enum Aggregate { + SIZE{ + + @Override + int nodeAggregate(AvlNode node) { + return ((AvlNode)node).elemCount; + } + + @Override + long treeAggregate(@Nullable AvlNode root) { + return root == null ? 0L : ((AvlNode)root).totalCount; + } + } + , + DISTINCT{ + + @Override + int nodeAggregate(AvlNode node) { + return 1; + } + + @Override + long treeAggregate(@Nullable AvlNode root) { + return root == null ? 0L : (long)((AvlNode)root).distinctElements; + } + }; + + + abstract int nodeAggregate(AvlNode var1); + + abstract long treeAggregate(@Nullable AvlNode var1); + } +} diff --git a/src/com/google/common/collect/TreeRangeMap.java b/src/com/google/common/collect/TreeRangeMap.java new file mode 100644 index 0000000..11780ce --- /dev/null +++ b/src/com/google/common/collect/TreeRangeMap.java @@ -0,0 +1,526 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.Beta; +import com.google.common.annotations.GwtIncompatible; +import com.google.common.base.MoreObjects; +import com.google.common.base.Preconditions; +import com.google.common.base.Predicate; +import com.google.common.base.Predicates; +import com.google.common.collect.AbstractIterator; +import com.google.common.collect.AbstractMapEntry; +import com.google.common.collect.Cut; +import com.google.common.collect.Iterators; +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import com.google.common.collect.Range; +import com.google.common.collect.RangeMap; +import java.util.AbstractMap; +import java.util.AbstractSet; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.Iterator; +import java.util.Map; +import java.util.NavigableMap; +import java.util.NoSuchElementException; +import java.util.Set; +import javax.annotation.Nullable; + +@Beta +@GwtIncompatible(value="NavigableMap") +public final class TreeRangeMap +implements RangeMap { + private final NavigableMap, RangeMapEntry> entriesByLowerBound = Maps.newTreeMap(); + private static final RangeMap EMPTY_SUB_RANGE_MAP = new RangeMap(){ + + @Nullable + public Object get(Comparable key) { + return null; + } + + @Nullable + public Map.Entry getEntry(Comparable key) { + return null; + } + + public Range span() { + throw new NoSuchElementException(); + } + + public void put(Range range, Object value) { + Preconditions.checkNotNull(range); + String string = String.valueOf(String.valueOf(range)); + throw new IllegalArgumentException(new StringBuilder(46 + string.length()).append("Cannot insert range ").append(string).append(" into an empty subRangeMap").toString()); + } + + public void putAll(RangeMap rangeMap) { + if (!rangeMap.asMapOfRanges().isEmpty()) { + throw new IllegalArgumentException("Cannot putAll(nonEmptyRangeMap) into an empty subRangeMap"); + } + } + + @Override + public void clear() { + } + + public void remove(Range range) { + Preconditions.checkNotNull(range); + } + + public Map asMapOfRanges() { + return Collections.emptyMap(); + } + + public RangeMap subRangeMap(Range range) { + Preconditions.checkNotNull(range); + return this; + } + }; + + public static TreeRangeMap create() { + return new TreeRangeMap(); + } + + private TreeRangeMap() { + } + + @Override + @Nullable + public V get(K key) { + Map.Entry, V> entry = this.getEntry(key); + return entry == null ? null : (V)entry.getValue(); + } + + @Override + @Nullable + public Map.Entry, V> getEntry(K key) { + Map.Entry, RangeMapEntry> mapEntry = this.entriesByLowerBound.floorEntry(Cut.belowValue(key)); + if (mapEntry != null && mapEntry.getValue().contains(key)) { + return mapEntry.getValue(); + } + return null; + } + + @Override + public void put(Range range, V value) { + if (!range.isEmpty()) { + Preconditions.checkNotNull(value); + this.remove(range); + this.entriesByLowerBound.put(range.lowerBound, new RangeMapEntry(range, value)); + } + } + + @Override + public void putAll(RangeMap rangeMap) { + for (Map.Entry, V> entry : rangeMap.asMapOfRanges().entrySet()) { + this.put(entry.getKey(), entry.getValue()); + } + } + + @Override + public void clear() { + this.entriesByLowerBound.clear(); + } + + @Override + public Range span() { + Map.Entry, RangeMapEntry> firstEntry = this.entriesByLowerBound.firstEntry(); + Map.Entry, RangeMapEntry> lastEntry = this.entriesByLowerBound.lastEntry(); + if (firstEntry == null) { + throw new NoSuchElementException(); + } + return Range.create(((Range)firstEntry.getValue().getKey()).lowerBound, ((Range)lastEntry.getValue().getKey()).upperBound); + } + + private void putRangeMapEntry(Cut lowerBound, Cut upperBound, V value) { + this.entriesByLowerBound.put(lowerBound, new RangeMapEntry(lowerBound, upperBound, value)); + } + + @Override + public void remove(Range rangeToRemove) { + RangeMapEntry rangeMapEntry; + Map.Entry mapEntryAboveToTruncate; + RangeMapEntry rangeMapEntry2; + if (rangeToRemove.isEmpty()) { + return; + } + Map.Entry mapEntryBelowToTruncate = this.entriesByLowerBound.lowerEntry(rangeToRemove.lowerBound); + if (mapEntryBelowToTruncate != null && (rangeMapEntry2 = mapEntryBelowToTruncate.getValue()).getUpperBound().compareTo(rangeToRemove.lowerBound) > 0) { + if (rangeMapEntry2.getUpperBound().compareTo(rangeToRemove.upperBound) > 0) { + this.putRangeMapEntry(rangeToRemove.upperBound, rangeMapEntry2.getUpperBound(), mapEntryBelowToTruncate.getValue().getValue()); + } + this.putRangeMapEntry(rangeMapEntry2.getLowerBound(), rangeToRemove.lowerBound, mapEntryBelowToTruncate.getValue().getValue()); + } + if ((mapEntryAboveToTruncate = this.entriesByLowerBound.lowerEntry(rangeToRemove.upperBound)) != null && (rangeMapEntry = mapEntryAboveToTruncate.getValue()).getUpperBound().compareTo(rangeToRemove.upperBound) > 0) { + this.putRangeMapEntry(rangeToRemove.upperBound, rangeMapEntry.getUpperBound(), mapEntryAboveToTruncate.getValue().getValue()); + this.entriesByLowerBound.remove(rangeToRemove.lowerBound); + } + this.entriesByLowerBound.subMap(rangeToRemove.lowerBound, rangeToRemove.upperBound).clear(); + } + + @Override + public Map, V> asMapOfRanges() { + return new AsMapOfRanges(); + } + + @Override + public RangeMap subRangeMap(Range subRange) { + if (subRange.equals(Range.all())) { + return this; + } + return new SubRangeMap(subRange); + } + + private RangeMap emptySubRangeMap() { + return EMPTY_SUB_RANGE_MAP; + } + + @Override + public boolean equals(@Nullable Object o) { + if (o instanceof RangeMap) { + RangeMap rangeMap = (RangeMap)o; + return this.asMapOfRanges().equals(rangeMap.asMapOfRanges()); + } + return false; + } + + @Override + public int hashCode() { + return this.asMapOfRanges().hashCode(); + } + + @Override + public String toString() { + return this.entriesByLowerBound.values().toString(); + } + + private class SubRangeMap + implements RangeMap { + private final Range subRange; + + SubRangeMap(Range subRange) { + this.subRange = subRange; + } + + @Override + @Nullable + public V get(K key) { + return this.subRange.contains(key) ? (Object)TreeRangeMap.this.get(key) : null; + } + + @Override + @Nullable + public Map.Entry, V> getEntry(K key) { + Map.Entry entry; + if (this.subRange.contains(key) && (entry = TreeRangeMap.this.getEntry(key)) != null) { + return Maps.immutableEntry(entry.getKey().intersection(this.subRange), entry.getValue()); + } + return null; + } + + @Override + public Range span() { + Cut lowerBound; + Map.Entry lowerEntry = TreeRangeMap.this.entriesByLowerBound.floorEntry(this.subRange.lowerBound); + if (lowerEntry != null && ((RangeMapEntry)lowerEntry.getValue()).getUpperBound().compareTo(this.subRange.lowerBound) > 0) { + lowerBound = this.subRange.lowerBound; + } else { + lowerBound = TreeRangeMap.this.entriesByLowerBound.ceilingKey(this.subRange.lowerBound); + if (lowerBound == null || lowerBound.compareTo(this.subRange.upperBound) >= 0) { + throw new NoSuchElementException(); + } + } + Map.Entry upperEntry = TreeRangeMap.this.entriesByLowerBound.lowerEntry(this.subRange.upperBound); + if (upperEntry == null) { + throw new NoSuchElementException(); + } + Cut upperBound = ((RangeMapEntry)upperEntry.getValue()).getUpperBound().compareTo(this.subRange.upperBound) >= 0 ? this.subRange.upperBound : ((RangeMapEntry)upperEntry.getValue()).getUpperBound(); + return Range.create(lowerBound, upperBound); + } + + @Override + public void put(Range range, V value) { + Preconditions.checkArgument(this.subRange.encloses(range), "Cannot put range %s into a subRangeMap(%s)", range, this.subRange); + TreeRangeMap.this.put(range, value); + } + + @Override + public void putAll(RangeMap rangeMap) { + if (rangeMap.asMapOfRanges().isEmpty()) { + return; + } + Range span = rangeMap.span(); + Preconditions.checkArgument(this.subRange.encloses(span), "Cannot putAll rangeMap with span %s into a subRangeMap(%s)", span, this.subRange); + TreeRangeMap.this.putAll(rangeMap); + } + + @Override + public void clear() { + TreeRangeMap.this.remove(this.subRange); + } + + @Override + public void remove(Range range) { + if (range.isConnected(this.subRange)) { + TreeRangeMap.this.remove(range.intersection(this.subRange)); + } + } + + @Override + public RangeMap subRangeMap(Range range) { + if (!range.isConnected(this.subRange)) { + return TreeRangeMap.this.emptySubRangeMap(); + } + return TreeRangeMap.this.subRangeMap(range.intersection(this.subRange)); + } + + @Override + public Map, V> asMapOfRanges() { + return new SubRangeMapAsMap(); + } + + @Override + public boolean equals(@Nullable Object o) { + if (o instanceof RangeMap) { + RangeMap rangeMap = (RangeMap)o; + return this.asMapOfRanges().equals(rangeMap.asMapOfRanges()); + } + return false; + } + + @Override + public int hashCode() { + return this.asMapOfRanges().hashCode(); + } + + @Override + public String toString() { + return this.asMapOfRanges().toString(); + } + + class SubRangeMapAsMap + extends AbstractMap, V> { + SubRangeMapAsMap() { + } + + @Override + public boolean containsKey(Object key) { + return this.get(key) != null; + } + + @Override + public V get(Object key) { + try { + if (key instanceof Range) { + Range r = (Range)key; + if (!SubRangeMap.this.subRange.encloses(r) || r.isEmpty()) { + return null; + } + RangeMapEntry candidate = null; + if (r.lowerBound.compareTo(((SubRangeMap)SubRangeMap.this).subRange.lowerBound) == 0) { + Map.Entry entry = TreeRangeMap.this.entriesByLowerBound.floorEntry(r.lowerBound); + if (entry != null) { + candidate = (RangeMapEntry)entry.getValue(); + } + } else { + candidate = (RangeMapEntry)TreeRangeMap.this.entriesByLowerBound.get(r.lowerBound); + } + if (candidate != null && ((Range)candidate.getKey()).isConnected(SubRangeMap.this.subRange) && ((Range)candidate.getKey()).intersection(SubRangeMap.this.subRange).equals(r)) { + return candidate.getValue(); + } + } + } + catch (ClassCastException e) { + return null; + } + return null; + } + + @Override + public V remove(Object key) { + Object value = this.get(key); + if (value != null) { + Range range = (Range)key; + TreeRangeMap.this.remove(range); + return value; + } + return null; + } + + @Override + public void clear() { + SubRangeMap.this.clear(); + } + + private boolean removeEntryIf(Predicate, V>> predicate) { + ArrayList toRemove = Lists.newArrayList(); + for (Map.Entry entry : this.entrySet()) { + if (!predicate.apply(entry)) continue; + toRemove.add(entry.getKey()); + } + for (Range range : toRemove) { + TreeRangeMap.this.remove(range); + } + return !toRemove.isEmpty(); + } + + @Override + public Set> keySet() { + return new Maps.KeySet, V>(this){ + + @Override + public boolean remove(@Nullable Object o) { + return SubRangeMapAsMap.this.remove(o) != null; + } + + @Override + public boolean retainAll(Collection c) { + return SubRangeMapAsMap.this.removeEntryIf(Predicates.compose(Predicates.not(Predicates.in(c)), Maps.keyFunction())); + } + }; + } + + @Override + public Set, V>> entrySet() { + return new Maps.EntrySet, V>(){ + + @Override + Map, V> map() { + return SubRangeMapAsMap.this; + } + + @Override + public Iterator, V>> iterator() { + if (SubRangeMap.this.subRange.isEmpty()) { + return Iterators.emptyIterator(); + } + Cut cutToStart = MoreObjects.firstNonNull(TreeRangeMap.this.entriesByLowerBound.floorKey(((SubRangeMap)SubRangeMap.this).subRange.lowerBound), ((SubRangeMap)SubRangeMap.this).subRange.lowerBound); + final Iterator backingItr = TreeRangeMap.this.entriesByLowerBound.tailMap(cutToStart, true).values().iterator(); + return new AbstractIterator, V>>(){ + + @Override + protected Map.Entry, V> computeNext() { + RangeMapEntry entry; + while (backingItr.hasNext() && (entry = (RangeMapEntry)backingItr.next()).getLowerBound().compareTo(((SubRangeMap)SubRangeMap.this).subRange.upperBound) < 0) { + if (entry.getUpperBound().compareTo(((SubRangeMap)SubRangeMap.this).subRange.lowerBound) <= 0) continue; + return Maps.immutableEntry(((Range)entry.getKey()).intersection(SubRangeMap.this.subRange), entry.getValue()); + } + return (Map.Entry)this.endOfData(); + } + }; + } + + @Override + public boolean retainAll(Collection c) { + return SubRangeMapAsMap.this.removeEntryIf(Predicates.not(Predicates.in(c))); + } + + @Override + public int size() { + return Iterators.size(this.iterator()); + } + + @Override + public boolean isEmpty() { + return !this.iterator().hasNext(); + } + }; + } + + @Override + public Collection values() { + return new Maps.Values, V>(this){ + + @Override + public boolean removeAll(Collection c) { + return SubRangeMapAsMap.this.removeEntryIf(Predicates.compose(Predicates.in(c), Maps.valueFunction())); + } + + @Override + public boolean retainAll(Collection c) { + return SubRangeMapAsMap.this.removeEntryIf(Predicates.compose(Predicates.not(Predicates.in(c)), Maps.valueFunction())); + } + }; + } + } + } + + private final class AsMapOfRanges + extends AbstractMap, V> { + private AsMapOfRanges() { + } + + @Override + public boolean containsKey(@Nullable Object key) { + return this.get(key) != null; + } + + @Override + public V get(@Nullable Object key) { + if (key instanceof Range) { + Range range = (Range)key; + RangeMapEntry rangeMapEntry = (RangeMapEntry)TreeRangeMap.this.entriesByLowerBound.get(range.lowerBound); + if (rangeMapEntry != null && ((Range)rangeMapEntry.getKey()).equals(range)) { + return rangeMapEntry.getValue(); + } + } + return null; + } + + @Override + public Set, V>> entrySet() { + return new AbstractSet, V>>(){ + + @Override + public Iterator, V>> iterator() { + return TreeRangeMap.this.entriesByLowerBound.values().iterator(); + } + + @Override + public int size() { + return TreeRangeMap.this.entriesByLowerBound.size(); + } + }; + } + } + + private static final class RangeMapEntry + extends AbstractMapEntry, V> { + private final Range range; + private final V value; + + RangeMapEntry(Cut lowerBound, Cut upperBound, V value) { + this(Range.create(lowerBound, upperBound), value); + } + + RangeMapEntry(Range range, V value) { + this.range = range; + this.value = value; + } + + @Override + public Range getKey() { + return this.range; + } + + @Override + public V getValue() { + return this.value; + } + + public boolean contains(K value) { + return this.range.contains(value); + } + + Cut getLowerBound() { + return this.range.lowerBound; + } + + Cut getUpperBound() { + return this.range.upperBound; + } + } +} diff --git a/src/com/google/common/collect/TreeRangeSet.java b/src/com/google/common/collect/TreeRangeSet.java new file mode 100644 index 0000000..36399d9 --- /dev/null +++ b/src/com/google/common/collect/TreeRangeSet.java @@ -0,0 +1,694 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.Beta; +import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.VisibleForTesting; +import com.google.common.base.MoreObjects; +import com.google.common.base.Preconditions; +import com.google.common.collect.AbstractIterator; +import com.google.common.collect.AbstractNavigableMap; +import com.google.common.collect.AbstractRangeSet; +import com.google.common.collect.BoundType; +import com.google.common.collect.Cut; +import com.google.common.collect.ForwardingCollection; +import com.google.common.collect.ImmutableRangeSet; +import com.google.common.collect.ImmutableSortedMap; +import com.google.common.collect.Iterators; +import com.google.common.collect.Maps; +import com.google.common.collect.Ordering; +import com.google.common.collect.PeekingIterator; +import com.google.common.collect.Range; +import com.google.common.collect.RangeSet; +import com.google.common.collect.Sets; +import java.util.Collection; +import java.util.Comparator; +import java.util.Iterator; +import java.util.Map; +import java.util.NavigableMap; +import java.util.NoSuchElementException; +import java.util.Set; +import java.util.TreeMap; +import javax.annotation.Nullable; + +@Beta +@GwtIncompatible(value="uses NavigableMap") +public class TreeRangeSet> +extends AbstractRangeSet { + @VisibleForTesting + final NavigableMap, Range> rangesByLowerBound; + private transient Set> asRanges; + private transient RangeSet complement; + + public static > TreeRangeSet create() { + return new TreeRangeSet(new TreeMap, Range>()); + } + + public static > TreeRangeSet create(RangeSet rangeSet) { + TreeRangeSet result = TreeRangeSet.create(); + result.addAll((RangeSet)rangeSet); + return result; + } + + private TreeRangeSet(NavigableMap, Range> rangesByLowerCut) { + this.rangesByLowerBound = rangesByLowerCut; + } + + @Override + public Set> asRanges() { + AsRanges result = this.asRanges; + return result == null ? (this.asRanges = new AsRanges()) : result; + } + + @Override + @Nullable + public Range rangeContaining(C value) { + Preconditions.checkNotNull(value); + Map.Entry, Range> floorEntry = this.rangesByLowerBound.floorEntry(Cut.belowValue(value)); + if (floorEntry != null && floorEntry.getValue().contains(value)) { + return floorEntry.getValue(); + } + return null; + } + + @Override + public boolean encloses(Range range) { + Preconditions.checkNotNull(range); + Map.Entry floorEntry = this.rangesByLowerBound.floorEntry(range.lowerBound); + return floorEntry != null && floorEntry.getValue().encloses(range); + } + + @Nullable + private Range rangeEnclosing(Range range) { + Preconditions.checkNotNull(range); + Map.Entry floorEntry = this.rangesByLowerBound.floorEntry(range.lowerBound); + return floorEntry != null && floorEntry.getValue().encloses(range) ? floorEntry.getValue() : null; + } + + @Override + public Range span() { + Map.Entry, Range> firstEntry = this.rangesByLowerBound.firstEntry(); + Map.Entry, Range> lastEntry = this.rangesByLowerBound.lastEntry(); + if (firstEntry == null) { + throw new NoSuchElementException(); + } + return Range.create(firstEntry.getValue().lowerBound, lastEntry.getValue().upperBound); + } + + @Override + public void add(Range rangeToAdd) { + Map.Entry entryBelowUB; + Preconditions.checkNotNull(rangeToAdd); + if (rangeToAdd.isEmpty()) { + return; + } + Cut lbToAdd = rangeToAdd.lowerBound; + Cut ubToAdd = rangeToAdd.upperBound; + Map.Entry entryBelowLB = this.rangesByLowerBound.lowerEntry(lbToAdd); + if (entryBelowLB != null) { + Range rangeBelowLB = entryBelowLB.getValue(); + if (rangeBelowLB.upperBound.compareTo(lbToAdd) >= 0) { + if (rangeBelowLB.upperBound.compareTo(ubToAdd) >= 0) { + ubToAdd = rangeBelowLB.upperBound; + } + lbToAdd = rangeBelowLB.lowerBound; + } + } + if ((entryBelowUB = this.rangesByLowerBound.floorEntry(ubToAdd)) != null) { + Range rangeBelowUB = entryBelowUB.getValue(); + if (rangeBelowUB.upperBound.compareTo(ubToAdd) >= 0) { + ubToAdd = rangeBelowUB.upperBound; + } + } + this.rangesByLowerBound.subMap(lbToAdd, ubToAdd).clear(); + this.replaceRangeWithSameLowerBound(Range.create(lbToAdd, ubToAdd)); + } + + @Override + public void remove(Range rangeToRemove) { + Map.Entry entryBelowUB; + Preconditions.checkNotNull(rangeToRemove); + if (rangeToRemove.isEmpty()) { + return; + } + Map.Entry entryBelowLB = this.rangesByLowerBound.lowerEntry(rangeToRemove.lowerBound); + if (entryBelowLB != null) { + Range rangeBelowLB = entryBelowLB.getValue(); + if (rangeBelowLB.upperBound.compareTo(rangeToRemove.lowerBound) >= 0) { + if (rangeToRemove.hasUpperBound() && rangeBelowLB.upperBound.compareTo(rangeToRemove.upperBound) >= 0) { + this.replaceRangeWithSameLowerBound(Range.create(rangeToRemove.upperBound, rangeBelowLB.upperBound)); + } + this.replaceRangeWithSameLowerBound(Range.create(rangeBelowLB.lowerBound, rangeToRemove.lowerBound)); + } + } + if ((entryBelowUB = this.rangesByLowerBound.floorEntry(rangeToRemove.upperBound)) != null) { + Range rangeBelowUB = entryBelowUB.getValue(); + if (rangeToRemove.hasUpperBound() && rangeBelowUB.upperBound.compareTo(rangeToRemove.upperBound) >= 0) { + this.replaceRangeWithSameLowerBound(Range.create(rangeToRemove.upperBound, rangeBelowUB.upperBound)); + } + } + this.rangesByLowerBound.subMap(rangeToRemove.lowerBound, rangeToRemove.upperBound).clear(); + } + + private void replaceRangeWithSameLowerBound(Range range) { + if (range.isEmpty()) { + this.rangesByLowerBound.remove(range.lowerBound); + } else { + this.rangesByLowerBound.put(range.lowerBound, range); + } + } + + @Override + public RangeSet complement() { + Complement result = this.complement; + return result == null ? (this.complement = new Complement()) : result; + } + + @Override + public RangeSet subRangeSet(Range view) { + return view.equals(Range.all()) ? this : new SubRangeSet(view); + } + + private final class SubRangeSet + extends TreeRangeSet { + private final Range restriction; + + SubRangeSet(Range restriction) { + super(new SubRangeSetRangesByLowerBound(Range.all(), restriction, TreeRangeSet.this.rangesByLowerBound)); + this.restriction = restriction; + } + + @Override + public boolean encloses(Range range) { + if (!this.restriction.isEmpty() && this.restriction.encloses(range)) { + Range enclosing = TreeRangeSet.this.rangeEnclosing(range); + return enclosing != null && !enclosing.intersection(this.restriction).isEmpty(); + } + return false; + } + + @Override + @Nullable + public Range rangeContaining(C value) { + if (!this.restriction.contains(value)) { + return null; + } + Range result = TreeRangeSet.this.rangeContaining(value); + return result == null ? null : result.intersection(this.restriction); + } + + @Override + public void add(Range rangeToAdd) { + Preconditions.checkArgument(this.restriction.encloses(rangeToAdd), "Cannot add range %s to subRangeSet(%s)", rangeToAdd, this.restriction); + super.add(rangeToAdd); + } + + @Override + public void remove(Range rangeToRemove) { + if (rangeToRemove.isConnected(this.restriction)) { + TreeRangeSet.this.remove(rangeToRemove.intersection(this.restriction)); + } + } + + @Override + public boolean contains(C value) { + return this.restriction.contains(value) && TreeRangeSet.this.contains((Comparable)value); + } + + @Override + public void clear() { + TreeRangeSet.this.remove(this.restriction); + } + + @Override + public RangeSet subRangeSet(Range view) { + if (view.encloses(this.restriction)) { + return this; + } + if (view.isConnected(this.restriction)) { + return new SubRangeSet(this.restriction.intersection(view)); + } + return ImmutableRangeSet.of(); + } + } + + private static final class SubRangeSetRangesByLowerBound> + extends AbstractNavigableMap, Range> { + private final Range> lowerBoundWindow; + private final Range restriction; + private final NavigableMap, Range> rangesByLowerBound; + private final NavigableMap, Range> rangesByUpperBound; + + private SubRangeSetRangesByLowerBound(Range> lowerBoundWindow, Range restriction, NavigableMap, Range> rangesByLowerBound) { + this.lowerBoundWindow = Preconditions.checkNotNull(lowerBoundWindow); + this.restriction = Preconditions.checkNotNull(restriction); + this.rangesByLowerBound = Preconditions.checkNotNull(rangesByLowerBound); + this.rangesByUpperBound = new RangesByUpperBound(rangesByLowerBound); + } + + private NavigableMap, Range> subMap(Range> window) { + if (!window.isConnected(this.lowerBoundWindow)) { + return ImmutableSortedMap.of(); + } + return new SubRangeSetRangesByLowerBound(this.lowerBoundWindow.intersection(window), this.restriction, this.rangesByLowerBound); + } + + @Override + public NavigableMap, Range> subMap(Cut fromKey, boolean fromInclusive, Cut toKey, boolean toInclusive) { + return this.subMap(Range.range(fromKey, BoundType.forBoolean(fromInclusive), toKey, BoundType.forBoolean(toInclusive))); + } + + @Override + public NavigableMap, Range> headMap(Cut toKey, boolean inclusive) { + return this.subMap(Range.upTo(toKey, BoundType.forBoolean(inclusive))); + } + + @Override + public NavigableMap, Range> tailMap(Cut fromKey, boolean inclusive) { + return this.subMap(Range.downTo(fromKey, BoundType.forBoolean(inclusive))); + } + + @Override + public Comparator> comparator() { + return Ordering.natural(); + } + + @Override + public boolean containsKey(@Nullable Object key) { + return this.get(key) != null; + } + + @Override + @Nullable + public Range get(@Nullable Object key) { + if (key instanceof Cut) { + try { + Cut cut = (Cut)key; + if (!this.lowerBoundWindow.contains(cut) || cut.compareTo(this.restriction.lowerBound) < 0 || cut.compareTo(this.restriction.upperBound) >= 0) { + return null; + } + if (cut.equals(this.restriction.lowerBound)) { + Range candidate = Maps.valueOrNull(this.rangesByLowerBound.floorEntry(cut)); + if (candidate != null && candidate.upperBound.compareTo(this.restriction.lowerBound) > 0) { + return candidate.intersection(this.restriction); + } + } else { + Range result = (Range)this.rangesByLowerBound.get(cut); + if (result != null) { + return result.intersection(this.restriction); + } + } + } + catch (ClassCastException e) { + return null; + } + } + return null; + } + + @Override + Iterator, Range>> entryIterator() { + if (this.restriction.isEmpty()) { + return Iterators.emptyIterator(); + } + if (this.lowerBoundWindow.upperBound.isLessThan(this.restriction.lowerBound)) { + return Iterators.emptyIterator(); + } + final Iterator completeRangeItr = this.lowerBoundWindow.lowerBound.isLessThan(this.restriction.lowerBound) ? this.rangesByUpperBound.tailMap(this.restriction.lowerBound, false).values().iterator() : this.rangesByLowerBound.tailMap((Cut)this.lowerBoundWindow.lowerBound.endpoint(), this.lowerBoundWindow.lowerBoundType() == BoundType.CLOSED).values().iterator(); + final Cut upperBoundOnLowerBounds = Ordering.natural().min(this.lowerBoundWindow.upperBound, Cut.belowValue(this.restriction.upperBound)); + return new AbstractIterator, Range>>(){ + + @Override + protected Map.Entry, Range> computeNext() { + if (!completeRangeItr.hasNext()) { + return (Map.Entry)this.endOfData(); + } + Range nextRange = (Range)completeRangeItr.next(); + if (upperBoundOnLowerBounds.isLessThan(nextRange.lowerBound)) { + return (Map.Entry)this.endOfData(); + } + nextRange = nextRange.intersection(SubRangeSetRangesByLowerBound.this.restriction); + return Maps.immutableEntry(nextRange.lowerBound, nextRange); + } + }; + } + + @Override + Iterator, Range>> descendingEntryIterator() { + if (this.restriction.isEmpty()) { + return Iterators.emptyIterator(); + } + Cut upperBoundOnLowerBounds = Ordering.natural().min(this.lowerBoundWindow.upperBound, Cut.belowValue(this.restriction.upperBound)); + final Iterator completeRangeItr = this.rangesByLowerBound.headMap(upperBoundOnLowerBounds.endpoint(), upperBoundOnLowerBounds.typeAsUpperBound() == BoundType.CLOSED).descendingMap().values().iterator(); + return new AbstractIterator, Range>>(){ + + @Override + protected Map.Entry, Range> computeNext() { + if (!completeRangeItr.hasNext()) { + return (Map.Entry)this.endOfData(); + } + Range nextRange = (Range)completeRangeItr.next(); + if (((SubRangeSetRangesByLowerBound)SubRangeSetRangesByLowerBound.this).restriction.lowerBound.compareTo(nextRange.upperBound) >= 0) { + return (Map.Entry)this.endOfData(); + } + nextRange = nextRange.intersection(SubRangeSetRangesByLowerBound.this.restriction); + if (SubRangeSetRangesByLowerBound.this.lowerBoundWindow.contains(nextRange.lowerBound)) { + return Maps.immutableEntry(nextRange.lowerBound, nextRange); + } + return (Map.Entry)this.endOfData(); + } + }; + } + + @Override + public int size() { + return Iterators.size(this.entryIterator()); + } + } + + private final class Complement + extends TreeRangeSet { + Complement() { + super(new ComplementRangesByLowerBound(TreeRangeSet.this.rangesByLowerBound)); + } + + @Override + public void add(Range rangeToAdd) { + TreeRangeSet.this.remove(rangeToAdd); + } + + @Override + public void remove(Range rangeToRemove) { + TreeRangeSet.this.add(rangeToRemove); + } + + @Override + public boolean contains(C value) { + return !TreeRangeSet.this.contains((Comparable)value); + } + + @Override + public RangeSet complement() { + return TreeRangeSet.this; + } + } + + private static final class ComplementRangesByLowerBound> + extends AbstractNavigableMap, Range> { + private final NavigableMap, Range> positiveRangesByLowerBound; + private final NavigableMap, Range> positiveRangesByUpperBound; + private final Range> complementLowerBoundWindow; + + ComplementRangesByLowerBound(NavigableMap, Range> positiveRangesByLowerBound) { + this(positiveRangesByLowerBound, Range.all()); + } + + private ComplementRangesByLowerBound(NavigableMap, Range> positiveRangesByLowerBound, Range> window) { + this.positiveRangesByLowerBound = positiveRangesByLowerBound; + this.positiveRangesByUpperBound = new RangesByUpperBound(positiveRangesByLowerBound); + this.complementLowerBoundWindow = window; + } + + private NavigableMap, Range> subMap(Range> subWindow) { + if (!this.complementLowerBoundWindow.isConnected(subWindow)) { + return ImmutableSortedMap.of(); + } + subWindow = subWindow.intersection(this.complementLowerBoundWindow); + return new ComplementRangesByLowerBound(this.positiveRangesByLowerBound, subWindow); + } + + @Override + public NavigableMap, Range> subMap(Cut fromKey, boolean fromInclusive, Cut toKey, boolean toInclusive) { + return this.subMap(Range.range(fromKey, BoundType.forBoolean(fromInclusive), toKey, BoundType.forBoolean(toInclusive))); + } + + @Override + public NavigableMap, Range> headMap(Cut toKey, boolean inclusive) { + return this.subMap(Range.upTo(toKey, BoundType.forBoolean(inclusive))); + } + + @Override + public NavigableMap, Range> tailMap(Cut fromKey, boolean inclusive) { + return this.subMap(Range.downTo(fromKey, BoundType.forBoolean(inclusive))); + } + + @Override + public Comparator> comparator() { + return Ordering.natural(); + } + + @Override + Iterator, Range>> entryIterator() { + Cut firstComplementRangeLowerBound; + Collection positiveRanges = this.complementLowerBoundWindow.hasLowerBound() ? this.positiveRangesByUpperBound.tailMap(this.complementLowerBoundWindow.lowerEndpoint(), this.complementLowerBoundWindow.lowerBoundType() == BoundType.CLOSED).values() : this.positiveRangesByUpperBound.values(); + final PeekingIterator positiveItr = Iterators.peekingIterator(positiveRanges.iterator()); + if (this.complementLowerBoundWindow.contains(Cut.belowAll()) && (!positiveItr.hasNext() || ((Range)positiveItr.peek()).lowerBound != Cut.belowAll())) { + firstComplementRangeLowerBound = Cut.belowAll(); + } else if (positiveItr.hasNext()) { + firstComplementRangeLowerBound = ((Range)positiveItr.next()).upperBound; + } else { + return Iterators.emptyIterator(); + } + return new AbstractIterator, Range>>(){ + Cut nextComplementRangeLowerBound; + { + this.nextComplementRangeLowerBound = firstComplementRangeLowerBound; + } + + @Override + protected Map.Entry, Range> computeNext() { + Range negativeRange; + if (((ComplementRangesByLowerBound)ComplementRangesByLowerBound.this).complementLowerBoundWindow.upperBound.isLessThan(this.nextComplementRangeLowerBound) || this.nextComplementRangeLowerBound == Cut.aboveAll()) { + return (Map.Entry)this.endOfData(); + } + if (positiveItr.hasNext()) { + Range positiveRange = (Range)positiveItr.next(); + negativeRange = Range.create(this.nextComplementRangeLowerBound, positiveRange.lowerBound); + this.nextComplementRangeLowerBound = positiveRange.upperBound; + } else { + negativeRange = Range.create(this.nextComplementRangeLowerBound, Cut.aboveAll()); + this.nextComplementRangeLowerBound = Cut.aboveAll(); + } + return Maps.immutableEntry(negativeRange.lowerBound, negativeRange); + } + }; + } + + @Override + Iterator, Range>> descendingEntryIterator() { + Cut cut; + boolean inclusive; + Cut startingPoint = this.complementLowerBoundWindow.hasUpperBound() ? this.complementLowerBoundWindow.upperEndpoint() : Cut.aboveAll(); + final PeekingIterator positiveItr = Iterators.peekingIterator(this.positiveRangesByUpperBound.headMap(startingPoint, inclusive = this.complementLowerBoundWindow.hasUpperBound() && this.complementLowerBoundWindow.upperBoundType() == BoundType.CLOSED).descendingMap().values().iterator()); + if (positiveItr.hasNext()) { + cut = ((Range)positiveItr.peek()).upperBound == Cut.aboveAll() ? ((Range)positiveItr.next()).lowerBound : this.positiveRangesByLowerBound.higherKey(((Range)positiveItr.peek()).upperBound); + } else { + if (!this.complementLowerBoundWindow.contains(Cut.belowAll()) || this.positiveRangesByLowerBound.containsKey(Cut.belowAll())) { + return Iterators.emptyIterator(); + } + cut = this.positiveRangesByLowerBound.higherKey(Cut.belowAll()); + } + final Cut firstComplementRangeUpperBound = MoreObjects.firstNonNull(cut, Cut.aboveAll()); + return new AbstractIterator, Range>>(){ + Cut nextComplementRangeUpperBound; + { + this.nextComplementRangeUpperBound = firstComplementRangeUpperBound; + } + + @Override + protected Map.Entry, Range> computeNext() { + if (this.nextComplementRangeUpperBound == Cut.belowAll()) { + return (Map.Entry)this.endOfData(); + } + if (positiveItr.hasNext()) { + Range positiveRange = (Range)positiveItr.next(); + Range negativeRange = Range.create(positiveRange.upperBound, this.nextComplementRangeUpperBound); + this.nextComplementRangeUpperBound = positiveRange.lowerBound; + if (((ComplementRangesByLowerBound)ComplementRangesByLowerBound.this).complementLowerBoundWindow.lowerBound.isLessThan(negativeRange.lowerBound)) { + return Maps.immutableEntry(negativeRange.lowerBound, negativeRange); + } + } else if (((ComplementRangesByLowerBound)ComplementRangesByLowerBound.this).complementLowerBoundWindow.lowerBound.isLessThan(Cut.belowAll())) { + Range negativeRange = Range.create(Cut.belowAll(), this.nextComplementRangeUpperBound); + this.nextComplementRangeUpperBound = Cut.belowAll(); + return Maps.immutableEntry(Cut.belowAll(), negativeRange); + } + return (Map.Entry)this.endOfData(); + } + }; + } + + @Override + public int size() { + return Iterators.size(this.entryIterator()); + } + + @Override + @Nullable + public Range get(Object key) { + if (key instanceof Cut) { + try { + Cut cut = (Cut)key; + Map.Entry, Range> firstEntry = this.tailMap(cut, true).firstEntry(); + if (firstEntry != null && firstEntry.getKey().equals(cut)) { + return firstEntry.getValue(); + } + } + catch (ClassCastException e) { + return null; + } + } + return null; + } + + @Override + public boolean containsKey(Object key) { + return this.get(key) != null; + } + } + + @VisibleForTesting + static final class RangesByUpperBound> + extends AbstractNavigableMap, Range> { + private final NavigableMap, Range> rangesByLowerBound; + private final Range> upperBoundWindow; + + RangesByUpperBound(NavigableMap, Range> rangesByLowerBound) { + this.rangesByLowerBound = rangesByLowerBound; + this.upperBoundWindow = Range.all(); + } + + private RangesByUpperBound(NavigableMap, Range> rangesByLowerBound, Range> upperBoundWindow) { + this.rangesByLowerBound = rangesByLowerBound; + this.upperBoundWindow = upperBoundWindow; + } + + private NavigableMap, Range> subMap(Range> window) { + if (window.isConnected(this.upperBoundWindow)) { + return new RangesByUpperBound(this.rangesByLowerBound, window.intersection(this.upperBoundWindow)); + } + return ImmutableSortedMap.of(); + } + + @Override + public NavigableMap, Range> subMap(Cut fromKey, boolean fromInclusive, Cut toKey, boolean toInclusive) { + return this.subMap(Range.range(fromKey, BoundType.forBoolean(fromInclusive), toKey, BoundType.forBoolean(toInclusive))); + } + + @Override + public NavigableMap, Range> headMap(Cut toKey, boolean inclusive) { + return this.subMap(Range.upTo(toKey, BoundType.forBoolean(inclusive))); + } + + @Override + public NavigableMap, Range> tailMap(Cut fromKey, boolean inclusive) { + return this.subMap(Range.downTo(fromKey, BoundType.forBoolean(inclusive))); + } + + @Override + public Comparator> comparator() { + return Ordering.natural(); + } + + @Override + public boolean containsKey(@Nullable Object key) { + return this.get(key) != null; + } + + @Override + public Range get(@Nullable Object key) { + if (key instanceof Cut) { + try { + Cut cut = (Cut)key; + if (!this.upperBoundWindow.contains(cut)) { + return null; + } + Map.Entry> candidate = this.rangesByLowerBound.lowerEntry(cut); + if (candidate != null && candidate.getValue().upperBound.equals(cut)) { + return candidate.getValue(); + } + } + catch (ClassCastException e) { + return null; + } + } + return null; + } + + @Override + Iterator, Range>> entryIterator() { + Map.Entry, Range> lowerEntry; + final Iterator backingItr = !this.upperBoundWindow.hasLowerBound() ? this.rangesByLowerBound.values().iterator() : ((lowerEntry = this.rangesByLowerBound.lowerEntry(this.upperBoundWindow.lowerEndpoint())) == null ? this.rangesByLowerBound.values().iterator() : (this.upperBoundWindow.lowerBound.isLessThan(lowerEntry.getValue().upperBound) ? this.rangesByLowerBound.tailMap(lowerEntry.getKey(), true).values().iterator() : this.rangesByLowerBound.tailMap(this.upperBoundWindow.lowerEndpoint(), true).values().iterator())); + return new AbstractIterator, Range>>(){ + + @Override + protected Map.Entry, Range> computeNext() { + if (!backingItr.hasNext()) { + return (Map.Entry)this.endOfData(); + } + Range range = (Range)backingItr.next(); + if (((RangesByUpperBound)RangesByUpperBound.this).upperBoundWindow.upperBound.isLessThan(range.upperBound)) { + return (Map.Entry)this.endOfData(); + } + return Maps.immutableEntry(range.upperBound, range); + } + }; + } + + @Override + Iterator, Range>> descendingEntryIterator() { + Collection candidates = this.upperBoundWindow.hasUpperBound() ? this.rangesByLowerBound.headMap(this.upperBoundWindow.upperEndpoint(), false).descendingMap().values() : this.rangesByLowerBound.descendingMap().values(); + final PeekingIterator backingItr = Iterators.peekingIterator(candidates.iterator()); + if (backingItr.hasNext() && this.upperBoundWindow.upperBound.isLessThan(((Range)backingItr.peek()).upperBound)) { + backingItr.next(); + } + return new AbstractIterator, Range>>(){ + + @Override + protected Map.Entry, Range> computeNext() { + if (!backingItr.hasNext()) { + return (Map.Entry)this.endOfData(); + } + Range range = (Range)backingItr.next(); + return ((RangesByUpperBound)RangesByUpperBound.this).upperBoundWindow.lowerBound.isLessThan(range.upperBound) ? Maps.immutableEntry(range.upperBound, range) : (Map.Entry)this.endOfData(); + } + }; + } + + @Override + public int size() { + if (this.upperBoundWindow.equals(Range.all())) { + return this.rangesByLowerBound.size(); + } + return Iterators.size(this.entryIterator()); + } + + @Override + public boolean isEmpty() { + return this.upperBoundWindow.equals(Range.all()) ? this.rangesByLowerBound.isEmpty() : !this.entryIterator().hasNext(); + } + } + + final class AsRanges + extends ForwardingCollection> + implements Set> { + AsRanges() { + } + + @Override + protected Collection> delegate() { + return TreeRangeSet.this.rangesByLowerBound.values(); + } + + @Override + public int hashCode() { + return Sets.hashCodeImpl(this); + } + + @Override + public boolean equals(@Nullable Object o) { + return Sets.equalsImpl(this, o); + } + } +} diff --git a/src/com/google/common/collect/TreeTraverser.java b/src/com/google/common/collect/TreeTraverser.java new file mode 100644 index 0000000..9802c55 --- /dev/null +++ b/src/com/google/common/collect/TreeTraverser.java @@ -0,0 +1,158 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.Beta; +import com.google.common.annotations.GwtCompatible; +import com.google.common.base.Preconditions; +import com.google.common.collect.AbstractIterator; +import com.google.common.collect.FluentIterable; +import com.google.common.collect.Iterables; +import com.google.common.collect.Iterators; +import com.google.common.collect.PeekingIterator; +import com.google.common.collect.UnmodifiableIterator; +import java.util.ArrayDeque; +import java.util.Deque; +import java.util.Iterator; +import java.util.Queue; + +@Beta +@GwtCompatible(emulated=true) +public abstract class TreeTraverser { + public abstract Iterable children(T var1); + + public final FluentIterable preOrderTraversal(final T root) { + Preconditions.checkNotNull(root); + return new FluentIterable(){ + + @Override + public UnmodifiableIterator iterator() { + return TreeTraverser.this.preOrderIterator(root); + } + }; + } + + UnmodifiableIterator preOrderIterator(T root) { + return new PreOrderIterator(root); + } + + public final FluentIterable postOrderTraversal(final T root) { + Preconditions.checkNotNull(root); + return new FluentIterable(){ + + @Override + public UnmodifiableIterator iterator() { + return TreeTraverser.this.postOrderIterator(root); + } + }; + } + + UnmodifiableIterator postOrderIterator(T root) { + return new PostOrderIterator(root); + } + + public final FluentIterable breadthFirstTraversal(final T root) { + Preconditions.checkNotNull(root); + return new FluentIterable(){ + + @Override + public UnmodifiableIterator iterator() { + return new BreadthFirstIterator(root); + } + }; + } + + private final class BreadthFirstIterator + extends UnmodifiableIterator + implements PeekingIterator { + private final Queue queue = new ArrayDeque(); + + BreadthFirstIterator(T root) { + this.queue.add(root); + } + + @Override + public boolean hasNext() { + return !this.queue.isEmpty(); + } + + @Override + public T peek() { + return this.queue.element(); + } + + @Override + public T next() { + Object result = this.queue.remove(); + Iterables.addAll(this.queue, TreeTraverser.this.children(result)); + return result; + } + } + + private final class PostOrderIterator + extends AbstractIterator { + private final ArrayDeque> stack = new ArrayDeque(); + + PostOrderIterator(T root) { + this.stack.addLast(this.expand(root)); + } + + @Override + protected T computeNext() { + while (!this.stack.isEmpty()) { + PostOrderNode top = this.stack.getLast(); + if (top.childIterator.hasNext()) { + Object child = top.childIterator.next(); + this.stack.addLast(this.expand(child)); + continue; + } + this.stack.removeLast(); + return top.root; + } + return this.endOfData(); + } + + private PostOrderNode expand(T t) { + return new PostOrderNode(t, TreeTraverser.this.children(t).iterator()); + } + } + + private static final class PostOrderNode { + final T root; + final Iterator childIterator; + + PostOrderNode(T root, Iterator childIterator) { + this.root = Preconditions.checkNotNull(root); + this.childIterator = Preconditions.checkNotNull(childIterator); + } + } + + private final class PreOrderIterator + extends UnmodifiableIterator { + private final Deque> stack = new ArrayDeque(); + + PreOrderIterator(T root) { + this.stack.addLast(Iterators.singletonIterator(Preconditions.checkNotNull(root))); + } + + @Override + public boolean hasNext() { + return !this.stack.isEmpty(); + } + + @Override + public T next() { + Iterator childItr; + Iterator itr = this.stack.getLast(); + Object result = Preconditions.checkNotNull(itr.next()); + if (!itr.hasNext()) { + this.stack.removeLast(); + } + if ((childItr = TreeTraverser.this.children(result).iterator()).hasNext()) { + this.stack.addLast(childItr); + } + return result; + } + } +} diff --git a/src/com/google/common/collect/UnmodifiableIterator.java b/src/com/google/common/collect/UnmodifiableIterator.java new file mode 100644 index 0000000..44a767a --- /dev/null +++ b/src/com/google/common/collect/UnmodifiableIterator.java @@ -0,0 +1,20 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.GwtCompatible; +import java.util.Iterator; + +@GwtCompatible +public abstract class UnmodifiableIterator +implements Iterator { + protected UnmodifiableIterator() { + } + + @Override + @Deprecated + public final void remove() { + throw new UnsupportedOperationException(); + } +} diff --git a/src/com/google/common/collect/UnmodifiableListIterator.java b/src/com/google/common/collect/UnmodifiableListIterator.java new file mode 100644 index 0000000..6c0297a --- /dev/null +++ b/src/com/google/common/collect/UnmodifiableListIterator.java @@ -0,0 +1,28 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.GwtCompatible; +import com.google.common.collect.UnmodifiableIterator; +import java.util.ListIterator; + +@GwtCompatible +public abstract class UnmodifiableListIterator +extends UnmodifiableIterator +implements ListIterator { + protected UnmodifiableListIterator() { + } + + @Override + @Deprecated + public final void add(E e) { + throw new UnsupportedOperationException(); + } + + @Override + @Deprecated + public final void set(E e) { + throw new UnsupportedOperationException(); + } +} diff --git a/src/com/google/common/collect/UnmodifiableSortedMultiset.java b/src/com/google/common/collect/UnmodifiableSortedMultiset.java new file mode 100644 index 0000000..6899280 --- /dev/null +++ b/src/com/google/common/collect/UnmodifiableSortedMultiset.java @@ -0,0 +1,92 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.GwtCompatible; +import com.google.common.collect.BoundType; +import com.google.common.collect.Multiset; +import com.google.common.collect.Multisets; +import com.google.common.collect.Sets; +import com.google.common.collect.SortedMultiset; +import java.util.Comparator; +import java.util.NavigableSet; + +@GwtCompatible(emulated=true) +final class UnmodifiableSortedMultiset +extends Multisets.UnmodifiableMultiset +implements SortedMultiset { + private transient UnmodifiableSortedMultiset descendingMultiset; + private static final long serialVersionUID = 0L; + + UnmodifiableSortedMultiset(SortedMultiset delegate) { + super(delegate); + } + + @Override + protected SortedMultiset delegate() { + return (SortedMultiset)super.delegate(); + } + + @Override + public Comparator comparator() { + return this.delegate().comparator(); + } + + @Override + NavigableSet createElementSet() { + return Sets.unmodifiableNavigableSet(this.delegate().elementSet()); + } + + @Override + public NavigableSet elementSet() { + return (NavigableSet)super.elementSet(); + } + + @Override + public SortedMultiset descendingMultiset() { + UnmodifiableSortedMultiset result = this.descendingMultiset; + if (result == null) { + result = new UnmodifiableSortedMultiset(this.delegate().descendingMultiset()); + result.descendingMultiset = this; + this.descendingMultiset = result; + return this.descendingMultiset; + } + return result; + } + + @Override + public Multiset.Entry firstEntry() { + return this.delegate().firstEntry(); + } + + @Override + public Multiset.Entry lastEntry() { + return this.delegate().lastEntry(); + } + + @Override + public Multiset.Entry pollFirstEntry() { + throw new UnsupportedOperationException(); + } + + @Override + public Multiset.Entry pollLastEntry() { + throw new UnsupportedOperationException(); + } + + @Override + public SortedMultiset headMultiset(E upperBound, BoundType boundType) { + return Multisets.unmodifiableSortedMultiset(this.delegate().headMultiset(upperBound, boundType)); + } + + @Override + public SortedMultiset subMultiset(E lowerBound, BoundType lowerBoundType, E upperBound, BoundType upperBoundType) { + return Multisets.unmodifiableSortedMultiset(this.delegate().subMultiset(lowerBound, lowerBoundType, upperBound, upperBoundType)); + } + + @Override + public SortedMultiset tailMultiset(E lowerBound, BoundType boundType) { + return Multisets.unmodifiableSortedMultiset(this.delegate().tailMultiset(lowerBound, boundType)); + } +} diff --git a/src/com/google/common/collect/UsingToStringOrdering.java b/src/com/google/common/collect/UsingToStringOrdering.java new file mode 100644 index 0000000..23de6dc --- /dev/null +++ b/src/com/google/common/collect/UsingToStringOrdering.java @@ -0,0 +1,32 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.GwtCompatible; +import com.google.common.collect.Ordering; +import java.io.Serializable; + +@GwtCompatible(serializable=true) +final class UsingToStringOrdering +extends Ordering +implements Serializable { + static final UsingToStringOrdering INSTANCE = new UsingToStringOrdering(); + private static final long serialVersionUID = 0L; + + @Override + public int compare(Object left, Object right) { + return left.toString().compareTo(right.toString()); + } + + private Object readResolve() { + return INSTANCE; + } + + public String toString() { + return "Ordering.usingToString()"; + } + + private UsingToStringOrdering() { + } +} diff --git a/src/com/google/common/collect/WellBehavedMap.java b/src/com/google/common/collect/WellBehavedMap.java new file mode 100644 index 0000000..4021c30 --- /dev/null +++ b/src/com/google/common/collect/WellBehavedMap.java @@ -0,0 +1,81 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.collect; + +import com.google.common.annotations.GwtCompatible; +import com.google.common.collect.AbstractMapEntry; +import com.google.common.collect.ForwardingMap; +import com.google.common.collect.Maps; +import com.google.common.collect.TransformedIterator; +import java.util.Iterator; +import java.util.Map; +import java.util.Set; + +@GwtCompatible +final class WellBehavedMap +extends ForwardingMap { + private final Map delegate; + private Set> entrySet; + + private WellBehavedMap(Map delegate) { + this.delegate = delegate; + } + + static WellBehavedMap wrap(Map delegate) { + return new WellBehavedMap(delegate); + } + + @Override + protected Map delegate() { + return this.delegate; + } + + @Override + public Set> entrySet() { + Set> es = this.entrySet; + if (es != null) { + return es; + } + this.entrySet = new EntrySet(); + return this.entrySet; + } + + private final class EntrySet + extends Maps.EntrySet { + private EntrySet() { + } + + @Override + Map map() { + return WellBehavedMap.this; + } + + @Override + public Iterator> iterator() { + return new TransformedIterator>(WellBehavedMap.this.keySet().iterator()){ + + @Override + Map.Entry transform(final K key) { + return new AbstractMapEntry(){ + + @Override + public K getKey() { + return key; + } + + @Override + public V getValue() { + return WellBehavedMap.this.get(key); + } + + @Override + public V setValue(V value) { + return WellBehavedMap.this.put(key, value); + } + }; + } + }; + } + } +} diff --git a/src/com/google/common/collect/package-info.java b/src/com/google/common/collect/package-info.java new file mode 100644 index 0000000..a9887e5 --- /dev/null +++ b/src/com/google/common/collect/package-info.java @@ -0,0 +1,8 @@ +/* + * Decompiled with CFR 0.152. + */ +@ParametersAreNonnullByDefault +package com.google.common.collect; + +import javax.annotation.ParametersAreNonnullByDefault; + diff --git a/src/com/google/common/escape/ArrayBasedCharEscaper.java b/src/com/google/common/escape/ArrayBasedCharEscaper.java new file mode 100644 index 0000000..2764a56 --- /dev/null +++ b/src/com/google/common/escape/ArrayBasedCharEscaper.java @@ -0,0 +1,62 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.escape; + +import com.google.common.annotations.Beta; +import com.google.common.annotations.GwtCompatible; +import com.google.common.base.Preconditions; +import com.google.common.escape.ArrayBasedEscaperMap; +import com.google.common.escape.CharEscaper; +import java.util.Map; + +@Beta +@GwtCompatible +public abstract class ArrayBasedCharEscaper +extends CharEscaper { + private final char[][] replacements; + private final int replacementsLength; + private final char safeMin; + private final char safeMax; + + protected ArrayBasedCharEscaper(Map replacementMap, char safeMin, char safeMax) { + this(ArrayBasedEscaperMap.create(replacementMap), safeMin, safeMax); + } + + protected ArrayBasedCharEscaper(ArrayBasedEscaperMap escaperMap, char safeMin, char safeMax) { + Preconditions.checkNotNull(escaperMap); + this.replacements = escaperMap.getReplacementArray(); + this.replacementsLength = this.replacements.length; + if (safeMax < safeMin) { + safeMax = '\u0000'; + safeMin = (char)65535; + } + this.safeMin = safeMin; + this.safeMax = safeMax; + } + + @Override + public final String escape(String s) { + Preconditions.checkNotNull(s); + for (int i = 0; i < s.length(); ++i) { + char c = s.charAt(i); + if ((c >= this.replacementsLength || this.replacements[c] == null) && c <= this.safeMax && c >= this.safeMin) continue; + return this.escapeSlow(s, i); + } + return s; + } + + @Override + protected final char[] escape(char c) { + char[] chars; + if (c < this.replacementsLength && (chars = this.replacements[c]) != null) { + return chars; + } + if (c >= this.safeMin && c <= this.safeMax) { + return null; + } + return this.escapeUnsafe(c); + } + + protected abstract char[] escapeUnsafe(char var1); +} diff --git a/src/com/google/common/escape/ArrayBasedEscaperMap.java b/src/com/google/common/escape/ArrayBasedEscaperMap.java new file mode 100644 index 0000000..5d3766b --- /dev/null +++ b/src/com/google/common/escape/ArrayBasedEscaperMap.java @@ -0,0 +1,44 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.escape; + +import com.google.common.annotations.Beta; +import com.google.common.annotations.GwtCompatible; +import com.google.common.annotations.VisibleForTesting; +import com.google.common.base.Preconditions; +import java.util.Collections; +import java.util.Map; + +@Beta +@GwtCompatible +public final class ArrayBasedEscaperMap { + private final char[][] replacementArray; + private static final char[][] EMPTY_REPLACEMENT_ARRAY = new char[0][0]; + + public static ArrayBasedEscaperMap create(Map replacements) { + return new ArrayBasedEscaperMap(ArrayBasedEscaperMap.createReplacementArray(replacements)); + } + + private ArrayBasedEscaperMap(char[][] replacementArray) { + this.replacementArray = replacementArray; + } + + char[][] getReplacementArray() { + return this.replacementArray; + } + + @VisibleForTesting + static char[][] createReplacementArray(Map map) { + Preconditions.checkNotNull(map); + if (map.isEmpty()) { + return EMPTY_REPLACEMENT_ARRAY; + } + char max = Collections.max(map.keySet()).charValue(); + char[][] replacements = new char[max + '\u0001'][]; + for (char c : map.keySet()) { + replacements[c] = map.get(Character.valueOf(c)).toCharArray(); + } + return replacements; + } +} diff --git a/src/com/google/common/escape/ArrayBasedUnicodeEscaper.java b/src/com/google/common/escape/ArrayBasedUnicodeEscaper.java new file mode 100644 index 0000000..02a2dc4 --- /dev/null +++ b/src/com/google/common/escape/ArrayBasedUnicodeEscaper.java @@ -0,0 +1,81 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.escape; + +import com.google.common.annotations.Beta; +import com.google.common.annotations.GwtCompatible; +import com.google.common.base.Preconditions; +import com.google.common.escape.ArrayBasedEscaperMap; +import com.google.common.escape.UnicodeEscaper; +import java.util.Map; +import javax.annotation.Nullable; + +@Beta +@GwtCompatible +public abstract class ArrayBasedUnicodeEscaper +extends UnicodeEscaper { + private final char[][] replacements; + private final int replacementsLength; + private final int safeMin; + private final int safeMax; + private final char safeMinChar; + private final char safeMaxChar; + + protected ArrayBasedUnicodeEscaper(Map replacementMap, int safeMin, int safeMax, @Nullable String unsafeReplacement) { + this(ArrayBasedEscaperMap.create(replacementMap), safeMin, safeMax, unsafeReplacement); + } + + protected ArrayBasedUnicodeEscaper(ArrayBasedEscaperMap escaperMap, int safeMin, int safeMax, @Nullable String unsafeReplacement) { + Preconditions.checkNotNull(escaperMap); + this.replacements = escaperMap.getReplacementArray(); + this.replacementsLength = this.replacements.length; + if (safeMax < safeMin) { + safeMax = -1; + safeMin = Integer.MAX_VALUE; + } + this.safeMin = safeMin; + this.safeMax = safeMax; + if (safeMin >= 55296) { + this.safeMinChar = (char)65535; + this.safeMaxChar = '\u0000'; + } else { + this.safeMinChar = (char)safeMin; + this.safeMaxChar = (char)Math.min(safeMax, 55295); + } + } + + @Override + public final String escape(String s) { + Preconditions.checkNotNull(s); + for (int i = 0; i < s.length(); ++i) { + char c = s.charAt(i); + if ((c >= this.replacementsLength || this.replacements[c] == null) && c <= this.safeMaxChar && c >= this.safeMinChar) continue; + return this.escapeSlow(s, i); + } + return s; + } + + @Override + protected final int nextEscapeIndex(CharSequence csq, int index, int end) { + char c; + while (index < end && ((c = csq.charAt(index)) >= this.replacementsLength || this.replacements[c] == null) && c <= this.safeMaxChar && c >= this.safeMinChar) { + ++index; + } + return index; + } + + @Override + protected final char[] escape(int cp) { + char[] chars; + if (cp < this.replacementsLength && (chars = this.replacements[cp]) != null) { + return chars; + } + if (cp >= this.safeMin && cp <= this.safeMax) { + return null; + } + return this.escapeUnsafe(cp); + } + + protected abstract char[] escapeUnsafe(int var1); +} diff --git a/src/com/google/common/escape/CharEscaper.java b/src/com/google/common/escape/CharEscaper.java new file mode 100644 index 0000000..c5d7aa0 --- /dev/null +++ b/src/com/google/common/escape/CharEscaper.java @@ -0,0 +1,81 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.escape; + +import com.google.common.annotations.Beta; +import com.google.common.annotations.GwtCompatible; +import com.google.common.base.Preconditions; +import com.google.common.escape.Escaper; +import com.google.common.escape.Platform; + +@Beta +@GwtCompatible +public abstract class CharEscaper +extends Escaper { + private static final int DEST_PAD_MULTIPLIER = 2; + + protected CharEscaper() { + } + + @Override + public String escape(String string) { + Preconditions.checkNotNull(string); + int length = string.length(); + for (int index = 0; index < length; ++index) { + if (this.escape(string.charAt(index)) == null) continue; + return this.escapeSlow(string, index); + } + return string; + } + + protected final String escapeSlow(String s, int index) { + int slen = s.length(); + char[] dest = Platform.charBufferFromThreadLocal(); + int destSize = dest.length; + int destIndex = 0; + int lastEscape = 0; + while (index < slen) { + char[] r = this.escape(s.charAt(index)); + if (r != null) { + int charsSkipped = index - lastEscape; + int rlen = r.length; + int sizeNeeded = destIndex + charsSkipped + rlen; + if (destSize < sizeNeeded) { + destSize = sizeNeeded + 2 * (slen - index); + dest = CharEscaper.growBuffer(dest, destIndex, destSize); + } + if (charsSkipped > 0) { + s.getChars(lastEscape, index, dest, destIndex); + destIndex += charsSkipped; + } + if (rlen > 0) { + System.arraycopy(r, 0, dest, destIndex, rlen); + destIndex += rlen; + } + lastEscape = index + 1; + } + ++index; + } + int charsLeft = slen - lastEscape; + if (charsLeft > 0) { + int sizeNeeded = destIndex + charsLeft; + if (destSize < sizeNeeded) { + dest = CharEscaper.growBuffer(dest, destIndex, sizeNeeded); + } + s.getChars(lastEscape, slen, dest, destIndex); + destIndex = sizeNeeded; + } + return new String(dest, 0, destIndex); + } + + protected abstract char[] escape(char var1); + + private static char[] growBuffer(char[] dest, int index, int size) { + char[] copy = new char[size]; + if (index > 0) { + System.arraycopy(dest, 0, copy, 0, index); + } + return copy; + } +} diff --git a/src/com/google/common/escape/CharEscaperBuilder.java b/src/com/google/common/escape/CharEscaperBuilder.java new file mode 100644 index 0000000..ff56f14 --- /dev/null +++ b/src/com/google/common/escape/CharEscaperBuilder.java @@ -0,0 +1,74 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.escape; + +import com.google.common.annotations.Beta; +import com.google.common.annotations.GwtCompatible; +import com.google.common.base.Preconditions; +import com.google.common.escape.CharEscaper; +import com.google.common.escape.Escaper; +import java.util.HashMap; +import java.util.Map; + +@Beta +@GwtCompatible +public final class CharEscaperBuilder { + private final Map map = new HashMap(); + private int max = -1; + + public CharEscaperBuilder addEscape(char c, String r) { + this.map.put(Character.valueOf(c), Preconditions.checkNotNull(r)); + if (c > this.max) { + this.max = c; + } + return this; + } + + public CharEscaperBuilder addEscapes(char[] cs, String r) { + Preconditions.checkNotNull(r); + for (char c : cs) { + this.addEscape(c, r); + } + return this; + } + + public char[][] toArray() { + char[][] result = new char[this.max + 1][]; + for (Map.Entry entry : this.map.entrySet()) { + result[entry.getKey().charValue()] = entry.getValue().toCharArray(); + } + return result; + } + + public Escaper toEscaper() { + return new CharArrayDecorator(this.toArray()); + } + + private static class CharArrayDecorator + extends CharEscaper { + private final char[][] replacements; + private final int replaceLength; + + CharArrayDecorator(char[][] replacements) { + this.replacements = replacements; + this.replaceLength = replacements.length; + } + + @Override + public String escape(String s) { + int slen = s.length(); + for (int index = 0; index < slen; ++index) { + char c = s.charAt(index); + if (c >= this.replacements.length || this.replacements[c] == null) continue; + return this.escapeSlow(s, index); + } + return s; + } + + @Override + protected char[] escape(char c) { + return c < this.replaceLength ? this.replacements[c] : null; + } + } +} diff --git a/src/com/google/common/escape/Escaper.java b/src/com/google/common/escape/Escaper.java new file mode 100644 index 0000000..73c91ce --- /dev/null +++ b/src/com/google/common/escape/Escaper.java @@ -0,0 +1,29 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.escape; + +import com.google.common.annotations.Beta; +import com.google.common.annotations.GwtCompatible; +import com.google.common.base.Function; + +@Beta +@GwtCompatible +public abstract class Escaper { + private final Function asFunction = new Function(){ + + @Override + public String apply(String from) { + return Escaper.this.escape(from); + } + }; + + protected Escaper() { + } + + public abstract String escape(String var1); + + public final Function asFunction() { + return this.asFunction; + } +} diff --git a/src/com/google/common/escape/Escapers.java b/src/com/google/common/escape/Escapers.java new file mode 100644 index 0000000..fbf1b98 --- /dev/null +++ b/src/com/google/common/escape/Escapers.java @@ -0,0 +1,147 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.escape; + +import com.google.common.annotations.Beta; +import com.google.common.annotations.GwtCompatible; +import com.google.common.base.Preconditions; +import com.google.common.escape.ArrayBasedCharEscaper; +import com.google.common.escape.CharEscaper; +import com.google.common.escape.Escaper; +import com.google.common.escape.UnicodeEscaper; +import java.util.HashMap; +import java.util.Map; +import javax.annotation.Nullable; + +@Beta +@GwtCompatible +public final class Escapers { + private static final Escaper NULL_ESCAPER = new CharEscaper(){ + + @Override + public String escape(String string) { + return Preconditions.checkNotNull(string); + } + + @Override + protected char[] escape(char c) { + return null; + } + }; + + private Escapers() { + } + + public static Escaper nullEscaper() { + return NULL_ESCAPER; + } + + public static Builder builder() { + return new Builder(); + } + + static UnicodeEscaper asUnicodeEscaper(Escaper escaper) { + Preconditions.checkNotNull(escaper); + if (escaper instanceof UnicodeEscaper) { + return (UnicodeEscaper)escaper; + } + if (escaper instanceof CharEscaper) { + return Escapers.wrap((CharEscaper)escaper); + } + String string = String.valueOf(escaper.getClass().getName()); + throw new IllegalArgumentException(string.length() != 0 ? "Cannot create a UnicodeEscaper from: ".concat(string) : new String("Cannot create a UnicodeEscaper from: ")); + } + + public static String computeReplacement(CharEscaper escaper, char c) { + return Escapers.stringOrNull(escaper.escape(c)); + } + + public static String computeReplacement(UnicodeEscaper escaper, int cp) { + return Escapers.stringOrNull(escaper.escape(cp)); + } + + private static String stringOrNull(char[] in) { + return in == null ? null : new String(in); + } + + private static UnicodeEscaper wrap(final CharEscaper escaper) { + return new UnicodeEscaper(){ + + @Override + protected char[] escape(int cp) { + int n; + if (cp < 65536) { + return escaper.escape((char)cp); + } + char[] surrogateChars = new char[2]; + Character.toChars(cp, surrogateChars, 0); + char[] hiChars = escaper.escape(surrogateChars[0]); + char[] loChars = escaper.escape(surrogateChars[1]); + if (hiChars == null && loChars == null) { + return null; + } + int hiCount = hiChars != null ? hiChars.length : 1; + int loCount = loChars != null ? loChars.length : 1; + char[] output = new char[hiCount + loCount]; + if (hiChars != null) { + for (n = 0; n < hiChars.length; ++n) { + output[n] = hiChars[n]; + } + } else { + output[0] = surrogateChars[0]; + } + if (loChars != null) { + for (n = 0; n < loChars.length; ++n) { + output[hiCount + n] = loChars[n]; + } + } else { + output[hiCount] = surrogateChars[1]; + } + return output; + } + }; + } + + @Beta + public static final class Builder { + private final Map replacementMap = new HashMap(); + private char safeMin = '\u0000'; + private char safeMax = (char)65535; + private String unsafeReplacement = null; + + private Builder() { + } + + public Builder setSafeRange(char safeMin, char safeMax) { + this.safeMin = safeMin; + this.safeMax = safeMax; + return this; + } + + public Builder setUnsafeReplacement(@Nullable String unsafeReplacement) { + this.unsafeReplacement = unsafeReplacement; + return this; + } + + public Builder addEscape(char c, String replacement) { + Preconditions.checkNotNull(replacement); + this.replacementMap.put(Character.valueOf(c), replacement); + return this; + } + + public Escaper build() { + return new ArrayBasedCharEscaper(this.replacementMap, this.safeMin, this.safeMax){ + private final char[] replacementChars; + { + this.replacementChars = Builder.this.unsafeReplacement != null ? Builder.this.unsafeReplacement.toCharArray() : null; + } + + @Override + protected char[] escapeUnsafe(char c) { + return this.replacementChars; + } + }; + } + } +} diff --git a/src/com/google/common/escape/Platform.java b/src/com/google/common/escape/Platform.java new file mode 100644 index 0000000..c669e02 --- /dev/null +++ b/src/com/google/common/escape/Platform.java @@ -0,0 +1,24 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.escape; + +import com.google.common.annotations.GwtCompatible; + +@GwtCompatible(emulated=true) +final class Platform { + private static final ThreadLocal DEST_TL = new ThreadLocal(){ + + @Override + protected char[] initialValue() { + return new char[1024]; + } + }; + + private Platform() { + } + + static char[] charBufferFromThreadLocal() { + return DEST_TL.get(); + } +} diff --git a/src/com/google/common/escape/UnicodeEscaper.java b/src/com/google/common/escape/UnicodeEscaper.java new file mode 100644 index 0000000..179c563 --- /dev/null +++ b/src/com/google/common/escape/UnicodeEscaper.java @@ -0,0 +1,119 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.escape; + +import com.google.common.annotations.Beta; +import com.google.common.annotations.GwtCompatible; +import com.google.common.base.Preconditions; +import com.google.common.escape.Escaper; +import com.google.common.escape.Platform; + +@Beta +@GwtCompatible +public abstract class UnicodeEscaper +extends Escaper { + private static final int DEST_PAD = 32; + + protected UnicodeEscaper() { + } + + protected abstract char[] escape(int var1); + + protected int nextEscapeIndex(CharSequence csq, int start, int end) { + int index; + int cp; + for (index = start; index < end && (cp = UnicodeEscaper.codePointAt(csq, index, end)) >= 0 && this.escape(cp) == null; index += Character.isSupplementaryCodePoint(cp) ? 2 : 1) { + } + return index; + } + + @Override + public String escape(String string) { + Preconditions.checkNotNull(string); + int end = string.length(); + int index = this.nextEscapeIndex(string, 0, end); + return index == end ? string : this.escapeSlow(string, index); + } + + protected final String escapeSlow(String s, int index) { + int end = s.length(); + char[] dest = Platform.charBufferFromThreadLocal(); + int destIndex = 0; + int unescapedChunkStart = 0; + while (index < end) { + int cp = UnicodeEscaper.codePointAt(s, index, end); + if (cp < 0) { + throw new IllegalArgumentException("Trailing high surrogate at end of input"); + } + char[] escaped = this.escape(cp); + int nextIndex = index + (Character.isSupplementaryCodePoint(cp) ? 2 : 1); + if (escaped != null) { + int charsSkipped = index - unescapedChunkStart; + int sizeNeeded = destIndex + charsSkipped + escaped.length; + if (dest.length < sizeNeeded) { + int destLength = sizeNeeded + (end - index) + 32; + dest = UnicodeEscaper.growBuffer(dest, destIndex, destLength); + } + if (charsSkipped > 0) { + s.getChars(unescapedChunkStart, index, dest, destIndex); + destIndex += charsSkipped; + } + if (escaped.length > 0) { + System.arraycopy(escaped, 0, dest, destIndex, escaped.length); + destIndex += escaped.length; + } + unescapedChunkStart = nextIndex; + } + index = this.nextEscapeIndex(s, nextIndex, end); + } + int charsSkipped = end - unescapedChunkStart; + if (charsSkipped > 0) { + int endIndex = destIndex + charsSkipped; + if (dest.length < endIndex) { + dest = UnicodeEscaper.growBuffer(dest, destIndex, endIndex); + } + s.getChars(unescapedChunkStart, end, dest, destIndex); + destIndex = endIndex; + } + return new String(dest, 0, destIndex); + } + + protected static int codePointAt(CharSequence seq, int index, int end) { + Preconditions.checkNotNull(seq); + if (index < end) { + char c1; + if ((c1 = seq.charAt(index++)) < '\ud800' || c1 > '\udfff') { + return c1; + } + if (c1 <= '\udbff') { + if (index == end) { + return -c1; + } + char c2 = seq.charAt(index); + if (Character.isLowSurrogate(c2)) { + return Character.toCodePoint(c1, c2); + } + char c = c2; + char c3 = c2; + int n = index; + String string = String.valueOf(String.valueOf(seq)); + throw new IllegalArgumentException(new StringBuilder(89 + string.length()).append("Expected low surrogate but got char '").append(c).append("' with value ").append((int)c3).append(" at index ").append(n).append(" in '").append(string).append("'").toString()); + } + char c = c1; + char c4 = c1; + int n = index - 1; + String string = String.valueOf(String.valueOf(seq)); + throw new IllegalArgumentException(new StringBuilder(88 + string.length()).append("Unexpected low surrogate character '").append(c).append("' with value ").append((int)c4).append(" at index ").append(n).append(" in '").append(string).append("'").toString()); + } + throw new IndexOutOfBoundsException("Index exceeds specified range"); + } + + private static char[] growBuffer(char[] dest, int index, int size) { + char[] copy = new char[size]; + if (index > 0) { + System.arraycopy(dest, 0, copy, 0, index); + } + return copy; + } +} diff --git a/src/com/google/common/escape/package-info.java b/src/com/google/common/escape/package-info.java new file mode 100644 index 0000000..8ebd789 --- /dev/null +++ b/src/com/google/common/escape/package-info.java @@ -0,0 +1,8 @@ +/* + * Decompiled with CFR 0.152. + */ +@ParametersAreNonnullByDefault +package com.google.common.escape; + +import javax.annotation.ParametersAreNonnullByDefault; + diff --git a/src/com/google/common/eventbus/AllowConcurrentEvents.java b/src/com/google/common/eventbus/AllowConcurrentEvents.java new file mode 100644 index 0000000..1978116 --- /dev/null +++ b/src/com/google/common/eventbus/AllowConcurrentEvents.java @@ -0,0 +1,16 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.eventbus; + +import com.google.common.annotations.Beta; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Retention(value=RetentionPolicy.RUNTIME) +@Target(value={ElementType.METHOD}) +@Beta +public @interface AllowConcurrentEvents { +} diff --git a/src/com/google/common/eventbus/AnnotatedSubscriberFinder.java b/src/com/google/common/eventbus/AnnotatedSubscriberFinder.java new file mode 100644 index 0000000..7d83739 --- /dev/null +++ b/src/com/google/common/eventbus/AnnotatedSubscriberFinder.java @@ -0,0 +1,114 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.eventbus; + +import com.google.common.base.Objects; +import com.google.common.base.Throwables; +import com.google.common.cache.CacheBuilder; +import com.google.common.cache.CacheLoader; +import com.google.common.cache.LoadingCache; +import com.google.common.collect.HashMultimap; +import com.google.common.collect.ImmutableList; +import com.google.common.collect.Maps; +import com.google.common.collect.Multimap; +import com.google.common.eventbus.AllowConcurrentEvents; +import com.google.common.eventbus.EventSubscriber; +import com.google.common.eventbus.Subscribe; +import com.google.common.eventbus.SubscriberFindingStrategy; +import com.google.common.eventbus.SynchronizedEventSubscriber; +import com.google.common.reflect.TypeToken; +import com.google.common.util.concurrent.UncheckedExecutionException; +import java.lang.reflect.Method; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Set; +import javax.annotation.Nullable; + +class AnnotatedSubscriberFinder +implements SubscriberFindingStrategy { + private static final LoadingCache, ImmutableList> subscriberMethodsCache = CacheBuilder.newBuilder().weakKeys().build(new CacheLoader, ImmutableList>(){ + + @Override + public ImmutableList load(Class concreteClass) throws Exception { + return AnnotatedSubscriberFinder.getAnnotatedMethodsInternal(concreteClass); + } + }); + + AnnotatedSubscriberFinder() { + } + + @Override + public Multimap, EventSubscriber> findAllSubscribers(Object listener) { + HashMultimap, EventSubscriber> methodsInListener = HashMultimap.create(); + Class clazz = listener.getClass(); + for (Method method : AnnotatedSubscriberFinder.getAnnotatedMethods(clazz)) { + Class[] parameterTypes = method.getParameterTypes(); + Class eventType = parameterTypes[0]; + EventSubscriber subscriber = AnnotatedSubscriberFinder.makeSubscriber(listener, method); + methodsInListener.put(eventType, subscriber); + } + return methodsInListener; + } + + private static ImmutableList getAnnotatedMethods(Class clazz) { + try { + return subscriberMethodsCache.getUnchecked(clazz); + } + catch (UncheckedExecutionException e) { + throw Throwables.propagate(e.getCause()); + } + } + + private static ImmutableList getAnnotatedMethodsInternal(Class clazz) { + Set supers = TypeToken.of(clazz).getTypes().rawTypes(); + HashMap identifiers = Maps.newHashMap(); + for (Class superClazz : supers) { + for (Method superClazzMethod : superClazz.getMethods()) { + if (!superClazzMethod.isAnnotationPresent(Subscribe.class) || superClazzMethod.isBridge()) continue; + Class[] parameterTypes = superClazzMethod.getParameterTypes(); + if (parameterTypes.length != 1) { + String string = String.valueOf(String.valueOf(superClazzMethod)); + int n = parameterTypes.length; + throw new IllegalArgumentException(new StringBuilder(128 + string.length()).append("Method ").append(string).append(" has @Subscribe annotation, but requires ").append(n).append(" arguments. Event subscriber methods must require a single argument.").toString()); + } + MethodIdentifier ident = new MethodIdentifier(superClazzMethod); + if (identifiers.containsKey(ident)) continue; + identifiers.put(ident, superClazzMethod); + } + } + return ImmutableList.copyOf(identifiers.values()); + } + + private static EventSubscriber makeSubscriber(Object listener, Method method) { + EventSubscriber wrapper = AnnotatedSubscriberFinder.methodIsDeclaredThreadSafe(method) ? new EventSubscriber(listener, method) : new SynchronizedEventSubscriber(listener, method); + return wrapper; + } + + private static boolean methodIsDeclaredThreadSafe(Method method) { + return method.getAnnotation(AllowConcurrentEvents.class) != null; + } + + private static final class MethodIdentifier { + private final String name; + private final List> parameterTypes; + + MethodIdentifier(Method method) { + this.name = method.getName(); + this.parameterTypes = Arrays.asList(method.getParameterTypes()); + } + + public int hashCode() { + return Objects.hashCode(this.name, this.parameterTypes); + } + + public boolean equals(@Nullable Object o) { + if (o instanceof MethodIdentifier) { + MethodIdentifier ident = (MethodIdentifier)o; + return this.name.equals(ident.name) && this.parameterTypes.equals(ident.parameterTypes); + } + return false; + } + } +} diff --git a/src/com/google/common/eventbus/AsyncEventBus.java b/src/com/google/common/eventbus/AsyncEventBus.java new file mode 100644 index 0000000..b631093 --- /dev/null +++ b/src/com/google/common/eventbus/AsyncEventBus.java @@ -0,0 +1,60 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.eventbus; + +import com.google.common.annotations.Beta; +import com.google.common.base.Preconditions; +import com.google.common.eventbus.EventBus; +import com.google.common.eventbus.EventSubscriber; +import com.google.common.eventbus.SubscriberExceptionHandler; +import java.util.concurrent.ConcurrentLinkedQueue; +import java.util.concurrent.Executor; + +@Beta +public class AsyncEventBus +extends EventBus { + private final Executor executor; + private final ConcurrentLinkedQueue eventsToDispatch = new ConcurrentLinkedQueue(); + + public AsyncEventBus(String identifier, Executor executor) { + super(identifier); + this.executor = Preconditions.checkNotNull(executor); + } + + public AsyncEventBus(Executor executor, SubscriberExceptionHandler subscriberExceptionHandler) { + super(subscriberExceptionHandler); + this.executor = Preconditions.checkNotNull(executor); + } + + public AsyncEventBus(Executor executor) { + super("default"); + this.executor = Preconditions.checkNotNull(executor); + } + + @Override + void enqueueEvent(Object event, EventSubscriber subscriber) { + this.eventsToDispatch.offer(new EventBus.EventWithSubscriber(event, subscriber)); + } + + @Override + protected void dispatchQueuedEvents() { + EventBus.EventWithSubscriber eventWithSubscriber; + while ((eventWithSubscriber = this.eventsToDispatch.poll()) != null) { + this.dispatch(eventWithSubscriber.event, eventWithSubscriber.subscriber); + } + } + + @Override + void dispatch(final Object event, final EventSubscriber subscriber) { + Preconditions.checkNotNull(event); + Preconditions.checkNotNull(subscriber); + this.executor.execute(new Runnable(){ + + @Override + public void run() { + AsyncEventBus.super.dispatch(event, subscriber); + } + }); + } +} diff --git a/src/com/google/common/eventbus/DeadEvent.java b/src/com/google/common/eventbus/DeadEvent.java new file mode 100644 index 0000000..fe1aa11 --- /dev/null +++ b/src/com/google/common/eventbus/DeadEvent.java @@ -0,0 +1,26 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.eventbus; + +import com.google.common.annotations.Beta; +import com.google.common.base.Preconditions; + +@Beta +public class DeadEvent { + private final Object source; + private final Object event; + + public DeadEvent(Object source, Object event) { + this.source = Preconditions.checkNotNull(source); + this.event = Preconditions.checkNotNull(event); + } + + public Object getSource() { + return this.source; + } + + public Object getEvent() { + return this.event; + } +} diff --git a/src/com/google/common/eventbus/EventBus.java b/src/com/google/common/eventbus/EventBus.java new file mode 100644 index 0000000..442a73f --- /dev/null +++ b/src/com/google/common/eventbus/EventBus.java @@ -0,0 +1,214 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.eventbus; + +import com.google.common.annotations.Beta; +import com.google.common.annotations.VisibleForTesting; +import com.google.common.base.Preconditions; +import com.google.common.base.Throwables; +import com.google.common.cache.CacheBuilder; +import com.google.common.cache.CacheLoader; +import com.google.common.cache.LoadingCache; +import com.google.common.collect.HashMultimap; +import com.google.common.collect.Multimap; +import com.google.common.collect.SetMultimap; +import com.google.common.eventbus.AnnotatedSubscriberFinder; +import com.google.common.eventbus.DeadEvent; +import com.google.common.eventbus.EventSubscriber; +import com.google.common.eventbus.SubscriberExceptionContext; +import com.google.common.eventbus.SubscriberExceptionHandler; +import com.google.common.eventbus.SubscriberFindingStrategy; +import com.google.common.reflect.TypeToken; +import com.google.common.util.concurrent.UncheckedExecutionException; +import java.lang.reflect.InvocationTargetException; +import java.util.Collection; +import java.util.LinkedList; +import java.util.Map; +import java.util.Queue; +import java.util.Set; +import java.util.concurrent.locks.ReadWriteLock; +import java.util.concurrent.locks.ReentrantReadWriteLock; +import java.util.logging.Level; +import java.util.logging.Logger; + +@Beta +public class EventBus { + private static final LoadingCache, Set>> flattenHierarchyCache = CacheBuilder.newBuilder().weakKeys().build(new CacheLoader, Set>>(){ + + @Override + public Set> load(Class concreteClass) { + return TypeToken.of(concreteClass).getTypes().rawTypes(); + } + }); + private final SetMultimap, EventSubscriber> subscribersByType = HashMultimap.create(); + private final ReadWriteLock subscribersByTypeLock = new ReentrantReadWriteLock(); + private final SubscriberFindingStrategy finder = new AnnotatedSubscriberFinder(); + private final ThreadLocal> eventsToDispatch = new ThreadLocal>(){ + + @Override + protected Queue initialValue() { + return new LinkedList(); + } + }; + private final ThreadLocal isDispatching = new ThreadLocal(){ + + @Override + protected Boolean initialValue() { + return false; + } + }; + private SubscriberExceptionHandler subscriberExceptionHandler; + + public EventBus() { + this("default"); + } + + public EventBus(String identifier) { + this(new LoggingSubscriberExceptionHandler(identifier)); + } + + public EventBus(SubscriberExceptionHandler subscriberExceptionHandler) { + this.subscriberExceptionHandler = Preconditions.checkNotNull(subscriberExceptionHandler); + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + public void register(Object object) { + Multimap, EventSubscriber> methodsInListener = this.finder.findAllSubscribers(object); + this.subscribersByTypeLock.writeLock().lock(); + try { + this.subscribersByType.putAll(methodsInListener); + } + finally { + this.subscribersByTypeLock.writeLock().unlock(); + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + public void unregister(Object object) { + Multimap, EventSubscriber> methodsInListener = this.finder.findAllSubscribers(object); + for (Map.Entry, Collection> entry : methodsInListener.asMap().entrySet()) { + Class eventType = entry.getKey(); + Collection eventMethodsInListener = entry.getValue(); + this.subscribersByTypeLock.writeLock().lock(); + try { + Set currentSubscribers = this.subscribersByType.get(eventType); + if (!currentSubscribers.containsAll(eventMethodsInListener)) { + String string = String.valueOf(String.valueOf(object)); + throw new IllegalArgumentException(new StringBuilder(65 + string.length()).append("missing event subscriber for an annotated method. Is ").append(string).append(" registered?").toString()); + } + currentSubscribers.removeAll(eventMethodsInListener); + } + finally { + this.subscribersByTypeLock.writeLock().unlock(); + } + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + public void post(Object event) { + Set> dispatchTypes = this.flattenHierarchy(event.getClass()); + boolean dispatched = false; + for (Class eventType : dispatchTypes) { + this.subscribersByTypeLock.readLock().lock(); + try { + Set wrappers = this.subscribersByType.get(eventType); + if (wrappers.isEmpty()) continue; + dispatched = true; + for (EventSubscriber wrapper : wrappers) { + this.enqueueEvent(event, wrapper); + } + } + finally { + this.subscribersByTypeLock.readLock().unlock(); + } + } + if (!dispatched && !(event instanceof DeadEvent)) { + this.post(new DeadEvent(this, event)); + } + this.dispatchQueuedEvents(); + } + + void enqueueEvent(Object event, EventSubscriber subscriber) { + this.eventsToDispatch.get().offer(new EventWithSubscriber(event, subscriber)); + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + void dispatchQueuedEvents() { + if (this.isDispatching.get().booleanValue()) { + return; + } + this.isDispatching.set(true); + try { + EventWithSubscriber eventWithSubscriber; + Queue events = this.eventsToDispatch.get(); + while ((eventWithSubscriber = events.poll()) != null) { + this.dispatch(eventWithSubscriber.event, eventWithSubscriber.subscriber); + } + } + finally { + this.isDispatching.remove(); + this.eventsToDispatch.remove(); + } + } + + void dispatch(Object event, EventSubscriber wrapper) { + try { + wrapper.handleEvent(event); + } + catch (InvocationTargetException e) { + try { + this.subscriberExceptionHandler.handleException(e.getCause(), new SubscriberExceptionContext(this, event, wrapper.getSubscriber(), wrapper.getMethod())); + } + catch (Throwable t) { + Logger.getLogger(EventBus.class.getName()).log(Level.SEVERE, String.format("Exception %s thrown while handling exception: %s", t, e.getCause()), t); + } + } + } + + @VisibleForTesting + Set> flattenHierarchy(Class concreteClass) { + try { + return flattenHierarchyCache.getUnchecked(concreteClass); + } + catch (UncheckedExecutionException e) { + throw Throwables.propagate(e.getCause()); + } + } + + static class EventWithSubscriber { + final Object event; + final EventSubscriber subscriber; + + public EventWithSubscriber(Object event, EventSubscriber subscriber) { + this.event = Preconditions.checkNotNull(event); + this.subscriber = Preconditions.checkNotNull(subscriber); + } + } + + private static final class LoggingSubscriberExceptionHandler + implements SubscriberExceptionHandler { + private final Logger logger; + + public LoggingSubscriberExceptionHandler(String identifier) { + String string = String.valueOf(String.valueOf(EventBus.class.getName())); + String string2 = String.valueOf(String.valueOf(Preconditions.checkNotNull(identifier))); + this.logger = Logger.getLogger(new StringBuilder(1 + string.length() + string2.length()).append(string).append(".").append(string2).toString()); + } + + @Override + public void handleException(Throwable exception, SubscriberExceptionContext context) { + String string = String.valueOf(String.valueOf(context.getSubscriber())); + String string2 = String.valueOf(String.valueOf(context.getSubscriberMethod())); + this.logger.log(Level.SEVERE, new StringBuilder(30 + string.length() + string2.length()).append("Could not dispatch event: ").append(string).append(" to ").append(string2).toString(), exception.getCause()); + } + } +} diff --git a/src/com/google/common/eventbus/EventSubscriber.java b/src/com/google/common/eventbus/EventSubscriber.java new file mode 100644 index 0000000..ea0fa16 --- /dev/null +++ b/src/com/google/common/eventbus/EventSubscriber.java @@ -0,0 +1,69 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.eventbus; + +import com.google.common.base.Preconditions; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import javax.annotation.Nullable; + +class EventSubscriber { + private final Object target; + private final Method method; + + EventSubscriber(Object target, Method method) { + Preconditions.checkNotNull(target, "EventSubscriber target cannot be null."); + Preconditions.checkNotNull(method, "EventSubscriber method cannot be null."); + this.target = target; + this.method = method; + method.setAccessible(true); + } + + public void handleEvent(Object event) throws InvocationTargetException { + Preconditions.checkNotNull(event); + try { + this.method.invoke(this.target, event); + } + catch (IllegalArgumentException e) { + String string = String.valueOf(String.valueOf(event)); + throw new Error(new StringBuilder(33 + string.length()).append("Method rejected target/argument: ").append(string).toString(), e); + } + catch (IllegalAccessException e) { + String string = String.valueOf(String.valueOf(event)); + throw new Error(new StringBuilder(28 + string.length()).append("Method became inaccessible: ").append(string).toString(), e); + } + catch (InvocationTargetException e) { + if (e.getCause() instanceof Error) { + throw (Error)e.getCause(); + } + throw e; + } + } + + public String toString() { + String string = String.valueOf(String.valueOf(this.method)); + return new StringBuilder(10 + string.length()).append("[wrapper ").append(string).append("]").toString(); + } + + public int hashCode() { + int PRIME = 31; + return (31 + this.method.hashCode()) * 31 + System.identityHashCode(this.target); + } + + public boolean equals(@Nullable Object obj) { + if (obj instanceof EventSubscriber) { + EventSubscriber that = (EventSubscriber)obj; + return this.target == that.target && this.method.equals(that.method); + } + return false; + } + + public Object getSubscriber() { + return this.target; + } + + public Method getMethod() { + return this.method; + } +} diff --git a/src/com/google/common/eventbus/Subscribe.java b/src/com/google/common/eventbus/Subscribe.java new file mode 100644 index 0000000..0035945 --- /dev/null +++ b/src/com/google/common/eventbus/Subscribe.java @@ -0,0 +1,16 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.eventbus; + +import com.google.common.annotations.Beta; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Retention(value=RetentionPolicy.RUNTIME) +@Target(value={ElementType.METHOD}) +@Beta +public @interface Subscribe { +} diff --git a/src/com/google/common/eventbus/SubscriberExceptionContext.java b/src/com/google/common/eventbus/SubscriberExceptionContext.java new file mode 100644 index 0000000..9ebea3e --- /dev/null +++ b/src/com/google/common/eventbus/SubscriberExceptionContext.java @@ -0,0 +1,38 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.eventbus; + +import com.google.common.base.Preconditions; +import com.google.common.eventbus.EventBus; +import java.lang.reflect.Method; + +public class SubscriberExceptionContext { + private final EventBus eventBus; + private final Object event; + private final Object subscriber; + private final Method subscriberMethod; + + SubscriberExceptionContext(EventBus eventBus, Object event, Object subscriber, Method subscriberMethod) { + this.eventBus = Preconditions.checkNotNull(eventBus); + this.event = Preconditions.checkNotNull(event); + this.subscriber = Preconditions.checkNotNull(subscriber); + this.subscriberMethod = Preconditions.checkNotNull(subscriberMethod); + } + + public EventBus getEventBus() { + return this.eventBus; + } + + public Object getEvent() { + return this.event; + } + + public Object getSubscriber() { + return this.subscriber; + } + + public Method getSubscriberMethod() { + return this.subscriberMethod; + } +} diff --git a/src/com/google/common/eventbus/SubscriberExceptionHandler.java b/src/com/google/common/eventbus/SubscriberExceptionHandler.java new file mode 100644 index 0000000..94b155a --- /dev/null +++ b/src/com/google/common/eventbus/SubscriberExceptionHandler.java @@ -0,0 +1,10 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.eventbus; + +import com.google.common.eventbus.SubscriberExceptionContext; + +public interface SubscriberExceptionHandler { + public void handleException(Throwable var1, SubscriberExceptionContext var2); +} diff --git a/src/com/google/common/eventbus/SubscriberFindingStrategy.java b/src/com/google/common/eventbus/SubscriberFindingStrategy.java new file mode 100644 index 0000000..c589010 --- /dev/null +++ b/src/com/google/common/eventbus/SubscriberFindingStrategy.java @@ -0,0 +1,11 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.eventbus; + +import com.google.common.collect.Multimap; +import com.google.common.eventbus.EventSubscriber; + +interface SubscriberFindingStrategy { + public Multimap, EventSubscriber> findAllSubscribers(Object var1); +} diff --git a/src/com/google/common/eventbus/SynchronizedEventSubscriber.java b/src/com/google/common/eventbus/SynchronizedEventSubscriber.java new file mode 100644 index 0000000..3c4d2d8 --- /dev/null +++ b/src/com/google/common/eventbus/SynchronizedEventSubscriber.java @@ -0,0 +1,26 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.eventbus; + +import com.google.common.eventbus.EventSubscriber; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; + +final class SynchronizedEventSubscriber +extends EventSubscriber { + public SynchronizedEventSubscriber(Object target, Method method) { + super(target, method); + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public void handleEvent(Object event) throws InvocationTargetException { + SynchronizedEventSubscriber synchronizedEventSubscriber = this; + synchronized (synchronizedEventSubscriber) { + super.handleEvent(event); + } + } +} diff --git a/src/com/google/common/hash/AbstractByteHasher.java b/src/com/google/common/hash/AbstractByteHasher.java new file mode 100644 index 0000000..4e067b7 --- /dev/null +++ b/src/com/google/common/hash/AbstractByteHasher.java @@ -0,0 +1,94 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.hash; + +import com.google.common.base.Preconditions; +import com.google.common.hash.AbstractHasher; +import com.google.common.hash.Funnel; +import com.google.common.hash.Hasher; +import java.nio.ByteBuffer; +import java.nio.ByteOrder; + +abstract class AbstractByteHasher +extends AbstractHasher { + private final ByteBuffer scratch = ByteBuffer.allocate(8).order(ByteOrder.LITTLE_ENDIAN); + + AbstractByteHasher() { + } + + protected abstract void update(byte var1); + + protected void update(byte[] b) { + this.update(b, 0, b.length); + } + + protected void update(byte[] b, int off, int len) { + for (int i = off; i < off + len; ++i) { + this.update(b[i]); + } + } + + @Override + public Hasher putByte(byte b) { + this.update(b); + return this; + } + + @Override + public Hasher putBytes(byte[] bytes) { + Preconditions.checkNotNull(bytes); + this.update(bytes); + return this; + } + + @Override + public Hasher putBytes(byte[] bytes, int off, int len) { + Preconditions.checkPositionIndexes(off, off + len, bytes.length); + this.update(bytes, off, len); + return this; + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + private Hasher update(int bytes) { + try { + this.update(this.scratch.array(), 0, bytes); + } + finally { + this.scratch.clear(); + } + return this; + } + + @Override + public Hasher putShort(short s) { + this.scratch.putShort(s); + return this.update(2); + } + + @Override + public Hasher putInt(int i) { + this.scratch.putInt(i); + return this.update(4); + } + + @Override + public Hasher putLong(long l) { + this.scratch.putLong(l); + return this.update(8); + } + + @Override + public Hasher putChar(char c) { + this.scratch.putChar(c); + return this.update(2); + } + + @Override + public Hasher putObject(T instance, Funnel funnel) { + funnel.funnel(instance, this); + return this; + } +} diff --git a/src/com/google/common/hash/AbstractCompositeHashFunction.java b/src/com/google/common/hash/AbstractCompositeHashFunction.java new file mode 100644 index 0000000..b2bafd8 --- /dev/null +++ b/src/com/google/common/hash/AbstractCompositeHashFunction.java @@ -0,0 +1,146 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.hash; + +import com.google.common.base.Preconditions; +import com.google.common.hash.AbstractStreamingHashFunction; +import com.google.common.hash.Funnel; +import com.google.common.hash.HashCode; +import com.google.common.hash.HashFunction; +import com.google.common.hash.Hasher; +import java.nio.charset.Charset; + +abstract class AbstractCompositeHashFunction +extends AbstractStreamingHashFunction { + final HashFunction[] functions; + private static final long serialVersionUID = 0L; + + AbstractCompositeHashFunction(HashFunction ... functions) { + for (HashFunction function : functions) { + Preconditions.checkNotNull(function); + } + this.functions = functions; + } + + abstract HashCode makeHash(Hasher[] var1); + + @Override + public Hasher newHasher() { + final Hasher[] hashers = new Hasher[this.functions.length]; + for (int i = 0; i < hashers.length; ++i) { + hashers[i] = this.functions[i].newHasher(); + } + return new Hasher(){ + + @Override + public Hasher putByte(byte b) { + for (Hasher hasher : hashers) { + hasher.putByte(b); + } + return this; + } + + @Override + public Hasher putBytes(byte[] bytes) { + for (Hasher hasher : hashers) { + hasher.putBytes(bytes); + } + return this; + } + + @Override + public Hasher putBytes(byte[] bytes, int off, int len) { + for (Hasher hasher : hashers) { + hasher.putBytes(bytes, off, len); + } + return this; + } + + @Override + public Hasher putShort(short s) { + for (Hasher hasher : hashers) { + hasher.putShort(s); + } + return this; + } + + @Override + public Hasher putInt(int i) { + for (Hasher hasher : hashers) { + hasher.putInt(i); + } + return this; + } + + @Override + public Hasher putLong(long l) { + for (Hasher hasher : hashers) { + hasher.putLong(l); + } + return this; + } + + @Override + public Hasher putFloat(float f) { + for (Hasher hasher : hashers) { + hasher.putFloat(f); + } + return this; + } + + @Override + public Hasher putDouble(double d) { + for (Hasher hasher : hashers) { + hasher.putDouble(d); + } + return this; + } + + @Override + public Hasher putBoolean(boolean b) { + for (Hasher hasher : hashers) { + hasher.putBoolean(b); + } + return this; + } + + @Override + public Hasher putChar(char c) { + for (Hasher hasher : hashers) { + hasher.putChar(c); + } + return this; + } + + @Override + public Hasher putUnencodedChars(CharSequence chars) { + for (Hasher hasher : hashers) { + hasher.putUnencodedChars(chars); + } + return this; + } + + @Override + public Hasher putString(CharSequence chars, Charset charset) { + for (Hasher hasher : hashers) { + hasher.putString(chars, charset); + } + return this; + } + + @Override + public Hasher putObject(T instance, Funnel funnel) { + for (Hasher hasher : hashers) { + hasher.putObject(instance, funnel); + } + return this; + } + + @Override + public HashCode hash() { + return AbstractCompositeHashFunction.this.makeHash(hashers); + } + }; + } +} diff --git a/src/com/google/common/hash/AbstractHasher.java b/src/com/google/common/hash/AbstractHasher.java new file mode 100644 index 0000000..03e642c --- /dev/null +++ b/src/com/google/common/hash/AbstractHasher.java @@ -0,0 +1,42 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.hash; + +import com.google.common.hash.Hasher; +import java.nio.charset.Charset; + +abstract class AbstractHasher +implements Hasher { + AbstractHasher() { + } + + @Override + public final Hasher putBoolean(boolean b) { + return this.putByte(b ? (byte)1 : 0); + } + + @Override + public final Hasher putDouble(double d) { + return this.putLong(Double.doubleToRawLongBits(d)); + } + + @Override + public final Hasher putFloat(float f) { + return this.putInt(Float.floatToRawIntBits(f)); + } + + @Override + public Hasher putUnencodedChars(CharSequence charSequence) { + int len = charSequence.length(); + for (int i = 0; i < len; ++i) { + this.putChar(charSequence.charAt(i)); + } + return this; + } + + @Override + public Hasher putString(CharSequence charSequence, Charset charset) { + return this.putBytes(charSequence.toString().getBytes(charset)); + } +} diff --git a/src/com/google/common/hash/AbstractNonStreamingHashFunction.java b/src/com/google/common/hash/AbstractNonStreamingHashFunction.java new file mode 100644 index 0000000..6e466cb --- /dev/null +++ b/src/com/google/common/hash/AbstractNonStreamingHashFunction.java @@ -0,0 +1,156 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.hash; + +import com.google.common.base.Preconditions; +import com.google.common.hash.AbstractHasher; +import com.google.common.hash.Funnel; +import com.google.common.hash.HashCode; +import com.google.common.hash.HashFunction; +import com.google.common.hash.Hasher; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.nio.charset.Charset; + +abstract class AbstractNonStreamingHashFunction +implements HashFunction { + AbstractNonStreamingHashFunction() { + } + + @Override + public Hasher newHasher() { + return new BufferingHasher(32); + } + + @Override + public Hasher newHasher(int expectedInputSize) { + Preconditions.checkArgument(expectedInputSize >= 0); + return new BufferingHasher(expectedInputSize); + } + + @Override + public HashCode hashObject(T instance, Funnel funnel) { + return this.newHasher().putObject(instance, funnel).hash(); + } + + @Override + public HashCode hashUnencodedChars(CharSequence input) { + int len = input.length(); + Hasher hasher = this.newHasher(len * 2); + for (int i = 0; i < len; ++i) { + hasher.putChar(input.charAt(i)); + } + return hasher.hash(); + } + + @Override + public HashCode hashString(CharSequence input, Charset charset) { + return this.hashBytes(input.toString().getBytes(charset)); + } + + @Override + public HashCode hashInt(int input) { + return this.newHasher(4).putInt(input).hash(); + } + + @Override + public HashCode hashLong(long input) { + return this.newHasher(8).putLong(input).hash(); + } + + @Override + public HashCode hashBytes(byte[] input) { + return this.hashBytes(input, 0, input.length); + } + + private static final class ExposedByteArrayOutputStream + extends ByteArrayOutputStream { + ExposedByteArrayOutputStream(int expectedInputSize) { + super(expectedInputSize); + } + + byte[] byteArray() { + return this.buf; + } + + int length() { + return this.count; + } + } + + private final class BufferingHasher + extends AbstractHasher { + final ExposedByteArrayOutputStream stream; + static final int BOTTOM_BYTE = 255; + + BufferingHasher(int expectedInputSize) { + this.stream = new ExposedByteArrayOutputStream(expectedInputSize); + } + + @Override + public Hasher putByte(byte b) { + this.stream.write(b); + return this; + } + + @Override + public Hasher putBytes(byte[] bytes) { + try { + this.stream.write(bytes); + } + catch (IOException e) { + throw new RuntimeException(e); + } + return this; + } + + @Override + public Hasher putBytes(byte[] bytes, int off, int len) { + this.stream.write(bytes, off, len); + return this; + } + + @Override + public Hasher putShort(short s) { + this.stream.write(s & 0xFF); + this.stream.write(s >>> 8 & 0xFF); + return this; + } + + @Override + public Hasher putInt(int i) { + this.stream.write(i & 0xFF); + this.stream.write(i >>> 8 & 0xFF); + this.stream.write(i >>> 16 & 0xFF); + this.stream.write(i >>> 24 & 0xFF); + return this; + } + + @Override + public Hasher putLong(long l) { + for (int i = 0; i < 64; i += 8) { + this.stream.write((byte)(l >>> i & 0xFFL)); + } + return this; + } + + @Override + public Hasher putChar(char c) { + this.stream.write(c & 0xFF); + this.stream.write(c >>> 8 & 0xFF); + return this; + } + + @Override + public Hasher putObject(T instance, Funnel funnel) { + funnel.funnel(instance, this); + return this; + } + + @Override + public HashCode hash() { + return AbstractNonStreamingHashFunction.this.hashBytes(this.stream.byteArray(), 0, this.stream.length()); + } + } +} diff --git a/src/com/google/common/hash/AbstractStreamingHashFunction.java b/src/com/google/common/hash/AbstractStreamingHashFunction.java new file mode 100644 index 0000000..22f797e --- /dev/null +++ b/src/com/google/common/hash/AbstractStreamingHashFunction.java @@ -0,0 +1,195 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.hash; + +import com.google.common.base.Preconditions; +import com.google.common.hash.AbstractHasher; +import com.google.common.hash.Funnel; +import com.google.common.hash.HashCode; +import com.google.common.hash.HashFunction; +import com.google.common.hash.Hasher; +import java.nio.ByteBuffer; +import java.nio.ByteOrder; +import java.nio.charset.Charset; + +abstract class AbstractStreamingHashFunction +implements HashFunction { + AbstractStreamingHashFunction() { + } + + @Override + public HashCode hashObject(T instance, Funnel funnel) { + return this.newHasher().putObject(instance, funnel).hash(); + } + + @Override + public HashCode hashUnencodedChars(CharSequence input) { + return this.newHasher().putUnencodedChars(input).hash(); + } + + @Override + public HashCode hashString(CharSequence input, Charset charset) { + return this.newHasher().putString(input, charset).hash(); + } + + @Override + public HashCode hashInt(int input) { + return this.newHasher().putInt(input).hash(); + } + + @Override + public HashCode hashLong(long input) { + return this.newHasher().putLong(input).hash(); + } + + @Override + public HashCode hashBytes(byte[] input) { + return this.newHasher().putBytes(input).hash(); + } + + @Override + public HashCode hashBytes(byte[] input, int off, int len) { + return this.newHasher().putBytes(input, off, len).hash(); + } + + @Override + public Hasher newHasher(int expectedInputSize) { + Preconditions.checkArgument(expectedInputSize >= 0); + return this.newHasher(); + } + + protected static abstract class AbstractStreamingHasher + extends AbstractHasher { + private final ByteBuffer buffer; + private final int bufferSize; + private final int chunkSize; + + protected AbstractStreamingHasher(int chunkSize) { + this(chunkSize, chunkSize); + } + + protected AbstractStreamingHasher(int chunkSize, int bufferSize) { + Preconditions.checkArgument(bufferSize % chunkSize == 0); + this.buffer = ByteBuffer.allocate(bufferSize + 7).order(ByteOrder.LITTLE_ENDIAN); + this.bufferSize = bufferSize; + this.chunkSize = chunkSize; + } + + protected abstract void process(ByteBuffer var1); + + protected void processRemaining(ByteBuffer bb) { + bb.position(bb.limit()); + bb.limit(this.chunkSize + 7); + while (bb.position() < this.chunkSize) { + bb.putLong(0L); + } + bb.limit(this.chunkSize); + bb.flip(); + this.process(bb); + } + + @Override + public final Hasher putBytes(byte[] bytes) { + return this.putBytes(bytes, 0, bytes.length); + } + + @Override + public final Hasher putBytes(byte[] bytes, int off, int len) { + return this.putBytes(ByteBuffer.wrap(bytes, off, len).order(ByteOrder.LITTLE_ENDIAN)); + } + + private Hasher putBytes(ByteBuffer readBuffer) { + if (readBuffer.remaining() <= this.buffer.remaining()) { + this.buffer.put(readBuffer); + this.munchIfFull(); + return this; + } + int bytesToCopy = this.bufferSize - this.buffer.position(); + for (int i = 0; i < bytesToCopy; ++i) { + this.buffer.put(readBuffer.get()); + } + this.munch(); + while (readBuffer.remaining() >= this.chunkSize) { + this.process(readBuffer); + } + this.buffer.put(readBuffer); + return this; + } + + @Override + public final Hasher putUnencodedChars(CharSequence charSequence) { + for (int i = 0; i < charSequence.length(); ++i) { + this.putChar(charSequence.charAt(i)); + } + return this; + } + + @Override + public final Hasher putByte(byte b) { + this.buffer.put(b); + this.munchIfFull(); + return this; + } + + @Override + public final Hasher putShort(short s) { + this.buffer.putShort(s); + this.munchIfFull(); + return this; + } + + @Override + public final Hasher putChar(char c) { + this.buffer.putChar(c); + this.munchIfFull(); + return this; + } + + @Override + public final Hasher putInt(int i) { + this.buffer.putInt(i); + this.munchIfFull(); + return this; + } + + @Override + public final Hasher putLong(long l) { + this.buffer.putLong(l); + this.munchIfFull(); + return this; + } + + @Override + public final Hasher putObject(T instance, Funnel funnel) { + funnel.funnel(instance, this); + return this; + } + + @Override + public final HashCode hash() { + this.munch(); + this.buffer.flip(); + if (this.buffer.remaining() > 0) { + this.processRemaining(this.buffer); + } + return this.makeHash(); + } + + abstract HashCode makeHash(); + + private void munchIfFull() { + if (this.buffer.remaining() < 8) { + this.munch(); + } + } + + private void munch() { + this.buffer.flip(); + while (this.buffer.remaining() >= this.chunkSize) { + this.process(this.buffer); + } + this.buffer.compact(); + } + } +} diff --git a/src/com/google/common/hash/BloomFilter.java b/src/com/google/common/hash/BloomFilter.java new file mode 100644 index 0000000..98b6418 --- /dev/null +++ b/src/com/google/common/hash/BloomFilter.java @@ -0,0 +1,213 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.hash; + +import com.google.common.annotations.Beta; +import com.google.common.annotations.VisibleForTesting; +import com.google.common.base.Objects; +import com.google.common.base.Preconditions; +import com.google.common.base.Predicate; +import com.google.common.hash.BloomFilterStrategies; +import com.google.common.hash.Funnel; +import com.google.common.primitives.SignedBytes; +import com.google.common.primitives.UnsignedBytes; +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.io.Serializable; +import javax.annotation.Nullable; + +@Beta +public final class BloomFilter +implements Predicate, +Serializable { + private final BloomFilterStrategies.BitArray bits; + private final int numHashFunctions; + private final Funnel funnel; + private final Strategy strategy; + private static final Strategy DEFAULT_STRATEGY = BloomFilterStrategies.MURMUR128_MITZ_64; + + private BloomFilter(BloomFilterStrategies.BitArray bits, int numHashFunctions, Funnel funnel, Strategy strategy) { + Preconditions.checkArgument(numHashFunctions > 0, "numHashFunctions (%s) must be > 0", numHashFunctions); + Preconditions.checkArgument(numHashFunctions <= 255, "numHashFunctions (%s) must be <= 255", numHashFunctions); + this.bits = Preconditions.checkNotNull(bits); + this.numHashFunctions = numHashFunctions; + this.funnel = Preconditions.checkNotNull(funnel); + this.strategy = Preconditions.checkNotNull(strategy); + } + + public BloomFilter copy() { + return new BloomFilter(this.bits.copy(), this.numHashFunctions, this.funnel, this.strategy); + } + + public boolean mightContain(T object) { + return this.strategy.mightContain(object, this.funnel, this.numHashFunctions, this.bits); + } + + @Override + @Deprecated + public boolean apply(T input) { + return this.mightContain(input); + } + + public boolean put(T object) { + return this.strategy.put(object, this.funnel, this.numHashFunctions, this.bits); + } + + public double expectedFpp() { + return Math.pow((double)this.bits.bitCount() / (double)this.bitSize(), this.numHashFunctions); + } + + @VisibleForTesting + long bitSize() { + return this.bits.bitSize(); + } + + public boolean isCompatible(BloomFilter that) { + Preconditions.checkNotNull(that); + return this != that && this.numHashFunctions == that.numHashFunctions && this.bitSize() == that.bitSize() && this.strategy.equals(that.strategy) && this.funnel.equals(that.funnel); + } + + public void putAll(BloomFilter that) { + Preconditions.checkNotNull(that); + Preconditions.checkArgument(this != that, "Cannot combine a BloomFilter with itself."); + Preconditions.checkArgument(this.numHashFunctions == that.numHashFunctions, "BloomFilters must have the same number of hash functions (%s != %s)", this.numHashFunctions, that.numHashFunctions); + Preconditions.checkArgument(this.bitSize() == that.bitSize(), "BloomFilters must have the same size underlying bit arrays (%s != %s)", this.bitSize(), that.bitSize()); + Preconditions.checkArgument(this.strategy.equals(that.strategy), "BloomFilters must have equal strategies (%s != %s)", this.strategy, that.strategy); + Preconditions.checkArgument(this.funnel.equals(that.funnel), "BloomFilters must have equal funnels (%s != %s)", this.funnel, that.funnel); + this.bits.putAll(that.bits); + } + + @Override + public boolean equals(@Nullable Object object) { + if (object == this) { + return true; + } + if (object instanceof BloomFilter) { + BloomFilter that = (BloomFilter)object; + return this.numHashFunctions == that.numHashFunctions && this.funnel.equals(that.funnel) && this.bits.equals(that.bits) && this.strategy.equals(that.strategy); + } + return false; + } + + public int hashCode() { + return Objects.hashCode(this.numHashFunctions, this.funnel, this.strategy, this.bits); + } + + public static BloomFilter create(Funnel funnel, int expectedInsertions, double fpp) { + return BloomFilter.create(funnel, expectedInsertions, fpp, DEFAULT_STRATEGY); + } + + @VisibleForTesting + static BloomFilter create(Funnel funnel, int expectedInsertions, double fpp, Strategy strategy) { + Preconditions.checkNotNull(funnel); + Preconditions.checkArgument(expectedInsertions >= 0, "Expected insertions (%s) must be >= 0", expectedInsertions); + Preconditions.checkArgument(fpp > 0.0, "False positive probability (%s) must be > 0.0", fpp); + Preconditions.checkArgument(fpp < 1.0, "False positive probability (%s) must be < 1.0", fpp); + Preconditions.checkNotNull(strategy); + if (expectedInsertions == 0) { + expectedInsertions = 1; + } + long numBits = BloomFilter.optimalNumOfBits(expectedInsertions, fpp); + int numHashFunctions = BloomFilter.optimalNumOfHashFunctions(expectedInsertions, numBits); + try { + return new BloomFilter(new BloomFilterStrategies.BitArray(numBits), numHashFunctions, funnel, strategy); + } + catch (IllegalArgumentException e) { + long l = numBits; + throw new IllegalArgumentException(new StringBuilder(57).append("Could not create BloomFilter of ").append(l).append(" bits").toString(), e); + } + } + + public static BloomFilter create(Funnel funnel, int expectedInsertions) { + return BloomFilter.create(funnel, expectedInsertions, 0.03); + } + + @VisibleForTesting + static int optimalNumOfHashFunctions(long n, long m) { + return Math.max(1, (int)Math.round((double)m / (double)n * Math.log(2.0))); + } + + @VisibleForTesting + static long optimalNumOfBits(long n, double p) { + if (p == 0.0) { + p = Double.MIN_VALUE; + } + return (long)((double)(-n) * Math.log(p) / (Math.log(2.0) * Math.log(2.0))); + } + + private Object writeReplace() { + return new SerialForm(this); + } + + public void writeTo(OutputStream out) throws IOException { + DataOutputStream dout = new DataOutputStream(out); + dout.writeByte(SignedBytes.checkedCast(this.strategy.ordinal())); + dout.writeByte(UnsignedBytes.checkedCast(this.numHashFunctions)); + dout.writeInt(this.bits.data.length); + for (long value : this.bits.data) { + dout.writeLong(value); + } + } + + public static BloomFilter readFrom(InputStream in, Funnel funnel) throws IOException { + Preconditions.checkNotNull(in, "InputStream"); + Preconditions.checkNotNull(funnel, "Funnel"); + int strategyOrdinal = -1; + int numHashFunctions = -1; + int dataLength = -1; + try { + DataInputStream din = new DataInputStream(in); + strategyOrdinal = din.readByte(); + numHashFunctions = UnsignedBytes.toInt(din.readByte()); + dataLength = din.readInt(); + BloomFilterStrategies strategy = BloomFilterStrategies.values()[strategyOrdinal]; + long[] data = new long[dataLength]; + for (int i = 0; i < data.length; ++i) { + data[i] = din.readLong(); + } + return new BloomFilter(new BloomFilterStrategies.BitArray(data), numHashFunctions, funnel, strategy); + } + catch (RuntimeException e) { + String string = String.valueOf(String.valueOf("Unable to deserialize BloomFilter from InputStream. strategyOrdinal: ")); + int n = strategyOrdinal; + int n2 = numHashFunctions; + int n3 = dataLength; + IOException ioException = new IOException(new StringBuilder(65 + string.length()).append(string).append(n).append(" numHashFunctions: ").append(n2).append(" dataLength: ").append(n3).toString()); + ioException.initCause(e); + throw ioException; + } + } + + private static class SerialForm + implements Serializable { + final long[] data; + final int numHashFunctions; + final Funnel funnel; + final Strategy strategy; + private static final long serialVersionUID = 1L; + + SerialForm(BloomFilter bf) { + this.data = ((BloomFilter)bf).bits.data; + this.numHashFunctions = ((BloomFilter)bf).numHashFunctions; + this.funnel = ((BloomFilter)bf).funnel; + this.strategy = ((BloomFilter)bf).strategy; + } + + Object readResolve() { + return new BloomFilter(new BloomFilterStrategies.BitArray(this.data), this.numHashFunctions, this.funnel, this.strategy); + } + } + + static interface Strategy + extends Serializable { + public boolean put(T var1, Funnel var2, int var3, BloomFilterStrategies.BitArray var4); + + public boolean mightContain(T var1, Funnel var2, int var3, BloomFilterStrategies.BitArray var4); + + public int ordinal(); + } +} diff --git a/src/com/google/common/hash/BloomFilterStrategies.java b/src/com/google/common/hash/BloomFilterStrategies.java new file mode 100644 index 0000000..9fc9805 --- /dev/null +++ b/src/com/google/common/hash/BloomFilterStrategies.java @@ -0,0 +1,164 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.hash; + +import com.google.common.base.Preconditions; +import com.google.common.hash.BloomFilter; +import com.google.common.hash.Funnel; +import com.google.common.hash.Hashing; +import com.google.common.math.LongMath; +import com.google.common.primitives.Ints; +import com.google.common.primitives.Longs; +import java.math.RoundingMode; +import java.util.Arrays; + +enum BloomFilterStrategies implements BloomFilter.Strategy +{ + MURMUR128_MITZ_32{ + + @Override + public boolean put(T object, Funnel funnel, int numHashFunctions, BitArray bits) { + long bitSize = bits.bitSize(); + long hash64 = Hashing.murmur3_128().hashObject(object, funnel).asLong(); + int hash1 = (int)hash64; + int hash2 = (int)(hash64 >>> 32); + boolean bitsChanged = false; + for (int i = 1; i <= numHashFunctions; ++i) { + int combinedHash = hash1 + i * hash2; + if (combinedHash < 0) { + combinedHash ^= 0xFFFFFFFF; + } + bitsChanged |= bits.set((long)combinedHash % bitSize); + } + return bitsChanged; + } + + @Override + public boolean mightContain(T object, Funnel funnel, int numHashFunctions, BitArray bits) { + long bitSize = bits.bitSize(); + long hash64 = Hashing.murmur3_128().hashObject(object, funnel).asLong(); + int hash1 = (int)hash64; + int hash2 = (int)(hash64 >>> 32); + for (int i = 1; i <= numHashFunctions; ++i) { + int combinedHash = hash1 + i * hash2; + if (combinedHash < 0) { + combinedHash ^= 0xFFFFFFFF; + } + if (bits.get((long)combinedHash % bitSize)) continue; + return false; + } + return true; + } + } + , + MURMUR128_MITZ_64{ + + @Override + public boolean put(T object, Funnel funnel, int numHashFunctions, BitArray bits) { + long bitSize = bits.bitSize(); + byte[] bytes = Hashing.murmur3_128().hashObject(object, funnel).getBytesInternal(); + long hash1 = this.lowerEight(bytes); + long hash2 = this.upperEight(bytes); + boolean bitsChanged = false; + long combinedHash = hash1; + for (int i = 0; i < numHashFunctions; ++i) { + bitsChanged |= bits.set((combinedHash & Long.MAX_VALUE) % bitSize); + combinedHash += hash2; + } + return bitsChanged; + } + + @Override + public boolean mightContain(T object, Funnel funnel, int numHashFunctions, BitArray bits) { + long bitSize = bits.bitSize(); + byte[] bytes = Hashing.murmur3_128().hashObject(object, funnel).getBytesInternal(); + long hash1 = this.lowerEight(bytes); + long hash2 = this.upperEight(bytes); + long combinedHash = hash1; + for (int i = 0; i < numHashFunctions; ++i) { + if (!bits.get((combinedHash & Long.MAX_VALUE) % bitSize)) { + return false; + } + combinedHash += hash2; + } + return true; + } + + private long lowerEight(byte[] bytes) { + return Longs.fromBytes(bytes[7], bytes[6], bytes[5], bytes[4], bytes[3], bytes[2], bytes[1], bytes[0]); + } + + private long upperEight(byte[] bytes) { + return Longs.fromBytes(bytes[15], bytes[14], bytes[13], bytes[12], bytes[11], bytes[10], bytes[9], bytes[8]); + } + }; + + + static final class BitArray { + final long[] data; + long bitCount; + + BitArray(long bits) { + this(new long[Ints.checkedCast(LongMath.divide(bits, 64L, RoundingMode.CEILING))]); + } + + BitArray(long[] data) { + Preconditions.checkArgument(data.length > 0, "data length is zero!"); + this.data = data; + long bitCount = 0L; + for (long value : data) { + bitCount += (long)Long.bitCount(value); + } + this.bitCount = bitCount; + } + + boolean set(long index) { + if (!this.get(index)) { + int n = (int)(index >>> 6); + this.data[n] = this.data[n] | 1L << (int)index; + ++this.bitCount; + return true; + } + return false; + } + + boolean get(long index) { + return (this.data[(int)(index >>> 6)] & 1L << (int)index) != 0L; + } + + long bitSize() { + return (long)this.data.length * 64L; + } + + long bitCount() { + return this.bitCount; + } + + BitArray copy() { + return new BitArray((long[])this.data.clone()); + } + + void putAll(BitArray array) { + Preconditions.checkArgument(this.data.length == array.data.length, "BitArrays must be of equal length (%s != %s)", this.data.length, array.data.length); + this.bitCount = 0L; + for (int i = 0; i < this.data.length; ++i) { + int n = i; + this.data[n] = this.data[n] | array.data[i]; + this.bitCount += (long)Long.bitCount(this.data[i]); + } + } + + public boolean equals(Object o) { + if (o instanceof BitArray) { + BitArray bitArray = (BitArray)o; + return Arrays.equals(this.data, bitArray.data); + } + return false; + } + + public int hashCode() { + return Arrays.hashCode(this.data); + } + } +} diff --git a/src/com/google/common/hash/ChecksumHashFunction.java b/src/com/google/common/hash/ChecksumHashFunction.java new file mode 100644 index 0000000..c89fdea --- /dev/null +++ b/src/com/google/common/hash/ChecksumHashFunction.java @@ -0,0 +1,71 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.hash; + +import com.google.common.base.Preconditions; +import com.google.common.base.Supplier; +import com.google.common.hash.AbstractByteHasher; +import com.google.common.hash.AbstractStreamingHashFunction; +import com.google.common.hash.HashCode; +import com.google.common.hash.Hasher; +import java.io.Serializable; +import java.util.zip.Checksum; + +final class ChecksumHashFunction +extends AbstractStreamingHashFunction +implements Serializable { + private final Supplier checksumSupplier; + private final int bits; + private final String toString; + private static final long serialVersionUID = 0L; + + ChecksumHashFunction(Supplier checksumSupplier, int bits, String toString) { + this.checksumSupplier = Preconditions.checkNotNull(checksumSupplier); + Preconditions.checkArgument(bits == 32 || bits == 64, "bits (%s) must be either 32 or 64", bits); + this.bits = bits; + this.toString = Preconditions.checkNotNull(toString); + } + + @Override + public int bits() { + return this.bits; + } + + @Override + public Hasher newHasher() { + return new ChecksumHasher(this.checksumSupplier.get()); + } + + public String toString() { + return this.toString; + } + + private final class ChecksumHasher + extends AbstractByteHasher { + private final Checksum checksum; + + private ChecksumHasher(Checksum checksum) { + this.checksum = Preconditions.checkNotNull(checksum); + } + + @Override + protected void update(byte b) { + this.checksum.update(b); + } + + @Override + protected void update(byte[] bytes, int off, int len) { + this.checksum.update(bytes, off, len); + } + + @Override + public HashCode hash() { + long value = this.checksum.getValue(); + if (ChecksumHashFunction.this.bits == 32) { + return HashCode.fromInt((int)value); + } + return HashCode.fromLong(value); + } + } +} diff --git a/src/com/google/common/hash/Crc32cHashFunction.java b/src/com/google/common/hash/Crc32cHashFunction.java new file mode 100644 index 0000000..62db933 --- /dev/null +++ b/src/com/google/common/hash/Crc32cHashFunction.java @@ -0,0 +1,49 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.hash; + +import com.google.common.hash.AbstractByteHasher; +import com.google.common.hash.AbstractStreamingHashFunction; +import com.google.common.hash.HashCode; +import com.google.common.hash.Hasher; + +final class Crc32cHashFunction +extends AbstractStreamingHashFunction { + Crc32cHashFunction() { + } + + @Override + public int bits() { + return 32; + } + + @Override + public Hasher newHasher() { + return new Crc32cHasher(); + } + + public String toString() { + return "Hashing.crc32c()"; + } + + static final class Crc32cHasher + extends AbstractByteHasher { + static final int[] CRC_TABLE = new int[]{0, -227835133, -516198153, 324072436, -946170081, 904991772, 648144872, -724933397, -1965467441, 2024987596, 1809983544, -1719030981, 1296289744, -1087877933, -1401372889, 1578318884, 274646895, -499825556, -244992104, 51262619, -675000208, 632279923, 922689671, -996891772, -1702387808, 1760304291, 2075979607, -1982370732, 1562183871, -1351185476, -1138329528, 1313733451, 549293790, -757723683, -1048117719, 871202090, -416867903, 357341890, 102525238, -193467851, -1436232175, 1477399826, 1264559846, -1187764763, 1845379342, -1617575411, -1933233671, 2125378298, 820201905, -1031222606, -774358714, 598981189, -143008082, 85089709, 373468761, -467063462, -1170599554, 1213305469, 1526817161, -1452612982, 2107672161, -1882520222, -1667500394, 1861252501, 1098587580, -1290756417, -1606390453, 1378610760, -2032039261, 1955203488, 1742404180, -1783531177, -878557837, 969524848, 714683780, -655182201, 205050476, -28094097, -318528869, 526918040, 1361435347, -1555146288, -1340167644, 1114974503, -1765847604, 1691668175, 2005155131, -2047885768, -604208612, 697762079, 986182379, -928222744, 476452099, -301099520, -44210700, 255256311, 1640403810, -1817374623, -2130844779, 1922457750, -1503918979, 1412925310, 1197962378, -1257441399, -350237779, 427051182, 170179418, -129025959, 746937522, -554770511, -843174843, 1070968646, 1905808397, -2081171698, -1868356358, 1657317369, -1241332974, 1147748369, 1463399397, -1521340186, -79622974, 153784257, 444234805, -401473738, 1021025245, -827320098, -572462294, 797665321, -2097792136, 1889384571, 1674398607, -1851340660, 1164749927, -1224265884, -1537745776, 1446797203, 137323447, -96149324, -384560320, 461344835, -810158936, 1037989803, 781091935, -588970148, -1834419177, 1623424788, 1939049696, -2114449437, 1429367560, -1487280117, -1274471425, 1180866812, 410100952, -367384613, -112536529, 186734380, -538233913, 763408580, 1053836080, -860110797, -1572096602, 1344288421, 1131464017, -1323612590, 1708204729, -1749376582, -2065018290, 1988219213, 680717673, -621187478, -911630946, 1002577565, -284657034, 493091189, 238226049, -61306494, -1307217207, 1082061258, 1395524158, -1589280451, 1972364758, -2015074603, -1800104671, 1725896226, 952904198, -894981883, -638100751, 731699698, -11092711, 222117402, 510512622, -335130899, -1014159676, 837199303, 582374963, -790768336, 68661723, -159632680, -450051796, 390545967, 1230274059, -1153434360, -1469116676, 1510247935, -1899042540, 2091215383, 1878366691, -1650582816, -741088853, 565732008, 854102364, -1065151905, 340358836, -433916489, -177076669, 119113024, 1493875044, -1419691417, -1204696685, 1247431312, -1634718085, 1828433272, 2141937292, -1916740209, -483350502, 291187481, 34330861, -262120466, 615137029, -691946490, -980332558, 939183345, 1776939221, -1685949482, -1999470558, 2058945313, -1368168502, 1545135305, 1330124605, -1121741762, -210866315, 17165430, 307568514, -532767615, 888469610, -962626711, -707819363, 665062302, 2042050490, -1948470087, -1735637171, 1793573966, -1104306011, 1279665062, 1595330642, -1384295599}; + private int crc = 0; + + Crc32cHasher() { + } + + @Override + public void update(byte b) { + this.crc ^= 0xFFFFFFFF; + this.crc = ~(this.crc >>> 8 ^ CRC_TABLE[(this.crc ^ b) & 0xFF]); + } + + @Override + public HashCode hash() { + return HashCode.fromInt(this.crc); + } + } +} diff --git a/src/com/google/common/hash/Funnel.java b/src/com/google/common/hash/Funnel.java new file mode 100644 index 0000000..b7e9380 --- /dev/null +++ b/src/com/google/common/hash/Funnel.java @@ -0,0 +1,14 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.hash; + +import com.google.common.annotations.Beta; +import com.google.common.hash.PrimitiveSink; +import java.io.Serializable; + +@Beta +public interface Funnel +extends Serializable { + public void funnel(T var1, PrimitiveSink var2); +} diff --git a/src/com/google/common/hash/Funnels.java b/src/com/google/common/hash/Funnels.java new file mode 100644 index 0000000..b97a525 --- /dev/null +++ b/src/com/google/common/hash/Funnels.java @@ -0,0 +1,220 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.hash; + +import com.google.common.annotations.Beta; +import com.google.common.base.Preconditions; +import com.google.common.hash.Funnel; +import com.google.common.hash.PrimitiveSink; +import java.io.OutputStream; +import java.io.Serializable; +import java.nio.charset.Charset; +import javax.annotation.Nullable; + +@Beta +public final class Funnels { + private Funnels() { + } + + public static Funnel byteArrayFunnel() { + return ByteArrayFunnel.INSTANCE; + } + + public static Funnel unencodedCharsFunnel() { + return UnencodedCharsFunnel.INSTANCE; + } + + public static Funnel stringFunnel(Charset charset) { + return new StringCharsetFunnel(charset); + } + + public static Funnel integerFunnel() { + return IntegerFunnel.INSTANCE; + } + + public static Funnel> sequentialFunnel(Funnel elementFunnel) { + return new SequentialFunnel(elementFunnel); + } + + public static Funnel longFunnel() { + return LongFunnel.INSTANCE; + } + + public static OutputStream asOutputStream(PrimitiveSink sink) { + return new SinkAsStream(sink); + } + + private static class SinkAsStream + extends OutputStream { + final PrimitiveSink sink; + + SinkAsStream(PrimitiveSink sink) { + this.sink = Preconditions.checkNotNull(sink); + } + + @Override + public void write(int b) { + this.sink.putByte((byte)b); + } + + @Override + public void write(byte[] bytes) { + this.sink.putBytes(bytes); + } + + @Override + public void write(byte[] bytes, int off, int len) { + this.sink.putBytes(bytes, off, len); + } + + public String toString() { + String string = String.valueOf(String.valueOf(this.sink)); + return new StringBuilder(24 + string.length()).append("Funnels.asOutputStream(").append(string).append(")").toString(); + } + } + + private static enum LongFunnel implements Funnel + { + INSTANCE; + + + @Override + public void funnel(Long from, PrimitiveSink into) { + into.putLong(from); + } + + public String toString() { + return "Funnels.longFunnel()"; + } + } + + private static class SequentialFunnel + implements Funnel>, + Serializable { + private final Funnel elementFunnel; + + SequentialFunnel(Funnel elementFunnel) { + this.elementFunnel = Preconditions.checkNotNull(elementFunnel); + } + + @Override + public void funnel(Iterable from, PrimitiveSink into) { + for (E e : from) { + this.elementFunnel.funnel(e, into); + } + } + + public String toString() { + String string = String.valueOf(String.valueOf(this.elementFunnel)); + return new StringBuilder(26 + string.length()).append("Funnels.sequentialFunnel(").append(string).append(")").toString(); + } + + public boolean equals(@Nullable Object o) { + if (o instanceof SequentialFunnel) { + SequentialFunnel funnel = (SequentialFunnel)o; + return this.elementFunnel.equals(funnel.elementFunnel); + } + return false; + } + + public int hashCode() { + return SequentialFunnel.class.hashCode() ^ this.elementFunnel.hashCode(); + } + } + + private static enum IntegerFunnel implements Funnel + { + INSTANCE; + + + @Override + public void funnel(Integer from, PrimitiveSink into) { + into.putInt(from); + } + + public String toString() { + return "Funnels.integerFunnel()"; + } + } + + private static class StringCharsetFunnel + implements Funnel, + Serializable { + private final Charset charset; + + StringCharsetFunnel(Charset charset) { + this.charset = Preconditions.checkNotNull(charset); + } + + @Override + public void funnel(CharSequence from, PrimitiveSink into) { + into.putString(from, this.charset); + } + + public String toString() { + String string = String.valueOf(String.valueOf(this.charset.name())); + return new StringBuilder(22 + string.length()).append("Funnels.stringFunnel(").append(string).append(")").toString(); + } + + public boolean equals(@Nullable Object o) { + if (o instanceof StringCharsetFunnel) { + StringCharsetFunnel funnel = (StringCharsetFunnel)o; + return this.charset.equals(funnel.charset); + } + return false; + } + + public int hashCode() { + return StringCharsetFunnel.class.hashCode() ^ this.charset.hashCode(); + } + + Object writeReplace() { + return new SerializedForm(this.charset); + } + + private static class SerializedForm + implements Serializable { + private final String charsetCanonicalName; + private static final long serialVersionUID = 0L; + + SerializedForm(Charset charset) { + this.charsetCanonicalName = charset.name(); + } + + private Object readResolve() { + return Funnels.stringFunnel(Charset.forName(this.charsetCanonicalName)); + } + } + } + + private static enum UnencodedCharsFunnel implements Funnel + { + INSTANCE; + + + @Override + public void funnel(CharSequence from, PrimitiveSink into) { + into.putUnencodedChars(from); + } + + public String toString() { + return "Funnels.unencodedCharsFunnel()"; + } + } + + private static enum ByteArrayFunnel implements Funnel + { + INSTANCE; + + + @Override + public void funnel(byte[] from, PrimitiveSink into) { + into.putBytes(from); + } + + public String toString() { + return "Funnels.byteArrayFunnel()"; + } + } +} diff --git a/src/com/google/common/hash/HashCode.java b/src/com/google/common/hash/HashCode.java new file mode 100644 index 0000000..58505ab --- /dev/null +++ b/src/com/google/common/hash/HashCode.java @@ -0,0 +1,267 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.hash; + +import com.google.common.annotations.Beta; +import com.google.common.base.Preconditions; +import com.google.common.primitives.Ints; +import com.google.common.primitives.UnsignedInts; +import java.io.Serializable; +import java.security.MessageDigest; +import javax.annotation.Nullable; + +@Beta +public abstract class HashCode { + private static final char[] hexDigits = "0123456789abcdef".toCharArray(); + + HashCode() { + } + + public abstract int bits(); + + public abstract int asInt(); + + public abstract long asLong(); + + public abstract long padToLong(); + + public abstract byte[] asBytes(); + + public int writeBytesTo(byte[] dest, int offset, int maxLength) { + maxLength = Ints.min(maxLength, this.bits() / 8); + Preconditions.checkPositionIndexes(offset, offset + maxLength, dest.length); + this.writeBytesToImpl(dest, offset, maxLength); + return maxLength; + } + + abstract void writeBytesToImpl(byte[] var1, int var2, int var3); + + byte[] getBytesInternal() { + return this.asBytes(); + } + + abstract boolean equalsSameBits(HashCode var1); + + public static HashCode fromInt(int hash) { + return new IntHashCode(hash); + } + + public static HashCode fromLong(long hash) { + return new LongHashCode(hash); + } + + public static HashCode fromBytes(byte[] bytes) { + Preconditions.checkArgument(bytes.length >= 1, "A HashCode must contain at least 1 byte."); + return HashCode.fromBytesNoCopy((byte[])bytes.clone()); + } + + static HashCode fromBytesNoCopy(byte[] bytes) { + return new BytesHashCode(bytes); + } + + public static HashCode fromString(String string) { + Preconditions.checkArgument(string.length() >= 2, "input string (%s) must have at least 2 characters", string); + Preconditions.checkArgument(string.length() % 2 == 0, "input string (%s) must have an even number of characters", string); + byte[] bytes = new byte[string.length() / 2]; + for (int i = 0; i < string.length(); i += 2) { + int ch1 = HashCode.decode(string.charAt(i)) << 4; + int ch2 = HashCode.decode(string.charAt(i + 1)); + bytes[i / 2] = (byte)(ch1 + ch2); + } + return HashCode.fromBytesNoCopy(bytes); + } + + private static int decode(char ch) { + if (ch >= '0' && ch <= '9') { + return ch - 48; + } + if (ch >= 'a' && ch <= 'f') { + return ch - 97 + 10; + } + char c = ch; + throw new IllegalArgumentException(new StringBuilder(32).append("Illegal hexadecimal character: ").append(c).toString()); + } + + public final boolean equals(@Nullable Object object) { + if (object instanceof HashCode) { + HashCode that = (HashCode)object; + return this.bits() == that.bits() && this.equalsSameBits(that); + } + return false; + } + + public final int hashCode() { + if (this.bits() >= 32) { + return this.asInt(); + } + byte[] bytes = this.asBytes(); + int val = bytes[0] & 0xFF; + for (int i = 1; i < bytes.length; ++i) { + val |= (bytes[i] & 0xFF) << i * 8; + } + return val; + } + + public final String toString() { + byte[] bytes = this.asBytes(); + StringBuilder sb = new StringBuilder(2 * bytes.length); + for (byte b : bytes) { + sb.append(hexDigits[b >> 4 & 0xF]).append(hexDigits[b & 0xF]); + } + return sb.toString(); + } + + private static final class BytesHashCode + extends HashCode + implements Serializable { + final byte[] bytes; + private static final long serialVersionUID = 0L; + + BytesHashCode(byte[] bytes) { + this.bytes = Preconditions.checkNotNull(bytes); + } + + @Override + public int bits() { + return this.bytes.length * 8; + } + + @Override + public byte[] asBytes() { + return (byte[])this.bytes.clone(); + } + + @Override + public int asInt() { + Preconditions.checkState(this.bytes.length >= 4, "HashCode#asInt() requires >= 4 bytes (it only has %s bytes).", this.bytes.length); + return this.bytes[0] & 0xFF | (this.bytes[1] & 0xFF) << 8 | (this.bytes[2] & 0xFF) << 16 | (this.bytes[3] & 0xFF) << 24; + } + + @Override + public long asLong() { + Preconditions.checkState(this.bytes.length >= 8, "HashCode#asLong() requires >= 8 bytes (it only has %s bytes).", this.bytes.length); + return this.padToLong(); + } + + @Override + public long padToLong() { + long retVal = this.bytes[0] & 0xFF; + for (int i = 1; i < Math.min(this.bytes.length, 8); ++i) { + retVal |= ((long)this.bytes[i] & 0xFFL) << i * 8; + } + return retVal; + } + + @Override + void writeBytesToImpl(byte[] dest, int offset, int maxLength) { + System.arraycopy(this.bytes, 0, dest, offset, maxLength); + } + + @Override + byte[] getBytesInternal() { + return this.bytes; + } + + @Override + boolean equalsSameBits(HashCode that) { + return MessageDigest.isEqual(this.bytes, that.getBytesInternal()); + } + } + + private static final class LongHashCode + extends HashCode + implements Serializable { + final long hash; + private static final long serialVersionUID = 0L; + + LongHashCode(long hash) { + this.hash = hash; + } + + @Override + public int bits() { + return 64; + } + + @Override + public byte[] asBytes() { + return new byte[]{(byte)this.hash, (byte)(this.hash >> 8), (byte)(this.hash >> 16), (byte)(this.hash >> 24), (byte)(this.hash >> 32), (byte)(this.hash >> 40), (byte)(this.hash >> 48), (byte)(this.hash >> 56)}; + } + + @Override + public int asInt() { + return (int)this.hash; + } + + @Override + public long asLong() { + return this.hash; + } + + @Override + public long padToLong() { + return this.hash; + } + + @Override + void writeBytesToImpl(byte[] dest, int offset, int maxLength) { + for (int i = 0; i < maxLength; ++i) { + dest[offset + i] = (byte)(this.hash >> i * 8); + } + } + + @Override + boolean equalsSameBits(HashCode that) { + return this.hash == that.asLong(); + } + } + + private static final class IntHashCode + extends HashCode + implements Serializable { + final int hash; + private static final long serialVersionUID = 0L; + + IntHashCode(int hash) { + this.hash = hash; + } + + @Override + public int bits() { + return 32; + } + + @Override + public byte[] asBytes() { + return new byte[]{(byte)this.hash, (byte)(this.hash >> 8), (byte)(this.hash >> 16), (byte)(this.hash >> 24)}; + } + + @Override + public int asInt() { + return this.hash; + } + + @Override + public long asLong() { + throw new IllegalStateException("this HashCode only has 32 bits; cannot create a long"); + } + + @Override + public long padToLong() { + return UnsignedInts.toLong(this.hash); + } + + @Override + void writeBytesToImpl(byte[] dest, int offset, int maxLength) { + for (int i = 0; i < maxLength; ++i) { + dest[offset + i] = (byte)(this.hash >> i * 8); + } + } + + @Override + boolean equalsSameBits(HashCode that) { + return this.hash == that.asInt(); + } + } +} diff --git a/src/com/google/common/hash/HashFunction.java b/src/com/google/common/hash/HashFunction.java new file mode 100644 index 0000000..44dee8a --- /dev/null +++ b/src/com/google/common/hash/HashFunction.java @@ -0,0 +1,33 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.hash; + +import com.google.common.annotations.Beta; +import com.google.common.hash.Funnel; +import com.google.common.hash.HashCode; +import com.google.common.hash.Hasher; +import java.nio.charset.Charset; + +@Beta +public interface HashFunction { + public Hasher newHasher(); + + public Hasher newHasher(int var1); + + public HashCode hashInt(int var1); + + public HashCode hashLong(long var1); + + public HashCode hashBytes(byte[] var1); + + public HashCode hashBytes(byte[] var1, int var2, int var3); + + public HashCode hashUnencodedChars(CharSequence var1); + + public HashCode hashString(CharSequence var1, Charset var2); + + public HashCode hashObject(T var1, Funnel var2); + + public int bits(); +} diff --git a/src/com/google/common/hash/Hasher.java b/src/com/google/common/hash/Hasher.java new file mode 100644 index 0000000..3bee8c8 --- /dev/null +++ b/src/com/google/common/hash/Hasher.java @@ -0,0 +1,54 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.hash; + +import com.google.common.annotations.Beta; +import com.google.common.hash.Funnel; +import com.google.common.hash.HashCode; +import com.google.common.hash.PrimitiveSink; +import java.nio.charset.Charset; + +@Beta +public interface Hasher +extends PrimitiveSink { + @Override + public Hasher putByte(byte var1); + + @Override + public Hasher putBytes(byte[] var1); + + @Override + public Hasher putBytes(byte[] var1, int var2, int var3); + + @Override + public Hasher putShort(short var1); + + @Override + public Hasher putInt(int var1); + + @Override + public Hasher putLong(long var1); + + @Override + public Hasher putFloat(float var1); + + @Override + public Hasher putDouble(double var1); + + @Override + public Hasher putBoolean(boolean var1); + + @Override + public Hasher putChar(char var1); + + @Override + public Hasher putUnencodedChars(CharSequence var1); + + @Override + public Hasher putString(CharSequence var1, Charset var2); + + public Hasher putObject(T var1, Funnel var2); + + public HashCode hash(); +} diff --git a/src/com/google/common/hash/Hashing.java b/src/com/google/common/hash/Hashing.java new file mode 100644 index 0000000..b371e1b --- /dev/null +++ b/src/com/google/common/hash/Hashing.java @@ -0,0 +1,331 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.hash; + +import com.google.common.annotations.Beta; +import com.google.common.annotations.VisibleForTesting; +import com.google.common.base.Preconditions; +import com.google.common.base.Supplier; +import com.google.common.hash.AbstractCompositeHashFunction; +import com.google.common.hash.ChecksumHashFunction; +import com.google.common.hash.Crc32cHashFunction; +import com.google.common.hash.HashCode; +import com.google.common.hash.HashFunction; +import com.google.common.hash.Hasher; +import com.google.common.hash.MessageDigestHashFunction; +import com.google.common.hash.Murmur3_128HashFunction; +import com.google.common.hash.Murmur3_32HashFunction; +import com.google.common.hash.SipHashFunction; +import java.util.Iterator; +import java.util.zip.Adler32; +import java.util.zip.CRC32; +import java.util.zip.Checksum; +import javax.annotation.Nullable; + +@Beta +public final class Hashing { + private static final int GOOD_FAST_HASH_SEED = (int)System.currentTimeMillis(); + + public static HashFunction goodFastHash(int minimumBits) { + int bits = Hashing.checkPositiveAndMakeMultipleOf32(minimumBits); + if (bits == 32) { + return Murmur3_32Holder.GOOD_FAST_HASH_FUNCTION_32; + } + if (bits <= 128) { + return Murmur3_128Holder.GOOD_FAST_HASH_FUNCTION_128; + } + int hashFunctionsNeeded = (bits + 127) / 128; + HashFunction[] hashFunctions = new HashFunction[hashFunctionsNeeded]; + hashFunctions[0] = Murmur3_128Holder.GOOD_FAST_HASH_FUNCTION_128; + int seed = GOOD_FAST_HASH_SEED; + for (int i = 1; i < hashFunctionsNeeded; ++i) { + hashFunctions[i] = Hashing.murmur3_128(seed += 1500450271); + } + return new ConcatenatedHashFunction(hashFunctions); + } + + public static HashFunction murmur3_32(int seed) { + return new Murmur3_32HashFunction(seed); + } + + public static HashFunction murmur3_32() { + return Murmur3_32Holder.MURMUR3_32; + } + + public static HashFunction murmur3_128(int seed) { + return new Murmur3_128HashFunction(seed); + } + + public static HashFunction murmur3_128() { + return Murmur3_128Holder.MURMUR3_128; + } + + public static HashFunction sipHash24() { + return SipHash24Holder.SIP_HASH_24; + } + + public static HashFunction sipHash24(long k0, long k1) { + return new SipHashFunction(2, 4, k0, k1); + } + + public static HashFunction md5() { + return Md5Holder.MD5; + } + + public static HashFunction sha1() { + return Sha1Holder.SHA_1; + } + + public static HashFunction sha256() { + return Sha256Holder.SHA_256; + } + + public static HashFunction sha512() { + return Sha512Holder.SHA_512; + } + + public static HashFunction crc32c() { + return Crc32cHolder.CRC_32_C; + } + + public static HashFunction crc32() { + return Crc32Holder.CRC_32; + } + + public static HashFunction adler32() { + return Adler32Holder.ADLER_32; + } + + private static HashFunction checksumHashFunction(ChecksumType type, String toString) { + return new ChecksumHashFunction(type, type.bits, toString); + } + + public static int consistentHash(HashCode hashCode, int buckets) { + return Hashing.consistentHash(hashCode.padToLong(), buckets); + } + + public static int consistentHash(long input, int buckets) { + int next; + Preconditions.checkArgument(buckets > 0, "buckets must be positive: %s", buckets); + LinearCongruentialGenerator generator = new LinearCongruentialGenerator(input); + int candidate = 0; + while ((next = (int)((double)(candidate + 1) / generator.nextDouble())) >= 0 && next < buckets) { + candidate = next; + } + return candidate; + } + + public static HashCode combineOrdered(Iterable hashCodes) { + Iterator iterator = hashCodes.iterator(); + Preconditions.checkArgument(iterator.hasNext(), "Must be at least 1 hash code to combine."); + int bits = iterator.next().bits(); + byte[] resultBytes = new byte[bits / 8]; + for (HashCode hashCode : hashCodes) { + byte[] nextBytes = hashCode.asBytes(); + Preconditions.checkArgument(nextBytes.length == resultBytes.length, "All hashcodes must have the same bit length."); + for (int i = 0; i < nextBytes.length; ++i) { + resultBytes[i] = (byte)(resultBytes[i] * 37 ^ nextBytes[i]); + } + } + return HashCode.fromBytesNoCopy(resultBytes); + } + + public static HashCode combineUnordered(Iterable hashCodes) { + Iterator iterator = hashCodes.iterator(); + Preconditions.checkArgument(iterator.hasNext(), "Must be at least 1 hash code to combine."); + byte[] resultBytes = new byte[iterator.next().bits() / 8]; + for (HashCode hashCode : hashCodes) { + byte[] nextBytes = hashCode.asBytes(); + Preconditions.checkArgument(nextBytes.length == resultBytes.length, "All hashcodes must have the same bit length."); + for (int i = 0; i < nextBytes.length; ++i) { + int n = i; + resultBytes[n] = (byte)(resultBytes[n] + nextBytes[i]); + } + } + return HashCode.fromBytesNoCopy(resultBytes); + } + + static int checkPositiveAndMakeMultipleOf32(int bits) { + Preconditions.checkArgument(bits > 0, "Number of bits must be positive"); + return bits + 31 & 0xFFFFFFE0; + } + + private Hashing() { + } + + static /* synthetic */ int access$000() { + return GOOD_FAST_HASH_SEED; + } + + static /* synthetic */ HashFunction access$100(ChecksumType x0, String x1) { + return Hashing.checksumHashFunction(x0, x1); + } + + private static final class LinearCongruentialGenerator { + private long state; + + public LinearCongruentialGenerator(long seed) { + this.state = seed; + } + + public double nextDouble() { + this.state = 2862933555777941757L * this.state + 1L; + return (double)((int)(this.state >>> 33) + 1) / 2.147483648E9; + } + } + + @VisibleForTesting + static final class ConcatenatedHashFunction + extends AbstractCompositeHashFunction { + private final int bits; + + ConcatenatedHashFunction(HashFunction ... functions) { + super(functions); + int bitSum = 0; + for (HashFunction function : functions) { + bitSum += function.bits(); + } + this.bits = bitSum; + } + + @Override + HashCode makeHash(Hasher[] hashers) { + byte[] bytes = new byte[this.bits / 8]; + int i = 0; + for (Hasher hasher : hashers) { + HashCode newHash = hasher.hash(); + i += newHash.writeBytesTo(bytes, i, newHash.bits() / 8); + } + return HashCode.fromBytesNoCopy(bytes); + } + + @Override + public int bits() { + return this.bits; + } + + public boolean equals(@Nullable Object object) { + if (object instanceof ConcatenatedHashFunction) { + ConcatenatedHashFunction other = (ConcatenatedHashFunction)object; + if (this.bits != other.bits || this.functions.length != other.functions.length) { + return false; + } + for (int i = 0; i < this.functions.length; ++i) { + if (this.functions[i].equals(other.functions[i])) continue; + return false; + } + return true; + } + return false; + } + + public int hashCode() { + int hash = this.bits; + for (HashFunction function : this.functions) { + hash ^= function.hashCode(); + } + return hash; + } + } + + static enum ChecksumType implements Supplier + { + CRC_32(32){ + + @Override + public Checksum get() { + return new CRC32(); + } + } + , + ADLER_32(32){ + + @Override + public Checksum get() { + return new Adler32(); + } + }; + + private final int bits; + + private ChecksumType(int bits) { + this.bits = bits; + } + + @Override + public abstract Checksum get(); + } + + private static class Adler32Holder { + static final HashFunction ADLER_32 = Hashing.access$100(ChecksumType.ADLER_32, "Hashing.adler32()"); + + private Adler32Holder() { + } + } + + private static class Crc32Holder { + static final HashFunction CRC_32 = Hashing.access$100(ChecksumType.CRC_32, "Hashing.crc32()"); + + private Crc32Holder() { + } + } + + private static final class Crc32cHolder { + static final HashFunction CRC_32_C = new Crc32cHashFunction(); + + private Crc32cHolder() { + } + } + + private static class Sha512Holder { + static final HashFunction SHA_512 = new MessageDigestHashFunction("SHA-512", "Hashing.sha512()"); + + private Sha512Holder() { + } + } + + private static class Sha256Holder { + static final HashFunction SHA_256 = new MessageDigestHashFunction("SHA-256", "Hashing.sha256()"); + + private Sha256Holder() { + } + } + + private static class Sha1Holder { + static final HashFunction SHA_1 = new MessageDigestHashFunction("SHA-1", "Hashing.sha1()"); + + private Sha1Holder() { + } + } + + private static class Md5Holder { + static final HashFunction MD5 = new MessageDigestHashFunction("MD5", "Hashing.md5()"); + + private Md5Holder() { + } + } + + private static class SipHash24Holder { + static final HashFunction SIP_HASH_24 = new SipHashFunction(2, 4, 506097522914230528L, 1084818905618843912L); + + private SipHash24Holder() { + } + } + + private static class Murmur3_128Holder { + static final HashFunction MURMUR3_128 = new Murmur3_128HashFunction(0); + static final HashFunction GOOD_FAST_HASH_FUNCTION_128 = Hashing.murmur3_128(Hashing.access$000()); + + private Murmur3_128Holder() { + } + } + + private static class Murmur3_32Holder { + static final HashFunction MURMUR3_32 = new Murmur3_32HashFunction(0); + static final HashFunction GOOD_FAST_HASH_FUNCTION_32 = Hashing.murmur3_32(Hashing.access$000()); + + private Murmur3_32Holder() { + } + } +} diff --git a/src/com/google/common/hash/HashingInputStream.java b/src/com/google/common/hash/HashingInputStream.java new file mode 100644 index 0000000..2bf04b3 --- /dev/null +++ b/src/com/google/common/hash/HashingInputStream.java @@ -0,0 +1,60 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.hash; + +import com.google.common.annotations.Beta; +import com.google.common.base.Preconditions; +import com.google.common.hash.HashCode; +import com.google.common.hash.HashFunction; +import com.google.common.hash.Hasher; +import java.io.FilterInputStream; +import java.io.IOException; +import java.io.InputStream; + +@Beta +public final class HashingInputStream +extends FilterInputStream { + private final Hasher hasher; + + public HashingInputStream(HashFunction hashFunction, InputStream in) { + super(Preconditions.checkNotNull(in)); + this.hasher = Preconditions.checkNotNull(hashFunction.newHasher()); + } + + @Override + public int read() throws IOException { + int b = this.in.read(); + if (b != -1) { + this.hasher.putByte((byte)b); + } + return b; + } + + @Override + public int read(byte[] bytes, int off, int len) throws IOException { + int numOfBytesRead = this.in.read(bytes, off, len); + if (numOfBytesRead != -1) { + this.hasher.putBytes(bytes, off, numOfBytesRead); + } + return numOfBytesRead; + } + + @Override + public boolean markSupported() { + return false; + } + + @Override + public void mark(int readlimit) { + } + + @Override + public void reset() throws IOException { + throw new IOException("reset not supported"); + } + + public HashCode hash() { + return this.hasher.hash(); + } +} diff --git a/src/com/google/common/hash/HashingOutputStream.java b/src/com/google/common/hash/HashingOutputStream.java new file mode 100644 index 0000000..b9c56bc --- /dev/null +++ b/src/com/google/common/hash/HashingOutputStream.java @@ -0,0 +1,45 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.hash; + +import com.google.common.annotations.Beta; +import com.google.common.base.Preconditions; +import com.google.common.hash.HashCode; +import com.google.common.hash.HashFunction; +import com.google.common.hash.Hasher; +import java.io.FilterOutputStream; +import java.io.IOException; +import java.io.OutputStream; + +@Beta +public final class HashingOutputStream +extends FilterOutputStream { + private final Hasher hasher; + + public HashingOutputStream(HashFunction hashFunction, OutputStream out) { + super(Preconditions.checkNotNull(out)); + this.hasher = Preconditions.checkNotNull(hashFunction.newHasher()); + } + + @Override + public void write(int b) throws IOException { + this.hasher.putByte((byte)b); + this.out.write(b); + } + + @Override + public void write(byte[] bytes, int off, int len) throws IOException { + this.hasher.putBytes(bytes, off, len); + this.out.write(bytes, off, len); + } + + public HashCode hash() { + return this.hasher.hash(); + } + + @Override + public void close() throws IOException { + this.out.close(); + } +} diff --git a/src/com/google/common/hash/MessageDigestHashFunction.java b/src/com/google/common/hash/MessageDigestHashFunction.java new file mode 100644 index 0000000..2f6526b --- /dev/null +++ b/src/com/google/common/hash/MessageDigestHashFunction.java @@ -0,0 +1,143 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.hash; + +import com.google.common.base.Preconditions; +import com.google.common.hash.AbstractByteHasher; +import com.google.common.hash.AbstractStreamingHashFunction; +import com.google.common.hash.HashCode; +import com.google.common.hash.Hasher; +import java.io.Serializable; +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; +import java.util.Arrays; + +final class MessageDigestHashFunction +extends AbstractStreamingHashFunction +implements Serializable { + private final MessageDigest prototype; + private final int bytes; + private final boolean supportsClone; + private final String toString; + + MessageDigestHashFunction(String algorithmName, String toString) { + this.prototype = MessageDigestHashFunction.getMessageDigest(algorithmName); + this.bytes = this.prototype.getDigestLength(); + this.toString = Preconditions.checkNotNull(toString); + this.supportsClone = this.supportsClone(); + } + + MessageDigestHashFunction(String algorithmName, int bytes, String toString) { + this.toString = Preconditions.checkNotNull(toString); + this.prototype = MessageDigestHashFunction.getMessageDigest(algorithmName); + int maxLength = this.prototype.getDigestLength(); + Preconditions.checkArgument(bytes >= 4 && bytes <= maxLength, "bytes (%s) must be >= 4 and < %s", bytes, maxLength); + this.bytes = bytes; + this.supportsClone = this.supportsClone(); + } + + private boolean supportsClone() { + try { + this.prototype.clone(); + return true; + } + catch (CloneNotSupportedException e) { + return false; + } + } + + @Override + public int bits() { + return this.bytes * 8; + } + + public String toString() { + return this.toString; + } + + private static MessageDigest getMessageDigest(String algorithmName) { + try { + return MessageDigest.getInstance(algorithmName); + } + catch (NoSuchAlgorithmException e) { + throw new AssertionError((Object)e); + } + } + + @Override + public Hasher newHasher() { + if (this.supportsClone) { + try { + return new MessageDigestHasher((MessageDigest)this.prototype.clone(), this.bytes); + } + catch (CloneNotSupportedException cloneNotSupportedException) { + // empty catch block + } + } + return new MessageDigestHasher(MessageDigestHashFunction.getMessageDigest(this.prototype.getAlgorithm()), this.bytes); + } + + Object writeReplace() { + return new SerializedForm(this.prototype.getAlgorithm(), this.bytes, this.toString); + } + + private static final class MessageDigestHasher + extends AbstractByteHasher { + private final MessageDigest digest; + private final int bytes; + private boolean done; + + private MessageDigestHasher(MessageDigest digest, int bytes) { + this.digest = digest; + this.bytes = bytes; + } + + @Override + protected void update(byte b) { + this.checkNotDone(); + this.digest.update(b); + } + + @Override + protected void update(byte[] b) { + this.checkNotDone(); + this.digest.update(b); + } + + @Override + protected void update(byte[] b, int off, int len) { + this.checkNotDone(); + this.digest.update(b, off, len); + } + + private void checkNotDone() { + Preconditions.checkState(!this.done, "Cannot re-use a Hasher after calling hash() on it"); + } + + @Override + public HashCode hash() { + this.checkNotDone(); + this.done = true; + return this.bytes == this.digest.getDigestLength() ? HashCode.fromBytesNoCopy(this.digest.digest()) : HashCode.fromBytesNoCopy(Arrays.copyOf(this.digest.digest(), this.bytes)); + } + } + + private static final class SerializedForm + implements Serializable { + private final String algorithmName; + private final int bytes; + private final String toString; + private static final long serialVersionUID = 0L; + + private SerializedForm(String algorithmName, int bytes, String toString) { + this.algorithmName = algorithmName; + this.bytes = bytes; + this.toString = toString; + } + + private Object readResolve() { + return new MessageDigestHashFunction(this.algorithmName, this.bytes, this.toString); + } + } +} diff --git a/src/com/google/common/hash/Murmur3_128HashFunction.java b/src/com/google/common/hash/Murmur3_128HashFunction.java new file mode 100644 index 0000000..97a7cb6 --- /dev/null +++ b/src/com/google/common/hash/Murmur3_128HashFunction.java @@ -0,0 +1,182 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.hash; + +import com.google.common.hash.AbstractStreamingHashFunction; +import com.google.common.hash.HashCode; +import com.google.common.hash.Hasher; +import com.google.common.primitives.UnsignedBytes; +import java.io.Serializable; +import java.nio.ByteBuffer; +import java.nio.ByteOrder; +import javax.annotation.Nullable; + +final class Murmur3_128HashFunction +extends AbstractStreamingHashFunction +implements Serializable { + private final int seed; + private static final long serialVersionUID = 0L; + + Murmur3_128HashFunction(int seed) { + this.seed = seed; + } + + @Override + public int bits() { + return 128; + } + + @Override + public Hasher newHasher() { + return new Murmur3_128Hasher(this.seed); + } + + public String toString() { + int n = this.seed; + return new StringBuilder(32).append("Hashing.murmur3_128(").append(n).append(")").toString(); + } + + public boolean equals(@Nullable Object object) { + if (object instanceof Murmur3_128HashFunction) { + Murmur3_128HashFunction other = (Murmur3_128HashFunction)object; + return this.seed == other.seed; + } + return false; + } + + public int hashCode() { + return this.getClass().hashCode() ^ this.seed; + } + + private static final class Murmur3_128Hasher + extends AbstractStreamingHashFunction.AbstractStreamingHasher { + private static final int CHUNK_SIZE = 16; + private static final long C1 = -8663945395140668459L; + private static final long C2 = 5545529020109919103L; + private long h1; + private long h2; + private int length; + + Murmur3_128Hasher(int seed) { + super(16); + this.h1 = seed; + this.h2 = seed; + this.length = 0; + } + + @Override + protected void process(ByteBuffer bb) { + long k1 = bb.getLong(); + long k2 = bb.getLong(); + this.bmix64(k1, k2); + this.length += 16; + } + + private void bmix64(long k1, long k2) { + this.h1 ^= Murmur3_128Hasher.mixK1(k1); + this.h1 = Long.rotateLeft(this.h1, 27); + this.h1 += this.h2; + this.h1 = this.h1 * 5L + 1390208809L; + this.h2 ^= Murmur3_128Hasher.mixK2(k2); + this.h2 = Long.rotateLeft(this.h2, 31); + this.h2 += this.h1; + this.h2 = this.h2 * 5L + 944331445L; + } + + @Override + protected void processRemaining(ByteBuffer bb) { + long k1 = 0L; + long k2 = 0L; + this.length += bb.remaining(); + switch (bb.remaining()) { + case 15: { + k2 ^= (long)UnsignedBytes.toInt(bb.get(14)) << 48; + } + case 14: { + k2 ^= (long)UnsignedBytes.toInt(bb.get(13)) << 40; + } + case 13: { + k2 ^= (long)UnsignedBytes.toInt(bb.get(12)) << 32; + } + case 12: { + k2 ^= (long)UnsignedBytes.toInt(bb.get(11)) << 24; + } + case 11: { + k2 ^= (long)UnsignedBytes.toInt(bb.get(10)) << 16; + } + case 10: { + k2 ^= (long)UnsignedBytes.toInt(bb.get(9)) << 8; + } + case 9: { + k2 ^= (long)UnsignedBytes.toInt(bb.get(8)); + } + case 8: { + k1 ^= bb.getLong(); + break; + } + case 7: { + k1 ^= (long)UnsignedBytes.toInt(bb.get(6)) << 48; + } + case 6: { + k1 ^= (long)UnsignedBytes.toInt(bb.get(5)) << 40; + } + case 5: { + k1 ^= (long)UnsignedBytes.toInt(bb.get(4)) << 32; + } + case 4: { + k1 ^= (long)UnsignedBytes.toInt(bb.get(3)) << 24; + } + case 3: { + k1 ^= (long)UnsignedBytes.toInt(bb.get(2)) << 16; + } + case 2: { + k1 ^= (long)UnsignedBytes.toInt(bb.get(1)) << 8; + } + case 1: { + k1 ^= (long)UnsignedBytes.toInt(bb.get(0)); + break; + } + default: { + throw new AssertionError((Object)"Should never get here."); + } + } + this.h1 ^= Murmur3_128Hasher.mixK1(k1); + this.h2 ^= Murmur3_128Hasher.mixK2(k2); + } + + @Override + public HashCode makeHash() { + this.h1 ^= (long)this.length; + this.h2 ^= (long)this.length; + this.h1 += this.h2; + this.h2 += this.h1; + this.h1 = Murmur3_128Hasher.fmix64(this.h1); + this.h2 = Murmur3_128Hasher.fmix64(this.h2); + this.h1 += this.h2; + this.h2 += this.h1; + return HashCode.fromBytesNoCopy(ByteBuffer.wrap(new byte[16]).order(ByteOrder.LITTLE_ENDIAN).putLong(this.h1).putLong(this.h2).array()); + } + + private static long fmix64(long k) { + k ^= k >>> 33; + k *= -49064778989728563L; + k ^= k >>> 33; + k *= -4265267296055464877L; + k ^= k >>> 33; + return k; + } + + private static long mixK1(long k1) { + k1 *= -8663945395140668459L; + k1 = Long.rotateLeft(k1, 31); + return k1 *= 5545529020109919103L; + } + + private static long mixK2(long k2) { + k2 *= 5545529020109919103L; + k2 = Long.rotateLeft(k2, 33); + return k2 *= -8663945395140668459L; + } + } +} diff --git a/src/com/google/common/hash/Murmur3_32HashFunction.java b/src/com/google/common/hash/Murmur3_32HashFunction.java new file mode 100644 index 0000000..2e5f287 --- /dev/null +++ b/src/com/google/common/hash/Murmur3_32HashFunction.java @@ -0,0 +1,146 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.hash; + +import com.google.common.hash.AbstractStreamingHashFunction; +import com.google.common.hash.HashCode; +import com.google.common.hash.Hasher; +import com.google.common.primitives.UnsignedBytes; +import java.io.Serializable; +import java.nio.ByteBuffer; +import javax.annotation.Nullable; + +final class Murmur3_32HashFunction +extends AbstractStreamingHashFunction +implements Serializable { + private static final int C1 = -862048943; + private static final int C2 = 461845907; + private final int seed; + private static final long serialVersionUID = 0L; + + Murmur3_32HashFunction(int seed) { + this.seed = seed; + } + + @Override + public int bits() { + return 32; + } + + @Override + public Hasher newHasher() { + return new Murmur3_32Hasher(this.seed); + } + + public String toString() { + int n = this.seed; + return new StringBuilder(31).append("Hashing.murmur3_32(").append(n).append(")").toString(); + } + + public boolean equals(@Nullable Object object) { + if (object instanceof Murmur3_32HashFunction) { + Murmur3_32HashFunction other = (Murmur3_32HashFunction)object; + return this.seed == other.seed; + } + return false; + } + + public int hashCode() { + return this.getClass().hashCode() ^ this.seed; + } + + @Override + public HashCode hashInt(int input) { + int k1 = Murmur3_32HashFunction.mixK1(input); + int h1 = Murmur3_32HashFunction.mixH1(this.seed, k1); + return Murmur3_32HashFunction.fmix(h1, 4); + } + + @Override + public HashCode hashLong(long input) { + int low = (int)input; + int high = (int)(input >>> 32); + int k1 = Murmur3_32HashFunction.mixK1(low); + int h1 = Murmur3_32HashFunction.mixH1(this.seed, k1); + k1 = Murmur3_32HashFunction.mixK1(high); + h1 = Murmur3_32HashFunction.mixH1(h1, k1); + return Murmur3_32HashFunction.fmix(h1, 8); + } + + @Override + public HashCode hashUnencodedChars(CharSequence input) { + int h1 = this.seed; + for (int i = 1; i < input.length(); i += 2) { + int k1 = input.charAt(i - 1) | input.charAt(i) << 16; + k1 = Murmur3_32HashFunction.mixK1(k1); + h1 = Murmur3_32HashFunction.mixH1(h1, k1); + } + if ((input.length() & 1) == 1) { + int k1 = input.charAt(input.length() - 1); + k1 = Murmur3_32HashFunction.mixK1(k1); + h1 ^= k1; + } + return Murmur3_32HashFunction.fmix(h1, 2 * input.length()); + } + + private static int mixK1(int k1) { + k1 *= -862048943; + k1 = Integer.rotateLeft(k1, 15); + return k1 *= 461845907; + } + + private static int mixH1(int h1, int k1) { + h1 ^= k1; + h1 = Integer.rotateLeft(h1, 13); + h1 = h1 * 5 + -430675100; + return h1; + } + + private static HashCode fmix(int h1, int length) { + h1 ^= length; + h1 ^= h1 >>> 16; + h1 *= -2048144789; + h1 ^= h1 >>> 13; + h1 *= -1028477387; + h1 ^= h1 >>> 16; + return HashCode.fromInt(h1); + } + + private static final class Murmur3_32Hasher + extends AbstractStreamingHashFunction.AbstractStreamingHasher { + private static final int CHUNK_SIZE = 4; + private int h1; + private int length; + + Murmur3_32Hasher(int seed) { + super(4); + this.h1 = seed; + this.length = 0; + } + + @Override + protected void process(ByteBuffer bb) { + int k1 = Murmur3_32HashFunction.mixK1(bb.getInt()); + this.h1 = Murmur3_32HashFunction.mixH1(this.h1, k1); + this.length += 4; + } + + @Override + protected void processRemaining(ByteBuffer bb) { + this.length += bb.remaining(); + int k1 = 0; + int i = 0; + while (bb.hasRemaining()) { + k1 ^= UnsignedBytes.toInt(bb.get()) << i; + i += 8; + } + this.h1 ^= Murmur3_32HashFunction.mixK1(k1); + } + + @Override + public HashCode makeHash() { + return Murmur3_32HashFunction.fmix(this.h1, this.length); + } + } +} diff --git a/src/com/google/common/hash/PrimitiveSink.java b/src/com/google/common/hash/PrimitiveSink.java new file mode 100644 index 0000000..a96eace --- /dev/null +++ b/src/com/google/common/hash/PrimitiveSink.java @@ -0,0 +1,34 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.hash; + +import com.google.common.annotations.Beta; +import java.nio.charset.Charset; + +@Beta +public interface PrimitiveSink { + public PrimitiveSink putByte(byte var1); + + public PrimitiveSink putBytes(byte[] var1); + + public PrimitiveSink putBytes(byte[] var1, int var2, int var3); + + public PrimitiveSink putShort(short var1); + + public PrimitiveSink putInt(int var1); + + public PrimitiveSink putLong(long var1); + + public PrimitiveSink putFloat(float var1); + + public PrimitiveSink putDouble(double var1); + + public PrimitiveSink putBoolean(boolean var1); + + public PrimitiveSink putChar(char var1); + + public PrimitiveSink putUnencodedChars(CharSequence var1); + + public PrimitiveSink putString(CharSequence var1, Charset var2); +} diff --git a/src/com/google/common/hash/SipHashFunction.java b/src/com/google/common/hash/SipHashFunction.java new file mode 100644 index 0000000..57dba6f --- /dev/null +++ b/src/com/google/common/hash/SipHashFunction.java @@ -0,0 +1,134 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.hash; + +import com.google.common.base.Preconditions; +import com.google.common.hash.AbstractStreamingHashFunction; +import com.google.common.hash.HashCode; +import com.google.common.hash.Hasher; +import java.io.Serializable; +import java.nio.ByteBuffer; +import javax.annotation.Nullable; + +final class SipHashFunction +extends AbstractStreamingHashFunction +implements Serializable { + private final int c; + private final int d; + private final long k0; + private final long k1; + private static final long serialVersionUID = 0L; + + SipHashFunction(int c, int d, long k0, long k1) { + Preconditions.checkArgument(c > 0, "The number of SipRound iterations (c=%s) during Compression must be positive.", c); + Preconditions.checkArgument(d > 0, "The number of SipRound iterations (d=%s) during Finalization must be positive.", d); + this.c = c; + this.d = d; + this.k0 = k0; + this.k1 = k1; + } + + @Override + public int bits() { + return 64; + } + + @Override + public Hasher newHasher() { + return new SipHasher(this.c, this.d, this.k0, this.k1); + } + + public String toString() { + int n = this.c; + int n2 = this.d; + long l = this.k0; + long l2 = this.k1; + return new StringBuilder(81).append("Hashing.sipHash").append(n).append(n2).append("(").append(l).append(", ").append(l2).append(")").toString(); + } + + public boolean equals(@Nullable Object object) { + if (object instanceof SipHashFunction) { + SipHashFunction other = (SipHashFunction)object; + return this.c == other.c && this.d == other.d && this.k0 == other.k0 && this.k1 == other.k1; + } + return false; + } + + public int hashCode() { + return (int)((long)(this.getClass().hashCode() ^ this.c ^ this.d) ^ this.k0 ^ this.k1); + } + + private static final class SipHasher + extends AbstractStreamingHashFunction.AbstractStreamingHasher { + private static final int CHUNK_SIZE = 8; + private final int c; + private final int d; + private long v0 = 8317987319222330741L; + private long v1 = 7237128888997146477L; + private long v2 = 7816392313619706465L; + private long v3 = 8387220255154660723L; + private long b = 0L; + private long finalM = 0L; + + SipHasher(int c, int d, long k0, long k1) { + super(8); + this.c = c; + this.d = d; + this.v0 ^= k0; + this.v1 ^= k1; + this.v2 ^= k0; + this.v3 ^= k1; + } + + @Override + protected void process(ByteBuffer buffer) { + this.b += 8L; + this.processM(buffer.getLong()); + } + + @Override + protected void processRemaining(ByteBuffer buffer) { + this.b += (long)buffer.remaining(); + int i = 0; + while (buffer.hasRemaining()) { + this.finalM ^= ((long)buffer.get() & 0xFFL) << i; + i += 8; + } + } + + @Override + public HashCode makeHash() { + this.finalM ^= this.b << 56; + this.processM(this.finalM); + this.v2 ^= 0xFFL; + this.sipRound(this.d); + return HashCode.fromLong(this.v0 ^ this.v1 ^ this.v2 ^ this.v3); + } + + private void processM(long m) { + this.v3 ^= m; + this.sipRound(this.c); + this.v0 ^= m; + } + + private void sipRound(int iterations) { + for (int i = 0; i < iterations; ++i) { + this.v0 += this.v1; + this.v2 += this.v3; + this.v1 = Long.rotateLeft(this.v1, 13); + this.v3 = Long.rotateLeft(this.v3, 16); + this.v1 ^= this.v0; + this.v3 ^= this.v2; + this.v0 = Long.rotateLeft(this.v0, 32); + this.v2 += this.v1; + this.v0 += this.v3; + this.v1 = Long.rotateLeft(this.v1, 17); + this.v3 = Long.rotateLeft(this.v3, 21); + this.v1 ^= this.v2; + this.v3 ^= this.v0; + this.v2 = Long.rotateLeft(this.v2, 32); + } + } + } +} diff --git a/src/com/google/common/hash/package-info.java b/src/com/google/common/hash/package-info.java new file mode 100644 index 0000000..17c9c18 --- /dev/null +++ b/src/com/google/common/hash/package-info.java @@ -0,0 +1,8 @@ +/* + * Decompiled with CFR 0.152. + */ +@ParametersAreNonnullByDefault +package com.google.common.hash; + +import javax.annotation.ParametersAreNonnullByDefault; + diff --git a/src/com/google/common/html/HtmlEscapers.java b/src/com/google/common/html/HtmlEscapers.java new file mode 100644 index 0000000..cd42e68 --- /dev/null +++ b/src/com/google/common/html/HtmlEscapers.java @@ -0,0 +1,22 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.html; + +import com.google.common.annotations.Beta; +import com.google.common.annotations.GwtCompatible; +import com.google.common.escape.Escaper; +import com.google.common.escape.Escapers; + +@Beta +@GwtCompatible +public final class HtmlEscapers { + private static final Escaper HTML_ESCAPER = Escapers.builder().addEscape('\"', """).addEscape('\'', "'").addEscape('&', "&").addEscape('<', "<").addEscape('>', ">").build(); + + public static Escaper htmlEscaper() { + return HTML_ESCAPER; + } + + private HtmlEscapers() { + } +} diff --git a/src/com/google/common/html/package-info.java b/src/com/google/common/html/package-info.java new file mode 100644 index 0000000..a719584 --- /dev/null +++ b/src/com/google/common/html/package-info.java @@ -0,0 +1,8 @@ +/* + * Decompiled with CFR 0.152. + */ +@ParametersAreNonnullByDefault +package com.google.common.html; + +import javax.annotation.ParametersAreNonnullByDefault; + diff --git a/src/com/google/common/io/AppendableWriter.java b/src/com/google/common/io/AppendableWriter.java new file mode 100644 index 0000000..b3a8783 --- /dev/null +++ b/src/com/google/common/io/AppendableWriter.java @@ -0,0 +1,88 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.io; + +import com.google.common.base.Preconditions; +import java.io.Closeable; +import java.io.Flushable; +import java.io.IOException; +import java.io.Writer; +import javax.annotation.Nullable; + +class AppendableWriter +extends Writer { + private final Appendable target; + private boolean closed; + + AppendableWriter(Appendable target) { + this.target = Preconditions.checkNotNull(target); + } + + @Override + public void write(char[] cbuf, int off, int len) throws IOException { + this.checkNotClosed(); + this.target.append(new String(cbuf, off, len)); + } + + @Override + public void flush() throws IOException { + this.checkNotClosed(); + if (this.target instanceof Flushable) { + ((Flushable)((Object)this.target)).flush(); + } + } + + @Override + public void close() throws IOException { + this.closed = true; + if (this.target instanceof Closeable) { + ((Closeable)((Object)this.target)).close(); + } + } + + @Override + public void write(int c) throws IOException { + this.checkNotClosed(); + this.target.append((char)c); + } + + @Override + public void write(@Nullable String str) throws IOException { + this.checkNotClosed(); + this.target.append(str); + } + + @Override + public void write(@Nullable String str, int off, int len) throws IOException { + this.checkNotClosed(); + this.target.append(str, off, off + len); + } + + @Override + public Writer append(char c) throws IOException { + this.checkNotClosed(); + this.target.append(c); + return this; + } + + @Override + public Writer append(@Nullable CharSequence charSeq) throws IOException { + this.checkNotClosed(); + this.target.append(charSeq); + return this; + } + + @Override + public Writer append(@Nullable CharSequence charSeq, int start, int end) throws IOException { + this.checkNotClosed(); + this.target.append(charSeq, start, end); + return this; + } + + private void checkNotClosed() throws IOException { + if (this.closed) { + throw new IOException("Cannot write to a closed writer."); + } + } +} diff --git a/src/com/google/common/io/BaseEncoding.java b/src/com/google/common/io/BaseEncoding.java new file mode 100644 index 0000000..7b8ec1c --- /dev/null +++ b/src/com/google/common/io/BaseEncoding.java @@ -0,0 +1,610 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.io; + +import com.google.common.annotations.Beta; +import com.google.common.annotations.GwtCompatible; +import com.google.common.annotations.GwtIncompatible; +import com.google.common.base.Ascii; +import com.google.common.base.CharMatcher; +import com.google.common.base.Preconditions; +import com.google.common.io.ByteSink; +import com.google.common.io.ByteSource; +import com.google.common.io.CharSink; +import com.google.common.io.CharSource; +import com.google.common.io.GwtWorkarounds; +import com.google.common.math.IntMath; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.io.Reader; +import java.io.Writer; +import java.math.RoundingMode; +import java.util.Arrays; +import javax.annotation.CheckReturnValue; +import javax.annotation.Nullable; + +@Beta +@GwtCompatible(emulated=true) +public abstract class BaseEncoding { + private static final BaseEncoding BASE64 = new StandardBaseEncoding("base64()", "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/", Character.valueOf('=')); + private static final BaseEncoding BASE64_URL = new StandardBaseEncoding("base64Url()", "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_", Character.valueOf('=')); + private static final BaseEncoding BASE32 = new StandardBaseEncoding("base32()", "ABCDEFGHIJKLMNOPQRSTUVWXYZ234567", Character.valueOf('=')); + private static final BaseEncoding BASE32_HEX = new StandardBaseEncoding("base32Hex()", "0123456789ABCDEFGHIJKLMNOPQRSTUV", Character.valueOf('=')); + private static final BaseEncoding BASE16 = new StandardBaseEncoding("base16()", "0123456789ABCDEF", null); + + BaseEncoding() { + } + + public String encode(byte[] bytes) { + return this.encode(Preconditions.checkNotNull(bytes), 0, bytes.length); + } + + public final String encode(byte[] bytes, int off, int len) { + Preconditions.checkNotNull(bytes); + Preconditions.checkPositionIndexes(off, off + len, bytes.length); + GwtWorkarounds.CharOutput result = GwtWorkarounds.stringBuilderOutput(this.maxEncodedSize(len)); + GwtWorkarounds.ByteOutput byteOutput = this.encodingStream(result); + try { + for (int i = 0; i < len; ++i) { + byteOutput.write(bytes[off + i]); + } + byteOutput.close(); + } + catch (IOException impossible) { + throw new AssertionError((Object)"impossible"); + } + return result.toString(); + } + + @GwtIncompatible(value="Writer,OutputStream") + public final OutputStream encodingStream(Writer writer) { + return GwtWorkarounds.asOutputStream(this.encodingStream(GwtWorkarounds.asCharOutput(writer))); + } + + @GwtIncompatible(value="ByteSink,CharSink") + public final ByteSink encodingSink(final CharSink encodedSink) { + Preconditions.checkNotNull(encodedSink); + return new ByteSink(){ + + @Override + public OutputStream openStream() throws IOException { + return BaseEncoding.this.encodingStream(encodedSink.openStream()); + } + }; + } + + private static byte[] extract(byte[] result, int length) { + if (length == result.length) { + return result; + } + byte[] trunc = new byte[length]; + System.arraycopy(result, 0, trunc, 0, length); + return trunc; + } + + public final byte[] decode(CharSequence chars) { + try { + return this.decodeChecked(chars); + } + catch (DecodingException badInput) { + throw new IllegalArgumentException(badInput); + } + } + + final byte[] decodeChecked(CharSequence chars) throws DecodingException { + chars = this.padding().trimTrailingFrom(chars); + GwtWorkarounds.ByteInput decodedInput = this.decodingStream(GwtWorkarounds.asCharInput(chars)); + byte[] tmp = new byte[this.maxDecodedSize(chars.length())]; + int index = 0; + try { + int i = decodedInput.read(); + while (i != -1) { + tmp[index++] = (byte)i; + i = decodedInput.read(); + } + } + catch (DecodingException badInput) { + throw badInput; + } + catch (IOException impossible) { + throw new AssertionError((Object)impossible); + } + return BaseEncoding.extract(tmp, index); + } + + @GwtIncompatible(value="Reader,InputStream") + public final InputStream decodingStream(Reader reader) { + return GwtWorkarounds.asInputStream(this.decodingStream(GwtWorkarounds.asCharInput(reader))); + } + + @GwtIncompatible(value="ByteSource,CharSource") + public final ByteSource decodingSource(final CharSource encodedSource) { + Preconditions.checkNotNull(encodedSource); + return new ByteSource(){ + + @Override + public InputStream openStream() throws IOException { + return BaseEncoding.this.decodingStream(encodedSource.openStream()); + } + }; + } + + abstract int maxEncodedSize(int var1); + + abstract GwtWorkarounds.ByteOutput encodingStream(GwtWorkarounds.CharOutput var1); + + abstract int maxDecodedSize(int var1); + + abstract GwtWorkarounds.ByteInput decodingStream(GwtWorkarounds.CharInput var1); + + abstract CharMatcher padding(); + + @CheckReturnValue + public abstract BaseEncoding omitPadding(); + + @CheckReturnValue + public abstract BaseEncoding withPadChar(char var1); + + @CheckReturnValue + public abstract BaseEncoding withSeparator(String var1, int var2); + + @CheckReturnValue + public abstract BaseEncoding upperCase(); + + @CheckReturnValue + public abstract BaseEncoding lowerCase(); + + public static BaseEncoding base64() { + return BASE64; + } + + public static BaseEncoding base64Url() { + return BASE64_URL; + } + + public static BaseEncoding base32() { + return BASE32; + } + + public static BaseEncoding base32Hex() { + return BASE32_HEX; + } + + public static BaseEncoding base16() { + return BASE16; + } + + static GwtWorkarounds.CharInput ignoringInput(final GwtWorkarounds.CharInput delegate, final CharMatcher toIgnore) { + Preconditions.checkNotNull(delegate); + Preconditions.checkNotNull(toIgnore); + return new GwtWorkarounds.CharInput(){ + + @Override + public int read() throws IOException { + int readChar; + while ((readChar = delegate.read()) != -1 && toIgnore.matches((char)readChar)) { + } + return readChar; + } + + @Override + public void close() throws IOException { + delegate.close(); + } + }; + } + + static GwtWorkarounds.CharOutput separatingOutput(final GwtWorkarounds.CharOutput delegate, final String separator, final int afterEveryChars) { + Preconditions.checkNotNull(delegate); + Preconditions.checkNotNull(separator); + Preconditions.checkArgument(afterEveryChars > 0); + return new GwtWorkarounds.CharOutput(){ + int charsUntilSeparator; + { + this.charsUntilSeparator = afterEveryChars; + } + + @Override + public void write(char c) throws IOException { + if (this.charsUntilSeparator == 0) { + for (int i = 0; i < separator.length(); ++i) { + delegate.write(separator.charAt(i)); + } + this.charsUntilSeparator = afterEveryChars; + } + delegate.write(c); + --this.charsUntilSeparator; + } + + @Override + public void flush() throws IOException { + delegate.flush(); + } + + @Override + public void close() throws IOException { + delegate.close(); + } + }; + } + + static final class SeparatedBaseEncoding + extends BaseEncoding { + private final BaseEncoding delegate; + private final String separator; + private final int afterEveryChars; + private final CharMatcher separatorChars; + + SeparatedBaseEncoding(BaseEncoding delegate, String separator, int afterEveryChars) { + this.delegate = Preconditions.checkNotNull(delegate); + this.separator = Preconditions.checkNotNull(separator); + this.afterEveryChars = afterEveryChars; + Preconditions.checkArgument(afterEveryChars > 0, "Cannot add a separator after every %s chars", afterEveryChars); + this.separatorChars = CharMatcher.anyOf(separator).precomputed(); + } + + @Override + CharMatcher padding() { + return this.delegate.padding(); + } + + @Override + int maxEncodedSize(int bytes) { + int unseparatedSize = this.delegate.maxEncodedSize(bytes); + return unseparatedSize + this.separator.length() * IntMath.divide(Math.max(0, unseparatedSize - 1), this.afterEveryChars, RoundingMode.FLOOR); + } + + @Override + GwtWorkarounds.ByteOutput encodingStream(GwtWorkarounds.CharOutput output) { + return this.delegate.encodingStream(SeparatedBaseEncoding.separatingOutput(output, this.separator, this.afterEveryChars)); + } + + @Override + int maxDecodedSize(int chars) { + return this.delegate.maxDecodedSize(chars); + } + + @Override + GwtWorkarounds.ByteInput decodingStream(GwtWorkarounds.CharInput input) { + return this.delegate.decodingStream(SeparatedBaseEncoding.ignoringInput(input, this.separatorChars)); + } + + @Override + public BaseEncoding omitPadding() { + return this.delegate.omitPadding().withSeparator(this.separator, this.afterEveryChars); + } + + @Override + public BaseEncoding withPadChar(char padChar) { + return this.delegate.withPadChar(padChar).withSeparator(this.separator, this.afterEveryChars); + } + + @Override + public BaseEncoding withSeparator(String separator, int afterEveryChars) { + throw new UnsupportedOperationException("Already have a separator"); + } + + @Override + public BaseEncoding upperCase() { + return this.delegate.upperCase().withSeparator(this.separator, this.afterEveryChars); + } + + @Override + public BaseEncoding lowerCase() { + return this.delegate.lowerCase().withSeparator(this.separator, this.afterEveryChars); + } + + public String toString() { + String string = String.valueOf(String.valueOf(this.delegate.toString())); + String string2 = String.valueOf(String.valueOf(this.separator)); + int n = this.afterEveryChars; + return new StringBuilder(31 + string.length() + string2.length()).append(string).append(".withSeparator(\"").append(string2).append("\", ").append(n).append(")").toString(); + } + } + + static final class StandardBaseEncoding + extends BaseEncoding { + private final Alphabet alphabet; + @Nullable + private final Character paddingChar; + private transient BaseEncoding upperCase; + private transient BaseEncoding lowerCase; + + StandardBaseEncoding(String name, String alphabetChars, @Nullable Character paddingChar) { + this(new Alphabet(name, alphabetChars.toCharArray()), paddingChar); + } + + StandardBaseEncoding(Alphabet alphabet, @Nullable Character paddingChar) { + this.alphabet = Preconditions.checkNotNull(alphabet); + Preconditions.checkArgument(paddingChar == null || !alphabet.matches(paddingChar.charValue()), "Padding character %s was already in alphabet", paddingChar); + this.paddingChar = paddingChar; + } + + @Override + CharMatcher padding() { + return this.paddingChar == null ? CharMatcher.NONE : CharMatcher.is(this.paddingChar.charValue()); + } + + @Override + int maxEncodedSize(int bytes) { + return this.alphabet.charsPerChunk * IntMath.divide(bytes, this.alphabet.bytesPerChunk, RoundingMode.CEILING); + } + + @Override + GwtWorkarounds.ByteOutput encodingStream(final GwtWorkarounds.CharOutput out) { + Preconditions.checkNotNull(out); + return new GwtWorkarounds.ByteOutput(){ + int bitBuffer = 0; + int bitBufferLength = 0; + int writtenChars = 0; + + @Override + public void write(byte b) throws IOException { + this.bitBuffer <<= 8; + this.bitBuffer |= b & 0xFF; + this.bitBufferLength += 8; + while (this.bitBufferLength >= ((StandardBaseEncoding)StandardBaseEncoding.this).alphabet.bitsPerChar) { + int charIndex = this.bitBuffer >> this.bitBufferLength - ((StandardBaseEncoding)StandardBaseEncoding.this).alphabet.bitsPerChar & ((StandardBaseEncoding)StandardBaseEncoding.this).alphabet.mask; + out.write(StandardBaseEncoding.this.alphabet.encode(charIndex)); + ++this.writtenChars; + this.bitBufferLength -= ((StandardBaseEncoding)StandardBaseEncoding.this).alphabet.bitsPerChar; + } + } + + @Override + public void flush() throws IOException { + out.flush(); + } + + @Override + public void close() throws IOException { + if (this.bitBufferLength > 0) { + int charIndex = this.bitBuffer << ((StandardBaseEncoding)StandardBaseEncoding.this).alphabet.bitsPerChar - this.bitBufferLength & ((StandardBaseEncoding)StandardBaseEncoding.this).alphabet.mask; + out.write(StandardBaseEncoding.this.alphabet.encode(charIndex)); + ++this.writtenChars; + if (StandardBaseEncoding.this.paddingChar != null) { + while (this.writtenChars % ((StandardBaseEncoding)StandardBaseEncoding.this).alphabet.charsPerChunk != 0) { + out.write(StandardBaseEncoding.this.paddingChar.charValue()); + ++this.writtenChars; + } + } + } + out.close(); + } + }; + } + + @Override + int maxDecodedSize(int chars) { + return (int)(((long)this.alphabet.bitsPerChar * (long)chars + 7L) / 8L); + } + + @Override + GwtWorkarounds.ByteInput decodingStream(final GwtWorkarounds.CharInput reader) { + Preconditions.checkNotNull(reader); + return new GwtWorkarounds.ByteInput(){ + int bitBuffer = 0; + int bitBufferLength = 0; + int readChars = 0; + boolean hitPadding = false; + final CharMatcher paddingMatcher = StandardBaseEncoding.this.padding(); + + @Override + public int read() throws IOException { + while (true) { + int readChar; + if ((readChar = reader.read()) == -1) { + if (!this.hitPadding && !StandardBaseEncoding.this.alphabet.isValidPaddingStartPosition(this.readChars)) { + int n = this.readChars; + throw new DecodingException(new StringBuilder(32).append("Invalid input length ").append(n).toString()); + } + return -1; + } + ++this.readChars; + char ch = (char)readChar; + if (this.paddingMatcher.matches(ch)) { + if (!(this.hitPadding || this.readChars != 1 && StandardBaseEncoding.this.alphabet.isValidPaddingStartPosition(this.readChars - 1))) { + int n = this.readChars; + throw new DecodingException(new StringBuilder(41).append("Padding cannot start at index ").append(n).toString()); + } + this.hitPadding = true; + continue; + } + if (this.hitPadding) { + char c = ch; + int n = this.readChars; + throw new DecodingException(new StringBuilder(61).append("Expected padding character but found '").append(c).append("' at index ").append(n).toString()); + } + this.bitBuffer <<= ((StandardBaseEncoding)StandardBaseEncoding.this).alphabet.bitsPerChar; + this.bitBuffer |= StandardBaseEncoding.this.alphabet.decode(ch); + this.bitBufferLength += ((StandardBaseEncoding)StandardBaseEncoding.this).alphabet.bitsPerChar; + if (this.bitBufferLength >= 8) break; + } + this.bitBufferLength -= 8; + return this.bitBuffer >> this.bitBufferLength & 0xFF; + } + + @Override + public void close() throws IOException { + reader.close(); + } + }; + } + + @Override + public BaseEncoding omitPadding() { + return this.paddingChar == null ? this : new StandardBaseEncoding(this.alphabet, null); + } + + @Override + public BaseEncoding withPadChar(char padChar) { + if (8 % this.alphabet.bitsPerChar == 0 || this.paddingChar != null && this.paddingChar.charValue() == padChar) { + return this; + } + return new StandardBaseEncoding(this.alphabet, Character.valueOf(padChar)); + } + + @Override + public BaseEncoding withSeparator(String separator, int afterEveryChars) { + Preconditions.checkNotNull(separator); + Preconditions.checkArgument(this.padding().or(this.alphabet).matchesNoneOf(separator), "Separator cannot contain alphabet or padding characters"); + return new SeparatedBaseEncoding(this, separator, afterEveryChars); + } + + @Override + public BaseEncoding upperCase() { + BaseEncoding result = this.upperCase; + if (result == null) { + Alphabet upper = this.alphabet.upperCase(); + this.upperCase = upper == this.alphabet ? this : new StandardBaseEncoding(upper, this.paddingChar); + result = this.upperCase; + } + return result; + } + + @Override + public BaseEncoding lowerCase() { + BaseEncoding result = this.lowerCase; + if (result == null) { + Alphabet lower = this.alphabet.lowerCase(); + this.lowerCase = lower == this.alphabet ? this : new StandardBaseEncoding(lower, this.paddingChar); + result = this.lowerCase; + } + return result; + } + + public String toString() { + StringBuilder builder = new StringBuilder("BaseEncoding."); + builder.append(this.alphabet.toString()); + if (8 % this.alphabet.bitsPerChar != 0) { + if (this.paddingChar == null) { + builder.append(".omitPadding()"); + } else { + builder.append(".withPadChar(").append(this.paddingChar).append(')'); + } + } + return builder.toString(); + } + } + + private static final class Alphabet + extends CharMatcher { + private final String name; + private final char[] chars; + final int mask; + final int bitsPerChar; + final int charsPerChunk; + final int bytesPerChunk; + private final byte[] decodabet; + private final boolean[] validPadding; + + Alphabet(String name, char[] chars) { + this.name = Preconditions.checkNotNull(name); + this.chars = Preconditions.checkNotNull(chars); + try { + this.bitsPerChar = IntMath.log2(chars.length, RoundingMode.UNNECESSARY); + } + catch (ArithmeticException e) { + int n = chars.length; + throw new IllegalArgumentException(new StringBuilder(35).append("Illegal alphabet length ").append(n).toString(), e); + } + int gcd = Math.min(8, Integer.lowestOneBit(this.bitsPerChar)); + this.charsPerChunk = 8 / gcd; + this.bytesPerChunk = this.bitsPerChar / gcd; + this.mask = chars.length - 1; + byte[] decodabet = new byte[128]; + Arrays.fill(decodabet, (byte)-1); + for (int i = 0; i < chars.length; ++i) { + char c = chars[i]; + Preconditions.checkArgument(CharMatcher.ASCII.matches(c), "Non-ASCII character: %s", Character.valueOf(c)); + Preconditions.checkArgument(decodabet[c] == -1, "Duplicate character: %s", Character.valueOf(c)); + decodabet[c] = (byte)i; + } + this.decodabet = decodabet; + boolean[] validPadding = new boolean[this.charsPerChunk]; + for (int i = 0; i < this.bytesPerChunk; ++i) { + validPadding[IntMath.divide((int)(i * 8), (int)this.bitsPerChar, (RoundingMode)RoundingMode.CEILING)] = true; + } + this.validPadding = validPadding; + } + + char encode(int bits) { + return this.chars[bits]; + } + + boolean isValidPaddingStartPosition(int index) { + return this.validPadding[index % this.charsPerChunk]; + } + + int decode(char ch) throws IOException { + if (ch > '\u007f' || this.decodabet[ch] == -1) { + char c = ch; + throw new DecodingException(new StringBuilder(25).append("Unrecognized character: ").append(c).toString()); + } + return this.decodabet[ch]; + } + + private boolean hasLowerCase() { + for (char c : this.chars) { + if (!Ascii.isLowerCase(c)) continue; + return true; + } + return false; + } + + private boolean hasUpperCase() { + for (char c : this.chars) { + if (!Ascii.isUpperCase(c)) continue; + return true; + } + return false; + } + + Alphabet upperCase() { + if (!this.hasLowerCase()) { + return this; + } + Preconditions.checkState(!this.hasUpperCase(), "Cannot call upperCase() on a mixed-case alphabet"); + char[] upperCased = new char[this.chars.length]; + for (int i = 0; i < this.chars.length; ++i) { + upperCased[i] = Ascii.toUpperCase(this.chars[i]); + } + return new Alphabet(String.valueOf(this.name).concat(".upperCase()"), upperCased); + } + + Alphabet lowerCase() { + if (!this.hasUpperCase()) { + return this; + } + Preconditions.checkState(!this.hasLowerCase(), "Cannot call lowerCase() on a mixed-case alphabet"); + char[] lowerCased = new char[this.chars.length]; + for (int i = 0; i < this.chars.length; ++i) { + lowerCased[i] = Ascii.toLowerCase(this.chars[i]); + } + return new Alphabet(String.valueOf(this.name).concat(".lowerCase()"), lowerCased); + } + + @Override + public boolean matches(char c) { + return CharMatcher.ASCII.matches(c) && this.decodabet[c] != -1; + } + + @Override + public String toString() { + return this.name; + } + } + + public static final class DecodingException + extends IOException { + DecodingException(String message) { + super(message); + } + + DecodingException(Throwable cause) { + super(cause); + } + } +} diff --git a/src/com/google/common/io/ByteArrayDataInput.java b/src/com/google/common/io/ByteArrayDataInput.java new file mode 100644 index 0000000..3ffcd63 --- /dev/null +++ b/src/com/google/common/io/ByteArrayDataInput.java @@ -0,0 +1,54 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.io; + +import java.io.DataInput; + +public interface ByteArrayDataInput +extends DataInput { + @Override + public void readFully(byte[] var1); + + @Override + public void readFully(byte[] var1, int var2, int var3); + + @Override + public int skipBytes(int var1); + + @Override + public boolean readBoolean(); + + @Override + public byte readByte(); + + @Override + public int readUnsignedByte(); + + @Override + public short readShort(); + + @Override + public int readUnsignedShort(); + + @Override + public char readChar(); + + @Override + public int readInt(); + + @Override + public long readLong(); + + @Override + public float readFloat(); + + @Override + public double readDouble(); + + @Override + public String readLine(); + + @Override + public String readUTF(); +} diff --git a/src/com/google/common/io/ByteArrayDataOutput.java b/src/com/google/common/io/ByteArrayDataOutput.java new file mode 100644 index 0000000..08f2684 --- /dev/null +++ b/src/com/google/common/io/ByteArrayDataOutput.java @@ -0,0 +1,54 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.io; + +import java.io.DataOutput; + +public interface ByteArrayDataOutput +extends DataOutput { + @Override + public void write(int var1); + + @Override + public void write(byte[] var1); + + @Override + public void write(byte[] var1, int var2, int var3); + + @Override + public void writeBoolean(boolean var1); + + @Override + public void writeByte(int var1); + + @Override + public void writeShort(int var1); + + @Override + public void writeChar(int var1); + + @Override + public void writeInt(int var1); + + @Override + public void writeLong(long var1); + + @Override + public void writeFloat(float var1); + + @Override + public void writeDouble(double var1); + + @Override + public void writeChars(String var1); + + @Override + public void writeUTF(String var1); + + @Override + @Deprecated + public void writeBytes(String var1); + + public byte[] toByteArray(); +} diff --git a/src/com/google/common/io/ByteProcessor.java b/src/com/google/common/io/ByteProcessor.java new file mode 100644 index 0000000..66b9a12 --- /dev/null +++ b/src/com/google/common/io/ByteProcessor.java @@ -0,0 +1,14 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.io; + +import com.google.common.annotations.Beta; +import java.io.IOException; + +@Beta +public interface ByteProcessor { + public boolean processBytes(byte[] var1, int var2, int var3) throws IOException; + + public T getResult(); +} diff --git a/src/com/google/common/io/ByteSink.java b/src/com/google/common/io/ByteSink.java new file mode 100644 index 0000000..69a3b0b --- /dev/null +++ b/src/com/google/common/io/ByteSink.java @@ -0,0 +1,86 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.io; + +import com.google.common.base.Preconditions; +import com.google.common.io.ByteStreams; +import com.google.common.io.CharSink; +import com.google.common.io.Closer; +import java.io.BufferedOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.io.OutputStreamWriter; +import java.io.Writer; +import java.nio.charset.Charset; + +public abstract class ByteSink { + protected ByteSink() { + } + + public CharSink asCharSink(Charset charset) { + return new AsCharSink(charset); + } + + public abstract OutputStream openStream() throws IOException; + + public OutputStream openBufferedStream() throws IOException { + OutputStream out = this.openStream(); + return out instanceof BufferedOutputStream ? (BufferedOutputStream)out : new BufferedOutputStream(out); + } + + public void write(byte[] bytes) throws IOException { + Preconditions.checkNotNull(bytes); + Closer closer = Closer.create(); + try { + OutputStream out = closer.register(this.openStream()); + out.write(bytes); + out.flush(); + } + catch (Throwable e) { + throw closer.rethrow(e); + } + finally { + closer.close(); + } + } + + public long writeFrom(InputStream input) throws IOException { + Preconditions.checkNotNull(input); + Closer closer = Closer.create(); + try { + OutputStream out = closer.register(this.openStream()); + long written = ByteStreams.copy(input, out); + out.flush(); + long l = written; + return l; + } + catch (Throwable e) { + throw closer.rethrow(e); + } + finally { + closer.close(); + } + } + + private final class AsCharSink + extends CharSink { + private final Charset charset; + + private AsCharSink(Charset charset) { + this.charset = Preconditions.checkNotNull(charset); + } + + @Override + public Writer openStream() throws IOException { + return new OutputStreamWriter(ByteSink.this.openStream(), this.charset); + } + + public String toString() { + String string = String.valueOf(String.valueOf(ByteSink.this.toString())); + String string2 = String.valueOf(String.valueOf(this.charset)); + return new StringBuilder(13 + string.length() + string2.length()).append(string).append(".asCharSink(").append(string2).append(")").toString(); + } + } +} diff --git a/src/com/google/common/io/ByteSource.java b/src/com/google/common/io/ByteSource.java new file mode 100644 index 0000000..50e7049 --- /dev/null +++ b/src/com/google/common/io/ByteSource.java @@ -0,0 +1,452 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.io; + +import com.google.common.annotations.Beta; +import com.google.common.base.Ascii; +import com.google.common.base.Preconditions; +import com.google.common.collect.ImmutableList; +import com.google.common.hash.Funnels; +import com.google.common.hash.HashCode; +import com.google.common.hash.HashFunction; +import com.google.common.hash.Hasher; +import com.google.common.io.BaseEncoding; +import com.google.common.io.ByteProcessor; +import com.google.common.io.ByteSink; +import com.google.common.io.ByteStreams; +import com.google.common.io.CharSource; +import com.google.common.io.Closer; +import com.google.common.io.MultiInputStream; +import java.io.BufferedInputStream; +import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.OutputStream; +import java.io.Reader; +import java.nio.charset.Charset; +import java.util.Arrays; +import java.util.Iterator; + +public abstract class ByteSource { + private static final int BUF_SIZE = 4096; + private static final byte[] countBuffer = new byte[4096]; + + protected ByteSource() { + } + + public CharSource asCharSource(Charset charset) { + return new AsCharSource(charset); + } + + public abstract InputStream openStream() throws IOException; + + public InputStream openBufferedStream() throws IOException { + InputStream in = this.openStream(); + return in instanceof BufferedInputStream ? (BufferedInputStream)in : new BufferedInputStream(in); + } + + public ByteSource slice(long offset, long length) { + return new SlicedByteSource(offset, length); + } + + public boolean isEmpty() throws IOException { + Closer closer = Closer.create(); + try { + InputStream in = closer.register(this.openStream()); + boolean bl = in.read() == -1; + return bl; + } + catch (Throwable e) { + throw closer.rethrow(e); + } + finally { + closer.close(); + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + public long size() throws IOException { + Closer closer = Closer.create(); + try { + InputStream in = closer.register(this.openStream()); + long l = this.countBySkipping(in); + return l; + } + catch (IOException e) { + } + finally { + closer.close(); + } + closer = Closer.create(); + try { + InputStream in = closer.register(this.openStream()); + long l = this.countByReading(in); + return l; + } + catch (Throwable e) { + throw closer.rethrow(e); + } + finally { + closer.close(); + } + } + + private long countBySkipping(InputStream in) throws IOException { + long count = 0L; + while (true) { + long skipped; + if ((skipped = in.skip(Math.min(in.available(), Integer.MAX_VALUE))) <= 0L) { + if (in.read() == -1) { + return count; + } + if (count == 0L && in.available() == 0) { + throw new IOException(); + } + ++count; + continue; + } + count += skipped; + } + } + + private long countByReading(InputStream in) throws IOException { + long read; + long count = 0L; + while ((read = (long)in.read(countBuffer)) != -1L) { + count += read; + } + return count; + } + + public long copyTo(OutputStream output) throws IOException { + Preconditions.checkNotNull(output); + Closer closer = Closer.create(); + try { + InputStream in = closer.register(this.openStream()); + long l = ByteStreams.copy(in, output); + return l; + } + catch (Throwable e) { + throw closer.rethrow(e); + } + finally { + closer.close(); + } + } + + public long copyTo(ByteSink sink) throws IOException { + Preconditions.checkNotNull(sink); + Closer closer = Closer.create(); + try { + InputStream in = closer.register(this.openStream()); + OutputStream out = closer.register(sink.openStream()); + long l = ByteStreams.copy(in, out); + return l; + } + catch (Throwable e) { + throw closer.rethrow(e); + } + finally { + closer.close(); + } + } + + public byte[] read() throws IOException { + Closer closer = Closer.create(); + try { + InputStream in = closer.register(this.openStream()); + byte[] byArray = ByteStreams.toByteArray(in); + return byArray; + } + catch (Throwable e) { + throw closer.rethrow(e); + } + finally { + closer.close(); + } + } + + @Beta + public T read(ByteProcessor processor) throws IOException { + Preconditions.checkNotNull(processor); + Closer closer = Closer.create(); + try { + InputStream in = closer.register(this.openStream()); + T t = ByteStreams.readBytes(in, processor); + return t; + } + catch (Throwable e) { + throw closer.rethrow(e); + } + finally { + closer.close(); + } + } + + public HashCode hash(HashFunction hashFunction) throws IOException { + Hasher hasher = hashFunction.newHasher(); + this.copyTo(Funnels.asOutputStream(hasher)); + return hasher.hash(); + } + + /* + * Enabled aggressive block sorting + * Enabled unnecessary exception pruning + * Enabled aggressive exception aggregation + */ + public boolean contentEquals(ByteSource other) throws IOException { + Preconditions.checkNotNull(other); + byte[] buf1 = new byte[4096]; + byte[] buf2 = new byte[4096]; + Closer closer = Closer.create(); + try { + InputStream in1 = closer.register(this.openStream()); + InputStream in2 = closer.register(other.openStream()); + while (true) { + int read2; + int read1; + if ((read1 = ByteStreams.read(in1, buf1, 0, 4096)) != (read2 = ByteStreams.read(in2, buf2, 0, 4096)) || !Arrays.equals(buf1, buf2)) { + boolean bl = false; + return bl; + } + if (read1 != 4096) { + boolean bl = true; + return bl; + } + continue; + break; + } + } + catch (Throwable e) { + throw closer.rethrow(e); + } + finally { + closer.close(); + } + } + + public static ByteSource concat(Iterable sources) { + return new ConcatenatedByteSource(sources); + } + + public static ByteSource concat(Iterator sources) { + return ByteSource.concat(ImmutableList.copyOf(sources)); + } + + public static ByteSource concat(ByteSource ... sources) { + return ByteSource.concat(ImmutableList.copyOf(sources)); + } + + public static ByteSource wrap(byte[] b) { + return new ByteArrayByteSource(b); + } + + public static ByteSource empty() { + return EmptyByteSource.INSTANCE; + } + + private static final class ConcatenatedByteSource + extends ByteSource { + private final Iterable sources; + + ConcatenatedByteSource(Iterable sources) { + this.sources = Preconditions.checkNotNull(sources); + } + + @Override + public InputStream openStream() throws IOException { + return new MultiInputStream(this.sources.iterator()); + } + + @Override + public boolean isEmpty() throws IOException { + for (ByteSource byteSource : this.sources) { + if (byteSource.isEmpty()) continue; + return false; + } + return true; + } + + @Override + public long size() throws IOException { + long result = 0L; + for (ByteSource byteSource : this.sources) { + result += byteSource.size(); + } + return result; + } + + public String toString() { + String string = String.valueOf(String.valueOf(this.sources)); + return new StringBuilder(19 + string.length()).append("ByteSource.concat(").append(string).append(")").toString(); + } + } + + private static final class EmptyByteSource + extends ByteArrayByteSource { + private static final EmptyByteSource INSTANCE = new EmptyByteSource(); + + private EmptyByteSource() { + super(new byte[0]); + } + + @Override + public CharSource asCharSource(Charset charset) { + Preconditions.checkNotNull(charset); + return CharSource.empty(); + } + + @Override + public byte[] read() { + return this.bytes; + } + + @Override + public String toString() { + return "ByteSource.empty()"; + } + } + + private static class ByteArrayByteSource + extends ByteSource { + protected final byte[] bytes; + + protected ByteArrayByteSource(byte[] bytes) { + this.bytes = Preconditions.checkNotNull(bytes); + } + + @Override + public InputStream openStream() { + return new ByteArrayInputStream(this.bytes); + } + + @Override + public InputStream openBufferedStream() throws IOException { + return this.openStream(); + } + + @Override + public boolean isEmpty() { + return this.bytes.length == 0; + } + + @Override + public long size() { + return this.bytes.length; + } + + @Override + public byte[] read() { + return (byte[])this.bytes.clone(); + } + + @Override + public long copyTo(OutputStream output) throws IOException { + output.write(this.bytes); + return this.bytes.length; + } + + @Override + public T read(ByteProcessor processor) throws IOException { + processor.processBytes(this.bytes, 0, this.bytes.length); + return processor.getResult(); + } + + @Override + public HashCode hash(HashFunction hashFunction) throws IOException { + return hashFunction.hashBytes(this.bytes); + } + + public String toString() { + String string = String.valueOf(String.valueOf(Ascii.truncate(BaseEncoding.base16().encode(this.bytes), 30, "..."))); + return new StringBuilder(17 + string.length()).append("ByteSource.wrap(").append(string).append(")").toString(); + } + } + + private final class SlicedByteSource + extends ByteSource { + private final long offset; + private final long length; + + private SlicedByteSource(long offset, long length) { + Preconditions.checkArgument(offset >= 0L, "offset (%s) may not be negative", offset); + Preconditions.checkArgument(length >= 0L, "length (%s) may not be negative", length); + this.offset = offset; + this.length = length; + } + + @Override + public InputStream openStream() throws IOException { + return this.sliceStream(ByteSource.this.openStream()); + } + + @Override + public InputStream openBufferedStream() throws IOException { + return this.sliceStream(ByteSource.this.openBufferedStream()); + } + + private InputStream sliceStream(InputStream in) throws IOException { + if (this.offset > 0L) { + try { + ByteStreams.skipFully(in, this.offset); + } + catch (Throwable e) { + Closer closer = Closer.create(); + closer.register(in); + try { + throw closer.rethrow(e); + } + catch (Throwable throwable) { + closer.close(); + throw throwable; + } + } + } + return ByteStreams.limit(in, this.length); + } + + @Override + public ByteSource slice(long offset, long length) { + Preconditions.checkArgument(offset >= 0L, "offset (%s) may not be negative", offset); + Preconditions.checkArgument(length >= 0L, "length (%s) may not be negative", length); + long maxLength = this.length - offset; + return ByteSource.this.slice(this.offset + offset, Math.min(length, maxLength)); + } + + @Override + public boolean isEmpty() throws IOException { + return this.length == 0L || super.isEmpty(); + } + + public String toString() { + String string = String.valueOf(String.valueOf(ByteSource.this.toString())); + long l = this.offset; + long l2 = this.length; + return new StringBuilder(50 + string.length()).append(string).append(".slice(").append(l).append(", ").append(l2).append(")").toString(); + } + } + + private final class AsCharSource + extends CharSource { + private final Charset charset; + + private AsCharSource(Charset charset) { + this.charset = Preconditions.checkNotNull(charset); + } + + @Override + public Reader openStream() throws IOException { + return new InputStreamReader(ByteSource.this.openStream(), this.charset); + } + + public String toString() { + String string = String.valueOf(String.valueOf(ByteSource.this.toString())); + String string2 = String.valueOf(String.valueOf(this.charset)); + return new StringBuilder(15 + string.length() + string2.length()).append(string).append(".asCharSource(").append(string2).append(")").toString(); + } + } +} diff --git a/src/com/google/common/io/ByteStreams.java b/src/com/google/common/io/ByteStreams.java new file mode 100644 index 0000000..48624bc --- /dev/null +++ b/src/com/google/common/io/ByteStreams.java @@ -0,0 +1,593 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.io; + +import com.google.common.annotations.Beta; +import com.google.common.base.Preconditions; +import com.google.common.io.ByteArrayDataInput; +import com.google.common.io.ByteArrayDataOutput; +import com.google.common.io.ByteProcessor; +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.DataInput; +import java.io.DataInputStream; +import java.io.DataOutput; +import java.io.DataOutputStream; +import java.io.EOFException; +import java.io.FilterInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.nio.ByteBuffer; +import java.nio.channels.ReadableByteChannel; +import java.nio.channels.WritableByteChannel; +import java.util.Arrays; + +@Beta +public final class ByteStreams { + private static final int BUF_SIZE = 4096; + private static final OutputStream NULL_OUTPUT_STREAM = new OutputStream(){ + + @Override + public void write(int b) { + } + + @Override + public void write(byte[] b) { + Preconditions.checkNotNull(b); + } + + @Override + public void write(byte[] b, int off, int len) { + Preconditions.checkNotNull(b); + } + + public String toString() { + return "ByteStreams.nullOutputStream()"; + } + }; + + private ByteStreams() { + } + + public static long copy(InputStream from, OutputStream to) throws IOException { + int r; + Preconditions.checkNotNull(from); + Preconditions.checkNotNull(to); + byte[] buf = new byte[4096]; + long total = 0L; + while ((r = from.read(buf)) != -1) { + to.write(buf, 0, r); + total += (long)r; + } + return total; + } + + public static long copy(ReadableByteChannel from, WritableByteChannel to) throws IOException { + Preconditions.checkNotNull(from); + Preconditions.checkNotNull(to); + ByteBuffer buf = ByteBuffer.allocate(4096); + long total = 0L; + while (from.read(buf) != -1) { + buf.flip(); + while (buf.hasRemaining()) { + total += (long)to.write(buf); + } + buf.clear(); + } + return total; + } + + public static byte[] toByteArray(InputStream in) throws IOException { + ByteArrayOutputStream out = new ByteArrayOutputStream(); + ByteStreams.copy(in, out); + return out.toByteArray(); + } + + static byte[] toByteArray(InputStream in, int expectedSize) throws IOException { + int read; + byte[] bytes = new byte[expectedSize]; + for (int remaining = expectedSize; remaining > 0; remaining -= read) { + int off = expectedSize - remaining; + read = in.read(bytes, off, remaining); + if (read != -1) continue; + return Arrays.copyOf(bytes, off); + } + int b = in.read(); + if (b == -1) { + return bytes; + } + FastByteArrayOutputStream out = new FastByteArrayOutputStream(); + out.write(b); + ByteStreams.copy(in, out); + byte[] result = new byte[bytes.length + out.size()]; + System.arraycopy(bytes, 0, result, 0, bytes.length); + out.writeTo(result, bytes.length); + return result; + } + + public static ByteArrayDataInput newDataInput(byte[] bytes) { + return ByteStreams.newDataInput(new ByteArrayInputStream(bytes)); + } + + public static ByteArrayDataInput newDataInput(byte[] bytes, int start) { + Preconditions.checkPositionIndex(start, bytes.length); + return ByteStreams.newDataInput(new ByteArrayInputStream(bytes, start, bytes.length - start)); + } + + public static ByteArrayDataInput newDataInput(ByteArrayInputStream byteArrayInputStream) { + return new ByteArrayDataInputStream(Preconditions.checkNotNull(byteArrayInputStream)); + } + + public static ByteArrayDataOutput newDataOutput() { + return ByteStreams.newDataOutput(new ByteArrayOutputStream()); + } + + public static ByteArrayDataOutput newDataOutput(int size) { + Preconditions.checkArgument(size >= 0, "Invalid size: %s", size); + return ByteStreams.newDataOutput(new ByteArrayOutputStream(size)); + } + + public static ByteArrayDataOutput newDataOutput(ByteArrayOutputStream byteArrayOutputSteam) { + return new ByteArrayDataOutputStream(Preconditions.checkNotNull(byteArrayOutputSteam)); + } + + public static OutputStream nullOutputStream() { + return NULL_OUTPUT_STREAM; + } + + public static InputStream limit(InputStream in, long limit) { + return new LimitedInputStream(in, limit); + } + + public static void readFully(InputStream in, byte[] b) throws IOException { + ByteStreams.readFully(in, b, 0, b.length); + } + + public static void readFully(InputStream in, byte[] b, int off, int len) throws IOException { + int read = ByteStreams.read(in, b, off, len); + if (read != len) { + int n = read; + int n2 = len; + throw new EOFException(new StringBuilder(81).append("reached end of stream after reading ").append(n).append(" bytes; ").append(n2).append(" bytes expected").toString()); + } + } + + public static void skipFully(InputStream in, long n) throws IOException { + long toSkip = n; + while (n > 0L) { + long amt = in.skip(n); + if (amt == 0L) { + if (in.read() == -1) { + long skipped; + long l = skipped = toSkip - n; + long l2 = toSkip; + throw new EOFException(new StringBuilder(100).append("reached end of stream after skipping ").append(l).append(" bytes; ").append(l2).append(" bytes expected").toString()); + } + --n; + continue; + } + n -= amt; + } + } + + public static T readBytes(InputStream input, ByteProcessor processor) throws IOException { + int read; + Preconditions.checkNotNull(input); + Preconditions.checkNotNull(processor); + byte[] buf = new byte[4096]; + while ((read = input.read(buf)) != -1 && processor.processBytes(buf, 0, read)) { + } + return processor.getResult(); + } + + public static int read(InputStream in, byte[] b, int off, int len) throws IOException { + int total; + int result; + Preconditions.checkNotNull(in); + Preconditions.checkNotNull(b); + if (len < 0) { + throw new IndexOutOfBoundsException("len is negative"); + } + for (total = 0; total < len && (result = in.read(b, off + total, len - total)) != -1; total += result) { + } + return total; + } + + private static final class LimitedInputStream + extends FilterInputStream { + private long left; + private long mark = -1L; + + LimitedInputStream(InputStream in, long limit) { + super(in); + Preconditions.checkNotNull(in); + Preconditions.checkArgument(limit >= 0L, "limit must be non-negative"); + this.left = limit; + } + + @Override + public int available() throws IOException { + return (int)Math.min((long)this.in.available(), this.left); + } + + @Override + public synchronized void mark(int readLimit) { + this.in.mark(readLimit); + this.mark = this.left; + } + + @Override + public int read() throws IOException { + if (this.left == 0L) { + return -1; + } + int result = this.in.read(); + if (result != -1) { + --this.left; + } + return result; + } + + @Override + public int read(byte[] b, int off, int len) throws IOException { + if (this.left == 0L) { + return -1; + } + int result = this.in.read(b, off, len = (int)Math.min((long)len, this.left)); + if (result != -1) { + this.left -= (long)result; + } + return result; + } + + @Override + public synchronized void reset() throws IOException { + if (!this.in.markSupported()) { + throw new IOException("Mark not supported"); + } + if (this.mark == -1L) { + throw new IOException("Mark not set"); + } + this.in.reset(); + this.left = this.mark; + } + + @Override + public long skip(long n) throws IOException { + n = Math.min(n, this.left); + long skipped = this.in.skip(n); + this.left -= skipped; + return skipped; + } + } + + private static class ByteArrayDataOutputStream + implements ByteArrayDataOutput { + final DataOutput output; + final ByteArrayOutputStream byteArrayOutputSteam; + + ByteArrayDataOutputStream(ByteArrayOutputStream byteArrayOutputSteam) { + this.byteArrayOutputSteam = byteArrayOutputSteam; + this.output = new DataOutputStream(byteArrayOutputSteam); + } + + @Override + public void write(int b) { + try { + this.output.write(b); + } + catch (IOException impossible) { + throw new AssertionError((Object)impossible); + } + } + + @Override + public void write(byte[] b) { + try { + this.output.write(b); + } + catch (IOException impossible) { + throw new AssertionError((Object)impossible); + } + } + + @Override + public void write(byte[] b, int off, int len) { + try { + this.output.write(b, off, len); + } + catch (IOException impossible) { + throw new AssertionError((Object)impossible); + } + } + + @Override + public void writeBoolean(boolean v) { + try { + this.output.writeBoolean(v); + } + catch (IOException impossible) { + throw new AssertionError((Object)impossible); + } + } + + @Override + public void writeByte(int v) { + try { + this.output.writeByte(v); + } + catch (IOException impossible) { + throw new AssertionError((Object)impossible); + } + } + + @Override + public void writeBytes(String s) { + try { + this.output.writeBytes(s); + } + catch (IOException impossible) { + throw new AssertionError((Object)impossible); + } + } + + @Override + public void writeChar(int v) { + try { + this.output.writeChar(v); + } + catch (IOException impossible) { + throw new AssertionError((Object)impossible); + } + } + + @Override + public void writeChars(String s) { + try { + this.output.writeChars(s); + } + catch (IOException impossible) { + throw new AssertionError((Object)impossible); + } + } + + @Override + public void writeDouble(double v) { + try { + this.output.writeDouble(v); + } + catch (IOException impossible) { + throw new AssertionError((Object)impossible); + } + } + + @Override + public void writeFloat(float v) { + try { + this.output.writeFloat(v); + } + catch (IOException impossible) { + throw new AssertionError((Object)impossible); + } + } + + @Override + public void writeInt(int v) { + try { + this.output.writeInt(v); + } + catch (IOException impossible) { + throw new AssertionError((Object)impossible); + } + } + + @Override + public void writeLong(long v) { + try { + this.output.writeLong(v); + } + catch (IOException impossible) { + throw new AssertionError((Object)impossible); + } + } + + @Override + public void writeShort(int v) { + try { + this.output.writeShort(v); + } + catch (IOException impossible) { + throw new AssertionError((Object)impossible); + } + } + + @Override + public void writeUTF(String s) { + try { + this.output.writeUTF(s); + } + catch (IOException impossible) { + throw new AssertionError((Object)impossible); + } + } + + @Override + public byte[] toByteArray() { + return this.byteArrayOutputSteam.toByteArray(); + } + } + + private static class ByteArrayDataInputStream + implements ByteArrayDataInput { + final DataInput input; + + ByteArrayDataInputStream(ByteArrayInputStream byteArrayInputStream) { + this.input = new DataInputStream(byteArrayInputStream); + } + + @Override + public void readFully(byte[] b) { + try { + this.input.readFully(b); + } + catch (IOException e) { + throw new IllegalStateException(e); + } + } + + @Override + public void readFully(byte[] b, int off, int len) { + try { + this.input.readFully(b, off, len); + } + catch (IOException e) { + throw new IllegalStateException(e); + } + } + + @Override + public int skipBytes(int n) { + try { + return this.input.skipBytes(n); + } + catch (IOException e) { + throw new IllegalStateException(e); + } + } + + @Override + public boolean readBoolean() { + try { + return this.input.readBoolean(); + } + catch (IOException e) { + throw new IllegalStateException(e); + } + } + + @Override + public byte readByte() { + try { + return this.input.readByte(); + } + catch (EOFException e) { + throw new IllegalStateException(e); + } + catch (IOException impossible) { + throw new AssertionError((Object)impossible); + } + } + + @Override + public int readUnsignedByte() { + try { + return this.input.readUnsignedByte(); + } + catch (IOException e) { + throw new IllegalStateException(e); + } + } + + @Override + public short readShort() { + try { + return this.input.readShort(); + } + catch (IOException e) { + throw new IllegalStateException(e); + } + } + + @Override + public int readUnsignedShort() { + try { + return this.input.readUnsignedShort(); + } + catch (IOException e) { + throw new IllegalStateException(e); + } + } + + @Override + public char readChar() { + try { + return this.input.readChar(); + } + catch (IOException e) { + throw new IllegalStateException(e); + } + } + + @Override + public int readInt() { + try { + return this.input.readInt(); + } + catch (IOException e) { + throw new IllegalStateException(e); + } + } + + @Override + public long readLong() { + try { + return this.input.readLong(); + } + catch (IOException e) { + throw new IllegalStateException(e); + } + } + + @Override + public float readFloat() { + try { + return this.input.readFloat(); + } + catch (IOException e) { + throw new IllegalStateException(e); + } + } + + @Override + public double readDouble() { + try { + return this.input.readDouble(); + } + catch (IOException e) { + throw new IllegalStateException(e); + } + } + + @Override + public String readLine() { + try { + return this.input.readLine(); + } + catch (IOException e) { + throw new IllegalStateException(e); + } + } + + @Override + public String readUTF() { + try { + return this.input.readUTF(); + } + catch (IOException e) { + throw new IllegalStateException(e); + } + } + } + + private static final class FastByteArrayOutputStream + extends ByteArrayOutputStream { + private FastByteArrayOutputStream() { + } + + void writeTo(byte[] b, int off) { + System.arraycopy(this.buf, 0, b, off, this.count); + } + } +} diff --git a/src/com/google/common/io/CharSequenceReader.java b/src/com/google/common/io/CharSequenceReader.java new file mode 100644 index 0000000..345de65 --- /dev/null +++ b/src/com/google/common/io/CharSequenceReader.java @@ -0,0 +1,106 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.io; + +import com.google.common.base.Preconditions; +import java.io.IOException; +import java.io.Reader; +import java.nio.CharBuffer; + +final class CharSequenceReader +extends Reader { + private CharSequence seq; + private int pos; + private int mark; + + public CharSequenceReader(CharSequence seq) { + this.seq = Preconditions.checkNotNull(seq); + } + + private void checkOpen() throws IOException { + if (this.seq == null) { + throw new IOException("reader closed"); + } + } + + private boolean hasRemaining() { + return this.remaining() > 0; + } + + private int remaining() { + return this.seq.length() - this.pos; + } + + @Override + public synchronized int read(CharBuffer target) throws IOException { + Preconditions.checkNotNull(target); + this.checkOpen(); + if (!this.hasRemaining()) { + return -1; + } + int charsToRead = Math.min(target.remaining(), this.remaining()); + for (int i = 0; i < charsToRead; ++i) { + target.put(this.seq.charAt(this.pos++)); + } + return charsToRead; + } + + @Override + public synchronized int read() throws IOException { + this.checkOpen(); + return this.hasRemaining() ? (int)this.seq.charAt(this.pos++) : -1; + } + + @Override + public synchronized int read(char[] cbuf, int off, int len) throws IOException { + Preconditions.checkPositionIndexes(off, off + len, cbuf.length); + this.checkOpen(); + if (!this.hasRemaining()) { + return -1; + } + int charsToRead = Math.min(len, this.remaining()); + for (int i = 0; i < charsToRead; ++i) { + cbuf[off + i] = this.seq.charAt(this.pos++); + } + return charsToRead; + } + + @Override + public synchronized long skip(long n) throws IOException { + Preconditions.checkArgument(n >= 0L, "n (%s) may not be negative", n); + this.checkOpen(); + int charsToSkip = (int)Math.min((long)this.remaining(), n); + this.pos += charsToSkip; + return charsToSkip; + } + + @Override + public synchronized boolean ready() throws IOException { + this.checkOpen(); + return true; + } + + @Override + public boolean markSupported() { + return true; + } + + @Override + public synchronized void mark(int readAheadLimit) throws IOException { + Preconditions.checkArgument(readAheadLimit >= 0, "readAheadLimit (%s) may not be negative", readAheadLimit); + this.checkOpen(); + this.mark = this.pos; + } + + @Override + public synchronized void reset() throws IOException { + this.checkOpen(); + this.pos = this.mark; + } + + @Override + public synchronized void close() throws IOException { + this.seq = null; + } +} diff --git a/src/com/google/common/io/CharSink.java b/src/com/google/common/io/CharSink.java new file mode 100644 index 0000000..c8818cc --- /dev/null +++ b/src/com/google/common/io/CharSink.java @@ -0,0 +1,80 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.io; + +import com.google.common.base.Preconditions; +import com.google.common.io.CharStreams; +import com.google.common.io.Closer; +import java.io.BufferedWriter; +import java.io.IOException; +import java.io.Writer; + +public abstract class CharSink { + protected CharSink() { + } + + public abstract Writer openStream() throws IOException; + + public Writer openBufferedStream() throws IOException { + Writer writer = this.openStream(); + return writer instanceof BufferedWriter ? (BufferedWriter)writer : new BufferedWriter(writer); + } + + public void write(CharSequence charSequence) throws IOException { + Preconditions.checkNotNull(charSequence); + Closer closer = Closer.create(); + try { + Writer out = closer.register(this.openStream()); + out.append(charSequence); + out.flush(); + } + catch (Throwable e) { + throw closer.rethrow(e); + } + finally { + closer.close(); + } + } + + public void writeLines(Iterable lines) throws IOException { + this.writeLines(lines, System.getProperty("line.separator")); + } + + public void writeLines(Iterable lines, String lineSeparator) throws IOException { + Preconditions.checkNotNull(lines); + Preconditions.checkNotNull(lineSeparator); + Closer closer = Closer.create(); + try { + Writer out = closer.register(this.openBufferedStream()); + for (CharSequence charSequence : lines) { + out.append(charSequence).append(lineSeparator); + } + out.flush(); + } + catch (Throwable e) { + throw closer.rethrow(e); + } + finally { + closer.close(); + } + } + + public long writeFrom(Readable readable) throws IOException { + Preconditions.checkNotNull(readable); + Closer closer = Closer.create(); + try { + Writer out = closer.register(this.openStream()); + long written = CharStreams.copy(readable, out); + out.flush(); + long l = written; + return l; + } + catch (Throwable e) { + throw closer.rethrow(e); + } + finally { + closer.close(); + } + } +} diff --git a/src/com/google/common/io/CharSource.java b/src/com/google/common/io/CharSource.java new file mode 100644 index 0000000..6f9a67e --- /dev/null +++ b/src/com/google/common/io/CharSource.java @@ -0,0 +1,291 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.io; + +import com.google.common.annotations.Beta; +import com.google.common.base.Ascii; +import com.google.common.base.Preconditions; +import com.google.common.base.Splitter; +import com.google.common.collect.AbstractIterator; +import com.google.common.collect.ImmutableList; +import com.google.common.collect.Lists; +import com.google.common.io.CharSequenceReader; +import com.google.common.io.CharSink; +import com.google.common.io.CharStreams; +import com.google.common.io.Closer; +import com.google.common.io.LineProcessor; +import com.google.common.io.MultiReader; +import java.io.BufferedReader; +import java.io.IOException; +import java.io.Reader; +import java.io.Writer; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.regex.Pattern; +import javax.annotation.Nullable; + +public abstract class CharSource { + protected CharSource() { + } + + public abstract Reader openStream() throws IOException; + + public BufferedReader openBufferedStream() throws IOException { + Reader reader = this.openStream(); + return reader instanceof BufferedReader ? (BufferedReader)reader : new BufferedReader(reader); + } + + public long copyTo(Appendable appendable) throws IOException { + Preconditions.checkNotNull(appendable); + Closer closer = Closer.create(); + try { + Reader reader = closer.register(this.openStream()); + long l = CharStreams.copy(reader, appendable); + return l; + } + catch (Throwable e) { + throw closer.rethrow(e); + } + finally { + closer.close(); + } + } + + public long copyTo(CharSink sink) throws IOException { + Preconditions.checkNotNull(sink); + Closer closer = Closer.create(); + try { + Reader reader = closer.register(this.openStream()); + Writer writer = closer.register(sink.openStream()); + long l = CharStreams.copy(reader, writer); + return l; + } + catch (Throwable e) { + throw closer.rethrow(e); + } + finally { + closer.close(); + } + } + + public String read() throws IOException { + Closer closer = Closer.create(); + try { + Reader reader = closer.register(this.openStream()); + String string = CharStreams.toString(reader); + return string; + } + catch (Throwable e) { + throw closer.rethrow(e); + } + finally { + closer.close(); + } + } + + @Nullable + public String readFirstLine() throws IOException { + Closer closer = Closer.create(); + try { + BufferedReader reader = closer.register(this.openBufferedStream()); + String string = reader.readLine(); + return string; + } + catch (Throwable e) { + throw closer.rethrow(e); + } + finally { + closer.close(); + } + } + + public ImmutableList readLines() throws IOException { + Closer closer = Closer.create(); + try { + String line; + BufferedReader reader = closer.register(this.openBufferedStream()); + ArrayList result = Lists.newArrayList(); + while ((line = reader.readLine()) != null) { + result.add(line); + } + ImmutableList immutableList = ImmutableList.copyOf(result); + return immutableList; + } + catch (Throwable e) { + throw closer.rethrow(e); + } + finally { + closer.close(); + } + } + + @Beta + public T readLines(LineProcessor processor) throws IOException { + Preconditions.checkNotNull(processor); + Closer closer = Closer.create(); + try { + Reader reader = closer.register(this.openStream()); + T t = CharStreams.readLines(reader, processor); + return t; + } + catch (Throwable e) { + throw closer.rethrow(e); + } + finally { + closer.close(); + } + } + + public boolean isEmpty() throws IOException { + Closer closer = Closer.create(); + try { + Reader reader = closer.register(this.openStream()); + boolean bl = reader.read() == -1; + return bl; + } + catch (Throwable e) { + throw closer.rethrow(e); + } + finally { + closer.close(); + } + } + + public static CharSource concat(Iterable sources) { + return new ConcatenatedCharSource(sources); + } + + public static CharSource concat(Iterator sources) { + return CharSource.concat(ImmutableList.copyOf(sources)); + } + + public static CharSource concat(CharSource ... sources) { + return CharSource.concat(ImmutableList.copyOf(sources)); + } + + public static CharSource wrap(CharSequence charSequence) { + return new CharSequenceCharSource(charSequence); + } + + public static CharSource empty() { + return EmptyCharSource.INSTANCE; + } + + private static final class ConcatenatedCharSource + extends CharSource { + private final Iterable sources; + + ConcatenatedCharSource(Iterable sources) { + this.sources = Preconditions.checkNotNull(sources); + } + + @Override + public Reader openStream() throws IOException { + return new MultiReader(this.sources.iterator()); + } + + @Override + public boolean isEmpty() throws IOException { + for (CharSource charSource : this.sources) { + if (charSource.isEmpty()) continue; + return false; + } + return true; + } + + public String toString() { + String string = String.valueOf(String.valueOf(this.sources)); + return new StringBuilder(19 + string.length()).append("CharSource.concat(").append(string).append(")").toString(); + } + } + + private static final class EmptyCharSource + extends CharSequenceCharSource { + private static final EmptyCharSource INSTANCE = new EmptyCharSource(); + + private EmptyCharSource() { + super(""); + } + + @Override + public String toString() { + return "CharSource.empty()"; + } + } + + private static class CharSequenceCharSource + extends CharSource { + private static final Splitter LINE_SPLITTER = Splitter.on(Pattern.compile("\r\n|\n|\r")); + private final CharSequence seq; + + protected CharSequenceCharSource(CharSequence seq) { + this.seq = Preconditions.checkNotNull(seq); + } + + @Override + public Reader openStream() { + return new CharSequenceReader(this.seq); + } + + @Override + public String read() { + return this.seq.toString(); + } + + @Override + public boolean isEmpty() { + return this.seq.length() == 0; + } + + private Iterable lines() { + return new Iterable(){ + + @Override + public Iterator iterator() { + return new AbstractIterator(){ + Iterator lines; + { + this.lines = LINE_SPLITTER.split(CharSequenceCharSource.this.seq).iterator(); + } + + @Override + protected String computeNext() { + if (this.lines.hasNext()) { + String next = this.lines.next(); + if (this.lines.hasNext() || !next.isEmpty()) { + return next; + } + } + return (String)this.endOfData(); + } + }; + } + }; + } + + @Override + public String readFirstLine() { + Iterator lines = this.lines().iterator(); + return lines.hasNext() ? lines.next() : null; + } + + @Override + public ImmutableList readLines() { + return ImmutableList.copyOf(this.lines()); + } + + @Override + public T readLines(LineProcessor processor) throws IOException { + for (String line : this.lines()) { + if (!processor.processLine(line)) break; + } + return processor.getResult(); + } + + public String toString() { + String string = String.valueOf(String.valueOf(Ascii.truncate(this.seq, 30, "..."))); + return new StringBuilder(17 + string.length()).append("CharSource.wrap(").append(string).append(")").toString(); + } + } +} diff --git a/src/com/google/common/io/CharStreams.java b/src/com/google/common/io/CharStreams.java new file mode 100644 index 0000000..1877ffa --- /dev/null +++ b/src/com/google/common/io/CharStreams.java @@ -0,0 +1,183 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.io; + +import com.google.common.annotations.Beta; +import com.google.common.base.Preconditions; +import com.google.common.io.AppendableWriter; +import com.google.common.io.LineProcessor; +import com.google.common.io.LineReader; +import java.io.Closeable; +import java.io.EOFException; +import java.io.IOException; +import java.io.Reader; +import java.io.Writer; +import java.nio.CharBuffer; +import java.util.ArrayList; +import java.util.List; + +@Beta +public final class CharStreams { + private static final int BUF_SIZE = 2048; + + private CharStreams() { + } + + public static long copy(Readable from, Appendable to) throws IOException { + Preconditions.checkNotNull(from); + Preconditions.checkNotNull(to); + CharBuffer buf = CharBuffer.allocate(2048); + long total = 0L; + while (from.read(buf) != -1) { + buf.flip(); + to.append(buf); + total += (long)buf.remaining(); + buf.clear(); + } + return total; + } + + public static String toString(Readable r) throws IOException { + return CharStreams.toStringBuilder(r).toString(); + } + + private static StringBuilder toStringBuilder(Readable r) throws IOException { + StringBuilder sb = new StringBuilder(); + CharStreams.copy(r, sb); + return sb; + } + + public static List readLines(Readable r) throws IOException { + String line; + ArrayList result = new ArrayList(); + LineReader lineReader = new LineReader(r); + while ((line = lineReader.readLine()) != null) { + result.add(line); + } + return result; + } + + public static T readLines(Readable readable, LineProcessor processor) throws IOException { + String line; + Preconditions.checkNotNull(readable); + Preconditions.checkNotNull(processor); + LineReader lineReader = new LineReader(readable); + while ((line = lineReader.readLine()) != null && processor.processLine(line)) { + } + return processor.getResult(); + } + + public static void skipFully(Reader reader, long n) throws IOException { + Preconditions.checkNotNull(reader); + while (n > 0L) { + long amt = reader.skip(n); + if (amt == 0L) { + if (reader.read() == -1) { + throw new EOFException(); + } + --n; + continue; + } + n -= amt; + } + } + + public static Writer nullWriter() { + return NullWriter.INSTANCE; + } + + public static Writer asWriter(Appendable target) { + if (target instanceof Writer) { + return (Writer)target; + } + return new AppendableWriter(target); + } + + static Reader asReader(final Readable readable) { + Preconditions.checkNotNull(readable); + if (readable instanceof Reader) { + return (Reader)readable; + } + return new Reader(){ + + @Override + public int read(char[] cbuf, int off, int len) throws IOException { + return this.read(CharBuffer.wrap(cbuf, off, len)); + } + + @Override + public int read(CharBuffer target) throws IOException { + return readable.read(target); + } + + @Override + public void close() throws IOException { + if (readable instanceof Closeable) { + ((Closeable)((Object)readable)).close(); + } + } + }; + } + + private static final class NullWriter + extends Writer { + private static final NullWriter INSTANCE = new NullWriter(); + + private NullWriter() { + } + + @Override + public void write(int c) { + } + + @Override + public void write(char[] cbuf) { + Preconditions.checkNotNull(cbuf); + } + + @Override + public void write(char[] cbuf, int off, int len) { + Preconditions.checkPositionIndexes(off, off + len, cbuf.length); + } + + @Override + public void write(String str) { + Preconditions.checkNotNull(str); + } + + @Override + public void write(String str, int off, int len) { + Preconditions.checkPositionIndexes(off, off + len, str.length()); + } + + @Override + public Writer append(CharSequence csq) { + Preconditions.checkNotNull(csq); + return this; + } + + @Override + public Writer append(CharSequence csq, int start, int end) { + Preconditions.checkPositionIndexes(start, end, csq.length()); + return this; + } + + @Override + public Writer append(char c) { + return this; + } + + @Override + public void flush() { + } + + @Override + public void close() { + } + + public String toString() { + return "CharStreams.nullWriter()"; + } + } +} diff --git a/src/com/google/common/io/Closeables.java b/src/com/google/common/io/Closeables.java new file mode 100644 index 0000000..b9f863a --- /dev/null +++ b/src/com/google/common/io/Closeables.java @@ -0,0 +1,56 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.io; + +import com.google.common.annotations.Beta; +import com.google.common.annotations.VisibleForTesting; +import java.io.Closeable; +import java.io.IOException; +import java.io.InputStream; +import java.io.Reader; +import java.util.logging.Level; +import java.util.logging.Logger; +import javax.annotation.Nullable; + +@Beta +public final class Closeables { + @VisibleForTesting + static final Logger logger = Logger.getLogger(Closeables.class.getName()); + + private Closeables() { + } + + public static void close(@Nullable Closeable closeable, boolean swallowIOException) throws IOException { + if (closeable == null) { + return; + } + try { + closeable.close(); + } + catch (IOException e) { + if (swallowIOException) { + logger.log(Level.WARNING, "IOException thrown while closing Closeable.", e); + } + throw e; + } + } + + public static void closeQuietly(@Nullable InputStream inputStream) { + try { + Closeables.close(inputStream, true); + } + catch (IOException impossible) { + throw new AssertionError((Object)impossible); + } + } + + public static void closeQuietly(@Nullable Reader reader) { + try { + Closeables.close(reader, true); + } + catch (IOException impossible) { + throw new AssertionError((Object)impossible); + } + } +} diff --git a/src/com/google/common/io/Closer.java b/src/com/google/common/io/Closer.java new file mode 100644 index 0000000..834fc6d --- /dev/null +++ b/src/com/google/common/io/Closer.java @@ -0,0 +1,144 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.io; + +import com.google.common.annotations.Beta; +import com.google.common.annotations.VisibleForTesting; +import com.google.common.base.Preconditions; +import com.google.common.base.Throwables; +import com.google.common.io.Closeables; +import java.io.Closeable; +import java.io.IOException; +import java.lang.reflect.Method; +import java.util.ArrayDeque; +import java.util.Deque; +import java.util.logging.Level; +import javax.annotation.Nullable; + +@Beta +public final class Closer +implements Closeable { + private static final Suppressor SUPPRESSOR = SuppressingSuppressor.isAvailable() ? SuppressingSuppressor.INSTANCE : LoggingSuppressor.INSTANCE; + @VisibleForTesting + final Suppressor suppressor; + private final Deque stack = new ArrayDeque(4); + private Throwable thrown; + + public static Closer create() { + return new Closer(SUPPRESSOR); + } + + @VisibleForTesting + Closer(Suppressor suppressor) { + this.suppressor = Preconditions.checkNotNull(suppressor); + } + + public C register(@Nullable C closeable) { + if (closeable != null) { + this.stack.addFirst(closeable); + } + return closeable; + } + + public RuntimeException rethrow(Throwable e) throws IOException { + Preconditions.checkNotNull(e); + this.thrown = e; + Throwables.propagateIfPossible(e, IOException.class); + throw new RuntimeException(e); + } + + public RuntimeException rethrow(Throwable e, Class declaredType) throws IOException, X { + Preconditions.checkNotNull(e); + this.thrown = e; + Throwables.propagateIfPossible(e, IOException.class); + Throwables.propagateIfPossible(e, declaredType); + throw new RuntimeException(e); + } + + public RuntimeException rethrow(Throwable e, Class declaredType1, Class declaredType2) throws IOException, X1, X2 { + Preconditions.checkNotNull(e); + this.thrown = e; + Throwables.propagateIfPossible(e, IOException.class); + Throwables.propagateIfPossible(e, declaredType1, declaredType2); + throw new RuntimeException(e); + } + + @Override + public void close() throws IOException { + Throwable throwable = this.thrown; + while (!this.stack.isEmpty()) { + Closeable closeable = this.stack.removeFirst(); + try { + closeable.close(); + } + catch (Throwable e) { + if (throwable == null) { + throwable = e; + continue; + } + this.suppressor.suppress(closeable, throwable, e); + } + } + if (this.thrown == null && throwable != null) { + Throwables.propagateIfPossible(throwable, IOException.class); + throw new AssertionError((Object)throwable); + } + } + + @VisibleForTesting + static final class SuppressingSuppressor + implements Suppressor { + static final SuppressingSuppressor INSTANCE = new SuppressingSuppressor(); + static final Method addSuppressed = SuppressingSuppressor.getAddSuppressed(); + + SuppressingSuppressor() { + } + + static boolean isAvailable() { + return addSuppressed != null; + } + + private static Method getAddSuppressed() { + try { + return Throwable.class.getMethod("addSuppressed", Throwable.class); + } + catch (Throwable e) { + return null; + } + } + + @Override + public void suppress(Closeable closeable, Throwable thrown, Throwable suppressed) { + if (thrown == suppressed) { + return; + } + try { + addSuppressed.invoke(thrown, suppressed); + } + catch (Throwable e) { + LoggingSuppressor.INSTANCE.suppress(closeable, thrown, suppressed); + } + } + } + + @VisibleForTesting + static final class LoggingSuppressor + implements Suppressor { + static final LoggingSuppressor INSTANCE = new LoggingSuppressor(); + + LoggingSuppressor() { + } + + @Override + public void suppress(Closeable closeable, Throwable thrown, Throwable suppressed) { + String string = String.valueOf(String.valueOf(closeable)); + Closeables.logger.log(Level.WARNING, new StringBuilder(42 + string.length()).append("Suppressing exception thrown when closing ").append(string).toString(), suppressed); + } + } + + @VisibleForTesting + static interface Suppressor { + public void suppress(Closeable var1, Throwable var2, Throwable var3); + } +} diff --git a/src/com/google/common/io/CountingInputStream.java b/src/com/google/common/io/CountingInputStream.java new file mode 100644 index 0000000..9326c37 --- /dev/null +++ b/src/com/google/common/io/CountingInputStream.java @@ -0,0 +1,68 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.io; + +import com.google.common.annotations.Beta; +import java.io.FilterInputStream; +import java.io.IOException; +import java.io.InputStream; +import javax.annotation.Nullable; + +@Beta +public final class CountingInputStream +extends FilterInputStream { + private long count; + private long mark = -1L; + + public CountingInputStream(@Nullable InputStream in) { + super(in); + } + + public long getCount() { + return this.count; + } + + @Override + public int read() throws IOException { + int result = this.in.read(); + if (result != -1) { + ++this.count; + } + return result; + } + + @Override + public int read(byte[] b, int off, int len) throws IOException { + int result = this.in.read(b, off, len); + if (result != -1) { + this.count += (long)result; + } + return result; + } + + @Override + public long skip(long n) throws IOException { + long result = this.in.skip(n); + this.count += result; + return result; + } + + @Override + public synchronized void mark(int readlimit) { + this.in.mark(readlimit); + this.mark = this.count; + } + + @Override + public synchronized void reset() throws IOException { + if (!this.in.markSupported()) { + throw new IOException("Mark not supported"); + } + if (this.mark == -1L) { + throw new IOException("Mark not set"); + } + this.in.reset(); + this.count = this.mark; + } +} diff --git a/src/com/google/common/io/CountingOutputStream.java b/src/com/google/common/io/CountingOutputStream.java new file mode 100644 index 0000000..4e4d3da --- /dev/null +++ b/src/com/google/common/io/CountingOutputStream.java @@ -0,0 +1,41 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.io; + +import com.google.common.annotations.Beta; +import java.io.FilterOutputStream; +import java.io.IOException; +import java.io.OutputStream; +import javax.annotation.Nullable; + +@Beta +public final class CountingOutputStream +extends FilterOutputStream { + private long count; + + public CountingOutputStream(@Nullable OutputStream out) { + super(out); + } + + public long getCount() { + return this.count; + } + + @Override + public void write(byte[] b, int off, int len) throws IOException { + this.out.write(b, off, len); + this.count += (long)len; + } + + @Override + public void write(int b) throws IOException { + this.out.write(b); + ++this.count; + } + + @Override + public void close() throws IOException { + this.out.close(); + } +} diff --git a/src/com/google/common/io/FileBackedOutputStream.java b/src/com/google/common/io/FileBackedOutputStream.java new file mode 100644 index 0000000..1b51a26 --- /dev/null +++ b/src/com/google/common/io/FileBackedOutputStream.java @@ -0,0 +1,157 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.io; + +import com.google.common.annotations.Beta; +import com.google.common.annotations.VisibleForTesting; +import com.google.common.io.ByteSource; +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; + +@Beta +public final class FileBackedOutputStream +extends OutputStream { + private final int fileThreshold; + private final boolean resetOnFinalize; + private final ByteSource source; + private OutputStream out; + private MemoryOutput memory; + private File file; + + @VisibleForTesting + synchronized File getFile() { + return this.file; + } + + public FileBackedOutputStream(int fileThreshold) { + this(fileThreshold, false); + } + + public FileBackedOutputStream(int fileThreshold, boolean resetOnFinalize) { + this.fileThreshold = fileThreshold; + this.resetOnFinalize = resetOnFinalize; + this.memory = new MemoryOutput(); + this.out = this.memory; + this.source = resetOnFinalize ? new ByteSource(){ + + @Override + public InputStream openStream() throws IOException { + return FileBackedOutputStream.this.openInputStream(); + } + + protected void finalize() { + try { + FileBackedOutputStream.this.reset(); + } + catch (Throwable t) { + t.printStackTrace(System.err); + } + } + } : new ByteSource(){ + + @Override + public InputStream openStream() throws IOException { + return FileBackedOutputStream.this.openInputStream(); + } + }; + } + + public ByteSource asByteSource() { + return this.source; + } + + private synchronized InputStream openInputStream() throws IOException { + if (this.file != null) { + return new FileInputStream(this.file); + } + return new ByteArrayInputStream(this.memory.getBuffer(), 0, this.memory.getCount()); + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + public synchronized void reset() throws IOException { + try { + this.close(); + } + finally { + if (this.memory == null) { + this.memory = new MemoryOutput(); + } else { + this.memory.reset(); + } + this.out = this.memory; + if (this.file != null) { + File deleteMe = this.file; + this.file = null; + if (!deleteMe.delete()) { + String string = String.valueOf(String.valueOf(deleteMe)); + throw new IOException(new StringBuilder(18 + string.length()).append("Could not delete: ").append(string).toString()); + } + } + } + } + + @Override + public synchronized void write(int b) throws IOException { + this.update(1); + this.out.write(b); + } + + @Override + public synchronized void write(byte[] b) throws IOException { + this.write(b, 0, b.length); + } + + @Override + public synchronized void write(byte[] b, int off, int len) throws IOException { + this.update(len); + this.out.write(b, off, len); + } + + @Override + public synchronized void close() throws IOException { + this.out.close(); + } + + @Override + public synchronized void flush() throws IOException { + this.out.flush(); + } + + private void update(int len) throws IOException { + if (this.file == null && this.memory.getCount() + len > this.fileThreshold) { + File temp = File.createTempFile("FileBackedOutputStream", null); + if (this.resetOnFinalize) { + temp.deleteOnExit(); + } + FileOutputStream transfer = new FileOutputStream(temp); + transfer.write(this.memory.getBuffer(), 0, this.memory.getCount()); + transfer.flush(); + this.out = transfer; + this.file = temp; + this.memory = null; + } + } + + private static class MemoryOutput + extends ByteArrayOutputStream { + private MemoryOutput() { + } + + byte[] getBuffer() { + return this.buf; + } + + int getCount() { + return this.count; + } + } +} diff --git a/src/com/google/common/io/FileWriteMode.java b/src/com/google/common/io/FileWriteMode.java new file mode 100644 index 0000000..92f39e2 --- /dev/null +++ b/src/com/google/common/io/FileWriteMode.java @@ -0,0 +1,9 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.io; + +public enum FileWriteMode { + APPEND; + +} diff --git a/src/com/google/common/io/Files.java b/src/com/google/common/io/Files.java new file mode 100644 index 0000000..39d6748 --- /dev/null +++ b/src/com/google/common/io/Files.java @@ -0,0 +1,457 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.io; + +import com.google.common.annotations.Beta; +import com.google.common.base.Joiner; +import com.google.common.base.Preconditions; +import com.google.common.base.Predicate; +import com.google.common.base.Splitter; +import com.google.common.collect.ImmutableSet; +import com.google.common.collect.Lists; +import com.google.common.collect.TreeTraverser; +import com.google.common.hash.HashCode; +import com.google.common.hash.HashFunction; +import com.google.common.io.ByteProcessor; +import com.google.common.io.ByteSink; +import com.google.common.io.ByteSource; +import com.google.common.io.ByteStreams; +import com.google.common.io.CharSink; +import com.google.common.io.CharSource; +import com.google.common.io.Closer; +import com.google.common.io.FileWriteMode; +import com.google.common.io.LineProcessor; +import java.io.BufferedReader; +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.OutputStream; +import java.io.OutputStreamWriter; +import java.io.RandomAccessFile; +import java.nio.MappedByteBuffer; +import java.nio.channels.FileChannel; +import java.nio.charset.Charset; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; + +@Beta +public final class Files { + private static final int TEMP_DIR_ATTEMPTS = 10000; + private static final TreeTraverser FILE_TREE_TRAVERSER = new TreeTraverser(){ + + @Override + public Iterable children(File file) { + File[] files; + if (file.isDirectory() && (files = file.listFiles()) != null) { + return Collections.unmodifiableList(Arrays.asList(files)); + } + return Collections.emptyList(); + } + + public String toString() { + return "Files.fileTreeTraverser()"; + } + }; + + private Files() { + } + + public static BufferedReader newReader(File file, Charset charset) throws FileNotFoundException { + Preconditions.checkNotNull(file); + Preconditions.checkNotNull(charset); + return new BufferedReader(new InputStreamReader((InputStream)new FileInputStream(file), charset)); + } + + public static BufferedWriter newWriter(File file, Charset charset) throws FileNotFoundException { + Preconditions.checkNotNull(file); + Preconditions.checkNotNull(charset); + return new BufferedWriter(new OutputStreamWriter((OutputStream)new FileOutputStream(file), charset)); + } + + public static ByteSource asByteSource(File file) { + return new FileByteSource(file); + } + + static byte[] readFile(InputStream in, long expectedSize) throws IOException { + if (expectedSize > Integer.MAX_VALUE) { + long l = expectedSize; + throw new OutOfMemoryError(new StringBuilder(68).append("file is too large to fit in a byte array: ").append(l).append(" bytes").toString()); + } + return expectedSize == 0L ? ByteStreams.toByteArray(in) : ByteStreams.toByteArray(in, (int)expectedSize); + } + + public static ByteSink asByteSink(File file, FileWriteMode ... modes) { + return new FileByteSink(file, modes); + } + + public static CharSource asCharSource(File file, Charset charset) { + return Files.asByteSource(file).asCharSource(charset); + } + + public static CharSink asCharSink(File file, Charset charset, FileWriteMode ... modes) { + return Files.asByteSink(file, modes).asCharSink(charset); + } + + private static FileWriteMode[] modes(boolean append) { + FileWriteMode[] fileWriteModeArray; + if (append) { + FileWriteMode[] fileWriteModeArray2 = new FileWriteMode[1]; + fileWriteModeArray = fileWriteModeArray2; + fileWriteModeArray2[0] = FileWriteMode.APPEND; + } else { + fileWriteModeArray = new FileWriteMode[]{}; + } + return fileWriteModeArray; + } + + public static byte[] toByteArray(File file) throws IOException { + return Files.asByteSource(file).read(); + } + + public static String toString(File file, Charset charset) throws IOException { + return Files.asCharSource(file, charset).read(); + } + + public static void write(byte[] from, File to) throws IOException { + Files.asByteSink(to, new FileWriteMode[0]).write(from); + } + + public static void copy(File from, OutputStream to) throws IOException { + Files.asByteSource(from).copyTo(to); + } + + public static void copy(File from, File to) throws IOException { + Preconditions.checkArgument(!from.equals(to), "Source %s and destination %s must be different", from, to); + Files.asByteSource(from).copyTo(Files.asByteSink(to, new FileWriteMode[0])); + } + + public static void write(CharSequence from, File to, Charset charset) throws IOException { + Files.asCharSink(to, charset, new FileWriteMode[0]).write(from); + } + + public static void append(CharSequence from, File to, Charset charset) throws IOException { + Files.write(from, to, charset, true); + } + + private static void write(CharSequence from, File to, Charset charset, boolean append) throws IOException { + Files.asCharSink(to, charset, Files.modes(append)).write(from); + } + + public static void copy(File from, Charset charset, Appendable to) throws IOException { + Files.asCharSource(from, charset).copyTo(to); + } + + public static boolean equal(File file1, File file2) throws IOException { + Preconditions.checkNotNull(file1); + Preconditions.checkNotNull(file2); + if (file1 == file2 || file1.equals(file2)) { + return true; + } + long len1 = file1.length(); + long len2 = file2.length(); + if (len1 != 0L && len2 != 0L && len1 != len2) { + return false; + } + return Files.asByteSource(file1).contentEquals(Files.asByteSource(file2)); + } + + public static File createTempDir() { + int n; + String string; + File baseDir = new File(System.getProperty("java.io.tmpdir")); + long l = System.currentTimeMillis(); + String baseName = new StringBuilder(21).append(l).append("-").toString(); + int counter = 0; + while (counter < 10000) { + string = String.valueOf(String.valueOf(baseName)); + n = counter++; + File tempDir = new File(baseDir, new StringBuilder(11 + string.length()).append(string).append(n).toString()); + if (!tempDir.mkdir()) continue; + return tempDir; + } + String string2 = String.valueOf(String.valueOf("Failed to create directory within 10000 attempts (tried ")); + String string3 = String.valueOf(String.valueOf(baseName)); + string = String.valueOf(String.valueOf(baseName)); + n = 9999; + throw new IllegalStateException(new StringBuilder(17 + string2.length() + string3.length() + string.length()).append(string2).append(string3).append("0 to ").append(string).append(n).append(")").toString()); + } + + public static void touch(File file) throws IOException { + Preconditions.checkNotNull(file); + if (!file.createNewFile() && !file.setLastModified(System.currentTimeMillis())) { + String string = String.valueOf(String.valueOf(file)); + throw new IOException(new StringBuilder(38 + string.length()).append("Unable to update modification time of ").append(string).toString()); + } + } + + public static void createParentDirs(File file) throws IOException { + Preconditions.checkNotNull(file); + File parent = file.getCanonicalFile().getParentFile(); + if (parent == null) { + return; + } + parent.mkdirs(); + if (!parent.isDirectory()) { + String string = String.valueOf(String.valueOf(file)); + throw new IOException(new StringBuilder(39 + string.length()).append("Unable to create parent directories of ").append(string).toString()); + } + } + + public static void move(File from, File to) throws IOException { + Preconditions.checkNotNull(from); + Preconditions.checkNotNull(to); + Preconditions.checkArgument(!from.equals(to), "Source %s and destination %s must be different", from, to); + if (!from.renameTo(to)) { + Files.copy(from, to); + if (!from.delete()) { + if (!to.delete()) { + String string = String.valueOf(String.valueOf(to)); + throw new IOException(new StringBuilder(17 + string.length()).append("Unable to delete ").append(string).toString()); + } + String string = String.valueOf(String.valueOf(from)); + throw new IOException(new StringBuilder(17 + string.length()).append("Unable to delete ").append(string).toString()); + } + } + } + + public static String readFirstLine(File file, Charset charset) throws IOException { + return Files.asCharSource(file, charset).readFirstLine(); + } + + public static List readLines(File file, Charset charset) throws IOException { + return Files.readLines(file, charset, new LineProcessor>(){ + final List result = Lists.newArrayList(); + + @Override + public boolean processLine(String line) { + this.result.add(line); + return true; + } + + @Override + public List getResult() { + return this.result; + } + }); + } + + public static T readLines(File file, Charset charset, LineProcessor callback) throws IOException { + return Files.asCharSource(file, charset).readLines(callback); + } + + public static T readBytes(File file, ByteProcessor processor) throws IOException { + return Files.asByteSource(file).read(processor); + } + + public static HashCode hash(File file, HashFunction hashFunction) throws IOException { + return Files.asByteSource(file).hash(hashFunction); + } + + public static MappedByteBuffer map(File file) throws IOException { + Preconditions.checkNotNull(file); + return Files.map(file, FileChannel.MapMode.READ_ONLY); + } + + public static MappedByteBuffer map(File file, FileChannel.MapMode mode) throws IOException { + Preconditions.checkNotNull(file); + Preconditions.checkNotNull(mode); + if (!file.exists()) { + throw new FileNotFoundException(file.toString()); + } + return Files.map(file, mode, file.length()); + } + + public static MappedByteBuffer map(File file, FileChannel.MapMode mode, long size) throws FileNotFoundException, IOException { + Preconditions.checkNotNull(file); + Preconditions.checkNotNull(mode); + Closer closer = Closer.create(); + try { + RandomAccessFile raf = closer.register(new RandomAccessFile(file, mode == FileChannel.MapMode.READ_ONLY ? "r" : "rw")); + MappedByteBuffer mappedByteBuffer = Files.map(raf, mode, size); + return mappedByteBuffer; + } + catch (Throwable e) { + throw closer.rethrow(e); + } + finally { + closer.close(); + } + } + + private static MappedByteBuffer map(RandomAccessFile raf, FileChannel.MapMode mode, long size) throws IOException { + Closer closer = Closer.create(); + try { + FileChannel channel = closer.register(raf.getChannel()); + MappedByteBuffer mappedByteBuffer = channel.map(mode, 0L, size); + return mappedByteBuffer; + } + catch (Throwable e) { + throw closer.rethrow(e); + } + finally { + closer.close(); + } + } + + public static String simplifyPath(String pathname) { + Preconditions.checkNotNull(pathname); + if (pathname.length() == 0) { + return "."; + } + Iterable components = Splitter.on('/').omitEmptyStrings().split(pathname); + ArrayList path = new ArrayList(); + for (String component : components) { + if (component.equals(".")) continue; + if (component.equals("..")) { + if (path.size() > 0 && !((String)path.get(path.size() - 1)).equals("..")) { + path.remove(path.size() - 1); + continue; + } + path.add(".."); + continue; + } + path.add(component); + } + String result = Joiner.on('/').join(path); + if (pathname.charAt(0) == '/') { + String string = String.valueOf(result); + String string2 = result = string.length() != 0 ? "/".concat(string) : new String("/"); + } + while (result.startsWith("/../")) { + result = result.substring(3); + } + if (result.equals("/..")) { + result = "/"; + } else if ("".equals(result)) { + result = "."; + } + return result; + } + + public static String getFileExtension(String fullName) { + Preconditions.checkNotNull(fullName); + String fileName = new File(fullName).getName(); + int dotIndex = fileName.lastIndexOf(46); + return dotIndex == -1 ? "" : fileName.substring(dotIndex + 1); + } + + public static String getNameWithoutExtension(String file) { + Preconditions.checkNotNull(file); + String fileName = new File(file).getName(); + int dotIndex = fileName.lastIndexOf(46); + return dotIndex == -1 ? fileName : fileName.substring(0, dotIndex); + } + + public static TreeTraverser fileTreeTraverser() { + return FILE_TREE_TRAVERSER; + } + + public static Predicate isDirectory() { + return FilePredicate.IS_DIRECTORY; + } + + public static Predicate isFile() { + return FilePredicate.IS_FILE; + } + + private static enum FilePredicate implements Predicate + { + IS_DIRECTORY{ + + @Override + public boolean apply(File file) { + return file.isDirectory(); + } + + public String toString() { + return "Files.isDirectory()"; + } + } + , + IS_FILE{ + + @Override + public boolean apply(File file) { + return file.isFile(); + } + + public String toString() { + return "Files.isFile()"; + } + }; + + } + + private static final class FileByteSink + extends ByteSink { + private final File file; + private final ImmutableSet modes; + + private FileByteSink(File file, FileWriteMode ... modes) { + this.file = Preconditions.checkNotNull(file); + this.modes = ImmutableSet.copyOf(modes); + } + + @Override + public FileOutputStream openStream() throws IOException { + return new FileOutputStream(this.file, this.modes.contains((Object)FileWriteMode.APPEND)); + } + + public String toString() { + String string = String.valueOf(String.valueOf(this.file)); + String string2 = String.valueOf(String.valueOf(this.modes)); + return new StringBuilder(20 + string.length() + string2.length()).append("Files.asByteSink(").append(string).append(", ").append(string2).append(")").toString(); + } + } + + private static final class FileByteSource + extends ByteSource { + private final File file; + + private FileByteSource(File file) { + this.file = Preconditions.checkNotNull(file); + } + + @Override + public FileInputStream openStream() throws IOException { + return new FileInputStream(this.file); + } + + @Override + public long size() throws IOException { + if (!this.file.isFile()) { + throw new FileNotFoundException(this.file.toString()); + } + return this.file.length(); + } + + @Override + public byte[] read() throws IOException { + Closer closer = Closer.create(); + try { + FileInputStream in = closer.register(this.openStream()); + byte[] byArray = Files.readFile(in, in.getChannel().size()); + return byArray; + } + catch (Throwable e) { + throw closer.rethrow(e); + } + finally { + closer.close(); + } + } + + public String toString() { + String string = String.valueOf(String.valueOf(this.file)); + return new StringBuilder(20 + string.length()).append("Files.asByteSource(").append(string).append(")").toString(); + } + } +} diff --git a/src/com/google/common/io/Flushables.java b/src/com/google/common/io/Flushables.java new file mode 100644 index 0000000..fc322cb --- /dev/null +++ b/src/com/google/common/io/Flushables.java @@ -0,0 +1,39 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.io; + +import com.google.common.annotations.Beta; +import java.io.Flushable; +import java.io.IOException; +import java.util.logging.Level; +import java.util.logging.Logger; + +@Beta +public final class Flushables { + private static final Logger logger = Logger.getLogger(Flushables.class.getName()); + + private Flushables() { + } + + public static void flush(Flushable flushable, boolean swallowIOException) throws IOException { + try { + flushable.flush(); + } + catch (IOException e) { + if (swallowIOException) { + logger.log(Level.WARNING, "IOException thrown while flushing Flushable.", e); + } + throw e; + } + } + + public static void flushQuietly(Flushable flushable) { + try { + Flushables.flush(flushable, true); + } + catch (IOException e) { + logger.log(Level.SEVERE, "IOException should not have been thrown.", e); + } + } +} diff --git a/src/com/google/common/io/GwtWorkarounds.java b/src/com/google/common/io/GwtWorkarounds.java new file mode 100644 index 0000000..39580f5 --- /dev/null +++ b/src/com/google/common/io/GwtWorkarounds.java @@ -0,0 +1,190 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.io; + +import com.google.common.annotations.GwtCompatible; +import com.google.common.annotations.GwtIncompatible; +import com.google.common.base.Preconditions; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.io.Reader; +import java.io.Writer; + +@GwtCompatible(emulated=true) +final class GwtWorkarounds { + private GwtWorkarounds() { + } + + @GwtIncompatible(value="Reader") + static CharInput asCharInput(final Reader reader) { + Preconditions.checkNotNull(reader); + return new CharInput(){ + + @Override + public int read() throws IOException { + return reader.read(); + } + + @Override + public void close() throws IOException { + reader.close(); + } + }; + } + + static CharInput asCharInput(final CharSequence chars) { + Preconditions.checkNotNull(chars); + return new CharInput(){ + int index = 0; + + @Override + public int read() { + if (this.index < chars.length()) { + return chars.charAt(this.index++); + } + return -1; + } + + @Override + public void close() { + this.index = chars.length(); + } + }; + } + + @GwtIncompatible(value="InputStream") + static InputStream asInputStream(final ByteInput input) { + Preconditions.checkNotNull(input); + return new InputStream(){ + + @Override + public int read() throws IOException { + return input.read(); + } + + @Override + public int read(byte[] b, int off, int len) throws IOException { + Preconditions.checkNotNull(b); + Preconditions.checkPositionIndexes(off, off + len, b.length); + if (len == 0) { + return 0; + } + int firstByte = this.read(); + if (firstByte == -1) { + return -1; + } + b[off] = (byte)firstByte; + for (int dst = 1; dst < len; ++dst) { + int readByte = this.read(); + if (readByte == -1) { + return dst; + } + b[off + dst] = (byte)readByte; + } + return len; + } + + @Override + public void close() throws IOException { + input.close(); + } + }; + } + + @GwtIncompatible(value="OutputStream") + static OutputStream asOutputStream(final ByteOutput output) { + Preconditions.checkNotNull(output); + return new OutputStream(){ + + @Override + public void write(int b) throws IOException { + output.write((byte)b); + } + + @Override + public void flush() throws IOException { + output.flush(); + } + + @Override + public void close() throws IOException { + output.close(); + } + }; + } + + @GwtIncompatible(value="Writer") + static CharOutput asCharOutput(final Writer writer) { + Preconditions.checkNotNull(writer); + return new CharOutput(){ + + @Override + public void write(char c) throws IOException { + writer.append(c); + } + + @Override + public void flush() throws IOException { + writer.flush(); + } + + @Override + public void close() throws IOException { + writer.close(); + } + }; + } + + static CharOutput stringBuilderOutput(int initialSize) { + final StringBuilder builder = new StringBuilder(initialSize); + return new CharOutput(){ + + @Override + public void write(char c) { + builder.append(c); + } + + @Override + public void flush() { + } + + @Override + public void close() { + } + + public String toString() { + return builder.toString(); + } + }; + } + + static interface CharOutput { + public void write(char var1) throws IOException; + + public void flush() throws IOException; + + public void close() throws IOException; + } + + static interface ByteOutput { + public void write(byte var1) throws IOException; + + public void flush() throws IOException; + + public void close() throws IOException; + } + + static interface ByteInput { + public int read() throws IOException; + + public void close() throws IOException; + } + + static interface CharInput { + public int read() throws IOException; + + public void close() throws IOException; + } +} diff --git a/src/com/google/common/io/InputSupplier.java b/src/com/google/common/io/InputSupplier.java new file mode 100644 index 0000000..d359b68 --- /dev/null +++ b/src/com/google/common/io/InputSupplier.java @@ -0,0 +1,11 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.io; + +import java.io.IOException; + +@Deprecated +public interface InputSupplier { + public T getInput() throws IOException; +} diff --git a/src/com/google/common/io/LineBuffer.java b/src/com/google/common/io/LineBuffer.java new file mode 100644 index 0000000..b205bca --- /dev/null +++ b/src/com/google/common/io/LineBuffer.java @@ -0,0 +1,59 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.io; + +import java.io.IOException; + +abstract class LineBuffer { + private StringBuilder line = new StringBuilder(); + private boolean sawReturn; + + LineBuffer() { + } + + protected void add(char[] cbuf, int off, int len) throws IOException { + int pos = off; + if (this.sawReturn && len > 0 && this.finishLine(cbuf[pos] == '\n')) { + ++pos; + } + int start = pos; + int end = off + len; + while (pos < end) { + switch (cbuf[pos]) { + case '\r': { + this.line.append(cbuf, start, pos - start); + this.sawReturn = true; + if (pos + 1 < end && this.finishLine(cbuf[pos + 1] == '\n')) { + ++pos; + } + start = pos + 1; + break; + } + case '\n': { + this.line.append(cbuf, start, pos - start); + this.finishLine(true); + start = pos + 1; + break; + } + } + ++pos; + } + this.line.append(cbuf, start, off + len - start); + } + + private boolean finishLine(boolean sawNewline) throws IOException { + this.handleLine(this.line.toString(), this.sawReturn ? (sawNewline ? "\r\n" : "\r") : (sawNewline ? "\n" : "")); + this.line = new StringBuilder(); + this.sawReturn = false; + return sawNewline; + } + + protected void finish() throws IOException { + if (this.sawReturn || this.line.length() > 0) { + this.finishLine(false); + } + } + + protected abstract void handleLine(String var1, String var2) throws IOException; +} diff --git a/src/com/google/common/io/LineProcessor.java b/src/com/google/common/io/LineProcessor.java new file mode 100644 index 0000000..add9ba7 --- /dev/null +++ b/src/com/google/common/io/LineProcessor.java @@ -0,0 +1,14 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.io; + +import com.google.common.annotations.Beta; +import java.io.IOException; + +@Beta +public interface LineProcessor { + public boolean processLine(String var1) throws IOException; + + public T getResult(); +} diff --git a/src/com/google/common/io/LineReader.java b/src/com/google/common/io/LineReader.java new file mode 100644 index 0000000..91a09d0 --- /dev/null +++ b/src/com/google/common/io/LineReader.java @@ -0,0 +1,48 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.io; + +import com.google.common.annotations.Beta; +import com.google.common.base.Preconditions; +import com.google.common.io.LineBuffer; +import java.io.IOException; +import java.io.Reader; +import java.nio.CharBuffer; +import java.util.LinkedList; +import java.util.Queue; + +@Beta +public final class LineReader { + private final Readable readable; + private final Reader reader; + private final char[] buf = new char[4096]; + private final CharBuffer cbuf = CharBuffer.wrap(this.buf); + private final Queue lines = new LinkedList(); + private final LineBuffer lineBuf = new LineBuffer(){ + + @Override + protected void handleLine(String line, String end) { + LineReader.this.lines.add(line); + } + }; + + public LineReader(Readable readable) { + this.readable = Preconditions.checkNotNull(readable); + this.reader = readable instanceof Reader ? (Reader)readable : null; + } + + public String readLine() throws IOException { + while (this.lines.peek() == null) { + int read; + this.cbuf.clear(); + int n = read = this.reader != null ? this.reader.read(this.buf, 0, this.buf.length) : this.readable.read(this.cbuf); + if (read == -1) { + this.lineBuf.finish(); + break; + } + this.lineBuf.add(this.buf, 0, read); + } + return this.lines.poll(); + } +} diff --git a/src/com/google/common/io/LittleEndianDataInputStream.java b/src/com/google/common/io/LittleEndianDataInputStream.java new file mode 100644 index 0000000..75dca09 --- /dev/null +++ b/src/com/google/common/io/LittleEndianDataInputStream.java @@ -0,0 +1,126 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.io; + +import com.google.common.annotations.Beta; +import com.google.common.base.Preconditions; +import com.google.common.io.ByteStreams; +import com.google.common.primitives.Ints; +import com.google.common.primitives.Longs; +import java.io.DataInput; +import java.io.DataInputStream; +import java.io.EOFException; +import java.io.FilterInputStream; +import java.io.IOException; +import java.io.InputStream; + +@Beta +public final class LittleEndianDataInputStream +extends FilterInputStream +implements DataInput { + public LittleEndianDataInputStream(InputStream in) { + super(Preconditions.checkNotNull(in)); + } + + @Override + public String readLine() { + throw new UnsupportedOperationException("readLine is not supported"); + } + + @Override + public void readFully(byte[] b) throws IOException { + ByteStreams.readFully(this, b); + } + + @Override + public void readFully(byte[] b, int off, int len) throws IOException { + ByteStreams.readFully(this, b, off, len); + } + + @Override + public int skipBytes(int n) throws IOException { + return (int)this.in.skip(n); + } + + @Override + public int readUnsignedByte() throws IOException { + int b1 = this.in.read(); + if (0 > b1) { + throw new EOFException(); + } + return b1; + } + + @Override + public int readUnsignedShort() throws IOException { + byte b1 = this.readAndCheckByte(); + byte b2 = this.readAndCheckByte(); + return Ints.fromBytes((byte)0, (byte)0, b2, b1); + } + + @Override + public int readInt() throws IOException { + byte b1 = this.readAndCheckByte(); + byte b2 = this.readAndCheckByte(); + byte b3 = this.readAndCheckByte(); + byte b4 = this.readAndCheckByte(); + return Ints.fromBytes(b4, b3, b2, b1); + } + + @Override + public long readLong() throws IOException { + byte b1 = this.readAndCheckByte(); + byte b2 = this.readAndCheckByte(); + byte b3 = this.readAndCheckByte(); + byte b4 = this.readAndCheckByte(); + byte b5 = this.readAndCheckByte(); + byte b6 = this.readAndCheckByte(); + byte b7 = this.readAndCheckByte(); + byte b8 = this.readAndCheckByte(); + return Longs.fromBytes(b8, b7, b6, b5, b4, b3, b2, b1); + } + + @Override + public float readFloat() throws IOException { + return Float.intBitsToFloat(this.readInt()); + } + + @Override + public double readDouble() throws IOException { + return Double.longBitsToDouble(this.readLong()); + } + + @Override + public String readUTF() throws IOException { + return new DataInputStream(this.in).readUTF(); + } + + @Override + public short readShort() throws IOException { + return (short)this.readUnsignedShort(); + } + + @Override + public char readChar() throws IOException { + return (char)this.readUnsignedShort(); + } + + @Override + public byte readByte() throws IOException { + return (byte)this.readUnsignedByte(); + } + + @Override + public boolean readBoolean() throws IOException { + return this.readUnsignedByte() != 0; + } + + private byte readAndCheckByte() throws IOException, EOFException { + int b1 = this.in.read(); + if (-1 == b1) { + throw new EOFException(); + } + return (byte)b1; + } +} diff --git a/src/com/google/common/io/LittleEndianDataOutputStream.java b/src/com/google/common/io/LittleEndianDataOutputStream.java new file mode 100644 index 0000000..3ab8785 --- /dev/null +++ b/src/com/google/common/io/LittleEndianDataOutputStream.java @@ -0,0 +1,95 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.io; + +import com.google.common.annotations.Beta; +import com.google.common.base.Preconditions; +import com.google.common.primitives.Longs; +import java.io.DataOutput; +import java.io.DataOutputStream; +import java.io.FilterOutputStream; +import java.io.IOException; +import java.io.OutputStream; + +@Beta +public class LittleEndianDataOutputStream +extends FilterOutputStream +implements DataOutput { + public LittleEndianDataOutputStream(OutputStream out) { + super(new DataOutputStream(Preconditions.checkNotNull(out))); + } + + @Override + public void write(byte[] b, int off, int len) throws IOException { + this.out.write(b, off, len); + } + + @Override + public void writeBoolean(boolean v) throws IOException { + ((DataOutputStream)this.out).writeBoolean(v); + } + + @Override + public void writeByte(int v) throws IOException { + ((DataOutputStream)this.out).writeByte(v); + } + + @Override + @Deprecated + public void writeBytes(String s) throws IOException { + ((DataOutputStream)this.out).writeBytes(s); + } + + @Override + public void writeChar(int v) throws IOException { + this.writeShort(v); + } + + @Override + public void writeChars(String s) throws IOException { + for (int i = 0; i < s.length(); ++i) { + this.writeChar(s.charAt(i)); + } + } + + @Override + public void writeDouble(double v) throws IOException { + this.writeLong(Double.doubleToLongBits(v)); + } + + @Override + public void writeFloat(float v) throws IOException { + this.writeInt(Float.floatToIntBits(v)); + } + + @Override + public void writeInt(int v) throws IOException { + this.out.write(0xFF & v); + this.out.write(0xFF & v >> 8); + this.out.write(0xFF & v >> 16); + this.out.write(0xFF & v >> 24); + } + + @Override + public void writeLong(long v) throws IOException { + byte[] bytes = Longs.toByteArray(Long.reverseBytes(v)); + this.write(bytes, 0, bytes.length); + } + + @Override + public void writeShort(int v) throws IOException { + this.out.write(0xFF & v); + this.out.write(0xFF & v >> 8); + } + + @Override + public void writeUTF(String str) throws IOException { + ((DataOutputStream)this.out).writeUTF(str); + } + + @Override + public void close() throws IOException { + this.out.close(); + } +} diff --git a/src/com/google/common/io/MultiInputStream.java b/src/com/google/common/io/MultiInputStream.java new file mode 100644 index 0000000..eab1ca1 --- /dev/null +++ b/src/com/google/common/io/MultiInputStream.java @@ -0,0 +1,98 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.io; + +import com.google.common.base.Preconditions; +import com.google.common.io.ByteSource; +import java.io.IOException; +import java.io.InputStream; +import java.util.Iterator; +import javax.annotation.Nullable; + +final class MultiInputStream +extends InputStream { + private Iterator it; + private InputStream in; + + public MultiInputStream(Iterator it) throws IOException { + this.it = Preconditions.checkNotNull(it); + this.advance(); + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public void close() throws IOException { + if (this.in != null) { + try { + this.in.close(); + } + finally { + this.in = null; + } + } + } + + private void advance() throws IOException { + this.close(); + if (this.it.hasNext()) { + this.in = this.it.next().openStream(); + } + } + + @Override + public int available() throws IOException { + if (this.in == null) { + return 0; + } + return this.in.available(); + } + + @Override + public boolean markSupported() { + return false; + } + + @Override + public int read() throws IOException { + if (this.in == null) { + return -1; + } + int result = this.in.read(); + if (result == -1) { + this.advance(); + return this.read(); + } + return result; + } + + @Override + public int read(@Nullable byte[] b, int off, int len) throws IOException { + if (this.in == null) { + return -1; + } + int result = this.in.read(b, off, len); + if (result == -1) { + this.advance(); + return this.read(b, off, len); + } + return result; + } + + @Override + public long skip(long n) throws IOException { + if (this.in == null || n <= 0L) { + return 0L; + } + long result = this.in.skip(n); + if (result != 0L) { + return result; + } + if (this.read() == -1) { + return 0L; + } + return 1L + this.in.skip(n - 1L); + } +} diff --git a/src/com/google/common/io/MultiReader.java b/src/com/google/common/io/MultiReader.java new file mode 100644 index 0000000..acabf57 --- /dev/null +++ b/src/com/google/common/io/MultiReader.java @@ -0,0 +1,77 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.io; + +import com.google.common.base.Preconditions; +import com.google.common.io.CharSource; +import java.io.IOException; +import java.io.Reader; +import java.util.Iterator; +import javax.annotation.Nullable; + +class MultiReader +extends Reader { + private final Iterator it; + private Reader current; + + MultiReader(Iterator readers) throws IOException { + this.it = readers; + this.advance(); + } + + private void advance() throws IOException { + this.close(); + if (this.it.hasNext()) { + this.current = this.it.next().openStream(); + } + } + + @Override + public int read(@Nullable char[] cbuf, int off, int len) throws IOException { + if (this.current == null) { + return -1; + } + int result = this.current.read(cbuf, off, len); + if (result == -1) { + this.advance(); + return this.read(cbuf, off, len); + } + return result; + } + + @Override + public long skip(long n) throws IOException { + Preconditions.checkArgument(n >= 0L, "n is negative"); + if (n > 0L) { + while (this.current != null) { + long result = this.current.skip(n); + if (result > 0L) { + return result; + } + this.advance(); + } + } + return 0L; + } + + @Override + public boolean ready() throws IOException { + return this.current != null && this.current.ready(); + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public void close() throws IOException { + if (this.current != null) { + try { + this.current.close(); + } + finally { + this.current = null; + } + } + } +} diff --git a/src/com/google/common/io/OutputSupplier.java b/src/com/google/common/io/OutputSupplier.java new file mode 100644 index 0000000..ab11ba1 --- /dev/null +++ b/src/com/google/common/io/OutputSupplier.java @@ -0,0 +1,11 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.io; + +import java.io.IOException; + +@Deprecated +public interface OutputSupplier { + public T getOutput() throws IOException; +} diff --git a/src/com/google/common/io/PatternFilenameFilter.java b/src/com/google/common/io/PatternFilenameFilter.java new file mode 100644 index 0000000..4e0483c --- /dev/null +++ b/src/com/google/common/io/PatternFilenameFilter.java @@ -0,0 +1,30 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.io; + +import com.google.common.annotations.Beta; +import com.google.common.base.Preconditions; +import java.io.File; +import java.io.FilenameFilter; +import java.util.regex.Pattern; +import javax.annotation.Nullable; + +@Beta +public final class PatternFilenameFilter +implements FilenameFilter { + private final Pattern pattern; + + public PatternFilenameFilter(String patternStr) { + this(Pattern.compile(patternStr)); + } + + public PatternFilenameFilter(Pattern pattern) { + this.pattern = Preconditions.checkNotNull(pattern); + } + + @Override + public boolean accept(@Nullable File dir, String fileName) { + return this.pattern.matcher(fileName).matches(); + } +} diff --git a/src/com/google/common/io/Resources.java b/src/com/google/common/io/Resources.java new file mode 100644 index 0000000..2c72bee --- /dev/null +++ b/src/com/google/common/io/Resources.java @@ -0,0 +1,97 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.io; + +import com.google.common.annotations.Beta; +import com.google.common.base.MoreObjects; +import com.google.common.base.Preconditions; +import com.google.common.collect.Lists; +import com.google.common.io.ByteSource; +import com.google.common.io.CharSource; +import com.google.common.io.LineProcessor; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.net.URL; +import java.nio.charset.Charset; +import java.util.List; + +@Beta +public final class Resources { + private Resources() { + } + + public static ByteSource asByteSource(URL url) { + return new UrlByteSource(url); + } + + public static CharSource asCharSource(URL url, Charset charset) { + return Resources.asByteSource(url).asCharSource(charset); + } + + public static byte[] toByteArray(URL url) throws IOException { + return Resources.asByteSource(url).read(); + } + + public static String toString(URL url, Charset charset) throws IOException { + return Resources.asCharSource(url, charset).read(); + } + + public static T readLines(URL url, Charset charset, LineProcessor callback) throws IOException { + return Resources.asCharSource(url, charset).readLines(callback); + } + + public static List readLines(URL url, Charset charset) throws IOException { + return Resources.readLines(url, charset, new LineProcessor>(){ + final List result = Lists.newArrayList(); + + @Override + public boolean processLine(String line) { + this.result.add(line); + return true; + } + + @Override + public List getResult() { + return this.result; + } + }); + } + + public static void copy(URL from, OutputStream to) throws IOException { + Resources.asByteSource(from).copyTo(to); + } + + public static URL getResource(String resourceName) { + ClassLoader loader = MoreObjects.firstNonNull(Thread.currentThread().getContextClassLoader(), Resources.class.getClassLoader()); + URL url = loader.getResource(resourceName); + Preconditions.checkArgument(url != null, "resource %s not found.", resourceName); + return url; + } + + public static URL getResource(Class contextClass, String resourceName) { + URL url = contextClass.getResource(resourceName); + Preconditions.checkArgument(url != null, "resource %s relative to %s not found.", resourceName, contextClass.getName()); + return url; + } + + private static final class UrlByteSource + extends ByteSource { + private final URL url; + + private UrlByteSource(URL url) { + this.url = Preconditions.checkNotNull(url); + } + + @Override + public InputStream openStream() throws IOException { + return this.url.openStream(); + } + + public String toString() { + String string = String.valueOf(String.valueOf(this.url)); + return new StringBuilder(24 + string.length()).append("Resources.asByteSource(").append(string).append(")").toString(); + } + } +} diff --git a/src/com/google/common/io/package-info.java b/src/com/google/common/io/package-info.java new file mode 100644 index 0000000..99aa0be --- /dev/null +++ b/src/com/google/common/io/package-info.java @@ -0,0 +1,8 @@ +/* + * Decompiled with CFR 0.152. + */ +@ParametersAreNonnullByDefault +package com.google.common.io; + +import javax.annotation.ParametersAreNonnullByDefault; + diff --git a/src/com/google/common/math/BigIntegerMath.java b/src/com/google/common/math/BigIntegerMath.java new file mode 100644 index 0000000..896c9e5 --- /dev/null +++ b/src/com/google/common/math/BigIntegerMath.java @@ -0,0 +1,277 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.math; + +import com.google.common.annotations.GwtCompatible; +import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.VisibleForTesting; +import com.google.common.base.Preconditions; +import com.google.common.math.DoubleMath; +import com.google.common.math.DoubleUtils; +import com.google.common.math.IntMath; +import com.google.common.math.LongMath; +import com.google.common.math.MathPreconditions; +import java.math.BigDecimal; +import java.math.BigInteger; +import java.math.RoundingMode; +import java.util.ArrayList; +import java.util.List; + +@GwtCompatible(emulated=true) +public final class BigIntegerMath { + @VisibleForTesting + static final int SQRT2_PRECOMPUTE_THRESHOLD = 256; + @VisibleForTesting + static final BigInteger SQRT2_PRECOMPUTED_BITS = new BigInteger("16a09e667f3bcc908b2fb1366ea957d3e3adec17512775099da2f590b0667322a", 16); + private static final double LN_10 = Math.log(10.0); + private static final double LN_2 = Math.log(2.0); + + public static boolean isPowerOfTwo(BigInteger x) { + Preconditions.checkNotNull(x); + return x.signum() > 0 && x.getLowestSetBit() == x.bitLength() - 1; + } + + public static int log2(BigInteger x, RoundingMode mode) { + MathPreconditions.checkPositive("x", Preconditions.checkNotNull(x)); + int logFloor = x.bitLength() - 1; + switch (mode) { + case UNNECESSARY: { + MathPreconditions.checkRoundingUnnecessary(BigIntegerMath.isPowerOfTwo(x)); + } + case DOWN: + case FLOOR: { + return logFloor; + } + case UP: + case CEILING: { + return BigIntegerMath.isPowerOfTwo(x) ? logFloor : logFloor + 1; + } + case HALF_DOWN: + case HALF_UP: + case HALF_EVEN: { + if (logFloor < 256) { + BigInteger halfPower = SQRT2_PRECOMPUTED_BITS.shiftRight(256 - logFloor); + if (x.compareTo(halfPower) <= 0) { + return logFloor; + } + return logFloor + 1; + } + BigInteger x2 = x.pow(2); + int logX2Floor = x2.bitLength() - 1; + return logX2Floor < 2 * logFloor + 1 ? logFloor : logFloor + 1; + } + } + throw new AssertionError(); + } + + @GwtIncompatible(value="TODO") + public static int log10(BigInteger x, RoundingMode mode) { + MathPreconditions.checkPositive("x", x); + if (BigIntegerMath.fitsInLong(x)) { + return LongMath.log10(x.longValue(), mode); + } + int approxLog10 = (int)((double)BigIntegerMath.log2(x, RoundingMode.FLOOR) * LN_2 / LN_10); + BigInteger approxPow = BigInteger.TEN.pow(approxLog10); + int approxCmp = approxPow.compareTo(x); + if (approxCmp > 0) { + do { + --approxLog10; + } while ((approxCmp = (approxPow = approxPow.divide(BigInteger.TEN)).compareTo(x)) > 0); + } else { + BigInteger nextPow = BigInteger.TEN.multiply(approxPow); + int nextCmp = nextPow.compareTo(x); + while (nextCmp <= 0) { + ++approxLog10; + approxPow = nextPow; + approxCmp = nextCmp; + nextPow = BigInteger.TEN.multiply(approxPow); + nextCmp = nextPow.compareTo(x); + } + } + int floorLog = approxLog10; + BigInteger floorPow = approxPow; + int floorCmp = approxCmp; + switch (mode) { + case UNNECESSARY: { + MathPreconditions.checkRoundingUnnecessary(floorCmp == 0); + } + case DOWN: + case FLOOR: { + return floorLog; + } + case UP: + case CEILING: { + return floorPow.equals(x) ? floorLog : floorLog + 1; + } + case HALF_DOWN: + case HALF_UP: + case HALF_EVEN: { + BigInteger x2 = x.pow(2); + BigInteger halfPowerSquared = floorPow.pow(2).multiply(BigInteger.TEN); + return x2.compareTo(halfPowerSquared) <= 0 ? floorLog : floorLog + 1; + } + } + throw new AssertionError(); + } + + @GwtIncompatible(value="TODO") + public static BigInteger sqrt(BigInteger x, RoundingMode mode) { + MathPreconditions.checkNonNegative("x", x); + if (BigIntegerMath.fitsInLong(x)) { + return BigInteger.valueOf(LongMath.sqrt(x.longValue(), mode)); + } + BigInteger sqrtFloor = BigIntegerMath.sqrtFloor(x); + switch (mode) { + case UNNECESSARY: { + MathPreconditions.checkRoundingUnnecessary(sqrtFloor.pow(2).equals(x)); + } + case DOWN: + case FLOOR: { + return sqrtFloor; + } + case UP: + case CEILING: { + int sqrtFloorInt = sqrtFloor.intValue(); + boolean sqrtFloorIsExact = sqrtFloorInt * sqrtFloorInt == x.intValue() && sqrtFloor.pow(2).equals(x); + return sqrtFloorIsExact ? sqrtFloor : sqrtFloor.add(BigInteger.ONE); + } + case HALF_DOWN: + case HALF_UP: + case HALF_EVEN: { + BigInteger halfSquare = sqrtFloor.pow(2).add(sqrtFloor); + return halfSquare.compareTo(x) >= 0 ? sqrtFloor : sqrtFloor.add(BigInteger.ONE); + } + } + throw new AssertionError(); + } + + @GwtIncompatible(value="TODO") + private static BigInteger sqrtFloor(BigInteger x) { + BigInteger sqrt0; + int log2 = BigIntegerMath.log2(x, RoundingMode.FLOOR); + if (log2 < 1023) { + sqrt0 = BigIntegerMath.sqrtApproxWithDoubles(x); + } else { + int shift = log2 - 52 & 0xFFFFFFFE; + sqrt0 = BigIntegerMath.sqrtApproxWithDoubles(x.shiftRight(shift)).shiftLeft(shift >> 1); + } + BigInteger sqrt1 = sqrt0.add(x.divide(sqrt0)).shiftRight(1); + if (sqrt0.equals(sqrt1)) { + return sqrt0; + } + while ((sqrt1 = (sqrt0 = sqrt1).add(x.divide(sqrt0)).shiftRight(1)).compareTo(sqrt0) < 0) { + } + return sqrt0; + } + + @GwtIncompatible(value="TODO") + private static BigInteger sqrtApproxWithDoubles(BigInteger x) { + return DoubleMath.roundToBigInteger(Math.sqrt(DoubleUtils.bigToDouble(x)), RoundingMode.HALF_EVEN); + } + + @GwtIncompatible(value="TODO") + public static BigInteger divide(BigInteger p, BigInteger q, RoundingMode mode) { + BigDecimal pDec = new BigDecimal(p); + BigDecimal qDec = new BigDecimal(q); + return pDec.divide(qDec, 0, mode).toBigIntegerExact(); + } + + public static BigInteger factorial(int n) { + MathPreconditions.checkNonNegative("n", n); + if (n < LongMath.factorials.length) { + return BigInteger.valueOf(LongMath.factorials[n]); + } + int approxSize = IntMath.divide(n * IntMath.log2(n, RoundingMode.CEILING), 64, RoundingMode.CEILING); + ArrayList bignums = new ArrayList(approxSize); + int startingNumber = LongMath.factorials.length; + long product = LongMath.factorials[startingNumber - 1]; + int shift = Long.numberOfTrailingZeros(product); + int productBits = LongMath.log2(product >>= shift, RoundingMode.FLOOR) + 1; + int bits = LongMath.log2(startingNumber, RoundingMode.FLOOR) + 1; + int nextPowerOfTwo = 1 << bits - 1; + for (long num = (long)startingNumber; num <= (long)n; ++num) { + if ((num & (long)nextPowerOfTwo) != 0L) { + nextPowerOfTwo <<= 1; + ++bits; + } + int tz = Long.numberOfTrailingZeros(num); + long normalizedNum = num >> tz; + shift += tz; + int normalizedBits = bits - tz; + if (normalizedBits + productBits >= 64) { + bignums.add(BigInteger.valueOf(product)); + product = 1L; + productBits = 0; + } + productBits = LongMath.log2(product *= normalizedNum, RoundingMode.FLOOR) + 1; + } + if (product > 1L) { + bignums.add(BigInteger.valueOf(product)); + } + return BigIntegerMath.listProduct(bignums).shiftLeft(shift); + } + + static BigInteger listProduct(List nums) { + return BigIntegerMath.listProduct(nums, 0, nums.size()); + } + + static BigInteger listProduct(List nums, int start, int end) { + switch (end - start) { + case 0: { + return BigInteger.ONE; + } + case 1: { + return nums.get(start); + } + case 2: { + return nums.get(start).multiply(nums.get(start + 1)); + } + case 3: { + return nums.get(start).multiply(nums.get(start + 1)).multiply(nums.get(start + 2)); + } + } + int m = end + start >>> 1; + return BigIntegerMath.listProduct(nums, start, m).multiply(BigIntegerMath.listProduct(nums, m, end)); + } + + public static BigInteger binomial(int n, int k) { + int bits; + MathPreconditions.checkNonNegative("n", n); + MathPreconditions.checkNonNegative("k", k); + Preconditions.checkArgument(k <= n, "k (%s) > n (%s)", k, n); + if (k > n >> 1) { + k = n - k; + } + if (k < LongMath.biggestBinomials.length && n <= LongMath.biggestBinomials[k]) { + return BigInteger.valueOf(LongMath.binomial(n, k)); + } + BigInteger accum = BigInteger.ONE; + long numeratorAccum = n; + long denominatorAccum = 1L; + int numeratorBits = bits = LongMath.log2(n, RoundingMode.CEILING); + for (int i = 1; i < k; ++i) { + int p = n - i; + int q = i + 1; + if (numeratorBits + bits >= 63) { + accum = accum.multiply(BigInteger.valueOf(numeratorAccum)).divide(BigInteger.valueOf(denominatorAccum)); + numeratorAccum = p; + denominatorAccum = q; + numeratorBits = bits; + continue; + } + numeratorAccum *= (long)p; + denominatorAccum *= (long)q; + numeratorBits += bits; + } + return accum.multiply(BigInteger.valueOf(numeratorAccum)).divide(BigInteger.valueOf(denominatorAccum)); + } + + @GwtIncompatible(value="TODO") + static boolean fitsInLong(BigInteger x) { + return x.bitLength() <= 63; + } + + private BigIntegerMath() { + } +} diff --git a/src/com/google/common/math/DoubleMath.java b/src/com/google/common/math/DoubleMath.java new file mode 100644 index 0000000..7429718 --- /dev/null +++ b/src/com/google/common/math/DoubleMath.java @@ -0,0 +1,260 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.math; + +import com.google.common.annotations.GwtCompatible; +import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.VisibleForTesting; +import com.google.common.base.Preconditions; +import com.google.common.math.DoubleUtils; +import com.google.common.math.LongMath; +import com.google.common.math.MathPreconditions; +import com.google.common.primitives.Booleans; +import java.math.BigInteger; +import java.math.RoundingMode; +import java.util.Iterator; + +@GwtCompatible(emulated=true) +public final class DoubleMath { + private static final double MIN_INT_AS_DOUBLE = -2.147483648E9; + private static final double MAX_INT_AS_DOUBLE = 2.147483647E9; + private static final double MIN_LONG_AS_DOUBLE = -9.223372036854776E18; + private static final double MAX_LONG_AS_DOUBLE_PLUS_ONE = 9.223372036854776E18; + private static final double LN_2 = Math.log(2.0); + @VisibleForTesting + static final int MAX_FACTORIAL = 170; + @VisibleForTesting + static final double[] everySixteenthFactorial = new double[]{1.0, 2.0922789888E13, 2.631308369336935E35, 1.2413915592536073E61, 1.2688693218588417E89, 7.156945704626381E118, 9.916779348709496E149, 1.974506857221074E182, 3.856204823625804E215, 5.5502938327393044E249, 4.7147236359920616E284}; + + @GwtIncompatible(value="#isMathematicalInteger, com.google.common.math.DoubleUtils") + static double roundIntermediate(double x, RoundingMode mode) { + if (!DoubleUtils.isFinite(x)) { + throw new ArithmeticException("input is infinite or NaN"); + } + switch (mode) { + case UNNECESSARY: { + MathPreconditions.checkRoundingUnnecessary(DoubleMath.isMathematicalInteger(x)); + return x; + } + case FLOOR: { + if (x >= 0.0 || DoubleMath.isMathematicalInteger(x)) { + return x; + } + return x - 1.0; + } + case CEILING: { + if (x <= 0.0 || DoubleMath.isMathematicalInteger(x)) { + return x; + } + return x + 1.0; + } + case DOWN: { + return x; + } + case UP: { + if (DoubleMath.isMathematicalInteger(x)) { + return x; + } + return x + Math.copySign(1.0, x); + } + case HALF_EVEN: { + return Math.rint(x); + } + case HALF_UP: { + double z = Math.rint(x); + if (Math.abs(x - z) == 0.5) { + return x + Math.copySign(0.5, x); + } + return z; + } + case HALF_DOWN: { + double z = Math.rint(x); + if (Math.abs(x - z) == 0.5) { + return x; + } + return z; + } + } + throw new AssertionError(); + } + + @GwtIncompatible(value="#roundIntermediate") + public static int roundToInt(double x, RoundingMode mode) { + double z = DoubleMath.roundIntermediate(x, mode); + MathPreconditions.checkInRange(z > -2.147483649E9 & z < 2.147483648E9); + return (int)z; + } + + @GwtIncompatible(value="#roundIntermediate") + public static long roundToLong(double x, RoundingMode mode) { + double z = DoubleMath.roundIntermediate(x, mode); + MathPreconditions.checkInRange(-9.223372036854776E18 - z < 1.0 & z < 9.223372036854776E18); + return (long)z; + } + + @GwtIncompatible(value="#roundIntermediate, java.lang.Math.getExponent, com.google.common.math.DoubleUtils") + public static BigInteger roundToBigInteger(double x, RoundingMode mode) { + if (-9.223372036854776E18 - (x = DoubleMath.roundIntermediate(x, mode)) < 1.0 & x < 9.223372036854776E18) { + return BigInteger.valueOf((long)x); + } + int exponent = Math.getExponent(x); + long significand = DoubleUtils.getSignificand(x); + BigInteger result = BigInteger.valueOf(significand).shiftLeft(exponent - 52); + return x < 0.0 ? result.negate() : result; + } + + @GwtIncompatible(value="com.google.common.math.DoubleUtils") + public static boolean isPowerOfTwo(double x) { + return x > 0.0 && DoubleUtils.isFinite(x) && LongMath.isPowerOfTwo(DoubleUtils.getSignificand(x)); + } + + public static double log2(double x) { + return Math.log(x) / LN_2; + } + + @GwtIncompatible(value="java.lang.Math.getExponent, com.google.common.math.DoubleUtils") + public static int log2(double x, RoundingMode mode) { + boolean increment; + Preconditions.checkArgument(x > 0.0 && DoubleUtils.isFinite(x), "x must be positive and finite"); + int exponent = Math.getExponent(x); + if (!DoubleUtils.isNormal(x)) { + return DoubleMath.log2(x * 4.503599627370496E15, mode) - 52; + } + switch (mode) { + case UNNECESSARY: { + MathPreconditions.checkRoundingUnnecessary(DoubleMath.isPowerOfTwo(x)); + } + case FLOOR: { + increment = false; + break; + } + case CEILING: { + increment = !DoubleMath.isPowerOfTwo(x); + break; + } + case DOWN: { + increment = exponent < 0 & !DoubleMath.isPowerOfTwo(x); + break; + } + case UP: { + increment = exponent >= 0 & !DoubleMath.isPowerOfTwo(x); + break; + } + case HALF_EVEN: + case HALF_UP: + case HALF_DOWN: { + double xScaled = DoubleUtils.scaleNormalize(x); + increment = xScaled * xScaled > 2.0; + break; + } + default: { + throw new AssertionError(); + } + } + return increment ? exponent + 1 : exponent; + } + + @GwtIncompatible(value="java.lang.Math.getExponent, com.google.common.math.DoubleUtils") + public static boolean isMathematicalInteger(double x) { + return DoubleUtils.isFinite(x) && (x == 0.0 || 52 - Long.numberOfTrailingZeros(DoubleUtils.getSignificand(x)) <= Math.getExponent(x)); + } + + public static double factorial(int n) { + MathPreconditions.checkNonNegative("n", n); + if (n > 170) { + return Double.POSITIVE_INFINITY; + } + double accum = 1.0; + for (int i = 1 + (n & 0xFFFFFFF0); i <= n; ++i) { + accum *= (double)i; + } + return accum * everySixteenthFactorial[n >> 4]; + } + + public static boolean fuzzyEquals(double a, double b, double tolerance) { + MathPreconditions.checkNonNegative("tolerance", tolerance); + return Math.copySign(a - b, 1.0) <= tolerance || a == b || Double.isNaN(a) && Double.isNaN(b); + } + + public static int fuzzyCompare(double a, double b, double tolerance) { + if (DoubleMath.fuzzyEquals(a, b, tolerance)) { + return 0; + } + if (a < b) { + return -1; + } + if (a > b) { + return 1; + } + return Booleans.compare(Double.isNaN(a), Double.isNaN(b)); + } + + @GwtIncompatible(value="MeanAccumulator") + public static double mean(double ... values) { + MeanAccumulator accumulator = new MeanAccumulator(); + for (double value : values) { + accumulator.add(value); + } + return accumulator.mean(); + } + + @GwtIncompatible(value="MeanAccumulator") + public static double mean(int ... values) { + MeanAccumulator accumulator = new MeanAccumulator(); + for (int value : values) { + accumulator.add(value); + } + return accumulator.mean(); + } + + @GwtIncompatible(value="MeanAccumulator") + public static double mean(long ... values) { + MeanAccumulator accumulator = new MeanAccumulator(); + for (long value : values) { + accumulator.add(value); + } + return accumulator.mean(); + } + + @GwtIncompatible(value="MeanAccumulator") + public static double mean(Iterable values) { + MeanAccumulator accumulator = new MeanAccumulator(); + for (Number number : values) { + accumulator.add(number.doubleValue()); + } + return accumulator.mean(); + } + + @GwtIncompatible(value="MeanAccumulator") + public static double mean(Iterator values) { + MeanAccumulator accumulator = new MeanAccumulator(); + while (values.hasNext()) { + accumulator.add(values.next().doubleValue()); + } + return accumulator.mean(); + } + + private DoubleMath() { + } + + @GwtIncompatible(value="com.google.common.math.DoubleUtils") + private static final class MeanAccumulator { + private long count = 0L; + private double mean = 0.0; + + private MeanAccumulator() { + } + + void add(double value) { + Preconditions.checkArgument(DoubleUtils.isFinite(value)); + ++this.count; + this.mean += (value - this.mean) / (double)this.count; + } + + double mean() { + Preconditions.checkArgument(this.count > 0L, "Cannot take mean of 0 values"); + return this.mean; + } + } +} diff --git a/src/com/google/common/math/DoubleUtils.java b/src/com/google/common/math/DoubleUtils.java new file mode 100644 index 0000000..1d9fe58 --- /dev/null +++ b/src/com/google/common/math/DoubleUtils.java @@ -0,0 +1,71 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.math; + +import com.google.common.base.Preconditions; +import java.math.BigInteger; + +final class DoubleUtils { + static final long SIGNIFICAND_MASK = 0xFFFFFFFFFFFFFL; + static final long EXPONENT_MASK = 0x7FF0000000000000L; + static final long SIGN_MASK = Long.MIN_VALUE; + static final int SIGNIFICAND_BITS = 52; + static final int EXPONENT_BIAS = 1023; + static final long IMPLICIT_BIT = 0x10000000000000L; + private static final long ONE_BITS = Double.doubleToRawLongBits(1.0); + + private DoubleUtils() { + } + + static double nextDown(double d) { + return -Math.nextUp(-d); + } + + static long getSignificand(double d) { + Preconditions.checkArgument(DoubleUtils.isFinite(d), "not a normal value"); + int exponent = Math.getExponent(d); + long bits = Double.doubleToRawLongBits(d); + return exponent == -1023 ? bits << 1 : (bits &= 0xFFFFFFFFFFFFFL) | 0x10000000000000L; + } + + static boolean isFinite(double d) { + return Math.getExponent(d) <= 1023; + } + + static boolean isNormal(double d) { + return Math.getExponent(d) >= -1022; + } + + static double scaleNormalize(double x) { + long significand = Double.doubleToRawLongBits(x) & 0xFFFFFFFFFFFFFL; + return Double.longBitsToDouble(significand | ONE_BITS); + } + + static double bigToDouble(BigInteger x) { + BigInteger absX = x.abs(); + int exponent = absX.bitLength() - 1; + if (exponent < 63) { + return x.longValue(); + } + if (exponent > 1023) { + return (double)x.signum() * Double.POSITIVE_INFINITY; + } + int shift = exponent - 52 - 1; + long twiceSignifFloor = absX.shiftRight(shift).longValue(); + long signifFloor = twiceSignifFloor >> 1; + boolean increment = (twiceSignifFloor & 1L) != 0L && (((signifFloor &= 0xFFFFFFFFFFFFFL) & 1L) != 0L || absX.getLowestSetBit() < shift); + long signifRounded = increment ? signifFloor + 1L : signifFloor; + long bits = (long)(exponent + 1023) << 52; + bits += signifRounded; + return Double.longBitsToDouble(bits |= (long)x.signum() & Long.MIN_VALUE); + } + + static double ensureNonNegative(double value) { + Preconditions.checkArgument(!Double.isNaN(value)); + if (value > 0.0) { + return value; + } + return 0.0; + } +} diff --git a/src/com/google/common/math/IntMath.java b/src/com/google/common/math/IntMath.java new file mode 100644 index 0000000..5de4228 --- /dev/null +++ b/src/com/google/common/math/IntMath.java @@ -0,0 +1,343 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.math; + +import com.google.common.annotations.GwtCompatible; +import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.VisibleForTesting; +import com.google.common.base.Preconditions; +import com.google.common.math.MathPreconditions; +import java.math.RoundingMode; + +@GwtCompatible(emulated=true) +public final class IntMath { + @VisibleForTesting + static final int MAX_POWER_OF_SQRT2_UNSIGNED = -1257966797; + @VisibleForTesting + static final byte[] maxLog10ForLeadingZeros = new byte[]{9, 9, 9, 8, 8, 8, 7, 7, 7, 6, 6, 6, 6, 5, 5, 5, 4, 4, 4, 3, 3, 3, 3, 2, 2, 2, 1, 1, 1, 0, 0, 0, 0}; + @VisibleForTesting + static final int[] powersOf10 = new int[]{1, 10, 100, 1000, 10000, 100000, 1000000, 10000000, 100000000, 1000000000}; + @VisibleForTesting + static final int[] halfPowersOf10 = new int[]{3, 31, 316, 3162, 31622, 316227, 3162277, 31622776, 316227766, Integer.MAX_VALUE}; + @VisibleForTesting + static final int FLOOR_SQRT_MAX_INT = 46340; + private static final int[] factorials = new int[]{1, 1, 2, 6, 24, 120, 720, 5040, 40320, 362880, 3628800, 39916800, 479001600}; + @VisibleForTesting + static int[] biggestBinomials = new int[]{Integer.MAX_VALUE, Integer.MAX_VALUE, 65536, 2345, 477, 193, 110, 75, 58, 49, 43, 39, 37, 35, 34, 34, 33}; + + public static boolean isPowerOfTwo(int x) { + return x > 0 & (x & x - 1) == 0; + } + + @VisibleForTesting + static int lessThanBranchFree(int x, int y) { + return ~(~(x - y)) >>> 31; + } + + public static int log2(int x, RoundingMode mode) { + MathPreconditions.checkPositive("x", x); + switch (mode) { + case UNNECESSARY: { + MathPreconditions.checkRoundingUnnecessary(IntMath.isPowerOfTwo(x)); + } + case DOWN: + case FLOOR: { + return 31 - Integer.numberOfLeadingZeros(x); + } + case UP: + case CEILING: { + return 32 - Integer.numberOfLeadingZeros(x - 1); + } + case HALF_DOWN: + case HALF_UP: + case HALF_EVEN: { + int leadingZeros = Integer.numberOfLeadingZeros(x); + int cmp = -1257966797 >>> leadingZeros; + int logFloor = 31 - leadingZeros; + return logFloor + IntMath.lessThanBranchFree(cmp, x); + } + } + throw new AssertionError(); + } + + @GwtIncompatible(value="need BigIntegerMath to adequately test") + public static int log10(int x, RoundingMode mode) { + MathPreconditions.checkPositive("x", x); + int logFloor = IntMath.log10Floor(x); + int floorPow = powersOf10[logFloor]; + switch (mode) { + case UNNECESSARY: { + MathPreconditions.checkRoundingUnnecessary(x == floorPow); + } + case DOWN: + case FLOOR: { + return logFloor; + } + case UP: + case CEILING: { + return logFloor + IntMath.lessThanBranchFree(floorPow, x); + } + case HALF_DOWN: + case HALF_UP: + case HALF_EVEN: { + return logFloor + IntMath.lessThanBranchFree(halfPowersOf10[logFloor], x); + } + } + throw new AssertionError(); + } + + private static int log10Floor(int x) { + byte y = maxLog10ForLeadingZeros[Integer.numberOfLeadingZeros(x)]; + return y - IntMath.lessThanBranchFree(x, powersOf10[y]); + } + + @GwtIncompatible(value="failing tests") + public static int pow(int b, int k) { + MathPreconditions.checkNonNegative("exponent", k); + switch (b) { + case 0: { + return k == 0 ? 1 : 0; + } + case 1: { + return 1; + } + case -1: { + return (k & 1) == 0 ? 1 : -1; + } + case 2: { + return k < 32 ? 1 << k : 0; + } + case -2: { + if (k < 32) { + return (k & 1) == 0 ? 1 << k : -(1 << k); + } + return 0; + } + } + int accum = 1; + while (true) { + switch (k) { + case 0: { + return accum; + } + case 1: { + return b * accum; + } + } + accum *= (k & 1) == 0 ? 1 : b; + b *= b; + k >>= 1; + } + } + + @GwtIncompatible(value="need BigIntegerMath to adequately test") + public static int sqrt(int x, RoundingMode mode) { + MathPreconditions.checkNonNegative("x", x); + int sqrtFloor = IntMath.sqrtFloor(x); + switch (mode) { + case UNNECESSARY: { + MathPreconditions.checkRoundingUnnecessary(sqrtFloor * sqrtFloor == x); + } + case DOWN: + case FLOOR: { + return sqrtFloor; + } + case UP: + case CEILING: { + return sqrtFloor + IntMath.lessThanBranchFree(sqrtFloor * sqrtFloor, x); + } + case HALF_DOWN: + case HALF_UP: + case HALF_EVEN: { + int halfSquare = sqrtFloor * sqrtFloor + sqrtFloor; + return sqrtFloor + IntMath.lessThanBranchFree(halfSquare, x); + } + } + throw new AssertionError(); + } + + private static int sqrtFloor(int x) { + return (int)Math.sqrt(x); + } + + public static int divide(int p, int q, RoundingMode mode) { + boolean increment; + Preconditions.checkNotNull(mode); + if (q == 0) { + throw new ArithmeticException("/ by zero"); + } + int div = p / q; + int rem = p - q * div; + if (rem == 0) { + return div; + } + int signum = 1 | (p ^ q) >> 31; + switch (mode) { + case UNNECESSARY: { + MathPreconditions.checkRoundingUnnecessary(rem == 0); + } + case DOWN: { + increment = false; + break; + } + case UP: { + increment = true; + break; + } + case CEILING: { + increment = signum > 0; + break; + } + case FLOOR: { + increment = signum < 0; + break; + } + case HALF_DOWN: + case HALF_UP: + case HALF_EVEN: { + int absRem = Math.abs(rem); + int cmpRemToHalfDivisor = absRem - (Math.abs(q) - absRem); + if (cmpRemToHalfDivisor == 0) { + increment = mode == RoundingMode.HALF_UP || mode == RoundingMode.HALF_EVEN & (div & 1) != 0; + break; + } + increment = cmpRemToHalfDivisor > 0; + break; + } + default: { + throw new AssertionError(); + } + } + return increment ? div + signum : div; + } + + public static int mod(int x, int m) { + if (m <= 0) { + int n = m; + throw new ArithmeticException(new StringBuilder(31).append("Modulus ").append(n).append(" must be > 0").toString()); + } + int result = x % m; + return result >= 0 ? result : result + m; + } + + public static int gcd(int a, int b) { + MathPreconditions.checkNonNegative("a", a); + MathPreconditions.checkNonNegative("b", b); + if (a == 0) { + return b; + } + if (b == 0) { + return a; + } + int aTwos = Integer.numberOfTrailingZeros(a); + a >>= aTwos; + int bTwos = Integer.numberOfTrailingZeros(b); + b >>= bTwos; + while (a != b) { + int delta = a - b; + int minDeltaOrZero = delta & delta >> 31; + a = delta - minDeltaOrZero - minDeltaOrZero; + b += minDeltaOrZero; + a >>= Integer.numberOfTrailingZeros(a); + } + return a << Math.min(aTwos, bTwos); + } + + public static int checkedAdd(int a, int b) { + long result = (long)a + (long)b; + MathPreconditions.checkNoOverflow(result == (long)((int)result)); + return (int)result; + } + + public static int checkedSubtract(int a, int b) { + long result = (long)a - (long)b; + MathPreconditions.checkNoOverflow(result == (long)((int)result)); + return (int)result; + } + + public static int checkedMultiply(int a, int b) { + long result = (long)a * (long)b; + MathPreconditions.checkNoOverflow(result == (long)((int)result)); + return (int)result; + } + + public static int checkedPow(int b, int k) { + MathPreconditions.checkNonNegative("exponent", k); + switch (b) { + case 0: { + return k == 0 ? 1 : 0; + } + case 1: { + return 1; + } + case -1: { + return (k & 1) == 0 ? 1 : -1; + } + case 2: { + MathPreconditions.checkNoOverflow(k < 31); + return 1 << k; + } + case -2: { + MathPreconditions.checkNoOverflow(k < 32); + return (k & 1) == 0 ? 1 << k : -1 << k; + } + } + int accum = 1; + while (true) { + switch (k) { + case 0: { + return accum; + } + case 1: { + return IntMath.checkedMultiply(accum, b); + } + } + if ((k & 1) != 0) { + accum = IntMath.checkedMultiply(accum, b); + } + if ((k >>= 1) <= 0) continue; + MathPreconditions.checkNoOverflow(-46340 <= b & b <= 46340); + b *= b; + } + } + + public static int factorial(int n) { + MathPreconditions.checkNonNegative("n", n); + return n < factorials.length ? factorials[n] : Integer.MAX_VALUE; + } + + @GwtIncompatible(value="need BigIntegerMath to adequately test") + public static int binomial(int n, int k) { + MathPreconditions.checkNonNegative("n", n); + MathPreconditions.checkNonNegative("k", k); + Preconditions.checkArgument(k <= n, "k (%s) > n (%s)", k, n); + if (k > n >> 1) { + k = n - k; + } + if (k >= biggestBinomials.length || n > biggestBinomials[k]) { + return Integer.MAX_VALUE; + } + switch (k) { + case 0: { + return 1; + } + case 1: { + return n; + } + } + long result = 1L; + for (int i = 0; i < k; ++i) { + result *= (long)(n - i); + result /= (long)(i + 1); + } + return (int)result; + } + + public static int mean(int x, int y) { + return (x & y) + ((x ^ y) >> 1); + } + + private IntMath() { + } +} diff --git a/src/com/google/common/math/LongMath.java b/src/com/google/common/math/LongMath.java new file mode 100644 index 0000000..325d7bd --- /dev/null +++ b/src/com/google/common/math/LongMath.java @@ -0,0 +1,414 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.math; + +import com.google.common.annotations.GwtCompatible; +import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.VisibleForTesting; +import com.google.common.base.Preconditions; +import com.google.common.math.IntMath; +import com.google.common.math.MathPreconditions; +import java.math.RoundingMode; + +@GwtCompatible(emulated=true) +public final class LongMath { + @VisibleForTesting + static final long MAX_POWER_OF_SQRT2_UNSIGNED = -5402926248376769404L; + @VisibleForTesting + static final byte[] maxLog10ForLeadingZeros = new byte[]{19, 18, 18, 18, 18, 17, 17, 17, 16, 16, 16, 15, 15, 15, 15, 14, 14, 14, 13, 13, 13, 12, 12, 12, 12, 11, 11, 11, 10, 10, 10, 9, 9, 9, 9, 8, 8, 8, 7, 7, 7, 6, 6, 6, 6, 5, 5, 5, 4, 4, 4, 3, 3, 3, 3, 2, 2, 2, 1, 1, 1, 0, 0, 0}; + @GwtIncompatible(value="TODO") + @VisibleForTesting + static final long[] powersOf10 = new long[]{1L, 10L, 100L, 1000L, 10000L, 100000L, 1000000L, 10000000L, 100000000L, 1000000000L, 10000000000L, 100000000000L, 1000000000000L, 10000000000000L, 100000000000000L, 1000000000000000L, 10000000000000000L, 100000000000000000L, 1000000000000000000L}; + @GwtIncompatible(value="TODO") + @VisibleForTesting + static final long[] halfPowersOf10 = new long[]{3L, 31L, 316L, 3162L, 31622L, 316227L, 3162277L, 31622776L, 316227766L, 3162277660L, 31622776601L, 316227766016L, 3162277660168L, 31622776601683L, 316227766016837L, 3162277660168379L, 31622776601683793L, 316227766016837933L, 3162277660168379331L}; + @VisibleForTesting + static final long FLOOR_SQRT_MAX_LONG = 3037000499L; + static final long[] factorials = new long[]{1L, 1L, 2L, 6L, 24L, 120L, 720L, 5040L, 40320L, 362880L, 3628800L, 39916800L, 479001600L, 6227020800L, 87178291200L, 1307674368000L, 20922789888000L, 355687428096000L, 6402373705728000L, 121645100408832000L, 2432902008176640000L}; + static final int[] biggestBinomials = new int[]{Integer.MAX_VALUE, Integer.MAX_VALUE, Integer.MAX_VALUE, 3810779, 121977, 16175, 4337, 1733, 887, 534, 361, 265, 206, 169, 143, 125, 111, 101, 94, 88, 83, 79, 76, 74, 72, 70, 69, 68, 67, 67, 66, 66, 66, 66}; + @VisibleForTesting + static final int[] biggestSimpleBinomials = new int[]{Integer.MAX_VALUE, Integer.MAX_VALUE, Integer.MAX_VALUE, 2642246, 86251, 11724, 3218, 1313, 684, 419, 287, 214, 169, 139, 119, 105, 95, 87, 81, 76, 73, 70, 68, 66, 64, 63, 62, 62, 61, 61, 61}; + + public static boolean isPowerOfTwo(long x) { + return x > 0L & (x & x - 1L) == 0L; + } + + @VisibleForTesting + static int lessThanBranchFree(long x, long y) { + return (int)((x - y ^ 0xFFFFFFFFFFFFFFFFL ^ 0xFFFFFFFFFFFFFFFFL) >>> 63); + } + + public static int log2(long x, RoundingMode mode) { + MathPreconditions.checkPositive("x", x); + switch (mode) { + case UNNECESSARY: { + MathPreconditions.checkRoundingUnnecessary(LongMath.isPowerOfTwo(x)); + } + case DOWN: + case FLOOR: { + return 63 - Long.numberOfLeadingZeros(x); + } + case UP: + case CEILING: { + return 64 - Long.numberOfLeadingZeros(x - 1L); + } + case HALF_DOWN: + case HALF_UP: + case HALF_EVEN: { + int leadingZeros = Long.numberOfLeadingZeros(x); + long cmp = -5402926248376769404L >>> leadingZeros; + int logFloor = 63 - leadingZeros; + return logFloor + LongMath.lessThanBranchFree(cmp, x); + } + } + throw new AssertionError((Object)"impossible"); + } + + @GwtIncompatible(value="TODO") + public static int log10(long x, RoundingMode mode) { + MathPreconditions.checkPositive("x", x); + int logFloor = LongMath.log10Floor(x); + long floorPow = powersOf10[logFloor]; + switch (mode) { + case UNNECESSARY: { + MathPreconditions.checkRoundingUnnecessary(x == floorPow); + } + case DOWN: + case FLOOR: { + return logFloor; + } + case UP: + case CEILING: { + return logFloor + LongMath.lessThanBranchFree(floorPow, x); + } + case HALF_DOWN: + case HALF_UP: + case HALF_EVEN: { + return logFloor + LongMath.lessThanBranchFree(halfPowersOf10[logFloor], x); + } + } + throw new AssertionError(); + } + + @GwtIncompatible(value="TODO") + static int log10Floor(long x) { + byte y = maxLog10ForLeadingZeros[Long.numberOfLeadingZeros(x)]; + return y - LongMath.lessThanBranchFree(x, powersOf10[y]); + } + + @GwtIncompatible(value="TODO") + public static long pow(long b, int k) { + MathPreconditions.checkNonNegative("exponent", k); + if (-2L <= b && b <= 2L) { + switch ((int)b) { + case 0: { + return k == 0 ? 1L : 0L; + } + case 1: { + return 1L; + } + case -1: { + return (k & 1) == 0 ? 1L : -1L; + } + case 2: { + return k < 64 ? 1L << k : 0L; + } + case -2: { + if (k < 64) { + return (k & 1) == 0 ? 1L << k : -(1L << k); + } + return 0L; + } + } + throw new AssertionError(); + } + long accum = 1L; + while (true) { + switch (k) { + case 0: { + return accum; + } + case 1: { + return accum * b; + } + } + accum *= (k & 1) == 0 ? 1L : b; + b *= b; + k >>= 1; + } + } + + @GwtIncompatible(value="TODO") + public static long sqrt(long x, RoundingMode mode) { + MathPreconditions.checkNonNegative("x", x); + if (LongMath.fitsInInt(x)) { + return IntMath.sqrt((int)x, mode); + } + long guess = (long)Math.sqrt(x); + long guessSquared = guess * guess; + switch (mode) { + case UNNECESSARY: { + MathPreconditions.checkRoundingUnnecessary(guessSquared == x); + return guess; + } + case DOWN: + case FLOOR: { + if (x < guessSquared) { + return guess - 1L; + } + return guess; + } + case UP: + case CEILING: { + if (x > guessSquared) { + return guess + 1L; + } + return guess; + } + case HALF_DOWN: + case HALF_UP: + case HALF_EVEN: { + long sqrtFloor = guess - (long)(x < guessSquared ? 1 : 0); + long halfSquare = sqrtFloor * sqrtFloor + sqrtFloor; + return sqrtFloor + (long)LongMath.lessThanBranchFree(halfSquare, x); + } + } + throw new AssertionError(); + } + + @GwtIncompatible(value="TODO") + public static long divide(long p, long q, RoundingMode mode) { + boolean increment; + Preconditions.checkNotNull(mode); + long div = p / q; + long rem = p - q * div; + if (rem == 0L) { + return div; + } + int signum = 1 | (int)((p ^ q) >> 63); + switch (mode) { + case UNNECESSARY: { + MathPreconditions.checkRoundingUnnecessary(rem == 0L); + } + case DOWN: { + increment = false; + break; + } + case UP: { + increment = true; + break; + } + case CEILING: { + increment = signum > 0; + break; + } + case FLOOR: { + increment = signum < 0; + break; + } + case HALF_DOWN: + case HALF_UP: + case HALF_EVEN: { + long absRem = Math.abs(rem); + long cmpRemToHalfDivisor = absRem - (Math.abs(q) - absRem); + if (cmpRemToHalfDivisor == 0L) { + increment = mode == RoundingMode.HALF_UP | mode == RoundingMode.HALF_EVEN & (div & 1L) != 0L; + break; + } + increment = cmpRemToHalfDivisor > 0L; + break; + } + default: { + throw new AssertionError(); + } + } + return increment ? div + (long)signum : div; + } + + @GwtIncompatible(value="TODO") + public static int mod(long x, int m) { + return (int)LongMath.mod(x, (long)m); + } + + @GwtIncompatible(value="TODO") + public static long mod(long x, long m) { + if (m <= 0L) { + throw new ArithmeticException("Modulus must be positive"); + } + long result = x % m; + return result >= 0L ? result : result + m; + } + + public static long gcd(long a, long b) { + MathPreconditions.checkNonNegative("a", a); + MathPreconditions.checkNonNegative("b", b); + if (a == 0L) { + return b; + } + if (b == 0L) { + return a; + } + int aTwos = Long.numberOfTrailingZeros(a); + a >>= aTwos; + int bTwos = Long.numberOfTrailingZeros(b); + b >>= bTwos; + while (a != b) { + long delta = a - b; + long minDeltaOrZero = delta & delta >> 63; + a = delta - minDeltaOrZero - minDeltaOrZero; + b += minDeltaOrZero; + a >>= Long.numberOfTrailingZeros(a); + } + return a << Math.min(aTwos, bTwos); + } + + @GwtIncompatible(value="TODO") + public static long checkedAdd(long a, long b) { + long result = a + b; + MathPreconditions.checkNoOverflow((a ^ b) < 0L | (a ^ result) >= 0L); + return result; + } + + @GwtIncompatible(value="TODO") + public static long checkedSubtract(long a, long b) { + long result = a - b; + MathPreconditions.checkNoOverflow((a ^ b) >= 0L | (a ^ result) >= 0L); + return result; + } + + @GwtIncompatible(value="TODO") + public static long checkedMultiply(long a, long b) { + int leadingZeros = Long.numberOfLeadingZeros(a) + Long.numberOfLeadingZeros(a ^ 0xFFFFFFFFFFFFFFFFL) + Long.numberOfLeadingZeros(b) + Long.numberOfLeadingZeros(b ^ 0xFFFFFFFFFFFFFFFFL); + if (leadingZeros > 65) { + return a * b; + } + MathPreconditions.checkNoOverflow(leadingZeros >= 64); + MathPreconditions.checkNoOverflow(a >= 0L | b != Long.MIN_VALUE); + long result = a * b; + MathPreconditions.checkNoOverflow(a == 0L || result / a == b); + return result; + } + + @GwtIncompatible(value="TODO") + public static long checkedPow(long b, int k) { + MathPreconditions.checkNonNegative("exponent", k); + if (b >= -2L & b <= 2L) { + switch ((int)b) { + case 0: { + return k == 0 ? 1L : 0L; + } + case 1: { + return 1L; + } + case -1: { + return (k & 1) == 0 ? 1L : -1L; + } + case 2: { + MathPreconditions.checkNoOverflow(k < 63); + return 1L << k; + } + case -2: { + MathPreconditions.checkNoOverflow(k < 64); + return (k & 1) == 0 ? 1L << k : -1L << k; + } + } + throw new AssertionError(); + } + long accum = 1L; + while (true) { + switch (k) { + case 0: { + return accum; + } + case 1: { + return LongMath.checkedMultiply(accum, b); + } + } + if ((k & 1) != 0) { + accum = LongMath.checkedMultiply(accum, b); + } + if ((k >>= 1) <= 0) continue; + MathPreconditions.checkNoOverflow(b <= 3037000499L); + b *= b; + } + } + + @GwtIncompatible(value="TODO") + public static long factorial(int n) { + MathPreconditions.checkNonNegative("n", n); + return n < factorials.length ? factorials[n] : Long.MAX_VALUE; + } + + public static long binomial(int n, int k) { + MathPreconditions.checkNonNegative("n", n); + MathPreconditions.checkNonNegative("k", k); + Preconditions.checkArgument(k <= n, "k (%s) > n (%s)", k, n); + if (k > n >> 1) { + k = n - k; + } + switch (k) { + case 0: { + return 1L; + } + case 1: { + return n; + } + } + if (n < factorials.length) { + return factorials[n] / (factorials[k] * factorials[n - k]); + } + if (k >= biggestBinomials.length || n > biggestBinomials[k]) { + return Long.MAX_VALUE; + } + if (k < biggestSimpleBinomials.length && n <= biggestSimpleBinomials[k]) { + long result = n--; + for (int i = 2; i <= k; ++i) { + result *= (long)n; + result /= (long)i; + --n; + } + return result; + } + int nBits = LongMath.log2(n, RoundingMode.CEILING); + long result = 1L; + long numerator = n--; + long denominator = 1L; + int numeratorBits = nBits; + int i = 2; + while (i <= k) { + if (numeratorBits + nBits < 63) { + numerator *= (long)n; + denominator *= (long)i; + numeratorBits += nBits; + } else { + result = LongMath.multiplyFraction(result, numerator, denominator); + numerator = n; + denominator = i; + numeratorBits = nBits; + } + ++i; + --n; + } + return LongMath.multiplyFraction(result, numerator, denominator); + } + + static long multiplyFraction(long x, long numerator, long denominator) { + if (x == 1L) { + return numerator / denominator; + } + long commonDivisor = LongMath.gcd(x, denominator); + return (x /= commonDivisor) * (numerator / (denominator /= commonDivisor)); + } + + static boolean fitsInInt(long x) { + return (long)((int)x) == x; + } + + public static long mean(long x, long y) { + return (x & y) + ((x ^ y) >> 1); + } + + private LongMath() { + } +} diff --git a/src/com/google/common/math/MathPreconditions.java b/src/com/google/common/math/MathPreconditions.java new file mode 100644 index 0000000..fd98314 --- /dev/null +++ b/src/com/google/common/math/MathPreconditions.java @@ -0,0 +1,95 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.math; + +import com.google.common.annotations.GwtCompatible; +import java.math.BigInteger; +import javax.annotation.Nullable; + +@GwtCompatible +final class MathPreconditions { + static int checkPositive(@Nullable String role, int x) { + if (x <= 0) { + String string = String.valueOf(String.valueOf(role)); + int n = x; + throw new IllegalArgumentException(new StringBuilder(26 + string.length()).append(string).append(" (").append(n).append(") must be > 0").toString()); + } + return x; + } + + static long checkPositive(@Nullable String role, long x) { + if (x <= 0L) { + String string = String.valueOf(String.valueOf(role)); + long l = x; + throw new IllegalArgumentException(new StringBuilder(35 + string.length()).append(string).append(" (").append(l).append(") must be > 0").toString()); + } + return x; + } + + static BigInteger checkPositive(@Nullable String role, BigInteger x) { + if (x.signum() <= 0) { + String string = String.valueOf(String.valueOf(role)); + String string2 = String.valueOf(String.valueOf(x)); + throw new IllegalArgumentException(new StringBuilder(15 + string.length() + string2.length()).append(string).append(" (").append(string2).append(") must be > 0").toString()); + } + return x; + } + + static int checkNonNegative(@Nullable String role, int x) { + if (x < 0) { + String string = String.valueOf(String.valueOf(role)); + int n = x; + throw new IllegalArgumentException(new StringBuilder(27 + string.length()).append(string).append(" (").append(n).append(") must be >= 0").toString()); + } + return x; + } + + static long checkNonNegative(@Nullable String role, long x) { + if (x < 0L) { + String string = String.valueOf(String.valueOf(role)); + long l = x; + throw new IllegalArgumentException(new StringBuilder(36 + string.length()).append(string).append(" (").append(l).append(") must be >= 0").toString()); + } + return x; + } + + static BigInteger checkNonNegative(@Nullable String role, BigInteger x) { + if (x.signum() < 0) { + String string = String.valueOf(String.valueOf(role)); + String string2 = String.valueOf(String.valueOf(x)); + throw new IllegalArgumentException(new StringBuilder(16 + string.length() + string2.length()).append(string).append(" (").append(string2).append(") must be >= 0").toString()); + } + return x; + } + + static double checkNonNegative(@Nullable String role, double x) { + if (!(x >= 0.0)) { + String string = String.valueOf(String.valueOf(role)); + double d = x; + throw new IllegalArgumentException(new StringBuilder(40 + string.length()).append(string).append(" (").append(d).append(") must be >= 0").toString()); + } + return x; + } + + static void checkRoundingUnnecessary(boolean condition) { + if (!condition) { + throw new ArithmeticException("mode was UNNECESSARY, but rounding was necessary"); + } + } + + static void checkInRange(boolean condition) { + if (!condition) { + throw new ArithmeticException("not in range"); + } + } + + static void checkNoOverflow(boolean condition) { + if (!condition) { + throw new ArithmeticException("overflow"); + } + } + + private MathPreconditions() { + } +} diff --git a/src/com/google/common/math/package-info.java b/src/com/google/common/math/package-info.java new file mode 100644 index 0000000..f28b532 --- /dev/null +++ b/src/com/google/common/math/package-info.java @@ -0,0 +1,8 @@ +/* + * Decompiled with CFR 0.152. + */ +@ParametersAreNonnullByDefault +package com.google.common.math; + +import javax.annotation.ParametersAreNonnullByDefault; + diff --git a/src/com/google/common/net/HostAndPort.java b/src/com/google/common/net/HostAndPort.java new file mode 100644 index 0000000..5f9b747 --- /dev/null +++ b/src/com/google/common/net/HostAndPort.java @@ -0,0 +1,158 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.net; + +import com.google.common.annotations.Beta; +import com.google.common.annotations.GwtCompatible; +import com.google.common.base.Objects; +import com.google.common.base.Preconditions; +import com.google.common.base.Strings; +import java.io.Serializable; +import javax.annotation.Nullable; +import javax.annotation.concurrent.Immutable; + +@Beta +@Immutable +@GwtCompatible +public final class HostAndPort +implements Serializable { + private static final int NO_PORT = -1; + private final String host; + private final int port; + private final boolean hasBracketlessColons; + private static final long serialVersionUID = 0L; + + private HostAndPort(String host, int port, boolean hasBracketlessColons) { + this.host = host; + this.port = port; + this.hasBracketlessColons = hasBracketlessColons; + } + + public String getHostText() { + return this.host; + } + + public boolean hasPort() { + return this.port >= 0; + } + + public int getPort() { + Preconditions.checkState(this.hasPort()); + return this.port; + } + + public int getPortOrDefault(int defaultPort) { + return this.hasPort() ? this.port : defaultPort; + } + + public static HostAndPort fromParts(String host, int port) { + Preconditions.checkArgument(HostAndPort.isValidPort(port), "Port out of range: %s", port); + HostAndPort parsedHost = HostAndPort.fromString(host); + Preconditions.checkArgument(!parsedHost.hasPort(), "Host has a port: %s", host); + return new HostAndPort(parsedHost.host, port, parsedHost.hasBracketlessColons); + } + + public static HostAndPort fromHost(String host) { + HostAndPort parsedHost = HostAndPort.fromString(host); + Preconditions.checkArgument(!parsedHost.hasPort(), "Host has a port: %s", host); + return parsedHost; + } + + public static HostAndPort fromString(String hostPortString) { + String host; + Preconditions.checkNotNull(hostPortString); + String portString = null; + boolean hasBracketlessColons = false; + if (hostPortString.startsWith("[")) { + String[] hostAndPort = HostAndPort.getHostAndPortFromBracketedHost(hostPortString); + host = hostAndPort[0]; + portString = hostAndPort[1]; + } else { + int colonPos = hostPortString.indexOf(58); + if (colonPos >= 0 && hostPortString.indexOf(58, colonPos + 1) == -1) { + host = hostPortString.substring(0, colonPos); + portString = hostPortString.substring(colonPos + 1); + } else { + host = hostPortString; + hasBracketlessColons = colonPos >= 0; + } + } + int port = -1; + if (!Strings.isNullOrEmpty(portString)) { + Preconditions.checkArgument(!portString.startsWith("+"), "Unparseable port number: %s", hostPortString); + try { + port = Integer.parseInt(portString); + } + catch (NumberFormatException e) { + String string = String.valueOf(hostPortString); + throw new IllegalArgumentException(string.length() != 0 ? "Unparseable port number: ".concat(string) : new String("Unparseable port number: ")); + } + Preconditions.checkArgument(HostAndPort.isValidPort(port), "Port number out of range: %s", hostPortString); + } + return new HostAndPort(host, port, hasBracketlessColons); + } + + private static String[] getHostAndPortFromBracketedHost(String hostPortString) { + int colonIndex = 0; + int closeBracketIndex = 0; + Preconditions.checkArgument(hostPortString.charAt(0) == '[', "Bracketed host-port string must start with a bracket: %s", hostPortString); + colonIndex = hostPortString.indexOf(58); + closeBracketIndex = hostPortString.lastIndexOf(93); + Preconditions.checkArgument(colonIndex > -1 && closeBracketIndex > colonIndex, "Invalid bracketed host/port: %s", hostPortString); + String host = hostPortString.substring(1, closeBracketIndex); + if (closeBracketIndex + 1 == hostPortString.length()) { + return new String[]{host, ""}; + } + Preconditions.checkArgument(hostPortString.charAt(closeBracketIndex + 1) == ':', "Only a colon may follow a close bracket: %s", hostPortString); + for (int i = closeBracketIndex + 2; i < hostPortString.length(); ++i) { + Preconditions.checkArgument(Character.isDigit(hostPortString.charAt(i)), "Port must be numeric: %s", hostPortString); + } + return new String[]{host, hostPortString.substring(closeBracketIndex + 2)}; + } + + public HostAndPort withDefaultPort(int defaultPort) { + Preconditions.checkArgument(HostAndPort.isValidPort(defaultPort)); + if (this.hasPort() || this.port == defaultPort) { + return this; + } + return new HostAndPort(this.host, defaultPort, this.hasBracketlessColons); + } + + public HostAndPort requireBracketsForIPv6() { + Preconditions.checkArgument(!this.hasBracketlessColons, "Possible bracketless IPv6 literal: %s", this.host); + return this; + } + + public boolean equals(@Nullable Object other) { + if (this == other) { + return true; + } + if (other instanceof HostAndPort) { + HostAndPort that = (HostAndPort)other; + return Objects.equal(this.host, that.host) && this.port == that.port && this.hasBracketlessColons == that.hasBracketlessColons; + } + return false; + } + + public int hashCode() { + return Objects.hashCode(this.host, this.port, this.hasBracketlessColons); + } + + public String toString() { + StringBuilder builder = new StringBuilder(this.host.length() + 8); + if (this.host.indexOf(58) >= 0) { + builder.append('[').append(this.host).append(']'); + } else { + builder.append(this.host); + } + if (this.hasPort()) { + builder.append(':').append(this.port); + } + return builder.toString(); + } + + private static boolean isValidPort(int port) { + return port >= 0 && port <= 65535; + } +} diff --git a/src/com/google/common/net/HostSpecifier.java b/src/com/google/common/net/HostSpecifier.java new file mode 100644 index 0000000..7ca3e4b --- /dev/null +++ b/src/com/google/common/net/HostSpecifier.java @@ -0,0 +1,85 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.net; + +import com.google.common.annotations.Beta; +import com.google.common.base.Preconditions; +import com.google.common.net.HostAndPort; +import com.google.common.net.InetAddresses; +import com.google.common.net.InternetDomainName; +import java.net.InetAddress; +import java.text.ParseException; +import javax.annotation.Nullable; + +@Beta +public final class HostSpecifier { + private final String canonicalForm; + + private HostSpecifier(String canonicalForm) { + this.canonicalForm = canonicalForm; + } + + public static HostSpecifier fromValid(String specifier) { + HostAndPort parsedHost = HostAndPort.fromString(specifier); + Preconditions.checkArgument(!parsedHost.hasPort()); + String host = parsedHost.getHostText(); + InetAddress addr = null; + try { + addr = InetAddresses.forString(host); + } + catch (IllegalArgumentException e) { + // empty catch block + } + if (addr != null) { + return new HostSpecifier(InetAddresses.toUriString(addr)); + } + InternetDomainName domain = InternetDomainName.from(host); + if (domain.hasPublicSuffix()) { + return new HostSpecifier(domain.toString()); + } + String string = String.valueOf(host); + throw new IllegalArgumentException(string.length() != 0 ? "Domain name does not have a recognized public suffix: ".concat(string) : new String("Domain name does not have a recognized public suffix: ")); + } + + public static HostSpecifier from(String specifier) throws ParseException { + try { + return HostSpecifier.fromValid(specifier); + } + catch (IllegalArgumentException e) { + String string = String.valueOf(specifier); + ParseException parseException = new ParseException(string.length() != 0 ? "Invalid host specifier: ".concat(string) : new String("Invalid host specifier: "), 0); + parseException.initCause(e); + throw parseException; + } + } + + public static boolean isValid(String specifier) { + try { + HostSpecifier.fromValid(specifier); + return true; + } + catch (IllegalArgumentException e) { + return false; + } + } + + public boolean equals(@Nullable Object other) { + if (this == other) { + return true; + } + if (other instanceof HostSpecifier) { + HostSpecifier that = (HostSpecifier)other; + return this.canonicalForm.equals(that.canonicalForm); + } + return false; + } + + public int hashCode() { + return this.canonicalForm.hashCode(); + } + + public String toString() { + return this.canonicalForm; + } +} diff --git a/src/com/google/common/net/HttpHeaders.java b/src/com/google/common/net/HttpHeaders.java new file mode 100644 index 0000000..23d7c12 --- /dev/null +++ b/src/com/google/common/net/HttpHeaders.java @@ -0,0 +1,98 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.net; + +import com.google.common.annotations.Beta; +import com.google.common.annotations.GwtCompatible; + +@GwtCompatible +public final class HttpHeaders { + public static final String CACHE_CONTROL = "Cache-Control"; + public static final String CONTENT_LENGTH = "Content-Length"; + public static final String CONTENT_TYPE = "Content-Type"; + public static final String DATE = "Date"; + public static final String PRAGMA = "Pragma"; + public static final String VIA = "Via"; + public static final String WARNING = "Warning"; + public static final String ACCEPT = "Accept"; + public static final String ACCEPT_CHARSET = "Accept-Charset"; + public static final String ACCEPT_ENCODING = "Accept-Encoding"; + public static final String ACCEPT_LANGUAGE = "Accept-Language"; + public static final String ACCESS_CONTROL_REQUEST_HEADERS = "Access-Control-Request-Headers"; + public static final String ACCESS_CONTROL_REQUEST_METHOD = "Access-Control-Request-Method"; + public static final String AUTHORIZATION = "Authorization"; + public static final String CONNECTION = "Connection"; + public static final String COOKIE = "Cookie"; + public static final String EXPECT = "Expect"; + public static final String FROM = "From"; + @Beta + public static final String FOLLOW_ONLY_WHEN_PRERENDER_SHOWN = "Follow-Only-When-Prerender-Shown"; + public static final String HOST = "Host"; + public static final String IF_MATCH = "If-Match"; + public static final String IF_MODIFIED_SINCE = "If-Modified-Since"; + public static final String IF_NONE_MATCH = "If-None-Match"; + public static final String IF_RANGE = "If-Range"; + public static final String IF_UNMODIFIED_SINCE = "If-Unmodified-Since"; + public static final String LAST_EVENT_ID = "Last-Event-ID"; + public static final String MAX_FORWARDS = "Max-Forwards"; + public static final String ORIGIN = "Origin"; + public static final String PROXY_AUTHORIZATION = "Proxy-Authorization"; + public static final String RANGE = "Range"; + public static final String REFERER = "Referer"; + public static final String TE = "TE"; + public static final String UPGRADE = "Upgrade"; + public static final String USER_AGENT = "User-Agent"; + public static final String ACCEPT_RANGES = "Accept-Ranges"; + public static final String ACCESS_CONTROL_ALLOW_HEADERS = "Access-Control-Allow-Headers"; + public static final String ACCESS_CONTROL_ALLOW_METHODS = "Access-Control-Allow-Methods"; + public static final String ACCESS_CONTROL_ALLOW_ORIGIN = "Access-Control-Allow-Origin"; + public static final String ACCESS_CONTROL_ALLOW_CREDENTIALS = "Access-Control-Allow-Credentials"; + public static final String ACCESS_CONTROL_EXPOSE_HEADERS = "Access-Control-Expose-Headers"; + public static final String ACCESS_CONTROL_MAX_AGE = "Access-Control-Max-Age"; + public static final String AGE = "Age"; + public static final String ALLOW = "Allow"; + public static final String CONTENT_DISPOSITION = "Content-Disposition"; + public static final String CONTENT_ENCODING = "Content-Encoding"; + public static final String CONTENT_LANGUAGE = "Content-Language"; + public static final String CONTENT_LOCATION = "Content-Location"; + public static final String CONTENT_MD5 = "Content-MD5"; + public static final String CONTENT_RANGE = "Content-Range"; + public static final String CONTENT_SECURITY_POLICY = "Content-Security-Policy"; + public static final String CONTENT_SECURITY_POLICY_REPORT_ONLY = "Content-Security-Policy-Report-Only"; + public static final String ETAG = "ETag"; + public static final String EXPIRES = "Expires"; + public static final String LAST_MODIFIED = "Last-Modified"; + public static final String LINK = "Link"; + public static final String LOCATION = "Location"; + public static final String P3P = "P3P"; + public static final String PROXY_AUTHENTICATE = "Proxy-Authenticate"; + public static final String REFRESH = "Refresh"; + public static final String RETRY_AFTER = "Retry-After"; + public static final String SERVER = "Server"; + public static final String SET_COOKIE = "Set-Cookie"; + public static final String SET_COOKIE2 = "Set-Cookie2"; + public static final String STRICT_TRANSPORT_SECURITY = "Strict-Transport-Security"; + public static final String TIMING_ALLOW_ORIGIN = "Timing-Allow-Origin"; + public static final String TRAILER = "Trailer"; + public static final String TRANSFER_ENCODING = "Transfer-Encoding"; + public static final String VARY = "Vary"; + public static final String WWW_AUTHENTICATE = "WWW-Authenticate"; + public static final String DNT = "DNT"; + public static final String X_CONTENT_TYPE_OPTIONS = "X-Content-Type-Options"; + public static final String X_DO_NOT_TRACK = "X-Do-Not-Track"; + public static final String X_FORWARDED_FOR = "X-Forwarded-For"; + public static final String X_FORWARDED_PROTO = "X-Forwarded-Proto"; + public static final String X_FRAME_OPTIONS = "X-Frame-Options"; + public static final String X_POWERED_BY = "X-Powered-By"; + @Beta + public static final String PUBLIC_KEY_PINS = "Public-Key-Pins"; + @Beta + public static final String PUBLIC_KEY_PINS_REPORT_ONLY = "Public-Key-Pins-Report-Only"; + public static final String X_REQUESTED_WITH = "X-Requested-With"; + public static final String X_USER_IP = "X-User-IP"; + public static final String X_XSS_PROTECTION = "X-XSS-Protection"; + + private HttpHeaders() { + } +} diff --git a/src/com/google/common/net/InetAddresses.java b/src/com/google/common/net/InetAddresses.java new file mode 100644 index 0000000..cf0ddbc --- /dev/null +++ b/src/com/google/common/net/InetAddresses.java @@ -0,0 +1,480 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.net; + +import com.google.common.annotations.Beta; +import com.google.common.base.MoreObjects; +import com.google.common.base.Preconditions; +import com.google.common.hash.Hashing; +import com.google.common.io.ByteStreams; +import com.google.common.primitives.Ints; +import java.net.Inet4Address; +import java.net.Inet6Address; +import java.net.InetAddress; +import java.net.UnknownHostException; +import java.nio.ByteBuffer; +import java.util.Arrays; +import javax.annotation.Nullable; + +@Beta +public final class InetAddresses { + private static final int IPV4_PART_COUNT = 4; + private static final int IPV6_PART_COUNT = 8; + private static final Inet4Address LOOPBACK4 = (Inet4Address)InetAddresses.forString("127.0.0.1"); + private static final Inet4Address ANY4 = (Inet4Address)InetAddresses.forString("0.0.0.0"); + + private InetAddresses() { + } + + private static Inet4Address getInet4Address(byte[] bytes) { + Preconditions.checkArgument(bytes.length == 4, "Byte array has invalid length for an IPv4 address: %s != 4.", bytes.length); + return (Inet4Address)InetAddresses.bytesToInetAddress(bytes); + } + + public static InetAddress forString(String ipString) { + byte[] addr = InetAddresses.ipStringToBytes(ipString); + if (addr == null) { + throw new IllegalArgumentException(String.format("'%s' is not an IP string literal.", ipString)); + } + return InetAddresses.bytesToInetAddress(addr); + } + + public static boolean isInetAddress(String ipString) { + return InetAddresses.ipStringToBytes(ipString) != null; + } + + private static byte[] ipStringToBytes(String ipString) { + boolean hasColon = false; + boolean hasDot = false; + for (int i = 0; i < ipString.length(); ++i) { + char c = ipString.charAt(i); + if (c == '.') { + hasDot = true; + continue; + } + if (c == ':') { + if (hasDot) { + return null; + } + hasColon = true; + continue; + } + if (Character.digit(c, 16) != -1) continue; + return null; + } + if (hasColon) { + if (hasDot && (ipString = InetAddresses.convertDottedQuadToHex(ipString)) == null) { + return null; + } + return InetAddresses.textToNumericFormatV6(ipString); + } + if (hasDot) { + return InetAddresses.textToNumericFormatV4(ipString); + } + return null; + } + + private static byte[] textToNumericFormatV4(String ipString) { + String[] address = ipString.split("\\.", 5); + if (address.length != 4) { + return null; + } + byte[] bytes = new byte[4]; + try { + for (int i = 0; i < bytes.length; ++i) { + bytes[i] = InetAddresses.parseOctet(address[i]); + } + } + catch (NumberFormatException ex) { + return null; + } + return bytes; + } + + private static byte[] textToNumericFormatV6(String ipString) { + int partsLo; + int partsHi; + String[] parts = ipString.split(":", 10); + if (parts.length < 3 || parts.length > 9) { + return null; + } + int skipIndex = -1; + for (int i = 1; i < parts.length - 1; ++i) { + if (parts[i].length() != 0) continue; + if (skipIndex >= 0) { + return null; + } + skipIndex = i; + } + if (skipIndex >= 0) { + partsHi = skipIndex; + partsLo = parts.length - skipIndex - 1; + if (parts[0].length() == 0 && --partsHi != 0) { + return null; + } + if (parts[parts.length - 1].length() == 0 && --partsLo != 0) { + return null; + } + } else { + partsHi = parts.length; + partsLo = 0; + } + int partsSkipped = 8 - (partsHi + partsLo); + if (!(skipIndex < 0 ? partsSkipped == 0 : partsSkipped >= 1)) { + return null; + } + ByteBuffer rawBytes = ByteBuffer.allocate(16); + try { + int i; + for (i = 0; i < partsHi; ++i) { + rawBytes.putShort(InetAddresses.parseHextet(parts[i])); + } + for (i = 0; i < partsSkipped; ++i) { + rawBytes.putShort((short)0); + } + for (i = partsLo; i > 0; --i) { + rawBytes.putShort(InetAddresses.parseHextet(parts[parts.length - i])); + } + } + catch (NumberFormatException ex) { + return null; + } + return rawBytes.array(); + } + + private static String convertDottedQuadToHex(String ipString) { + int lastColon = ipString.lastIndexOf(58); + String initialPart = ipString.substring(0, lastColon + 1); + String dottedQuad = ipString.substring(lastColon + 1); + byte[] quad = InetAddresses.textToNumericFormatV4(dottedQuad); + if (quad == null) { + return null; + } + String penultimate = Integer.toHexString((quad[0] & 0xFF) << 8 | quad[1] & 0xFF); + String ultimate = Integer.toHexString((quad[2] & 0xFF) << 8 | quad[3] & 0xFF); + String string = String.valueOf(String.valueOf(initialPart)); + String string2 = String.valueOf(String.valueOf(penultimate)); + String string3 = String.valueOf(String.valueOf(ultimate)); + return new StringBuilder(1 + string.length() + string2.length() + string3.length()).append(string).append(string2).append(":").append(string3).toString(); + } + + private static byte parseOctet(String ipPart) { + int octet = Integer.parseInt(ipPart); + if (octet > 255 || ipPart.startsWith("0") && ipPart.length() > 1) { + throw new NumberFormatException(); + } + return (byte)octet; + } + + private static short parseHextet(String ipPart) { + int hextet = Integer.parseInt(ipPart, 16); + if (hextet > 65535) { + throw new NumberFormatException(); + } + return (short)hextet; + } + + private static InetAddress bytesToInetAddress(byte[] addr) { + try { + return InetAddress.getByAddress(addr); + } + catch (UnknownHostException e) { + throw new AssertionError((Object)e); + } + } + + public static String toAddrString(InetAddress ip) { + Preconditions.checkNotNull(ip); + if (ip instanceof Inet4Address) { + return ip.getHostAddress(); + } + Preconditions.checkArgument(ip instanceof Inet6Address); + byte[] bytes = ip.getAddress(); + int[] hextets = new int[8]; + for (int i = 0; i < hextets.length; ++i) { + hextets[i] = Ints.fromBytes((byte)0, (byte)0, bytes[2 * i], bytes[2 * i + 1]); + } + InetAddresses.compressLongestRunOfZeroes(hextets); + return InetAddresses.hextetsToIPv6String(hextets); + } + + private static void compressLongestRunOfZeroes(int[] hextets) { + int bestRunStart = -1; + int bestRunLength = -1; + int runStart = -1; + for (int i = 0; i < hextets.length + 1; ++i) { + if (i < hextets.length && hextets[i] == 0) { + if (runStart >= 0) continue; + runStart = i; + continue; + } + if (runStart < 0) continue; + int runLength = i - runStart; + if (runLength > bestRunLength) { + bestRunStart = runStart; + bestRunLength = runLength; + } + runStart = -1; + } + if (bestRunLength >= 2) { + Arrays.fill(hextets, bestRunStart, bestRunStart + bestRunLength, -1); + } + } + + private static String hextetsToIPv6String(int[] hextets) { + StringBuilder buf = new StringBuilder(39); + boolean lastWasNumber = false; + for (int i = 0; i < hextets.length; ++i) { + boolean thisIsNumber; + boolean bl = thisIsNumber = hextets[i] >= 0; + if (thisIsNumber) { + if (lastWasNumber) { + buf.append(':'); + } + buf.append(Integer.toHexString(hextets[i])); + } else if (i == 0 || lastWasNumber) { + buf.append("::"); + } + lastWasNumber = thisIsNumber; + } + return buf.toString(); + } + + public static String toUriString(InetAddress ip) { + if (ip instanceof Inet6Address) { + String string = String.valueOf(String.valueOf(InetAddresses.toAddrString(ip))); + return new StringBuilder(2 + string.length()).append("[").append(string).append("]").toString(); + } + return InetAddresses.toAddrString(ip); + } + + public static InetAddress forUriString(String hostAddr) { + int expectBytes; + String ipString; + Preconditions.checkNotNull(hostAddr); + if (hostAddr.startsWith("[") && hostAddr.endsWith("]")) { + ipString = hostAddr.substring(1, hostAddr.length() - 1); + expectBytes = 16; + } else { + ipString = hostAddr; + expectBytes = 4; + } + byte[] addr = InetAddresses.ipStringToBytes(ipString); + if (addr == null || addr.length != expectBytes) { + throw new IllegalArgumentException(String.format("Not a valid URI IP literal: '%s'", hostAddr)); + } + return InetAddresses.bytesToInetAddress(addr); + } + + public static boolean isUriInetAddress(String ipString) { + try { + InetAddresses.forUriString(ipString); + return true; + } + catch (IllegalArgumentException e) { + return false; + } + } + + public static boolean isCompatIPv4Address(Inet6Address ip) { + if (!ip.isIPv4CompatibleAddress()) { + return false; + } + byte[] bytes = ip.getAddress(); + return bytes[12] != 0 || bytes[13] != 0 || bytes[14] != 0 || bytes[15] != 0 && bytes[15] != 1; + } + + public static Inet4Address getCompatIPv4Address(Inet6Address ip) { + Preconditions.checkArgument(InetAddresses.isCompatIPv4Address(ip), "Address '%s' is not IPv4-compatible.", InetAddresses.toAddrString(ip)); + return InetAddresses.getInet4Address(Arrays.copyOfRange(ip.getAddress(), 12, 16)); + } + + public static boolean is6to4Address(Inet6Address ip) { + byte[] bytes = ip.getAddress(); + return bytes[0] == 32 && bytes[1] == 2; + } + + public static Inet4Address get6to4IPv4Address(Inet6Address ip) { + Preconditions.checkArgument(InetAddresses.is6to4Address(ip), "Address '%s' is not a 6to4 address.", InetAddresses.toAddrString(ip)); + return InetAddresses.getInet4Address(Arrays.copyOfRange(ip.getAddress(), 2, 6)); + } + + public static boolean isTeredoAddress(Inet6Address ip) { + byte[] bytes = ip.getAddress(); + return bytes[0] == 32 && bytes[1] == 1 && bytes[2] == 0 && bytes[3] == 0; + } + + public static TeredoInfo getTeredoInfo(Inet6Address ip) { + Preconditions.checkArgument(InetAddresses.isTeredoAddress(ip), "Address '%s' is not a Teredo address.", InetAddresses.toAddrString(ip)); + byte[] bytes = ip.getAddress(); + Inet4Address server = InetAddresses.getInet4Address(Arrays.copyOfRange(bytes, 4, 8)); + int flags = ByteStreams.newDataInput(bytes, 8).readShort() & 0xFFFF; + int port = ~ByteStreams.newDataInput(bytes, 10).readShort() & 0xFFFF; + byte[] clientBytes = Arrays.copyOfRange(bytes, 12, 16); + for (int i = 0; i < clientBytes.length; ++i) { + clientBytes[i] = ~clientBytes[i]; + } + Inet4Address client = InetAddresses.getInet4Address(clientBytes); + return new TeredoInfo(server, client, port, flags); + } + + public static boolean isIsatapAddress(Inet6Address ip) { + if (InetAddresses.isTeredoAddress(ip)) { + return false; + } + byte[] bytes = ip.getAddress(); + if ((bytes[8] | 3) != 3) { + return false; + } + return bytes[9] == 0 && bytes[10] == 94 && bytes[11] == -2; + } + + public static Inet4Address getIsatapIPv4Address(Inet6Address ip) { + Preconditions.checkArgument(InetAddresses.isIsatapAddress(ip), "Address '%s' is not an ISATAP address.", InetAddresses.toAddrString(ip)); + return InetAddresses.getInet4Address(Arrays.copyOfRange(ip.getAddress(), 12, 16)); + } + + public static boolean hasEmbeddedIPv4ClientAddress(Inet6Address ip) { + return InetAddresses.isCompatIPv4Address(ip) || InetAddresses.is6to4Address(ip) || InetAddresses.isTeredoAddress(ip); + } + + public static Inet4Address getEmbeddedIPv4ClientAddress(Inet6Address ip) { + if (InetAddresses.isCompatIPv4Address(ip)) { + return InetAddresses.getCompatIPv4Address(ip); + } + if (InetAddresses.is6to4Address(ip)) { + return InetAddresses.get6to4IPv4Address(ip); + } + if (InetAddresses.isTeredoAddress(ip)) { + return InetAddresses.getTeredoInfo(ip).getClient(); + } + throw new IllegalArgumentException(String.format("'%s' has no embedded IPv4 address.", InetAddresses.toAddrString(ip))); + } + + public static boolean isMappedIPv4Address(String ipString) { + byte[] bytes = InetAddresses.ipStringToBytes(ipString); + if (bytes != null && bytes.length == 16) { + int i; + for (i = 0; i < 10; ++i) { + if (bytes[i] == 0) continue; + return false; + } + for (i = 10; i < 12; ++i) { + if (bytes[i] == -1) continue; + return false; + } + return true; + } + return false; + } + + public static Inet4Address getCoercedIPv4Address(InetAddress ip) { + if (ip instanceof Inet4Address) { + return (Inet4Address)ip; + } + byte[] bytes = ip.getAddress(); + boolean leadingBytesOfZero = true; + for (int i = 0; i < 15; ++i) { + if (bytes[i] == 0) continue; + leadingBytesOfZero = false; + break; + } + if (leadingBytesOfZero && bytes[15] == 1) { + return LOOPBACK4; + } + if (leadingBytesOfZero && bytes[15] == 0) { + return ANY4; + } + Inet6Address ip6 = (Inet6Address)ip; + long addressAsLong = 0L; + addressAsLong = InetAddresses.hasEmbeddedIPv4ClientAddress(ip6) ? (long)InetAddresses.getEmbeddedIPv4ClientAddress(ip6).hashCode() : ByteBuffer.wrap(ip6.getAddress(), 0, 8).getLong(); + int coercedHash = Hashing.murmur3_32().hashLong(addressAsLong).asInt(); + if ((coercedHash |= 0xE0000000) == -1) { + coercedHash = -2; + } + return InetAddresses.getInet4Address(Ints.toByteArray(coercedHash)); + } + + public static int coerceToInteger(InetAddress ip) { + return ByteStreams.newDataInput(InetAddresses.getCoercedIPv4Address(ip).getAddress()).readInt(); + } + + public static Inet4Address fromInteger(int address) { + return InetAddresses.getInet4Address(Ints.toByteArray(address)); + } + + public static InetAddress fromLittleEndianByteArray(byte[] addr) throws UnknownHostException { + byte[] reversed = new byte[addr.length]; + for (int i = 0; i < addr.length; ++i) { + reversed[i] = addr[addr.length - i - 1]; + } + return InetAddress.getByAddress(reversed); + } + + public static InetAddress decrement(InetAddress address) { + int i; + byte[] addr = address.getAddress(); + for (i = addr.length - 1; i >= 0 && addr[i] == 0; --i) { + addr[i] = -1; + } + Preconditions.checkArgument(i >= 0, "Decrementing %s would wrap.", address); + int n = i; + addr[n] = (byte)(addr[n] - 1); + return InetAddresses.bytesToInetAddress(addr); + } + + public static InetAddress increment(InetAddress address) { + int i; + byte[] addr = address.getAddress(); + for (i = addr.length - 1; i >= 0 && addr[i] == -1; --i) { + addr[i] = 0; + } + Preconditions.checkArgument(i >= 0, "Incrementing %s would wrap.", address); + int n = i; + addr[n] = (byte)(addr[n] + 1); + return InetAddresses.bytesToInetAddress(addr); + } + + public static boolean isMaximum(InetAddress address) { + byte[] addr = address.getAddress(); + for (int i = 0; i < addr.length; ++i) { + if (addr[i] == -1) continue; + return false; + } + return true; + } + + @Beta + public static final class TeredoInfo { + private final Inet4Address server; + private final Inet4Address client; + private final int port; + private final int flags; + + public TeredoInfo(@Nullable Inet4Address server, @Nullable Inet4Address client, int port, int flags) { + Preconditions.checkArgument(port >= 0 && port <= 65535, "port '%s' is out of range (0 <= port <= 0xffff)", port); + Preconditions.checkArgument(flags >= 0 && flags <= 65535, "flags '%s' is out of range (0 <= flags <= 0xffff)", flags); + this.server = MoreObjects.firstNonNull(server, ANY4); + this.client = MoreObjects.firstNonNull(client, ANY4); + this.port = port; + this.flags = flags; + } + + public Inet4Address getServer() { + return this.server; + } + + public Inet4Address getClient() { + return this.client; + } + + public int getPort() { + return this.port; + } + + public int getFlags() { + return this.flags; + } + } +} diff --git a/src/com/google/common/net/InternetDomainName.java b/src/com/google/common/net/InternetDomainName.java new file mode 100644 index 0000000..1f8cd28 --- /dev/null +++ b/src/com/google/common/net/InternetDomainName.java @@ -0,0 +1,179 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.net; + +import com.google.common.annotations.Beta; +import com.google.common.annotations.GwtCompatible; +import com.google.common.base.Ascii; +import com.google.common.base.CharMatcher; +import com.google.common.base.Joiner; +import com.google.common.base.Preconditions; +import com.google.common.base.Splitter; +import com.google.common.collect.ImmutableList; +import com.google.thirdparty.publicsuffix.PublicSuffixPatterns; +import java.util.List; +import javax.annotation.Nullable; + +@Beta +@GwtCompatible +public final class InternetDomainName { + private static final CharMatcher DOTS_MATCHER = CharMatcher.anyOf(".\u3002\uff0e\uff61"); + private static final Splitter DOT_SPLITTER = Splitter.on('.'); + private static final Joiner DOT_JOINER = Joiner.on('.'); + private static final int NO_PUBLIC_SUFFIX_FOUND = -1; + private static final String DOT_REGEX = "\\."; + private static final int MAX_PARTS = 127; + private static final int MAX_LENGTH = 253; + private static final int MAX_DOMAIN_PART_LENGTH = 63; + private final String name; + private final ImmutableList parts; + private final int publicSuffixIndex; + private static final CharMatcher DASH_MATCHER = CharMatcher.anyOf("-_"); + private static final CharMatcher PART_CHAR_MATCHER = CharMatcher.JAVA_LETTER_OR_DIGIT.or(DASH_MATCHER); + + InternetDomainName(String name) { + name = Ascii.toLowerCase(DOTS_MATCHER.replaceFrom((CharSequence)name, '.')); + if (name.endsWith(".")) { + name = name.substring(0, name.length() - 1); + } + Preconditions.checkArgument(name.length() <= 253, "Domain name too long: '%s':", name); + this.name = name; + this.parts = ImmutableList.copyOf(DOT_SPLITTER.split(name)); + Preconditions.checkArgument(this.parts.size() <= 127, "Domain has too many parts: '%s'", name); + Preconditions.checkArgument(InternetDomainName.validateSyntax(this.parts), "Not a valid domain name: '%s'", name); + this.publicSuffixIndex = this.findPublicSuffix(); + } + + private int findPublicSuffix() { + int partsSize = this.parts.size(); + for (int i = 0; i < partsSize; ++i) { + String ancestorName = DOT_JOINER.join(this.parts.subList(i, partsSize)); + if (PublicSuffixPatterns.EXACT.containsKey(ancestorName)) { + return i; + } + if (PublicSuffixPatterns.EXCLUDED.containsKey(ancestorName)) { + return i + 1; + } + if (!InternetDomainName.matchesWildcardPublicSuffix(ancestorName)) continue; + return i; + } + return -1; + } + + public static InternetDomainName from(String domain) { + return new InternetDomainName(Preconditions.checkNotNull(domain)); + } + + private static boolean validateSyntax(List parts) { + int lastIndex = parts.size() - 1; + if (!InternetDomainName.validatePart(parts.get(lastIndex), true)) { + return false; + } + for (int i = 0; i < lastIndex; ++i) { + String part = parts.get(i); + if (InternetDomainName.validatePart(part, false)) continue; + return false; + } + return true; + } + + private static boolean validatePart(String part, boolean isFinalPart) { + if (part.length() < 1 || part.length() > 63) { + return false; + } + String asciiChars = CharMatcher.ASCII.retainFrom(part); + if (!PART_CHAR_MATCHER.matchesAllOf(asciiChars)) { + return false; + } + if (DASH_MATCHER.matches(part.charAt(0)) || DASH_MATCHER.matches(part.charAt(part.length() - 1))) { + return false; + } + return !isFinalPart || !CharMatcher.DIGIT.matches(part.charAt(0)); + } + + public ImmutableList parts() { + return this.parts; + } + + public boolean isPublicSuffix() { + return this.publicSuffixIndex == 0; + } + + public boolean hasPublicSuffix() { + return this.publicSuffixIndex != -1; + } + + public InternetDomainName publicSuffix() { + return this.hasPublicSuffix() ? this.ancestor(this.publicSuffixIndex) : null; + } + + public boolean isUnderPublicSuffix() { + return this.publicSuffixIndex > 0; + } + + public boolean isTopPrivateDomain() { + return this.publicSuffixIndex == 1; + } + + public InternetDomainName topPrivateDomain() { + if (this.isTopPrivateDomain()) { + return this; + } + Preconditions.checkState(this.isUnderPublicSuffix(), "Not under a public suffix: %s", this.name); + return this.ancestor(this.publicSuffixIndex - 1); + } + + public boolean hasParent() { + return this.parts.size() > 1; + } + + public InternetDomainName parent() { + Preconditions.checkState(this.hasParent(), "Domain '%s' has no parent", this.name); + return this.ancestor(1); + } + + private InternetDomainName ancestor(int levels) { + return InternetDomainName.from(DOT_JOINER.join(this.parts.subList(levels, this.parts.size()))); + } + + public InternetDomainName child(String leftParts) { + String string = String.valueOf(String.valueOf(Preconditions.checkNotNull(leftParts))); + String string2 = String.valueOf(String.valueOf(this.name)); + return InternetDomainName.from(new StringBuilder(1 + string.length() + string2.length()).append(string).append(".").append(string2).toString()); + } + + public static boolean isValid(String name) { + try { + InternetDomainName.from(name); + return true; + } + catch (IllegalArgumentException e) { + return false; + } + } + + private static boolean matchesWildcardPublicSuffix(String domain) { + String[] pieces = domain.split(DOT_REGEX, 2); + return pieces.length == 2 && PublicSuffixPatterns.UNDER.containsKey(pieces[1]); + } + + public String toString() { + return this.name; + } + + public boolean equals(@Nullable Object object) { + if (object == this) { + return true; + } + if (object instanceof InternetDomainName) { + InternetDomainName that = (InternetDomainName)object; + return this.name.equals(that.name); + } + return false; + } + + public int hashCode() { + return this.name.hashCode(); + } +} diff --git a/src/com/google/common/net/MediaType.java b/src/com/google/common/net/MediaType.java new file mode 100644 index 0000000..d010234 --- /dev/null +++ b/src/com/google/common/net/MediaType.java @@ -0,0 +1,398 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.net; + +import com.google.common.annotations.Beta; +import com.google.common.annotations.GwtCompatible; +import com.google.common.base.Ascii; +import com.google.common.base.CharMatcher; +import com.google.common.base.Charsets; +import com.google.common.base.Function; +import com.google.common.base.Joiner; +import com.google.common.base.MoreObjects; +import com.google.common.base.Objects; +import com.google.common.base.Optional; +import com.google.common.base.Preconditions; +import com.google.common.collect.ImmutableListMultimap; +import com.google.common.collect.ImmutableMultiset; +import com.google.common.collect.ImmutableSet; +import com.google.common.collect.Iterables; +import com.google.common.collect.ListMultimap; +import com.google.common.collect.Maps; +import com.google.common.collect.Multimap; +import com.google.common.collect.Multimaps; +import java.nio.charset.Charset; +import java.util.AbstractCollection; +import java.util.Collection; +import java.util.Map; +import javax.annotation.Nullable; +import javax.annotation.concurrent.Immutable; + +@Beta +@GwtCompatible +@Immutable +public final class MediaType { + private static final String CHARSET_ATTRIBUTE = "charset"; + private static final ImmutableListMultimap UTF_8_CONSTANT_PARAMETERS = ImmutableListMultimap.of("charset", Ascii.toLowerCase(Charsets.UTF_8.name())); + private static final CharMatcher TOKEN_MATCHER = CharMatcher.ASCII.and(CharMatcher.JAVA_ISO_CONTROL.negate()).and(CharMatcher.isNot(' ')).and(CharMatcher.noneOf("()<>@,;:\\\"/[]?=")); + private static final CharMatcher QUOTED_TEXT_MATCHER = CharMatcher.ASCII.and(CharMatcher.noneOf("\"\\\r")); + private static final CharMatcher LINEAR_WHITE_SPACE = CharMatcher.anyOf(" \t\r\n"); + private static final String APPLICATION_TYPE = "application"; + private static final String AUDIO_TYPE = "audio"; + private static final String IMAGE_TYPE = "image"; + private static final String TEXT_TYPE = "text"; + private static final String VIDEO_TYPE = "video"; + private static final String WILDCARD = "*"; + private static final Map KNOWN_TYPES = Maps.newHashMap(); + public static final MediaType ANY_TYPE = MediaType.createConstant("*", "*"); + public static final MediaType ANY_TEXT_TYPE = MediaType.createConstant("text", "*"); + public static final MediaType ANY_IMAGE_TYPE = MediaType.createConstant("image", "*"); + public static final MediaType ANY_AUDIO_TYPE = MediaType.createConstant("audio", "*"); + public static final MediaType ANY_VIDEO_TYPE = MediaType.createConstant("video", "*"); + public static final MediaType ANY_APPLICATION_TYPE = MediaType.createConstant("application", "*"); + public static final MediaType CACHE_MANIFEST_UTF_8 = MediaType.createConstantUtf8("text", "cache-manifest"); + public static final MediaType CSS_UTF_8 = MediaType.createConstantUtf8("text", "css"); + public static final MediaType CSV_UTF_8 = MediaType.createConstantUtf8("text", "csv"); + public static final MediaType HTML_UTF_8 = MediaType.createConstantUtf8("text", "html"); + public static final MediaType I_CALENDAR_UTF_8 = MediaType.createConstantUtf8("text", "calendar"); + public static final MediaType PLAIN_TEXT_UTF_8 = MediaType.createConstantUtf8("text", "plain"); + public static final MediaType TEXT_JAVASCRIPT_UTF_8 = MediaType.createConstantUtf8("text", "javascript"); + public static final MediaType TSV_UTF_8 = MediaType.createConstantUtf8("text", "tab-separated-values"); + public static final MediaType VCARD_UTF_8 = MediaType.createConstantUtf8("text", "vcard"); + public static final MediaType WML_UTF_8 = MediaType.createConstantUtf8("text", "vnd.wap.wml"); + public static final MediaType XML_UTF_8 = MediaType.createConstantUtf8("text", "xml"); + public static final MediaType BMP = MediaType.createConstant("image", "bmp"); + public static final MediaType CRW = MediaType.createConstant("image", "x-canon-crw"); + public static final MediaType GIF = MediaType.createConstant("image", "gif"); + public static final MediaType ICO = MediaType.createConstant("image", "vnd.microsoft.icon"); + public static final MediaType JPEG = MediaType.createConstant("image", "jpeg"); + public static final MediaType PNG = MediaType.createConstant("image", "png"); + public static final MediaType PSD = MediaType.createConstant("image", "vnd.adobe.photoshop"); + public static final MediaType SVG_UTF_8 = MediaType.createConstantUtf8("image", "svg+xml"); + public static final MediaType TIFF = MediaType.createConstant("image", "tiff"); + public static final MediaType WEBP = MediaType.createConstant("image", "webp"); + public static final MediaType MP4_AUDIO = MediaType.createConstant("audio", "mp4"); + public static final MediaType MPEG_AUDIO = MediaType.createConstant("audio", "mpeg"); + public static final MediaType OGG_AUDIO = MediaType.createConstant("audio", "ogg"); + public static final MediaType WEBM_AUDIO = MediaType.createConstant("audio", "webm"); + public static final MediaType MP4_VIDEO = MediaType.createConstant("video", "mp4"); + public static final MediaType MPEG_VIDEO = MediaType.createConstant("video", "mpeg"); + public static final MediaType OGG_VIDEO = MediaType.createConstant("video", "ogg"); + public static final MediaType QUICKTIME = MediaType.createConstant("video", "quicktime"); + public static final MediaType WEBM_VIDEO = MediaType.createConstant("video", "webm"); + public static final MediaType WMV = MediaType.createConstant("video", "x-ms-wmv"); + public static final MediaType APPLICATION_XML_UTF_8 = MediaType.createConstantUtf8("application", "xml"); + public static final MediaType ATOM_UTF_8 = MediaType.createConstantUtf8("application", "atom+xml"); + public static final MediaType BZIP2 = MediaType.createConstant("application", "x-bzip2"); + public static final MediaType EOT = MediaType.createConstant("application", "vnd.ms-fontobject"); + public static final MediaType EPUB = MediaType.createConstant("application", "epub+zip"); + public static final MediaType FORM_DATA = MediaType.createConstant("application", "x-www-form-urlencoded"); + public static final MediaType KEY_ARCHIVE = MediaType.createConstant("application", "pkcs12"); + public static final MediaType APPLICATION_BINARY = MediaType.createConstant("application", "binary"); + public static final MediaType GZIP = MediaType.createConstant("application", "x-gzip"); + public static final MediaType JAVASCRIPT_UTF_8 = MediaType.createConstantUtf8("application", "javascript"); + public static final MediaType JSON_UTF_8 = MediaType.createConstantUtf8("application", "json"); + public static final MediaType KML = MediaType.createConstant("application", "vnd.google-earth.kml+xml"); + public static final MediaType KMZ = MediaType.createConstant("application", "vnd.google-earth.kmz"); + public static final MediaType MBOX = MediaType.createConstant("application", "mbox"); + public static final MediaType APPLE_MOBILE_CONFIG = MediaType.createConstant("application", "x-apple-aspen-config"); + public static final MediaType MICROSOFT_EXCEL = MediaType.createConstant("application", "vnd.ms-excel"); + public static final MediaType MICROSOFT_POWERPOINT = MediaType.createConstant("application", "vnd.ms-powerpoint"); + public static final MediaType MICROSOFT_WORD = MediaType.createConstant("application", "msword"); + public static final MediaType OCTET_STREAM = MediaType.createConstant("application", "octet-stream"); + public static final MediaType OGG_CONTAINER = MediaType.createConstant("application", "ogg"); + public static final MediaType OOXML_DOCUMENT = MediaType.createConstant("application", "vnd.openxmlformats-officedocument.wordprocessingml.document"); + public static final MediaType OOXML_PRESENTATION = MediaType.createConstant("application", "vnd.openxmlformats-officedocument.presentationml.presentation"); + public static final MediaType OOXML_SHEET = MediaType.createConstant("application", "vnd.openxmlformats-officedocument.spreadsheetml.sheet"); + public static final MediaType OPENDOCUMENT_GRAPHICS = MediaType.createConstant("application", "vnd.oasis.opendocument.graphics"); + public static final MediaType OPENDOCUMENT_PRESENTATION = MediaType.createConstant("application", "vnd.oasis.opendocument.presentation"); + public static final MediaType OPENDOCUMENT_SPREADSHEET = MediaType.createConstant("application", "vnd.oasis.opendocument.spreadsheet"); + public static final MediaType OPENDOCUMENT_TEXT = MediaType.createConstant("application", "vnd.oasis.opendocument.text"); + public static final MediaType PDF = MediaType.createConstant("application", "pdf"); + public static final MediaType POSTSCRIPT = MediaType.createConstant("application", "postscript"); + public static final MediaType PROTOBUF = MediaType.createConstant("application", "protobuf"); + public static final MediaType RDF_XML_UTF_8 = MediaType.createConstantUtf8("application", "rdf+xml"); + public static final MediaType RTF_UTF_8 = MediaType.createConstantUtf8("application", "rtf"); + public static final MediaType SFNT = MediaType.createConstant("application", "font-sfnt"); + public static final MediaType SHOCKWAVE_FLASH = MediaType.createConstant("application", "x-shockwave-flash"); + public static final MediaType SKETCHUP = MediaType.createConstant("application", "vnd.sketchup.skp"); + public static final MediaType TAR = MediaType.createConstant("application", "x-tar"); + public static final MediaType WOFF = MediaType.createConstant("application", "font-woff"); + public static final MediaType XHTML_UTF_8 = MediaType.createConstantUtf8("application", "xhtml+xml"); + public static final MediaType XRD_UTF_8 = MediaType.createConstantUtf8("application", "xrd+xml"); + public static final MediaType ZIP = MediaType.createConstant("application", "zip"); + private final String type; + private final String subtype; + private final ImmutableListMultimap parameters; + private static final Joiner.MapJoiner PARAMETER_JOINER = Joiner.on("; ").withKeyValueSeparator("="); + + private static MediaType createConstant(String type, String subtype) { + return MediaType.addKnownType(new MediaType(type, subtype, ImmutableListMultimap.of())); + } + + private static MediaType createConstantUtf8(String type, String subtype) { + return MediaType.addKnownType(new MediaType(type, subtype, UTF_8_CONSTANT_PARAMETERS)); + } + + private static MediaType addKnownType(MediaType mediaType) { + KNOWN_TYPES.put(mediaType, mediaType); + return mediaType; + } + + private MediaType(String type, String subtype, ImmutableListMultimap parameters) { + this.type = type; + this.subtype = subtype; + this.parameters = parameters; + } + + public String type() { + return this.type; + } + + public String subtype() { + return this.subtype; + } + + public ImmutableListMultimap parameters() { + return this.parameters; + } + + private Map> parametersAsMap() { + return Maps.transformValues(this.parameters.asMap(), new Function, ImmutableMultiset>(){ + + @Override + public ImmutableMultiset apply(Collection input) { + return ImmutableMultiset.copyOf(input); + } + }); + } + + public Optional charset() { + ImmutableSet charsetValues = ImmutableSet.copyOf(this.parameters.get((Object)CHARSET_ATTRIBUTE)); + switch (charsetValues.size()) { + case 0: { + return Optional.absent(); + } + case 1: { + return Optional.of(Charset.forName((String)Iterables.getOnlyElement(charsetValues))); + } + } + String string = String.valueOf(String.valueOf(charsetValues)); + throw new IllegalStateException(new StringBuilder(33 + string.length()).append("Multiple charset values defined: ").append(string).toString()); + } + + public MediaType withoutParameters() { + return this.parameters.isEmpty() ? this : MediaType.create(this.type, this.subtype); + } + + public MediaType withParameters(Multimap parameters) { + return MediaType.create(this.type, this.subtype, parameters); + } + + public MediaType withParameter(String attribute, String value) { + Preconditions.checkNotNull(attribute); + Preconditions.checkNotNull(value); + String normalizedAttribute = MediaType.normalizeToken(attribute); + ImmutableListMultimap.Builder builder = ImmutableListMultimap.builder(); + for (Map.Entry entry : this.parameters.entries()) { + String key = (String)entry.getKey(); + if (normalizedAttribute.equals(key)) continue; + builder.put(key, entry.getValue()); + } + builder.put(normalizedAttribute, MediaType.normalizeParameterValue(normalizedAttribute, value)); + MediaType mediaType = new MediaType(this.type, this.subtype, (ImmutableListMultimap)builder.build()); + return MoreObjects.firstNonNull(KNOWN_TYPES.get(mediaType), mediaType); + } + + public MediaType withCharset(Charset charset) { + Preconditions.checkNotNull(charset); + return this.withParameter(CHARSET_ATTRIBUTE, charset.name()); + } + + public boolean hasWildcard() { + return WILDCARD.equals(this.type) || WILDCARD.equals(this.subtype); + } + + public boolean is(MediaType mediaTypeRange) { + return !(!mediaTypeRange.type.equals(WILDCARD) && !mediaTypeRange.type.equals(this.type) || !mediaTypeRange.subtype.equals(WILDCARD) && !mediaTypeRange.subtype.equals(this.subtype) || !((AbstractCollection)this.parameters.entries()).containsAll(mediaTypeRange.parameters.entries())); + } + + public static MediaType create(String type, String subtype) { + return MediaType.create(type, subtype, ImmutableListMultimap.of()); + } + + static MediaType createApplicationType(String subtype) { + return MediaType.create(APPLICATION_TYPE, subtype); + } + + static MediaType createAudioType(String subtype) { + return MediaType.create(AUDIO_TYPE, subtype); + } + + static MediaType createImageType(String subtype) { + return MediaType.create(IMAGE_TYPE, subtype); + } + + static MediaType createTextType(String subtype) { + return MediaType.create(TEXT_TYPE, subtype); + } + + static MediaType createVideoType(String subtype) { + return MediaType.create(VIDEO_TYPE, subtype); + } + + private static MediaType create(String type, String subtype, Multimap parameters) { + Preconditions.checkNotNull(type); + Preconditions.checkNotNull(subtype); + Preconditions.checkNotNull(parameters); + String normalizedType = MediaType.normalizeToken(type); + String normalizedSubtype = MediaType.normalizeToken(subtype); + Preconditions.checkArgument(!WILDCARD.equals(normalizedType) || WILDCARD.equals(normalizedSubtype), "A wildcard type cannot be used with a non-wildcard subtype"); + ImmutableListMultimap.Builder builder = ImmutableListMultimap.builder(); + for (Map.Entry entry : parameters.entries()) { + String attribute = MediaType.normalizeToken(entry.getKey()); + builder.put(attribute, MediaType.normalizeParameterValue(attribute, entry.getValue())); + } + MediaType mediaType = new MediaType(normalizedType, normalizedSubtype, (ImmutableListMultimap)builder.build()); + return MoreObjects.firstNonNull(KNOWN_TYPES.get(mediaType), mediaType); + } + + private static String normalizeToken(String token) { + Preconditions.checkArgument(TOKEN_MATCHER.matchesAllOf(token)); + return Ascii.toLowerCase(token); + } + + private static String normalizeParameterValue(String attribute, String value) { + return CHARSET_ATTRIBUTE.equals(attribute) ? Ascii.toLowerCase(value) : value; + } + + public static MediaType parse(String input) { + Preconditions.checkNotNull(input); + Tokenizer tokenizer = new Tokenizer(input); + try { + String type = tokenizer.consumeToken(TOKEN_MATCHER); + tokenizer.consumeCharacter('/'); + String subtype = tokenizer.consumeToken(TOKEN_MATCHER); + ImmutableListMultimap.Builder parameters = ImmutableListMultimap.builder(); + while (tokenizer.hasMore()) { + String value; + tokenizer.consumeCharacter(';'); + tokenizer.consumeTokenIfPresent(LINEAR_WHITE_SPACE); + String attribute = tokenizer.consumeToken(TOKEN_MATCHER); + tokenizer.consumeCharacter('='); + if ('\"' == tokenizer.previewChar()) { + tokenizer.consumeCharacter('\"'); + StringBuilder valueBuilder = new StringBuilder(); + while ('\"' != tokenizer.previewChar()) { + if ('\\' == tokenizer.previewChar()) { + tokenizer.consumeCharacter('\\'); + valueBuilder.append(tokenizer.consumeCharacter(CharMatcher.ASCII)); + continue; + } + valueBuilder.append(tokenizer.consumeToken(QUOTED_TEXT_MATCHER)); + } + value = valueBuilder.toString(); + tokenizer.consumeCharacter('\"'); + } else { + value = tokenizer.consumeToken(TOKEN_MATCHER); + } + parameters.put(attribute, value); + } + return MediaType.create(type, subtype, parameters.build()); + } + catch (IllegalStateException e) { + String string = String.valueOf(String.valueOf(input)); + throw new IllegalArgumentException(new StringBuilder(18 + string.length()).append("Could not parse '").append(string).append("'").toString(), e); + } + } + + public boolean equals(@Nullable Object obj) { + if (obj == this) { + return true; + } + if (obj instanceof MediaType) { + MediaType that = (MediaType)obj; + return this.type.equals(that.type) && this.subtype.equals(that.subtype) && this.parametersAsMap().equals(that.parametersAsMap()); + } + return false; + } + + public int hashCode() { + return Objects.hashCode(this.type, this.subtype, this.parametersAsMap()); + } + + public String toString() { + StringBuilder builder = new StringBuilder().append(this.type).append('/').append(this.subtype); + if (!this.parameters.isEmpty()) { + builder.append("; "); + ListMultimap quotedParameters = Multimaps.transformValues(this.parameters, new Function(){ + + @Override + public String apply(String value) { + return TOKEN_MATCHER.matchesAllOf(value) ? value : MediaType.escapeAndQuote(value); + } + }); + PARAMETER_JOINER.appendTo(builder, (Iterable>)quotedParameters.entries()); + } + return builder.toString(); + } + + private static String escapeAndQuote(String value) { + StringBuilder escaped = new StringBuilder(value.length() + 16).append('\"'); + for (char ch : value.toCharArray()) { + if (ch == '\r' || ch == '\\' || ch == '\"') { + escaped.append('\\'); + } + escaped.append(ch); + } + return escaped.append('\"').toString(); + } + + private static final class Tokenizer { + final String input; + int position = 0; + + Tokenizer(String input) { + this.input = input; + } + + String consumeTokenIfPresent(CharMatcher matcher) { + Preconditions.checkState(this.hasMore()); + int startPosition = this.position; + this.position = matcher.negate().indexIn(this.input, startPosition); + return this.hasMore() ? this.input.substring(startPosition, this.position) : this.input.substring(startPosition); + } + + String consumeToken(CharMatcher matcher) { + int startPosition = this.position; + String token = this.consumeTokenIfPresent(matcher); + Preconditions.checkState(this.position != startPosition); + return token; + } + + char consumeCharacter(CharMatcher matcher) { + Preconditions.checkState(this.hasMore()); + char c = this.previewChar(); + Preconditions.checkState(matcher.matches(c)); + ++this.position; + return c; + } + + char consumeCharacter(char c) { + Preconditions.checkState(this.hasMore()); + Preconditions.checkState(this.previewChar() == c); + ++this.position; + return c; + } + + char previewChar() { + Preconditions.checkState(this.hasMore()); + return this.input.charAt(this.position); + } + + boolean hasMore() { + return this.position >= 0 && this.position < this.input.length(); + } + } +} diff --git a/src/com/google/common/net/PercentEscaper.java b/src/com/google/common/net/PercentEscaper.java new file mode 100644 index 0000000..8cbb3df --- /dev/null +++ b/src/com/google/common/net/PercentEscaper.java @@ -0,0 +1,125 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.net; + +import com.google.common.annotations.Beta; +import com.google.common.annotations.GwtCompatible; +import com.google.common.base.Preconditions; +import com.google.common.escape.UnicodeEscaper; + +@Beta +@GwtCompatible +public final class PercentEscaper +extends UnicodeEscaper { + private static final char[] PLUS_SIGN = new char[]{'+'}; + private static final char[] UPPER_HEX_DIGITS = "0123456789ABCDEF".toCharArray(); + private final boolean plusForSpace; + private final boolean[] safeOctets; + + public PercentEscaper(String safeChars, boolean plusForSpace) { + Preconditions.checkNotNull(safeChars); + if (safeChars.matches(".*[0-9A-Za-z].*")) { + throw new IllegalArgumentException("Alphanumeric characters are always 'safe' and should not be explicitly specified"); + } + safeChars = String.valueOf(safeChars).concat("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"); + if (plusForSpace && safeChars.contains(" ")) { + throw new IllegalArgumentException("plusForSpace cannot be specified when space is a 'safe' character"); + } + this.plusForSpace = plusForSpace; + this.safeOctets = PercentEscaper.createSafeOctets(safeChars); + } + + private static boolean[] createSafeOctets(String safeChars) { + char[] safeCharArray; + int maxChar = -1; + for (char c : safeCharArray = safeChars.toCharArray()) { + maxChar = Math.max(c, maxChar); + } + boolean[] octets = new boolean[maxChar + 1]; + for (char c : safeCharArray) { + octets[c] = true; + } + return octets; + } + + @Override + protected int nextEscapeIndex(CharSequence csq, int index, int end) { + char c; + Preconditions.checkNotNull(csq); + while (index < end && (c = csq.charAt(index)) < this.safeOctets.length && this.safeOctets[c]) { + ++index; + } + return index; + } + + @Override + public String escape(String s) { + Preconditions.checkNotNull(s); + int slen = s.length(); + for (int index = 0; index < slen; ++index) { + char c = s.charAt(index); + if (c < this.safeOctets.length && this.safeOctets[c]) continue; + return this.escapeSlow(s, index); + } + return s; + } + + @Override + protected char[] escape(int cp) { + if (cp < this.safeOctets.length && this.safeOctets[cp]) { + return null; + } + if (cp == 32 && this.plusForSpace) { + return PLUS_SIGN; + } + if (cp <= 127) { + char[] dest = new char[3]; + dest[0] = 37; + dest[2] = UPPER_HEX_DIGITS[cp & 0xF]; + dest[1] = UPPER_HEX_DIGITS[cp >>> 4]; + return dest; + } + if (cp <= 2047) { + char[] dest = new char[6]; + dest[0] = 37; + dest[3] = 37; + dest[5] = UPPER_HEX_DIGITS[cp & 0xF]; + dest[4] = UPPER_HEX_DIGITS[8 | (cp >>>= 4) & 3]; + dest[2] = UPPER_HEX_DIGITS[(cp >>>= 2) & 0xF]; + dest[1] = UPPER_HEX_DIGITS[0xC | (cp >>>= 4)]; + return dest; + } + if (cp <= 65535) { + char[] dest = new char[9]; + dest[0] = 37; + dest[1] = 69; + dest[3] = 37; + dest[6] = 37; + dest[8] = UPPER_HEX_DIGITS[cp & 0xF]; + dest[7] = UPPER_HEX_DIGITS[8 | (cp >>>= 4) & 3]; + dest[5] = UPPER_HEX_DIGITS[(cp >>>= 2) & 0xF]; + dest[4] = UPPER_HEX_DIGITS[8 | (cp >>>= 4) & 3]; + dest[2] = UPPER_HEX_DIGITS[cp >>>= 2]; + return dest; + } + if (cp <= 0x10FFFF) { + char[] dest = new char[12]; + dest[0] = 37; + dest[1] = 70; + dest[3] = 37; + dest[6] = 37; + dest[9] = 37; + dest[11] = UPPER_HEX_DIGITS[cp & 0xF]; + dest[10] = UPPER_HEX_DIGITS[8 | (cp >>>= 4) & 3]; + dest[8] = UPPER_HEX_DIGITS[(cp >>>= 2) & 0xF]; + dest[7] = UPPER_HEX_DIGITS[8 | (cp >>>= 4) & 3]; + dest[5] = UPPER_HEX_DIGITS[(cp >>>= 2) & 0xF]; + dest[4] = UPPER_HEX_DIGITS[8 | (cp >>>= 4) & 3]; + dest[2] = UPPER_HEX_DIGITS[(cp >>>= 2) & 7]; + return dest; + } + int n = cp; + throw new IllegalArgumentException(new StringBuilder(43).append("Invalid unicode character value ").append(n).toString()); + } +} diff --git a/src/com/google/common/net/UrlEscapers.java b/src/com/google/common/net/UrlEscapers.java new file mode 100644 index 0000000..20dddb4 --- /dev/null +++ b/src/com/google/common/net/UrlEscapers.java @@ -0,0 +1,34 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.net; + +import com.google.common.annotations.Beta; +import com.google.common.annotations.GwtCompatible; +import com.google.common.escape.Escaper; +import com.google.common.net.PercentEscaper; + +@Beta +@GwtCompatible +public final class UrlEscapers { + static final String URL_FORM_PARAMETER_OTHER_SAFE_CHARS = "-_.*"; + static final String URL_PATH_OTHER_SAFE_CHARS_LACKING_PLUS = "-._~!$'()*,;&=@:"; + private static final Escaper URL_FORM_PARAMETER_ESCAPER = new PercentEscaper("-_.*", true); + private static final Escaper URL_PATH_SEGMENT_ESCAPER = new PercentEscaper("-._~!$'()*,;&=@:+", false); + private static final Escaper URL_FRAGMENT_ESCAPER = new PercentEscaper("-._~!$'()*,;&=@:+/?", false); + + private UrlEscapers() { + } + + public static Escaper urlFormParameterEscaper() { + return URL_FORM_PARAMETER_ESCAPER; + } + + public static Escaper urlPathSegmentEscaper() { + return URL_PATH_SEGMENT_ESCAPER; + } + + public static Escaper urlFragmentEscaper() { + return URL_FRAGMENT_ESCAPER; + } +} diff --git a/src/com/google/common/net/package-info.java b/src/com/google/common/net/package-info.java new file mode 100644 index 0000000..d8c4ceb --- /dev/null +++ b/src/com/google/common/net/package-info.java @@ -0,0 +1,8 @@ +/* + * Decompiled with CFR 0.152. + */ +@ParametersAreNonnullByDefault +package com.google.common.net; + +import javax.annotation.ParametersAreNonnullByDefault; + diff --git a/src/com/google/common/primitives/Booleans.java b/src/com/google/common/primitives/Booleans.java new file mode 100644 index 0000000..22e8277 --- /dev/null +++ b/src/com/google/common/primitives/Booleans.java @@ -0,0 +1,290 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.primitives; + +import com.google.common.annotations.Beta; +import com.google.common.annotations.GwtCompatible; +import com.google.common.base.Preconditions; +import java.io.Serializable; +import java.util.AbstractList; +import java.util.Collection; +import java.util.Collections; +import java.util.Comparator; +import java.util.List; +import java.util.RandomAccess; + +@GwtCompatible +public final class Booleans { + private Booleans() { + } + + public static int hashCode(boolean value) { + return value ? 1231 : 1237; + } + + public static int compare(boolean a, boolean b) { + return a == b ? 0 : (a ? 1 : -1); + } + + public static boolean contains(boolean[] array, boolean target) { + for (boolean value : array) { + if (value != target) continue; + return true; + } + return false; + } + + public static int indexOf(boolean[] array, boolean target) { + return Booleans.indexOf(array, target, 0, array.length); + } + + private static int indexOf(boolean[] array, boolean target, int start, int end) { + for (int i = start; i < end; ++i) { + if (array[i] != target) continue; + return i; + } + return -1; + } + + public static int indexOf(boolean[] array, boolean[] target) { + Preconditions.checkNotNull(array, "array"); + Preconditions.checkNotNull(target, "target"); + if (target.length == 0) { + return 0; + } + block0: for (int i = 0; i < array.length - target.length + 1; ++i) { + for (int j = 0; j < target.length; ++j) { + if (array[i + j] != target[j]) continue block0; + } + return i; + } + return -1; + } + + public static int lastIndexOf(boolean[] array, boolean target) { + return Booleans.lastIndexOf(array, target, 0, array.length); + } + + private static int lastIndexOf(boolean[] array, boolean target, int start, int end) { + for (int i = end - 1; i >= start; --i) { + if (array[i] != target) continue; + return i; + } + return -1; + } + + public static boolean[] concat(boolean[] ... arrays) { + int length = 0; + for (boolean[] array : arrays) { + length += array.length; + } + boolean[] result = new boolean[length]; + int pos = 0; + for (boolean[] array : arrays) { + System.arraycopy(array, 0, result, pos, array.length); + pos += array.length; + } + return result; + } + + public static boolean[] ensureCapacity(boolean[] array, int minLength, int padding) { + Preconditions.checkArgument(minLength >= 0, "Invalid minLength: %s", minLength); + Preconditions.checkArgument(padding >= 0, "Invalid padding: %s", padding); + return array.length < minLength ? Booleans.copyOf(array, minLength + padding) : array; + } + + private static boolean[] copyOf(boolean[] original, int length) { + boolean[] copy = new boolean[length]; + System.arraycopy(original, 0, copy, 0, Math.min(original.length, length)); + return copy; + } + + public static String join(String separator, boolean ... array) { + Preconditions.checkNotNull(separator); + if (array.length == 0) { + return ""; + } + StringBuilder builder = new StringBuilder(array.length * 7); + builder.append(array[0]); + for (int i = 1; i < array.length; ++i) { + builder.append(separator).append(array[i]); + } + return builder.toString(); + } + + public static Comparator lexicographicalComparator() { + return LexicographicalComparator.INSTANCE; + } + + public static boolean[] toArray(Collection collection) { + if (collection instanceof BooleanArrayAsList) { + return ((BooleanArrayAsList)collection).toBooleanArray(); + } + Object[] boxedArray = collection.toArray(); + int len = boxedArray.length; + boolean[] array = new boolean[len]; + for (int i = 0; i < len; ++i) { + array[i] = (Boolean)Preconditions.checkNotNull(boxedArray[i]); + } + return array; + } + + public static List asList(boolean ... backingArray) { + if (backingArray.length == 0) { + return Collections.emptyList(); + } + return new BooleanArrayAsList(backingArray); + } + + @Beta + public static int countTrue(boolean ... values) { + int count = 0; + for (boolean value : values) { + if (!value) continue; + ++count; + } + return count; + } + + @GwtCompatible + private static class BooleanArrayAsList + extends AbstractList + implements RandomAccess, + Serializable { + final boolean[] array; + final int start; + final int end; + private static final long serialVersionUID = 0L; + + BooleanArrayAsList(boolean[] array) { + this(array, 0, array.length); + } + + BooleanArrayAsList(boolean[] array, int start, int end) { + this.array = array; + this.start = start; + this.end = end; + } + + @Override + public int size() { + return this.end - this.start; + } + + @Override + public boolean isEmpty() { + return false; + } + + @Override + public Boolean get(int index) { + Preconditions.checkElementIndex(index, this.size()); + return this.array[this.start + index]; + } + + @Override + public boolean contains(Object target) { + return target instanceof Boolean && Booleans.indexOf(this.array, (Boolean)target, this.start, this.end) != -1; + } + + @Override + public int indexOf(Object target) { + int i; + if (target instanceof Boolean && (i = Booleans.indexOf(this.array, (Boolean)target, this.start, this.end)) >= 0) { + return i - this.start; + } + return -1; + } + + @Override + public int lastIndexOf(Object target) { + int i; + if (target instanceof Boolean && (i = Booleans.lastIndexOf(this.array, (Boolean)target, this.start, this.end)) >= 0) { + return i - this.start; + } + return -1; + } + + @Override + public Boolean set(int index, Boolean element) { + Preconditions.checkElementIndex(index, this.size()); + boolean oldValue = this.array[this.start + index]; + this.array[this.start + index] = Preconditions.checkNotNull(element); + return oldValue; + } + + @Override + public List subList(int fromIndex, int toIndex) { + int size = this.size(); + Preconditions.checkPositionIndexes(fromIndex, toIndex, size); + if (fromIndex == toIndex) { + return Collections.emptyList(); + } + return new BooleanArrayAsList(this.array, this.start + fromIndex, this.start + toIndex); + } + + @Override + public boolean equals(Object object) { + if (object == this) { + return true; + } + if (object instanceof BooleanArrayAsList) { + BooleanArrayAsList that = (BooleanArrayAsList)object; + int size = this.size(); + if (that.size() != size) { + return false; + } + for (int i = 0; i < size; ++i) { + if (this.array[this.start + i] == that.array[that.start + i]) continue; + return false; + } + return true; + } + return super.equals(object); + } + + @Override + public int hashCode() { + int result = 1; + for (int i = this.start; i < this.end; ++i) { + result = 31 * result + Booleans.hashCode(this.array[i]); + } + return result; + } + + @Override + public String toString() { + StringBuilder builder = new StringBuilder(this.size() * 7); + builder.append(this.array[this.start] ? "[true" : "[false"); + for (int i = this.start + 1; i < this.end; ++i) { + builder.append(this.array[i] ? ", true" : ", false"); + } + return builder.append(']').toString(); + } + + boolean[] toBooleanArray() { + int size = this.size(); + boolean[] result = new boolean[size]; + System.arraycopy(this.array, this.start, result, 0, size); + return result; + } + } + + private static enum LexicographicalComparator implements Comparator + { + INSTANCE; + + + @Override + public int compare(boolean[] left, boolean[] right) { + int minLength = Math.min(left.length, right.length); + for (int i = 0; i < minLength; ++i) { + int result = Booleans.compare(left[i], right[i]); + if (result == 0) continue; + return result; + } + return left.length - right.length; + } + } +} diff --git a/src/com/google/common/primitives/Bytes.java b/src/com/google/common/primitives/Bytes.java new file mode 100644 index 0000000..1654f28 --- /dev/null +++ b/src/com/google/common/primitives/Bytes.java @@ -0,0 +1,240 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.primitives; + +import com.google.common.annotations.GwtCompatible; +import com.google.common.base.Preconditions; +import java.io.Serializable; +import java.util.AbstractList; +import java.util.Collection; +import java.util.Collections; +import java.util.List; +import java.util.RandomAccess; + +@GwtCompatible +public final class Bytes { + private Bytes() { + } + + public static int hashCode(byte value) { + return value; + } + + public static boolean contains(byte[] array, byte target) { + for (byte value : array) { + if (value != target) continue; + return true; + } + return false; + } + + public static int indexOf(byte[] array, byte target) { + return Bytes.indexOf(array, target, 0, array.length); + } + + private static int indexOf(byte[] array, byte target, int start, int end) { + for (int i = start; i < end; ++i) { + if (array[i] != target) continue; + return i; + } + return -1; + } + + public static int indexOf(byte[] array, byte[] target) { + Preconditions.checkNotNull(array, "array"); + Preconditions.checkNotNull(target, "target"); + if (target.length == 0) { + return 0; + } + block0: for (int i = 0; i < array.length - target.length + 1; ++i) { + for (int j = 0; j < target.length; ++j) { + if (array[i + j] != target[j]) continue block0; + } + return i; + } + return -1; + } + + public static int lastIndexOf(byte[] array, byte target) { + return Bytes.lastIndexOf(array, target, 0, array.length); + } + + private static int lastIndexOf(byte[] array, byte target, int start, int end) { + for (int i = end - 1; i >= start; --i) { + if (array[i] != target) continue; + return i; + } + return -1; + } + + public static byte[] concat(byte[] ... arrays) { + int length = 0; + for (byte[] array : arrays) { + length += array.length; + } + byte[] result = new byte[length]; + int pos = 0; + for (byte[] array : arrays) { + System.arraycopy(array, 0, result, pos, array.length); + pos += array.length; + } + return result; + } + + public static byte[] ensureCapacity(byte[] array, int minLength, int padding) { + Preconditions.checkArgument(minLength >= 0, "Invalid minLength: %s", minLength); + Preconditions.checkArgument(padding >= 0, "Invalid padding: %s", padding); + return array.length < minLength ? Bytes.copyOf(array, minLength + padding) : array; + } + + private static byte[] copyOf(byte[] original, int length) { + byte[] copy = new byte[length]; + System.arraycopy(original, 0, copy, 0, Math.min(original.length, length)); + return copy; + } + + public static byte[] toArray(Collection collection) { + if (collection instanceof ByteArrayAsList) { + return ((ByteArrayAsList)collection).toByteArray(); + } + Object[] boxedArray = collection.toArray(); + int len = boxedArray.length; + byte[] array = new byte[len]; + for (int i = 0; i < len; ++i) { + array[i] = ((Number)Preconditions.checkNotNull(boxedArray[i])).byteValue(); + } + return array; + } + + public static List asList(byte ... backingArray) { + if (backingArray.length == 0) { + return Collections.emptyList(); + } + return new ByteArrayAsList(backingArray); + } + + @GwtCompatible + private static class ByteArrayAsList + extends AbstractList + implements RandomAccess, + Serializable { + final byte[] array; + final int start; + final int end; + private static final long serialVersionUID = 0L; + + ByteArrayAsList(byte[] array) { + this(array, 0, array.length); + } + + ByteArrayAsList(byte[] array, int start, int end) { + this.array = array; + this.start = start; + this.end = end; + } + + @Override + public int size() { + return this.end - this.start; + } + + @Override + public boolean isEmpty() { + return false; + } + + @Override + public Byte get(int index) { + Preconditions.checkElementIndex(index, this.size()); + return this.array[this.start + index]; + } + + @Override + public boolean contains(Object target) { + return target instanceof Byte && Bytes.indexOf(this.array, (Byte)target, this.start, this.end) != -1; + } + + @Override + public int indexOf(Object target) { + int i; + if (target instanceof Byte && (i = Bytes.indexOf(this.array, (Byte)target, this.start, this.end)) >= 0) { + return i - this.start; + } + return -1; + } + + @Override + public int lastIndexOf(Object target) { + int i; + if (target instanceof Byte && (i = Bytes.lastIndexOf(this.array, (Byte)target, this.start, this.end)) >= 0) { + return i - this.start; + } + return -1; + } + + @Override + public Byte set(int index, Byte element) { + Preconditions.checkElementIndex(index, this.size()); + byte oldValue = this.array[this.start + index]; + this.array[this.start + index] = Preconditions.checkNotNull(element); + return oldValue; + } + + @Override + public List subList(int fromIndex, int toIndex) { + int size = this.size(); + Preconditions.checkPositionIndexes(fromIndex, toIndex, size); + if (fromIndex == toIndex) { + return Collections.emptyList(); + } + return new ByteArrayAsList(this.array, this.start + fromIndex, this.start + toIndex); + } + + @Override + public boolean equals(Object object) { + if (object == this) { + return true; + } + if (object instanceof ByteArrayAsList) { + ByteArrayAsList that = (ByteArrayAsList)object; + int size = this.size(); + if (that.size() != size) { + return false; + } + for (int i = 0; i < size; ++i) { + if (this.array[this.start + i] == that.array[that.start + i]) continue; + return false; + } + return true; + } + return super.equals(object); + } + + @Override + public int hashCode() { + int result = 1; + for (int i = this.start; i < this.end; ++i) { + result = 31 * result + Bytes.hashCode(this.array[i]); + } + return result; + } + + @Override + public String toString() { + StringBuilder builder = new StringBuilder(this.size() * 5); + builder.append('[').append(this.array[this.start]); + for (int i = this.start + 1; i < this.end; ++i) { + builder.append(", ").append(this.array[i]); + } + return builder.append(']').toString(); + } + + byte[] toByteArray() { + int size = this.size(); + byte[] result = new byte[size]; + System.arraycopy(this.array, this.start, result, 0, size); + return result; + } + } +} diff --git a/src/com/google/common/primitives/Chars.java b/src/com/google/common/primitives/Chars.java new file mode 100644 index 0000000..538c072 --- /dev/null +++ b/src/com/google/common/primitives/Chars.java @@ -0,0 +1,338 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.primitives; + +import com.google.common.annotations.GwtCompatible; +import com.google.common.annotations.GwtIncompatible; +import com.google.common.base.Preconditions; +import java.io.Serializable; +import java.util.AbstractList; +import java.util.Collection; +import java.util.Collections; +import java.util.Comparator; +import java.util.List; +import java.util.RandomAccess; + +@GwtCompatible(emulated=true) +public final class Chars { + public static final int BYTES = 2; + + private Chars() { + } + + public static int hashCode(char value) { + return value; + } + + public static char checkedCast(long value) { + char result = (char)value; + if ((long)result != value) { + long l = value; + throw new IllegalArgumentException(new StringBuilder(34).append("Out of range: ").append(l).toString()); + } + return result; + } + + public static char saturatedCast(long value) { + if (value > 65535L) { + return '\uffff'; + } + if (value < 0L) { + return '\u0000'; + } + return (char)value; + } + + public static int compare(char a, char b) { + return a - b; + } + + public static boolean contains(char[] array, char target) { + for (char value : array) { + if (value != target) continue; + return true; + } + return false; + } + + public static int indexOf(char[] array, char target) { + return Chars.indexOf(array, target, 0, array.length); + } + + private static int indexOf(char[] array, char target, int start, int end) { + for (int i = start; i < end; ++i) { + if (array[i] != target) continue; + return i; + } + return -1; + } + + public static int indexOf(char[] array, char[] target) { + Preconditions.checkNotNull(array, "array"); + Preconditions.checkNotNull(target, "target"); + if (target.length == 0) { + return 0; + } + block0: for (int i = 0; i < array.length - target.length + 1; ++i) { + for (int j = 0; j < target.length; ++j) { + if (array[i + j] != target[j]) continue block0; + } + return i; + } + return -1; + } + + public static int lastIndexOf(char[] array, char target) { + return Chars.lastIndexOf(array, target, 0, array.length); + } + + private static int lastIndexOf(char[] array, char target, int start, int end) { + for (int i = end - 1; i >= start; --i) { + if (array[i] != target) continue; + return i; + } + return -1; + } + + public static char min(char ... array) { + Preconditions.checkArgument(array.length > 0); + char min = array[0]; + for (int i = 1; i < array.length; ++i) { + if (array[i] >= min) continue; + min = array[i]; + } + return min; + } + + public static char max(char ... array) { + Preconditions.checkArgument(array.length > 0); + char max = array[0]; + for (int i = 1; i < array.length; ++i) { + if (array[i] <= max) continue; + max = array[i]; + } + return max; + } + + public static char[] concat(char[] ... arrays) { + int length = 0; + for (char[] array : arrays) { + length += array.length; + } + char[] result = new char[length]; + int pos = 0; + for (char[] array : arrays) { + System.arraycopy(array, 0, result, pos, array.length); + pos += array.length; + } + return result; + } + + @GwtIncompatible(value="doesn't work") + public static byte[] toByteArray(char value) { + return new byte[]{(byte)(value >> 8), (byte)value}; + } + + @GwtIncompatible(value="doesn't work") + public static char fromByteArray(byte[] bytes) { + Preconditions.checkArgument(bytes.length >= 2, "array too small: %s < %s", bytes.length, 2); + return Chars.fromBytes(bytes[0], bytes[1]); + } + + @GwtIncompatible(value="doesn't work") + public static char fromBytes(byte b1, byte b2) { + return (char)(b1 << 8 | b2 & 0xFF); + } + + public static char[] ensureCapacity(char[] array, int minLength, int padding) { + Preconditions.checkArgument(minLength >= 0, "Invalid minLength: %s", minLength); + Preconditions.checkArgument(padding >= 0, "Invalid padding: %s", padding); + return array.length < minLength ? Chars.copyOf(array, minLength + padding) : array; + } + + private static char[] copyOf(char[] original, int length) { + char[] copy = new char[length]; + System.arraycopy(original, 0, copy, 0, Math.min(original.length, length)); + return copy; + } + + public static String join(String separator, char ... array) { + Preconditions.checkNotNull(separator); + int len = array.length; + if (len == 0) { + return ""; + } + StringBuilder builder = new StringBuilder(len + separator.length() * (len - 1)); + builder.append(array[0]); + for (int i = 1; i < len; ++i) { + builder.append(separator).append(array[i]); + } + return builder.toString(); + } + + public static Comparator lexicographicalComparator() { + return LexicographicalComparator.INSTANCE; + } + + public static char[] toArray(Collection collection) { + if (collection instanceof CharArrayAsList) { + return ((CharArrayAsList)collection).toCharArray(); + } + Object[] boxedArray = collection.toArray(); + int len = boxedArray.length; + char[] array = new char[len]; + for (int i = 0; i < len; ++i) { + array[i] = ((Character)Preconditions.checkNotNull(boxedArray[i])).charValue(); + } + return array; + } + + public static List asList(char ... backingArray) { + if (backingArray.length == 0) { + return Collections.emptyList(); + } + return new CharArrayAsList(backingArray); + } + + @GwtCompatible + private static class CharArrayAsList + extends AbstractList + implements RandomAccess, + Serializable { + final char[] array; + final int start; + final int end; + private static final long serialVersionUID = 0L; + + CharArrayAsList(char[] array) { + this(array, 0, array.length); + } + + CharArrayAsList(char[] array, int start, int end) { + this.array = array; + this.start = start; + this.end = end; + } + + @Override + public int size() { + return this.end - this.start; + } + + @Override + public boolean isEmpty() { + return false; + } + + @Override + public Character get(int index) { + Preconditions.checkElementIndex(index, this.size()); + return Character.valueOf(this.array[this.start + index]); + } + + @Override + public boolean contains(Object target) { + return target instanceof Character && Chars.indexOf(this.array, ((Character)target).charValue(), this.start, this.end) != -1; + } + + @Override + public int indexOf(Object target) { + int i; + if (target instanceof Character && (i = Chars.indexOf(this.array, ((Character)target).charValue(), this.start, this.end)) >= 0) { + return i - this.start; + } + return -1; + } + + @Override + public int lastIndexOf(Object target) { + int i; + if (target instanceof Character && (i = Chars.lastIndexOf(this.array, ((Character)target).charValue(), this.start, this.end)) >= 0) { + return i - this.start; + } + return -1; + } + + @Override + public Character set(int index, Character element) { + Preconditions.checkElementIndex(index, this.size()); + char oldValue = this.array[this.start + index]; + this.array[this.start + index] = Preconditions.checkNotNull(element).charValue(); + return Character.valueOf(oldValue); + } + + @Override + public List subList(int fromIndex, int toIndex) { + int size = this.size(); + Preconditions.checkPositionIndexes(fromIndex, toIndex, size); + if (fromIndex == toIndex) { + return Collections.emptyList(); + } + return new CharArrayAsList(this.array, this.start + fromIndex, this.start + toIndex); + } + + @Override + public boolean equals(Object object) { + if (object == this) { + return true; + } + if (object instanceof CharArrayAsList) { + CharArrayAsList that = (CharArrayAsList)object; + int size = this.size(); + if (that.size() != size) { + return false; + } + for (int i = 0; i < size; ++i) { + if (this.array[this.start + i] == that.array[that.start + i]) continue; + return false; + } + return true; + } + return super.equals(object); + } + + @Override + public int hashCode() { + int result = 1; + for (int i = this.start; i < this.end; ++i) { + result = 31 * result + Chars.hashCode(this.array[i]); + } + return result; + } + + @Override + public String toString() { + StringBuilder builder = new StringBuilder(this.size() * 3); + builder.append('[').append(this.array[this.start]); + for (int i = this.start + 1; i < this.end; ++i) { + builder.append(", ").append(this.array[i]); + } + return builder.append(']').toString(); + } + + char[] toCharArray() { + int size = this.size(); + char[] result = new char[size]; + System.arraycopy(this.array, this.start, result, 0, size); + return result; + } + } + + private static enum LexicographicalComparator implements Comparator + { + INSTANCE; + + + @Override + public int compare(char[] left, char[] right) { + int minLength = Math.min(left.length, right.length); + for (int i = 0; i < minLength; ++i) { + int result = Chars.compare(left[i], right[i]); + if (result == 0) continue; + return result; + } + return left.length - right.length; + } + } +} diff --git a/src/com/google/common/primitives/Doubles.java b/src/com/google/common/primitives/Doubles.java new file mode 100644 index 0000000..78e5809 --- /dev/null +++ b/src/com/google/common/primitives/Doubles.java @@ -0,0 +1,371 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.primitives; + +import com.google.common.annotations.Beta; +import com.google.common.annotations.GwtCompatible; +import com.google.common.annotations.GwtIncompatible; +import com.google.common.base.Converter; +import com.google.common.base.Preconditions; +import java.io.Serializable; +import java.util.AbstractList; +import java.util.Collection; +import java.util.Collections; +import java.util.Comparator; +import java.util.List; +import java.util.RandomAccess; +import java.util.regex.Pattern; +import javax.annotation.Nullable; + +@GwtCompatible(emulated=true) +public final class Doubles { + public static final int BYTES = 8; + @GwtIncompatible(value="regular expressions") + static final Pattern FLOATING_POINT_PATTERN = Doubles.fpPattern(); + + private Doubles() { + } + + public static int hashCode(double value) { + return Double.valueOf(value).hashCode(); + } + + public static int compare(double a, double b) { + return Double.compare(a, b); + } + + public static boolean isFinite(double value) { + return Double.NEGATIVE_INFINITY < value & value < Double.POSITIVE_INFINITY; + } + + public static boolean contains(double[] array, double target) { + for (double value : array) { + if (value != target) continue; + return true; + } + return false; + } + + public static int indexOf(double[] array, double target) { + return Doubles.indexOf(array, target, 0, array.length); + } + + private static int indexOf(double[] array, double target, int start, int end) { + for (int i = start; i < end; ++i) { + if (array[i] != target) continue; + return i; + } + return -1; + } + + public static int indexOf(double[] array, double[] target) { + Preconditions.checkNotNull(array, "array"); + Preconditions.checkNotNull(target, "target"); + if (target.length == 0) { + return 0; + } + block0: for (int i = 0; i < array.length - target.length + 1; ++i) { + for (int j = 0; j < target.length; ++j) { + if (array[i + j] != target[j]) continue block0; + } + return i; + } + return -1; + } + + public static int lastIndexOf(double[] array, double target) { + return Doubles.lastIndexOf(array, target, 0, array.length); + } + + private static int lastIndexOf(double[] array, double target, int start, int end) { + for (int i = end - 1; i >= start; --i) { + if (array[i] != target) continue; + return i; + } + return -1; + } + + public static double min(double ... array) { + Preconditions.checkArgument(array.length > 0); + double min = array[0]; + for (int i = 1; i < array.length; ++i) { + min = Math.min(min, array[i]); + } + return min; + } + + public static double max(double ... array) { + Preconditions.checkArgument(array.length > 0); + double max = array[0]; + for (int i = 1; i < array.length; ++i) { + max = Math.max(max, array[i]); + } + return max; + } + + public static double[] concat(double[] ... arrays) { + int length = 0; + for (double[] array : arrays) { + length += array.length; + } + double[] result = new double[length]; + int pos = 0; + for (double[] array : arrays) { + System.arraycopy(array, 0, result, pos, array.length); + pos += array.length; + } + return result; + } + + @Beta + public static Converter stringConverter() { + return DoubleConverter.INSTANCE; + } + + public static double[] ensureCapacity(double[] array, int minLength, int padding) { + Preconditions.checkArgument(minLength >= 0, "Invalid minLength: %s", minLength); + Preconditions.checkArgument(padding >= 0, "Invalid padding: %s", padding); + return array.length < minLength ? Doubles.copyOf(array, minLength + padding) : array; + } + + private static double[] copyOf(double[] original, int length) { + double[] copy = new double[length]; + System.arraycopy(original, 0, copy, 0, Math.min(original.length, length)); + return copy; + } + + public static String join(String separator, double ... array) { + Preconditions.checkNotNull(separator); + if (array.length == 0) { + return ""; + } + StringBuilder builder = new StringBuilder(array.length * 12); + builder.append(array[0]); + for (int i = 1; i < array.length; ++i) { + builder.append(separator).append(array[i]); + } + return builder.toString(); + } + + public static Comparator lexicographicalComparator() { + return LexicographicalComparator.INSTANCE; + } + + public static double[] toArray(Collection collection) { + if (collection instanceof DoubleArrayAsList) { + return ((DoubleArrayAsList)collection).toDoubleArray(); + } + Object[] boxedArray = collection.toArray(); + int len = boxedArray.length; + double[] array = new double[len]; + for (int i = 0; i < len; ++i) { + array[i] = ((Number)Preconditions.checkNotNull(boxedArray[i])).doubleValue(); + } + return array; + } + + public static List asList(double ... backingArray) { + if (backingArray.length == 0) { + return Collections.emptyList(); + } + return new DoubleArrayAsList(backingArray); + } + + @GwtIncompatible(value="regular expressions") + private static Pattern fpPattern() { + String decimal = "(?:\\d++(?:\\.\\d*+)?|\\.\\d++)"; + String completeDec = String.valueOf(decimal).concat("(?:[eE][+-]?\\d++)?[fFdD]?"); + String hex = "(?:\\p{XDigit}++(?:\\.\\p{XDigit}*+)?|\\.\\p{XDigit}++)"; + String string = String.valueOf(String.valueOf(hex)); + String completeHex = new StringBuilder(25 + string.length()).append("0[xX]").append(string).append("[pP][+-]?\\d++[fFdD]?").toString(); + String string2 = String.valueOf(String.valueOf(completeDec)); + String string3 = String.valueOf(String.valueOf(completeHex)); + String fpPattern = new StringBuilder(23 + string2.length() + string3.length()).append("[+-]?(?:NaN|Infinity|").append(string2).append("|").append(string3).append(")").toString(); + return Pattern.compile(fpPattern); + } + + @Nullable + @GwtIncompatible(value="regular expressions") + @Beta + public static Double tryParse(String string) { + if (FLOATING_POINT_PATTERN.matcher(string).matches()) { + try { + return Double.parseDouble(string); + } + catch (NumberFormatException numberFormatException) { + // empty catch block + } + } + return null; + } + + @GwtCompatible + private static class DoubleArrayAsList + extends AbstractList + implements RandomAccess, + Serializable { + final double[] array; + final int start; + final int end; + private static final long serialVersionUID = 0L; + + DoubleArrayAsList(double[] array) { + this(array, 0, array.length); + } + + DoubleArrayAsList(double[] array, int start, int end) { + this.array = array; + this.start = start; + this.end = end; + } + + @Override + public int size() { + return this.end - this.start; + } + + @Override + public boolean isEmpty() { + return false; + } + + @Override + public Double get(int index) { + Preconditions.checkElementIndex(index, this.size()); + return this.array[this.start + index]; + } + + @Override + public boolean contains(Object target) { + return target instanceof Double && Doubles.indexOf(this.array, (Double)target, this.start, this.end) != -1; + } + + @Override + public int indexOf(Object target) { + int i; + if (target instanceof Double && (i = Doubles.indexOf(this.array, (Double)target, this.start, this.end)) >= 0) { + return i - this.start; + } + return -1; + } + + @Override + public int lastIndexOf(Object target) { + int i; + if (target instanceof Double && (i = Doubles.lastIndexOf(this.array, (Double)target, this.start, this.end)) >= 0) { + return i - this.start; + } + return -1; + } + + @Override + public Double set(int index, Double element) { + Preconditions.checkElementIndex(index, this.size()); + double oldValue = this.array[this.start + index]; + this.array[this.start + index] = Preconditions.checkNotNull(element); + return oldValue; + } + + @Override + public List subList(int fromIndex, int toIndex) { + int size = this.size(); + Preconditions.checkPositionIndexes(fromIndex, toIndex, size); + if (fromIndex == toIndex) { + return Collections.emptyList(); + } + return new DoubleArrayAsList(this.array, this.start + fromIndex, this.start + toIndex); + } + + @Override + public boolean equals(Object object) { + if (object == this) { + return true; + } + if (object instanceof DoubleArrayAsList) { + DoubleArrayAsList that = (DoubleArrayAsList)object; + int size = this.size(); + if (that.size() != size) { + return false; + } + for (int i = 0; i < size; ++i) { + if (this.array[this.start + i] == that.array[that.start + i]) continue; + return false; + } + return true; + } + return super.equals(object); + } + + @Override + public int hashCode() { + int result = 1; + for (int i = this.start; i < this.end; ++i) { + result = 31 * result + Doubles.hashCode(this.array[i]); + } + return result; + } + + @Override + public String toString() { + StringBuilder builder = new StringBuilder(this.size() * 12); + builder.append('[').append(this.array[this.start]); + for (int i = this.start + 1; i < this.end; ++i) { + builder.append(", ").append(this.array[i]); + } + return builder.append(']').toString(); + } + + double[] toDoubleArray() { + int size = this.size(); + double[] result = new double[size]; + System.arraycopy(this.array, this.start, result, 0, size); + return result; + } + } + + private static enum LexicographicalComparator implements Comparator + { + INSTANCE; + + + @Override + public int compare(double[] left, double[] right) { + int minLength = Math.min(left.length, right.length); + for (int i = 0; i < minLength; ++i) { + int result = Double.compare(left[i], right[i]); + if (result == 0) continue; + return result; + } + return left.length - right.length; + } + } + + private static final class DoubleConverter + extends Converter + implements Serializable { + static final DoubleConverter INSTANCE = new DoubleConverter(); + private static final long serialVersionUID = 1L; + + private DoubleConverter() { + } + + @Override + protected Double doForward(String value) { + return Double.valueOf(value); + } + + @Override + protected String doBackward(Double value) { + return value.toString(); + } + + public String toString() { + return "Doubles.stringConverter()"; + } + + private Object readResolve() { + return INSTANCE; + } + } +} diff --git a/src/com/google/common/primitives/Floats.java b/src/com/google/common/primitives/Floats.java new file mode 100644 index 0000000..07e95f8 --- /dev/null +++ b/src/com/google/common/primitives/Floats.java @@ -0,0 +1,356 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.primitives; + +import com.google.common.annotations.Beta; +import com.google.common.annotations.GwtCompatible; +import com.google.common.annotations.GwtIncompatible; +import com.google.common.base.Converter; +import com.google.common.base.Preconditions; +import com.google.common.primitives.Doubles; +import java.io.Serializable; +import java.util.AbstractList; +import java.util.Collection; +import java.util.Collections; +import java.util.Comparator; +import java.util.List; +import java.util.RandomAccess; +import javax.annotation.Nullable; + +@GwtCompatible(emulated=true) +public final class Floats { + public static final int BYTES = 4; + + private Floats() { + } + + public static int hashCode(float value) { + return Float.valueOf(value).hashCode(); + } + + public static int compare(float a, float b) { + return Float.compare(a, b); + } + + public static boolean isFinite(float value) { + return Float.NEGATIVE_INFINITY < value & value < Float.POSITIVE_INFINITY; + } + + public static boolean contains(float[] array, float target) { + for (float value : array) { + if (value != target) continue; + return true; + } + return false; + } + + public static int indexOf(float[] array, float target) { + return Floats.indexOf(array, target, 0, array.length); + } + + private static int indexOf(float[] array, float target, int start, int end) { + for (int i = start; i < end; ++i) { + if (array[i] != target) continue; + return i; + } + return -1; + } + + public static int indexOf(float[] array, float[] target) { + Preconditions.checkNotNull(array, "array"); + Preconditions.checkNotNull(target, "target"); + if (target.length == 0) { + return 0; + } + block0: for (int i = 0; i < array.length - target.length + 1; ++i) { + for (int j = 0; j < target.length; ++j) { + if (array[i + j] != target[j]) continue block0; + } + return i; + } + return -1; + } + + public static int lastIndexOf(float[] array, float target) { + return Floats.lastIndexOf(array, target, 0, array.length); + } + + private static int lastIndexOf(float[] array, float target, int start, int end) { + for (int i = end - 1; i >= start; --i) { + if (array[i] != target) continue; + return i; + } + return -1; + } + + public static float min(float ... array) { + Preconditions.checkArgument(array.length > 0); + float min = array[0]; + for (int i = 1; i < array.length; ++i) { + min = Math.min(min, array[i]); + } + return min; + } + + public static float max(float ... array) { + Preconditions.checkArgument(array.length > 0); + float max = array[0]; + for (int i = 1; i < array.length; ++i) { + max = Math.max(max, array[i]); + } + return max; + } + + public static float[] concat(float[] ... arrays) { + int length = 0; + for (float[] array : arrays) { + length += array.length; + } + float[] result = new float[length]; + int pos = 0; + for (float[] array : arrays) { + System.arraycopy(array, 0, result, pos, array.length); + pos += array.length; + } + return result; + } + + @Beta + public static Converter stringConverter() { + return FloatConverter.INSTANCE; + } + + public static float[] ensureCapacity(float[] array, int minLength, int padding) { + Preconditions.checkArgument(minLength >= 0, "Invalid minLength: %s", minLength); + Preconditions.checkArgument(padding >= 0, "Invalid padding: %s", padding); + return array.length < minLength ? Floats.copyOf(array, minLength + padding) : array; + } + + private static float[] copyOf(float[] original, int length) { + float[] copy = new float[length]; + System.arraycopy(original, 0, copy, 0, Math.min(original.length, length)); + return copy; + } + + public static String join(String separator, float ... array) { + Preconditions.checkNotNull(separator); + if (array.length == 0) { + return ""; + } + StringBuilder builder = new StringBuilder(array.length * 12); + builder.append(array[0]); + for (int i = 1; i < array.length; ++i) { + builder.append(separator).append(array[i]); + } + return builder.toString(); + } + + public static Comparator lexicographicalComparator() { + return LexicographicalComparator.INSTANCE; + } + + public static float[] toArray(Collection collection) { + if (collection instanceof FloatArrayAsList) { + return ((FloatArrayAsList)collection).toFloatArray(); + } + Object[] boxedArray = collection.toArray(); + int len = boxedArray.length; + float[] array = new float[len]; + for (int i = 0; i < len; ++i) { + array[i] = ((Number)Preconditions.checkNotNull(boxedArray[i])).floatValue(); + } + return array; + } + + public static List asList(float ... backingArray) { + if (backingArray.length == 0) { + return Collections.emptyList(); + } + return new FloatArrayAsList(backingArray); + } + + @Nullable + @GwtIncompatible(value="regular expressions") + @Beta + public static Float tryParse(String string) { + if (Doubles.FLOATING_POINT_PATTERN.matcher(string).matches()) { + try { + return Float.valueOf(Float.parseFloat(string)); + } + catch (NumberFormatException numberFormatException) { + // empty catch block + } + } + return null; + } + + @GwtCompatible + private static class FloatArrayAsList + extends AbstractList + implements RandomAccess, + Serializable { + final float[] array; + final int start; + final int end; + private static final long serialVersionUID = 0L; + + FloatArrayAsList(float[] array) { + this(array, 0, array.length); + } + + FloatArrayAsList(float[] array, int start, int end) { + this.array = array; + this.start = start; + this.end = end; + } + + @Override + public int size() { + return this.end - this.start; + } + + @Override + public boolean isEmpty() { + return false; + } + + @Override + public Float get(int index) { + Preconditions.checkElementIndex(index, this.size()); + return Float.valueOf(this.array[this.start + index]); + } + + @Override + public boolean contains(Object target) { + return target instanceof Float && Floats.indexOf(this.array, ((Float)target).floatValue(), this.start, this.end) != -1; + } + + @Override + public int indexOf(Object target) { + int i; + if (target instanceof Float && (i = Floats.indexOf(this.array, ((Float)target).floatValue(), this.start, this.end)) >= 0) { + return i - this.start; + } + return -1; + } + + @Override + public int lastIndexOf(Object target) { + int i; + if (target instanceof Float && (i = Floats.lastIndexOf(this.array, ((Float)target).floatValue(), this.start, this.end)) >= 0) { + return i - this.start; + } + return -1; + } + + @Override + public Float set(int index, Float element) { + Preconditions.checkElementIndex(index, this.size()); + float oldValue = this.array[this.start + index]; + this.array[this.start + index] = Preconditions.checkNotNull(element).floatValue(); + return Float.valueOf(oldValue); + } + + @Override + public List subList(int fromIndex, int toIndex) { + int size = this.size(); + Preconditions.checkPositionIndexes(fromIndex, toIndex, size); + if (fromIndex == toIndex) { + return Collections.emptyList(); + } + return new FloatArrayAsList(this.array, this.start + fromIndex, this.start + toIndex); + } + + @Override + public boolean equals(Object object) { + if (object == this) { + return true; + } + if (object instanceof FloatArrayAsList) { + FloatArrayAsList that = (FloatArrayAsList)object; + int size = this.size(); + if (that.size() != size) { + return false; + } + for (int i = 0; i < size; ++i) { + if (this.array[this.start + i] == that.array[that.start + i]) continue; + return false; + } + return true; + } + return super.equals(object); + } + + @Override + public int hashCode() { + int result = 1; + for (int i = this.start; i < this.end; ++i) { + result = 31 * result + Floats.hashCode(this.array[i]); + } + return result; + } + + @Override + public String toString() { + StringBuilder builder = new StringBuilder(this.size() * 12); + builder.append('[').append(this.array[this.start]); + for (int i = this.start + 1; i < this.end; ++i) { + builder.append(", ").append(this.array[i]); + } + return builder.append(']').toString(); + } + + float[] toFloatArray() { + int size = this.size(); + float[] result = new float[size]; + System.arraycopy(this.array, this.start, result, 0, size); + return result; + } + } + + private static enum LexicographicalComparator implements Comparator + { + INSTANCE; + + + @Override + public int compare(float[] left, float[] right) { + int minLength = Math.min(left.length, right.length); + for (int i = 0; i < minLength; ++i) { + int result = Float.compare(left[i], right[i]); + if (result == 0) continue; + return result; + } + return left.length - right.length; + } + } + + private static final class FloatConverter + extends Converter + implements Serializable { + static final FloatConverter INSTANCE = new FloatConverter(); + private static final long serialVersionUID = 1L; + + private FloatConverter() { + } + + @Override + protected Float doForward(String value) { + return Float.valueOf(value); + } + + @Override + protected String doBackward(Float value) { + return value.toString(); + } + + public String toString() { + return "Floats.stringConverter()"; + } + + private Object readResolve() { + return INSTANCE; + } + } +} diff --git a/src/com/google/common/primitives/Ints.java b/src/com/google/common/primitives/Ints.java new file mode 100644 index 0000000..d9a6360 --- /dev/null +++ b/src/com/google/common/primitives/Ints.java @@ -0,0 +1,438 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.primitives; + +import com.google.common.annotations.Beta; +import com.google.common.annotations.GwtCompatible; +import com.google.common.annotations.GwtIncompatible; +import com.google.common.base.Converter; +import com.google.common.base.Preconditions; +import java.io.Serializable; +import java.util.AbstractList; +import java.util.Arrays; +import java.util.Collection; +import java.util.Collections; +import java.util.Comparator; +import java.util.List; +import java.util.RandomAccess; +import javax.annotation.CheckForNull; + +@GwtCompatible(emulated=true) +public final class Ints { + public static final int BYTES = 4; + public static final int MAX_POWER_OF_TWO = 0x40000000; + private static final byte[] asciiDigits; + + private Ints() { + } + + public static int hashCode(int value) { + return value; + } + + public static int checkedCast(long value) { + int result = (int)value; + if ((long)result != value) { + long l = value; + throw new IllegalArgumentException(new StringBuilder(34).append("Out of range: ").append(l).toString()); + } + return result; + } + + public static int saturatedCast(long value) { + if (value > Integer.MAX_VALUE) { + return Integer.MAX_VALUE; + } + if (value < Integer.MIN_VALUE) { + return Integer.MIN_VALUE; + } + return (int)value; + } + + public static int compare(int a, int b) { + return a < b ? -1 : (a > b ? 1 : 0); + } + + public static boolean contains(int[] array, int target) { + for (int value : array) { + if (value != target) continue; + return true; + } + return false; + } + + public static int indexOf(int[] array, int target) { + return Ints.indexOf(array, target, 0, array.length); + } + + private static int indexOf(int[] array, int target, int start, int end) { + for (int i = start; i < end; ++i) { + if (array[i] != target) continue; + return i; + } + return -1; + } + + public static int indexOf(int[] array, int[] target) { + Preconditions.checkNotNull(array, "array"); + Preconditions.checkNotNull(target, "target"); + if (target.length == 0) { + return 0; + } + block0: for (int i = 0; i < array.length - target.length + 1; ++i) { + for (int j = 0; j < target.length; ++j) { + if (array[i + j] != target[j]) continue block0; + } + return i; + } + return -1; + } + + public static int lastIndexOf(int[] array, int target) { + return Ints.lastIndexOf(array, target, 0, array.length); + } + + private static int lastIndexOf(int[] array, int target, int start, int end) { + for (int i = end - 1; i >= start; --i) { + if (array[i] != target) continue; + return i; + } + return -1; + } + + public static int min(int ... array) { + Preconditions.checkArgument(array.length > 0); + int min = array[0]; + for (int i = 1; i < array.length; ++i) { + if (array[i] >= min) continue; + min = array[i]; + } + return min; + } + + public static int max(int ... array) { + Preconditions.checkArgument(array.length > 0); + int max = array[0]; + for (int i = 1; i < array.length; ++i) { + if (array[i] <= max) continue; + max = array[i]; + } + return max; + } + + public static int[] concat(int[] ... arrays) { + int length = 0; + for (int[] array : arrays) { + length += array.length; + } + int[] result = new int[length]; + int pos = 0; + for (int[] array : arrays) { + System.arraycopy(array, 0, result, pos, array.length); + pos += array.length; + } + return result; + } + + @GwtIncompatible(value="doesn't work") + public static byte[] toByteArray(int value) { + return new byte[]{(byte)(value >> 24), (byte)(value >> 16), (byte)(value >> 8), (byte)value}; + } + + @GwtIncompatible(value="doesn't work") + public static int fromByteArray(byte[] bytes) { + Preconditions.checkArgument(bytes.length >= 4, "array too small: %s < %s", bytes.length, 4); + return Ints.fromBytes(bytes[0], bytes[1], bytes[2], bytes[3]); + } + + @GwtIncompatible(value="doesn't work") + public static int fromBytes(byte b1, byte b2, byte b3, byte b4) { + return b1 << 24 | (b2 & 0xFF) << 16 | (b3 & 0xFF) << 8 | b4 & 0xFF; + } + + @Beta + public static Converter stringConverter() { + return IntConverter.INSTANCE; + } + + public static int[] ensureCapacity(int[] array, int minLength, int padding) { + Preconditions.checkArgument(minLength >= 0, "Invalid minLength: %s", minLength); + Preconditions.checkArgument(padding >= 0, "Invalid padding: %s", padding); + return array.length < minLength ? Ints.copyOf(array, minLength + padding) : array; + } + + private static int[] copyOf(int[] original, int length) { + int[] copy = new int[length]; + System.arraycopy(original, 0, copy, 0, Math.min(original.length, length)); + return copy; + } + + public static String join(String separator, int ... array) { + Preconditions.checkNotNull(separator); + if (array.length == 0) { + return ""; + } + StringBuilder builder = new StringBuilder(array.length * 5); + builder.append(array[0]); + for (int i = 1; i < array.length; ++i) { + builder.append(separator).append(array[i]); + } + return builder.toString(); + } + + public static Comparator lexicographicalComparator() { + return LexicographicalComparator.INSTANCE; + } + + public static int[] toArray(Collection collection) { + if (collection instanceof IntArrayAsList) { + return ((IntArrayAsList)collection).toIntArray(); + } + Object[] boxedArray = collection.toArray(); + int len = boxedArray.length; + int[] array = new int[len]; + for (int i = 0; i < len; ++i) { + array[i] = ((Number)Preconditions.checkNotNull(boxedArray[i])).intValue(); + } + return array; + } + + public static List asList(int ... backingArray) { + if (backingArray.length == 0) { + return Collections.emptyList(); + } + return new IntArrayAsList(backingArray); + } + + private static int digit(char c) { + return c < '\u0080' ? asciiDigits[c] : -1; + } + + @CheckForNull + @Beta + public static Integer tryParse(String string) { + return Ints.tryParse(string, 10); + } + + @CheckForNull + static Integer tryParse(String string, int radix) { + int digit; + int index; + if (Preconditions.checkNotNull(string).isEmpty()) { + return null; + } + if (radix < 2 || radix > 36) { + int n = radix; + throw new IllegalArgumentException(new StringBuilder(65).append("radix must be between MIN_RADIX and MAX_RADIX but was ").append(n).toString()); + } + boolean negative = string.charAt(0) == '-'; + int n = index = negative ? 1 : 0; + if (index == string.length()) { + return null; + } + if ((digit = Ints.digit(string.charAt(index++))) < 0 || digit >= radix) { + return null; + } + int accum = -digit; + int cap = Integer.MIN_VALUE / radix; + while (index < string.length()) { + if ((digit = Ints.digit(string.charAt(index++))) < 0 || digit >= radix || accum < cap) { + return null; + } + if ((accum *= radix) < Integer.MIN_VALUE + digit) { + return null; + } + accum -= digit; + } + if (negative) { + return accum; + } + if (accum == Integer.MIN_VALUE) { + return null; + } + return -accum; + } + + static { + int i; + asciiDigits = new byte[128]; + Arrays.fill(asciiDigits, (byte)-1); + for (i = 0; i <= 9; ++i) { + Ints.asciiDigits[48 + i] = (byte)i; + } + for (i = 0; i <= 26; ++i) { + Ints.asciiDigits[65 + i] = (byte)(10 + i); + Ints.asciiDigits[97 + i] = (byte)(10 + i); + } + } + + @GwtCompatible + private static class IntArrayAsList + extends AbstractList + implements RandomAccess, + Serializable { + final int[] array; + final int start; + final int end; + private static final long serialVersionUID = 0L; + + IntArrayAsList(int[] array) { + this(array, 0, array.length); + } + + IntArrayAsList(int[] array, int start, int end) { + this.array = array; + this.start = start; + this.end = end; + } + + @Override + public int size() { + return this.end - this.start; + } + + @Override + public boolean isEmpty() { + return false; + } + + @Override + public Integer get(int index) { + Preconditions.checkElementIndex(index, this.size()); + return this.array[this.start + index]; + } + + @Override + public boolean contains(Object target) { + return target instanceof Integer && Ints.indexOf(this.array, (Integer)target, this.start, this.end) != -1; + } + + @Override + public int indexOf(Object target) { + int i; + if (target instanceof Integer && (i = Ints.indexOf(this.array, (Integer)target, this.start, this.end)) >= 0) { + return i - this.start; + } + return -1; + } + + @Override + public int lastIndexOf(Object target) { + int i; + if (target instanceof Integer && (i = Ints.lastIndexOf(this.array, (Integer)target, this.start, this.end)) >= 0) { + return i - this.start; + } + return -1; + } + + @Override + public Integer set(int index, Integer element) { + Preconditions.checkElementIndex(index, this.size()); + int oldValue = this.array[this.start + index]; + this.array[this.start + index] = Preconditions.checkNotNull(element); + return oldValue; + } + + @Override + public List subList(int fromIndex, int toIndex) { + int size = this.size(); + Preconditions.checkPositionIndexes(fromIndex, toIndex, size); + if (fromIndex == toIndex) { + return Collections.emptyList(); + } + return new IntArrayAsList(this.array, this.start + fromIndex, this.start + toIndex); + } + + @Override + public boolean equals(Object object) { + if (object == this) { + return true; + } + if (object instanceof IntArrayAsList) { + IntArrayAsList that = (IntArrayAsList)object; + int size = this.size(); + if (that.size() != size) { + return false; + } + for (int i = 0; i < size; ++i) { + if (this.array[this.start + i] == that.array[that.start + i]) continue; + return false; + } + return true; + } + return super.equals(object); + } + + @Override + public int hashCode() { + int result = 1; + for (int i = this.start; i < this.end; ++i) { + result = 31 * result + Ints.hashCode(this.array[i]); + } + return result; + } + + @Override + public String toString() { + StringBuilder builder = new StringBuilder(this.size() * 5); + builder.append('[').append(this.array[this.start]); + for (int i = this.start + 1; i < this.end; ++i) { + builder.append(", ").append(this.array[i]); + } + return builder.append(']').toString(); + } + + int[] toIntArray() { + int size = this.size(); + int[] result = new int[size]; + System.arraycopy(this.array, this.start, result, 0, size); + return result; + } + } + + private static enum LexicographicalComparator implements Comparator + { + INSTANCE; + + + @Override + public int compare(int[] left, int[] right) { + int minLength = Math.min(left.length, right.length); + for (int i = 0; i < minLength; ++i) { + int result = Ints.compare(left[i], right[i]); + if (result == 0) continue; + return result; + } + return left.length - right.length; + } + } + + private static final class IntConverter + extends Converter + implements Serializable { + static final IntConverter INSTANCE = new IntConverter(); + private static final long serialVersionUID = 1L; + + private IntConverter() { + } + + @Override + protected Integer doForward(String value) { + return Integer.decode(value); + } + + @Override + protected String doBackward(Integer value) { + return value.toString(); + } + + public String toString() { + return "Ints.stringConverter()"; + } + + private Object readResolve() { + return INSTANCE; + } + } +} diff --git a/src/com/google/common/primitives/Longs.java b/src/com/google/common/primitives/Longs.java new file mode 100644 index 0000000..63487d0 --- /dev/null +++ b/src/com/google/common/primitives/Longs.java @@ -0,0 +1,389 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.primitives; + +import com.google.common.annotations.Beta; +import com.google.common.annotations.GwtCompatible; +import com.google.common.base.Converter; +import com.google.common.base.Preconditions; +import java.io.Serializable; +import java.util.AbstractList; +import java.util.Collection; +import java.util.Collections; +import java.util.Comparator; +import java.util.List; +import java.util.RandomAccess; + +@GwtCompatible +public final class Longs { + public static final int BYTES = 8; + public static final long MAX_POWER_OF_TWO = 0x4000000000000000L; + + private Longs() { + } + + public static int hashCode(long value) { + return (int)(value ^ value >>> 32); + } + + public static int compare(long a, long b) { + return a < b ? -1 : (a > b ? 1 : 0); + } + + public static boolean contains(long[] array, long target) { + for (long value : array) { + if (value != target) continue; + return true; + } + return false; + } + + public static int indexOf(long[] array, long target) { + return Longs.indexOf(array, target, 0, array.length); + } + + private static int indexOf(long[] array, long target, int start, int end) { + for (int i = start; i < end; ++i) { + if (array[i] != target) continue; + return i; + } + return -1; + } + + public static int indexOf(long[] array, long[] target) { + Preconditions.checkNotNull(array, "array"); + Preconditions.checkNotNull(target, "target"); + if (target.length == 0) { + return 0; + } + block0: for (int i = 0; i < array.length - target.length + 1; ++i) { + for (int j = 0; j < target.length; ++j) { + if (array[i + j] != target[j]) continue block0; + } + return i; + } + return -1; + } + + public static int lastIndexOf(long[] array, long target) { + return Longs.lastIndexOf(array, target, 0, array.length); + } + + private static int lastIndexOf(long[] array, long target, int start, int end) { + for (int i = end - 1; i >= start; --i) { + if (array[i] != target) continue; + return i; + } + return -1; + } + + public static long min(long ... array) { + Preconditions.checkArgument(array.length > 0); + long min = array[0]; + for (int i = 1; i < array.length; ++i) { + if (array[i] >= min) continue; + min = array[i]; + } + return min; + } + + public static long max(long ... array) { + Preconditions.checkArgument(array.length > 0); + long max = array[0]; + for (int i = 1; i < array.length; ++i) { + if (array[i] <= max) continue; + max = array[i]; + } + return max; + } + + public static long[] concat(long[] ... arrays) { + int length = 0; + for (long[] array : arrays) { + length += array.length; + } + long[] result = new long[length]; + int pos = 0; + for (long[] array : arrays) { + System.arraycopy(array, 0, result, pos, array.length); + pos += array.length; + } + return result; + } + + public static byte[] toByteArray(long value) { + byte[] result = new byte[8]; + for (int i = 7; i >= 0; --i) { + result[i] = (byte)(value & 0xFFL); + value >>= 8; + } + return result; + } + + public static long fromByteArray(byte[] bytes) { + Preconditions.checkArgument(bytes.length >= 8, "array too small: %s < %s", bytes.length, 8); + return Longs.fromBytes(bytes[0], bytes[1], bytes[2], bytes[3], bytes[4], bytes[5], bytes[6], bytes[7]); + } + + public static long fromBytes(byte b1, byte b2, byte b3, byte b4, byte b5, byte b6, byte b7, byte b8) { + return ((long)b1 & 0xFFL) << 56 | ((long)b2 & 0xFFL) << 48 | ((long)b3 & 0xFFL) << 40 | ((long)b4 & 0xFFL) << 32 | ((long)b5 & 0xFFL) << 24 | ((long)b6 & 0xFFL) << 16 | ((long)b7 & 0xFFL) << 8 | (long)b8 & 0xFFL; + } + + @Beta + public static Long tryParse(String string) { + int digit; + int index; + if (Preconditions.checkNotNull(string).isEmpty()) { + return null; + } + boolean negative = string.charAt(0) == '-'; + int n = index = negative ? 1 : 0; + if (index == string.length()) { + return null; + } + if ((digit = string.charAt(index++) - 48) < 0 || digit > 9) { + return null; + } + long accum = -digit; + while (index < string.length()) { + if ((digit = string.charAt(index++) - 48) < 0 || digit > 9 || accum < -922337203685477580L) { + return null; + } + if ((accum *= 10L) < Long.MIN_VALUE + (long)digit) { + return null; + } + accum -= (long)digit; + } + if (negative) { + return accum; + } + if (accum == Long.MIN_VALUE) { + return null; + } + return -accum; + } + + @Beta + public static Converter stringConverter() { + return LongConverter.INSTANCE; + } + + public static long[] ensureCapacity(long[] array, int minLength, int padding) { + Preconditions.checkArgument(minLength >= 0, "Invalid minLength: %s", minLength); + Preconditions.checkArgument(padding >= 0, "Invalid padding: %s", padding); + return array.length < minLength ? Longs.copyOf(array, minLength + padding) : array; + } + + private static long[] copyOf(long[] original, int length) { + long[] copy = new long[length]; + System.arraycopy(original, 0, copy, 0, Math.min(original.length, length)); + return copy; + } + + public static String join(String separator, long ... array) { + Preconditions.checkNotNull(separator); + if (array.length == 0) { + return ""; + } + StringBuilder builder = new StringBuilder(array.length * 10); + builder.append(array[0]); + for (int i = 1; i < array.length; ++i) { + builder.append(separator).append(array[i]); + } + return builder.toString(); + } + + public static Comparator lexicographicalComparator() { + return LexicographicalComparator.INSTANCE; + } + + public static long[] toArray(Collection collection) { + if (collection instanceof LongArrayAsList) { + return ((LongArrayAsList)collection).toLongArray(); + } + Object[] boxedArray = collection.toArray(); + int len = boxedArray.length; + long[] array = new long[len]; + for (int i = 0; i < len; ++i) { + array[i] = ((Number)Preconditions.checkNotNull(boxedArray[i])).longValue(); + } + return array; + } + + public static List asList(long ... backingArray) { + if (backingArray.length == 0) { + return Collections.emptyList(); + } + return new LongArrayAsList(backingArray); + } + + @GwtCompatible + private static class LongArrayAsList + extends AbstractList + implements RandomAccess, + Serializable { + final long[] array; + final int start; + final int end; + private static final long serialVersionUID = 0L; + + LongArrayAsList(long[] array) { + this(array, 0, array.length); + } + + LongArrayAsList(long[] array, int start, int end) { + this.array = array; + this.start = start; + this.end = end; + } + + @Override + public int size() { + return this.end - this.start; + } + + @Override + public boolean isEmpty() { + return false; + } + + @Override + public Long get(int index) { + Preconditions.checkElementIndex(index, this.size()); + return this.array[this.start + index]; + } + + @Override + public boolean contains(Object target) { + return target instanceof Long && Longs.indexOf(this.array, (Long)target, this.start, this.end) != -1; + } + + @Override + public int indexOf(Object target) { + int i; + if (target instanceof Long && (i = Longs.indexOf(this.array, (Long)target, this.start, this.end)) >= 0) { + return i - this.start; + } + return -1; + } + + @Override + public int lastIndexOf(Object target) { + int i; + if (target instanceof Long && (i = Longs.lastIndexOf(this.array, (Long)target, this.start, this.end)) >= 0) { + return i - this.start; + } + return -1; + } + + @Override + public Long set(int index, Long element) { + Preconditions.checkElementIndex(index, this.size()); + long oldValue = this.array[this.start + index]; + this.array[this.start + index] = Preconditions.checkNotNull(element); + return oldValue; + } + + @Override + public List subList(int fromIndex, int toIndex) { + int size = this.size(); + Preconditions.checkPositionIndexes(fromIndex, toIndex, size); + if (fromIndex == toIndex) { + return Collections.emptyList(); + } + return new LongArrayAsList(this.array, this.start + fromIndex, this.start + toIndex); + } + + @Override + public boolean equals(Object object) { + if (object == this) { + return true; + } + if (object instanceof LongArrayAsList) { + LongArrayAsList that = (LongArrayAsList)object; + int size = this.size(); + if (that.size() != size) { + return false; + } + for (int i = 0; i < size; ++i) { + if (this.array[this.start + i] == that.array[that.start + i]) continue; + return false; + } + return true; + } + return super.equals(object); + } + + @Override + public int hashCode() { + int result = 1; + for (int i = this.start; i < this.end; ++i) { + result = 31 * result + Longs.hashCode(this.array[i]); + } + return result; + } + + @Override + public String toString() { + StringBuilder builder = new StringBuilder(this.size() * 10); + builder.append('[').append(this.array[this.start]); + for (int i = this.start + 1; i < this.end; ++i) { + builder.append(", ").append(this.array[i]); + } + return builder.append(']').toString(); + } + + long[] toLongArray() { + int size = this.size(); + long[] result = new long[size]; + System.arraycopy(this.array, this.start, result, 0, size); + return result; + } + } + + private static enum LexicographicalComparator implements Comparator + { + INSTANCE; + + + @Override + public int compare(long[] left, long[] right) { + int minLength = Math.min(left.length, right.length); + for (int i = 0; i < minLength; ++i) { + int result = Longs.compare(left[i], right[i]); + if (result == 0) continue; + return result; + } + return left.length - right.length; + } + } + + private static final class LongConverter + extends Converter + implements Serializable { + static final LongConverter INSTANCE = new LongConverter(); + private static final long serialVersionUID = 1L; + + private LongConverter() { + } + + @Override + protected Long doForward(String value) { + return Long.decode(value); + } + + @Override + protected String doBackward(Long value) { + return value.toString(); + } + + public String toString() { + return "Longs.stringConverter()"; + } + + private Object readResolve() { + return INSTANCE; + } + } +} diff --git a/src/com/google/common/primitives/ParseRequest.java b/src/com/google/common/primitives/ParseRequest.java new file mode 100644 index 0000000..95f4c68 --- /dev/null +++ b/src/com/google/common/primitives/ParseRequest.java @@ -0,0 +1,40 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.primitives; + +import com.google.common.annotations.GwtCompatible; + +@GwtCompatible +final class ParseRequest { + final String rawValue; + final int radix; + + private ParseRequest(String rawValue, int radix) { + this.rawValue = rawValue; + this.radix = radix; + } + + static ParseRequest fromString(String stringValue) { + int radix; + String rawValue; + if (stringValue.length() == 0) { + throw new NumberFormatException("empty string"); + } + char firstChar = stringValue.charAt(0); + if (stringValue.startsWith("0x") || stringValue.startsWith("0X")) { + rawValue = stringValue.substring(2); + radix = 16; + } else if (firstChar == '#') { + rawValue = stringValue.substring(1); + radix = 16; + } else if (firstChar == '0' && stringValue.length() > 1) { + rawValue = stringValue.substring(1); + radix = 8; + } else { + rawValue = stringValue; + radix = 10; + } + return new ParseRequest(rawValue, radix); + } +} diff --git a/src/com/google/common/primitives/Primitives.java b/src/com/google/common/primitives/Primitives.java new file mode 100644 index 0000000..d9626e2 --- /dev/null +++ b/src/com/google/common/primitives/Primitives.java @@ -0,0 +1,63 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.primitives; + +import com.google.common.base.Preconditions; +import java.util.Collections; +import java.util.HashMap; +import java.util.Map; +import java.util.Set; + +public final class Primitives { + private static final Map, Class> PRIMITIVE_TO_WRAPPER_TYPE; + private static final Map, Class> WRAPPER_TO_PRIMITIVE_TYPE; + + private Primitives() { + } + + private static void add(Map, Class> forward, Map, Class> backward, Class key, Class value) { + forward.put(key, value); + backward.put(value, key); + } + + public static Set> allPrimitiveTypes() { + return PRIMITIVE_TO_WRAPPER_TYPE.keySet(); + } + + public static Set> allWrapperTypes() { + return WRAPPER_TO_PRIMITIVE_TYPE.keySet(); + } + + public static boolean isWrapperType(Class type) { + return WRAPPER_TO_PRIMITIVE_TYPE.containsKey(Preconditions.checkNotNull(type)); + } + + public static Class wrap(Class type) { + Preconditions.checkNotNull(type); + Class wrapped = PRIMITIVE_TO_WRAPPER_TYPE.get(type); + return wrapped == null ? type : wrapped; + } + + public static Class unwrap(Class type) { + Preconditions.checkNotNull(type); + Class unwrapped = WRAPPER_TO_PRIMITIVE_TYPE.get(type); + return unwrapped == null ? type : unwrapped; + } + + static { + HashMap primToWrap = new HashMap(16); + HashMap wrapToPrim = new HashMap(16); + Primitives.add(primToWrap, wrapToPrim, Boolean.TYPE, Boolean.class); + Primitives.add(primToWrap, wrapToPrim, Byte.TYPE, Byte.class); + Primitives.add(primToWrap, wrapToPrim, Character.TYPE, Character.class); + Primitives.add(primToWrap, wrapToPrim, Double.TYPE, Double.class); + Primitives.add(primToWrap, wrapToPrim, Float.TYPE, Float.class); + Primitives.add(primToWrap, wrapToPrim, Integer.TYPE, Integer.class); + Primitives.add(primToWrap, wrapToPrim, Long.TYPE, Long.class); + Primitives.add(primToWrap, wrapToPrim, Short.TYPE, Short.class); + Primitives.add(primToWrap, wrapToPrim, Void.TYPE, Void.class); + PRIMITIVE_TO_WRAPPER_TYPE = Collections.unmodifiableMap(primToWrap); + WRAPPER_TO_PRIMITIVE_TYPE = Collections.unmodifiableMap(wrapToPrim); + } +} diff --git a/src/com/google/common/primitives/Shorts.java b/src/com/google/common/primitives/Shorts.java new file mode 100644 index 0000000..e9f80bf --- /dev/null +++ b/src/com/google/common/primitives/Shorts.java @@ -0,0 +1,373 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.primitives; + +import com.google.common.annotations.Beta; +import com.google.common.annotations.GwtCompatible; +import com.google.common.annotations.GwtIncompatible; +import com.google.common.base.Converter; +import com.google.common.base.Preconditions; +import java.io.Serializable; +import java.util.AbstractList; +import java.util.Collection; +import java.util.Collections; +import java.util.Comparator; +import java.util.List; +import java.util.RandomAccess; + +@GwtCompatible(emulated=true) +public final class Shorts { + public static final int BYTES = 2; + public static final short MAX_POWER_OF_TWO = 16384; + + private Shorts() { + } + + public static int hashCode(short value) { + return value; + } + + public static short checkedCast(long value) { + short result = (short)value; + if ((long)result != value) { + long l = value; + throw new IllegalArgumentException(new StringBuilder(34).append("Out of range: ").append(l).toString()); + } + return result; + } + + public static short saturatedCast(long value) { + if (value > 32767L) { + return Short.MAX_VALUE; + } + if (value < -32768L) { + return Short.MIN_VALUE; + } + return (short)value; + } + + public static int compare(short a, short b) { + return a - b; + } + + public static boolean contains(short[] array, short target) { + for (short value : array) { + if (value != target) continue; + return true; + } + return false; + } + + public static int indexOf(short[] array, short target) { + return Shorts.indexOf(array, target, 0, array.length); + } + + private static int indexOf(short[] array, short target, int start, int end) { + for (int i = start; i < end; ++i) { + if (array[i] != target) continue; + return i; + } + return -1; + } + + public static int indexOf(short[] array, short[] target) { + Preconditions.checkNotNull(array, "array"); + Preconditions.checkNotNull(target, "target"); + if (target.length == 0) { + return 0; + } + block0: for (int i = 0; i < array.length - target.length + 1; ++i) { + for (int j = 0; j < target.length; ++j) { + if (array[i + j] != target[j]) continue block0; + } + return i; + } + return -1; + } + + public static int lastIndexOf(short[] array, short target) { + return Shorts.lastIndexOf(array, target, 0, array.length); + } + + private static int lastIndexOf(short[] array, short target, int start, int end) { + for (int i = end - 1; i >= start; --i) { + if (array[i] != target) continue; + return i; + } + return -1; + } + + public static short min(short ... array) { + Preconditions.checkArgument(array.length > 0); + short min = array[0]; + for (int i = 1; i < array.length; ++i) { + if (array[i] >= min) continue; + min = array[i]; + } + return min; + } + + public static short max(short ... array) { + Preconditions.checkArgument(array.length > 0); + short max = array[0]; + for (int i = 1; i < array.length; ++i) { + if (array[i] <= max) continue; + max = array[i]; + } + return max; + } + + public static short[] concat(short[] ... arrays) { + int length = 0; + for (short[] array : arrays) { + length += array.length; + } + short[] result = new short[length]; + int pos = 0; + for (short[] array : arrays) { + System.arraycopy(array, 0, result, pos, array.length); + pos += array.length; + } + return result; + } + + @GwtIncompatible(value="doesn't work") + public static byte[] toByteArray(short value) { + return new byte[]{(byte)(value >> 8), (byte)value}; + } + + @GwtIncompatible(value="doesn't work") + public static short fromByteArray(byte[] bytes) { + Preconditions.checkArgument(bytes.length >= 2, "array too small: %s < %s", bytes.length, 2); + return Shorts.fromBytes(bytes[0], bytes[1]); + } + + @GwtIncompatible(value="doesn't work") + public static short fromBytes(byte b1, byte b2) { + return (short)(b1 << 8 | b2 & 0xFF); + } + + @Beta + public static Converter stringConverter() { + return ShortConverter.INSTANCE; + } + + public static short[] ensureCapacity(short[] array, int minLength, int padding) { + Preconditions.checkArgument(minLength >= 0, "Invalid minLength: %s", minLength); + Preconditions.checkArgument(padding >= 0, "Invalid padding: %s", padding); + return array.length < minLength ? Shorts.copyOf(array, minLength + padding) : array; + } + + private static short[] copyOf(short[] original, int length) { + short[] copy = new short[length]; + System.arraycopy(original, 0, copy, 0, Math.min(original.length, length)); + return copy; + } + + public static String join(String separator, short ... array) { + Preconditions.checkNotNull(separator); + if (array.length == 0) { + return ""; + } + StringBuilder builder = new StringBuilder(array.length * 6); + builder.append(array[0]); + for (int i = 1; i < array.length; ++i) { + builder.append(separator).append(array[i]); + } + return builder.toString(); + } + + public static Comparator lexicographicalComparator() { + return LexicographicalComparator.INSTANCE; + } + + public static short[] toArray(Collection collection) { + if (collection instanceof ShortArrayAsList) { + return ((ShortArrayAsList)collection).toShortArray(); + } + Object[] boxedArray = collection.toArray(); + int len = boxedArray.length; + short[] array = new short[len]; + for (int i = 0; i < len; ++i) { + array[i] = ((Number)Preconditions.checkNotNull(boxedArray[i])).shortValue(); + } + return array; + } + + public static List asList(short ... backingArray) { + if (backingArray.length == 0) { + return Collections.emptyList(); + } + return new ShortArrayAsList(backingArray); + } + + @GwtCompatible + private static class ShortArrayAsList + extends AbstractList + implements RandomAccess, + Serializable { + final short[] array; + final int start; + final int end; + private static final long serialVersionUID = 0L; + + ShortArrayAsList(short[] array) { + this(array, 0, array.length); + } + + ShortArrayAsList(short[] array, int start, int end) { + this.array = array; + this.start = start; + this.end = end; + } + + @Override + public int size() { + return this.end - this.start; + } + + @Override + public boolean isEmpty() { + return false; + } + + @Override + public Short get(int index) { + Preconditions.checkElementIndex(index, this.size()); + return this.array[this.start + index]; + } + + @Override + public boolean contains(Object target) { + return target instanceof Short && Shorts.indexOf(this.array, (Short)target, this.start, this.end) != -1; + } + + @Override + public int indexOf(Object target) { + int i; + if (target instanceof Short && (i = Shorts.indexOf(this.array, (Short)target, this.start, this.end)) >= 0) { + return i - this.start; + } + return -1; + } + + @Override + public int lastIndexOf(Object target) { + int i; + if (target instanceof Short && (i = Shorts.lastIndexOf(this.array, (Short)target, this.start, this.end)) >= 0) { + return i - this.start; + } + return -1; + } + + @Override + public Short set(int index, Short element) { + Preconditions.checkElementIndex(index, this.size()); + short oldValue = this.array[this.start + index]; + this.array[this.start + index] = Preconditions.checkNotNull(element); + return oldValue; + } + + @Override + public List subList(int fromIndex, int toIndex) { + int size = this.size(); + Preconditions.checkPositionIndexes(fromIndex, toIndex, size); + if (fromIndex == toIndex) { + return Collections.emptyList(); + } + return new ShortArrayAsList(this.array, this.start + fromIndex, this.start + toIndex); + } + + @Override + public boolean equals(Object object) { + if (object == this) { + return true; + } + if (object instanceof ShortArrayAsList) { + ShortArrayAsList that = (ShortArrayAsList)object; + int size = this.size(); + if (that.size() != size) { + return false; + } + for (int i = 0; i < size; ++i) { + if (this.array[this.start + i] == that.array[that.start + i]) continue; + return false; + } + return true; + } + return super.equals(object); + } + + @Override + public int hashCode() { + int result = 1; + for (int i = this.start; i < this.end; ++i) { + result = 31 * result + Shorts.hashCode(this.array[i]); + } + return result; + } + + @Override + public String toString() { + StringBuilder builder = new StringBuilder(this.size() * 6); + builder.append('[').append(this.array[this.start]); + for (int i = this.start + 1; i < this.end; ++i) { + builder.append(", ").append(this.array[i]); + } + return builder.append(']').toString(); + } + + short[] toShortArray() { + int size = this.size(); + short[] result = new short[size]; + System.arraycopy(this.array, this.start, result, 0, size); + return result; + } + } + + private static enum LexicographicalComparator implements Comparator + { + INSTANCE; + + + @Override + public int compare(short[] left, short[] right) { + int minLength = Math.min(left.length, right.length); + for (int i = 0; i < minLength; ++i) { + int result = Shorts.compare(left[i], right[i]); + if (result == 0) continue; + return result; + } + return left.length - right.length; + } + } + + private static final class ShortConverter + extends Converter + implements Serializable { + static final ShortConverter INSTANCE = new ShortConverter(); + private static final long serialVersionUID = 1L; + + private ShortConverter() { + } + + @Override + protected Short doForward(String value) { + return Short.decode(value); + } + + @Override + protected String doBackward(Short value) { + return value.toString(); + } + + public String toString() { + return "Shorts.stringConverter()"; + } + + private Object readResolve() { + return INSTANCE; + } + } +} diff --git a/src/com/google/common/primitives/SignedBytes.java b/src/com/google/common/primitives/SignedBytes.java new file mode 100644 index 0000000..ff3a6c3 --- /dev/null +++ b/src/com/google/common/primitives/SignedBytes.java @@ -0,0 +1,93 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.primitives; + +import com.google.common.annotations.GwtCompatible; +import com.google.common.base.Preconditions; +import java.util.Comparator; + +@GwtCompatible +public final class SignedBytes { + public static final byte MAX_POWER_OF_TWO = 64; + + private SignedBytes() { + } + + public static byte checkedCast(long value) { + byte result = (byte)value; + if ((long)result != value) { + long l = value; + throw new IllegalArgumentException(new StringBuilder(34).append("Out of range: ").append(l).toString()); + } + return result; + } + + public static byte saturatedCast(long value) { + if (value > 127L) { + return 127; + } + if (value < -128L) { + return -128; + } + return (byte)value; + } + + public static int compare(byte a, byte b) { + return a - b; + } + + public static byte min(byte ... array) { + Preconditions.checkArgument(array.length > 0); + byte min = array[0]; + for (int i = 1; i < array.length; ++i) { + if (array[i] >= min) continue; + min = array[i]; + } + return min; + } + + public static byte max(byte ... array) { + Preconditions.checkArgument(array.length > 0); + byte max = array[0]; + for (int i = 1; i < array.length; ++i) { + if (array[i] <= max) continue; + max = array[i]; + } + return max; + } + + public static String join(String separator, byte ... array) { + Preconditions.checkNotNull(separator); + if (array.length == 0) { + return ""; + } + StringBuilder builder = new StringBuilder(array.length * 5); + builder.append(array[0]); + for (int i = 1; i < array.length; ++i) { + builder.append(separator).append(array[i]); + } + return builder.toString(); + } + + public static Comparator lexicographicalComparator() { + return LexicographicalComparator.INSTANCE; + } + + private static enum LexicographicalComparator implements Comparator + { + INSTANCE; + + + @Override + public int compare(byte[] left, byte[] right) { + int minLength = Math.min(left.length, right.length); + for (int i = 0; i < minLength; ++i) { + int result = SignedBytes.compare(left[i], right[i]); + if (result == 0) continue; + return result; + } + return left.length - right.length; + } + } +} diff --git a/src/com/google/common/primitives/UnsignedBytes.java b/src/com/google/common/primitives/UnsignedBytes.java new file mode 100644 index 0000000..e963b95 --- /dev/null +++ b/src/com/google/common/primitives/UnsignedBytes.java @@ -0,0 +1,227 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.primitives; + +import com.google.common.annotations.Beta; +import com.google.common.annotations.VisibleForTesting; +import com.google.common.base.Preconditions; +import com.google.common.primitives.UnsignedLongs; +import java.lang.reflect.Field; +import java.nio.ByteOrder; +import java.security.AccessController; +import java.security.PrivilegedActionException; +import java.security.PrivilegedExceptionAction; +import java.util.Comparator; +import sun.misc.Unsafe; + +public final class UnsignedBytes { + public static final byte MAX_POWER_OF_TWO = -128; + public static final byte MAX_VALUE = -1; + private static final int UNSIGNED_MASK = 255; + + private UnsignedBytes() { + } + + public static int toInt(byte value) { + return value & 0xFF; + } + + public static byte checkedCast(long value) { + if (value >> 8 != 0L) { + long l = value; + throw new IllegalArgumentException(new StringBuilder(34).append("Out of range: ").append(l).toString()); + } + return (byte)value; + } + + public static byte saturatedCast(long value) { + if (value > (long)UnsignedBytes.toInt((byte)-1)) { + return -1; + } + if (value < 0L) { + return 0; + } + return (byte)value; + } + + public static int compare(byte a, byte b) { + return UnsignedBytes.toInt(a) - UnsignedBytes.toInt(b); + } + + public static byte min(byte ... array) { + Preconditions.checkArgument(array.length > 0); + int min = UnsignedBytes.toInt(array[0]); + for (int i = 1; i < array.length; ++i) { + int next = UnsignedBytes.toInt(array[i]); + if (next >= min) continue; + min = next; + } + return (byte)min; + } + + public static byte max(byte ... array) { + Preconditions.checkArgument(array.length > 0); + int max = UnsignedBytes.toInt(array[0]); + for (int i = 1; i < array.length; ++i) { + int next = UnsignedBytes.toInt(array[i]); + if (next <= max) continue; + max = next; + } + return (byte)max; + } + + @Beta + public static String toString(byte x) { + return UnsignedBytes.toString(x, 10); + } + + @Beta + public static String toString(byte x, int radix) { + Preconditions.checkArgument(radix >= 2 && radix <= 36, "radix (%s) must be between Character.MIN_RADIX and Character.MAX_RADIX", radix); + return Integer.toString(UnsignedBytes.toInt(x), radix); + } + + @Beta + public static byte parseUnsignedByte(String string) { + return UnsignedBytes.parseUnsignedByte(string, 10); + } + + @Beta + public static byte parseUnsignedByte(String string, int radix) { + int parse = Integer.parseInt(Preconditions.checkNotNull(string), radix); + if (parse >> 8 == 0) { + return (byte)parse; + } + int n = parse; + throw new NumberFormatException(new StringBuilder(25).append("out of range: ").append(n).toString()); + } + + public static String join(String separator, byte ... array) { + Preconditions.checkNotNull(separator); + if (array.length == 0) { + return ""; + } + StringBuilder builder = new StringBuilder(array.length * (3 + separator.length())); + builder.append(UnsignedBytes.toInt(array[0])); + for (int i = 1; i < array.length; ++i) { + builder.append(separator).append(UnsignedBytes.toString(array[i])); + } + return builder.toString(); + } + + public static Comparator lexicographicalComparator() { + return LexicographicalComparatorHolder.BEST_COMPARATOR; + } + + @VisibleForTesting + static Comparator lexicographicalComparatorJavaImpl() { + return LexicographicalComparatorHolder.PureJavaComparator.INSTANCE; + } + + @VisibleForTesting + static class LexicographicalComparatorHolder { + static final String UNSAFE_COMPARATOR_NAME = String.valueOf(LexicographicalComparatorHolder.class.getName()).concat("$UnsafeComparator"); + static final Comparator BEST_COMPARATOR = LexicographicalComparatorHolder.getBestComparator(); + + LexicographicalComparatorHolder() { + } + + static Comparator getBestComparator() { + try { + Class theClass = Class.forName(UNSAFE_COMPARATOR_NAME); + Comparator comparator = (Comparator)theClass.getEnumConstants()[0]; + return comparator; + } + catch (Throwable t) { + return UnsignedBytes.lexicographicalComparatorJavaImpl(); + } + } + + static enum PureJavaComparator implements Comparator + { + INSTANCE; + + + @Override + public int compare(byte[] left, byte[] right) { + int minLength = Math.min(left.length, right.length); + for (int i = 0; i < minLength; ++i) { + int result = UnsignedBytes.compare(left[i], right[i]); + if (result == 0) continue; + return result; + } + return left.length - right.length; + } + } + + @VisibleForTesting + static enum UnsafeComparator implements Comparator + { + INSTANCE; + + static final boolean BIG_ENDIAN; + static final Unsafe theUnsafe; + static final int BYTE_ARRAY_BASE_OFFSET; + + private static Unsafe getUnsafe() { + try { + return Unsafe.getUnsafe(); + } + catch (SecurityException tryReflectionInstead) { + try { + return AccessController.doPrivileged(new PrivilegedExceptionAction(){ + + @Override + public Unsafe run() throws Exception { + Class k = Unsafe.class; + for (Field f : k.getDeclaredFields()) { + f.setAccessible(true); + Object x = f.get(null); + if (!k.isInstance(x)) continue; + return (Unsafe)k.cast(x); + } + throw new NoSuchFieldError("the Unsafe"); + } + }); + } + catch (PrivilegedActionException e) { + throw new RuntimeException("Could not initialize intrinsics", e.getCause()); + } + } + } + + @Override + public int compare(byte[] left, byte[] right) { + int i; + int minLength = Math.min(left.length, right.length); + int minWords = minLength / 8; + for (i = 0; i < minWords * 8; i += 8) { + long rw; + long lw = theUnsafe.getLong(left, (long)BYTE_ARRAY_BASE_OFFSET + (long)i); + if (lw == (rw = theUnsafe.getLong(right, (long)BYTE_ARRAY_BASE_OFFSET + (long)i))) continue; + if (BIG_ENDIAN) { + return UnsignedLongs.compare(lw, rw); + } + int n = Long.numberOfTrailingZeros(lw ^ rw) & 0xFFFFFFF8; + return (int)((lw >>> n & 0xFFL) - (rw >>> n & 0xFFL)); + } + for (i = minWords * 8; i < minLength; ++i) { + int result = UnsignedBytes.compare(left[i], right[i]); + if (result == 0) continue; + return result; + } + return left.length - right.length; + } + + static { + BIG_ENDIAN = ByteOrder.nativeOrder().equals(ByteOrder.BIG_ENDIAN); + theUnsafe = UnsafeComparator.getUnsafe(); + BYTE_ARRAY_BASE_OFFSET = theUnsafe.arrayBaseOffset(byte[].class); + if (theUnsafe.arrayIndexScale(byte[].class) != 1) { + throw new AssertionError(); + } + } + } + } +} diff --git a/src/com/google/common/primitives/UnsignedInteger.java b/src/com/google/common/primitives/UnsignedInteger.java new file mode 100644 index 0000000..636c66d --- /dev/null +++ b/src/com/google/common/primitives/UnsignedInteger.java @@ -0,0 +1,125 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.primitives; + +import com.google.common.annotations.GwtCompatible; +import com.google.common.annotations.GwtIncompatible; +import com.google.common.base.Preconditions; +import com.google.common.primitives.UnsignedInts; +import java.math.BigInteger; +import javax.annotation.CheckReturnValue; +import javax.annotation.Nullable; + +@GwtCompatible(emulated=true) +public final class UnsignedInteger +extends Number +implements Comparable { + public static final UnsignedInteger ZERO = UnsignedInteger.fromIntBits(0); + public static final UnsignedInteger ONE = UnsignedInteger.fromIntBits(1); + public static final UnsignedInteger MAX_VALUE = UnsignedInteger.fromIntBits(-1); + private final int value; + + private UnsignedInteger(int value) { + this.value = value & 0xFFFFFFFF; + } + + public static UnsignedInteger fromIntBits(int bits) { + return new UnsignedInteger(bits); + } + + public static UnsignedInteger valueOf(long value) { + Preconditions.checkArgument((value & 0xFFFFFFFFL) == value, "value (%s) is outside the range for an unsigned integer value", value); + return UnsignedInteger.fromIntBits((int)value); + } + + public static UnsignedInteger valueOf(BigInteger value) { + Preconditions.checkNotNull(value); + Preconditions.checkArgument(value.signum() >= 0 && value.bitLength() <= 32, "value (%s) is outside the range for an unsigned integer value", value); + return UnsignedInteger.fromIntBits(value.intValue()); + } + + public static UnsignedInteger valueOf(String string) { + return UnsignedInteger.valueOf(string, 10); + } + + public static UnsignedInteger valueOf(String string, int radix) { + return UnsignedInteger.fromIntBits(UnsignedInts.parseUnsignedInt(string, radix)); + } + + @CheckReturnValue + public UnsignedInteger plus(UnsignedInteger val) { + return UnsignedInteger.fromIntBits(this.value + Preconditions.checkNotNull(val).value); + } + + @CheckReturnValue + public UnsignedInteger minus(UnsignedInteger val) { + return UnsignedInteger.fromIntBits(this.value - Preconditions.checkNotNull(val).value); + } + + @CheckReturnValue + @GwtIncompatible(value="Does not truncate correctly") + public UnsignedInteger times(UnsignedInteger val) { + return UnsignedInteger.fromIntBits(this.value * Preconditions.checkNotNull(val).value); + } + + @CheckReturnValue + public UnsignedInteger dividedBy(UnsignedInteger val) { + return UnsignedInteger.fromIntBits(UnsignedInts.divide(this.value, Preconditions.checkNotNull(val).value)); + } + + @CheckReturnValue + public UnsignedInteger mod(UnsignedInteger val) { + return UnsignedInteger.fromIntBits(UnsignedInts.remainder(this.value, Preconditions.checkNotNull(val).value)); + } + + @Override + public int intValue() { + return this.value; + } + + @Override + public long longValue() { + return UnsignedInts.toLong(this.value); + } + + @Override + public float floatValue() { + return this.longValue(); + } + + @Override + public double doubleValue() { + return this.longValue(); + } + + public BigInteger bigIntegerValue() { + return BigInteger.valueOf(this.longValue()); + } + + @Override + public int compareTo(UnsignedInteger other) { + Preconditions.checkNotNull(other); + return UnsignedInts.compare(this.value, other.value); + } + + public int hashCode() { + return this.value; + } + + public boolean equals(@Nullable Object obj) { + if (obj instanceof UnsignedInteger) { + UnsignedInteger other = (UnsignedInteger)obj; + return this.value == other.value; + } + return false; + } + + public String toString() { + return this.toString(10); + } + + public String toString(int radix) { + return UnsignedInts.toString(this.value, radix); + } +} diff --git a/src/com/google/common/primitives/UnsignedInts.java b/src/com/google/common/primitives/UnsignedInts.java new file mode 100644 index 0000000..570d761 --- /dev/null +++ b/src/com/google/common/primitives/UnsignedInts.java @@ -0,0 +1,132 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.primitives; + +import com.google.common.annotations.Beta; +import com.google.common.annotations.GwtCompatible; +import com.google.common.base.Preconditions; +import com.google.common.primitives.Ints; +import com.google.common.primitives.ParseRequest; +import java.util.Comparator; + +@Beta +@GwtCompatible +public final class UnsignedInts { + static final long INT_MASK = 0xFFFFFFFFL; + + private UnsignedInts() { + } + + static int flip(int value) { + return value ^ Integer.MIN_VALUE; + } + + public static int compare(int a, int b) { + return Ints.compare(UnsignedInts.flip(a), UnsignedInts.flip(b)); + } + + public static long toLong(int value) { + return (long)value & 0xFFFFFFFFL; + } + + public static int min(int ... array) { + Preconditions.checkArgument(array.length > 0); + int min = UnsignedInts.flip(array[0]); + for (int i = 1; i < array.length; ++i) { + int next = UnsignedInts.flip(array[i]); + if (next >= min) continue; + min = next; + } + return UnsignedInts.flip(min); + } + + public static int max(int ... array) { + Preconditions.checkArgument(array.length > 0); + int max = UnsignedInts.flip(array[0]); + for (int i = 1; i < array.length; ++i) { + int next = UnsignedInts.flip(array[i]); + if (next <= max) continue; + max = next; + } + return UnsignedInts.flip(max); + } + + public static String join(String separator, int ... array) { + Preconditions.checkNotNull(separator); + if (array.length == 0) { + return ""; + } + StringBuilder builder = new StringBuilder(array.length * 5); + builder.append(UnsignedInts.toString(array[0])); + for (int i = 1; i < array.length; ++i) { + builder.append(separator).append(UnsignedInts.toString(array[i])); + } + return builder.toString(); + } + + public static Comparator lexicographicalComparator() { + return LexicographicalComparator.INSTANCE; + } + + public static int divide(int dividend, int divisor) { + return (int)(UnsignedInts.toLong(dividend) / UnsignedInts.toLong(divisor)); + } + + public static int remainder(int dividend, int divisor) { + return (int)(UnsignedInts.toLong(dividend) % UnsignedInts.toLong(divisor)); + } + + public static int decode(String stringValue) { + ParseRequest request = ParseRequest.fromString(stringValue); + try { + return UnsignedInts.parseUnsignedInt(request.rawValue, request.radix); + } + catch (NumberFormatException e) { + String string = String.valueOf(stringValue); + NumberFormatException decodeException = new NumberFormatException(string.length() != 0 ? "Error parsing value: ".concat(string) : new String("Error parsing value: ")); + decodeException.initCause(e); + throw decodeException; + } + } + + public static int parseUnsignedInt(String s) { + return UnsignedInts.parseUnsignedInt(s, 10); + } + + public static int parseUnsignedInt(String string, int radix) { + Preconditions.checkNotNull(string); + long result = Long.parseLong(string, radix); + if ((result & 0xFFFFFFFFL) != result) { + String string2 = String.valueOf(String.valueOf(string)); + int n = radix; + throw new NumberFormatException(new StringBuilder(69 + string2.length()).append("Input ").append(string2).append(" in base ").append(n).append(" is not in the range of an unsigned integer").toString()); + } + return (int)result; + } + + public static String toString(int x) { + return UnsignedInts.toString(x, 10); + } + + public static String toString(int x, int radix) { + long asLong = (long)x & 0xFFFFFFFFL; + return Long.toString(asLong, radix); + } + + static enum LexicographicalComparator implements Comparator + { + INSTANCE; + + + @Override + public int compare(int[] left, int[] right) { + int minLength = Math.min(left.length, right.length); + for (int i = 0; i < minLength; ++i) { + if (left[i] == right[i]) continue; + return UnsignedInts.compare(left[i], right[i]); + } + return left.length - right.length; + } + } +} diff --git a/src/com/google/common/primitives/UnsignedLong.java b/src/com/google/common/primitives/UnsignedLong.java new file mode 100644 index 0000000..d1e31b6 --- /dev/null +++ b/src/com/google/common/primitives/UnsignedLong.java @@ -0,0 +1,137 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.primitives; + +import com.google.common.annotations.GwtCompatible; +import com.google.common.base.Preconditions; +import com.google.common.primitives.Longs; +import com.google.common.primitives.UnsignedLongs; +import java.io.Serializable; +import java.math.BigInteger; +import javax.annotation.CheckReturnValue; +import javax.annotation.Nullable; + +@GwtCompatible(serializable=true) +public final class UnsignedLong +extends Number +implements Comparable, +Serializable { + private static final long UNSIGNED_MASK = Long.MAX_VALUE; + public static final UnsignedLong ZERO = new UnsignedLong(0L); + public static final UnsignedLong ONE = new UnsignedLong(1L); + public static final UnsignedLong MAX_VALUE = new UnsignedLong(-1L); + private final long value; + + private UnsignedLong(long value) { + this.value = value; + } + + public static UnsignedLong fromLongBits(long bits) { + return new UnsignedLong(bits); + } + + public static UnsignedLong valueOf(long value) { + Preconditions.checkArgument(value >= 0L, "value (%s) is outside the range for an unsigned long value", value); + return UnsignedLong.fromLongBits(value); + } + + public static UnsignedLong valueOf(BigInteger value) { + Preconditions.checkNotNull(value); + Preconditions.checkArgument(value.signum() >= 0 && value.bitLength() <= 64, "value (%s) is outside the range for an unsigned long value", value); + return UnsignedLong.fromLongBits(value.longValue()); + } + + public static UnsignedLong valueOf(String string) { + return UnsignedLong.valueOf(string, 10); + } + + public static UnsignedLong valueOf(String string, int radix) { + return UnsignedLong.fromLongBits(UnsignedLongs.parseUnsignedLong(string, radix)); + } + + public UnsignedLong plus(UnsignedLong val) { + return UnsignedLong.fromLongBits(this.value + Preconditions.checkNotNull(val).value); + } + + public UnsignedLong minus(UnsignedLong val) { + return UnsignedLong.fromLongBits(this.value - Preconditions.checkNotNull(val).value); + } + + @CheckReturnValue + public UnsignedLong times(UnsignedLong val) { + return UnsignedLong.fromLongBits(this.value * Preconditions.checkNotNull(val).value); + } + + @CheckReturnValue + public UnsignedLong dividedBy(UnsignedLong val) { + return UnsignedLong.fromLongBits(UnsignedLongs.divide(this.value, Preconditions.checkNotNull(val).value)); + } + + @CheckReturnValue + public UnsignedLong mod(UnsignedLong val) { + return UnsignedLong.fromLongBits(UnsignedLongs.remainder(this.value, Preconditions.checkNotNull(val).value)); + } + + @Override + public int intValue() { + return (int)this.value; + } + + @Override + public long longValue() { + return this.value; + } + + @Override + public float floatValue() { + float fValue = this.value & Long.MAX_VALUE; + if (this.value < 0L) { + fValue += 9.223372E18f; + } + return fValue; + } + + @Override + public double doubleValue() { + double dValue = this.value & Long.MAX_VALUE; + if (this.value < 0L) { + dValue += 9.223372036854776E18; + } + return dValue; + } + + public BigInteger bigIntegerValue() { + BigInteger bigInt = BigInteger.valueOf(this.value & Long.MAX_VALUE); + if (this.value < 0L) { + bigInt = bigInt.setBit(63); + } + return bigInt; + } + + @Override + public int compareTo(UnsignedLong o) { + Preconditions.checkNotNull(o); + return UnsignedLongs.compare(this.value, o.value); + } + + public int hashCode() { + return Longs.hashCode(this.value); + } + + public boolean equals(@Nullable Object obj) { + if (obj instanceof UnsignedLong) { + UnsignedLong other = (UnsignedLong)obj; + return this.value == other.value; + } + return false; + } + + public String toString() { + return UnsignedLongs.toString(this.value); + } + + public String toString(int radix) { + return UnsignedLongs.toString(this.value, radix); + } +} diff --git a/src/com/google/common/primitives/UnsignedLongs.java b/src/com/google/common/primitives/UnsignedLongs.java new file mode 100644 index 0000000..2610ad7 --- /dev/null +++ b/src/com/google/common/primitives/UnsignedLongs.java @@ -0,0 +1,205 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.primitives; + +import com.google.common.annotations.Beta; +import com.google.common.annotations.GwtCompatible; +import com.google.common.base.Preconditions; +import com.google.common.primitives.Longs; +import com.google.common.primitives.ParseRequest; +import java.math.BigInteger; +import java.util.Comparator; + +@Beta +@GwtCompatible +public final class UnsignedLongs { + public static final long MAX_VALUE = -1L; + private static final long[] maxValueDivs = new long[37]; + private static final int[] maxValueMods = new int[37]; + private static final int[] maxSafeDigits = new int[37]; + + private UnsignedLongs() { + } + + private static long flip(long a) { + return a ^ Long.MIN_VALUE; + } + + public static int compare(long a, long b) { + return Longs.compare(UnsignedLongs.flip(a), UnsignedLongs.flip(b)); + } + + public static long min(long ... array) { + Preconditions.checkArgument(array.length > 0); + long min = UnsignedLongs.flip(array[0]); + for (int i = 1; i < array.length; ++i) { + long next = UnsignedLongs.flip(array[i]); + if (next >= min) continue; + min = next; + } + return UnsignedLongs.flip(min); + } + + public static long max(long ... array) { + Preconditions.checkArgument(array.length > 0); + long max = UnsignedLongs.flip(array[0]); + for (int i = 1; i < array.length; ++i) { + long next = UnsignedLongs.flip(array[i]); + if (next <= max) continue; + max = next; + } + return UnsignedLongs.flip(max); + } + + public static String join(String separator, long ... array) { + Preconditions.checkNotNull(separator); + if (array.length == 0) { + return ""; + } + StringBuilder builder = new StringBuilder(array.length * 5); + builder.append(UnsignedLongs.toString(array[0])); + for (int i = 1; i < array.length; ++i) { + builder.append(separator).append(UnsignedLongs.toString(array[i])); + } + return builder.toString(); + } + + public static Comparator lexicographicalComparator() { + return LexicographicalComparator.INSTANCE; + } + + public static long divide(long dividend, long divisor) { + long quotient; + if (divisor < 0L) { + if (UnsignedLongs.compare(dividend, divisor) < 0) { + return 0L; + } + return 1L; + } + if (dividend >= 0L) { + return dividend / divisor; + } + long rem = dividend - (quotient = (dividend >>> 1) / divisor << 1) * divisor; + return quotient + (long)(UnsignedLongs.compare(rem, divisor) >= 0 ? 1 : 0); + } + + public static long remainder(long dividend, long divisor) { + long rem; + if (divisor < 0L) { + if (UnsignedLongs.compare(dividend, divisor) < 0) { + return dividend; + } + return dividend - divisor; + } + if (dividend >= 0L) { + return dividend % divisor; + } + long quotient = (dividend >>> 1) / divisor << 1; + return rem - (UnsignedLongs.compare(rem = dividend - quotient * divisor, divisor) >= 0 ? divisor : 0L); + } + + public static long parseUnsignedLong(String s) { + return UnsignedLongs.parseUnsignedLong(s, 10); + } + + public static long decode(String stringValue) { + ParseRequest request = ParseRequest.fromString(stringValue); + try { + return UnsignedLongs.parseUnsignedLong(request.rawValue, request.radix); + } + catch (NumberFormatException e) { + String string = String.valueOf(stringValue); + NumberFormatException decodeException = new NumberFormatException(string.length() != 0 ? "Error parsing value: ".concat(string) : new String("Error parsing value: ")); + decodeException.initCause(e); + throw decodeException; + } + } + + public static long parseUnsignedLong(String s, int radix) { + Preconditions.checkNotNull(s); + if (s.length() == 0) { + throw new NumberFormatException("empty string"); + } + if (radix < 2 || radix > 36) { + int n = radix; + throw new NumberFormatException(new StringBuilder(26).append("illegal radix: ").append(n).toString()); + } + int max_safe_pos = maxSafeDigits[radix] - 1; + long value = 0L; + for (int pos = 0; pos < s.length(); ++pos) { + int digit = Character.digit(s.charAt(pos), radix); + if (digit == -1) { + throw new NumberFormatException(s); + } + if (pos > max_safe_pos && UnsignedLongs.overflowInParse(value, digit, radix)) { + String string = String.valueOf(s); + throw new NumberFormatException(string.length() != 0 ? "Too large for unsigned long: ".concat(string) : new String("Too large for unsigned long: ")); + } + value = value * (long)radix + (long)digit; + } + return value; + } + + private static boolean overflowInParse(long current, int digit, int radix) { + if (current >= 0L) { + if (current < maxValueDivs[radix]) { + return false; + } + if (current > maxValueDivs[radix]) { + return true; + } + return digit > maxValueMods[radix]; + } + return true; + } + + public static String toString(long x) { + return UnsignedLongs.toString(x, 10); + } + + public static String toString(long x, int radix) { + Preconditions.checkArgument(radix >= 2 && radix <= 36, "radix (%s) must be between Character.MIN_RADIX and Character.MAX_RADIX", radix); + if (x == 0L) { + return "0"; + } + char[] buf = new char[64]; + int i = buf.length; + if (x < 0L) { + long quotient = UnsignedLongs.divide(x, radix); + long rem = x - quotient * (long)radix; + buf[--i] = Character.forDigit((int)rem, radix); + x = quotient; + } + while (x > 0L) { + buf[--i] = Character.forDigit((int)(x % (long)radix), radix); + x /= (long)radix; + } + return new String(buf, i, buf.length - i); + } + + static { + BigInteger overflow = new BigInteger("10000000000000000", 16); + for (int i = 2; i <= 36; ++i) { + UnsignedLongs.maxValueDivs[i] = UnsignedLongs.divide(-1L, i); + UnsignedLongs.maxValueMods[i] = (int)UnsignedLongs.remainder(-1L, i); + UnsignedLongs.maxSafeDigits[i] = overflow.toString(i).length() - 1; + } + } + + static enum LexicographicalComparator implements Comparator + { + INSTANCE; + + + @Override + public int compare(long[] left, long[] right) { + int minLength = Math.min(left.length, right.length); + for (int i = 0; i < minLength; ++i) { + if (left[i] == right[i]) continue; + return UnsignedLongs.compare(left[i], right[i]); + } + return left.length - right.length; + } + } +} diff --git a/src/com/google/common/primitives/package-info.java b/src/com/google/common/primitives/package-info.java new file mode 100644 index 0000000..d5be0ca --- /dev/null +++ b/src/com/google/common/primitives/package-info.java @@ -0,0 +1,8 @@ +/* + * Decompiled with CFR 0.152. + */ +@ParametersAreNonnullByDefault +package com.google.common.primitives; + +import javax.annotation.ParametersAreNonnullByDefault; + diff --git a/src/com/google/common/reflect/AbstractInvocationHandler.java b/src/com/google/common/reflect/AbstractInvocationHandler.java new file mode 100644 index 0000000..e471de6 --- /dev/null +++ b/src/com/google/common/reflect/AbstractInvocationHandler.java @@ -0,0 +1,59 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.reflect; + +import com.google.common.annotations.Beta; +import java.lang.reflect.InvocationHandler; +import java.lang.reflect.Method; +import java.lang.reflect.Proxy; +import java.util.Arrays; +import javax.annotation.Nullable; + +@Beta +public abstract class AbstractInvocationHandler +implements InvocationHandler { + private static final Object[] NO_ARGS = new Object[0]; + + @Override + public final Object invoke(Object proxy, Method method, @Nullable Object[] args) throws Throwable { + if (args == null) { + args = NO_ARGS; + } + if (args.length == 0 && method.getName().equals("hashCode")) { + return this.hashCode(); + } + if (args.length == 1 && method.getName().equals("equals") && method.getParameterTypes()[0] == Object.class) { + Object arg = args[0]; + if (arg == null) { + return false; + } + if (proxy == arg) { + return true; + } + return AbstractInvocationHandler.isProxyOfSameInterfaces(arg, proxy.getClass()) && this.equals(Proxy.getInvocationHandler(arg)); + } + if (args.length == 0 && method.getName().equals("toString")) { + return this.toString(); + } + return this.handleInvocation(proxy, method, args); + } + + protected abstract Object handleInvocation(Object var1, Method var2, Object[] var3) throws Throwable; + + public boolean equals(Object obj) { + return super.equals(obj); + } + + public int hashCode() { + return super.hashCode(); + } + + public String toString() { + return super.toString(); + } + + private static boolean isProxyOfSameInterfaces(Object arg, Class proxyClass) { + return proxyClass.isInstance(arg) || Proxy.isProxyClass(arg.getClass()) && Arrays.equals(arg.getClass().getInterfaces(), proxyClass.getInterfaces()); + } +} diff --git a/src/com/google/common/reflect/ClassPath.java b/src/com/google/common/reflect/ClassPath.java new file mode 100644 index 0000000..367843e --- /dev/null +++ b/src/com/google/common/reflect/ClassPath.java @@ -0,0 +1,342 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.reflect; + +import com.google.common.annotations.Beta; +import com.google.common.annotations.VisibleForTesting; +import com.google.common.base.CharMatcher; +import com.google.common.base.Preconditions; +import com.google.common.base.Predicate; +import com.google.common.base.Splitter; +import com.google.common.collect.FluentIterable; +import com.google.common.collect.ImmutableCollection; +import com.google.common.collect.ImmutableMap; +import com.google.common.collect.ImmutableSet; +import com.google.common.collect.ImmutableSortedSet; +import com.google.common.collect.Maps; +import com.google.common.collect.Ordering; +import com.google.common.collect.Sets; +import com.google.common.reflect.Reflection; +import java.io.File; +import java.io.IOException; +import java.net.URI; +import java.net.URISyntaxException; +import java.net.URL; +import java.net.URLClassLoader; +import java.util.Enumeration; +import java.util.LinkedHashMap; +import java.util.Map; +import java.util.Set; +import java.util.jar.Attributes; +import java.util.jar.JarEntry; +import java.util.jar.JarFile; +import java.util.jar.Manifest; +import java.util.logging.Logger; +import javax.annotation.Nullable; + +@Beta +public final class ClassPath { + private static final Logger logger = Logger.getLogger(ClassPath.class.getName()); + private static final Predicate IS_TOP_LEVEL = new Predicate(){ + + @Override + public boolean apply(ClassInfo info) { + return info.className.indexOf(36) == -1; + } + }; + private static final Splitter CLASS_PATH_ATTRIBUTE_SEPARATOR = Splitter.on(" ").omitEmptyStrings(); + private static final String CLASS_FILE_NAME_EXTENSION = ".class"; + private final ImmutableSet resources; + + private ClassPath(ImmutableSet resources) { + this.resources = resources; + } + + public static ClassPath from(ClassLoader classloader) throws IOException { + Scanner scanner = new Scanner(); + for (Map.Entry entry : ClassPath.getClassPathEntries(classloader).entrySet()) { + scanner.scan((URI)entry.getKey(), (ClassLoader)entry.getValue()); + } + return new ClassPath(scanner.getResources()); + } + + public ImmutableSet getResources() { + return this.resources; + } + + public ImmutableSet getAllClasses() { + return FluentIterable.from(this.resources).filter(ClassInfo.class).toSet(); + } + + public ImmutableSet getTopLevelClasses() { + return FluentIterable.from(this.resources).filter(ClassInfo.class).filter(IS_TOP_LEVEL).toSet(); + } + + public ImmutableSet getTopLevelClasses(String packageName) { + Preconditions.checkNotNull(packageName); + ImmutableSet.Builder builder = ImmutableSet.builder(); + for (ClassInfo classInfo : this.getTopLevelClasses()) { + if (!classInfo.getPackageName().equals(packageName)) continue; + builder.add(classInfo); + } + return builder.build(); + } + + public ImmutableSet getTopLevelClassesRecursive(String packageName) { + Preconditions.checkNotNull(packageName); + String string = String.valueOf(String.valueOf(packageName)); + String packagePrefix = new StringBuilder(1 + string.length()).append(string).append(".").toString(); + ImmutableSet.Builder builder = ImmutableSet.builder(); + for (ClassInfo classInfo : this.getTopLevelClasses()) { + if (!classInfo.getName().startsWith(packagePrefix)) continue; + builder.add(classInfo); + } + return builder.build(); + } + + @VisibleForTesting + static ImmutableMap getClassPathEntries(ClassLoader classloader) { + LinkedHashMap entries = Maps.newLinkedHashMap(); + ClassLoader parent = classloader.getParent(); + if (parent != null) { + entries.putAll(ClassPath.getClassPathEntries(parent)); + } + if (classloader instanceof URLClassLoader) { + URLClassLoader urlClassLoader = (URLClassLoader)classloader; + for (URL entry : urlClassLoader.getURLs()) { + URI uri; + try { + uri = entry.toURI(); + } + catch (URISyntaxException e) { + throw new IllegalArgumentException(e); + } + if (entries.containsKey(uri)) continue; + entries.put(uri, classloader); + } + } + return ImmutableMap.copyOf(entries); + } + + @VisibleForTesting + static String getClassName(String filename) { + int classNameEnd = filename.length() - CLASS_FILE_NAME_EXTENSION.length(); + return filename.substring(0, classNameEnd).replace('/', '.'); + } + + @VisibleForTesting + static final class Scanner { + private final ImmutableSortedSet.Builder resources = new ImmutableSortedSet.Builder(Ordering.usingToString()); + private final Set scannedUris = Sets.newHashSet(); + + Scanner() { + } + + ImmutableSortedSet getResources() { + return this.resources.build(); + } + + void scan(URI uri, ClassLoader classloader) throws IOException { + if (uri.getScheme().equals("file") && this.scannedUris.add(uri)) { + this.scanFrom(new File(uri), classloader); + } + } + + @VisibleForTesting + void scanFrom(File file, ClassLoader classloader) throws IOException { + if (!file.exists()) { + return; + } + if (file.isDirectory()) { + this.scanDirectory(file, classloader); + } else { + this.scanJar(file, classloader); + } + } + + private void scanDirectory(File directory, ClassLoader classloader) throws IOException { + this.scanDirectory(directory, classloader, "", ImmutableSet.of()); + } + + private void scanDirectory(File directory, ClassLoader classloader, String packagePrefix, ImmutableSet ancestors) throws IOException { + File canonical = directory.getCanonicalFile(); + if (ancestors.contains(canonical)) { + return; + } + File[] files = directory.listFiles(); + if (files == null) { + String string = String.valueOf(String.valueOf(directory)); + logger.warning(new StringBuilder(22 + string.length()).append("Cannot read directory ").append(string).toString()); + return; + } + ImmutableCollection newAncestors = ((ImmutableSet.Builder)((ImmutableSet.Builder)ImmutableSet.builder().addAll(ancestors)).add(canonical)).build(); + for (File f : files) { + String resourceName; + String name = f.getName(); + if (f.isDirectory()) { + String string = String.valueOf(String.valueOf(packagePrefix)); + String string2 = String.valueOf(String.valueOf(name)); + this.scanDirectory(f, classloader, new StringBuilder(1 + string.length() + string2.length()).append(string).append(string2).append("/").toString(), (ImmutableSet)newAncestors); + continue; + } + String string = String.valueOf(packagePrefix); + String string3 = String.valueOf(name); + String string4 = resourceName = string3.length() != 0 ? string.concat(string3) : new String(string); + if (resourceName.equals("META-INF/MANIFEST.MF")) continue; + this.resources.add((Object)ResourceInfo.of(resourceName, classloader)); + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + private void scanJar(File file, ClassLoader classloader) throws IOException { + JarFile jarFile; + try { + jarFile = new JarFile(file); + } + catch (IOException e) { + return; + } + try { + for (URI uri : Scanner.getClassPathFromManifest(file, jarFile.getManifest())) { + this.scan(uri, classloader); + } + Enumeration entries = jarFile.entries(); + while (entries.hasMoreElements()) { + JarEntry entry = entries.nextElement(); + if (entry.isDirectory() || entry.getName().equals("META-INF/MANIFEST.MF")) continue; + this.resources.add((Object)ResourceInfo.of(entry.getName(), classloader)); + } + } + finally { + try { + jarFile.close(); + } + catch (IOException ignored) {} + } + } + + @VisibleForTesting + static ImmutableSet getClassPathFromManifest(File jarFile, @Nullable Manifest manifest) { + if (manifest == null) { + return ImmutableSet.of(); + } + ImmutableSet.Builder builder = ImmutableSet.builder(); + String classpathAttribute = manifest.getMainAttributes().getValue(Attributes.Name.CLASS_PATH.toString()); + if (classpathAttribute != null) { + for (String path : CLASS_PATH_ATTRIBUTE_SEPARATOR.split(classpathAttribute)) { + URI uri; + try { + uri = Scanner.getClassPathEntry(jarFile, path); + } + catch (URISyntaxException e) { + String string = String.valueOf(path); + logger.warning(string.length() != 0 ? "Invalid Class-Path entry: ".concat(string) : new String("Invalid Class-Path entry: ")); + continue; + } + builder.add(uri); + } + } + return builder.build(); + } + + @VisibleForTesting + static URI getClassPathEntry(File jarFile, String path) throws URISyntaxException { + URI uri = new URI(path); + if (uri.isAbsolute()) { + return uri; + } + return new File(jarFile.getParentFile(), path.replace('/', File.separatorChar)).toURI(); + } + } + + @Beta + public static final class ClassInfo + extends ResourceInfo { + private final String className; + + ClassInfo(String resourceName, ClassLoader loader) { + super(resourceName, loader); + this.className = ClassPath.getClassName(resourceName); + } + + public String getPackageName() { + return Reflection.getPackageName(this.className); + } + + public String getSimpleName() { + int lastDollarSign = this.className.lastIndexOf(36); + if (lastDollarSign != -1) { + String innerClassName = this.className.substring(lastDollarSign + 1); + return CharMatcher.DIGIT.trimLeadingFrom(innerClassName); + } + String packageName = this.getPackageName(); + if (packageName.isEmpty()) { + return this.className; + } + return this.className.substring(packageName.length() + 1); + } + + public String getName() { + return this.className; + } + + public Class load() { + try { + return this.loader.loadClass(this.className); + } + catch (ClassNotFoundException e) { + throw new IllegalStateException(e); + } + } + + @Override + public String toString() { + return this.className; + } + } + + @Beta + public static class ResourceInfo { + private final String resourceName; + final ClassLoader loader; + + static ResourceInfo of(String resourceName, ClassLoader loader) { + if (resourceName.endsWith(ClassPath.CLASS_FILE_NAME_EXTENSION)) { + return new ClassInfo(resourceName, loader); + } + return new ResourceInfo(resourceName, loader); + } + + ResourceInfo(String resourceName, ClassLoader loader) { + this.resourceName = Preconditions.checkNotNull(resourceName); + this.loader = Preconditions.checkNotNull(loader); + } + + public final URL url() { + return Preconditions.checkNotNull(this.loader.getResource(this.resourceName), "Failed to load resource: %s", this.resourceName); + } + + public final String getResourceName() { + return this.resourceName; + } + + public int hashCode() { + return this.resourceName.hashCode(); + } + + public boolean equals(Object obj) { + if (obj instanceof ResourceInfo) { + ResourceInfo that = (ResourceInfo)obj; + return this.resourceName.equals(that.resourceName) && this.loader == that.loader; + } + return false; + } + + public String toString() { + return this.resourceName; + } + } +} diff --git a/src/com/google/common/reflect/Element.java b/src/com/google/common/reflect/Element.java new file mode 100644 index 0000000..f60d49f --- /dev/null +++ b/src/com/google/common/reflect/Element.java @@ -0,0 +1,138 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.reflect; + +import com.google.common.base.Preconditions; +import com.google.common.reflect.TypeToken; +import java.lang.annotation.Annotation; +import java.lang.reflect.AccessibleObject; +import java.lang.reflect.Member; +import java.lang.reflect.Modifier; +import javax.annotation.Nullable; + +class Element +extends AccessibleObject +implements Member { + private final AccessibleObject accessibleObject; + private final Member member; + + Element(M member) { + Preconditions.checkNotNull(member); + this.accessibleObject = member; + this.member = (Member)((Object)member); + } + + public TypeToken getOwnerType() { + return TypeToken.of(this.getDeclaringClass()); + } + + @Override + public final boolean isAnnotationPresent(Class annotationClass) { + return this.accessibleObject.isAnnotationPresent(annotationClass); + } + + public final A getAnnotation(Class annotationClass) { + return this.accessibleObject.getAnnotation(annotationClass); + } + + @Override + public final Annotation[] getAnnotations() { + return this.accessibleObject.getAnnotations(); + } + + @Override + public final Annotation[] getDeclaredAnnotations() { + return this.accessibleObject.getDeclaredAnnotations(); + } + + @Override + public final void setAccessible(boolean flag) throws SecurityException { + this.accessibleObject.setAccessible(flag); + } + + @Override + public final boolean isAccessible() { + return this.accessibleObject.isAccessible(); + } + + @Override + public Class getDeclaringClass() { + return this.member.getDeclaringClass(); + } + + @Override + public final String getName() { + return this.member.getName(); + } + + @Override + public final int getModifiers() { + return this.member.getModifiers(); + } + + @Override + public final boolean isSynthetic() { + return this.member.isSynthetic(); + } + + public final boolean isPublic() { + return Modifier.isPublic(this.getModifiers()); + } + + public final boolean isProtected() { + return Modifier.isProtected(this.getModifiers()); + } + + public final boolean isPackagePrivate() { + return !this.isPrivate() && !this.isPublic() && !this.isProtected(); + } + + public final boolean isPrivate() { + return Modifier.isPrivate(this.getModifiers()); + } + + public final boolean isStatic() { + return Modifier.isStatic(this.getModifiers()); + } + + public final boolean isFinal() { + return Modifier.isFinal(this.getModifiers()); + } + + public final boolean isAbstract() { + return Modifier.isAbstract(this.getModifiers()); + } + + public final boolean isNative() { + return Modifier.isNative(this.getModifiers()); + } + + public final boolean isSynchronized() { + return Modifier.isSynchronized(this.getModifiers()); + } + + final boolean isVolatile() { + return Modifier.isVolatile(this.getModifiers()); + } + + final boolean isTransient() { + return Modifier.isTransient(this.getModifiers()); + } + + public boolean equals(@Nullable Object obj) { + if (obj instanceof Element) { + Element that = (Element)obj; + return this.getOwnerType().equals(that.getOwnerType()) && this.member.equals(that.member); + } + return false; + } + + public int hashCode() { + return this.member.hashCode(); + } + + public String toString() { + return this.member.toString(); + } +} diff --git a/src/com/google/common/reflect/ImmutableTypeToInstanceMap.java b/src/com/google/common/reflect/ImmutableTypeToInstanceMap.java new file mode 100644 index 0000000..d9bb64b --- /dev/null +++ b/src/com/google/common/reflect/ImmutableTypeToInstanceMap.java @@ -0,0 +1,81 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.reflect; + +import com.google.common.annotations.Beta; +import com.google.common.collect.ForwardingMap; +import com.google.common.collect.ImmutableMap; +import com.google.common.reflect.TypeToInstanceMap; +import com.google.common.reflect.TypeToken; +import java.util.Map; + +@Beta +public final class ImmutableTypeToInstanceMap +extends ForwardingMap, B> +implements TypeToInstanceMap { + private final ImmutableMap, B> delegate; + + public static ImmutableTypeToInstanceMap of() { + return new ImmutableTypeToInstanceMap(ImmutableMap.of()); + } + + public static Builder builder() { + return new Builder(); + } + + private ImmutableTypeToInstanceMap(ImmutableMap, B> delegate) { + this.delegate = delegate; + } + + @Override + public T getInstance(TypeToken type) { + return this.trustedGet(type.rejectTypeVariables()); + } + + @Override + public T putInstance(TypeToken type, T value) { + throw new UnsupportedOperationException(); + } + + @Override + public T getInstance(Class type) { + return this.trustedGet(TypeToken.of(type)); + } + + @Override + public T putInstance(Class type, T value) { + throw new UnsupportedOperationException(); + } + + @Override + protected Map, B> delegate() { + return this.delegate; + } + + private T trustedGet(TypeToken type) { + return (T)this.delegate.get(type); + } + + @Beta + public static final class Builder { + private final ImmutableMap.Builder, B> mapBuilder = ImmutableMap.builder(); + + private Builder() { + } + + public Builder put(Class key, T value) { + this.mapBuilder.put(TypeToken.of(key), value); + return this; + } + + public Builder put(TypeToken key, T value) { + this.mapBuilder.put(key.rejectTypeVariables(), value); + return this; + } + + public ImmutableTypeToInstanceMap build() { + return new ImmutableTypeToInstanceMap(this.mapBuilder.build()); + } + } +} diff --git a/src/com/google/common/reflect/Invokable.java b/src/com/google/common/reflect/Invokable.java new file mode 100644 index 0000000..754253e --- /dev/null +++ b/src/com/google/common/reflect/Invokable.java @@ -0,0 +1,236 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.reflect; + +import com.google.common.annotations.Beta; +import com.google.common.base.Preconditions; +import com.google.common.collect.ImmutableList; +import com.google.common.reflect.Element; +import com.google.common.reflect.Parameter; +import com.google.common.reflect.TypeToken; +import com.google.common.reflect.Types; +import java.lang.annotation.Annotation; +import java.lang.reflect.AccessibleObject; +import java.lang.reflect.Constructor; +import java.lang.reflect.GenericDeclaration; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.lang.reflect.Modifier; +import java.lang.reflect.Type; +import java.lang.reflect.TypeVariable; +import java.util.Arrays; +import javax.annotation.Nullable; + +@Beta +public abstract class Invokable +extends Element +implements GenericDeclaration { + Invokable(M member) { + super(member); + } + + public static Invokable from(Method method) { + return new MethodInvokable(method); + } + + public static Invokable from(Constructor constructor) { + return new ConstructorInvokable(constructor); + } + + public abstract boolean isOverridable(); + + public abstract boolean isVarArgs(); + + public final R invoke(@Nullable T receiver, Object ... args) throws InvocationTargetException, IllegalAccessException { + return (R)this.invokeInternal(receiver, Preconditions.checkNotNull(args)); + } + + public final TypeToken getReturnType() { + return TypeToken.of(this.getGenericReturnType()); + } + + public final ImmutableList getParameters() { + Type[] parameterTypes = this.getGenericParameterTypes(); + Annotation[][] annotations = this.getParameterAnnotations(); + ImmutableList.Builder builder = ImmutableList.builder(); + for (int i = 0; i < parameterTypes.length; ++i) { + builder.add(new Parameter(this, i, TypeToken.of(parameterTypes[i]), annotations[i])); + } + return builder.build(); + } + + public final ImmutableList> getExceptionTypes() { + ImmutableList.Builder builder = ImmutableList.builder(); + for (Type type : this.getGenericExceptionTypes()) { + TypeToken exceptionType = TypeToken.of(type); + builder.add(exceptionType); + } + return builder.build(); + } + + public final Invokable returning(Class returnType) { + return this.returning(TypeToken.of(returnType)); + } + + public final Invokable returning(TypeToken returnType) { + if (!returnType.isAssignableFrom(this.getReturnType())) { + String string = String.valueOf(String.valueOf(this.getReturnType())); + String string2 = String.valueOf(String.valueOf(returnType)); + throw new IllegalArgumentException(new StringBuilder(35 + string.length() + string2.length()).append("Invokable is known to return ").append(string).append(", not ").append(string2).toString()); + } + Invokable specialized = this; + return specialized; + } + + public final Class getDeclaringClass() { + return super.getDeclaringClass(); + } + + public TypeToken getOwnerType() { + return TypeToken.of(this.getDeclaringClass()); + } + + abstract Object invokeInternal(@Nullable Object var1, Object[] var2) throws InvocationTargetException, IllegalAccessException; + + abstract Type[] getGenericParameterTypes(); + + abstract Type[] getGenericExceptionTypes(); + + abstract Annotation[][] getParameterAnnotations(); + + abstract Type getGenericReturnType(); + + static class ConstructorInvokable + extends Invokable { + final Constructor constructor; + + ConstructorInvokable(Constructor constructor) { + super(constructor); + this.constructor = constructor; + } + + @Override + final Object invokeInternal(@Nullable Object receiver, Object[] args) throws InvocationTargetException, IllegalAccessException { + try { + return this.constructor.newInstance(args); + } + catch (InstantiationException e) { + String string = String.valueOf(String.valueOf(this.constructor)); + throw new RuntimeException(new StringBuilder(8 + string.length()).append(string).append(" failed.").toString(), e); + } + } + + @Override + Type getGenericReturnType() { + Class declaringClass = this.getDeclaringClass(); + Type[] typeParams = declaringClass.getTypeParameters(); + if (typeParams.length > 0) { + return Types.newParameterizedType(declaringClass, typeParams); + } + return declaringClass; + } + + @Override + Type[] getGenericParameterTypes() { + Class[] rawParamTypes; + Type[] types = this.constructor.getGenericParameterTypes(); + if (types.length > 0 && this.mayNeedHiddenThis() && types.length == (rawParamTypes = this.constructor.getParameterTypes()).length && rawParamTypes[0] == this.getDeclaringClass().getEnclosingClass()) { + return Arrays.copyOfRange(types, 1, types.length); + } + return types; + } + + @Override + Type[] getGenericExceptionTypes() { + return this.constructor.getGenericExceptionTypes(); + } + + @Override + final Annotation[][] getParameterAnnotations() { + return this.constructor.getParameterAnnotations(); + } + + @Override + public final TypeVariable[] getTypeParameters() { + TypeVariable>[] declaredByClass = this.getDeclaringClass().getTypeParameters(); + TypeVariable>[] declaredByConstructor = this.constructor.getTypeParameters(); + TypeVariable[] result = new TypeVariable[declaredByClass.length + declaredByConstructor.length]; + System.arraycopy(declaredByClass, 0, result, 0, declaredByClass.length); + System.arraycopy(declaredByConstructor, 0, result, declaredByClass.length, declaredByConstructor.length); + return result; + } + + @Override + public final boolean isOverridable() { + return false; + } + + @Override + public final boolean isVarArgs() { + return this.constructor.isVarArgs(); + } + + private boolean mayNeedHiddenThis() { + Class declaringClass = this.constructor.getDeclaringClass(); + if (declaringClass.getEnclosingConstructor() != null) { + return true; + } + Method enclosingMethod = declaringClass.getEnclosingMethod(); + if (enclosingMethod != null) { + return !Modifier.isStatic(enclosingMethod.getModifiers()); + } + return declaringClass.getEnclosingClass() != null && !Modifier.isStatic(declaringClass.getModifiers()); + } + } + + static class MethodInvokable + extends Invokable { + final Method method; + + MethodInvokable(Method method) { + super(method); + this.method = method; + } + + @Override + final Object invokeInternal(@Nullable Object receiver, Object[] args) throws InvocationTargetException, IllegalAccessException { + return this.method.invoke(receiver, args); + } + + @Override + Type getGenericReturnType() { + return this.method.getGenericReturnType(); + } + + @Override + Type[] getGenericParameterTypes() { + return this.method.getGenericParameterTypes(); + } + + @Override + Type[] getGenericExceptionTypes() { + return this.method.getGenericExceptionTypes(); + } + + @Override + final Annotation[][] getParameterAnnotations() { + return this.method.getParameterAnnotations(); + } + + @Override + public final TypeVariable[] getTypeParameters() { + return this.method.getTypeParameters(); + } + + @Override + public final boolean isOverridable() { + return !this.isFinal() && !this.isPrivate() && !this.isStatic() && !Modifier.isFinal(this.getDeclaringClass().getModifiers()); + } + + @Override + public final boolean isVarArgs() { + return this.method.isVarArgs(); + } + } +} diff --git a/src/com/google/common/reflect/MutableTypeToInstanceMap.java b/src/com/google/common/reflect/MutableTypeToInstanceMap.java new file mode 100644 index 0000000..a78ce12 --- /dev/null +++ b/src/com/google/common/reflect/MutableTypeToInstanceMap.java @@ -0,0 +1,134 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.reflect; + +import com.google.common.annotations.Beta; +import com.google.common.base.Function; +import com.google.common.base.Preconditions; +import com.google.common.collect.ForwardingMap; +import com.google.common.collect.ForwardingMapEntry; +import com.google.common.collect.ForwardingSet; +import com.google.common.collect.Iterators; +import com.google.common.collect.Maps; +import com.google.common.reflect.TypeToInstanceMap; +import com.google.common.reflect.TypeToken; +import java.util.Iterator; +import java.util.Map; +import java.util.Set; +import javax.annotation.Nullable; + +@Beta +public final class MutableTypeToInstanceMap +extends ForwardingMap, B> +implements TypeToInstanceMap { + private final Map, B> backingMap = Maps.newHashMap(); + + @Override + @Nullable + public T getInstance(Class type) { + return this.trustedGet(TypeToken.of(type)); + } + + @Override + @Nullable + public T putInstance(Class type, @Nullable T value) { + return this.trustedPut(TypeToken.of(type), value); + } + + @Override + @Nullable + public T getInstance(TypeToken type) { + return this.trustedGet(type.rejectTypeVariables()); + } + + @Override + @Nullable + public T putInstance(TypeToken type, @Nullable T value) { + return this.trustedPut(type.rejectTypeVariables(), value); + } + + @Override + public B put(TypeToken key, B value) { + throw new UnsupportedOperationException("Please use putInstance() instead."); + } + + @Override + public void putAll(Map, ? extends B> map) { + throw new UnsupportedOperationException("Please use putInstance() instead."); + } + + @Override + public Set, B>> entrySet() { + return UnmodifiableEntry.transformEntries(super.entrySet()); + } + + @Override + protected Map, B> delegate() { + return this.backingMap; + } + + @Nullable + private T trustedPut(TypeToken type, @Nullable T value) { + return (T)this.backingMap.put(type, value); + } + + @Nullable + private T trustedGet(TypeToken type) { + return (T)this.backingMap.get(type); + } + + private static final class UnmodifiableEntry + extends ForwardingMapEntry { + private final Map.Entry delegate; + + static Set> transformEntries(final Set> entries) { + return new ForwardingSet>(){ + + @Override + protected Set> delegate() { + return entries; + } + + @Override + public Iterator> iterator() { + return UnmodifiableEntry.transformEntries(super.iterator()); + } + + @Override + public Object[] toArray() { + return this.standardToArray(); + } + + @Override + public T[] toArray(T[] array) { + return this.standardToArray(array); + } + }; + } + + private static Iterator> transformEntries(Iterator> entries) { + return Iterators.transform(entries, new Function, Map.Entry>(){ + + @Override + public Map.Entry apply(Map.Entry entry) { + return new UnmodifiableEntry(entry); + } + }); + } + + private UnmodifiableEntry(Map.Entry delegate) { + this.delegate = Preconditions.checkNotNull(delegate); + } + + @Override + protected Map.Entry delegate() { + return this.delegate; + } + + @Override + public V setValue(V value) { + throw new UnsupportedOperationException(); + } + } +} diff --git a/src/com/google/common/reflect/Parameter.java b/src/com/google/common/reflect/Parameter.java new file mode 100644 index 0000000..0228c29 --- /dev/null +++ b/src/com/google/common/reflect/Parameter.java @@ -0,0 +1,95 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.reflect; + +import com.google.common.annotations.Beta; +import com.google.common.base.Preconditions; +import com.google.common.collect.FluentIterable; +import com.google.common.collect.ImmutableList; +import com.google.common.reflect.Invokable; +import com.google.common.reflect.TypeToken; +import java.lang.annotation.Annotation; +import java.lang.reflect.AnnotatedElement; +import javax.annotation.Nullable; + +@Beta +public final class Parameter +implements AnnotatedElement { + private final Invokable declaration; + private final int position; + private final TypeToken type; + private final ImmutableList annotations; + + Parameter(Invokable declaration, int position, TypeToken type, Annotation[] annotations) { + this.declaration = declaration; + this.position = position; + this.type = type; + this.annotations = ImmutableList.copyOf(annotations); + } + + public TypeToken getType() { + return this.type; + } + + public Invokable getDeclaringInvokable() { + return this.declaration; + } + + @Override + public boolean isAnnotationPresent(Class annotationType) { + return this.getAnnotation((Class)annotationType) != null; + } + + @Nullable + public A getAnnotation(Class annotationType) { + Preconditions.checkNotNull(annotationType); + for (Annotation annotation : this.annotations) { + if (!annotationType.isInstance(annotation)) continue; + return (A)((Annotation)annotationType.cast(annotation)); + } + return null; + } + + @Override + public Annotation[] getAnnotations() { + return this.getDeclaredAnnotations(); + } + + public A[] getAnnotationsByType(Class annotationType) { + return this.getDeclaredAnnotationsByType(annotationType); + } + + @Override + public Annotation[] getDeclaredAnnotations() { + return this.annotations.toArray(new Annotation[this.annotations.size()]); + } + + @Nullable + public A getDeclaredAnnotation(Class annotationType) { + Preconditions.checkNotNull(annotationType); + return (A)((Annotation)FluentIterable.from(this.annotations).filter(annotationType).first().orNull()); + } + + public A[] getDeclaredAnnotationsByType(Class annotationType) { + return (Annotation[])FluentIterable.from(this.annotations).filter(annotationType).toArray(annotationType); + } + + public boolean equals(@Nullable Object obj) { + if (obj instanceof Parameter) { + Parameter that = (Parameter)obj; + return this.position == that.position && this.declaration.equals(that.declaration); + } + return false; + } + + public int hashCode() { + return this.position; + } + + public String toString() { + String string = String.valueOf(String.valueOf(this.type)); + int n = this.position; + return new StringBuilder(15 + string.length()).append(string).append(" arg").append(n).toString(); + } +} diff --git a/src/com/google/common/reflect/Reflection.java b/src/com/google/common/reflect/Reflection.java new file mode 100644 index 0000000..75d3d5a --- /dev/null +++ b/src/com/google/common/reflect/Reflection.java @@ -0,0 +1,42 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.reflect; + +import com.google.common.annotations.Beta; +import com.google.common.base.Preconditions; +import java.lang.reflect.InvocationHandler; +import java.lang.reflect.Proxy; + +@Beta +public final class Reflection { + public static String getPackageName(Class clazz) { + return Reflection.getPackageName(clazz.getName()); + } + + public static String getPackageName(String classFullName) { + int lastDot = classFullName.lastIndexOf(46); + return lastDot < 0 ? "" : classFullName.substring(0, lastDot); + } + + public static void initialize(Class ... classes) { + for (Class clazz : classes) { + try { + Class.forName(clazz.getName(), true, clazz.getClassLoader()); + } + catch (ClassNotFoundException e) { + throw new AssertionError((Object)e); + } + } + } + + public static T newProxy(Class interfaceType, InvocationHandler handler) { + Preconditions.checkNotNull(handler); + Preconditions.checkArgument(interfaceType.isInterface(), "%s is not an interface", interfaceType); + Object object = Proxy.newProxyInstance(interfaceType.getClassLoader(), new Class[]{interfaceType}, handler); + return interfaceType.cast(object); + } + + private Reflection() { + } +} diff --git a/src/com/google/common/reflect/TypeCapture.java b/src/com/google/common/reflect/TypeCapture.java new file mode 100644 index 0000000..b1c5eb6 --- /dev/null +++ b/src/com/google/common/reflect/TypeCapture.java @@ -0,0 +1,19 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.reflect; + +import com.google.common.base.Preconditions; +import java.lang.reflect.ParameterizedType; +import java.lang.reflect.Type; + +abstract class TypeCapture { + TypeCapture() { + } + + final Type capture() { + Type superclass = this.getClass().getGenericSuperclass(); + Preconditions.checkArgument(superclass instanceof ParameterizedType, "%s isn't parameterized", superclass); + return ((ParameterizedType)superclass).getActualTypeArguments()[0]; + } +} diff --git a/src/com/google/common/reflect/TypeParameter.java b/src/com/google/common/reflect/TypeParameter.java new file mode 100644 index 0000000..0bcaba3 --- /dev/null +++ b/src/com/google/common/reflect/TypeParameter.java @@ -0,0 +1,39 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.reflect; + +import com.google.common.annotations.Beta; +import com.google.common.base.Preconditions; +import com.google.common.reflect.TypeCapture; +import java.lang.reflect.Type; +import java.lang.reflect.TypeVariable; +import javax.annotation.Nullable; + +@Beta +public abstract class TypeParameter +extends TypeCapture { + final TypeVariable typeVariable; + + protected TypeParameter() { + Type type = this.capture(); + Preconditions.checkArgument(type instanceof TypeVariable, "%s should be a type variable.", type); + this.typeVariable = (TypeVariable)type; + } + + public final int hashCode() { + return this.typeVariable.hashCode(); + } + + public final boolean equals(@Nullable Object o) { + if (o instanceof TypeParameter) { + TypeParameter that = (TypeParameter)o; + return this.typeVariable.equals(that.typeVariable); + } + return false; + } + + public String toString() { + return this.typeVariable.toString(); + } +} diff --git a/src/com/google/common/reflect/TypeResolver.java b/src/com/google/common/reflect/TypeResolver.java new file mode 100644 index 0000000..61d6ca0 --- /dev/null +++ b/src/com/google/common/reflect/TypeResolver.java @@ -0,0 +1,374 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.reflect; + +import com.google.common.annotations.Beta; +import com.google.common.base.Joiner; +import com.google.common.base.Objects; +import com.google.common.base.Preconditions; +import com.google.common.collect.ImmutableMap; +import com.google.common.collect.Maps; +import com.google.common.reflect.TypeVisitor; +import com.google.common.reflect.Types; +import java.lang.reflect.GenericArrayType; +import java.lang.reflect.ParameterizedType; +import java.lang.reflect.Type; +import java.lang.reflect.TypeVariable; +import java.lang.reflect.WildcardType; +import java.util.Arrays; +import java.util.HashMap; +import java.util.Map; +import java.util.concurrent.atomic.AtomicInteger; +import javax.annotation.Nullable; + +@Beta +public final class TypeResolver { + private final TypeTable typeTable; + + public TypeResolver() { + this.typeTable = new TypeTable(); + } + + private TypeResolver(TypeTable typeTable) { + this.typeTable = typeTable; + } + + static TypeResolver accordingTo(Type type) { + return new TypeResolver().where(TypeMappingIntrospector.getTypeMappings(type)); + } + + public TypeResolver where(Type formal, Type actual) { + HashMap mappings = Maps.newHashMap(); + TypeResolver.populateTypeMappings(mappings, Preconditions.checkNotNull(formal), Preconditions.checkNotNull(actual)); + return this.where(mappings); + } + + TypeResolver where(Map mappings) { + return new TypeResolver(this.typeTable.where(mappings)); + } + + private static void populateTypeMappings(final Map mappings, Type from, final Type to) { + if (from.equals(to)) { + return; + } + new TypeVisitor(){ + + @Override + void visitTypeVariable(TypeVariable typeVariable) { + mappings.put(new TypeVariableKey(typeVariable), to); + } + + @Override + void visitWildcardType(WildcardType fromWildcardType) { + int i; + WildcardType toWildcardType = (WildcardType)TypeResolver.expectArgument(WildcardType.class, to); + Type[] fromUpperBounds = fromWildcardType.getUpperBounds(); + Type[] toUpperBounds = toWildcardType.getUpperBounds(); + Type[] fromLowerBounds = fromWildcardType.getLowerBounds(); + Type[] toLowerBounds = toWildcardType.getLowerBounds(); + Preconditions.checkArgument(fromUpperBounds.length == toUpperBounds.length && fromLowerBounds.length == toLowerBounds.length, "Incompatible type: %s vs. %s", fromWildcardType, to); + for (i = 0; i < fromUpperBounds.length; ++i) { + TypeResolver.populateTypeMappings(mappings, fromUpperBounds[i], toUpperBounds[i]); + } + for (i = 0; i < fromLowerBounds.length; ++i) { + TypeResolver.populateTypeMappings(mappings, fromLowerBounds[i], toLowerBounds[i]); + } + } + + @Override + void visitParameterizedType(ParameterizedType fromParameterizedType) { + ParameterizedType toParameterizedType = (ParameterizedType)TypeResolver.expectArgument(ParameterizedType.class, to); + Preconditions.checkArgument(fromParameterizedType.getRawType().equals(toParameterizedType.getRawType()), "Inconsistent raw type: %s vs. %s", fromParameterizedType, to); + Type[] fromArgs = fromParameterizedType.getActualTypeArguments(); + Type[] toArgs = toParameterizedType.getActualTypeArguments(); + Preconditions.checkArgument(fromArgs.length == toArgs.length, "%s not compatible with %s", fromParameterizedType, toParameterizedType); + for (int i = 0; i < fromArgs.length; ++i) { + TypeResolver.populateTypeMappings(mappings, fromArgs[i], toArgs[i]); + } + } + + @Override + void visitGenericArrayType(GenericArrayType fromArrayType) { + Type componentType = Types.getComponentType(to); + Preconditions.checkArgument(componentType != null, "%s is not an array type.", to); + TypeResolver.populateTypeMappings(mappings, fromArrayType.getGenericComponentType(), componentType); + } + + @Override + void visitClass(Class fromClass) { + String string = String.valueOf(String.valueOf(fromClass)); + throw new IllegalArgumentException(new StringBuilder(21 + string.length()).append("No type mapping from ").append(string).toString()); + } + }.visit(from); + } + + public Type resolveType(Type type) { + Preconditions.checkNotNull(type); + if (type instanceof TypeVariable) { + return this.typeTable.resolve((TypeVariable)type); + } + if (type instanceof ParameterizedType) { + return this.resolveParameterizedType((ParameterizedType)type); + } + if (type instanceof GenericArrayType) { + return this.resolveGenericArrayType((GenericArrayType)type); + } + if (type instanceof WildcardType) { + return this.resolveWildcardType((WildcardType)type); + } + return type; + } + + private Type[] resolveTypes(Type[] types) { + Type[] result = new Type[types.length]; + for (int i = 0; i < types.length; ++i) { + result[i] = this.resolveType(types[i]); + } + return result; + } + + private WildcardType resolveWildcardType(WildcardType type) { + Type[] lowerBounds = type.getLowerBounds(); + Type[] upperBounds = type.getUpperBounds(); + return new Types.WildcardTypeImpl(this.resolveTypes(lowerBounds), this.resolveTypes(upperBounds)); + } + + private Type resolveGenericArrayType(GenericArrayType type) { + Type componentType = type.getGenericComponentType(); + Type resolvedComponentType = this.resolveType(componentType); + return Types.newArrayType(resolvedComponentType); + } + + private ParameterizedType resolveParameterizedType(ParameterizedType type) { + Type owner = type.getOwnerType(); + Type resolvedOwner = owner == null ? null : this.resolveType(owner); + Type resolvedRawType = this.resolveType(type.getRawType()); + Type[] args = type.getActualTypeArguments(); + Type[] resolvedArgs = this.resolveTypes(args); + return Types.newParameterizedTypeWithOwner(resolvedOwner, (Class)resolvedRawType, resolvedArgs); + } + + private static T expectArgument(Class type, Object arg) { + try { + return type.cast(arg); + } + catch (ClassCastException e) { + String string = String.valueOf(String.valueOf(arg)); + String string2 = String.valueOf(String.valueOf(type.getSimpleName())); + throw new IllegalArgumentException(new StringBuilder(10 + string.length() + string2.length()).append(string).append(" is not a ").append(string2).toString()); + } + } + + static final class TypeVariableKey { + private final TypeVariable var; + + TypeVariableKey(TypeVariable var) { + this.var = Preconditions.checkNotNull(var); + } + + public int hashCode() { + return Objects.hashCode(this.var.getGenericDeclaration(), this.var.getName()); + } + + public boolean equals(Object obj) { + if (obj instanceof TypeVariableKey) { + TypeVariableKey that = (TypeVariableKey)obj; + return this.equalsTypeVariable(that.var); + } + return false; + } + + public String toString() { + return this.var.toString(); + } + + static Object forLookup(Type t) { + if (t instanceof TypeVariable) { + return new TypeVariableKey((TypeVariable)t); + } + return null; + } + + boolean equalsType(Type type) { + if (type instanceof TypeVariable) { + return this.equalsTypeVariable((TypeVariable)type); + } + return false; + } + + private boolean equalsTypeVariable(TypeVariable that) { + return this.var.getGenericDeclaration().equals(that.getGenericDeclaration()) && this.var.getName().equals(that.getName()); + } + } + + private static final class WildcardCapturer { + private final AtomicInteger id = new AtomicInteger(); + + private WildcardCapturer() { + } + + Type capture(Type type) { + Preconditions.checkNotNull(type); + if (type instanceof Class) { + return type; + } + if (type instanceof TypeVariable) { + return type; + } + if (type instanceof GenericArrayType) { + GenericArrayType arrayType = (GenericArrayType)type; + return Types.newArrayType(this.capture(arrayType.getGenericComponentType())); + } + if (type instanceof ParameterizedType) { + ParameterizedType parameterizedType = (ParameterizedType)type; + return Types.newParameterizedTypeWithOwner(this.captureNullable(parameterizedType.getOwnerType()), (Class)parameterizedType.getRawType(), this.capture(parameterizedType.getActualTypeArguments())); + } + if (type instanceof WildcardType) { + WildcardType wildcardType = (WildcardType)type; + Type[] lowerBounds = wildcardType.getLowerBounds(); + if (lowerBounds.length == 0) { + Object[] upperBounds = wildcardType.getUpperBounds(); + int n = this.id.incrementAndGet(); + String string = String.valueOf(String.valueOf(Joiner.on('&').join(upperBounds))); + String name = new StringBuilder(33 + string.length()).append("capture#").append(n).append("-of ? extends ").append(string).toString(); + return Types.newArtificialTypeVariable(WildcardCapturer.class, name, wildcardType.getUpperBounds()); + } + return type; + } + throw new AssertionError((Object)"must have been one of the known types"); + } + + private Type captureNullable(@Nullable Type type) { + if (type == null) { + return null; + } + return this.capture(type); + } + + private Type[] capture(Type[] types) { + Type[] result = new Type[types.length]; + for (int i = 0; i < types.length; ++i) { + result[i] = this.capture(types[i]); + } + return result; + } + } + + private static final class TypeMappingIntrospector + extends TypeVisitor { + private static final WildcardCapturer wildcardCapturer = new WildcardCapturer(); + private final Map mappings = Maps.newHashMap(); + + private TypeMappingIntrospector() { + } + + static ImmutableMap getTypeMappings(Type contextType) { + TypeMappingIntrospector introspector = new TypeMappingIntrospector(); + introspector.visit(wildcardCapturer.capture(contextType)); + return ImmutableMap.copyOf(introspector.mappings); + } + + @Override + void visitClass(Class clazz) { + this.visit(clazz.getGenericSuperclass()); + this.visit(clazz.getGenericInterfaces()); + } + + @Override + void visitParameterizedType(ParameterizedType parameterizedType) { + Type[] typeArgs; + Class rawClass = (Class)parameterizedType.getRawType(); + TypeVariable>[] vars = rawClass.getTypeParameters(); + Preconditions.checkState(vars.length == (typeArgs = parameterizedType.getActualTypeArguments()).length); + for (int i = 0; i < vars.length; ++i) { + this.map(new TypeVariableKey(vars[i]), typeArgs[i]); + } + this.visit(rawClass); + this.visit(parameterizedType.getOwnerType()); + } + + @Override + void visitTypeVariable(TypeVariable t) { + this.visit(t.getBounds()); + } + + @Override + void visitWildcardType(WildcardType t) { + this.visit(t.getUpperBounds()); + } + + private void map(TypeVariableKey var, Type arg) { + if (this.mappings.containsKey(var)) { + return; + } + Type t = arg; + while (t != null) { + if (var.equalsType(t)) { + Type x = arg; + while (x != null) { + x = this.mappings.remove(TypeVariableKey.forLookup(x)); + } + return; + } + t = this.mappings.get(TypeVariableKey.forLookup(t)); + } + this.mappings.put(var, arg); + } + } + + private static class TypeTable { + private final ImmutableMap map; + + TypeTable() { + this.map = ImmutableMap.of(); + } + + private TypeTable(ImmutableMap map) { + this.map = map; + } + + final TypeTable where(Map mappings) { + ImmutableMap.Builder builder = ImmutableMap.builder(); + builder.putAll(this.map); + for (Map.Entry mapping : mappings.entrySet()) { + Type type; + TypeVariableKey variable = mapping.getKey(); + Preconditions.checkArgument(!variable.equalsType(type = mapping.getValue()), "Type variable %s bound to itself", variable); + builder.put(variable, type); + } + return new TypeTable(builder.build()); + } + + final Type resolve(final TypeVariable var) { + final TypeTable unguarded = this; + TypeTable guarded = new TypeTable(){ + + @Override + public Type resolveInternal(TypeVariable intermediateVar, TypeTable forDependent) { + if (intermediateVar.getGenericDeclaration().equals(var.getGenericDeclaration())) { + return intermediateVar; + } + return unguarded.resolveInternal(intermediateVar, forDependent); + } + }; + return this.resolveInternal(var, guarded); + } + + Type resolveInternal(TypeVariable var, TypeTable forDependants) { + Type type = this.map.get(new TypeVariableKey(var)); + if (type == null) { + Object[] bounds = var.getBounds(); + if (bounds.length == 0) { + return var; + } + Object[] resolvedBounds = new TypeResolver(forDependants).resolveTypes((Type[])bounds); + if (Types.NativeTypeVariableEquals.NATIVE_TYPE_VARIABLE_ONLY && Arrays.equals(bounds, resolvedBounds)) { + return var; + } + return Types.newArtificialTypeVariable(var.getGenericDeclaration(), var.getName(), (Type[])resolvedBounds); + } + return new TypeResolver(forDependants).resolveType(type); + } + } +} diff --git a/src/com/google/common/reflect/TypeToInstanceMap.java b/src/com/google/common/reflect/TypeToInstanceMap.java new file mode 100644 index 0000000..5f2b5a3 --- /dev/null +++ b/src/com/google/common/reflect/TypeToInstanceMap.java @@ -0,0 +1,25 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.reflect; + +import com.google.common.annotations.Beta; +import com.google.common.reflect.TypeToken; +import java.util.Map; +import javax.annotation.Nullable; + +@Beta +public interface TypeToInstanceMap +extends Map, B> { + @Nullable + public T getInstance(Class var1); + + @Nullable + public T putInstance(Class var1, @Nullable T var2); + + @Nullable + public T getInstance(TypeToken var1); + + @Nullable + public T putInstance(TypeToken var1, @Nullable T var2); +} diff --git a/src/com/google/common/reflect/TypeToken.java b/src/com/google/common/reflect/TypeToken.java new file mode 100644 index 0000000..3a3b94a --- /dev/null +++ b/src/com/google/common/reflect/TypeToken.java @@ -0,0 +1,898 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.reflect; + +import com.google.common.annotations.Beta; +import com.google.common.annotations.VisibleForTesting; +import com.google.common.base.Joiner; +import com.google.common.base.Preconditions; +import com.google.common.base.Predicate; +import com.google.common.collect.FluentIterable; +import com.google.common.collect.ForwardingSet; +import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableMap; +import com.google.common.collect.ImmutableSet; +import com.google.common.collect.Maps; +import com.google.common.collect.Ordering; +import com.google.common.primitives.Primitives; +import com.google.common.reflect.Invokable; +import com.google.common.reflect.TypeCapture; +import com.google.common.reflect.TypeParameter; +import com.google.common.reflect.TypeResolver; +import com.google.common.reflect.TypeVisitor; +import com.google.common.reflect.Types; +import java.io.Serializable; +import java.lang.reflect.Constructor; +import java.lang.reflect.GenericArrayType; +import java.lang.reflect.Method; +import java.lang.reflect.ParameterizedType; +import java.lang.reflect.Type; +import java.lang.reflect.TypeVariable; +import java.lang.reflect.WildcardType; +import java.util.Arrays; +import java.util.Comparator; +import java.util.HashMap; +import java.util.Map; +import java.util.Set; +import javax.annotation.Nullable; + +@Beta +public abstract class TypeToken +extends TypeCapture +implements Serializable { + private final Type runtimeType; + private transient TypeResolver typeResolver; + + protected TypeToken() { + this.runtimeType = this.capture(); + Preconditions.checkState(!(this.runtimeType instanceof TypeVariable), "Cannot construct a TypeToken for a type variable.\nYou probably meant to call new TypeToken<%s>(getClass()) that can resolve the type variable for you.\nIf you do need to create a TypeToken of a type variable, please use TypeToken.of() instead.", this.runtimeType); + } + + protected TypeToken(Class declaringClass) { + Type captured = super.capture(); + this.runtimeType = captured instanceof Class ? captured : TypeToken.of(declaringClass).resolveType((Type)captured).runtimeType; + } + + private TypeToken(Type type) { + this.runtimeType = Preconditions.checkNotNull(type); + } + + public static TypeToken of(Class type) { + return new SimpleTypeToken((Type)type); + } + + public static TypeToken of(Type type) { + return new SimpleTypeToken(type); + } + + public final Class getRawType() { + Class rawType; + Class result = rawType = TypeToken.getRawType(this.runtimeType); + return result; + } + + private ImmutableSet> getImmediateRawTypes() { + ImmutableSet> result = TypeToken.getRawTypes(this.runtimeType); + return result; + } + + public final Type getType() { + return this.runtimeType; + } + + public final TypeToken where(TypeParameter typeParam, TypeToken typeArg) { + TypeResolver resolver = new TypeResolver().where(ImmutableMap.of(new TypeResolver.TypeVariableKey(typeParam.typeVariable), typeArg.runtimeType)); + return new SimpleTypeToken(resolver.resolveType(this.runtimeType)); + } + + public final TypeToken where(TypeParameter typeParam, Class typeArg) { + return this.where(typeParam, TypeToken.of(typeArg)); + } + + public final TypeToken resolveType(Type type) { + Preconditions.checkNotNull(type); + TypeResolver resolver = this.typeResolver; + if (resolver == null) { + resolver = this.typeResolver = TypeResolver.accordingTo(this.runtimeType); + } + return TypeToken.of(resolver.resolveType(type)); + } + + private Type[] resolveInPlace(Type[] types) { + for (int i = 0; i < types.length; ++i) { + types[i] = this.resolveType(types[i]).getType(); + } + return types; + } + + private TypeToken resolveSupertype(Type type) { + TypeToken supertype = this.resolveType(type); + supertype.typeResolver = this.typeResolver; + return supertype; + } + + @Nullable + final TypeToken getGenericSuperclass() { + if (this.runtimeType instanceof TypeVariable) { + return this.boundAsSuperclass(((TypeVariable)this.runtimeType).getBounds()[0]); + } + if (this.runtimeType instanceof WildcardType) { + return this.boundAsSuperclass(((WildcardType)this.runtimeType).getUpperBounds()[0]); + } + Type superclass = this.getRawType().getGenericSuperclass(); + if (superclass == null) { + return null; + } + TypeToken superToken = this.resolveSupertype(superclass); + return superToken; + } + + @Nullable + private TypeToken boundAsSuperclass(Type bound) { + TypeToken token = TypeToken.of(bound); + if (token.getRawType().isInterface()) { + return null; + } + TypeToken superclass = token; + return superclass; + } + + final ImmutableList> getGenericInterfaces() { + if (this.runtimeType instanceof TypeVariable) { + return this.boundsAsInterfaces(((TypeVariable)this.runtimeType).getBounds()); + } + if (this.runtimeType instanceof WildcardType) { + return this.boundsAsInterfaces(((WildcardType)this.runtimeType).getUpperBounds()); + } + ImmutableList.Builder builder = ImmutableList.builder(); + for (Type interfaceType : this.getRawType().getGenericInterfaces()) { + TypeToken resolvedInterface = this.resolveSupertype(interfaceType); + builder.add(resolvedInterface); + } + return builder.build(); + } + + private ImmutableList> boundsAsInterfaces(Type[] bounds) { + ImmutableList.Builder builder = ImmutableList.builder(); + for (Type bound : bounds) { + TypeToken boundType = TypeToken.of(bound); + if (!boundType.getRawType().isInterface()) continue; + builder.add(boundType); + } + return builder.build(); + } + + public final TypeSet getTypes() { + return new TypeSet(); + } + + public final TypeToken getSupertype(Class superclass) { + Preconditions.checkArgument(superclass.isAssignableFrom(this.getRawType()), "%s is not a super class of %s", superclass, this); + if (this.runtimeType instanceof TypeVariable) { + return this.getSupertypeFromUpperBounds(superclass, ((TypeVariable)this.runtimeType).getBounds()); + } + if (this.runtimeType instanceof WildcardType) { + return this.getSupertypeFromUpperBounds(superclass, ((WildcardType)this.runtimeType).getUpperBounds()); + } + if (superclass.isArray()) { + return this.getArraySupertype(superclass); + } + TypeToken supertype = this.resolveSupertype(TypeToken.toGenericType(superclass).runtimeType); + return supertype; + } + + public final TypeToken getSubtype(Class subclass) { + Preconditions.checkArgument(!(this.runtimeType instanceof TypeVariable), "Cannot get subtype of type variable <%s>", this); + if (this.runtimeType instanceof WildcardType) { + return this.getSubtypeFromLowerBounds(subclass, ((WildcardType)this.runtimeType).getLowerBounds()); + } + Preconditions.checkArgument(this.getRawType().isAssignableFrom(subclass), "%s isn't a subclass of %s", subclass, this); + if (this.isArray()) { + return this.getArraySubtype(subclass); + } + TypeToken subtype = TypeToken.of(this.resolveTypeArgsForSubclass(subclass)); + return subtype; + } + + public final boolean isAssignableFrom(TypeToken type) { + return this.isAssignableFrom(type.runtimeType); + } + + public final boolean isAssignableFrom(Type type) { + return TypeToken.isAssignable(Preconditions.checkNotNull(type), this.runtimeType); + } + + public final boolean isArray() { + return this.getComponentType() != null; + } + + public final boolean isPrimitive() { + return this.runtimeType instanceof Class && ((Class)this.runtimeType).isPrimitive(); + } + + public final TypeToken wrap() { + if (this.isPrimitive()) { + Class type = (Class)this.runtimeType; + return TypeToken.of(Primitives.wrap(type)); + } + return this; + } + + private boolean isWrapper() { + return Primitives.allWrapperTypes().contains(this.runtimeType); + } + + public final TypeToken unwrap() { + if (this.isWrapper()) { + Class type = (Class)this.runtimeType; + return TypeToken.of(Primitives.unwrap(type)); + } + return this; + } + + @Nullable + public final TypeToken getComponentType() { + Type componentType = Types.getComponentType(this.runtimeType); + if (componentType == null) { + return null; + } + return TypeToken.of(componentType); + } + + public final Invokable method(Method method) { + Preconditions.checkArgument(TypeToken.of(method.getDeclaringClass()).isAssignableFrom(this), "%s not declared by %s", method, this); + return new Invokable.MethodInvokable(method){ + + @Override + Type getGenericReturnType() { + return TypeToken.this.resolveType(super.getGenericReturnType()).getType(); + } + + @Override + Type[] getGenericParameterTypes() { + return TypeToken.this.resolveInPlace(super.getGenericParameterTypes()); + } + + @Override + Type[] getGenericExceptionTypes() { + return TypeToken.this.resolveInPlace(super.getGenericExceptionTypes()); + } + + @Override + public TypeToken getOwnerType() { + return TypeToken.this; + } + + @Override + public String toString() { + String string = String.valueOf(String.valueOf(this.getOwnerType())); + String string2 = String.valueOf(String.valueOf(super.toString())); + return new StringBuilder(1 + string.length() + string2.length()).append(string).append(".").append(string2).toString(); + } + }; + } + + public final Invokable constructor(Constructor constructor) { + Preconditions.checkArgument(constructor.getDeclaringClass() == this.getRawType(), "%s not declared by %s", constructor, this.getRawType()); + return new Invokable.ConstructorInvokable(constructor){ + + @Override + Type getGenericReturnType() { + return TypeToken.this.resolveType(super.getGenericReturnType()).getType(); + } + + @Override + Type[] getGenericParameterTypes() { + return TypeToken.this.resolveInPlace(super.getGenericParameterTypes()); + } + + @Override + Type[] getGenericExceptionTypes() { + return TypeToken.this.resolveInPlace(super.getGenericExceptionTypes()); + } + + @Override + public TypeToken getOwnerType() { + return TypeToken.this; + } + + @Override + public String toString() { + String string = String.valueOf(String.valueOf(this.getOwnerType())); + String string2 = String.valueOf(String.valueOf(Joiner.on(", ").join(this.getGenericParameterTypes()))); + return new StringBuilder(2 + string.length() + string2.length()).append(string).append("(").append(string2).append(")").toString(); + } + }; + } + + public boolean equals(@Nullable Object o) { + if (o instanceof TypeToken) { + TypeToken that = (TypeToken)o; + return this.runtimeType.equals(that.runtimeType); + } + return false; + } + + public int hashCode() { + return this.runtimeType.hashCode(); + } + + public String toString() { + return Types.toString(this.runtimeType); + } + + protected Object writeReplace() { + return TypeToken.of(new TypeResolver().resolveType(this.runtimeType)); + } + + final TypeToken rejectTypeVariables() { + new TypeVisitor(){ + + @Override + void visitTypeVariable(TypeVariable type) { + String string = String.valueOf(String.valueOf(TypeToken.this.runtimeType)); + throw new IllegalArgumentException(new StringBuilder(58 + string.length()).append(string).append("contains a type variable and is not safe for the operation").toString()); + } + + @Override + void visitWildcardType(WildcardType type) { + this.visit(type.getLowerBounds()); + this.visit(type.getUpperBounds()); + } + + @Override + void visitParameterizedType(ParameterizedType type) { + this.visit(type.getActualTypeArguments()); + this.visit(type.getOwnerType()); + } + + @Override + void visitGenericArrayType(GenericArrayType type) { + this.visit(type.getGenericComponentType()); + } + }.visit(this.runtimeType); + return this; + } + + private static boolean isAssignable(Type from, Type to) { + if (to.equals(from)) { + return true; + } + if (to instanceof WildcardType) { + return TypeToken.isAssignableToWildcardType(from, (WildcardType)to); + } + if (from instanceof TypeVariable) { + return TypeToken.isAssignableFromAny(((TypeVariable)from).getBounds(), to); + } + if (from instanceof WildcardType) { + return TypeToken.isAssignableFromAny(((WildcardType)from).getUpperBounds(), to); + } + if (from instanceof GenericArrayType) { + return TypeToken.isAssignableFromGenericArrayType((GenericArrayType)from, to); + } + if (to instanceof Class) { + return TypeToken.isAssignableToClass(from, (Class)to); + } + if (to instanceof ParameterizedType) { + return TypeToken.isAssignableToParameterizedType(from, (ParameterizedType)to); + } + if (to instanceof GenericArrayType) { + return TypeToken.isAssignableToGenericArrayType(from, (GenericArrayType)to); + } + return false; + } + + private static boolean isAssignableFromAny(Type[] fromTypes, Type to) { + for (Type from : fromTypes) { + if (!TypeToken.isAssignable(from, to)) continue; + return true; + } + return false; + } + + private static boolean isAssignableToClass(Type from, Class to) { + return to.isAssignableFrom(TypeToken.getRawType(from)); + } + + private static boolean isAssignableToWildcardType(Type from, WildcardType to) { + return TypeToken.isAssignable(from, TypeToken.supertypeBound(to)) && TypeToken.isAssignableBySubtypeBound(from, to); + } + + private static boolean isAssignableBySubtypeBound(Type from, WildcardType to) { + Type toSubtypeBound = TypeToken.subtypeBound(to); + if (toSubtypeBound == null) { + return true; + } + Type fromSubtypeBound = TypeToken.subtypeBound(from); + if (fromSubtypeBound == null) { + return false; + } + return TypeToken.isAssignable(toSubtypeBound, fromSubtypeBound); + } + + private static boolean isAssignableToParameterizedType(Type from, ParameterizedType to) { + Class matchedClass = TypeToken.getRawType(to); + if (!matchedClass.isAssignableFrom(TypeToken.getRawType(from))) { + return false; + } + TypeVariable>[] typeParams = matchedClass.getTypeParameters(); + Type[] toTypeArgs = to.getActualTypeArguments(); + TypeToken fromTypeToken = TypeToken.of(from); + for (int i = 0; i < typeParams.length; ++i) { + Type fromTypeArg = fromTypeToken.resolveType(typeParams[i]).runtimeType; + if (TypeToken.matchTypeArgument(fromTypeArg, toTypeArgs[i])) continue; + return false; + } + return true; + } + + private static boolean isAssignableToGenericArrayType(Type from, GenericArrayType to) { + if (from instanceof Class) { + Class fromClass = (Class)from; + if (!fromClass.isArray()) { + return false; + } + return TypeToken.isAssignable(fromClass.getComponentType(), to.getGenericComponentType()); + } + if (from instanceof GenericArrayType) { + GenericArrayType fromArrayType = (GenericArrayType)from; + return TypeToken.isAssignable(fromArrayType.getGenericComponentType(), to.getGenericComponentType()); + } + return false; + } + + private static boolean isAssignableFromGenericArrayType(GenericArrayType from, Type to) { + if (to instanceof Class) { + Class toClass = (Class)to; + if (!toClass.isArray()) { + return toClass == Object.class; + } + return TypeToken.isAssignable(from.getGenericComponentType(), toClass.getComponentType()); + } + if (to instanceof GenericArrayType) { + GenericArrayType toArrayType = (GenericArrayType)to; + return TypeToken.isAssignable(from.getGenericComponentType(), toArrayType.getGenericComponentType()); + } + return false; + } + + private static boolean matchTypeArgument(Type from, Type to) { + if (from.equals(to)) { + return true; + } + if (to instanceof WildcardType) { + return TypeToken.isAssignableToWildcardType(from, (WildcardType)to); + } + return false; + } + + private static Type supertypeBound(Type type) { + if (type instanceof WildcardType) { + return TypeToken.supertypeBound((WildcardType)type); + } + return type; + } + + private static Type supertypeBound(WildcardType type) { + Type[] upperBounds = type.getUpperBounds(); + if (upperBounds.length == 1) { + return TypeToken.supertypeBound(upperBounds[0]); + } + if (upperBounds.length == 0) { + return Object.class; + } + String string = String.valueOf(String.valueOf(type)); + throw new AssertionError((Object)new StringBuilder(59 + string.length()).append("There should be at most one upper bound for wildcard type: ").append(string).toString()); + } + + @Nullable + private static Type subtypeBound(Type type) { + if (type instanceof WildcardType) { + return TypeToken.subtypeBound((WildcardType)type); + } + return type; + } + + @Nullable + private static Type subtypeBound(WildcardType type) { + Type[] lowerBounds = type.getLowerBounds(); + if (lowerBounds.length == 1) { + return TypeToken.subtypeBound(lowerBounds[0]); + } + if (lowerBounds.length == 0) { + return null; + } + String string = String.valueOf(String.valueOf(type)); + throw new AssertionError((Object)new StringBuilder(46 + string.length()).append("Wildcard should have at most one lower bound: ").append(string).toString()); + } + + @VisibleForTesting + static Class getRawType(Type type) { + return (Class)TypeToken.getRawTypes(type).iterator().next(); + } + + @VisibleForTesting + static ImmutableSet> getRawTypes(Type type) { + Preconditions.checkNotNull(type); + final ImmutableSet.Builder builder = ImmutableSet.builder(); + new TypeVisitor(){ + + @Override + void visitTypeVariable(TypeVariable t) { + this.visit(t.getBounds()); + } + + @Override + void visitWildcardType(WildcardType t) { + this.visit(t.getUpperBounds()); + } + + @Override + void visitParameterizedType(ParameterizedType t) { + builder.add((Class)t.getRawType()); + } + + @Override + void visitClass(Class t) { + builder.add(t); + } + + @Override + void visitGenericArrayType(GenericArrayType t) { + builder.add(Types.getArrayClass(TypeToken.getRawType(t.getGenericComponentType()))); + } + }.visit(type); + return builder.build(); + } + + @VisibleForTesting + static TypeToken toGenericType(Class cls) { + if (cls.isArray()) { + Type arrayOfGenericType = Types.newArrayType(TypeToken.toGenericType(cls.getComponentType()).runtimeType); + TypeToken result = TypeToken.of(arrayOfGenericType); + return result; + } + Type[] typeParams = cls.getTypeParameters(); + if (typeParams.length > 0) { + TypeToken type = TypeToken.of(Types.newParameterizedType(cls, typeParams)); + return type; + } + return TypeToken.of(cls); + } + + private TypeToken getSupertypeFromUpperBounds(Class supertype, Type[] upperBounds) { + for (Type upperBound : upperBounds) { + TypeToken bound = TypeToken.of(upperBound); + if (!TypeToken.of(supertype).isAssignableFrom(bound)) continue; + TypeToken result = bound.getSupertype(supertype); + return result; + } + String string = String.valueOf(String.valueOf(supertype)); + String string2 = String.valueOf(String.valueOf(this)); + throw new IllegalArgumentException(new StringBuilder(23 + string.length() + string2.length()).append(string).append(" isn't a super type of ").append(string2).toString()); + } + + private TypeToken getSubtypeFromLowerBounds(Class subclass, Type[] lowerBounds) { + int i$ = 0; + Type[] arr$ = lowerBounds; + int len$ = arr$.length; + if (i$ < len$) { + Type lowerBound = arr$[i$]; + TypeToken bound = TypeToken.of(lowerBound); + return bound.getSubtype(subclass); + } + String string = String.valueOf(String.valueOf(subclass)); + String string2 = String.valueOf(String.valueOf(this)); + throw new IllegalArgumentException(new StringBuilder(21 + string.length() + string2.length()).append(string).append(" isn't a subclass of ").append(string2).toString()); + } + + private TypeToken getArraySupertype(Class supertype) { + TypeToken componentType = Preconditions.checkNotNull(this.getComponentType(), "%s isn't a super type of %s", supertype, this); + TypeToken componentSupertype = componentType.getSupertype(supertype.getComponentType()); + TypeToken result = TypeToken.of(TypeToken.newArrayClassOrGenericArrayType(componentSupertype.runtimeType)); + return result; + } + + private TypeToken getArraySubtype(Class subclass) { + TypeToken componentSubtype = this.getComponentType().getSubtype(subclass.getComponentType()); + TypeToken result = TypeToken.of(TypeToken.newArrayClassOrGenericArrayType(componentSubtype.runtimeType)); + return result; + } + + private Type resolveTypeArgsForSubclass(Class subclass) { + if (this.runtimeType instanceof Class) { + return subclass; + } + TypeToken genericSubtype = TypeToken.toGenericType(subclass); + Type supertypeWithArgsFromSubtype = genericSubtype.getSupertype(this.getRawType()).runtimeType; + return new TypeResolver().where(supertypeWithArgsFromSubtype, this.runtimeType).resolveType(genericSubtype.runtimeType); + } + + private static Type newArrayClassOrGenericArrayType(Type componentType) { + return Types.JavaVersion.JAVA7.newArrayType(componentType); + } + + private static abstract class TypeCollector { + static final TypeCollector> FOR_GENERIC_TYPE = new TypeCollector>(){ + + @Override + Class getRawType(TypeToken type) { + return type.getRawType(); + } + + @Override + Iterable> getInterfaces(TypeToken type) { + return type.getGenericInterfaces(); + } + + @Override + @Nullable + TypeToken getSuperclass(TypeToken type) { + return type.getGenericSuperclass(); + } + }; + static final TypeCollector> FOR_RAW_TYPE = new TypeCollector>(){ + + @Override + Class getRawType(Class type) { + return type; + } + + @Override + Iterable> getInterfaces(Class type) { + return Arrays.asList(type.getInterfaces()); + } + + @Override + @Nullable + Class getSuperclass(Class type) { + return type.getSuperclass(); + } + }; + + private TypeCollector() { + } + + final TypeCollector classesOnly() { + return new ForwardingTypeCollector(this){ + + @Override + Iterable getInterfaces(K type) { + return ImmutableSet.of(); + } + + @Override + ImmutableList collectTypes(Iterable types) { + ImmutableList.Builder builder = ImmutableList.builder(); + for (Object type : types) { + if (this.getRawType(type).isInterface()) continue; + builder.add(type); + } + return super.collectTypes(builder.build()); + } + }; + } + + final ImmutableList collectTypes(K type) { + return this.collectTypes((Iterable)ImmutableList.of(type)); + } + + ImmutableList collectTypes(Iterable types) { + HashMap map = Maps.newHashMap(); + for (K type : types) { + this.collectTypes(type, map); + } + return TypeCollector.sortKeysByValue(map, Ordering.natural().reverse()); + } + + private int collectTypes(K type, Map map) { + Integer existing = map.get(this); + if (existing != null) { + return existing; + } + int aboveMe = this.getRawType(type).isInterface() ? 1 : 0; + for (K interfaceType : this.getInterfaces(type)) { + aboveMe = Math.max(aboveMe, this.collectTypes(interfaceType, map)); + } + K superclass = this.getSuperclass(type); + if (superclass != null) { + aboveMe = Math.max(aboveMe, this.collectTypes(superclass, map)); + } + map.put(type, aboveMe + 1); + return aboveMe + 1; + } + + private static ImmutableList sortKeysByValue(final Map map, final Comparator valueComparator) { + Ordering keyOrdering = new Ordering(){ + + @Override + public int compare(K left, K right) { + return valueComparator.compare(map.get(left), map.get(right)); + } + }; + return keyOrdering.immutableSortedCopy(map.keySet()); + } + + abstract Class getRawType(K var1); + + abstract Iterable getInterfaces(K var1); + + @Nullable + abstract K getSuperclass(K var1); + + private static class ForwardingTypeCollector + extends TypeCollector { + private final TypeCollector delegate; + + ForwardingTypeCollector(TypeCollector delegate) { + this.delegate = delegate; + } + + @Override + Class getRawType(K type) { + return this.delegate.getRawType(type); + } + + @Override + Iterable getInterfaces(K type) { + return this.delegate.getInterfaces(type); + } + + @Override + K getSuperclass(K type) { + return this.delegate.getSuperclass(type); + } + } + } + + private static final class SimpleTypeToken + extends TypeToken { + private static final long serialVersionUID = 0L; + + SimpleTypeToken(Type type) { + super(type); + } + } + + private static enum TypeFilter implements Predicate> + { + IGNORE_TYPE_VARIABLE_OR_WILDCARD{ + + @Override + public boolean apply(TypeToken type) { + return !(((TypeToken)type).runtimeType instanceof TypeVariable) && !(((TypeToken)type).runtimeType instanceof WildcardType); + } + } + , + INTERFACE_ONLY{ + + @Override + public boolean apply(TypeToken type) { + return type.getRawType().isInterface(); + } + }; + + } + + private final class ClassSet + extends TypeSet { + private transient ImmutableSet> classes; + private static final long serialVersionUID = 0L; + + private ClassSet() { + } + + @Override + protected Set> delegate() { + ImmutableSet result = this.classes; + if (result == null) { + ImmutableList collectedTypes = TypeCollector.FOR_GENERIC_TYPE.classesOnly().collectTypes(TypeToken.this); + this.classes = FluentIterable.from(collectedTypes).filter(TypeFilter.IGNORE_TYPE_VARIABLE_OR_WILDCARD).toSet(); + return this.classes; + } + return result; + } + + @Override + public TypeSet classes() { + return this; + } + + @Override + public Set> rawTypes() { + ImmutableList> collectedTypes = TypeCollector.FOR_RAW_TYPE.classesOnly().collectTypes(TypeToken.this.getImmediateRawTypes()); + return ImmutableSet.copyOf(collectedTypes); + } + + @Override + public TypeSet interfaces() { + throw new UnsupportedOperationException("classes().interfaces() not supported."); + } + + private Object readResolve() { + return TypeToken.this.getTypes().classes(); + } + } + + private final class InterfaceSet + extends TypeSet { + private final transient TypeSet allTypes; + private transient ImmutableSet> interfaces; + private static final long serialVersionUID = 0L; + + InterfaceSet(TypeSet allTypes) { + this.allTypes = allTypes; + } + + @Override + protected Set> delegate() { + ImmutableSet result = this.interfaces; + if (result == null) { + this.interfaces = FluentIterable.from(this.allTypes).filter(TypeFilter.INTERFACE_ONLY).toSet(); + return this.interfaces; + } + return result; + } + + @Override + public TypeSet interfaces() { + return this; + } + + @Override + public Set> rawTypes() { + ImmutableList> collectedTypes = TypeCollector.FOR_RAW_TYPE.collectTypes(TypeToken.this.getImmediateRawTypes()); + return FluentIterable.from(collectedTypes).filter(new Predicate>(){ + + @Override + public boolean apply(Class type) { + return type.isInterface(); + } + }).toSet(); + } + + @Override + public TypeSet classes() { + throw new UnsupportedOperationException("interfaces().classes() not supported."); + } + + private Object readResolve() { + return TypeToken.this.getTypes().interfaces(); + } + } + + public class TypeSet + extends ForwardingSet> + implements Serializable { + private transient ImmutableSet> types; + private static final long serialVersionUID = 0L; + + TypeSet() { + } + + public TypeSet interfaces() { + return new InterfaceSet(this); + } + + public TypeSet classes() { + return new ClassSet(); + } + + @Override + protected Set> delegate() { + ImmutableSet filteredTypes = this.types; + if (filteredTypes == null) { + ImmutableList collectedTypes = TypeCollector.FOR_GENERIC_TYPE.collectTypes(TypeToken.this); + this.types = FluentIterable.from(collectedTypes).filter(TypeFilter.IGNORE_TYPE_VARIABLE_OR_WILDCARD).toSet(); + return this.types; + } + return filteredTypes; + } + + public Set> rawTypes() { + ImmutableList> collectedTypes = TypeCollector.FOR_RAW_TYPE.collectTypes(TypeToken.this.getImmediateRawTypes()); + return ImmutableSet.copyOf(collectedTypes); + } + } +} diff --git a/src/com/google/common/reflect/TypeVisitor.java b/src/com/google/common/reflect/TypeVisitor.java new file mode 100644 index 0000000..8b62951 --- /dev/null +++ b/src/com/google/common/reflect/TypeVisitor.java @@ -0,0 +1,68 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.reflect; + +import com.google.common.collect.Sets; +import java.lang.reflect.GenericArrayType; +import java.lang.reflect.ParameterizedType; +import java.lang.reflect.Type; +import java.lang.reflect.TypeVariable; +import java.lang.reflect.WildcardType; +import java.util.Set; +import javax.annotation.concurrent.NotThreadSafe; + +@NotThreadSafe +abstract class TypeVisitor { + private final Set visited = Sets.newHashSet(); + + TypeVisitor() { + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + public final void visit(Type ... types) { + for (Type type : types) { + if (type == null || !this.visited.add(type)) continue; + boolean succeeded = false; + try { + if (type instanceof TypeVariable) { + this.visitTypeVariable((TypeVariable)type); + } else if (type instanceof WildcardType) { + this.visitWildcardType((WildcardType)type); + } else if (type instanceof ParameterizedType) { + this.visitParameterizedType((ParameterizedType)type); + } else if (type instanceof Class) { + this.visitClass((Class)type); + } else if (type instanceof GenericArrayType) { + this.visitGenericArrayType((GenericArrayType)type); + } else { + String string = String.valueOf(String.valueOf(type)); + throw new AssertionError((Object)new StringBuilder(14 + string.length()).append("Unknown type: ").append(string).toString()); + } + succeeded = true; + } + finally { + if (!succeeded) { + this.visited.remove(type); + } + } + } + } + + void visitClass(Class t) { + } + + void visitGenericArrayType(GenericArrayType t) { + } + + void visitParameterizedType(ParameterizedType t) { + } + + void visitTypeVariable(TypeVariable t) { + } + + void visitWildcardType(WildcardType t) { + } +} diff --git a/src/com/google/common/reflect/Types.java b/src/com/google/common/reflect/Types.java new file mode 100644 index 0000000..f41c322 --- /dev/null +++ b/src/com/google/common/reflect/Types.java @@ -0,0 +1,491 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.reflect; + +import com.google.common.annotations.VisibleForTesting; +import com.google.common.base.Function; +import com.google.common.base.Joiner; +import com.google.common.base.Objects; +import com.google.common.base.Preconditions; +import com.google.common.base.Predicates; +import com.google.common.collect.ImmutableList; +import com.google.common.collect.Iterables; +import com.google.common.reflect.TypeCapture; +import com.google.common.reflect.TypeVisitor; +import java.io.Serializable; +import java.lang.reflect.AnnotatedElement; +import java.lang.reflect.Array; +import java.lang.reflect.GenericArrayType; +import java.lang.reflect.GenericDeclaration; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.lang.reflect.ParameterizedType; +import java.lang.reflect.Type; +import java.lang.reflect.TypeVariable; +import java.lang.reflect.WildcardType; +import java.util.Arrays; +import java.util.Collection; +import java.util.concurrent.atomic.AtomicReference; +import javax.annotation.Nullable; + +final class Types { + private static final Function TYPE_NAME = new Function(){ + + @Override + public String apply(Type from) { + return JavaVersion.CURRENT.typeName(from); + } + }; + private static final Joiner COMMA_JOINER = Joiner.on(", ").useForNull("null"); + + static Type newArrayType(Type componentType) { + if (componentType instanceof WildcardType) { + WildcardType wildcard = (WildcardType)componentType; + Type[] lowerBounds = wildcard.getLowerBounds(); + Preconditions.checkArgument(lowerBounds.length <= 1, "Wildcard cannot have more than one lower bounds."); + if (lowerBounds.length == 1) { + return Types.supertypeOf(Types.newArrayType(lowerBounds[0])); + } + Type[] upperBounds = wildcard.getUpperBounds(); + Preconditions.checkArgument(upperBounds.length == 1, "Wildcard should have only one upper bound."); + return Types.subtypeOf(Types.newArrayType(upperBounds[0])); + } + return JavaVersion.CURRENT.newArrayType(componentType); + } + + static ParameterizedType newParameterizedTypeWithOwner(@Nullable Type ownerType, Class rawType, Type ... arguments) { + if (ownerType == null) { + return Types.newParameterizedType(rawType, arguments); + } + Preconditions.checkNotNull(arguments); + Preconditions.checkArgument(rawType.getEnclosingClass() != null, "Owner type for unenclosed %s", rawType); + return new ParameterizedTypeImpl(ownerType, rawType, arguments); + } + + static ParameterizedType newParameterizedType(Class rawType, Type ... arguments) { + return new ParameterizedTypeImpl(ClassOwnership.JVM_BEHAVIOR.getOwnerType(rawType), rawType, arguments); + } + + static TypeVariable newArtificialTypeVariable(D declaration, String name, Type ... bounds) { + Type[] typeArray; + if (bounds.length == 0) { + Type[] typeArray2 = new Type[1]; + typeArray = typeArray2; + typeArray2[0] = Object.class; + } else { + typeArray = bounds; + } + return new TypeVariableImpl(declaration, name, typeArray); + } + + @VisibleForTesting + static WildcardType subtypeOf(Type upperBound) { + return new WildcardTypeImpl(new Type[0], new Type[]{upperBound}); + } + + @VisibleForTesting + static WildcardType supertypeOf(Type lowerBound) { + return new WildcardTypeImpl(new Type[]{lowerBound}, new Type[]{Object.class}); + } + + static String toString(Type type) { + return type instanceof Class ? ((Class)type).getName() : type.toString(); + } + + @Nullable + static Type getComponentType(Type type) { + Preconditions.checkNotNull(type); + final AtomicReference result = new AtomicReference(); + new TypeVisitor(){ + + @Override + void visitTypeVariable(TypeVariable t) { + result.set(Types.subtypeOfComponentType(t.getBounds())); + } + + @Override + void visitWildcardType(WildcardType t) { + result.set(Types.subtypeOfComponentType(t.getUpperBounds())); + } + + @Override + void visitGenericArrayType(GenericArrayType t) { + result.set(t.getGenericComponentType()); + } + + @Override + void visitClass(Class t) { + result.set(t.getComponentType()); + } + }.visit(type); + return (Type)result.get(); + } + + @Nullable + private static Type subtypeOfComponentType(Type[] bounds) { + for (Type bound : bounds) { + Class componentClass; + Type componentType = Types.getComponentType(bound); + if (componentType == null) continue; + if (componentType instanceof Class && (componentClass = (Class)componentType).isPrimitive()) { + return componentClass; + } + return Types.subtypeOf(componentType); + } + return null; + } + + private static Type[] toArray(Collection types) { + return types.toArray(new Type[types.size()]); + } + + private static Iterable filterUpperBounds(Iterable bounds) { + return Iterables.filter(bounds, Predicates.not(Predicates.equalTo(Object.class))); + } + + private static void disallowPrimitiveType(Type[] types, String usedAs) { + for (Type type : types) { + if (!(type instanceof Class)) continue; + Class cls = (Class)type; + Preconditions.checkArgument(!cls.isPrimitive(), "Primitive type '%s' used as %s", cls, usedAs); + } + } + + static Class getArrayClass(Class componentType) { + return Array.newInstance(componentType, 0).getClass(); + } + + private Types() { + } + + static final class NativeTypeVariableEquals { + static final boolean NATIVE_TYPE_VARIABLE_ONLY = !NativeTypeVariableEquals.class.getTypeParameters()[0].equals(Types.newArtificialTypeVariable(NativeTypeVariableEquals.class, "X", new Type[0])); + + NativeTypeVariableEquals() { + } + } + + static enum JavaVersion { + JAVA6{ + + @Override + GenericArrayType newArrayType(Type componentType) { + return new GenericArrayTypeImpl(componentType); + } + + @Override + Type usedInGenericType(Type type) { + Class cls; + Preconditions.checkNotNull(type); + if (type instanceof Class && (cls = (Class)type).isArray()) { + return new GenericArrayTypeImpl(cls.getComponentType()); + } + return type; + } + } + , + JAVA7{ + + @Override + Type newArrayType(Type componentType) { + if (componentType instanceof Class) { + return Types.getArrayClass((Class)componentType); + } + return new GenericArrayTypeImpl(componentType); + } + + @Override + Type usedInGenericType(Type type) { + return Preconditions.checkNotNull(type); + } + } + , + JAVA8{ + + @Override + Type newArrayType(Type componentType) { + return JAVA7.newArrayType(componentType); + } + + @Override + Type usedInGenericType(Type type) { + return JAVA7.usedInGenericType(type); + } + + @Override + String typeName(Type type) { + try { + Method getTypeName = Type.class.getMethod("getTypeName", new Class[0]); + return (String)getTypeName.invoke(type, new Object[0]); + } + catch (NoSuchMethodException e) { + throw new AssertionError((Object)"Type.getTypeName should be available in Java 8"); + } + catch (InvocationTargetException e) { + throw new RuntimeException(e); + } + catch (IllegalAccessException e) { + throw new RuntimeException(e); + } + } + }; + + static final JavaVersion CURRENT; + + abstract Type newArrayType(Type var1); + + abstract Type usedInGenericType(Type var1); + + String typeName(Type type) { + return Types.toString(type); + } + + final ImmutableList usedInGenericType(Type[] types) { + ImmutableList.Builder builder = ImmutableList.builder(); + for (Type type : types) { + builder.add(this.usedInGenericType(type)); + } + return builder.build(); + } + + static { + CURRENT = AnnotatedElement.class.isAssignableFrom(TypeVariable.class) ? JAVA8 : (new TypeCapture(){}.capture() instanceof Class ? JAVA7 : JAVA6); + } + } + + static final class WildcardTypeImpl + implements WildcardType, + Serializable { + private final ImmutableList lowerBounds; + private final ImmutableList upperBounds; + private static final long serialVersionUID = 0L; + + WildcardTypeImpl(Type[] lowerBounds, Type[] upperBounds) { + Types.disallowPrimitiveType(lowerBounds, "lower bound for wildcard"); + Types.disallowPrimitiveType(upperBounds, "upper bound for wildcard"); + this.lowerBounds = JavaVersion.CURRENT.usedInGenericType(lowerBounds); + this.upperBounds = JavaVersion.CURRENT.usedInGenericType(upperBounds); + } + + @Override + public Type[] getLowerBounds() { + return Types.toArray(this.lowerBounds); + } + + @Override + public Type[] getUpperBounds() { + return Types.toArray(this.upperBounds); + } + + public boolean equals(Object obj) { + if (obj instanceof WildcardType) { + WildcardType that = (WildcardType)obj; + return this.lowerBounds.equals(Arrays.asList(that.getLowerBounds())) && this.upperBounds.equals(Arrays.asList(that.getUpperBounds())); + } + return false; + } + + public int hashCode() { + return this.lowerBounds.hashCode() ^ this.upperBounds.hashCode(); + } + + public String toString() { + StringBuilder builder = new StringBuilder("?"); + for (Type lowerBound : this.lowerBounds) { + builder.append(" super ").append(JavaVersion.CURRENT.typeName(lowerBound)); + } + for (Type upperBound : Types.filterUpperBounds(this.upperBounds)) { + builder.append(" extends ").append(JavaVersion.CURRENT.typeName(upperBound)); + } + return builder.toString(); + } + } + + private static final class TypeVariableImpl + implements TypeVariable { + private final D genericDeclaration; + private final String name; + private final ImmutableList bounds; + + TypeVariableImpl(D genericDeclaration, String name, Type[] bounds) { + Types.disallowPrimitiveType(bounds, "bound for type variable"); + this.genericDeclaration = (GenericDeclaration)Preconditions.checkNotNull(genericDeclaration); + this.name = Preconditions.checkNotNull(name); + this.bounds = ImmutableList.copyOf(bounds); + } + + @Override + public Type[] getBounds() { + return Types.toArray(this.bounds); + } + + @Override + public D getGenericDeclaration() { + return this.genericDeclaration; + } + + @Override + public String getName() { + return this.name; + } + + public String toString() { + return this.name; + } + + public int hashCode() { + return this.genericDeclaration.hashCode() ^ this.name.hashCode(); + } + + public boolean equals(Object obj) { + if (NativeTypeVariableEquals.NATIVE_TYPE_VARIABLE_ONLY) { + if (obj instanceof TypeVariableImpl) { + TypeVariableImpl that = (TypeVariableImpl)obj; + return this.name.equals(that.getName()) && this.genericDeclaration.equals(that.getGenericDeclaration()) && this.bounds.equals(that.bounds); + } + return false; + } + if (obj instanceof TypeVariable) { + TypeVariable that = (TypeVariable)obj; + return this.name.equals(that.getName()) && this.genericDeclaration.equals(that.getGenericDeclaration()); + } + return false; + } + } + + private static final class ParameterizedTypeImpl + implements ParameterizedType, + Serializable { + private final Type ownerType; + private final ImmutableList argumentsList; + private final Class rawType; + private static final long serialVersionUID = 0L; + + ParameterizedTypeImpl(@Nullable Type ownerType, Class rawType, Type[] typeArguments) { + Preconditions.checkNotNull(rawType); + Preconditions.checkArgument(typeArguments.length == rawType.getTypeParameters().length); + Types.disallowPrimitiveType(typeArguments, "type parameter"); + this.ownerType = ownerType; + this.rawType = rawType; + this.argumentsList = JavaVersion.CURRENT.usedInGenericType(typeArguments); + } + + @Override + public Type[] getActualTypeArguments() { + return Types.toArray(this.argumentsList); + } + + @Override + public Type getRawType() { + return this.rawType; + } + + @Override + public Type getOwnerType() { + return this.ownerType; + } + + public String toString() { + StringBuilder builder = new StringBuilder(); + if (this.ownerType != null) { + builder.append(JavaVersion.CURRENT.typeName(this.ownerType)).append('.'); + } + builder.append(this.rawType.getName()).append('<').append(COMMA_JOINER.join(Iterables.transform(this.argumentsList, TYPE_NAME))).append('>'); + return builder.toString(); + } + + public int hashCode() { + return (this.ownerType == null ? 0 : this.ownerType.hashCode()) ^ this.argumentsList.hashCode() ^ this.rawType.hashCode(); + } + + public boolean equals(Object other) { + if (!(other instanceof ParameterizedType)) { + return false; + } + ParameterizedType that = (ParameterizedType)other; + return this.getRawType().equals(that.getRawType()) && Objects.equal(this.getOwnerType(), that.getOwnerType()) && Arrays.equals(this.getActualTypeArguments(), that.getActualTypeArguments()); + } + } + + private static final class GenericArrayTypeImpl + implements GenericArrayType, + Serializable { + private final Type componentType; + private static final long serialVersionUID = 0L; + + GenericArrayTypeImpl(Type componentType) { + this.componentType = JavaVersion.CURRENT.usedInGenericType(componentType); + } + + @Override + public Type getGenericComponentType() { + return this.componentType; + } + + public String toString() { + return String.valueOf(Types.toString(this.componentType)).concat("[]"); + } + + public int hashCode() { + return this.componentType.hashCode(); + } + + public boolean equals(Object obj) { + if (obj instanceof GenericArrayType) { + GenericArrayType that = (GenericArrayType)obj; + return Objects.equal(this.getGenericComponentType(), that.getGenericComponentType()); + } + return false; + } + } + + private static enum ClassOwnership { + OWNED_BY_ENCLOSING_CLASS{ + + @Override + @Nullable + Class getOwnerType(Class rawType) { + return rawType.getEnclosingClass(); + } + } + , + LOCAL_CLASS_HAS_NO_OWNER{ + + @Override + @Nullable + Class getOwnerType(Class rawType) { + if (rawType.isLocalClass()) { + return null; + } + return rawType.getEnclosingClass(); + } + }; + + static final ClassOwnership JVM_BEHAVIOR; + + @Nullable + abstract Class getOwnerType(Class var1); + + private static ClassOwnership detectJvmBehavior() { + class LocalClass { + LocalClass() { + } + } + Class subclass = new LocalClass(){ + { + } + }.getClass(); + ParameterizedType parameterizedType = (ParameterizedType)subclass.getGenericSuperclass(); + for (ClassOwnership behavior : ClassOwnership.values()) { + if (behavior.getOwnerType(LocalClass.class) != parameterizedType.getOwnerType()) continue; + return behavior; + } + throw new AssertionError(); + } + + static { + JVM_BEHAVIOR = ClassOwnership.detectJvmBehavior(); + } + } +} diff --git a/src/com/google/common/reflect/package-info.java b/src/com/google/common/reflect/package-info.java new file mode 100644 index 0000000..643295b --- /dev/null +++ b/src/com/google/common/reflect/package-info.java @@ -0,0 +1,8 @@ +/* + * Decompiled with CFR 0.152. + */ +@ParametersAreNonnullByDefault +package com.google.common.reflect; + +import javax.annotation.ParametersAreNonnullByDefault; + diff --git a/src/com/google/common/util/concurrent/AbstractCheckedFuture.java b/src/com/google/common/util/concurrent/AbstractCheckedFuture.java new file mode 100644 index 0000000..73cf2a8 --- /dev/null +++ b/src/com/google/common/util/concurrent/AbstractCheckedFuture.java @@ -0,0 +1,58 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.util.concurrent; + +import com.google.common.annotations.Beta; +import com.google.common.util.concurrent.CheckedFuture; +import com.google.common.util.concurrent.ForwardingListenableFuture; +import com.google.common.util.concurrent.ListenableFuture; +import java.util.concurrent.CancellationException; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.TimeoutException; + +@Beta +public abstract class AbstractCheckedFuture +extends ForwardingListenableFuture.SimpleForwardingListenableFuture +implements CheckedFuture { + protected AbstractCheckedFuture(ListenableFuture delegate) { + super(delegate); + } + + protected abstract X mapException(Exception var1); + + @Override + public V checkedGet() throws X { + try { + return this.get(); + } + catch (InterruptedException e) { + Thread.currentThread().interrupt(); + throw this.mapException(e); + } + catch (CancellationException e) { + throw this.mapException(e); + } + catch (ExecutionException e) { + throw this.mapException(e); + } + } + + @Override + public V checkedGet(long timeout, TimeUnit unit) throws TimeoutException, X { + try { + return this.get(timeout, unit); + } + catch (InterruptedException e) { + Thread.currentThread().interrupt(); + throw this.mapException(e); + } + catch (CancellationException e) { + throw this.mapException(e); + } + catch (ExecutionException e) { + throw this.mapException(e); + } + } +} diff --git a/src/com/google/common/util/concurrent/AbstractExecutionThreadService.java b/src/com/google/common/util/concurrent/AbstractExecutionThreadService.java new file mode 100644 index 0000000..dadfefd --- /dev/null +++ b/src/com/google/common/util/concurrent/AbstractExecutionThreadService.java @@ -0,0 +1,156 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.util.concurrent; + +import com.google.common.annotations.Beta; +import com.google.common.base.Supplier; +import com.google.common.base.Throwables; +import com.google.common.util.concurrent.AbstractService; +import com.google.common.util.concurrent.MoreExecutors; +import com.google.common.util.concurrent.Service; +import java.util.concurrent.Executor; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.TimeoutException; +import java.util.logging.Level; +import java.util.logging.Logger; + +@Beta +public abstract class AbstractExecutionThreadService +implements Service { + private static final Logger logger = Logger.getLogger(AbstractExecutionThreadService.class.getName()); + private final Service delegate = new AbstractService(){ + + @Override + protected final void doStart() { + Executor executor = MoreExecutors.renamingDecorator(AbstractExecutionThreadService.this.executor(), new Supplier(){ + + @Override + public String get() { + return AbstractExecutionThreadService.this.serviceName(); + } + }); + executor.execute(new Runnable(){ + + @Override + public void run() { + try { + AbstractExecutionThreadService.this.startUp(); + this.notifyStarted(); + if (this.isRunning()) { + try { + AbstractExecutionThreadService.this.run(); + } + catch (Throwable t) { + try { + AbstractExecutionThreadService.this.shutDown(); + } + catch (Exception ignored) { + logger.log(Level.WARNING, "Error while attempting to shut down the service after failure.", ignored); + } + throw t; + } + } + AbstractExecutionThreadService.this.shutDown(); + this.notifyStopped(); + } + catch (Throwable t) { + this.notifyFailed(t); + throw Throwables.propagate(t); + } + } + }); + } + + @Override + protected void doStop() { + AbstractExecutionThreadService.this.triggerShutdown(); + } + }; + + protected AbstractExecutionThreadService() { + } + + protected void startUp() throws Exception { + } + + protected abstract void run() throws Exception; + + protected void shutDown() throws Exception { + } + + protected void triggerShutdown() { + } + + protected Executor executor() { + return new Executor(){ + + @Override + public void execute(Runnable command) { + MoreExecutors.newThread(AbstractExecutionThreadService.this.serviceName(), command).start(); + } + }; + } + + public String toString() { + String string = String.valueOf(String.valueOf(this.serviceName())); + String string2 = String.valueOf(String.valueOf((Object)this.state())); + return new StringBuilder(3 + string.length() + string2.length()).append(string).append(" [").append(string2).append("]").toString(); + } + + @Override + public final boolean isRunning() { + return this.delegate.isRunning(); + } + + @Override + public final Service.State state() { + return this.delegate.state(); + } + + @Override + public final void addListener(Service.Listener listener, Executor executor) { + this.delegate.addListener(listener, executor); + } + + @Override + public final Throwable failureCause() { + return this.delegate.failureCause(); + } + + @Override + public final Service startAsync() { + this.delegate.startAsync(); + return this; + } + + @Override + public final Service stopAsync() { + this.delegate.stopAsync(); + return this; + } + + @Override + public final void awaitRunning() { + this.delegate.awaitRunning(); + } + + @Override + public final void awaitRunning(long timeout, TimeUnit unit) throws TimeoutException { + this.delegate.awaitRunning(timeout, unit); + } + + @Override + public final void awaitTerminated() { + this.delegate.awaitTerminated(); + } + + @Override + public final void awaitTerminated(long timeout, TimeUnit unit) throws TimeoutException { + this.delegate.awaitTerminated(timeout, unit); + } + + protected String serviceName() { + return this.getClass().getSimpleName(); + } +} diff --git a/src/com/google/common/util/concurrent/AbstractFuture.java b/src/com/google/common/util/concurrent/AbstractFuture.java new file mode 100644 index 0000000..ff95417 --- /dev/null +++ b/src/com/google/common/util/concurrent/AbstractFuture.java @@ -0,0 +1,185 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.util.concurrent; + +import com.google.common.base.Preconditions; +import com.google.common.util.concurrent.ExecutionList; +import com.google.common.util.concurrent.ListenableFuture; +import java.util.concurrent.CancellationException; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.Executor; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.TimeoutException; +import java.util.concurrent.locks.AbstractQueuedSynchronizer; +import javax.annotation.Nullable; + +public abstract class AbstractFuture +implements ListenableFuture { + private final Sync sync = new Sync(); + private final ExecutionList executionList = new ExecutionList(); + + protected AbstractFuture() { + } + + @Override + public V get(long timeout, TimeUnit unit) throws InterruptedException, TimeoutException, ExecutionException { + return this.sync.get(unit.toNanos(timeout)); + } + + @Override + public V get() throws InterruptedException, ExecutionException { + return this.sync.get(); + } + + @Override + public boolean isDone() { + return this.sync.isDone(); + } + + @Override + public boolean isCancelled() { + return this.sync.isCancelled(); + } + + @Override + public boolean cancel(boolean mayInterruptIfRunning) { + if (!this.sync.cancel(mayInterruptIfRunning)) { + return false; + } + this.executionList.execute(); + if (mayInterruptIfRunning) { + this.interruptTask(); + } + return true; + } + + protected void interruptTask() { + } + + protected final boolean wasInterrupted() { + return this.sync.wasInterrupted(); + } + + @Override + public void addListener(Runnable listener, Executor exec) { + this.executionList.add(listener, exec); + } + + protected boolean set(@Nullable V value) { + boolean result = this.sync.set(value); + if (result) { + this.executionList.execute(); + } + return result; + } + + protected boolean setException(Throwable throwable) { + boolean result = this.sync.setException(Preconditions.checkNotNull(throwable)); + if (result) { + this.executionList.execute(); + } + return result; + } + + static final CancellationException cancellationExceptionWithCause(@Nullable String message, @Nullable Throwable cause) { + CancellationException exception = new CancellationException(message); + exception.initCause(cause); + return exception; + } + + static final class Sync + extends AbstractQueuedSynchronizer { + private static final long serialVersionUID = 0L; + static final int RUNNING = 0; + static final int COMPLETING = 1; + static final int COMPLETED = 2; + static final int CANCELLED = 4; + static final int INTERRUPTED = 8; + private V value; + private Throwable exception; + + Sync() { + } + + @Override + protected int tryAcquireShared(int ignored) { + if (this.isDone()) { + return 1; + } + return -1; + } + + @Override + protected boolean tryReleaseShared(int finalState) { + this.setState(finalState); + return true; + } + + V get(long nanos) throws TimeoutException, CancellationException, ExecutionException, InterruptedException { + if (!this.tryAcquireSharedNanos(-1, nanos)) { + throw new TimeoutException("Timeout waiting for task."); + } + return this.getValue(); + } + + V get() throws CancellationException, ExecutionException, InterruptedException { + this.acquireSharedInterruptibly(-1); + return this.getValue(); + } + + private V getValue() throws CancellationException, ExecutionException { + int state = this.getState(); + switch (state) { + case 2: { + if (this.exception != null) { + throw new ExecutionException(this.exception); + } + return this.value; + } + case 4: + case 8: { + throw AbstractFuture.cancellationExceptionWithCause("Task was cancelled.", this.exception); + } + } + int n = state; + throw new IllegalStateException(new StringBuilder(49).append("Error, synchronizer in invalid state: ").append(n).toString()); + } + + boolean isDone() { + return (this.getState() & 0xE) != 0; + } + + boolean isCancelled() { + return (this.getState() & 0xC) != 0; + } + + boolean wasInterrupted() { + return this.getState() == 8; + } + + boolean set(@Nullable V v) { + return this.complete(v, null, 2); + } + + boolean setException(Throwable t) { + return this.complete(null, t, 2); + } + + boolean cancel(boolean interrupt) { + return this.complete(null, null, interrupt ? 8 : 4); + } + + private boolean complete(@Nullable V v, @Nullable Throwable t, int finalState) { + boolean doCompletion = this.compareAndSetState(0, 1); + if (doCompletion) { + this.value = v; + this.exception = (finalState & 0xC) != 0 ? new CancellationException("Future.cancel() was called.") : t; + this.releaseShared(finalState); + } else if (this.getState() == 1) { + this.acquireShared(-1); + } + return doCompletion; + } + } +} diff --git a/src/com/google/common/util/concurrent/AbstractIdleService.java b/src/com/google/common/util/concurrent/AbstractIdleService.java new file mode 100644 index 0000000..c1d4d3d --- /dev/null +++ b/src/com/google/common/util/concurrent/AbstractIdleService.java @@ -0,0 +1,145 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.util.concurrent; + +import com.google.common.annotations.Beta; +import com.google.common.base.Supplier; +import com.google.common.base.Throwables; +import com.google.common.util.concurrent.AbstractService; +import com.google.common.util.concurrent.MoreExecutors; +import com.google.common.util.concurrent.Service; +import java.util.concurrent.Executor; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.TimeoutException; + +@Beta +public abstract class AbstractIdleService +implements Service { + private final Supplier threadNameSupplier = new Supplier(){ + + @Override + public String get() { + String string = String.valueOf(String.valueOf(AbstractIdleService.this.serviceName())); + String string2 = String.valueOf(String.valueOf((Object)AbstractIdleService.this.state())); + return new StringBuilder(1 + string.length() + string2.length()).append(string).append(" ").append(string2).toString(); + } + }; + private final Service delegate = new AbstractService(){ + + @Override + protected final void doStart() { + MoreExecutors.renamingDecorator(AbstractIdleService.this.executor(), (Supplier)AbstractIdleService.this.threadNameSupplier).execute(new Runnable(){ + + @Override + public void run() { + try { + AbstractIdleService.this.startUp(); + this.notifyStarted(); + } + catch (Throwable t) { + this.notifyFailed(t); + throw Throwables.propagate(t); + } + } + }); + } + + @Override + protected final void doStop() { + MoreExecutors.renamingDecorator(AbstractIdleService.this.executor(), (Supplier)AbstractIdleService.this.threadNameSupplier).execute(new Runnable(){ + + @Override + public void run() { + try { + AbstractIdleService.this.shutDown(); + this.notifyStopped(); + } + catch (Throwable t) { + this.notifyFailed(t); + throw Throwables.propagate(t); + } + } + }); + } + }; + + protected AbstractIdleService() { + } + + protected abstract void startUp() throws Exception; + + protected abstract void shutDown() throws Exception; + + protected Executor executor() { + return new Executor(){ + + @Override + public void execute(Runnable command) { + MoreExecutors.newThread((String)AbstractIdleService.this.threadNameSupplier.get(), command).start(); + } + }; + } + + public String toString() { + String string = String.valueOf(String.valueOf(this.serviceName())); + String string2 = String.valueOf(String.valueOf((Object)this.state())); + return new StringBuilder(3 + string.length() + string2.length()).append(string).append(" [").append(string2).append("]").toString(); + } + + @Override + public final boolean isRunning() { + return this.delegate.isRunning(); + } + + @Override + public final Service.State state() { + return this.delegate.state(); + } + + @Override + public final void addListener(Service.Listener listener, Executor executor) { + this.delegate.addListener(listener, executor); + } + + @Override + public final Throwable failureCause() { + return this.delegate.failureCause(); + } + + @Override + public final Service startAsync() { + this.delegate.startAsync(); + return this; + } + + @Override + public final Service stopAsync() { + this.delegate.stopAsync(); + return this; + } + + @Override + public final void awaitRunning() { + this.delegate.awaitRunning(); + } + + @Override + public final void awaitRunning(long timeout, TimeUnit unit) throws TimeoutException { + this.delegate.awaitRunning(timeout, unit); + } + + @Override + public final void awaitTerminated() { + this.delegate.awaitTerminated(); + } + + @Override + public final void awaitTerminated(long timeout, TimeUnit unit) throws TimeoutException { + this.delegate.awaitTerminated(timeout, unit); + } + + protected String serviceName() { + return this.getClass().getSimpleName(); + } +} diff --git a/src/com/google/common/util/concurrent/AbstractListeningExecutorService.java b/src/com/google/common/util/concurrent/AbstractListeningExecutorService.java new file mode 100644 index 0000000..ddce9d6 --- /dev/null +++ b/src/com/google/common/util/concurrent/AbstractListeningExecutorService.java @@ -0,0 +1,40 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.util.concurrent; + +import com.google.common.annotations.Beta; +import com.google.common.util.concurrent.ListenableFuture; +import com.google.common.util.concurrent.ListenableFutureTask; +import com.google.common.util.concurrent.ListeningExecutorService; +import java.util.concurrent.AbstractExecutorService; +import java.util.concurrent.Callable; +import javax.annotation.Nullable; + +@Beta +public abstract class AbstractListeningExecutorService +extends AbstractExecutorService +implements ListeningExecutorService { + protected final ListenableFutureTask newTaskFor(Runnable runnable, T value) { + return ListenableFutureTask.create(runnable, value); + } + + protected final ListenableFutureTask newTaskFor(Callable callable) { + return ListenableFutureTask.create(callable); + } + + @Override + public ListenableFuture submit(Runnable task) { + return (ListenableFuture)super.submit(task); + } + + @Override + public ListenableFuture submit(Runnable task, @Nullable T result) { + return (ListenableFuture)super.submit(task, result); + } + + @Override + public ListenableFuture submit(Callable task) { + return (ListenableFuture)super.submit(task); + } +} diff --git a/src/com/google/common/util/concurrent/AbstractScheduledService.java b/src/com/google/common/util/concurrent/AbstractScheduledService.java new file mode 100644 index 0000000..8f4933a --- /dev/null +++ b/src/com/google/common/util/concurrent/AbstractScheduledService.java @@ -0,0 +1,334 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.util.concurrent; + +import com.google.common.annotations.Beta; +import com.google.common.base.Preconditions; +import com.google.common.base.Supplier; +import com.google.common.base.Throwables; +import com.google.common.util.concurrent.AbstractService; +import com.google.common.util.concurrent.ForwardingFuture; +import com.google.common.util.concurrent.MoreExecutors; +import com.google.common.util.concurrent.Service; +import java.util.concurrent.Callable; +import java.util.concurrent.Executor; +import java.util.concurrent.Executors; +import java.util.concurrent.Future; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.ThreadFactory; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.TimeoutException; +import java.util.concurrent.locks.ReentrantLock; +import java.util.logging.Level; +import java.util.logging.Logger; +import javax.annotation.concurrent.GuardedBy; + +@Beta +public abstract class AbstractScheduledService +implements Service { + private static final Logger logger = Logger.getLogger(AbstractScheduledService.class.getName()); + private final AbstractService delegate = new AbstractService(){ + private volatile Future runningTask; + private volatile ScheduledExecutorService executorService; + private final ReentrantLock lock = new ReentrantLock(); + private final Runnable task = new Runnable(){ + + @Override + public void run() { + lock.lock(); + try { + AbstractScheduledService.this.runOneIteration(); + } + catch (Throwable t) { + try { + AbstractScheduledService.this.shutDown(); + } + catch (Exception ignored) { + logger.log(Level.WARNING, "Error while attempting to shut down the service after failure.", ignored); + } + this.notifyFailed(t); + throw Throwables.propagate(t); + } + finally { + lock.unlock(); + } + } + }; + + @Override + protected final void doStart() { + this.executorService = MoreExecutors.renamingDecorator(AbstractScheduledService.this.executor(), new Supplier(){ + + @Override + public String get() { + String string = String.valueOf(String.valueOf(AbstractScheduledService.this.serviceName())); + String string2 = String.valueOf(String.valueOf((Object)this.state())); + return new StringBuilder(1 + string.length() + string2.length()).append(string).append(" ").append(string2).toString(); + } + }); + this.executorService.execute(new Runnable(){ + + @Override + public void run() { + lock.lock(); + try { + AbstractScheduledService.this.startUp(); + runningTask = AbstractScheduledService.this.scheduler().schedule(AbstractScheduledService.this.delegate, executorService, task); + this.notifyStarted(); + } + catch (Throwable t) { + this.notifyFailed(t); + throw Throwables.propagate(t); + } + finally { + lock.unlock(); + } + } + }); + } + + @Override + protected final void doStop() { + this.runningTask.cancel(false); + this.executorService.execute(new Runnable(){ + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public void run() { + try { + lock.lock(); + try { + if (this.state() != Service.State.STOPPING) { + return; + } + AbstractScheduledService.this.shutDown(); + } + finally { + lock.unlock(); + } + this.notifyStopped(); + } + catch (Throwable t) { + this.notifyFailed(t); + throw Throwables.propagate(t); + } + } + }); + } + }; + + protected AbstractScheduledService() { + } + + protected abstract void runOneIteration() throws Exception; + + protected void startUp() throws Exception { + } + + protected void shutDown() throws Exception { + } + + protected abstract Scheduler scheduler(); + + protected ScheduledExecutorService executor() { + final ScheduledExecutorService executor = Executors.newSingleThreadScheduledExecutor(new ThreadFactory(){ + + @Override + public Thread newThread(Runnable runnable) { + return MoreExecutors.newThread(AbstractScheduledService.this.serviceName(), runnable); + } + }); + this.addListener(new Service.Listener(){ + + @Override + public void terminated(Service.State from) { + executor.shutdown(); + } + + @Override + public void failed(Service.State from, Throwable failure) { + executor.shutdown(); + } + }, MoreExecutors.directExecutor()); + return executor; + } + + protected String serviceName() { + return this.getClass().getSimpleName(); + } + + public String toString() { + String string = String.valueOf(String.valueOf(this.serviceName())); + String string2 = String.valueOf(String.valueOf((Object)this.state())); + return new StringBuilder(3 + string.length() + string2.length()).append(string).append(" [").append(string2).append("]").toString(); + } + + @Override + public final boolean isRunning() { + return this.delegate.isRunning(); + } + + @Override + public final Service.State state() { + return this.delegate.state(); + } + + @Override + public final void addListener(Service.Listener listener, Executor executor) { + this.delegate.addListener(listener, executor); + } + + @Override + public final Throwable failureCause() { + return this.delegate.failureCause(); + } + + @Override + public final Service startAsync() { + this.delegate.startAsync(); + return this; + } + + @Override + public final Service stopAsync() { + this.delegate.stopAsync(); + return this; + } + + @Override + public final void awaitRunning() { + this.delegate.awaitRunning(); + } + + @Override + public final void awaitRunning(long timeout, TimeUnit unit) throws TimeoutException { + this.delegate.awaitRunning(timeout, unit); + } + + @Override + public final void awaitTerminated() { + this.delegate.awaitTerminated(); + } + + @Override + public final void awaitTerminated(long timeout, TimeUnit unit) throws TimeoutException { + this.delegate.awaitTerminated(timeout, unit); + } + + @Beta + public static abstract class CustomScheduler + extends Scheduler { + @Override + final Future schedule(AbstractService service, ScheduledExecutorService executor, Runnable runnable) { + ReschedulableCallable task = new ReschedulableCallable(service, executor, runnable); + task.reschedule(); + return task; + } + + protected abstract Schedule getNextSchedule() throws Exception; + + @Beta + protected static final class Schedule { + private final long delay; + private final TimeUnit unit; + + public Schedule(long delay, TimeUnit unit) { + this.delay = delay; + this.unit = Preconditions.checkNotNull(unit); + } + } + + private class ReschedulableCallable + extends ForwardingFuture + implements Callable { + private final Runnable wrappedRunnable; + private final ScheduledExecutorService executor; + private final AbstractService service; + private final ReentrantLock lock = new ReentrantLock(); + @GuardedBy(value="lock") + private Future currentFuture; + + ReschedulableCallable(AbstractService service, ScheduledExecutorService executor, Runnable runnable) { + this.wrappedRunnable = runnable; + this.executor = executor; + this.service = service; + } + + @Override + public Void call() throws Exception { + this.wrappedRunnable.run(); + this.reschedule(); + return null; + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + public void reschedule() { + this.lock.lock(); + try { + if (this.currentFuture == null || !this.currentFuture.isCancelled()) { + Schedule schedule = CustomScheduler.this.getNextSchedule(); + this.currentFuture = this.executor.schedule(this, schedule.delay, schedule.unit); + } + } + catch (Throwable e) { + this.service.notifyFailed(e); + } + finally { + this.lock.unlock(); + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public boolean cancel(boolean mayInterruptIfRunning) { + this.lock.lock(); + try { + boolean bl = this.currentFuture.cancel(mayInterruptIfRunning); + return bl; + } + finally { + this.lock.unlock(); + } + } + + @Override + protected Future delegate() { + throw new UnsupportedOperationException("Only cancel is supported by this future"); + } + } + } + + public static abstract class Scheduler { + public static Scheduler newFixedDelaySchedule(final long initialDelay, final long delay, final TimeUnit unit) { + return new Scheduler(){ + + @Override + public Future schedule(AbstractService service, ScheduledExecutorService executor, Runnable task) { + return executor.scheduleWithFixedDelay(task, initialDelay, delay, unit); + } + }; + } + + public static Scheduler newFixedRateSchedule(final long initialDelay, final long period, final TimeUnit unit) { + return new Scheduler(){ + + @Override + public Future schedule(AbstractService service, ScheduledExecutorService executor, Runnable task) { + return executor.scheduleAtFixedRate(task, initialDelay, period, unit); + } + }; + } + + abstract Future schedule(AbstractService var1, ScheduledExecutorService var2, Runnable var3); + + private Scheduler() { + } + } +} diff --git a/src/com/google/common/util/concurrent/AbstractService.java b/src/com/google/common/util/concurrent/AbstractService.java new file mode 100644 index 0000000..85991ed --- /dev/null +++ b/src/com/google/common/util/concurrent/AbstractService.java @@ -0,0 +1,479 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.util.concurrent; + +import com.google.common.annotations.Beta; +import com.google.common.base.Preconditions; +import com.google.common.util.concurrent.ListenerCallQueue; +import com.google.common.util.concurrent.Monitor; +import com.google.common.util.concurrent.Service; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.concurrent.Executor; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.TimeoutException; +import javax.annotation.Nullable; +import javax.annotation.concurrent.GuardedBy; +import javax.annotation.concurrent.Immutable; + +@Beta +public abstract class AbstractService +implements Service { + private static final ListenerCallQueue.Callback STARTING_CALLBACK = new ListenerCallQueue.Callback("starting()"){ + + @Override + void call(Service.Listener listener) { + listener.starting(); + } + }; + private static final ListenerCallQueue.Callback RUNNING_CALLBACK = new ListenerCallQueue.Callback("running()"){ + + @Override + void call(Service.Listener listener) { + listener.running(); + } + }; + private static final ListenerCallQueue.Callback STOPPING_FROM_STARTING_CALLBACK = AbstractService.stoppingCallback(Service.State.STARTING); + private static final ListenerCallQueue.Callback STOPPING_FROM_RUNNING_CALLBACK = AbstractService.stoppingCallback(Service.State.RUNNING); + private static final ListenerCallQueue.Callback TERMINATED_FROM_NEW_CALLBACK = AbstractService.terminatedCallback(Service.State.NEW); + private static final ListenerCallQueue.Callback TERMINATED_FROM_RUNNING_CALLBACK = AbstractService.terminatedCallback(Service.State.RUNNING); + private static final ListenerCallQueue.Callback TERMINATED_FROM_STOPPING_CALLBACK = AbstractService.terminatedCallback(Service.State.STOPPING); + private final Monitor monitor = new Monitor(); + private final Monitor.Guard isStartable = new Monitor.Guard(this.monitor){ + + @Override + public boolean isSatisfied() { + return AbstractService.this.state() == Service.State.NEW; + } + }; + private final Monitor.Guard isStoppable = new Monitor.Guard(this.monitor){ + + @Override + public boolean isSatisfied() { + return AbstractService.this.state().compareTo(Service.State.RUNNING) <= 0; + } + }; + private final Monitor.Guard hasReachedRunning = new Monitor.Guard(this.monitor){ + + @Override + public boolean isSatisfied() { + return AbstractService.this.state().compareTo(Service.State.RUNNING) >= 0; + } + }; + private final Monitor.Guard isStopped = new Monitor.Guard(this.monitor){ + + @Override + public boolean isSatisfied() { + return AbstractService.this.state().isTerminal(); + } + }; + @GuardedBy(value="monitor") + private final List> listeners = Collections.synchronizedList(new ArrayList()); + @GuardedBy(value="monitor") + private volatile StateSnapshot snapshot = new StateSnapshot(Service.State.NEW); + + private static ListenerCallQueue.Callback terminatedCallback(final Service.State from) { + String string = String.valueOf(String.valueOf((Object)from)); + return new ListenerCallQueue.Callback(new StringBuilder(21 + string.length()).append("terminated({from = ").append(string).append("})").toString()){ + + @Override + void call(Service.Listener listener) { + listener.terminated(from); + } + }; + } + + private static ListenerCallQueue.Callback stoppingCallback(final Service.State from) { + String string = String.valueOf(String.valueOf((Object)from)); + return new ListenerCallQueue.Callback(new StringBuilder(19 + string.length()).append("stopping({from = ").append(string).append("})").toString()){ + + @Override + void call(Service.Listener listener) { + listener.stopping(from); + } + }; + } + + protected AbstractService() { + } + + protected abstract void doStart(); + + protected abstract void doStop(); + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public final Service startAsync() { + if (this.monitor.enterIf(this.isStartable)) { + try { + this.snapshot = new StateSnapshot(Service.State.STARTING); + this.starting(); + this.doStart(); + } + catch (Throwable startupFailure) { + this.notifyFailed(startupFailure); + } + finally { + this.monitor.leave(); + this.executeListeners(); + } + } else { + String string = String.valueOf(String.valueOf(this)); + throw new IllegalStateException(new StringBuilder(33 + string.length()).append("Service ").append(string).append(" has already been started").toString()); + } + return this; + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + * Enabled force condition propagation + * Lifted jumps to return sites + */ + @Override + public final Service stopAsync() { + if (!this.monitor.enterIf(this.isStoppable)) return this; + try { + Service.State previous = this.state(); + switch (previous) { + case NEW: { + this.snapshot = new StateSnapshot(Service.State.TERMINATED); + this.terminated(Service.State.NEW); + return this; + } + case STARTING: { + this.snapshot = new StateSnapshot(Service.State.STARTING, true, null); + this.stopping(Service.State.STARTING); + return this; + } + case RUNNING: { + this.snapshot = new StateSnapshot(Service.State.STOPPING); + this.stopping(Service.State.RUNNING); + this.doStop(); + return this; + } + case STOPPING: + case TERMINATED: + case FAILED: { + String string = String.valueOf(String.valueOf((Object)previous)); + throw new AssertionError((Object)new StringBuilder(45 + string.length()).append("isStoppable is incorrectly implemented, saw: ").append(string).toString()); + } + default: { + String string = String.valueOf(String.valueOf((Object)previous)); + throw new AssertionError((Object)new StringBuilder(18 + string.length()).append("Unexpected state: ").append(string).toString()); + } + } + } + catch (Throwable shutdownFailure) { + this.notifyFailed(shutdownFailure); + return this; + } + finally { + this.monitor.leave(); + this.executeListeners(); + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public final void awaitRunning() { + this.monitor.enterWhenUninterruptibly(this.hasReachedRunning); + try { + this.checkCurrentState(Service.State.RUNNING); + } + finally { + this.monitor.leave(); + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public final void awaitRunning(long timeout, TimeUnit unit) throws TimeoutException { + if (this.monitor.enterWhenUninterruptibly(this.hasReachedRunning, timeout, unit)) { + try { + this.checkCurrentState(Service.State.RUNNING); + } + finally { + this.monitor.leave(); + } + } else { + String string = String.valueOf(String.valueOf(this)); + String string2 = String.valueOf(String.valueOf((Object)this.state())); + throw new TimeoutException(new StringBuilder(66 + string.length() + string2.length()).append("Timed out waiting for ").append(string).append(" to reach the RUNNING state. ").append("Current state: ").append(string2).toString()); + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public final void awaitTerminated() { + this.monitor.enterWhenUninterruptibly(this.isStopped); + try { + this.checkCurrentState(Service.State.TERMINATED); + } + finally { + this.monitor.leave(); + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public final void awaitTerminated(long timeout, TimeUnit unit) throws TimeoutException { + if (this.monitor.enterWhenUninterruptibly(this.isStopped, timeout, unit)) { + try { + this.checkCurrentState(Service.State.TERMINATED); + } + finally { + this.monitor.leave(); + } + } else { + String string = String.valueOf(String.valueOf(this)); + String string2 = String.valueOf(String.valueOf((Object)this.state())); + throw new TimeoutException(new StringBuilder(65 + string.length() + string2.length()).append("Timed out waiting for ").append(string).append(" to reach a terminal state. ").append("Current state: ").append(string2).toString()); + } + } + + @GuardedBy(value="monitor") + private void checkCurrentState(Service.State expected) { + Service.State actual = this.state(); + if (actual != expected) { + if (actual == Service.State.FAILED) { + String string = String.valueOf(String.valueOf((Object)expected)); + throw new IllegalStateException(new StringBuilder(55 + string.length()).append("Expected the service to be ").append(string).append(", but the service has FAILED").toString(), this.failureCause()); + } + String string = String.valueOf(String.valueOf((Object)expected)); + String string2 = String.valueOf(String.valueOf((Object)actual)); + throw new IllegalStateException(new StringBuilder(37 + string.length() + string2.length()).append("Expected the service to be ").append(string).append(", but was ").append(string2).toString()); + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + protected final void notifyStarted() { + this.monitor.enter(); + try { + if (this.snapshot.state != Service.State.STARTING) { + String string = String.valueOf(String.valueOf((Object)this.snapshot.state)); + IllegalStateException failure = new IllegalStateException(new StringBuilder(43 + string.length()).append("Cannot notifyStarted() when the service is ").append(string).toString()); + this.notifyFailed(failure); + throw failure; + } + if (this.snapshot.shutdownWhenStartupFinishes) { + this.snapshot = new StateSnapshot(Service.State.STOPPING); + this.doStop(); + } else { + this.snapshot = new StateSnapshot(Service.State.RUNNING); + this.running(); + } + } + finally { + this.monitor.leave(); + this.executeListeners(); + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + protected final void notifyStopped() { + this.monitor.enter(); + try { + Service.State previous = this.snapshot.state; + if (previous != Service.State.STOPPING && previous != Service.State.RUNNING) { + String string = String.valueOf(String.valueOf((Object)previous)); + IllegalStateException failure = new IllegalStateException(new StringBuilder(43 + string.length()).append("Cannot notifyStopped() when the service is ").append(string).toString()); + this.notifyFailed(failure); + throw failure; + } + this.snapshot = new StateSnapshot(Service.State.TERMINATED); + this.terminated(previous); + } + finally { + this.monitor.leave(); + this.executeListeners(); + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + * Enabled force condition propagation + * Lifted jumps to return sites + */ + protected final void notifyFailed(Throwable cause) { + Preconditions.checkNotNull(cause); + this.monitor.enter(); + try { + Service.State previous = this.state(); + switch (previous) { + case NEW: + case TERMINATED: { + String string = String.valueOf(String.valueOf((Object)previous)); + throw new IllegalStateException(new StringBuilder(22 + string.length()).append("Failed while in state:").append(string).toString(), cause); + } + case STARTING: + case RUNNING: + case STOPPING: { + this.snapshot = new StateSnapshot(Service.State.FAILED, false, cause); + this.failed(previous, cause); + return; + } + case FAILED: { + return; + } + default: { + String string = String.valueOf(String.valueOf((Object)previous)); + throw new AssertionError((Object)new StringBuilder(18 + string.length()).append("Unexpected state: ").append(string).toString()); + } + } + } + finally { + this.monitor.leave(); + this.executeListeners(); + } + } + + @Override + public final boolean isRunning() { + return this.state() == Service.State.RUNNING; + } + + @Override + public final Service.State state() { + return this.snapshot.externalState(); + } + + @Override + public final Throwable failureCause() { + return this.snapshot.failureCause(); + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public final void addListener(Service.Listener listener, Executor executor) { + Preconditions.checkNotNull(listener, "listener"); + Preconditions.checkNotNull(executor, "executor"); + this.monitor.enter(); + try { + if (!this.state().isTerminal()) { + this.listeners.add(new ListenerCallQueue(listener, executor)); + } + } + finally { + this.monitor.leave(); + } + } + + public String toString() { + String string = String.valueOf(String.valueOf(this.getClass().getSimpleName())); + String string2 = String.valueOf(String.valueOf((Object)this.state())); + return new StringBuilder(3 + string.length() + string2.length()).append(string).append(" [").append(string2).append("]").toString(); + } + + private void executeListeners() { + if (!this.monitor.isOccupiedByCurrentThread()) { + for (int i = 0; i < this.listeners.size(); ++i) { + this.listeners.get(i).execute(); + } + } + } + + @GuardedBy(value="monitor") + private void starting() { + STARTING_CALLBACK.enqueueOn(this.listeners); + } + + @GuardedBy(value="monitor") + private void running() { + RUNNING_CALLBACK.enqueueOn(this.listeners); + } + + @GuardedBy(value="monitor") + private void stopping(Service.State from) { + if (from == Service.State.STARTING) { + STOPPING_FROM_STARTING_CALLBACK.enqueueOn(this.listeners); + } else if (from == Service.State.RUNNING) { + STOPPING_FROM_RUNNING_CALLBACK.enqueueOn(this.listeners); + } else { + throw new AssertionError(); + } + } + + @GuardedBy(value="monitor") + private void terminated(Service.State from) { + switch (from) { + case NEW: { + TERMINATED_FROM_NEW_CALLBACK.enqueueOn(this.listeners); + break; + } + case RUNNING: { + TERMINATED_FROM_RUNNING_CALLBACK.enqueueOn(this.listeners); + break; + } + case STOPPING: { + TERMINATED_FROM_STOPPING_CALLBACK.enqueueOn(this.listeners); + break; + } + default: { + throw new AssertionError(); + } + } + } + + @GuardedBy(value="monitor") + private void failed(final Service.State from, final Throwable cause) { + String string = String.valueOf(String.valueOf((Object)from)); + String string2 = String.valueOf(String.valueOf(cause)); + new ListenerCallQueue.Callback(new StringBuilder(27 + string.length() + string2.length()).append("failed({from = ").append(string).append(", cause = ").append(string2).append("})").toString()){ + + @Override + void call(Service.Listener listener) { + listener.failed(from, cause); + } + }.enqueueOn(this.listeners); + } + + @Immutable + private static final class StateSnapshot { + final Service.State state; + final boolean shutdownWhenStartupFinishes; + @Nullable + final Throwable failure; + + StateSnapshot(Service.State internalState) { + this(internalState, false, null); + } + + StateSnapshot(Service.State internalState, boolean shutdownWhenStartupFinishes, @Nullable Throwable failure) { + Preconditions.checkArgument(!shutdownWhenStartupFinishes || internalState == Service.State.STARTING, "shudownWhenStartupFinishes can only be set if state is STARTING. Got %s instead.", new Object[]{internalState}); + Preconditions.checkArgument(!(failure != null ^ internalState == Service.State.FAILED), "A failure cause should be set if and only if the state is failed. Got %s and %s instead.", new Object[]{internalState, failure}); + this.state = internalState; + this.shutdownWhenStartupFinishes = shutdownWhenStartupFinishes; + this.failure = failure; + } + + Service.State externalState() { + if (this.shutdownWhenStartupFinishes && this.state == Service.State.STARTING) { + return Service.State.STOPPING; + } + return this.state; + } + + Throwable failureCause() { + Preconditions.checkState(this.state == Service.State.FAILED, "failureCause() is only valid if the service has failed, service is %s", new Object[]{this.state}); + return this.failure; + } + } +} diff --git a/src/com/google/common/util/concurrent/AsyncFunction.java b/src/com/google/common/util/concurrent/AsyncFunction.java new file mode 100644 index 0000000..34de7bd --- /dev/null +++ b/src/com/google/common/util/concurrent/AsyncFunction.java @@ -0,0 +1,10 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.util.concurrent; + +import com.google.common.util.concurrent.ListenableFuture; + +public interface AsyncFunction { + public ListenableFuture apply(I var1) throws Exception; +} diff --git a/src/com/google/common/util/concurrent/AsyncSettableFuture.java b/src/com/google/common/util/concurrent/AsyncSettableFuture.java new file mode 100644 index 0000000..967e4c1 --- /dev/null +++ b/src/com/google/common/util/concurrent/AsyncSettableFuture.java @@ -0,0 +1,59 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.util.concurrent; + +import com.google.common.base.Preconditions; +import com.google.common.util.concurrent.AbstractFuture; +import com.google.common.util.concurrent.ForwardingListenableFuture; +import com.google.common.util.concurrent.Futures; +import com.google.common.util.concurrent.ListenableFuture; +import javax.annotation.Nullable; + +final class AsyncSettableFuture +extends ForwardingListenableFuture { + private final NestedFuture nested = new NestedFuture(); + private final ListenableFuture dereferenced = Futures.dereference(this.nested); + + public static AsyncSettableFuture create() { + return new AsyncSettableFuture(); + } + + private AsyncSettableFuture() { + } + + @Override + protected ListenableFuture delegate() { + return this.dereferenced; + } + + public boolean setFuture(ListenableFuture future) { + return this.nested.setFuture(Preconditions.checkNotNull(future)); + } + + public boolean setValue(@Nullable V value) { + return this.setFuture(Futures.immediateFuture(value)); + } + + public boolean setException(Throwable exception) { + return this.setFuture(Futures.immediateFailedFuture(exception)); + } + + public boolean isSet() { + return this.nested.isDone(); + } + + private static final class NestedFuture + extends AbstractFuture> { + private NestedFuture() { + } + + boolean setFuture(ListenableFuture value) { + boolean result = this.set(value); + if (this.isCancelled()) { + value.cancel(this.wasInterrupted()); + } + return result; + } + } +} diff --git a/src/com/google/common/util/concurrent/AtomicDouble.java b/src/com/google/common/util/concurrent/AtomicDouble.java new file mode 100644 index 0000000..c54e441 --- /dev/null +++ b/src/com/google/common/util/concurrent/AtomicDouble.java @@ -0,0 +1,105 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.util.concurrent; + +import java.io.IOException; +import java.io.ObjectInputStream; +import java.io.ObjectOutputStream; +import java.io.Serializable; +import java.util.concurrent.atomic.AtomicLongFieldUpdater; + +public class AtomicDouble +extends Number +implements Serializable { + private static final long serialVersionUID = 0L; + private volatile transient long value; + private static final AtomicLongFieldUpdater updater = AtomicLongFieldUpdater.newUpdater(AtomicDouble.class, "value"); + + public AtomicDouble(double initialValue) { + this.value = Double.doubleToRawLongBits(initialValue); + } + + public AtomicDouble() { + } + + public final double get() { + return Double.longBitsToDouble(this.value); + } + + public final void set(double newValue) { + long next; + this.value = next = Double.doubleToRawLongBits(newValue); + } + + public final void lazySet(double newValue) { + this.set(newValue); + } + + public final double getAndSet(double newValue) { + long next = Double.doubleToRawLongBits(newValue); + return Double.longBitsToDouble(updater.getAndSet(this, next)); + } + + public final boolean compareAndSet(double expect, double update) { + return updater.compareAndSet(this, Double.doubleToRawLongBits(expect), Double.doubleToRawLongBits(update)); + } + + public final boolean weakCompareAndSet(double expect, double update) { + return updater.weakCompareAndSet(this, Double.doubleToRawLongBits(expect), Double.doubleToRawLongBits(update)); + } + + public final double getAndAdd(double delta) { + double currentVal; + double nextVal; + long next; + long current; + while (!updater.compareAndSet(this, current = this.value, next = Double.doubleToRawLongBits(nextVal = (currentVal = Double.longBitsToDouble(current)) + delta))) { + } + return currentVal; + } + + public final double addAndGet(double delta) { + double currentVal; + double nextVal; + long next; + long current; + while (!updater.compareAndSet(this, current = this.value, next = Double.doubleToRawLongBits(nextVal = (currentVal = Double.longBitsToDouble(current)) + delta))) { + } + return nextVal; + } + + public String toString() { + return Double.toString(this.get()); + } + + @Override + public int intValue() { + return (int)this.get(); + } + + @Override + public long longValue() { + return (long)this.get(); + } + + @Override + public float floatValue() { + return (float)this.get(); + } + + @Override + public double doubleValue() { + return this.get(); + } + + private void writeObject(ObjectOutputStream s) throws IOException { + s.defaultWriteObject(); + s.writeDouble(this.get()); + } + + private void readObject(ObjectInputStream s) throws IOException, ClassNotFoundException { + s.defaultReadObject(); + this.set(s.readDouble()); + } +} diff --git a/src/com/google/common/util/concurrent/AtomicDoubleArray.java b/src/com/google/common/util/concurrent/AtomicDoubleArray.java new file mode 100644 index 0000000..3b9aa4e --- /dev/null +++ b/src/com/google/common/util/concurrent/AtomicDoubleArray.java @@ -0,0 +1,115 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.util.concurrent; + +import java.io.IOException; +import java.io.ObjectInputStream; +import java.io.ObjectOutputStream; +import java.io.Serializable; +import java.util.concurrent.atomic.AtomicLongArray; + +public class AtomicDoubleArray +implements Serializable { + private static final long serialVersionUID = 0L; + private transient AtomicLongArray longs; + + public AtomicDoubleArray(int length) { + this.longs = new AtomicLongArray(length); + } + + public AtomicDoubleArray(double[] array) { + int len = array.length; + long[] longArray = new long[len]; + for (int i = 0; i < len; ++i) { + longArray[i] = Double.doubleToRawLongBits(array[i]); + } + this.longs = new AtomicLongArray(longArray); + } + + public final int length() { + return this.longs.length(); + } + + public final double get(int i) { + return Double.longBitsToDouble(this.longs.get(i)); + } + + public final void set(int i, double newValue) { + long next = Double.doubleToRawLongBits(newValue); + this.longs.set(i, next); + } + + public final void lazySet(int i, double newValue) { + this.set(i, newValue); + } + + public final double getAndSet(int i, double newValue) { + long next = Double.doubleToRawLongBits(newValue); + return Double.longBitsToDouble(this.longs.getAndSet(i, next)); + } + + public final boolean compareAndSet(int i, double expect, double update) { + return this.longs.compareAndSet(i, Double.doubleToRawLongBits(expect), Double.doubleToRawLongBits(update)); + } + + public final boolean weakCompareAndSet(int i, double expect, double update) { + return this.longs.weakCompareAndSet(i, Double.doubleToRawLongBits(expect), Double.doubleToRawLongBits(update)); + } + + public final double getAndAdd(int i, double delta) { + double currentVal; + double nextVal; + long next; + long current; + while (!this.longs.compareAndSet(i, current = this.longs.get(i), next = Double.doubleToRawLongBits(nextVal = (currentVal = Double.longBitsToDouble(current)) + delta))) { + } + return currentVal; + } + + public double addAndGet(int i, double delta) { + double currentVal; + double nextVal; + long next; + long current; + while (!this.longs.compareAndSet(i, current = this.longs.get(i), next = Double.doubleToRawLongBits(nextVal = (currentVal = Double.longBitsToDouble(current)) + delta))) { + } + return nextVal; + } + + public String toString() { + int iMax = this.length() - 1; + if (iMax == -1) { + return "[]"; + } + StringBuilder b = new StringBuilder(19 * (iMax + 1)); + b.append('['); + int i = 0; + while (true) { + b.append(Double.longBitsToDouble(this.longs.get(i))); + if (i == iMax) { + return b.append(']').toString(); + } + b.append(',').append(' '); + ++i; + } + } + + private void writeObject(ObjectOutputStream s) throws IOException { + s.defaultWriteObject(); + int length = this.length(); + s.writeInt(length); + for (int i = 0; i < length; ++i) { + s.writeDouble(this.get(i)); + } + } + + private void readObject(ObjectInputStream s) throws IOException, ClassNotFoundException { + s.defaultReadObject(); + int length = s.readInt(); + this.longs = new AtomicLongArray(length); + for (int i = 0; i < length; ++i) { + this.set(i, s.readDouble()); + } + } +} diff --git a/src/com/google/common/util/concurrent/AtomicLongMap.java b/src/com/google/common/util/concurrent/AtomicLongMap.java new file mode 100644 index 0000000..3512d48 --- /dev/null +++ b/src/com/google/common/util/concurrent/AtomicLongMap.java @@ -0,0 +1,216 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.util.concurrent; + +import com.google.common.annotations.GwtCompatible; +import com.google.common.base.Function; +import com.google.common.base.Preconditions; +import com.google.common.collect.Maps; +import java.util.Collections; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.atomic.AtomicLong; + +@GwtCompatible +public final class AtomicLongMap { + private final ConcurrentHashMap map; + private transient Map asMap; + + private AtomicLongMap(ConcurrentHashMap map) { + this.map = Preconditions.checkNotNull(map); + } + + public static AtomicLongMap create() { + return new AtomicLongMap(new ConcurrentHashMap()); + } + + public static AtomicLongMap create(Map m) { + AtomicLongMap result = AtomicLongMap.create(); + result.putAll(m); + return result; + } + + public long get(K key) { + AtomicLong atomic = this.map.get(key); + return atomic == null ? 0L : atomic.get(); + } + + public long incrementAndGet(K key) { + return this.addAndGet(key, 1L); + } + + public long decrementAndGet(K key) { + return this.addAndGet(key, -1L); + } + + public long addAndGet(K key, long delta) { + long newValue; + block0: while (true) { + long oldValue; + AtomicLong atomic; + if ((atomic = this.map.get(key)) == null && (atomic = this.map.putIfAbsent(key, new AtomicLong(delta))) == null) { + return delta; + } + do { + if ((oldValue = atomic.get()) != 0L) continue; + if (!this.map.replace(key, atomic, new AtomicLong(delta))) continue block0; + return delta; + } while (!atomic.compareAndSet(oldValue, newValue = oldValue + delta)); + break; + } + return newValue; + } + + public long getAndIncrement(K key) { + return this.getAndAdd(key, 1L); + } + + public long getAndDecrement(K key) { + return this.getAndAdd(key, -1L); + } + + public long getAndAdd(K key, long delta) { + long oldValue; + block0: while (true) { + long newValue; + AtomicLong atomic; + if ((atomic = this.map.get(key)) == null && (atomic = this.map.putIfAbsent(key, new AtomicLong(delta))) == null) { + return 0L; + } + do { + if ((oldValue = atomic.get()) != 0L) continue; + if (!this.map.replace(key, atomic, new AtomicLong(delta))) continue block0; + return 0L; + } while (!atomic.compareAndSet(oldValue, newValue = oldValue + delta)); + break; + } + return oldValue; + } + + public long put(K key, long newValue) { + long oldValue; + block0: while (true) { + AtomicLong atomic; + if ((atomic = this.map.get(key)) == null && (atomic = this.map.putIfAbsent(key, new AtomicLong(newValue))) == null) { + return 0L; + } + do { + if ((oldValue = atomic.get()) != 0L) continue; + if (!this.map.replace(key, atomic, new AtomicLong(newValue))) continue block0; + return 0L; + } while (!atomic.compareAndSet(oldValue, newValue)); + break; + } + return oldValue; + } + + public void putAll(Map m) { + for (Map.Entry entry : m.entrySet()) { + this.put(entry.getKey(), entry.getValue()); + } + } + + public long remove(K key) { + long oldValue; + AtomicLong atomic = this.map.get(key); + if (atomic == null) { + return 0L; + } + while ((oldValue = atomic.get()) != 0L && !atomic.compareAndSet(oldValue, 0L)) { + } + this.map.remove(key, atomic); + return oldValue; + } + + public void removeAllZeros() { + for (Object key : this.map.keySet()) { + AtomicLong atomic = this.map.get(key); + if (atomic == null || atomic.get() != 0L) continue; + this.map.remove(key, atomic); + } + } + + public long sum() { + long sum = 0L; + for (AtomicLong value : this.map.values()) { + sum += value.get(); + } + return sum; + } + + public Map asMap() { + Map result = this.asMap; + return result == null ? (this.asMap = this.createAsMap()) : result; + } + + private Map createAsMap() { + return Collections.unmodifiableMap(Maps.transformValues(this.map, new Function(){ + + @Override + public Long apply(AtomicLong atomic) { + return atomic.get(); + } + })); + } + + public boolean containsKey(Object key) { + return this.map.containsKey(key); + } + + public int size() { + return this.map.size(); + } + + public boolean isEmpty() { + return this.map.isEmpty(); + } + + public void clear() { + this.map.clear(); + } + + public String toString() { + return this.map.toString(); + } + + long putIfAbsent(K key, long newValue) { + long oldValue; + block2: { + AtomicLong atomic; + do { + if ((atomic = this.map.get(key)) == null && (atomic = this.map.putIfAbsent(key, new AtomicLong(newValue))) == null) { + return 0L; + } + oldValue = atomic.get(); + if (oldValue != 0L) break block2; + } while (!this.map.replace(key, atomic, new AtomicLong(newValue))); + return 0L; + } + return oldValue; + } + + boolean replace(K key, long expectedOldValue, long newValue) { + if (expectedOldValue == 0L) { + return this.putIfAbsent(key, newValue) == 0L; + } + AtomicLong atomic = this.map.get(key); + return atomic == null ? false : atomic.compareAndSet(expectedOldValue, newValue); + } + + boolean remove(K key, long value) { + AtomicLong atomic = this.map.get(key); + if (atomic == null) { + return false; + } + long oldValue = atomic.get(); + if (oldValue != value) { + return false; + } + if (oldValue == 0L || atomic.compareAndSet(oldValue, 0L)) { + this.map.remove(key, atomic); + return true; + } + return false; + } +} diff --git a/src/com/google/common/util/concurrent/Atomics.java b/src/com/google/common/util/concurrent/Atomics.java new file mode 100644 index 0000000..e858fcd --- /dev/null +++ b/src/com/google/common/util/concurrent/Atomics.java @@ -0,0 +1,29 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.util.concurrent; + +import java.util.concurrent.atomic.AtomicReference; +import java.util.concurrent.atomic.AtomicReferenceArray; +import javax.annotation.Nullable; + +public final class Atomics { + private Atomics() { + } + + public static AtomicReference newReference() { + return new AtomicReference(); + } + + public static AtomicReference newReference(@Nullable V initialValue) { + return new AtomicReference(initialValue); + } + + public static AtomicReferenceArray newReferenceArray(int length) { + return new AtomicReferenceArray(length); + } + + public static AtomicReferenceArray newReferenceArray(E[] array) { + return new AtomicReferenceArray(array); + } +} diff --git a/src/com/google/common/util/concurrent/Callables.java b/src/com/google/common/util/concurrent/Callables.java new file mode 100644 index 0000000..99e4c67 --- /dev/null +++ b/src/com/google/common/util/concurrent/Callables.java @@ -0,0 +1,85 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.util.concurrent; + +import com.google.common.base.Preconditions; +import com.google.common.base.Supplier; +import java.util.concurrent.Callable; +import javax.annotation.Nullable; + +public final class Callables { + private Callables() { + } + + public static Callable returning(final @Nullable T value) { + return new Callable(){ + + @Override + public T call() { + return value; + } + }; + } + + static Callable threadRenaming(final Callable callable, final Supplier nameSupplier) { + Preconditions.checkNotNull(nameSupplier); + Preconditions.checkNotNull(callable); + return new Callable(){ + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public T call() throws Exception { + Thread currentThread = Thread.currentThread(); + String oldName = currentThread.getName(); + boolean restoreName = Callables.trySetName((String)nameSupplier.get(), currentThread); + try { + Object v = callable.call(); + return v; + } + finally { + if (restoreName) { + Callables.trySetName(oldName, currentThread); + } + } + } + }; + } + + static Runnable threadRenaming(final Runnable task, final Supplier nameSupplier) { + Preconditions.checkNotNull(nameSupplier); + Preconditions.checkNotNull(task); + return new Runnable(){ + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public void run() { + Thread currentThread = Thread.currentThread(); + String oldName = currentThread.getName(); + boolean restoreName = Callables.trySetName((String)nameSupplier.get(), currentThread); + try { + task.run(); + } + finally { + if (restoreName) { + Callables.trySetName(oldName, currentThread); + } + } + } + }; + } + + private static boolean trySetName(String threadName, Thread currentThread) { + try { + currentThread.setName(threadName); + return true; + } + catch (SecurityException e) { + return false; + } + } +} diff --git a/src/com/google/common/util/concurrent/CheckedFuture.java b/src/com/google/common/util/concurrent/CheckedFuture.java new file mode 100644 index 0000000..92cc8ac --- /dev/null +++ b/src/com/google/common/util/concurrent/CheckedFuture.java @@ -0,0 +1,17 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.util.concurrent; + +import com.google.common.annotations.Beta; +import com.google.common.util.concurrent.ListenableFuture; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.TimeoutException; + +@Beta +public interface CheckedFuture +extends ListenableFuture { + public V checkedGet() throws X; + + public V checkedGet(long var1, TimeUnit var3) throws TimeoutException, X; +} diff --git a/src/com/google/common/util/concurrent/CycleDetectingLockFactory.java b/src/com/google/common/util/concurrent/CycleDetectingLockFactory.java new file mode 100644 index 0000000..b5fa837 --- /dev/null +++ b/src/com/google/common/util/concurrent/CycleDetectingLockFactory.java @@ -0,0 +1,603 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.util.concurrent; + +import com.google.common.annotations.Beta; +import com.google.common.annotations.VisibleForTesting; +import com.google.common.base.MoreObjects; +import com.google.common.base.Preconditions; +import com.google.common.collect.ImmutableSet; +import com.google.common.collect.Lists; +import com.google.common.collect.MapMaker; +import com.google.common.collect.Maps; +import com.google.common.collect.Sets; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.EnumMap; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.concurrent.ConcurrentMap; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.locks.ReentrantLock; +import java.util.concurrent.locks.ReentrantReadWriteLock; +import java.util.logging.Level; +import java.util.logging.Logger; +import javax.annotation.Nullable; +import javax.annotation.concurrent.ThreadSafe; + +@Beta +@ThreadSafe +public class CycleDetectingLockFactory { + private static final ConcurrentMap, Map> lockGraphNodesPerType = new MapMaker().weakKeys().makeMap(); + private static final Logger logger = Logger.getLogger(CycleDetectingLockFactory.class.getName()); + final Policy policy; + private static final ThreadLocal> acquiredLocks = new ThreadLocal>(){ + + @Override + protected ArrayList initialValue() { + return Lists.newArrayListWithCapacity(3); + } + }; + + public static CycleDetectingLockFactory newInstance(Policy policy) { + return new CycleDetectingLockFactory(policy); + } + + public ReentrantLock newReentrantLock(String lockName) { + return this.newReentrantLock(lockName, false); + } + + public ReentrantLock newReentrantLock(String lockName, boolean fair) { + return this.policy == Policies.DISABLED ? new ReentrantLock(fair) : new CycleDetectingReentrantLock(new LockGraphNode(lockName), fair); + } + + public ReentrantReadWriteLock newReentrantReadWriteLock(String lockName) { + return this.newReentrantReadWriteLock(lockName, false); + } + + public ReentrantReadWriteLock newReentrantReadWriteLock(String lockName, boolean fair) { + return this.policy == Policies.DISABLED ? new ReentrantReadWriteLock(fair) : new CycleDetectingReentrantReadWriteLock(new LockGraphNode(lockName), fair); + } + + public static > WithExplicitOrdering newInstanceWithExplicitOrdering(Class enumClass, Policy policy) { + Preconditions.checkNotNull(enumClass); + Preconditions.checkNotNull(policy); + Map lockGraphNodes = CycleDetectingLockFactory.getOrCreateNodes(enumClass); + return new WithExplicitOrdering(policy, lockGraphNodes); + } + + private static Map getOrCreateNodes(Class clazz) { + Map existing = (Map)lockGraphNodesPerType.get(clazz); + if (existing != null) { + return existing; + } + Map created = CycleDetectingLockFactory.createNodes(clazz); + existing = lockGraphNodesPerType.putIfAbsent(clazz, created); + return MoreObjects.firstNonNull(existing, created); + } + + @VisibleForTesting + static > Map createNodes(Class clazz) { + int i; + EnumMap map = Maps.newEnumMap(clazz); + Enum[] keys = (Enum[])clazz.getEnumConstants(); + int numKeys = keys.length; + ArrayList nodes = Lists.newArrayListWithCapacity(numKeys); + for (Enum key : keys) { + LockGraphNode node = new LockGraphNode(CycleDetectingLockFactory.getLockName(key)); + nodes.add(node); + map.put(key, node); + } + for (i = 1; i < numKeys; ++i) { + ((LockGraphNode)nodes.get(i)).checkAcquiredLocks(Policies.THROW, nodes.subList(0, i)); + } + for (i = 0; i < numKeys - 1; ++i) { + ((LockGraphNode)nodes.get(i)).checkAcquiredLocks(Policies.DISABLED, nodes.subList(i + 1, numKeys)); + } + return Collections.unmodifiableMap(map); + } + + private static String getLockName(Enum rank) { + String string = String.valueOf(String.valueOf(rank.getDeclaringClass().getSimpleName())); + String string2 = String.valueOf(String.valueOf(rank.name())); + return new StringBuilder(1 + string.length() + string2.length()).append(string).append(".").append(string2).toString(); + } + + private CycleDetectingLockFactory(Policy policy) { + this.policy = Preconditions.checkNotNull(policy); + } + + private void aboutToAcquire(CycleDetectingLock lock) { + if (!lock.isAcquiredByCurrentThread()) { + ArrayList acquiredLockList = acquiredLocks.get(); + LockGraphNode node = lock.getLockGraphNode(); + node.checkAcquiredLocks(this.policy, acquiredLockList); + acquiredLockList.add(node); + } + } + + private void lockStateChanged(CycleDetectingLock lock) { + if (!lock.isAcquiredByCurrentThread()) { + ArrayList acquiredLockList = acquiredLocks.get(); + LockGraphNode node = lock.getLockGraphNode(); + for (int i = acquiredLockList.size() - 1; i >= 0; --i) { + if (acquiredLockList.get(i) != node) continue; + acquiredLockList.remove(i); + break; + } + } + } + + private class CycleDetectingReentrantWriteLock + extends ReentrantReadWriteLock.WriteLock { + final CycleDetectingReentrantReadWriteLock readWriteLock; + + CycleDetectingReentrantWriteLock(CycleDetectingReentrantReadWriteLock readWriteLock) { + super(readWriteLock); + this.readWriteLock = readWriteLock; + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public void lock() { + CycleDetectingLockFactory.this.aboutToAcquire(this.readWriteLock); + try { + super.lock(); + } + finally { + CycleDetectingLockFactory.this.lockStateChanged(this.readWriteLock); + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public void lockInterruptibly() throws InterruptedException { + CycleDetectingLockFactory.this.aboutToAcquire(this.readWriteLock); + try { + super.lockInterruptibly(); + } + finally { + CycleDetectingLockFactory.this.lockStateChanged(this.readWriteLock); + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public boolean tryLock() { + CycleDetectingLockFactory.this.aboutToAcquire(this.readWriteLock); + try { + boolean bl = super.tryLock(); + return bl; + } + finally { + CycleDetectingLockFactory.this.lockStateChanged(this.readWriteLock); + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public boolean tryLock(long timeout, TimeUnit unit) throws InterruptedException { + CycleDetectingLockFactory.this.aboutToAcquire(this.readWriteLock); + try { + boolean bl = super.tryLock(timeout, unit); + return bl; + } + finally { + CycleDetectingLockFactory.this.lockStateChanged(this.readWriteLock); + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public void unlock() { + try { + super.unlock(); + } + finally { + CycleDetectingLockFactory.this.lockStateChanged(this.readWriteLock); + } + } + } + + private class CycleDetectingReentrantReadLock + extends ReentrantReadWriteLock.ReadLock { + final CycleDetectingReentrantReadWriteLock readWriteLock; + + CycleDetectingReentrantReadLock(CycleDetectingReentrantReadWriteLock readWriteLock) { + super(readWriteLock); + this.readWriteLock = readWriteLock; + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public void lock() { + CycleDetectingLockFactory.this.aboutToAcquire(this.readWriteLock); + try { + super.lock(); + } + finally { + CycleDetectingLockFactory.this.lockStateChanged(this.readWriteLock); + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public void lockInterruptibly() throws InterruptedException { + CycleDetectingLockFactory.this.aboutToAcquire(this.readWriteLock); + try { + super.lockInterruptibly(); + } + finally { + CycleDetectingLockFactory.this.lockStateChanged(this.readWriteLock); + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public boolean tryLock() { + CycleDetectingLockFactory.this.aboutToAcquire(this.readWriteLock); + try { + boolean bl = super.tryLock(); + return bl; + } + finally { + CycleDetectingLockFactory.this.lockStateChanged(this.readWriteLock); + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public boolean tryLock(long timeout, TimeUnit unit) throws InterruptedException { + CycleDetectingLockFactory.this.aboutToAcquire(this.readWriteLock); + try { + boolean bl = super.tryLock(timeout, unit); + return bl; + } + finally { + CycleDetectingLockFactory.this.lockStateChanged(this.readWriteLock); + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public void unlock() { + try { + super.unlock(); + } + finally { + CycleDetectingLockFactory.this.lockStateChanged(this.readWriteLock); + } + } + } + + final class CycleDetectingReentrantReadWriteLock + extends ReentrantReadWriteLock + implements CycleDetectingLock { + private final CycleDetectingReentrantReadLock readLock; + private final CycleDetectingReentrantWriteLock writeLock; + private final LockGraphNode lockGraphNode; + + private CycleDetectingReentrantReadWriteLock(LockGraphNode lockGraphNode, boolean fair) { + super(fair); + this.readLock = new CycleDetectingReentrantReadLock(this); + this.writeLock = new CycleDetectingReentrantWriteLock(this); + this.lockGraphNode = Preconditions.checkNotNull(lockGraphNode); + } + + @Override + public ReentrantReadWriteLock.ReadLock readLock() { + return this.readLock; + } + + @Override + public ReentrantReadWriteLock.WriteLock writeLock() { + return this.writeLock; + } + + @Override + public LockGraphNode getLockGraphNode() { + return this.lockGraphNode; + } + + @Override + public boolean isAcquiredByCurrentThread() { + return this.isWriteLockedByCurrentThread() || this.getReadHoldCount() > 0; + } + } + + final class CycleDetectingReentrantLock + extends ReentrantLock + implements CycleDetectingLock { + private final LockGraphNode lockGraphNode; + + private CycleDetectingReentrantLock(LockGraphNode lockGraphNode, boolean fair) { + super(fair); + this.lockGraphNode = Preconditions.checkNotNull(lockGraphNode); + } + + @Override + public LockGraphNode getLockGraphNode() { + return this.lockGraphNode; + } + + @Override + public boolean isAcquiredByCurrentThread() { + return this.isHeldByCurrentThread(); + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public void lock() { + CycleDetectingLockFactory.this.aboutToAcquire(this); + try { + super.lock(); + } + finally { + CycleDetectingLockFactory.this.lockStateChanged(this); + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public void lockInterruptibly() throws InterruptedException { + CycleDetectingLockFactory.this.aboutToAcquire(this); + try { + super.lockInterruptibly(); + } + finally { + CycleDetectingLockFactory.this.lockStateChanged(this); + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public boolean tryLock() { + CycleDetectingLockFactory.this.aboutToAcquire(this); + try { + boolean bl = super.tryLock(); + return bl; + } + finally { + CycleDetectingLockFactory.this.lockStateChanged(this); + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public boolean tryLock(long timeout, TimeUnit unit) throws InterruptedException { + CycleDetectingLockFactory.this.aboutToAcquire(this); + try { + boolean bl = super.tryLock(timeout, unit); + return bl; + } + finally { + CycleDetectingLockFactory.this.lockStateChanged(this); + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public void unlock() { + try { + super.unlock(); + } + finally { + CycleDetectingLockFactory.this.lockStateChanged(this); + } + } + } + + private static class LockGraphNode { + final Map allowedPriorLocks = new MapMaker().weakKeys().makeMap(); + final Map disallowedPriorLocks = new MapMaker().weakKeys().makeMap(); + final String lockName; + + LockGraphNode(String lockName) { + this.lockName = Preconditions.checkNotNull(lockName); + } + + String getLockName() { + return this.lockName; + } + + void checkAcquiredLocks(Policy policy, List acquiredLocks) { + int size = acquiredLocks.size(); + for (int i = 0; i < size; ++i) { + this.checkAcquiredLock(policy, acquiredLocks.get(i)); + } + } + + void checkAcquiredLock(Policy policy, LockGraphNode acquiredLock) { + String string = String.valueOf(acquiredLock.getLockName()); + Preconditions.checkState(this != acquiredLock, string.length() != 0 ? "Attempted to acquire multiple locks with the same rank ".concat(string) : new String("Attempted to acquire multiple locks with the same rank ")); + if (this.allowedPriorLocks.containsKey(acquiredLock)) { + return; + } + PotentialDeadlockException previousDeadlockException = this.disallowedPriorLocks.get(acquiredLock); + if (previousDeadlockException != null) { + PotentialDeadlockException exception = new PotentialDeadlockException(acquiredLock, this, previousDeadlockException.getConflictingStackTrace()); + policy.handlePotentialDeadlock(exception); + return; + } + Set seen = Sets.newIdentityHashSet(); + ExampleStackTrace path = acquiredLock.findPathTo(this, seen); + if (path == null) { + this.allowedPriorLocks.put(acquiredLock, new ExampleStackTrace(acquiredLock, this)); + } else { + PotentialDeadlockException exception = new PotentialDeadlockException(acquiredLock, this, path); + this.disallowedPriorLocks.put(acquiredLock, exception); + policy.handlePotentialDeadlock(exception); + } + } + + @Nullable + private ExampleStackTrace findPathTo(LockGraphNode node, Set seen) { + if (!seen.add(this)) { + return null; + } + ExampleStackTrace found = this.allowedPriorLocks.get(node); + if (found != null) { + return found; + } + for (Map.Entry entry : this.allowedPriorLocks.entrySet()) { + LockGraphNode preAcquiredLock = entry.getKey(); + found = preAcquiredLock.findPathTo(node, seen); + if (found == null) continue; + ExampleStackTrace path = new ExampleStackTrace(preAcquiredLock, this); + path.setStackTrace(entry.getValue().getStackTrace()); + path.initCause(found); + return path; + } + return null; + } + } + + private static interface CycleDetectingLock { + public LockGraphNode getLockGraphNode(); + + public boolean isAcquiredByCurrentThread(); + } + + @Beta + public static final class PotentialDeadlockException + extends ExampleStackTrace { + private final ExampleStackTrace conflictingStackTrace; + + private PotentialDeadlockException(LockGraphNode node1, LockGraphNode node2, ExampleStackTrace conflictingStackTrace) { + super(node1, node2); + this.conflictingStackTrace = conflictingStackTrace; + this.initCause(conflictingStackTrace); + } + + public ExampleStackTrace getConflictingStackTrace() { + return this.conflictingStackTrace; + } + + @Override + public String getMessage() { + StringBuilder message = new StringBuilder(super.getMessage()); + for (Throwable t = this.conflictingStackTrace; t != null; t = t.getCause()) { + message.append(", ").append(t.getMessage()); + } + return message.toString(); + } + } + + private static class ExampleStackTrace + extends IllegalStateException { + static final StackTraceElement[] EMPTY_STACK_TRACE = new StackTraceElement[0]; + static Set EXCLUDED_CLASS_NAMES = ImmutableSet.of(CycleDetectingLockFactory.class.getName(), ExampleStackTrace.class.getName(), LockGraphNode.class.getName()); + + ExampleStackTrace(LockGraphNode node1, LockGraphNode node2) { + String string = String.valueOf(String.valueOf(node1.getLockName())); + String string2 = String.valueOf(String.valueOf(node2.getLockName())); + super(new StringBuilder(4 + string.length() + string2.length()).append(string).append(" -> ").append(string2).toString()); + StackTraceElement[] origStackTrace = this.getStackTrace(); + int n = origStackTrace.length; + for (int i = 0; i < n; ++i) { + if (WithExplicitOrdering.class.getName().equals(origStackTrace[i].getClassName())) { + this.setStackTrace(EMPTY_STACK_TRACE); + break; + } + if (EXCLUDED_CLASS_NAMES.contains(origStackTrace[i].getClassName())) continue; + this.setStackTrace(Arrays.copyOfRange(origStackTrace, i, n)); + break; + } + } + } + + @Beta + public static final class WithExplicitOrdering> + extends CycleDetectingLockFactory { + private final Map lockGraphNodes; + + @VisibleForTesting + WithExplicitOrdering(Policy policy, Map lockGraphNodes) { + super(policy); + this.lockGraphNodes = lockGraphNodes; + } + + public ReentrantLock newReentrantLock(E rank) { + return this.newReentrantLock(rank, false); + } + + public ReentrantLock newReentrantLock(E rank, boolean fair) { + return this.policy == Policies.DISABLED ? new ReentrantLock(fair) : new CycleDetectingReentrantLock(this.lockGraphNodes.get(rank), fair); + } + + public ReentrantReadWriteLock newReentrantReadWriteLock(E rank) { + return this.newReentrantReadWriteLock(rank, false); + } + + public ReentrantReadWriteLock newReentrantReadWriteLock(E rank, boolean fair) { + return this.policy == Policies.DISABLED ? new ReentrantReadWriteLock(fair) : new CycleDetectingReentrantReadWriteLock(this.lockGraphNodes.get(rank), fair); + } + } + + @Beta + public static enum Policies implements Policy + { + THROW{ + + @Override + public void handlePotentialDeadlock(PotentialDeadlockException e) { + throw e; + } + } + , + WARN{ + + @Override + public void handlePotentialDeadlock(PotentialDeadlockException e) { + logger.log(Level.SEVERE, "Detected potential deadlock", e); + } + } + , + DISABLED{ + + @Override + public void handlePotentialDeadlock(PotentialDeadlockException e) { + } + }; + + } + + @Beta + @ThreadSafe + public static interface Policy { + public void handlePotentialDeadlock(PotentialDeadlockException var1); + } +} diff --git a/src/com/google/common/util/concurrent/ExecutionError.java b/src/com/google/common/util/concurrent/ExecutionError.java new file mode 100644 index 0000000..ba73bb4 --- /dev/null +++ b/src/com/google/common/util/concurrent/ExecutionError.java @@ -0,0 +1,28 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.util.concurrent; + +import com.google.common.annotations.GwtCompatible; +import javax.annotation.Nullable; + +@GwtCompatible +public class ExecutionError +extends Error { + private static final long serialVersionUID = 0L; + + protected ExecutionError() { + } + + protected ExecutionError(@Nullable String message) { + super(message); + } + + public ExecutionError(@Nullable String message, @Nullable Error cause) { + super(message, cause); + } + + public ExecutionError(@Nullable Error cause) { + super(cause); + } +} diff --git a/src/com/google/common/util/concurrent/ExecutionList.java b/src/com/google/common/util/concurrent/ExecutionList.java new file mode 100644 index 0000000..f09e63b --- /dev/null +++ b/src/com/google/common/util/concurrent/ExecutionList.java @@ -0,0 +1,88 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.util.concurrent; + +import com.google.common.annotations.VisibleForTesting; +import com.google.common.base.Preconditions; +import java.util.concurrent.Executor; +import java.util.logging.Level; +import java.util.logging.Logger; +import javax.annotation.Nullable; +import javax.annotation.concurrent.GuardedBy; + +public final class ExecutionList { + @VisibleForTesting + static final Logger log = Logger.getLogger(ExecutionList.class.getName()); + @GuardedBy(value="this") + private RunnableExecutorPair runnables; + @GuardedBy(value="this") + private boolean executed; + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + public void add(Runnable runnable, Executor executor) { + Preconditions.checkNotNull(runnable, "Runnable was null."); + Preconditions.checkNotNull(executor, "Executor was null."); + ExecutionList executionList = this; + synchronized (executionList) { + if (!this.executed) { + this.runnables = new RunnableExecutorPair(runnable, executor, this.runnables); + return; + } + } + ExecutionList.executeListener(runnable, executor); + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + public void execute() { + RunnableExecutorPair list; + ExecutionList executionList = this; + synchronized (executionList) { + if (this.executed) { + return; + } + this.executed = true; + list = this.runnables; + this.runnables = null; + } + RunnableExecutorPair reversedList = null; + while (list != null) { + RunnableExecutorPair tmp = list; + list = list.next; + tmp.next = reversedList; + reversedList = tmp; + } + while (reversedList != null) { + ExecutionList.executeListener(reversedList.runnable, reversedList.executor); + reversedList = reversedList.next; + } + } + + private static void executeListener(Runnable runnable, Executor executor) { + try { + executor.execute(runnable); + } + catch (RuntimeException e) { + String string = String.valueOf(String.valueOf(runnable)); + String string2 = String.valueOf(String.valueOf(executor)); + log.log(Level.SEVERE, new StringBuilder(57 + string.length() + string2.length()).append("RuntimeException while executing runnable ").append(string).append(" with executor ").append(string2).toString(), e); + } + } + + private static final class RunnableExecutorPair { + final Runnable runnable; + final Executor executor; + @Nullable + RunnableExecutorPair next; + + RunnableExecutorPair(Runnable runnable, Executor executor, RunnableExecutorPair next) { + this.runnable = runnable; + this.executor = executor; + this.next = next; + } + } +} diff --git a/src/com/google/common/util/concurrent/FakeTimeLimiter.java b/src/com/google/common/util/concurrent/FakeTimeLimiter.java new file mode 100644 index 0000000..91910d9 --- /dev/null +++ b/src/com/google/common/util/concurrent/FakeTimeLimiter.java @@ -0,0 +1,28 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.util.concurrent; + +import com.google.common.annotations.Beta; +import com.google.common.base.Preconditions; +import com.google.common.util.concurrent.TimeLimiter; +import java.util.concurrent.Callable; +import java.util.concurrent.TimeUnit; + +@Beta +public final class FakeTimeLimiter +implements TimeLimiter { + @Override + public T newProxy(T target, Class interfaceType, long timeoutDuration, TimeUnit timeoutUnit) { + Preconditions.checkNotNull(target); + Preconditions.checkNotNull(interfaceType); + Preconditions.checkNotNull(timeoutUnit); + return target; + } + + @Override + public T callWithTimeout(Callable callable, long timeoutDuration, TimeUnit timeoutUnit, boolean amInterruptible) throws Exception { + Preconditions.checkNotNull(timeoutUnit); + return callable.call(); + } +} diff --git a/src/com/google/common/util/concurrent/ForwardingBlockingQueue.java b/src/com/google/common/util/concurrent/ForwardingBlockingQueue.java new file mode 100644 index 0000000..a513d2a --- /dev/null +++ b/src/com/google/common/util/concurrent/ForwardingBlockingQueue.java @@ -0,0 +1,54 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.util.concurrent; + +import com.google.common.collect.ForwardingQueue; +import java.util.Collection; +import java.util.concurrent.BlockingQueue; +import java.util.concurrent.TimeUnit; + +public abstract class ForwardingBlockingQueue +extends ForwardingQueue +implements BlockingQueue { + protected ForwardingBlockingQueue() { + } + + @Override + protected abstract BlockingQueue delegate(); + + @Override + public int drainTo(Collection c, int maxElements) { + return this.delegate().drainTo(c, maxElements); + } + + @Override + public int drainTo(Collection c) { + return this.delegate().drainTo(c); + } + + @Override + public boolean offer(E e, long timeout, TimeUnit unit) throws InterruptedException { + return this.delegate().offer(e, timeout, unit); + } + + @Override + public E poll(long timeout, TimeUnit unit) throws InterruptedException { + return this.delegate().poll(timeout, unit); + } + + @Override + public void put(E e) throws InterruptedException { + this.delegate().put(e); + } + + @Override + public int remainingCapacity() { + return this.delegate().remainingCapacity(); + } + + @Override + public E take() throws InterruptedException { + return this.delegate().take(); + } +} diff --git a/src/com/google/common/util/concurrent/ForwardingCheckedFuture.java b/src/com/google/common/util/concurrent/ForwardingCheckedFuture.java new file mode 100644 index 0000000..2f0466c --- /dev/null +++ b/src/com/google/common/util/concurrent/ForwardingCheckedFuture.java @@ -0,0 +1,44 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.util.concurrent; + +import com.google.common.annotations.Beta; +import com.google.common.base.Preconditions; +import com.google.common.util.concurrent.CheckedFuture; +import com.google.common.util.concurrent.ForwardingListenableFuture; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.TimeoutException; + +@Beta +public abstract class ForwardingCheckedFuture +extends ForwardingListenableFuture +implements CheckedFuture { + @Override + public V checkedGet() throws X { + return this.delegate().checkedGet(); + } + + @Override + public V checkedGet(long timeout, TimeUnit unit) throws TimeoutException, X { + return this.delegate().checkedGet(timeout, unit); + } + + @Override + protected abstract CheckedFuture delegate(); + + @Beta + public static abstract class SimpleForwardingCheckedFuture + extends ForwardingCheckedFuture { + private final CheckedFuture delegate; + + protected SimpleForwardingCheckedFuture(CheckedFuture delegate) { + this.delegate = Preconditions.checkNotNull(delegate); + } + + @Override + protected final CheckedFuture delegate() { + return this.delegate; + } + } +} diff --git a/src/com/google/common/util/concurrent/ForwardingExecutorService.java b/src/com/google/common/util/concurrent/ForwardingExecutorService.java new file mode 100644 index 0000000..fe6d648 --- /dev/null +++ b/src/com/google/common/util/concurrent/ForwardingExecutorService.java @@ -0,0 +1,89 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.util.concurrent; + +import com.google.common.collect.ForwardingObject; +import java.util.Collection; +import java.util.List; +import java.util.concurrent.Callable; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Future; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.TimeoutException; + +public abstract class ForwardingExecutorService +extends ForwardingObject +implements ExecutorService { + protected ForwardingExecutorService() { + } + + @Override + protected abstract ExecutorService delegate(); + + @Override + public boolean awaitTermination(long timeout, TimeUnit unit) throws InterruptedException { + return this.delegate().awaitTermination(timeout, unit); + } + + @Override + public List> invokeAll(Collection> tasks) throws InterruptedException { + return this.delegate().invokeAll(tasks); + } + + @Override + public List> invokeAll(Collection> tasks, long timeout, TimeUnit unit) throws InterruptedException { + return this.delegate().invokeAll(tasks, timeout, unit); + } + + @Override + public T invokeAny(Collection> tasks) throws InterruptedException, ExecutionException { + return this.delegate().invokeAny(tasks); + } + + @Override + public T invokeAny(Collection> tasks, long timeout, TimeUnit unit) throws InterruptedException, ExecutionException, TimeoutException { + return this.delegate().invokeAny(tasks, timeout, unit); + } + + @Override + public boolean isShutdown() { + return this.delegate().isShutdown(); + } + + @Override + public boolean isTerminated() { + return this.delegate().isTerminated(); + } + + @Override + public void shutdown() { + this.delegate().shutdown(); + } + + @Override + public List shutdownNow() { + return this.delegate().shutdownNow(); + } + + @Override + public void execute(Runnable command) { + this.delegate().execute(command); + } + + @Override + public Future submit(Callable task) { + return this.delegate().submit(task); + } + + @Override + public Future submit(Runnable task) { + return this.delegate().submit(task); + } + + @Override + public Future submit(Runnable task, T result) { + return this.delegate().submit(task, result); + } +} diff --git a/src/com/google/common/util/concurrent/ForwardingFuture.java b/src/com/google/common/util/concurrent/ForwardingFuture.java new file mode 100644 index 0000000..1601f2b --- /dev/null +++ b/src/com/google/common/util/concurrent/ForwardingFuture.java @@ -0,0 +1,60 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.util.concurrent; + +import com.google.common.base.Preconditions; +import com.google.common.collect.ForwardingObject; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.Future; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.TimeoutException; + +public abstract class ForwardingFuture +extends ForwardingObject +implements Future { + protected ForwardingFuture() { + } + + @Override + protected abstract Future delegate(); + + @Override + public boolean cancel(boolean mayInterruptIfRunning) { + return this.delegate().cancel(mayInterruptIfRunning); + } + + @Override + public boolean isCancelled() { + return this.delegate().isCancelled(); + } + + @Override + public boolean isDone() { + return this.delegate().isDone(); + } + + @Override + public V get() throws InterruptedException, ExecutionException { + return this.delegate().get(); + } + + @Override + public V get(long timeout, TimeUnit unit) throws InterruptedException, ExecutionException, TimeoutException { + return this.delegate().get(timeout, unit); + } + + public static abstract class SimpleForwardingFuture + extends ForwardingFuture { + private final Future delegate; + + protected SimpleForwardingFuture(Future delegate) { + this.delegate = Preconditions.checkNotNull(delegate); + } + + @Override + protected final Future delegate() { + return this.delegate; + } + } +} diff --git a/src/com/google/common/util/concurrent/ForwardingListenableFuture.java b/src/com/google/common/util/concurrent/ForwardingListenableFuture.java new file mode 100644 index 0000000..58d32fd --- /dev/null +++ b/src/com/google/common/util/concurrent/ForwardingListenableFuture.java @@ -0,0 +1,38 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.util.concurrent; + +import com.google.common.base.Preconditions; +import com.google.common.util.concurrent.ForwardingFuture; +import com.google.common.util.concurrent.ListenableFuture; +import java.util.concurrent.Executor; + +public abstract class ForwardingListenableFuture +extends ForwardingFuture +implements ListenableFuture { + protected ForwardingListenableFuture() { + } + + @Override + protected abstract ListenableFuture delegate(); + + @Override + public void addListener(Runnable listener, Executor exec) { + this.delegate().addListener(listener, exec); + } + + public static abstract class SimpleForwardingListenableFuture + extends ForwardingListenableFuture { + private final ListenableFuture delegate; + + protected SimpleForwardingListenableFuture(ListenableFuture delegate) { + this.delegate = Preconditions.checkNotNull(delegate); + } + + @Override + protected final ListenableFuture delegate() { + return this.delegate; + } + } +} diff --git a/src/com/google/common/util/concurrent/ForwardingListeningExecutorService.java b/src/com/google/common/util/concurrent/ForwardingListeningExecutorService.java new file mode 100644 index 0000000..ea6130f --- /dev/null +++ b/src/com/google/common/util/concurrent/ForwardingListeningExecutorService.java @@ -0,0 +1,34 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.util.concurrent; + +import com.google.common.util.concurrent.ForwardingExecutorService; +import com.google.common.util.concurrent.ListenableFuture; +import com.google.common.util.concurrent.ListeningExecutorService; +import java.util.concurrent.Callable; + +public abstract class ForwardingListeningExecutorService +extends ForwardingExecutorService +implements ListeningExecutorService { + protected ForwardingListeningExecutorService() { + } + + @Override + protected abstract ListeningExecutorService delegate(); + + @Override + public ListenableFuture submit(Callable task) { + return this.delegate().submit(task); + } + + @Override + public ListenableFuture submit(Runnable task) { + return this.delegate().submit(task); + } + + @Override + public ListenableFuture submit(Runnable task, T result) { + return this.delegate().submit(task, result); + } +} diff --git a/src/com/google/common/util/concurrent/FutureCallback.java b/src/com/google/common/util/concurrent/FutureCallback.java new file mode 100644 index 0000000..2a5bda5 --- /dev/null +++ b/src/com/google/common/util/concurrent/FutureCallback.java @@ -0,0 +1,12 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.util.concurrent; + +import javax.annotation.Nullable; + +public interface FutureCallback { + public void onSuccess(@Nullable V var1); + + public void onFailure(Throwable var1); +} diff --git a/src/com/google/common/util/concurrent/FutureFallback.java b/src/com/google/common/util/concurrent/FutureFallback.java new file mode 100644 index 0000000..d00cfb0 --- /dev/null +++ b/src/com/google/common/util/concurrent/FutureFallback.java @@ -0,0 +1,12 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.util.concurrent; + +import com.google.common.annotations.Beta; +import com.google.common.util.concurrent.ListenableFuture; + +@Beta +public interface FutureFallback { + public ListenableFuture create(Throwable var1) throws Exception; +} diff --git a/src/com/google/common/util/concurrent/Futures.java b/src/com/google/common/util/concurrent/Futures.java new file mode 100644 index 0000000..3d0bce9 --- /dev/null +++ b/src/com/google/common/util/concurrent/Futures.java @@ -0,0 +1,931 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.util.concurrent; + +import com.google.common.annotations.Beta; +import com.google.common.base.Function; +import com.google.common.base.Optional; +import com.google.common.base.Preconditions; +import com.google.common.collect.ImmutableCollection; +import com.google.common.collect.ImmutableList; +import com.google.common.collect.Lists; +import com.google.common.collect.Ordering; +import com.google.common.collect.Queues; +import com.google.common.collect.Sets; +import com.google.common.util.concurrent.AbstractCheckedFuture; +import com.google.common.util.concurrent.AbstractFuture; +import com.google.common.util.concurrent.AsyncFunction; +import com.google.common.util.concurrent.AsyncSettableFuture; +import com.google.common.util.concurrent.CheckedFuture; +import com.google.common.util.concurrent.ExecutionError; +import com.google.common.util.concurrent.FutureCallback; +import com.google.common.util.concurrent.FutureFallback; +import com.google.common.util.concurrent.ListenableFuture; +import com.google.common.util.concurrent.ListenableFutureTask; +import com.google.common.util.concurrent.MoreExecutors; +import com.google.common.util.concurrent.SerializingExecutor; +import com.google.common.util.concurrent.UncheckedExecutionException; +import com.google.common.util.concurrent.Uninterruptibles; +import java.lang.reflect.Constructor; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.UndeclaredThrowableException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; +import java.util.Set; +import java.util.concurrent.Callable; +import java.util.concurrent.CancellationException; +import java.util.concurrent.ConcurrentLinkedQueue; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.Executor; +import java.util.concurrent.Future; +import java.util.concurrent.RejectedExecutionException; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.TimeoutException; +import java.util.concurrent.atomic.AtomicBoolean; +import java.util.concurrent.atomic.AtomicInteger; +import java.util.logging.Level; +import java.util.logging.Logger; +import javax.annotation.Nullable; + +@Beta +public final class Futures { + private static final AsyncFunction, Object> DEREFERENCER = new AsyncFunction, Object>(){ + + @Override + public ListenableFuture apply(ListenableFuture input) { + return input; + } + }; + private static final Ordering> WITH_STRING_PARAM_FIRST = Ordering.natural().onResultOf(new Function, Boolean>(){ + + @Override + public Boolean apply(Constructor input) { + return Arrays.asList(input.getParameterTypes()).contains(String.class); + } + }).reverse(); + + private Futures() { + } + + public static CheckedFuture makeChecked(ListenableFuture future, Function mapper) { + return new MappingCheckedFuture(Preconditions.checkNotNull(future), mapper); + } + + public static ListenableFuture immediateFuture(@Nullable V value) { + return new ImmediateSuccessfulFuture(value); + } + + public static CheckedFuture immediateCheckedFuture(@Nullable V value) { + return new ImmediateSuccessfulCheckedFuture(value); + } + + public static ListenableFuture immediateFailedFuture(Throwable throwable) { + Preconditions.checkNotNull(throwable); + return new ImmediateFailedFuture(throwable); + } + + public static ListenableFuture immediateCancelledFuture() { + return new ImmediateCancelledFuture(); + } + + public static CheckedFuture immediateFailedCheckedFuture(X exception) { + Preconditions.checkNotNull(exception); + return new ImmediateFailedCheckedFuture(exception); + } + + public static ListenableFuture withFallback(ListenableFuture input, FutureFallback fallback) { + return Futures.withFallback(input, fallback, MoreExecutors.directExecutor()); + } + + public static ListenableFuture withFallback(ListenableFuture input, FutureFallback fallback, Executor executor) { + Preconditions.checkNotNull(fallback); + return new FallbackFuture(input, fallback, executor); + } + + public static ListenableFuture transform(ListenableFuture input, AsyncFunction function) { + ChainingListenableFuture output = new ChainingListenableFuture(function, input); + input.addListener(output, MoreExecutors.directExecutor()); + return output; + } + + public static ListenableFuture transform(ListenableFuture input, AsyncFunction function, Executor executor) { + Preconditions.checkNotNull(executor); + ChainingListenableFuture output = new ChainingListenableFuture(function, input); + input.addListener(Futures.rejectionPropagatingRunnable(output, output, executor), MoreExecutors.directExecutor()); + return output; + } + + private static Runnable rejectionPropagatingRunnable(final AbstractFuture outputFuture, final Runnable delegateTask, final Executor delegateExecutor) { + return new Runnable(){ + + @Override + public void run() { + block2: { + final AtomicBoolean thrownFromDelegate = new AtomicBoolean(true); + try { + delegateExecutor.execute(new Runnable(){ + + @Override + public void run() { + thrownFromDelegate.set(false); + delegateTask.run(); + } + }); + } + catch (RejectedExecutionException e) { + if (!thrownFromDelegate.get()) break block2; + outputFuture.setException(e); + } + } + } + }; + } + + public static ListenableFuture transform(ListenableFuture input, Function function) { + Preconditions.checkNotNull(function); + ChainingListenableFuture output = new ChainingListenableFuture(Futures.asAsyncFunction(function), input); + input.addListener(output, MoreExecutors.directExecutor()); + return output; + } + + public static ListenableFuture transform(ListenableFuture input, Function function, Executor executor) { + Preconditions.checkNotNull(function); + return Futures.transform(input, Futures.asAsyncFunction(function), executor); + } + + private static AsyncFunction asAsyncFunction(final Function function) { + return new AsyncFunction(){ + + @Override + public ListenableFuture apply(I input) { + Object output = function.apply(input); + return Futures.immediateFuture(output); + } + }; + } + + public static Future lazyTransform(final Future input, final Function function) { + Preconditions.checkNotNull(input); + Preconditions.checkNotNull(function); + return new Future(){ + + @Override + public boolean cancel(boolean mayInterruptIfRunning) { + return input.cancel(mayInterruptIfRunning); + } + + @Override + public boolean isCancelled() { + return input.isCancelled(); + } + + @Override + public boolean isDone() { + return input.isDone(); + } + + @Override + public O get() throws InterruptedException, ExecutionException { + return this.applyTransformation(input.get()); + } + + @Override + public O get(long timeout, TimeUnit unit) throws InterruptedException, ExecutionException, TimeoutException { + return this.applyTransformation(input.get(timeout, unit)); + } + + private O applyTransformation(I input2) throws ExecutionException { + try { + return function.apply(input2); + } + catch (Throwable t) { + throw new ExecutionException(t); + } + } + }; + } + + public static ListenableFuture dereference(ListenableFuture> nested) { + return Futures.transform(nested, DEREFERENCER); + } + + @Beta + public static ListenableFuture> allAsList(ListenableFuture ... futures) { + return Futures.listFuture(ImmutableList.copyOf(futures), true, MoreExecutors.directExecutor()); + } + + @Beta + public static ListenableFuture> allAsList(Iterable> futures) { + return Futures.listFuture(ImmutableList.copyOf(futures), true, MoreExecutors.directExecutor()); + } + + public static ListenableFuture nonCancellationPropagating(ListenableFuture future) { + return new NonCancellationPropagatingFuture(future); + } + + @Beta + public static ListenableFuture> successfulAsList(ListenableFuture ... futures) { + return Futures.listFuture(ImmutableList.copyOf(futures), false, MoreExecutors.directExecutor()); + } + + @Beta + public static ListenableFuture> successfulAsList(Iterable> futures) { + return Futures.listFuture(ImmutableList.copyOf(futures), false, MoreExecutors.directExecutor()); + } + + @Beta + public static ImmutableList> inCompletionOrder(Iterable> futures) { + final ConcurrentLinkedQueue delegates = Queues.newConcurrentLinkedQueue(); + ImmutableList.Builder listBuilder = ImmutableList.builder(); + SerializingExecutor executor = new SerializingExecutor(MoreExecutors.directExecutor()); + for (final ListenableFuture future : futures) { + AsyncSettableFuture delegate = AsyncSettableFuture.create(); + delegates.add(delegate); + future.addListener(new Runnable(){ + + @Override + public void run() { + ((AsyncSettableFuture)delegates.remove()).setFuture(future); + } + }, executor); + listBuilder.add(delegate); + } + return listBuilder.build(); + } + + public static void addCallback(ListenableFuture future, FutureCallback callback) { + Futures.addCallback(future, callback, MoreExecutors.directExecutor()); + } + + public static void addCallback(final ListenableFuture future, final FutureCallback callback, Executor executor) { + Preconditions.checkNotNull(callback); + Runnable callbackListener = new Runnable(){ + + @Override + public void run() { + Object value; + try { + value = Uninterruptibles.getUninterruptibly(future); + } + catch (ExecutionException e) { + callback.onFailure(e.getCause()); + return; + } + catch (RuntimeException e) { + callback.onFailure(e); + return; + } + catch (Error e) { + callback.onFailure(e); + return; + } + callback.onSuccess(value); + } + }; + future.addListener(callbackListener, executor); + } + + public static V get(Future future, Class exceptionClass) throws X { + Preconditions.checkNotNull(future); + Preconditions.checkArgument(!RuntimeException.class.isAssignableFrom(exceptionClass), "Futures.get exception type (%s) must not be a RuntimeException", exceptionClass); + try { + return future.get(); + } + catch (InterruptedException e) { + Thread.currentThread().interrupt(); + throw Futures.newWithCause(exceptionClass, e); + } + catch (ExecutionException e) { + Futures.wrapAndThrowExceptionOrError(e.getCause(), exceptionClass); + throw new AssertionError(); + } + } + + public static V get(Future future, long timeout, TimeUnit unit, Class exceptionClass) throws X { + Preconditions.checkNotNull(future); + Preconditions.checkNotNull(unit); + Preconditions.checkArgument(!RuntimeException.class.isAssignableFrom(exceptionClass), "Futures.get exception type (%s) must not be a RuntimeException", exceptionClass); + try { + return future.get(timeout, unit); + } + catch (InterruptedException e) { + Thread.currentThread().interrupt(); + throw Futures.newWithCause(exceptionClass, e); + } + catch (TimeoutException e) { + throw Futures.newWithCause(exceptionClass, e); + } + catch (ExecutionException e) { + Futures.wrapAndThrowExceptionOrError(e.getCause(), exceptionClass); + throw new AssertionError(); + } + } + + private static void wrapAndThrowExceptionOrError(Throwable cause, Class exceptionClass) throws X { + if (cause instanceof Error) { + throw new ExecutionError((Error)cause); + } + if (cause instanceof RuntimeException) { + throw new UncheckedExecutionException(cause); + } + throw Futures.newWithCause(exceptionClass, cause); + } + + public static V getUnchecked(Future future) { + Preconditions.checkNotNull(future); + try { + return Uninterruptibles.getUninterruptibly(future); + } + catch (ExecutionException e) { + Futures.wrapAndThrowUnchecked(e.getCause()); + throw new AssertionError(); + } + } + + private static void wrapAndThrowUnchecked(Throwable cause) { + if (cause instanceof Error) { + throw new ExecutionError((Error)cause); + } + throw new UncheckedExecutionException(cause); + } + + private static X newWithCause(Class exceptionClass, Throwable cause) { + List> constructors = Arrays.asList(exceptionClass.getConstructors()); + for (Constructor constructor : Futures.preferringStrings(constructors)) { + Exception instance = (Exception)Futures.newFromConstructor(constructor, cause); + if (instance == null) continue; + if (instance.getCause() == null) { + instance.initCause(cause); + } + return (X)instance; + } + String string = String.valueOf(String.valueOf(exceptionClass)); + throw new IllegalArgumentException(new StringBuilder(82 + string.length()).append("No appropriate constructor for exception of type ").append(string).append(" in response to chained exception").toString(), cause); + } + + private static List> preferringStrings(List> constructors) { + return WITH_STRING_PARAM_FIRST.sortedCopy(constructors); + } + + @Nullable + private static X newFromConstructor(Constructor constructor, Throwable cause) { + Class[] paramTypes = constructor.getParameterTypes(); + Object[] params = new Object[paramTypes.length]; + for (int i = 0; i < paramTypes.length; ++i) { + Class paramType = paramTypes[i]; + if (paramType.equals(String.class)) { + params[i] = cause.toString(); + continue; + } + if (paramType.equals(Throwable.class)) { + params[i] = cause; + continue; + } + return null; + } + try { + return constructor.newInstance(params); + } + catch (IllegalArgumentException e) { + return null; + } + catch (InstantiationException e) { + return null; + } + catch (IllegalAccessException e) { + return null; + } + catch (InvocationTargetException e) { + return null; + } + } + + private static ListenableFuture> listFuture(ImmutableList> futures, boolean allMustSucceed, Executor listenerExecutor) { + return new CombinedFuture(futures, allMustSucceed, listenerExecutor, new FutureCombiner>(){ + + @Override + public List combine(List> values) { + ArrayList result = Lists.newArrayList(); + for (Optional element : values) { + result.add(element != null ? (Object)element.orNull() : null); + } + return Collections.unmodifiableList(result); + } + }); + } + + private static class MappingCheckedFuture + extends AbstractCheckedFuture { + final Function mapper; + + MappingCheckedFuture(ListenableFuture delegate, Function mapper) { + super(delegate); + this.mapper = Preconditions.checkNotNull(mapper); + } + + @Override + protected X mapException(Exception e) { + return (X)((Exception)this.mapper.apply(e)); + } + } + + private static class CombinedFuture + extends AbstractFuture { + private static final Logger logger = Logger.getLogger(CombinedFuture.class.getName()); + ImmutableCollection> futures; + final boolean allMustSucceed; + final AtomicInteger remaining; + FutureCombiner combiner; + List> values; + final Object seenExceptionsLock = new Object(); + Set seenExceptions; + + CombinedFuture(ImmutableCollection> futures, boolean allMustSucceed, Executor listenerExecutor, FutureCombiner combiner) { + this.futures = futures; + this.allMustSucceed = allMustSucceed; + this.remaining = new AtomicInteger(futures.size()); + this.combiner = combiner; + this.values = Lists.newArrayListWithCapacity(futures.size()); + this.init(listenerExecutor); + } + + protected void init(Executor listenerExecutor) { + int i; + this.addListener(new Runnable(){ + + @Override + public void run() { + if (CombinedFuture.this.isCancelled()) { + for (ListenableFuture listenableFuture : CombinedFuture.this.futures) { + listenableFuture.cancel(CombinedFuture.this.wasInterrupted()); + } + } + CombinedFuture.this.futures = null; + CombinedFuture.this.values = null; + CombinedFuture.this.combiner = null; + } + }, MoreExecutors.directExecutor()); + if (this.futures.isEmpty()) { + this.set(this.combiner.combine(ImmutableList.of())); + return; + } + for (i = 0; i < this.futures.size(); ++i) { + this.values.add(null); + } + i = 0; + for (final ListenableFuture listenableFuture : this.futures) { + final int index = i++; + listenableFuture.addListener(new Runnable(){ + + @Override + public void run() { + CombinedFuture.this.setOneValue(index, listenableFuture); + } + }, listenerExecutor); + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + private void setExceptionAndMaybeLog(Throwable throwable) { + boolean visibleFromOutputFuture = false; + boolean firstTimeSeeingThisException = true; + if (this.allMustSucceed) { + visibleFromOutputFuture = super.setException(throwable); + Object object = this.seenExceptionsLock; + synchronized (object) { + if (this.seenExceptions == null) { + this.seenExceptions = Sets.newHashSet(); + } + firstTimeSeeingThisException = this.seenExceptions.add(throwable); + } + } + if (throwable instanceof Error || this.allMustSucceed && !visibleFromOutputFuture && firstTimeSeeingThisException) { + logger.log(Level.SEVERE, "input future failed.", throwable); + } + } + + /* + * Exception decompiling + */ + private void setOneValue(int index, Future future) { + /* + * This method has failed to decompile. When submitting a bug report, please provide this stack trace, and (if you hold appropriate legal rights) the relevant class file. + * + * org.benf.cfr.reader.util.ConfusedCFRException: Started 2 blocks at once + * at org.benf.cfr.reader.bytecode.analysis.opgraph.Op04StructuredStatement.getStartingBlocks(Op04StructuredStatement.java:412) + * at org.benf.cfr.reader.bytecode.analysis.opgraph.Op04StructuredStatement.buildNestedBlocks(Op04StructuredStatement.java:487) + * at org.benf.cfr.reader.bytecode.analysis.opgraph.Op03SimpleStatement.createInitialStructuredBlock(Op03SimpleStatement.java:736) + * at org.benf.cfr.reader.bytecode.CodeAnalyser.getAnalysisInner(CodeAnalyser.java:850) + * at org.benf.cfr.reader.bytecode.CodeAnalyser.getAnalysisOrWrapFail(CodeAnalyser.java:278) + * at org.benf.cfr.reader.bytecode.CodeAnalyser.getAnalysis(CodeAnalyser.java:201) + * at org.benf.cfr.reader.entities.attributes.AttributeCode.analyse(AttributeCode.java:94) + * at org.benf.cfr.reader.entities.Method.analyse(Method.java:531) + * at org.benf.cfr.reader.entities.ClassFile.analyseMid(ClassFile.java:1055) + * at org.benf.cfr.reader.entities.ClassFile.analyseInnerClassesPass1(ClassFile.java:923) + * at org.benf.cfr.reader.entities.ClassFile.analyseMid(ClassFile.java:1035) + * at org.benf.cfr.reader.entities.ClassFile.analyseTop(ClassFile.java:942) + * at org.benf.cfr.reader.Driver.doClass(Driver.java:84) + * at org.benf.cfr.reader.CfrDriverImpl.analyse(CfrDriverImpl.java:78) + * at org.benf.cfr.reader.Main.main(Main.java:54) + */ + throw new IllegalStateException("Decompilation failed"); + } + } + + private static interface FutureCombiner { + public C combine(List> var1); + } + + private static class NonCancellationPropagatingFuture + extends AbstractFuture { + NonCancellationPropagatingFuture(final ListenableFuture delegate) { + Preconditions.checkNotNull(delegate); + Futures.addCallback(delegate, new FutureCallback(){ + + @Override + public void onSuccess(V result) { + NonCancellationPropagatingFuture.this.set(result); + } + + @Override + public void onFailure(Throwable t) { + if (delegate.isCancelled()) { + NonCancellationPropagatingFuture.this.cancel(false); + } else { + NonCancellationPropagatingFuture.this.setException(t); + } + } + }, MoreExecutors.directExecutor()); + } + } + + private static final class CombinerFuture + extends ListenableFutureTask { + ImmutableList> futures; + + CombinerFuture(Callable callable, ImmutableList> futures) { + super(callable); + this.futures = futures; + } + + @Override + public boolean cancel(boolean mayInterruptIfRunning) { + ImmutableList> futures = this.futures; + if (super.cancel(mayInterruptIfRunning)) { + for (ListenableFuture listenableFuture : futures) { + listenableFuture.cancel(mayInterruptIfRunning); + } + return true; + } + return false; + } + + @Override + protected void done() { + super.done(); + this.futures = null; + } + + @Override + protected void setException(Throwable t) { + super.setException(t); + } + } + + private static final class WrappedCombiner + implements Callable { + final Callable delegate; + CombinerFuture outputFuture; + + WrappedCombiner(Callable delegate) { + this.delegate = Preconditions.checkNotNull(delegate); + } + + @Override + public T call() throws Exception { + try { + return this.delegate.call(); + } + catch (ExecutionException e) { + this.outputFuture.setException(e.getCause()); + } + catch (CancellationException e) { + this.outputFuture.cancel(false); + } + return null; + } + } + + private static class ChainingListenableFuture + extends AbstractFuture + implements Runnable { + private AsyncFunction function; + private ListenableFuture inputFuture; + private volatile ListenableFuture outputFuture; + + private ChainingListenableFuture(AsyncFunction function, ListenableFuture inputFuture) { + this.function = Preconditions.checkNotNull(function); + this.inputFuture = Preconditions.checkNotNull(inputFuture); + } + + @Override + public boolean cancel(boolean mayInterruptIfRunning) { + if (super.cancel(mayInterruptIfRunning)) { + this.cancel(this.inputFuture, mayInterruptIfRunning); + this.cancel(this.outputFuture, mayInterruptIfRunning); + return true; + } + return false; + } + + private void cancel(@Nullable Future future, boolean mayInterruptIfRunning) { + if (future != null) { + future.cancel(mayInterruptIfRunning); + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + * Loose catch block + */ + @Override + public void run() { + block14: { + try { + I sourceResult; + try { + sourceResult = Uninterruptibles.getUninterruptibly(this.inputFuture); + } + catch (CancellationException e) { + this.cancel(false); + this.function = null; + this.inputFuture = null; + return; + } + catch (ExecutionException e) { + this.setException(e.getCause()); + this.function = null; + this.inputFuture = null; + return; + } + this.outputFuture = Preconditions.checkNotNull(this.function.apply(sourceResult), "AsyncFunction may not return null."); + final ListenableFuture outputFuture = this.outputFuture; + if (this.isCancelled()) { + outputFuture.cancel(this.wasInterrupted()); + this.outputFuture = null; + return; + } + outputFuture.addListener(new Runnable(){ + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public void run() { + try { + ChainingListenableFuture.this.set(Uninterruptibles.getUninterruptibly(outputFuture)); + } + catch (CancellationException e) { + ChainingListenableFuture.this.cancel(false); + return; + } + catch (ExecutionException e) { + ChainingListenableFuture.this.setException(e.getCause()); + } + finally { + ChainingListenableFuture.this.outputFuture = null; + } + } + }, MoreExecutors.directExecutor()); + break block14; + { + catch (UndeclaredThrowableException e) { + this.setException(e.getCause()); + break block14; + } + catch (Throwable t) { + this.setException(t); + break block14; + } + catch (Throwable throwable) { + throw throwable; + } + } + } + finally { + this.function = null; + this.inputFuture = null; + } + } + } + } + + private static class FallbackFuture + extends AbstractFuture { + private volatile ListenableFuture running; + + FallbackFuture(ListenableFuture input, final FutureFallback fallback, Executor executor) { + this.running = input; + Futures.addCallback(this.running, new FutureCallback(){ + + @Override + public void onSuccess(V value) { + FallbackFuture.this.set(value); + } + + @Override + public void onFailure(Throwable t) { + if (FallbackFuture.this.isCancelled()) { + return; + } + try { + FallbackFuture.this.running = fallback.create(t); + if (FallbackFuture.this.isCancelled()) { + FallbackFuture.this.running.cancel(FallbackFuture.this.wasInterrupted()); + return; + } + Futures.addCallback(FallbackFuture.this.running, new FutureCallback(){ + + @Override + public void onSuccess(V value) { + FallbackFuture.this.set(value); + } + + @Override + public void onFailure(Throwable t) { + if (FallbackFuture.this.running.isCancelled()) { + FallbackFuture.this.cancel(false); + } else { + FallbackFuture.this.setException(t); + } + } + }, MoreExecutors.directExecutor()); + } + catch (Throwable e) { + FallbackFuture.this.setException(e); + } + } + }, executor); + } + + @Override + public boolean cancel(boolean mayInterruptIfRunning) { + if (super.cancel(mayInterruptIfRunning)) { + this.running.cancel(mayInterruptIfRunning); + return true; + } + return false; + } + } + + private static class ImmediateFailedCheckedFuture + extends ImmediateFuture + implements CheckedFuture { + private final X thrown; + + ImmediateFailedCheckedFuture(X thrown) { + this.thrown = thrown; + } + + @Override + public V get() throws ExecutionException { + throw new ExecutionException((Throwable)this.thrown); + } + + @Override + public V checkedGet() throws X { + throw this.thrown; + } + + @Override + public V checkedGet(long timeout, TimeUnit unit) throws X { + Preconditions.checkNotNull(unit); + throw this.thrown; + } + } + + private static class ImmediateCancelledFuture + extends ImmediateFuture { + private final CancellationException thrown = new CancellationException("Immediate cancelled future."); + + ImmediateCancelledFuture() { + } + + @Override + public boolean isCancelled() { + return true; + } + + @Override + public V get() { + throw AbstractFuture.cancellationExceptionWithCause("Task was cancelled.", this.thrown); + } + } + + private static class ImmediateFailedFuture + extends ImmediateFuture { + private final Throwable thrown; + + ImmediateFailedFuture(Throwable thrown) { + this.thrown = thrown; + } + + @Override + public V get() throws ExecutionException { + throw new ExecutionException(this.thrown); + } + } + + private static class ImmediateSuccessfulCheckedFuture + extends ImmediateFuture + implements CheckedFuture { + @Nullable + private final V value; + + ImmediateSuccessfulCheckedFuture(@Nullable V value) { + this.value = value; + } + + @Override + public V get() { + return this.value; + } + + @Override + public V checkedGet() { + return this.value; + } + + @Override + public V checkedGet(long timeout, TimeUnit unit) { + Preconditions.checkNotNull(unit); + return this.value; + } + } + + private static class ImmediateSuccessfulFuture + extends ImmediateFuture { + @Nullable + private final V value; + + ImmediateSuccessfulFuture(@Nullable V value) { + this.value = value; + } + + @Override + public V get() { + return this.value; + } + } + + private static abstract class ImmediateFuture + implements ListenableFuture { + private static final Logger log = Logger.getLogger(ImmediateFuture.class.getName()); + + private ImmediateFuture() { + } + + @Override + public void addListener(Runnable listener, Executor executor) { + Preconditions.checkNotNull(listener, "Runnable was null."); + Preconditions.checkNotNull(executor, "Executor was null."); + try { + executor.execute(listener); + } + catch (RuntimeException e) { + String string = String.valueOf(String.valueOf(listener)); + String string2 = String.valueOf(String.valueOf(executor)); + log.log(Level.SEVERE, new StringBuilder(57 + string.length() + string2.length()).append("RuntimeException while executing runnable ").append(string).append(" with executor ").append(string2).toString(), e); + } + } + + @Override + public boolean cancel(boolean mayInterruptIfRunning) { + return false; + } + + @Override + public abstract V get() throws ExecutionException; + + @Override + public V get(long timeout, TimeUnit unit) throws ExecutionException { + Preconditions.checkNotNull(unit); + return this.get(); + } + + @Override + public boolean isCancelled() { + return false; + } + + @Override + public boolean isDone() { + return true; + } + } +} diff --git a/src/com/google/common/util/concurrent/JdkFutureAdapters.java b/src/com/google/common/util/concurrent/JdkFutureAdapters.java new file mode 100644 index 0000000..eb78071 --- /dev/null +++ b/src/com/google/common/util/concurrent/JdkFutureAdapters.java @@ -0,0 +1,90 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.util.concurrent; + +import com.google.common.annotations.Beta; +import com.google.common.base.Preconditions; +import com.google.common.util.concurrent.ExecutionList; +import com.google.common.util.concurrent.ForwardingFuture; +import com.google.common.util.concurrent.ListenableFuture; +import com.google.common.util.concurrent.ThreadFactoryBuilder; +import com.google.common.util.concurrent.Uninterruptibles; +import java.util.concurrent.Executor; +import java.util.concurrent.Executors; +import java.util.concurrent.Future; +import java.util.concurrent.ThreadFactory; +import java.util.concurrent.atomic.AtomicBoolean; + +@Beta +public final class JdkFutureAdapters { + public static ListenableFuture listenInPoolThread(Future future) { + if (future instanceof ListenableFuture) { + return (ListenableFuture)future; + } + return new ListenableFutureAdapter(future); + } + + public static ListenableFuture listenInPoolThread(Future future, Executor executor) { + Preconditions.checkNotNull(executor); + if (future instanceof ListenableFuture) { + return (ListenableFuture)future; + } + return new ListenableFutureAdapter(future, executor); + } + + private JdkFutureAdapters() { + } + + private static class ListenableFutureAdapter + extends ForwardingFuture + implements ListenableFuture { + private static final ThreadFactory threadFactory = new ThreadFactoryBuilder().setDaemon(true).setNameFormat("ListenableFutureAdapter-thread-%d").build(); + private static final Executor defaultAdapterExecutor = Executors.newCachedThreadPool(threadFactory); + private final Executor adapterExecutor; + private final ExecutionList executionList = new ExecutionList(); + private final AtomicBoolean hasListeners = new AtomicBoolean(false); + private final Future delegate; + + ListenableFutureAdapter(Future delegate) { + this(delegate, defaultAdapterExecutor); + } + + ListenableFutureAdapter(Future delegate, Executor adapterExecutor) { + this.delegate = Preconditions.checkNotNull(delegate); + this.adapterExecutor = Preconditions.checkNotNull(adapterExecutor); + } + + @Override + protected Future delegate() { + return this.delegate; + } + + @Override + public void addListener(Runnable listener, Executor exec) { + this.executionList.add(listener, exec); + if (this.hasListeners.compareAndSet(false, true)) { + if (this.delegate.isDone()) { + this.executionList.execute(); + return; + } + this.adapterExecutor.execute(new Runnable(){ + + @Override + public void run() { + try { + Uninterruptibles.getUninterruptibly(ListenableFutureAdapter.this.delegate); + } + catch (Error e) { + throw e; + } + catch (Throwable throwable) { + // empty catch block + } + ListenableFutureAdapter.this.executionList.execute(); + } + }); + } + } + } +} diff --git a/src/com/google/common/util/concurrent/ListenableFuture.java b/src/com/google/common/util/concurrent/ListenableFuture.java new file mode 100644 index 0000000..a86edb5 --- /dev/null +++ b/src/com/google/common/util/concurrent/ListenableFuture.java @@ -0,0 +1,12 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.util.concurrent; + +import java.util.concurrent.Executor; +import java.util.concurrent.Future; + +public interface ListenableFuture +extends Future { + public void addListener(Runnable var1, Executor var2); +} diff --git a/src/com/google/common/util/concurrent/ListenableFutureTask.java b/src/com/google/common/util/concurrent/ListenableFutureTask.java new file mode 100644 index 0000000..d7a45b6 --- /dev/null +++ b/src/com/google/common/util/concurrent/ListenableFutureTask.java @@ -0,0 +1,43 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.util.concurrent; + +import com.google.common.util.concurrent.ExecutionList; +import com.google.common.util.concurrent.ListenableFuture; +import java.util.concurrent.Callable; +import java.util.concurrent.Executor; +import java.util.concurrent.FutureTask; +import javax.annotation.Nullable; + +public class ListenableFutureTask +extends FutureTask +implements ListenableFuture { + private final ExecutionList executionList = new ExecutionList(); + + public static ListenableFutureTask create(Callable callable) { + return new ListenableFutureTask(callable); + } + + public static ListenableFutureTask create(Runnable runnable, @Nullable V result) { + return new ListenableFutureTask(runnable, result); + } + + ListenableFutureTask(Callable callable) { + super(callable); + } + + ListenableFutureTask(Runnable runnable, @Nullable V result) { + super(runnable, result); + } + + @Override + public void addListener(Runnable listener, Executor exec) { + this.executionList.add(listener, exec); + } + + @Override + protected void done() { + this.executionList.execute(); + } +} diff --git a/src/com/google/common/util/concurrent/ListenableScheduledFuture.java b/src/com/google/common/util/concurrent/ListenableScheduledFuture.java new file mode 100644 index 0000000..779fc5a --- /dev/null +++ b/src/com/google/common/util/concurrent/ListenableScheduledFuture.java @@ -0,0 +1,14 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.util.concurrent; + +import com.google.common.annotations.Beta; +import com.google.common.util.concurrent.ListenableFuture; +import java.util.concurrent.ScheduledFuture; + +@Beta +public interface ListenableScheduledFuture +extends ScheduledFuture, +ListenableFuture { +} diff --git a/src/com/google/common/util/concurrent/ListenerCallQueue.java b/src/com/google/common/util/concurrent/ListenerCallQueue.java new file mode 100644 index 0000000..1fad437 --- /dev/null +++ b/src/com/google/common/util/concurrent/ListenerCallQueue.java @@ -0,0 +1,121 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.util.concurrent; + +import com.google.common.base.Preconditions; +import com.google.common.collect.Queues; +import java.util.Queue; +import java.util.concurrent.Executor; +import java.util.logging.Level; +import java.util.logging.Logger; +import javax.annotation.concurrent.GuardedBy; + +final class ListenerCallQueue +implements Runnable { + private static final Logger logger = Logger.getLogger(ListenerCallQueue.class.getName()); + private final L listener; + private final Executor executor; + @GuardedBy(value="this") + private final Queue> waitQueue = Queues.newArrayDeque(); + @GuardedBy(value="this") + private boolean isThreadScheduled; + + ListenerCallQueue(L listener, Executor executor) { + this.listener = Preconditions.checkNotNull(listener); + this.executor = Preconditions.checkNotNull(executor); + } + + synchronized void add(Callback callback) { + this.waitQueue.add(callback); + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + void execute() { + boolean scheduleTaskRunner = false; + ListenerCallQueue listenerCallQueue = this; + synchronized (listenerCallQueue) { + if (!this.isThreadScheduled) { + this.isThreadScheduled = true; + scheduleTaskRunner = true; + } + } + if (scheduleTaskRunner) { + try { + this.executor.execute(this); + } + catch (RuntimeException e) { + Object object = this; + synchronized (object) { + this.isThreadScheduled = false; + } + object = String.valueOf(String.valueOf(this.listener)); + String string = String.valueOf(String.valueOf(this.executor)); + logger.log(Level.SEVERE, new StringBuilder(42 + ((String)object).length() + string.length()).append("Exception while running callbacks for ").append((String)object).append(" on ").append(string).toString(), e); + throw e; + } + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public void run() { + block18: { + boolean stillRunning = true; + block14: while (true) { + while (true) { + Callback nextToRun; + ListenerCallQueue listenerCallQueue = this; + synchronized (listenerCallQueue) { + Preconditions.checkState(this.isThreadScheduled); + nextToRun = this.waitQueue.poll(); + if (nextToRun == null) { + this.isThreadScheduled = false; + stillRunning = false; + break block18; + } + } + try { + nextToRun.call(this.listener); + continue block14; + } + catch (RuntimeException e) { + String string = String.valueOf(String.valueOf(this.listener)); + String string2 = String.valueOf(String.valueOf(((Callback)nextToRun).methodCall)); + logger.log(Level.SEVERE, new StringBuilder(37 + string.length() + string2.length()).append("Exception while executing callback: ").append(string).append(".").append(string2).toString(), e); + continue; + } + break; + } + } + finally { + if (stillRunning) { + ListenerCallQueue listenerCallQueue = this; + synchronized (listenerCallQueue) { + this.isThreadScheduled = false; + } + } + } + } + } + + static abstract class Callback { + private final String methodCall; + + Callback(String methodCall) { + this.methodCall = methodCall; + } + + abstract void call(L var1); + + void enqueueOn(Iterable> queues) { + for (ListenerCallQueue queue : queues) { + queue.add(this); + } + } + } +} diff --git a/src/com/google/common/util/concurrent/ListeningExecutorService.java b/src/com/google/common/util/concurrent/ListeningExecutorService.java new file mode 100644 index 0000000..a1977a4 --- /dev/null +++ b/src/com/google/common/util/concurrent/ListeningExecutorService.java @@ -0,0 +1,27 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.util.concurrent; + +import com.google.common.util.concurrent.ListenableFuture; +import java.util.Collection; +import java.util.List; +import java.util.concurrent.Callable; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Future; +import java.util.concurrent.TimeUnit; + +public interface ListeningExecutorService +extends ExecutorService { + public ListenableFuture submit(Callable var1); + + public ListenableFuture submit(Runnable var1); + + public ListenableFuture submit(Runnable var1, T var2); + + @Override + public List> invokeAll(Collection> var1) throws InterruptedException; + + @Override + public List> invokeAll(Collection> var1, long var2, TimeUnit var4) throws InterruptedException; +} diff --git a/src/com/google/common/util/concurrent/ListeningScheduledExecutorService.java b/src/com/google/common/util/concurrent/ListeningScheduledExecutorService.java new file mode 100644 index 0000000..5fda77c --- /dev/null +++ b/src/com/google/common/util/concurrent/ListeningScheduledExecutorService.java @@ -0,0 +1,24 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.util.concurrent; + +import com.google.common.annotations.Beta; +import com.google.common.util.concurrent.ListenableScheduledFuture; +import com.google.common.util.concurrent.ListeningExecutorService; +import java.util.concurrent.Callable; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.TimeUnit; + +@Beta +public interface ListeningScheduledExecutorService +extends ScheduledExecutorService, +ListeningExecutorService { + public ListenableScheduledFuture schedule(Runnable var1, long var2, TimeUnit var4); + + public ListenableScheduledFuture schedule(Callable var1, long var2, TimeUnit var4); + + public ListenableScheduledFuture scheduleAtFixedRate(Runnable var1, long var2, long var4, TimeUnit var6); + + public ListenableScheduledFuture scheduleWithFixedDelay(Runnable var1, long var2, long var4, TimeUnit var6); +} diff --git a/src/com/google/common/util/concurrent/Monitor.java b/src/com/google/common/util/concurrent/Monitor.java new file mode 100644 index 0000000..9744c37 --- /dev/null +++ b/src/com/google/common/util/concurrent/Monitor.java @@ -0,0 +1,599 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.util.concurrent; + +import com.google.common.annotations.Beta; +import com.google.common.base.Preconditions; +import com.google.common.base.Throwables; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.locks.Condition; +import java.util.concurrent.locks.ReentrantLock; +import javax.annotation.concurrent.GuardedBy; + +@Beta +public final class Monitor { + private final boolean fair; + private final ReentrantLock lock; + @GuardedBy(value="lock") + private Guard activeGuards = null; + + public Monitor() { + this(false); + } + + public Monitor(boolean fair) { + this.fair = fair; + this.lock = new ReentrantLock(fair); + } + + public void enter() { + this.lock.lock(); + } + + public void enterInterruptibly() throws InterruptedException { + this.lock.lockInterruptibly(); + } + + public boolean enter(long time, TimeUnit unit) { + long timeoutNanos = unit.toNanos(time); + ReentrantLock lock = this.lock; + if (!this.fair && lock.tryLock()) { + return true; + } + long deadline = System.nanoTime() + timeoutNanos; + boolean interrupted = Thread.interrupted(); + while (true) { + try { + boolean bl = lock.tryLock(timeoutNanos, TimeUnit.NANOSECONDS); + return bl; + } + catch (InterruptedException interrupt) { + interrupted = true; + timeoutNanos = deadline - System.nanoTime(); + continue; + } + break; + } + finally { + if (interrupted) { + Thread.currentThread().interrupt(); + } + } + } + + public boolean enterInterruptibly(long time, TimeUnit unit) throws InterruptedException { + return this.lock.tryLock(time, unit); + } + + public boolean tryEnter() { + return this.lock.tryLock(); + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + public void enterWhen(Guard guard) throws InterruptedException { + if (guard.monitor != this) { + throw new IllegalMonitorStateException(); + } + ReentrantLock lock = this.lock; + boolean signalBeforeWaiting = lock.isHeldByCurrentThread(); + lock.lockInterruptibly(); + boolean satisfied = false; + try { + if (!guard.isSatisfied()) { + this.await(guard, signalBeforeWaiting); + } + satisfied = true; + } + finally { + if (!satisfied) { + this.leave(); + } + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + public void enterWhenUninterruptibly(Guard guard) { + if (guard.monitor != this) { + throw new IllegalMonitorStateException(); + } + ReentrantLock lock = this.lock; + boolean signalBeforeWaiting = lock.isHeldByCurrentThread(); + lock.lock(); + boolean satisfied = false; + try { + if (!guard.isSatisfied()) { + this.awaitUninterruptibly(guard, signalBeforeWaiting); + } + satisfied = true; + } + finally { + if (!satisfied) { + this.leave(); + } + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + public boolean enterWhen(Guard guard, long time, TimeUnit unit) throws InterruptedException { + long timeoutNanos = unit.toNanos(time); + if (guard.monitor != this) { + throw new IllegalMonitorStateException(); + } + ReentrantLock lock = this.lock; + boolean reentrant = lock.isHeldByCurrentThread(); + if (this.fair || !lock.tryLock()) { + long deadline = System.nanoTime() + timeoutNanos; + if (!lock.tryLock(time, unit)) { + return false; + } + timeoutNanos = deadline - System.nanoTime(); + } + boolean satisfied = false; + boolean threw = true; + try { + satisfied = guard.isSatisfied() || this.awaitNanos(guard, timeoutNanos, reentrant); + threw = false; + boolean bl = satisfied; + return bl; + } + finally { + if (!satisfied) { + try { + if (threw && !reentrant) { + this.signalNextWaiter(); + } + } + finally { + lock.unlock(); + } + } + } + } + + /* + * Loose catch block + */ + public boolean enterWhenUninterruptibly(Guard guard, long time, TimeUnit unit) { + long timeoutNanos = unit.toNanos(time); + if (guard.monitor != this) { + throw new IllegalMonitorStateException(); + } + ReentrantLock lock = this.lock; + long deadline = System.nanoTime() + timeoutNanos; + boolean signalBeforeWaiting = lock.isHeldByCurrentThread(); + boolean interrupted = Thread.interrupted(); + try { + if (this.fair || !lock.tryLock()) { + boolean locked = false; + do { + try { + locked = lock.tryLock(timeoutNanos, TimeUnit.NANOSECONDS); + if (!locked) { + boolean bl = false; + return bl; + } + } + catch (InterruptedException interrupt) { + interrupted = true; + } + timeoutNanos = deadline - System.nanoTime(); + } while (!locked); + } + boolean satisfied = false; + while (true) { + try { + satisfied = guard.isSatisfied() || this.awaitNanos(guard, timeoutNanos, signalBeforeWaiting); + boolean interrupt = satisfied; + return interrupt; + } + catch (InterruptedException interrupt) { + interrupted = true; + signalBeforeWaiting = false; + timeoutNanos = deadline - System.nanoTime(); + continue; + } + break; + } + finally { + if (!satisfied) { + lock.unlock(); + } + } + { + catch (Throwable throwable) { + throw throwable; + } + } + } + finally { + if (interrupted) { + Thread.currentThread().interrupt(); + } + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + public boolean enterIf(Guard guard) { + if (guard.monitor != this) { + throw new IllegalMonitorStateException(); + } + ReentrantLock lock = this.lock; + lock.lock(); + boolean satisfied = false; + try { + boolean bl = satisfied = guard.isSatisfied(); + return bl; + } + finally { + if (!satisfied) { + lock.unlock(); + } + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + public boolean enterIfInterruptibly(Guard guard) throws InterruptedException { + if (guard.monitor != this) { + throw new IllegalMonitorStateException(); + } + ReentrantLock lock = this.lock; + lock.lockInterruptibly(); + boolean satisfied = false; + try { + boolean bl = satisfied = guard.isSatisfied(); + return bl; + } + finally { + if (!satisfied) { + lock.unlock(); + } + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + public boolean enterIf(Guard guard, long time, TimeUnit unit) { + if (guard.monitor != this) { + throw new IllegalMonitorStateException(); + } + if (!this.enter(time, unit)) { + return false; + } + boolean satisfied = false; + try { + boolean bl = satisfied = guard.isSatisfied(); + return bl; + } + finally { + if (!satisfied) { + this.lock.unlock(); + } + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + public boolean enterIfInterruptibly(Guard guard, long time, TimeUnit unit) throws InterruptedException { + if (guard.monitor != this) { + throw new IllegalMonitorStateException(); + } + ReentrantLock lock = this.lock; + if (!lock.tryLock(time, unit)) { + return false; + } + boolean satisfied = false; + try { + boolean bl = satisfied = guard.isSatisfied(); + return bl; + } + finally { + if (!satisfied) { + lock.unlock(); + } + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + public boolean tryEnterIf(Guard guard) { + if (guard.monitor != this) { + throw new IllegalMonitorStateException(); + } + ReentrantLock lock = this.lock; + if (!lock.tryLock()) { + return false; + } + boolean satisfied = false; + try { + boolean bl = satisfied = guard.isSatisfied(); + return bl; + } + finally { + if (!satisfied) { + lock.unlock(); + } + } + } + + public void waitFor(Guard guard) throws InterruptedException { + if (!(guard.monitor == this & this.lock.isHeldByCurrentThread())) { + throw new IllegalMonitorStateException(); + } + if (!guard.isSatisfied()) { + this.await(guard, true); + } + } + + public void waitForUninterruptibly(Guard guard) { + if (!(guard.monitor == this & this.lock.isHeldByCurrentThread())) { + throw new IllegalMonitorStateException(); + } + if (!guard.isSatisfied()) { + this.awaitUninterruptibly(guard, true); + } + } + + public boolean waitFor(Guard guard, long time, TimeUnit unit) throws InterruptedException { + long timeoutNanos = unit.toNanos(time); + if (!(guard.monitor == this & this.lock.isHeldByCurrentThread())) { + throw new IllegalMonitorStateException(); + } + return guard.isSatisfied() || this.awaitNanos(guard, timeoutNanos, true); + } + + public boolean waitForUninterruptibly(Guard guard, long time, TimeUnit unit) { + long timeoutNanos = unit.toNanos(time); + if (!(guard.monitor == this & this.lock.isHeldByCurrentThread())) { + throw new IllegalMonitorStateException(); + } + if (guard.isSatisfied()) { + return true; + } + boolean signalBeforeWaiting = true; + long deadline = System.nanoTime() + timeoutNanos; + boolean interrupted = Thread.interrupted(); + while (true) { + try { + boolean bl = this.awaitNanos(guard, timeoutNanos, signalBeforeWaiting); + return bl; + } + catch (InterruptedException interrupt) { + interrupted = true; + if (guard.isSatisfied()) { + boolean bl = true; + return bl; + } + signalBeforeWaiting = false; + timeoutNanos = deadline - System.nanoTime(); + continue; + } + break; + } + finally { + if (interrupted) { + Thread.currentThread().interrupt(); + } + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + public void leave() { + ReentrantLock lock = this.lock; + try { + if (lock.getHoldCount() == 1) { + this.signalNextWaiter(); + } + } + finally { + lock.unlock(); + } + } + + public boolean isFair() { + return this.fair; + } + + public boolean isOccupied() { + return this.lock.isLocked(); + } + + public boolean isOccupiedByCurrentThread() { + return this.lock.isHeldByCurrentThread(); + } + + public int getOccupiedDepth() { + return this.lock.getHoldCount(); + } + + public int getQueueLength() { + return this.lock.getQueueLength(); + } + + public boolean hasQueuedThreads() { + return this.lock.hasQueuedThreads(); + } + + public boolean hasQueuedThread(Thread thread) { + return this.lock.hasQueuedThread(thread); + } + + public boolean hasWaiters(Guard guard) { + return this.getWaitQueueLength(guard) > 0; + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + public int getWaitQueueLength(Guard guard) { + if (guard.monitor != this) { + throw new IllegalMonitorStateException(); + } + this.lock.lock(); + try { + int n = guard.waiterCount; + return n; + } + finally { + this.lock.unlock(); + } + } + + @GuardedBy(value="lock") + private void signalNextWaiter() { + Guard guard = this.activeGuards; + while (guard != null) { + if (this.isSatisfied(guard)) { + guard.condition.signal(); + break; + } + guard = guard.next; + } + } + + @GuardedBy(value="lock") + private boolean isSatisfied(Guard guard) { + try { + return guard.isSatisfied(); + } + catch (Throwable throwable) { + this.signalAllWaiters(); + throw Throwables.propagate(throwable); + } + } + + @GuardedBy(value="lock") + private void signalAllWaiters() { + Guard guard = this.activeGuards; + while (guard != null) { + guard.condition.signalAll(); + guard = guard.next; + } + } + + @GuardedBy(value="lock") + private void beginWaitingFor(Guard guard) { + int waiters; + if ((waiters = guard.waiterCount++) == 0) { + guard.next = this.activeGuards; + this.activeGuards = guard; + } + } + + @GuardedBy(value="lock") + private void endWaitingFor(Guard guard) { + int waiters; + if ((waiters = --guard.waiterCount) == 0) { + Guard p = this.activeGuards; + Guard pred = null; + while (true) { + if (p == guard) { + if (pred == null) { + this.activeGuards = p.next; + } else { + pred.next = p.next; + } + p.next = null; + break; + } + pred = p; + p = p.next; + } + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @GuardedBy(value="lock") + private void await(Guard guard, boolean signalBeforeWaiting) throws InterruptedException { + if (signalBeforeWaiting) { + this.signalNextWaiter(); + } + this.beginWaitingFor(guard); + try { + do { + guard.condition.await(); + } while (!guard.isSatisfied()); + } + finally { + this.endWaitingFor(guard); + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @GuardedBy(value="lock") + private void awaitUninterruptibly(Guard guard, boolean signalBeforeWaiting) { + if (signalBeforeWaiting) { + this.signalNextWaiter(); + } + this.beginWaitingFor(guard); + try { + do { + guard.condition.awaitUninterruptibly(); + } while (!guard.isSatisfied()); + } + finally { + this.endWaitingFor(guard); + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @GuardedBy(value="lock") + private boolean awaitNanos(Guard guard, long nanos, boolean signalBeforeWaiting) throws InterruptedException { + if (signalBeforeWaiting) { + this.signalNextWaiter(); + } + this.beginWaitingFor(guard); + try { + do { + if (nanos < 0L) { + boolean bl = false; + return bl; + } + nanos = guard.condition.awaitNanos(nanos); + } while (!guard.isSatisfied()); + boolean bl = true; + return bl; + } + finally { + this.endWaitingFor(guard); + } + } + + @Beta + public static abstract class Guard { + final Monitor monitor; + final Condition condition; + @GuardedBy(value="monitor.lock") + int waiterCount = 0; + @GuardedBy(value="monitor.lock") + Guard next; + + protected Guard(Monitor monitor) { + this.monitor = Preconditions.checkNotNull(monitor, "monitor"); + this.condition = monitor.lock.newCondition(); + } + + public abstract boolean isSatisfied(); + } +} diff --git a/src/com/google/common/util/concurrent/MoreExecutors.java b/src/com/google/common/util/concurrent/MoreExecutors.java new file mode 100644 index 0000000..149851e --- /dev/null +++ b/src/com/google/common/util/concurrent/MoreExecutors.java @@ -0,0 +1,632 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.util.concurrent; + +import com.google.common.annotations.Beta; +import com.google.common.annotations.VisibleForTesting; +import com.google.common.base.Preconditions; +import com.google.common.base.Supplier; +import com.google.common.base.Throwables; +import com.google.common.collect.Lists; +import com.google.common.collect.Queues; +import com.google.common.util.concurrent.AbstractFuture; +import com.google.common.util.concurrent.AbstractListeningExecutorService; +import com.google.common.util.concurrent.Callables; +import com.google.common.util.concurrent.ForwardingListenableFuture; +import com.google.common.util.concurrent.ListenableFuture; +import com.google.common.util.concurrent.ListenableFutureTask; +import com.google.common.util.concurrent.ListenableScheduledFuture; +import com.google.common.util.concurrent.ListeningExecutorService; +import com.google.common.util.concurrent.ListeningScheduledExecutorService; +import com.google.common.util.concurrent.ThreadFactoryBuilder; +import com.google.common.util.concurrent.WrappingExecutorService; +import com.google.common.util.concurrent.WrappingScheduledExecutorService; +import java.lang.reflect.InvocationTargetException; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.Iterator; +import java.util.List; +import java.util.concurrent.BlockingQueue; +import java.util.concurrent.Callable; +import java.util.concurrent.Delayed; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.Executor; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.Future; +import java.util.concurrent.LinkedBlockingQueue; +import java.util.concurrent.RejectedExecutionException; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.ScheduledFuture; +import java.util.concurrent.ScheduledThreadPoolExecutor; +import java.util.concurrent.ThreadFactory; +import java.util.concurrent.ThreadPoolExecutor; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.TimeoutException; +import java.util.concurrent.locks.Condition; +import java.util.concurrent.locks.Lock; +import java.util.concurrent.locks.ReentrantLock; + +public final class MoreExecutors { + private MoreExecutors() { + } + + @Beta + public static ExecutorService getExitingExecutorService(ThreadPoolExecutor executor, long terminationTimeout, TimeUnit timeUnit) { + return new Application().getExitingExecutorService(executor, terminationTimeout, timeUnit); + } + + @Beta + public static ScheduledExecutorService getExitingScheduledExecutorService(ScheduledThreadPoolExecutor executor, long terminationTimeout, TimeUnit timeUnit) { + return new Application().getExitingScheduledExecutorService(executor, terminationTimeout, timeUnit); + } + + @Beta + public static void addDelayedShutdownHook(ExecutorService service, long terminationTimeout, TimeUnit timeUnit) { + new Application().addDelayedShutdownHook(service, terminationTimeout, timeUnit); + } + + @Beta + public static ExecutorService getExitingExecutorService(ThreadPoolExecutor executor) { + return new Application().getExitingExecutorService(executor); + } + + @Beta + public static ScheduledExecutorService getExitingScheduledExecutorService(ScheduledThreadPoolExecutor executor) { + return new Application().getExitingScheduledExecutorService(executor); + } + + private static void useDaemonThreadFactory(ThreadPoolExecutor executor) { + executor.setThreadFactory(new ThreadFactoryBuilder().setDaemon(true).setThreadFactory(executor.getThreadFactory()).build()); + } + + @Deprecated + public static ListeningExecutorService sameThreadExecutor() { + return new DirectExecutorService(); + } + + public static ListeningExecutorService newDirectExecutorService() { + return new DirectExecutorService(); + } + + public static Executor directExecutor() { + return DirectExecutor.INSTANCE; + } + + public static ListeningExecutorService listeningDecorator(ExecutorService delegate) { + return delegate instanceof ListeningExecutorService ? (ListeningExecutorService)delegate : (delegate instanceof ScheduledExecutorService ? new ScheduledListeningDecorator((ScheduledExecutorService)delegate) : new ListeningDecorator(delegate)); + } + + public static ListeningScheduledExecutorService listeningDecorator(ScheduledExecutorService delegate) { + return delegate instanceof ListeningScheduledExecutorService ? (ListeningScheduledExecutorService)delegate : new ScheduledListeningDecorator(delegate); + } + + static T invokeAnyImpl(ListeningExecutorService executorService, Collection> tasks, boolean timed, long nanos) throws InterruptedException, ExecutionException, TimeoutException { + ExecutionException ee; + ArrayList> futures; + block15: { + Preconditions.checkNotNull(executorService); + int ntasks = tasks.size(); + Preconditions.checkArgument(ntasks > 0); + futures = Lists.newArrayListWithCapacity(ntasks); + LinkedBlockingQueue> futureQueue = Queues.newLinkedBlockingQueue(); + ee = null; + long lastTime = timed ? System.nanoTime() : 0L; + Iterator> it = tasks.iterator(); + futures.add(MoreExecutors.submitAndAddQueueListener(executorService, it.next(), futureQueue)); + --ntasks; + int active = 1; + while (true) { + Object now22; + Future f; + if ((f = (Future)futureQueue.poll()) == null) { + if (ntasks > 0) { + --ntasks; + futures.add(MoreExecutors.submitAndAddQueueListener(executorService, it.next(), futureQueue)); + ++active; + } else { + if (active == 0) break; + if (timed) { + f = (Future)futureQueue.poll(nanos, TimeUnit.NANOSECONDS); + if (f == null) { + throw new TimeoutException(); + } + long now22 = System.nanoTime(); + nanos -= now22 - lastTime; + lastTime = now22; + } else { + f = (Future)futureQueue.take(); + } + } + } + if (f == null) continue; + --active; + try { + now22 = f.get(); + } + catch (ExecutionException eex) { + ee = eex; + continue; + } + catch (RuntimeException rex) { + ee = new ExecutionException(rex); + continue; + } + return (T)now22; + break; + } + if (ee != null) break block15; + ee = new ExecutionException(null); + } + throw ee; + finally { + for (Future future : futures) { + future.cancel(true); + } + } + } + + private static ListenableFuture submitAndAddQueueListener(ListeningExecutorService executorService, Callable task, final BlockingQueue> queue) { + final ListenableFuture future = executorService.submit(task); + future.addListener(new Runnable(){ + + @Override + public void run() { + queue.add(future); + } + }, MoreExecutors.directExecutor()); + return future; + } + + @Beta + public static ThreadFactory platformThreadFactory() { + if (!MoreExecutors.isAppEngine()) { + return Executors.defaultThreadFactory(); + } + try { + return (ThreadFactory)Class.forName("com.google.appengine.api.ThreadManager").getMethod("currentRequestThreadFactory", new Class[0]).invoke(null, new Object[0]); + } + catch (IllegalAccessException e) { + throw new RuntimeException("Couldn't invoke ThreadManager.currentRequestThreadFactory", e); + } + catch (ClassNotFoundException e) { + throw new RuntimeException("Couldn't invoke ThreadManager.currentRequestThreadFactory", e); + } + catch (NoSuchMethodException e) { + throw new RuntimeException("Couldn't invoke ThreadManager.currentRequestThreadFactory", e); + } + catch (InvocationTargetException e) { + throw Throwables.propagate(e.getCause()); + } + } + + private static boolean isAppEngine() { + if (System.getProperty("com.google.appengine.runtime.environment") == null) { + return false; + } + try { + return Class.forName("com.google.apphosting.api.ApiProxy").getMethod("getCurrentEnvironment", new Class[0]).invoke(null, new Object[0]) != null; + } + catch (ClassNotFoundException e) { + return false; + } + catch (InvocationTargetException e) { + return false; + } + catch (IllegalAccessException e) { + return false; + } + catch (NoSuchMethodException e) { + return false; + } + } + + static Thread newThread(String name, Runnable runnable) { + Preconditions.checkNotNull(name); + Preconditions.checkNotNull(runnable); + Thread result = MoreExecutors.platformThreadFactory().newThread(runnable); + try { + result.setName(name); + } + catch (SecurityException securityException) { + // empty catch block + } + return result; + } + + static Executor renamingDecorator(final Executor executor, final Supplier nameSupplier) { + Preconditions.checkNotNull(executor); + Preconditions.checkNotNull(nameSupplier); + if (MoreExecutors.isAppEngine()) { + return executor; + } + return new Executor(){ + + @Override + public void execute(Runnable command) { + executor.execute(Callables.threadRenaming(command, (Supplier)nameSupplier)); + } + }; + } + + static ExecutorService renamingDecorator(ExecutorService service, final Supplier nameSupplier) { + Preconditions.checkNotNull(service); + Preconditions.checkNotNull(nameSupplier); + if (MoreExecutors.isAppEngine()) { + return service; + } + return new WrappingExecutorService(service){ + + @Override + protected Callable wrapTask(Callable callable) { + return Callables.threadRenaming(callable, (Supplier)nameSupplier); + } + + @Override + protected Runnable wrapTask(Runnable command) { + return Callables.threadRenaming(command, (Supplier)nameSupplier); + } + }; + } + + static ScheduledExecutorService renamingDecorator(ScheduledExecutorService service, final Supplier nameSupplier) { + Preconditions.checkNotNull(service); + Preconditions.checkNotNull(nameSupplier); + if (MoreExecutors.isAppEngine()) { + return service; + } + return new WrappingScheduledExecutorService(service){ + + @Override + protected Callable wrapTask(Callable callable) { + return Callables.threadRenaming(callable, (Supplier)nameSupplier); + } + + @Override + protected Runnable wrapTask(Runnable command) { + return Callables.threadRenaming(command, (Supplier)nameSupplier); + } + }; + } + + @Beta + public static boolean shutdownAndAwaitTermination(ExecutorService service, long timeout, TimeUnit unit) { + Preconditions.checkNotNull(unit); + service.shutdown(); + try { + long halfTimeoutNanos = TimeUnit.NANOSECONDS.convert(timeout, unit) / 2L; + if (!service.awaitTermination(halfTimeoutNanos, TimeUnit.NANOSECONDS)) { + service.shutdownNow(); + service.awaitTermination(halfTimeoutNanos, TimeUnit.NANOSECONDS); + } + } + catch (InterruptedException ie) { + Thread.currentThread().interrupt(); + service.shutdownNow(); + } + return service.isTerminated(); + } + + private static class ScheduledListeningDecorator + extends ListeningDecorator + implements ListeningScheduledExecutorService { + final ScheduledExecutorService delegate; + + ScheduledListeningDecorator(ScheduledExecutorService delegate) { + super(delegate); + this.delegate = Preconditions.checkNotNull(delegate); + } + + @Override + public ListenableScheduledFuture schedule(Runnable command, long delay, TimeUnit unit) { + ListenableFutureTask task = ListenableFutureTask.create(command, null); + ScheduledFuture scheduled = this.delegate.schedule(task, delay, unit); + return new ListenableScheduledTask(task, scheduled); + } + + @Override + public ListenableScheduledFuture schedule(Callable callable, long delay, TimeUnit unit) { + ListenableFutureTask task = ListenableFutureTask.create(callable); + ScheduledFuture scheduled = this.delegate.schedule(task, delay, unit); + return new ListenableScheduledTask(task, scheduled); + } + + @Override + public ListenableScheduledFuture scheduleAtFixedRate(Runnable command, long initialDelay, long period, TimeUnit unit) { + NeverSuccessfulListenableFutureTask task = new NeverSuccessfulListenableFutureTask(command); + ScheduledFuture scheduled = this.delegate.scheduleAtFixedRate(task, initialDelay, period, unit); + return new ListenableScheduledTask(task, scheduled); + } + + @Override + public ListenableScheduledFuture scheduleWithFixedDelay(Runnable command, long initialDelay, long delay, TimeUnit unit) { + NeverSuccessfulListenableFutureTask task = new NeverSuccessfulListenableFutureTask(command); + ScheduledFuture scheduled = this.delegate.scheduleWithFixedDelay(task, initialDelay, delay, unit); + return new ListenableScheduledTask(task, scheduled); + } + + private static final class NeverSuccessfulListenableFutureTask + extends AbstractFuture + implements Runnable { + private final Runnable delegate; + + public NeverSuccessfulListenableFutureTask(Runnable delegate) { + this.delegate = Preconditions.checkNotNull(delegate); + } + + @Override + public void run() { + try { + this.delegate.run(); + } + catch (Throwable t) { + this.setException(t); + throw Throwables.propagate(t); + } + } + } + + private static final class ListenableScheduledTask + extends ForwardingListenableFuture.SimpleForwardingListenableFuture + implements ListenableScheduledFuture { + private final ScheduledFuture scheduledDelegate; + + public ListenableScheduledTask(ListenableFuture listenableDelegate, ScheduledFuture scheduledDelegate) { + super(listenableDelegate); + this.scheduledDelegate = scheduledDelegate; + } + + @Override + public boolean cancel(boolean mayInterruptIfRunning) { + boolean cancelled = super.cancel(mayInterruptIfRunning); + if (cancelled) { + this.scheduledDelegate.cancel(mayInterruptIfRunning); + } + return cancelled; + } + + @Override + public long getDelay(TimeUnit unit) { + return this.scheduledDelegate.getDelay(unit); + } + + @Override + public int compareTo(Delayed other) { + return this.scheduledDelegate.compareTo(other); + } + } + } + + private static class ListeningDecorator + extends AbstractListeningExecutorService { + private final ExecutorService delegate; + + ListeningDecorator(ExecutorService delegate) { + this.delegate = Preconditions.checkNotNull(delegate); + } + + @Override + public boolean awaitTermination(long timeout, TimeUnit unit) throws InterruptedException { + return this.delegate.awaitTermination(timeout, unit); + } + + @Override + public boolean isShutdown() { + return this.delegate.isShutdown(); + } + + @Override + public boolean isTerminated() { + return this.delegate.isTerminated(); + } + + @Override + public void shutdown() { + this.delegate.shutdown(); + } + + @Override + public List shutdownNow() { + return this.delegate.shutdownNow(); + } + + @Override + public void execute(Runnable command) { + this.delegate.execute(command); + } + } + + private static enum DirectExecutor implements Executor + { + INSTANCE; + + + @Override + public void execute(Runnable command) { + command.run(); + } + } + + private static class DirectExecutorService + extends AbstractListeningExecutorService { + private final Lock lock = new ReentrantLock(); + private final Condition termination = this.lock.newCondition(); + private int runningTasks = 0; + private boolean shutdown = false; + + private DirectExecutorService() { + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public void execute(Runnable command) { + this.startTask(); + try { + command.run(); + } + finally { + this.endTask(); + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public boolean isShutdown() { + this.lock.lock(); + try { + boolean bl = this.shutdown; + return bl; + } + finally { + this.lock.unlock(); + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public void shutdown() { + this.lock.lock(); + try { + this.shutdown = true; + } + finally { + this.lock.unlock(); + } + } + + @Override + public List shutdownNow() { + this.shutdown(); + return Collections.emptyList(); + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public boolean isTerminated() { + this.lock.lock(); + try { + boolean bl = this.shutdown && this.runningTasks == 0; + return bl; + } + finally { + this.lock.unlock(); + } + } + + @Override + public boolean awaitTermination(long timeout, TimeUnit unit) throws InterruptedException { + long nanos = unit.toNanos(timeout); + this.lock.lock(); + try { + while (true) { + if (this.isTerminated()) { + boolean bl = true; + return bl; + } + if (nanos <= 0L) { + boolean bl = false; + return bl; + } + nanos = this.termination.awaitNanos(nanos); + } + } + finally { + this.lock.unlock(); + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + private void startTask() { + this.lock.lock(); + try { + if (this.isShutdown()) { + throw new RejectedExecutionException("Executor already shutdown"); + } + ++this.runningTasks; + } + finally { + this.lock.unlock(); + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + private void endTask() { + this.lock.lock(); + try { + --this.runningTasks; + if (this.isTerminated()) { + this.termination.signalAll(); + } + } + finally { + this.lock.unlock(); + } + } + } + + @VisibleForTesting + static class Application { + Application() { + } + + final ExecutorService getExitingExecutorService(ThreadPoolExecutor executor, long terminationTimeout, TimeUnit timeUnit) { + MoreExecutors.useDaemonThreadFactory(executor); + ExecutorService service = Executors.unconfigurableExecutorService(executor); + this.addDelayedShutdownHook(service, terminationTimeout, timeUnit); + return service; + } + + final ScheduledExecutorService getExitingScheduledExecutorService(ScheduledThreadPoolExecutor executor, long terminationTimeout, TimeUnit timeUnit) { + MoreExecutors.useDaemonThreadFactory(executor); + ScheduledExecutorService service = Executors.unconfigurableScheduledExecutorService(executor); + this.addDelayedShutdownHook(service, terminationTimeout, timeUnit); + return service; + } + + final void addDelayedShutdownHook(final ExecutorService service, final long terminationTimeout, final TimeUnit timeUnit) { + Preconditions.checkNotNull(service); + Preconditions.checkNotNull(timeUnit); + String string = String.valueOf(String.valueOf(service)); + this.addShutdownHook(MoreExecutors.newThread(new StringBuilder(24 + string.length()).append("DelayedShutdownHook-for-").append(string).toString(), new Runnable(){ + + @Override + public void run() { + try { + service.shutdown(); + service.awaitTermination(terminationTimeout, timeUnit); + } + catch (InterruptedException interruptedException) { + // empty catch block + } + } + })); + } + + final ExecutorService getExitingExecutorService(ThreadPoolExecutor executor) { + return this.getExitingExecutorService(executor, 120L, TimeUnit.SECONDS); + } + + final ScheduledExecutorService getExitingScheduledExecutorService(ScheduledThreadPoolExecutor executor) { + return this.getExitingScheduledExecutorService(executor, 120L, TimeUnit.SECONDS); + } + + @VisibleForTesting + void addShutdownHook(Thread hook) { + Runtime.getRuntime().addShutdownHook(hook); + } + } +} diff --git a/src/com/google/common/util/concurrent/RateLimiter.java b/src/com/google/common/util/concurrent/RateLimiter.java new file mode 100644 index 0000000..2844770 --- /dev/null +++ b/src/com/google/common/util/concurrent/RateLimiter.java @@ -0,0 +1,191 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.util.concurrent; + +import com.google.common.annotations.Beta; +import com.google.common.annotations.VisibleForTesting; +import com.google.common.base.Preconditions; +import com.google.common.base.Stopwatch; +import com.google.common.util.concurrent.SmoothRateLimiter; +import com.google.common.util.concurrent.Uninterruptibles; +import java.util.concurrent.TimeUnit; +import javax.annotation.concurrent.ThreadSafe; + +@ThreadSafe +@Beta +public abstract class RateLimiter { + private final SleepingStopwatch stopwatch; + private volatile Object mutexDoNotUseDirectly; + + public static RateLimiter create(double permitsPerSecond) { + return RateLimiter.create(SleepingStopwatch.createFromSystemTimer(), permitsPerSecond); + } + + @VisibleForTesting + static RateLimiter create(SleepingStopwatch stopwatch, double permitsPerSecond) { + SmoothRateLimiter.SmoothBursty rateLimiter = new SmoothRateLimiter.SmoothBursty(stopwatch, 1.0); + rateLimiter.setRate(permitsPerSecond); + return rateLimiter; + } + + public static RateLimiter create(double permitsPerSecond, long warmupPeriod, TimeUnit unit) { + Preconditions.checkArgument(warmupPeriod >= 0L, "warmupPeriod must not be negative: %s", warmupPeriod); + return RateLimiter.create(SleepingStopwatch.createFromSystemTimer(), permitsPerSecond, warmupPeriod, unit); + } + + @VisibleForTesting + static RateLimiter create(SleepingStopwatch stopwatch, double permitsPerSecond, long warmupPeriod, TimeUnit unit) { + SmoothRateLimiter.SmoothWarmingUp rateLimiter = new SmoothRateLimiter.SmoothWarmingUp(stopwatch, warmupPeriod, unit); + rateLimiter.setRate(permitsPerSecond); + return rateLimiter; + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + private Object mutex() { + Object mutex = this.mutexDoNotUseDirectly; + if (mutex == null) { + RateLimiter rateLimiter = this; + synchronized (rateLimiter) { + mutex = this.mutexDoNotUseDirectly; + if (mutex == null) { + this.mutexDoNotUseDirectly = mutex = new Object(); + } + } + } + return mutex; + } + + RateLimiter(SleepingStopwatch stopwatch) { + this.stopwatch = Preconditions.checkNotNull(stopwatch); + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + public final void setRate(double permitsPerSecond) { + Preconditions.checkArgument(permitsPerSecond > 0.0 && !Double.isNaN(permitsPerSecond), "rate must be positive"); + Object object = this.mutex(); + synchronized (object) { + this.doSetRate(permitsPerSecond, this.stopwatch.readMicros()); + } + } + + abstract void doSetRate(double var1, long var3); + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + public final double getRate() { + Object object = this.mutex(); + synchronized (object) { + return this.doGetRate(); + } + } + + abstract double doGetRate(); + + public double acquire() { + return this.acquire(1); + } + + public double acquire(int permits) { + long microsToWait = this.reserve(permits); + this.stopwatch.sleepMicrosUninterruptibly(microsToWait); + return 1.0 * (double)microsToWait / (double)TimeUnit.SECONDS.toMicros(1L); + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + final long reserve(int permits) { + RateLimiter.checkPermits(permits); + Object object = this.mutex(); + synchronized (object) { + return this.reserveAndGetWaitLength(permits, this.stopwatch.readMicros()); + } + } + + public boolean tryAcquire(long timeout, TimeUnit unit) { + return this.tryAcquire(1, timeout, unit); + } + + public boolean tryAcquire(int permits) { + return this.tryAcquire(permits, 0L, TimeUnit.MICROSECONDS); + } + + public boolean tryAcquire() { + return this.tryAcquire(1, 0L, TimeUnit.MICROSECONDS); + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + public boolean tryAcquire(int permits, long timeout, TimeUnit unit) { + long microsToWait; + long timeoutMicros = Math.max(unit.toMicros(timeout), 0L); + RateLimiter.checkPermits(permits); + Object object = this.mutex(); + synchronized (object) { + long nowMicros = this.stopwatch.readMicros(); + if (!this.canAcquire(nowMicros, timeoutMicros)) { + return false; + } + microsToWait = this.reserveAndGetWaitLength(permits, nowMicros); + } + this.stopwatch.sleepMicrosUninterruptibly(microsToWait); + return true; + } + + private boolean canAcquire(long nowMicros, long timeoutMicros) { + return this.queryEarliestAvailable(nowMicros) - timeoutMicros <= nowMicros; + } + + final long reserveAndGetWaitLength(int permits, long nowMicros) { + long momentAvailable = this.reserveEarliestAvailable(permits, nowMicros); + return Math.max(momentAvailable - nowMicros, 0L); + } + + abstract long queryEarliestAvailable(long var1); + + abstract long reserveEarliestAvailable(int var1, long var2); + + public String toString() { + return String.format("RateLimiter[stableRate=%3.1fqps]", this.getRate()); + } + + private static int checkPermits(int permits) { + Preconditions.checkArgument(permits > 0, "Requested permits (%s) must be positive", permits); + return permits; + } + + @VisibleForTesting + static abstract class SleepingStopwatch { + SleepingStopwatch() { + } + + abstract long readMicros(); + + abstract void sleepMicrosUninterruptibly(long var1); + + static final SleepingStopwatch createFromSystemTimer() { + return new SleepingStopwatch(){ + final Stopwatch stopwatch = Stopwatch.createStarted(); + + @Override + long readMicros() { + return this.stopwatch.elapsed(TimeUnit.MICROSECONDS); + } + + @Override + void sleepMicrosUninterruptibly(long micros) { + if (micros > 0L) { + Uninterruptibles.sleepUninterruptibly(micros, TimeUnit.MICROSECONDS); + } + } + }; + } + } +} diff --git a/src/com/google/common/util/concurrent/Runnables.java b/src/com/google/common/util/concurrent/Runnables.java new file mode 100644 index 0000000..cb18196 --- /dev/null +++ b/src/com/google/common/util/concurrent/Runnables.java @@ -0,0 +1,25 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.util.concurrent; + +import com.google.common.annotations.Beta; +import com.google.common.annotations.GwtCompatible; + +@Beta +@GwtCompatible +public final class Runnables { + private static final Runnable EMPTY_RUNNABLE = new Runnable(){ + + @Override + public void run() { + } + }; + + public static Runnable doNothing() { + return EMPTY_RUNNABLE; + } + + private Runnables() { + } +} diff --git a/src/com/google/common/util/concurrent/SerializingExecutor.java b/src/com/google/common/util/concurrent/SerializingExecutor.java new file mode 100644 index 0000000..62411ef --- /dev/null +++ b/src/com/google/common/util/concurrent/SerializingExecutor.java @@ -0,0 +1,116 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.util.concurrent; + +import com.google.common.base.Preconditions; +import java.util.ArrayDeque; +import java.util.Queue; +import java.util.concurrent.Executor; +import java.util.logging.Level; +import java.util.logging.Logger; +import javax.annotation.concurrent.GuardedBy; + +final class SerializingExecutor +implements Executor { + private static final Logger log = Logger.getLogger(SerializingExecutor.class.getName()); + private final Executor executor; + @GuardedBy(value="internalLock") + private final Queue waitQueue = new ArrayDeque(); + @GuardedBy(value="internalLock") + private boolean isThreadScheduled = false; + private final TaskRunner taskRunner = new TaskRunner(); + private final Object internalLock = new Object(){ + + public String toString() { + String string = String.valueOf(super.toString()); + return string.length() != 0 ? "SerializingExecutor lock: ".concat(string) : new String("SerializingExecutor lock: "); + } + }; + + public SerializingExecutor(Executor executor) { + Preconditions.checkNotNull(executor, "'executor' must not be null."); + this.executor = executor; + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public void execute(Runnable r) { + Preconditions.checkNotNull(r, "'r' must not be null."); + boolean scheduleTaskRunner = false; + Object object = this.internalLock; + synchronized (object) { + this.waitQueue.add(r); + if (!this.isThreadScheduled) { + this.isThreadScheduled = true; + scheduleTaskRunner = true; + } + } + if (scheduleTaskRunner) { + boolean threw = true; + try { + this.executor.execute(this.taskRunner); + threw = false; + } + finally { + if (threw) { + Object object2 = this.internalLock; + synchronized (object2) { + this.isThreadScheduled = false; + } + } + } + } + } + + private class TaskRunner + implements Runnable { + private TaskRunner() { + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public void run() { + block18: { + boolean stillRunning = true; + block14: while (true) { + while (true) { + Runnable nextToRun; + Preconditions.checkState(SerializingExecutor.this.isThreadScheduled); + Object object = SerializingExecutor.this.internalLock; + synchronized (object) { + nextToRun = (Runnable)SerializingExecutor.this.waitQueue.poll(); + if (nextToRun == null) { + SerializingExecutor.this.isThreadScheduled = false; + stillRunning = false; + break block18; + } + } + try { + nextToRun.run(); + continue block14; + } + catch (RuntimeException e) { + String string = String.valueOf(String.valueOf(nextToRun)); + log.log(Level.SEVERE, new StringBuilder(35 + string.length()).append("Exception while executing runnable ").append(string).toString(), e); + continue; + } + break; + } + } + finally { + if (stillRunning) { + Object object = SerializingExecutor.this.internalLock; + synchronized (object) { + SerializingExecutor.this.isThreadScheduled = false; + } + } + } + } + } + } +} diff --git a/src/com/google/common/util/concurrent/Service.java b/src/com/google/common/util/concurrent/Service.java new file mode 100644 index 0000000..47a0c6f --- /dev/null +++ b/src/com/google/common/util/concurrent/Service.java @@ -0,0 +1,104 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.util.concurrent; + +import com.google.common.annotations.Beta; +import java.util.concurrent.Executor; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.TimeoutException; + +@Beta +public interface Service { + public Service startAsync(); + + public boolean isRunning(); + + public State state(); + + public Service stopAsync(); + + public void awaitRunning(); + + public void awaitRunning(long var1, TimeUnit var3) throws TimeoutException; + + public void awaitTerminated(); + + public void awaitTerminated(long var1, TimeUnit var3) throws TimeoutException; + + public Throwable failureCause(); + + public void addListener(Listener var1, Executor var2); + + @Beta + public static abstract class Listener { + public void starting() { + } + + public void running() { + } + + public void stopping(State from) { + } + + public void terminated(State from) { + } + + public void failed(State from, Throwable failure) { + } + } + + @Beta + public static enum State { + NEW{ + + @Override + boolean isTerminal() { + return false; + } + } + , + STARTING{ + + @Override + boolean isTerminal() { + return false; + } + } + , + RUNNING{ + + @Override + boolean isTerminal() { + return false; + } + } + , + STOPPING{ + + @Override + boolean isTerminal() { + return false; + } + } + , + TERMINATED{ + + @Override + boolean isTerminal() { + return true; + } + } + , + FAILED{ + + @Override + boolean isTerminal() { + return true; + } + }; + + + abstract boolean isTerminal(); + } +} diff --git a/src/com/google/common/util/concurrent/ServiceManager.java b/src/com/google/common/util/concurrent/ServiceManager.java new file mode 100644 index 0000000..6fd7f39 --- /dev/null +++ b/src/com/google/common/util/concurrent/ServiceManager.java @@ -0,0 +1,528 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.util.concurrent; + +import com.google.common.annotations.Beta; +import com.google.common.base.Function; +import com.google.common.base.MoreObjects; +import com.google.common.base.Preconditions; +import com.google.common.base.Predicates; +import com.google.common.base.Stopwatch; +import com.google.common.base.Supplier; +import com.google.common.collect.Collections2; +import com.google.common.collect.ImmutableCollection; +import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableMap; +import com.google.common.collect.ImmutableMultimap; +import com.google.common.collect.ImmutableSet; +import com.google.common.collect.ImmutableSetMultimap; +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import com.google.common.collect.Multimaps; +import com.google.common.collect.Multiset; +import com.google.common.collect.Ordering; +import com.google.common.collect.SetMultimap; +import com.google.common.collect.Sets; +import com.google.common.util.concurrent.AbstractService; +import com.google.common.util.concurrent.ListenerCallQueue; +import com.google.common.util.concurrent.Monitor; +import com.google.common.util.concurrent.MoreExecutors; +import com.google.common.util.concurrent.Service; +import java.lang.ref.WeakReference; +import java.util.ArrayList; +import java.util.Collections; +import java.util.EnumMap; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.concurrent.Executor; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.TimeoutException; +import java.util.logging.Level; +import java.util.logging.Logger; +import javax.annotation.concurrent.GuardedBy; + +@Beta +public final class ServiceManager { + private static final Logger logger = Logger.getLogger(ServiceManager.class.getName()); + private static final ListenerCallQueue.Callback HEALTHY_CALLBACK = new ListenerCallQueue.Callback("healthy()"){ + + @Override + void call(Listener listener) { + listener.healthy(); + } + }; + private static final ListenerCallQueue.Callback STOPPED_CALLBACK = new ListenerCallQueue.Callback("stopped()"){ + + @Override + void call(Listener listener) { + listener.stopped(); + } + }; + private final ServiceManagerState state; + private final ImmutableList services; + + public ServiceManager(Iterable services) { + ImmutableList copy = ImmutableList.copyOf(services); + if (copy.isEmpty()) { + logger.log(Level.WARNING, "ServiceManager configured with no services. Is your application configured properly?", new EmptyServiceManagerWarning()); + copy = ImmutableList.of(new NoOpService()); + } + this.state = new ServiceManagerState(copy); + this.services = copy; + WeakReference stateReference = new WeakReference(this.state); + for (Service service : copy) { + service.addListener(new ServiceListener(service, stateReference), MoreExecutors.directExecutor()); + Preconditions.checkArgument(service.state() == Service.State.NEW, "Can only manage NEW services, %s", service); + } + this.state.markReady(); + } + + public void addListener(Listener listener, Executor executor) { + this.state.addListener(listener, executor); + } + + public void addListener(Listener listener) { + this.state.addListener(listener, MoreExecutors.directExecutor()); + } + + public ServiceManager startAsync() { + for (Service service : this.services) { + Service.State state = service.state(); + Preconditions.checkState(state == Service.State.NEW, "Service %s is %s, cannot start it.", new Object[]{service, state}); + } + for (Service service : this.services) { + try { + this.state.tryStartTiming(service); + service.startAsync(); + } + catch (IllegalStateException e) { + String string = String.valueOf(String.valueOf(service)); + logger.log(Level.WARNING, new StringBuilder(24 + string.length()).append("Unable to start Service ").append(string).toString(), e); + } + } + return this; + } + + public void awaitHealthy() { + this.state.awaitHealthy(); + } + + public void awaitHealthy(long timeout, TimeUnit unit) throws TimeoutException { + this.state.awaitHealthy(timeout, unit); + } + + public ServiceManager stopAsync() { + for (Service service : this.services) { + service.stopAsync(); + } + return this; + } + + public void awaitStopped() { + this.state.awaitStopped(); + } + + public void awaitStopped(long timeout, TimeUnit unit) throws TimeoutException { + this.state.awaitStopped(timeout, unit); + } + + public boolean isHealthy() { + for (Service service : this.services) { + if (service.isRunning()) continue; + return false; + } + return true; + } + + public ImmutableMultimap servicesByState() { + return this.state.servicesByState(); + } + + public ImmutableMap startupTimes() { + return this.state.startupTimes(); + } + + public String toString() { + return MoreObjects.toStringHelper(ServiceManager.class).add("services", Collections2.filter(this.services, Predicates.not(Predicates.instanceOf(NoOpService.class)))).toString(); + } + + private static final class EmptyServiceManagerWarning + extends Throwable { + private EmptyServiceManagerWarning() { + } + } + + private static final class NoOpService + extends AbstractService { + private NoOpService() { + } + + @Override + protected void doStart() { + this.notifyStarted(); + } + + @Override + protected void doStop() { + this.notifyStopped(); + } + } + + private static final class ServiceListener + extends Service.Listener { + final Service service; + final WeakReference state; + + ServiceListener(Service service, WeakReference state) { + this.service = service; + this.state = state; + } + + @Override + public void starting() { + ServiceManagerState state = (ServiceManagerState)this.state.get(); + if (state != null) { + state.transitionService(this.service, Service.State.NEW, Service.State.STARTING); + if (!(this.service instanceof NoOpService)) { + logger.log(Level.FINE, "Starting {0}.", this.service); + } + } + } + + @Override + public void running() { + ServiceManagerState state = (ServiceManagerState)this.state.get(); + if (state != null) { + state.transitionService(this.service, Service.State.STARTING, Service.State.RUNNING); + } + } + + @Override + public void stopping(Service.State from) { + ServiceManagerState state = (ServiceManagerState)this.state.get(); + if (state != null) { + state.transitionService(this.service, from, Service.State.STOPPING); + } + } + + @Override + public void terminated(Service.State from) { + ServiceManagerState state = (ServiceManagerState)this.state.get(); + if (state != null) { + if (!(this.service instanceof NoOpService)) { + logger.log(Level.FINE, "Service {0} has terminated. Previous state was: {1}", new Object[]{this.service, from}); + } + state.transitionService(this.service, from, Service.State.TERMINATED); + } + } + + @Override + public void failed(Service.State from, Throwable failure) { + ServiceManagerState state = (ServiceManagerState)this.state.get(); + if (state != null) { + if (!(this.service instanceof NoOpService)) { + String string = String.valueOf(String.valueOf(this.service)); + String string2 = String.valueOf(String.valueOf((Object)from)); + logger.log(Level.SEVERE, new StringBuilder(34 + string.length() + string2.length()).append("Service ").append(string).append(" has failed in the ").append(string2).append(" state.").toString(), failure); + } + state.transitionService(this.service, from, Service.State.FAILED); + } + } + } + + private static final class ServiceManagerState { + final Monitor monitor = new Monitor(); + @GuardedBy(value="monitor") + final SetMultimap servicesByState = Multimaps.newSetMultimap(new EnumMap(Service.State.class), new Supplier>(){ + + @Override + public Set get() { + return Sets.newLinkedHashSet(); + } + }); + @GuardedBy(value="monitor") + final Multiset states = this.servicesByState.keys(); + @GuardedBy(value="monitor") + final Map startupTimers = Maps.newIdentityHashMap(); + @GuardedBy(value="monitor") + boolean ready; + @GuardedBy(value="monitor") + boolean transitioned; + final int numberOfServices; + final Monitor.Guard awaitHealthGuard = new Monitor.Guard(this.monitor){ + + @Override + public boolean isSatisfied() { + return ServiceManagerState.this.states.count((Object)Service.State.RUNNING) == ServiceManagerState.this.numberOfServices || ServiceManagerState.this.states.contains((Object)Service.State.STOPPING) || ServiceManagerState.this.states.contains((Object)Service.State.TERMINATED) || ServiceManagerState.this.states.contains((Object)Service.State.FAILED); + } + }; + final Monitor.Guard stoppedGuard = new Monitor.Guard(this.monitor){ + + @Override + public boolean isSatisfied() { + return ServiceManagerState.this.states.count((Object)Service.State.TERMINATED) + ServiceManagerState.this.states.count((Object)Service.State.FAILED) == ServiceManagerState.this.numberOfServices; + } + }; + @GuardedBy(value="monitor") + final List> listeners = Collections.synchronizedList(new ArrayList()); + + ServiceManagerState(ImmutableCollection services) { + this.numberOfServices = services.size(); + this.servicesByState.putAll(Service.State.NEW, services); + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + void tryStartTiming(Service service) { + this.monitor.enter(); + try { + Stopwatch stopwatch = this.startupTimers.get(service); + if (stopwatch == null) { + this.startupTimers.put(service, Stopwatch.createStarted()); + } + } + finally { + this.monitor.leave(); + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + void markReady() { + block5: { + this.monitor.enter(); + try { + if (!this.transitioned) { + this.ready = true; + break block5; + } + ArrayList servicesInBadStates = Lists.newArrayList(); + for (Service service : this.servicesByState().values()) { + if (service.state() == Service.State.NEW) continue; + servicesInBadStates.add(service); + } + String string = String.valueOf(String.valueOf("Services started transitioning asynchronously before the ServiceManager was constructed: ")); + String string2 = String.valueOf(String.valueOf(servicesInBadStates)); + throw new IllegalArgumentException(new StringBuilder(0 + string.length() + string2.length()).append(string).append(string2).toString()); + } + finally { + this.monitor.leave(); + } + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + void addListener(Listener listener, Executor executor) { + Preconditions.checkNotNull(listener, "listener"); + Preconditions.checkNotNull(executor, "executor"); + this.monitor.enter(); + try { + if (!this.stoppedGuard.isSatisfied()) { + this.listeners.add(new ListenerCallQueue(listener, executor)); + } + } + finally { + this.monitor.leave(); + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + void awaitHealthy() { + this.monitor.enterWhenUninterruptibly(this.awaitHealthGuard); + try { + this.checkHealthy(); + } + finally { + this.monitor.leave(); + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + void awaitHealthy(long timeout, TimeUnit unit) throws TimeoutException { + this.monitor.enter(); + try { + if (!this.monitor.waitForUninterruptibly(this.awaitHealthGuard, timeout, unit)) { + String string = String.valueOf(String.valueOf("Timeout waiting for the services to become healthy. The following services have not started: ")); + String string2 = String.valueOf(String.valueOf(Multimaps.filterKeys(this.servicesByState, Predicates.in(ImmutableSet.of(Service.State.NEW, Service.State.STARTING))))); + throw new TimeoutException(new StringBuilder(0 + string.length() + string2.length()).append(string).append(string2).toString()); + } + this.checkHealthy(); + } + finally { + this.monitor.leave(); + } + } + + void awaitStopped() { + this.monitor.enterWhenUninterruptibly(this.stoppedGuard); + this.monitor.leave(); + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + void awaitStopped(long timeout, TimeUnit unit) throws TimeoutException { + this.monitor.enter(); + try { + if (!this.monitor.waitForUninterruptibly(this.stoppedGuard, timeout, unit)) { + String string = String.valueOf(String.valueOf("Timeout waiting for the services to stop. The following services have not stopped: ")); + String string2 = String.valueOf(String.valueOf(Multimaps.filterKeys(this.servicesByState, Predicates.not(Predicates.in(ImmutableSet.of(Service.State.TERMINATED, Service.State.FAILED)))))); + throw new TimeoutException(new StringBuilder(0 + string.length() + string2.length()).append(string).append(string2).toString()); + } + } + finally { + this.monitor.leave(); + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + ImmutableMultimap servicesByState() { + ImmutableSetMultimap.Builder builder = ImmutableSetMultimap.builder(); + this.monitor.enter(); + try { + for (Map.Entry entry : this.servicesByState.entries()) { + if (entry.getValue() instanceof NoOpService) continue; + builder.put((Object)entry.getKey(), entry.getValue()); + } + } + finally { + this.monitor.leave(); + } + return builder.build(); + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + ImmutableMap startupTimes() { + ArrayList> loadTimes; + this.monitor.enter(); + try { + loadTimes = Lists.newArrayListWithCapacity(this.startupTimers.size()); + for (Map.Entry entry : this.startupTimers.entrySet()) { + Service service = entry.getKey(); + Stopwatch stopWatch = entry.getValue(); + if (stopWatch.isRunning() || service instanceof NoOpService) continue; + loadTimes.add(Maps.immutableEntry(service, stopWatch.elapsed(TimeUnit.MILLISECONDS))); + } + } + finally { + this.monitor.leave(); + } + Collections.sort(loadTimes, Ordering.natural().onResultOf(new Function, Long>(){ + + @Override + public Long apply(Map.Entry input) { + return input.getValue(); + } + })); + ImmutableMap.Builder builder = ImmutableMap.builder(); + for (Map.Entry entry : loadTimes) { + builder.put(entry); + } + return builder.build(); + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + void transitionService(Service service, Service.State from, Service.State to) { + Preconditions.checkNotNull(service); + Preconditions.checkArgument(from != to); + this.monitor.enter(); + try { + this.transitioned = true; + if (!this.ready) { + return; + } + Preconditions.checkState(this.servicesByState.remove((Object)from, service), "Service %s not at the expected location in the state map %s", new Object[]{service, from}); + Preconditions.checkState(this.servicesByState.put(to, service), "Service %s in the state map unexpectedly at %s", new Object[]{service, to}); + Stopwatch stopwatch = this.startupTimers.get(service); + if (stopwatch == null) { + stopwatch = Stopwatch.createStarted(); + this.startupTimers.put(service, stopwatch); + } + if (to.compareTo(Service.State.RUNNING) >= 0 && stopwatch.isRunning()) { + stopwatch.stop(); + if (!(service instanceof NoOpService)) { + logger.log(Level.FINE, "Started {0} in {1}.", new Object[]{service, stopwatch}); + } + } + if (to == Service.State.FAILED) { + this.fireFailedListeners(service); + } + if (this.states.count((Object)Service.State.RUNNING) == this.numberOfServices) { + this.fireHealthyListeners(); + } else if (this.states.count((Object)Service.State.TERMINATED) + this.states.count((Object)Service.State.FAILED) == this.numberOfServices) { + this.fireStoppedListeners(); + } + } + finally { + this.monitor.leave(); + this.executeListeners(); + } + } + + @GuardedBy(value="monitor") + void fireStoppedListeners() { + STOPPED_CALLBACK.enqueueOn(this.listeners); + } + + @GuardedBy(value="monitor") + void fireHealthyListeners() { + HEALTHY_CALLBACK.enqueueOn(this.listeners); + } + + @GuardedBy(value="monitor") + void fireFailedListeners(final Service service) { + String string = String.valueOf(String.valueOf(service)); + new ListenerCallQueue.Callback(new StringBuilder(18 + string.length()).append("failed({service=").append(string).append("})").toString()){ + + @Override + void call(Listener listener) { + listener.failure(service); + } + }.enqueueOn(this.listeners); + } + + void executeListeners() { + Preconditions.checkState(!this.monitor.isOccupiedByCurrentThread(), "It is incorrect to execute listeners with the monitor held."); + for (int i = 0; i < this.listeners.size(); ++i) { + this.listeners.get(i).execute(); + } + } + + @GuardedBy(value="monitor") + void checkHealthy() { + if (this.states.count((Object)Service.State.RUNNING) != this.numberOfServices) { + String string = String.valueOf(String.valueOf(Multimaps.filterKeys(this.servicesByState, Predicates.not(Predicates.equalTo(Service.State.RUNNING))))); + IllegalStateException exception = new IllegalStateException(new StringBuilder(79 + string.length()).append("Expected to be healthy after starting. The following services are not running: ").append(string).toString()); + throw exception; + } + } + } + + @Beta + public static abstract class Listener { + public void healthy() { + } + + public void stopped() { + } + + public void failure(Service service) { + } + } +} diff --git a/src/com/google/common/util/concurrent/SettableFuture.java b/src/com/google/common/util/concurrent/SettableFuture.java new file mode 100644 index 0000000..a385b49 --- /dev/null +++ b/src/com/google/common/util/concurrent/SettableFuture.java @@ -0,0 +1,27 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.util.concurrent; + +import com.google.common.util.concurrent.AbstractFuture; +import javax.annotation.Nullable; + +public final class SettableFuture +extends AbstractFuture { + public static SettableFuture create() { + return new SettableFuture(); + } + + private SettableFuture() { + } + + @Override + public boolean set(@Nullable V value) { + return super.set(value); + } + + @Override + public boolean setException(Throwable throwable) { + return super.setException(throwable); + } +} diff --git a/src/com/google/common/util/concurrent/SimpleTimeLimiter.java b/src/com/google/common/util/concurrent/SimpleTimeLimiter.java new file mode 100644 index 0000000..cb0a15a --- /dev/null +++ b/src/com/google/common/util/concurrent/SimpleTimeLimiter.java @@ -0,0 +1,137 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.util.concurrent; + +import com.google.common.annotations.Beta; +import com.google.common.base.Preconditions; +import com.google.common.collect.ObjectArrays; +import com.google.common.collect.Sets; +import com.google.common.util.concurrent.TimeLimiter; +import com.google.common.util.concurrent.UncheckedTimeoutException; +import com.google.common.util.concurrent.Uninterruptibles; +import java.lang.reflect.InvocationHandler; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.lang.reflect.Proxy; +import java.util.HashSet; +import java.util.Set; +import java.util.concurrent.Callable; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.Future; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.TimeoutException; + +@Beta +public final class SimpleTimeLimiter +implements TimeLimiter { + private final ExecutorService executor; + + public SimpleTimeLimiter(ExecutorService executor) { + this.executor = Preconditions.checkNotNull(executor); + } + + public SimpleTimeLimiter() { + this(Executors.newCachedThreadPool()); + } + + @Override + public T newProxy(final T target, Class interfaceType, final long timeoutDuration, final TimeUnit timeoutUnit) { + Preconditions.checkNotNull(target); + Preconditions.checkNotNull(interfaceType); + Preconditions.checkNotNull(timeoutUnit); + Preconditions.checkArgument(timeoutDuration > 0L, "bad timeout: %s", timeoutDuration); + Preconditions.checkArgument(interfaceType.isInterface(), "interfaceType must be an interface type"); + final Set interruptibleMethods = SimpleTimeLimiter.findInterruptibleMethods(interfaceType); + InvocationHandler handler = new InvocationHandler(){ + + @Override + public Object invoke(Object obj, final Method method, final Object[] args) throws Throwable { + Callable callable = new Callable(){ + + @Override + public Object call() throws Exception { + try { + return method.invoke(target, args); + } + catch (InvocationTargetException e) { + SimpleTimeLimiter.throwCause(e, false); + throw new AssertionError((Object)"can't get here"); + } + } + }; + return SimpleTimeLimiter.this.callWithTimeout(callable, timeoutDuration, timeoutUnit, interruptibleMethods.contains(method)); + } + }; + return SimpleTimeLimiter.newProxy(interfaceType, handler); + } + + @Override + public T callWithTimeout(Callable callable, long timeoutDuration, TimeUnit timeoutUnit, boolean amInterruptible) throws Exception { + Preconditions.checkNotNull(callable); + Preconditions.checkNotNull(timeoutUnit); + Preconditions.checkArgument(timeoutDuration > 0L, "timeout must be positive: %s", timeoutDuration); + Future future = this.executor.submit(callable); + try { + if (amInterruptible) { + try { + return future.get(timeoutDuration, timeoutUnit); + } + catch (InterruptedException e) { + future.cancel(true); + throw e; + } + } + return Uninterruptibles.getUninterruptibly(future, timeoutDuration, timeoutUnit); + } + catch (ExecutionException e) { + throw SimpleTimeLimiter.throwCause(e, true); + } + catch (TimeoutException e) { + future.cancel(true); + throw new UncheckedTimeoutException(e); + } + } + + private static Exception throwCause(Exception e, boolean combineStackTraces) throws Exception { + Throwable cause = e.getCause(); + if (cause == null) { + throw e; + } + if (combineStackTraces) { + StackTraceElement[] combined = ObjectArrays.concat(cause.getStackTrace(), e.getStackTrace(), StackTraceElement.class); + cause.setStackTrace(combined); + } + if (cause instanceof Exception) { + throw (Exception)cause; + } + if (cause instanceof Error) { + throw (Error)cause; + } + throw e; + } + + private static Set findInterruptibleMethods(Class interfaceType) { + HashSet set = Sets.newHashSet(); + for (Method m : interfaceType.getMethods()) { + if (!SimpleTimeLimiter.declaresInterruptedEx(m)) continue; + set.add(m); + } + return set; + } + + private static boolean declaresInterruptedEx(Method method) { + for (Class exType : method.getExceptionTypes()) { + if (exType != InterruptedException.class) continue; + return true; + } + return false; + } + + private static T newProxy(Class interfaceType, InvocationHandler handler) { + Object object = Proxy.newProxyInstance(interfaceType.getClassLoader(), new Class[]{interfaceType}, handler); + return interfaceType.cast(object); + } +} diff --git a/src/com/google/common/util/concurrent/SmoothRateLimiter.java b/src/com/google/common/util/concurrent/SmoothRateLimiter.java new file mode 100644 index 0000000..0345542 --- /dev/null +++ b/src/com/google/common/util/concurrent/SmoothRateLimiter.java @@ -0,0 +1,121 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.util.concurrent; + +import com.google.common.util.concurrent.RateLimiter; +import java.util.concurrent.TimeUnit; + +abstract class SmoothRateLimiter +extends RateLimiter { + double storedPermits; + double maxPermits; + double stableIntervalMicros; + private long nextFreeTicketMicros = 0L; + + private SmoothRateLimiter(RateLimiter.SleepingStopwatch stopwatch) { + super(stopwatch); + } + + @Override + final void doSetRate(double permitsPerSecond, long nowMicros) { + double stableIntervalMicros; + this.resync(nowMicros); + this.stableIntervalMicros = stableIntervalMicros = (double)TimeUnit.SECONDS.toMicros(1L) / permitsPerSecond; + this.doSetRate(permitsPerSecond, stableIntervalMicros); + } + + abstract void doSetRate(double var1, double var3); + + @Override + final double doGetRate() { + return (double)TimeUnit.SECONDS.toMicros(1L) / this.stableIntervalMicros; + } + + @Override + final long queryEarliestAvailable(long nowMicros) { + return this.nextFreeTicketMicros; + } + + @Override + final long reserveEarliestAvailable(int requiredPermits, long nowMicros) { + this.resync(nowMicros); + long returnValue = this.nextFreeTicketMicros; + double storedPermitsToSpend = Math.min((double)requiredPermits, this.storedPermits); + double freshPermits = (double)requiredPermits - storedPermitsToSpend; + long waitMicros = this.storedPermitsToWaitTime(this.storedPermits, storedPermitsToSpend) + (long)(freshPermits * this.stableIntervalMicros); + this.nextFreeTicketMicros += waitMicros; + this.storedPermits -= storedPermitsToSpend; + return returnValue; + } + + abstract long storedPermitsToWaitTime(double var1, double var3); + + private void resync(long nowMicros) { + if (nowMicros > this.nextFreeTicketMicros) { + this.storedPermits = Math.min(this.maxPermits, this.storedPermits + (double)(nowMicros - this.nextFreeTicketMicros) / this.stableIntervalMicros); + this.nextFreeTicketMicros = nowMicros; + } + } + + static final class SmoothBursty + extends SmoothRateLimiter { + final double maxBurstSeconds; + + SmoothBursty(RateLimiter.SleepingStopwatch stopwatch, double maxBurstSeconds) { + super(stopwatch); + this.maxBurstSeconds = maxBurstSeconds; + } + + @Override + void doSetRate(double permitsPerSecond, double stableIntervalMicros) { + double oldMaxPermits = this.maxPermits; + this.maxPermits = this.maxBurstSeconds * permitsPerSecond; + this.storedPermits = oldMaxPermits == Double.POSITIVE_INFINITY ? this.maxPermits : (oldMaxPermits == 0.0 ? 0.0 : this.storedPermits * this.maxPermits / oldMaxPermits); + } + + @Override + long storedPermitsToWaitTime(double storedPermits, double permitsToTake) { + return 0L; + } + } + + static final class SmoothWarmingUp + extends SmoothRateLimiter { + private final long warmupPeriodMicros; + private double slope; + private double halfPermits; + + SmoothWarmingUp(RateLimiter.SleepingStopwatch stopwatch, long warmupPeriod, TimeUnit timeUnit) { + super(stopwatch); + this.warmupPeriodMicros = timeUnit.toMicros(warmupPeriod); + } + + @Override + void doSetRate(double permitsPerSecond, double stableIntervalMicros) { + double oldMaxPermits = this.maxPermits; + this.maxPermits = (double)this.warmupPeriodMicros / stableIntervalMicros; + this.halfPermits = this.maxPermits / 2.0; + double coldIntervalMicros = stableIntervalMicros * 3.0; + this.slope = (coldIntervalMicros - stableIntervalMicros) / this.halfPermits; + this.storedPermits = oldMaxPermits == Double.POSITIVE_INFINITY ? 0.0 : (oldMaxPermits == 0.0 ? this.maxPermits : this.storedPermits * this.maxPermits / oldMaxPermits); + } + + @Override + long storedPermitsToWaitTime(double storedPermits, double permitsToTake) { + double availablePermitsAboveHalf = storedPermits - this.halfPermits; + long micros = 0L; + if (availablePermitsAboveHalf > 0.0) { + double permitsAboveHalfToTake = Math.min(availablePermitsAboveHalf, permitsToTake); + micros = (long)(permitsAboveHalfToTake * (this.permitsToTime(availablePermitsAboveHalf) + this.permitsToTime(availablePermitsAboveHalf - permitsAboveHalfToTake)) / 2.0); + permitsToTake -= permitsAboveHalfToTake; + } + micros = (long)((double)micros + this.stableIntervalMicros * permitsToTake); + return micros; + } + + private double permitsToTime(double permits) { + return this.stableIntervalMicros + permits * this.slope; + } + } +} diff --git a/src/com/google/common/util/concurrent/Striped.java b/src/com/google/common/util/concurrent/Striped.java new file mode 100644 index 0000000..2e25590 --- /dev/null +++ b/src/com/google/common/util/concurrent/Striped.java @@ -0,0 +1,301 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.util.concurrent; + +import com.google.common.annotations.Beta; +import com.google.common.annotations.VisibleForTesting; +import com.google.common.base.MoreObjects; +import com.google.common.base.Preconditions; +import com.google.common.base.Supplier; +import com.google.common.collect.ImmutableList; +import com.google.common.collect.Iterables; +import com.google.common.collect.MapMaker; +import com.google.common.math.IntMath; +import java.lang.ref.Reference; +import java.lang.ref.ReferenceQueue; +import java.lang.ref.WeakReference; +import java.math.RoundingMode; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; +import java.util.concurrent.ConcurrentMap; +import java.util.concurrent.Semaphore; +import java.util.concurrent.atomic.AtomicReferenceArray; +import java.util.concurrent.locks.Lock; +import java.util.concurrent.locks.ReadWriteLock; +import java.util.concurrent.locks.ReentrantLock; +import java.util.concurrent.locks.ReentrantReadWriteLock; + +@Beta +public abstract class Striped { + private static final int LARGE_LAZY_CUTOFF = 1024; + private static final Supplier READ_WRITE_LOCK_SUPPLIER = new Supplier(){ + + @Override + public ReadWriteLock get() { + return new ReentrantReadWriteLock(); + } + }; + private static final int ALL_SET = -1; + + private Striped() { + } + + public abstract L get(Object var1); + + public abstract L getAt(int var1); + + abstract int indexFor(Object var1); + + public abstract int size(); + + public Iterable bulkGet(Iterable keys) { + Object[] array = Iterables.toArray(keys, Object.class); + if (array.length == 0) { + return ImmutableList.of(); + } + int[] stripes = new int[array.length]; + for (int i = 0; i < array.length; ++i) { + stripes[i] = this.indexFor(array[i]); + } + Arrays.sort(stripes); + int previousStripe = stripes[0]; + array[0] = this.getAt(previousStripe); + for (int i = 1; i < array.length; ++i) { + int currentStripe = stripes[i]; + if (currentStripe == previousStripe) { + array[i] = array[i - 1]; + continue; + } + array[i] = this.getAt(currentStripe); + previousStripe = currentStripe; + } + List asList = Arrays.asList(array); + return Collections.unmodifiableList(asList); + } + + public static Striped lock(int stripes) { + return new CompactStriped(stripes, new Supplier(){ + + @Override + public Lock get() { + return new PaddedLock(); + } + }); + } + + public static Striped lazyWeakLock(int stripes) { + return Striped.lazy(stripes, new Supplier(){ + + @Override + public Lock get() { + return new ReentrantLock(false); + } + }); + } + + private static Striped lazy(int stripes, Supplier supplier) { + return stripes < 1024 ? new SmallLazyStriped(stripes, supplier) : new LargeLazyStriped(stripes, supplier); + } + + public static Striped semaphore(int stripes, final int permits) { + return new CompactStriped(stripes, new Supplier(){ + + @Override + public Semaphore get() { + return new PaddedSemaphore(permits); + } + }); + } + + public static Striped lazyWeakSemaphore(int stripes, final int permits) { + return Striped.lazy(stripes, new Supplier(){ + + @Override + public Semaphore get() { + return new Semaphore(permits, false); + } + }); + } + + public static Striped readWriteLock(int stripes) { + return new CompactStriped(stripes, READ_WRITE_LOCK_SUPPLIER); + } + + public static Striped lazyWeakReadWriteLock(int stripes) { + return Striped.lazy(stripes, READ_WRITE_LOCK_SUPPLIER); + } + + private static int ceilToPowerOfTwo(int x) { + return 1 << IntMath.log2(x, RoundingMode.CEILING); + } + + private static int smear(int hashCode) { + hashCode ^= hashCode >>> 20 ^ hashCode >>> 12; + return hashCode ^ hashCode >>> 7 ^ hashCode >>> 4; + } + + private static class PaddedSemaphore + extends Semaphore { + long q1; + long q2; + long q3; + + PaddedSemaphore(int permits) { + super(permits, false); + } + } + + private static class PaddedLock + extends ReentrantLock { + long q1; + long q2; + long q3; + + PaddedLock() { + super(false); + } + } + + @VisibleForTesting + static class LargeLazyStriped + extends PowerOfTwoStriped { + final ConcurrentMap locks; + final Supplier supplier; + final int size; + + LargeLazyStriped(int stripes, Supplier supplier) { + super(stripes); + this.size = this.mask == -1 ? Integer.MAX_VALUE : this.mask + 1; + this.supplier = supplier; + this.locks = new MapMaker().weakValues().makeMap(); + } + + @Override + public L getAt(int index) { + Object existing; + if (this.size != Integer.MAX_VALUE) { + Preconditions.checkElementIndex(index, this.size()); + } + if ((existing = this.locks.get(index)) != null) { + return (L)existing; + } + L created = this.supplier.get(); + existing = this.locks.putIfAbsent(index, created); + return (L)MoreObjects.firstNonNull(existing, created); + } + + @Override + public int size() { + return this.size; + } + } + + @VisibleForTesting + static class SmallLazyStriped + extends PowerOfTwoStriped { + final AtomicReferenceArray> locks; + final Supplier supplier; + final int size; + final ReferenceQueue queue = new ReferenceQueue(); + + SmallLazyStriped(int stripes, Supplier supplier) { + super(stripes); + this.size = this.mask == -1 ? Integer.MAX_VALUE : this.mask + 1; + this.locks = new AtomicReferenceArray(this.size); + this.supplier = supplier; + } + + @Override + public L getAt(int index) { + ArrayReference existingRef; + L existing; + if (this.size != Integer.MAX_VALUE) { + Preconditions.checkElementIndex(index, this.size()); + } + L l = existing = (existingRef = this.locks.get(index)) == null ? null : (L)existingRef.get(); + if (existing != null) { + return existing; + } + L created = this.supplier.get(); + ArrayReference newRef = new ArrayReference(created, index, this.queue); + while (!this.locks.compareAndSet(index, existingRef, newRef)) { + existingRef = this.locks.get(index); + existing = existingRef == null ? null : (L)existingRef.get(); + if (existing == null) continue; + return existing; + } + this.drainQueue(); + return created; + } + + private void drainQueue() { + Reference ref; + while ((ref = this.queue.poll()) != null) { + ArrayReference arrayRef = (ArrayReference)ref; + this.locks.compareAndSet(arrayRef.index, arrayRef, null); + } + } + + @Override + public int size() { + return this.size; + } + + private static final class ArrayReference + extends WeakReference { + final int index; + + ArrayReference(L referent, int index, ReferenceQueue queue) { + super(referent, queue); + this.index = index; + } + } + } + + private static class CompactStriped + extends PowerOfTwoStriped { + private final Object[] array; + + private CompactStriped(int stripes, Supplier supplier) { + super(stripes); + Preconditions.checkArgument(stripes <= 0x40000000, "Stripes must be <= 2^30)"); + this.array = new Object[this.mask + 1]; + for (int i = 0; i < this.array.length; ++i) { + this.array[i] = supplier.get(); + } + } + + @Override + public L getAt(int index) { + return (L)this.array[index]; + } + + @Override + public int size() { + return this.array.length; + } + } + + private static abstract class PowerOfTwoStriped + extends Striped { + final int mask; + + PowerOfTwoStriped(int stripes) { + Preconditions.checkArgument(stripes > 0, "Stripes must be positive"); + this.mask = stripes > 0x40000000 ? -1 : Striped.ceilToPowerOfTwo(stripes) - 1; + } + + @Override + final int indexFor(Object key) { + int hash = Striped.smear(key.hashCode()); + return hash & this.mask; + } + + @Override + public final L get(Object key) { + return this.getAt(this.indexFor(key)); + } + } +} diff --git a/src/com/google/common/util/concurrent/ThreadFactoryBuilder.java b/src/com/google/common/util/concurrent/ThreadFactoryBuilder.java new file mode 100644 index 0000000..80b0c49 --- /dev/null +++ b/src/com/google/common/util/concurrent/ThreadFactoryBuilder.java @@ -0,0 +1,78 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.util.concurrent; + +import com.google.common.base.Preconditions; +import java.util.concurrent.Executors; +import java.util.concurrent.ThreadFactory; +import java.util.concurrent.atomic.AtomicLong; + +public final class ThreadFactoryBuilder { + private String nameFormat = null; + private Boolean daemon = null; + private Integer priority = null; + private Thread.UncaughtExceptionHandler uncaughtExceptionHandler = null; + private ThreadFactory backingThreadFactory = null; + + public ThreadFactoryBuilder setNameFormat(String nameFormat) { + String.format(nameFormat, 0); + this.nameFormat = nameFormat; + return this; + } + + public ThreadFactoryBuilder setDaemon(boolean daemon) { + this.daemon = daemon; + return this; + } + + public ThreadFactoryBuilder setPriority(int priority) { + Preconditions.checkArgument(priority >= 1, "Thread priority (%s) must be >= %s", priority, 1); + Preconditions.checkArgument(priority <= 10, "Thread priority (%s) must be <= %s", priority, 10); + this.priority = priority; + return this; + } + + public ThreadFactoryBuilder setUncaughtExceptionHandler(Thread.UncaughtExceptionHandler uncaughtExceptionHandler) { + this.uncaughtExceptionHandler = Preconditions.checkNotNull(uncaughtExceptionHandler); + return this; + } + + public ThreadFactoryBuilder setThreadFactory(ThreadFactory backingThreadFactory) { + this.backingThreadFactory = Preconditions.checkNotNull(backingThreadFactory); + return this; + } + + public ThreadFactory build() { + return ThreadFactoryBuilder.build(this); + } + + private static ThreadFactory build(ThreadFactoryBuilder builder) { + final String nameFormat = builder.nameFormat; + final Boolean daemon = builder.daemon; + final Integer priority = builder.priority; + final Thread.UncaughtExceptionHandler uncaughtExceptionHandler = builder.uncaughtExceptionHandler; + final ThreadFactory backingThreadFactory = builder.backingThreadFactory != null ? builder.backingThreadFactory : Executors.defaultThreadFactory(); + final AtomicLong count = nameFormat != null ? new AtomicLong(0L) : null; + return new ThreadFactory(){ + + @Override + public Thread newThread(Runnable runnable) { + Thread thread = backingThreadFactory.newThread(runnable); + if (nameFormat != null) { + thread.setName(String.format(nameFormat, count.getAndIncrement())); + } + if (daemon != null) { + thread.setDaemon(daemon); + } + if (priority != null) { + thread.setPriority(priority); + } + if (uncaughtExceptionHandler != null) { + thread.setUncaughtExceptionHandler(uncaughtExceptionHandler); + } + return thread; + } + }; + } +} diff --git a/src/com/google/common/util/concurrent/TimeLimiter.java b/src/com/google/common/util/concurrent/TimeLimiter.java new file mode 100644 index 0000000..1180de6 --- /dev/null +++ b/src/com/google/common/util/concurrent/TimeLimiter.java @@ -0,0 +1,15 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.util.concurrent; + +import com.google.common.annotations.Beta; +import java.util.concurrent.Callable; +import java.util.concurrent.TimeUnit; + +@Beta +public interface TimeLimiter { + public T newProxy(T var1, Class var2, long var3, TimeUnit var5); + + public T callWithTimeout(Callable var1, long var2, TimeUnit var4, boolean var5) throws Exception; +} diff --git a/src/com/google/common/util/concurrent/UncaughtExceptionHandlers.java b/src/com/google/common/util/concurrent/UncaughtExceptionHandlers.java new file mode 100644 index 0000000..780801a --- /dev/null +++ b/src/com/google/common/util/concurrent/UncaughtExceptionHandlers.java @@ -0,0 +1,45 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.util.concurrent; + +import com.google.common.annotations.VisibleForTesting; +import java.util.logging.Level; +import java.util.logging.Logger; + +public final class UncaughtExceptionHandlers { + private UncaughtExceptionHandlers() { + } + + public static Thread.UncaughtExceptionHandler systemExit() { + return new Exiter(Runtime.getRuntime()); + } + + @VisibleForTesting + static final class Exiter + implements Thread.UncaughtExceptionHandler { + private static final Logger logger = Logger.getLogger(Exiter.class.getName()); + private final Runtime runtime; + + Exiter(Runtime runtime) { + this.runtime = runtime; + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public void uncaughtException(Thread t, Throwable e) { + try { + logger.log(Level.SEVERE, String.format("Caught an exception in %s. Shutting down.", t), e); + } + catch (Throwable errorInLogging) { + System.err.println(e.getMessage()); + System.err.println(errorInLogging.getMessage()); + } + finally { + this.runtime.exit(1); + } + } + } +} diff --git a/src/com/google/common/util/concurrent/UncheckedExecutionException.java b/src/com/google/common/util/concurrent/UncheckedExecutionException.java new file mode 100644 index 0000000..aeb1ce8 --- /dev/null +++ b/src/com/google/common/util/concurrent/UncheckedExecutionException.java @@ -0,0 +1,28 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.util.concurrent; + +import com.google.common.annotations.GwtCompatible; +import javax.annotation.Nullable; + +@GwtCompatible +public class UncheckedExecutionException +extends RuntimeException { + private static final long serialVersionUID = 0L; + + protected UncheckedExecutionException() { + } + + protected UncheckedExecutionException(@Nullable String message) { + super(message); + } + + public UncheckedExecutionException(@Nullable String message, @Nullable Throwable cause) { + super(message, cause); + } + + public UncheckedExecutionException(@Nullable Throwable cause) { + super(cause); + } +} diff --git a/src/com/google/common/util/concurrent/UncheckedTimeoutException.java b/src/com/google/common/util/concurrent/UncheckedTimeoutException.java new file mode 100644 index 0000000..dd0541b --- /dev/null +++ b/src/com/google/common/util/concurrent/UncheckedTimeoutException.java @@ -0,0 +1,26 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.util.concurrent; + +import javax.annotation.Nullable; + +public class UncheckedTimeoutException +extends RuntimeException { + private static final long serialVersionUID = 0L; + + public UncheckedTimeoutException() { + } + + public UncheckedTimeoutException(@Nullable String message) { + super(message); + } + + public UncheckedTimeoutException(@Nullable Throwable cause) { + super(cause); + } + + public UncheckedTimeoutException(@Nullable String message, @Nullable Throwable cause) { + super(message, cause); + } +} diff --git a/src/com/google/common/util/concurrent/Uninterruptibles.java b/src/com/google/common/util/concurrent/Uninterruptibles.java new file mode 100644 index 0000000..5450dab --- /dev/null +++ b/src/com/google/common/util/concurrent/Uninterruptibles.java @@ -0,0 +1,250 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.util.concurrent; + +import com.google.common.annotations.Beta; +import com.google.common.base.Preconditions; +import java.util.concurrent.BlockingQueue; +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.Future; +import java.util.concurrent.Semaphore; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.TimeoutException; + +@Beta +public final class Uninterruptibles { + public static void awaitUninterruptibly(CountDownLatch latch) { + boolean interrupted = false; + while (true) { + try { + latch.await(); + return; + } + catch (InterruptedException e) { + interrupted = true; + continue; + } + break; + } + finally { + if (interrupted) { + Thread.currentThread().interrupt(); + } + } + } + + public static boolean awaitUninterruptibly(CountDownLatch latch, long timeout, TimeUnit unit) { + boolean interrupted = false; + try { + long remainingNanos = unit.toNanos(timeout); + long end = System.nanoTime() + remainingNanos; + while (true) { + try { + boolean bl = latch.await(remainingNanos, TimeUnit.NANOSECONDS); + return bl; + } + catch (InterruptedException e) { + interrupted = true; + remainingNanos = end - System.nanoTime(); + continue; + } + break; + } + } + finally { + if (interrupted) { + Thread.currentThread().interrupt(); + } + } + } + + public static void joinUninterruptibly(Thread toJoin) { + boolean interrupted = false; + while (true) { + try { + toJoin.join(); + return; + } + catch (InterruptedException e) { + interrupted = true; + continue; + } + break; + } + finally { + if (interrupted) { + Thread.currentThread().interrupt(); + } + } + } + + public static V getUninterruptibly(Future future) throws ExecutionException { + boolean interrupted = false; + while (true) { + try { + V v = future.get(); + return v; + } + catch (InterruptedException e) { + interrupted = true; + continue; + } + break; + } + finally { + if (interrupted) { + Thread.currentThread().interrupt(); + } + } + } + + public static V getUninterruptibly(Future future, long timeout, TimeUnit unit) throws ExecutionException, TimeoutException { + boolean interrupted = false; + try { + long remainingNanos = unit.toNanos(timeout); + long end = System.nanoTime() + remainingNanos; + while (true) { + V v; + try { + v = future.get(remainingNanos, TimeUnit.NANOSECONDS); + } + catch (InterruptedException e) { + interrupted = true; + remainingNanos = end - System.nanoTime(); + continue; + } + return v; + } + } + finally { + if (interrupted) { + Thread.currentThread().interrupt(); + } + } + } + + public static void joinUninterruptibly(Thread toJoin, long timeout, TimeUnit unit) { + Preconditions.checkNotNull(toJoin); + boolean interrupted = false; + try { + long remainingNanos = unit.toNanos(timeout); + long end = System.nanoTime() + remainingNanos; + while (true) { + try { + TimeUnit.NANOSECONDS.timedJoin(toJoin, remainingNanos); + return; + } + catch (InterruptedException e) { + interrupted = true; + remainingNanos = end - System.nanoTime(); + continue; + } + break; + } + } + finally { + if (interrupted) { + Thread.currentThread().interrupt(); + } + } + } + + public static E takeUninterruptibly(BlockingQueue queue) { + boolean interrupted = false; + while (true) { + try { + E e = queue.take(); + return e; + } + catch (InterruptedException e) { + interrupted = true; + continue; + } + break; + } + finally { + if (interrupted) { + Thread.currentThread().interrupt(); + } + } + } + + public static void putUninterruptibly(BlockingQueue queue, E element) { + boolean interrupted = false; + while (true) { + try { + queue.put(element); + return; + } + catch (InterruptedException e) { + interrupted = true; + continue; + } + break; + } + finally { + if (interrupted) { + Thread.currentThread().interrupt(); + } + } + } + + public static void sleepUninterruptibly(long sleepFor, TimeUnit unit) { + boolean interrupted = false; + try { + long remainingNanos = unit.toNanos(sleepFor); + long end = System.nanoTime() + remainingNanos; + while (true) { + try { + TimeUnit.NANOSECONDS.sleep(remainingNanos); + return; + } + catch (InterruptedException e) { + interrupted = true; + remainingNanos = end - System.nanoTime(); + continue; + } + break; + } + } + finally { + if (interrupted) { + Thread.currentThread().interrupt(); + } + } + } + + public static boolean tryAcquireUninterruptibly(Semaphore semaphore, long timeout, TimeUnit unit) { + return Uninterruptibles.tryAcquireUninterruptibly(semaphore, 1, timeout, unit); + } + + public static boolean tryAcquireUninterruptibly(Semaphore semaphore, int permits, long timeout, TimeUnit unit) { + boolean interrupted = false; + try { + long remainingNanos = unit.toNanos(timeout); + long end = System.nanoTime() + remainingNanos; + while (true) { + try { + boolean bl = semaphore.tryAcquire(permits, remainingNanos, TimeUnit.NANOSECONDS); + return bl; + } + catch (InterruptedException e) { + interrupted = true; + remainingNanos = end - System.nanoTime(); + continue; + } + break; + } + } + finally { + if (interrupted) { + Thread.currentThread().interrupt(); + } + } + } + + private Uninterruptibles() { + } +} diff --git a/src/com/google/common/util/concurrent/WrappingExecutorService.java b/src/com/google/common/util/concurrent/WrappingExecutorService.java new file mode 100644 index 0000000..be4b6e3 --- /dev/null +++ b/src/com/google/common/util/concurrent/WrappingExecutorService.java @@ -0,0 +1,117 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.util.concurrent; + +import com.google.common.base.Preconditions; +import com.google.common.base.Throwables; +import com.google.common.collect.ImmutableList; +import java.util.Collection; +import java.util.List; +import java.util.concurrent.Callable; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.Future; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.TimeoutException; + +abstract class WrappingExecutorService +implements ExecutorService { + private final ExecutorService delegate; + + protected WrappingExecutorService(ExecutorService delegate) { + this.delegate = Preconditions.checkNotNull(delegate); + } + + protected abstract Callable wrapTask(Callable var1); + + protected Runnable wrapTask(Runnable command) { + final Callable wrapped = this.wrapTask(Executors.callable(command, null)); + return new Runnable(){ + + @Override + public void run() { + try { + wrapped.call(); + } + catch (Exception e) { + Throwables.propagate(e); + } + } + }; + } + + private final ImmutableList> wrapTasks(Collection> tasks) { + ImmutableList.Builder builder = ImmutableList.builder(); + for (Callable task : tasks) { + builder.add(this.wrapTask(task)); + } + return builder.build(); + } + + @Override + public final void execute(Runnable command) { + this.delegate.execute(this.wrapTask(command)); + } + + @Override + public final Future submit(Callable task) { + return this.delegate.submit(this.wrapTask(Preconditions.checkNotNull(task))); + } + + @Override + public final Future submit(Runnable task) { + return this.delegate.submit(this.wrapTask(task)); + } + + @Override + public final Future submit(Runnable task, T result) { + return this.delegate.submit(this.wrapTask(task), result); + } + + @Override + public final List> invokeAll(Collection> tasks) throws InterruptedException { + return this.delegate.invokeAll(this.wrapTasks(tasks)); + } + + @Override + public final List> invokeAll(Collection> tasks, long timeout, TimeUnit unit) throws InterruptedException { + return this.delegate.invokeAll(this.wrapTasks(tasks), timeout, unit); + } + + @Override + public final T invokeAny(Collection> tasks) throws InterruptedException, ExecutionException { + return this.delegate.invokeAny(this.wrapTasks(tasks)); + } + + @Override + public final T invokeAny(Collection> tasks, long timeout, TimeUnit unit) throws InterruptedException, ExecutionException, TimeoutException { + return this.delegate.invokeAny(this.wrapTasks(tasks), timeout, unit); + } + + @Override + public final void shutdown() { + this.delegate.shutdown(); + } + + @Override + public final List shutdownNow() { + return this.delegate.shutdownNow(); + } + + @Override + public final boolean isShutdown() { + return this.delegate.isShutdown(); + } + + @Override + public final boolean isTerminated() { + return this.delegate.isTerminated(); + } + + @Override + public final boolean awaitTermination(long timeout, TimeUnit unit) throws InterruptedException { + return this.delegate.awaitTermination(timeout, unit); + } +} diff --git a/src/com/google/common/util/concurrent/WrappingScheduledExecutorService.java b/src/com/google/common/util/concurrent/WrappingScheduledExecutorService.java new file mode 100644 index 0000000..0418274 --- /dev/null +++ b/src/com/google/common/util/concurrent/WrappingScheduledExecutorService.java @@ -0,0 +1,41 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.util.concurrent; + +import com.google.common.util.concurrent.WrappingExecutorService; +import java.util.concurrent.Callable; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.ScheduledFuture; +import java.util.concurrent.TimeUnit; + +abstract class WrappingScheduledExecutorService +extends WrappingExecutorService +implements ScheduledExecutorService { + final ScheduledExecutorService delegate; + + protected WrappingScheduledExecutorService(ScheduledExecutorService delegate) { + super(delegate); + this.delegate = delegate; + } + + @Override + public final ScheduledFuture schedule(Runnable command, long delay, TimeUnit unit) { + return this.delegate.schedule(this.wrapTask(command), delay, unit); + } + + @Override + public final ScheduledFuture schedule(Callable task, long delay, TimeUnit unit) { + return this.delegate.schedule(this.wrapTask(task), delay, unit); + } + + @Override + public final ScheduledFuture scheduleAtFixedRate(Runnable command, long initialDelay, long period, TimeUnit unit) { + return this.delegate.scheduleAtFixedRate(this.wrapTask(command), initialDelay, period, unit); + } + + @Override + public final ScheduledFuture scheduleWithFixedDelay(Runnable command, long initialDelay, long delay, TimeUnit unit) { + return this.delegate.scheduleWithFixedDelay(this.wrapTask(command), initialDelay, delay, unit); + } +} diff --git a/src/com/google/common/util/concurrent/package-info.java b/src/com/google/common/util/concurrent/package-info.java new file mode 100644 index 0000000..aecac94 --- /dev/null +++ b/src/com/google/common/util/concurrent/package-info.java @@ -0,0 +1,8 @@ +/* + * Decompiled with CFR 0.152. + */ +@ParametersAreNonnullByDefault +package com.google.common.util.concurrent; + +import javax.annotation.ParametersAreNonnullByDefault; + diff --git a/src/com/google/common/xml/XmlEscapers.java b/src/com/google/common/xml/XmlEscapers.java new file mode 100644 index 0000000..fa194d6 --- /dev/null +++ b/src/com/google/common/xml/XmlEscapers.java @@ -0,0 +1,51 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.common.xml; + +import com.google.common.annotations.Beta; +import com.google.common.annotations.GwtCompatible; +import com.google.common.escape.Escaper; +import com.google.common.escape.Escapers; + +@Beta +@GwtCompatible +public class XmlEscapers { + private static final char MIN_ASCII_CONTROL_CHAR = '\u0000'; + private static final char MAX_ASCII_CONTROL_CHAR = '\u001f'; + private static final Escaper XML_ESCAPER; + private static final Escaper XML_CONTENT_ESCAPER; + private static final Escaper XML_ATTRIBUTE_ESCAPER; + + private XmlEscapers() { + } + + public static Escaper xmlContentEscaper() { + return XML_CONTENT_ESCAPER; + } + + public static Escaper xmlAttributeEscaper() { + return XML_ATTRIBUTE_ESCAPER; + } + + static { + Escapers.Builder builder = Escapers.builder(); + builder.setSafeRange('\u0000', '\ufffd'); + builder.setUnsafeReplacement("\ufffd"); + for (char c = '\u0000'; c <= '\u001f'; c = (char)((char)(c + 1))) { + if (c == 9 || c == 10 || c == 13) continue; + builder.addEscape(c, "\ufffd"); + } + builder.addEscape('&', "&"); + builder.addEscape('<', "<"); + builder.addEscape('>', ">"); + XML_CONTENT_ESCAPER = builder.build(); + builder.addEscape('\'', "'"); + builder.addEscape('\"', """); + XML_ESCAPER = builder.build(); + builder.addEscape('\t', " "); + builder.addEscape('\n', " "); + builder.addEscape('\r', " "); + XML_ATTRIBUTE_ESCAPER = builder.build(); + } +} diff --git a/src/com/google/common/xml/package-info.java b/src/com/google/common/xml/package-info.java new file mode 100644 index 0000000..cf5d076 --- /dev/null +++ b/src/com/google/common/xml/package-info.java @@ -0,0 +1,8 @@ +/* + * Decompiled with CFR 0.152. + */ +@ParametersAreNonnullByDefault +package com.google.common.xml; + +import javax.annotation.ParametersAreNonnullByDefault; + diff --git a/src/com/google/gson/DefaultDateTypeAdapter.java b/src/com/google/gson/DefaultDateTypeAdapter.java new file mode 100644 index 0000000..1e7742b --- /dev/null +++ b/src/com/google/gson/DefaultDateTypeAdapter.java @@ -0,0 +1,114 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.gson; + +import com.google.gson.JsonDeserializationContext; +import com.google.gson.JsonDeserializer; +import com.google.gson.JsonElement; +import com.google.gson.JsonParseException; +import com.google.gson.JsonPrimitive; +import com.google.gson.JsonSerializationContext; +import com.google.gson.JsonSerializer; +import com.google.gson.JsonSyntaxException; +import java.lang.reflect.Type; +import java.sql.Timestamp; +import java.text.DateFormat; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.Locale; +import java.util.TimeZone; + +/* + * This class specifies class file version 49.0 but uses Java 6 signatures. Assumed Java 6. + */ +final class DefaultDateTypeAdapter +implements JsonSerializer, +JsonDeserializer { + private final DateFormat enUsFormat; + private final DateFormat localFormat; + private final DateFormat iso8601Format; + + DefaultDateTypeAdapter() { + this(DateFormat.getDateTimeInstance(2, 2, Locale.US), DateFormat.getDateTimeInstance(2, 2)); + } + + DefaultDateTypeAdapter(String datePattern) { + this(new SimpleDateFormat(datePattern, Locale.US), new SimpleDateFormat(datePattern)); + } + + DefaultDateTypeAdapter(int style) { + this(DateFormat.getDateInstance(style, Locale.US), DateFormat.getDateInstance(style)); + } + + public DefaultDateTypeAdapter(int dateStyle, int timeStyle) { + this(DateFormat.getDateTimeInstance(dateStyle, timeStyle, Locale.US), DateFormat.getDateTimeInstance(dateStyle, timeStyle)); + } + + DefaultDateTypeAdapter(DateFormat enUsFormat, DateFormat localFormat) { + this.enUsFormat = enUsFormat; + this.localFormat = localFormat; + this.iso8601Format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'", Locale.US); + this.iso8601Format.setTimeZone(TimeZone.getTimeZone("UTC")); + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + @Override + public JsonElement serialize(Date src, Type typeOfSrc, JsonSerializationContext context) { + DateFormat dateFormat = this.localFormat; + synchronized (dateFormat) { + String dateFormatAsString = this.enUsFormat.format(src); + return new JsonPrimitive(dateFormatAsString); + } + } + + @Override + public Date deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException { + if (!(json instanceof JsonPrimitive)) { + throw new JsonParseException("The date should be a string value"); + } + Date date = this.deserializeToDate(json); + if (typeOfT == Date.class) { + return date; + } + if (typeOfT == Timestamp.class) { + return new Timestamp(date.getTime()); + } + if (typeOfT == java.sql.Date.class) { + return new java.sql.Date(date.getTime()); + } + throw new IllegalArgumentException(this.getClass() + " cannot deserialize to " + typeOfT); + } + + private Date deserializeToDate(JsonElement json) { + DateFormat dateFormat = this.localFormat; + synchronized (dateFormat) { + try { + return this.localFormat.parse(json.getAsString()); + } + catch (ParseException ignored) { + try { + return this.enUsFormat.parse(json.getAsString()); + } + catch (ParseException ignored2) { + try { + return this.iso8601Format.parse(json.getAsString()); + } + catch (ParseException e) { + throw new JsonSyntaxException(json.getAsString(), e); + } + } + } + } + } + + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append(DefaultDateTypeAdapter.class.getSimpleName()); + sb.append('(').append(this.localFormat.getClass().getSimpleName()).append(')'); + return sb.toString(); + } +} diff --git a/src/com/google/gson/ExclusionStrategy.java b/src/com/google/gson/ExclusionStrategy.java new file mode 100644 index 0000000..16cdfaf --- /dev/null +++ b/src/com/google/gson/ExclusionStrategy.java @@ -0,0 +1,15 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.gson; + +import com.google.gson.FieldAttributes; + +/* + * This class specifies class file version 49.0 but uses Java 6 signatures. Assumed Java 6. + */ +public interface ExclusionStrategy { + public boolean shouldSkipField(FieldAttributes var1); + + public boolean shouldSkipClass(Class var1); +} diff --git a/src/com/google/gson/FieldAttributes.java b/src/com/google/gson/FieldAttributes.java new file mode 100644 index 0000000..9d08991 --- /dev/null +++ b/src/com/google/gson/FieldAttributes.java @@ -0,0 +1,59 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.gson; + +import com.google.gson.internal.$Gson$Preconditions; +import java.lang.annotation.Annotation; +import java.lang.reflect.Field; +import java.lang.reflect.Type; +import java.util.Arrays; +import java.util.Collection; + +/* + * This class specifies class file version 49.0 but uses Java 6 signatures. Assumed Java 6. + */ +public final class FieldAttributes { + private final Field field; + + public FieldAttributes(Field f) { + $Gson$Preconditions.checkNotNull(f); + this.field = f; + } + + public Class getDeclaringClass() { + return this.field.getDeclaringClass(); + } + + public String getName() { + return this.field.getName(); + } + + public Type getDeclaredType() { + return this.field.getGenericType(); + } + + public Class getDeclaredClass() { + return this.field.getType(); + } + + public T getAnnotation(Class annotation) { + return this.field.getAnnotation(annotation); + } + + public Collection getAnnotations() { + return Arrays.asList(this.field.getAnnotations()); + } + + public boolean hasModifier(int modifier) { + return (this.field.getModifiers() & modifier) != 0; + } + + Object get(Object instance) throws IllegalAccessException { + return this.field.get(instance); + } + + boolean isSynthetic() { + return this.field.isSynthetic(); + } +} diff --git a/src/com/google/gson/FieldNamingPolicy.java b/src/com/google/gson/FieldNamingPolicy.java new file mode 100644 index 0000000..8054d52 --- /dev/null +++ b/src/com/google/gson/FieldNamingPolicy.java @@ -0,0 +1,83 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.gson; + +import com.google.gson.FieldNamingStrategy; +import java.lang.reflect.Field; + +/* + * This class specifies class file version 49.0 but uses Java 6 signatures. Assumed Java 6. + */ +public enum FieldNamingPolicy implements FieldNamingStrategy +{ + IDENTITY{ + + public String translateName(Field f) { + return f.getName(); + } + } + , + UPPER_CAMEL_CASE{ + + public String translateName(Field f) { + return FieldNamingPolicy.upperCaseFirstLetter(f.getName()); + } + } + , + UPPER_CAMEL_CASE_WITH_SPACES{ + + public String translateName(Field f) { + return FieldNamingPolicy.upperCaseFirstLetter(FieldNamingPolicy.separateCamelCase(f.getName(), " ")); + } + } + , + LOWER_CASE_WITH_UNDERSCORES{ + + public String translateName(Field f) { + return FieldNamingPolicy.separateCamelCase(f.getName(), "_").toLowerCase(); + } + } + , + LOWER_CASE_WITH_DASHES{ + + public String translateName(Field f) { + return FieldNamingPolicy.separateCamelCase(f.getName(), "-").toLowerCase(); + } + }; + + + private static String separateCamelCase(String name, String separator) { + StringBuilder translation = new StringBuilder(); + for (int i = 0; i < name.length(); ++i) { + char character = name.charAt(i); + if (Character.isUpperCase(character) && translation.length() != 0) { + translation.append(separator); + } + translation.append(character); + } + return translation.toString(); + } + + private static String upperCaseFirstLetter(String name) { + StringBuilder fieldNameBuilder = new StringBuilder(); + int index = 0; + char firstCharacter = name.charAt(index); + while (index < name.length() - 1 && !Character.isLetter(firstCharacter)) { + fieldNameBuilder.append(firstCharacter); + firstCharacter = name.charAt(++index); + } + if (index == name.length()) { + return fieldNameBuilder.toString(); + } + if (!Character.isUpperCase(firstCharacter)) { + String modifiedTarget = FieldNamingPolicy.modifyString(Character.toUpperCase(firstCharacter), name, ++index); + return fieldNameBuilder.append(modifiedTarget).toString(); + } + return name; + } + + private static String modifyString(char firstCharacter, String srcString, int indexOfSubstring) { + return indexOfSubstring < srcString.length() ? firstCharacter + srcString.substring(indexOfSubstring) : String.valueOf(firstCharacter); + } +} diff --git a/src/com/google/gson/FieldNamingStrategy.java b/src/com/google/gson/FieldNamingStrategy.java new file mode 100644 index 0000000..f9b02ef --- /dev/null +++ b/src/com/google/gson/FieldNamingStrategy.java @@ -0,0 +1,10 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.gson; + +import java.lang.reflect.Field; + +public interface FieldNamingStrategy { + public String translateName(Field var1); +} diff --git a/src/com/google/gson/Gson.java b/src/com/google/gson/Gson.java new file mode 100644 index 0000000..08ca301 --- /dev/null +++ b/src/com/google/gson/Gson.java @@ -0,0 +1,514 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.gson; + +import com.google.gson.FieldNamingPolicy; +import com.google.gson.FieldNamingStrategy; +import com.google.gson.InstanceCreator; +import com.google.gson.JsonDeserializationContext; +import com.google.gson.JsonElement; +import com.google.gson.JsonIOException; +import com.google.gson.JsonNull; +import com.google.gson.JsonParseException; +import com.google.gson.JsonSerializationContext; +import com.google.gson.JsonSyntaxException; +import com.google.gson.LongSerializationPolicy; +import com.google.gson.TypeAdapter; +import com.google.gson.TypeAdapterFactory; +import com.google.gson.internal.ConstructorConstructor; +import com.google.gson.internal.Excluder; +import com.google.gson.internal.Primitives; +import com.google.gson.internal.Streams; +import com.google.gson.internal.bind.ArrayTypeAdapter; +import com.google.gson.internal.bind.CollectionTypeAdapterFactory; +import com.google.gson.internal.bind.DateTypeAdapter; +import com.google.gson.internal.bind.JsonTreeReader; +import com.google.gson.internal.bind.JsonTreeWriter; +import com.google.gson.internal.bind.MapTypeAdapterFactory; +import com.google.gson.internal.bind.ObjectTypeAdapter; +import com.google.gson.internal.bind.ReflectiveTypeAdapterFactory; +import com.google.gson.internal.bind.SqlDateTypeAdapter; +import com.google.gson.internal.bind.TimeTypeAdapter; +import com.google.gson.internal.bind.TypeAdapters; +import com.google.gson.reflect.TypeToken; +import com.google.gson.stream.JsonReader; +import com.google.gson.stream.JsonToken; +import com.google.gson.stream.JsonWriter; +import com.google.gson.stream.MalformedJsonException; +import java.io.EOFException; +import java.io.IOException; +import java.io.Reader; +import java.io.StringReader; +import java.io.StringWriter; +import java.io.Writer; +import java.lang.reflect.Type; +import java.math.BigDecimal; +import java.math.BigInteger; +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/* + * This class specifies class file version 49.0 but uses Java 6 signatures. Assumed Java 6. + */ +public final class Gson { + static final boolean DEFAULT_JSON_NON_EXECUTABLE = false; + private static final String JSON_NON_EXECUTABLE_PREFIX = ")]}'\n"; + private final ThreadLocal, FutureTypeAdapter>> calls = new ThreadLocal(); + private final Map, TypeAdapter> typeTokenCache = Collections.synchronizedMap(new HashMap()); + private final List factories; + private final ConstructorConstructor constructorConstructor; + private final boolean serializeNulls; + private final boolean htmlSafe; + private final boolean generateNonExecutableJson; + private final boolean prettyPrinting; + final JsonDeserializationContext deserializationContext = new JsonDeserializationContext(){ + + @Override + public T deserialize(JsonElement json, Type typeOfT) throws JsonParseException { + return Gson.this.fromJson(json, typeOfT); + } + }; + final JsonSerializationContext serializationContext = new JsonSerializationContext(){ + + public JsonElement serialize(Object src) { + return Gson.this.toJsonTree(src); + } + + public JsonElement serialize(Object src, Type typeOfSrc) { + return Gson.this.toJsonTree(src, typeOfSrc); + } + }; + + public Gson() { + this(Excluder.DEFAULT, FieldNamingPolicy.IDENTITY, Collections.emptyMap(), false, false, false, true, false, false, LongSerializationPolicy.DEFAULT, Collections.emptyList()); + } + + Gson(Excluder excluder, FieldNamingStrategy fieldNamingPolicy, Map> instanceCreators, boolean serializeNulls, boolean complexMapKeySerialization, boolean generateNonExecutableGson, boolean htmlSafe, boolean prettyPrinting, boolean serializeSpecialFloatingPointValues, LongSerializationPolicy longSerializationPolicy, List typeAdapterFactories) { + this.constructorConstructor = new ConstructorConstructor(instanceCreators); + this.serializeNulls = serializeNulls; + this.generateNonExecutableJson = generateNonExecutableGson; + this.htmlSafe = htmlSafe; + this.prettyPrinting = prettyPrinting; + ArrayList factories = new ArrayList(); + factories.add(TypeAdapters.JSON_ELEMENT_FACTORY); + factories.add(ObjectTypeAdapter.FACTORY); + factories.add(excluder); + factories.addAll(typeAdapterFactories); + factories.add(TypeAdapters.STRING_FACTORY); + factories.add(TypeAdapters.INTEGER_FACTORY); + factories.add(TypeAdapters.BOOLEAN_FACTORY); + factories.add(TypeAdapters.BYTE_FACTORY); + factories.add(TypeAdapters.SHORT_FACTORY); + factories.add(TypeAdapters.newFactory(Long.TYPE, Long.class, this.longAdapter(longSerializationPolicy))); + factories.add(TypeAdapters.newFactory(Double.TYPE, Double.class, this.doubleAdapter(serializeSpecialFloatingPointValues))); + factories.add(TypeAdapters.newFactory(Float.TYPE, Float.class, this.floatAdapter(serializeSpecialFloatingPointValues))); + factories.add(TypeAdapters.NUMBER_FACTORY); + factories.add(TypeAdapters.CHARACTER_FACTORY); + factories.add(TypeAdapters.STRING_BUILDER_FACTORY); + factories.add(TypeAdapters.STRING_BUFFER_FACTORY); + factories.add(TypeAdapters.newFactory(BigDecimal.class, TypeAdapters.BIG_DECIMAL)); + factories.add(TypeAdapters.newFactory(BigInteger.class, TypeAdapters.BIG_INTEGER)); + factories.add(TypeAdapters.URL_FACTORY); + factories.add(TypeAdapters.URI_FACTORY); + factories.add(TypeAdapters.UUID_FACTORY); + factories.add(TypeAdapters.LOCALE_FACTORY); + factories.add(TypeAdapters.INET_ADDRESS_FACTORY); + factories.add(TypeAdapters.BIT_SET_FACTORY); + factories.add(DateTypeAdapter.FACTORY); + factories.add(TypeAdapters.CALENDAR_FACTORY); + factories.add(TimeTypeAdapter.FACTORY); + factories.add(SqlDateTypeAdapter.FACTORY); + factories.add(TypeAdapters.TIMESTAMP_FACTORY); + factories.add(ArrayTypeAdapter.FACTORY); + factories.add(TypeAdapters.ENUM_FACTORY); + factories.add(TypeAdapters.CLASS_FACTORY); + factories.add(new CollectionTypeAdapterFactory(this.constructorConstructor)); + factories.add(new MapTypeAdapterFactory(this.constructorConstructor, complexMapKeySerialization)); + factories.add(new ReflectiveTypeAdapterFactory(this.constructorConstructor, fieldNamingPolicy, excluder)); + this.factories = Collections.unmodifiableList(factories); + } + + private TypeAdapter doubleAdapter(boolean serializeSpecialFloatingPointValues) { + if (serializeSpecialFloatingPointValues) { + return TypeAdapters.DOUBLE; + } + return new TypeAdapter(){ + + @Override + public Double read(JsonReader in) throws IOException { + if (in.peek() == JsonToken.NULL) { + in.nextNull(); + return null; + } + return in.nextDouble(); + } + + @Override + public void write(JsonWriter out, Number value) throws IOException { + if (value == null) { + out.nullValue(); + return; + } + double doubleValue = value.doubleValue(); + Gson.this.checkValidFloatingPoint(doubleValue); + out.value(value); + } + }; + } + + private TypeAdapter floatAdapter(boolean serializeSpecialFloatingPointValues) { + if (serializeSpecialFloatingPointValues) { + return TypeAdapters.FLOAT; + } + return new TypeAdapter(){ + + @Override + public Float read(JsonReader in) throws IOException { + if (in.peek() == JsonToken.NULL) { + in.nextNull(); + return null; + } + return Float.valueOf((float)in.nextDouble()); + } + + @Override + public void write(JsonWriter out, Number value) throws IOException { + if (value == null) { + out.nullValue(); + return; + } + float floatValue = value.floatValue(); + Gson.this.checkValidFloatingPoint(floatValue); + out.value(value); + } + }; + } + + private void checkValidFloatingPoint(double value) { + if (Double.isNaN(value) || Double.isInfinite(value)) { + throw new IllegalArgumentException(value + " is not a valid double value as per JSON specification. To override this" + " behavior, use GsonBuilder.serializeSpecialFloatingPointValues() method."); + } + } + + private TypeAdapter longAdapter(LongSerializationPolicy longSerializationPolicy) { + if (longSerializationPolicy == LongSerializationPolicy.DEFAULT) { + return TypeAdapters.LONG; + } + return new TypeAdapter(){ + + @Override + public Number read(JsonReader in) throws IOException { + if (in.peek() == JsonToken.NULL) { + in.nextNull(); + return null; + } + return in.nextLong(); + } + + @Override + public void write(JsonWriter out, Number value) throws IOException { + if (value == null) { + out.nullValue(); + return; + } + out.value(value.toString()); + } + }; + } + + public TypeAdapter getAdapter(TypeToken type) { + FutureTypeAdapter ongoingCall; + TypeAdapter cached = this.typeTokenCache.get(type); + if (cached != null) { + return cached; + } + Map, FutureTypeAdapter> threadCalls = this.calls.get(); + boolean requiresThreadLocalCleanup = false; + if (threadCalls == null) { + threadCalls = new HashMap(); + this.calls.set(threadCalls); + requiresThreadLocalCleanup = true; + } + if ((ongoingCall = threadCalls.get(type)) != null) { + return ongoingCall; + } + try { + FutureTypeAdapter call = new FutureTypeAdapter(); + threadCalls.put(type, call); + for (TypeAdapterFactory factory : this.factories) { + TypeAdapter candidate = factory.create(this, type); + if (candidate == null) continue; + call.setDelegate(candidate); + this.typeTokenCache.put(type, candidate); + TypeAdapter typeAdapter = candidate; + return typeAdapter; + } + throw new IllegalArgumentException("GSON cannot handle " + type); + } + finally { + threadCalls.remove(type); + if (requiresThreadLocalCleanup) { + this.calls.remove(); + } + } + } + + public TypeAdapter getDelegateAdapter(TypeAdapterFactory skipPast, TypeToken type) { + boolean skipPastFound = false; + for (TypeAdapterFactory factory : this.factories) { + if (!skipPastFound) { + if (factory != skipPast) continue; + skipPastFound = true; + continue; + } + TypeAdapter candidate = factory.create(this, type); + if (candidate == null) continue; + return candidate; + } + throw new IllegalArgumentException("GSON cannot serialize " + type); + } + + public TypeAdapter getAdapter(Class type) { + return this.getAdapter(TypeToken.get(type)); + } + + public JsonElement toJsonTree(Object src) { + if (src == null) { + return JsonNull.INSTANCE; + } + return this.toJsonTree(src, src.getClass()); + } + + public JsonElement toJsonTree(Object src, Type typeOfSrc) { + JsonTreeWriter writer = new JsonTreeWriter(); + this.toJson(src, typeOfSrc, writer); + return writer.get(); + } + + public String toJson(Object src) { + if (src == null) { + return this.toJson(JsonNull.INSTANCE); + } + return this.toJson(src, src.getClass()); + } + + public String toJson(Object src, Type typeOfSrc) { + StringWriter writer = new StringWriter(); + this.toJson(src, typeOfSrc, writer); + return writer.toString(); + } + + public void toJson(Object src, Appendable writer) throws JsonIOException { + if (src != null) { + this.toJson(src, src.getClass(), writer); + } else { + this.toJson((JsonElement)JsonNull.INSTANCE, writer); + } + } + + public void toJson(Object src, Type typeOfSrc, Appendable writer) throws JsonIOException { + try { + JsonWriter jsonWriter = this.newJsonWriter(Streams.writerForAppendable(writer)); + this.toJson(src, typeOfSrc, jsonWriter); + } + catch (IOException e) { + throw new JsonIOException(e); + } + } + + public void toJson(Object src, Type typeOfSrc, JsonWriter writer) throws JsonIOException { + TypeAdapter adapter = this.getAdapter(TypeToken.get(typeOfSrc)); + boolean oldLenient = writer.isLenient(); + writer.setLenient(true); + boolean oldHtmlSafe = writer.isHtmlSafe(); + writer.setHtmlSafe(this.htmlSafe); + boolean oldSerializeNulls = writer.getSerializeNulls(); + writer.setSerializeNulls(this.serializeNulls); + try { + adapter.write(writer, src); + } + catch (IOException e) { + throw new JsonIOException(e); + } + finally { + writer.setLenient(oldLenient); + writer.setHtmlSafe(oldHtmlSafe); + writer.setSerializeNulls(oldSerializeNulls); + } + } + + public String toJson(JsonElement jsonElement) { + StringWriter writer = new StringWriter(); + this.toJson(jsonElement, (Appendable)writer); + return writer.toString(); + } + + public void toJson(JsonElement jsonElement, Appendable writer) throws JsonIOException { + try { + JsonWriter jsonWriter = this.newJsonWriter(Streams.writerForAppendable(writer)); + this.toJson(jsonElement, jsonWriter); + } + catch (IOException e) { + throw new RuntimeException(e); + } + } + + private JsonWriter newJsonWriter(Writer writer) throws IOException { + if (this.generateNonExecutableJson) { + writer.write(JSON_NON_EXECUTABLE_PREFIX); + } + JsonWriter jsonWriter = new JsonWriter(writer); + if (this.prettyPrinting) { + jsonWriter.setIndent(" "); + } + jsonWriter.setSerializeNulls(this.serializeNulls); + return jsonWriter; + } + + public void toJson(JsonElement jsonElement, JsonWriter writer) throws JsonIOException { + boolean oldLenient = writer.isLenient(); + writer.setLenient(true); + boolean oldHtmlSafe = writer.isHtmlSafe(); + writer.setHtmlSafe(this.htmlSafe); + boolean oldSerializeNulls = writer.getSerializeNulls(); + writer.setSerializeNulls(this.serializeNulls); + try { + Streams.write(jsonElement, writer); + } + catch (IOException e) { + throw new JsonIOException(e); + } + finally { + writer.setLenient(oldLenient); + writer.setHtmlSafe(oldHtmlSafe); + writer.setSerializeNulls(oldSerializeNulls); + } + } + + public T fromJson(String json, Class classOfT) throws JsonSyntaxException { + T object = this.fromJson(json, (Type)classOfT); + return Primitives.wrap(classOfT).cast(object); + } + + public T fromJson(String json, Type typeOfT) throws JsonSyntaxException { + if (json == null) { + return null; + } + StringReader reader = new StringReader(json); + T target = this.fromJson((Reader)reader, typeOfT); + return target; + } + + public T fromJson(Reader json, Class classOfT) throws JsonSyntaxException, JsonIOException { + JsonReader jsonReader = new JsonReader(json); + T object = this.fromJson(jsonReader, classOfT); + Gson.assertFullConsumption(object, jsonReader); + return Primitives.wrap(classOfT).cast(object); + } + + public T fromJson(Reader json, Type typeOfT) throws JsonIOException, JsonSyntaxException { + JsonReader jsonReader = new JsonReader(json); + T object = this.fromJson(jsonReader, typeOfT); + Gson.assertFullConsumption(object, jsonReader); + return object; + } + + private static void assertFullConsumption(Object obj, JsonReader reader) { + try { + if (obj != null && reader.peek() != JsonToken.END_DOCUMENT) { + throw new JsonIOException("JSON document was not fully consumed."); + } + } + catch (MalformedJsonException e) { + throw new JsonSyntaxException(e); + } + catch (IOException e) { + throw new JsonIOException(e); + } + } + + public T fromJson(JsonReader reader, Type typeOfT) throws JsonIOException, JsonSyntaxException { + boolean isEmpty = true; + boolean oldLenient = reader.isLenient(); + reader.setLenient(true); + try { + Object object; + reader.peek(); + isEmpty = false; + TypeToken typeToken = TypeToken.get(typeOfT); + TypeAdapter typeAdapter = this.getAdapter(typeToken); + Object obj = object = typeAdapter.read(reader); + return (T)obj; + } + catch (EOFException e) { + if (isEmpty) { + T t = null; + return t; + } + throw new JsonSyntaxException(e); + } + catch (IllegalStateException e) { + throw new JsonSyntaxException(e); + } + catch (IOException e) { + throw new JsonSyntaxException(e); + } + finally { + reader.setLenient(oldLenient); + } + } + + public T fromJson(JsonElement json, Class classOfT) throws JsonSyntaxException { + T object = this.fromJson(json, (Type)classOfT); + return Primitives.wrap(classOfT).cast(object); + } + + public T fromJson(JsonElement json, Type typeOfT) throws JsonSyntaxException { + if (json == null) { + return null; + } + return this.fromJson(new JsonTreeReader(json), typeOfT); + } + + public String toString() { + return "{serializeNulls:" + this.serializeNulls + "factories:" + this.factories + ",instanceCreators:" + this.constructorConstructor + "}"; + } + + /* + * This class specifies class file version 49.0 but uses Java 6 signatures. Assumed Java 6. + */ + static class FutureTypeAdapter + extends TypeAdapter { + private TypeAdapter delegate; + + FutureTypeAdapter() { + } + + public void setDelegate(TypeAdapter typeAdapter) { + if (this.delegate != null) { + throw new AssertionError(); + } + this.delegate = typeAdapter; + } + + @Override + public T read(JsonReader in) throws IOException { + if (this.delegate == null) { + throw new IllegalStateException(); + } + return this.delegate.read(in); + } + + @Override + public void write(JsonWriter out, T value) throws IOException { + if (this.delegate == null) { + throw new IllegalStateException(); + } + this.delegate.write(out, value); + } + } +} diff --git a/src/com/google/gson/GsonBuilder.java b/src/com/google/gson/GsonBuilder.java new file mode 100644 index 0000000..ac1f54e --- /dev/null +++ b/src/com/google/gson/GsonBuilder.java @@ -0,0 +1,204 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.gson; + +import com.google.gson.DefaultDateTypeAdapter; +import com.google.gson.ExclusionStrategy; +import com.google.gson.FieldNamingPolicy; +import com.google.gson.FieldNamingStrategy; +import com.google.gson.Gson; +import com.google.gson.InstanceCreator; +import com.google.gson.JsonDeserializer; +import com.google.gson.JsonSerializer; +import com.google.gson.LongSerializationPolicy; +import com.google.gson.TreeTypeAdapter; +import com.google.gson.TypeAdapter; +import com.google.gson.TypeAdapterFactory; +import com.google.gson.internal.$Gson$Preconditions; +import com.google.gson.internal.Excluder; +import com.google.gson.internal.bind.TypeAdapters; +import com.google.gson.reflect.TypeToken; +import java.lang.reflect.Type; +import java.sql.Date; +import java.sql.Timestamp; +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/* + * This class specifies class file version 49.0 but uses Java 6 signatures. Assumed Java 6. + */ +public final class GsonBuilder { + private Excluder excluder = Excluder.DEFAULT; + private LongSerializationPolicy longSerializationPolicy = LongSerializationPolicy.DEFAULT; + private FieldNamingStrategy fieldNamingPolicy = FieldNamingPolicy.IDENTITY; + private final Map> instanceCreators = new HashMap(); + private final List factories = new ArrayList(); + private final List hierarchyFactories = new ArrayList(); + private boolean serializeNulls; + private String datePattern; + private int dateStyle = 2; + private int timeStyle = 2; + private boolean complexMapKeySerialization; + private boolean serializeSpecialFloatingPointValues; + private boolean escapeHtmlChars = true; + private boolean prettyPrinting; + private boolean generateNonExecutableJson; + + public GsonBuilder setVersion(double ignoreVersionsAfter) { + this.excluder = this.excluder.withVersion(ignoreVersionsAfter); + return this; + } + + public GsonBuilder excludeFieldsWithModifiers(int ... modifiers) { + this.excluder = this.excluder.withModifiers(modifiers); + return this; + } + + public GsonBuilder generateNonExecutableJson() { + this.generateNonExecutableJson = true; + return this; + } + + public GsonBuilder excludeFieldsWithoutExposeAnnotation() { + this.excluder = this.excluder.excludeFieldsWithoutExposeAnnotation(); + return this; + } + + public GsonBuilder serializeNulls() { + this.serializeNulls = true; + return this; + } + + public GsonBuilder enableComplexMapKeySerialization() { + this.complexMapKeySerialization = true; + return this; + } + + public GsonBuilder disableInnerClassSerialization() { + this.excluder = this.excluder.disableInnerClassSerialization(); + return this; + } + + public GsonBuilder setLongSerializationPolicy(LongSerializationPolicy serializationPolicy) { + this.longSerializationPolicy = serializationPolicy; + return this; + } + + public GsonBuilder setFieldNamingPolicy(FieldNamingPolicy namingConvention) { + this.fieldNamingPolicy = namingConvention; + return this; + } + + public GsonBuilder setFieldNamingStrategy(FieldNamingStrategy fieldNamingStrategy) { + this.fieldNamingPolicy = fieldNamingStrategy; + return this; + } + + public GsonBuilder setExclusionStrategies(ExclusionStrategy ... strategies) { + for (ExclusionStrategy strategy : strategies) { + this.excluder = this.excluder.withExclusionStrategy(strategy, true, true); + } + return this; + } + + public GsonBuilder addSerializationExclusionStrategy(ExclusionStrategy strategy) { + this.excluder = this.excluder.withExclusionStrategy(strategy, true, false); + return this; + } + + public GsonBuilder addDeserializationExclusionStrategy(ExclusionStrategy strategy) { + this.excluder = this.excluder.withExclusionStrategy(strategy, false, true); + return this; + } + + public GsonBuilder setPrettyPrinting() { + this.prettyPrinting = true; + return this; + } + + public GsonBuilder disableHtmlEscaping() { + this.escapeHtmlChars = false; + return this; + } + + public GsonBuilder setDateFormat(String pattern) { + this.datePattern = pattern; + return this; + } + + public GsonBuilder setDateFormat(int style) { + this.dateStyle = style; + this.datePattern = null; + return this; + } + + public GsonBuilder setDateFormat(int dateStyle, int timeStyle) { + this.dateStyle = dateStyle; + this.timeStyle = timeStyle; + this.datePattern = null; + return this; + } + + public GsonBuilder registerTypeAdapter(Type type, Object typeAdapter) { + $Gson$Preconditions.checkArgument(typeAdapter instanceof JsonSerializer || typeAdapter instanceof JsonDeserializer || typeAdapter instanceof InstanceCreator || typeAdapter instanceof TypeAdapter); + if (typeAdapter instanceof InstanceCreator) { + this.instanceCreators.put(type, (InstanceCreator)typeAdapter); + } + if (typeAdapter instanceof JsonSerializer || typeAdapter instanceof JsonDeserializer) { + TypeToken typeToken = TypeToken.get(type); + this.factories.add(TreeTypeAdapter.newFactoryWithMatchRawType(typeToken, typeAdapter)); + } + if (typeAdapter instanceof TypeAdapter) { + this.factories.add(TypeAdapters.newFactory(TypeToken.get(type), (TypeAdapter)typeAdapter)); + } + return this; + } + + public GsonBuilder registerTypeAdapterFactory(TypeAdapterFactory factory) { + this.factories.add(factory); + return this; + } + + public GsonBuilder registerTypeHierarchyAdapter(Class baseType, Object typeAdapter) { + $Gson$Preconditions.checkArgument(typeAdapter instanceof JsonSerializer || typeAdapter instanceof JsonDeserializer || typeAdapter instanceof TypeAdapter); + if (typeAdapter instanceof JsonDeserializer || typeAdapter instanceof JsonSerializer) { + this.hierarchyFactories.add(0, TreeTypeAdapter.newTypeHierarchyFactory(baseType, typeAdapter)); + } + if (typeAdapter instanceof TypeAdapter) { + this.factories.add(TypeAdapters.newTypeHierarchyFactory(baseType, (TypeAdapter)typeAdapter)); + } + return this; + } + + public GsonBuilder serializeSpecialFloatingPointValues() { + this.serializeSpecialFloatingPointValues = true; + return this; + } + + public Gson create() { + ArrayList factories = new ArrayList(); + factories.addAll(this.factories); + Collections.reverse(factories); + factories.addAll(this.hierarchyFactories); + this.addTypeAdaptersForDate(this.datePattern, this.dateStyle, this.timeStyle, factories); + return new Gson(this.excluder, this.fieldNamingPolicy, this.instanceCreators, this.serializeNulls, this.complexMapKeySerialization, this.generateNonExecutableJson, this.escapeHtmlChars, this.prettyPrinting, this.serializeSpecialFloatingPointValues, this.longSerializationPolicy, factories); + } + + private void addTypeAdaptersForDate(String datePattern, int dateStyle, int timeStyle, List factories) { + DefaultDateTypeAdapter dateTypeAdapter; + if (datePattern != null && !"".equals(datePattern.trim())) { + dateTypeAdapter = new DefaultDateTypeAdapter(datePattern); + } else if (dateStyle != 2 && timeStyle != 2) { + dateTypeAdapter = new DefaultDateTypeAdapter(dateStyle, timeStyle); + } else { + return; + } + factories.add(TreeTypeAdapter.newFactory(TypeToken.get(java.util.Date.class), dateTypeAdapter)); + factories.add(TreeTypeAdapter.newFactory(TypeToken.get(Timestamp.class), dateTypeAdapter)); + factories.add(TreeTypeAdapter.newFactory(TypeToken.get(Date.class), dateTypeAdapter)); + } +} diff --git a/src/com/google/gson/InstanceCreator.java b/src/com/google/gson/InstanceCreator.java new file mode 100644 index 0000000..493d36e --- /dev/null +++ b/src/com/google/gson/InstanceCreator.java @@ -0,0 +1,13 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.gson; + +import java.lang.reflect.Type; + +/* + * This class specifies class file version 49.0 but uses Java 6 signatures. Assumed Java 6. + */ +public interface InstanceCreator { + public T createInstance(Type var1); +} diff --git a/src/com/google/gson/JsonArray.java b/src/com/google/gson/JsonArray.java new file mode 100644 index 0000000..6a8c45a --- /dev/null +++ b/src/com/google/gson/JsonArray.java @@ -0,0 +1,158 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.gson; + +import com.google.gson.JsonElement; +import com.google.gson.JsonNull; +import java.math.BigDecimal; +import java.math.BigInteger; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; + +/* + * This class specifies class file version 49.0 but uses Java 6 signatures. Assumed Java 6. + */ +public final class JsonArray +extends JsonElement +implements Iterable { + private final List elements = new ArrayList(); + + @Override + JsonArray deepCopy() { + JsonArray result = new JsonArray(); + for (JsonElement element : this.elements) { + result.add(element.deepCopy()); + } + return result; + } + + public void add(JsonElement element) { + if (element == null) { + element = JsonNull.INSTANCE; + } + this.elements.add(element); + } + + public void addAll(JsonArray array) { + this.elements.addAll(array.elements); + } + + public int size() { + return this.elements.size(); + } + + @Override + public Iterator iterator() { + return this.elements.iterator(); + } + + public JsonElement get(int i) { + return this.elements.get(i); + } + + @Override + public Number getAsNumber() { + if (this.elements.size() == 1) { + return this.elements.get(0).getAsNumber(); + } + throw new IllegalStateException(); + } + + @Override + public String getAsString() { + if (this.elements.size() == 1) { + return this.elements.get(0).getAsString(); + } + throw new IllegalStateException(); + } + + @Override + public double getAsDouble() { + if (this.elements.size() == 1) { + return this.elements.get(0).getAsDouble(); + } + throw new IllegalStateException(); + } + + @Override + public BigDecimal getAsBigDecimal() { + if (this.elements.size() == 1) { + return this.elements.get(0).getAsBigDecimal(); + } + throw new IllegalStateException(); + } + + @Override + public BigInteger getAsBigInteger() { + if (this.elements.size() == 1) { + return this.elements.get(0).getAsBigInteger(); + } + throw new IllegalStateException(); + } + + @Override + public float getAsFloat() { + if (this.elements.size() == 1) { + return this.elements.get(0).getAsFloat(); + } + throw new IllegalStateException(); + } + + @Override + public long getAsLong() { + if (this.elements.size() == 1) { + return this.elements.get(0).getAsLong(); + } + throw new IllegalStateException(); + } + + @Override + public int getAsInt() { + if (this.elements.size() == 1) { + return this.elements.get(0).getAsInt(); + } + throw new IllegalStateException(); + } + + @Override + public byte getAsByte() { + if (this.elements.size() == 1) { + return this.elements.get(0).getAsByte(); + } + throw new IllegalStateException(); + } + + @Override + public char getAsCharacter() { + if (this.elements.size() == 1) { + return this.elements.get(0).getAsCharacter(); + } + throw new IllegalStateException(); + } + + @Override + public short getAsShort() { + if (this.elements.size() == 1) { + return this.elements.get(0).getAsShort(); + } + throw new IllegalStateException(); + } + + @Override + public boolean getAsBoolean() { + if (this.elements.size() == 1) { + return this.elements.get(0).getAsBoolean(); + } + throw new IllegalStateException(); + } + + public boolean equals(Object o) { + return o == this || o instanceof JsonArray && ((JsonArray)o).elements.equals(this.elements); + } + + public int hashCode() { + return this.elements.hashCode(); + } +} diff --git a/src/com/google/gson/JsonDeserializationContext.java b/src/com/google/gson/JsonDeserializationContext.java new file mode 100644 index 0000000..37f3269 --- /dev/null +++ b/src/com/google/gson/JsonDeserializationContext.java @@ -0,0 +1,15 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.gson; + +import com.google.gson.JsonElement; +import com.google.gson.JsonParseException; +import java.lang.reflect.Type; + +/* + * This class specifies class file version 49.0 but uses Java 6 signatures. Assumed Java 6. + */ +public interface JsonDeserializationContext { + public T deserialize(JsonElement var1, Type var2) throws JsonParseException; +} diff --git a/src/com/google/gson/JsonDeserializer.java b/src/com/google/gson/JsonDeserializer.java new file mode 100644 index 0000000..3900279 --- /dev/null +++ b/src/com/google/gson/JsonDeserializer.java @@ -0,0 +1,16 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.gson; + +import com.google.gson.JsonDeserializationContext; +import com.google.gson.JsonElement; +import com.google.gson.JsonParseException; +import java.lang.reflect.Type; + +/* + * This class specifies class file version 49.0 but uses Java 6 signatures. Assumed Java 6. + */ +public interface JsonDeserializer { + public T deserialize(JsonElement var1, Type var2, JsonDeserializationContext var3) throws JsonParseException; +} diff --git a/src/com/google/gson/JsonElement.java b/src/com/google/gson/JsonElement.java new file mode 100644 index 0000000..dfda1f4 --- /dev/null +++ b/src/com/google/gson/JsonElement.java @@ -0,0 +1,128 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.gson; + +import com.google.gson.JsonArray; +import com.google.gson.JsonNull; +import com.google.gson.JsonObject; +import com.google.gson.JsonPrimitive; +import com.google.gson.internal.Streams; +import com.google.gson.stream.JsonWriter; +import java.io.IOException; +import java.io.StringWriter; +import java.math.BigDecimal; +import java.math.BigInteger; + +public abstract class JsonElement { + abstract JsonElement deepCopy(); + + public boolean isJsonArray() { + return this instanceof JsonArray; + } + + public boolean isJsonObject() { + return this instanceof JsonObject; + } + + public boolean isJsonPrimitive() { + return this instanceof JsonPrimitive; + } + + public boolean isJsonNull() { + return this instanceof JsonNull; + } + + public JsonObject getAsJsonObject() { + if (this.isJsonObject()) { + return (JsonObject)this; + } + throw new IllegalStateException("Not a JSON Object: " + this); + } + + public JsonArray getAsJsonArray() { + if (this.isJsonArray()) { + return (JsonArray)this; + } + throw new IllegalStateException("This is not a JSON Array."); + } + + public JsonPrimitive getAsJsonPrimitive() { + if (this.isJsonPrimitive()) { + return (JsonPrimitive)this; + } + throw new IllegalStateException("This is not a JSON Primitive."); + } + + public JsonNull getAsJsonNull() { + if (this.isJsonNull()) { + return (JsonNull)this; + } + throw new IllegalStateException("This is not a JSON Null."); + } + + public boolean getAsBoolean() { + throw new UnsupportedOperationException(this.getClass().getSimpleName()); + } + + Boolean getAsBooleanWrapper() { + throw new UnsupportedOperationException(this.getClass().getSimpleName()); + } + + public Number getAsNumber() { + throw new UnsupportedOperationException(this.getClass().getSimpleName()); + } + + public String getAsString() { + throw new UnsupportedOperationException(this.getClass().getSimpleName()); + } + + public double getAsDouble() { + throw new UnsupportedOperationException(this.getClass().getSimpleName()); + } + + public float getAsFloat() { + throw new UnsupportedOperationException(this.getClass().getSimpleName()); + } + + public long getAsLong() { + throw new UnsupportedOperationException(this.getClass().getSimpleName()); + } + + public int getAsInt() { + throw new UnsupportedOperationException(this.getClass().getSimpleName()); + } + + public byte getAsByte() { + throw new UnsupportedOperationException(this.getClass().getSimpleName()); + } + + public char getAsCharacter() { + throw new UnsupportedOperationException(this.getClass().getSimpleName()); + } + + public BigDecimal getAsBigDecimal() { + throw new UnsupportedOperationException(this.getClass().getSimpleName()); + } + + public BigInteger getAsBigInteger() { + throw new UnsupportedOperationException(this.getClass().getSimpleName()); + } + + public short getAsShort() { + throw new UnsupportedOperationException(this.getClass().getSimpleName()); + } + + public String toString() { + try { + StringWriter stringWriter = new StringWriter(); + JsonWriter jsonWriter = new JsonWriter(stringWriter); + jsonWriter.setLenient(true); + Streams.write(this, jsonWriter); + return stringWriter.toString(); + } + catch (IOException e) { + throw new AssertionError((Object)e); + } + } +} diff --git a/src/com/google/gson/JsonIOException.java b/src/com/google/gson/JsonIOException.java new file mode 100644 index 0000000..6bf264b --- /dev/null +++ b/src/com/google/gson/JsonIOException.java @@ -0,0 +1,23 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.gson; + +import com.google.gson.JsonParseException; + +public final class JsonIOException +extends JsonParseException { + private static final long serialVersionUID = 1L; + + public JsonIOException(String msg) { + super(msg); + } + + public JsonIOException(String msg, Throwable cause) { + super(msg, cause); + } + + public JsonIOException(Throwable cause) { + super(cause); + } +} diff --git a/src/com/google/gson/JsonNull.java b/src/com/google/gson/JsonNull.java new file mode 100644 index 0000000..01c8851 --- /dev/null +++ b/src/com/google/gson/JsonNull.java @@ -0,0 +1,27 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.gson; + +import com.google.gson.JsonElement; + +public final class JsonNull +extends JsonElement { + public static final JsonNull INSTANCE = new JsonNull(); + + @Deprecated + public JsonNull() { + } + + JsonNull deepCopy() { + return INSTANCE; + } + + public int hashCode() { + return JsonNull.class.hashCode(); + } + + public boolean equals(Object other) { + return this == other || other instanceof JsonNull; + } +} diff --git a/src/com/google/gson/JsonObject.java b/src/com/google/gson/JsonObject.java new file mode 100644 index 0000000..641ca24 --- /dev/null +++ b/src/com/google/gson/JsonObject.java @@ -0,0 +1,92 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.gson; + +import com.google.gson.JsonArray; +import com.google.gson.JsonElement; +import com.google.gson.JsonNull; +import com.google.gson.JsonPrimitive; +import com.google.gson.internal.LinkedTreeMap; +import java.util.Map; +import java.util.Set; + +/* + * This class specifies class file version 49.0 but uses Java 6 signatures. Assumed Java 6. + */ +public final class JsonObject +extends JsonElement { + private final LinkedTreeMap members = new LinkedTreeMap(); + + @Override + JsonObject deepCopy() { + JsonObject result = new JsonObject(); + for (Map.Entry entry : this.members.entrySet()) { + result.add(entry.getKey(), entry.getValue().deepCopy()); + } + return result; + } + + public void add(String property, JsonElement value) { + if (value == null) { + value = JsonNull.INSTANCE; + } + this.members.put(property, value); + } + + public JsonElement remove(String property) { + return this.members.remove(property); + } + + public void addProperty(String property, String value) { + this.add(property, this.createJsonElement(value)); + } + + public void addProperty(String property, Number value) { + this.add(property, this.createJsonElement(value)); + } + + public void addProperty(String property, Boolean value) { + this.add(property, this.createJsonElement(value)); + } + + public void addProperty(String property, Character value) { + this.add(property, this.createJsonElement(value)); + } + + private JsonElement createJsonElement(Object value) { + return value == null ? JsonNull.INSTANCE : new JsonPrimitive(value); + } + + public Set> entrySet() { + return this.members.entrySet(); + } + + public boolean has(String memberName) { + return this.members.containsKey(memberName); + } + + public JsonElement get(String memberName) { + return this.members.get(memberName); + } + + public JsonPrimitive getAsJsonPrimitive(String memberName) { + return (JsonPrimitive)this.members.get(memberName); + } + + public JsonArray getAsJsonArray(String memberName) { + return (JsonArray)this.members.get(memberName); + } + + public JsonObject getAsJsonObject(String memberName) { + return (JsonObject)this.members.get(memberName); + } + + public boolean equals(Object o) { + return o == this || o instanceof JsonObject && ((JsonObject)o).members.equals(this.members); + } + + public int hashCode() { + return this.members.hashCode(); + } +} diff --git a/src/com/google/gson/JsonParseException.java b/src/com/google/gson/JsonParseException.java new file mode 100644 index 0000000..4a3b8c4 --- /dev/null +++ b/src/com/google/gson/JsonParseException.java @@ -0,0 +1,21 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.gson; + +public class JsonParseException +extends RuntimeException { + static final long serialVersionUID = -4086729973971783390L; + + public JsonParseException(String msg) { + super(msg); + } + + public JsonParseException(String msg, Throwable cause) { + super(msg, cause); + } + + public JsonParseException(Throwable cause) { + super(cause); + } +} diff --git a/src/com/google/gson/JsonParser.java b/src/com/google/gson/JsonParser.java new file mode 100644 index 0000000..7988ab6 --- /dev/null +++ b/src/com/google/gson/JsonParser.java @@ -0,0 +1,60 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.gson; + +import com.google.gson.JsonElement; +import com.google.gson.JsonIOException; +import com.google.gson.JsonParseException; +import com.google.gson.JsonSyntaxException; +import com.google.gson.internal.Streams; +import com.google.gson.stream.JsonReader; +import com.google.gson.stream.JsonToken; +import com.google.gson.stream.MalformedJsonException; +import java.io.IOException; +import java.io.Reader; +import java.io.StringReader; + +public final class JsonParser { + public JsonElement parse(String json) throws JsonSyntaxException { + return this.parse(new StringReader(json)); + } + + public JsonElement parse(Reader json) throws JsonIOException, JsonSyntaxException { + try { + JsonReader jsonReader = new JsonReader(json); + JsonElement element = this.parse(jsonReader); + if (!element.isJsonNull() && jsonReader.peek() != JsonToken.END_DOCUMENT) { + throw new JsonSyntaxException("Did not consume the entire document."); + } + return element; + } + catch (MalformedJsonException e) { + throw new JsonSyntaxException(e); + } + catch (IOException e) { + throw new JsonIOException(e); + } + catch (NumberFormatException e) { + throw new JsonSyntaxException(e); + } + } + + public JsonElement parse(JsonReader json) throws JsonIOException, JsonSyntaxException { + boolean lenient = json.isLenient(); + json.setLenient(true); + try { + JsonElement jsonElement = Streams.parse(json); + return jsonElement; + } + catch (StackOverflowError e) { + throw new JsonParseException("Failed parsing JSON source: " + json + " to Json", e); + } + catch (OutOfMemoryError e) { + throw new JsonParseException("Failed parsing JSON source: " + json + " to Json", e); + } + finally { + json.setLenient(lenient); + } + } +} diff --git a/src/com/google/gson/JsonPrimitive.java b/src/com/google/gson/JsonPrimitive.java new file mode 100644 index 0000000..522ba8c --- /dev/null +++ b/src/com/google/gson/JsonPrimitive.java @@ -0,0 +1,180 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.gson; + +import com.google.gson.JsonElement; +import com.google.gson.internal.$Gson$Preconditions; +import com.google.gson.internal.LazilyParsedNumber; +import java.math.BigDecimal; +import java.math.BigInteger; + +public final class JsonPrimitive +extends JsonElement { + private static final Class[] PRIMITIVE_TYPES = new Class[]{Integer.TYPE, Long.TYPE, Short.TYPE, Float.TYPE, Double.TYPE, Byte.TYPE, Boolean.TYPE, Character.TYPE, Integer.class, Long.class, Short.class, Float.class, Double.class, Byte.class, Boolean.class, Character.class}; + private Object value; + + public JsonPrimitive(Boolean bool) { + this.setValue(bool); + } + + public JsonPrimitive(Number number) { + this.setValue(number); + } + + public JsonPrimitive(String string) { + this.setValue(string); + } + + public JsonPrimitive(Character c) { + this.setValue(c); + } + + JsonPrimitive(Object primitive) { + this.setValue(primitive); + } + + JsonPrimitive deepCopy() { + return this; + } + + void setValue(Object primitive) { + if (primitive instanceof Character) { + char c = ((Character)primitive).charValue(); + this.value = String.valueOf(c); + } else { + $Gson$Preconditions.checkArgument(primitive instanceof Number || JsonPrimitive.isPrimitiveOrString(primitive)); + this.value = primitive; + } + } + + public boolean isBoolean() { + return this.value instanceof Boolean; + } + + Boolean getAsBooleanWrapper() { + return (Boolean)this.value; + } + + public boolean getAsBoolean() { + if (this.isBoolean()) { + return this.getAsBooleanWrapper(); + } + return Boolean.parseBoolean(this.getAsString()); + } + + public boolean isNumber() { + return this.value instanceof Number; + } + + public Number getAsNumber() { + return this.value instanceof String ? new LazilyParsedNumber((String)this.value) : (Number)this.value; + } + + public boolean isString() { + return this.value instanceof String; + } + + public String getAsString() { + if (this.isNumber()) { + return this.getAsNumber().toString(); + } + if (this.isBoolean()) { + return this.getAsBooleanWrapper().toString(); + } + return (String)this.value; + } + + public double getAsDouble() { + return this.isNumber() ? this.getAsNumber().doubleValue() : Double.parseDouble(this.getAsString()); + } + + public BigDecimal getAsBigDecimal() { + return this.value instanceof BigDecimal ? (BigDecimal)this.value : new BigDecimal(this.value.toString()); + } + + public BigInteger getAsBigInteger() { + return this.value instanceof BigInteger ? (BigInteger)this.value : new BigInteger(this.value.toString()); + } + + public float getAsFloat() { + return this.isNumber() ? this.getAsNumber().floatValue() : Float.parseFloat(this.getAsString()); + } + + public long getAsLong() { + return this.isNumber() ? this.getAsNumber().longValue() : Long.parseLong(this.getAsString()); + } + + public short getAsShort() { + return this.isNumber() ? this.getAsNumber().shortValue() : Short.parseShort(this.getAsString()); + } + + public int getAsInt() { + return this.isNumber() ? this.getAsNumber().intValue() : Integer.parseInt(this.getAsString()); + } + + public byte getAsByte() { + return this.isNumber() ? this.getAsNumber().byteValue() : Byte.parseByte(this.getAsString()); + } + + public char getAsCharacter() { + return this.getAsString().charAt(0); + } + + private static boolean isPrimitiveOrString(Object target) { + if (target instanceof String) { + return true; + } + Class classOfPrimitive = target.getClass(); + for (Class standardPrimitive : PRIMITIVE_TYPES) { + if (!standardPrimitive.isAssignableFrom(classOfPrimitive)) continue; + return true; + } + return false; + } + + public int hashCode() { + if (this.value == null) { + return 31; + } + if (JsonPrimitive.isIntegral(this)) { + long value = this.getAsNumber().longValue(); + return (int)(value ^ value >>> 32); + } + if (this.value instanceof Number) { + long value = Double.doubleToLongBits(this.getAsNumber().doubleValue()); + return (int)(value ^ value >>> 32); + } + return this.value.hashCode(); + } + + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + if (obj == null || this.getClass() != obj.getClass()) { + return false; + } + JsonPrimitive other = (JsonPrimitive)obj; + if (this.value == null) { + return other.value == null; + } + if (JsonPrimitive.isIntegral(this) && JsonPrimitive.isIntegral(other)) { + return this.getAsNumber().longValue() == other.getAsNumber().longValue(); + } + if (this.value instanceof Number && other.value instanceof Number) { + double b; + double a = this.getAsNumber().doubleValue(); + return a == (b = other.getAsNumber().doubleValue()) || Double.isNaN(a) && Double.isNaN(b); + } + return this.value.equals(other.value); + } + + private static boolean isIntegral(JsonPrimitive primitive) { + if (primitive.value instanceof Number) { + Number number = (Number)primitive.value; + return number instanceof BigInteger || number instanceof Long || number instanceof Integer || number instanceof Short || number instanceof Byte; + } + return false; + } +} diff --git a/src/com/google/gson/JsonSerializationContext.java b/src/com/google/gson/JsonSerializationContext.java new file mode 100644 index 0000000..3be2d84 --- /dev/null +++ b/src/com/google/gson/JsonSerializationContext.java @@ -0,0 +1,13 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.gson; + +import com.google.gson.JsonElement; +import java.lang.reflect.Type; + +public interface JsonSerializationContext { + public JsonElement serialize(Object var1); + + public JsonElement serialize(Object var1, Type var2); +} diff --git a/src/com/google/gson/JsonSerializer.java b/src/com/google/gson/JsonSerializer.java new file mode 100644 index 0000000..2e9dfcd --- /dev/null +++ b/src/com/google/gson/JsonSerializer.java @@ -0,0 +1,15 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.gson; + +import com.google.gson.JsonElement; +import com.google.gson.JsonSerializationContext; +import java.lang.reflect.Type; + +/* + * This class specifies class file version 49.0 but uses Java 6 signatures. Assumed Java 6. + */ +public interface JsonSerializer { + public JsonElement serialize(T var1, Type var2, JsonSerializationContext var3); +} diff --git a/src/com/google/gson/JsonStreamParser.java b/src/com/google/gson/JsonStreamParser.java new file mode 100644 index 0000000..c1a5593 --- /dev/null +++ b/src/com/google/gson/JsonStreamParser.java @@ -0,0 +1,78 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.gson; + +import com.google.gson.JsonElement; +import com.google.gson.JsonIOException; +import com.google.gson.JsonParseException; +import com.google.gson.JsonSyntaxException; +import com.google.gson.internal.Streams; +import com.google.gson.stream.JsonReader; +import com.google.gson.stream.JsonToken; +import com.google.gson.stream.MalformedJsonException; +import java.io.EOFException; +import java.io.IOException; +import java.io.Reader; +import java.io.StringReader; +import java.util.Iterator; +import java.util.NoSuchElementException; + +/* + * This class specifies class file version 49.0 but uses Java 6 signatures. Assumed Java 6. + */ +public final class JsonStreamParser +implements Iterator { + private final JsonReader parser; + private final Object lock; + + public JsonStreamParser(String json) { + this(new StringReader(json)); + } + + public JsonStreamParser(Reader reader) { + this.parser = new JsonReader(reader); + this.parser.setLenient(true); + this.lock = new Object(); + } + + @Override + public JsonElement next() throws JsonParseException { + if (!this.hasNext()) { + throw new NoSuchElementException(); + } + try { + return Streams.parse(this.parser); + } + catch (StackOverflowError e) { + throw new JsonParseException("Failed parsing JSON source to Json", e); + } + catch (OutOfMemoryError e) { + throw new JsonParseException("Failed parsing JSON source to Json", e); + } + catch (JsonParseException e) { + throw e.getCause() instanceof EOFException ? new NoSuchElementException() : e; + } + } + + @Override + public boolean hasNext() { + Object object = this.lock; + synchronized (object) { + try { + return this.parser.peek() != JsonToken.END_DOCUMENT; + } + catch (MalformedJsonException e) { + throw new JsonSyntaxException(e); + } + catch (IOException e) { + throw new JsonIOException(e); + } + } + } + + @Override + public void remove() { + throw new UnsupportedOperationException(); + } +} diff --git a/src/com/google/gson/JsonSyntaxException.java b/src/com/google/gson/JsonSyntaxException.java new file mode 100644 index 0000000..dda0719 --- /dev/null +++ b/src/com/google/gson/JsonSyntaxException.java @@ -0,0 +1,23 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.gson; + +import com.google.gson.JsonParseException; + +public final class JsonSyntaxException +extends JsonParseException { + private static final long serialVersionUID = 1L; + + public JsonSyntaxException(String msg) { + super(msg); + } + + public JsonSyntaxException(String msg, Throwable cause) { + super(msg, cause); + } + + public JsonSyntaxException(Throwable cause) { + super(cause); + } +} diff --git a/src/com/google/gson/LongSerializationPolicy.java b/src/com/google/gson/LongSerializationPolicy.java new file mode 100644 index 0000000..87eecd7 --- /dev/null +++ b/src/com/google/gson/LongSerializationPolicy.java @@ -0,0 +1,29 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.gson; + +import com.google.gson.JsonElement; +import com.google.gson.JsonPrimitive; + +/* + * This class specifies class file version 49.0 but uses Java 6 signatures. Assumed Java 6. + */ +public enum LongSerializationPolicy { + DEFAULT{ + + public JsonElement serialize(Long value) { + return new JsonPrimitive(value); + } + } + , + STRING{ + + public JsonElement serialize(Long value) { + return new JsonPrimitive(String.valueOf(value)); + } + }; + + + public abstract JsonElement serialize(Long var1); +} diff --git a/src/com/google/gson/TreeTypeAdapter.java b/src/com/google/gson/TreeTypeAdapter.java new file mode 100644 index 0000000..6ce3241 --- /dev/null +++ b/src/com/google/gson/TreeTypeAdapter.java @@ -0,0 +1,109 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.gson; + +import com.google.gson.Gson; +import com.google.gson.JsonDeserializer; +import com.google.gson.JsonElement; +import com.google.gson.JsonSerializer; +import com.google.gson.TypeAdapter; +import com.google.gson.TypeAdapterFactory; +import com.google.gson.internal.$Gson$Preconditions; +import com.google.gson.internal.Streams; +import com.google.gson.reflect.TypeToken; +import com.google.gson.stream.JsonReader; +import com.google.gson.stream.JsonWriter; +import java.io.IOException; + +/* + * This class specifies class file version 49.0 but uses Java 6 signatures. Assumed Java 6. + */ +final class TreeTypeAdapter +extends TypeAdapter { + private final JsonSerializer serializer; + private final JsonDeserializer deserializer; + private final Gson gson; + private final TypeToken typeToken; + private final TypeAdapterFactory skipPast; + private TypeAdapter delegate; + + private TreeTypeAdapter(JsonSerializer serializer, JsonDeserializer deserializer, Gson gson, TypeToken typeToken, TypeAdapterFactory skipPast) { + this.serializer = serializer; + this.deserializer = deserializer; + this.gson = gson; + this.typeToken = typeToken; + this.skipPast = skipPast; + } + + @Override + public T read(JsonReader in) throws IOException { + if (this.deserializer == null) { + return this.delegate().read(in); + } + JsonElement value = Streams.parse(in); + if (value.isJsonNull()) { + return null; + } + return this.deserializer.deserialize(value, this.typeToken.getType(), this.gson.deserializationContext); + } + + @Override + public void write(JsonWriter out, T value) throws IOException { + if (this.serializer == null) { + this.delegate().write(out, value); + return; + } + if (value == null) { + out.nullValue(); + return; + } + JsonElement tree = this.serializer.serialize(value, this.typeToken.getType(), this.gson.serializationContext); + Streams.write(tree, out); + } + + private TypeAdapter delegate() { + TypeAdapter d = this.delegate; + return d != null ? d : (this.delegate = this.gson.getDelegateAdapter(this.skipPast, this.typeToken)); + } + + public static TypeAdapterFactory newFactory(TypeToken exactType, Object typeAdapter) { + return new SingleTypeFactory(typeAdapter, exactType, false, null); + } + + public static TypeAdapterFactory newFactoryWithMatchRawType(TypeToken exactType, Object typeAdapter) { + boolean matchRawType = exactType.getType() == exactType.getRawType(); + return new SingleTypeFactory(typeAdapter, exactType, matchRawType, null); + } + + public static TypeAdapterFactory newTypeHierarchyFactory(Class hierarchyType, Object typeAdapter) { + return new SingleTypeFactory(typeAdapter, null, false, hierarchyType); + } + + /* + * This class specifies class file version 49.0 but uses Java 6 signatures. Assumed Java 6. + */ + private static class SingleTypeFactory + implements TypeAdapterFactory { + private final TypeToken exactType; + private final boolean matchRawType; + private final Class hierarchyType; + private final JsonSerializer serializer; + private final JsonDeserializer deserializer; + + private SingleTypeFactory(Object typeAdapter, TypeToken exactType, boolean matchRawType, Class hierarchyType) { + this.serializer = typeAdapter instanceof JsonSerializer ? (JsonSerializer)typeAdapter : null; + this.deserializer = typeAdapter instanceof JsonDeserializer ? (JsonDeserializer)typeAdapter : null; + $Gson$Preconditions.checkArgument(this.serializer != null || this.deserializer != null); + this.exactType = exactType; + this.matchRawType = matchRawType; + this.hierarchyType = hierarchyType; + } + + @Override + public TypeAdapter create(Gson gson, TypeToken type) { + boolean matches = this.exactType != null ? this.exactType.equals(type) || this.matchRawType && this.exactType.getType() == type.getRawType() : this.hierarchyType.isAssignableFrom(type.getRawType()); + return matches ? new TreeTypeAdapter(this.serializer, this.deserializer, gson, type, this) : null; + } + } +} diff --git a/src/com/google/gson/TypeAdapter.java b/src/com/google/gson/TypeAdapter.java new file mode 100644 index 0000000..cc516cf --- /dev/null +++ b/src/com/google/gson/TypeAdapter.java @@ -0,0 +1,90 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.gson; + +import com.google.gson.JsonElement; +import com.google.gson.JsonIOException; +import com.google.gson.internal.bind.JsonTreeReader; +import com.google.gson.internal.bind.JsonTreeWriter; +import com.google.gson.stream.JsonReader; +import com.google.gson.stream.JsonToken; +import com.google.gson.stream.JsonWriter; +import java.io.IOException; +import java.io.Reader; +import java.io.StringReader; +import java.io.StringWriter; +import java.io.Writer; + +/* + * This class specifies class file version 49.0 but uses Java 6 signatures. Assumed Java 6. + */ +public abstract class TypeAdapter { + public abstract void write(JsonWriter var1, T var2) throws IOException; + + public final void toJson(Writer out, T value) throws IOException { + JsonWriter writer = new JsonWriter(out); + this.write(writer, value); + } + + public final TypeAdapter nullSafe() { + return new TypeAdapter(){ + + @Override + public void write(JsonWriter out, T value) throws IOException { + if (value == null) { + out.nullValue(); + } else { + TypeAdapter.this.write(out, value); + } + } + + @Override + public T read(JsonReader reader) throws IOException { + if (reader.peek() == JsonToken.NULL) { + reader.nextNull(); + return null; + } + return TypeAdapter.this.read(reader); + } + }; + } + + public final String toJson(T value) throws IOException { + StringWriter stringWriter = new StringWriter(); + this.toJson(stringWriter, value); + return stringWriter.toString(); + } + + public final JsonElement toJsonTree(T value) { + try { + JsonTreeWriter jsonWriter = new JsonTreeWriter(); + this.write(jsonWriter, value); + return jsonWriter.get(); + } + catch (IOException e) { + throw new JsonIOException(e); + } + } + + public abstract T read(JsonReader var1) throws IOException; + + public final T fromJson(Reader in) throws IOException { + JsonReader reader = new JsonReader(in); + return this.read(reader); + } + + public final T fromJson(String json) throws IOException { + return this.fromJson(new StringReader(json)); + } + + public final T fromJsonTree(JsonElement jsonTree) { + try { + JsonTreeReader jsonReader = new JsonTreeReader(jsonTree); + return this.read(jsonReader); + } + catch (IOException e) { + throw new JsonIOException(e); + } + } +} diff --git a/src/com/google/gson/TypeAdapterFactory.java b/src/com/google/gson/TypeAdapterFactory.java new file mode 100644 index 0000000..2d8bec8 --- /dev/null +++ b/src/com/google/gson/TypeAdapterFactory.java @@ -0,0 +1,15 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.gson; + +import com.google.gson.Gson; +import com.google.gson.TypeAdapter; +import com.google.gson.reflect.TypeToken; + +/* + * This class specifies class file version 49.0 but uses Java 6 signatures. Assumed Java 6. + */ +public interface TypeAdapterFactory { + public TypeAdapter create(Gson var1, TypeToken var2); +} diff --git a/src/com/google/gson/annotations/Expose.java b/src/com/google/gson/annotations/Expose.java new file mode 100644 index 0000000..6ff01ec --- /dev/null +++ b/src/com/google/gson/annotations/Expose.java @@ -0,0 +1,17 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.gson.annotations; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Retention(value=RetentionPolicy.RUNTIME) +@Target(value={ElementType.FIELD}) +public @interface Expose { + public boolean serialize() default true; + + public boolean deserialize() default true; +} diff --git a/src/com/google/gson/annotations/SerializedName.java b/src/com/google/gson/annotations/SerializedName.java new file mode 100644 index 0000000..e86c478 --- /dev/null +++ b/src/com/google/gson/annotations/SerializedName.java @@ -0,0 +1,15 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.gson.annotations; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Retention(value=RetentionPolicy.RUNTIME) +@Target(value={ElementType.FIELD}) +public @interface SerializedName { + public String value(); +} diff --git a/src/com/google/gson/annotations/Since.java b/src/com/google/gson/annotations/Since.java new file mode 100644 index 0000000..978afcb --- /dev/null +++ b/src/com/google/gson/annotations/Since.java @@ -0,0 +1,15 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.gson.annotations; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Retention(value=RetentionPolicy.RUNTIME) +@Target(value={ElementType.FIELD, ElementType.TYPE}) +public @interface Since { + public double value(); +} diff --git a/src/com/google/gson/annotations/Until.java b/src/com/google/gson/annotations/Until.java new file mode 100644 index 0000000..426cf2c --- /dev/null +++ b/src/com/google/gson/annotations/Until.java @@ -0,0 +1,15 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.gson.annotations; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Retention(value=RetentionPolicy.RUNTIME) +@Target(value={ElementType.FIELD, ElementType.TYPE}) +public @interface Until { + public double value(); +} diff --git a/src/com/google/gson/internal/ConstructorConstructor.java b/src/com/google/gson/internal/ConstructorConstructor.java new file mode 100644 index 0000000..2ce7100 --- /dev/null +++ b/src/com/google/gson/internal/ConstructorConstructor.java @@ -0,0 +1,208 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.gson.internal; + +import com.google.gson.InstanceCreator; +import com.google.gson.JsonIOException; +import com.google.gson.internal.LinkedTreeMap; +import com.google.gson.internal.ObjectConstructor; +import com.google.gson.internal.UnsafeAllocator; +import com.google.gson.reflect.TypeToken; +import java.lang.reflect.Constructor; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.ParameterizedType; +import java.lang.reflect.Type; +import java.util.ArrayList; +import java.util.Collection; +import java.util.EnumSet; +import java.util.LinkedHashMap; +import java.util.LinkedHashSet; +import java.util.LinkedList; +import java.util.Map; +import java.util.Queue; +import java.util.Set; +import java.util.SortedMap; +import java.util.SortedSet; +import java.util.TreeMap; +import java.util.TreeSet; + +/* + * This class specifies class file version 49.0 but uses Java 6 signatures. Assumed Java 6. + */ +public final class ConstructorConstructor { + private final Map> instanceCreators; + + public ConstructorConstructor(Map> instanceCreators) { + this.instanceCreators = instanceCreators; + } + + public ObjectConstructor get(TypeToken typeToken) { + final Type type = typeToken.getType(); + Class rawType = typeToken.getRawType(); + final InstanceCreator typeCreator = this.instanceCreators.get(type); + if (typeCreator != null) { + return new ObjectConstructor(){ + + @Override + public T construct() { + return typeCreator.createInstance(type); + } + }; + } + final InstanceCreator rawTypeCreator = this.instanceCreators.get(rawType); + if (rawTypeCreator != null) { + return new ObjectConstructor(){ + + @Override + public T construct() { + return rawTypeCreator.createInstance(type); + } + }; + } + ObjectConstructor defaultConstructor = this.newDefaultConstructor(rawType); + if (defaultConstructor != null) { + return defaultConstructor; + } + ObjectConstructor defaultImplementation = this.newDefaultImplementationConstructor(type, rawType); + if (defaultImplementation != null) { + return defaultImplementation; + } + return this.newUnsafeAllocator(type, rawType); + } + + private ObjectConstructor newDefaultConstructor(Class rawType) { + try { + final Constructor constructor = rawType.getDeclaredConstructor(new Class[0]); + if (!constructor.isAccessible()) { + constructor.setAccessible(true); + } + return new ObjectConstructor(){ + + @Override + public T construct() { + try { + Object[] args = null; + return constructor.newInstance(args); + } + catch (InstantiationException e) { + throw new RuntimeException("Failed to invoke " + constructor + " with no args", e); + } + catch (InvocationTargetException e) { + throw new RuntimeException("Failed to invoke " + constructor + " with no args", e.getTargetException()); + } + catch (IllegalAccessException e) { + throw new AssertionError((Object)e); + } + } + }; + } + catch (NoSuchMethodException e) { + return null; + } + } + + private ObjectConstructor newDefaultImplementationConstructor(final Type type, Class rawType) { + if (Collection.class.isAssignableFrom(rawType)) { + if (SortedSet.class.isAssignableFrom(rawType)) { + return new ObjectConstructor(){ + + @Override + public T construct() { + return new TreeSet(); + } + }; + } + if (EnumSet.class.isAssignableFrom(rawType)) { + return new ObjectConstructor(){ + + @Override + public T construct() { + if (type instanceof ParameterizedType) { + Type elementType = ((ParameterizedType)type).getActualTypeArguments()[0]; + if (elementType instanceof Class) { + return EnumSet.noneOf((Class)elementType); + } + throw new JsonIOException("Invalid EnumSet type: " + type.toString()); + } + throw new JsonIOException("Invalid EnumSet type: " + type.toString()); + } + }; + } + if (Set.class.isAssignableFrom(rawType)) { + return new ObjectConstructor(){ + + @Override + public T construct() { + return new LinkedHashSet(); + } + }; + } + if (Queue.class.isAssignableFrom(rawType)) { + return new ObjectConstructor(){ + + @Override + public T construct() { + return new LinkedList(); + } + }; + } + return new ObjectConstructor(){ + + @Override + public T construct() { + return new ArrayList(); + } + }; + } + if (Map.class.isAssignableFrom(rawType)) { + if (SortedMap.class.isAssignableFrom(rawType)) { + return new ObjectConstructor(){ + + @Override + public T construct() { + return new TreeMap(); + } + }; + } + if (type instanceof ParameterizedType && !String.class.isAssignableFrom(TypeToken.get(((ParameterizedType)type).getActualTypeArguments()[0]).getRawType())) { + return new ObjectConstructor(){ + + @Override + public T construct() { + return new LinkedHashMap(); + } + }; + } + return new ObjectConstructor(){ + + @Override + public T construct() { + return new LinkedTreeMap(); + } + }; + } + return null; + } + + private ObjectConstructor newUnsafeAllocator(final Type type, final Class rawType) { + return new ObjectConstructor(){ + private final UnsafeAllocator unsafeAllocator = UnsafeAllocator.create(); + + @Override + public T construct() { + try { + Object newInstance = this.unsafeAllocator.newInstance(rawType); + return newInstance; + } + catch (Exception e) { + throw new RuntimeException("Unable to invoke no-args constructor for " + type + ". " + "Register an InstanceCreator with Gson for this type may fix this problem.", e); + } + } + }; + } + + public String toString() { + return this.instanceCreators.toString(); + } +} diff --git a/src/com/google/gson/internal/Excluder.java b/src/com/google/gson/internal/Excluder.java new file mode 100644 index 0000000..3f1bb96 --- /dev/null +++ b/src/com/google/gson/internal/Excluder.java @@ -0,0 +1,198 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.gson.internal; + +import com.google.gson.ExclusionStrategy; +import com.google.gson.FieldAttributes; +import com.google.gson.Gson; +import com.google.gson.TypeAdapter; +import com.google.gson.TypeAdapterFactory; +import com.google.gson.annotations.Expose; +import com.google.gson.annotations.Since; +import com.google.gson.annotations.Until; +import com.google.gson.reflect.TypeToken; +import com.google.gson.stream.JsonReader; +import com.google.gson.stream.JsonWriter; +import java.io.IOException; +import java.lang.reflect.Field; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +/* + * This class specifies class file version 49.0 but uses Java 6 signatures. Assumed Java 6. + */ +public final class Excluder +implements TypeAdapterFactory, +Cloneable { + private static final double IGNORE_VERSIONS = -1.0; + public static final Excluder DEFAULT = new Excluder(); + private double version = -1.0; + private int modifiers = 136; + private boolean serializeInnerClasses = true; + private boolean requireExpose; + private List serializationStrategies = Collections.emptyList(); + private List deserializationStrategies = Collections.emptyList(); + + protected Excluder clone() { + try { + return (Excluder)super.clone(); + } + catch (CloneNotSupportedException e) { + throw new AssertionError(); + } + } + + public Excluder withVersion(double ignoreVersionsAfter) { + Excluder result = this.clone(); + result.version = ignoreVersionsAfter; + return result; + } + + public Excluder withModifiers(int ... modifiers) { + Excluder result = this.clone(); + result.modifiers = 0; + for (int modifier : modifiers) { + result.modifiers |= modifier; + } + return result; + } + + public Excluder disableInnerClassSerialization() { + Excluder result = this.clone(); + result.serializeInnerClasses = false; + return result; + } + + public Excluder excludeFieldsWithoutExposeAnnotation() { + Excluder result = this.clone(); + result.requireExpose = true; + return result; + } + + public Excluder withExclusionStrategy(ExclusionStrategy exclusionStrategy, boolean serialization, boolean deserialization) { + Excluder result = this.clone(); + if (serialization) { + result.serializationStrategies = new ArrayList(this.serializationStrategies); + result.serializationStrategies.add(exclusionStrategy); + } + if (deserialization) { + result.deserializationStrategies = new ArrayList(this.deserializationStrategies); + result.deserializationStrategies.add(exclusionStrategy); + } + return result; + } + + @Override + public TypeAdapter create(final Gson gson, final TypeToken type) { + Class rawType = type.getRawType(); + final boolean skipSerialize = this.excludeClass(rawType, true); + final boolean skipDeserialize = this.excludeClass(rawType, false); + if (!skipSerialize && !skipDeserialize) { + return null; + } + return new TypeAdapter(){ + private TypeAdapter delegate; + + @Override + public T read(JsonReader in) throws IOException { + if (skipDeserialize) { + in.skipValue(); + return null; + } + return this.delegate().read(in); + } + + @Override + public void write(JsonWriter out, T value) throws IOException { + if (skipSerialize) { + out.nullValue(); + return; + } + this.delegate().write(out, value); + } + + private TypeAdapter delegate() { + TypeAdapter d = this.delegate; + return d != null ? d : (this.delegate = gson.getDelegateAdapter(Excluder.this, type)); + } + }; + } + + public boolean excludeField(Field field, boolean serialize) { + List list; + Expose annotation; + if ((this.modifiers & field.getModifiers()) != 0) { + return true; + } + if (this.version != -1.0 && !this.isValidVersion(field.getAnnotation(Since.class), field.getAnnotation(Until.class))) { + return true; + } + if (field.isSynthetic()) { + return true; + } + if (this.requireExpose && ((annotation = field.getAnnotation(Expose.class)) == null || (serialize ? !annotation.serialize() : !annotation.deserialize()))) { + return true; + } + if (!this.serializeInnerClasses && this.isInnerClass(field.getType())) { + return true; + } + if (this.isAnonymousOrLocal(field.getType())) { + return true; + } + List list2 = list = serialize ? this.serializationStrategies : this.deserializationStrategies; + if (!list.isEmpty()) { + FieldAttributes fieldAttributes = new FieldAttributes(field); + for (ExclusionStrategy exclusionStrategy : list) { + if (!exclusionStrategy.shouldSkipField(fieldAttributes)) continue; + return true; + } + } + return false; + } + + public boolean excludeClass(Class clazz, boolean serialize) { + if (this.version != -1.0 && !this.isValidVersion(clazz.getAnnotation(Since.class), clazz.getAnnotation(Until.class))) { + return true; + } + if (!this.serializeInnerClasses && this.isInnerClass(clazz)) { + return true; + } + if (this.isAnonymousOrLocal(clazz)) { + return true; + } + List list = serialize ? this.serializationStrategies : this.deserializationStrategies; + for (ExclusionStrategy exclusionStrategy : list) { + if (!exclusionStrategy.shouldSkipClass(clazz)) continue; + return true; + } + return false; + } + + private boolean isAnonymousOrLocal(Class clazz) { + return !Enum.class.isAssignableFrom(clazz) && (clazz.isAnonymousClass() || clazz.isLocalClass()); + } + + private boolean isInnerClass(Class clazz) { + return clazz.isMemberClass() && !this.isStatic(clazz); + } + + private boolean isStatic(Class clazz) { + return (clazz.getModifiers() & 8) != 0; + } + + private boolean isValidVersion(Since since, Until until) { + return this.isValidSince(since) && this.isValidUntil(until); + } + + private boolean isValidSince(Since annotation) { + double annotationVersion; + return annotation == null || !((annotationVersion = annotation.value()) > this.version); + } + + private boolean isValidUntil(Until annotation) { + double annotationVersion; + return annotation == null || !((annotationVersion = annotation.value()) <= this.version); + } +} diff --git a/src/com/google/gson/internal/JsonReaderInternalAccess.java b/src/com/google/gson/internal/JsonReaderInternalAccess.java new file mode 100644 index 0000000..0ead530 --- /dev/null +++ b/src/com/google/gson/internal/JsonReaderInternalAccess.java @@ -0,0 +1,13 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.gson.internal; + +import com.google.gson.stream.JsonReader; +import java.io.IOException; + +public abstract class JsonReaderInternalAccess { + public static JsonReaderInternalAccess INSTANCE; + + public abstract void promoteNameToValue(JsonReader var1) throws IOException; +} diff --git a/src/com/google/gson/internal/LazilyParsedNumber.java b/src/com/google/gson/internal/LazilyParsedNumber.java new file mode 100644 index 0000000..5c8ce74 --- /dev/null +++ b/src/com/google/gson/internal/LazilyParsedNumber.java @@ -0,0 +1,55 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.gson.internal; + +import java.io.ObjectStreamException; +import java.math.BigDecimal; + +public final class LazilyParsedNumber +extends Number { + private final String value; + + public LazilyParsedNumber(String value) { + this.value = value; + } + + public int intValue() { + try { + return Integer.parseInt(this.value); + } + catch (NumberFormatException e) { + try { + return (int)Long.parseLong(this.value); + } + catch (NumberFormatException nfe) { + return new BigDecimal(this.value).intValue(); + } + } + } + + public long longValue() { + try { + return Long.parseLong(this.value); + } + catch (NumberFormatException e) { + return new BigDecimal(this.value).longValue(); + } + } + + public float floatValue() { + return Float.parseFloat(this.value); + } + + public double doubleValue() { + return Double.parseDouble(this.value); + } + + public String toString() { + return this.value; + } + + private Object writeReplace() throws ObjectStreamException { + return new BigDecimal(this.value); + } +} diff --git a/src/com/google/gson/internal/LinkedTreeMap.java b/src/com/google/gson/internal/LinkedTreeMap.java new file mode 100644 index 0000000..f8643df --- /dev/null +++ b/src/com/google/gson/internal/LinkedTreeMap.java @@ -0,0 +1,540 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.gson.internal; + +import java.io.ObjectStreamException; +import java.io.Serializable; +import java.util.AbstractMap; +import java.util.AbstractSet; +import java.util.Comparator; +import java.util.ConcurrentModificationException; +import java.util.Iterator; +import java.util.LinkedHashMap; +import java.util.Map; +import java.util.NoSuchElementException; +import java.util.Set; + +/* + * This class specifies class file version 49.0 but uses Java 6 signatures. Assumed Java 6. + */ +public final class LinkedTreeMap +extends AbstractMap +implements Serializable { + private static final Comparator NATURAL_ORDER = new Comparator(){ + + @Override + public int compare(Comparable a, Comparable b) { + return a.compareTo(b); + } + }; + Comparator comparator; + Node root; + int size = 0; + int modCount = 0; + final Node header = new Node(); + private EntrySet entrySet; + private KeySet keySet; + + public LinkedTreeMap() { + this(NATURAL_ORDER); + } + + public LinkedTreeMap(Comparator comparator) { + this.comparator = comparator != null ? comparator : NATURAL_ORDER; + } + + @Override + public int size() { + return this.size; + } + + @Override + public V get(Object key) { + Node node = this.findByObject(key); + return node != null ? (V)node.value : null; + } + + @Override + public boolean containsKey(Object key) { + return this.findByObject(key) != null; + } + + @Override + public V put(K key, V value) { + if (key == null) { + throw new NullPointerException("key == null"); + } + Node created = this.find(key, true); + Object result = created.value; + created.value = value; + return result; + } + + @Override + public void clear() { + this.root = null; + this.size = 0; + ++this.modCount; + Node header = this.header; + header.prev = header; + header.next = header.prev; + } + + @Override + public V remove(Object key) { + Node node = this.removeInternalByKey(key); + return node != null ? (V)node.value : null; + } + + Node find(K key, boolean create) { + Node created; + Comparator comparator = this.comparator; + Node nearest = this.root; + int comparison = 0; + if (nearest != null) { + Comparable comparableKey = comparator == NATURAL_ORDER ? (Comparable)key : null; + while (true) { + Node child; + int n = comparison = comparableKey != null ? comparableKey.compareTo(nearest.key) : comparator.compare(key, nearest.key); + if (comparison == 0) { + return nearest; + } + Node node = child = comparison < 0 ? nearest.left : nearest.right; + if (child == null) break; + nearest = child; + } + } + if (!create) { + return null; + } + Node header = this.header; + if (nearest == null) { + if (comparator == NATURAL_ORDER && !(key instanceof Comparable)) { + throw new ClassCastException(key.getClass().getName() + " is not Comparable"); + } + created = new Node(nearest, key, header, header.prev); + this.root = created; + } else { + created = new Node(nearest, key, header, header.prev); + if (comparison < 0) { + nearest.left = created; + } else { + nearest.right = created; + } + this.rebalance(nearest, true); + } + ++this.size; + ++this.modCount; + return created; + } + + Node findByObject(Object key) { + try { + return key != null ? this.find(key, false) : null; + } + catch (ClassCastException e) { + return null; + } + } + + Node findByEntry(Map.Entry entry) { + Node mine = this.findByObject(entry.getKey()); + boolean valuesEqual = mine != null && this.equal(mine.value, entry.getValue()); + return valuesEqual ? mine : null; + } + + private boolean equal(Object a, Object b) { + return a == b || a != null && a.equals(b); + } + + void removeInternal(Node node, boolean unlink) { + if (unlink) { + node.prev.next = node.next; + node.next.prev = node.prev; + } + Node left = node.left; + Node right = node.right; + Node originalParent = node.parent; + if (left != null && right != null) { + Node adjacent = left.height > right.height ? left.last() : right.first(); + this.removeInternal(adjacent, false); + int leftHeight = 0; + left = node.left; + if (left != null) { + leftHeight = left.height; + adjacent.left = left; + left.parent = adjacent; + node.left = null; + } + int rightHeight = 0; + right = node.right; + if (right != null) { + rightHeight = right.height; + adjacent.right = right; + right.parent = adjacent; + node.right = null; + } + adjacent.height = Math.max(leftHeight, rightHeight) + 1; + this.replaceInParent(node, adjacent); + return; + } + if (left != null) { + this.replaceInParent(node, left); + node.left = null; + } else if (right != null) { + this.replaceInParent(node, right); + node.right = null; + } else { + this.replaceInParent(node, null); + } + this.rebalance(originalParent, false); + --this.size; + ++this.modCount; + } + + Node removeInternalByKey(Object key) { + Node node = this.findByObject(key); + if (node != null) { + this.removeInternal(node, true); + } + return node; + } + + private void replaceInParent(Node node, Node replacement) { + Node parent = node.parent; + node.parent = null; + if (replacement != null) { + replacement.parent = parent; + } + if (parent != null) { + if (parent.left == node) { + parent.left = replacement; + } else { + assert (parent.right == node); + parent.right = replacement; + } + } else { + this.root = replacement; + } + } + + private void rebalance(Node unbalanced, boolean insert) { + Node node = unbalanced; + while (node != null) { + Node right; + int rightHeight; + Node left = node.left; + int leftHeight = left != null ? left.height : 0; + int delta = leftHeight - (rightHeight = (right = node.right) != null ? right.height : 0); + if (delta == -2) { + Node rightRight; + int rightRightHeight; + Node rightLeft = right.left; + int rightLeftHeight = rightLeft != null ? rightLeft.height : 0; + int rightDelta = rightLeftHeight - (rightRightHeight = (rightRight = right.right) != null ? rightRight.height : 0); + if (rightDelta == -1 || rightDelta == 0 && !insert) { + this.rotateLeft(node); + } else { + assert (rightDelta == 1); + this.rotateRight(right); + this.rotateLeft(node); + } + if (insert) { + break; + } + } else if (delta == 2) { + Node leftRight; + int leftRightHeight; + Node leftLeft = left.left; + int leftLeftHeight = leftLeft != null ? leftLeft.height : 0; + int leftDelta = leftLeftHeight - (leftRightHeight = (leftRight = left.right) != null ? leftRight.height : 0); + if (leftDelta == 1 || leftDelta == 0 && !insert) { + this.rotateRight(node); + } else { + assert (leftDelta == -1); + this.rotateLeft(left); + this.rotateRight(node); + } + if (insert) { + break; + } + } else if (delta == 0) { + node.height = leftHeight + 1; + if (insert) { + break; + } + } else { + assert (delta == -1 || delta == 1); + node.height = Math.max(leftHeight, rightHeight) + 1; + if (!insert) break; + } + node = node.parent; + } + } + + private void rotateLeft(Node root) { + Node left = root.left; + Node pivot = root.right; + Node pivotLeft = pivot.left; + Node pivotRight = pivot.right; + root.right = pivotLeft; + if (pivotLeft != null) { + pivotLeft.parent = root; + } + this.replaceInParent(root, pivot); + pivot.left = root; + root.parent = pivot; + root.height = Math.max(left != null ? left.height : 0, pivotLeft != null ? pivotLeft.height : 0) + 1; + pivot.height = Math.max(root.height, pivotRight != null ? pivotRight.height : 0) + 1; + } + + private void rotateRight(Node root) { + Node pivot = root.left; + Node right = root.right; + Node pivotLeft = pivot.left; + Node pivotRight = pivot.right; + root.left = pivotRight; + if (pivotRight != null) { + pivotRight.parent = root; + } + this.replaceInParent(root, pivot); + pivot.right = root; + root.parent = pivot; + root.height = Math.max(right != null ? right.height : 0, pivotRight != null ? pivotRight.height : 0) + 1; + pivot.height = Math.max(root.height, pivotLeft != null ? pivotLeft.height : 0) + 1; + } + + @Override + public Set> entrySet() { + EntrySet result = this.entrySet; + return result != null ? result : (this.entrySet = new EntrySet()); + } + + @Override + public Set keySet() { + KeySet result = this.keySet; + return result != null ? result : (this.keySet = new KeySet()); + } + + private Object writeReplace() throws ObjectStreamException { + return new LinkedHashMap(this); + } + + /* + * This class specifies class file version 49.0 but uses Java 6 signatures. Assumed Java 6. + */ + class KeySet + extends AbstractSet { + KeySet() { + } + + @Override + public int size() { + return LinkedTreeMap.this.size; + } + + @Override + public Iterator iterator() { + return new LinkedTreeMapIterator(){ + + @Override + public K next() { + return this.nextNode().key; + } + }; + } + + @Override + public boolean contains(Object o) { + return LinkedTreeMap.this.containsKey(o); + } + + @Override + public boolean remove(Object key) { + return LinkedTreeMap.this.removeInternalByKey(key) != null; + } + + @Override + public void clear() { + LinkedTreeMap.this.clear(); + } + } + + /* + * This class specifies class file version 49.0 but uses Java 6 signatures. Assumed Java 6. + */ + class EntrySet + extends AbstractSet> { + EntrySet() { + } + + @Override + public int size() { + return LinkedTreeMap.this.size; + } + + @Override + public Iterator> iterator() { + return new LinkedTreeMapIterator>(){ + + @Override + public Map.Entry next() { + return this.nextNode(); + } + }; + } + + @Override + public boolean contains(Object o) { + return o instanceof Map.Entry && LinkedTreeMap.this.findByEntry((Map.Entry)o) != null; + } + + @Override + public boolean remove(Object o) { + if (!(o instanceof Map.Entry)) { + return false; + } + Node node = LinkedTreeMap.this.findByEntry((Map.Entry)o); + if (node == null) { + return false; + } + LinkedTreeMap.this.removeInternal(node, true); + return true; + } + + @Override + public void clear() { + LinkedTreeMap.this.clear(); + } + } + + /* + * This class specifies class file version 49.0 but uses Java 6 signatures. Assumed Java 6. + */ + private abstract class LinkedTreeMapIterator + implements Iterator { + Node next; + Node lastReturned; + int expectedModCount; + + private LinkedTreeMapIterator() { + this.next = LinkedTreeMap.this.header.next; + this.lastReturned = null; + this.expectedModCount = LinkedTreeMap.this.modCount; + } + + @Override + public final boolean hasNext() { + return this.next != LinkedTreeMap.this.header; + } + + final Node nextNode() { + Node e = this.next; + if (e == LinkedTreeMap.this.header) { + throw new NoSuchElementException(); + } + if (LinkedTreeMap.this.modCount != this.expectedModCount) { + throw new ConcurrentModificationException(); + } + this.next = e.next; + this.lastReturned = e; + return this.lastReturned; + } + + @Override + public final void remove() { + if (this.lastReturned == null) { + throw new IllegalStateException(); + } + LinkedTreeMap.this.removeInternal(this.lastReturned, true); + this.lastReturned = null; + this.expectedModCount = LinkedTreeMap.this.modCount; + } + } + + /* + * This class specifies class file version 49.0 but uses Java 6 signatures. Assumed Java 6. + */ + static final class Node + implements Map.Entry { + Node parent; + Node left; + Node right; + Node next; + Node prev; + final K key; + V value; + int height; + + Node() { + this.key = null; + this.next = this.prev = this; + } + + Node(Node parent, K key, Node next, Node prev) { + this.parent = parent; + this.key = key; + this.height = 1; + this.next = next; + this.prev = prev; + prev.next = this; + next.prev = this; + } + + @Override + public K getKey() { + return this.key; + } + + @Override + public V getValue() { + return this.value; + } + + @Override + public V setValue(V value) { + V oldValue = this.value; + this.value = value; + return oldValue; + } + + @Override + public boolean equals(Object o) { + if (o instanceof Map.Entry) { + Map.Entry other = (Map.Entry)o; + return (this.key == null ? other.getKey() == null : this.key.equals(other.getKey())) && (this.value == null ? other.getValue() == null : this.value.equals(other.getValue())); + } + return false; + } + + @Override + public int hashCode() { + return (this.key == null ? 0 : this.key.hashCode()) ^ (this.value == null ? 0 : this.value.hashCode()); + } + + public String toString() { + return this.key + "=" + this.value; + } + + public Node first() { + Node node = this; + Node child = node.left; + while (child != null) { + node = child; + child = node.left; + } + return node; + } + + public Node last() { + Node node = this; + Node child = node.right; + while (child != null) { + node = child; + child = node.right; + } + return node; + } + } +} diff --git a/src/com/google/gson/internal/ObjectConstructor.java b/src/com/google/gson/internal/ObjectConstructor.java new file mode 100644 index 0000000..5c0e763 --- /dev/null +++ b/src/com/google/gson/internal/ObjectConstructor.java @@ -0,0 +1,11 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.gson.internal; + +/* + * This class specifies class file version 49.0 but uses Java 6 signatures. Assumed Java 6. + */ +public interface ObjectConstructor { + public T construct(); +} diff --git a/src/com/google/gson/internal/Primitives.java b/src/com/google/gson/internal/Primitives.java new file mode 100644 index 0000000..8b82a70 --- /dev/null +++ b/src/com/google/gson/internal/Primitives.java @@ -0,0 +1,60 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.gson.internal; + +import com.google.gson.internal.$Gson$Preconditions; +import java.lang.reflect.Type; +import java.util.Collections; +import java.util.HashMap; +import java.util.Map; + +/* + * This class specifies class file version 49.0 but uses Java 6 signatures. Assumed Java 6. + */ +public final class Primitives { + private static final Map, Class> PRIMITIVE_TO_WRAPPER_TYPE; + private static final Map, Class> WRAPPER_TO_PRIMITIVE_TYPE; + + private Primitives() { + } + + private static void add(Map, Class> forward, Map, Class> backward, Class key, Class value) { + forward.put(key, value); + backward.put(value, key); + } + + public static boolean isPrimitive(Type type) { + return PRIMITIVE_TO_WRAPPER_TYPE.containsKey(type); + } + + public static boolean isWrapperType(Type type) { + return WRAPPER_TO_PRIMITIVE_TYPE.containsKey($Gson$Preconditions.checkNotNull(type)); + } + + public static Class wrap(Class type) { + Class wrapped = PRIMITIVE_TO_WRAPPER_TYPE.get($Gson$Preconditions.checkNotNull(type)); + return wrapped == null ? type : wrapped; + } + + public static Class unwrap(Class type) { + Class unwrapped = WRAPPER_TO_PRIMITIVE_TYPE.get($Gson$Preconditions.checkNotNull(type)); + return unwrapped == null ? type : unwrapped; + } + + static { + HashMap primToWrap = new HashMap(16); + HashMap wrapToPrim = new HashMap(16); + Primitives.add(primToWrap, wrapToPrim, Boolean.TYPE, Boolean.class); + Primitives.add(primToWrap, wrapToPrim, Byte.TYPE, Byte.class); + Primitives.add(primToWrap, wrapToPrim, Character.TYPE, Character.class); + Primitives.add(primToWrap, wrapToPrim, Double.TYPE, Double.class); + Primitives.add(primToWrap, wrapToPrim, Float.TYPE, Float.class); + Primitives.add(primToWrap, wrapToPrim, Integer.TYPE, Integer.class); + Primitives.add(primToWrap, wrapToPrim, Long.TYPE, Long.class); + Primitives.add(primToWrap, wrapToPrim, Short.TYPE, Short.class); + Primitives.add(primToWrap, wrapToPrim, Void.TYPE, Void.class); + PRIMITIVE_TO_WRAPPER_TYPE = Collections.unmodifiableMap(primToWrap); + WRAPPER_TO_PRIMITIVE_TYPE = Collections.unmodifiableMap(wrapToPrim); + } +} diff --git a/src/com/google/gson/internal/Streams.java b/src/com/google/gson/internal/Streams.java new file mode 100644 index 0000000..94cfd1f --- /dev/null +++ b/src/com/google/gson/internal/Streams.java @@ -0,0 +1,96 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.gson.internal; + +import com.google.gson.JsonElement; +import com.google.gson.JsonIOException; +import com.google.gson.JsonNull; +import com.google.gson.JsonParseException; +import com.google.gson.JsonSyntaxException; +import com.google.gson.internal.bind.TypeAdapters; +import com.google.gson.stream.JsonReader; +import com.google.gson.stream.JsonWriter; +import com.google.gson.stream.MalformedJsonException; +import java.io.EOFException; +import java.io.IOException; +import java.io.Writer; + +public final class Streams { + public static JsonElement parse(JsonReader reader) throws JsonParseException { + boolean isEmpty = true; + try { + reader.peek(); + isEmpty = false; + return TypeAdapters.JSON_ELEMENT.read(reader); + } + catch (EOFException e) { + if (isEmpty) { + return JsonNull.INSTANCE; + } + throw new JsonSyntaxException(e); + } + catch (MalformedJsonException e) { + throw new JsonSyntaxException(e); + } + catch (IOException e) { + throw new JsonIOException(e); + } + catch (NumberFormatException e) { + throw new JsonSyntaxException(e); + } + } + + public static void write(JsonElement element, JsonWriter writer) throws IOException { + TypeAdapters.JSON_ELEMENT.write(writer, element); + } + + public static Writer writerForAppendable(Appendable appendable) { + return appendable instanceof Writer ? (Writer)appendable : new AppendableWriter(appendable); + } + + private static final class AppendableWriter + extends Writer { + private final Appendable appendable; + private final CurrentWrite currentWrite = new CurrentWrite(); + + private AppendableWriter(Appendable appendable) { + this.appendable = appendable; + } + + public void write(char[] chars, int offset, int length) throws IOException { + this.currentWrite.chars = chars; + this.appendable.append(this.currentWrite, offset, offset + length); + } + + public void write(int i) throws IOException { + this.appendable.append((char)i); + } + + public void flush() { + } + + public void close() { + } + + static class CurrentWrite + implements CharSequence { + char[] chars; + + CurrentWrite() { + } + + public int length() { + return this.chars.length; + } + + public char charAt(int i) { + return this.chars[i]; + } + + public CharSequence subSequence(int start, int end) { + return new String(this.chars, start, end - start); + } + } + } +} diff --git a/src/com/google/gson/internal/UnsafeAllocator.java b/src/com/google/gson/internal/UnsafeAllocator.java new file mode 100644 index 0000000..6b79a89 --- /dev/null +++ b/src/com/google/gson/internal/UnsafeAllocator.java @@ -0,0 +1,71 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.gson.internal; + +import java.io.ObjectInputStream; +import java.io.ObjectStreamClass; +import java.lang.reflect.Field; +import java.lang.reflect.Method; + +/* + * This class specifies class file version 49.0 but uses Java 6 signatures. Assumed Java 6. + */ +public abstract class UnsafeAllocator { + public abstract T newInstance(Class var1) throws Exception; + + public static UnsafeAllocator create() { + try { + Class unsafeClass = Class.forName("sun.misc.Unsafe"); + Field f = unsafeClass.getDeclaredField("theUnsafe"); + f.setAccessible(true); + final Object unsafe = f.get(null); + final Method allocateInstance = unsafeClass.getMethod("allocateInstance", Class.class); + return new UnsafeAllocator(){ + + @Override + public T newInstance(Class c) throws Exception { + return (T)allocateInstance.invoke(unsafe, c); + } + }; + } + catch (Exception ignored) { + try { + final Method newInstance = ObjectInputStream.class.getDeclaredMethod("newInstance", Class.class, Class.class); + newInstance.setAccessible(true); + return new UnsafeAllocator(){ + + @Override + public T newInstance(Class c) throws Exception { + return (T)newInstance.invoke(null, c, Object.class); + } + }; + } + catch (Exception ignored2) { + try { + Method getConstructorId = ObjectStreamClass.class.getDeclaredMethod("getConstructorId", Class.class); + getConstructorId.setAccessible(true); + final int constructorId = (Integer)getConstructorId.invoke(null, Object.class); + final Method newInstance = ObjectStreamClass.class.getDeclaredMethod("newInstance", Class.class, Integer.TYPE); + newInstance.setAccessible(true); + return new UnsafeAllocator(){ + + @Override + public T newInstance(Class c) throws Exception { + return (T)newInstance.invoke(null, c, constructorId); + } + }; + } + catch (Exception exception) { + return new UnsafeAllocator(){ + + @Override + public T newInstance(Class c) { + throw new UnsupportedOperationException("Cannot allocate " + c); + } + }; + } + } + } + } +} diff --git a/src/com/google/gson/internal/bind/ArrayTypeAdapter.java b/src/com/google/gson/internal/bind/ArrayTypeAdapter.java new file mode 100644 index 0000000..4cb3b47 --- /dev/null +++ b/src/com/google/gson/internal/bind/ArrayTypeAdapter.java @@ -0,0 +1,81 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.gson.internal.bind; + +import com.google.gson.Gson; +import com.google.gson.TypeAdapter; +import com.google.gson.TypeAdapterFactory; +import com.google.gson.internal.$Gson$Types; +import com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper; +import com.google.gson.reflect.TypeToken; +import com.google.gson.stream.JsonReader; +import com.google.gson.stream.JsonToken; +import com.google.gson.stream.JsonWriter; +import java.io.IOException; +import java.lang.reflect.Array; +import java.lang.reflect.GenericArrayType; +import java.lang.reflect.Type; +import java.util.ArrayList; + +/* + * This class specifies class file version 49.0 but uses Java 6 signatures. Assumed Java 6. + */ +public final class ArrayTypeAdapter +extends TypeAdapter { + public static final TypeAdapterFactory FACTORY = new TypeAdapterFactory(){ + + @Override + public TypeAdapter create(Gson gson, TypeToken typeToken) { + Type type = typeToken.getType(); + if (!(type instanceof GenericArrayType || type instanceof Class && ((Class)type).isArray())) { + return null; + } + Type componentType = $Gson$Types.getArrayComponentType(type); + TypeAdapter componentTypeAdapter = gson.getAdapter(TypeToken.get(componentType)); + return new ArrayTypeAdapter(gson, componentTypeAdapter, $Gson$Types.getRawType(componentType)); + } + }; + private final Class componentType; + private final TypeAdapter componentTypeAdapter; + + public ArrayTypeAdapter(Gson context, TypeAdapter componentTypeAdapter, Class componentType) { + this.componentTypeAdapter = new TypeAdapterRuntimeTypeWrapper(context, componentTypeAdapter, componentType); + this.componentType = componentType; + } + + @Override + public Object read(JsonReader in) throws IOException { + if (in.peek() == JsonToken.NULL) { + in.nextNull(); + return null; + } + ArrayList list = new ArrayList(); + in.beginArray(); + while (in.hasNext()) { + E instance = this.componentTypeAdapter.read(in); + list.add(instance); + } + in.endArray(); + Object array = Array.newInstance(this.componentType, list.size()); + for (int i = 0; i < list.size(); ++i) { + Array.set(array, i, list.get(i)); + } + return array; + } + + @Override + public void write(JsonWriter out, Object array) throws IOException { + if (array == null) { + out.nullValue(); + return; + } + out.beginArray(); + int length = Array.getLength(array); + for (int i = 0; i < length; ++i) { + Object value = Array.get(array, i); + this.componentTypeAdapter.write(out, value); + } + out.endArray(); + } +} diff --git a/src/com/google/gson/internal/bind/CollectionTypeAdapterFactory.java b/src/com/google/gson/internal/bind/CollectionTypeAdapterFactory.java new file mode 100644 index 0000000..0129abb --- /dev/null +++ b/src/com/google/gson/internal/bind/CollectionTypeAdapterFactory.java @@ -0,0 +1,88 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.gson.internal.bind; + +import com.google.gson.Gson; +import com.google.gson.TypeAdapter; +import com.google.gson.TypeAdapterFactory; +import com.google.gson.internal.$Gson$Types; +import com.google.gson.internal.ConstructorConstructor; +import com.google.gson.internal.ObjectConstructor; +import com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper; +import com.google.gson.reflect.TypeToken; +import com.google.gson.stream.JsonReader; +import com.google.gson.stream.JsonToken; +import com.google.gson.stream.JsonWriter; +import java.io.IOException; +import java.lang.reflect.Type; +import java.util.Collection; + +/* + * This class specifies class file version 49.0 but uses Java 6 signatures. Assumed Java 6. + */ +public final class CollectionTypeAdapterFactory +implements TypeAdapterFactory { + private final ConstructorConstructor constructorConstructor; + + public CollectionTypeAdapterFactory(ConstructorConstructor constructorConstructor) { + this.constructorConstructor = constructorConstructor; + } + + @Override + public TypeAdapter create(Gson gson, TypeToken typeToken) { + Type type = typeToken.getType(); + Class rawType = typeToken.getRawType(); + if (!Collection.class.isAssignableFrom(rawType)) { + return null; + } + Type elementType = $Gson$Types.getCollectionElementType(type, rawType); + TypeAdapter elementTypeAdapter = gson.getAdapter(TypeToken.get(elementType)); + ObjectConstructor constructor = this.constructorConstructor.get(typeToken); + Adapter result = new Adapter(gson, elementType, elementTypeAdapter, constructor); + return result; + } + + /* + * This class specifies class file version 49.0 but uses Java 6 signatures. Assumed Java 6. + */ + private static final class Adapter + extends TypeAdapter> { + private final TypeAdapter elementTypeAdapter; + private final ObjectConstructor> constructor; + + public Adapter(Gson context, Type elementType, TypeAdapter elementTypeAdapter, ObjectConstructor> constructor) { + this.elementTypeAdapter = new TypeAdapterRuntimeTypeWrapper(context, elementTypeAdapter, elementType); + this.constructor = constructor; + } + + @Override + public Collection read(JsonReader in) throws IOException { + if (in.peek() == JsonToken.NULL) { + in.nextNull(); + return null; + } + Collection collection = this.constructor.construct(); + in.beginArray(); + while (in.hasNext()) { + E instance = this.elementTypeAdapter.read(in); + collection.add(instance); + } + in.endArray(); + return collection; + } + + @Override + public void write(JsonWriter out, Collection collection) throws IOException { + if (collection == null) { + out.nullValue(); + return; + } + out.beginArray(); + for (E element : collection) { + this.elementTypeAdapter.write(out, element); + } + out.endArray(); + } + } +} diff --git a/src/com/google/gson/internal/bind/DateTypeAdapter.java b/src/com/google/gson/internal/bind/DateTypeAdapter.java new file mode 100644 index 0000000..84274c4 --- /dev/null +++ b/src/com/google/gson/internal/bind/DateTypeAdapter.java @@ -0,0 +1,81 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.gson.internal.bind; + +import com.google.gson.Gson; +import com.google.gson.JsonSyntaxException; +import com.google.gson.TypeAdapter; +import com.google.gson.TypeAdapterFactory; +import com.google.gson.reflect.TypeToken; +import com.google.gson.stream.JsonReader; +import com.google.gson.stream.JsonToken; +import com.google.gson.stream.JsonWriter; +import java.io.IOException; +import java.text.DateFormat; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.Locale; +import java.util.TimeZone; + +/* + * This class specifies class file version 49.0 but uses Java 6 signatures. Assumed Java 6. + */ +public final class DateTypeAdapter +extends TypeAdapter { + public static final TypeAdapterFactory FACTORY = new TypeAdapterFactory(){ + + @Override + public TypeAdapter create(Gson gson, TypeToken typeToken) { + return typeToken.getRawType() == Date.class ? new DateTypeAdapter() : null; + } + }; + private final DateFormat enUsFormat = DateFormat.getDateTimeInstance(2, 2, Locale.US); + private final DateFormat localFormat = DateFormat.getDateTimeInstance(2, 2); + private final DateFormat iso8601Format = DateTypeAdapter.buildIso8601Format(); + + private static DateFormat buildIso8601Format() { + SimpleDateFormat iso8601Format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'", Locale.US); + iso8601Format.setTimeZone(TimeZone.getTimeZone("UTC")); + return iso8601Format; + } + + @Override + public Date read(JsonReader in) throws IOException { + if (in.peek() == JsonToken.NULL) { + in.nextNull(); + return null; + } + return this.deserializeToDate(in.nextString()); + } + + private synchronized Date deserializeToDate(String json) { + try { + return this.localFormat.parse(json); + } + catch (ParseException ignored) { + try { + return this.enUsFormat.parse(json); + } + catch (ParseException ignored2) { + try { + return this.iso8601Format.parse(json); + } + catch (ParseException e) { + throw new JsonSyntaxException(json, e); + } + } + } + } + + @Override + public synchronized void write(JsonWriter out, Date value) throws IOException { + if (value == null) { + out.nullValue(); + return; + } + String dateFormatAsString = this.enUsFormat.format(value); + out.value(dateFormatAsString); + } +} diff --git a/src/com/google/gson/internal/bind/JsonTreeReader.java b/src/com/google/gson/internal/bind/JsonTreeReader.java new file mode 100644 index 0000000..0f999cf --- /dev/null +++ b/src/com/google/gson/internal/bind/JsonTreeReader.java @@ -0,0 +1,211 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.gson.internal.bind; + +import com.google.gson.JsonArray; +import com.google.gson.JsonElement; +import com.google.gson.JsonNull; +import com.google.gson.JsonObject; +import com.google.gson.JsonPrimitive; +import com.google.gson.stream.JsonReader; +import com.google.gson.stream.JsonToken; +import java.io.IOException; +import java.io.Reader; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; +import java.util.Map; + +public final class JsonTreeReader +extends JsonReader { + private static final Reader UNREADABLE_READER = new Reader(){ + + public int read(char[] buffer, int offset, int count) throws IOException { + throw new AssertionError(); + } + + public void close() throws IOException { + throw new AssertionError(); + } + }; + private static final Object SENTINEL_CLOSED = new Object(); + private final List stack = new ArrayList(); + + public JsonTreeReader(JsonElement element) { + super(UNREADABLE_READER); + this.stack.add(element); + } + + public void beginArray() throws IOException { + this.expect(JsonToken.BEGIN_ARRAY); + JsonArray array = (JsonArray)this.peekStack(); + this.stack.add(array.iterator()); + } + + public void endArray() throws IOException { + this.expect(JsonToken.END_ARRAY); + this.popStack(); + this.popStack(); + } + + public void beginObject() throws IOException { + this.expect(JsonToken.BEGIN_OBJECT); + JsonObject object = (JsonObject)this.peekStack(); + this.stack.add(object.entrySet().iterator()); + } + + public void endObject() throws IOException { + this.expect(JsonToken.END_OBJECT); + this.popStack(); + this.popStack(); + } + + public boolean hasNext() throws IOException { + JsonToken token = this.peek(); + return token != JsonToken.END_OBJECT && token != JsonToken.END_ARRAY; + } + + public JsonToken peek() throws IOException { + if (this.stack.isEmpty()) { + return JsonToken.END_DOCUMENT; + } + Object o = this.peekStack(); + if (o instanceof Iterator) { + boolean isObject = this.stack.get(this.stack.size() - 2) instanceof JsonObject; + Iterator iterator = (Iterator)o; + if (iterator.hasNext()) { + if (isObject) { + return JsonToken.NAME; + } + this.stack.add(iterator.next()); + return this.peek(); + } + return isObject ? JsonToken.END_OBJECT : JsonToken.END_ARRAY; + } + if (o instanceof JsonObject) { + return JsonToken.BEGIN_OBJECT; + } + if (o instanceof JsonArray) { + return JsonToken.BEGIN_ARRAY; + } + if (o instanceof JsonPrimitive) { + JsonPrimitive primitive = (JsonPrimitive)o; + if (primitive.isString()) { + return JsonToken.STRING; + } + if (primitive.isBoolean()) { + return JsonToken.BOOLEAN; + } + if (primitive.isNumber()) { + return JsonToken.NUMBER; + } + throw new AssertionError(); + } + if (o instanceof JsonNull) { + return JsonToken.NULL; + } + if (o == SENTINEL_CLOSED) { + throw new IllegalStateException("JsonReader is closed"); + } + throw new AssertionError(); + } + + private Object peekStack() { + return this.stack.get(this.stack.size() - 1); + } + + private Object popStack() { + return this.stack.remove(this.stack.size() - 1); + } + + private void expect(JsonToken expected) throws IOException { + if (this.peek() != expected) { + throw new IllegalStateException("Expected " + (Object)((Object)expected) + " but was " + (Object)((Object)this.peek())); + } + } + + public String nextName() throws IOException { + this.expect(JsonToken.NAME); + Iterator i = (Iterator)this.peekStack(); + Map.Entry entry = (Map.Entry)i.next(); + this.stack.add(entry.getValue()); + return (String)entry.getKey(); + } + + public String nextString() throws IOException { + JsonToken token = this.peek(); + if (token != JsonToken.STRING && token != JsonToken.NUMBER) { + throw new IllegalStateException("Expected " + (Object)((Object)JsonToken.STRING) + " but was " + (Object)((Object)token)); + } + return ((JsonPrimitive)this.popStack()).getAsString(); + } + + public boolean nextBoolean() throws IOException { + this.expect(JsonToken.BOOLEAN); + return ((JsonPrimitive)this.popStack()).getAsBoolean(); + } + + public void nextNull() throws IOException { + this.expect(JsonToken.NULL); + this.popStack(); + } + + public double nextDouble() throws IOException { + JsonToken token = this.peek(); + if (token != JsonToken.NUMBER && token != JsonToken.STRING) { + throw new IllegalStateException("Expected " + (Object)((Object)JsonToken.NUMBER) + " but was " + (Object)((Object)token)); + } + double result = ((JsonPrimitive)this.peekStack()).getAsDouble(); + if (!this.isLenient() && (Double.isNaN(result) || Double.isInfinite(result))) { + throw new NumberFormatException("JSON forbids NaN and infinities: " + result); + } + this.popStack(); + return result; + } + + public long nextLong() throws IOException { + JsonToken token = this.peek(); + if (token != JsonToken.NUMBER && token != JsonToken.STRING) { + throw new IllegalStateException("Expected " + (Object)((Object)JsonToken.NUMBER) + " but was " + (Object)((Object)token)); + } + long result = ((JsonPrimitive)this.peekStack()).getAsLong(); + this.popStack(); + return result; + } + + public int nextInt() throws IOException { + JsonToken token = this.peek(); + if (token != JsonToken.NUMBER && token != JsonToken.STRING) { + throw new IllegalStateException("Expected " + (Object)((Object)JsonToken.NUMBER) + " but was " + (Object)((Object)token)); + } + int result = ((JsonPrimitive)this.peekStack()).getAsInt(); + this.popStack(); + return result; + } + + public void close() throws IOException { + this.stack.clear(); + this.stack.add(SENTINEL_CLOSED); + } + + public void skipValue() throws IOException { + if (this.peek() == JsonToken.NAME) { + this.nextName(); + } else { + this.popStack(); + } + } + + public String toString() { + return this.getClass().getSimpleName(); + } + + public void promoteNameToValue() throws IOException { + this.expect(JsonToken.NAME); + Iterator i = (Iterator)this.peekStack(); + Map.Entry entry = (Map.Entry)i.next(); + this.stack.add(entry.getValue()); + this.stack.add(new JsonPrimitive((String)entry.getKey())); + } +} diff --git a/src/com/google/gson/internal/bind/JsonTreeWriter.java b/src/com/google/gson/internal/bind/JsonTreeWriter.java new file mode 100644 index 0000000..8ffb081 --- /dev/null +++ b/src/com/google/gson/internal/bind/JsonTreeWriter.java @@ -0,0 +1,174 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.gson.internal.bind; + +import com.google.gson.JsonArray; +import com.google.gson.JsonElement; +import com.google.gson.JsonNull; +import com.google.gson.JsonObject; +import com.google.gson.JsonPrimitive; +import com.google.gson.stream.JsonWriter; +import java.io.IOException; +import java.io.Writer; +import java.util.ArrayList; +import java.util.List; + +public final class JsonTreeWriter +extends JsonWriter { + private static final Writer UNWRITABLE_WRITER = new Writer(){ + + public void write(char[] buffer, int offset, int counter) { + throw new AssertionError(); + } + + public void flush() throws IOException { + throw new AssertionError(); + } + + public void close() throws IOException { + throw new AssertionError(); + } + }; + private static final JsonPrimitive SENTINEL_CLOSED = new JsonPrimitive("closed"); + private final List stack = new ArrayList(); + private String pendingName; + private JsonElement product = JsonNull.INSTANCE; + + public JsonTreeWriter() { + super(UNWRITABLE_WRITER); + } + + public JsonElement get() { + if (!this.stack.isEmpty()) { + throw new IllegalStateException("Expected one JSON element but was " + this.stack); + } + return this.product; + } + + private JsonElement peek() { + return this.stack.get(this.stack.size() - 1); + } + + private void put(JsonElement value) { + if (this.pendingName != null) { + if (!value.isJsonNull() || this.getSerializeNulls()) { + JsonObject object = (JsonObject)this.peek(); + object.add(this.pendingName, value); + } + this.pendingName = null; + } else if (this.stack.isEmpty()) { + this.product = value; + } else { + JsonElement element = this.peek(); + if (element instanceof JsonArray) { + ((JsonArray)element).add(value); + } else { + throw new IllegalStateException(); + } + } + } + + public JsonWriter beginArray() throws IOException { + JsonArray array = new JsonArray(); + this.put(array); + this.stack.add(array); + return this; + } + + public JsonWriter endArray() throws IOException { + if (this.stack.isEmpty() || this.pendingName != null) { + throw new IllegalStateException(); + } + JsonElement element = this.peek(); + if (element instanceof JsonArray) { + this.stack.remove(this.stack.size() - 1); + return this; + } + throw new IllegalStateException(); + } + + public JsonWriter beginObject() throws IOException { + JsonObject object = new JsonObject(); + this.put(object); + this.stack.add(object); + return this; + } + + public JsonWriter endObject() throws IOException { + if (this.stack.isEmpty() || this.pendingName != null) { + throw new IllegalStateException(); + } + JsonElement element = this.peek(); + if (element instanceof JsonObject) { + this.stack.remove(this.stack.size() - 1); + return this; + } + throw new IllegalStateException(); + } + + public JsonWriter name(String name) throws IOException { + if (this.stack.isEmpty() || this.pendingName != null) { + throw new IllegalStateException(); + } + JsonElement element = this.peek(); + if (element instanceof JsonObject) { + this.pendingName = name; + return this; + } + throw new IllegalStateException(); + } + + public JsonWriter value(String value) throws IOException { + if (value == null) { + return this.nullValue(); + } + this.put(new JsonPrimitive(value)); + return this; + } + + public JsonWriter nullValue() throws IOException { + this.put(JsonNull.INSTANCE); + return this; + } + + public JsonWriter value(boolean value) throws IOException { + this.put(new JsonPrimitive(value)); + return this; + } + + public JsonWriter value(double value) throws IOException { + if (!this.isLenient() && (Double.isNaN(value) || Double.isInfinite(value))) { + throw new IllegalArgumentException("JSON forbids NaN and infinities: " + value); + } + this.put(new JsonPrimitive(value)); + return this; + } + + public JsonWriter value(long value) throws IOException { + this.put(new JsonPrimitive(value)); + return this; + } + + public JsonWriter value(Number value) throws IOException { + double d; + if (value == null) { + return this.nullValue(); + } + if (!this.isLenient() && (Double.isNaN(d = value.doubleValue()) || Double.isInfinite(d))) { + throw new IllegalArgumentException("JSON forbids NaN and infinities: " + value); + } + this.put(new JsonPrimitive(value)); + return this; + } + + public void flush() throws IOException { + } + + public void close() throws IOException { + if (!this.stack.isEmpty()) { + throw new IOException("Incomplete document"); + } + this.stack.add(SENTINEL_CLOSED); + } +} diff --git a/src/com/google/gson/internal/bind/MapTypeAdapterFactory.java b/src/com/google/gson/internal/bind/MapTypeAdapterFactory.java new file mode 100644 index 0000000..afdd323 --- /dev/null +++ b/src/com/google/gson/internal/bind/MapTypeAdapterFactory.java @@ -0,0 +1,176 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.gson.internal.bind; + +import com.google.gson.Gson; +import com.google.gson.JsonElement; +import com.google.gson.JsonPrimitive; +import com.google.gson.JsonSyntaxException; +import com.google.gson.TypeAdapter; +import com.google.gson.TypeAdapterFactory; +import com.google.gson.internal.$Gson$Types; +import com.google.gson.internal.ConstructorConstructor; +import com.google.gson.internal.JsonReaderInternalAccess; +import com.google.gson.internal.ObjectConstructor; +import com.google.gson.internal.Streams; +import com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper; +import com.google.gson.internal.bind.TypeAdapters; +import com.google.gson.reflect.TypeToken; +import com.google.gson.stream.JsonReader; +import com.google.gson.stream.JsonToken; +import com.google.gson.stream.JsonWriter; +import java.io.IOException; +import java.lang.reflect.Type; +import java.util.ArrayList; +import java.util.Map; + +/* + * This class specifies class file version 49.0 but uses Java 6 signatures. Assumed Java 6. + */ +public final class MapTypeAdapterFactory +implements TypeAdapterFactory { + private final ConstructorConstructor constructorConstructor; + private final boolean complexMapKeySerialization; + + public MapTypeAdapterFactory(ConstructorConstructor constructorConstructor, boolean complexMapKeySerialization) { + this.constructorConstructor = constructorConstructor; + this.complexMapKeySerialization = complexMapKeySerialization; + } + + @Override + public TypeAdapter create(Gson gson, TypeToken typeToken) { + Type type = typeToken.getType(); + Class rawType = typeToken.getRawType(); + if (!Map.class.isAssignableFrom(rawType)) { + return null; + } + Class rawTypeOfSrc = $Gson$Types.getRawType(type); + Type[] keyAndValueTypes = $Gson$Types.getMapKeyAndValueTypes(type, rawTypeOfSrc); + TypeAdapter keyAdapter = this.getKeyAdapter(gson, keyAndValueTypes[0]); + TypeAdapter valueAdapter = gson.getAdapter(TypeToken.get(keyAndValueTypes[1])); + ObjectConstructor constructor = this.constructorConstructor.get(typeToken); + Adapter result = new Adapter(gson, keyAndValueTypes[0], keyAdapter, keyAndValueTypes[1], valueAdapter, constructor); + return result; + } + + private TypeAdapter getKeyAdapter(Gson context, Type keyType) { + return keyType == Boolean.TYPE || keyType == Boolean.class ? TypeAdapters.BOOLEAN_AS_STRING : context.getAdapter(TypeToken.get(keyType)); + } + + /* + * This class specifies class file version 49.0 but uses Java 6 signatures. Assumed Java 6. + */ + private final class Adapter + extends TypeAdapter> { + private final TypeAdapter keyTypeAdapter; + private final TypeAdapter valueTypeAdapter; + private final ObjectConstructor> constructor; + + public Adapter(Gson context, Type keyType, TypeAdapter keyTypeAdapter, Type valueType, TypeAdapter valueTypeAdapter, ObjectConstructor> constructor) { + this.keyTypeAdapter = new TypeAdapterRuntimeTypeWrapper(context, keyTypeAdapter, keyType); + this.valueTypeAdapter = new TypeAdapterRuntimeTypeWrapper(context, valueTypeAdapter, valueType); + this.constructor = constructor; + } + + @Override + public Map read(JsonReader in) throws IOException { + JsonToken peek = in.peek(); + if (peek == JsonToken.NULL) { + in.nextNull(); + return null; + } + Map map = this.constructor.construct(); + if (peek == JsonToken.BEGIN_ARRAY) { + in.beginArray(); + while (in.hasNext()) { + in.beginArray(); + K key = this.keyTypeAdapter.read(in); + V value = this.valueTypeAdapter.read(in); + V replaced = map.put(key, value); + if (replaced != null) { + throw new JsonSyntaxException("duplicate key: " + key); + } + in.endArray(); + } + in.endArray(); + } else { + in.beginObject(); + while (in.hasNext()) { + V value; + JsonReaderInternalAccess.INSTANCE.promoteNameToValue(in); + K key = this.keyTypeAdapter.read(in); + V replaced = map.put(key, value = this.valueTypeAdapter.read(in)); + if (replaced == null) continue; + throw new JsonSyntaxException("duplicate key: " + key); + } + in.endObject(); + } + return map; + } + + @Override + public void write(JsonWriter out, Map map) throws IOException { + if (map == null) { + out.nullValue(); + return; + } + if (!MapTypeAdapterFactory.this.complexMapKeySerialization) { + out.beginObject(); + for (Map.Entry entry : map.entrySet()) { + out.name(String.valueOf(entry.getKey())); + this.valueTypeAdapter.write(out, entry.getValue()); + } + out.endObject(); + return; + } + boolean hasComplexKeys = false; + ArrayList keys = new ArrayList(map.size()); + ArrayList values = new ArrayList(map.size()); + for (Map.Entry entry : map.entrySet()) { + JsonElement keyElement = this.keyTypeAdapter.toJsonTree(entry.getKey()); + keys.add(keyElement); + values.add(entry.getValue()); + hasComplexKeys |= keyElement.isJsonArray() || keyElement.isJsonObject(); + } + if (hasComplexKeys) { + out.beginArray(); + for (int i = 0; i < keys.size(); ++i) { + out.beginArray(); + Streams.write((JsonElement)keys.get(i), out); + this.valueTypeAdapter.write(out, values.get(i)); + out.endArray(); + } + out.endArray(); + } else { + out.beginObject(); + for (int i = 0; i < keys.size(); ++i) { + JsonElement keyElement = (JsonElement)keys.get(i); + out.name(this.keyToString(keyElement)); + this.valueTypeAdapter.write(out, values.get(i)); + } + out.endObject(); + } + } + + private String keyToString(JsonElement keyElement) { + if (keyElement.isJsonPrimitive()) { + JsonPrimitive primitive = keyElement.getAsJsonPrimitive(); + if (primitive.isNumber()) { + return String.valueOf(primitive.getAsNumber()); + } + if (primitive.isBoolean()) { + return Boolean.toString(primitive.getAsBoolean()); + } + if (primitive.isString()) { + return primitive.getAsString(); + } + throw new AssertionError(); + } + if (keyElement.isJsonNull()) { + return "null"; + } + throw new AssertionError(); + } + } +} diff --git a/src/com/google/gson/internal/bind/ObjectTypeAdapter.java b/src/com/google/gson/internal/bind/ObjectTypeAdapter.java new file mode 100644 index 0000000..fdb697c --- /dev/null +++ b/src/com/google/gson/internal/bind/ObjectTypeAdapter.java @@ -0,0 +1,91 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.gson.internal.bind; + +import com.google.gson.Gson; +import com.google.gson.TypeAdapter; +import com.google.gson.TypeAdapterFactory; +import com.google.gson.internal.LinkedTreeMap; +import com.google.gson.reflect.TypeToken; +import com.google.gson.stream.JsonReader; +import com.google.gson.stream.JsonToken; +import com.google.gson.stream.JsonWriter; +import java.io.IOException; +import java.util.ArrayList; + +/* + * This class specifies class file version 49.0 but uses Java 6 signatures. Assumed Java 6. + */ +public final class ObjectTypeAdapter +extends TypeAdapter { + public static final TypeAdapterFactory FACTORY = new TypeAdapterFactory(){ + + @Override + public TypeAdapter create(Gson gson, TypeToken type) { + if (type.getRawType() == Object.class) { + return new ObjectTypeAdapter(gson); + } + return null; + } + }; + private final Gson gson; + + private ObjectTypeAdapter(Gson gson) { + this.gson = gson; + } + + @Override + public Object read(JsonReader in) throws IOException { + JsonToken token = in.peek(); + switch (token) { + case BEGIN_ARRAY: { + ArrayList list = new ArrayList(); + in.beginArray(); + while (in.hasNext()) { + list.add(this.read(in)); + } + in.endArray(); + return list; + } + case BEGIN_OBJECT: { + LinkedTreeMap map = new LinkedTreeMap(); + in.beginObject(); + while (in.hasNext()) { + map.put(in.nextName(), this.read(in)); + } + in.endObject(); + return map; + } + case STRING: { + return in.nextString(); + } + case NUMBER: { + return in.nextDouble(); + } + case BOOLEAN: { + return in.nextBoolean(); + } + case NULL: { + in.nextNull(); + return null; + } + } + throw new IllegalStateException(); + } + + @Override + public void write(JsonWriter out, Object value) throws IOException { + if (value == null) { + out.nullValue(); + return; + } + TypeAdapter typeAdapter = this.gson.getAdapter(value.getClass()); + if (typeAdapter instanceof ObjectTypeAdapter) { + out.beginObject(); + out.endObject(); + return; + } + typeAdapter.write(out, value); + } +} diff --git a/src/com/google/gson/internal/bind/ReflectiveTypeAdapterFactory.java b/src/com/google/gson/internal/bind/ReflectiveTypeAdapterFactory.java new file mode 100644 index 0000000..d78f5e5 --- /dev/null +++ b/src/com/google/gson/internal/bind/ReflectiveTypeAdapterFactory.java @@ -0,0 +1,189 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.gson.internal.bind; + +import com.google.gson.FieldNamingStrategy; +import com.google.gson.Gson; +import com.google.gson.JsonSyntaxException; +import com.google.gson.TypeAdapter; +import com.google.gson.TypeAdapterFactory; +import com.google.gson.annotations.SerializedName; +import com.google.gson.internal.$Gson$Types; +import com.google.gson.internal.ConstructorConstructor; +import com.google.gson.internal.Excluder; +import com.google.gson.internal.ObjectConstructor; +import com.google.gson.internal.Primitives; +import com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper; +import com.google.gson.reflect.TypeToken; +import com.google.gson.stream.JsonReader; +import com.google.gson.stream.JsonToken; +import com.google.gson.stream.JsonWriter; +import java.io.IOException; +import java.lang.reflect.Field; +import java.lang.reflect.Type; +import java.util.LinkedHashMap; +import java.util.Map; + +/* + * This class specifies class file version 49.0 but uses Java 6 signatures. Assumed Java 6. + */ +public final class ReflectiveTypeAdapterFactory +implements TypeAdapterFactory { + private final ConstructorConstructor constructorConstructor; + private final FieldNamingStrategy fieldNamingPolicy; + private final Excluder excluder; + + public ReflectiveTypeAdapterFactory(ConstructorConstructor constructorConstructor, FieldNamingStrategy fieldNamingPolicy, Excluder excluder) { + this.constructorConstructor = constructorConstructor; + this.fieldNamingPolicy = fieldNamingPolicy; + this.excluder = excluder; + } + + public boolean excludeField(Field f, boolean serialize) { + return !this.excluder.excludeClass(f.getType(), serialize) && !this.excluder.excludeField(f, serialize); + } + + private String getFieldName(Field f) { + SerializedName serializedName = f.getAnnotation(SerializedName.class); + return serializedName == null ? this.fieldNamingPolicy.translateName(f) : serializedName.value(); + } + + @Override + public TypeAdapter create(Gson gson, TypeToken type) { + Class raw = type.getRawType(); + if (!Object.class.isAssignableFrom(raw)) { + return null; + } + ObjectConstructor constructor = this.constructorConstructor.get(type); + return new Adapter(constructor, this.getBoundFields(gson, type, raw)); + } + + private BoundField createBoundField(final Gson context, final Field field, String name, final TypeToken fieldType, boolean serialize, boolean deserialize) { + final boolean isPrimitive = Primitives.isPrimitive(fieldType.getRawType()); + return new BoundField(name, serialize, deserialize){ + final TypeAdapter typeAdapter; + { + super(x0, x1, x2); + this.typeAdapter = context.getAdapter(fieldType); + } + + void write(JsonWriter writer, Object value) throws IOException, IllegalAccessException { + Object fieldValue = field.get(value); + TypeAdapterRuntimeTypeWrapper t = new TypeAdapterRuntimeTypeWrapper(context, this.typeAdapter, fieldType.getType()); + ((TypeAdapter)t).write(writer, fieldValue); + } + + void read(JsonReader reader, Object value) throws IOException, IllegalAccessException { + Object fieldValue = this.typeAdapter.read(reader); + if (fieldValue != null || !isPrimitive) { + field.set(value, fieldValue); + } + } + }; + } + + private Map getBoundFields(Gson context, TypeToken type, Class raw) { + LinkedHashMap result = new LinkedHashMap(); + if (raw.isInterface()) { + return result; + } + Type declaredType = type.getType(); + while (raw != Object.class) { + Field[] fields; + for (Field field : fields = raw.getDeclaredFields()) { + boolean serialize = this.excludeField(field, true); + boolean deserialize = this.excludeField(field, false); + if (!serialize && !deserialize) continue; + field.setAccessible(true); + Type fieldType = $Gson$Types.resolve(type.getType(), raw, field.getGenericType()); + BoundField boundField = this.createBoundField(context, field, this.getFieldName(field), TypeToken.get(fieldType), serialize, deserialize); + BoundField previous = result.put(boundField.name, boundField); + if (previous == null) continue; + throw new IllegalArgumentException(declaredType + " declares multiple JSON fields named " + previous.name); + } + type = TypeToken.get($Gson$Types.resolve(type.getType(), raw, raw.getGenericSuperclass())); + raw = type.getRawType(); + } + return result; + } + + /* + * This class specifies class file version 49.0 but uses Java 6 signatures. Assumed Java 6. + */ + public static final class Adapter + extends TypeAdapter { + private final ObjectConstructor constructor; + private final Map boundFields; + + private Adapter(ObjectConstructor constructor, Map boundFields) { + this.constructor = constructor; + this.boundFields = boundFields; + } + + @Override + public T read(JsonReader in) throws IOException { + if (in.peek() == JsonToken.NULL) { + in.nextNull(); + return null; + } + T instance = this.constructor.construct(); + try { + in.beginObject(); + while (in.hasNext()) { + String name = in.nextName(); + BoundField field = this.boundFields.get(name); + if (field == null || !field.deserialized) { + in.skipValue(); + continue; + } + field.read(in, instance); + } + } + catch (IllegalStateException e) { + throw new JsonSyntaxException(e); + } + catch (IllegalAccessException e) { + throw new AssertionError((Object)e); + } + in.endObject(); + return instance; + } + + @Override + public void write(JsonWriter out, T value) throws IOException { + if (value == null) { + out.nullValue(); + return; + } + out.beginObject(); + try { + for (BoundField boundField : this.boundFields.values()) { + if (!boundField.serialized) continue; + out.name(boundField.name); + boundField.write(out, value); + } + } + catch (IllegalAccessException e) { + throw new AssertionError(); + } + out.endObject(); + } + } + + static abstract class BoundField { + final String name; + final boolean serialized; + final boolean deserialized; + + protected BoundField(String name, boolean serialized, boolean deserialized) { + this.name = name; + this.serialized = serialized; + this.deserialized = deserialized; + } + + abstract void write(JsonWriter var1, Object var2) throws IOException, IllegalAccessException; + + abstract void read(JsonReader var1, Object var2) throws IOException, IllegalAccessException; + } +} diff --git a/src/com/google/gson/internal/bind/SqlDateTypeAdapter.java b/src/com/google/gson/internal/bind/SqlDateTypeAdapter.java new file mode 100644 index 0000000..e2a8eff --- /dev/null +++ b/src/com/google/gson/internal/bind/SqlDateTypeAdapter.java @@ -0,0 +1,53 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.gson.internal.bind; + +import com.google.gson.Gson; +import com.google.gson.JsonSyntaxException; +import com.google.gson.TypeAdapter; +import com.google.gson.TypeAdapterFactory; +import com.google.gson.reflect.TypeToken; +import com.google.gson.stream.JsonReader; +import com.google.gson.stream.JsonToken; +import com.google.gson.stream.JsonWriter; +import java.io.IOException; +import java.sql.Date; +import java.text.DateFormat; +import java.text.ParseException; +import java.text.SimpleDateFormat; + +/* + * This class specifies class file version 49.0 but uses Java 6 signatures. Assumed Java 6. + */ +public final class SqlDateTypeAdapter +extends TypeAdapter { + public static final TypeAdapterFactory FACTORY = new TypeAdapterFactory(){ + + @Override + public TypeAdapter create(Gson gson, TypeToken typeToken) { + return typeToken.getRawType() == Date.class ? new SqlDateTypeAdapter() : null; + } + }; + private final DateFormat format = new SimpleDateFormat("MMM d, yyyy"); + + @Override + public synchronized Date read(JsonReader in) throws IOException { + if (in.peek() == JsonToken.NULL) { + in.nextNull(); + return null; + } + try { + long utilDate = this.format.parse(in.nextString()).getTime(); + return new Date(utilDate); + } + catch (ParseException e) { + throw new JsonSyntaxException(e); + } + } + + @Override + public synchronized void write(JsonWriter out, Date value) throws IOException { + out.value(value == null ? null : this.format.format(value)); + } +} diff --git a/src/com/google/gson/internal/bind/TimeTypeAdapter.java b/src/com/google/gson/internal/bind/TimeTypeAdapter.java new file mode 100644 index 0000000..bcb5163 --- /dev/null +++ b/src/com/google/gson/internal/bind/TimeTypeAdapter.java @@ -0,0 +1,54 @@ +/* + * Decompiled with CFR 0.152. + */ +package com.google.gson.internal.bind; + +import com.google.gson.Gson; +import com.google.gson.JsonSyntaxException; +import com.google.gson.TypeAdapter; +import com.google.gson.TypeAdapterFactory; +import com.google.gson.reflect.TypeToken; +import com.google.gson.stream.JsonReader; +import com.google.gson.stream.JsonToken; +import com.google.gson.stream.JsonWriter; +import java.io.IOException; +import java.sql.Time; +import java.text.DateFormat; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Date; + +/* + * This class specifies class file version 49.0 but uses Java 6 signatures. Assumed Java 6. + */ +public final class TimeTypeAdapter +extends TypeAdapter
  • 2IExse3bY&Op{7xLv*w4GxA)|)`8wWD4VO&0W)%7Rfrj*Oxj$4Tdykv1O=XL@ z-z=-M(rPMV`Xc>K` z041_z=06kXCJlf&>1ni>%Y(DaOyG+MsV)U?nK~d>>2BD@2(!7Ob84Dg&kE0#Xd7WE zV8eXMG}=4!DXEz(QM$lNvDyzd$*FL@_J+M_$ywUhEyTNIa2)uzE;TUH+HgaOsnY#g z{E?p|y*EvGf_L338c1I%`*s6vYc7&NDi$PgJtQ~5Ait(mjlt4d(1z|iGH2kIiaa%48f)jKW-kFsW6`X(h8y;UD~<6l~?LeIYbm$TLFsnK8jOcfK-9i66)k0_D<{k*biK6Gml91 zH6GKh>r9V?r$Q1l1ER_|s3)}z#t*#CIZRkmczC>f93v{(hkyJuluNEdREbZn$xmB} zGX5?0%`Yhl0t!343g5APl(}I#w){}ej~hP;oPuwFvh6Dja8lDm2xnfGZk{spN3;7E z&|gVW+k8Ya|GV)ZiSe&c;=eOZ`rlBZ{XZryivOsk-c)Ktra4UT?rYRpbT+0R$a3fFinxn58Onu76-Tb&ItzN6B!PXny^EA5n*1i^{!P_>_N1>zo5`5>2onw1 z8rQ;q5as(kgjqb1-4C~DdqnMi+^o^QYcEs^0U+z)fBkdJy$z`0fFOf;U03pX=bbV% zq&O3PY-5pjnT>&MuQmlWv%1hkhZre&TFi=Ch{#2Xz8f6MFRGXN)F*xI?5y0~FRe_U zy6stMB3U5-?UnCAh1y}Ao#_-iIP3l9r+{c~p#~|AoN8laZOCv$EfQn&m}zTc4OMIG zIJs%l5FCRM4?~CWtZIso$nTB8YqJ5?V=jCd(@&6*pYQ^+Upzg4fYQU!;tpKTyMYDp z-$qj?5Z>0fDhKB1SH8-XjY3r=vqOg{BTZECn2eA`*y0T(u6%hAi`xUo?T%+If(^>6 zioL==g2N4$c^^L|*?3Xw<(x>uiDgWp^&S&KO+t|sNjt|Y+0>e(tEC;A*f1IVH5yv% z{3vNIV(@?YyIZlKIPziWkO)~5%C*rmMAgP~O8Tb`ab^^#|GJA8DW@0v$XLZ6gpyHE zD$=4j;@qnnc|HLtyPckTn&Kea`HYEQ#nIuSHt-?xSPluhPw_@uS$at8J}YKW1;P zS1*;f%d|gzRm9viXM49wEO7DsL}nk1DXf{#wFov;O{5`^+?^BmNJ<_sK6zTITr$o7 z;`iW5)(?=3dmBO2QbwCxNCq>pvY@unvaylcN%`Dldo)L<$uk$eeW}b(DZ7QaGl5eC*+o zxOSA-(eghfrAU-EwX9|3m2^at{T`MqQtwNxsMzMwdu(Dw=QzEa@BSv0ghe`ZVR^z1 zzJ^q{F1f-)djQLPpKa9*cBFaDtde<&ZJ{AvS}HILICiqJdFPvhtV=nliVE-eX7sgqQu@Jw*5U0ffnBA~mp9uw# z0v4=>^%lo}xx6J?9kHEZ;s(?0)7SRG9ewGD`GL5q3dIc~|RCSK)7rZ2-o1=tn( z5YkH=niN7+i)7nc^6QB+r062}p5bq^1z5#yDu3D{@}L$;P+TzIp>BiJw^wylV97X; z0c?|d9W}Otgo(cGUH(rY2}!!gDA?*$>`AAFwwKc*V@|BK(WBcfX{NWsVxpk74hV`k( z6Mc-!(W;S7TQ-CA>&jm}pH89CvNF*ZUKg~EX~%AfVoQneSZ*K*n`a5wL2j0df;oB6 z&0F?gR4=~I-~6R+cLR)Am_kO<;keMw8mKVe1J}pDt3yYSBk`T@2{bwMzeG-%Gr&BWp_>*G@63^v5IWG#ljcyD+#74?`m}!;@bn?o`s_);LgY%H$dZeYE<3{Gbl{C%pk==UK zHDu-15ya{9x32wS=M3tV5|F)jjXrRefH`kYqcf+-6;>bk`<9-?8&3IlQu5!yb)klt9Ju|b6+R;r^gniMgV-=;~YmWOE#J@T^ zZ$@yd)Ef;dg&G;>^CDG#s=PrVem(Rv(=_raMX>mf{r$%4sz5-A93P4?&U$`x{mcF5 z>*d|ShX>Ew{mbKNHTsXcH`;11?#PD-pccTGZU0zUpB^8f5~x18SOWI+nl0vmaN=DL z`!ji99{wOQV^o|#7o1GO{<2UOfQDJ!zVbH*lblFbnO((*i$GnlJmlcpiLRuAMau;t z&UEPC@*y^pt47@Dla3bGLB*!#AzNt9v8^#qnfH-ve8bpI*VD*j{;2o6%)8Y3y_j5d z`cuEuXgci;+!mt1$*4%9N2E{IS#*Vwpb&Z#CIZ)W5~Dj6To8akWG%;3t^7HanWrQO zE8p<#ON5l~UwK!jL;UKz2II`6(g}2t3ozjz)m`=G(p@guj-lAY{GmnRNmDrDLX)M3 zRO=!;kR5(%lAd-9NAyt*JzS{cP}s>7nYfBsp!#V!i5oNl19)!WajcLDi7QgNh6yKR zWCl7Ni;7%$h>IxytQQZAYHIuZG0u2|hxtT0KHwTwFaZZ$cjzt_7kUdR_Cv0nj%clR z3^J{1BT=HAY2>NhnXi87Cf2H%v7p{Wg_2csT`*;m6=ZrQcyyCGQwjO7ieFpNJz z%hl`flG)>3v3`$@_zJQzjnqq^NVJwepE#n-JBC|%-5*<@=!g+Xgg$N!k;EBv8#F?6 zY`}Z%J?}0z&J}J#h{0ff=c7$Cm2D&wnaq`;Fh2e$pvYxDPC`2N4++2_*B47LgdB%Q zFgzyRdcSdannTa}(Ti*pi94Ysv1I{t#Xr8W2PJlGsBmwYYt8jjk(PiJK-u5|>mws4 zme01Cq?XE3RuD-Z$kRK>5fvHFJ^!giRx?mW2XnF^=h*8E;T%WK7i^afebIg(`D@|jsJ3M-Bnl`t{86Zulr!!GP|`CZ3@}x3&Ex4KU{G>p#Q2K?2`=GCcjk&p#G)m zz`sMHw)=-`{CAJp;&0-Xf`gr|gQ2nO-*p7{Kar?a3GizjL0C{;L8|CW@xusNsTD)K zNp*ENPPjKt7-oTi{nf5hVnrV11Y?lYF0ZoYThhi)#txs|^vhVGP#QK+#!Ox_a*WfY#@syMzsfS- zTK@K>%Lhg>2>%9_b>G+jOk7goW>^>|m~jNm zoSB`}2HE9Wv}g(1Txi+kcUJV;Hwq1BNreX#SW71mh?b19WoJ&wfXgJUx&_Oi?PRES z@5r%5hfRt4+yt1*1}A(vEj%o-;&CZ9t>NJAp2 zFJxzgUQ|gm@m<*bi3Y)_^-X+77dH>%)EJjcXkE@xFNG~9NX1XB57W}lh~g98Pj6oA z-U#9KQ;Z898?;qCL)Mc|x4b|m!I(>El90<+sSN7wUe(!8snCD|)2^d{$%KfW6CL0C zzPH}A0Qojr4k&h|2ra!K= z`%U!d*B#ff3&{rwfMn%dRn0XR_1OBCy+5#09jGZz>_np`xMMEKGrOnrVPVAw@)DA) z0Vpk++7d3~nhNhG971+EG!NDW3I*xxBayWb9?<3ju@xQR@i7dc}_;Pv^?T!Pq=fq-I44oo!Pl}GpeS@`$~05|UiQ)$779ugW&!goqlI<|6& zzWo*U5O?dCDmZWb0e3^sHxGU;YvUm9D#I2FNiEMTfX_ff(N3JSGor{(i?r}^Hu5wU zh!{EKHNj$01k1DmYfG#m!d8SLYUcU+V9=?cP$%{ar#e{-LK;!pHd-o62W=mGWc-_X zHVOYdVfs`YKO&R&Jd=H}Z-cSu9H;@4v#jU|;p~}bBsCRQq8_BDT+jJdO|J|hWKA6+ zo&f(dLz}0Y0z$N=fz_DYy{?1uO8UpqD|{^*zAJ(;>C96kbB(P|1Epdrw^P31Pc``U zxoj*}7|Z36PhH>}F^9e7Th}E^kN8z&-s6ROIIP%}U%%j9@y){E!*YKGG+m(bG5IVz zf`y2UsN$7NRIbr1m{p%JLuHTDT$Xi^VNXLsZ$ll-1Iky35S;Ei^w^v4!lW-Bi0d{; zWxFoZw0dI&zdRdfutlfvtuu-4!SFRfBoA3E9A~+v}7m*)y+b+VRFQ2v^IHsScIJu|c3!!^{A+Uw%%7Wr=Ji!Y- zUYvE5p+BxV7+AW6=_=rX7jkXU832PY1bphKYS;waQsd~VK1`fVXSL}@+tmI!NG$R$EN33Sjz-n2a~MAx5@(SVs8IJL zo(oF=FEyzW7VbB@k&_+)p{X}17*NvEIC)4bme~n?jW_`=cUd^EVPs*`&} z)b)>gk_}U|6j2!S%+x@CT!E0X73x)QTy3zthIlNF0)HDYgriGZ4lLL;9*mek&m28S zP7j--l3pyNyMRc}qUR#pYP+5uD34)-_%VIxXySm*#-y!YUEa}mX0-r!{g4B;D&Z*@ zL#v1atBnvP+9B;soAQK!0WCoD+y*kk8SZs>=0rD}wf?FMJgd53*34kxyX#nOIu1KM zy)GV@^`}A^7ktC`5$ofXr~aY=Q3WVYxo?l~?Nwqy2@5;>CWV z?DaINNS;gC{a#%4DAAyDc92kYY(?kf&`paGZ5^F*%sO%B-4q^`!a5$s@WE+Zm9wU_MCd!0ARdHQ?OhL!*>8i#Ir% zBwl6ra3EPx@g(BbkbZ98%l#KWSNF>=L>Sn&$f7Av_89Lb_kV~|oT`P$$bWBzRbc(A zl>YCmL;Z6~|BHz(WN5E%XKM48cAU7Sjm6)%CNZ}5TfiGG=!t7ElsvKQmxWTWgwKFH z{_Bsb)*{g1CW~T_+z!qoA~;S*&<@pG&(EvwFQ`4-3X$oisubP#h{SnEYDMhJx2G`k za7Fr(&1q$2N%2N0xsV}~v#*zGy>-aSGEMK;FwDZ(Lg0^pWA@QnL zI-DipC&_ZNjHl3JA5zrQEHNsaMFe*@w;Y&(`$e(wr-t=8L6#-j=^eYgx_|_#EGwJ{ zLmtfVc-fs}Cpni6Y?NhZNQ04K7fJL*Vg_4c8EIspk5QBM<@bhU9^sx98MFoXp7m`E zVxq@a&jjO(Y%Os)*U}LK z{@CaCfV)1GsHyb8cPc;GTl!POp8zJcf^5O}B8VfeWg4pJIs>-m3FFzb@c@4Uhy5a; zrXd*!KdFBnS|_PPuw%QZ>&6iqHWIOqB-+4`nEL)wY00nQWaD^Sh+8T^_JbWLj-c5- zds_MU#%5Nw-Omi|M49rETPCU_*mdU(v@J{`xzj$4vdAB*@Ltpj{eY)5%5#Z|Y=~)N z(|t5mNTojEm-8Z37?$#6FNiA*swfl1!`20R7uvI)Ig!P7&=%)Y>>aI_`%g%oU;;5u zP*ah7y#?=#6)j}n=vA~X~4j8w| zm&w@Mc<|lJT*|Diwt9(y#NwJ`v3mo+j#LS%QMXA12I=djKlHjsgWY=qg?H7p6|&9C znOu1QTh!Jb%26Q;P@lK+<3Eau(J_0~M&vgR)!nCC?RVgR^Sn#2{KoObh*q033`u3# zPswbgYVh%NEzj@4#bxqRhc5>`ZaV6csKDImfMMV4;c6F?tag7y`ZTyZ`uF=5@=6G-_pO_@zgjRM7i(s`Z6h6!dEJu; zlph4D=jcXSTs+K>G!1V}W{D$=P{$?P+E-}q?KN1Ww;k=Xzx-X})gy?;j(#`TY5yf{ zLgYUPqW`Y(MC=T09SyDiD|nQ`_#yh}kc6Jt2YG!A4ywxa2&s$6=ao++^xg-|e(B}- zg*dYgQaLbNZ$>1aQZV~Lrb*B)pqJXJMJrFWcE}z84GrdV>*n;LBQ{6C@nTPu09-iu zv#34w)WEo8PnVH)fCKCc+_N9`>(Mw8wlUmf)k^gdR3juxZIKvoF2V%2A$SgZ4J1`! z$h~v3Rd=xvTHpS?DyvX8Vw?E=nB(8q|9qNA{0A@MTUzux9nk(?JjB0${+$^DfSa*)X!wP0Phvd^B(pwu*!^bN z_lRY(W5g4W@Jz{e4xFzR9PDv>87KY09VsBg50j zk`gn2M|!v}I=3Mpz-mc{KlyJ8XKrd#DNu1&Pb>e%UnwVB+4pi=3q(s;&%!3j%Hf*^+;jWK9!O<7ImL^X19XB?88I(<5%AHsKHg>KAz6` zT>&9OhzC`~u&ko|rG>+JyfP)34akx~o08&>c}vl}Tv+TOM*;^HpIMzqjF@LQ2e|Iw zEnoN`OGa=?+!Rj5$I~s_^@Wm0DEI9TmP=CsK_MfAhEy552E?f=3xZ7U7JE>%Wzia;-2e>MMde9LwIi~fMnvb#*ZGzH0`Dpy;g18&*mvb-s*r4NB&Ax zQe=6BnfZa;9}>B_yGAx~db+J>W=P-I;)6OE4U8CHxH2CG<7M-)MuaZ18U@fiSa#u zg3Cm*)rssVj)*2tQ~;%;B%?-vfh5NsFU-0h4C3WpNp2_l``>GRY3fnQE8lrU?O)~* zssH@=R5P{tKg863iz6OUF8@R3*Uv5N=foKm?fJafe!267b09ZVOINyu!uUsGZe@)?9cyeoSgZ^~xi)P28Yv%QF535?39&n#EfczShKIj5H02yMuQr6AU3^3gxaYVWj$Rt&?PjT=zDf8{JZ|nlnSN#`c zxZJrbCirW9QT_}{TQBH*98RnoDU}Uk>Xa&Fg2cl{$ft_9_s*Vy&Auk%I)uIyQZth* zyp|2c=?;Rk5xiqq?f~b3165+2d849nKRpm6G7gMXuAU%jCjSrX#^5Mof~_5XAO`=( zp#yS=GWmAuVcd=j?|JDz-N@)oLhgT53Not9+n$n&GQqAg19Dc%2Zu?^7AjN~C;w2h z?qF^7H%@oETiEYfeNg05o#fByI(`oyoq=_VMi~=T@EMi&Ry(ivYxS0X72)yG^p@m&3I($Ti?E} zQ@{%Wnb{2#rbCtGIj~V#lvYl3Vrc9OsonR@vkE9$#fUSUepc6c7~)odcAd{}RatcR zE?m5X`>Y2Sv_U26_0~fbkZ*WA(1KHGOBqn4#H^zoDn7;B5N9Ozpm(VL8mXxdt;LA{ zxw{0YPqlQCrmj=Zv{$!27NKV98|r9YtV7l1>OvhKDv#hYZngIiNreEr6>7?6GQGQZ z=SuLO)2(}Cm1RbdpHXpPh8iG<>tP_6ix1tHZD|XUgUiJi53S~_RUpfEDh|z&V}o#LZ)m@ zeMz14f4<*x*<%NpZ}PmVzXtrut!bKB!bMtX506jkE(x46drOH)o(` zR8I6)JPFR@*C_9b2#;>p(2_Y}x(2-jXgPG!8R)9sO=z)L9u(Nd9S*_{xusUY_2c6pW11sA{^Pj?3_y34}m| z^e4D#X@R)kCLA&4uzp+`v=dk1Y{>H8y<Zb;RpApw8I!{n^3KlEr`YvAAoTTVL|o zC)hVin9U>2=Zc12z8qB#6`{gV8_^(03hsme`1>+o;Cb&nq` z^jY7}y7hhi&o!LnfBrW9LLk=mrVjsn^i3#jnSZx~yr#5msdd>3Lg*jq#5lnT6Zn7Y zY^b03?`mKVG2SfZ7qRFiRV1D2L7!T()EDEA>KY?}e&gB6QK%X)=u+t*5l$TIQBMd7 zJH|mmIToo*UZAE1xdoM9Vb@a82p|*1t*UBOLAYpL^d$|DgXb6nqg!lOieJISEod|9 zhZ++}k6{S2n5vgq9RgL`6$}Dtyc^2uf;ptEzM4*-^qX#A=W&e1wax~N9Yp7R#6M%h?i@1;Ihh@*ae<}Wdk0Tr!kxqyQ6KGI${>7a}NCzI4ly^Kz_oohsN`fWv3zFU27VQQ0{^y#d-}-sj12<+~%iJ&pilx@h+YN@j*@e>TXQ# z>6QSBAQL85B6b(h{sz7C*7$51= z{w61q_T&WLuq&%F33y{v9oj6LKtDX`TDYc-uo7<9AU7RS2L@`zlrk+Ex#lCJgC{Z% zGbn5SD?8idP85J~A6{D`Mpb>d%KR5lY_9u$cF+*+?ZOtIJ$N_547{dR(n3MnKWryY zUc!q0vNqiOm(<69$MEQ%o7LYf&A$@)KhK;Oe*c5O^rm9Ll?lZxm&#^I>l(GTnmSHY zOX?(@iDLp02d5AK;pdbv@YUJw0uL+ERD6-krAkzzdcL;?w(Y2-tqch&Kr?2hxge>` zqF1|p;pgT3sj(=)kny|TX~=+Fcy4?Bu9Le<4YG9G-cc!0Bcc28jy>MOX|~+4dNRRa z;nY>aVH}f%yWDyqsRnKRBkI!1R>h5A)?)45dBNn=4`WWrNLoh+dR z!%_=J%RyrIE%)=ic$_M})6sk88soI+l;hbX1SrziQ*I>3-{yP`2cUwuy9~)+S_uMu zU-FN~2nNvM;}dbi`Ky*>_~@O@ok#=Z@v}-&^lcJlzy`baV7&dNGIWNr1pP{ugj{_U zBEsTm&j?1e^znQ8OwSY&SgnWAPU}9TA|NscvdKAgiGhv*^lv^5`cV2n|8VFS;C{gS zOf4d$a^&<#)mlDzEdC(0uZ1wFUKmx)Vz?mc5Gx2&0j3JG-X0^4<)tnPX$z|bW4HEa ztrWAM{4nS9x#4C7I{1&>#$nAAE-n82;^Jcs5L6EQtXvyJe=(0XuShpohJT(fmKIY+)-obFjhmok5WT7P%t} zSvjlH2mDLauH#0PTa-%d+E6}F4^Cz=Q@+R&$Gz_q8jWqB3V({2Z@3b#R%az z@`WSkm(3fUDSg&|c9}kgQzk9^59+%d&?q&^0U|zOFt6E<=|*?k_cwerIvZ*vzsJ{v z>lHHo?hNOENQLRw@gja2_xqXko^+^3`Snu8%ViCg$k1I!Arq6zQ!b{FE86r7M>|-6 zr;%{8n|zw3Za;;mfAlF4dxz~09c_%Jvx?$Mk`NnZf6%ETy%y2Syk^l_BjKjRa%1jDIFE$}+UB0p=h# ziP*s)E6P$g3-tFS7bV097xr2oS7c92tL1=(=WT9!-Qx4eFTa>2W zHZQ6Q^{U*Xd4Lm=4j34`SKf6UvU8nxmk{j~nKvhnO{dT@kgIWEM~OWm$*`;CW3g<8 zLV_%RMoMLd>b7NJdJ!7uGus~rPbsfqxUl02uCaF=j|VCJ)dd~u%jau|U>nC0-;1AYdQI$}0C^pm_NVS}8qCA=GCK z`BJiqDGOo*ZW3b`I+~(~*9gt~a6MjY#+qSW$Lfu93d~!7Yu4jE>@}$lneq5!?3~w2 zjShbW(;p#;fdHHIMSB@0S+)kaGo(PAvy$Ih<58QWC!2d#gs5zpH7vst*r03gl$RwT zJ1K;_nRRvNKwy;qKS?x+ZYw1whOrJ24F)+=1Q@#HLaDnHZ9BhBK>dYAy~KVT#;gjt z&2|$5ub@v0egDFo0Y0KS6RHS|zD$;Qh>FyQY(3-jog|6ZJZrU(yQ3vl*W3>o` zmIu2T5BG><_p!LT)OM}RfMf6M?z?W#%Ff9mR%M`;wi_~gNF^+WA@)Q642_Tqcy&Q( z-~y?Iu&fOI9*9RKpx=b|IFy0i`!Qvkis~0EGovZMj#H9=Y?2E&@7i*9wq@9&Hy6lx zP1MDr3@z^gw@(JFEau~INr9lzubaG*Kk_yvXgl1@zhT_THJ4o^5$6_*`~1#G13DHJ zWd4ALG*rD$>8$l%64A5|5*Xo{^ZcT@Td%EVUjEr6ArvJuAYG$Xz0b^g4P)%+?*@v`L=pXV#Z)ewsz&#A#JvOoSIcH7KY*KE~qH# zk6(_=;7!K0eZYxb;CN9zMz_g7S=R4!Fyr>8Lq;vk{>o;b(xSW1}OcgKyCV zelnYsEGhY^Q+N&;gm4jdVcmXwNkc2am#6VFi9Bts1+7i95Z>s%jnOlgpge{Vdcc-H zyFXL!3Wwysf;w zX(`ws8Q8@u1lw;>V!ipxyd!nnR#*p8mcjfHBz_gSp$;sHoMCDoxO=q9W|oPFdqO)i z)RG(}$h*2}<9V&#WLCl`*JM&0PQ*1M>zfm4EPG5JT2voDr$`2sCJD8!8_uqi0FS67 ziD0h|U>!b_3_BQw)WBlv3L(%*vD9Vaf43POQCpT@Uinj9&9WW=(%K1STInOpbN<<- zh!Ozb!<*taAD@jma82v2#s*L|A~(i2R=`6h;|h<%11$v_LbcwC;^{H3L4LCzI*4D| zO6JH@7g}5J0ra`-ZJ!}_+TxDVGs;=Eyh7FjL)VCc;ql<)V#n+6Y~O@9sSm%4CKY+N z2z*YizIJ7DBi$!m#@FRl{HWfH-UM*Vc7LK|#=_QMpKUo5La zoV|{sS#o&kl0ePK%<_I^W8kAw1^|qo*%^F^jh#{%&CZM(E=DBewLK`**&7&?D=T49 zauw8eZc5CIB1DndfUymWZ5&^w4qO;E>7C9k-fI){JM(HE0b8e(zdvHr{~}jK*z6tW z!bcUx+Cw66We+dA8&-g?T0j5u5-^zBwoGMJ?W--?ifdG%kz5dvCZuZ8@1i7p1swp& zj7(sZUgqEk@8REqV0V#OVBXc@YK8{7*ISC>HbA)n*6NY)u(u4jh9O zLTp;*xi}=WUWHCG|^Gf-HWT*tr_HSOzbSNuO}KUKqm`I0Fsl^)pj3)F%^DYfAco zrek(u^3p_icoKMU$5$BOm%cjz&5mbF+T8N*kvL~+K(~s6e63wN%q5X z>}8l&W(#AZRtwcC!zyx0SkGa%PXK~;CA_6PgWMBA>-CpM1Tmi*C;EBWc)uLzaI}^E zHSd}6cXB;<(vXQb*w$kftMK6V?>d0Ah0}!mPUZzCWP%c#)HECwQt7pHYC<*@oRr45 z)a0r=?Tw_U&2k3bR(fDS^G;G34{|tXcO$D|n3(iGDu5SjXx3#3J}Urim(d)S0i5Zk zorPnxd@%v%Ex4;|A3DZRnEF3DFxOY7uapFb<&y65w=eY`Q){m->!|(={o?-O)hk1O zK~>`GK!rwgAbvgGZiqEDA-NJ}z10Cm$l2c!W`wPQMy^4}oR$Vxbsww|8M9gLfp8!V z>UvvE@inp=36DDOG5X=#7|mo!RAe!TXz>e~YXn6#V8J85t)} zxPpYQCRL8pcmuZA5cf{|>f30KmNQ*(3o$lK*FAOT8D3cnO4>^*I95(p)_5gqPwWb) zJj{5ciztvK-N%x1t?zTHk~iGBH^y>q*%ZR7!5C1iMc+pMhO3i9&=|A`t4?+@p+J{L zI5b}&dJiG66o=<~>DGP%CY^asqd12Tg+N}~O+_L0SjHZSofH}?H<+lb@|~HtN-uAa zxwM-^>8g_f;^>LU(Snic5G&~oNOh|81xx&)H1y+hy;rOBnv7bG+wacls^;Cv>2b~B zb$@^VK<|cO>SNTPZtW_$<{j>ZK&B*-ri~_Kn2fcFS$eYFs-jY?W1n4ZW$9u5PC z9Y)JS{aEP7v3Hb(KZ15LYqrI4JRlx11x6emTg5kf@rheZKTTp@j9m(4t4JCg57TaE zC-r`P(=WaI{3CP<=*4u6?Jbnwh+n@;q@6OS=~ELegiJy3bMP+{u_{0FQE+q0!gAo- zd6xMUDJ$*(h%@oCrud>$a2P`lR$5qlxA?5~!P0{kqeYMPY5Z&#+(qD$qNG*JgR_;@ z`EfmN##?twOU8p<3sLjia4$>FL#oz%^w^o-YZ9)98#58(a8;JY&Wnjyi363YB~Kc< zS5-^H3!PP3#(TDo$)v4gP#YWQ&swMQ!;QLgfR+!2K`0I?1Dp+C!$mSAU<+SvJ%MjA zpNN7DES)3ADsiVK8z;PQ!#54bvm0u53*Ja2dxA41!IqgQVXu}^kb}Iy)5JZ{d%knM z!J&*0>o&e|PZc#Xy6emhNQk6!>UyT^3WjQeT%w+$}{@OG5!&dqac&BX_G&QTMNA-N&W2?S4E|uSJb@uKt;-?zENe z1+HvHc)4^^1X1ys$k&^6EYcs_SX!!!cMiB*cYT`i@Vf$Yr zA;Ak7R*3n*Ubz`N4TLFgwQfDDay_Xy;dRHa$Q%BVvKj)^t&KJe?6MyS>UI8n!L{A7 zdXnpSjb?m1)=%;0i|S0_To@xIXkYyG2e)D_h2QJMISXf6cGi5LH>RPl5@H=YVOqSv zma5`4P|kJ8N%d2t28JfVIL@>di9SSYCA&y6OJqD0PwYsDM4M){MQ43KX$El(irv|C zqKkQ4Pw9pBn#`uDTl3rIXOA%|7lIN$?>X7GiFMFt?=B|CURqjPHYDjz>7MM!_PrUR z8zeu$Ini3vA*rCj`M$WxNLhO99^?U=wO$cuXtp;Ve2Rv1&LaJwlUY)Z%mE5CqabLT zyojKk0(dH~PDEl-lP-k)Wqn1xGQLqw&>jLV%2(LrfJ0Q-8)?&7F&|0_3)FBTptWpM z)OwraCaw*~yN+Nx{Q~420=9)0`Eg z%pX|ObL8+vKWAQd#10E@G#%Gf3o^4=V|P9_LoH6HGyl{;s_X_yt%pNUcyMj-t|c=( zwa$H=v_Ahm2Y*u^AJqKr+Esj`@Bg_4{hy5Agba;z9W5OGn^yI|tdw1`=-RFfg6byZMmX>M*DOeznO zeEu~lKALumTz;%ow=AKY_?8i0u1{hxtW~$}{z*Sc){R{iKNa_j$o$k!`)fTu1mT9e zax{(yymd)io8=F3u>co%YqW(Usat$eR;}xc{8vMU2k&W_nXPET)%}&H%~RpN#roK` zxHI0ZPF#n;1k1abAcE4IhpEaz>3;Ersu+p7&?cNpaK9Wixm#Ncwx}3^y02(ywmv4V z`WKxBsyaYU22xi4w$G%P`smX!#RU7o2v)CP6(}JHliU36$f#1avjU7bYjma1=)APM)Y!V5OBY^-W}d49#1Z} zVi)r6x&<9;#DFCj{m%t_CIs~2Ii$g3@TjdWFVANjc)f{4dx{AK`g2|+M<7yBYaUNF zH~Z_y{^Gg(=wLD9C!+xWew8YfXMVKi+@>&6Gt5~5A8`3WCS(T+6+W(f5=o$<@7kZ7?6R{*a%&-3?@+af#8rK zM-^j_pj{i+q)+$i0+keGuy&wj)TB|b5o^@At!nt_Xp@f=0oD>JDfQ8-Ga!f7`EKC( zqH8j2w=_jBt)BFZneX)lN2#eq=~*4vc2lc#4g#()=~xZ-4n36k5T$ftT8 zzvLj*bfrhrrb!_ql$n6Gd?efoL2Oxj+QB6@Zcb(lkbRK{s(um7iRrE^`$eP7kSDK+ zdMt*-PhdVa+3$XmsaorHOeF8TtKRsqGpy!V#Hu6?uiEG#-B?0w2SR%iW`&(-Wd15^146}cM5^Q3sX=M5i`)C z;t?Q&iXq*(n=)2-+4lSBM;zQqdL+zctkx^}gl^R)3%sMVs4&H|)XqaLk4DQVnw&V4 z&9D{Pt>_K6)Nk231z!x%TlC%u*4meIFt82INY!k+$C6_=f7@3}rw|LI%!WxkTwh=e zNt_x5MIY!S921N)$c>Ao%p;lFc=2jn=@}2HEdB`XU?XW4nZQ(MUOKUIkUb~CEZqPL zf^5P9z~P$_LIs3!JGk7c$_8?p#VZ4?o@YF_*T2w@Rb493yNyL1B>!$UUK87LhLet5 z0G`o1+qP||l8SBHwt2Jn>C?E~XZQa4;s5gR z=OLMEtvSck7$3H}pfn)b1(Dg8h8gSCbaWAEQ&DMpl0Xy|w<9sSX)7)ZzAPn#aen6U z7B(kSx~xB$!1^$~$hSlq(*%XYi)MTGu?#eS{O(+h5|FTufEMNWc7qkKG;6)hX>he^ zwR>6q3irmMINz~B+mZ9uI;P zoQ&8u6UIjB`FNO-l6dQP^`)d}3IhgcvT~w3Z?CT$fw}GVii6cpIf2sAinkjEGmcNL zp|w`k8U}LGHohnAG57S@ZSgoy$Nm1wP=C|Trov-5x*_<;&*6Natd#~H$>wh&p8fH3 z9Te%-XLB~_<3;IFO|cLwW_@15&=PEAC>Zlm?NpchdHTb6V`3j^=2a)k%ZCsyp5$`r zzzzkW7t>8M@ZC$W9YH1s1F4l|700Ot!iO- zZd9bL`cmCPvL@0(sMZl3YsnuPo;MOqUHtGpgArKGi1*PLbBYyF+JI9{ML4ie`K592 zK_3pk`qDI~rHbS#>cpmARhH3GxZ7Z@ivEm(uVmq=UZV2Cd*59t$}qo@gYHC<;}%96>JfTx)wL(F8W)4Jl%fPsk zfIdS~&UgVRx`1aMjSC8(L2VR(ZK9Fub{dRl`&YVEDtQMYM1&o5MK$i#N11oK(1}u> z)Gn>%fXxfjp9{(*T0-4_OgmtHO)~#$sQG_c&;B1%r@$zB$Zz~m!mr%IBaP^AXBCYK zaM$0Km(lWf4MTSQ!dzG>!V8tc9zQC;p2#o!MC!3JYAjhf597+^CuEvacZF3+in~MGa|xCZ zzfsV7BF#BNgohPvJA|qwJj1d!cW{BVnus@r8j~fcEA@5o4yhGOY3Rk^zU=R-%!#qj z&Ow;W><8oX2Miq0iSv>^JOXWeqk_Wb150m6KAOb}39_}uv0&>v|79v4%P)y|KOHgK z4tXk+qHKU2PJ#x#L9_eORjF=Nu|-rKXO!7ejsj!m6?ZC0n(;MLorQJ)o%?vWo^ z<1{(8LHuAM%B{nNTY|}50)=XHAwT>w&L?54Te}OW=)t@uW?7?m$%Zo@`GHqtSm4Y_ z&6WyblYZ~v0#O2a+9?htn`p~0;^fB1l(J1zBQB|Q|9L}YnoX)nzS2U|zf24NFE{ju znfqVVI|`M*Ix{SA9~V0ON0Oy1h;b}hE1=p*j#2P^))9TwLCnH@qb9=W#O6f%BpPp< z9!RCE9ug6exKuw}9@lPT2J;zEK86YK1VjKwRb9UWqRJx`$GTl?g5<{dCPB@x5Ai`x zOgk@~_KTAgkhoY5e}jJHcuF8;j42i%k;1i3BbA~+TMLdkRxPj!)*R$Q3yraRLiG;- zzwoD@6_asZA(gU-VYV&KfuF!&%k&Pkb;O~OF;X|BFO4R-|jD$&p(Rg?oB&tf+i|3kwB1H16=ALW=o2+T=Qye7dd%QsXrp$S#B(lv^h2B>=1`wKTmcXFPt^0sN&h4 zeNrf=%UaDissldm7pKSK$4%|&>cz#L30BVQ=(kgg`#7E~-YDGQkKx#6LG5PLvK|_} z$6|0J=bC+cGtQveNVSnMW1@%9!ugfviSgpDb$zTC7G-|I`2mKCCQvPtcf&X*Cz{C0 z^}>)tA{hg0#weHujT;dd3+5+l@r7Cw0b5=2P$lY|Be4ccY2Y!NNKFyb(`bt+8zV*~ z9rK>VcOyY-{%@ikcn#l5uf@|lemd+k#S#D)0^=0pO&+wo&awfzG>MTz1p{Y}g8u#@ z!dd|*R$tyLN9~5zS3E^;vk^45{0D&zvUtVfL z=IUMAJ7x}OwB9D?X;e8KHxH{NDPa+p`LS%rI?=FDu)ky7|ftT!?`F{x0H6~uQQ z>_`6w`aQ`Z@`&GL*Mq4q2agL#Pw3y4gd?`W(7N@c%TVfIe*-7 zFf+e%OC`Bs!>$T&iytV|TOwoCL>?0DV02619Oq+}KM^e^s~mHaFOCh^dP{v-Ey#;4 z=iLLf3UsnA;fD4Spjha6->c@C0tM4f5P?K((;;pM`>sXf*Z19C?1~0TlgbAM#2v&9 z??1!F_E(*>s1+{eo`SH`?S2^xhf(z9XKd*~jY~DFUchm5ChoM`J%$5YsmsRDpxaa} zzDP8-j^QwsR280#s1Rw~D|h}$a;3pOu6g`542tuY!=V3{9gKhOuKg1%{g>iXpv)gD zeQ+Iz$R2Z&G8--X@p>;Z=OR)Z_*#9%WsF6)`w3p>&f2r@_&p z*?%7huhtQ0hdc&CEK?>R$O3^3Ulpz+0T4wAh?E4ER(tZa_~IP!m^wRkTIoS&Q#KH% zR`=H_xZHms12AwD+v>BDFO)#>mzas|>o;g^>`iF(Z1oIGjc6@xOuppBO#b-EWKL^f zV{i2J%|FzqX#f8yx#Ju(eqe0Y;dNg2l-gA78WOkOJ1RAknpLaAJJcf0GAX2)+= zoM$A{e?1Mqs;EiULaGtRkoBQTo2)qHsa;;C+$$7b>a>~%{IbvFf zMhjL7bJLY}$?JKwMU5PRbVjMxHKZa)8m zEzlTG$w2+Mjde|ExmtyuJcvP!2V^aCvX;Emyw++j{by0lr2ndu& z8(sH(PDCwO{p3{Q_|U-AkS)MUjb!-OmN-Y*ZXjT&tYxr0@VN zd?Yk#(j}^3jnlN*qn6aJp-}cq_DR3`PP%HuR!> z*S(P-UK$CBA%>>%4vNIY0gw5lM~}WI_0U#{kE-oe-x~%blqjFd2^6SkQS2tUG(khf zqCC2PzV!KY=4o%wKpO;+(hH$oqLSitg+mPv?f?C}S&>Q3+YdllDNR8pQdiK#(`2#O zd5%X&p&__)&#;7Wz3l}+d(?;YRvSw21F$3|)p$BfQpBYY#!C+CNdVqB4l-sJyo)(C zlJ3-2iq13wNtUsA0j8!>Ugz!9j=l$V4m`cRi3aVM+991M*V-Em6UUBm`8WO%vj^JJ z(fVkQjWFQ%OyrWhRCh;?3q89MZT(eVde@dT=OQ=lD+Efk2|<0qghA&JO*u8xkq0AA zU7`VgFPTc6u~MWTH0Z}^0mwc~$E+aHUGzg(x98xZp&N8N17KKIkZt_ZL;;+nIM;?c z{9G3Bwl^;XTq!I1mhum)@sjVt9(n7jAn9J-zxf^(sK1Pg}$a~B~&~0XgWk+P#S|k7vOr*xJfERB`s5W$uEaiXXI+ zMb_&1Ps>c&3p=cz#WmH(-{wH<2@m8lujA(E(YxdW>aXdfnebo{oq9N>P<6P1Ox=H5 zuv!HNRAZQ~vJW70+C;rw*57kwMS~fitLWIcS2ZqAw^y{BTen1IY=d)fuZD+QhR0Yw zb?wAo4iSDE@a}D)r@F|4qm5T=n0* z=cuHSA{>gYtoUrtkV1~{EQnQ`i%1bRaa}=JL%ZdW&n7;scr3y`TktQ{TMXAzC89kbjL#Z&7xqEu!D#84C%=$Rs_^lCE>Yh)ZD;s zKtjzdMtAqnV~s_H6en>dd%~o*2{pxGN-wjE=U)K?j@86q#9jK4!KV@YZ~?|0BFQ6? zNbf~m&Lhpyr_2&KvZecAszzi$qOG--!>heBWfJSyQ^Hp)Gcy{*Zm?BEcY#9w#A)QD z*IbSp#hZ;6FB6Vw;;c*FF%s~@I;_}Fl;W710Fz*R0}59e-EXVBbCL7{>pkF?D41s4|{#I65zC){}+>doC zdqU1O{V7-WDN_RDi}OT|;E#0Q;Mo^SdVAA!2_e>JnYK8s;QiDTMs)XrXqjm0q}p?i70u zZp~(OP5j0l08`wKm_#5k*v)tx-onVvQ$(4XJe6#o1QS8~Hxc#NJMYa)FjvoA5>m-k zCmzi!YiRX78_@v3mxD&mthcZmTh(E?U(}Dj%N<>qk%u&;qs`A4pc7g|)8onCHm)}1 z=+yP%of4&X{X$e#TnbTUuST6ZUCif*-UoX+q{)#v`CZKtsm^NqhWm^WT6ooZa#~eu%yY>+*c{P} zrs2$(reQ2gpweu8Obg63J!@zXG$@7iI3pzwUv^?*ZZ7u}K%T@TVvMbMd0V5kDl_6De`%HIhT$9>X95BEE8 zLJy7x)$aO2iu2>P@u~pp#)VY_a$t6xvL_$*=r>U`>#cSk0-2m5;x`bUs7ydKxrWEf ztAJ4C--$ur{P2RGF;?_~y-e8htZmGg(z##}r=wYi8N@l^u!a>z4KjC^=E7e&3P@|k ztguB4642>(T2xa7;=$S*sk1EXZ?V93GlCs!*X-v8Ch)Y*w({S%5_sm3yQqympf1R6 z0e{~6@>rqOo(;P7TCd5np17JA?T0SZN&G|P{wEZaC~># ze|TI`jkzXKfY}mb;%;y6?hPNdI2z$~mi0a`uz%?BV7P=u;-=e)9_m{(-BD z+^RJiK)wb}@&2j;NB6(S0%3c58+$Q5YeUO_iwJ=c?SE($3%`2yCqN=xO{>wWE*-;; zO+?jC$3O^11U_AoB>AaoUF@z!I11{?Ax5K{8RIGu5goU+yDRK=Iz00X@WCnQwd2u4 z8JmMi{V?<|2J$V_`*v}?qgcVsC#*q>`BtylT^4f2W`D$Awn44@TBIt-dJ%rDkVG*il)D6x<1=8`iQH8g>2b@+}TmFto7I1S}< zikMJ<#zB2{Cul!Wl}56w?=hU#4WDSVyW(P#%R{-!9H04Fz{bpboJ{4JliZx-{^cs@ zhM2R>NV9tx(pjBioGqT-ko?BK(fCzi<{qLN)2oy?zZ`H%j~FR`5gGFgE157neJE2C zYaO*>p>XSWr?l((hKI-@gw@7y+$pb7DWZojIEsvwebFuKr7X>&=Ikr{G}V}y4g3%a zt0Kh`SHmS*&a_ct_B2PWI=D8Ig5Tp!zK1fC`dz_^pggs*QS4>_#2OoJPd!M zz*IdD_)mx2QDHT?x%~jzJ~mhIR?NAdNRHZaA>?k$bKtyDE_UyM$S)aHZG6jEPsKHT zd%0U_>n@J0yS|wy`wYBH)gl9BTsZeBC|l9@pEq1BK$L3qwc_E^6Q!^M*Lx66v70&=aVYLq*pypnz7@x0={lWeuTn(z?TsP zr>M^_5pW8lH%aCqa$;~M^7iWRL!LL*pXcz)gtS?oFDK(7zsmEwt9Wod*?4%|VXvyS zyWY&c`vtyxy4|ocJY7GB>kMoQ=Eu&4H`_qR+cN7gSasK#2@N6~*=LYF*!*_wnE;8| zI-^;V%yV8A5sGmIY8ko!_QEa50Bo+pc_Cf(OT(5htYJ(11Ef+-3i&-;Zn+_`IsX@S+jAmqfTnz=^Z>*4;G(-$eW%U5 z;elH)QzSZvY&+g@9-g2zbuSR00SYUTMLSk&;f>KDp`d&ir{I1;*;1S`T1$oS5R`!A z6egu|_Qc`w+qj%|xRtyIL_!1@0}6EI(n1n0FMJf8iZ0zg)wWBQ3}meYMoVUsCwB6f zH&fg=DXjMFl3OlSD|v9{s0W$@IGmcg!DX!Y9I;s6D4|3V=J4Px;b}t#`cGrbVUdF- zwR0h$SSuw+spAyb+3(0qxiQiX)KnnFXW&*AQR`%2Md3h%%20Ucy;Y8ccjG(iQ$O^e z-}#dOqwV>nj-u$VRDExtfpHR2$%->VX!dQ)=4-Vjm#k1HrdV-v zBQ^BsMGe$zYS3)OW5v&qgew}hGY=CR74)hn4X5kqEHJ~~9;{IA?u_TfOlv;CiQ6Lu zaO35bvQ%W*4(7ZaMHMjo(TJdwzsy-?(<@_{-4(+}nk$Lv*`r1i_}{V7A(QQ%P|aY$rggRFd~s&t(I4sQ_`66^$Mv4 zw@8)Lo{*q(*W6TcPE0|Dp`(bs)=rv7q)CfJV3DSU3;=xo?wUGeg3`SxR>5$nu-l*r z-Xl;97L=ZJi_+^9V98o_K9j=D1Q%DUiQA=SB3{vyY(>I(=&7t|^_wKszE%qhcZ%;a zETsMila*hZeY=z0du%;VEX|q4HZ(~==)tVw)0jK?1-7B(o*yLkdNHEE=j_G1IztvM zw)9ee`XC=zr~nZmlv5zvsVYx;b$o0xQ9}aqhu-U?em95y&7+tPH zpQMCg4|M+Wk^82D*HCpiw~s%&-k0$P3lm!oVjm_w!vTBfpa$wUT+KCQB%7cnaN!5M?JR(~pAj&>qGCXkQg_op)VLUTb^u&K=^+wWWU(|)l9L#> z{Nef7E?QuXEQb3GPYv)a^Mg{}KwM(48Egv6JXUa6Bo&EZZfb%+-W2EdWCd1iW>d6@ zEFq5+L9zWO(rIKI7D+{OFe{i@Sg@;PJ*OJb2OEs7X^#vGp3U}-flqY0==#sm)Ggw^ zcY}GmE_(KDv9pRJ^h%$4{U?qG57KDNa7h;D@VR)R0Ngsri|XX-j`V`{_T8vpKSL0MwZ`_SlZ7Iwrf`iy!Tpl;g^+uk9CQnzi+HWg{}9!6u)7Hh4sz z#3DPtnmf-R2=<-b+F@=5*!G`@Yh!EP-!V9 z8$T?FI%-I_Z;=WEHqRXK{t)%srIvhbznDxo-nDQHJ0~OOs1o^}KbbE(RSQ|*8sK6T zSps$1;e3{4@UO?Bt}Lkpa%@nN%X5Hv;ln;Q zsWf?UGRcjCL9v8(1=!mvB*T}q$b0PS2rP7nY|U4O+kh9|jd3DwA4tWxZ9Xjv7eVwCbB+IWdvK1MiS7$>v84mNGP zbqM{#VW(UgSSxL$!{O=RI_JCNsvc+A%O%oS(87h=mR>Q}Wp09~0HeiY2H{&7Qt!yJ zQsF(L%j|*C>;s2IbG2Uou39eQadLuCTG1=Wgu8(j8!3r!3}=#8C2;~j`zXw}YWLk( zly!rGmm+2)f$HOt-d4PD5R=|%ki{qha=eDhig}wM_m|>rLugYL@KD&Wf%aMXO@H_i zg>5Z|LPfSHeu^0xo_U>nsoq=yo?WtVF!d7JT$Nn4z!KBpPwhsD`+-) z(s>qt?-(NId6wyOfo(mQv|r6-!-SlMV9ibsEIXpLKNjbmZN0tju^Gnx1GF;=vEz08 z@!I~f(9iYv-s8W)^&du-Mh1>H|LIXi{uup(+O^}6QaLdOtMmrY?%O>;2oTsvu1*cJ z(n`E-Y#3>@2{YMxrWGyY`dLwU%L$cB1hpa30!trVuK~hOs zg~|j59ZWf-NI)}f;60qUR{q`LZ84_+EG{Ad*|N1fxOSx|*kLOkl*pShD?#9_tGs5J z)&2XN8g<~VrS3|-5HBX`gQXfJJ&oFG*(2ORjz~WGLA^Zx)7W^Zxr}r=@p12p?%X$l`DH9K99b9S_<&c(($B3kpMnrebEPC4 z4WY#YwrAi!PTsaddL`!T)c5|9+>iI~o&0}K*Z$*)L@G#I^nS_X9;#3Y@bjZkaL=pP zm{IxZm~!0_?Q#q>4qGotSr*)NyX=}&hTb)_GumvVyVcW&z=Fq^A=-xUSHuK!fEPgC z-0F=7vJ5TCFF0bM_piWd{042A>)^a&_(?BbnTE<9*jK!JVOS1chae@vu;&#*n};6F zw`@(I*cW`u42i)Ppv)n2n2RJuAy5zev%(}@XxAKbsH8Kb;G`Rm>|vj7fW+_&z;f=v z%Z5vrTA3WP`dVxiO~XaJ@VVTU?yfyE^^@nu*kBSHhGV_?c*$ctG$0BxREB3cTz$kB zb4^FV|GQ*XeKx5+;LNj9<@qg`Q+hg_T$<)!`1FNLNioPCk8C8D0E;?}ssb<@lFhHR zMYPI@52>a5k&`q1LE*Bl#%}k#C)^IPx3ZhB6(^^A!g?67uU;5q|{zLk*L^rKQ}Fx+< zaSfM{SleTUM|9L)m=UiUpwO{jU6>JOjsP-9avd?JG%9S*0dxA_yUAHxj0A@&d*0O$NXz zm~GH~HykHM^eRB~Ye67T8_0)mhJAR4(tph-q~H+7U1DJwGnRkd)0A|XWGjLC~#E_+UEQXBv(-15u4MNhvPevde3I& z{1I5(a;AzM{{*dA1-T30J&2j0b}-z5`0bXw`4)we#_`7~UYlMG zvdB~$DQZPiM+jQ2rbY~m!2z7J%U$(qin?QG{TH47X9zfiI>a#KL|pL^%a($1)$LFe zqlrY&v$*aKu0oYK+#`u_a&&ek(>3_`*AReHk(0H0gp&D+^7!1Lpc)p>b&jxZ0Q037 zNW74?Z?-Z&pINV@8fcO@kfU>1!Vde+b~#|SNeoaY0E2-)H*Xt42~meRTdM52A|{9j zA>HL9T1+C+jj|j@)9W3>^Mg}fNd(8T0-U~A-(lPcynP;DNf_r%(4$D7XSgZn`xoE~ z+9cX&s!j=RT?Da8&Dplg1aZkQAMe>leq9;Hc!j0s#H8}0|;b){Z8_vo^Z_C%PE zb^lgDy=`_PqIoK5v48cfJ%v*A5cK;vv{11PZIL;sb z)#ne|_VDTd0~7eWD!7;QQ-4=aUI;HnsGqf5Ge(#}Y6|;YSA^Z+Hg2 zyI^yLeCb@yMY*e=O}y`(UQ~`nfYvcnKabwYkci-1>;Fkv{PJ;+*yf{>oxUOW=onygc|>yMTS zIQY%=dIaF|=dkVc&=Tts2!R;{!ZJ#6%mx;1ANzSpWQ5_3$UwMj?>dp6*HXuRVL349 zqSnK4J27STjNaY&cUMRNQ}!b`Y>HaV+$?gvdz&Nnu6vFfntvz1iFT@{$UIkGfu2O=1CX7KL5JT$@BM&@$Z52pHB8aSt3SO z5{MqI|MHbQ$S+3@1xa=UM_C?jfuND~I)0-Fa7_Y07um4IJ z@Rt`PJMhKI{E2z1FR1ZnCL6nCHBP!e+aiOj-rk%i$sl`qE?K?jJLRmtx}mr0UA!|} zUiuZ8A)bt_35F8e#<2yw%8G(zWUkOIkL}9Z?eNRt1GGgm^HQjCXn;?18%Z+mLnbd5 zO5r`uvaYH=Zup0`*PnwX-bp;o+h3-N{>z*7HzU>;8@;2G!#_;=pCXouw9PIHT<4c? zB`D;Osy|s6_k8-dWfox|A{aQEX~7sEL21Jxgi>PiL9?yTjqPBv;W(H0ytW}c6A_z@ z4)hu3U7z}IAu}LG%)1&ng%ptZ-yc7ogj#3#vdiAhSrC;f8;E5s2TSDcZVvP(bDIQ) z=XI-V^9odYmqLxIh-?}_&5rwVTn!RGnvm}Fb2<&Ye$KTY4Oy%jp3bwtH#!$zXnTLrnzz=BLtb3~w@Ndq?x;(_R|8Ucs(Du>Wxuhv#aQOavARM7I=nK72FDntapC8qU_ z2?=!=6@o^dBY#bh1zTd7imRU!nr#mf7=}ihnNO*;cioXoQ@mb$BwFxM4Pq|uz#$9{ zS_kIh5ZCR}&vsAPEc&10Ffd^dt)(3&2f${h$lq_tfmGKB;U-q4j2{#y+|N!v6b9Af zj>S>VQJJRsJJ*%u zR7ysP9T0YJa~<*6vJ3Aw3Bt@p$3*Pqa99B#Zu*9mJ_>sjD%F6;It3jl>DJqnJyIco zVB`zC9Iq&rR+o0@{84N^Km)iD2jMMGzu_pasb5 za-%z&D|Hi{5FBDqBm#wHlquKGM%r!`RvDVs^5i`eDd;jA(>5d95AMM2b<+NG0Nz<* z&y_+L3O>I1yjLp1sNBzAM{A%ze04Q_6(T{asM{In26${2(Gm(}f8&R*iYaQ@CZFCf z&2$2Zy6)unMYUR~&MC~z@D>XAXV9)HrRKb>^-JX=s3sz zvHakS`@y&Wg?zvLrFbRH-*e1AjO@R3O8$eku_4;@ndPu7-D#k8ESfs0JB(CWHg zx8iO>!*HIh?oUodxGN~ zl0qIGd)mx+6f1xqnN~8dYjno;H7zJP%}$rlX_Kk4A4tHS@m{54zdM%}yD`HmQS8un zkHkYGE9}K)C_G9(|2k0P_yoOx=8`ej!l?KN`$;C)b$BR|pI%+Q%sz@XGZ^+N)LCtE zI69ZLwh@L8CfvUp{~{XZYu->nqLvn;mNpwfgub6KbcV0f432M(=B81GDDS6u^Khlx z@tAcM!=F52;(x9#lBzA&<0lXm1sm-g&HHhGe7-UKbpLTtyb1du6dT8zRg@u9*JfXp zP^d-l8r=QfY!#sI#sQo;01k|M62tah2qWN+K-<0|mNe}J@XNXUP7)>Aj^r?CdjNErIAg#NKu z02GQDP7YQ|K;3EV=6(65llzJpQIZ1qFnX5%heokB7c$8tlzxP>)m z)`Xa$SX~h`+H6L>f{?5TcrNoK2B<*}vIc{EBD+GUKv2a2 zH55*CYQ?b9aGE2*%)uf<7k&J^0a6));3&Qt)DC&N;;pG~qwus0J!;4fX$>x3Bz;QC zOpYqp5%X84pvcf5n;!)+1J33$s0hbM(YGj&zsfe&iW(em6`=jY;RhFXypO4?u$xhr zfP=Ec3{|c#*V0*pIvV0}uCcGVvQg@OsAUtcO&CRb+!~#>+Q&BzZVzMOL|N$U6%xkZ z7cBM27#FKL>g6xxZFN0BBFgO=rYiKp{aU=~^?>5I06K&OGD@s*8h1JqGZDha{!bA% zk9-)*x0LCHaYQ=^LZZrta725|?T228tXpbW@FDyzw!GNTqE1}y9VmmYZDI~NznNvK zB0lIOup7%;Xlv*}>LH!{sP6rnj<9)tZC&ew=U$d_j3F`ZTyg>(@pD$8UM)u?&V<^} zwCIV2AgWRTJD6H!c$SBpCd94tRJe?V3g;20ahCiFxaVIPmlTyiT<+X&G!>NIwQuvV zXE{v8(R9jGimpNV{SYK{4iT$4b%W}XrL?VU1i=#oDawuNNf);k)Q0jt->+31OT|C1 zb_*)_Y91^OBk5)OC&TwbIn0$l>VS4vWVA@o~04AMF9iq zXj`M}l*A}}40z4m^m7xBsHF9e0Ri|O&>Uih7)|8Ehi^p_wyDdZM(0%svkMoc_x}0@ zDhNN+O;{**h>`KY7HckcKfl{G8glYp^Y2FP>_;TYeaVnUUDCVD3eO2nm9X<;HuW-m z`(j|R%rF8|?YO2QP;%Z+>6`-LZ#-IeJn7M20N)7iQLT1|TNTcu4Q3jlR7RLgwh0o-NbEp8z|6$5H3#g2yb)k-l#(-Y9_%ZGJQb zIBI9tf-S@>!e_$9Fc5v%-8x%362vB`nYLbQ18U$L5d%M4r7Ft@mZP*+m2{TsY*w~t z-`muNxBxQChU+3!#GZEntSH~{u4Nu&?Upqx)aM!DAGWfFRW51KF`VzHVnbX9_@&`* zW^3Yoiao?F@}vBYW_MV{z8iku^6COnTkisWJ@hUrD9Ep49X6z?0>rH9~N0zD!2$>rK~+<=Ba zC99%)xwdko)gbR_+ih)GT{yM?WJ)U4F$Y||*AGeOSM;Rw28MZd5F5uvAb+d#MX;(o z7-P5@H1s{~N@?iD1MYXS0PjVN7_8&E-%_)LPXjn%0dvCMDf3tr=)t8=mpS%V(h$Hu zsW6UfW**=29D)52^j^QOw+LogDV{cR8r})$wgxIlT{cYtRLq9CZ`L$1_bJ=h;R`WKFmu?pM;9}f5^GkvK& z!gtW1TuJpBPPa;#|&x>uVv6AXYHok zWtkv%-~fGC_fu$S{+3MTi9Ca~>3IcfTTT;?uHjD2^cL=V@yqX@tf_M;9X#O;4x60O z7?L4xylBcgDomM~;sLp93@z7d_QCpUr}aB6`(_0zdM49PYNxR6E_IDfiM4C2;qR-c zdGb&xO*3T!ryBH@zkwYluL&FFSRwt>{a+<0Jv{LDExTHOSp{~M%5}ARgr8QPR{ldw zO~A8TjN@x1^YROL{Ofe_Z`N7)9o(!9{#7d?hF|hGA6($&GqNPV92t8E=@)4_0c4}; zxips)>8#W0_*mUCpa0Y5I&xlPX>s7AardJ!))ovC`85X^*po~vawYWXowk(&lI(NS z@}^B2$|1J;lYfOw+Sq$-D~W<2fbz}0Sq@4RSHf;$9{!rYHmb*0fjin+b+h|$w2 zPKt>Ya*5r5P{C`kbs6+DCc02+@9DH&f|Enk!4oX^OKdmoas@ClT;6fn zoF_*t*s}p23C#tdP@+TIQzj38F2DZT%%$WWDV6Cu8hDv)CJF&TSz1#VR-cyL%qv5^JFxn&TjT<*CeEWv>G6x*)3FAPU; z%xf*LO5AG5ldc19CRQ)J(FwHmb(-3anwMgc4S%^;onb;np4Eb!%{FvFz_xBlQQ&9s za8*G$Zg)2##S<%_?@9oYybnYb|0+O7s;IjBwVPH2NIlL`u<_WN&h&=6|LbO5W5RrDuc z`m|WNFI_O)-4J5U2RKKlI8M6?irr=&3DBKLhi0L}_?Mubm5r9L?KP8yH_3xju#LItk=np7w!tFvz4@eD1${n=NS7l0^0i^*1=6 zR@k|GZw9*`-O~Oc?GkOMM1=KKU9|hlcH`fy3;nlJ#(&g>GGnFxs0#&MzETSC%f|88iI&`Q(e0TFV{`*~fV^ zv)4N37J>?bIzT`>SBELApfupF%m?kcZ8ZEk^L%0LK8$SIOFowsZ43g*3mm91*+Vno zufxXk48eWHcV5DqOKHc?`uSxk;F@zEFt?N`65}$Ca~*rbHi3IXy8h6PQvu@#cX4T5NHkit*rRM3gw)W#ZSQ)c(qYY#d&w?t; z@yZapgS5RtSx?qGMLVQF{@pI{fAhb8x`xaI z+2|FzuTq^SbXaoVF8&~)GOECDM<_pN>LWtOHoCvo;gE~k-)vbiYCB>i;<3-RV-D~lXhd^o zljmVdwfUl4q{pqWkU+wi%N(_FKr$C)f%+4T*T5weR}3l2kWCWgV2s4St$AiL@Bdz+2)aiX=Q!_Wxgh&+F&Ap(afOG}!Rn9xH787#6wGTYR+3^(5 zFmN~1_)N)IrAywZW4K2$6fvLJ<7!mg-V7tx6ss*^ll}IxwEfv%%5I=OjQ`)j$_UZPMZXs~_*e1@l@X;_Mh?iz>#&Z5jn#Nx2VQ2V zfEKwO`Z_+4BKMl}Rj04+aGPM8ut!jSh2vOxv<+-W?-%Ew4S^@&g`KMS@cHAO0WOXb{y zh!gA-7ZSf4^T^4WH;^+N*xFWjq06>w_hw(mD6gMowRu_u$^Eg`N@r)q)^K3fSrhI>f(v zd#pq5@L~{B;*))(_Zk25vC8K9(!RK3(01LL18c&OgjGl#LSYQy7K<-PjR199Os|3& zPWPMNb+jSeCOOJH;C80IrZYL~QR_*Y$guKUu+4kqcGEe;DSiNelX4my*n}&gOwLln zM{+^t`a>}A*_dGK#Kp@xlo3}#d~5Uf?@F36h-&7q9^cAb$w+S{Pf*HQ@Q}Ycjcu$*i` z>6k8nbw_P~c#JZn_YH3ygBtF5>Cm3P&zCrRp<#BwOX|I_-rr?IUI++N%39hKr+>uy z(Sm;&j2);DPl$_g7Dy=6#IKY{Nu(W!6*A1vU|G+f69jNqVoRBy??N3O&tO%>)-T{zN!I*=ZruA?HJ`46fxAU~G=mJE5C>o?BVKVQjEG28O& zAB{bfzj`H9fB8zJ_3SN-?Ej0KEkKb|nfE|S;C^nf(vobN0W_zLQ8 zSW0tZ`dsm#f{d2PPmjkGtqc0{-(}w&ajDE(9VR^)3)X7h5H;*eR*eQQlB!*m7enH-}CsbegHFU(O;s-x8h5T`HFETR7b3 zDol)Gf9I8`LbwgL!EDq%Alhu!N|dbjZi)g-HS|NDvO990p8r46-Z99wZQB}5+qRv# z)0sQH)3$Bf+G*RiZQI;w+qSLBbMAXp_kB_C)QzYgb4AQpf7Tphu8uZZZ_O-vVGQ1r z+A@{sA=)-l6U!A8^=mgnm|MhvaC7G(6gRSQo6}Q}I&{|NRG(JyU_1+HENtw0G90Bf z30PwDtUPuRhst?^(rcpamrlk6NA8PgRw|VPmsLG9CZA#Pv+0d~V~0*NYQ+7-O^@=( zk_fI)Hjf)n^-+hJ8!Z=OFuBaZQ+M#mR*n=8D-jb% zt1p@8nq|t&1Z=mwx)P&C6tL2&*rE{>7JBZ(YkrB|w@t{gUwiMB5YzQ@bI|z>g!3p- z?R~&MohVh4!Ki4fr=v5$kd6w@atWBiY2!OcsX`l^?D;nMgL<_tuxd8#R^pEV+hiLE z@_2QdvH0MrS=q}Sg($37WMO$xK|qQ)HXSc#7lD#|UhiSAtjjfzwNSl7^?5Hc9A`Pz zl2UsF@oJH-t`eAlQ8-$6+&3tj9bu=!g?4~INi+@aiYpwH^B()4s}ww3Q2DjBs|UAK zY_YaZ0|W+eNhZX#f4n7nkN=rBM}7}CpX>%(>odxV8gAI?;SFiCK*In%ttJX&beTG_x8=lT_@X*dgo8jITVP<_fL{D7=^YT-0 zmA;WwjFgoxB2HanR0FMb$ey%ftR>ZBtnM#JQjfvJb=z2exxnVqO*k(#Gi8xmm5Of05rRaSLbYx*TdD=lGfjN}**S|h zPd)U+%(>=H5g&>Wu25WP1(1Ba$a0SXD!DqFaGGZutw4HXI}QUVcJ( z?i@>OTJacDXIl4&%zhbqq5ihe@u%~7d^g82SKLbPVa)r{y#*|t%muQ+PMbDf$m~8u{Aul|TuM29TgI~qa z#PkkW?6F{O_D!xN*Zn71mdCpYZ?GmeUZJZhJZ-QkDW=-sg=;=fR(dj3vWme6BV9ZX z>cmE2nmZSNa*%tfb({W1m${X}NhE$sImdKpg``vK#wznIf_NDH{p|ridBax+t$Le? zMC&XKWuh#!{Gj+@I_%YlhKGCIrwul%dS{`uvL|1-Hz(e%d}H&!&qWj^G;G_GAOOhSCufW z&Y0EQN$^@@eYrq0MDAOLi&fadUodiqd=lO%%@warZZ4;;Bhl;5^Z|w?1i1w3;8_H; z8?X?hGWbC9aXgSHkQsiRHGW8#{Q#D;#DJPMzgtK#MpsP18Ad zSaDNIm{n!28rc05he;sxDS8d~czEhipU<~OdvDocr?Z#%IR?gL;QdTm{dqBrj_%%H z`I~ukPG!VEs=xf@cps^Q96tUwJnw=e2&}Xnky*my%ik3&we)F2W(8o;O`F(m+G815hfPhay?kMhF&5k%E!VScT(Oe0Mo#!*8n7 zm~S<_cz7E>OSOw!VLAliKV(=;K}B(hJ*xO~@pMl~D@N(CttL8W03JFEnxsJZ15Oxht?8yI2iz`MUN^Z%~p*ydGzDSshd?2Deg55 zW6D1ia^l2cRwsZ)&cZ!oHLd_#4RriT?5n(6ESqBP2|md-97$rf=u{!>$CzR!R4*iT z&K9gaDmzAq+(Z+C8gLBB=i|siom~|TRtU8@3lI;9l{6cd<4^j}s&h+Bi==}}V9Tpx z(1X!F!70{W2GTC|?6+a5fci4%`636o8cuXPuptfD%FA&uX=nV%cKH>q4{cX}LV2<0 z^>#Q|p9_H+EQzCdtI|h|H}H){*O0D+A{q??Pt)Y^s%XyB3j?m8ExYCND_UmUlpcPK z09_)r!dzY@&Cp?&%~^WA2G=08pb8jxZ}i?Q9iD?zX85uXZP=8 z;k{vpmr25U(r|B4G2iey0*yM=xx8JY(Np=at`<60MR5>GFyN*Y``qm;t{A@?efN*o zZqN;?p))a;OLs3BbaQnZY^Qt>(sbOAGvNy#<}jtfLWKSLaY@PYu%rU_{=uMBauZZ}t5@EEThr@JOmg#PTXf-7v2|mKao9a2ow=&pdyoX`drj;bmxpcq)%TSNJ zD4-J&IMmAVP&7=MTHT&+ufUqT9XfLIMq5GoqtZcPOQfPy7^OUNgbWbPbH8FvUQSNN zZdS&0qNIoR>a&MMiudZvH)tx9uP<*8H;TuoHGkV@5LD)GJ6>!5ralG91t}#J$nG_E zat0SnAalbc%Sb#tkWa7&k6v?F2)%^6A8y=^Hq_op@$R=YE0I#=QR=TS2%Zeiqi8^m z6gwC>M8Iz}o=pzW@I@RO7&7oAKtMg_@~PCt0NWV_otIMToh$xPS7NGF#_|p(GWuK* z>E%E%S2S?1bRQ&~m7wL>pz-HegC;s#NSQ5S&zMfj9mSVm(~kB}Y4UCILCeGP$m zZIE7R-aV84wY9ZJD3 z$VQfvZr`HE_gg`Vvj?EAI`iuNGxQC82$84>MPTY;=8M-Yt5UbJ$kq3)e)iLvGcNq; zHb$bpu|4LKGSRO4UM2m~=ni0{?d;F-FkQ9`Gn_6(^5GYIeYJh0gm{k(axT?YK8y|R zH0yl0=AD7dXMz@P@=R?e+gTe#vyzJyUiR@n-cDzVPt!&osJkSw2;rcq(#1_^kXNiz zU3T#pvif7UxDm2&`ei=PdW_m0D0iKEAsjc*@>T>OGWwI2U=Fbgb{`A3W*_zSIFu&k zhiM&QO>l;0xYs0L`ciS5#Id=7vNpKGVI7kL!6%chDN^#9LbQGiKgn!IV)?S;kP0TR zZ9`9@OSBPT_;nK(A&}?{Z`@iSruAajz1>KC(!awsC>U~YHz=Diub*VDqMHF0^5TCK z(lj$>yr|c~-0)e?aLb(k#(Z12p(2^R!#Whbn1I1|^fV1&**4Ad_GWp8#KEcgC>ZxV z%G~0t!(4-3B=(nfNup$TAG`2I@?1lQ5wP~MoSsJ_g9wY%3z zA+Da@A=i@bUR8Q0e@l5BZzgl=+5^|)?`#-u-dC&hEgv!u_fL`RpII&coelpzbXi5V z|0Uch^yCpJqRLoXTTd9HD*$6{KATVwigSk$;!O@1hLJ+^wtf~rjWdHJ*o1|g7S#~F z*w(wqe&&>uA)#B908LrP8*MUAdkR}CaAm#xEIwCyGwFjJ@az+$`$7w(6&S?YZ-aLU z1;E-j2%Kby$eshym_2K#&hsf2@uV~tAG^^N$HE9kwa7JVHGFeBi}J2TPA{B^nHd<3dO@4SSsWd+FBZQ5GqvKg^&of zpa}&9W%QCt2{l+s3c-TaODe=`fcgh19EQbr2oRM|XjU!(@W8zF@BGv|HOS!j{b+y5 zasKa*C;0vC|1Plg-@E#)GWKuz$^O4KSy=C{863C2YaY)SKACTEfWWH{REK~8W`-MK zE`-DY!JBX6qaOy8&TGcTypTKH8q28p4EM9fhn_ZvjXA$XWMWn{XpWT)4IX(&ygO_b zn@D4+FfbKZrC{JT`THPf^B~3(%kAS@g_L%Sr8)VEQ(bto#my+`tp!^bKO3IF0HA_@ zQ2A1vu5cah^MwEpspvzpcS>IEpjF|EkQZs}quaa1e-rR9rY`ZyMDn7?c6)1#KT>CZ zMr(fIII`XUasZv0NXt;S$R#kK?x$7fmTcR(pBg`CURo&-kpYB1)b09vDH#o!!B@T) zD)l?v|L;r5@EtV~p=bm1ieU~mXCCO;?!O6NCQ!e+XsN&aQ>9`1S zY~=ChBWvb$9jHfA0st<;q>{u@HmSCnZN%Cs9L^IBMKLmd z2h7-utBQSK4*o@E(^q7-T(DT1PJkE!!yWVB#&f^gUrmT9cfmYQcpW0H{I~!c(ekBU8b>Tl<;FU@hfRz`7i)$v(yjJmphXTz!5no|zn#T7 zBvd~nYdJ#{o3TUoWFUmpZ$hi>3iDM)u0bN zg%1f5M~$=#zUg+Itx(ywo^y;w4mTHrx%!76%I#yE5Mo+!k5{6FBlD@QrYtetjljHH zuzXj}XN>&-U;Bm6GY+((Sz+kfnY--wC>Vx-qDS0T@FO?y{0+^3QJ|;kQC)9o^Qb^& z*ffh<1I}9K+8y4rB6kq`El{f-e51*i2S%Z!l+H$pAUNi#N!za=L+v($)sl-L#LzPI zDXBFXlTL)W>H}nnHx0^tA8HEsNVL5q|FG!bwz5An3Q}#-#a#KcDJY$wl^-KetE%}MX|sav-+7#*s@pZ12y{blX&7hEt4FL$L7wB6RY@U(*B2_ zXyMjWIFO?*n(zjMZbZs+4Ahg)KMTx3W+h828BGYx${5$Q_9tO1wgY(;e7FTfNKL=m z=1!D3m0lQZ6{kM8mjll(CY_FS0dGh%cVaxQA`$0o#c>0s9c)INqR5m3PMu})buHAj zY)i7Cjho+Pmn~bZ5w%zLAggs$9Id(XGbe;o%z1ylvA+`F_2w*rlrsTpvtII%I_*S& z-?Ux_DwK65jh8*T=RzVZMPs%8PBTGU)?Em&wv~EWiW}WEOgIR`*8?p3V<5;lE>?u) zFa)?AE^$^V?U(}GmJ>ynTm0KG;1<=^Yw+}dT{@4g1zIVFsgcSp@cpVx6=gz2cw$BN zWwjQ}VnY5Zn;JM6<71T{B2@#`vS|HBRb>5vb>*H?t^0t1;qQZJPzw6@_T-p-3+7pEQ+8jdL;gk_iXBR{Gqn7jA^bGlyR>U#=q>fUm*P<^s!>%qCxsGtAz* zpDI7TP8|m`x&XKac4cIKB~9iHsPhBoij%HAAibf3-5&A^P~6ud(ts2B?K@P4y58Ep zGnnTXL?4gAG?G+ocLHKROGQh4!FA=exglIG;uD&H)Pj0z>GF+P8pS%3cB>r+BS^(PNMJ{LEF3z2xv_ga#F?y1D%9?xuLk`tkg0sd{FRC` zKlkTv2S@1oz>BQ!9?uH>pMw8C&ky`}9+mpGjWIL+yUqLeB)}cX@UKECqt8H%i152o za?%%sA#;)VE2GY9nXlqq1bkZ;yu!T@m>l@9&3GEQb;?xOIiz z^o`~(6cL$@;`7M<<1<@@HZ4KnjQaUz39wBg^yVWbt)o`*c4I7*Of9MU$mv;k;=Tsd zDA$nk_ryt;U#f}McmAsQzW(J~|NW4E`93)~>RJ7dJjea#2b>Q*46ojnf}&q) zpB)$uI)wyf;D-@*n5~PjsH}_!T`adKh5?#D==so)5F+fY^K#^o{3<7^5w^WCe)hgTx_YV~?f=-nOy9KIT-M9gG^DI4=x0(w zf``Xco9ox^{1_t?94sFzr_2))E%I_{LFcy>m#utHtG7}Ch<@fhRyV|riOXkX^p4A0 zRxJZlqhUK;&?=Z#|C0%7mc zxJ#Is*aBJ!as_}VVF;~Bab7^8A8-7R`mkC!xO!qlO-x$%!#j%&wR1T^OZhstU&S`g z=Gt%}OEby(!k7vR;D-`IR8C0roT;K&QE*8a9=?d|7 z35kQfz8G=1hG%uZZ>Z95n}7>z3K%|=ET(g3ctIgRE~5=o5p~(TYZGEfwpR(Rrakye z2&sy2Q}uc-RZiVdPWzq`lm&$8phLb5j-G)kt$tbLWuXu7?EY9QBz%bVsoL}g-X$y7Y~VCwb_pCqMT<|+k;oR%}kK0sw!Ll_9mC-a0geV&P-=T(BE6= zIZ5wGljglJzp)1~up63z?)C&n{$Q89(KPfQ6zOv1BHaf5lJ4r6+6XchTZVu2KW!%7 zq3PxF>9M<(QkM=Ce(@M5s8txaax5(Oy?@67o!DQHyaVB_Er{$3-#HfW&er}t@5rJN z8G^}{?>7BsHf&b`jK^rW_4RK2%|h+a$mo3d21$J-Vj(2D-ssn&ul}A3q1Q_Joy7-c zl#X%S!2RUs*3EMOI;c)3m=*%jK`q|V>Z#)3 z+>t+^2D&_^YAmc+iey#Q*4Lz|UJA;QOt)4sby_O5T*BcHh4>;TSCvHl+CdPNFx#7e zy!9Nq(H}K1OmcO9=&$`2Krs8ZqCQj8Dm*X%S&AmYAV1at-D5w2sG_;KQA2lEdwW;+_ZzMNhA@Z;dZ|o2!!~~X#eTbR)kyW?+I;^Z zH2Oa1lnLI1jAs1lvfmi1Z+eO77qxyOOcF)NM{-6FTc`6Sgo`lt<~*W}WJA+#{rOUP zC6tNRs-dy8mdu|&x4rw=5UsChrqT08(y&lEp~;RH-*}iuqP02{#ic_5Udu@|e@7Yw zT6H9{wOBJ@D#_E)$ySw?Lv`4)_;zwXF&lcArNfS@fB#W?StD2laq)6kmQ6DX5@e#L z_+1)W+$Q2MD$G9;UY%)xF-&!o8hNFd^=F(U%tL9qxQ8n`3)y}@!OpQ!s$S$PP^+!Z6BUePuOveE!eTqy#}u^&uK}#g3}a+d0KPY1dYxx zG8=)YI9eH`JNBFPnLBk3l(O{&lc4n^n0(?7h_z0vT&s_5?r=Ihpn$YgjmY_;xr%5G zAGQ|dbUtvGGu|k|y8+=1527|-BQTGIW_V$W%b;G~%%Mg2WhsaS4zB+@cllkqlyzfW z`y76o)(p85_HRI9Z;and^=0g58PWdTe_;*dSHy*7-}C{neV+iT!| zz{DGBT7QXMdrnpBhUdf}3fS^2GLN+pZ736{uA*4gbA!0$SgslqNq`BFPK3QbX?cl} z2vNp$7M}>!xw^T!UbU*I++xXGUHj!^{Lt?hnj;OJ^Qg^P;m?S+-b1B?qG#J!$t`!9 zWNRCIVk>g<@Ol}3qEvH8Gb#RDHnNu}dgszeey278saB_vm&XM8L1 z@CRTbrH;D+I?*sFDDvu~wtw`&WGMROjKFUpe8oU6S^-+(khX(T=+?vws)thSji}u7 zE${CwVl%Uo9^bz=x^px7DN`K{FHJTq0*+qH3e^ICoDYI7NOKfn7gX;D#I*kk$T0O| z5l2Ym1y8jU0ffPdoNz~Yr<{z5Wp=wrd5d6HP~A*?)4}X@X#S;Mfng^= zXSdTnJ{^RLN-U9K1t79y#ay4}xK0SNOwdi?{J zW@wGRmu@>lgNhx&#)BUlErH$Y;=#VFY}D`O`K}Np+Gj4wRS{f@*l&O_GQc5Di8TP7 zle3M8(P$G-26NhNth=+jZ^(T!sUu?&N z=BjlUV}7>u0T&MJOQUYGU~q&>d5uyOk1}I~AlRE{qyyGPANEcVV`x7=!8PAVt`UmX z6rhf#ia@R$IQ)~DHc~@sQesSOanCIzb@bAhz-45r+;Kxy`|0~6l3q-;=qsE3_=vH)G(96P)_Wm=uR8d5v^>aAM zsCGKquS|pGlD}H}g!6`ZimgZuuq1W>FW1EwW*apL^F{54O{EbMn7mNqMjU$8s%_^c zr&D)~smV1Qylhk<=!u1jrJx~PLGdq?h2H^K)-4ev=xfA$FF<6H)t;s%;lGx=tfu43 zWI&>vsyz^oCI_rWKR7SkO{`G?Q$8@6VlZ0rO^N0&<>D&z4ViNd6gQR-%M8#c0v=qD zmWV%htB|d5k{on}jJ+mI$>N-mBsSlozlS1A(hU;!-NbFdgm`q80y>OTcRSBRkre0< zX$0M69xIIPw$B-4JNP9z%~K4I7|~|u;A*)MfgaDq{qs3qX?Obx@#mr8UnbM z3@PgXE$}f#l>|Q36wI0_9r%l5%cWG=?xLW-bEU^#CEpz%KbQu12_bubEyTG;afC8* zVG?uHC5sT|=0-LIWhwaO%}AJ+XjzqPF#_`bH1#BTBCDBzO++ zsPp&GO+Z#ka&l_=0_1ZW6%j?708;a=R{ZT}x7>%5O!>9OUnbi2ga7!341pxH+y=i- zN-vm_E0RN4%4C6=eX8XRBupXh$MfugRU_2tO7-mx2lL&~c)|+ABeFxkwT$z}LM0}`Jw2Qm0@5nR2ifQLYl6QY0dg8pLF&v_GS&ucel__r z?KqNQfV}1!=gM*uoC>%1vakpukqS0MsndvfGfEz58Qp_oJ+{khjm^AuAqqzm9#0g? zMQw3rapu1&E6rwFl9TV2Gz9mby0w4yPWZpOwZA(ZL8t%Ou63$fDSQ*tJ}0Y}-Bb9o zWCsz@DFO`nffb4fM*$`p1fFf1rkb{CO55rgPWHQ9o-Ro;9pemEB_9A&+c!*fthb~o zu{Y}>gGtf@XpH(P;e{Ae1#bd2KiX}F3I+Z0BO^_d$Wr|{n{@RO0*-F{LQU`WY=?tS z9ohFw!{VMxq>Ue^_8hCK6o*#E^ILY+0z`F|d9P24bW4UJ1}VIU3{bUEeoZaQlCJET z-=0za!Ok4s`?hrp|0T^x?1B<w{>=be}4V|2lvYPe6%4)9Z?*(XYiZE_VFN3T=S~hKNO@};7FMVX zF$|~(G@1{bhZeZP&FUL!79f$UCe1IM-{n;Ia7W>X=1|iswuOWEUAFmG_gSaZd0e>S zh8M#Oa8gJR`% zcPhmtg-1#o#w*4mPE@W;r9U?Hl-<|4qu3+X0HeNaCxb}~8u1?d1q)ZwcJ<=0%*DwG z@`6!LSzN?DhYWq;raj6zUZ--OcrfXF`FvpA*bO4sv~K6r=)fm!6hzErPaLnVn~Iv7 zrAN^On@ZzvA438(Op8GuYO2ax=O*_IC7EQTs7d446-f!I+MR)`F&T#B?}merNGsJz z?A|?3BXWJN)}ThoDx4z3Zy)D|Y_)kf+cPg+FH_VpTr>11=x8JWhNI<{7IQPc6}LL# zU@Hqg6+>LJZQVBB!~WaZdCh zt8*DKF5AMx$`-;mUUZc@(t%x^7#1%KRUHtJxs7ihM)orhzR0a;@*_opcuDzm$LD-@Cl`54RSiR-Ipa33qh zc-Zz5XMScV3#=9u6wt_~-4Jx_Hg>}_sqMOvIu!Euwy|km`YLVyUDLhvYkA{s#UtJ> zh6Oy+f&M<7AapWuYL zJoP{kl+<`ff2Wy53Yeki(RPH3)+=acX zWeVbr1U}!iYh8cvL}O3nhmA+8qOjtMdfBH(9T%)EIwZLq!wi< z5pCJhYmJH3L4WQ?8M5&87%j-l8>5F&bl_|K3?SAMX#K+zy6ZezJvdjQ(3^^M;gy4G zX;+^|Cf_%j9d;X+bXjH!SvVRX1UwEGZ$z zO=X04l=Kr%i6PZYx#sv1?qMQ->RGx*{;W6AAVHhLqxQ4K$Vp5irqzJb0cH_QNlb^d z`tak9fI?#~Y6{cLlmj0D%PIhz3rRI8e4mnaY}N!QDzsOfE`?dt=yM2@t7njFD_e;;Ig4M9tIQKnztRpomT5+vL_TFw{Y-+g2Se# zquWx9PsVac%M+}0i#;(03*)etkIow%)@%(ugrUG6JhrCD!!>&+xv|XB+5L$d&mhkE z*=bARp3IG_R}|oc0A@&@c~{5Hk#mfx zh_2n`NLk=ebA@+;8tu+fOaU;5bKv>@NdFqkbP-smoc^M9{@ z8wOFn>QJ+ogJ(vpT~IR?B!fRVx(nt;33O0*IpJ)bY(K^}-kb$lHHW8~oz>#W zXcTu}lUI;mW@wu^()VV`bWoPDO z7h=Sfi!v0B;pML_aodf(meXS8iL1u1 ziGpF3rLGFfjq{tPUR?(FFMFRafybw=I}haY-{(uK!z+JBu@J6HeARCXiqSttG5-H3 ziplEPfAcULjqLvoBl(|Hg)wtrhHqNRC)5veS(v~}e)L>;hz2nNt0ycGrwop!*aV)@ z?xlE4d3Do{+S*I*StY(Fzbu0KX4UD+(V=rs(XMtnR%Zz!C3@DP^HmHSuHXPfO+iFe zg1w{!HjmlUE|tx^xp92nD{(VYdNZNc&kss(OaKZTZ8=Cmx#;7Rc<@rm2$=ySd-n|O ze$tGsNcb$T2%RJa2T7B$;L-EbA|#~F%sAHkwAlbQdNr!0iJqExrj%xEd-KY` zSv{lq;j&;cmyFMgWgJBR8w4wx$HTuz5&!UOBrSihQtUr66*&K+b^I^1^rwgtP!gg2l>bFZ4E?4gRs+@*nx$6HiJZcZLA zJNMh&Bmexlx%g~p_^59bqp7||xVJq#-6fm0%JyPL&u?H|Pqn9XpIa_0jEs+h4{LPV zq=r3v6A&>`Oe+Y|q|mJeA#uHL?@=>tnySq8Mzy3N*J3cBobM#?GEx{l#IFp2xkVN(w^_omG}c7* z-fG*J2pRAY6I<6{wSfXwhd;?$f*fm|VuXUG3Nt%h0+*4W=DX(JT8>%-a#gH7T5Vz0 zE*BLmUD@(%%~9~MxI}w)-9lufZ)WFK4?60?^0hx)%tl6P)KRASfck? z5OqZ%@d9;yz{88p1ccQwTkf+Q^;cR_YQYVIbF9bXYD7ZSe-iV}Yj6py9gtJ9Re!gNE>F2Nv(8jj zX^@;jvul#ET-Ju`5BXTi_oh(f%+zcjPV;Z)|bZSoQ6MQKdDgyP{D2C`Ye z7!OwDcNB%|+V*J8k?s%0^1SY8SR1k7n~pLLfVT>f^VgmkovRF&$B0f@q!2fnuyss7^dVUE^a^fyGdx3{ zU({}V(-VJZZE)66uE8$$_B2xdMNj0+8~}~J|NO!JGN8^UM1xc+=p8m)pCS9$+wky< zjVi|qO#rZV=%NI6;Z^7B|Z~P`-yT6qnaIHuKm_=O=8QdvDKU`mK z8mY3TP_$BXPz?I(4Nh!>loPTHT!Sc>$z(DElalNc9!Wk%jE#ul#^yL=jNXul`HOr@ z1W^eJRvRCuh9W66=xRSHA_YflCIE5LD-QK%yItGvICwU4;kGz=Y4uzH*i|T*Hh^o= zTnJR;??i{|GXQ|yfDI%mKC`@;!8FLeNN5niInoTiE3K(6H) zl1mVb9uf-OFH)J}Z*F$R;^*>{i-*5I<3|k{dA2SFK{`@C?=C!8ziQq?hNGj+hgi6w zkY=K^_VOzRxgwRBPw2RuuO$J61h6PVMsUMtM=ZIZd%6jiZABaSxmzO`S`^~j zo04c<4ocNJ9(U|FhRx)c(TB*WO+L_u8V&DZ6^O@#4@C;8jdGuc1<-S`Hq(9<`iO9A zLYXm!iTO=XHSE>gANY0q^fRXZkgcl2RQn!1ybWnFQVQ3sG^2%QE)8YanrifWD@1^% zQ`@^t)>l#BQp;&Ync^sThKPMQL~7?2F)J|Yv$tyZHdDVb)nI+TU{J*8!c{nWE@5=i_T?M&TOBZy1Bd^qHfXL=-fEGK zKJtEb!2|N)-$rKX;R#Ag2RVqVcec#|75bAR#ub|E&UYY4ajF*O1JJq7GmXW3W=eR$ zfG_nG+)+xtsx#*|*F1K2>zcJ64Yt2Wa}4xJ=Gkd9${l0Zrf(q&`3gSP1zD= z{(kxfe~)V`Uox0FJ0Dv0c0F|#-wJ9`t+uCuae%YeCj*UoJ&6Fax#_#|W@+G*JaUv0 z$_$Z2_g0)?dS<3HEmN2?+sa!XqdY~yhFb@P&P7SAg$c6btLg3hV{=@bf(I~tW6m?| z@Amk(BI-3zD{nP(^|o}}N%I-aBThM!3mxpP%$@p?HUEDZOW=SPZWDjUA#rj>&Xune^O#Uc&Y^0+6lK)+4wE6d>`K zLxaUIL3P!SJWO1+FwwcR)`dBmo7u_)%Wwz2RNLtN1s;`3C?W%|IkkH)5I^CtDjzX zA%7nhu6Qy9*vFkn+F*sPd(!FY97$uw9Wd;{#|S}~BRJHTO$4-8MAlNK<`RZa!WSGV zJ?!OXNU9`;zNVXg{&xvHd;^buZ5nhC--9 z_r_bS(p&#(t22f@6hx|GZ6#wI=2h0=TausB3+NX{a^|j=Y<$<70}ls))GRutKx74U zS1~_kYZ8Q!Si+Vn^TO?GO)suBUi$;c#AP@hlsDbp>0rU|Aksb7RDYJg+trMy>3sQ0 zV{#2{f#iAjdpUF$?^!5&Ydq)Qy#IY+Lhi2bR)FXqn}vTCtN!m7`hO@8*5zWxh~@D>sKiAbs7UZd^F%?Ees>*A_C}X4iTI`6+gy$FbhJON#_%q@ z0-Ib-z8}`!)v47y$4#)I9MI@PqfNObpw+9zO&veY6jSW+6ZBsG5s&*3R_7;k9wszK zC6$1bpkT^>7^t-7as3HNmHjRISI!mgTCn^KyL z`mc(T25>niRa9pa2f9btC)t%3b3k^8M-kcg@8OwI^wK9@H`Ls#O0oFBRq9G=qGCAk z-<}Le6y?U*785PeHK@Vy?|NQr5Rm3?=?}Q1Y^1^ngO8TyzPqPr_Jk-q=H&QzTCQv3 zDBjgQ(|9sTEASYc@Ud$cb5%!m4S2}yw9sRPtn#b179im8>rdK2j4mgWXc(iIPymHN zCji`JB*G-p3^HN#w8@u8!EKjL6Nk$Y$@YZQ4I5A?a(WytCet>bq%5&vVU)}4U9Y14 zga|23%W*jMZ`ogRB91Xz_hGs3zB@yleU&RRZwi)hL|gr(ui3H(xrU)k9uWc*pDmDP z2)Uw)`dKS1m^az9m<3~s`=eI3F(1FIuE1OgXLpWItj!G2%l>N{&-P~Ue(s~s^;UeCbiZx5;Fupmpmwn;G^3P^ z*T!-7t}amE#ld^E4kR?$`i$BF+Nxk+KwF%)P%CRbcd#CazR~`^XAaY1#?}+;95ctH zc*v(k#8;{f%RI}{do`d=2X(^iAz;m{^k#-jfY*KrJHYudCA0a zHfGquiC*a=G$CrJQ+o5LASsszQRqB;Oc}z|Uu=`|HoAbxPFT5($qRpM4D-w+D^vVF zoKg!EwEa?C@8Y$a)TP6S4q%1>?gyoa;Rl5WzBKC;BN{YdVMs~%Tt8=$(hm8o%hpOY zxE;w0U=l@UMddDx8G29W9U0j|ebHxY27z>XM7kPS>bU~+ej}N)tH6PR`5NObNv>{X}*k($JJ6&BE8;qj2@m26tDZ-6S*ZDM4p)pte?P#rR{c>!&p zEueLIL<|)8pRMmffq~B3`Esw>)u&?Oc*!CNqBF{9bxj^-8H3_eDvIa+YFQOokdW%m z-Bra7o@l#KHzfReK*F8nw^~v8;q5pRZas2By0KMzW(|h4ISHAz4hzXi`K;=ag4*B< zRqbMU>~t0!Z}3r8V6pC+giiX)&@bJ5DFJ3;Pawh=q`eocSyljTrTx_Im!6`|N9!H8 z)q2<91H{F6`&-kbl-d_(5zild%QC6bW-AIUrOZXrX3O|ob<^@~A0Alt*{5HJn~Ep$ zNb8?Dv}uhY?nc+|CSr5`v68qTmgI2M)-0GO{U`@wNzSZ@hUd*W%@8hu(kZL#-qot= zv!5Ir*#6BB&N5ARbifgncC=JU!yb-%OFWfoZ`fg!cLjGr`)1HAciDJno02>`;Y=uA z?H#G~*rz7QW}5&J4XxlgJt}Sc`~#}Xc;|#s zEB#89x_dU%T_A+uwJFoD?`PsoF48PC=Q5M@m@77j7gzS{1h}kJ*r> zYXa@XD0Akk8K7gi=4iW(Ia%2Z;GAe{N23%byAQ0^RJV7S*^GX z;PsRkUdUWb_`o41Li+6jCYG#-nnAUDk0Wsog3;@(dXCPFg7|o8u`~GfaOZ5#-_C^w zzU1CJ5jk;2l-k>)5e06kMhzqT4=+v}BPyVS-N^Df6Voc?ra3mfcyyW zw7uBBO_LnRQB~a4r1v|LAd#l36%>r&jKxc|j1n^3QDsNfs0Nvs<1u(fj;5iHi*3J0 zf#$<#>8vZEb>QHO$8m^4$skaGjppShcaVpO8ZW1#hR6lY|EY>F0E(95DFmI7-$BDT z0GZGB#fuT#(1HIR^f)v0_!z#CiQawR-b@ABb;<9=9Lnt?p*XH%ehUb3E?{e|b zUTg$Q5fV2u1NSKye@X@(9!$i)pK1D(OPrRr$O0X`d}C?Ubnl2|UL*Kt^^nYtTGf2A z;#TBXkd(F&hiK z)d>z{uWc`70wkq!Uq_UgmoC&6mU%r(#Xux%Wl5h}{^5*UsPQyedxsmH! zL#(D^1@udjpn%p>UYR*Z)$qA9D*Fz(aYFhK3+Y<4(ey}~}1(C-;F*Y0n9ip-DQVSmZ}1E&1tl-Z|sX~;Dn@)7%D9}OX8vl zR&$q436t3nhN+b2sm-cd$au@Yn779*WW`cH!ON4#@gg>vcu)P%R!BQan z4CFAIQG!FB4#d}pn-)i6+GUhW)e@m}xMXct33kw*hHHnOdJHp&hFe(G0wO@4R!kYT zJ8Pxh4JlTwzIA;ABB8ZzxoS^r^_-0_xx?PC3v~K<>VA=qtiM-V8ix}E%2pa1_<(X7 z=?eSfdsudQ37g&yxecVw!AN&-k9PhF?a^m+yI1B0^f2YMdX5MoIbX=kC{b8@ zp7Mx~(5H3ZcWgQJkUW@uw>?W@RyfGA@^!?)l};;LR$s?O&B&Uq6&-fHdzS?b`Lg0^ z;4a^{2$$f}5D-CaNlArId!M(IUOKPgr*biM0s@5}mL{Jg&vQh;z5|!@MjNM_6i_`% z3#~hiEk!JqZ&gpZeFu{KCc^|@-tMvqnMc7^jdplCbX=kBi&$AXrB*dCCfnXRZ%EQ? z-6m2wDeeO2M7Va*d+PR?Lm`|D86b>ee6>tJZ9!9}{I3O`$sIKQz-mmksG%4k0v7Pi z2HCNQND!7%7Nm&YOAhSfWUk1&pL$>vszahm2njeD`R6B@odlP^bt1CGsZJKl$MQU2*9@kj;N9iu_kpXshrSct6na9)LkX z@}$9sA%;rE7d@|Yj4WFs9hLPVd_5nlt$=i-zkb1=p=?z$RSnC=3D&r4>Q9x=eq#`s`?z6++P{$tf#eq@ZgMG2m%|>4ll6yLtcv=Crj9(wZvNp}SAwwS? z{4Po(q<2fG=bd)Dk#T`;Z zK_c|?IbwxDIQWk=2MTv5i(jHL$9x@Y0YF0PKSIL)m(H?(eM4hA&Ib#^1P8I%){!yeCxQlOJh5=?8?JAtb+dZ_FsMY*4@jEzO%syD2Ub(;68QE9Jo+%#<>!o;rWR7;GOSQbw2^JEP;deoDPRgngNxmW zK_{rZ35s)I`{S_;0{8W|hZKz}cei!B^H$Hg>pK&^BoF249r^PInFEr|cDn_UI|*Ks z^A-XH`Hnk!9?TS=bq^a_Xg{~;O@)ZgmbQZNPxr@Dj*zzV504fET`Vc%gUVRvM9tV zn!zb9&5|aq6uK-GV%4jjby12t+LZ%DNlq4NZYVPhgqb?psmTwtO$k1tFfli}%%6nV z5o~^|j0>gU&c(8)MQ>v{J)nSZS2zoBWv^^j^lqL$~{- z5Eur82?Rwf9^8gLFKj586s-*6R?MHb*GYv%0I*^zk zEuE;RWFJgN-3FKQV$&nogN@!ek&Hdl%KfsgE_Y${!c5df?4r%Et#sx3z-Y~M%|B6% zOoQ~KXAr>2o$@A6a4Udj$QV{x9zC(51zTT@taTivfFC7QixA3)!WZ(`Ya$(WVA}z! z8&qV^N9~gMA6OqA?x7GjkiF7S^&pb?ZeI3fz}irtY9H zJy3irXTlW+NH{6RkI=50^p0(vU9-T(Mx;wy$>G!CK|rS3b(ly2rHYM$BrbMrAl{TO zx598Er=bT01umO&bSwO+S0XK=yQZ5&U$*I0o#bXwyw}YASl?|e2~wc6+qHZg9* zHGhv+*PKd9$S!`eIWoI^A+KwnsbC6enTk&^zYqSdp&v@g^~N1h(?kQWc9!W`hJEKj ze12UP+d@US-EdTOZ=pp#jG-))NZ1>V`$Jg@&bzEq1AofD5BV(wG6711M~np_9va@# zaW;*=5Z1(`M`escDawsaF^Pu&%>pze2Hs^DPp_s-G#1B)(0rvTMR3Q zI@G);m$Xz04&0L*iZou@T)AaYWcu zi=Xxcqqtzy3w9VORn9sGUGwKB=9`d5snx&28mkxZ>4>YS2cBHd2j>m1FI~UBhgNDP z(2kZBoV3!+&tr+sL~cIFoNCu5F0{iEy4N)EV9XU;4t*u6s4YMPjqBa9u8g4oy?i}s zSX%czwN>iWHo>c|lum-yVh*Q)U5@LVDVB=9{stEY{Q0nWAn-X!=Y!Y2-9Y&>V%ru` zZb5hXYl-lLmC&ngWe9a=(yZ@sWsH%nlV|nMQYt;uZz%Hcgo7SRCeWt##Id={3gt$z z)(L7Q1^4&?{4GV-C~+Ptr4E^mR^i;il@Y?9-pX-??YZ+R%_F$SvnlW9eiD_s4|I&O zhQEOv0b79Nv&5YDc`YCvkvlEV9`d)M;i;Di|HN8(*L2D055&>$Kiro+D{YoKtc|o+ zxpvL_^?27x>F5)t zWsW*~Gx4%UGalqJVN1*%GPONbKPGld6m{;5q@o+8hI1)62QJ-3p6Touh3(#UH#5uqD^nZt7L@BnJU$3!$kN2o@=z|dj)8mJ_Y zg@z}s$%3yc{TV0v>(A^EK5*c0y*Ny!^30#2!Fk}Dpi-p)L$a^kRXzJXQP=A~yh+ha zvlpXio(74I$rN2TGMjrou_acTNF^I9#xB|j>!^V&RoQ`6pUNZSt<1O{P9f>A7aZ4P z8Xj_wUj!;Q_@Y-q67-x1-b=4pOVucUYSvLUiN2q8FfmC$e$xm%x!2TN$-SK&3tVwJ zY|AhexpD~HOos}nrlKXF8XJSBxkyzgn}*7~qB45k(D4mOem-Z%cB8upJqq(|F#tYs z_@H#HZ>7XO>>?x{*LiGJ3m#>BigFSMm1$qVi9F` zJ#ieRqoE|Ftv@ptn^U=+irT=toLe&W5ygq*J3YSjX`YySe1nNVK(vv3S>8BWM{in0ZlFDF0VS3{W*_uY7AC->fKNY+9Fvpkqp3lE!wp* z9rTlP4B`QjSgKpqgtE1(vICR(HGovp_8VX4A~)X}4jfKO)XvV@r3dEtRGa>JP7o8` zDVmlKWw1A|k%zI5{*A;q8x7^O)=HD)0YVkXrrHs;5J7mU zP=w+IJsWfZ`=0J8H8}7z;?cH%@ii`ZLsPoEttjxO}NB=hKTk zw{;N-g$#=jA75racTgk0^*~JO4uYa?}V8BEZFebR*^J|)QB_pb@9y+{G#85Q&5N#IHUqA5JO0|$s zKX2H&H|ImH>8Ho0FffD_8VoT8V2Q=uz|vqw)~wIIJE@|UsDfpDt5boCXPTBBhM23< zbh-KjkQrc$9t z&908)Whg>xp2pAV4g^k>Aqco60y7J zplVm{;1{rNLDl%2vQE$-AotF{w_#!)e_Ot!CO!9(AA7gh zrdWH}Iyf)@qy}Jpa&R(pV9*5o29)>!KNSH#)m*G>{z5lu8w!AdCB72|jyq;yLHTD* zxXNn8@K%%M=+o=5(011QoXMwx9KG-3OOEL|Xz=hvZirGdz8h=q_j)E$(*~pkilwye zYkSK5%ar8IWu=)Az$0dPvd0V4jQAy_YttTfRWpIH1m!oSg2@Y+MX^r#Y%ij#%X3=B zSu&)ZB0xaOH9W?YmLhNg9I{9V^gRnOzHoD|VDuOzLrzJwRr__1_h9Y*x%Y|-upP4G zQ#TAO+4SQU7MSns2h>^&^cvS1l(yogl|Vd8`^X1Y*mIJ6Ti*;ha?6fTdICS?Tc2Qw zNNm%ix!$u8o;r$3f&=Rp2Jt|@!JgV7r&dy*t?(EM4bc}(R|}t@*T4t)Ky$XlUyHMa zRC zVaRXC20vJbmGb=K6Mw4zgP4^bh9Zx6H7nx)wF>T8=j$ zboJ|@fD9$Qe(tTdO&V(fZUh2SfR}=v>CtPAgnhDxzCHA$GwAUpZlF$I8TeAY08I8C z>_E@$DdQWm+5`7%I~C^fo4=e6+#juk{cpG9{F@5)KNw;E(`5d0Z)&z50pGRs`l`gt-tDd@`dUaGqqeNMGZttG zB<9sm*ES-LochNjt7ol@Ja&y`0J}~G`{oCwYI8$29uTjt`B)V-Q{N5gZr7zqARilmS!(7Vq~!^%>ktF8 zYz2IAmAW&gYq5v^?1cB72s#9_^5G)R%H{qQg_@k@)#syHN-3qYn-GDLOEZ=`aEYN8 zj+A7NKFT9M0)m|2XAXhR8?7yPqCb)pRuRd9wnyIF4sS{@VpZ#(Cb}w_*cD1<31-~- z-{Ox1Ab1$x7a#FOydj!+5Lh|1GVO;|E+ihaSeL-NO{c>Q+%B5C=@z$`U%gEmF0>Q5 zj8QO*Ks)v^lpSGy z$C+;Ej^EFZO+DQyVnAbWZ>0Z}U{qk4cH4XYVw)ZgnuI)5X78uk<)nYxec1^mvAy{C zyLY4EC!(qZfKUJ&z+(LO$tyry@YmJ<2Z#PkJHbp_-ocoICP4! zsxp%8_aiAj0H>cJtA3+PZ)LTOTQY>n)7pnONh=k4H--^}^VhpJ)9;}jq5-iPy#^_1 z^ZZ&QYWeU#({=`B5Bj^cZGsq_{VrcL`%5cF(cfqLn3I@#%LoJ9@7i7FP5EZA9eq;DoANjVsuACUN#0;|+VajBwQzTV zobv|wz>C_Pc<-{pwkoLg&xSc10$)dKPv5;7XW+sf9P!lOaC72I=EyV~PlDFZ=mQ%V ze?qke+h!U3c6sp!;n)EG&aT9osKgBg!0`5gjeCt%5){x& zY~fIpsD2>i$cX{B$nE*@2Gqz)zs8YyTQh;1%C_?ZyZeuFlYRrSf`bk&yaQ6q+_i?= zpJ?TSX1{$(%$>EaM`B{m&Z6*Hth-=(O7J8iQ$A8b@RVwfNJWhN81HohovjJvGT#dd z?oP~(bw-?ybA5tyhCs=26NkdF+XxAyW``6%ZXZa4x@c)8jI^^5jW3yk5iwgwRn|Ne zfJ=vsC=~JHU?hG!EcKYGxcQTZh*%gwb}hd!sa2t1Fmal`5he@&Q)QNK)9RLw;CHl! zQH&Z1>-y@!&YN6LzOw~kD)VCVIAYj9v=VaTNPAg=^0>TaR#)yN8=9OaunfDMEu?*5 zvUu-Vv`&Xit%Hc^c)hH<^uh5q>^e+)n}~vD+?~-%QJ&|0S_jS3Gimy$h@$d_kncI2 zX0;Ppvge}O5KVXjDjyS=7b;!}3j~zbT~He^UlZx-bDUb92^z@GTy*$p#nZYlKpeOE z%bk*JS+Bbd3n9io&Rk7_&=hL}39K{xI##gcVe5Fnu^I#F1b=_5r2qCe0w z7&*E8zQoibYY+k%;Y0zp#Aihv(DfgTD( z-4bOqHmKY3lvQe8ltB#|e>(-5A~cuGz%Klui1)ln~F`z z)F2!pfQEc9P5Yii9Zx=G6+m>(FYRQ5nBkm?=x-ap@g7mQ6XcB!A8;$zv~HV8vrtZ- zb%DlDi($R>~k zDHa;o-{AbkXB2fJ`|!)I%}o;rBDunMNeXk&(c?;Gqgqf~iP(zAgx(Kj4$F6Zl%aYv zM@$Lie1xsF7cu(+xTf0EOs~hnibs*DKeEAq(o(xnW|y-~z|ej_e1{I)W0u$=i9JVJ zS6ID|MPraqsk<`~&_-V7(b<7M-%Dj7gZJu-A~v_HEce&I;PYv?v6KsZ`$#i-J2%#% z;MIMxd(IJkH-J7$&{AmW+_b*GmD`KH>}~>Jp~Zj}+`m`ue`BG4sfMV%t&x@8 zKP@y$Nlu}M5w7iC5(UcDk#6#uRznPOY5fdsh9DcndVNLB2&t z>j5IowSpEQ7Im+ujtB%Sc?@r zI+}vE2wRM#VWO%+=L<{gGM5#g&15Bp52HF4AAmoT-I8GgikFhzwIihd`#o$JRQ#qh z>`gJ;!JB)UwSJ!FG|ab6SShCL2ycfkyG7~_4k+k914cOgc~UzqT@+D1Q5|J7NG>qS z5snzr_IG4GL-7tqZ|K!QMMP3)46F(k;$E-N*D!gyclh$F574 zl_X@WeECq|m8WI<$^9)j7I!+=aYkU+;r#g!@|Pt-y_UlWwt&{JubAg! zrpxJ|rbX%C)Y3A^p=hWWK8lGO9mp7yUKc;?LGHsC^r;;Qyt^}gge7(Cs(@i5NTSIt zwTZllWMchVs10NT{>m)8?q3B46zx}_Ic2feS{XvJWYX^Oh3Dc2E)syOtXO*u#w|zP zVeoGJb4;67RWUlQaCY{y)dK&G7lb+lxjNp@OKC0VMX?8x(7J6a!5AzH8+jWJFC!Tl zRMF%TLd33=!HDm-3mP1a_g-C`2VcpTV!mJ%841XrTpfyB{g!3``L@;*KvwjB)Ih@j zDNR>Edg52O_0KfLo~A9}<@#^j1q&l8&P!yaQ6-pcqqS@d9bhLoX>5R<7JW1oFFq|_ zOZV<05zdfLJH#M21$+%DLwr7Xz{T%gs2YEQ=p>Pc@+VhqM<=NN& zq0K&m%joeL{9uj!wQY@WanSWXI9GHEgQN_QR+SbSxpDVyzl=G@XVw;1f|U=kV|)*d zK}jjnU3E$p>JLl&obc1_!3z<{CPr0sYp;QllZ=b;G0cIzVM>a=Safw#0F!lslJG%j zFG7F}|CR48c^USIQ^M8@r5RieHm+bMpn0BRFm$*$*2N*n4{!ZOByaq*Gs%ci8|9Mu zGYpFyREiO`kI%A>nJuKA&_-d_5O8T3<(Uth7bARLL|mZO?UDahJr2K`*j(yEX^k$h zQp#g0zp6Ub%zcM^{FHl_B}fVNh*};DIOB6>QoX%;*Z%$l+3+W=7T8p$Earl zRj{+6)+A^t?`JC$>ZAX0KNEOhj71(vDGVudk>tNn$A5`#Ku_*AD;f77^{*Q`OvqUC#24zoP! z9dTc*cPCZ65SlgK?0f{6J)~s{ZUK&*#;6O{&39@X(dE05A^YIO6ATM0>7`GGA^Shd z*cPyw3Qc+4%;P|O7+dngcpO5d(bP_k;BB-JjaVZ)r(LYkEGA&WYUIhDVTV3>U*g~- zG9xc zMJSK3p}WBSZV>*`%^=^MKFQOdhu0AY@j@+(PKl7oU}Zd!{`=alX<}>k0>aVMkWB&U zCj`5xb}J4C8f}`po3bH_SQ`(t`Fjc&U9|>_6Q%ME}!6{uK-f111&xzeoK;6LO=Y&eF8fxBoTvuc>JIkGTUf zNTJ`v0sm40@csQI_-{bS|7|({x{&_>At4IBPR8;=#!6wrY#MZ!zrh8Vj$Ek{U{xxA zT-o1>>;DFl{u0+8p%Sv9)j!vGKhVsf23ViwAJ_PA!Y;r;{=%XEh#~$1hW^DX?Vht8 zQ@sn)25f@4AN!*W))oLmsnu3La1$n7^6~LS9bv;3XhYAiSAdlZ zuBag6Kh*j8zQ`$MWdBBlebm5ZV213nKhC!*rwgm;tMO)=uH=%;F#n9&-r z?BqW#{oe%Wzp|zb|0vS@Lm`t?SE4f*(Yz06S7yB2Hrg_0^CPuNn>FKC_^GP83W0sDb>{d=hha)pr%ri)TcKv`G=O>Qt zhJ**c6M0juH+54Sa82)*aYx;@z(bGda=$4TPmGMrloG@wF=y1o?^kepOeh8N2%D zK+Op!xE5+0eCgK9Uf&tlxVnmdLK0!bm0)RXC`PK#s0iznKpPulFLDxw8KbRZKXlvMspJCy-CT!QmWCF%} zz0W|c>`L9DCOuQnnH-C@+OxL-C4D-(aSS;jd{E|NB9dIcnG;Zy1TPEjSh__J=Yx{S zgteuV-$!>Ksa9asLu~q_&0y{~4h!c-Ych^N%gsz{K+9g_n^2b5+-sl}gE|_Z;vip) z)6eD|iYM=Y`y&F#*MY-?g22??D^EOx`io%CysxIM&jV%l0__a%52i4w0^Ui~h{9m0fM=+_b%C3d@%$O2}&S?78yS=eCmzpdyY0p4J{wi3?WC$v5B`=# z#Tsno%cW|w?Kq4r@=o_EN4{`aV6lqKjOq?jMRqQg7$xlI%rK1+Gx0FrdF9JO_}S zi-ut;^7+?0X$-=hs7eMpA!B}4hVFK&?6iH;TQQKhK2>_A?AGcoQwj3C@UoR&YippP zq{=Ill*XD}tG1RFPXW46GE$fNLFHnoiZJoCz5~HR*42RgW&@OqzKf}hW!;SwoI9Zy ztQRwBV*6QM?MhLcGqH4aXI6NinpP>IVgX`GBp%yr-U!Zlk213NAonhSfRt8sp|IS~ zTEP^*5M0Ob!4TDbi}pBo=~GnA_kmOoeb{x=o%l-+T`5wfS{jCjR0YCC#1HCER#e#j zZn687t43@%OQfQPbI|NFsC7#Xly-K!Aj%@_9*8?Y6ZMilShB};STmD1L_jKGKBWWo zY~rOn_h_x3M^aLr1imGHamq84>sM};TyIg*ALq%uO8`%`M+np`?Tz$0whh`^#R66d zn~%8jQ`4EmPnv+IjlVk+@fj#01@AkWihvw%S7Hrr(y$=Hx{xaEWd)MFzv#=8SXG(s{1X;n6J=iTyfJ9XIQTbzRJ{c6#Ea z(rEu?X-iQOVTPTV9X6x!Lp)<1=Rd$RXmd`AzEZ*%awSi!bmId> zgG!5AZT?p6W>J;|Ozt||Zx^f{eXD%X_GBB2jw3>n71>3l8GqVo?j^W-e)bCf8tA(81GcU5t7Aql*Y!!w85z$ zp%=Ie)1JVnLX;56Kbt(vi-fSy>0klcV%cxZ7w)Q0pX_$gxA%S1mK_>f55a`KfkM4} zd!JZG!PpXhDHI|x(qFH_yP-E5a*;|o$#ogT- ztVUxSruQZdg`3y^#?S2Q08;qL6J{Kj6s|#Z-C5%TOA}QuB-Ihkw2FT&Mps&!6}n&X z7HexAl=yV+odhGIE(mu74c(c(Q^~5@mtHUuc6||^y3rTu9w)7MH+yX}CH}}$YOi2C zxaY(CgilVu>S%w-RrT?WCb?6D6jbqWKEhHl1 zLM+=AdL{92M)y5RMA?Rs4`ea+RNhbVlYpZ+mW9Bfe98!)6zs@>)_^Jxpf267m|WOH zoj%3?$SGtpdsFr$`Gx9&r2I%;Rz@Kr_bJ**95!FP@31AILy&uKMn`6bxN-qS_k?6d zqb}$+WYXyNcU1EsEgs7bpv-Q7KAXP}XaA)p{NLU9A2m8DdChKx5N+W68qGq(wSL&^ zGd1Q~iMpKacdKQ)nkZCmT;5KZ;<9son@$K58xG7c=r0?OPoQ>+Z?GSj7=2}P=v`+D z6$&M#)>JuKvYw1|<@eW#qt7KBSp=T5=Rzmx*a=q3!&hi0=*M3OuWo|(O0AJn0P0+0 zNH^iwTMi0^dIln!QQ0)BK5x>iC@Ftfv-LyDul%yn=wT~=Ub4H?T4u%^eF(togEZMP zN3=fO-B*DJ3JNN(- zP#-NGT@Xn;TDj#HY3`PG_3_wFrP1yuqy{Hd-hLNDe+@UX>{$xrb#%i(Dk~n>_1O&z z4ce}|tKyB(JAdIu_+Ik*J;hJkNu45a!6)bRIwXkP?5<26$1bysDI{>=1J6gyGOH>Y zZak9gGz|Qj`W;i3!5SN`+aaRyL_Ox$&94+>q_5lh;1@rERKx5tbADibpKb!ug+58= zE)3L&n00)``L?cGcFt)28ulEq7u@SkGv^V|p02@?6>gv-s+?U-(KHc!A5SbQ3|(&2 z7asH}{IFMT&zo!PDL0kA?{eFPBgmS{B2o=YiId22Vw;;jj@o_@iuqZWpP5KfeT=bq zDwxyj8?jOLyaQ2pizNCWF2ff0RG)*1?)t;tkFDBc`6#1{&hsSK!HeFX^r;nkC$ic> zUKSdI_1lEoN@7BLB3yhPpf;kEETlTK%I^?`{DLnnYMs5yHXzR^llRfs;PMS$j%kEc z#w=-El``TGmhK?uiTI0wDpR#QU(A0J^Hyl^&3{|7i{SC}{%}Yv$J-25H((+))W z)CQd26?-3!+w)t^1w5JVlJGSTfA=!Z@!GDfo|Vq_$@bSue}euUn@6 zb_`aLh4KM%akihqfIVr@(i--X$mqz5=o%i+Wx~+}#M0uw3%Z8VhO>CHT<^!Z)e^q& zXp%@?dN#bakJK))YmevaVdO-M?odr-{ra9~N*LcZ4>)dD1 zc8ZN_8mCli88 z+JX!*m!{jlINHBD-Zs8GK+hBkXcs#5eR&=l+MS(2wdls<*IzY&-;QH3L0E`sYz*|6 z<>dJ?($Yb1$B%fZMQEOVUWI>#e~$TFt3=l|Jg7m)Zx}qY=1~KE0s2%TDiuojO^O%X z)|<++)5D)DheFZD;fW3s(iU51Fjz@xJBW@>Jp-Mp4qKskSR24y9?v|ed_RrxA)~y% zPhvLoLGeKI$A=@kwN+}It9kG z7-%yE=#xqwV&w`@%*aSWrrt7U(NV2H;m+%wC(T~V`PGUCK+e=MXa%NvHvOonJ zi}ob`smW&Ctjwd+?N6u$16DQ1m^TmWm}X_2yQ#lUg>P13UNl{%(j0Bw(^C7>?mOF2 zo7xoXW0AbioV1$0@q&zm81H&TI>>5noGGWo_QPzhU9xFQW;IMR-)x`r(n9b8FMwnI zZ7R3?iN8T2U!M>z+yT@?V>%o3<;y&AEf*d+br1DNdtyFvO2j}oI#=$dD8@Xk0n)wR@(N#A72n|K5Bj)x5~gYCtV9|B8P0#S_KJexhi%ps4&P_U^g`g zxUS>ijq`Hd=T>D3E~uo4qXTQz*PB=OndISuy2=Z?J1yZy3U8g{YhkzMLb#%;4cfn( zU}|(+Kg2^1cG(W?vRnQ=}tA>)LPpb=*x6+e>=Wiuf!V!gd1R67 znO-g}l6pi_S~e(>l5;+f3Qd#oYH>HC7BiyNu9=u;2lJJCZugsMcW0~Ax1FlzO${k# zqmen+(=6ZZr8aseV2yNIyurUYZYDv;Cp+;>jeWhuZRPWmd7}=Z5E*bO4LS50ua-8k zSyEASEhp)WKllTNi~4B1yamH#$L z2p?*s%t4fol5>R+EBVVAI6G3+hdgwZn0nU7f}BD6ytZ^K0ThlijOkXh4x|KA7A`k9 z_L-suxa^{No7B2#eK=ZRq7jP5zbL&ED7hRQFp80&fgzWbgZjVsQ@0WbjV&Ec+iIiC& z3$YyZE(`_lzq42j@WYujfG&lbKfWmcH$|r3xblDE$*iOi`CdY_ko#*iTAqyd&fegD z8CLPA{=?*k5*AAEpc&5ohcjl-HaRM{lVZGwiF*P&p{bXwZ~l^P@*53F%15{~%IZ|@ z+O#JM*1T9e1vqw^H83&RBjL)zeXV;UD#wJ#gV!+BEHd{<4`#8Z)hrG~4I>C)MC4gy z@*msn8`Bj1JH=1jzj!l15lPDg;pGvMp(fsY6fSa9<|V<~plGCE(n8zSzp$F-8y}bm ztTHCJJIO)iTeN|1_xn7_anw&dy%ZfERpYzmN~>fP3tP!M%Aq!hXTy8UGgIeO6bAkAi7b zoD5p4|7o2N^;1$8y5S0oc#wkXyPOr(>v&UcM&Q5<{$0nMx^#@8u844Uh%0b zef{!WTD6rmk-RT$gbC@!4w-{)(k(P^&(Wu?8OghoUo7@B((Li&g}dFEOOQsI-Www0 zdllGrd?mXzJlpGf@=23%)&~PPyW~c>;MpSj9-AF{dwH_fP;a@(r6O8iU4&gnsD3{A zezGlDT^chDBQ5>;Y5CvsYf|I1Jr<&4-JTta|G|#GzUi`qZ zCKnON6b~)WwY~y`s3=1iqAH5%mc7140S=poh-gWX7gR|wQlIcvyUDzHczNLE1M7M= zy&Rkzyd6C7G9$-1x*7Af8vGW#@c4M)ec=Jk;ZrlF7bP*05<+96mg1&X1sT;H_2e#w zWT=J_9utgNGDtTC#8-FRn$c;>^=tDuJju?!ZM5vD^VvIa1WDwoo=Z%+hWrj$AG;7= zS`hvHoLm|awToxPf)Ty^yAQ8W0#J|$Ua5Bwac6bml&;$VNIrs$8Mp2Q=i`g+&0- zy36@&^ptDI zwepIOvrKa_C~eC@nxQ=Y$qTFC(O2R2>zQ}#9QvzOnYGXoeJ5j!Xl(6>JVO6va}I{z0l6!UPf zax(hWtofhTSg9dnzatI@pk}Y`#5bKq@;oC)z_9uZvF?IM<((sGqO&wrFg;kKv)hr9 znS##}-`2Gs+lzCxGZ2Fp{!Q~L>y#_;mfx3ePYu118P%~n9`wCc)AW>hVSJ-kpHn|u~LE8ps1hGsmH$Z^Oxp|m}j8f2LI~ST=`$-lxefAM?Zp>Ts z1Ch(W5Dyz8Qf<_z501Z|(^Bva$zS6ONoWxfS(F@{7__H%X<83IkRWOm9D_9~UT{e8 zGBe7EjcBv$z9EA|b{i$0d*xizj4G#!HibAg1Uj((XbRqFcMA!3)@v`T$FJGCll3mU zrz?ANkoFLZjvG1u@Wb+95|;(xOEY|(i>Cg%&WnUN?!)-RBC~^O{^_2o^U{1Uf~4E9 z^wL*zO|V_~V5X=}iksHitj>-wG}LHw_!K=7SM1n}I{i2z&h33`W0xtoY5^UhP5Jjn zJ-(>Qv+{y@F9)k%mi6c_eGkgzW>l~6clb)_19LwOc%$W-wexA6-?JsdN6PD zgtzsPz+kv=z?_ieMw?6IKc*w%y5L(q%-$WpS4l6N^Nkr^Pwz0(;*D8tIsbPN){LFG5 zup|dktFT!AY1HaNr!A3oe;OBYW#sJ&5$YmP&NhJMOSp6DRkfv8Ru}x+8N_RyXr{3L zVguxiFe^tA-7RHUv#yoF(^s)W@q+nI4Pv3LV||93+gXYBpwx#kbGbcrl+ncA^ardp z=@N0u8e30AG?1KyRwl2Ir7Ldq5VE7bdQF0|(N#t#UWS-T#UaL|)S|L88J=wMJtcE# zk@`C}5+#@GQod=I;cAHNF$vNa=u@9Ld@r#Qouz;l;7@$p&8K>Shr<4?AGcwgY{f>` z*CZpi+7UJR-#GmBr83of?18MI>$*l*{$iW@D=CnG- z@j2Y3LM1NPdO4=tR|P~4A;X05?47c?x1?QVvGv$noZPD^N3t#0M3xTNBUHQ@Anzq+ z`870>REVwkxijQ%GKJYBkcFD0t*eg-){H(7P@9xzjLID%uVZ-hZTV;O=>?D8k8(v{ zy_kq-Q{(btPTRUWb@89?eJASBji5;e8Ru=Qvd0j^hTLr0sYS4 zn|vMH{ZJ^AYL1Sy+lq(2d=shKwxKD?XzwjjgS##l?OqckYg5d!UFk-jJnZv-Od(B2 zxl2DT#zc4W1^1wbZKWD*e9hzOlmHfl>e@&o}^F!Dhdv+WwAw zDsf&_Rygn6-(c8!>`vex;$32nr;B)KCuvx~xMN$6f%y7KVJ@>xENn_T-5xj2`FynE z%_x9bWw!^?uJIAfy=y2s7e3-tjOx(cl`H3|9N6 zLL;{sCx$Q`pkTsohVJ2o2YDmfyTFDbs)4Gd5`$`hiyy5XI7>{w`eF=rL#_NOuW z`8neOov{%@0L+i6V+Jj%gIpu}2BsBK2~Xm2d6jFq;?l1e-enhaD8N7P`lBSFl78?x z%Zp(FeNus`9R6YJ%4<<0NFz1M_z9l4yV9l2jUVI9I-y+n5p39v1{v`fIVJ6PjQL>$ z_yy?1Ko_Q%f?fJ|LGi1a>_}5DM;8Y-Pmk+M?{`BFZ#S4C6ef@FXi$TpqmEQhPB%>} zJ_`fT=lO%5L9f~UZlsvTrk^uYD=-+U8BJd)rpT9Q#NddT&L1wNW| zfolf@UN<9mJVq$N-5?K-dL-2UN7_3^N1mvAqp@wPW83N2?l|e#wr$(CZQHi3j?u9? zdDAod%syw|GxOec?}u8eYE^xx|6~51da6uVsf0qy5iG89d1Tp%A0Z$T()|V#>q8$x zgANFX95EcZyBJ-xrb$1r?rC(PHRMH3C-KD5Y%QRx3j=~kKo!10)<~GvD%l6dgka)% za@Nh&ql~4lS&eIqe#gpW(pxcXqeiq!Al)`m_Q<_;_AGcHa{%tY^I&vazH0Z=8q0+w z6tHH7t@oVLoEW+OvR-f$-^nxAWf8ya@EI=e+X!_o8JdSTaB5=EWS?{LJ?yWTyQ(ZN zXP%v1R4*^{PbB#@0|29FJ%ho`ri9Zx5zub%MsGJIE5f~c0*!f&~hrPqbfp~ zUQ&D47Ubylcc?Rup+M8N924nys{4zKzl&_VSisTe@#Q^nCFEQ+_OG()m?>aO2yG)^CqA2oQpDvrQ3z zb>BmzQIw`pB*&?=o5L3I9pO;4-t{NMA|fRbXd6QAT|!Vy6=;0ctWnL^G%SVr{hSZ7Z`Ls)Y5Y-K1qH1V} zvJ&;S`_8Yb8tqup)vT)9G^PV884>;Xp2TgN$bDte8PFyJwvZiHl*~v8tGnXp$8FAf zk4KmFF63|ZX5}wvM}82(tT#Ap?>|<Pg0z@#9?>I z$W9IWa>a;!uUtr3UYR2QI9D94?skm6Yp1SW0&u+mBww(uZCq!6@BU4~-dB;YNQBb; zz;cn0MF1%|BOshp_EwNH%%}#Q4J(x#b3V8}bQwyhz7P!j$rEuV{Hqt2q(7zERA2%= zX=>woV_!1sJT00Z_vBL%Seh8j(T#fUz$1)(I2tw&t6tAqU+lw}qkn)Z-gs+@+id#hBys6nY9ZHQS4;tX0 zER&;F>p92U%IO6YOVp-&uqxHf?KzL-0 z@6fL!Q%x@`)aBTh4ogWoF5K*Gm^j%PINBTEvoe(n`17RacBY!@&%CdAcLja$w+^+p zl#E}gyaVyOt~Bh_odKs~mk3L2#cRr1P)946h8qpanQ|R{y8SH5)n;Am>yidw`>M=k zq&Z>q4mz8pQV?Oak{r?l^p^BTef=DR;Ig?QU(*HOjYa+E@o>Wp<@jC9v$v$IDOipkTp=e>L)A5Y80AgI(cVtWsbzbb z{7`9T^y}2;4fO4aszn=w$T^U0ZP~3~ep$ZGAxiv4Gr}U5qX*2n(F7GX&qgP}ohvRB z--!=+AkDE^0Ze5ki4J>2L%gAVxy!z>E<{g^NP{%ga>O+`asd9INp9)f%V35SiW7_Iv* zfyPV&1Jj%6&GkG?za`rE$p6>w!(~v1^n6MXq;JQs$JytY zlYlm6LGLwQ9`4vSl>(N1XhMy7~@y<~m$J~{#YQHLLFzOMzd1mtxcxl@WiOtEC zzE#dfo_s4KedpmrE)o$Y@kQh*uXo0Ipfhe$ZlOn4{W*6xO|_(ZFhBGs)_Xyh>gn$1 zQnTpiO8no)i~ljp_E)_4=cc^U=NP*EzdBsnzvs`rr;A&j36u2uZ8MlLamXUi3RK&4 zXyQ<@<CkTbbiHQpA>v+`KaKB$xUq;!5oLifO5)zERF9$nf zJm{ag6?1W2a>78+%)YYLskC?t?ooK_Sm<&;e#f?e7e;)We7YpJ{dFihgwxy21%QC` zh%dw-gd#uGYU6p}%ZE{X&LieMz5C;rgWavJ-Rn_udHd*H|6=lq!OJ>ohHv!MA;p;v z{c*-S%+oM$)n!rqv^a;=6(5@!?*BNJ5Q((tyefNogItv ztDB=o=(8vC#SA8z9we!KCX9pORic!kfna4x8(yFXqKY~jLPYyF39_SOp)tVFBAaX` z-G*f@5mIwC~x zupgomQWxsRr5awLBDT!e5fmGpUtRPD`V0D5D#PKdtRF3eONy^roM8)H57R32e!Z4{Jrg%t2U@{3XoIIH9pPS~;t3E%ZN zh(>YNjeBPbA&b**iIID@K$D_UTcWyX9+Ojk5RDhce|gKB1u7tl5adu$0u5lb)?2ox z_jT?5D2oley#0nP?)P?%OIO_Q8#s@7V3)Hw9G4c#z)wnFMA=<@ z^`cL8ToY64nqgN_;=8baHQG@`2@F70YU02wDvc5OC$5~Am?ou&5IH~)GN0Y5uGOnEqEF;9Vu5hF5+eYsZ zR2R2h2`}RU-p?5vchTXt7lN0InH=qJbwO)kpwB0Qzf2JTfRO=EPKB`7l#<5=&$;|_ zUAN&pPG1;UZMb!zP*_YYHRJcw($1|kbixcSsmsbNTgLe6v1L7 z?16Rnaz_W+=#W1z8_$a7)4Y%`8d%K{Z#qe>Pw(w223f`d3L8f>U&4G>h`*&V)0=Ah z67M8F%qgY5lw&!;O+FQX{^CoosZj$c6;B88s?9JIBmQmCK}*R_ysx)CMB5vP_* zf=@RJxuOF=iB9v4^9yRXI4#4eBj1_x^P+Wvr`%+&9Sw0364G;GwTsx35Z)?E6>Q(~ z@h+OE(icXF<}%G@>UItCA=8P0NX9gCx`eU?Kf_a09{=UHQq)OdilhnL)g8Le3p*N{Hy?bguO8A?eto5r*p=1{?NFEsYQ9h!)Lmt80Q;zC9ggqK$c&U`e z1cyfR7P4kpUt=pmpN2DsGym+aHBmA_6n}Qt^!~BC_W9+XgAJ~_mKJpOR=Vbff4uvB zM%mEr&jv{hKU^OHg79O8UXtZ}1GtIQ_ZGIFU}D1(Ye0Zl`chZ4AeD+5iLl5&reD3~ z5*i!$W7;UH8m^$en1pwgLF{(Mt&l}Ct6Uh3QTtn7WMed{3MwP9;BZat z41iwvI4)qUz;+72vH<}|NQO_C`xEW)A1Kh60vlITC-?clG)wLl_Og)2p_+6_i3u_~ zpQom~Xsmb`xRv46%P<_;RN4|w;Ae&QNWLM9r^)syU5>?BAFRG?8KIGhFF$vG@#>8{ zfcsq!I_jb{9{+r5i_f8tzjug#A$|M@U97AP4DIO@^mQ$C?PNaR|5->;_;V@nN=22& z5$hBmW1rD>rze1UVAEV0oklV&{!-B71Gm_8Im)jkCVt+y`_ZBp^#>OO4bcygv-Y`74{1wRJs71u8e{HKW;bxeZm$2 zd3x=_BU;J8j;7Oo2wGgIr6R$Vm;+)F-#kv7P$liucC?Fk`R|Bg#CnFTwX23STj$N2 zh(~QxCbK$Z0ZWgw613S3j165K(ph7hv*ZGj8sGbddE1?xhOw{Vaz!j1lsJoF=ou~5WyBPNQ%%kMpct@+5m~78Zv3zgrT2F*h-0TIO@V zcIe6z3ZDz|9+Z@pprsd7t4C5gB#k8Y0*KaQ|T<0N?l_E)8fPq&Y9UUo()wXE!028eoG#Q!*o} zP0oO>WX|F~)a}F~_5!f=h1H1@-mWQ%TO&av0&!)+jH5o=`S$cHxG1CoXQEym?pX=~ zyT=}HPj&Vla<`9gD#UR-+i!|U<3d9J2GtGt6sx}%slPg0|Eowz>)P0SqD}oJPm{`@ zLt>x%+D9q~BJiwOPw)kwxY@wU7M9=*E1IF0qLD3TZm(aL3KZg}tohnac0Z7w+P**DbSq zg(?%L@Kd%BY?SCgwEMo%>+kp~p(Y=Gi3RFXO9=GkA_1YLQJJ&umIcU}^BAW7JWp%8 zPUlE+jpih^z>b}zN=_0ZzLG~rk z={6k*uDgqso+|fY`hkER+IQag6w2{*6znq7_-gkyXS%9&RPc>H7!{ecKn!1-|8(E? z8OMM|NOm8$am{~#hdb^hc`xqre0?2>s@NzEM3&aqH#rGg;#GE%1z*+2+yin9*mk*MqY9UX! zh=%!U#z-^aokD=^6UhDgpncdvxNBIQLI=QnTNHz*_`tJs^PXigV0HofTTlOZZr|OM zs&V|d4%D~M0VFyEj+A-bBgE=kzp~`bws;GcWeF387q>{+U2WFw z6B%lDWsy2~d7qx#nC`y$q_8g*+I^Uxvp(4xK6x#X<`nrd+o;@E3`$n}V-81LO{ugV zhG((}B?2|R!8zU@~P$qQT2B(yZy?0fW#!S0$=^$0@*bkG! zZ0A8#>zs&Hgn(=qlAp=v-|G(f-^3q(`q|$~qv&X3@u!>pL_V_er$^|x zMb*G3%2Rv;C~VFm5>8aVzw8N8x3w6DpDWwjHmBFgD7hb8x|}$l7zxt!3M^hK!#9YdE5=$K+(jIVtL#Y8odZ>Ur+aAKHj*twD? zU~f{S3Z4&toRv%plqW&?v`{7g7}5MS4)ecSslUvVr_$#MNqU&i6OuKaEuft06L>~YjcVGr5?yAC!4(Zu$2qXI01WvB2z^-IuK zbl_*JLCpkF?2oL)FsEQse@75zfNHIXti1low3D7&6O_G5W#|E9U&;Vr^i6pLB&FVi zRrM?qWx*gGn|8236HV}na;V8|niy4FCszj4{bFGIuK&R8-P=3AQ6boC zBI`^sKer)ZZprfGy<RUyp{X8nAJG(|TR+iB-Kj?g0}6>Y zLRgV7#iXn(P;(ec%~ryBl^-auNWRbcfCtH-k*%OX)Oj#)p%#GO&02;l`zp}TE<4VV zzN>1&zW7cc*9M8dH2whe$<*x&42}o5)4=u40w$17qT&q<&~#1V4BcoT|NT>vzNK;8 z#u_)RPwV1d8rI9YO`x#by2cMEF?(pW%mOD1E!FV!#?E~|rC(?WOqc|=Re-6TQwB5A zk(BrB&?!{44Mk2b2V1!hN9u>&|(&im;c$K(x5Fcr|B^n5v_@ zEjY-mZVuJ`0&!!0;IInYYodn++vQ(fes;?H+bM@mbc+98%BlRv=`X5(G%N~+wvL8Y z`i6greW1dB^U92$Uim=3CkzkDVbuqvor*QSM4nhBE*?zq{Z&k|Dc*I(fx$5DiidZu zks97ESZA}UWh9@rBNp7^i$2v|{iqPG`592hcszAlj>Au+nNgihiwrlVuXoiSexXxp zDjxBdd_9i!vtq3x>ayVaO8KJt!Oww4&1Dh~t}h4FEIxF= zp+~wVhzzr_aL(RrG(2Vs4pXy~(1awRph43|E&-!u);K@FfKAurEx?zgHB=nb!xJ6OrJdAe1sXPxLcYQRf`_f?#d3m+%Zx zw??)T*%L1*L2q(~gtUe;lQk^?UEY+|H2uZwaHYROP>_W_y%TA=@ij(ayyr!6ct(FB zcU^3B3?RI_t%is@vV!T8^QaX_!c?-_%`4~gAIKaX!0HFLpQf|>A9Dtxf0QLfUE@Ep zz(UpkI=)NqN^W350OC1OX@g{};)82!S-iH_>V+|*%- z^Vk-aaO8ym{NgKh$BW=SPAe6f{~WW-sUX)R(PNOAiR&A>(mJMPx{gRvj)utEMR^kq zicf+-TlD^_!_BE+Uh0nL4~heS1LVsu&SE|MbsC}*WY|NdLT@3I!ph9V5QzLR->K|q z_5vi@qIPgZX-B=m0}!}iO=kzs3zH&(54;#!@81d055(rLnH|GpalF5BJbSn~EU~Pz zvzYF1!|_g3&NFUr;6}Rf8^sT1$9pAU7(f8ikB^q&3;E*twBWmk8}fyD& z;R_EiV*<3^Tn>c~d!?|bk2eDnTv_>`4+XolW=;(Q6QqmH5T+!urBkcyuL5vzYIg$L zsN6pLJS_>pgkD|hasu=@&mxT2H69Pksl)M0z2o`#907*#FW!g4wWpe*4})N@JU5(S%nK*_tmRF%{SufGGFkpiDlWHGs*h zpB5JANJJ;(cy7X~xrK$z6YQ|rho{^qHa^p7E;)W5D6gi9%s1h_ASSYC>moUbXBpMM zbVv8mf88I)9qEPjA%NkVbuT^!2m(#%3Flgv%K?-K zw4oo`WZBsI5Xm5iT0+~DCTXuqFpw~hxdgO0e>OnD1#SMQ1jOeXm`W(6iMNB5Pr?kG zkcpfx@L2e<8~DfeV(*bHmCEP;F#UY}eLC@XUf2#-^f8u5FLU6`5GMV8VSGikTNb|oq?R)OwP!rNb08jk8-9 zCfERUn5%6+eJ=Dr`rN+&U;iUr`7ciXD}YmQ_}r=fH$yF>|756hre8iZMjKyDA+KPt z%vZpC`YN43I|@!qxr56@91^ElJEGpkyX>9#B+lagm z38B0dwgkfQAyf1Ye}7|`9iSo*Tu-TiC{E$oftnG%F@(mG!&(~Tr38ulbBi1r+Qq|Vya7+ECmb{Vi`*({B5^;A z80XPXpB;Bo?+xJJRcHUj`ro$tzwtb#*Xk3YJm|Bu9j-uD)CI6t(;u~8M@C-?DZfr! zrwJm^!3BAuS`;g3@jU*h5o!X~0OD)u+-rJ1u+JAACUc;~D!pHXp{h+Z;oDAkK&WfG z6+H!TDU2EEhba%@lv_M)0mMo5td--i3x#3hvFZwaJjq~#WR%069rpl# z3&(*a6w9I_nf>kNmonpAEC*6E>Vu#K8eguRfN1q@!_tk7RglYSeKam}MQlpdaQW zVEP?Bq3b?WOpkc>^{Hyi_bjqE%&4OHN*eU#+F2%Q@;!=Gp{h20ss_s)G}4oeck~UjH*4K260AA(UbreOuwbECs@!mV!6h zF_^|TUYWPHnUmh>lMG~0y9Eg+o$*iTh_-o>308e?a%u|wll1B(G(i9)Zq_X{EfjGu z$B3cn0LI2Ni?i(SRa#I0XoJ&gNk9Zb2`NQiCa%O2UUuy{lrXr(oBEaa5`5$@fGCfs z3H>2gGjgiY=_iYj!u;tgxH>%{Zaj$4_e-{Z%LHy=>_E-uqw@YEG5)TS|1a&~w=mVU z|8MFO#q}HDpYIdkUq4ok)`ydzw+8^4%tk{YuSndm7$U&UInHYV&ZQQam$$vYt~ag6 zzLIxEodymYi^?q)+D>k)A@k_^w?I^nNDs7i)f5E;+nVGykOPUD%T0{}-@zSF`leT# zygX9^qy#I|w}Z1*fjJz`-{QsL5EBF|PF|TvxUzBRiESeqk57PUj|c*RH>#<*SVQ7s zj1CRH*a0b2N)*l1`xh1uBNI-4VIBwjbB0`(UDvGflNewBkr@9MFCt{E?`ZiMNc|7d zaE#%%3ZRGi>=pM(ij;jOO6|I{!tlF*$sz&7b(1AZEY8)wIdi7zi8LP{U6~P^A;A25 zy`DQL8A3RwmB%9Thu@XF#zOC9A?@`Z{kYSprGt#h15yXUc+{B;8N9WZUE z0Mxa*>kmHzSwMQa_(`(gxV?XGeg7^{{+ImxTXY;hOWA#Y;Gt5>g!09@T_`}X-|@Nc zKxgRm3Dl*#v56@Sb}zf~YaPUCx^wT>vJF2)K>F?yzYS8uRt_;Kk+sD*Jq+F|CSg0p zBN+AXqCHdBbcB3E1r}Li7=qhFsSK1J1@guNIH;gKhJcgMhcZM}4L(18F$FmB6x9A< z9vC)vwM^%Bor9JzjhhH-P40qC-V{cWkB-T5g+PXXJVk6t%DGJj>Z z%kis;>#$*Zngg7J%`I*W%H1DzvzZaC7yQTb{f{xj*t7GC9oxFK5DZQMAlqH5# z!P}v)W@L|`fv~YTT(baKy9ByekL3Y}ArCE#uXef$_NO)5vHGN@lcUiNvA!;rsY#^* z?IyJ5$SVB_gD`@NZRbQJ%XfRL?AVtqW<;WXBIv7o>k5_eWh zeG+~d0PKu9jJTz6bEud%%pHSHU0ba(?iX({gF@y=K1y_tc(OBMYFH9(M)#-+o9kKc zbsnUN>LTdj<^*TtO4sqrm>7P|w!lfUbd$Gx>IY$=4bZciQ^iM< za5WoMjl?cYxEtShH0vuVo%6uRx#e{$XeHqys~u2v=0^y=2HQzEgR!1u<#$H~WXriU zXCl1ft#(`U=b%FvN=y5NAcr!??W0w%{o7y%sbHVWM74H9HqdvzMKb`o0 zFvjvf+<2cfJRbMY|KY}Uh=;V+cz?Zj!>+)sAiG@NBa4;~?(&TbIorug6i#4p4|hY< z8+!`lA)yrwrJ-33+sgpE3E5@#lznrsa7K z1`Ugnfj(Ct!^(TkCfj(;jTwxDIX@P$W`x_X$awe}~asj}+80IZB>@1G?#~rok6|T0JNV zL;~M9XtC2=9$R@S0+TY3UhBKFn+D!|Kz)yhxb|m_dUt)(uro)*RY^lRlClhu`p!9C zg}#zkRIn}`_@om=wDMUofVkW*eWM*}ZzLGk=tMbI8L4^c%F>*!b=JOIS%*7y(^R2)NF?m+YDfu*~JC>?M{v@`aMGc#45RPeSMe*H{DG zTDlyq8yCAo&cm1Tv*Z#7Zp9c^W?<>CnA{Ak1&YpVP8C8H$ptmo5C^9Ro#32SlsaSwv3JkywZkisE828Q2t;$Vp78IDdNmbroXNlSN=t zUF~Aa>55}gcAVZ(kofHZ33$94=|_)SG`E2o4*V1ryIM3{M1O)#G=uuKvmbT4AMgw6 z%`iy%4i08*FI|u~6aeLq&r34_x8ON!M?EwP$~D%z2!3DgV&Z>jQqd$x#f;gNnq_C= zZyGOVe}6hTI6dCq&D6&FVtdP+dd%bq=uvAlR7PNBW;;NoVpfEGw~Tgf%c>t2%foH# z=E_{LtfrC5=J>}7wzYbm()y>^mj0u0_&dS=yq9BVX#W|*8QRe)=o%S*`}gNR%43Tf zmiFtcNS{}peCO}XC~YxTrRToyaW-lmmX*@HQXhWKfX4fhi0KK&a>m*1eZSeZMz;px z6Dv|Y`B4Fn26~Q-N9}|Tz?1JE?Jyyh7TJ%@8QIUBi;w9&wnDAXAqkb#+2Tx>HZ@m4 z;5}oGC1U!-IeNroq1*4oC>AWwXyuJpqlQ>G3LWku5iah66Ujwj5|KAC<%&4CE1xu* zK2J`Ec7K=^g^X2iAm(}Fl?!^y{2_5Wika!^#z`-vUhq||SpFs!7QLR9eqDA$|Ld9; zvtf5}==1>$!Yhu}3=j;p?)?PncpWqJHcn=yvT?8IJ0|EHdq-GTfC{s*EPi%@U{c`l z;Vt7k2*gbdw6}Hf>HJT|ya;*44XPbow^47OW>~$nqXJRU^SV0$KO?gKjGRQHSMN(i z0V6f_8o;M7fYthR!Bc<`hN9p)R`k0Dfa_InhXFA1pv z9kr~t)0N+5<$VTGmNqS{JVo0gS4(D+iT{~akG(Wc*R zW8U?<(9i@F;^y;RS&=)`w`HDRdJL@#NMQl@LIM^QB#6hSkO3LWk_0o0$R%;MG^JrJ zS;qi|p;FgP_g$D#YPNn7em`i;HWs^uz|rs)Suzg zop;rWp$f8h!G&F=A5a&r@%}sYLtGC&{I2+mdj z2i#IShN(mK#z{dk#x;C)vVL1rSA+u4$hfHX}rmC`+kVI&nXiqmH#fa2M)L~ol8JGVa-)Y#svbt zs9{ztVO&EGQUX86VNO+G;$&KQ;sg8)MR=+)3c0=9mBnGpQwx`tA130ksOv!pJbLls z!nE?2jnQmTS^JVKv1bvt5S1jCfaIGQm7ib&LL{|Pxf*8sMxc)ABS6=8Vkg0 z=#|;yB6)(N@S%&;fd(czbC~=A4ZFK&?|5~IQ zGt3ZN(2|-v&6U3!ec}M-%R}+Pr{{|E;|n)G#H%&!TFV(fVb%5$P#bt@`0k|y`y{W^ zp{+vH-g7Q}vj<|-z}Ov6hs8>s^!N8Nkx`9(nzY5(;Ug*x$25VTwLIZ+Z)K#Nec{P8 zYXgVXW(#z0BF5p$kf7yhN?T-B(~JwXWtyj#4u1#%hEX|PbX27?Y))KI2Pd+xs&;lP z?&r!73OC*yu{2RhRNLDC%y>Pnv1~!tAuvSSP(CB`Bfyt6LI$FAm`Qm(e&Q)1$VBJb z#QtvtY>HTMy1>4J5OC7n(MUE7H$Hu3Tq1HIIwaVDl4qbExDbhP51_8s1a`%6EIZOZ zF)yrc-jbHScVT_ekkKU&5}4}0N=DodkkD2ET1v>^>A$^c3W*fK4u}jo^D-iC#U-~~ zXZwUbJ?P|tZVM~Y*AftO_C7HnK7Npp@3G|&;d9qOj5;GCXRRP4F!n#o$5yi@)Qo`j z2=lo5#O_@YF%q>BF^i<#>*s52lK0Bf_(XZ#_2fHj2zxkS`XZcoT!D*iote4}SObWD zb;)5E*cNs$Q0rA_l6QRCovq%%2-RTGybMkd9K2W+uRXbeRs+?lk3C8xs%Sh}5A2S}z2xB6i5Kq*GxdU#`Splk|J? z>XT#DvVNXPjY*~sgK?S2p2)O!m6VN>{d%SGRW!b^tZq~G53*wrljrQOipX?yR#-k= zF3tTm7|&l(c>!3`Y~$aO$I4+^yv^gTy2%!4yZqH=$f%w{J5^_Bk10QrbM02Be~J&F zS3u0}RDnOCylJ9kWUCY(iF&pp4^tSFv{Sgo%@uBj$q-Ff^M411#A>46_vod%+3Q$7 zaeiNYpE>C|b>RBNHjXMZY9b7}`LG>*O6Ag`+Aly_+SEa7yE3k=C4Q*r&^9GR4(p-o zdgxx)(}ix5UFO`I_B7Qa^Gg)c>1MceA)64JYzf4o@ZB>)%b^pd$E{8 zG+&N%7wJ3u=J3%`@mUY$aJR0aAxc8k%9%D+{(?Ioxwn->G1GM!g(@1<>$K?d(LOdE^3{Zdv_2tmllB zZkuiwJNVf^Z&H7@R(ZIqv0KTG#9EK>d)cW`encx;%UCyCCoY2G~DwY*OtUv((uyXu=sW1HZ$oW5`=0-J3YZSKM zH+po51Dp!y%apnSAvvKGO??TFD3wCsyLgWD>gbjm*>*qAqvA$ycW#ZN%1iD#UAW#( zFzx@WE4*jfq@RONHxpeiLc;AddSb4*=m9w+#?HdQ{pqw0ALmiT)}YR?7JAwcFG$x^ zk<@Xe%)=c@E;^cS#sTB-mH9|cZ;wIRfx@!N!lqubVp-F=^ zBll!00)`Mf$gAXCy~~wn(<~^1>j+@EJr|tBt~omQY+0&=$HKMQ6`Jl58DGY+?Q6uP z-Ucgp2zRxqU~vCJc73<#(&9P&DRdiPh2^kPzxg*dMTncN{+JrNI7f5-sS^_DqYn*@TYvFAHpU zNGYpnAo5>ig7twwzBWRz%YQ!&WvV4m=kimMcQZ%r%Wm_@h{0Zqh``AYq)msSD?@st zs$c2_V2g7@sk2_3XQ0?A7DCUF-IZ3vCWS6n>wGIyM#4mD?JNM-0cr{3hW>$B0aq>SCt67AD@1#$3hXY2F|X6`_#7@3?-X zY-SZj+z!*1H`-W%MrZ6W7!QIVa0cSIDNdCNsAAocS|A@ypDj&uAA2mdbDV$;UtxR+uuh=#7hY@0 ziBfum%9i?**)KOeSZt;9#pa6Oyu(^_mq^BB^w4m#+%hP!i7pn3ia?p^aagA-rvUAA z?X{EF2%4IWg>rg};?UlU&x5buO(VCApq!SDmGKA1ymg=GoHPUosOjwR_ilB(HmN=0pEPEwA=Ae?hfGX`lW=wu(N7Vdw@T z(-rqx_IrKyT|Z-9^z25o@` zT@je-c)ubjy2W30!VWy%?%VwR20QUimpkUVAADWx;S+IiI9P+1PTvC!= zoP3sZ(M=v6(LMr*<(e-v+P;|v zYw*?DA}W|oFAz{igwTFPY@o#bsU8_9YxaclXs29$_y8Vo%^N6kJ*OR#fZDc9acQGp zvdYn0#t(0;@tlLS!{Tzd0P#69q+#QO39oiECB=pg?;^Em-Nn&H7>8GuqYJ(_q@+_- zngcFy`I9yMX{L?RItN7lDZoz|`#@eB+Zh4GCGV5CShI_v+j650`3DYZC9T!IoP#nU zLQM3`V~bn5W!}jyj?IKU5A$n5;s8Asr2$4#C=xQ~R>HY!_MXKm;B^Qd^QHOci!;rb zaC_aMsvBgm?hg&pu5sT(*QXmY6+x$(qRBv@Jz7&Z-Z5J2-!N>h&oKXMnhd?2j>dD~bV!eyGDTf%!IuY!wus&+ZTd~lpX?IVBf zl5M>OC+P_wT}hunjUNb@NBe0|(esxlIG@1cdWrw^Mp*JZM~)$+F;X&tZN^OgW@#BezqV z(}LlO{_dlZ+I8iRLkq6mi^8g8$J)T-#S}CL$pV%0 zY7(kp3$7D$PXByWI#E!3WX?E=nOdTKKMClzTv9-sf{MqlhqvJ3OdLw`6trjmk%93nON9EUfMoSlf1_-L)_ zFjtP)mLC*zIF{#-^5wHq{6CbvW0WOn6t0=J&8oCnY1_7K+qP}nwrxAJ(spL0t;z1b zGjnIw?Oyl(h;`OECw@fi_!#?rpREL1K&-cI9?GOrWjL3AgweQ{4J&z|SIU;+wyvSu z7LxjYaP%r4VB4;hVil>bL}g6Di@-{Rs^q&|tD$%pDN4dh-OYOdI5PD@{`>QEXD4OF z1H9+5$Ghpv-skFYs|LJ=CbDHY{RZ>NZ=0eaQy@NdY7Cb;nFnwIgTg{fnhar{l(5S{=mnErd@-cU>a&aLy za-Q0xxKq`if`Bb3>84MZS@cULRH0rOSQs&Ze1S~5_o1EihQ$b`Z&g^UQ00fVxl)!* zcC}HI6|R7soT}k-3|+ICKp0YZSTvGd%!GYCp=m1~gM!F|r$ceK!GqQGh8q}=kHp!P zyw00_q~rv;t<_=I=+Q6Jpa}x~I)LGP(^ZW2C~0jucm782Lfj>{gl}N=Rxx6|9D9N- z4}$=W;#Ej*A}}3f84hmR{P=-yTdqlT((e9Axh>~-_L1yb5C@ooZ*i$(og z>zth1U&Evp4AHepQ3&q+-(|-EbbBDMAljRwpn{1-)|T+yOgIM1&bR$_c~4{C0aw@G zR_AgF4V(D-6Z6c)uM6nmlIJFWb?qsFu}!lKO^rYmMb8Eq>^H)ueQ{39&Qt_#bI1h- zyoB}*bD88{iH{`Hcoo4vNN@R`SBXectRPd?8Gh1S@A$q1Eu{B5A#VSQPQPZy-`%t` z%^W>7jAwJO^J<_*!BF+>TZG-a*L)mY0zefogSoBVri5`w;0M0_;1FajHLyhQ+rt%pv+LSf4!&%5A6LdasQxL)KZXG$O&rsS84Jkl#@ z$-!|q9u3R-l)^F7z)H0=@b8>DUOyAX<3;d~z7uAg!7|U_Wvjt^X;py-!+M6s$9c1= zhnrG;7nCg7o;NTdYUB#$Ccq~zelviZpEWS#IKy$Ic=VlLbZAd2pU*wwP8Er6&8-#B zAk}P6Yi6tUzt44tcqUJ)xW==W;rEco&udoNeELL~1a1_x5WGC5 zkXq+2_l~$S3+C44n~x4_4^lgYcRG>`DflCzrhz_dyw($TU7y^99# zQ5Wkkds}2|RC?gMI!s$RC0@3W8;E3_BSx}({#HHAzBo z@5I9YT$#HNd1Ne59fk@+*JQ4vWBSt2nSrn$Pql0D$x zH-cnMre^h>CrS7|{ym%g|DeYIe;Fo88$ClKdl}omeBu9aaEfB2pa$>|grBnYlf}>; z0rF;rQi6C-K_lVHq{{P2h!Z!uURD{0dGo3Td#<`L2VAEpK&&X&8cYPT^qHhvGGhgj z`^0kVM$<$9SN&3(Es4Ol=#F>t(|9#7Xq)V>NdR;!FNUc$+yhJ;H^yJkE0?)lu|XB| z0IOxi+IxrhujYxNbnxlO$HDDoj``*pbM^+fuS4vXrLn|%>6h2b2h@W;+b_MS&E{H^ zFWp;$r6mAqqG2x)cXBG=4*nM5@&`bkc6|qf`9CwF!ry27FEgU9jz-oFe?^1Vz{bi} z&%n{z#_?~GFRj2o-vz$^bF_CdaJ2acB2lI0@fSGgizmmQ0ZP#vChxLc&s6(*-f?1? zRXEd{EInV>a9EB~B3+QwuEXuO&(|CpfawI z<}e=J=#k@+CdL$5jqRYasMDHI!X`XgqE}SqTi9PaXUlQ$SZN3K`A0qdl8YST3VV_=mh?k6wF4qrvz0inFwKz$!5#Nt z3FklOVEBb*5tQSYr{CbiHZlrzBvgmn_4R<$`~A$5qo!p862;X z7R_G2RPZ9dE>#-zoL6zEI*h^^@|TIj zuu?Z5UwnIi;M%kXxJPg_Z%Vt7C*%zP6qlQXJ(V&MJ+ZIm+#_j+i9h?=tGeppQn(-j z7T>ei`o7yXHT-p}>?)!~BD2ZQ20ITM^o83A^h+1pSXJNH=u>|-Z3Fb7sD1jW&rjgI zOHB@q$?g@&0_Sec+VFsqhU(}3`1=4sl*ov7sa&{tAl4k~zLnx~@C-#b(E%F7)BYavI}7k!&cI?EL|<$ty@}JH9|-L-4(N zs)-*c(Rya`0vM_meXIy4e$S?iX4g?l4S>8gxikO(FFbv^N5J-m$kpV41$>vs9SV;s;`ItfAsbvkCjB5}H zJ>~M8oK1~)p>PDg?Q1*Gpbp^;FJzQ`d0Ayw+(6{uKCvu51ffYTm=UozjdX&jH~lj0 za}GhuXE=ttXe0Fh(oL;|3%;dyN2B^f73^_9<}Mem8GLLvo1v$Hy^df!6;E2~Ms_IV zmNi~T+Mnjlxvn!;JG5Ec*11e)xn=dj;1H(sXlQ~vd*28lC*H!Mvr+`h{6{t;3<`Nr zkMv+e(A^P(u&KZj(>|Sb{l1K8m4FQStqBT!O?j4axf|OK431{?dI|k^&Z$S+v7kvd z6$mmT4h{V@o7^x9#d<5A^+88r;I?XF+$7r@E?gs6nW9Tno+lbf5u#}8GYIyiB1P(r ztv43lHxAWlM;1d?|gOx@A0uEPo>kK3yWB1HwkI`}SK`Hpq26djQxOE1ZsTF6-;3gQJ zPW3$p{+Bf&9sJ5KHLIvDKArbXb=#@JsJXd2liCa^wKOAQIgt&EK;4NmH=;!W-Q`+;ae2ImEZ70#wvht&un z?zx0AJ?)N@Fm2F2;%#I@Ar^ni_s)FV2%pX6h(QpPN5^(^I=g;H`gx7!(wg`7mgFC$ zv#T}Kquwclp}N4JRL?Wz6STE&<57D!YhP%Gu&DAL;U)MOJZQV`Qcv zq>Wa9#1-%%0A1;Ld*KnN!|1nt7vRdtxE*&!eiZa!u(l|C6l*}y@>WzX?=I7I&UlYo ztIlv|xy+Ag&?b_J3#q*bOuy#g$r1BOj?|~`%$W}>>!yOe^ZaPhch7yAP*_RfeKccb zw1E+r(a){n3dib6vz;qt2?5cUk>=_-b1nS!PU_ae4-%_wBN__)Q@xei?%~~qd_b?w zSKNR6>JM4#vsSOsi%(szi9pJm;aM)EyMuC$T2nP)MS7YcTBfnFnXZ8UDfk*x%hnm> zLyza>1*XHuZuxmhu-v?Xm}N7B_p(J7h(C&mv%)0Y%CI#&KfIaJX#cw_L@L?Orm`cd zKTk)Q%9`l)u@IgJ!d4=SOexwx^E^|cxO*_JOM4E@r{9#CgP8WpL=NQaiZh(y*(0*N zs|EWXkfBikoj>=t<-704e=Xsp{?At|vU&y=49%m>EQrNEihKaK;ARbr zHgS`+?6+z%4pfZLZu^WfrEJyxk1d8V&VnO7|1t$jNFDFF+UIR4m|L#4nn$3TGdCaCq1;dTCQ8zzspFiiI2=*a}nDkDUI z)}!7pFxu+czo!*zID%+?n8dD7k`Zc~D(wETQrhB?)B|fF4VWXm9N9()2(n!tz;~4f ztz*Y(Q#}JC(MQ@cq^4#9!FMtIHCMV25MPN!Rzp>rqwse^QZDZ9>+JZT<`BK!?&{h8^iRs8K<;DQHUGBPaIXN z7638~8D=>)out`FMx1i7V}DJ|PINzs%jfehr;hAN6&XV%0=YTr8tVzg#?f$I8}l-V zu}Wxcjn1A-Q7BK{0%rjIhpb~IR-GN34DGlB(^B@_mG<10tT9YoTkWPu0nsQ}S4atp zUPR=z0)Vg6nXlyawDc)E=cxj2g=Smt&-hL-N2ir|WB8cdQ|xNDiNjHp?mt{ET<*Ax z24i*keH-wOb;34K=|WT@Wy$1rtepzlh5EckX)|o4EGvUHbp`Lhtb5a^nG8+aSorn9 z6S1Bq;FM!r_TPSds3=h^wMr@sp)P-;if+~A>Aqn4YYk}4l*Z`+`(}lHBV7{0} z!8S=#IXrR>;W!`KpY@_=dM#tb{;ZiI~=wl$5Bizaaf|Q3M z5X+k=@c62H(1{wkW@D(4uM`E_uaHx#!j!@{QWbwLZo#h)6yO8z=4Esord&C%ynR>O4k8s$ zp7XTh@M!nwI9=Alha1^4vkc^_S<(fFiT* z3tcx16HmzqhYQ0>jo%j2&O@O&apMK4x5TZ&$~~r)^6O4UEKz^4?{9iJ#P5ff8P{fo z9f7dkYyvUl+5L3+nEl}|t$)nES-BDhswt-p=Fcox1+o%WK9Gvjz;Vnk!zxBbV+FwdXo~T9lJNzZ`hMcrG5`XDY=ceU~b#gb8=FN*)t*Q*qoi? zXXgyfNPvEP*Vs+XyS-xa%SFWuH@23xlu6O6g>x3H@Iv3d$=g-%ixOM9bT`y`cUDww zj1CvA$bMfzWvgqv79{nzpQrBw^Q+ zd4lv%*M@mwYa3f8#6~#b4&_tLJG%#)bB5PE$q;0WJ5@*fu)&0^FCUIBXR5fNujh)3 zEtHtXPsc(%qHoJJ5%ulb1$yUg;fD1m(9y@3*^_jL5i{kwvj-jSH0^^9u5i5;d(;A& zbjD25vI)4oWQ_D8XIA!+l^%S^Dr-hl@bnk+4Cz28FmSU3DIDB{TDF!mCMZWEwtztP z5yQeE=w~S~ZSbmL{_d5<3VDP3;z`m;dwSw7HttyU5$XP%Y*rM>sw(V=np~+Dl!JHy z=CQ81Vp3M5!^5VDcv;2j2|J}jQ3$1$juiyQ6K%a3^P(3^VzG9{Q1u#5XU~)8*F(g| zF}TOmQ_cks7rUa%5|K}ZB*J-(R}gC$T(CVO`BK7&j1G_YEAP|7X7f4U)8~bsHDaaU znQX$#Z4$d@HTkbW*(H|>^M?>e9^JU-@@J3QFWak(fPxhf4LO%*~1b2@E&g?|?@EPZ( zP#Hq1;l&k=#Ho4>OE7&<4! zQ7y@xY|LXeH|uYokL%S4QV)@-9S@l+9{0z7KSItSoPBq%qiJk+j`U$AL}U%!1^iWcB(oauKLAMt0N;un@$0m;TT__CR=8J9FBAzM zpWM1G&pA<+deKq*Suf{BPFhi^ozc<)xES$;@|>xFWmmN03)pU!DqvU|={{~VyR0eG zYO3P?%Cvob;BcR=oKzOXd92%i_vPMm>EkW*@H|D?UGT3G6=xkrKWml@5W>h6RoKbT zS{Yk zt_vH~^Iv{&bS&4sTzew3prm8%i=ngld9=WQN_&YxUY2Lpr4isC-_qD z_D<8_S_%{^t|wb?>J@TidL~`c4Zyob3E>=vDuY-rU2j~dfB%F-NGo5xJOvaI4sAxE zryEHD9{yb|DaBG^1_-FIF$s}=fi7GNlO<*sZvb%;Pfn%#9?kt!zp49lA|bqq;!dL8 zP>Y!b5%lWP3H7b2CL}8pG9y;Z@zUI(@?tbq$mnBZk=`|iL}1D>F2ijlo##LSyU*V! z6J77t>{mD3mx#w7$ZZiRW zDL>I?%>xS8yeD4+ku-ZP&tV`;#iIBqiCh(hrurIZp8L6$6xnVPoqU#z z#8QL#h~8@BA*f=rBgG=fvPuQ2qO=b0sTkZZL)CN~{;gHgAf)sN&u1_P;t0I#3zU8Il}yyyk>+^I z$nce)W1>zn6SY-1`6xvN7?NMAPY;h+b-28zic)P zq%zUYIvER;Vzs9v8+Fjq)8|%2IWE(xCw(i&xApPy5d8wY5jjlt9tB@Ni^=SKrD}(- zmCg8RPRGXEjk0PHoalZI?CAy=+p@&V_?-L!3rVYcHAYSePPQ0p_y zO#x1^GCbm}Z5Zu-D+`?rm9xs?jo9XW`+?MacF_nr zmSn0Shck7|g8v)uT(Cw9%mbtZxx>{cn{4=EqLD95Euh0y>0_PtU1Ts}?6vspeTgOK$}ktkae~8!QSiYG>E=6T z1KtgVA&lg9i1WkYxjPWH3|)Iqxs-;lM3-*}b6Toi+Ua->7DSO}5J zK0O0mNZM??96_NL#WucyL(!9{nHOS#FX9(L^v{4@9&)aEN%ew8Vqu+Rs9ey|A7^(V z1M#j2*w#k~jly1!sf(&_j_Rpodd#*+PyvXOamGztAkzCHYRB7=Fq53I7Zj9$L^F=V z)tGLaZrszt$SrNUTyeI~s}i`;B?{3b;)|(nvXf6rqCx)3Q4r>4JD$8pnhc=$pj}Bn zNORN19oJTk^)+ZgykeL$Yk1HLvC4g%Lpq zP{c9yKoO}IGeCpD=Ie*nDPTkfQ4aQ=@uwlcmG7+3>o-m406|=}NNA6y_frL_`T5lm zt+y6PC9s_6)~{(iJe5{qij=7=&gpAHR&|how92Aoi?{J&7Sc8gWOm{GIzzTx2bStY z-ir38CNCU@o=}=eO3!Y!;@1+mla>G*4sEP`{V=ZtDcvR}7QJBI6y=wY!=5ked_&v% z&DlSgEiH70IU~?5g4G)y=B#hTM^rAqzKV`o7Ak zJu>>-z7{g8u84~zFKWg6(xI!y@)u?G-d7o69mc+AoeEmicn|KW1shRv=!In6Ov(JVoRR{l^BtmEU#_x@(FUslx#+6yu9Y>xl~ zJHHnENOII5?l?LFtW!pYwMAo2Vb3}Eq4cwz$+NsdOR5X!qlA4|={wo=f;^)_qudE5C zngI=5@d1ZT2!9*M-lZxn(f^`2mzq-!G^05((XDpz(kySMsS<9nY*$f^5ro+~xPo_3 zCEP2t{3EH-H72af_46z#%Kf0oLh=bbMQsVcuUyiNh$$ZQl=C7No$2lzRvnIs*A>fgge{vIkBu$ z0zn32)p)WVinl?Zoo)YYi-Wkxp9hA|5hD!c8gzwn z$H{V5L0pEX@>l|j1Vv@oTxl~1;^L^^$(J8CAO^-D$GsG7?c_i!*dEM%#}W?M8>UkI zAd*f@K+PFgbcYS}k}75%jeq>rCiAtpb9#s4*F%Ch2|EvVc}!-Z5SSgWU)tI6HWH?X ztyP-gl)oIxh1^VkY+3>|#Jm;tj;n!rNJpJeX(DrL>M-LEj7Te_awc5oOV~I#G=yO1 z^RIu`ND*?-td#ijW1@&d14iJ{R^M~l!8mHu9^3Z#vO2?5hkv((((p%Y)V*Kt&GIrB z+Bszb2d}xp?c{d%x_&_VqY(`ZYja>@WzkLf<2bJS)e@9PJ34+Rtf^%2h=$IRa9 z?>jbwBkx;QIhx6eZK;v}h4<_<^=wUrAcy9UfD_Mjv5$z21>!jSrP%*O52ApEk+(|~ zDU8Z{g^o?D$aT%wXC{+PlhC*>x zmbn{DK&{?s5$d?4;7BJoeW;XjVLp8*83o+^sL}mK_{jxvB4Sm21&4Sz*)erK=n#fp z3Llb)k~1+qxAwKdT#44ik@)4KTK!{Y$<&`wD=M?a=flEx>+>>stqnSh@yEv%oNiXm z=bsChfY48l?X@-aDBaI1pU;fxCo1B*2F)kLVa9><0EVjv*k6@2^3Es{LE@GgkUfgH z*UK8bM&;srEp`-gw!6`Xj*tZXSix+WJa!UFSd^2`>@dUfV3-^eU+VdA3}|&41X?$I zokfaWK2EY>xYC8>#)rlfYPxhJ9N*_OYvjWz5s0n_h!e`VZRI^PIApi<=`&^O3$iO*tUdk=h@k*S6#L^J zPHM;^j9zGk-|a5hw6A>_*UZuFQm9ZOz^LZY?l+OY3-^SG6g*vil0v|lW zmd6HlAooO1;#_{@C8wA-V&VOm-gl1a7CJy&XYWup4FqVR>p~~qt?Cyx!)qR~4!^8w zUm;C>2l+ZKH7=p5E$K4`ca}wN0z)^Etb%2HJcIeHb3kvqX@0qphQ2E{pWy1W5lAt_ z@TXJO;|Zk0e(>EC*dL*~bG4&`5W^dUrf$>=SlOKlR8PnDd?25^su= zf!?JeNQ<_=u2kH4J4I=x;D4kezR3g&DLl6vK^_}k2W3+MI!tdhwnxWN?F=7|ON}JW znA(9tC86GXGcLn829rI}yTg_al?Voasn63;|Coio%hdqd$H+{?bInq{n(*>Y#>h^RUYfFU=VH<`8keni}qA* zRFfogQc-bHr4$|~dp9m402a6q3&yhAR^`g=oAC!k1S;CJyh7k8=78uzrpFRZx(MVV zEZC?RWTfjgQ+MpHeSIchjJ=in1@Op)b`k_QuG$NkUFq! z&EzmIB<{v-8&r6hK01bkhy9QqJ$ae|tvt=ej+V!5O(>(dHdtB|?dlQu}!?3Q%HPmd0i+Qy_ zDYo7d(k?Rbq)p|w#-qO2oNKhZpijBahzHJII1u4VVB(I@M(%V=?bIbPw=TlPA9dAg z4hFpTdDJH_iW$)38ZqRO`PGX2U&YENI>ok&zmZULUZc_SJYSER?mr};L>$H8oSGQ7 zeRneCu;Z|5X#8`}F8zYiqCt&!lP+glF|Ckt~Jo-U&Z^3lcr8iI=iMD7D!eK~a2pDA7jG@*JHOPJ#t~qmC)VwI0 z+lVKYZEi=v#H3Kg_7IczE>g`8dW9BdE23kn?vT*aoi~5)G71}JlE-Qxw@cchCsJyM z{R-+t2%ok6%z*k7f8~n5y{~`*l&_8S@HWfGUrl&eSP48R+L~b4t&fyv#>5e`UPvPt zTUcT(iYIbYA?aNoAG)E};MclrDF6&Qdh zQoBqd&q&rVQDOs|I7L##UVtE~^$P}U44L2owt6cS9*Rb?#`OyDvggWIA*uuH{ZQ6A zt`1LpF0ubq3*6y_T?cg*QgvXd+?TG|c52)J&AS2PKQgyE`yI>dtOfxze*b5O0Nc3u z94euqV>EP`*QehQ)}aBXC8doA#fa4pmgtdnF@N2z{5(3702qtKYP?M7@ldg%ip|I> zPy5vz5wz41NKlAh4CB1z6eUB`N=Vg!N^R{Ze?GB<4AMeMTIqw_&Wdr0Ll2JhM@_2m zF#~@GAb$8-PUUE-BBfg?h(mQG_LFrf$f+_BhRU8I^hTZcPZ6aNs;X1Me`%1N0V$QmO;Cl1l*+*i|se-F19iH!0 zXKy*OXb%Yz{^rx7=MA}naEm()+Jd3DmkT$W8Ch90$y`nnS?Y&Un+e5em+2C+1f>cuv1p02{QU^7i3y;Gpi?oOxQ(jW`R&CNf0XVtJzkbODLfYpEuSHbLoViTBSc`4;>H^E+E@MhL{ zrvdDj!Q>Tcqfid0b3FiDH!J|%JR@^Qtaxwa(S3QW06%)ZKx1n(c;}hueYs7cKRkTB zwfT5{`?Nky_063Zbn$e0f9ikj?(J!asG&VarR(jBf12_HM8@fi_EpHt=;$b+x@HV*8c9{=4M?* zr*fmby{;uTY}1l$wL$hu^79W%TFu#xM;mH)JXZIm@^AEH+&%P2?a|l0Z3U?m69_O*bh!1;RD+DyZiz5ut46E?I7(*Kf{c9$9SK|bx zorrY;<=u2#t9oL3q=IKP>lj~Ko9VF=l^*$)AKaY<;ZF&-1R=ieX({Ln3JW+1yz}19 zw<=mSTR}FWKVE(gTH65K8?|O&`G*_|qzBZP`Rp?!+Wr3eDYMeen^I{vrDY+te)x>( zIl6F|Dx5`N{v_mnfh5P-Yd#tRLD;l0C|k~jz+Z*lpsBDslIt&H6#Rm6E{U0W%k4wO zi2lwn3WU|j)4Kn9%C7aUrXK>`dYBI5j=gg~iNG}xkcYrYTLT>g_KTvtf8B^*hIMPV{EIv!(w6r+5j zaA2U;x9~MI8yw6R0H5Brg~vC9<4X^W6KgQjQ(9gnyBgV zbzfv!G?gc$%h_({xb_?UMo%%<5LinZm})f09d$#Jfyeh0gZAJZDb;THJ7V<1@Xn+z z1NU92qL0v+NAM&f%f+q1S5%$_RPfhxBPo)cB5Yo)hf|iupdB4?n~;Ex==85|A4&-e zq&HHu&ol%XmT^lf687n>CU^YN%;ziqhthonG3#Z(sV&^ri#|Iw$7}hvlNimKl0*s(}GGDXAc~e=;@JNN)i#w+ou^jWs%_ps7%{j`~Depw`_J_XxZS&P3oVdc!t& zZ{W42?PR?$wPw3@c>T;FYrHxwEH1d{EIqrKGJ&b{FsCO{BJR8_V57cH(Ur+v;;h;4 zvgdK!q=c8e7N%Mo84G;xe(ls>aE7OZHJzWGsK?KI2^atjg85v64knkio z@ve_RJ{H~Z!R65|?c)NNe&~HH0NI@|jLVy4kfR(igzA{6!CPnE$~F_96pNij3oKtF zc4WBMGZ5!*HBO`pY=efVwmhv}nnokx+C|l3drk?zH3+Djb!&9Kg0d3p4k_Z`B=X87 zs)2=HKl2}gS)x-R^CGc}6~^Z@*T`$v$aBhzmuWDQ%F&^qRuHkqTO!`GrJaI2rhcN@ zu$_5}VWL;_pi6YfLnJqL|4hIo~*b_t#l4sl^R`pPcN0ubpHOe16w zf=#X$9ZYrY>Mx_W(KPX)e^@d#GhIOdB2FE1DfN0D+~@n6|3aDm z`(6DjHthc^{t$9CF#6lz@wW=ZDw@xtpBEwM>W%WKG$fc9BOUJt2p5Dq1+^>AJ_Z^~ z$HXLA@}AGtx5HyEGx%xC(*~*8dEvQ(;R1i>eGw$% zd~Q_g0@^sKX}nomsZEvFo0ShQuWxYM4ufY`kp3K}8E`)>HqiUgMzlAEHwAuZ{pSe% zuh6jbNF{WBhXwUNxnTdw{{0`J`3INJXRT-H=3w@Z@x?2S?;9KVEyH6UqQZvg<~i+5pHN=JQ5myoZEa)M22)*)Dd-@&4jsKL_{hPW-(aqLK(8$5S-t7NvS4B#Hs~9_pPOJ%y+%ux&K=mzZjGCJy?07v9h(E^w%#rQz4@AXQsVc3@Vux>To( zyfJ~(19pbF&-v-C*ceJ?3KkuPRTL915OVpiwVmF@2=Jz-rjF|C@E*ALX1whMG8O3V zxKO*a0M|`8X3`g$aew2j!Y`uZiD^_(9|mOM#&vbAGbDPX2;7KixvbA-4KihRRQU+_ zUzbq@odk#!I2hylebgE^FWNtm^p`31q3gb@9!xcB>pHR;!|v`G^vM#pFlZLEpcg$3NQfwc@7yK#Rh~ z@Xw2~W1;iA(MN5MR;e0wuIyjaHRrhe!Ht4i5TKnq?XgU0H@nDuN|+5- z2N6VK8{`9l{OgbRGdC2hLF;w%Re+OU2u*T>ScU3GjILFD^!efX9M509Ziv83X6?Jj z&4K^dfb?(e<#)&}2{_J3?sMT&Fg>vSkyPbwQhb>xIgx-vz1wTu$0xtrqi zoQd?~QTF?;O~iy_VgsYyUiBBh?JQgZUWDo$J*V45RHWrNbwzU>M_p0}H$*-0cqS}S z-~;f)<%_7_2VrkTZ`v5u(raez34+vxe`Rt)iCYyO)B+|Oei!n22*U}#Pv9DHtZQ(L zt5UY|*k?Mc=GuLX+@Gc=qdL8bpvm^!9qs{Qr&ej@m$N7m$r-=)5TfEfB9-`+ysqkTre^A@qA~>9^i12 zwQ;A?v)yI%5o1!b4HJC4?bCVXq>#AfSB_&0?9pE7zj92|uGs=K0Y6$M{ZrAK+#e%|Mj4!uLhrakW=ZBxX2zPnN05Ami_ za;UL;yVHNB#Z-fOmf?9}0Kj#8ebA_axfZ}nx!kM$D%T745TZWE#Z3^~7&I)T_e0fg zMJeeJ2P0bFJ}+r=L`B?ZDDZb*!5gua1j@MsaSgq5Y+$mEVY=Gmh4S6$!O{AC^E|Ca zKly=h##2yJ^BI6L1~z-<2>0{fi;!LhfoI_FLCE&oi}~*}-G4SLK6`sTx9|0bfyLhw zoL3C}UzJaUTyp#i*cEw?8$sC}&(U;zn}Y(ws2~Y0`>E}p#O)EFMP;QxzI@;ndp{$= zfw_O&`xh)-Tw9JaLau5p%wl+=uZ8ll5uG-!yrJY=Z&t z7h(=o${E}Dx5e*d*1QW-*aIDiKHeK-D~q|?6DnrF5jIb9i9QPl_!0 zUrEO}VukP>USwP2Kj$)&VWs6)teOh*U@KX%;>O3CxVqt8bhd!uBKSn}CHpM3Om`K( zm&+8ZVp7~=Y4u6m{Y}Oc%XK;3{2sga|8oYE|32g24375S^WI zEjsPrz4ZH6D;sNC{ckV=t&+9bU;S0c!9ef-u9!WAsr7AkyyoiJOAi_LL+*Qgq@%J6 zZ-lJ{>XYw1)o$0#C01X~7cCb&G_d%5ixvqdARc$-k&X1#3+ue%*upLI4{D)0icPV* z9{e+(JN}!xg!GflHLZ>j;;sX4`i}LG4~M?bU!922BgLdIUg_P?hPI9JR=#)pA{$if zM`uU7D~ua{Jm%e~K@Py!Qx$93R8O)eis^ zBl{VU5OF#`L1oBr5HXUS%b~s3nx|tMJvg2zX)wN;6=IV)qaXG6jG7I%`%`KBUEP9{ zkvz|M!Xe>oh*O~OpfS8v_*a5NR38CFOf5UMiJFT>!i}emK0`a@9$zL<3up!14 z$U>P3XM|Sg{-C44=JFpBpC8Qa(-No$AXySk^1INO?gmYoH2U zfR5hTZ*r>G)_X3$EW%tQEb^amwNZ4e@u+yX2i$%$Iee7~6tm3ni#oaB=ZsFJ`>Oc@ zHq-=$9Aq>l7ciaqv9KT1(` zxF}wmx%wVJPGoDDxX!^rqrY){Y21`Lq8Y5`p>uk$;`UZMZ3eql{OylF5gcw5A-&OS z>kVb}v^kkn6Kma>?ZvDSofEz?G^JuL8%E?w*ym<+RHLwxgMlwyP^o@M!?tdnYk8b1 zt`@SAUQ2;3oLHN(sA}C^AtZt=>FZ)!Y9!)&&qOg-DMSB);d-1jcH%5gHDz-OR29qu z@`#p87qU#dEgmgLGMYMWGL7=TBoOi0*Gy=WM6Dw-t=nvtY!|7{b?wnh)=DMf2-z=?wSXCw~5~w`rqu>?7+0{Vy zIc!_u>P%Rm&hLU*kY23B=^~)U|4iAHgX0*XZlm^#NW(4bmEV1dFi@~DsdvhZV;g1+ zhhObu?*3K?%_nSj#w^#+O^-BZ;=OP57u05P|BntvaP*iU^PO6?26td`l)3<7>rhto zT3UuEm2T-sSr#-+$Z)&E()Kt{)Vd2 z(mMRb;LJ}L&Z_5FUNVUW+Ln_m)UopbKBUdcLgAd@0royY((&{+*j12@nW4>Q*MXOc zqL3eoj5D5SkI;b8H=$ABD{P&P!a8=fMsmjmd`FuBxtQMdjt3{}mLmn`5+>K8y2HXx z98v*X-I7^Z&21jSbo(KfD^naY?jUh}-PXO1f|~t%qIJ#C%xF@y*w>+_e8Sq=jx}CN zAl^4hp)uVi3ci1=J$94>B)<)2OX8}b98S>X*O#;KqP=;y?@moG=jA6Z)Op~F0yix_ z0Pv8^$4~zkYwr}M*%ECFrfpl5th8-b+O}=mwr$(CjY?FdZQGfhRp*@B_w?<(&qMda z|9$J>e~5?`5p&Hk=NRM0+orVsVOOtY>H*i{WE#5>{ekmKa!TVCn=)Su`31mh7f${W zMS{AiF$Px-E}gfK#SXGd(w(?nvquBRr#HTfB;H31#Do0Z=8JW*+HxTN&cDqgLo_xf zR;`fxHs4ZGZ*M7+b>gh$TWOkr{KlCSN=Aogf|s$}{zDqSAtO4xx%MDFgKt6H164rB_>f3<^Xm!zQ(-28v{BF0)ODEeh=GQ)d0eqAOGp6k=~2qq z9)NatVrYrEag#c(BXzzV)8J3wJiq3a;FbFky&f!^Q0Ahw$pTH@8(j^CR9Hh`x}Qz0 z&P@;{stCr~!Pr6}>pv&?+APC~G5Pk>(s<`)8#}v{d14&~!0cU2Z1lylv{07Wb)?_j zXB#U*;3^DKohRzNjE)o3UgsfM8ZCrzDw|`14ScqmFEg5B`Eoi zCsReZy*BZAIWCm--r6Z1(w}C_&6HYnN~6W9oLbGYu+!0I_qLNJ@EsJCc$qrF3wEs< zIoOeJ9`(WEB%EMb5MfktUvgi*|Bb^fqcuMvzP^V?{*|`(|3e&>HL^GOV@LA8#o=>R zD~BDHKT3Rg2Jw7IJNiI`IHJ{wZ0N=-oKRzutBGUeB7ifP%O+!@KZ)PZwZ?8JNjn{j zbIQ|T1k|}-&l)P4!Xl<>Tm@oxr5ee&8kj|{RftUX;*ewXH5jwfSnM*xq#DOC94epJ z;wuIxB(WKTUj`W=_rVzJB)Euuk5con&C{k+11DxUAqbtK?IyQ( z`+$5*N4X=UXKNkI9BViNw%4b&Om-a}CxYnttQ6V0=i#8MnBg8df2l|SY`lA^QsKTm zdAszinb&|moJP?b1QI*eKb!mz6C$T1-%XZ?s!Fdt2zDqk+b9Y1iGj z=6X})5Yq$GeT+6hmW;D_J^OhbOv5r}&uBYw1^ldU-;Y_yvqY2i7%wk_0sUE-d3r=Z z4uY`+{9Sl>1;)WaT(vA0cSAWkBWsuU>RRWU*gL-`5Lk};wC2fDgB3%c^GL=MW8cmk zF-;4O`gcc5mvD+o_k1BhTws?N!ZXCcb9Qh2QgR%0#A1WN;%J)~L?^a(GTBa=Kx4aC zNcxo2r2ygKAU+|Cn$X{oVh3ZXvmf3#ENdv^b;5)wjiApc)nR2jsB!$a6nR%lmKq2O z7~&`M;N+xFp^DU=(aEQR1rRYeaEzlG%g;K~l=?&rm*m|Vh0u)B{o?PHv8oi2RBrAe z9=XfU_N-kEaHMtZsGuYJzi}VkaC4Bxko0+obw3A&;|+Bu6(x~8_)~Cw8bsfg870Kq z=Il_f#B%}V6`chj27x}MKmFYHb5r!_L!gVTwTzJs51-Cl24t@9*7dCf;);S5Y?O!? z9tRbCNVdiLYDJ|eG{lC&%P1c~pfFvq`LNZZ!Sg%yC8SQpLR*Q-x-7?BrfPsHw zy%K7T$!$ODr5U$~#@idnwIfQp98vy*QYy0HsyPL4iWpn~8+o|l*)~9WVRW3zQtsv6 zu0~bcl{=7N?)jO$JnH80Ax;|~)Fx|A_Knf#ZHblsEB*=hH8o?0z4P} z&x!tPD=DTn&|JnlBI)yj1VbGmdc`{&_~5|u1A(B-8@n6w<2E*TCHwKM%Cc9pE^m1q z5>Lhe>M=zS%vo*|i5n^`Hx050nJk)3jtN*#2SDsLHjVwpZ0IKTqR-sP<_Z|CUlvy_ zOer?U&#cC`RL2atpt)5)?|kS(cB#cD!ZCHRGEnXu#vQXZ3%Or# zSC=rJ`#v*}dZhH$$w~owIJS%kkHw`HJC;wU{~{7e9#G^TU*>7 zh}6xwEPRxP?1BB2{0!akYH6U5f>MKt9b16~JD?zU*C7PCoh5`QX(Kq)x(n={I05(J zfsY$^#OW+WUI_g+IqzZ2*~W2xdmgQO zNvYC2hm>;KIJjTvUHTxEw3||0hI_=j*B}Pv_#S17zf!yeUlp=!|Ak?iA-3{4B}H?~ z57G;vJ_(xJ_^IDn>aeT=A94pl`4@lDcpazC8MgG+p&6ymJ*-YH($xX;56SEog$;z@dHe%(1yn!+OIkrGGWzR+1P z2&9iHC=35FZq=TY4u^SAi1H!oJ9K?KY?kO(&eRbEqcGgUkpwm5+ zANwO4bcGW`MzS!;wkWC&6$d}}-BMP=aahEQZg4UR4N2o-X~pszI-x7fl8kPCQuiZw z3DW{t-z;MLG6{t?n5?+caTWMWZFhCwO7MbQEe@J;vjFJ*f2N!l!8U(q2cvz@-Se~ z&i(nf4kdgjKpss>13b*LXC`dLgos_rL@LTK%ZrPs5$PVT-T)b7mTM*{DF|0Sv*d#- zrdU+jIK2mu*jbdefm>pJB~n)y@KFGqO=SUqm}!UOD{1=WZaj^c$7^^^Eq06}0KeUz zg|8m-;L{5!3**wuSJKP&PI)TO zzOSZr_5ZqGrLw5$TZ&g*3)5LE%^32n7I^DS1_W4x0x*tP?!Y|l>q$T^?)m(_{^LN} zux5FnFOFSF;LKEcO8))+o46hb#bVxQx=Fz@qL_{zDC{d^yK1s0ekaopK%;^JHRP@R zsTbcJla=H2_FZ_}g3YdNGds_UN&V;ajmCu;66{eTi; zwM&oWPK|C{a|#8pU50{Hfq(a%SVz<#k8&suRVtyFn6%@sf~FYa8WTKRX=~7tCo)r) zg2teU$wXjIx`VU30_1~@P~H4;JS&!<&bCEKw-QDQX@O?|x?@POh0$(0K;Nm04t`?8 z6~6MRQi?=4B;sKZ5S8A(+(JU z+Ht$j?}4$LcjTmD0CvHbT||ZtmY%@eY_3C7QA3Y5m-lC~4p({-Yx6qrRkby=}TThaVKpbmN5@Ax zf6#KZ`5&rWUw~#h(!X8P|76K%t7q@dIX_Y&!OZMkV>nW{%M`x&;~GLBom}~p--0w{t*6CXIHMA{WSI9sP_+j67|du zgQorJd7=jWM8d1Qpp^C%4~BM&Rv{knUJS=@LJ-Brm|wM@Fm*xn&yb z@gBT#Edt^I@V|J`jkI2Af1SkygisX!%;Zm@@So%4|MUX>&gPH5*xwoLYgyT>{k06D zrw=#wVs8GyTWscgx1$+QOj|k+1iqFR>tduarQVU$7#3ym`5Gq}juS5!wlHp8Lq-ry z1sgJ8vO(eIqEfkmnnGfkF|luD*QM6%bX`5zpf%TMbo(3tzIboF>Ubq_-K~1jVczgo zZd%h#;hYoVqU~a&;J6yxc3*7HdBCtg0C8>a(?ywa>HJ0LT_xkviS~lyN#5* zMJu>>US4YPqvm6VAPEbf=(728TwUW{!!27tv!=RP>id04#`(#***bGe**9%vskW2y zN23z}BfhbPF8y1uTz!R*PHGwlv5~bpGF*c&xjW%`loo-Nq)=~o=U0dAYg@U+Au#2P ze5-Ab$o-#me6}lz3@djk+r01qy1x`JBdPFn8BRQX1Z;fPv6DC&JW2= zmf_|nEU$2?hh$P_Z{#d9GkBAvC@&yTn@Yc_J{D7?66E>+5@^q*fgPWUK`q}osxEJS zl#N2ao)01wMRYe055=k9w9I@}CYqW}ajUbvIgsDvP0p0YNs_a|>yRf8yoW(s97-68 z(GmbjEiia8V}Ra3k_qcDqkPHI_v&7^9?uV6RHE1k4>a=QO{vidw^%h-YR22@s9y*a z2`xT*keVWRljVoO_rclFR6ftoAxxBrB6GkbEQeMFncRZ5Aq5S~-h>0&fIExbhof$7 zj8M?$_e`SSrj>BY8N~yZg>}`je2|ZNgL%IKL|#H7!vC%``8lW#`cgH9K#iEh>=0{L z$Ln&qWDKum_pBsW!#dpk17f}qzxw;O7?eYn&fFUv0qs=@9dAZ!H12!bGYnm7L>bz} zy+KHqY>>V+0(uBl2Bh){->CrPV5&`og&u^2+$BnevmJ57>Ngb(ZvX!NB6OM=I%)2L3~*>ds4X$%Ljncjpb@esBlwhRntyS|@z1bw ze@VWE40*u5C+u(Lng?OOwW9-6#gOG0ENLy)Iq_bzHR6|BJ2mwpew3>SYxM7y@E}!x ztDA0qJ06>fSq~euqv?OxdkeTw%42s32pqCtej2{`?}0+eh}|7*2xJ z=kh8I?U|n<6Y}t#arYZNr1vW<9#XZEhkMtlH98H%yEL#O{*MMiqe*#`VH2SJU85p1 zF~ty`S`~cin(&9!o8nuHfVtc)!38p~1u@){XmN=oG7OMTLOw~^tXAk)7Jmb;t+6uh z5gZ0>B&0%_PzYnVX8+u#nmoG+mo-xNre*IZ=MI`5=Eat=V3#@&J}66mpJinQTyElQHQ30J}QNwl;4QpVkJ zJ4mifti4=5BKWYy)uqw|>`Ni~lsA}}SJzi}2DBx}xn!ZNB%OgLgH>^BQ2F^?fC!Vshq6kqdVP<>Hd=O6pNRSJy3=gH>^ztDDFsmb}!L7@7mQol3M+5)| zVJHLw-isM4t_FZRAb?axUF^#QED-Hg2w-^4Bv`=01gAsl{6kFm4f4RAV)PnW%sENy zW6`d3w?Cp=B?3pV`ow)^3(IWy?Pmf^978$C1vEtol-bM!dOp^zSrJaUhY*O=-7F;- zf}5OLC>CXvYEYj0Jp?7gB7-rVy((m?pQbug?D%qt&ZEzQm`aHvpb4jTJ5azPLjjHxo2 z@mRFp$+FCr1nA_=Vg##6i8oBqB3#Qm=2AXgxMT3cjGu{ zx@Zg-Z)8<@4qb?5QYZs=&m}8SVJMPLS^}(ezakz~!O3}r0YkO1NMwB8m)#(fI&E~X zSB<_0g!|wcp1o=UODG<((C8)+BZ*`|I)ODBEgpxrF8*8vNK9y>HHYpW!P30)U4fC+u~@e@gEPKP6;(Pl;IT5u{{ zF$XZO1H5F1Z6LAe#diXtV2+nK^!~V1KmM+$ae5PAo4}Boy23p@r*3; zOQTy`rSAgEoe)hqz0cjii~3@uq(*tNHNWb#sxj@&QyZ!l%Q~q+Tz=_MUCs48#0*`V zjy}aRmh;@Z_$@j-7-&MrH@udfKvG-JS0wESf_vWfr)M1;4Qz8)*?L3I<)KCih)DnZ zbVQWP9|u*T{1((ON7J$?%uRt2Cmoc>hm==S@-#fv+{X2McD*~3eL_z|ycdKWZ-9VZ znUINYdlo_7<#~XcL=IekZ`HWp9W&d5!}p#nL@>hlb~-#iy2ii;DqN^s!kb+OniFXE znre^+>it6Dd3Um?U}|Hr-6fy*%gCik>vXky5QMs`%zKyTILTiXobOadZkG^?i_eYN z83}fD7H=SVqKcd^R^~MnXBWi+*iMI>B{V}@z)z_^Og%=$G+duP7M94F58OHWr=r8Gpvug+R~AJ6k2VJG@hR+5Z?QTSWP2inYUst(b_7E*JQrNs*zxIT2hz8f&>z6amcZQW64K9*&=^My4$0Lh{UrQcbPrUm znV^2o1VqFEcfP)TRP@_m`OaJ#pa+RXlXk+OYYa_7lsAs#!FMQbOiW|oidV+YoYMC? zEwy0|XI)WzAjMOLX8qCgWZ&|lWz8_GJ|QvPnm5&cNH*7Pga0~fYrhR+X8K9TUPSLo zf?2DH#k0nS=bFRSpw5swr9j6XGf)Y5_?@ZWI9=b%Gy$mORg;!HX+AQDmS?nkypJZk z>H(wPrR3uWwQJ%W6EeXGQTQme+ehJh>yY_I}{LMy2` zBc@)t#y>;=F&fC0+QSIPcr_C#34A3jDF}hE*XFC|q;y)P1$2oGS z8YatbfW9K+ZT&Do6Chclyu7qRB7Zh?8f!y^U*?VB0N?5&>Bumd3SYw(gY~ zAQP>yy=&xSHV~_CiCy`<+~0v{ext3wbS4+3z`sx@`g=`KV+@j-NKHl*iV=^%ZA zU#pso1USrqX$R2U8DKU2>3pSTKilS{nc>QOBt(Q6WRR<4wbk=r11p1fE!@Dlqu2B& zo!~*BC3CqDgRos)DXoua^%_~^-fmDOoM`DMUQ|y7@9A{k7&ZrN)mru%+E=lEN|6fvc8EP$sO@>88>r2RP&Zz_OP)?t_*&DiRp zK&)6AtQidihl2H^0)})>Ff-X9LrI_9f)De%qoP80lOYTzraoI=Va9X%2U%NKB$eEf1}xRZ0gaOTC1%+tgr|`8Xan4 zZ!T-gr*IVHP;sP6ZrG14jtOu3vMy`}7hlJMV)^~m;-|Sk37Eu>j4kBYy;)|B>TY)H8ATzb)RqWT*aE zymuc`2<64{UqKh1n*FL1oVZZG;;NChBxa`*+4Pb=uQ&d27_lew;(g}34jBa|BjTlZ zi30EXGlhnruDH3}5}ymwb0_qBxYG%ypog$Zs7xJvy0*V6ukDTtT-vr0GTByWa11>g z>?SGzNd33)U`){@Eer=M8`gy93j#y%dA@3oSmN}^;;N?u%NDwd&qbSyaGt%yCR`m-DVpr zOg(Y0ek1QHk*WM%7I%jCZWd>hU!K%_m4J(Z8t$FwWYD7gtpZJO6->?VWpBj|x(y#g zrj1FrzR#Z<$*SV zr=rn-g3~XRN(Pk$b|i}6a=QF8`PQ_!wM?lubKEOY^3JhR@jX9AYf0zj1N7%YfmR8EV_JK)S{KPP|l9+&d3qGrRaLU@t| z)f8qWYxIgn)YEN|+RbXJcEs#mx#e3M7Q5)R#I~08 z(bmzVimaM0Png=0+PNHTFaN}q0qUk6*))xJfq=LdFW%T8h2s%G$@+*Gcy83wuHXD~ z^NoggV?upxErfq9-QA^Kv$0v6S`o?Es}W@Rjgae| z8^~AFkT*;qHk`c5E{R^i&%PNnjOg1PP|(6&4gN+Sl6K~d@!>78TN<&+*qh^rxig0b zbvi>%(rBaAc-l{C;8K`Mpz(LY4$Uix@Ym`r;FmKDl~QOufG#OiYdBOQsDTV;{q$xa zyU1Xd8FDRYOW1q)Uult@mbphoKuJG6q2^L7`fNgZvTOZ+hK-$n93!Xs!-L4nkBS)A zkIE^Q^*LbB>Q?$>${+TMYrrN%QA%r4Pz7w8=8=lcT&-8DCe0hsky9_2HIfzUCmoyr zmWJU{YKlokIb4Ss^~p}%AY^AK8*Xh?Jc~FWTFF;0NPIz!G*1CiB1}Cm+eyZ}w^%@_ z(S_eY!CcP;NT*NS*WHo|Ws~cwrwsL1^DaI%LhdZo79k^btJYcbJvUk@ymn!E$c@5n zpO$3J6l7z!%k4pgYwh5)MORl9q+2R_7kg;0rvD&^Nb)luO}&GxbYy6+wIV{V!Rd|bF& zyQ@E}?vQo?l?1f7y}8^)A}OF$7`YxxZWA43&ZCqa+MdJ@E0_}{bKrIV!tcQ$DDZI9 z_`de%<-dyIe)}Ky=ijTZN?FU|5A$HAruAOXPHe}?z^Jw|py@0x)@in`r7o9PoGO2m zKlxX5+~)?R)^ajZ$GRXWb@atA_CxKljfVYXD>fAOgm)v(w4`vWHjf>3baxJn(Dm-w z;)w!HhN9MKYbYhGVi=CgiXapTRp=pNDiTVGr{O!a4_E-*njw5+wl_NUQdsil-FaIb z@&F&o57&CiAPy%jwEC4Y(^V5~#Z%^AWPqCaKyeU z#&Rg}jG+0Mddn75%Pd+4k^>Aj&!*Pjt8y;xu;1~u#ppyEyTXrm+F%koz4o>zcL>J+p68nno&a=6PVaX zVHIBdqO+px$94rrc9j@4QIGl1#D zJ7fv;Bw^DVuV6xjp@0N{rra=1G;;hkWmwHrR!fYNR-)dWG<{0*MT4{`C9}5+-S3N-4dXUt2wdzFQ1)BTr60=1i&C@l}uT5K4)Cv`FhZZ80@x zST6TBqp2EE@sv}gz`K$Xw5fTj3gP23CLRL~x=bUe?&?6zZ9`LS<)6i}Z-gvG1G3&O z0s&N~0wq8LG{pq9-yB^_N(Lu=WeUREt}na$KcU?*j%t$ zCslX^5mB;;yzb=Q)9gUs8fzsfbtg!0uxvMLSamUOVaM$Fwc9W^t%ss{I)eH3de?@t zK{Bat6Q&;25X~yDx&LiStL5IcID_Ka>f2!f;n4|t^EO=5iJ9l^F=EilZIs=^!C9CE z4`2I^btVIMTpzf&%30O>-Z7*VZwOq#z!v16W0q9VB7+9}Rkwutw+~>de?4aZX8;KL zVjO;z0{=1&P5F%^G+VwHhaTidMO6YZ1{_)e%fyq0RYgymQ8ZR+;cO+_T_ca$d|d!oE!yr#|aMY@o-x2f!oTaEJI^EL;P{0c0xyhNkX(KvElfFkV=oCIMmf+5oU33Yt zgefM7t@!+6DNZ0oc=X;IQ{&by>9k(<*%?MMwcNumMz!H@S9q}ne#tnUjamM?P{>3j zH8Wq!5b>{Hw*ORL{Nh;H+WaZ;3jXKAf7BOMt^PFKe6@7iU55yW!06$J6s;mOZlGB% zhjaXP5y{7;W+;-2pVvL|xx9WNlDE;5MHylNu0y?XeOz02C`m9+=B@<}5y$&U=1es& zQVTAvqUKat5j-)`&;V3p2<=mcEYZM1EPC~am`YU$?g;1 zWoh?F(U)f8mK86(|A-jI;j-1TMH#7D8@!v=n$Re|L-|6RP_ zQ&oQB%~ZO_(Owl6&|x@H6Lj#+^5uS=>`Xb31wy@MPN$~4%ScAYAv{4U{B$(&9KXF zQR`QK_X&tOB5HP=G+GSebYB_|UhhQkhyw=BP-PHL{hcrueN|9BxA>4mX+FmdLCIi? zkXH?=N53>(#ndHO5lCH zAHS1mHt3_mNi$GGQS+aZcuCx;13@Q@ z;*UyYhgoCEkupw`4!A$;Iupt`CIX4ai+M#v(;tkd-F6Yf zJMBEhV?+Z$4`AJ4CJ_$O@GgQFkL11hI!lm=eRmRDZX_M(ziWJ%(vU;q483}BHl@+i ziS>}KBI zkUkjiu%au<{&HK9g;D$_Fa16?9$m58{PFmrx+|-sOYk!?j5j*y=0&}evQFz{D`=h}zomK20 zjp0!zhGrxrXwd%JLVV!3B^ zO7Zpxb~QIu^!4*qo#!OfGfduDNwVf#UwnC@R%gt6=QAqkEfnDS)&?aq<4gSwB|3j! z)RV9N7)Plp1s!xFlrvvleVg}q>fwE6b*`|yv9!Ev`=9CseK=ND zCzMa)8Sdb{dyj*S+}!1wthLw8#j?UY62@Bz2XU&N;QB_hDw=B zX4G0q&-$bCYu!M<2QhISlF2+qV5GEdB)g3qc8<|Y6u20LLd}3lcpHR zQc<;2p$#f70^FaU{yO>vs;0mIUJUB~z7*dl5#*wk+$^x_2Op?><%>7iG6cE!>fLXu zOa&kJ#3KSjdk&Dz^bkN1Y30U~m&>NLkXS^`j&Kix@0_AkrpA1f;_6nUQt)wAuY4MM z;%`5MN^&k^Gn`!cof4sa$c;qcdzrBsAaFqjzLTj8;V9_^5+e zk~&8h&W9P~mk%Y=U}-gh78*K2gcQv~2IT}Lg^-Onnb6K6lKQV9eYIOd<>)mGwMAA2 z{X_&^OVe$#sStPa2GDYd244ZI!7`Z=l$9i*3Uq2nPK)naH6l3ISZ1?v0GgUzkY!26 zE#!5NIim>&d|Xf{@`|ydj*x{FNGn8nC$2v@=EDgTP$^g{8XX86-UA^Dm%to718d!B z9L7pd2izq{+HF>8m^m-FPlR#m;6@9-ZOxi1TnER{3Cf~et=)Fg&Bn;pyvjc*jm>r7 zbz&1QazxIDIe7SO$ElXL23CysLVz`~gJu%hPlK5_99h|9<5Ft~^iwx=*EY#Wojp)ya+9D`v)%0V)|smY9y7jN)%%?v+*FbuzL}! zrlm?bwF#$rWF@Vwle|ZBRo`4?wv9`>DcqPd{uV=aNW07UOkv5zxtrMoq?$mLOYoNuy2;$#*?JSA~l1lDK!Sr zzJ7Gt6zl+?<@)gT4@|tn3>@Ogz7=oa0NY#J-~I~AA!563T_+yrYYuN2M#RB!9;G$C z?e9-O55l7*oPaU5W2bR4*Rb+6Os;WEGl*nWDR}%fD87&RgH%~XU7;BnVd=3V8S?$$jbK%uT{&~xEyGV$Xig0uUE2&#?9_`qU~{QP?ouvmv* zw43@^Ty*T`I!3c|8v##()zE0Tiokqy^N$ctsBha?3X|gHqOeawmcH-)6kbD*=+ms7 z_}C0@9|;Nm3hW9{GZNnOb2z$*t{Q!A?V@k5Uexx18=Yg?YTdb|h~zoU-+7E`7L*Zl z+#xcKQHu9AVW%qwp~w6xV9FNu8L=BSh;HU28lS=Hy%>)pLKZxEuzV!bTZWIP?j3WR zXU9xEUpk1g9z~I*c4_U9e{hzTNZMeJsm$H;ufAQS-c^a#Z@&EEA+CV~LkiTf8xB{i zU&5A-0Ar0PApm=+%o`BEwLJHWwOmflWR zkv6RMMJ&Vb7ksRzCsx)c#Td+tO-L?ulW0HO@{_El@I;`BHyB~DaDn9^!zv)yF+5RW z;ksZ$Zy}@f{Fb2f7K&`iyT$9qR@!mVBV!Sg+&0N1HXUJND`DkBmhPN~?1zuP+6E=K zSD*l2h-&x05(NKAo9K(}XKnpAN&NB~*0Xl}n6ztoQLywXT%U|0Aj>0p^ZddU*P_!ObxT@TG-ZBBaVurr)Z^e~TYSJ7o%cb^3 zt%l`vsS&Cq9m{GfYD+2}3dj34-kBV;=Yr|^(cm-lA>p4(^*FkIakqv_9bF|i33g@G z;|w;mHz`S^Pzf(rgji~>KNA&nVt|@27wUzrh@{IN?aal+}#XgN7vp>xuD^)J@j8GQOn(70CHN}DPpF)V|;e_NB+8V-g_9Af+ zlaW&I9V(?#d&PeR2> zkscPKU>Bvv>Nz2NXet%?m7f{v+hDicAD%m<5nfyTbD#0B_Qbm^Z!lm9vn3T9so*+vpZZhy~%m%@bnS0S+Tkdlc#iEs}*HJgq8 ztDu8#tANO5cecX@gIoL=jk3!&4BItWuqa-U zNFZP+MoyiJm;kwmXG;Z5N!|d>G7`%pD^QL2PMacRq$^%(q3!uw)%cyFT%eD=$>+^^ z`S0EF7%ARInhJy^(?7o^?hseZh752s%>dyq_iH&1)rkLh98uJrduQj-`ZLQGGV1% zw`KRPZaSJ#-Rl<%2dCA_G}>W4N1u(}1lOtHO*Q(RnjxW*ZXt&vpSv-#xk6KWsKH!^ zF>+`k2E1hu#U7k#y#K=P)7Vw`>R$-YhFnRn`mw?~fPwpoqdH-D03wzpQ0UCLh<`kwF?Ijk%qD}RDvj(*7`LM;uUx`$l|V0Rwlyi5b|Kq! z!2x_Uo4FU~^7i2EYG#}_`KEdxhq&XRt}2Rs3@_g1Pp%r@BmwsLbqtLDwU+x&DC_@Y zRsR<~;g7o?@{jn>LyGbAtU9h{W{d}COt48Tx)1~IUOk68?9|;A`H73Vg{pIFOi#wn z3GNB*WhLb$7o+*Gc`#IxF|(rs!#65>^Xu$J{qpw)O+M~PjR!AoFco3%1XEh!{!!_H&VkKf4Cz&StJtl1BkM%` z2}ZXI;Pl9$@G|PlSS5ze*omJZT;jVydQ4QL}yc&z~ zJe7>GC6`2bIPNx%J)O=ZhA6W{-`Bq$CR8HpgwwQ0oyN;K%A6dIZI&lgM)0-IK8<3y zk@u+#^ z?OgWpYJGJ4EO}2E5$#OidLP{zq(6(iA*gvKmNUU@Z$Cv!eay;sou1nGcXD9j=rMN9bV6OwFiNG|nC8kaCHkX}i<^~cS z!>6%pmy7ZHjVwH#-a5|$L_B6{=PZEr0FI6p&3Yby1j%=rZ=h`xXu?WHB@K$3JGiR) zbtsl%wGO~akvjKo%45rkE;jTU+=9wtWyi6GtqzB9;nIC$dMm#Eh&Vq%VJK3pGOvWb z2b(iVonE)?YwqpNJfxy3j2s?635>ds^N51ah!i09Xc_J{G6;UU!W|IJ9-47HmyypQ zDh|K`?;+?0kl)0DcpE9OXf~*_jF-PZ=Xc-K0;UohF-hDuykv6kd_U;Ds*pS-X>q86 zcRikdDjFV+Dz4;14`Ew_%?NI2#M@Z@?fW@25CAD_9V;1OPmZEq%Kmwox0678A==!Q z_B_~!VOSG`^44+I1wX7mpi39ORe_gjX?V7R*nk19QCOCET?MHakGO9h$uwjUQ6Jr2 z*JjoSacMwLEiIik9WkLOH&`=6wO`plKQa7l&%(Hig75D+L;bwwFihwU_UkkjZxkl> z8)m!Q?r%sb$PmKWD+-h3Zn)0SI0DAsvgkaEfNc0Ezt%B2AU8D8mIFb>cVFbhU}GXu zI(f?gpmbQuPomEMzkjuZ+c_4$}co^)d~==WUHEveXUVPY4NZ#fO3YdH2T+iZ`YlJP)`W2y?+)Jih&uXQVdk-G~tB7|C+uF=+2$yBN! znz4m+OPr$gZ2>ie5l?4{7o@tDWvjG~YXTQU&jrz!kjaJsI}oYicN#8FZ3{kJ z#y+Y5GDB^soG6VG?uw~gCF2QH2{OGpJ+7Zbym}%s;u5A>(&t~Dg}UoyO})bk>LM_! zT)j!$R+K73Fj0t1Soh8km+F`t2E(SKq&u@oFeeN6EeUHUO0Yx`f_1AW$u?Mz^Cc;* z2O&|Yo|z(LL{fB>YKrNO)eFmhQcZY|@P`R`IL2w?UjMc?AWl`;ebYnG_04#Z2>bsc?H!{t z(U!H**tTtUY}>YNn;qM>ZQJa0&@nqs$LiR*>E7#pd!Kc_)%%Wdf4pM^@1Lq!c&cX2 zdZYzNh5JIgu&o_}F29j7cNs|)@zO`e62+#p_tq4`gA3ZFskiyX^MAhe_{vWhN3yYt zKy`y1M_?VEZ<{ZWwuPLdl~0aHBt(P>-IA<6&5cPWWI)+R0)EOMXMPJj;RfMuV3BOZ zpg1El`|QZUC-Vq=$G>0|HqDEbZ8a-{BsMKT&N8yIfR0&?j1d+e)B=ALU%Ol4JG35Z z#gs_IEW`k_Aoe|R3$@Lv%lf+SL@=qA#{US9qV-w>F0>Vh64%tjlGIrAU@y?F_ZFYu z_a>ZgB_!qy8y>$to6GIJ*L^I7Hc8HJ`eLRwEvGtYV{fINj^rEN zN#bDDMI)8xK5{FOGK9%ee?rkuy0nDCVTl0Tuc8*wkrkyY?yyM3c?tQYgQcS39SX>C zbjYNA{>D6ib2bXnSz1%v9^Zzhty&n9o4|!-e;!RrV`w^qM0$8(9qmUnqo&lbnOvxc z5LUcYW?`$JgDYuRQ}%wtk}7gdYn}im`kP-kYQ3bR5*$3 zCYSbmEPq5wdk>dRI!D~dDp5|euXc6s-XXf6!710B@7KxsA@CYapbk|WuBVwKb-3!M zc~YhFHG2+WSfFzDej>i@Lk;bNMsiUztefoEMulBB;6U(pUQrjGBXT|uN}g_qkY!l4 z6_+9YVbSmvb0iflMqV#IBf^fB)0%JZad)&R3+AG|ByK;EE=@Q4ZQ@7le%`siR&+z4 zUdve!c1VaPidF=~y4K+*O6^so%unTGfzykudZP0{kgq@#c&?Lu+z~k2oaXB4%O_!- z>qKR$qCRJ`-Mqw*p*zLehx34;g(m*1tH@iE&5LQXmQ5-9Ku)NWsS2GfEXOu^a%T^! zMcoXWhn7(Mw{zdm-JdOKn;@N2Hg7zwT*}whe4Jf}Ywlc~7q@|+RVMtJPt?qO&VtTD zRy$&;y=#JiF;{$xGvQuD15jR|FsQ&*zJ9f`pVlQ=ph0n-LS7z@X6q=5u78RJ9`gHQ z{#KPjTE}RkRt}y#Pr+*nm#9iZsT9u{Ipsd(os(i=H9JA$V&n=bP9C7^)eSv}4{Bd3 zljQy=ID<*EJr78oK3?%|BT&mf+8MQj#`9PS}XJ3y!lx4c4fu@8?q_tpH%X+kDi5tx_soRJYl= zJv_||9nTCe+#j)~3DlW&AEIJ{wmci36>T(m($0&=r%ywvT}}3j(-%0H+D&F)SG2xD zFqf`L#W~uQBl?%Y|5+GFVyZP1#Rx=A(Z=J+fOgp+{#o>Ts;-3FmD;BX)cU=ORmbK#*!ah^~ISV zR_R6G%gZZ|6?wHUk}=yfH{_mmh%T>GM0Y_#H&(ZYhx_Gn?{e^G=wM*#v)o1>FIg*Y z7qEle)C}%n2$jL-3bDc&J3$tW{CMH}Q=8Imw)_rXHlX-$vqeAB*x+#^cw2ukzNJT- zvP+xp@n<%jp{oXrftYXoce~(P7aQ+ak0*A$TF)+Suf~^?xo=K&{l2fw%^uV5aK|~T z*qz;Q>fEjtJiagb1b2kq13cq>V$FNvZ9EM9YqcB}zJ~-G7_cB`bqwDi_i;rbpJY?! zoHC^!1=!KTfuyWe*)} zE7MTh)2-Byj?Wjpt`Wwj1Ev7-r5fkP+i)WD<6PPviBAPWPM* z#9JTI+MX4DVM+hSOn5jVB>AwwfZeQ1g^P3XYK1T9uGruySOuqrjWsQL(TIh7XA{M$ zD_QMbTlAKyCwR-rKK^m2VcA85Qa?Z-f`RY(F$o)Kljc(DL29$MGLq(R<(2|>Cxkkj8xm_pYxGq18ea|;P_mNfui zK|AcNj)d!tw=SLX+~Ua^hdmrK2I6r=#?E|lQeG;3eM};==@zDx+!;b+VK-tJ^tRVg z6x*>U1iOulGYbuq!xD3)x|OO}Wh^#U5&Aj^Sg(L8^B5muN0dbClP$)PvPfxFz57ZT z@wb28&X6G9<1mq0A=eSZVPbk%Vn3l45=;IhCAH3ZvEGP=EK3l1m~IpfAi<-riuHC> zrE-9COzHp0Hyux}A3#KE|D@0f6f|qMN8iYv`D1CD=EP8A+uU|-mZqnXzTZu>K4+{? zB2ytx$w;PG zm-B0d89{pA%0|SCPru$^VTdA&L%^^$1a#F_f0u40IF7xz%nL&N*o7;bt8&R+p{eMj zSCd~M5qwuNonu9lOHc+3L@`1|q!ObnfPpg3T;#&@XH2Xt@<(Gd*af|?(wM{!n}E0# zh5%h77y6qFI6JNG0F%ov0LPGuhCDyJ`I))N)G?50Q1c~F8h-dS$;hax#r6y6JHiP! zN|MjmnYQ%|9-7-BhKu8Nga~h>Xk@b6^18gI5ar|hU?N&PE>qe_i`yc7o_xwr1VQ59 z{LxwkvTlLrEQJPR*E&C)yg^4N1O>LSiYg+ohEye)UwwzQm;|r#12a4J+q%lJ$H2%i zj%p%-pbW^mdqQySD|NVfk?RQ}n|T|h@K+xYQz7n+Ptp#_>&SBQAjpan^OZ6>L6lZW zs+nT;QK()MV35{;n04SUnFN-38H$`HMQ`tAeTmR#{SBDa{_9qVJ)(DN{FVudGzA4J z!QnccbwbtYJic|eZ;k5YPRn0?xu!hP@ZcIVhnXS{sx~)hyCxzD&V9BV4gqh1GvS3F zET;tVTav79MP{dPs-D>I&c&R~@BCx|~c5>`0q&-DSjQG^Qp`98}5bd(PdbYl6VL z!9FDaZ3Z2;$t?o-lN(&*rT||Fw296W8a&6=`m}G~QJn8l=^P+)&W20Wk(sWT$m1`kU zvPpqv+xU3Eqe=znF`8cP5MZ&!Vd+}iC##|r1|*-Bao~qI-&hxChBe{i&tHxx%PW_H z85&?=ovv3FxSTB(BJgTDDryxM;rh`75S9D34UfKOpGD+dZ!=(+!^@jbbZooD)ab1p z!B^Nf6u*aqJnfu!?iuvBjE!Cg_{u&0^A=bH-#T@tm$hF^>JuF^@Lk*)yJ92aAz2Rd zG!GQRaz21_uJ>#;uE)-FIeE)@r56T7kJmS@3}lMac=Z>Q%>L7Q{*$&WMGww=BTY}^ z<7%Y7pXXCv&_np8yzt_F=gWB`ML(NS03DV@$m(B`<`0Nt7Q?`FH{-gQ+i;@$AZ+Ip z8*GS$7r!9HXQ&AYFC`N1eS#(SKC3?=2^0`YewkPwrwWy{n}U`kJERgFGmIa|yfs9b zYAX`k#lJ+a(M5ZlA;OHrOw67)%{5p~B>H54bs4s!{q>`}P*x zuah!P4)!L@+A%VK7v~z3SAV~bziX8hvg2&h4@bA`{RcWs#c&kq8<%Xu3gFWBCyq8J z43+t(0XWS%ywrY&t?0X|8I62IDiTq#1_zzItNzXyL!<&AvbNIACi`7dMmz{JG*rO0 z_%O^#l6v!l!ojx{8O4OS*xbl)Kt(_ znSevYS~Q1k6Vj?SVBNRNAT)r)Z6gd~Tc!=!UDRr{i z^|(ndShKV2@&UYdVT6LBtkXS1)R`96?B(597W{Sf8fbszJgFPg}pVi3Kn z1`K_$F9eg_$cOar5}fROTTE`gWvC2;dm~v*$9FNa9=$rDYU&EaVZsGA#{|VwZQ|h~ zP^JNZ`6DUtO}k}EE$EyUjauF|PZo~vG|7JU{?RH0iRJd*k*udSeLx2hX;}>?sXtNB zT*BHd4spQVm^iBy7nKH9k00?Uz)>ubqh*I15&~l~Y+gw~CJ5g;h3HnDAj!_PIuWaH z-&qiVL4>FfaSa_Ge8}ta^i$(zM&{PJrJBl!ZKl`OGNkTsLP4ThYgdq*VT%u$yyhshw@z0d-uWO@lkDQ4 z2TqeO(C1xhRjbi)S10%IOAJVem#!WNT4m-Y)PtW;&u2(SC(vO{CbZ*H2-DeBnY(D# zBwQF5{g0e`aR5K;X=6}6_>gnqL1JBWaNz9wIN8@B2Yn0HvxLJ2r83m@6#>02p**70 z3dg+E)cm(VjSAmF*4wtmgj3Y)Gs5)(FX_}8=LevIle`EDOpWz?z$|Te60&)GZmoOK zk3J|vkIMrkX0eZQZ;4aW&uq#!#&^;P>aXWI^{eRha6h}(zo&N3aF>rBeE;F#j9q8} zCU(UfoqQ`Dp|IULY)v7{U?Co(^yc2LRY@EYSuP$->c#d5FH3@d#GXmcv<&B&!Rb;A z4wN<6R6Mnf%7huht92`Z!X)Cx_1V0S_DAzXqXUBiwnY(SrlF-y-@PS8rzO!M3u<^P zV9so;4+uD~X&{{9rM)T+WgJ8wY4>!-e>(1$Sc0^pxdK<=HV#dA(J@|ba;a3n1 zr;Y+2gqVW=u8B6GVhnQqb_a)A_z20(7R*^aBrYC$F{~X?L+5~+#y}_eNE(8dvNB8( z9ecpnu2(yRZ)DlrEx%17w;F+#A}R8&c*J~E(c-zD<3<12Llx98{JP0Z`)5SrXi z`PyYj7SnHE~)(8+NWXCG|nsa3(a2ZLHrX;Ep%G zVIe1m2RW4$c*m>nLEqH}U%j!wQ{902dW~?#gR@-4MU8URMJ-v@PoQ!(v<#C{nPI@u zWYHSpR!`8&lP#2VOcWPSRzb?J74y8e4e~xk(Q1!hqOehHLSQHz&z#LWDaER#?a^DI z*EA@xh-qLGuJ?vmo60e$bqqk<251f%PjamjwM<|g2r*)SC1gY+C%ioX#yU2R0@vG> zV=4p@=>G&;0G-e=wA)w=9JO~Qb%`@(r#8n64eOZ0s^x~XY)3~7wFsdH+Yw1;9`ga+ z7;L8PbL8}F3F$rk+OPL*wkTkp5Ld76x!?Q$EQMSazVL{%byNTyte()@y8BHBBPA6 zLTq9DQ?m|yo{~Zyg?CH>l>kX~^Np0DoK_1cpOC1WR`aOgjPHXG=|AVf=X%6v0^&wt z!4B%yOQ2(=BQiD?SJ5}XuL!#eflayxSDRp?^5=%waIS$c*?LAd!P*a76}i|~YIKHp zJgiEshQ3G|1Et)v*iC%RbXN|*-o%b)0cne&PqdQV7$52utWI&lWj z>GwsC!gIk;*BpfR0kI5EX>%e9hadma2T)rxRL6h2JKG<5rAML*_l2Z|19g^8MSI*%YSFD1y!^i7)=5Hw%4$0tS+E{UO;ilzoMEv zRpJpGZ4EY98_j2kd{rfbYAGBw&GO4h3zB-Hi3ZWRu?{Wfh%ED<{${-w2C(m3mOxmJ z++3sdrOHdhepv`!<`M9f7bl-@f)IQ*3$b!=jfboh5Bb1oGLk zaq4fZvK%bZbR6*8qoQ^0xK!L1sp?Z9KcmscJr8S{KbsmY^Yw+echRz?dMH}mg08h) zJg1;qaWz|Q*^Y|>`lrN+jUOq{gtM$$m`8qFwTVHjk-GHZ97jv3;t`M<1c4qG;QSF5 zoB2-fJj-ZKN#4D^WdUgS#98pPYvW03J9m2a^ZM+$O$xXJSz5f3ibE=2bX(m>Y}Am{ zAmc8_;Znk)SHm+wtJn2>y>MUpZSQT}%MBLi{RdEk_%eQ*3R<%@w(!n?!`j89LI?7V z!Q_o&m0?mW#9PqX62);A>T?~RXscs5%O+}}JDl{Fu7Fg95iFi&e3+NnCtSRIIN21p z2a~Tg3Wvf%@Abep<$kd1uKe~%O{$}7>BDiym0>P@6*Cujqs z*eshzo-y>`+|530rN?{YJm0}&*1W&5XVgLxcc($_EW z=|tbi0Iif5gjTo?O0y(i59U$ynQ}Kv!yj3NYxk-Pw1ovqT>{a>goPv#4U5#w59u>= zytzLytrwrR*c7GXDuMB?!s99Q-W>gAR-0uB%=xuzw*TYv&zJwKAOHQoy$N-;vof)D zq8GHbGqRE~u(!9cHT$4wadcMx_4j|t7b5^SK=8r0m1UU1!l0eUwObNda|1+-3+WGp zXUPfaX(5J~;@5boS#4N|5epQY(aKm7~Ar!_@XB~eQG`zhZ z70~(fke@>uQkITl%`j@@L`rmOX$Qp9_(~^$v>ODVYWx{m#llb7F+JwffrP@_AW@nw z7Lh}9Kd-QkpMtfgX|?rKo<+HN$1%C#SKw!QlJ^?T;6nG`lU!YOJH}-nlJfm=I-2g! zx)8Q-H2K))=xXwB9Rw?m$$oH-b>CBm;K)-^L9;7DRVc%W(|}Wv1hJYcjpPikcakW1wdnkUxFKU@f>lQTZ_Ve!rvw~c7?NpHvu0+={ z+t%I_%wX6o)3S}fcjlC|vZ>)iqLDN?8jCzqi2y<8w*?71S{abRkdaVjd5IicL-)Z8 zCTl{VU-AI>4TMD?v-W{A3Yz4($Ly|GEM1H$Yp2xUVOg&7s&uiK&WlC&tpQ7YkK<$6 zluh0YZ6<5A*2oKQU0sbK7^n3_PVoRrb9P)uf(`>l#%U9zB*np7oS%rGj|zQzYa)g! zjMDWVK)n%+E_{^aD&B|)?rH+5Jw%#G7H0s>ry-ORpeG0@B;!C!J4bI03UO#d>;_9h zd;UHpTJ1Kwzk2iJ(~awxXc^*s05h5m9;l49Ac7=%lXr&Aep*QW2>Kn;d|EWoOYNX# zHz%WNLLvUuYJ}`XDy*v@JhsfMfjCUGd2Q^vL{V%XV`tZ3y}r~LNs=Bh>kPZgiu)z@ z)N?;M^xCDPveU*ebF&Sz3Ge0iC=5cLIef{-=^uVPkNanDp#HN3C>a@88#w;^_@fgT ztUiuE*zG-nSPBP8`aUjynp7x1Znk`UxSeyL!C2POoZ|5!nY7*UI7l^dXs+}AC?9Pc ziyCNB#bHDgP1Hcf*UUxcYgMB(bG5102^51BT~54}TlLwUV$vlciX;Uo7H}uh2Rh+{ zIGju1#DFOMcrLGrM&5)%%QY^jVlTKd<4JYVoDu}387{a!JxzZ#2YfszU4#qhp&*fl<;D~OKH+4vS_i-IJewZc8D z!V)taHuvoWapkPyYfxhW9GGE#p3(pZJERAcDB+7LfIiK7(CFjNA#Ht7P6iyF33 z>29!t?I_Bk9)(z+#t)jkIbr@E`!SJZ?PQ|?Emi7$Qbq3}n31(?DJ}<^NUsJ+6`Mb4 zpY+?CGL2Oa+sB}~#SuT)-hOWv*FZG#`0-)EKmQoz{y(Vh-!VR}*LIKqA=Hg;_ya@< zckw6XD~6gLCY4DoY+L41GL9Uw7bvT2bZ_xhtOW%F_dNUhjdlphe5zB`Th>Cwab;Fz zblw}Np^&}+Pw|3afUnYx>kN8)Fpz<*b}-Lx!2rsV&usubB-+bpVyNkX2Dr4IqF}yG zkJ>=Wnh}+3k(M41QG7LNiE|=^X!u~>E=}X+lP0tXIt;HwZ9(Y7jFUs2FAI7_%5ABA zzxX6-m9P}0+zTj;v{KD{;))k!nGY5-Fmm+${R`*a9?5skul1kbRR>IeD3u>!>KHj4 zgMFp_o`Y|+mND-9rn}+6|0dw#{uLeLM92xdm!FEqO;tPc_wo)>I_G4d51kVIap3E} zWKvOUJ2xd02Nx4tqmN~<|0|OQ{9>-;8Kz-i=myX-8W=#;)u$mQq_xRzQ7~%jM3I*$ z%AAth=;Fgm9!cqQpw3;!#-y>#C^=+ak%yYO-EjCW7`9T+O?ZNMePqZ9x-?Y)Xz~e! z9m}ouDCG-P1+gQy8TmAEf(_8b5h;Ma#)dA1BXCgGbyFy1Y{bijY5#-Z)zC21GlB^i zSp9K&Qv)Zzl#|E;3Lm19v~_RXOQ$6w+z#w7_xyeZlK82_vZXOb?y4#p8nRF6 zAw-uVcu40i`(bEaDJ%`?b<>+wwp%s0n&vbk5N0Q#SVGgXI!KNkrlixv@m9n%zcjJF z{v+}y1JC^Qet4JCQH>WRPcH9v{| z{2izUm+}NlKjh^8qqqGROrhlLXkuU^Vr%^Gq+%2EHx+npZAs|m36dHcX>}y%!(7l| zhovn`y_0Re7Xw-a()u5$^3}I;axy0+x__uZ(#7YJ<{iQCu8RJP>BxY6s}5}JRDSTP zVU#^8+3B~Mc2e|dioFbo@mocJx)k4jB1}T4h9c)6?{5oD@KO#r>>xXap*~@ZfQhS* zjjC$o<`RxI89UU53I6L~M`xKT%;mp#1F3Ow#}<4@PyR>g|7kbSUt#)R(*G}S_?!H? z?Ct~TW%7_K%PB1+Sc9G80Ld6`8t;40y{rbib;M!cSHR&mB>Bb0i)Iw!X48Dd<8Sc= zC*sdAS0>f5YJ2Rq7Qt_(-BJ8C)9uSpHRxBsoYkPJ`!aIC09sb*HI1por#v_Z5)K^S z;H_MI8Oc7x?+#}KPF%53Z))Kb5Ic#epzR?d!{zWM=VQ=N5EDTK&+jrFv_Fvq@ef3UO+YPgd5w zjSPKS>B|D*{z)-_KILnG2%{j1v4jQuV@`#|#r_U+J^aux*fT;XNR;L7H%%S9e8REz zs>s?f2~St*q9r@DnX-*vQJ@A9IQPGw{y*)T`RnwB?TlP(K6sJ-*ZDL2qHq4FD+Y|> z<>~rXi-D1~`-(~`63F6r#R=v+=bAtx2&7($?{jfy)K4LR+@4|r=f(<)JreZCN&^*N z5rD_}g3^Fbh#Ru&(&%g0?9X^OKfx&laHes`r6v-Lw?FvV3iim<6@>!%H9tVB4a1c0 zF`gMrDRsYe7ISwe5r5Paxq&pLLqPir#|!(g9yX z0bbFE1u*^50{)49`!5~*uCM;?{{O=OG7k;F?Rxl6cQDRY6P)wDY^*o0IR~`w!F#`p z5n)Br3T%D2zndnvCKV;9lrG$d`@>|t5f0&~>&5*pt2lx0rwW00CuA%NF9V$Ho%h*mS)|_pO>fK+n&o13z5{YE=%GteyWJ>F?aC^NKqVfQSuRy zw$Oj~zj>P2!Cb)pCA_xQ8RahnAo-*4Y#-nFZ^h+5heExBG+z6Fm+d-x~QP$ zDyI!{)b_a|KdD0J(aYZC^R9x0H6%{!RZMq$e?f^yglr;gF@nwo?x-FF16K;UF^>VS zj&$kPss?i&Ob7t@Zc@$vNs5%y2xF{(DK`iJb++#-6prA(lOl&)%*zGZ;LWe32%J_3OURAs4jrn`SdsAT6&-CV_b_mB}q5P?yJjMAnLe^|tPG&JkW`@Pm3 zyL1^O+Tt;`S!KXrxFqSgFx_eA)P%3Wqmij;C2=V zzn-8iOr0wqE`U2LI!Z;1n!zr!_Oz&E(@QUqU0lxsx4={|!Iy-})zUa`zAD6{59swQ z+Cq7!LXb;V77#RumYY+12E(GB*kvN{d5}rMc!^(=iC!>pdif!?YFAozfX7JfB@~zY zEl|shvQobEK$`m2qRY&NNTo%MaOwOvm$g*~rsw{L_AdVaXiwF^+T}kAbDJ0jxWIn} z5#r8Xrz{s-YJ@84!F^Cj|YiKR^yn z{Lr=Z$X%ReWB}bc_VWqn1a9PPi&SMpKa`NP?XW~=kTARtbbd5WoH+j7l1MjFG0pjq z8vBn@|I>^2zij3|fYjfD$p7fg^i^j#&t#)xti>Zx#QBRxAFb0iS;}x`J|=d(6X;vX zBf6_zg?A^<)_ukpb1UCH3+aGqlHv1(0*?cg03FM*tUM{?nh`+B45&J zKsb#5;_{J5K2Vf}?X-%kkn|VIQl2EQ8u)H7QUvH;OWERE69_>H#8 zk%N1o0nC{{3rN-NB7r&+>C;%A{GbCCxAp1x<`ta77=2<#nv>~Wr8%{luO%a0TUrQFx`4zLi}pB?h`rRa9h@k@ZNNyIoO54!GQAy zbt>AO`JJ2P8tqAf81fyW$JCx?KYnrc8{J0$wpon+{mS-$#@JEl&pS1ggm zWoFr)&(I2nyCI}zVoB|87a1CFfpmytfc z#RBGo@>^RGOqq2#@(=vVFF_{kZ^APn-FWElzneWy++~=6KmY*o9~&k9x!Lny!0G=B zPyXgu{{x&%H^bmAxA|GfsF2DKjmGnrxs^&lD?`w~rEGkb=$qQ&-}0D-&#H=ngH0yc zh>L7i+(qI31x|QQm>M+d;%Zz^w^%uwra#~r)@E^dR+jeXG1k1!xD(>4B_+T<)n}1P z>tKp633G^FyOXYYs}@WQp@tUVypUbMOq;#(&0W^|_!S-3)btP&NnG*8FWwrcpI z<>vwW-MC-i<^Jq{}@P^{~SpEvr7Nl!T+r)u^i}6 z?BT~vj*Euvq_zB2m6Z)me^h09y)9zJ^@R4{zmU6%dPZhALdhoH79-d!alu*rf+J$a zJcd49X{!Cr&F1`=H+XO(>vGPK#;9jDKC+^DVgy=VX(g!uejYBc^a;4${BV>ugx?AY zZYP^~Q(}1>>ic+w)BOZ!YK*I^T&Lx~v{yvthEWQ)d{m~d%qL*~s!Y`z&O3kA=p294 z#6Ru9{VTQng-rieocs-x6+)w({{_lSIZ2QP*NgoGqZ-rs#-3}V&1qOc{IPlT51g;e zEo6~s9+jyUTp8+Kezp92h}Iw@U)P(#@T$eYM+_wG9s8Ff(eZ3Gz-~~kTmpW0QUa)J z@fpWw$AM@#at?UQt#`poIc3a?{i`+wE?njLWaZ)#5@I~1qGL@&cC_-Du-nIsCHnYx zlcKmSnfI6VQ~gl^|E1Y0U~6P<_aDt(mpB<&UyyF6-OgeRidU(u4 zQKm%U7$txC3)weOVJc%}E{_YZly2q5d5D;%hlCTNfMlkWi1jGe)6o8^4a9d+0V1&- zk=ZO`-X40<{?K|yz~(OqTjmSHGaP{ce3)k_d9Itl0Pc)xW6LzP(j%5_Ur7xIe!NSb zQW(*D24unblRDIB<|GvfqqMhu#5FFoQ6fV2OwHIUi;^ zmhQput{ELAXmh<>tS_XhHJo0@C*|MUA2ipEOYgv7o4qw9T#-q;J!4{ zDjR-s@v4qs;@(r|y|A*@h@m9TkG-GidKi7mAWaxt&sx4KxNXUKhuCs8Ga#iy)NG zL#e>!;e-dy5ETu8JH&QaX5~bY=5A20%!DXEm88Xy5*tB``c=`9jJmIXBzaK*n_o40b@m~&EdOn-?Gm{?dbhV?5Qo)wk}s3igQ|7S1%Vfon(kpzZ^N^r zM`rTrneaVAj&5hsqot$G1jlK%s<3@Sa8557O2oz+Ot?jCy~_S5bCnrk=VPjY8I4&A z91i+RzooY+6ljX?)4-u(@jC4rADl!&aV7*~ZZ+kVrT>V?Hag$0V0Ekt0=QPu zq4B(CHbRr`R<%Fw8MnaBtWBR|19A#50-qs&F%>rrcl2KvttPrS))d(`{)W-o$6{n} zXiOUxqK5?YhBMSL7Y_~oS?I#)RDlzl)$rq;MtMd-x(CdDRX~g-n{z%%DRbEm)DQ(W z_ih^da=_;+(p0xPs9sT_J3 zsGr_rjI-8;YF)3S0M#irKGi;WO@xdxha$HFNvZ&trYPyBW&8)eE@tTG6~IiwnyJuE z@%9#uyIbD2 zS}SSXI7fEo%~da}>XQgA`%JG9ynbU-tyo?^MJO;7ER1Y5@=fXE^GZ@bcfML+UV3g+ z0yH)PYx~ZKt-Q=DHHx5!+uVExb{xDD)dbEo$=orR~ z18J3jIof6rb!di8(xQ7s!AV^nOyxu-HhT75;7Pr4{k29r54Swq-;EZD+bJrrd4QYs zxkmbqrC&X+2Ho?Nbz#6u869Fr=30WJj-yc)5i*fkWQ(m90>ZM0D9V+LMV&om`{ks& zHQQK?93{u_ED~C}cVv3vyT?I+xyg4IiEzO@`;jsJ6kkcBAdGY0B6y;Kz}p&o?Fljm z3xl;ScD{#Qy$0t;vu~8TQP>!p;VNDNnxfR;l*G^0ot(6TOE6x-^Yl1T3(!hXFxi!; zYvX~?Qn^E_I-G-(TQ-W{d)Q_meriAibFO{27guMbXZdMfqBV9NcDGL2A=%5|TrKoiXeIk+PWft`z9U}&rzX{9CNE38$6itVu}yrr0~rl zG)n-UBY+TJ0X93Vw=)xi)000UKLMOAfU&GxI@1U`F0*Yl>*wvz}&#kGH%p}v( zd5{Uor%tjaz_@S7q99pe7r$mrPK^c`OCV{UGg!R^whaU5H7`BH@vw9N2VfjwS7sV# zRpGFb0G;8t6uOp~YxapwZ%nabli8#naYSw^rlas40Ic*NQ3!_V-gcr1l!=z1)*Ek2 zkSVwg+Cb^9$AOek7*c^`%s?s)`k+zob1nTF2A@z>n}mxZp8ZT<{@QX&Mc~}Sy20>`u<#uW2)+BTbH1<=DM|Awm6F6H(WK$BI9{PrO?=6c zB=4TQMNu|@p5S!R;4SwJE)}pWMKlPS_H6w&5z!un$Og_7foQ`cV;oxK6cy9rf>V4%u1kSbW>{pP?H<-gh zWrrg-cZDL~*FGg{=}X9Bxg897$HayL> z0hRTgYk7L6K>f~IneG+d`djQVen)9mLUNsZ;9X8j_WQ4LKU@uQ+wY^{0rO$r|7_a- zw36g6)Be|O+<#bhvD%63t|-b|ZYlfT=nh3cV`q0cjTT@564E$P%c}ySrp&1X<1l9D zu7m!9Np3N{qRKJ!Evo0fq1T8jL>R&L&n%{ctL$-{1Ckz6XsC4cpxiH1u+Xx$<+_lP zNK|lOz%5^y2)ErD$Oy*=8sSUt874``9|SU8O}@3Q;oR?%B7!DwhkHE16dOyf1#E;~ zgh!>?0K&Z{h)akRwvJj;36sgkwXILxj?X+_*D&#%ib%7U5^;~Y6GDoCgL!aBX}~y0 zMgZ|j3R{_Uh4O&|=#PD&{mEdKRis}X8VQfytD~E(^WyC6?F$vU;EQ2anN`e;q5IC6 zti+32cW3D7R|ma#~;PvL5Y zsyP=A=PuF}%scTT0#PjMcta8r9CIeIOvEg@jmp&5NA2M%(xjh38*ai>l3&@+NQX2u zYurPN8V;Vokcc3GHvLWt@YIc>LWz+8(D+}z+phIx7_RTNIOM!FSE2F>KF*E5_(48{_x@#)oG3&?pO*qdAZF`yU^?4bogezw=)R_7u4`I6ydt-~EGkiN zgv`dq-k`+RQ)xlhP~*}tHlGhxfVU}UQgkzGG2#{k&mTJT)Dt(_Myl|45nPzJvwv{` zR+kG}6SzIV8x_&{4kzPnnOr}>H1&`HC6OqZn$B@cUaGJw<9L^MjBwlUhR}=+qMY`q zBu{GxG*hIoo}i0c!vHZ~Z3g6{-Jm?VN=M^T5Q7_E7`Mj(Cqq}-yJRFr!BjYcO_qNi z^(yPihvV(3N8`mSH&JVuZwXnCRYGXbdu<>ybi%qix%|UN1UzF2@m<_YwcJl=G<@nO zEbXer{l*G1i?^cBThgdT!A~oxI%!M4w!U&wh=5!UAyZ4T;rK+a!s*2MIozsdvkJ}5 zj}^xIQ)gTrF|9ixfw#erpWHEC;D3eOG8DN6%#Z$Z65^ji?msoz{tCJO3by}qvsSQz zjMV@?LiaOuh;|e+h>bB@Ri($43Ly*1%tFZC3k>y0ip z;`ClKK*1`Y`%sbmO3*c0C1HU}z=l_sG7Y`&1Oy|D5CKF-G+qKHm+UOOAfESQ$A%c$ zF<*_eE+ul=G2Yms%^4*JyxF3V1NIYf2R?C?Ttz;TMS3ds1p{JQ>5`3K5^0mC_{@)5 z)Mv>emo}i}FET$0#AnCIl2CO%O-)WSaMi3!r!X#2R=jH__qj$@6f_8c%D@4^j~Ymd z0cM~d>$9bxWC(|k3{tYdiw$WkyaIKe)sV)^M55?Qd7*>6x!CROIDBnI>VL6Tutqjy zB0to!U&!7?Rrje2wE&w8?gvP=+A))s`sw=USC?GWJefANFM0|%Ux8w&VcqDr7yzxV z#gb#k^4yx`$pPDm{4o9e`)UpuW8KX6qxDt!#}P#Qe`tUG2T4NYXm5;eiAE!{o6J_v87)3ZCWAb6a+HPw{t;I+z=B?gs_haDmLzboZOlL( zk_rGY${Kgv9Jo`-G!bDU^%@jhE}bY!Ssv zemJzI!*r(s5mn`NY7T| za`>zKvFl~YB8%h+7GOZ^K`(xw|x8_Yjk4uMWCxga#TsRj?9te^Z9D1Mwr$(CZL5Qhtxs&*w$nk!>gZy{dasKKRf_L)w7^IHc4>NFcG%JycwoHTWu%DrTg- zaDbn4WyFp`j(7uWt0Q6A5tFo3U7kQwYZEA5p!0p4lYiy?3!jJRYq99rtBAlMa*aQ- zwUzWI4c3dH<0IpK*Hu4^&C1dh(FYz{>J~~U#vtGB-};<)yF1G7-{)exk@%zxk=j|T z9orvL-CX*-;~}(;@#_Z!CFBTUP59JuyalO{kaM7EO1|0Mn2 zdmvN0t9jLdqlOi&?yCjAmtDHQBKBEJ9a(5KPH zh-7t;1pyX)Z749E&&J)Di~YC-tYgi$kBWQ~jzk_VQUT8c+$$1B0#b7TCUs74=#KYG z3(l7t3x{*mYxX4m!PF;(&xd2|SG(|T56z{#XttiMSCy%a$lqMPjQBxR;ELv1bw5{)2(n6+7VwS?q zT#`OF`xU#d&7`7*;B)YDho5TkyyT~;vn2!IRVw{Kc--hCG+f~Lr= zKZ>rj2Bs7b&r!{;e{?Bb6n$Ir&RpK1JP5`tZ(UC3VP2hkX1tG@(>x1&b!r6KoZRW6 zS;g6Nqbh*!4fa29UvMYBaW@1IQ0I64|L0QspC;e_KNI8s#D8`P07q!f#%VzlXt=4dwRQAU+28htcEO5kT3c++JQ{A6l<-PVWBxK(%)6oVt%t8J){`N* zeKo?wm0`&Dyh*bld@Rxb&))0VF(Yl~H*g^Tx4_|_X5pO8TpVoOzhQ&&|NZhW&~T;k zrE(yS_O;z>?1smflsE`jy`Uy2(Xh-Ct`E*@kj!JJtH(jjwpA><{e0?a%}E3cKB?_> zhfJ}3>YjaTy!PW@DEE`Fi1qxO@-2Ff$8LLwAE*2Yp5J8pIX;8XYv9>K)aoiVt>`#v z`UUU~FU^BnoKncGf%lXky)OFXc|_o`(kz{>6(pwAd)r03eIzHmAQk5Acn z1b#%K4AZ#GgR75WoIX$B?p@Pgzs^G|+Gi&TL+Vn2!9Nk~Bh;MaCw^22gzrpV0K-a) z9g`)Is6c}|fz_gf>~W{i-s^Q1OR~iKKJn`y!Tj0y;xj)zxXtznV1I4z3Z&KnSg@b?OhC-Y&TUV#o&M?c*uwpIaX`Ya8tt z;lOH7(YO(J`XjajEHePuJiuH9hnpk_Z*8g2zkrq@l=y@~LO z&5&EMiDXN-BKXkR?W}lHHF>{bW^rlGyeQzImFzK3qY$R!AjUSBc!LOv$ebz{aeOXG+h#F}6G**)ExQ`o54 zE4}Su=d)$JfJ#T0*nvnp!_Hd%^Mz04L-55ICWnp0KrO#C8Fn`GXtaL%r8!#$OF0Tv za%F|hT&5R>32%E)%=i(<6jRbgYZydqW$~n#z|LUD#7b%gRg?2q9EPm{kfKZk7Yk#5 zkYqP!A7L8wp8QJmFJa-eGEIk}(N|NWfn{z@-3X#g*@~F)30ia1Z+I_Mkk{hpTZ19l z?o3pt4z{sV4c3T!xVi!=^y?@du|0ga=K(#kwC7_S--EKMM^~BB6hca#hae*HT6L+9 zml}vQ@f7t37Znoaa1MHBf&AdReKGKFFIqbog_u$+{bvC++hNYHGv`eQFD~;QdV$UYpFfaofS2OnL)boy>oK zU8mzPUaC7M5C%gch?A+6sN2G9*PfkoEyrE$Q!W^K=C7$XUS21*b8M1q|K&@{FIRXn zZr8u3OG@$QzvjJu|5s}2`w3_!{iY=JQ2t$N`e#bwfBky@+Xh{tlKp=yCG7gZR4EXZ z>H;}I4z&eRQ<#R5NpD%B9{g#O6B*^cOCIa}x^6|SZ!e&@QK};B(oVzExAYW~-f>4; zRWqyYmk4LPRBW;JmRoGyAYm12W%w(AbefR5M9`urKT;SrVk}*cyZ^?a8LR^iM4XL~ zMbsJv-qt#u%8VY49qjlP|70k4FRd3FnII5v7N0U`k&^1#cY>`}*{&9vOfvA{p^CUV z6vRk;yP~5IVImr@^NjS!d8+PqQA8W*L8o%s!~kTK;)=9WT2U~ zrbAazliH-;rgXp+L!!4FZ$>9E6@U0Gn*Ko}_PTlH{aCM}8spAUe_?LY3}QCt)5hb+ zV;bl#%<;^`g1Czev{Wsi2-Q^pw$ur*?Bmi2q+GGokMe`+<=q*C*QLW4=atKtWRp5w z)hLu?(C9Bd<{~CfP4Je@4|OvPUzAkLZs8yOqc~fj05&tCxJ>!CR)*JM-Ou<;$mq~& zgB~g0!TMmlkAD!Mi&YhJ4B`ImYhGY|Lj6r(Tt0lb48VL+-ktEDs`OHS(g`5G(Lw0H z4fa2+)BX2g3mJdM-N?lCzk>cRwBV=M{U1x&JNIa1vhjl0SmUZ{aA`zvVL|gwwf##C z^luAjg$j#1YepV0%#J&qr_xyUKetQN7NlW9Nw8|^zjrzXTTht4 zFeeh0C+`=P3MsE_A7|U#=tmk)(zHJ2uxbQ3s>#rUSXjh0r$--$ftm993FyVz^gm63 zm{{?0?Twt?4L9ivF{Qwh_xQRv48}6mlj&w88M;A}@@4RM#WRSU3Qw_$+Txw(EgVTT z@r+F1+!t)6P#6lu^m&4(hp7Pt^hb`PT=~cmFJ_X0v=st9T$juSHHalIy!v3SBBqR8d8g_GMX-o)uuZ-Ug&<;d8v5#b!I)w zy&bL8IJeku=)ZTi(V1H`mUpfzZMVv`rr-D2o@W@GIL8I>I*Hdte;Pk^>GmYvJFBVQ zMg&SSm|gI1J(#icSZ*Htbz6T-vWO5PzYs$P<*}`lZb0{XDLOOz^+qV>aa*b>k&pM- zNG}Q9UkqmB#CyGAPQTfcs&}*>6-&$=^wSwxqAY)SUtWj$Q1K;nQ1sH@yE~oHl+!_G zwIHdm(JlvL$WFk4@Ns`{`eIIoWKiZp1E?g;JrA@zC+t%3_eG;V!C=Bw$Y=t$b}X(( zhn5DZV*XT2rR8XnKvJ)rDPP8+_)iQOsKv*VYMN7HeRMraga{~%I~m0Ng{YJR-Mi1P zEfnGE%{!C<;oJ;2CFr>$l|BF^0`lbIPx{NvrhpK&d_GjZHmF!235vba2>W)!J?JsM z{T~^^kHR3PQN6&Vg{sO-{FExg)XkqomlQDju}8TmxBm?t&JM6I3unMKBp{fZF89RSi1;`>XuhaYYGcl1lcNE91?n zT!SXU!tsKx7xqrRY!S{q#fkJRW_UmWc4TmLcvNZ^AvT~|iBuq&^0VM8E5p=dp?b>*MJ(SB7N-qOHb~(&C#l)wG`HquZ!I2cS>TBu&wcx`pKUV8|-xRF%Yd%z4hdFA>pJvC9>e7OKVehVh%fx}QqJ zy}+@eG-`o{!j^KOg{ETs{R@v_RmRNbKk0KlQEp2-tBA*DkS9%?B(^AD@uDlJBQO7y z8zF*4dCn90o{hRkE`LnpgFg<%vT{sXFWBef|9X}}jS+F?YzhxV=}xBAdcG_yDZG!n zQ)1?vHSvd!Tm38=96cNF@`%op9XxBTZ(J;qT*r6S`(7bzlJ2q2SvJH+-|I0UVuPpd zT&z0zm2qK2AO;ByBs!862!At;(+!Q{MthnApk*YVG_DNeFUV$w%qbe*u3iZ23r#&B z#q)3QvRFe{Q~Htpv)X@X7TI41x{3K{)L7-)Fr*+;T>6Wq5AOX)J@yN2!KT&M~KmFeT7&=FNmsVHv&Dk{xp%*DK`e(w-wY<4x*d%y2 zwU)#I!eJqmzisC+jgYmc95tO3u#^=t2BO^m9#)5VBl9lx&z!ThgkT;i=h8BjkSk6GdL0i@oCoP%Xv?oM zUycv*pvC))EF?k{-$fLqZ&@MM7rbqXDdGuFMhN%;qZ04+^-0;6G(+oMG1DHUrOnO{ z<0f7l6sA3&0J=T_I!PFqJ^IdvE>`K(QO~6I3OX-l+O-lnk5+ z4SsQeP}J;Gb`N0EGBL!QGv`}OlX)WqTKCV+SDbbc|>QQJUyMw-dBP*2jn9Ha!Q#QTE z<1E@t<@+0?GNzaI0baAGU`fy0ITZDD5 zC1F_4clZX#Q!sLSdaNoAfPp%PC?g~Sc_w&5=>L%1OI4rR~gx69A-_k3mv8i6ZZ zKEQCTt1LZp8CwcuF4t$nWimy`AYg`AcS-AUUYkl}KGWyi6UWwl@P#WHgdJ0J$&F)K z3l}m`%-3bJTLH7~!&05Cd#eUM^8!hNO^jWCW-{B~2k08MQALz;ky704mjDtOa-5k% z--^A1WL}I2t!7mb;<$GXVy^%-qR?r-5XuM`d0xC-D%+*ioI)Kc+e}gm?CP!+mn3Ks zu8{d9jF?3fVVv4!uj3ZoL6JWS5a&WD0V08Rh(KC*^y)2 zEr6V^^M$>9cBh=B{m**+y0r4Lj*vU(YMQvZQlOxLd&t;uwkFjP%-`Hq9XJeVeQrA4v~5Y`hu~hS&i?jDvpIZ zc|-3&?)yMJ`ZyN&ja*CRh80u*#Mn<)zSzR*kNkN8Og$DB7ye-V178fg*_{`(TDJR( zw)^GVZJkNvR5Mx)VX@|nO_*+9{H(%(np88o^s^yG>(=O5u!*7w^QtnXI@NZ>l~qP2 zBxS<7Oy{oz@bDp4t^2=^x{3aBeO0JLlk_@ zFGmmgIFg_vfaBLq#Jl|q=l@bE!&dbfHx%UO*3077de{SgNo#-Bm-m{CV1P51m5H#l zdxH<_ZWBs~9Vw8vWBo{91T$D!3J7Q_GAo#r$Y+2@0+ZY%wJJ6Y@L}R@cR6nEz(e*t zYctYxiurB5Q^OvtR&9VJ7Nz7T($ILSAs%0&d>q%3r8##Hzn&O304C-J%HZJ%=WPw+ zXy|4hARqDzxeF5#kZtJZ&$lLoa@92c#km@rX0qn`x_GHRp`7}c$|S7xVQ&+T>P_3p(QLzhLEr2e z15?{s@*HQ8B$$Yw&cRW#qFt2WQ9b>6``}K*k<94WwJc1cC_7h5b+_a$BQ04GoY8Z`u?K?E=@K@IjNrF6 zpe|@rYbsxP6+6L5v8j`L4i34)T^ig!4xOs5l%x295_4C6j&^nvyM0V&-l{RsW% z9u!%vj48Wt3nUKfce66c1710vsKLO)Ghu{)i8WMpV-+E9z}r*H=#;z=yYbs}yflFo zf(CQzR?8fZ=OC(s3UQBwN958{3>Aqo90>wm5T+au8&Z;Up;y*o_a_UJF+1A~nIvO< zj8w!#oK^mf#e3);=^x^``RTAS z;Ga$WAN`0<=<6?J;UhsG%m{C*wp9t+3SY>Ov1{^Q^KoqVy*Aelo_1u-w@`~XFfd+6 zX5r=dC>-xDmvd4tElBwFV(x3(ECR93Q;1HJa{@08EX%)RW_0eh;z+Xmh()Szs40k6 zuzemaUM!`o+Z|fMv>1JXEd>J`vjxOJjtMYM_-^V zbn-&NiT^~N<YV_@$&(`ZZq6NxA9U~25CEiNcpvSm+K1^4|G<%Jd(#kq9R)RB1OP z^I+lR=YG!}*;SjGC0JeRsoB0(wj81$aiy{+RqU7?K_Ph>V!M+YQ$VH|BkB5n5Ub=j zHa_KdeIRh@`c2}sXRM~PmPB^r%tSuTmW69}8hr61WDK5my&GoONPHhvjH=2S=ZzR? z=%_devY#Y%$Y9A96?}z1EUuTq$iy}-J%CnkwrL+JR48XSW+)ki2M7Z6Kl=4=U#p1} zrAG`S=Y}PST%Rg}=mWWd;{q*(-EH>CK2Y+#Ly?BkwQ<1XEw^>r*F;ertLcrcgx9=3 zH&RC=$LJuYo1&c7`HqH6kh9TuqfHYVeDMX11ituZqz{zvuGbNJzb$un76bQV*ahbr zaTnM!fY4LrQ7SH+(fWv(rI2`!D?&=`u7i6O8<3>kbgtS(c?q>W)P&7*;c)aC?Fy-e zx&o~xd|@w~OarmpaTu+%EO3BJQ_yX6ow$pOmAy#)aGQT`%pnP+Js+A@StS$Om3}Cy`aby z`@zZ$Rc8Tsm9PeY3XHwNC%%Zqt^Hw!nTJYHLdi5;!k+6UgH5fZN2O*MYQ>>AgH1rR z{Oel2)j4`cI|)$^_1O9uY@kbOj+pCL1JY{K7C|ueCZ|;R0%;y9U{(=61uxl5oG7$u z^@o;MCJzWYjGSTqlPF1EPKqqpf=uS~FyzKQ%+3gfjIvh=1C4uQynW<^G~F1leffF# zA&ii_*vBhdj*TCiF{5_RXv~>5tRP!)N3b+=dAE2PJOAAUl(;@M7zJw$C zLtD=B#=Fv`(;$<;c@}%lz`a0$kVNLgGKg?CM|6`nu7~>yY{Yk+taJup#eToT4U!Ix z#I^)QF)rMx8%<>rRP};fjtIUSi$6H_lpc7Vbo)=#JFc5!|Gf27-+ba*h$Xr57nLjc zf3`jTi_W@XEKzj&Cb>Ng{vBN_^nXIvy1BSI*ooL0xw!o2+}8i*x6+d2{zCyR?3sVK zoK_;bP4E*#si|_Ik`K5aH3Nbb15T=v#)FXq!Kousl@TtO^V*NKSsC9nPOuhZw~={3 z$E(l3Y|PtTh`C)$soBWlo0$FeT#t}nq2=+0nT+1?Cu~hvMn+vHqbi;EoYl${_xN!D^S#<1@+<}ukRH_AhuR3w zmyDqZ480%aDldJM%A@t3P>DBUal9RjO-VZ<7W_wy7=|Ittq=SY^U!qphPZV*k~-qg zzUpg@6gvFyC32>L_#4Ch4+!M$Z_ZK3Bz7jcUrI2tEWu`j-ekIHre^Xjp8jq zJ*t92ZsT~lq@KPFc)#W(9dD!?kHQe%ebkfN9Z5ftDW0FQr1OxXy#Ae=)Rj4^;hHpJ zCcew+#5vxSj9CRe8}r6#PZndQ?|2ulKj$g*>h;c*g~&2<0_Qy~Kf~bV+o&C@bxX$x zw6y3a9+Ql(FTa*d>9qo;c}o`eCMHxDpS&Q9;iq6Z(Ma90Hc`tfw+?2Np1;$(c=w*k zz{dwV14A?N+ZCUD-G{?Y!VY->k=K-eO{vjP;28Vf6}@0rhG>NH6p$bH$vR;K)Iz|Q zG9FFB7^ryb&$?9gd7H%Zga1axRA$jL_Z=s}YW$DyGuh8Z5`W#@y1`kX0#P;k6kC4~ z#GIhPLWo7Cwt4F;h(tVjOX(P?79b;)#>zjk!H{Gogdp|BfBgD8BpIkI z`W^*x#H7+s7>jOK+be|z(j7;T-g zA8oKy;w2X-dj9td{t?PH9ERKM1wEhWoDWZ`DOt#ZY4T9cvyb9OekicuI!r?R0J5K$ zDtL*U7(U*eE{beGbu9uC^sWwK-Ff)~j=_=5j8CzXP%8@AgjW=PiWdIN3F|kVsW&EEvUwpQaA{%X zQ5uqzt4sKHVJT&u&?|i>X=})R)|c3_)V$@ zr080j=NZg{?4J6ZqTaJ<|TI*ONm{r(W2?AoIG*WmZ7?29c!*rlgx1Q zM33kP4O|RE3*0Iz)c-ogmf0eFe^2s7#9Okz^mxK>4n@8{XG)kz*37abufS7ETn0Y6 zP5O5mp;LE)t3YTR&Kx365iI#OS_Cu{b%B^?Idd9)ffW~i!_L}r(aL3=YB;-6$yR%e zTZU5NI-q9xe%?L=Nm_&YnLbOvn!%7pSX?JvJ z;0w9E=FjEm_B6SOTzWp}q^!5G-H0?REgef*YEf6dOy`!+#ElU(=gM-J+(+fXrxHEm zGgTCUP^J+9J?W5`U$IL#3*+y~>b&D%Mbs8|#L_JC6Q&5rUR3AAWT;ns!T8{L6dBWG z*hb@^jjL1f%+@5gcsv#oYrpW)nKP8k9P+XzsPukk{kOqu_k`gRSqSSSZySN z3C4paO;DX!dw{E}Z`navJCQ;R7W3vf?1>9w`8(7xP6Kya>m}(A4yxyBvqoF2Di(k# z9hXGcD2<~0DRLQ}h_7`SF2-a;Waok8n1r9R_$c1T(VWr=hK@-@m*<%crao=bqSfo9 zgIp{)cc}NpkeTY?{)*DSzWTfw`MbEyo=vEwFkkF*vwMLYaQ|j=#~RSIXy>}inxBmr z_;^3tVB5Za#V<@Fxks_}{^0ZA?JvdoF~;IT_%_)(g=#9 z73i7hXX&44WeDh>#ol*iP=+(D^)T3xEq&sS_oj<0$3c+7K%&B=I~3ogtQ39)B34(9 z=RZ38bKwnLSu8{F!;Cy@2rA-B)!c7XGn439o2aG_lbvN*9ByGpDy|s&rP9+hl!tvz zH@$kQ0ecwptIswAhs=jOm=(;3X0jIL7Y?G(=^rUr8(iBimuPNA*1S~=+eVs+BjM|x zQK_bC^_sSof2_V8W4&)Jy7~HN+;X0lws4yahU&V7#OXwKYSs&=!l_F~^0mpEa%!4T z8jEh%#ebCK`b(u$gNX~bl4y(@CYPtwCYp3&XrW8?gi780ZP^9r_B1xYpQD*s&lUUc zTfI@-T7*2rI=Beg**QgO5CF>rcIIC-t@dYl%#7#{Blkx9i3q?Rh0`fwtOpsQt*fa6 z)>0ZYZ^~V9!~raDno9R{Orw|~R;({MIA@Dx!61VtKVl(P#4TE)TisrVGl{A?saxMa z=0rGCSx2b#+940|?w3eaYBjq#YQwgj9}oT=sK!%u6nbQpu2|&^+PSmEgxY z$<9WjsWvbc8vrr;m@$HFo!8fR2XyULLY;S9uuDdlViZj(O=L>V zB#4)hpK79;3-(eaIBo3!d7B?-C>1mV503o}y= zjSw~0QvA+1`q)~RTL|_lfKmEmH#}V-v!^$Bilg~Oqxn@u0@t-~1-GZ*CfKtSQl-`2 zmD&t@71i`XX)sZ;c!yH0Y-?PU(4&rsj0YZwRe2j1Qag$uP&Kub!y#q(i*eFF^oX?! z@z;EvGJAlCK*ikYO^f$5VH}f(QZhRX%icR}hX~OU2wdC9&}ALZW3ls%=!9YqUa~o5 zsq%(oCLeNdyS!7{j1P~Ry%;i=0*6-N3^=^irSRTGm|n>Rwub&*kNz;w#QH?vy$itAYY0Z1T?#IaL$Om#G<{Q~HDyIo8|_^QXkH1wJeLCHLT7Hagr2c_ z=V_Q&qlT{NripP^j;@Z2B&!3%BZT81W7v|5+`&5;+NGYJpPml7%NWE;?AW#p`XSrZ z-8@KV2Krz7hbwY(`;rZmwUD@yO0jG#7LkBGbCRjp?jl|P>|bX4)zdsbaU)o?(NqLx z?y?IA5M(VW3cem8wAi_&0CA9jw4vdvz`?Mfb7mA=G!K%7V}4`{4a$&m*?TrT`;jIR z(8KNWfVnyuo$Vepkm}kI_w7CovA7$Bh>%n)>K?94d-7G(azmi!pH8SCoDRoK8^^USDTFy@R$#pe31sQ%)gUwYp|Phi;w_$AzNTYUzhD_E}QGmY{J zR0dvJq5c+63FT+Nc1yNh`JL?0LwrSqJw&S z?e-TbMS3nv1SN=65UiTDHM2Qd4yM?8;>Vnl%+9SZr#x*&a`4DrEOM<|)4&&kK{f!h z*CVt}3q=PP4%e?YlcucxS*mnuS0=$7heW+V!<*(M_!M^nZ3)Y(p>!}WLM#(2=SP>6 zxmJ&Zz6AWb`Dgdit%T}2`&SetXhA{2)ne`u>wOI4otc(q=9K z%v{ubld8e8YI!_v#m+$pYQ=(9AtY_!raUq4GM{6C_(wnis>ClrvL?u`KwMn>TWr$1>!b+bg3XHs)JSMAGLTYW0h{% z@Z5Kji>6c-@c3dZ3S6aA)&m(<1EiAbS6smEeCALV>-ihuKpYQ7>emP4YbI*T7VW%O z?+AZ?K{?UTOg{s^1ABS=yu2g>q(?F-G#+mMmZYiM6$;KUOn!#&z)6!IdAxP^+jq1l zNaXRECJ0cPoolJEFa$m3HG|$o*t)WEXO;YLSR4sBKX3qxPGRc9xNSzV>YA zP89>3Ck@hu2WRZz^40gObkoXpL^{w0U^g8g1zizL6t#Ut_-__>~)K(E1cQqO>4EVg19X#|H*B##DGvFOo z%^20=%1vJZ*RO+Bd$0N{aUEY31g0nJTB}43+bvlUr&s=OS=THIpJNfzFDWufDvv_Z z`6!04gvw(U)oW6 zdslE?+Y>#w?jVPH`VZUk4|n^Rf&8*gE!)a)mUp%Gs|I_cytn(Rgy|9UdRHFPz$A>c zJ2#(9j~NFJKJ)4aOy{&c;VA1@4%r>X?+_E=8p&$#gb+{hhzCvBWtzSWS-h| z>y`FigMC4DX~VGQQ3}|VTq4x@fkE9yHEk9hvM|Hy$&H5^CIi4mG(XTQV+ye_U8#K{ zT}dwPdy*c3K`wY0z*(hcWH%rcL^9~se%kw^mXC6fHK?|hrcp5~dXSx@J{D~}i}+D0 zn-fj2Y!W9@r2UNb3+1o+H!dT`~{-4-n^)jxV65cCX%uteTgyp0%|5^hJuy4K&Ooy3f-@W4q1f2jHc<=x#1-OD5Ke9=v3UF_-S0V z7NvntWU)P<;0ThA=~~Oz1#p|)8ByY8OD&@LSQE{k!VP|_@SZzMqMfT`Tmwy6I)g1} zu{-*ifGk`xB{YKOPVn|N4(i3&!bFuRux`SLkT4>2#JdtH|6aM6fs*SC)ofR^vxRkHhH1A$49|qxkuY_ti;HS5iJY8evm;*i3mwQdh2T~fU|lGEBkVk!*2mI@ zdsi8-?6lKDJl)LmrHUVH_A%EzQL;X^j4JNhU5cYRw>S<*G#Jvrh7OJ)3T!jRIcFZT zlnTtyx1H(pBsXHp(Iu=*I-9si(KJ))%QnyN0gIW~*2hq1+1BBbBQvU|BB2y-H>B3H zyxd^J#Ywn(hL%(6yTf^jV$2v0;&(c0;%8Pf!Z>KVa|5?H-vPAhcDvUcx$*d-Ay&SC zCYa)8nuLGmT^ZN@q)4k_ywT-U#gw-iSCkj)yZDTiwXa$7Kr^2O0-^ zbR2>1V8u3`xt)_X2e6uCU0~bq__YwC8L9TM{H?ay7_-E(-BH$2-BHR*$Rm>At9q+6 zYi7h-(1IbFS-niHMtXm4#{H`quH9gYzN=; zzRP+Svi*yE^8EIxv=C=%R*SwLw*y;lMC(`RURY-axQLsGJi3wy%XR>e#619|xkfRL z;EDYk<7qg8LXsTJo>L}#f^`~DZyYD~EHOFc!h9{Opb4e|7eL%3j3Za`cGUpH=lXXM zM7r&r_}<&E0kvgFeI`$Xh*M_#+o1V~^bbMkb&&&;^6LU*%ieKFf1nH=Kf9>h?g!hD1W#^8>F=ge zOjfWC$H?IYOg)U>Oje8y9?I^0@g)rbKLt=Fo>lBJ$2%>m)tHjFu196J`Qqj0NgHD! zb54p=oaVq^6-Zpl7aUCLx)2;@H*_D|`snj#4n36t0U}3xIUU3z4Rb|})^V%<)2v6v zpy6~@YRAM^CWT!2#~GI%&E{jFu}4dMhWyQZoq6@fS2uX9|_bu1=hJKO@jliyt879|IoT%>7|CnbMLUoD=^M7Wc5Fm4Xd%B}OTXN%@x zSrd(<*#83eVviS0d#^#QL{cW6uC+#U+l0Z28;7Z*Xcw6cubgda#SD0{C*$ZeW;XU^ zN#WX?7Ck?g4N2ou=heV1xB`&|OT+`tAEXv~y&-S~q=_!fw(8@r(vT!RwdpeaNpnC9o&- zoVT;RkI(UNo?*_GGa~nnnIT`8*a?&@Xggzc&lf(F`ndhEo3~H>b%#=aSMuxjDSi(J zzjOMPs#*TT7nPA$o)qycPt(zFHgqxP>a3N02CdU5?It=O{6c*EGSHnB7;#=Fox~pa zOUQ6cXcF>%B>VpK0sdocaC;CI#q&(juV)}I`H19JS1ZgwMek)-551qUTJU*NOY8}3 zmgqKk7Xm~n-ftgVyy}_>MEBeVkm!y-=&H#?@Pjw2c_v8-jbt6dm-n#r-Q;YV)9leP zzljfDcJ$+@YHoKBE?Gvggx^29=c7%#KA}wA`z34-z0=>y7WSvF=_(~4%}S<7RrCZL zxs<=#A3EN(@#+e-%P+Z2g;r22pHlNI)`?$~rQgEnjJ450;qzZ|_)Bt^(XG%xK+E5_ z_Md^_KS`TgeH&spxHx`Wt$nXkh+CQ2nkqUwIGQ=Tdi^KzRpxQ|-bLBDr*)M*neh6p zUJEL+SyESs&kaMW9Ma&@h`Q(f{><%8Ab3F@|LeMtu|mev(hg$8m2=^SyQo|h+yO!czj7d23U@wOq6rcDe5=pmn$Lg4p(N`L2o;fe@qL?>J_8AR%Jv;9ObaRxm!26 zx`Vl>chYk*soNehg`PJGqUx!J?XQg_oixoJ<|d*D@{9tOxmUjVj42Ao40nFnLUSL6 zMPnYt-apW25RdT2535AG@xSJ9;&1~?_;lY9jPIxi1^-MH-CPl+xEl<4B=XFWIo}c4@WJ@kixKW9a>P`T3Q@W8e*l zEw#~odTL;+ULZOJD)6jq6uIO)v?yA|Q$jR$?utZfZEs_mg`D3Yn}dJ-9{5|1xR)rY za{K&w`?ks%G$K{QTWK|+4THqqia{`6B!LARrp5)5>D<;aejCVckz>Dl6!LBQa+^0eKIm999m{Y{I zp1ge5hxMM%3(&waY19t3yu|Js^>ec+X@3XyCA5|pz3{%)B4A5|4pmsFFn|{pM60upv#`=IZX1J4o-%hivPE* z`bwQg73Ua=rD#sdSxk+*RcwmeQr%HjV~W*_`=2mDo05#MAJXiHh4#WFVRV; zp>va3Jpa++HN!F}o&UZv zVE{^ymka&h_gnfxE0yP3R<4G1$*&#A_gQ&{6eZL{R>2F-HLTcpFpQu7oh zR;7%C00;LbKP!fm*ApLdJA@4q(MG#Eo?YiTNW1_BC^30UvIX6WRF55OCVkey7!&vY z9%Wg{1<-u(!Tf#57gZo8soJsW97QeSGX#q?O@dQrTZl^p_0ELkjd-P|SHZS&0e=P1 z9#7vj+x{ZDIMb_DzX9^~Eh8j*e>-S$mB7Fv6gkng%&DUX^%Dr`3x``1e;QGnAlCCb(Ywvb162LCkwAS*u zA))dSd!NlO6;s|NVM3!Z*RygbWSN{r??tnY(#n}L(0@`w^DU!i+{APxR+Ckaas81w zo=VS6x%b`rLdSN_&Z+--in9ytN0FPWSa~DR)`@JhEwybclMT8KGcLtI%ov3ys^7wLW z)qQJ%E{Jc&j38JdKvq@_R7$15h#r_(Rsk;da5_|^MuC%-wE>39$;^~G4vMZd3XH)q ze?QFi5LB-TWHYfq*34iYp&8_CWqlS)&X|qLLcKuC-4XGyc&5MF#;_zJo0S-Pta(L@ z1;VJJg#_eQ-x$aSmD9%aw4u33o3Z2du3A#y%|Q`npqdh^Iwfry#@mNF6+T6@LK_yi zUv)L)-L*3^lWp@BU3QKJszz?^^7x2lvUWVXzaJzH)K8VfzTM{6bdN<3#H`P)*D_u@ zJo)CWZ38S5`A`NeR`Jnnp z$#1O_f5deF&=9r6fjmmu;8YZp6U5w1(?HDXHo3S!vjaBqtx z$>QGL<({+Rv?nO3=%8w58$n+!!moXWonbtEiPh^9>VyE<*)(hY-0oiPvu9(wv?#Ch zu(IDVZUlUe5H3N%HHq5(!knx5%C#RVxj(I z?f(%Z_@|jGJDFQK{)Pl+YLd3Qtbh3kdj1-!FMiX4@B;_(1#Y?K38#57awriz(@55i zePWctWDMVKHn{}DQ7Gh_W(u0G4bn0(Cp~ZM*%gHAJva>u66>AB@r5+dZ?k`q>5!{0 zqK+w1z&ABL3Mxwocg>2X%V5wP-_Al_*0K9css+J=Q<2Ol`Mf1iQ;{xQM=qr8Da%Ss z8zf7xqUsTLZb|J?Emo(cr%-{8X3BD$oYu-|6%-fp#pz(UU#V(LRhy%#w<<}^W-qz_ z3P*pS##f1&icSk3-;fx5O%j_;O)Ql9;B4)>MygY$A^mI*LvE-F1AT#$THISjBP@u2 zjiVGP>d5u?l?*8+cYnOO>Uw8WiAS&ZDt7mTp?r?3e@--U6p0q=%@#v8W#m*dMcZM& z9TyjIOe=@KYmZbn&61?Z6qf z_Bmc-o&ZBHB@)J+em-+4eJn~*G&|(i&!>Tr^@Ylf*-^L_&~Qac3$$U8btq!p$e21M zKAq$tM-daL#^=z|2{8Gw@H6n-^i4!|g0bTC{+KrC99i)^?Xw!9iBSQ0o%!y1WB-gu zjbS~pBD6XJ$VbNTvVb9xiJdC}jQ-PAh{=>8iE_ZcB6PKqe1Ys=L<%`yZ#3NEE8Y9L zdffZ?nZP2Qks$>0r5J5R#(drdN)p@s#Dzhq+7#DvrpxSdogiWQ@zTo12^L>5lUxA zwLQC6A*Y>|+}%6k7`-+Po*el@@CaVETcf0Eql*^_%TZG)a+n-zQPQO0YvZ(QpK+{Qk1 zx!ELK^!d;~CjmS-=da$bej1)~J*(A11PDAkwFJ1fw}CLPuQDEZ#OTVuTEVKrN;{u$9{I)7G!>eJ&Qv{xPYEGGrq|O* z>)G};+XF)5Rp+P}zq!>3K$X7PC^aS=7hqo}cz?TnS=NPai_&Ta9vsHFuHQa8B04wF zc=9eXk^gSprZguG{^qlszS5OgV>%GtL5feN`#m^=)p;(t;YtD=RfBEYiSrxsT!!l- zX_V84msy_s9rDh;*=LcxDYtp?e<@pi);Wkx5*?_b-zTqX&Pwx)xz!^K{Qd_bEbPFk#o6}_hW+-(nJw2x@qJG%T51BgX9Rrf zd~;gDhM?=K#Q6x|$%saKkaDM`6D4FZMCX?sI$NT84$vOd_QOU{-XZJgh&twJLdO7k zJ?$WiD`yufT3m{+=LHdQ*4LIHhh5nTObaSC0uGBA!P`; z5c)HQ(7>?ob9c;#@d^H4I5XB_AY}U!W13?ADT4gF5$6AaGX;$GZTJlhjUE3HKB&Z` zCS{~#m51phmdd5ZCuXQ7CC6nz>ltq(!mlHs6%r(`BPv>3pd=C;7!yzxZX_I0GZm0; za1s&}BO*}CT2W9?w6xZ71ib{D_^jAuRq@g3sR)L@_OOr>&!(3rLw~|MaEQ`%fnWNc zaL??I#gczl2>Kr%|DOTyckD}2l#ZGI_I`O?D=rkB8!om zq6BwnBd1?o;=PG0i#&2e%IvdqHtV$`jv+09zTMpiTG!u!<&=EPir{!iN-VG2ur`%r zRRU1a!6o@xOnW?@F2^SzA1$)Z$0NdX+0bxSV6|mbU2I=~0aVOQk%NF+*Z5WMG?e!0 zNj9f6w-5U~yyNW|^?AW#5K9#dL~fac(S^8g$K~IzhWfg+&Z5LjBj8g8Zn^1@A}$ig z0LmLFh|Y2(aL^_wW{@Udd?lI+h=IlXN4i{1p3oU$C0siTcGKHd(R0L-Co9?!@8;c%0B3?(8g#bc5Mhq789 z(c2;1i>1V(q6zw4xgGb3A1T2_D$~_9>fZ4^4#X+YzkpGy!+9|pT>10KBfYVV(&E$? z2&W4-_hC?E9F;VHu-|hVkc@Q=NBvPF@?|p6YXi&6(|&U3Ef4jw2<^U|bUgi5EqWdL zUfS_V0h&SnWY%9lt>(A94yrZp&lZ(ECF`c8ezM&@Q2Y%3U@vYoDy_E+yn>mNJ6h-Q1T)_!A%`Kv#R=aFvoY$~bwq|jIAqz~8teCB)V2tW8OzHbFY z&SUC@s86Ap#pN4oxE2#{2%W6RdU18 zrh7R24C@(NjE^@w0$3UoQUi&&Wsj=29FK^e72!d4y-v(PiJWigU$Rly+c%Uir{qe5F z<^R1t1ipco4vY^ebGSGns_rlBY;jT3im13DYm$m{_(s=o)MoG?`l(NGMx0Y=>k((+@nH1X&JmHNp ztq}-oj!&veA(G1|Ff);*aaEJ}N?AFvWQ2j=BC+DlP6l52G_KEMfl$<_f3~_QG}#16*lms8Quu(<7)YDHA9l zp&rQ7t`6#;o)acahMBb&GSg~?nVu_GnjH9ANzMdFvk`VL3uYPvNcYwhf7-<(kk{VG zxa+j+VkXp@NhovC3a%3BoNj%XXFi=zdrf-(0})^9fK-E5MG}zJ=@wl?)b>@^C*Wub z)fOIDNLgK(89qSv=2=1v?o`z4aF!O9CT8BEw^XeH#r`uon<4hiZ?NMIUEkP~EF9nUB``D_9{e%PLkUe3* z?K|I=R;(Jui8IJKd)@%zETLRZ_+>)19*#suAd;+`3s9DZ`nmvx&9>Kfo+ekSr8AMl z<7--EXP1urm|=)#EE|X0{;yvrO_E>v@aK-=)^G8IW*}6#(sSQ})VS!0{G32!WEQW9 zg3Q?RQhO_(r!EJ1F2N79VJ+BML(GYQE^EG|=V7NL&7#b6ahF)opai3=9UPCwmVIYZ z`>apNRDGpzrm?Tm$qHf66D44z?Frm8Eb_jAm0hZ)bgXhHge7uJIijh-2? z5OchhpRN`Wku?KR{oA_gjQ7oc`R#e={!kfK9Zc-nOa8*a1v5{P+d-lyz%uDmJS8c^HF<0$ z-I5I-w3+jIUupYG&boKxap#bIce-;ILKSmO`qkirm3UfP+O^Q=<>3LZ>dTScp-U4A z3yL}=bf1`(n36lm##djsU>r|?O=uH6{`3#b}+IpZ+g(?&R?bhoDn{Zs== zn=&E*;BV7}_^qfBL#Ep%0|H-V8NiDW{n~i4F1#yLHPs7bojs={L3SKN^?Y0)5NThc zaIqf zw~K66WyHl?WfaMO5R7oH0<)(nMRFp+Am})LH^S~9I>`=QkD~<)kp>p*LQhGk?tY9n zDZAXQH=TMdT<&}kxy6ab7u-d@?ISGi8bEJsjU(}O{JJN&Nq9q+!%7_(neBNDzy_F? z;Mu#`&JSS8YweiFfTkgVHiJZpvyEaHJlbQ}ZRfM&#w+}Tg3B_xx!vLz!i712%2v<$ zRfg%duhuxv4tuv~WBTOL`nBv9z%L{?uzn2Uu#e(^!}>yyeU?H*z>;TipAwyYK&H6Z z#3FkdDWE>0n5K%XyoK?_%ic(jH zLUFuA%;Xi&Un;>f4U)OSf6g@q20wlD{$S;>YxtCTXw>J7$3XLUenT z4C6HmkbX1*FTZTbR5p$wlz0Y~SzxOxY`~BuSnVJRp%u7?ZNcpx0c`86`I4t z=f2W=qCW-Jzlq1c2&{kaF%#6cvNHIDoWDaV&nUxR3d&1^l-}sNmL){T}vG!O8 z;*bRj!`u7%?+YG`li{bJVp=^k=XMm=*&C=fZ*GO$a1$V{O0ke5cAk(Y7CbT83$KJ8 zk$n&D1>n$W_KBLyr`hoyvcGZuW=*agDIb5aCWk+=Cf+}wV?$eOyU(Sfj-NGStL^iKZ4q7?WoK39fyyr6nG$h%mL6&qVsv;_#<&bA&=wjvfuekT%_l{ZKB2)u2ku6p15mWCQ_M zsTC^ObH00>ke>tX7%2Fb7|*W)SCf8}obF?RP%gjBap1_WS@ zLP)meMUTkKZOJs1K zH9(UD>M$`x2B(({ocqFtWWzjx$)Sz^CVL>I2_9J&VtzE5do3>V8Odb%J=!YpN5N`8 zSRoamRKK(I&4j@fhpyFZN=Q+>cgMuBM17&+?e7(Y-tP|q!k-YXeflhFUB z&!%BzZt$;ftx?(9c8(t5eM8s&1YM!D{vJpGNEsqZ8YRkFfi28$dao#DKI23vI>AQp z?Lup(gWVGO5#WJhvhyk1;~dBF!!HCP4(?~?Fnt(M{Q;JG9TDtJzH$YFxKP0cJeUEh z=t>XI6gx6vhE6u`Ge(BMlS1*%{CK2D*UGGRQIQ};D^%JbU!EZ*$QJ%LaOa0Ri@DO{D5X+O0+<~q+93F@J#ir2;q5aQii4o2 z45Z7MTn*yOvy+8|ru!uT00SCE34ky{Pfv)z9VDx>8cM<=#thLop(+CL-Phw~L&`+J z5WvIK?}3n~`1kGOHgq!Qlasb4ITuCfOM7 z51uk&#Xrwycaci zd2m?*Ij=<~8YPDqKSiQIXi}Q*3^d8tCL_1mOD+5(5Gqwbi+F%$_yriJhbw}>F%OMg z?Pp?6hP9E#9odo!)X-d`0KDx#9?N24K&%L(%A?AZc*Tbk@FEf(V9HEAD3$|-c0?i8Q zwP&=79F@V^YHGD71lAgg5i_!@2gE0Z1f*_3$b@3`2J}Ka$F23+x)dX(#7{(PyadB%@uNJA$WVP?PG)kQUns zKg=6FP?3TTO)jzjB2fiSORBJ+-#nZ@R$2aD0QxU{y&}J&6u+~RnX!$Nx#9oiPiN|y zpZp2Md#YN`KTi%ow#S#JP}+~#Im4JmK_95|HAmjBt(AYi;E%=6%SmbUY5fBwEQ8k!TsAQ<) z)RO`KPohr$58}kDSc!OL|1#-tszxcM%tJ+bRd=0DEj`vTp1c<4Iiz=lB%K7SFwCSN zrf~qjex!Mx46Q7NNmkJ6`(g~}Ug1rb_F;|n`@9l1X1|v(BoOr7Oq9UV=yZ5tb)Xpa z=V{5;%TG+zg722_|~!=oh|%)vQjoeO7P*aOhc^uQ<_;s3y1kW#N83KrP?2~O4L9S6 zTRu`7u^4B#0juw!p0g~8pbV+PwE3$Q>;@GZpu|3WQbD(y7dvSZ@;FQegTA);4)ek_ zXj0xmY@udV&N824k_6IgM-!>aT1MHcn0K*+W9@t@@m1UJs9%F+ncfbyV2cXrvhq$j z&thTy*NizFC?$A`2(ATcq7(T-e}a?Vs7C3d1l^$-p@*e*ZL`M_PbSgs3OE17%CpR* z%);9W7_H46S)chu8s!V9gD+*CbvL%yHx&gkZJJW4b?DFlnNI6PIgt!Kh>Cevw4K_s zJ)t5;4)?2z^^#%P>M_QMPP4jSAaaHKHt6j@eIy~lG z_l^$1QVY%e` z%#5^zK|~_(Hj_zyE|zA?JL7*Tfle2*Q7s+Z(UU>(RG_`tMoNxdgp!^lNMpT8)Kd}Q zcN@Hks4fsAw#FnT+^yJnYV$>@`8@_A@#l1!M);)3_kuk!U?^ue0Y?}T=j1%>=yOb6 zmzSF+;%R{*XI8U<3v^9X5GLRh78-KO?>g13sg3aIN0z{6Znda^hcSH6p4*uSVUcfw zRrc#KEiWH~+L{QC+6pJ3;RBLvLf=H!7YV}i9iP|JBP=G%KzXHGEjtzUzat3(} z->>!&Q1V3jaT4O5@g3q^D{d!cOU&6N8JDnI$Yiq zHyJecoSwL04i=7Q7}34ic~~J0=Y=9-QD;W@e&PDmLl?RnzE@wNCIT1YFHWFQ@A zqW1n}+DmFGCZZeZN3!4|a9V-|DV-;#F|W!Sy?JXy&= z#uq+gOT|AP+tKCX@a6b{e^%v?UUMNR&yva3S^%Hb}75=T}^LS^?Ni_yT(F_~rg~|j?wA|+nK-2X@ zV|TtjW(qjR)6DH2aQ^Lc5>ev0Rz6&r?n1IzP(&GdJ5=ix)N(|uuuD`Fj%h!1qybr* z&o>$g-XNE=i45PJlHJ@lt*a^avOO;1ED4S?IECD2zpyuM@|~pF_~f5?uL(8-mLl%x zELTyU4s0UBl*R51Bl3TB0$ItD%R3+=L2HR6gBSMxaob(@Dh{4%dEbca=@%Do)D72X z&qu!unt3@+I}MYEiv*9+=b1NXW$1feijPBKk@2(%8HN|+zUdKXgVxrmFMZf@Z2dxN zC0==j5C8tV4QTRnd7BD206-SupXk}2@}72|jLg`HPT1AS*yb;qBWz`C{TaT0^BR^& zF1XKxFz5@Q0d&Po&SJaEzH%*H7!2H&N(~i1j=V`dlusCmo~wMaUJn%8}qanHMK7JGmEi9zJz8zJ52 z-(1t1?Bl}n6We?Jk*@u%u=+3X$A3M{UrbHd!QsDl3^%He*{rgotRGUbZ>aI(TAQTs z0?i#Wup@=BX-0gH-uYL?1ILAuyOQ)hV z%4N424?jyjSbc=@hI9b~_C6+Uju(vJaqT@+B$fqDuL|1x9NE0xL=KF#CL~V2tpCnoGMt__AA-_vkeY*5TJ0jLvt^t<#&s0aH*BrH{qTIS=YETU#+f)rc5;(=xxO z=w_kx=HVc;6FKDx98+RW9$c^>d-u79cJk{)35~sk;9}QSx)Cm?+EkwwEgjl}@_mEG zSNHs#sn5y$(a=|37*_xck~__w4aOa*WO|`Kll1BsVltdDfAG^+gxJ8ZxxpsPT3!*Y zzWK!>$d|*osBu&|xx=mw>8g=;U9TG_3b|$8%1ol&*vH;@+bbXwiJ_n!lNcjnw1~8l z06k^*O~jDv)BP;3(s8L3h=$*Z!n2*WIKBtZZ%cSFIPI4YdFKt-oSuBUkdqMlVNOAq zMb5{-PZ`dpt+Sct^j$(oFuz11)x|3`0I9D4w$!Z_7`YumKl17II8PXzOgReQNGK(!y|6RkqLnwfg@eZTsj&*J2vJxwV*4)sj!Ju0 zF^jR+p+Z~NGLCvudj7g^D{l{bE8@vOX5>elY?1;0!UA`b>-2WOys zr%JXs*Yc2NTH#Brs=m=TiNku8A@(M?8gTMvXulT8cU!u}n&jk@IS8dkFrbS5hJCjy z8)}zlQAn0M<0S;kpD8vBfNN}a1So_{<6F83h;x_)u0My*yuc?T0!#o{3ER_JljsXR z{Y(V!H}a#SfltbB{X1c8lLurqI~IpKACnB30d5}@Fn05>3!zOLM(x10!ki@WmG!Q{Lp0G4n+SNY^M)FRXSh4T9UTJLQOpY`_ZE)39bA(P&=$+3mSG!y9&GCGZ*B3!SQO`a3-0lv3kBr+4d#s-OV(gVa?K3^jH+>}nVvbRs>Z~%T$m^9!api0}gkvk82}b|vm(eweR{s4X zmPY%sz<=IgcXhzHkZ6>@di|aA>R0LheI<>{#|LlQN&j?jPo3(}y6#NU4Itw#i;QaK zt0E#{`|8f4`_=Y!bv12UA3xz9Y@|8<4E3}qfei$h#R$|rJQe!^wpZLOC>Qx-dJ)C1 zEbHB0>(_ILz7`kDeVi*iP%{qfja4Aq4}sOU{qFp(;*1k#MJ3nhMt9iKs+dNH{-%Dt zoEo~LikT&qJUaEfV^e*`6|NBM9?ala4e{;%bNGO3U-p&J=zH(WJv8XOQqQ;Xq=7OW z%*6HGE6Z>;Kg-QHA3U8}c%U}X@;n`;E$u;p!z_@T34rerwd3L{VhXZtoAmszaKsa0 z@^>Q~=~nVe+=S&IDi*mA@xzk*R3Q`uA7Ejj7S>B0#bCE$my~2NBu6ngO~*ms$cd{N z_Yl_OS9Qd!1r;EXPqfzJgx{!uhbQG zHW-feiT5e5h+lLGDlRGq7i-nDWz$#H(Yb1(B3WspqGVPER*i^gqmWB6?MW-EN*=sp z;M(;Izsqwhpea82YuRR4yEJ*|H>I6*EnFFctX?v0 zJ)HW{e=|{H3@1bw7cyFPqH~t2eZB~_>043U(`{=3J17jhloD>SAQC#WEGNYhZEKIS zIwje3S+msKG*pQjD2gsvfOlBqdTDz2)H?q8eRv%g2<4-GOz2|t3N1L$^&#rc3mt+1 zJ-jGAs>X_gn7F8Pb-^p63 zN0ctD&yS?@$LRkbd}!&O zbXHVCOWaAER+84b^;1#iA-!`cK8Dy#p679TvXN=ilS}g3z)p-o5aKV@Cu8Rz@VbH} z;h3B6`c!U1-g?glw$&D#vx-jYTBuKA<(yxSUv>@}u$B#Kz6l&-(U}Ra5Y|0AGE_{p z&gkv)40!R27Y06+VN_#MLAlG}W)$D7N0E9V;*i^5);13qu?n-X`+4}3W;%f$d1qqE_RB!Ahipmc6K zx0mOn8s#pc>;3V>-fgtt83pz%j={K+X~}uk+5yO zql_nH{99i~Y8rwxb}$}+Qqy3(+ zI^KdaDd_g98hcg2D{U61`c6_=j<|NrujS@@Jfrw&Y*8j#@y(iZ4;x}ZRn@=+T!K1K zjo6wN5>Onps=Pp<{$xH<=OXS$F)V?Il)i2QV?3c?B!=d2io|KR^1=4&;N}(F^ z#Y(U4aL{r(TpBTogu&D1jGm8RJ2VVjC+TGa#TJB-=rV#zJb*M&LlTwt9h=z%H7ZEB z&@W1oiD#;^*Uk){Mxv^$EODbT63Odn5VM3|ivX~cNAD6bZGx2L-Xg1(l%wjsmW`r6 za3b7?2@c(FOupK*5-o?}%7cjuLdaNBj|?^GceYkM_Kv&tiQ9sdP7CXNPYSjlKrUzc zf_PA%^7zYMu!`A)6q!o41#doAZ-hw(P`~{~lZuP3zr; zupKK|F-^z^)L8oitXq#YZP;=SvVuY3h&6%NrF54OPN^K%qYS6&cKb9Nxd~u zpb%pE@W)kpTP9!l@;CC#w5DM>!6=@Qy4Qacg=+4JXT&5fkE0tzM|}ZP=`&b2p%O=n z6{aN#K1IO$!50gFn((Q#f&6Y=Wi}B#ks%eRI3>?GJM^7}fKba~fPX`TMD+@LRs(8mH(RaN z`m0&-X5FR@Hh#+;-ICos?*fBOcr(o#KbpVE+Iq)VBD)N^ie*m%&$3;)SKQ+F%L4uw zMzj(h;oRC?xm?Gl&L%NH@x)nNkU)QU%FZt{HUd<9Tnh6<-t8=sh)1|0zR*{mWP2uY zoG06|iQY+db)*J)T-+tXC;8T4^wS-ksbh zc3cTD2TX5?>pZ9!ys~0*vG<{jnm2KEDyGNL6tnW3>C%t8bt8bICTGi1Bxtw!YK7CP zx{W z5Rod)S&CzSDRJNlJDx&^eyfXYkqQ?C z{+|D0qfE=3Z}v7XEA0SVEjEP4sKJsJK z#2L1vy5OgLxY*oaW!3g|yL!-~KzKV++87a(!D`Tx7>3%&NL+`IXVLj{VLf7MM+PqB z!1NtxB%b3c-zCbDuZFGadvNg)>LHoGXrNe2lBXN$le(;mz%i}mgzt8pGv79O+`z8R zEtl)D*A+O0dUMDH0{G7?Vf6~I4~TXa&`c;%DC+ojktFlbIEpgSO(I z(Oehe!AI8pT+z4KE*8ASeSPR`r}NGvPf5PFPPf3O5U$lNja#A6l37S|Bn8J}?1llD z!gaWPvK%&AoCpEcDM|pcIVQ4A^h=awN3XFsjlig|JvW(6YK$>{isoUjNMjm<3O7W8 zvwo7%j?sPQ1x|A4_tiWlc;n>p2+r>Cc))>WqnX>zT-IwNE!1dgwY&*1shrpbRA^j# z#mJ1pOj*M@m*}QH_fH~kFH=X55;2a4so*9S#{g5nPteT>yzBA#>JmGQ+wm0aLaOgb zc17t=v;`G9815JjuifpVAo$j1?>d=hIm<{;fg~U?9O2jM`b%r zqgk^2r8cDQ>af%2H_+Hw44_AV004OWRFVAmy<&f>b^ZG^gOaVCl<_xXtAA92|3~6v zq!rfpGjTGrrfdajV1g_f{Z&p|9WtB0`WI^p3)>hkTv8-+2<0JIz3iPn2Z%N2J8? z`R>1K`us0=_s@>c|C=kRR9Th5W3F=PLlEfy%`~lWw%gT8Ri?Q9Z8jEk?ZQ zgxtHZbUkv|Vd;)kacyAgyJF0f9XDl=oTiwmN)b?yYitsF={@@1t9|unO#Y0_zLkMM zDA`PAvg9UO)`9HqvJ1;MdGO~!VMPb15!9h-3krj9+b3UBv^pnFtd)3M`x>#p-q|7@ z>)*cY84Lk!o%W@-s(jOd9U#8c0#C(Z8H@H~zRZRR*q6>NxeO{1?Gk2{avhaeVPah6dv$`nT%NB4ixhh2s{>pA6JP&N;$+&!_k=GqrlKK(f zB4-+A@G^y}>L$HpqT3XKk6Lq92Vx=-L+Na8($KreGy&roy{Jyx*J{zDQEnc;9o(_d zGI*^eCSG~;oh5CRCUYT27_%`>f2Mx5QdPucnN^LPQNh(^0|?Nzx$TrysgVeF>u!pl zuCnL{nKs&tkW;z+Gw%h0r%N%8L>xo5aYAxh)F|gNX*w@MQxebQ{gcs70j~A5a830l zu9|T8;QDCo$YldM5|MrUX=`gOa)ju!y{xI-&(=gGdWVD5yd-FA(0)%4I8CN z8hOH9Ls6q7T4u$*xzu;5s)@;rGSa2guu@wf5eqTps#BX%rbH44KEcjIHbTfbKh4#* zI`Vi;W{8FT_uuYN7jPY2wL56Ne=i++I7WkC`y3=g{$q)g{D1%I2$S$-O;adt{_=R{kZ{^fcY&ND zkJ*UeI}~&fjQ-7@c2A&H_(Yb6^@|S2kJzEu)zJbwK*Y>i^oy#5-3np+*+Z|}if@uJ zmCUIn-k2X^$kUlHXlo4{X}tD?sPGF==5mfKpjRr7NVip;FrcQ0!}xnE}yDqU(d*Il3? zkZ^63@K{RXmr=0Jb+^oeK=E}Z)&yT}i-g1w896Vm++BQ-7$u2OaxY6`oe#?La`dzm zLqZYkY(x}(O*;Yo`oc=|bz5N{No6p`V*b82NHWTgGMzQ5u#bKDtsK&*wztVfeHC3m z*V@(#mK%VKn7)nELShWbg+fifOs?S0!F)w~X*bxYa~(ff^Xv6QG&6%~>vu@OHIWsd z#_=izHe&wKWOOfX%c%SF0-tMkAjyY))a02b{8Hcjxq~alJM^!DLM5l`6KYu*Q@S37 zuP0vDznirO6@^fcKMf7+lZOBMAVdAX8=9iIwVjo*xcqNp3yQ9_`Ru|Ma`6HcMTfWr z{;6PeiPSS3ubf<6g*1XD)+Q~#w^`mJvI+w6!!OtAVt8yaM++XSwRz|g5Oec(j-jF; zZ&?e=$yzFV1%ta)B{56&dM0d|w*W_;EwJ9;C~)-AI+XmTA4Fb!d!--gnnYMZC%s=*3#5ym|fL(ht1q48*0ttPGG22sRU&9SpBCM_b^!uzZ5DJJFa7{;y6}3 zY#i8jlDY|{?>C1U%e~9udbE@7M85*SftxFZLuB`VNJGh6b#O&v^?8yzVk$DAcK>y- zf=?bAZ=VPI^v6c{{~(L<8x#E3sX9mZ{uXe(@PaBYRuXUnY%qiu%Lne&Uus~|R!a|D z1}qA5(OnU_rJo2{9{qTEIa7WpbO%9qcUx2?cG<~*A~zQczx~CpgC2y}0sWdoQ^$H; z$zwQ_IL_N7;xdgX4B`wyYjyAIBJ#p-Cq^FdYquD{*NQ|Xb46U!c&mqh74LY-U6W1J z)elKjByD(1WH9{U%!X~k4!wz?}#C^qYH>3feJgSbn$1xR5Bo)Jh)Y+bv$); z18Sn=AVOF#XE2(6L82^-k41c-=j%N=s|Uw74$zNUsS*;sMf`#M$KUm|dJ_q|gU{oO z`s4BaJy!qkv7v~w)xW@n%HiTrfqXCk7jNO*dPnfC-zNR(LZwCWeg(-mfm~fc?et2@ z%PG^3vm@|C5x!Z|l#8 z5Onbx9!6$~CFQYzl^}tPEG@RTTL#9)ri7IqQdSB z!~voSl%NPkui5E1`b2pGt_vi*AGAQDDWSiv3BW4>N?b6X3Dr2m&sc$EcgP}gh%Oue zdJ++F0OX>gnd5#jY=fNyn*43;h1!1Rg>SRa9TKft^RBdR zAZ;WbSQBaPk1>Lkb4L%(lY~G&8`+XJebGtgXcZQpr@x)OWGg73YPlWxD_?P&I%_c? zepW7>w~IDhXq(KBQFC-NoVmQN)G_mEk2NMMmM3PC`@FKoJGirn+a5u!!`SXRO*q<5 zVWe)bY?7~c-A6=Ns4{ejg0c`B64Ja~~lo(eJzt<0HWSBMx&HO1f1BV;I)Q8M%{ z`>SjE4T3tp8SL0}zAM)7@;B}j4;+ir_`JA3D_Q(4TKw<*iky|cxy}DeIFW zl(l{nP5?+O_HhHu*AZSk$QiBz;shy^`dZLJgS%t6`G(;U(6(S(r*~gwiG8o@$=C@0 zx*EW{Y;BwZU%`{V=qBWjmbp}GAK=HPCeQJ2$7rv;aism}D{TJgP5y(pqWF()>VIJ8 zgfW>DdW7HyuW-b2C4X){#0Yi;H@8m3X1KCdS2+IH?YCvxxAb)qD3*({2sy0xtlwh$_ko~o#9~VkbvM9=yxY$1JjY(s(P56+6-LUmEIrT?5^O}db5>z zbq~<&)DF@-{n>^C`G;aNC57ad#5S&_-a>A{yKMGgw;5daRl`>&fRs6CH~Lw&ShPJ& z7O#&@Nv;ViFGGY6a@CE4u){dx5|!h+=4FmS%}w4<;`oTdY8cPqMWpLIoZr{VX7%%> zI^5dXvGJQ-0F>Zl8&ELb;sY86h0Q*I$ei((a{7*b*P5IPI{bV7SC{nnYK}ix_U|zB zcOS}c1L2AIYf1nCQo?9A%kPckqBJ7d~$g!-mJf4>`zmPHuHw?CB-le-{DO7y;b-J?5<_l%-(!kwy1O z=NXbI?^*`@cg$RTBVe}rwD6!mS~=I}yZ=jOMabAh|I@er{WSkQITWSz*^lx$EpS5R zI?N9QNT3Cc(fNZl37~zU%~jWs*P^ z424Buf^XLsv>x}Oa@#ULwd9<7SCg-_pb>i#O2Mv-#mzTf!v+r?EKnpM1_uivIJd!P z&dC2w8iKIWfXl+y)fouSqY$>jM9=TT@^phDRM_(-aEz~mFp8?;i(3XX*qr%B2?Oz1 zhq9;CgcI*h{7KmE@Ns^eqs0sRJ*tDUp8prJL^w=TjPicsD-OaCm!D`xlP#^)r5b&< z&_G_;Pxsf{vyW}SMuw8AIHzQC=>s|hWYrXOK26gPua*qz-exV+&0r*~i@szqXH%%< z7LHVua4uzBoB`fz)<0;cCDAc7V@)`qOLjwiy(ZWTPJy(4sj}zJ%MtSC|IF7>i-Gx- zw>#JX>?qpmJfHfU@{-l|$ndj~P-#s+g}18skpje^w=j6XWFVGa0VZ`)-X}ayMWNiNlQE)(?Vl&#d#5GH< zS@J&qR-YHQ6H=sbH@HH*GQAl6!C>E_}A_YC@OJXlUw^b zHQ?o})aCSFV7EG&T=i5#d#SI#gT^E0vOLKrht&E1<&bipBP_-?hW{vuE~tJcEZBdq zcJd@Qny1S3(6D0FZ1IBw%q-wr$!i9si83}ZSCCX_s$YG5*bgBOi_ZiDg=*j!MlyXo zn7D);Q6m1xNQ4kb{sp|AkA&?-fTY;Sl-$4wKaXx|>ZA%;y6tx=uJO4!DQOt8FG7!< zVY79k5}$tQShy?4JQ3UucOJV&+2G^7xk1LPqKhF~>*Puh)tV-*1!4=HW1R;&d$*Lm4yL zA~3ahzV41&4iZV`nprJr8HO=-wsyUp%sJdKMBvcOPyht2fXU$So4UE{b4IkdN0b;v zgmJzRKRr-C(Aw-GJ( za>SqW>+D=ILk8)P{Xe9=V{~Wjw=EdksW_?Fwr$(CZ9A2uV%ttCc2coz+qT)M_dR{? zz1`zqea7gF@%xldd++C2m}|{B=bQtNHhNicV4zx21Ms)`<{9Sjj?2j97vmnud39S9 zr@(KXtV^y=P>6nOc|@s@kkb!c?Mw2m=Z?mD_2+K&GfLe4(qswX&Fn+hr!@o2RUF{# zb}}4{x;-EgC;m`W3~LJ5#3XO&(Cix1-w$%k)sK`ht_xF2!zs4XbmaJ%HAZr4Mk4yU zh!>{PTwHx-qx!(&Z%z`MLfTRf@P1wgoR4Mpi1u`gack6o!B@(p~;&Chb6n#hWLbmjZNGX0>0Vt2ec9+YQ~MG!{&g;+aFwvxX#w_%|$ zRQ4IXSkE|UzZ$kRRv}GOlI==Gr7@yyUrzsFx^ndEkiNFMTu z0Br-H<|3xD!9kOZikxyF{h;QILwRz$(UVLo zmU%`}iBo#4Ei>@iX&3#aiqj#o=t3y7%l^$Qj8{rwaFuHWC+^|&fQzN?M#;F7K9ie( zXEAx{FSb5oCkL!x*ZHck6|}727 z&z?EiV77NnHpFTyRod5I&SmQbq~UDh+g6D-dc};1;mE#Jbo)ME6MWh)Df_u)_735i z5DXF&$3+FpbjsJ5R^4)rOd>Np1b<;^AO=NCggf7EhQFs(CJ?@Uc{n;f{DZ>;+Fo8k zel-&vaQ{D>L`5fk8xQ?|l6Jqkq~jM`zT;IDFAMu9;z!Hf92e%I3WJ65B4eYe*J&34 z(KJ3JDu^*B#^)o=27G`=v-xPM8d7zen%CxqL3h2|2MR4@o>l5*vgOP)sBc%qo;EC_ zJG3u^udAKh0<|&r`Y!W?r;f@q`7a8FLt^U(zlglWqxco zh2t6*@2Cn zcP50tyN!9*j=WKa$aJ(_jQyyW? zDI%8EYFDKgG`krRp9K`~0LP6D=iuA`Rk@Q0ps@Yc%%1@lf*P^Vy>`@sdVg#p%grnzIyvzG|$H2zkz`|+{VnedTCk>zu0&Jjs&+6wc;AIj>n6<(QDcCLVspc$H>TVaA&4Iose*H?(> zW(AG*pysmn@@m@^#4bA51dPJkNTr2?C0 zWU}vq!xVDsuGq10RS<%%LK*=lKQTwTWdlMH77pMD&0=wbX+_4)=5`8Q%aBYxQ1|1b z!%#4GTt&@=?E>)*BG|C^3ANY|euM}G&mG6l&4b?Wzk-c=3}&l< zj#;f!IdA|wNx}swA6F&AVmF<}tjiAY+olx3H8M^UFl^|Xhtzx^xU7&Nah^fUX#~_E zPPuw0h06(*Q_lnXCb*|;En#3QTbZ0s`^)kzxW%{6kLiln0gtsV6_ngS<~6tGqg2r2%iy#Cvx?h z>d(jPntS=4{mhsJyT`dP|Er=mk#MO>q$VhSyQkML@hRp?kC~SIYxgbeZ=Jt7%wa;) zes?jmv#7CNowxi`{xQ?CUZFTA?{|f-4xi1j=9_}kkZ+7UfN)K6U%m)IyLw? zwjkobJZB1F*&(2FVvz%y$(B(B3L`C}Ga@4ByNT&lsyeZDX9y)3`AA0RHFJurT*UGj zS7&zpeoRItf<;^JnvaGcQM|Z7XUQ|SxAGRdqw$FMse6T4;M{?JCxeqO1B7k46M7s| zcguS=GEHY9TD^&LUJH)#u$mV|E$b$LQoj57^2CmcPK#Vi0|x7S_6rJz9>Kxl2kTva z+m!Lx(3A687y#TsUrxb{7XEx4ub_Bt`#JH|Mjk%+#-Ry7+t}|i2_-$tFL_|UI>{Xj zo!$()laJs=o$jdzA~7(V6N!+xrrIerhKwI-9^CDW4ZaQ6@L90;A|5zY%oV7g7C0-s zPORVg99QhLSTfbT3p&M@wX7H-T+{NI;PH)prJl(SwaxHL?}$Phj*K!|!bNNu+euRd2AQ!YqfNy! z)zNFqk1IGl*kxg`+GywCxz|y*k$yLV;d~XQ#1&1M5_=vO8LlhtL2GE~UxQI06VQnW zx^kGcdAcW-4tkEJM*goBz1B?6BfJNL^>D@YmFA8;-EZ2Hxu^qb&{b8Q3Ev9A&RW)ZOKhkzic+1Ll`mCmCpr@E;uCaW60e<$uu9#!EgX?g3 zpm4^EzS~H0zvAEzG1nw`n|{1WZ;CoJWL zdSs4uX2&%ShxT-qx>V*}?A#Oh3|n|J)5^^6`jBR^MFpy12W43-8i{%xv&~E|k z;F1PODm{STA(W4|3K4$+rH+A0D1qoA0)WI4iujZ_8vsq{4VgZ3=~iq(8Z6F;HM_n2 zFriO999`=fRz=ookE4HQQEb=Zh?%fi;o5ojfT?UDd=S-_TXcE$ub~ zji!;<>lAx8TrbPi{lbkaGwvOo38`f{gw2+ar15ee7n-5$yI|dP~pd4 zdEozp@zB3WnXH}hzd}C!%H2_aWNmLzP>b<$r*!zatH}~${C*`_H#Ch930_qi7C(TL zl)XPj*$Y6#1ZQDFBCXnH>6&b?u}5#ZK}n@Ed7)@ldqi^D;MHUN3Sxf;jN-tF-Cxne zs^G)#CC1F1xx6zIecaMzI2Qa4g^x^EFR4>e5UNhq(hz~_ZyL=`2IdKpsP@nhLlaU& z2#G;vd@K$eW zqI1i*@_KLPh4AnI=q!KYbb!PvpY&FjZlm6DBp;L<13YqWU4~XWLMy-4Nz9n6Jj~gQ z&Ha-S64$K!!Qs?|Db*5JgioLBN*+t8=7{euH{z{%D}+KbrrL7rpLr)wM-g*A}){y@5 zZ02uF>;D>m{udJb-(06il`kz@Hkgh_RXfM9pW@!jnkF24jp@BW-hi2)9*j!qGE9lY zf_d>SsPC7O&-kO_9KYadq!n;WqratU>`fX3>Yb6ile->CiF@kPJEK_6r1{2lWMvMQ zu_SF3FNM|Pm(ExotN9RhAUel%1TL>|$0T~((ss7WF7v9Ct=^~-D*Go1mZg&tI}Rn< z!KsDiX=qwfZ9(VKU{_>etH&ym8k0g%&h2gKK$gDZWWs!K0{eZRj>YpyP=Ma|U#6_6 zT4X(4#kGTET(r^36V3E~*V{ZlF?qM^Y}I(pjGUJYQ=+ld7v4{zP1LaXEIIuNH-GP^ zasjdp!JI+;o1ry^C^E#$jq`UeCp-yn3X+Kx40C`KkDqRakS2iXi)JwfRfnKIO;at2 zOdhKP^p)|A^*QpFF8}1iBaN`m&IIR)drOf>I<}xtPm9Wd451{(WBt zFMO6eidwh`4*K*$8n@Y6FR#S5NJ-*4Q&!g(8^6IdZOq3Ckwr=+fj(t&OY-g+)Wk7L zERbcdzi%GiV5FbQ4mvArd%1H;rPT?for|o4@MqR~;0tu)5n(B6Sk^QiXp<~8)1$s@SUDfYqBff5Z8tl>EW@NON7%>N6zLqfM}Rz)~A=fHQX`}FCDA+ zG|V5CiBg)geO8o8?r5np(YXCSS+y-LlslKjA#~45iyX3!#@LOIwswebO&vn=Z{Btd zs;v;2-NZ1QVa>pA@53)l)z9?%-mD_)N^~lVU61i(wKGc+Qv`8l^0~XIKh&*j5@-XX z!YD8pmu{K{)__fjD4C?Ep3<|dBL>29rYBdBz24n2=@W`dG5-43QM zmh!l-O4cBW+3hUL1l1wl<+}G^2s%Df&CDz--hzdx*7Fspar2v5yml6?NF$Lx3If** zj3Mem0~ExVFLr_Ta{_s#3~v`Q6o(>7RqVs|gW?g2xf#WDar6^gtObSp4D(y8M=}rv zh@&aKlYZ!eQpz6|g|bCC6GPGD@@Z7;0L^p?iB#Q-Gn)>g*|4f?BXa{6S@)7gw1xC* z*e}Gnv*>oc8GN_kWZE?6&bCSGAn^F%4UnbvJ5{Da#&NkbqLQ}#)XHi6v_75B5j}Gk zuC}U%F*Jl)(~+9RO_ju3EtV9bUTW2&X~WI#IwhDWf-9ufS7ri~lw=>cE_gbnogtE9 z1#n2YB$M{uKiWm(;qttM2soPc@$r1SciHskggv(Akkad|%fDT`9rA3@%~z_FhW=YP z`5$2L=0>#tHuB;|fAq2cY3H3|I4!?cD*RkO!wKW1kE~Ore(~vVM2I1 zQ)5mRq19A~op74k@#0ivr8`)60%rk`q706ELK*J-_^5LRlai$G5fAGuEgK|wGXg;9 zgDpVKiz{lZGqlhr=~}%$Zh7$=+~+}*54GGJPxVsmLS=zZzo9vq#3>ULsQLXdx-ZOt zEowS!?BLGRP}$*5zgk4B;<-I<4NV9(Pb)AFh=Wz5{nEj`NUL(2mvUyaO#S-LsEZlu z2><*G;!pl6K>l-Z{%@(+|2)x<(YH1>`rna%=C5(a7oYaeIOB^?3tVbGdlm4rt|p@| z%2*eGeCHAbGA+?WM01W7GxQf2>mc|l%d#S+wxp^3KDGv_!h?R~cY3VTf~+HE`}SW_ zV_+Q-?p9B?_y89whHwz|*&jMIi!vKG|E`FFSmBy{J%h{F?>|2S$=84XKL#29H64yr z8@Ac~0~%AZ4df6S!Z^RA;r(#h0syP6kGH{d#GGOZkQz?Z zTq3N>mHo*YCvK1Q&`>}dhc;dV8$Y9L@M6!?MV2m zuZZx;#t))W6QkNDq@|FGm4`t3l)5a2pB>CT!i)?bKROBRdRx4Ew$(M6MflL~cdO}- z3j$ik^!gg>$4Pt*EHa|L#T+5=HB>fP#*PIKSgRMB7$K$C3#))3B zA<}*}>?Wnl`(_xc*9dtI~zc%b%4pYOx&1T zT*(&}3sQ&1R$aaJL?j?hm@rI?uND-A{e(+-aV#h?f|HoTQ6&kjyrI2RCBf_P#Tp$f$}-f$oGZFywiLDt!#Dt@Xh;DnC%y%% zwlRB1TRa+RIls%9rH6eN5G_Oj=T(V%;^w##L4in*lq6pnYmwr`(9gJd|2{z6bY*9&1o%TlK zdY}le3nZoqJ2MuoNN%hJb$HpQh0tFqM8CkBUUFn$6dDB|!|F0q*w1Q|Px5Huf$v`!*27v`u?6~(l`mwQD_x6fOGBH89egfEBL_7jo;9IgI!;g(=o+iiJ) z)ft`@tTYX&bYM;bSQq(K*-3Yt$Fb8%^~i$VV)tMwu{VkNJLg5v2gF-_o7+!w!K|A; zyd2Z@I@ccCZG?oBPSY7(TA$;i)x+h_Kh-+DPfRVcmivg z%li}6DEs9l{ur9KXkNgka35q;cEw~pnlFC3rWj=lYLhyB>06ni!?+O%avn?`@9I?7g#e~3aMgnC<(mk%uAzMBTy|}g!;ScP&nx#jUg`GM z;7;bDWqJ?QjjQsjTA*cKd^qusp~$lu(hvfduRsWmROt9e>U^> zOHaWC!$xA1^~h~!FR$z-f#vSTCy+^;XLhX^g+-x=z@|vztO*P^aTyxaeW!lQJZh0( z4exk5DuP?|+Sfx1LHCINEkS8bC>jpo*mro7M7sVJ<`7}=+0VFu6Zx#wgU%Jx{&7NToz zT8;IP3St8Ap#5qyNj`r=BjE8P#q3|* z`aTZ{3aaFXuQ-XJL1Zp+xKNZ)q9D$hQ?S>HeH5As@OTLRooM1b4?#domg&>p+@W(@ zq^$ZYU^5a4L^T?6XxLgaNysl9+VXvb=G~vM`ea)V66<}D-WPY#KL!>x?uLQ8b5bl{ z*{2QV9;bqe-mr<}Cmgcf`fpEm;7|G44TiMb0EaQTf$D^zlGX}${!vr{xVxiH!XP=q zBRI-{f`EP)`ARt%s5J&>SQw%8m=NyvLX=X?V4XZ&nXf-WuSossRJEV5?*b2YM|T{7 zY=Mwf*n6PEjYw{6ErRdzVo|Vd#({TO%_V(J5qp`|D^fen)&tS*oWAH=dL6$7bR;^u zxlDz|=AX@pZW}8xy0KH2D%h33G175?Hv%z=3l#mB0c$C6_~cwNGtnHiDj*%HnDF&| zJmi5jXxRmt{=BRYJt&(spz_v$$e6qK$c0~73!!N)A%Yrm!i(FbQQSrpY6x)sIQ6!U zV_(;zO7ivg@b#%v*VV=>>;MfqWda>8R}1k}tLGDcBg*(KL<&sJWv_4vai@{Hkwm6D z7osigNc4!2`%7v4ap`*-+oH~KbDCV$_FYm6wa~IkP&v;H%Zvu85MDW4!@2<6L3(zJ zG7Cdyggk8OAg`R+_j?tw>VdJhL_l%?z=4R+N5LJgO}$|!VM!|q)hq6(LB`Gte%?JO zMH*y5^pVOaI3ZV}-3$&PlvJ2N0bP*>D)z3HSb*t6z1n4|`{ukwCseiCwlCDM=kOSH zRMG)n)U=?+lu@jPh7HWY#w_#X>M6@3T>Std!g2>c*m=rf1L<{w=iBzM1k(|}*_Xz! zv1i)YCa537k!pBzXPAwt9^@qfwEGEn&SP>4QPBpt&|EJ zZuKBn&-VkC8JYdQ#c^`uhOiZz9cnS<%b^d!uSGDNz+^@6aGt#w5I@ui3@Qw8 ztZ}ZbSwQkRne^Z=7zzkCXL_kqM`P;yb!c!{}`v z90uN-9+H|EaSD(wf;KbdH8C}0*$dc?a^vMnsZCoqL%Q{Rz`P(i8wEfu0*(82bA+^| zosu1DQeM`=XhHvFcW!X{?#}{sbV01d1L=^F%?}C$X|d1lAm~nf_x5Ad#w<`Y+NU~K zr9tC1W3BDJ{lRf;%xqdoROiz1vEt&G5gyhD>-2g^%7_M+e<0y)6)5fSK2%1co<7m5 zmwQmgk0}wqg(5E77pI6p6VN~_DA@wq8Tta9Fr!L$+TkZC46smFjn5*J5LHbC)QF#3 zZd_~x?o_lMjhM$mdbU6~Br&fX0IcK;c=rj9^Z17rjxM7!U|M7Tap5MiMdA3#z|?(_ zrsH)@xPg8L&O7{{AiEJr`wikNz(#-jTUP!nzVBe`=1%+NhvDWfZewEm@9E>hGifJcZfdaV6YV<KZq{t7SuI%WOPbvN@}cD;vUsq{`n{Bb28O&f+fhy8eo??H&= zqPnE}h1jq4k`qrMfSF@pvA8np&OD1*GJ&b)XfqCD_LR-Y;%bZ)I^+ishti^fgoo}Y zL2WrR3Sz!3o96vvrB1(akhe)Ib@lRU&96SCy!X$@voQZ`;bNK zgoJ;TZRbYf5}4?W;ce})M?40;yiIj1-%kBH zJ)075-GZv~hCL0B07S*y%n=fIlM1sy#rTPM{R*lbfD;dcbZs$!PneY0dxRN;zbI;YxzKA3rlboE zTc?gCAB>oNTTY5dLT2AARLaYZH_MDzB;T$csQ>$I1)``ee)F8!RP*dSdw= zErR_LqSMvD&rY4w^0N6IV2`5(8LT^tBc2hI$C+7OKSP6n~;z!n(7+`1>UT8Il+`p zCC3au3+$K(M^O%>wTl%&>0<|SJRz}F_4vci`3Yd{`UDk<=ga&sfjz5#0vCEmnuzOH z)1eOR!7!x~v)#L70G7Y8`rYRY=!hv(DTM5@EGD8rh?mG`F2LCKnu@x3Tru3-Hlc^0XTGNCMJLA4ovx1Y8PuBrs%o}p03sA6cIA4 z!CtROTGCl=KT*c2y>JHR%m`m4n`_)-ZS6fFM^xY1Splb@s%<{%`ElGx93R_g5z_v$ z;~(u2k}X(o^{r)sE{yjDExt!DIYwS&$ETP$?XNr$pfL>77yu24i3hAAOs&I8hydA0 z4M<*nKAZe`jS0yV`CI&OdCTTtw&;SsL|-6*-B_nDSJ+y$JDVyu=Cw2(I}4u;wd=gX z4h{yuqDST4yy0baq+csdf$f%wN(6QoLFVF^4hU{g=rkETIq*4f2OJka19Ik)I zA+6H9f{C0JRY~8ZncF02TF;5xdVaTYWAvQWf-jS}hn8`ihoeYm3UDBXw((E|=R{|5GiC7Bvwh!~IcO*NEPPlr^Uz)N+Hm(O>bZGl{on)iC(acuMKJk)HMXSi ze~WW}U3dN`&ix5*j!ge4(y9C_!LwME@{*f_mly-XE`B=1mtJos*9DhXKpTQsQ5xG` z(?{%*%pv#G>H2`sqNTu|kc@yJcCNMQA$0 zcloAC-o5CSr2}8+!Z!MIpxaKhqF^RSl>PT`)0kf=3VJ~nHw$|!Q^0HHV}~-iJnvQD z0Kt1$MTiyi>0bC-U5SVsmxFI4vGSWO1(LjW`(i(iyYX>&`*q|6MTjh%e39}J4kg|2 zP(!*LVM*S3TH+1L@yHetS|Q4JB~eqgL7XKZGR_he$knMmD+H>C$j%dD4B)l)b>5VtPMlCM*QiB;1)l+ zHS}#K`n};8N^u7Pe2!@Le9OQh6TL3S7)t~iAK8W-6pmJK*D3f}fmf?Xuj_PC*;zOY zJfw+>iXuf>j#ps7=>b6eP-2sg-3N8B*0PHwGV`ZIn@?fU!|{7Zmy^rwN%peQ5m%u` zGd*Ma@H3oW3+O&ghhJaRj;sxCAG(QWp?xL;`7#f3{{}^yg<1ViTPCK6lzZU>m~$;p zpm-l8(#@jTq8UUZ#Bu%8+0Y`*VP+DRn;~#pI8JJBCge}5iZ*JFFsVSfZ4{KO`Z3^K z3zXG*@JYqAx0atmw#d78Xma)@LWItU?2+DGVa{BNKCzT9cF0hNrt(A8O?d&BCnByz z1=L@GjK3xKyZxmo=%-FEhBX#ikvuP-h7L+dP5+f8mXPI3u0}D-vWOxd9oKkRODN6{ zA-?-E^;xsD%MbF5p zbY}if(OFIXkNNGFG<(V(z8r#Tb*53<`Z~x_7!4E?f4nzTKtK{%I+pr3p%L)#w?{a5 z%>p6vjk`h+AoUDSwoRDCIHE}-8GqH=CrVBEZpIc8l*oQ0a(ngb@rT`MM9rl3xU0kp zu`#!|=Z8gU0m)&v>l#7I5si(}@HpciE}Em?4fu&A6rK&!RFpz#uCqudm0TV>zfFSb zqIEjr_wra{UvG*LxEBIZoT^VCi8&B}kmWVED%N;-@v+9Cmg<|ie6j=i)f!L|keiiG z3J>TfQwlS!yxxgW=Q8FaC2P^?$H6Uf1~B_6C2HOjs{WitOFKsZAGQ0omZa`%F0n08cR*B63^KyUTi|luL zdyp}cNMmPKtkt@ya8b+(PiJlKg-6Tms$SH)xq?dFlHGC?^sC0g z+H%LsOUnUxGQBz-O2ay(<0XmT0~!!>kTA-mCCf9nCLvMkBV#oxvyD?0VJ6E-342;> z+=~@xK>$0@c_v7|#F(Euel0P>Q{b?5IUUZ7yVI^|ff>G^>TAwCeLNiUUQ~(L#UUn@ zhgh;m3G&$EcmReU*`{9jFHnBTGY8O&&zWZ%HK9D+Rqp2Wi;Egh*%ed)u(GmVbrhQUt=C&+zkf+X)449g z5HOLC&mi0G z$a2*I9s4XwOPLw$NSKS9Xt_M(aypLBc+d#E0rHY)^Y%n=yj=6V+{(p=@F&y2JD0)& zLMR8kZ_)KHa10z+KRW6<`OXI$NuDfjz;BqRVa~pC{@zZ@d?`8F;nyG9$b7wI6|}P_ zglwgAKQwomHM0GXd^?c)Y-tHWj)VaYhsOlr2vKwBJ;6||v}AaI#}|*4%jymsfl1x3 z#~Dc1Gv~%yR^k{4WV5nj!*z{S-VwiqljeS>9YHZAKeD*xeG-{)4SYZ8kFt>p;U&3G z?wK$fC>OJa;GVm>7H{%?^9S~GA2#r)957>L#?d%B2Hf;FE6(mN=G*mFERzk2RPw8= zo9o0nLpEV}aJc&ilure)F8afpzC`|8IQ=UH_n!`yu5+ zibSk$&W;~QsE(L$FbJtpMxk@M2jQx9fZS&$5lfh4e*H-#HnyiOW1XU1&9)@SjAUby zC)1s|WMyosb*6rB(TOFdu!CkyWA%aO1W}E;hb|;l1ram%2zkAg3T~5n(R9l8UO=Bo zfzbusXNdNq`J1ryx5Sg!2pke+&~tb#wV6nQSVzMx8H;aOF_VBQsLCc=Y%gD2*P7R% zLiCex(#jnKQ0GdZAQ78s?w#Oy1!{feS!q5BXxK@}rNp8czUn2AkOcOGm)km&qz{+b zHE%W>*P*PL$7jcv7nanQqRKQ#g|Y<%R&LU)z9{X{iqm;BSB-nZl_zJ1c+{Cdewl#7 zNHNtZp2J1z!o#PwP#tk3pnJUJVTk9fri;$hZ)Lj|ycS8mT3d^uj5u<7GOSO1*@Acf zklr}9w?_rPW+!D|pXxtny}x-j{SgE)w=w;aG&eN1`{UuLWaeP|=pm$P0We(6%;oljv=K`ukvH%u2ybKM3r5hPdiK8L23NA31L3iFW&kGs+(RTB zz8emQL65g@MIyM1WQI!UPuOB1hq7vKbDfUHXwGSnW&x0vs+5+q9l%-huLAJ%UD}d{ z#%W!c>7`a)QY&K=*2;iKSa22|KyoYPZm%gkP!9&CV7`7%%&S24K&^ZFXMf|P(BL)g zEBAl=b$^5VulpPSz6H5|-^PExjQ{f`MEtvu;@P<)VRi#3kt5p+yfCqi9%20)1>%3> z8WBKd=IT<^rM;c%aKBD0MfF_4Na5;WSwLBW6t{_?c)2@%wXeBq4Q-5 zvmfyFD1Qt*|MMsRpFHe;Kc$qdsp)Q8w9mJUH=xDwe}#8S^(T-c>DJ`uQL$SyiTjI| zYp~^+GyhIkgIGvw^okU?b_3{j;#9)>@+PKLXZZm8=PRfv zPp)8nT|Df+mYaW;wYNuO{V7(4;)gt?K@`*h7v z$^9y9gib^MSSKLETiG3R+NcnAABf9wG4@iRes0~u;s}2yW~&iCOe9Cfw~DtU=C`=} z9#zCjx0n$8jh+hxK&@EAC_n&XE=J`D&dGX63`iY|q<5I3u~V|P;>!qy>^HYx2jX;9 z$NAfW2$(n_LF4CPZxe-7&R>N_8t(>Er4x*={dg zQjY6?Dski0vh3!s!@i&?KQ@pJCCE7-#pV_o>n8|qyoWjV^#-wlJP9TpItXaI7Y zBfhIhe&1|*eV5dm_=fg`F`%Wrk(z#JayLe?NT}yqHD6DXtxoylMMB05%`Lf|HhBSj zX-)6t8wwj46G%ont1@@*-K=okLjb8B=A!(^RPppE5iS2Mt@qgVX9F#oH@62AO;J&%8Vfq$FT{CkoFZLO@nlJ9>RJN#B%SNvi!`yN&; zxm@7WWgOqir#zUY8iGkg+0Ax9iOPUP?Zxhac$|Owl+$X);fUFK9D2Vqtwvwkc&=t;F7St`KviM`~)$H zR(19`bqjkqWoroWgQVV7VD2l)Y!eHoIT z#WL49)XoR>X4Lc5hEr>Z0~vodT;@eZ>o6G0A%bM>>42uO!A6y#C0mhb$wS42&5nz8 zkd#vOcg(yCiDjkwzhrbd_`1eAO=&{2JVK`4P1He=RAq$6l>5}pelL`lgfDdK{E6n# zhGdymJSOK1$6mhndb9X$1E-qCGA2oK;2EQ(`$ESb4)INmaV z6v+(Hou2shv2BAH*#V?q*B8j{3@o!fZjAfQRuSzJ*S|MMczkSXjx|j70KpPOwO*6c ztEK^)C%V{v2wd`maSt3cAM}d1IrH(ZdF3~=xOosHK9$J(#$$sO51**Z74W?c599AK zU~jVqk*<6;;*T?6(19o-h=oCv}BF z>;kXTD?@LNpDm887);u8+pDa_EE`l}<~?-RadBhKP%OI|8`2!yHQ;$=S1H)Y3H1B% z2aQ?#S@KDlueKy(2b4Y+M8xpq>T4+aYypFUiJk#dZdB5jTr7dT@n$Ja)`a!sh>TCV zTN?p$M=ckWhBqs@d7a*XrPEcIO8G@#*t1j%4D#;{J(`Eg9@A178Ji_+NXIzp3l|vAp@(7y2&?^M7!&`LAW6 zFS1j|Eu|9?#y~2`IeDfGnSY3kfSZh`@)_vdN*v)ZQ9=CYMxrs6p&cEyQxP`0Wka+r z?nbne1Y#&OJo&{yx{tw z1X+&MKuWI|!5s`$LB+_=KJA*&`QX_tLH00539Wn`oA_lN=#5>{9@LjG$BO^C-H#}k1FJaRHA5_a85 zzf1}a(fJN$&R4arjPVE>T9|=Y%z+)JVGomyDN@Ib zg(&-IVcn0{at9EfxR)oaF$9w$S{lb2Ngsj`gBZk0nhL9@XC_^F?;*xDA7zCAHH0Cu zARfWNonGq<+)~qpOyiY%Wq)c)rRzOFn*OeKLD)_hClH5?h#R|@icK!_;i*}v$g0q& zFtkjJ8*tx0f9469@riTYrFL{*MBFqRUU#mv7T8B$99NxH@taagEGRQ5DX9eL0h`DG zu^O=*PV8MODS}#Q%nOx`W@la&e^LbDWFj``s79U{fx*8^HbnIct=&#@I=05Hv6E3} zNK>`0AtngSD=8xswj<>#soI3eNXS}LA7B_Q6<6bRfk=5xEEc=Yx({Iyk4-k*6Ni zR}M2vK~LyYsC92DM&VZuZF+t=P#9QJ_{{}C?Pbx+IOd%bqTz1*#?p;PzIEjQ&-IlA z+EFMJyV05v34^war*t%HUBI# z;HpTLNPTsV8M_n#GFjsBW8Rd03Qt12K?Dh}_F8ZIn#@FKU@YyJg!HwV66kn4d1$?s zYS8s&iffF^!FztM8c{BrRHQ&ke4m1FuFJ z1wy$5DMWJP2Jla4>FM=a(HX|}*usvcL5U>56mkDrD5|o6I@%OypczOHhA-n8)LtYR zFE|BFUBQ{Pv1u+&$N)Q|x)vCd9Wt}G_*cY)AMD17hdNV%UKIBrN-3jBf4NkP=Y$+AHQbXQD^)Hm>W~Yvj@Ol>i7asyl%iN;ADP?jr$He= zoe;+4Bdk*v$|yGlv(+nqxa(OPGXXjE-%yGeHdl-*L42(Th&&K_8@+G^P;bNT-EE)+ zI@#siu?oEHQsbXe$14(yw$lbIse$j9MR~6BzVYd7Pfm8^Q3Fcd%eQD_>BMikEZmRM zWZ+n?bgp?FB(+-fd**r}&@(s(rHaU7c~&bN7sj9O^RQcFfiQ#@jR))_Na#w#Iwx0# zx0-|sqSXVYij@fm5gTJ4`eBh1#M>z`;2gCa)z3-M2XWtL&dhPxcvi2yAsKwyfDhN1 zdaM3loV`a zTw~5P=9pvrATun#WJ@f+KA049w=I2&oh_w}i-V(e2UTByM%R+M+jd3)+ElNxa3_;K zrGc~}w#RZDQeAZHw~)LvGC0y%K>CI_{=SZpL(GBTK(LY{5)%LPX>fia?-4i7qJoCK5$cAyF(UH zYl?UzoIY)6(2mzKe~QYDv`dk;0L7;1JAvG(0*&zx^pQQedGNWG_l^Y|GbMKh^5K)j z2A=75`RG~nGYpQUUk;dYIBC%`hX|>LArUgl7D`N9!}h;s-$1!stDa;Ya7t5i(y#pX zK$7F(v~~+6ogcL3yECV|zmL~^zj5GNoIV$^rGAc6Nuq6{?8f^if;ryRB$Z({9DiBzmSgDmW( zB9YCTl+KCpL<>bESJO|AyR~B36G5-k*QBcotzK-nAC8xY%l6D#UaQ|Ikb1jn&_ai_ zYCMdO)LYYHIZbS=T#0&}4?Piazj3mKSBq~{kIHgd&FbEU?jLI@x~iG9Hm<+^kqaeD z3}H9^RsZxO`4K@XmF^HsmYf&OKt()R z`=P3$WJe2th++7T6I@#`_y=M&&3#a>qwxg=I1p1h`*cmng6Du=BYN^q0=C?jgg#Q_~uNS z%h8ciN0+%nBh<0IwR{v|JiMoKIkr1t!P2XdI*kKOYntLWf5nYAR>Z3{BT>=eGP;8@ z?(&?UgZg-7cIEW3zGY&pjgrA2y9~3I0DC{^sIFv+X&IH9wQ$VUD89BNk1X-AL==#Kh-;?a1q=`|wh0@=+xBVez>=jo zArn&q?;%KXtB@5v;GcGU|GK?z!QJe_n<*u_mjGU*)W-p zAX}J>hL%SKUy+qZ68}Pb_X~{zB*sW&k$P+{ua1!OkXS^X9lzH?B`Rh+F^t>B01yFWn&4nVkWp^Ie^{LakvBEtc6#72 z?{UWik2sQ6UP6JYU^s&jTi3FI^=COiHDO!)C#${t@Y^{K7buPowAs@8bjiBSbz$i0ISm5I)erp zt!9^CeUs=dg3=;FmnpFjZQXZZVSWC25(Ejnwq0<6A>(wc>=I%&d#XU`omN9dW3SEe z4oz(fFDQlXA|~fbvL(Ne-nm_)_S!S6 z2_$athCxYt8+-Y|R|gWl8+7|!K!Xnv#3};p$5(LCh>*(+%98f; zR|WoXu3yhMV%zoMzsIAo%K@-1&O5E4yOHifxuj0sZ5u%(d#PO43qgU$u3~;oHv*WJ zOIz*dla3nCD#_j*wlKI(MLB^e^oFZ2ieC;KH})MUnPDMQI`X9zQP$-=p8R%`3xm7{ zmL=Fko${e1L-@4;~fX6)70z{f8N5!t2L3%h=Y>=$AJexX8NN9ys;a#!t$XV;1 zAr{bxDGkwE+RfO7n%E?t-*fp8S2;NH;qm-W$Ry86|uXnD1j* zpL){K!0(xLtaUWzQja}hsQFBx`&QugZh0`` zrAvz*UOIk27x_PXFhBZN=9@jUMZfC0xAKMRy12dqvW65Quebzg0vhSK#T5SZ;lU7t z^2bt+bYn%(7FZ_-_805A5vUDVvo!(AZbh`nu-?L@vG-U`H#Zb*pFlcgnd5ik_8q9A+E+o;(7ZDL+c*_=L>hYZGcwwiMMi~9^d@9e#uxh|$AN<rq?7KX!M6+k@Lb z|G-ppne2#6zm!t&asO7v{0#_YuWN5X_rD}lzJC9QfcC%0nEgMrtXEl)Js&IaZx}Je z0?W}~Vrak3DS?3Y$;cb?Z9=NIG^EHUNGO;#5`20l=l-UXNNVLU$2HJsd0eZsr_J*t z^`7F1(Y)vddjO~0Jf>3;_|52nNLk{dy2UnCi3XK~(mc24`+cTrE+Uvpz0Jv)48F`B z-7+zWdAd5GnS1(>r%1}84mhkz`fRWt!2_i2c@fEo;2!h%3c_wogsNGRBX|Mh zv%MDun41HoE}qti>&s%lWY0;KiRQP?*1JN)TX5HZ=YUw1omp!bq)8Ul{XD9+Kpf=t z{7Gqos}%=u+=fhYD2euQjFn9X(ekNxsl8DAA)z1_Y7i(Aw5Fe>Ob4ipivMl0Pk6Ai zfkjTMa+Paa<{$-T7IpgGkPC56doiD~6f14%g=%;ST+1T%RJLv|ShJ=R|J>(0!WQI# zPf3*)-Jb0X zEA*LG-G^(SXR?8Q9n+lb)1*o_E_|s)GUPwhQuWq9q$I?maZ=K2V*;~*QLRK@W-fHPv~QDk3fg-wY*;0|0g}1Ig5+&{bqSQqqdgO4b|2^CR)j#C$zsZ^w>)^RrB@ zb6oJTL)(&vN#Xpl?SKZCil&uJ7D-lW*2I`6KNI!y&%6?j)ZY9bS=8kJ=YIU3jHAe} zDD}U+)f^S7t#;|5*Kbh-P`OM>3U+e@ZNdG%`5~JGMS&8{Myada$SbYf#dz~Be{n$P z^+`S@OJoAPxrM$`B`|IH}dba06kC zRGXA~9Gb6T=QdAvYC$}#MyPpXwF7}v$mFfQqePV=P#x=9(Pi%4RORkBb==$^8-5yh zYK8Axqe=0!nIwRo29x{(rA*qf3cKv92_c;%qFxj~SQudDZ+KsDZFp*V`olfkDznNM z{F-IE{8gXsZv^ju?+<<}Yb#evYsY_`LZ0$G)?XNv^;;?#Dcw+2&Ky|zK&5;{%0O7< z`EJ{&zO8hk*Rf#A5BCfK5MNZd21l>U_0~g`q59wO5#@1-E7?qv8<63l<~@=-0kga0 z3ex7(y%H9Ew6^5!%5Aa%hn%qjr@8*$GiWFMBqE*OBws{1E+2+v^hQVIj;3D(s2~)e z4)JAglfMA(Si3k|QL!WXjzKl3`I_IpbO+N_qd0{BzMYaf^2 zXz&7PjYlAq35;{QU0mj%MhV>|J+;a4Xotg^^gGlITga`J;qsSe8rzxA>GvUf+_` zbCEJYPVx}H3F?K%9I161OcQ1zgWM5zswE;d!59|kGiOC zI@!mmz|n=k&4=eOvTAkWB%1iy|ruI~1I%$-4@Fe`s#>VDCfzb@DqdIvi zam_ks2u}L19I*n%*T;zqGzwb{$ zu>n)z$K4dZ=&9^gu)uM+2IotqLP@BmdvIZ&?xL+x>lSP3!CD04?zeXva|-Rl9DcX< z*Com5YY{3ldEihT2>hT#3AgM+jP1WO$XpU7n^6Ik?^0O>L`nkU2BZ|mo$qhoeW~bk+2D)6rI}K}AWP#leVv+J&PP0+IB{nLCW(Zta~!qm2=?|W zQkeFP>8{fkF+6lpaZ=Sduc9TsUnb3^FN{3beDa&84bTFhy3wHx&2SQaMCFIiCm~*S zn;HZma!=)#M=5EXE(?*+1+O(3@QTC!?7UsI zNPGW-r6l~NbXoJYHCF$ctpCR5{gVg&wKW74_@x!a_!<6lWAtO1f3bOQ+`T}skg=Xm zAZ^{2xGYkEDt4_R4g#0X*9nh6>c;vc48%nx#QlXoUMH>yVi8Hen&6618>Gfx`!Ogv zB5{v!h%h>#E_X#qYgTtc?NGyDxFJAL#L*4YaW2mK(ztg)nv0^Dk*O(NHMxUp?_x=> zPpI58KO$7M`_$Zyg41_lT62#nSDWw+5y-ZQB@s~xI?h+7P9{@{Xu=)Q zr-{{aDUm$wfe?u!eu&|uPF~lRD}vS4&3bV2^5{>e7FPdOKI@9<@%Ex!Vrwc^zVQE! zC94g>#)}cH4MGlyTjWd~S%b2>ZA`gT>Ftc*ZFQsBEyAqML{I4P;Gce@Ab7sF&lpOC zNTLMJn57vxDOWcl6!1>1+TthLusxK;6#ySe38~(-Xqi3}FjmmC=i$LhB5Lph(E|>7 zGujD`1U4Gav|BTuon~nM>FsIf%!oT{%!n=PQ&q~E6m4??jc>1)pRLfynfsmb!>Og| z+0)C$o)HI6wlc<*6Z?T)%TK4$J7)OU!mXp}ne$!HF5{bCY|f-`6_>akXfFTG8EgY$ zs%&M4Y~@?PK?E=3hlBvyp-D>u&v78{W3bRWUb_R)YH?{~aq*I@AMOJq;djb#Se_hs zzo#9fln6315k4f*Zj()tv+hi^AR>GIuM*qToMc~B$aW3pj^rShU0;At{!Oa-LM>(` zL_pmGce9|5+|ab_TLXjCYV*^ETx8b?twLoS>8nJ`a z+6ZOl_-5FEchofKU{GL@HzK+FZUE4(55Uj+bBvPME|iwK(mHgJ68K>hs-T$xdV{dy*4& z4FVI>79cK0G%>)`OhAjvCAmMZEra}}-t)9>qUaH((?MuhzqvGU?I8|S@(E6{5-I9v zLQ2bHn>K>ZKdtWU88N&+?ij(63~$+i0;a3f=Z_Cvmqgi+u>Sf?xB7*$o~qhP%XOq0 z4fq&0h+#Ej`8I9R89BcIwd<7Rw_&=6Ah1w~8U>3OTr);a&NSV7=A) z)662YtC8y`&aovO4b~AYYdpx-5~m}5n2dIKYf8gjeLKC6I!B5Vs~RIs4cx-#q}_t) zyF(bf5qd0?U^W6*Y|cc0v6X~BZvay~p8dt<_aCCRm|YX9^j++{Z@~8kW?>+TcL@tO zu}mprnz3j8 zb|9V2Z|0_|Mh^P#@>)p)HPm`jjulF2yGhpN$>hlb{Sb9{tH`xW zi2EUI8Poy~n{lK9!fN40qhk4!GCxv7C(#WO`Pa6MnsVUhzrzn|=l2@q*QjeAjsH+O zoIu`4obL%J-I~;vYBCe50%7HH zrY{~63dW-`T(v_$rir_Nm>3<8yQaecbDjq|kG=7a-Q>)lJbF_Buf(KwDuAPZ)+Z&VCSgNFHvu)!EhXz$LPcE5h0kKq!!5cg_}Bv=n!IKW)e5_QW-TTLlNDaU|?GMDsB2 zq0rXW%yZSB2rvR)bu8=>p%ZQ!%{qTqpOFV)f-|e*7XqnwD<(<-52QY$hLP@!Fg`b6 zOs(LsDt8ImR_r$Nu9YoHOM;k4FYO7&)4NLB@IQOf4fFr%dt>u+wX!!!$Pl>?^wR6hCJ|9L2vok* zMT1dCvU;PvHwfR(!nor;(v!9%T~}T{*R6D$aTHNRafU8eX_Ars2wB(HpJV99j+JhB zNnx9l@T?rdGcfYjCS7OOyC@^)Q}Ez3jH@H{(d@HGEGzfi%^{_qU+ekCwRxtVydZ;0fzBOs*-?G@HOFR-nQ18D!E{Y?k2j78h( z>`6B&!cuT!nP#(_AYRLhB`ZKox!{lwi4a%fub747`Y{0*?Xq^B+d86tDKrF8rDXh! z;=@VzB3HX^7PJ(0z5-593x{=Rxmu>Ms?bl6N%#ArIZnhsK?qKEMgpAZ(}5tO2Dxxn z0QOYSqgOL)!Axpi#iS8N;ump_rO*rJ*hEI`2+nC&RU&HzzM=FWp=0ID6|Pv~f`{W~ zNr9B+X784Rki?Uha8oMH&?(M+GOW%ud{-3%{Dk?_0{MAh4XMMo!VNV7|C7K-0%cKt z$C9l9BS(=3<(C!`f4~}9NcCXg_1NJVJ3#|Uo$7h(n&6kBSG&P7&b&mmGh9e*CvB&X zKRs&nO>OXxFS(fdFBZUm&tdt$>InR2X<7c`OVRtwP3Q1S(YwaC%m>I4PI|V-cC9>| zn1v8cHT%f7aDc&?L;;_ItX25KJ(!Rp)NPI*3lC8u{g7=lCNHjL@(v+HDSDX93z+8d zAe2(f!Ivwvkh7DUYgd>eks#|R_B$D-YC+R;+|&p*qR6d>v2e22H5G~)>SWiw1*K>I4jv> z@JWj0;w@s=vvk(N@SS){cd%M$`$Y?SeJXbZf zwmwH`#@e@fM4#S{B5|^v!j(Fl*01%J-hI*JN`qhf%ax%{<0bHB9IDkcP#QUltD3dS zF3UaIuXe)lihc2U$$6{OSIEhUB<8|q@Tmxh7(^jXr&!`{<(DqHXKX~u$2d>Lh3`o* z=VF>SjFj@m%)MG+3ZDe-y*a90pO5Nj-8wq-aX{&klibAM{}-c=Sw!Or(Wx*xS)XR^k}o6xY*dD=9l| zvWlmDTf8S&q9H28@vEqXv17Gavrjx~y9BmIIGyJZ3v`epF1Zs!mK%)tJ#i3E=r#Hy zS9dfUy1dvH9S2#SABpo60y?1;ta^$5H8 z#Rv#@^Y}w3?W77~pRL>JvA-+J`#!44+@ly_95X?bKHS6^YO>Jq>rdDUFj9!L#X(>8jI~X#UES+YoezUni{7kU(K%YCrWvMPC z3>mV}z=GyXV?gTB_T@LdzWq1g0uLHe06a2&haV2$0rLACTYWbG&^Cp`0`_cJ7telY z`D4D2MQzZnNEaJ%_R_?bkxW%AnfH1YCnqQ3v6rt#6-*=37|ImOMFJ0+;6eqB8 zK!)~;rTi{q6u)a7E^je15pf}YOXz@8V|A`ommW#XwZ~tukszHaAjGLv7ffb=twQIg zIygC=X(qD3Cd3Y0&-LRa!KU?IR2PxC?Z`xPnoNvIO_sy9^3zeO5oyfk`{gdn)Xfiy zXV<3WUsbRvF?ekWvd8;pe{kg)+hrjfUmX$kzrt9V{?Y<7Fw}E2{$eiC{Xqf={nx)g z-4Mr^>WVKb6yZm&Kv7jfhE9Y4cs)1hu|kH}9O+zQ8t}f(c*+WL?)Gucj_=K3gD-wT zT_AZAYl;p<4*h(T4X%02I9&SVZ%QbQ8-c*aXY$pGodIrJI#2NI(pS7Io&xTJIDbP07p3HM}&be0~w>5lR^MILH*q3 zb|rP7g2hry+XW9@qs(^08ZERL^-5$;Dzt_yvEh3})SPP4Jy|+eR?KnL-J6=W()N@8 za=BHYC#{^-Tyv|bN>I1*Z-;f@W#fe(Xi(VjJz zvW&Np))0QXY?$kYjJh0be{@k|n*)xjACneL92E$cs-bKZDomJDN1_X)FL1`j9|SG1 zy%GEM@Dc54gw%1yTbnG1U71mz?`PY9_2{U84l>|0h(YP6xVh@laVZBf23At zjPci~{7u{A-@8b{(c(Y%ko+GmT>B%HheZJeFTE|F4`~iep{-A8nwxwBb1`D0puns1 zT0sP3sOH%d4{s+s&Iu8wAABU|lCQ$jEd){V9AqwLiMu{IZFo%spujuRSm8>bc-mCiCi+q1)o(gxM6VqTk^LkIaD2_Y{x# ztqvJ%`CF7HN`UNeCq7cK2BASf@ypcao|@owEcba)j++L(h00j9ZhI z`47Ms_Vp???wmwLkL8}ihy=D9hV30jiKmqe zbcpvjpHhkoiVLx2N9lWEjMbXplg9Pr70A#(a#v=Bj>(;&Fa zdx9VeCMww+*0yPjc9D6e=DF~I`SG&?k8__9d@{CMO%H|Aq+CUAg?l|_mK1Ih#cfif z)9^x|RZ{Wy4rxm+Sv<-F=DR;-fq**$`WOw^>brO5Ql7eyFs2cP&@nS(FG`xF{Y^k( z6%52iOwLTce;bp_4pZx8-sx-l+n??tsw&R1%-4cV{&m6rCM)po1>@JVcd+}?2>g!~ z8&_Tb!X?0aPwLoS#Ycc*KBN*Zg;Dpn6qM^WYU!AUIxUanizvvf5PZ5v;~@%5)Zn0j z6b7r4T<$t|a^cDri(dy?P=Gg&^Vaex>*ZaB<~Ofw%V^Iy)~+i&zwP*)n-Q>hkh;e) z#nMqwjJwsmMH{p8GaB_T%wnu3}FHlrgQza+=QBaLWm;F zCXToalMyErUpAB@ovNv=5mjVCUH{7opp&eGs1=WjUfOt4BO4xmT6e8B@pIA%-)y9b zlwm9C-@kjOq7%y?`B0y2YCUC7q1Xduk%ySCJO2vWacPX<#i;s#TOQ1D?RHkH-iCg&b zl4ZU9o5nH6)}%DwJ32-WJhi*!+#?RWDsKZ|xOSLLaVcnOhYxOI5N&+|ZHZi{i0inq zcMMU{7TIlPj$~aFtNpM+y_eUO;!2Fzq)K_&z&AU!1TjVSPEB+Aj+q_V0Ka8@54egl z^0ApED%aMlmW9KXkT$+Twi9$HRet+1%E4X_=$-_06&%{Y0I}X&E4x*GE5a5$e>p@R9mI9Z0 z3mqU<0^ok@c;=AK;WYJ$sCb(y5IHYc5X~bh`B9|UQ!SD^FJ~sRV8Jcv5}nd#Caf~9 zMAwx1F+~PbZ!?d>V(l#CmdljbM)GO=naS-pSD`dKfZil`Nt0Xu_`Gw7T18G1&b<$w zf^k6zbi$Rj6^`1pRdZAO75zGnW&+CwTr8nyGI?j9N$Hg5N!3=&-zOF4eo8Fe)|=*3 zKVc`eT9d|Y%k2Dekm`2<6zQ6_bewbL4@R=~?>0esHESpIing^(3#rV6HuLc8jT$Vy zs}VAseAdU3?=wDwCblVs^gz6`s#<&As{J|$xK60GrNLnn(ASe$U;gPgFozE{XQ$zUa zDXMUpw3~!?H!!6bLH$dLFp|o*I#fiWP{g=eo~Crn1_2_GIK8Z>N$`51?M7`M z6s$&Pi3&vXns|21h9vs^`f+eM!Yd}Bxc0)bRQh(Op>7Cg1bZib?)&Y0EF?f1Kj z9Ggyj9mFgNe`|iWl}W?jCWMPp15MOP=+IkFvQo75JEJB?mxG_>UiH*UK;C=F6bP@P zXP+ZNrXLbgHS}(b`{Wno#$waRDzKMRTAQDMPZn~t8V)ZwnEl7@+S6N9;8==RzGg8H z@+niQZTX;VeOLx=h4ZNOt`JgdFlV%$QS>7VgXYR_D=wP$P{a zGnB7g3YtL%l8au<5H%{SkhtI%%`m8LGB90Z_6*y9U9B;z^k0%iTA15bR9Rp$W<;`r zZqrWFsB-Vy4Wfa%$+w8-q%f`6yyQnT!N0Nd23&W6mF)xX+fm!y8;stxN|wJw`U#fB z+JUF7K-)gE18h2O4X=Z4xg!bJH-7(BuOdsK3FQlcB$#2KQcM*9X~8+Xu%e8!S2|m0 z>N&%o^sc_hsmJA_DJ_5W{;nk5ICb5g15oI4+w|0U0T~zx{8ImfK=D$qFC-;ZrmN$V zndg}hak*mPux|^qD;L<~ldwAmPsA}TfAtxXWnOpGG!Zq5m>S=8eW^th>1X8rTH&AM zNXwe0O-o}9A$HuVyvHq5kv`0@Uq&GeyOj|*bS|mBHmS99>uG*u@Wilg7D~n9QFu>r zZCiPn%*BrhPhK9$5_!bIV7~dyG$u1}Awa`Fi}vijy|&Zm*4}HyLJjv`!Mkm6^6gHt zyvOMFyeF()+^gdJMQ@Rk2Ifo3X0S`T{Z%*`9YQ3+_3kjU~5x zaOYZgEAHq2lJNHE(U?X0%0E~zf4go`{3ZW5ez{c9$?BPXrJjEQXr!YgqrPreLXY2t zX_yd4K%UNwpv3loqUH^-BXC+)flU)ycSEc#&8|yI+^a4OxCC}8F5VM~aUAQU>eHc$ zYhS9EjfO0*U};qm&Q>zhAwOVz$Pnt)E#@tze2(LIW?B0!VROu4R=j-uYoc)`h!tQz zxKD&XLP~(Ew26|Qz>tseiV$K&#w1_&@(@2auwhOV%d|B{jrD;*axMW$$FUE=Hd2(*GVd2$18PDH# z&M0y+!qS3$Gr#94!m#zblKTrAk^?fIHo3IjJKMip{q720ebC&ExbZqus-44!akS-$ z_bA_boRmTfItJr{%)U|S=Bjxt99NC2h(&g6;lQGhgc`WveF!{u>cNg-jod%^PL&(^ zWj%+|2_?kb<7-1awQgV&MUO#c=yt%Tp&|+tz=~e=CPn;|jt-SN_Wu0X3r3VpoI}Tg z&F^#HS9`)Jbrf80U5zV845jil(G4H7rm)Dcw8LWZ6N^X`xV=4M zyJ{8C;Q}XU%x4xOH5q1)lFujEr2+=cgZm97_;?0RF~potk4@5^E`2zQ1^+SuvDxlU z2q)Ib>9~3(lhx~>SQR*_@1a58;TREj4zR5}!6`8%FAQnCZ(d zbBT4wKPi$Yccv2ZOE1bPNDq&Fej%#T+HZF&ECB}!;YzFoX*f0sLb^Wa@aMp{?3|^( zuki7Bv0%T^@TE+ljaDML|hLX!RzS3jIS#mL0td0%is>R^xm~a3BTNFE_xu zeaL);grOMHNy^t8rz^DG1PCP+b+pnYiiV)rr#D=Q%~^-lRZ+Kh!(04I;14g zC%-Q%AbpTB{0EaBt`IAvga)8ng(+7zDk(qqo_*Vwxy_Q3bOGeeKuGrBa-&x!WXJ+~ znxu?ORG-;vjVLO+i6*!wMfMD!BvQZyygX70E>#II<#Ou6Gde^y6_Ssi5^E9$ghp<* z75odR8E03$f;X0%LEz>E!qTi<$UKK)3qcJ46*q1q9!e5ew}Ey716p9okJt-_2GaG~ zPXs`MpHNJ&t|@8<#w;6m)l4iK7WcT!G_A;)$oQ;{Sy8dsTzTH4N~ZaN;o%groBSxg zMwuYj(rBKiF{b8FV*@H#%~iL!`aVUkg>d4)#tbG{vT-}N#*|>)5EUU#s&nEA1%;j` zCbrjhru+84^}MIEowec)W49;J%`<20?aUqIc~T?@-mnj%M-LF*yxfqqF(kH zN0*J&@&ZyY-@VOHiuawo6(pFYpXrdOdN+7wO9gsr<0yNNViQXEDgx(I_sx$U5RZ5` z2%1y|jwxhwUX<&-c*Q3{45WwG$&I>VXJ&-uUf}_>a7X9G7w*QhX4|G;zccQ=?)jQp zpvyxv=6ZYf7XBP^J7sJ6MV{!>Df!5nfL9D{b}~lBA#ui1W`FedM;2-_;WSwCD@PL| z{w+oQk2zXM=1+?H(>Od=)%XW$|D`#)6_HzD94!WA!AA!HUuTMiZ_CuG0fsEhuMsgW zlEf@wmumHV$ra2N+me4AbZ+WVEtYxe{H5k{HBX`g6<5mgO6;6FMpr^r0Zi3c)q5gQ zDEs)Z*D$0k{QVkdQSwZT!poC#^u*Np(lxVCPkES|%H2tpGRGyc^s6nDq7`PqchYqO zR7l9ND?GWOK_c`ilUljRs8Op}jdX1JdPRk)Xbl)jqBg8OhHAeg<-FN-%Sl(7M=YOf zG4+BusrPZJS!S2WXAL3&_)e`egy>|%liOM5E#d$4WXdY1{4OBa-D!4J#?J* zqcZAnuWMpiUFjfP9YG4J?;c|lk`tHr90B7=vWxc9ldpzT`js6u5lC~BGBXjac?GCk ziV=6h_lKtA@zD}{AYtTSP=HcY&`O}fC-WYC!f&(0WgJV?2&}huKwzxcg&{3kB!w_a z8#vwT3yRn2qmT^eSM^!xXg|3n&V|{bIuWp3uze1HSv_hR!p7`%lX$cMCjs3Zbbd8U zC9eWOX8-bAO(VI1pyX%AJJHYs6!GQt>r3bhX7deVg$h?i7)Xoh@nR)t&WO7@^m)6>+Vd?AP1 zQ}oV$K06=_FA18%%p{WhClOy@yOMNdfgGoCFdUzJS1&cR{h?J~GfpqN!<=&J&F16Y znCWr=)mCwVW&Qu~^o{wm|KA~GH4#X@$Eoi-h^0}jv292j@>6BR#9MH|zZ5h^jCeWt) z8wr)tNMUek)4MWuKJzQr8GthqpNi?h$<^GaoH^z*{d&r!5UDa9{--2~D@nFRJ!#Vo zTBicj3rbc5v^E*R*l`Yf;3aZy&8Wl?Wt*O(Cc@&Ds1k652ey1c<_QnNE`A6`MXb!4 z{EbL@_i7tU-4Vn~F;z1q9qi@N_~mPMO5GiQkRL-#;8YvsfXJoH)508CNaPBBRm?-u zLr23yYa*EP6RbOM!c0CHE#b_uk9>l=B=Jt)vi*1(w)dqx1}wrXAxX0}G?3Q7-nzb} zx(N>8(=*Kw3gAIAQUA2rN3NSjx(R?@PbI%E?|{IX*yUTE?0#@aC}fVC*@GcwP=d+% zSP*d1_c_lE|jDx0Q9`g$qpt`uSbx{kGU8-6wgMv4pXkzYp zytvm#2pGzN*e>C$i|E0p*PBB$CQhTB$J8PcoNDBpjpjb)Qzqff2G< zy@UJ$K{pr>ZOIu28vrWxQU>_2DApc2IKYPpmaVa*>!u#@wnnu0AvBO}DR$ncAc#_P zPoOU!@mT1pE*=%iZ#V_nUY$F^6FZUY+WF&xapF2uVT6Vv3NwGCwIQcuISYC7bpd?I*{WU2{k$75Xn0>1wKGNz=S3UJ}6@5A9{sQ2Oa3 zvagekiYScy#{!E_%6GVXA!^g&VlbUp?*S)d` z%ENAZ#?2h&Xgdrnx1b)T62RyYqIKq6l*f~N*=xS-yaQX*V9y+X%dRO-8+~lc)YTK`t)?n> zD#sE*@z5Km|8UF7lSsZKtck<&xqeElaVns>)JAv>#4$i+`P4f?eS7j_k4iX3aU=)^ z?M_loM$$A@Lf@1$sc`&-S1-^>gPSk1T02R%H;7EpduPwY7}JVG^YSayKW&i*j=_)g zFWP(<#@~)S#{a1*m({a3v~&7L2JwfTsl$JX|CN6^(5L-zps!_V!^0>h*n;wMb{iNbEqw(OEL0?h>Rsq7~ zzM@;+@0LN_WS!7()x$L*SB)pTsRK2ws$_?A`MzKh_+9Hleu=I8c~zGAVJuTeCY80a z+9&s5pi9vz;KD^43Jzjt9#RbxJnIwDN7rkr%~S}Zqr=C-JWl$R=PFOo@hd7_cD-PPN}1w#Gr=R23I9wTj)%IdQuz1!o{h|CEvXS(DcWUu@$%8J{V? zvaSMD3POtt*f*rpO88oU<0@>K=9Ia`jn1SEKVk3)N(gm=utNIMyO@(|8JD;uH zlK=OBMd;+B!Ti2zM(f)@lat@?cPe3DA5r1g^WR^7|F2$D%-Y_8-@w4m(EeX{;7H|R ztJSZs?3Id?v(FBd5Gox=e4fxmu`alU<^?2yIVoi(zn6qoZf{dk0Sjf>$`OGl_0h;( z(AwlWTm@V~c`ueHFG;et05Vj&m97tSK%C-k-JoXyt9Xom(E6DOb%4v-VnPiNq)5Hj zxOm)Cjnd(e7YSgA{6Pw)Ck|p{yGUM2smg=0fBlIH3Dje&yC`@Q#0okdsEVgKdm|?b zOIV8NMGa?z$Ee@oMB13Xv!x{!UZ#Fs_>L+GE zEr}!kV--n$PSz!3lh5uhAA~hiQ_5uJA&>L!NwZjW?#afSaa1m2sRQVt4TnFqKSc_x zoE(~X8=C=vbFO8DAjNUNnkB|mU32sQN7_3@S-Lh|qG{WWE)_R|K=Mxb#V$LJbIIDMXy>om`^tKSkdSAyavq1}0 zNn3$GXx;WPs0UBw^;RgwnRXf8Pr_Ceu=@}ww06@@roB*8l++*ewSu5Oh{dzQeiK2p zvcv0;AoOaL+YtsVcv|YP7KF1YRnI=h7x}QEVpRz1eX3LIBEuaGT=cm_WBkb>r4lew zwktf()08N2UQxwSdg!G*T+fziWU2AUpvBO@e?$O5%@TAxd-Kfg)s~D|M7=Zqv0~Bn zgTPCX&NlW5DP~fE-Q>)Y$EAuOmP4}WtesUEg(CH)dD^v(TIYU+IbO|MXznmu0IOjf z4c28|Ob1_FNgEiZ*#N1Q3w|{jD#~TgYaw9-8Zo=mtWy@W? z36^@zcCW-+1*R=UgPE0qOn&rLxEP+YP>%t;q{PD#>i(zKqd4`v7aFacJN%d+kSB$` zM%#y6ugzoQf)vI;XkG5IOWWO9DY0YO3?`@)+jHKt9WsN!MdxnQc0CD$;>tCX5u=1%Se5Y(x!X{5Au;-jyf&n*q}y0BYYci! zYK)#sTN6h1**642v-8NPx9avC7~Yu7B^F)_6~oPbutPbBav9vwTC$WnA|)r(gu+HN zgD0VpPl~qW)`r+A5}DmDUk}6Y?sWBL1griY`*>=yBTSnWTA!%GlByNZzkYG-Mg)nj z4>UUA`iTQ;Of<3~A|F}$#}F@KVrL{E*TfZ)+%q_NT1ROX^u83ymkH~f43L1b&hX$Zg5${ubRE@qx&c&C*k zS5o#@&`f;9qrJ_`Q1_PR0@!Ghfrm`;@f#%3ctC^*`_{5&=lsGwBTY~CA@4tYZpb&9 zslN1kN)FW~>tFaR)_ngYAs+aw&!b+G?ecd$y$M(w-y z{+zCvW#?JU`-7y}Ts_-JSV)RZXM@~q8}&dDlR)7@O*|Ite9&_xnPM|0LBE;KJ6LzW zaipuG!;|nWgw#hIh=Kot>?s6-J&t+!ZM%tagDf%d(Zs?TjhSj5Xjdzj?uQsoqRL}D z8w13eJ6Gz19jC5{cEP1@a@C@ak)S`MFNPFDx+fLNyKCNC{D)Wel@L}Q!H`g1&GGu1 z2oCtv5Q0coAgl`>i4$dKCUEv_4AaeXaj(2md+1EKJN0#o4wxfRfxW1 z?WmF!!**_Y_>#vEzNebN9inxw0lb$DAiT6VZIQqwqJbo<4#{dQA=&bQ}FPcY!3SC955BWtfs zO{$H(t1rRW*aDOgF4m0%DB&V z$&n$76vA1u)*JRk%+U;BQ5XgZ3m!~d%%Sp{?K=aUlW_!#G5Ko|WrwW%Z6?MNy1P~$ zhO5Xn;}JExfdMvLY%U;TS^|ifye5HVFHIO2H8nY{vCOzvj`D5zeY(M5B@WzC3+cZl_>4e5>ms2(l6tJc_Z zss2O}v7MVLXs$EYJ{lkOZv@b&{Ltzu(t+7rYoAIBZXIwftPW62efENA~(O zw5c5KJZPWdeJS8bY&IKc7`LHJ+@uWWaTu-=ZYyGxldYEH6wWH~ZMVbfBz9!TxK)F+ zp4W6N?#&HhJ1~+%5&&HM+^LfCrzwT40$m*!)H@0cC$za5f3`r*VZ*HOGXN>=Npfi8 z2hcG!H*h~`TOOOTJ((b<4=m68YUzE9KOb!*xvi&!P+_8B0dix>oSsS6r@GP1iqL{> zUddG3aSo(K=J^i@c;G*5iYMgpkjFneS z=J;o9WSn=7A;ZF>V;6>%b65z+jtC08b1)@%j(+t z4~E>qu|URSI^Ss9j=}D9$g`24EQ`(N0wyjY!gL^#_rZo`+8@9B5)w&w1Htk*hLDl$ zI@^+Ck-{gxhDg#hDmq{@GZxc@Fwr);u+kzp_#eK!Y2UzIi4W7T3kB#3fr2HCu{-r&#s*JH@cYAtwNP7VO}wzA>j~G zPN!MR8F4&iL5t|y819{b_X@hsctF8lQk@2F)|WaW{5-GU&zq+}ThbODhmBGiP z3YQT8ds)$qO(#Le_XoF-8xTZ=+r%z7&J=W_i+W)+!H@aL3#8w7q{I}bQ>Ebh!+Sqy z@|VDkJ4?wkBOo9iF&Rs5Ii*u|Xa28jGqSFOOBdr4@k6fl65%;uRa1?zyc2}?SE7@W z*Zm9YlNj#1^;#F`PF)O)8qG+Q-dYKTKJY1{!hXqX=PMB&wyc0-yX`zqnDgS@rRE-3mi!0JZw!wZkJ5_=@I;s3bO<`q|( zL$h@__u4+X#5q#*8Aa)PQLc0e@9SDn^+Yikz*LB1O{AF5-0%o&qAr3cg{mn-f`$pG zQpz^W9kZA!kb+9y%vii(U7vJ?a+;rJWTHzErIHs71&BOh@fHDy^U{$NgdhoT5M!}i zT6gy4lge4ui_{V>flXFPcT@G-g-Su)nXqaIc5lUOabf3H+_?atRFz2=#T!o4Z01uq zg2;|rVLedpdN+h;nek2*i0iPL<{WtW_V*dsJa`PVZyc|>&TD9N3j11WwqM2X4bakLc`WO~w2&BjGp z-22u`#Kbk@orr=C(SAS5-&0cWcy%Do$h(dGQnag&1U;G<^RjNIDzFb@rG3yee(;sn zj2l!O7XRVc7g1fYrxkw0Fn>W$jjRwME?M&NVB`ROB+%ec$y%%um#4zkTSS21U*q!v zs6~3GO@uM+oPWlc7pGjxI@F(wz;u3;1 zt6+G5+Z8{pJI``87J6mY1ZY;D)iWl{os!_E&QOVEKn5g727r~Cxrom)ezs7}4laF* zD?eaMw;~%sr{nqC+v^i6h-~oPVe6q&(bDLo_z9PQGGUr%Rrx7fk84Hk$goSTa)OWy zolY)JL5b`6EsEXhjzN#XPybokYXPPh>EC60M631fMn{Y>yubQNqunZE%=~GhTsqfR z-#{u$F?B9|^XPdJ@(B?bfnDfSX4#V`x+o?Jsq3XvCW6S3zymC}4PXt3X768iN22x9 zB^>#rN#1{=6Kyxu<7t@YhP=An-X-3pC3fN}3z{z~CdXtEk?7UFKh`ItS{@#^WYSr> z1yX`YhR}+ji(Dftbsscf z+!WRL@QfD?!pKiAEsLn?sk&}gNetDVtcU{n+;i^S#I*Vv@R?i8MPQ5EVg+p_qm?fM z%`86vI?}=BwC6|X+Zs@gSzn#8x#~pTS|=Z9^M&wEJ}XvIu%SW@^1=pt1A7 zM=yi!@}9GZu63rZU;L~-{c~QIah4gWD#r*a#HkN9g^i4!J>`-)6wuH_@*aeQBf#y- zBNP;z`Y){0^q{={v6PKoAnZ=-Z62u1IwS@s->#pg{HCU+8 zx#5!0VLwo@vpMF-{C6dm} z42Tr2W6640*!>fN6T2h17fURT`FH@)g6n+x`N1j+g~8vtHAtF`7%mqRMNG7jL#qkR zA6-&v|86tWKc3dD9Go==cRn5Vwmr4iE@I@<(;^mRai`9$0P|5SYo|HjoOjOv2&vfi z4fB?#%vA6Y8iUkEmDdZI3S{o~rY+jufH;6CpLE?WGp|-@c7=Qv5JiOpd@Qxnav!j@ zgV22Omze?o1WiMI{~>r$w24c&o|tPL&72_8W7V&8!MHOuA0cdT8GO7Z!__OFpJTbm zmo}V{0mX4E129HNZ4 zM3)l4@M!}Gt!;P5u*e1{xq*vau$z#LbBsPWcjY>7HpGscA#{txu$jhF1q6iX4%-bb z{lj;^Rj!LBHXlbN8@n0_z)}$%*x6DCoy}mz4l!ISLO>R_J20w)noQTLv8qEnv{Y;9 z75Roi;ao=nKfu2vC|xBA!sGBfwN8In`dXm-}UKM91ja)341P%GGryYQQanTKay zVDz$Q`RWPbg(8l0qf@QQ=0)Nvg1MjyEs>rynkR;#DUNo@%?C@7=gt8o@uD$YfL@SM z_)7I~#mLW?wZOVzo`AEsKU^=09}(w_w)|wnL)u{M%3U{ndVA#B4DoRh?!h+TgJ&@O zSV+1FK>@ZN|sDhw71$?_7?^FuJN=y|h)!Q(<*Mak1#X7nkW@T>FEbVDS7-KP`~RBP-UCRpLrTLQ)Jfm;0@yP@jYk7QxtL0b%wO ziXmS65q6vd1wSZRFuQ<;8Glh?tY< z2{*QK&3bMss;0-#Pdbpk|2n|Y15c)9+~Nm2A{T|SESvyMh>8oj!@#W3XAoIB#DXVS zGxWriB>hV|Z6#9|h66HcHfC;^{vIy>ryWR)O=3+UB@fpw*)+AXOb-&v;GY~IK4Z%_ zC=DnUl*q#+s%pzDCHq1$%+7d_l-Zlts?$^G!6dp z3^Q^3UrmE96&<;CdK90ln$~+jQbm)Cz36hmD28xISmyCYwS|o&dbVkt5@)RUC!LY- zvu4@6O?CWJ_NTKfC%f}NIp6Cafyzp*zozPv%6$JoX>brjS2&Y}cImQG70%nw9A%j# zWb5V7kf|R_AAZl!6bF8K0P1ucq8Wl-VnMT@PZ_ zO(-Dwyb0_-tZ7+okv>5Ucq>#Sci%)tWW*b-swkvD$8gL=iZ2PV(lmBrmdGMt9r0=% z(}wp&NgrXr9OxDtw~=%DMWa7`yWf=8=?5lBi8`gvn1VK8@){4d0ZIrCSwb2*cVL!%U!6`2jJsDR&y7YT1c)#RyC zTMu6GAK!?&$bCsNj&;^%&;Y(k9b!(poS=OOP9E;D9m)e3f#g%70=j>^X$20T{Rzwm;isydq@Y&;^~QjM7dmA(>I(CNO+TiWohw+Uefu-|5*R&4f1E1M zN+Z>>Nrpw2M5t6WlZDxZb#f|QFX$N4>WDr22&)7nLy|R?YxdP_Z}A#Jdhxcw;!oY$ z3FE^^&6^bi`nc}m+B)@Om1;w!##yLM(&{oj`tPNN;hm69-Z{eCkm{DYwq3!+$M!gE zmeNH}u_+bJ70sijEn@Wb%{*v{^zaA`x8oT+>(wPmmXQI=Et`Vo z1ATM3kdm#xSL8fHeR)>D`?B6J|MtrKn>E$neOXx-8^eEInZMKVCfO;;0e+0mqaUHV z((thDWhwHA-0l!R!SmD%8b0cEI$l`ML9-@$VeXhDU6L~XbXIRo3HLqR zknpG&jLIhG*RAJcD49hE)-!^17UmK6Ou+F%1DG)hV=~E1pXb39#@KA%Rv)NGs*Pnx zo~aupu+H7Gr5Si8@gZG0e7u*K4F7LGi4)aD7Y&W$_(uM}ypy=2XA`-p{JON`og!e$uMqN(kl z8v13I6WR9s_u4aEi%!}8clq*{^wNJ1IAs5+!1+s2=bxHWvFk67zO6eH@?!c$B&Jh- zP)eAK1lRKNarTu#=GAx~$U@YsEn-N*c>m?dy^SX~-tU5Q45Y7J*xEUK%XeOu6UBD| zRUvM=SRl8h%>@KoLvlv}RaS{KXV$BD+9fcjIF(_Bl~S2=0%>Bzxnq@TQbKDW!=rAx z5hz*WicoW!?7MpAzjXcq*_TK{3omWCI^zA%`cqeZ=clc(W^GNBWH!qywvoD8u-(7#H^Uiz!z^Q74hEEd7hT;-dLT39e^b$UU z{zWB@QX7~`exD58zm}i>w*L8dZ2!|kR(3S7buzVcwD~VGk!6el&Yu7Vptq~$xD-0P zVP+OySy3FdFR47}=8E&!vn5`Sf)Op+HYLak(lw#J;*86dO@gPlSx$mml69Fs$ALZ> zN32L&Xf7F*j{hCw;^{CbsL{%+b?0w#P^%mqNAo*u?7lz$ePD6_$H1~NFtQSHH!*Vg zHjVrC0W~o&{@?c!T;k-uTO2S$S05;|# z&3H>A4fE&kE#@7q^`Zl7arL=XP=G08XD84uC{rPLgTD=_cmZj#`9J}jx6Vr=vJh+q#iSt8`d%CX*m0J9RlL<1G-#w;~C*C0t!8joWxVT1;HI#P9fO+83$3X>3 zscI7PklhZqcXDv@O%zV(^?CDdHoJX65_}>dde%KL4?(lXPikt%RHe{V-EtF@u}=Es z0fj8#h9UfD#WZ(|`&-VJ-8m>bYw-^ty5oQxyKZhvvC`;%oF?+Fd~Y?z0Aa`@{S_Q9 zVn%NSN%+C*2{LH#o59DX)lx;Cme?2c zLQ$Lq(AFC!(u(bKZ3HUzyy791nF!LC*feS1>4)KM6xu}{%~b3V4xdz>wjMUPEqs?q zsZ{11{KJ3^%(t%cHkLK2%G}?&mGh9YAXeXp2>h?4(!cqP{S63$9?m9z9pOJ@yH8Br zU(TMP-)9(&A+cwxoh5^_I7Xl3X^5&hkB4OF?j}`+fP3zE^7QoP)f5M>K!Blj-Qk(f zq-Gf+a!L8?I#jvMw9@ugQ6jF$9Jv%>ip;_m2b$Zx%dd7aM^Htb8Kat$p(gRD#SK3T!~LivdAF{m?|V<#9l6l%`K*_z!(W*C zTtn5vf2Pr`jq0Egqk2tK&5v>JrNp=OF5-<`wQzc$7tw$e$|bXBl2ul=^2DoCT@H`# z0Esfa)pVhR;xX6#U>em_{Dmb9dbnBtz#+~$ZEBOL2Xuo*iBeTT@%F3KXD`29a=je0 zlPV@f`JTqBb4FD`Vfb$O+h^e6#iIi-;++TFuTdG3Wwg2)d8frw7ew*|Qp z^nH#m-u7s!$FeH~>^Xtjp-gkkC-9&v3Ws5TflN@3+uQr+(~qGOI=&v?hl!!}Cp%qj zoviEu`7RNasvI64N>gwqA5S)4&KWZ~yWLXFpr>fGCB_eU^XtOVmESnWRi4)D+uGjs zgzTp;Z)(>wH$w*}Lv(bpa@AY9?{0A?XWVjo6i%-?-F$q0UJfp0#Q=tG<`~p*T7<2s z9&<dyI!>RkA*YfyRR<=*bPx& zQR3lt{go0~qNzYhaMqtNIRki496n?c6m0a)2`V6rRPS$DZbDjIL*#1ss`~cZH>Y&J z62qUVGfi)VKv{qM_D|S|ZFoY0sdu*Rs;z?s9s!pe-R>CX2Ny}3H0powQ=v4T%9v>`G?+vvfF zCO7d`m_hTpNP=Fw#XfeF21bhCP#Tr@vagRnv45Oy;nV)(389mC@SJ0KGAtWon21kT zX#ZVCc@EIc?Fs%&RMHndhR{qDYnXj46Hn&R_0jDNOp`GR7sqCVDZ?3~BZ}9@>wg!KU~EIIuOCg_xr1fOyO{w}?2r7^RDbaO3#;%K8(7Fz%A4`g_RhA{a0u zxWT-eIv6@RpL_Sa&f=cMwuc^37==U!o+4_HV9j_56jf+1udV_K5gTHp#^w2yy}A{x z>SP++m6FBbT411BWv7sE+ zOg1;el>v#h8-J+02>7My3nlaKL8Ch9=W%`V3(3i*%jg**OUf~8M1M47`LZ5G5l!tu z;p}?q41N8aXL&|mRi#URVi%|H&^z$)d7Z^pT}S{Rhx(}4*#0t!r(0KO4M@R)&H1A8 zFMThdMcYQHEfajj@NS&0MH%D&3gtRm5GI)%V(+ITHV%7O8l`wFTyS``NZPDU7xnK_ zd(Y&N@p9$n3qLHC)mQu#SU5rMFaI{7E0>m7iU-(5%AYm+J_u1CgeR^|D@?_qg;Wv; z$+BjPZ)!ei8qJAIsWq;X`!u0(H_qH1v)}_ce%Quqs~<1a=mJ+RhZzaEtg(Y3+T1L` zp&o=f?K0__Ia^~DSGFltEKvgQb9zEid*LqaY)=)L7GgL8?P{`9`egt0=i1)RP+vjg zcvp&;B44$w`;#R{h1NJpguXmTOoMrnG7?bN#6TJkPr77bb8M>-I(9Ncv$mAjRfDs> zwS$QxBgSQvO6q6NnfGTNs9SZugxO^b|Hwi?w(M@CLrp8FU&nOZ;J~kLYf}*#oZ;#6 z9QPE2dV6pn<}k#A1P#Lp_6qc@R++&>)O$m=mVq2Q47Wq!>41)S2te=cS12K6;60+0 zfkF_%VyHwYso?SPZ#HeB2Z|qec z5GWwq+0Ng>CyJt-11@T@nSUU{WVmVAt|=N?QY^~kn+Jb&hY?1GS{(17E%-my$z#aS z_2q5Q0BP_)KgO%~%;-=1-!beb;-8l4mnQhI=}KdQ1`~KfXBjKbiH|-Ig3Ca;T#JAj zO8V?D#34wF4J%JB>2~+|-(-ZVKcu-$ew)mtClpqdhM_E*tMKs%h66hR`(i z9i$rdJdw@h46^GOG&tL3*`^*@WNeQ(`R5b@U4~6Mj-KrU;^p}77+7sA5Ox%dnKKed zNE}LF*4ZvIMAGmUk&sI|Cu9+4%9K#gM3~Y~yddkU@Y*i#`h5ma$)sh^NXVioI6zXs zu%W`L{m#ie?w|~0CuSpI^Z#_u^5k|)%UwM=hgBY1l4(O+xyaV~g|CJY=@3XI5;W4C zH>D2_c#YTz^gN1ufznWEzXL`iJLb?5JyoNJOm|UHgv!fLf`!R-2?*QlRW(gvM~kTU zTr`rR%cCQLlt7hTfm|=5GTh2OL)7y1aqLM(aff<}6kL6K(q|U2RHxiY+q%KehW$YrK zbJ}*{c_dIbz9Edh$j+|hB}I>2C6Q|89;X@B&7>&Cjx59V@<1WPC~R#kK!=?5D@%cU zq5f?gpn&c6y1?A2lD~W80wZH8Tfp5Em|@lV!A@7@+ctLbS`DG}@S{6N04xH(8D@^O zyg{#nZ0<&8#rol>kdjF*d4*fXCa1uCf?tGh8%0e~oy|jFsN|OR)q9_i#cKUvP{UqUPUOUax{(zxCclG1qTp;XlthcS zqe$%6X&rZK?KE{K^{bpyGE&vpxD@Y(RN-rF!#Nq2jkjzy^6GQ0HhKM+0Ux^KxZAKq z2d;;5{CR!f@5bpSj7grXln4W_>|6ewyYy?g--qef?tXUdd|Mpn&iWAHbaV;jC(_6q zE|{dQvSvfm=att&I|XC+_MI(9JR~p-;dAaf&H4`5N6Q^vi3MftZMmrgev$9ppl<8z z^`Git{iEAxa3OBoLBa4LRi)sZXbf_=LT#5qS$oJUj00k+7&5_g16eZw%R6-6CUs^| z6>RjmPQKG+51<-$v98n|b>XA@4Ip1)DU%4t)&moY4X$W~{j7O%*DPRo=@B=XIT5Hd z_{e!INL24chd#>2;^ks(18;52$b=@I!2#&+CX8ZciR1vaox1a99SPf7IU(TB3jjbV zZ3JUkALjga#EH~4Pb|g1egn;bB%ISq=7}+99t>p>?n$gQ@4lNc6b7yk=PM>L>6|XLLa_kG~-*}cVAKLbB%Eu`egV8i`(B4 z%HcI)?C^NGZMO;3N#65|X)2uy^){?7*p#gzMQl>IV^uyVUxbeT)SP1``UC`#n-=Ik z2LoyS(d1ZfYF<6{rp7a>>KCw<+mDG{QMQk$2GZ%AxQm_hSkT_M5!dS`GH)yK$(OnB zjbVB)kya$sns{^XC`8mF?n(^G*KG-fYP{0kjA4FpNP5F2OEn0{S00(jwId1>j*%eANqa3noDutREC@ z(YA9^4j%Wzu-TXU$1^`>7NcakX@1|WnA}@PN##H8MkY`npRu1>oYq{>=f|T2r|IHH zOF83Xc=3j}=NvS*kH4wtD#-=V6-Q^VVpLCkv-Yq~K1%F3w#POW$?%S)ZX@0^flu(0 zNqQpnb-$t ztXAMwzFZsDalk?rBGb#6nn~2xK$d&$s&3k7V_9wLTDMUusn|23u>h_eakmopBTt zOX?VY0`NV|eXB@veY}Gv5t>{~xmDZ8`@)>sS0@1WOJ@oC%S%MRpa)b?SJPVH^jmt3 z=C`cF1L`NC0`ecHMz96>3%AX$g9Y<_6vNiy|S z&sar$IN_+$`c=7%_2U?36Qtski^ZF$_QF-NVgllYK0Ka>uT4gdc-hp|z6PnrdfAd0 zj`^Nz9x`{$hx+{8L!iU(=yn}dNf73*j!ld3{b9O3j#O8o^`Xia$@WE>ZHX!6KZkh^ z_~+N$|M;pGyWfhgWxwCZIy*I)a;38Yt89_Jv=@58&F0uq!N2f%y^+<;9o!sHZ6GEA2zdQr@t;y&C){=l5NypRPx{$r z2a5cN{rKSLIp1!J*8ERWsa{HOf#asB&_zSG9{%+lz3h zq7z9?RqsN7e7HlgsLY_8HVkYkw5%$~Man-9B17II&2myr0YN)I@l>Z)J;CT)q`)cX zD3G5}Y@mtZx-{5h*fa&Uu)flitnvPtt@RJ3g&FGTreAb)!f-ELFdWx{?nUg!u#p|; z0EmH=56YS}VgR|W2P_?m7vALG}@r7dMfT(gB%qYJ98uVydJrh?- z7;Og-4hIhp59c;4)~A)ALx`B;%Oa4kZ|c^sC4*o)z1M`PJ??m#N=oI&ARgT52|5x% z%&Te{JQ_hZeyu|@Pav<#jTpQ3sE3B+VR&uEzwe_>_j|^l0_JC7^inS&6T|IQT97t6 zBwwztqHYpj|GcVxM{Y_~^*+}EQZZ(j{rR=vuw@&GO9DCbR%^`2v7_F&~ymQ6nW zo(pDk^wL)A&iXztfdw*D+*e}BG-p#sjKv*ojmd9Rnbbz(w`R8{EIPArBY@1rP%n+k zVOw;5xC2mVjmO$G6T{G-z!&{@szU0S&x6B7g>V@Ovd2lxz{*I2rG?*6qFq<1le$PY z6sZ=6kztnCjoxZ^b*w>mQ8Wtdc0rJ%QRyF1X;{f zS;nJ8@JQepah9|8^WOXi2m>DJd1MQ1u^6?S89fs5PUQY0Rc#GD>jpTgV;WrF&uq=MzI!2Bp^g)-}LW_5i%E)TO$Ip+N?AzzV9DfW9 zT}J_Ln7-`Wzryb)!tpT%c9>||5dU(pi(t2-rApRap4*uBg~{(AWy;Zj{DOQ&FUwt@iT?ndc=me_6yF*-tV~rQ_?7FW>f-mg(!l`Xhlno+GA$<5@Htx0uxWGkauEG+Cb~+J; zpYwWKyqB9(m%mto^CzZ04@fND3&N(MAG2GEJGs4_JUv*>AI0E*Pbj)}mA0k-aFWZ$ z;_J{7W`bHH_tX&>{J`WeW3-`BA6?Dha{C_~+ksAb|MECA) z_J#dbPIyd(`?U9Z{8lTEVSchn>MYL*I|lMKOIk>q<Xxmd}-n=_{o zU(d^WhxP>9`W^&Fjjz#e=hD$>C>O1ddr=b?LzyeQ!nw_G!8<)ZQj$4K2Du?qsq&6t zG9NM;H)ihSrc|yFWOO2~x&QdKnM5diga3m&n#Ebq4fj_p*r~OHE?+hcdJqjt3_Sc? z2S)%LSHN2z4ldr^oLkQ#v5$Mg+QX~&gr#~k5G;362&e^nR87o1XT6=V8$6oF< zZi$bjGplX?4*(S^%5Zh2&~mH<8XZ-D&M!dh8W}bIlipRo^8g!bBE2#HOqKKxCfCemvRT^w zNzt}r3n}RK$3+*3N6Z43P9M{_vA{NpCGe}jcQ3EC6pAV^$u)>Qqb|vjk(CB9s<0F_ z+#KDMa9z&cN!dRx`Y`KumIFE^QMJVMxZf7I7O-1)BcfQDSdR>TZz_HMP$sw>nOc*y z2|e5?C~Wg@IdMLlyAtQxuF5FSNG;c`@DAQ5@XIHa_0)A_&W`}LAUGqAO%3FCp6~B^ z!LYhm9v`~{vr~6==N$jDPG@lJ*70nRyEhpJ;T> z(*6MDlz38i=wcz8Kg=c5=J_Cauk$EbEg3p=qsg&If#76EnXPwcV;w7|Q;6vRRheG8 z*2IP8mD-XGp<0XESQYPkKX3Yu22@^ZH3G5Mv;j{SyjcLyeuR>NB=2v`!=LId_eT@qx1 zaHJ9(7@d#VHWtjWRBKfCI-sAPTY5Acy*)o7*%dQp#*7e3(Dns+(+*tP(@(B|IQG58 zLfR%>8jGY!eHQ>i5U?Tfh1Jl_2Qi~<&D`wea|5fyP0$xA#9@GZ2tYR?LQJZ% z{o*-8`m1pf^)${n(LyA>KG|N&K{zFa*4h(bq*MTlCPiE z`-fI-_Jod$D!#m&{L%Z1)ypsbA-Vs(6R}D7Z+D3Bf0`q3`uhSgu{E;$zCh>%4V+9^ znN=LEl?+TxME?2mZ#p|Wp26xbI@|3lf;bUaL}?7E9i_ck=omikpy8X$zT6zc75wyC zdKP48B~?zG?Rx4aw`jcFe1r)1bh<@$Jl$VF!onLLG`{Jpjf>?GP1P*)QF$?tCh^nM z%|zzhA;NP)?gU1sX5!Ww-rU0uDY&>cfeUs51t5MIg93_7{$?2B*+d!)sphtuIdpWC zZfWQvBu`BuboIG_C*~7EuZg|-g(AXm1gqM?SC8RBCxI9Qf)FAN8#b-_H5uI7a1_H}MVvn|_VzdMW;r`q$hOXz<+Vz2@i zzMJm{nDeib0sp3e`!}ile|p4!Kh!Q&nb^N16aHFoMf_p)U{#TvkLOyUJZ|DOdZ_%M zKN`&LVr`jOSV8&K#p;?%AlTomsYidk<=vUiu+RJ5CL^z<{U8S=(s-%VfA^KvI2l-7{Gu*k7&j5*(AxT-I?Y0BLJLz47cgi}B zB@b4Eyop=WxImpa-c7XD%W2Wso+4-NJamRDR6PAei@d57IA*1Pl}dh>Q*gYG)aaC3k7aw&toJeLfBb~tP_X9*w=+1nuvc^Vo0Q~oP6Hm_uK_QWEbIoEWv-$nJTNtm0B zQ%D4dQ=RaM33vJT#sx3-pJF#(uCDh5W;ge)SxmLydA_M-qH-1)#Bs)T{9x4u7SI+{ zFD*9>vsJiVVi&zN%cEk_S zyDJ@S2qc1n_Msq9Br`X7S9EY^(R{A@;>;n#u&W#)Eks1%#v5!HKF0w2fkj^gdFNC?M2IfAD z-?oSi5cz2+pjiolkHF81fd15G@WDzH>^l(Zb-{!7G?+P5p|x@L53&uRsd2Mi(Rc0R z1@`6nWhU~hIlhV=HMQ*Dja`p?ix;eF2V~f{4U31a!mqKGP&V&KzS|RiPJLI02UAy1 z-=IuCUM?OlpU)3?yRFaXg`t@qZQYO8^@pjB?d`9dBRv5>1URw1BV-BnhNa8%&g!yK z9V;M~vy@4x6iQ5+?o7zCtY%g;YABt_Ws?~ai-3tctOo8uL+*Zx8TglLVTwh<&a z7(#O7_jIUE`~~AFHe_~ALsgr6*fB!EN^(=3;OXBsnDF3Q0Z->Jsp5kcmkqlgp$5HC z!i$mZDO5Q93ZRE49n=Lcn5GDIEG6t{Aw4s5iAUiwE>$MKp>NgX9qGXjL{Zl;yiUZyY^ZHB07TJjcrchz7l!KYo_ z$r>Xo1eNf>u2j;sIGZ1LzWYqDw`ZgRQ&CajL38s{D_?q}5S{rZNg+EuSA|MCNQo=Y zlbV+gQG;r5#u>`z8T+V9%l!c=Far|(O4xDeYGw8c>RLV!*kU#DuA3Q0Jv4yz9C|>P zf(9IkC+;}M+a~=UwJ6}8J7HCR8khrLvZLFCaaJLeXj~i&lGNQ<%g!x_kMjp*?4D}V z3)+JDG;s6FvdoW|qGhB!B+Wc--tCA{0Swpd6dC=By zQl3E_dewl^*|fqD>{}cqQCzw!%P)!jwE({h0rddkKn12}I|CXdPZd&bk=zpZs^mez zHD*DQ>mUH{#a$=EZ!Qzr8MK+w)R}g%x1D(}ITkyY#z|a-)BaWD|5NG5VxHMvk~2jX zP>Psxwizj#P#IN9UP26`e;{O=J+OFJDUf*h=~6J6e0|~lNWF5s0d-J@=n|?839e>J z-jGaRAeyZZSD>;0=`TsEWQb5k(v+Q1DEc_pezy>dcv{_@ioN=db>_*9Ik`4cQ1{`Y zUJlswlx^j(o|%l(WIRQ>w>RDM8Ox#9yy{1lb4)0!r4m!Z{u!xbAGNs!>rhf7NQevo zr*H}W9!UD9SP+;D{~S<=OaLeKRA&)a20NmdX!r;G*;GbjA2Q|n<1kPMIh9d5$(4z5YAKp&IjSFW)RIe7)1c$W$tlK%$Ec|&CWl2Ohona(g=iX1 z4yZ|F2gYPn#)rv;Xho!CC6pjRsI7u16v|FNDELEA2r`&+JL?CDgk*97AzqS{sc)OK z{|5a?o{=N7@86s9{rT@_Nh$x+Kaz2=cD9f)u>TwA|FUJmW<%(HQ;Q0~Q7x^Lz#<4^ zchzTRL>iTiSVNuFh0)BXUVB4GNwRLb_Pc`7le%;);%*1mlA88rx|_0R?=WltcOA*I zy}b3R+o{(r6+Wvgl@8P`Ls?f#QXom+$?4@9pUB;yJy1+9!G!WDD0S zNYpxI?`Py~@;TpUTPvm>*DG6W2V%q0?CtaXyb?J@MGx$;0W0IyZhn%Wsht?+IR}N* zP~mqZ87GHfJ`##gAURno>SaGiLQjL1V2aw1jQ5O7%s{(`&VtO*7~lXjvdhptEY*^> zX}af>S|a^mQn3;>43c)6jN#&4%S~m>GQ33_ z9kdJ;{DT(lQX7N}mHREvP=go^9STxPj@|W(^GlvAc=w%kgAw^GkY^&fP{xqTSF73X zfI~m+$@3WPTHgzLX)$4*7kku-m|%^2_dNqS{~ZSks4N^sM;+f($TF8%houUn)$~3b zwd1^4%F$*H5eNbt0`gy~$TX|pwtSXKFnBqdXrLWT<5?~A{v(K1qkY$pB1n5ofts;m z!W~Imv%10!SRXm>M;Y3p9lK*>LL44YfcR4fS3JyR45?YaYXO{IewQG_n=n1H+h za}(vQAlP7Q$)#Bk!J53S{T5ZZ_3;Uv%PnM;0oi4aAfYS zkx>z}o#|8&oE@|D+z+cM24!he8Ai4;^|_B;GVYF&K}C=^X`5EdkPnFFEd`FwZbc!# z*{tjD?j4G9FTMBn-u%wpEn*1gPqR@+)=BPq?kHco94WA^Qy*(tNOR58PF5OpN`I)ppVR-D7C6;f4!lYp^F|mzw71v#}Cf`$YK_?u>Rjz z%!U6ipi6_`sn*npBO#lggYO_W5%4EMbBMwTz%7KurOXwK9gaZ)eLPRaY@oEl=bAs) zX*ybkC}zl=Rmqj7%8S1xbd zEc(}@uq9t!dJ%YB?`f}l>69*RHv3;!%#^8}1un{ou4Gl7?$->KuBkkYVovGGUOsZD zY#jN}w=Nw8RcE2q1CkLxb)*!9gJ}PN>t#;O(O5t=DNx$n$NKmlh<@&;Sy6kLV-$!w&45iRfj@k&v`1I(OcGal5-~3%Ink zYa98CCbyXx>G#Oad@uNTfQ7!dsQ$@IBHGFH9n4RCcU|!c0%$?xKT5TS$h_Km0c8c) zY)dx|1ipLK9}33#t)l3Si$O^>q*DR%v>*?>@35lZ*`6$2@I5A@A%Y{X+bHoStd1jB zDVtG466^yh^*)xa z0qkPep}a2iHVQDYf&<_RqN-|bC@?|qq8Z0ps#C9Q>4oAi!}eMjhmN7r0+>X+4DEUN z30$MaEWhBRS(sku8w0J|>Xa~P|zLB9#0 zByeUS3qtGQ2^;0gW39#UI`=69os6+Nd9W?aTw50i!w=su3~^vqznqcVKDM3`=amI+4QaW+jkI zon!08wPIx%>_kAMuncTRclz`2fp&LKFoUck(z`iD+`$|5SdTDI9(q6!*anN<9tSJ5 zm`AI-Ke{I;=ZyGWylz3$u?RqBI&jZ~vHmuv?QWY*-tk=z%#{=F4}jDZ#4)+W+zg#= zHbU51Nwt`L&fTu8WHozDfh0ow++#!%XEVfuHlF7v^4730?9c=SW+S-mkYuoeeDBeE7r|;|5%SQA^LeK+`J<7`2ki ze5c0I8J46Yu=G}?!VWb>N<)-m^$xHXiv zu!HJcRk|O8eMbJZJggOwK3L5aNcO9Q<<@g`qqA;J&Wfo>L=W>Z$BvOBu@8WPlidB% zRd|N4?bD70>-y5MuSa7imp$X-@7%S=&0ON>Z{)}N$4Q+2KOw*3x9G{lQQE@E*~Iq0 zcE4c1wOijYV4yRb#VG=tCs>2qpAVWCrw`vi@jPF{d0eD$lb;B{e{tMovDSo z-)Cm>{rjJ1?*HsXBOvszbrnS}yT5dSuPDW`0%g<;`EU)Epk*gQ3LuHBV8bK zVP9L}kQC9*rD*RL*ImOTLCRRE1nk+NjaBq5D3=9dh)sV8CFe}J(NAo4xqCHL6+x5> zmzBd)D+^}F)he=|p`hocqTXZeXlYb<8B+Hdx1ai-1z+3n$&M5s`2v9w#T7h=QDs^U ztwdVsHT@VFK~m(hcE0E7OB;NNj>?8aFvYtyQ+gA5&di7%z^fwcI*#o~qxj`SVs4k( zXoyd1gbHUNEX#7o>x$1l5^Br7XZVrt1xm*R?Uz8cK&zzG*`6OSl5+3*E7}q z&P96-w*C!}vTXjkJLerZA**88{#!b*V?r z074PAawqQI%8J}`{JCteKo5#ex)LmrZ=kR&jcQD>g0hh;%u~M{EHSq83<6*|*gQb5 z?jQl8ezU%CiUqOZ&mrCvP_=h)KIxn!`hLIS2d1e1;$CJg8c_ln2)+GC0^F-Dal#w1|;cnku+&WHNI3)M9J?a_rBpTT~N#Oao zJ!F?hw1*e!56&MI%d=M>jt?QrFSe2@mm4%U`T<#(_YH03m>MV7USpR1RH+f?;(fam zbD0>&QCZ53S8ADAJdU0c>sl1SS(vG>v9YIk)Sjzbew{YavkF-VuTj0?Bb$lZ_$Z?} zFo#%EyI#Y<)gAVvq|Hz;jgitTzs1#&AAS>G+FVbBjQ&j{sL08Xv;H0x!M@{}|7R%r zk1+Z#6X$<}QIu~O4frn@HEI_&Jc8OpPm!@CY>vSn4g_>~p1YK=+kZJECQs@UOJ87o z?ahmt{$@hB~ zDCvD;sOdlA=zp|<6md1Nb(S%({Z4ZI8&4yZWun*qvZ1Crnh}bTZz{%ZqyC}kra9LO>d+>ud$64k8*Zs z3%Clz>T4#bp}x&A9NZE|^}+<~D|#P=C^$-jq#xcIq2R~d|HGylJ9*U-^n@EsmwylP z%9q#)dJqL?#&{-&HnD2C^}Ho%P;SVg+*yxr6?W0pUBg$t4rq_1EUD;2FBQS7eA%%c zXlXeW7^i^~)Q`{4JNcyEugrsA;M6UA%Z2as?(d_>R`|sr=yfX{(zvGHtJU@b=+vB1QIo4L@(*#1fvJFlgXa` z)RtU9@Vntf8Em%;5*4E>2!8bR^p{(|R4c~AnPI7jg)6(cN;!w$dA%1_YKB!1sGf3p z`g?1S5v2)=m#)>h3H_ zcNujWkt$;0uKezmN~wn!Upp|7TmtHCG=R-NIqEt_h^lV*X>sQBt)N|x>#kuyi#!Pi zMVB(%{L|DDp&%NdxC{ZtV_IjSGxS_l^(mv~m*hWTbnFfIXEoxkQ#>^Ux@=jyH>x%Q zB|-^FtV!T8!TO$UFEh1SA3D=>VmzF|&+%z8_6=m%V%+DwS~x%j_gBejn{pzR;+gNT zgz(K)ganeqWlf=m+IVf)8{0cxa-#{0dqBQIMD|*qOEGG58T>>l2$PL|OC#CFRe`|~ z7@s;1izj~&_u&m4A{`BjmJL8nh4xIw{jxPO#enQ!X(!RvyQlMa-=)gNjq|vud51*` zDpKg9`lTyWc>vmpQA)AWDws+hrSB58x_n4&xWfW?VPj?w{`iT6Hubq7Lt%4!<&oL4 z`Ukk}qK_c(n6Xb!N`nxIHep|mnNv1&Ay-ZMGCO_kNwOjJ1(UIkJ;b%q(5{uT2?p2o z!Q%jht=>S}{%C6wV9#GH2y?PS775OO5mZ_=&}-8R>atZ!wEB`b`_gltspYQH;z752 zHiLRkWkKDM0%l)OtZHrrbxQLGC@K~Q&-+)SI=V(S}Y2o_qk#6ejX5eT-=k%9f0NwuzV*O6g zwf$G9;lIItVzhu1umDWZ^*xoN_ILaRcjBCXj`~UAvNfyDw;F&XwbcKio2w}av{uoM z;QHq^3DF$Y6O84@15T zmJ7Xr{57kG{Gvpi_`V#^|EPTar}Y#iX9HVLgMYh7E|IlRef$W*@9$wWCEn4!`U9clzyWxaK=ZH}j`z*<8LVc&b?ADh#)N_$Jy*7f z!Vt-P^w;er(P7K&+Wj}33p4*T1$niy{Z;IU?NB74Z*2(Yyp?f7ecdhyH%yswz=s%AefZX7oeLOjFyCPnzw@GaoBX z!csWLb_3Md9Yk1ZT-c;5=-@p*;UEo&+UphS?0r**fgF2Tgbl(YwMdrwI?X})tAg&s zes7EKv;Y3|_y<#e|EQIQ+4xkt1*j)iYphnb*CwK26o zOIW5WbVi6m{8Y5TePTmzJL>fKfKjE(+dU{A&kDXRF#?A}zk;9`p{vi9ObDAZZ#Kbnm*QCCRioWf5}`+$Q2o zt5xc_$f{$swSmV3EM{|IKN@X(ha9>&iH@Ur`H=$U5aKD3az7`$VJ85G&-b^^VepYA z((n#5CfBP++Aj3pU&}BgP>)G|9L*o%6fkA%_-1+QVe(0 zAT}-1o1c&Na7dioGC^xCNe{o38&ug^3cnIsI@ouGB-!@9lc?2Rlp*^yR#oSq5KTrV zhG+I#Ms;?UUUNY`edK}E`D-0n=f!gq=nU^|*Hziv9fAYnv7u7G-yr zHUGKndD{Xz>jGWUYkJuVK8$>>2?G}12w!~JIGsAEtERqL(>@wYRO;m8l;g{W@l3XN zKwVc0z#@A0NcCM^HTEZG!fgQh44su4`==)1uP#&@acLC?=IY>4y&Bu;QVy8%a@S0OSmJahSFc@(c_Cynp4Bm zXCx76*EyFyD1MprE?L#%j5=e<;y*qivlWefw3DcOxw_UuEDtHXi9O)T4gy`XE0&H; z7?4&yprb68LN!twE7|4s9E1gw6%~Gy0Ff=TK5ye?h8CZ_zYt!Z%>N!{Nea|&+_z4Rc6IBPFud7lPQgG3dBoge@vR@@dubGX zX6|SU7<<+B^S?O_Ed@-$|mFD<;op0pg<3sT&92SOGjxk-8l!0;Uj_XbdgA( zM258M&W^Z9s9=zvg5PqQdf2^MY{;nN0(qiZz!2?uxpuzQJVIY^J&b^;#oLhUh-oSk zQt4CgNq2<<R~%GI14Exu;7(tC*B{m$DWq1UHW)iYuA8qcs3I z&S&H73aF@D>7HwY)GRr-4BSx-RK$SBFF=)as|Tu1ePW_+u!K8?o|0|jQoAI2=0tX# z0d?V;Y6ZYJPx(o*#fn&3o!KHl3nOqDq$hjtJIA}X$62OojWKV)6j^;YBDdcB41(Hz znrbu?#tWGaMCmQ16jq=@u5|sDDGL}4l8%S$@&VG91SF3)6X1}Q{uAo&a{JtJQX7tb zcq$M@p^$}4nTI94!x|g5j2wVs?gn)$nU@J^(&1`KD$+g-L=A3y--^Pjc;*&p;jAJR ztvk8M%~r+=LQM2VSygB1gI2@#7@`V~WD+zy+=z?9ez%|np@$$`uiI*e^5&}_;DtO5 z`qh+DS+bP_%F%G!f{4=C(+VtU5?7_}HLc*UnKNExb0zVeSYo!K2wFawaLP+mM z^5VQK)nW2eA;&^-1<1E^gu}WhJv<1XPpJW1MMsD3oJBZb2@FCFNqtk!+;3UFG$sQi zXvEfBYqWu&yrYTb7YYYEdGc8QIE*)4OFC2r-PEx@DNqbAiCxsr;J!8|4sxNwT_nv=M|95Eub;C9Vmui$AOq3}!a(#9+~ z@l)D$0k2%@Yu$bvFpi`+Mnmq4OLZo?2;}PwHS9?rM-G2;%wQVx5ecUTZI@-u%uYaA z<58Dn23i6%891U%i$e(8VVK0jwo74^0HJXSaECN-t80)o0$WQ#TWh{OhmVCc5H90~ zatF0|h@LLqD4q~D=j^nrh_e*Gklb>n_}p`G9gZrV091uCy2x4x=4+*{W^i<*)HLna_o*YoBLoNh%u?OA3J*402VFiSF3Y7Vvb2Fy+YaO0yYi^;?bbK8$wjq+X$@e zm;${Ix;`in*@`4ghL@`;DNky-a6>7b;4kKE)EYqczmjISjEiu8PZy;{Y4^fapmmjC zh-oYfAc*p`=Z~#T%9;7-CyzL9lvT71s4>lG)V;d~ zx3jcMJ980dIduC#DS@-RkZj@ipG8_UjxRg0q;*y90LXXs@_7w^iPr-O-W4tjl{Tx< zj(0qn4(A_4dlg}AS1sV9I&jVLh@pe%?>y3!`D3oMs|YoXV-ej48kW!Zn75jPPwM=N z@>Pe*par1Ga))+)7X$-($tlpTd&HX2`AY4NHxgX$p_9La5)?mPx>IfbxOSsZ$O+Z1 zrpgdLC`q>$F>M_qtn)=+Me)LjC>8(v&J@9sa>>_yTIB2ytbsz2-J-8H{!y2!FhMkr zAlDU4qAbXwh%Z7fpLya<)=11PU6XKx0J;mCq-p(i7moGD4oZSf3t?6AJV zD-;`<+Tre^PCnr8nwR}6D_GW<^hJ{O*}a{@O5$X_u9+hA>X_DYk^zlaREq(fK>zi9 zuYP)f@8}iE(DM|6?;U9Sb3fICD2ShRQ~FVfIyV`O99O({+;R>9{L-B$s24{9P^4_n zPBeCH)!NL3@_{~#{x_8b;jFT3%qtA;O`8hz>%v7`gFyAN7DbiY!*J=Kf60GUQ)mDCaC$%iHRso z587-stBqV#OmV_beVC~CX-pV{qPIw`T{=4AX6ig0Jq$UAqIs-!TJm+hPgHSm%&0XwN)n|QD+Bt{3o(-%JsP=Ye)9fWG)A#$Z%lypbu@}7~lXH}XeZ%U%T zrGs31`oSn(h5qYh@`2ib&}oQRHp|)}iY>~SQOyz^fsrVpwjLKx#`Si6Y$y%RWkAYX z-e=KzD@PPq*&mmUzc_<|ljV3+zT-(>*ScaWjg+n> z+R{QWfpAfu(tIl-o2CUvGp<}u4+rp zaG9Ht*L*};<`7SUWy>(W{i~$?KSpTRzzDqwG(5!e_b~G|M7SRxrQ(}K2n`#cP!6?x z8*aV};QYhT9LlDJg z=?)>VX0sXb#g9`r5FXRA-gFZ85hwgPNvx^SE*^HSENq|X_O~2M4E0>blp?*K>ONr?GNP&S2 z+kIP{KON03RP0krLTF45Ld)%uqz@ij#A*tq*KRsD8Bb;Ri+=kqnvG!>Bb$VHvH32L z9y)SmmBWwta_eRS;N@ib*gUvQw%fwjEJ)qc$-T-4k z?@MrZ&d)$nP6Q)pH%(4DrmdoiEl<{zTkl3OnUWceG+7u{_Zk4qBQ4|)CJ4EesZaV~ zRn-KoIf)vV(+y}Aq_P!ByXZpWglPFf@`=K7+|o=fySGoYWsHAdLT^CX^o(f@bo}h` zzmI!p;mMayT)mZmh8Sbd80EB;8zKl>&+hCwDIx$8eH3!knVc^}tF58!$RMtpUrBy`H$!R~u)dF`%Qggm@idM9&QMCZ5`cG_i7GQ#upV{CI zmJS(^T?LcMuB4RDgLTT$h8t4R4~rc&=3?A=%1@0HdOLx?PJpjL#XtY!wn8} z;Wv}+d4QUO6*xeE+#N)OD-B66NkOaG#TGM^uyVv78N}dI0qIzC)}jFW;s2oDtdaN| zH@>InuD5EaP~HwVW9F`R1nZk|s5Z0Zd3b6h#B6DLj5qaevhTb8?4mYL)*!@QR7l8h zp26BhUIa-uX^M%(xwTZ))v5tt_Sl`2ex9CNl}7c=YcTWZM2J_@9YzQorBcYz!4#li zacD5SleA4o!ubUEJMmIh^4>2k*rJ8J<^gdGAw-um^U3#i+3oysRPfS{T?`YDt_)}t z6l?pr{rdPDf<2Jkt?H_+r}L~uB$LjDZfm;xBFq%nwK zNV*fqDMYGLK?(~9h>{4+Ov8}BXE0%YVvT}lq0^n}%sPcD3nz-Z#0%4y`8D@UZk3|= z!41$6+K=@ef7DMuz@!8efh*_NnsMjb;!j&68nXUAc6W>XTRGShgOd?nGJwj5(I}T*zQNF7`E$Yx5{5 zp_4QHlWt`1%fuFQ`uN0>r=fy1xU9$=YVrujV)>Jos21xasz5RAk7k95o-k#@H4Z#- z7OgNMYY+kD46ySoceSnsMqSR?1p1j;sX~4Z=@N;{`O4t%IuUp48pVFg-X&QSFeQT} z`jFnXuswkD4YmCOgIk-YX8_9t?46SnsLWiCixhDG(*+Loe4VO*b?4RSG~$LCLfC^n z1gu}GZ4-ZZm>^Q7p(SJgJl7GVb@lpsQC+DKcvO9=>$@!6ov2-aLrZ4zrNMlT-dpgM zI+K}6)+rH#KNCT$fw+21$(9ey2r8JdlQu8@-X?RHoqplT>V^uTW;v#5xgfrqjS1Kw z!Kn@!g$p!nOr&sE^{M)~bbc+Bju#-FEJADtc zhGx{P%T%5Hq3rCX#H#Z$Nv>wDoP?{K=+JU;kR=B)j*Ro5l$RURcqPk;6QZAYXzTCm zFhew6KKm&!p51d&{9sdfM$)WsVo$VnTo|dUlN`ISIDyDu`*ZA7bQ(Hy-NyPQJJp0? zzxYOh%k$Ab=J6cMCJ94*2uJhc-81lzZhr}n3dQ+*?Cu<{?&t>(Lr}KjnHV?WcMS2} zxq`vYwjMe*wuK-p>=h|3qL(Q7*cFJ9D7GyHo{Ue13hSEw=^(k$=f(ZYKr(|)}js_Fge z{CfNVk8TkWMlJ_Q=+-kc;aby3%hrLbDs#aT(UMN9f$RVIlAsm$ytDNIuE*z2|C{v) zNatBWc{3Uzw6b)~r{?Q0|D*bfZv#(QJv@E5&Cz${O5|nWX@JMO=Ib#(1Rn1v$8YxI zVL-O|XL>=3regTt?{BkedOvxj_ZKFs(k;9Ya*<$cjIB4tBGCf-a$<!itPH4Q${EMs&z)>alTiWOebf z^Kysngz5@kw7?^htSGa=Z_8f5+X?vIQ}MBp5;i`I4)C5Se;B^S*X(G)&=@1moqbht zwxyMhN6{u5*-vwlC7HIG$o6kFOcExneVf&&1rXjoLR$5d6yYS%j_CrKR0JgdY>^RV zh{PR9Y0{TXVyzXc9Ssnug%lzej7!kvbQ|ZQ^|0%2+||&!8c9z~r8g!N~8T(_b9KR3SL-}FiPpnHsSQVl- zk&Tdk&I>qYvRsMlb2})v`pV&KyQ%H%=kSxKe4Nf%CN9ejk$DT&s%K@NmWR;5Csp4o zHD+zU@Q8rEh@;zx^o{&0m?Lt+^v7>!Fr*3;3zptX-Jth*Fayl~YRX3vHr=YP0}kT> z`iWzARD9;lX_K*PPA!oO4wSuDbw2;*k3v%r!}s1py%2oVYch2}LwS ziY$u-&)S_dZBm_w;~7ly?V}F;FVh3U=)|zn#Hi`9}kv-JZsDh zUQ>a&w!7LR?>@8{JYJk){SD)-!96~7kfINzMgeFS4D`0d+x&G`wj{D$7q+BQOepX% zkGPrfOvg)CvUj0Y~YF`Mf4%?TLJxGo<ZO^H?@8hBGN}_mm~6J=RQlz%8ED}+C+!Nw6VS9ih*C-UHD`> zu#vm2S4{R}Zz9bwFnG6;OIJB|+tZWP?MNxX3xCc}9l-JFLgpbu5f*Z#;z(WM6=U|8 z<|Ocdlg%6wf4gaCmI=NC5rAV^Qs2feknqJDxV}cKCoVA!`k~-_Pfp_ZbQSox4vJIi zE5Tv2*l4Ah2nI=L33h4f(ZSc0P6e$PWW(UEJXfT37`(ebzYr`|$OdUy)t4ZKFOqgP7Ji(zh=C1M6kaO3rX`(F?(0vU$fgTLOh$BX)=; zcFz!B>#NiPQ7KlKP={PENuM)lTV(7~ZaxIdh1d@;;19yh@HNx|S($V`uCo$K%S3jy zL(}Kzb~g%XQfN(igh5vFY9lOmPY?2zj9Su{%xoNJg}$UbTr16HU!lRc{?m-sW1#FS zgWY#932o)5wr{8P_@5y=a@Zj8t#{E`de_v>8wI5tG!svMkK#ts-&TVMP^MDZtcQp= zlp}IR*a@K!Ox*rUK+j_&?l)Mefm6lVXQ}ksx4Fl4sC7xa@#qIsa1OUW?J;p=#8OQh zo9#0uV|M7DAuJ$4ev>ZWoq-=RU__{|m}tnQGgo1i#C>{7@j#L9B#xN!NwiSFI?kzO z*>=C-iMvS?Hu(k1<7X|&XTOa(UTiFrOjM#)j?#EFijR^Mg3(^!N^l;ecS%YFPg}k# zu2tHiJBdRY#p&_A>ixx!xBxV;xxoDEjPR#{z!4M%Gcm}1dE(m%3DKQWz|&30&=b z)KIvVcI^)&i;Sm;ls}&x>vw>b<3zq4JgR;fQFw_Zfihqn`LU*P#$0BD!29u7I?kA1MDnCbGP;ciuIae_x1 zas>WDuV_l+SM&}LHJ>C=Bsm2s%R;DB9Vin>i%O@WVF6xVq=@dd%JgmR@-nMN&nboayqx>mC2 zfCRrQhG;FbRTTQ;H|1x1nm z&3`ldNB$efH`U~S;=ldx{jc;FBkuov0z@MI(vSSjcS@Xj0TysZ7I*I0siB<(8*Z9P z_T~SRSs>ZYRIjq91a@dBgkEb-)!9A3++aZhhyf?@QsN?Mg zfTP*}S(l0Yr0jPdP}ecVgzP2>ojm_{?l3W2JgF;u<+_Jd{D?z4%7PnNu6bo(^waaX zep$T*B6stfFtF(M$RPdMN?|yunBdSHnqw)lOK*M8D2(W{pemo2Rqc;E+N7`QYh;pI z!7qza|FJam-5DN-_ofmcT~HmI-GEEak4gainq=Z=mW!a##+kg1xWUX=quNXc3-m%W z@OK6%S55=h3*fqlK~vjUXRxwZm-vx%n^ceZH*gIR;{VR;PQ~lcoMHJ@evszBtL`oVt%yn{+Eg72GSyY@Sb@3$?NmYT2 zh2pA?h6C4WGuk)_i7v@tNVw%I0H0(IKUy5?%&-;%9?O7{RrZ z`D6q3gw4K-BkU0VAm=Q$NZ^kvgx(39C4Y^ik4op$?(~DE2Ohrl9)8kZho+u)(DsQi zEyOfwwN+}@sk26sK?1@;tyCr6;zg%CcfWlMqpxiI6r}Z8&G#Zi7fEm%fgEZnt@i$t zXenyXeNZWGWwb~>4w4G_gY6P^&2lCTz2s(7pS5B&q9e~D0%F^2Z}~NY{ztRW+HYsb z`*K06)hM*JC=2i;E3T&NH&etloUZ;D$>xPZcgzGsdKJf-Q1$|hqMEqi(*R*-xfOl| z@VMkZ-!?IJ62wap`2M4wB+>n)<__NTt}tZu)bRJ4jWF|A$>>rdl0vcKPC*r3@L7s4 zDcK8#Dy>b^>5Kx+8il;pv^pSQIs6Q2RhWF}bazvC`NL|M~%p8+jXAA|E;^=Ny!m6U^9 zhVwMGr^<>TpVuyN?eu4uxUDT4&~pEB;^^{pbMf*Br~xBFSMDjtsa|3Zg#_lMVXxv@ z0&A9bywe+W_ ze2KQFZB`LUsaPpAK_hwH?=SUON3Pl4a`j*59!>ic8Y!OOMMzT&-XG2usa!)uy zq76X`)`$4a7Gm15uDQGXPNa6Elo#EjRN0u4c+GyHpkW`OWWn+{jM~R#_Y-p|y<1C4 z=h0fw)Jk*^xJ#^xX^H~(d>*;UOjqAa)EuO)0;9=ht*OG=1?(yJ)aFO-bp_t(8|-UC z(Mnr~XUak3IKkIr(T1)86Mes~p=Yftt5y8y%j>1PzeQew>m-Ks zGLYez2}ZPEkvJqtDSMll)xJk2)k}A4{l!cp4cal9w^3V^P1~^ja*rpoTUbFxyJoes z_B@tMtNyI?h1nfKK=l4795&TJ=rl{k%(Kn11N@wGTYy_4u`wbElDDWXUB0tJSzN&I zC=#NMGDQq?-oQwJ z?LCX6bW&@Odd1tx zCiR$?GvSY)laKb*=QQ|Yo>>Qu>I>0N*z=Vp7wMihTBK1MD}aGTeiYHi^yVI$pnJZ< zbr5_*>sWni8e?)QuG|r2m#bY!f$9!89hd35q>1pqb9gDQ%qd)5du(JxaXdLwtdcCq z%?L=`YDIFE(k?9~e_u%7xAVZB>e_%NMn2{AYpgnd$<`8l?QcFlR;|;*vv0W)kO#T8 zi{_~CtbDl~V&!4=vQQGJ&)hb$#XBukba0`*sPfD5tB_F&jY;sZC+NK@=o=?;Z_IJU z8TdFW#3q-ZfU_miG{#<+)Gj%8mPwned1dFi9HMPaKy(hr)d&>V)K41t$&0#>1CCuM z-BGE+J}RMaILv%n&~Srmv`Fw(J%&fdD}1NYA`EZeQ^;~R zVvd2MJ1c^kNc)>guFeNiE_W8;M%k>Y>F4}%yBLsAaxtG0x?um>{<>(dH~15(0}Y-zrv8q=U@LH(%v$t4lQXH#@*fBU4y&3ySux)LxA9}!7V^=cXuaPa1T!K zAa^HcX5N|iyTd(IU#fOhfIoY6_v(K7>DAp$x!mS$@=Z z1Zb} zYzkObdf|e6cE7^^3-C}K5-N3_Q?3etGx*-^CVFqDaXON$yN~1InTbk->h9ae#1W?etd)Cvr3&^7PF{fe8+v`er-el=H zvhV3)P;9#IFeScHu@FfG={OeQm#FY9(#<6BmH0&n6_oUm{$*_z!%BJRs9zzTo1e~r z;lEnYZDq`!p;Xf6mNzcfxNmy@LT7@_l|F!dRs~Ybi)4>J9kteZzAd&_ z*$&n2-y+|YJNgO@5c%u7@b10m@&6FHg7d$L*e$;IH%tz{@PkoU&F|a;r$Eq+k4M7u z1mSR5`cxTd>>-lZ#q%vuk)kI8?|Jz1%Nz0;E&-G=V6QZnLmcl`o1&7AYUt&K*E<;iC8qta` ziFkCW*|8mUT0pV!)38=rNE%@nyB&BJTk0DSH)ZKL1lyf-SV;tIbnTk$CsHI2*m?tV z%SrOMM^YZW7v(T=luK#rV(A^Rb4uNlAZ3|#v#W>GQW6h3oUBq0V1J7`$+3$R86ak5 zK}Sl6(LXNH5Fld0v|^k_}>!!>ygKwBVDrPj)1@g7aJF zHYAc03#~AEq?Wd>Jg~?0np+@f*YC3&^_36U1N?IOyQ$XSILkj)uKthH4om1&?k7SD zzwnC6$xfWz2Clr_St>opO>7y)(z3lmlQs0WrGfi@B+v*{6z9G=|j$3x`FQV8M9D4G&8B$@{; ztbwT1W8MjBR;7iKm`0E2F^KZi29BXoj<8iO5XIo-Xx`SmH0xGs`}{re-!58!t>E0N z895u+YRAfs5|n2ue-*79saduxW1+>68>=>56m&v0EMyx#(n&E=kYh7 zlDM;jot%-YiKUs#zbP|CbZiWrgizb=>$vpK)`I&tL;^36a-6>}-3!`@rZn-|yo*9RS73#tGj`^pS%1W2i$~fonp|o6!mtnN>Q^o^p+N6)x zNy8mUB9e;76Ez9DttZ0Y+a&yk&_Q#_50P6RtzIyCCYBv{*bFZ{rk{$A^+->H1QapT zCs*V(tn#;lDi_$}p&5?{=+7HoMbG6TCmf3jn^fy`<(7@5264z8@IIJsqqh7M=wti& zHDdelo=Dpst4j#Ps&8I3GmT|x=x0aOQN+?@z;7E0q>yym2H4QpyYPzb{|&eQYHzK@y3I2PTCT%}Zn>|lvPr|85^ea|<02G_6asd4zP$G=V!|S(m~fOpn#;G*$jXL z+ET%X-l12~M$_v%<&sJ|<_xl#X*nP0x6@Hl5fb3X<&~PdIlm%XLcGWPR)Kzh8nnyp z=mz^BRED|sYM+;5Ah)x97JZEM{CU%1cmT1J=1@Que=8GFPqT)rAyY#wNH`=O1wM>^ z+2S+>gSecLH_g+PLXNKR8Yko(kuLALMB1Kzn^TDff0?g=_B|JL;mnu zEf1_tB*!|Kz;6vH;h=E{0yM<(?pT%g+UftpZA+Q{`xQ@+17I>F@q4a8sxP8Mgn?zW zFv=f{f;a=Sn?Va>*#K_~_wpx>v`D;@`4G@UNox?h1Dc_P*elx-Oc{N&G&_-u5{^B~S#s_=YepVzjHgmM~`ZxJksju0uaUuaY&j}n& zO^}Y~KnO2M6-vc~FWJVJnx~-jN-XusWr@k_wg~|jmn2%sXAM;9h#v;ITnGtj^H;hX zOo`N_avx)@w9@(1J{`f37j5-1xqZmGsz?~?VO>|6!(sRsZ#H_8_`L=n)xu%qYEv63 z5Y_*+&CjzX*=>@g-|U6dHAG+{e(#Dh$VTMk?Fj3+*cwN5bQDrcNxxg7IF45!sMR`* zlin>+Yu+Agng~_ZMv_3~+s8Co4SqrTUK({=c>d&?H#Z2Nm>nK#EK3piADA5_Aij%R z2d_`wDScj^l;o`b=rMRmhYQjdmV*VH{J1!G7!t9Mhtb>sIOz`N`xT@{v5q^kucLQ_ zG+2=ViKTGoqpzy-jO8ZR{bcVUdisp*X|jzm*b_|+FB_Hbb2)NzxY61-82!V0pm$S9nojkDT3!kCd%RyUhr-n^ z>(oYQ8}~6N*GNAK(dR6?N9+s2Ly6A@RkFHM!Q*{F2>t%j0heg73o)Jk`6Vb)J|8zv zO7A67^16I#uPAh|l~%=riR2dx*z3#m(%u#HFMRnu8o7&k@=teji%;{D^Cwy7eHn1) zZAc;W3{NIfv9Yd-!#VTY?iutxrSl`%>!6^rGM67RXF6Q`!?KzeOm#{^=v3h1T8p6t zio_wNeth=#KXc;b@3^Gpr$2^67+N@ET;bi@mT<9V`*ckNcpfPf7F#e*uVyoj$N73i zOegGSC{a}WM(%)V5(;6WF=iDStKELPwFwJyXkRqYuMIj$$0h2Y3&N*>b@wZQOo+Be zLW=_w_ofR|_G8mxkqPNz3s)38b^r!)ht~I*3^|#B-du3w}eRKXH80) zyxRNb1X&WqRmKcoBH6@c4$E-*`iQ4Oo^r7BV2zM|z`QDG#kyq>M4I0GWfpXEMagg&=Ikg{F7g|TIGMA(Z7W}oiW z#6&I=4o!t9OmD-fp=I}sZ0WI?)JwtkA96h3b^uLwF2x|ZSnCYELpzb$(eO6+#m$F- zT9=A2pSRjU0{dhuwNhiVo8o0)E*kBdrf;p`oi(tn;OZE; z-8z$)$egH&rY*5NX1pDgcxHwSw$WOf-N;1dMWqBZkbPFF5qpS;l|~OT=*2y(1c~V=bp^o#Q+XdA^rU zMHycU6~*K`$a?JZDm%;~>_E?x8+UKPROfKr5@%ZDg0)dhWHL)NTCx$T+4Y%%5FX9_ zwB6lZP<$OVsn6u=)XQn*(#rH6tbR5Su6t8SNE3;>l|tUn0fswT6;|qb3oHZD32pkS5QeLBueJeKaTnoG?d134Er^pqyvh1y?}mIlOOg% zC=xVVCKa<-0^ea+#*Jx6UYa6P6W)Aa8aPJNsu8DXg7h4ouFIvLXS@CkLMD$*h+L2h zNe2wuzL;&Au_s20d-AXW6bd~Eji#2#!_Er#$BufT+_};bvx7{xKr90}FYlJK@=FxU zkc)ioBX$}irF=`mb|-YWa(_%yXsg-x*k+X~i%A&L<|R$guP3m2QLW!s@_lYg>oQ1V z&oPU_i1m|%7D0|3B@bA5eeo2(#m=eMLe(E~ezsqUy6VELn34dm%2Rkv+7A<`9u8=9 z{_#_@C}VgBe@_LX^edudtaB=&cv5N1Q9nlUNWyaJTFS$|{{((N>xsyA_To{-#2gs| zXKlG4H5_is6ns6N9;nK+32*KpeGmrf92Cx{>meyY+kNI=e_%i@)P~eKz?zcYMaqAJ zh!nRq^RzOyHT#RQ`Trnhh2H~?1}|RF3UiI=>r!d=YN$v$OpH_+MPP3 zfnTjJMarxOBkjd=<{okg2&@%8h2RIl=IEZli!EInz>%4Jrmb5Hr=~M!UH8Gn`qm<3 zHRH~rXd_wMF&M~amf&BoxGta&t#JmK%HRFbY|`@cC99LM-JV?iRE}}UWjV7p@P`CY z8VEBc@s=-w1bO~*Zi%LiAD;?)TA#9fd5fK+O@DJ+8@u)3`=`+*7=Q%v>LT0y#5 zTW%56a#nOTA|uwXO(Q}wNdg`hZg^)4WdX0@EKm>obiZA}H(i%czuzpDbG*Cv8SLQk zr@IZ$IQ{AP=^wAM##{=P39y0ccd_{2$d>-Ex=%^`!=8xU`wmjkDw6Z(-Q?30pht`5 z-$3GVD>fU(^GQ7^zIKA99|$Q?!`Ap-WMdnsMBm5(vZbjPjaD%gvj$WgKb5*2i#no( zpxu$WYPOgaYk%TLB|KSHh8e7L?%B>cOT}W9Gic~rYR?1jdInRN4Ap|b2BaauQa-;0 z&&^!8bWOv^DDTPh04^Xy;Bc@PM~Kixll0JWFQ}zFM~<0wfA8*`9$1PHOryl_e4m`{ z!rz9(udtY-6b!ZP!Se?vaJPS8T;?e9-5ae7rg?#G_aKtOEe9<5=p8)IM6=zo;06uz zo%e;mIDK(b1MG?W$Tpby9l@3sK{lpg_6OdX3@UYO^w;4=^nM6vt8(YO3Z0g25tpL7 zPt{9wNq61aQ79|^!1XfeSBD)uxIEEzZ61Gx*ecBrVVnTX#J#JT_eS3R)8E_wdxGQ^ z&ukAMtpO}*FgOcmGy{_Bk#e5kY%yh?9k)`2WVj@y5bS2Bs3BY~2kWqb#R3!oIK!z=}WqO!?RVBFx!ZfdWlw0o(;>@L# z?@Cw_K98NnZ#LAp`>knGBu#Jy?`6;cTL-d$fBoF{#kgw5llYqjY_>apJo`3X^?rxn zIz}v3i>+>E@gv0VgtRYa86F8BYSnl1p}$ccP<8mXfa(_iClw6?q@rcC5|aFaU!ugw zG3b_yFw;wt7Pgj$a?!wktYZ&{H^Fw)99;PQJPmxojRoV6eOk<>ehd;|N|aA>y)mRy z`OX%T5ghltsTm)w>GA0tmcyg}vkDXm*AEL9H2HMIZ#OeKve0+0R@)&^baH!~LPiTu z9-u(PnXD|mhIraYa5b39=V;4};wkz%rp^zhiROrFV#HzNRi|5>Ebn`;s0b>6D zjbId=&0GLW$jts%q{&HIj|FVV3ImYpO4Wi@&p>i2)GLHm#pqf>^FF(>$`1HhtGlO7 zY8#ypAVxA3@Y^7CkJ%0gce0~{h+Se#?&G=p1UV}+u+1ai8BS|rR72fy#GEy7WZsfe zw!;Q;>9`j_N-swEqy|$5Sz(-m^qz#JfQ6k7^UQo-)OP&z@Gnyozv6$V^-T%u%Wip{ zR0y7~I)r_W1lk&L8KCz4pzPv?!1MMYz%!eX;G%?7_R9^8PM7u`$4dVW_xu^w5>01? z=Jbb(?|P~9^~~X=wks6%&ePCu33bx2X!`l=-W9|&1loxupnbc(D;f)vDGO%(BAdk~ zDFo)1sfl=NiCWLc#e)k+3$*AOJ8?|qd^{IW4a8JPuFKhM-}{-X^MQKU(T1q@a9WTw zmGukaajDy!g;wa~Gw2hW+tv(qifB}_du-juzB7Kq^O9HpK_730aTTcP1A11%9mZLn z>V>5gM!l)_fXMWy`gzk9<=Y_*zC+`_y9g43;_i5RTK_|?%wYeeyT?pckqoguBD3C- zK8#bBW8c^g+>Se&$@;IHS*Z>J^W(T}^lX(}Zw5y4yv8B-Z{EU;jp6*bQCyz}S?k=kWrW=*|cx&6G6mh9XHv zbAV_mqj>Db-JNsVHLDwcx{WWnoi@mxW-xuFNQ3%DKlnwvuo-q$GNSJ*CkY0C&=>kz zsvhQcgQCD_|%k9c^_N#pR_=KPLMH&zZh6;>z|_YfH|JWD7Fi>&~(8O2iCD zCGkL}sb}BQ9ek4y$dZj$YG+9pyF9-Hw|s5Z*AXQ>7lxwn=Jj0EJ(+BNk1ZM2FOx#y z7fZIbOkX(Ov}g+-662{Z<;E@j4`U}gB!MovADa8Fx}!fu7{{Uo`;go-oaXVjFFREc zD8I={R}}{4h;*YEq~!K!2E+9_))>&*XVuZw0`ZHOSBYB*9&lkKW2Aox8+#;Dys)!F zD0dAHh$L5zk2A(XSX*tIYYd_0GD{U~+7Rt-sL)k!M`(`Osgd(yUT60Y8G;AI&kbVcUyWsk4dKDdIrub@So!Y-Y$Ya}m#LWFkLgSo zQ0y{KaAQ+5+uj`ZLXz zgyc-t_wi}JRm~o3#HN8=(-*h13c+9+U6_dF~qFvaKu#O$E59FFiK(8Y9w8GHg>=5#2g!gtk000P0u|-m3v;d z)aQ5&&UiV}RPh#;E2|(89@i)8=e z|0`kPAH*3p5#bX2JJ`Of==a{G{{z?jCLdh@%ZUCr1sRiIBmZ(wmGu@kUCKJGDU97|nw~`*yA07c-77_}o{tlM~pq89>G0@+DoAM6-&MJh( z%h`i416}~Tz@(v*sGv_YyICP_r=yp@|kr(rPJ z5bpYp4<)KUk(3d-qN&q>8|b5LEEQP&mF4G?`vF+>MUUer%(|~b&U^huO-#01k!L!( zgEuMg^H|U6ReBmv=;}PCt_`kj*(0M98B{gCA99r72a7|^^sAVuhyoXny-r$F_jPs-Uv zb%TFO1kt&eTt>na<3e^Da=b`@&8FhbihbISOD0?*=Z-D!4B@<^qcu>S zqv&=j4dMT719yd&A8i5O*dOru?@)&G~#<+~1h*_H`l2=ZMa4 zSXIpn)`}^tBDDG*Y!%5Ci7oo^I}oH-Lij*!spnXSi5FYHhy?TL5LTFQNSRH8tGzfv zxrev4j-zQlLmWf!4%SF036I?r!+n3_==H2)2ffWK@wfv~C+G^DN;QQLiOuKdKTz7a z!xdN>U~l;ECWr4iQ4}53(q^{Ear=9faD38;`MooO;*VO@vPX#jK>C2Eq%W$h~5^8jYvN4`eINI zEFbjb7M3yY8~(1wpB`ISztlbdThOX_36c+P`lGz)q&O~q*Fs);^`UxK39w-OYW z2pCu{@qv4gehyIE>g2bE8ltuVH<@FPbJT>ca8iD&AB<7WHLvtk(5M{uLs=;$Te+$e z#f(snbPJa?Gi4$93OX&_u|G&L8IXa4Xff7rQns<5v+U9rAZ>8DaKaamUMqw{Kzs-z zVWEjo?)Fr7fi9VLx2;fu6{Du zJ9$Zb*FV1ZG~vHV{Exf=W5EA0iC)|iQK({~vmr$@IfVweqJi&pF_f6uZD+(iHKpR^ zB4+^MF?6zmKX7EiC&}yQ&>rtozX@2ei95zu%Y{+>7IAass2a)QR&f(e`Ru6%S5S|2W@Fi%j2(C ztoM!&9er|loJfkS_sQu`KGONqh4PZP@r*}@pdpJU;)3Ebk{Ygz%=TSlExG)w~=cU zm<#2`vy9HXyg6Bl5ThYd!&&2d`}JnJc{^Oz{n1rGt}3x0>R<8UBp2{}lq zONeXyHTT1TqdNeWwc~p)l zyP;9`BBIE|TKBoFd^vitzJFO&&9q->7aO{-P&2n>@oVc!gY*GVV`?>U428I>#IY-aSkf#pBu0INk;A@nK2iTiyn zK$$?f*`p&%TAuUM8B=J#(Ps$0JP#x(Bc0;))1H z=Os2(utoemf3Ytj)VH-+d0WySg|)dR@>Za)fs0`1s@XZ|yPc2sEbi|Z^m#y~!x9jG zg5HfmjDWxXx3;bSIm~|?!Y`iBre6>)+~W-JQ?{|f`BPigYDR!_7t8fv^iD3V!hkwJnxgL2v5;+GT7 z8qmw$c+xlpvYW7TW}f4}-K~3U`gx=kkv)j1qlM~n39N+EARp5wEGR*5O!)An7771| z^`RVuT%59ydvIV8SkhEZ^o>^@Vdd*u7vN34>txdzq64Z^)lL)?K|(Fgt62tTTahFJf6Xgd&%JW z>FdDO*?$TCX@+fv%~s;fAd~7BWek&7I527j+L(UZma>+#SvPmC0Ok=4!IHA=C`(CA z3YnahCZQ`>EBA+new+-M@=qh`+p&%I8hKFc3^%|xXm4}!x#Vh4qM{wY^PH9tK+3e<5!=|0& z73BM0!hW)^x3$dB&P<7Lqhn2OBhRd5af?vd0XBEA`y$UFqnsn$Qg&DrdqQjoGYclb*Nv2rkgS?*!?E>U#oMVN|UnCRa>Zb2JorOr+vN>v1VdRWwi zsWU|jUhj8yd|ZUr3GT6TYV=5)IRedqaf(Ds=wJUfU}I7l9dvtPWL+fosCsQ2!pP&i z$9`-aaBK@6bGt0Gm=Bem0==HA=ufR^%K{%Vfi`OZi;PgpF@P^nDol{&UA-ArLummS2Fc+jByohQv{~ywje#MHykFNEn}Itlq{=D4Qa(y3-_xuc@p- z@dhQ@J;7&;ai;CK#;X|S3ca%X)k@=) zBn~0c{z!)=@x#D1qED@Y_Do=!@Y}qmf)d0!U|6~Wy%r!q{k6(EZ1F)Ct`G$v)hJ4#wF4y1;rj`*`p5$G?pBUp(DE74ts^D=+hVKkND-T74x^ ztDuDh1^n2&vRtjY7$)h*+-k$Ue>xK}>godH2MkZ`7; zg~U6FbzuX^stfF|&_kHv_Aoz?z?~cQ*>Y2{%Z@Z{**Yzw4ChZzoDV&-EqKGN(3oy_ zCGUk4Sn&PT+XHuSQd|qLLz8zcmH+Qp>c1o-W@}~#SX=c^0sVEGC;!~$@a>mu63TQ~ zs`beY+M;>Qf}av7Ux+%}Ns~#UvTQdFN#S?VErMz4yDx>cr`;upzqVp-7BTQ9;AQWA zuUIx%M$AA&1hA1ZlF8+on~iJfoFK8*!LvjZs$mYEs|5HWK;F&AOK?7qGoZZdKlFb) zYU)E>V>iIp9|nB>`&E38?D&`JrIh~TNbhe#M@QRFGb{PC|J>{VV-GWBOBIStS>}cp zG>8UPI?0(O2^}RVN+t>=Nd_&^1tmHfofi}|FMP$5rbs=x=%6?d>}<<6v>`{BU4tI; zkLT@ctMmI!cD%oAg8T2N>Yp!a{&}8%*|1-{kUhZZ0!WXrG}Q`c;DG{IjCH}{+@6d~ zS4$RbTT~jg@15sNQc%HDQ?IYn0eG{1MshPwdgp!$b7wc9vc(N0$qDTn0Z5F|Ahb&2 zrCT^?L20^O`;kjECtIaJfg@cK%GSWdrP=Codd!rxVNVN{Sn0+_nOa9u32Hjc%AT}EluXKcTds3Q=$mQck_#&m*RW#0 z-B$}DF?s&TsqOjoaJOdGNR62Lh(SE7b4La3d`QdT^ zc1pC5z~6rjG94$O%*&1kxUTMSWrG^uav3wfulj^vUIhkf#gAd%!)Z)fdUV9MGy(UN z^UNeenU0p?RDmw-rfrYAelcfzfu=|1XCoRgSfT~CW(i_Aw{N%x zB9Ly;qM)_Yi+rMVDWedTh=37TngO*P8wl#LX<9E+sf?vxoXnAX$C#|Lx!#%yaFk$K z;uz5*&i?6L;V)bYIjB(v6coQg7re$rvQ#pRvWZ=ps8Fp0izw}_xC8tpTS{4^$C!I& z)gIPRE4jRclv!arp{tg#Zn2*sXv5T!-xwkCx1Lh7zf$nklN!xx4%8npKtu1R!*G7k zs6QEfICwhfZ;^-=wao+R>*h+!2*|gJcfsEpL^33gU1^c{w8xaEGY=(jpDp8@boJ}l z)ft1i4ejl4!2tu#k$VAj{-aH~7`CL6GQRESEMcAmHpX^zoNji$xP7qOZbqqiDpJ*0 zKApwXd|i8ko*_QWnMz1=w|nl$=?Q<)UmWJGY+az|5}_^IdrYD~O!3!C($prsf!tjE zT-vGVKR(@VRbQ>4(=0^^1balE7g(hRiznHrrRw$(c7)vjncRRz_1O5^`WWA>7XB>& zC1z)AW@>6?`Y+G>&-?tx<;DP-M*!n)056*z9X?n?*|az7h8M8b0JnqDemGUD%@ED8 z#ZEjm)%~@q`+Wkl%bj;_2!H&~dFHxP4ksKz+C_jLTlRK}kQ*}NXsGr9NOmlX}TQe2X9L@;(_Urw0f23ur$ zI&Uu7TFj99<(rL;8XG})=H~k=Y8g3Kv1c^OC^&@$_E-`Vj`BZ~}gRQG$5UPpAiCp%NEJh?;rrHH9V`{gvnU-9F#BCMh z#k#0;DAcHM+YX67G{Zh=brsYGX5k{ct{la|UtfQ8!_GJm*o%YFeb=gW%`@5$|H7vHgkC;F0@O!+f2T^B!}giN27Xi9d;++SGVtLQhU89YFJ zBtoZp|L`*Qk#+_Q0Mi6{*EIi@bNnC2_^;UF77M^f06yb4pr@5&R7BRD5~s^GX0o_i{DsBrfq_)huRD9C8P0E;}g#7>PScCay_nwl5t<5CJmcykW4`u8WcQsU}BUl zu5@8Rh+)U!-c13wLuVa%VoNHz0NEnVcfdw~r&Q*yngE2GjM{VbL(!r8Kn(mRS5<^& zCL4aj?Cz1VuMJ7J1QTaI_WY;3yrMa`jlW_p4P|NGwE1Z;VN%VeSig+fMGp`!FMiR>iFDI2VS`H$302W0UfKo96ja`B%SrU8x+7^OaTGCd!t7+edX8j)_?vL)MV^&k z8Ii}y*H*3~7@_c!{a-(n7|)0cOlqk!VbJd!HFLFxZPQQfhs&B|QzZz5c+~CW&VrG{ z$wb=IevP3foK-l=7zZG3f9%<^$+Ke%B(c~cYE@2 zl|#K6-ip*^&mGU^cswJ>7Ih<^)__PU1>=#jc?-{}%M#*Vm;QHpReC$&x5)W=dES$zxOZcR$u)csv}C zFN#T4vam3)Cl|6`fVvbuCb#3=eVkzW6oMb98}I*Uwyf?<`rym4!3X=DJed{@{o|MR z!%u;JDNvHBN-v97$ci+&jKH(dF!<1EM|n~}GJ!x**vdTx9$qpDD|gihA~}JYb1(+r zX0^@KNTPc-K^bs1@N0ZTaB5LpWID8*40e4g8KSZ=wmQX_8}RfSqP-Nn=ulbcZ}_2g zKo6ZW-QO^cMa=xXe$MOYcnUVCSZsY9uo^|x-sg`Oyq{K#$K;GNL8{07g}qOzHacOh z%+~MhPOj|71|KL_LuPq@Gd#chU>gwd_I>=LEQHRL+73jK4?lRw6Wrn*V0y4?!iB%n z5rK7oNPw5s(#oq8-f-zKW3%)fekNn>X%8a2ALRH>eShJ@(dEMtuC0xHQyNyog+ypL z91EozqZ+o3H5Q1nb_YLu7RDEA{4!rk@*HR1=@Cv$7oQqiL-%ILkB*t)Pe}G0&iN`5 z9+}=vy9F!Ni%p2%E0V5eQKZ?@JCUbKR4fgJ-#7+O_4w)8_}3=b*&#c{feTQa@{!yp zV7>w4W`3vgSQ4MR>mc1-zrfdMHmWD6m*$B6in#kmvf4ZoD)?og@qrNWrPuJN9lnlz z+9&L>xvzexDOuLBcOlQ|z#h9d=CjBqGQ{UcP|UavD-_op{s^MZrn3Ve3I(#%Epw`J zD!O0Mh{7>qy((DBPQP(=V6;EjH_)dAA#U5|ZF|9C3*EkTaN2?_yW?X>yG` zY1y>z9$fMb!glK`aeE4#j}6O@D~oGXyt-T7`dGnDYeD2z`w^i zcTqv~Si{a4%0Fysp4(&u<}@2vhd46sMdkh-FfPy9^~m;dM;Obn#}&v!V6yDUbUiNV(!>%6q~6^Q^XZyMxt!7KuEu z#;HUr&5~D33=BUeb&lftd2*aU4jK!yfjxcmE6DHE&5K$@lNj*S+XUmi)a|_rmgE2C z*Z`}P0XqZ#BG~}buKwVoX$?y;LR+Fs#0GptIDCvs4KUoh3JTeZZ_QH9bM{Bwadq@s zbyWlMYmdEdBneyc$vbiDa_QrS&?kM=F}2#LI3rZW4JLLuXb5bb5bs*s3cp2F z!GiVIxqcRp<%pjhtPfSqdlrL(e!?yL(7r~g8P1lLU3^0LK&AV5NH$HIVDPZ_QSN$& z-yF8im^x;Zq(nG=jhkJAZ4k`)+Cvy>lxs~98c?9o94FN%O=+dJ8ZN2IZsOn%pvX&W zh$pfj3!^_SB7stX@cO)t9Z=76)8pTrb^PH~F9>=xh{7OfEV!Qtj69SEl08^%C^eKJ zEe%_2Ur?v~mE7r(vNAC^ts1f~cHHsOm=;CVcoxUBe}YcWOh}TSIFlq67gc&6i}}fo zMBQih;}@G>J;qSWPB(&s><4U6_=TRW;ZQ2gtSBwx#M+WFZumlO#E>zDd9LV9nWr|H zf=Kc*N!D5~j5Ye%Vug6CB?c$M8u(E%=~5@28@v^e^Gi0-qjn&H7p4244pdVtw4iuf7*GE;{rvW0#%Vn>hK9IsMQDk6w=z3~{WWQno1%UsBY( z;O&J)2@CJ)m)R=&z>Px!Swz-oBhZl95JfBKlHy6|&AzU%X15V31P0%uf2<4p4SuD= z0_+1y?`xn~l~NQ_=b_UnU@MevU`^2pRZJoW-uk{oiJ`RpIiV48Oaz7LKwm27=pA|A zD1HRlS|GS_Tpf+g8O}5#L=pp$j+VuEl}YrM4k}h&x7a{v5gyOM2k_+&d!W-zW?kk^ za5gxff4b!}>GLuYX*d}4CNxPT3QIa8hL&Iy6%MsA;!WliDov!Mzo!qx0;!-;9?Q5%H&{sfQ=N?oP$Sg6kmQO z3*{m*e;va5@>~I;v3+%xv+Op==7k~TkXp@vy#~>XF*i{z>B7l#L9{N2$th;joa32f zv>0^oB^QTK*4x=4$QYhjphloNQrFB4-?cNM-Y(vS_WkQ+)?#9gkA%O+oB;rou#B&$w1RvqwSMv{@nBsokMYpiL&b<4|9OP9P z+4u=M8OD|jWGWZMbuzV_@L5>2=UZzZXakx5n8=keoENesdN0gMDVIF;im~_hFEXi5 zSLQl_zQ}su=??P~U&z~1FL8)k=WQtX>)B|M)geNM9ZNuiL!)79(bA)RIvSIOPF3i? z&{xuZ%B52SjUny%e98nHy z1aF7CwiB|_p?zbQU@2h!??QlLUFumV z(pubrayDqOn_e+GxM;q8uFaT>=&@dnR>_HeK8zye?+stBTTtdSxVclz5E_5PbTCp1Hp%lnYcS^Z z5d4Ie>~KLWcvY0w1Pw>&cpIK6Z){GZ5)ov_Zz5oI!~;Z9oH-W>(^*SSt8wnE2_r4PCfjkKkuJ|$OGt4k9ihen!A36rFhr|9NNuDTlnc_G$x z)dL?dQY7mPCAK{mCqA#vt1m9Q7fNNP9#oiz2i2y`y--p5hbe|723KnT4DD)kRag-< z`DH4rszchUDdPamQQogK*F5@!1nIW~ISBN;(!7I|yPNLJ% zE}X~1*TGR=7^X!j3jP+i7jjQ119@@&2KLa5x^;WR_#1dxQ_EG%0baYhqQ2)k-)py5 z@v=9ubat?}^8WKUL(##?-t~{e9Mt^FVcvf=ye0z;sxk7>numkp=3v_57XMD-W433K z1utifX2zlSb5kO!NL2X~sfkT#!~n_kEf0q>IRn8J1QKS}GwX`T;L>#<_}-%YnQpAO zsfIK0tVPGL7d`YO>{OIClp)KTr2AzgvX@tK)b&p7*rrnxNuuM2P|u;pa{~PREO?_V zUkIPP;k(5EBzmFM<_^^W!2{SRXdP)_PmcT=6>&IIUFnIgouC0iuN6&vYMhi?P;zh@ zs%n}BU*kb_NAWJ>n1x_eicNVW--I4@^h{ssyan9u!fpwueC2q))Igf@5!eO_I2BW0 ziTbsytWo^7x{F7MqQ{itYwIksV*k)d4~gDzy>7e%Qc*vG?&L1FMDq5Ku4*;m=i zBTjELib}qU5A1B^GAMC0R<**LZ3w_uU{%cdje!{SVRajTZCj>hU)w%>2>c>pFID_= zaaMN_=*9{M$(K9ErBvL(0>UwF3FI0_XKHJv4^xV`g5_+k9G7Hj23RSry^1; z#{@rKDnZxJq!&q8Kvb6z!W93I;ePRPqFRAhvwnet_?8pNStc<R(h8`e0*!0x8aHvJgor!t3H2F)g!K6g8K z7{o1>SyT|FbWliMT-V>^Upvgp`7>0}vBZt8G69wd^iUr3I3{$&FzKrRW2!#ThPnj< z0#lvANochW6`Zn(x+2Dr=4DIyt#SrGWvP0aG0LQjK_o(v900KxrN3jH@Af2l*(9M9 za!y8Ucd2|xByY7_iYHB%@X`@vHD3lJgtA!`shb)JqT>Fw)6~R@J;G7HxP23>z~r7~ z1n$uHsoRgSs>BgI?ZAs6y;gE*tc@h6+$zv{ZeXwQlPOe)kKZbpz4DB2Jwt$+NB<`R z5sPPdksom`LGJUnh3*Uz@m<~<((4|Qo&+mx4y9Icsbuv7FGNf6@1*OMk z`t5$ZZa`E(Ig^NGBPe)%qN^En6`op)tJ*bBURPZo&p%H9vnw5u^}JJC3Z$+wq!eNb zm{GS;p^J2i!dVowqaoF@bSq@6bl=oBaI4Oq8fPp+H8U}9s@AKV9|DYNzq%Uh z*k`+KDt-X`+j6KoC_reHUXr z!%3L@Unx2hxw!~ox2+aVm;X|$S8B{$bN70@A#OtvQD=E8Z;myTMh_ccv)mHb?rO2|IhGmPT-df`j6l3GlIP#^&4Pm2+kIR^^(7~8H&x)eB4P-aO&GN zGRz7Jj`n4tsP?woc7bK1>k^{hu{dT)|E@TTsSv_hsevfJ5wdW*bncfe8C=o$HHx4T`LG%H7N%_OFOp!kUA&S`H+S9 zo6g2ZB|n;o=Mg9E4!t+(>k;t7jT7a1&h4=AkfcWpHp6R9EznQXm-_G8e^d&Tu6XO0ix|9SF2S{&Z!zksv#f7K}b z|0l@J+RDz^%8J(7&5oW{T1`&h!O_@3P~XtZ+{W}*So3>#{GVrDtzrEir1^VC*Z#gv zz=nZToz+P!1tll7dSs(XtgBiR4yj3Mw8B`t(2R9G?x*LlQmk9eLC(7j`5ynay)#ra z!a`(#xV<>8VY7dmVrIpjOKsbDv{W`nsFKPUizgl$UFdu-ApzaE^rU`M-;wKIUBvF; zwda7t#LTTg#yy#|U6K`dbRpb8+7Wx#SKc2&1e$`Qmk7pBR#1;oa|X%`0P7(qVZ@w4 zG8sgP68hkuoIiXc3NnH+rg4q~_IvJ0acCvxzaF$cGd2(J?|Tb|tf*R&!+GSa{;VN( z?&~>M2X-v|-TU3cNZrn-NCcR}$a^C$uSa_(FJ7!@QeXYv!_#6JK-7Z4CkW42F|5?yR5a;=OM3OndGD;stMH+N50|jOuh5v=Oj1zyQB2Zpt@c5kv7E9|+TZO>?l7O3Y&?c?iZpPmwnBeEwOnTQG%1vRDqFYM-Ah@4IlHrD#uOt~^D}(o^Wt6YOMrd+| z%qL7%uHf&RZ_hVAI8{d zdYg&e*%B4KZEdU{Ne;}UF)?rxA~Y(=;Tu{$*y#eIbRW$`F~_13^}sCIL>w4@s{oN) zZzjk_9YcvVjyx+cpvJ%Btt00=c2IqF5Vxp(N{;vlCB)3dF`SD#j2D_m$MP>NNoWddJ&6H%@04c6YzL- zbT@~kQ*!lU=jg>IIXKwPkOYh3h3rebnr};REojU4qn^kHJ7oA1G*(W7ne~wPAyvaK zdJK$AD*ntAn8RR_HN}q@0EaD|_z$NJk7LQC}FxP&}SV zDulW`0p7U-{PpEX(B5aoV*n383QIv{v66v4OV=r)eBb0YWn zK%XEZ_P)ZiIGdl=Z&ycOJgipYLaD2JIqRd2BaO=$MKE73 z8Ip0F@jeL{5h*^yIQ`jrmRU=r3CHZbNbah_h2)6Pks&1fTIU#)MuTq_xT~XJrHsj& zN6o$WBWiRwT<}b6NPTpk;UeQLA3^*io*Y<8y7Rx80Lkg5epX#`d{>63WiTRb`S&cT zckP>gmr#lhe>7r}*r4!B=wZ9WfVjL)xTb4%$hA`XetGSCdqfVUa&t zO^vW{(`*p?rc%4PXgRFRL-y+DL2_X+7PD@^Zad6z0xSFdKbbn8Ls3Imzar*D!vD7L z;r?%~`~SLj{C`lW_q7WaYt7z|JA~S6mKcU+!;#l|%ykvjI3v$$d{;t3Ci*C8>5_H= zhmG^AQ>&Gw%}JJbPit z;agJ;jpS|2MTM?xB0~D;ZmfwaqL;$!t7x~qFCB+0`JPnw_Rit`1M1#DiADA!WNZyVtRvuCo^w zKFrmonW&GG`@Us>n2YzzWwm$G9Zha^kK5n(v$L==FR?H$uN_R~!_D+))0gLEH?8K6 z$MgG>UxkUi_?ey`owPpR`afs?-uC(1m4h7>WKV%cEP8LCS$9?z(-qQ!F?e{^+1EDR z?cM5n)ix{Q<$Ez=M5~>M&3#_w#y|Fq>RUVwi67>>6bETxTwP^2Bt6(}l-WoQOJqh5 z^|hn(Fks5_*BuK%O7`}wnQH|jtg;gev$wx;V{?DL-uiWsm`#`MR7~e8NxMB*IO_%- zQpiuAzSl4+%JSkvj7dEznb1N4<-P5k-6K{g+}AN-YiUFeEF}l3YD7g3@3|f|)VFs) zHfGZpgminAyWJhQ$HVh`vZiWZ$6vCQP60!D7_w34A9sYAy`SHgEz3ehmpPO4HR5}b z%@09z$l${rmV<--u5G3+zFXb#{Ct0$<1Myberhj|*Sp2PTGY&C=}Zp;)_|)@b`cv8AkY8hm4kg2%-QX{}_QK5u=txAeHPRA1g+Ox{0vSYzk(y`+So-c_H#;S6-s_Igk++Hvt@ z_M&OQ9L(JP)!bxQ1~Pqia`h@-A~Uo_ZpdCtZ>W5HchiwJ3~K5AtW*NJA2!1J0DEK# z74MdyN7t9}PzcsRQKlU>0&!%n)V(p;$-kUqQ{0@1Bs+QoOtfI3Md5?uOr2<-t)Plm zJL$A|Ke13Ct7E;Hu$|KdT(ayJCMPuF9Wf=8~oDi86^%cG@u zTxzm~!0tS&3bRZFByWGc=M|pYFWXV}EfyiJLo0!SG_|(tV8=E5%06#WIIISV3EUp! zhKN>)T0V;*1herj+CZP(eTju1bmqR)dEJw1q`Q$r6rGP89Q^tGKAzpZ{w%AowcY+G zPy)y_U{31ZVOLmI`MLekNUlWZRz89rH7q_Wv+=mX4<2#YU|4gr0);etKodZ+9S!Vx zKx@RP?!MU8j)F=i{@wPaD5QJ?GbvBw|!FGPx?PiE|JxW%q_h zb=VOG4IMg5*@U6=%owQQ@@&9nefq);y%%7Iy+aStei%VySqW(ovK*Hlclk0)ezysh>_^86=gM#a$BKL%HG;Y~5O}KIQJmE7*tRIR6VRutZU>SYjF%e4a5>JDF8-FKN3nr|vSDH8u?InPt7ApZx z$aDLRS`5IAO&+0bt;w2VhFu1@ooRO|oCV$=>(-qA;Bp7l+Ly=(FXOIV{IwblM8M_s zzpg!)u@rGZl|l&jd-W6b@`dkub#RN0tE)*&ToUKnEqJVLw~F)`w{B@VLBO;rmm2YC zd|>k&5Q?&F&>K3m&?gz`9m8}nz(nqzXXW!D62Gd9hIb}|-m~QzgwTmt;?hK=kCP4I^tOegAfN=fzPTW%o*4^zUk(pg z6e~nQZX!n(c@=nr&qqHOoCFQ41_Wc(n&xNDJ};<^ZHFu?WJB3qZ3XyMvVidc}phs%6 zGnQ|Q){M9sjjuXbKB(!-P)oGYHF{+r&XFzR?Rt2!sq1P{bB9-btba+nDk)RRxelk7 zX7yy0-B8F;JSW2j3oSCEm8fEb^MV{7>k+zZ^X5+V!~Mu@YgW~@8V+a{@3gv;B~f`- z`&*HvMX^+9P?XKD`{Yg6m7!rv+_6W-ef*$I3+9A z-n5uq;Scw1nLRxYzh!%#xHYF}0mUaTwyN36{h6mv2zYBoZeDN?1)VC=;Gm^E-~wJp08vz7++pF@fAq7q+j7m*!Tc1w54oCi2J8e{e9 z>Nb{nZ9HT$r%5;2a4#+l9m3IyLy^;o)T|X#!)J>ExbgzZqqUp94R99aY?w=DYD-EC z!13Pnm$`KKMF~NtpN0yNy6mEI_J@y1Ok#5<3xIWbOchB}ijBFfH|ojgyoLj@x_pT$U>{!i}RPi@2K!)J1;PQ>o(&V<>v)6dJIeg8X~;sOEKF zZIn%EDHhv4`c!L15qY_=gbWDTO+NpKtuK0EuCX30_>Z8N7!|wForswoyXPpQFY>}Ulikvy-2w`D454Q8%(4?3Yq?-q|Y)Nz( zITt_+TMRR%AdQi%2v5?}QDDn{AfruQ>UZhQr9Dhe=dHm9cZ|nSaP%-jAC57=NBWEV zk@s-Yp!|sa9z{Aiz!MUaKl%LlS-MZ!{OeC2Am4(LXXWrp?Jcz=+ENCLr^Wt+iwDsB zQ|;k(Z?W%1!=f0z*6!0d-zt0HT%j(z*Exo58dhr4Q*EayLyq$~mXsnd!{L^JB1C+2qZYo!LvqFKQ3k`} z6@}85KMBNe&`{o*#dFV1VUl^jq1WH#O$)jqtJKs_sa0|DTcY;c(!f{>mgSvW9g`Jx z=_ZIe@sxzaK7$2?iQ5Q;{637EzY=2o*4Vp!e6U}(dWME@uuidSe~$_bV00wWE39&% z3XUak$m{(CXN{MN`lbIyK^>G7n2SVeQh^nb%wwAc+Iu*^Z0kKaR1qjOs$L|y zh)vr;$9z|{3-i65xlY)%P529)T^s(Si2t$dJiQ|llGdwS9mz$si)P@u3}_Ln09;e5 z=FFnw@vlu_|6>V>9C)h=tAs`kc!pF>;e(0V{3VHmIk&DI@Xcl+Y_47g?7`&^Uj9~N!YF8&3)MYb{M(wg_{Eprp&9FK|iRHi~PEX@J8UhO;bl$KJls!CP&UePU@f3 zpK(Lvnl=MT2)5>CPSvwa`oIB|){f-NRdyQL!{vXZ6nIYB_e9!(hCx+U3Q{JxAlB7zV&g-cX%b$3)FeUQu#Ne)>)fZ`TA5uH5F2kCZtgj6H1}Bm*$ImX1!9~}S z!id`oiTey!P5(Cjbf8U1H_a2%Kz4%vO2=k!7e@2*;VLLnpPj3;QsT>HJpzsR^QDnk zF#^Ty8~ChiaCDZsSviy+V2uADwSuH)b$!4H(0y8?FMfy^_yC&P+Dh>~n&j>+$w{Li z>cR%4lk^6z*VBu4OD%!OIQ46U0iA3<*9r&YJQ&(0>Osv@BV4m9oSYIi7=2TxF z9D#X6Hkzv+w`!JoH8^I(YP-?``>%n(P@~WcdFLBU0PiN^`qJb9B^u?cAmTEetM3X* z-1x}rP3qp;i{L$o%ULuY>9{wZ6wldUA}72LU&sr%Vv%kR_&21Rt&m}sbXV+j<;>7s zD9_T44Ek_;v*cJ*xQcwCCK*zk7byhN8XY4}E0ln9q)&ZNAgR}EuvDhJxP}ErE^ko^ z#z7!HP%{X;C9_07qZJp#9GP=NzdVXy;5~`yJB`QoCgJkN;rbHu_R#WvYxs0!n}93| zR9j&;Ovo&$Km~9O+!#?Al@af(Ow9Io|mX<3plG!VlOHwVR$ z;m(X}D!@PzKovsjj#Q1GX%;)s2P!4tyg!qFIfD069!V^i*j6b@FZiU}Fr&A4@g7!U0(i8dH5E~UaSM}LEgq~v<%`ev;}$}be2++di)nkXTPL*60EuKD}ufs zFFohKvoxSBMpi2ijn}XjnFyOWN%RsmW5Q-(Hchpkz*$dn5H3@d@|Uf-X5iJFQUDGaxS1B-)3m zqg4TUVP`}IThd(Oul06F?0-`!@mHz7fG^)cqn%k@&u+d~0%3BS`S!qWcqMSmS-;RAXzTN?u*#zD7W^l6Blp-Q}f}bU)(^!6g94Vj5%3}$_&ulL9vsDdEBe< zP*AKWns7yO`|=TBO)@)PpwZd7cCdbF11{S8PH_!<1A#}wUU1Y@R2Vd3Cgv+Dh%(5| zqxU%0D9Y7uq|6&($%;Ki+C$<1qc=sDom8aQl^;)s_$aVWH3#ehBP7ZWZfC=mmo5wt ze>TasUd(0PNE6KsnqbkDGorb|%IXI;+#|*Ut0Gmmq zoNa_SuMt{I#^kAu5?2M8S{Uz3SyHpE$3jK97tbhNrNgA7$E@G~4c@Bgx5>;=ZK^8h z$~fJ=O*bS*Ze{~}Kw=9{0bqUP+VFE2p18C3&~O7=;a+`WVQT1@aPoxl0{ha$_cqm7 z?QDa<&QIY6h-e$XRzM-8%UF>UMx}?{6Zq5MrySdU z;>_tj2JS&LbuI6hO$x^9E^^4we_~(Ahuk7rex%UYdTZgF(zOOcOV5O>=WAB4@M*PUQ}I87?p+|CV?@br$d&n#E?eoPR87-jd>0Q zQZ4+YKf;g?`C}`7n8YB)j0+TBN1!UQjS^v61=L#ml{9c4?K)dsdlgn!X7pXZhTdmd zXTs+kfoH7oB(pVn68MOT$afgG$vmrqM7mMsYzjuT&X1OVqplR; z^af(Uif~;L0=z7HHpoT5t0POqgI(p`{Y-?gezRN1%F2)_@88Pql>po(IUqltEX^SJ|c z91~#!2$sY9N3ar)1TO;8`x1cRt4)Y@o$$ zETJkXjn;<+3qn`0IP0T$e@Fa?z3uyAp2ZYF@F_lK3qpPw3D^heumb$MhyxgorX>WB zcx*DuaKQZ{!cf3;cE%J@6${GMxN|+^)Y=}4v%M0&FN-4q=O^*^umA=FJMoaAW4BN6 zuAN~IMJ^ov80Zoo&(Vm#HXjac9On8mAm^3?Gk?rhI%e2OvIg z{Yx8T94LU>j~yaec@cO{amLZHBP!t3PFPa=3UPr`hgWKFoFUNxwvUB<EW9@hWb6T0FS~yF@ZyhE-Ci_|%R7EYL!-Sl z`+P+v{H4o2LC%t{Hf5vhS~8uH(w5Z-{wuGQ!lr0WgtYz6D{rC0 zWAhGhvY8%IkL=x;3$1%ASrovZ>nB#y9L^CHiwnq@5LiWrrqSFd;prbVEml#O*p+NI z09b3YxseB=92@X7O!*cI9v~}JcnxWcgy*t$4MCfK7%KtAy(d+B4BYx3QWA+Y3#eAx z#ccm9Z1X^Pqqr7GkIpuh8vX_;4CVS{gp%skz2V~ak;O@iGAVE0SF%k31-0Fg@(5A> zo7&zC(sS%B^{lhP+zPl`>1eRY>&6E0QNN90sOhLY9+oQH50VQmVcgD4rx3!yv`}Ys8zn@(o-8Ek0>|o?sTo;%MSb zOCcyB^S^b9*lr7$!-9HPlBB#+c;l7os0?hh zjO|@96dvy9EAD X2jMGsWPWWL7&1$@s&WgDTYd6RHJ*UQW6>+0ESRVQhuR&?3ZgIvWuVK_U#CV=m~x10T) zo`vRk+WMB~@AXF0k4wywymjA*-Gz+7D{ba1SX z*jMP%`%g9>(+}F25c_0lQl!%h*`xbjxZIinMjz?M2w+{hBI*384lYEkj+Pi&=0xh0 z#myKc%_jG0?o{Is4ytvZGr_)^wugP`-svF7V7K-FAutCmBZvL_K%*nhG4qTd)deL` z{la#X=%YD>)0OpfJ4j5_4C@HZ?=^UtFJ$#M!c`iWdyYq?MOa_yg8_DQ4!me5D$iwys$ zCmmq>E8eKJe;R_ZzoA_@{4HWprEciw7R$K_)PZH@`lj! zEc&P9?6Zof-_v*of_)?^COnSKh?H`uXOuUtCKxt&&l?la6%!5>*bf;TQMm3rW2pSuQ}AWt*-?*EZ&mNsImBWi_#;7gER zXFqk~n6PJqlZIn*&I>HTNAd64k&P=1at=$=x90@%}jG>tICSuRHzUcNu%FwC z-3f|P+M*$H{oB}wvr~pV_3Xehe)y*t4`i8GpN=z5`h(3Z{l|WKJe?tXhg6sG9@5U*4RSSM zRS*9x&f6i6*~OnJDexEsEOG)aV+br#0wIHL^6{oEDVRlYbo@S+`jzbwjvw7tw0zRG zXw;xF+P-SrB&i5_AfdlOsy2hN%km?1)+^`Anpv9X6eC{>nw+#<7%Ll?mu+T#a0CSZ zGzsCwv0uK+o}lov{bD?Y@~1SYT-uJYwzSX!?AeK9MKe@QMDcrz=vx-hB=tv*+R^?` z^CmT{g@SE^%6(W3SEKdG8pyGScuq;vr1T%fdCg`x2HTr&3=lH5A_20NY+jesOVYQt ztk1q!Q4(QNz8FMvjNEK;uAGLGLj^U6g zrp2!yqdKnEtabVa4%LN<}`u9cg{Xt6Eqx?Itj-#R9>zp2QZ*hz!f(voVm z!5te&hy=b)sLV^OE|@AgbH{e68%_3=$zScUicw%W!xalSpz~Y72kIu%3Kxlkgl;qRr(>e?Md4~~IfeYV*=+5uqC!rQ z?r+_OoM75QE}ay@E!S(@8P+PR-Nb|)EljQ8`Z+N{iZnufS~Ggc-w}~5KHyy7{7V*G z`R`i$EW_fPJlq22B)}16rAhnAc*)p>OmJ~528fBCg)mQMb&+E6vT<9&o+C|nRL%dr z45uef0MfhLiJlLBju>AMj+Tq%Rqp4#5?_(R_#|#3*L(mNrQd;Ene|&FRN!@QHi(Fu zIBTXOrq=ZF-JvlK#;yV()IIz9 zr9!yVdQGJ-%UDfGn$p}a&gUHmDc%lXA+BoKRslYVF6&g8Pu4X5*Edt4S7qBb{85_e zq$$8FViWC|kG{Xt93wgC`>Fs9?->(7oa%cB(_byrO8SBOV>FDMn*eIkYa_C+GVWSK zb<^jK89D*HZdUCX<*TGwUI{;zl+@r3+J?0Pu|K*z{O1!x5lPlT)YxBY7ct0Nk7wbP zjWG@!A|ICjZ)sI39;QdUQKk1Lq(!c@%C`WWN;JM#y-P*90(WT^5AI*9>5jv9U5n z48FKzr^tF4yjJVFtq|ld?y>|M#IT7|zqbxgaZM2k;U|XNz!B`SlC15%8l(ecKB{DVmpNp-|q$Y$d4)W18o)S~ql z(+_G|b98y^G0COtbWHGy2G|ibz0-O4(Hcc34IWluG0E;9gp`g9D$PU^xi0k!80!ch z1Jt`6LXQo?HrxaZbnwYm4LcmpGZrml^USU_oCPxHPyJE0=A!d^@D!Noqw4Nm>N7=$ zo3pozH3pZkDg)LjG+-DjZd?4!-M@SXq&VL;ipP`3e3Q=ygZ66vF0|2)XY)wS3Y%ra zmPd4FD#GRLwPa>BFsTBo81=U1OTw0l|~HQ<|93%zl#Q`!%b>Z#_q4$27UMF&sI{J z56IG>Q7!wW`P6S$`9LC??vdA^h173!B|svZSBrBm#pr=z1A|=P(5piv}FVk?;-toTgpDyLG2`lKzIk5V2; zW$K{}Js+`xjRly+gqEZB&0hiTtmoRuw|zr-c3+N#SDW~^yaFdAt3lQo+r!~p&ayGbGsH;|;0+U}MXJ>`Xr+K`Yh{6=+H zTUdkC9Er~IlhhIcdI|EO8#$6EV;;EqQwVW#R()S^QI+oR${D_6E#8_$M^+E|_$)hsbWO0fq{3Xhvyu~8vmGk=~g z_xBw9)Pw(_AtMe!^j`lfT^6F66JgMSv#s1u25)u-1H4rN1N>>jn0+3B{j_i^PIBbI zmZdop1fHb&i984@`LHP%=&<+vZjuw?u*o1#Ckb3YJ}8kEwT~s025=X2fMz=xLa=$z zZ{oLslDMa$2)mgw;5zU7yNot`q6O#Q%497=|4tOs7-f`_<_$HJyEd>_O(qwRrD1QD zXR^>(ow(Abo5tCaG*^j$AHKpihi0~O=t+_FnkV1T{!8-f`1_H%aLm*zHQ#Ll(_=2w+aa$lvAPjQ}tClZGRwHApHQVl67c=nSet6re$1K_8Zm z9m1jkcn7jBhs|=Ppz_F9rlJBRU}&w3QuKdT@IA>JuV?Su8C=#Av==nDE45&wc7FhG z;Kaj5@&FDSxe|E#{ehg@xe>0DB&&B>Bxs=7tb?eYOzVbbce2vXD6cEWs^TnlBJwwc z81c1yoo)-X)gMONMs^F^Wl-|Zq{-v8QcI$5s=u%@UZ0<4g*MEpDiq$z=rvILfjjXs zG>ogwM&F1Isnx6!#4sqlz@;mjnJKf_FDv=JEF9vOlzZEGkYGr2FauQg$FcXR zXJss$VbXsA8A_xFtoO$4PQ8h@!qGTsslJQpSkH@vtQBD~IcWh1+^^%Q4Vj>E#n6;~ zI_)8W(iz%sfp}oBSBJ(PNyr8l$<;NY7GcFV&H%P(K7N(zr(5X%2=x2yP*#2MX|~d{3;X`ZNJ3;0%sD@<2Kj9v&qqL{W_p)Q(qMQIHNlv2DAQK zvkUTN&&v(v-a)U4EHtCJdq-Dv_oks+u_Va@TR$f)9P&luige5d!kRYqg6>Nz|0JzB ztNyz`g`jG}w7#{v$3`{b8z}SGbu?d?hSitaf z$L?iugxWju7@%ukR+tfEtl15$qsl_CCg7Q!QXJI;BpwkWpd1%VhZTvq1+ewb8GSGP zC=%|!h#Y4d@ryGJJMesJ^M8J8={EtnT3uo%GZ zx@D)1>o}@IH*wgG?*m# zF9AqL!^~b-;mWfOSx0oNlX-NrG$~bz8XI3((NWM8?-MD>;n}WGrecZ=I zFyZSeP^?8Bb9R#9gKp#BQHasYQQ+8BWS3Bf*5 z8*9bIl`$G2R{wlS<`d^(qpFy~#|UiLNmDwA{hnChB!gf*7Ox@sR}V+x8!cEyv)I7j zn;s(~MoUU}bbV$JSU(j2wPQO1;LbH6a?X;&qoa>90FL-|J%=vx{jORdj5FKjf)dQ2 z{=TeCqH(v;OCjepWOfrmos(efuOQ1v?gOH*A`mA^yaup&=zJx#^J)N4TN#pamnd)Z!T{AWEXEDZ&3EiT}*A#puy zucrCFs6-R@*w}8FnE1OZ$#)bl1>nwYG!$)Ixw<->5dY=P|H0|;as#Iz`vNmLIBG^ zSPH~*4)=*M{x|)s|4XfqlU*504?}_bs!w3HQ-;;I+X$dLP)56^TaxrFe22c^?mPlq z^}YhR;SumY<vEB(rX$LigUB}-%ci4 zbxKQ4NNM6Y`u7mlDTnP6^t^(Q1}0i~=*%9LScAD|tP{^(Du})$sF?f0Jj@S=fC7JVms{V+` z{T5=J3&%jcV4Y#a$FhDKhklINm6(~Apotb#c%={-|EEI;zr#;MCu4111B!p^Q+LeA zF3*{*I{QS%U$!{)uc;RRTmg{fz}{rVL7U)0`7UQgVdv6Yrx<~^=3>zjoysTpw83vY z^}Pl>Qym;5r9NGOR)rBEM2<`8T6`aeMa`gTz3Tfve5jzT?L^uN#NejK+UQ4!#x6)d z{<1QlDJR1HSrm;6m99i2NSkzVf%1FX@4!&*VXjrT;q`ensJ($6$1o>XHz#8U%;Cs* zsaTH=5BZCPkPkKxVozjZm*i~%>{3K>$l}WH6eHkd^|U`HcaW}VSV1~u#R*qp7YUUB zbU!M@eim>m&d_-{k9EkXs4bym+B0(AcccX}DUJu6bDx;-3=L`MDvqOj#(cuw03MLC z4j{Bl!W_38tEJN?E6za*;?y4!#W&;3e#eE}Mv6DkK@6BsvpO3Tssn>vYSN*$DW1O8 zRGug`Gz9(|kY;rHsbPwec1KGEaYhC`1_sPA0nFfb#K%FQG$%(Iwp-hEG~N|foZS=v z3ZFB;HCStCV)C-N?@c|8!;J_&J;$;2$>h6fJNewGgtF6q$GJy@ zSKZhm7UY3cjB1&D2tO$_fpB@ywU;cflpoWZYMeGi7H_LC#~qs z`Mp@#*r-uHR-BP@A&{Tg5YWUk-j2_UWMaFdlpE^%o!k!l^k(M3tV(>-2m2v9ItvRM zQ~-{0_=k=qrY6!7hr=d1wdT-oea{QnGIn)(>(iP$8^6*epl6Lk(?S*UB)^Xgxa+%V zA~w5*D5nK?+I>|Ehw>g`G7qtp#BhLU0w<3_D~ui6 zSD!wtJo{irc|t0OA)tApqM3wXJ7HoR|OjA8>zI05S81 zn_#Jd${M6vFz4gKW0CJ#lP1<-7~%PyQ@II}r;!=N^Q+egV7HuB#ikqxq+K1eG3${w zW*stCdlRlK^?cVHuLd{7*umiMvUB~G#?`3h5W1wX_WFPE_s76qBTBI)!Etm1Ce7%- zsbT|jL!W{k8s&2WcP#g?q@19hoU|~oFOAAX8heCpV9Xw(Ulw7x zzjb0Pb=7?t?LV!tbc2+n0^)sA>9xe+$V@M`AEV{MbHdVmZdb^mHuzo=lJ8Av*!I5% z8UJioi=j=hv_@yOQTb|edEV`Lu#A<68%&rS2de~316*F#-hf;LWet4RBL07|_D)fP zZc(;o*vhbN+qP}nwj(lZ+qP}nw(W=vJ8ssg>gwt{ZlBQ){rErcHP+t$nrnU&zaQ>E zsGZ$siDFbe;OKWsvVj-U{JLc!VR0r2=h)sRnf$cA`t-?PHe0eNK3x~`V!=DwYluIA z!@~&KDP+KFU+MVYRXoV$+?9=;tpPgN>8l+=VveaW{N{xxm@v+8f(==bR1VTJBxtWg zT;1}{wUx#L~K)TNlU43Hu;2G>d zNIGje2C2>voHe@mcy@`wgDciDrglB5Q zGh}T(nNkg59MMD^b*_4?=59uZC!0P6WZLgD#fe@(1>`? zj5#vmT*IgIu5YfhuDUwnsfZnu1o^LY4H^01y7A*-L@EgIy~zl$c?qxM2=Fr4{rw>s z$N=zC;l~<*Xxe_C=n}k+aSO!Ln2%zBOeK>U=)88iFu@2S#X{MKY+sHtIc82wU7N`W z99nSdW(1V4c<(U>8`IXLvLeG}^tXlgd;nxJ&(9jl(bb0IXU&|KsHBbYaUC(j&?qPyeFFXsQ5l-k6-MERJbf<%iHb+mRQFcWxo4wJG*zVZXGTD|K!e0BLuc zrbq$@5Req1Vj(@_bj6R;SG(3IY9@s&I%!9tkOtf+*}zYyZ(fq9V_h&CswT5#msJG2 z5lWM~O^UfZYQx?N0(Y7lPv$r?R)9ctu!T#xcZAEBLJ}xkKzh}E%_d{sAk9JC+-6+_ z7hO-4d+v{pz)4BrZbIdyrtvf1PQk_+E=D|KF41B8?EKLr0m*lfihR};ia+>!XrJY) zB_@3*>1{bam32phxPIG|XM*`s3u7gTx4FU*pI%V*YR`HS%OPk4*Qp zVMIGS4wuVY65+5^aH-RWkXenIJ)i|n3LwUJbggMK+TK0 zb5Y?HM20Kwo&UO{u%9lT$AX5l#b6c$)>a+5_`6We@MDj51Id!V#wm_-=pU|8g~5mj zCx&xv{KoO0h7C*3>Kd=Z@n)l#t5~DOpQYXLgNuVv#^IX+^~8|oED3xdjXBXD@b?Fx zWrT}!XYOGoVpDla8V#)%%v*dGc)q!Z(>5j~>^Ap@3l>$+irQN-peLq4 z((Z?@?l4FTF~C5En9`K2(g8D(wv8TiwJ$SCtfaA=Bi8}qLbd!6r;v^KRayazcg|#HN#Pcny&fzq1 zmES?g-bOR1cS&b4IwT<)2;K%f8w2i4TQZi5eKn(SZ=0%>E&->hodyudZiplM<8Mw$ z^Ji$jSiAIHI9NCx=qNQ_1==~A+dj5(Fy@}%)6;HGz~Ah{+4u|yEgiY|C2M7b zh*V3nDPe-<@JkX)tZYX$kbqWOXZ;eKF z_0bhe6NCr~Evqu$t*#yS-sZRM#i_08SlD4AkI{rtF{>JN^>-2V{W^wRvB%65-uwxH zNZ3co;`Ju&>ykik)Zc%* zmeYCAKF2!}+O>XF3_R|@vs&)%&p^xNpi_3ytmvtuJn#9rLygtPFT9e&DI&pdN4D7% zop^{ggJ0Rv^xL)g>daL}kXpK>hPGD7tv;>#YMBAY(nY?<#xg3{YBjya{jd6S3+Kjz z!N?5B&kZrXs2c&Je2A^VzURLP8XI|wH}WGHfhF5X zb!1UK}81u`D0O>exERHO%Y(I+Mqg=E5&YEp0+?XVfX%B^S^j`ID~ihp7WLE z>Q?U5xcZEE=$}&D)KiQpXF1Yil!|#d;Yp;aAgPOc46suzL7W(G&W{AQqe8~oA)5$mm-}tj{ zB_q{b0FU;e`Jh<6tWEQCd{)I!P_y3i(tKV@M!aWdAVSBlQ+6jo&@q5FEB5f-l~V!n zS^MO5=#l}WPH6d{k2;}grjh^(Cq&3Q`|w-V^H~sFhUqXXaF27$HLD}aI&N?7No6Q# z(!8ex0Z6}p>4~b(IU`#rG$)|vyo*T>t4fRs@u$^L&*;txOLb2Cw@--3-<3H`A`1yf z>Z1#xtd2}J(S8~zxA~=unTj5HD6!LBwRk38D8nQHvq+oosg1{I<(_yy+NCg|VnVOT zi_6*`U8v=+4=vQ?FYsKt(2M@mAW5w*5qXW?AUDnR)SLAZ@+BI&C2-LEl*|vlAFY9} zC$*Ps^B&(h(3jrt$6CIxe~9V7l~IQNa038bCjf9ghh#2Fq0a(w}rLsfkawqh8>m)FrtiE54VBYXfU9aXUnnZYhTCl^@+oPM~Mb zYE@a!hq8%4prNm>oVyw}*_cRe%6XCAzh0VLF(t97ON_^mwRHEZhS~gLCE$$j2%1hT zB7mcGuH_BnBjr7`vva61s{x_0dn|j>B=0qDOl#+Mn{x)&o`YIW+j<{IB~(J?kTCW~ z?E}o{`B>y;c>!4VPxltd$3Fxp&y^mC*1!Co;eU;ZrvBGbkhQZ_HL$iY{tL~sHT%a^ zzpSApN5zKVd#VPb%mV_LUv>d)&(29w9sxpNSpbFnXU{roXs@cZa|dB#(C_xOA-vn6 z=Adi|e%#b%*85>P$_xfFJZIcLKpcE|JdBLvba|ebgJ*Z$pisC7F=s4IIlWAGcbV*$ z3^CFl4~Ekl%v{x5v99n~nFLd27u8#0kJLs8LfHlw+uP}Ykgy-(tfw&JKLBUK3vFzf z-GuW9yRF6%xfq{~zyJ~xBf^SjQ2i9)e_F%LQS7-{g~s~)R)U=1*L;qV=bntoTTs;$PhAW|SHaGj#qY9k zg{G#id_NjA8!TxQ(rB@waJBYmjJ4zU5Z%TQ3Or;!q#-Imu(nT=ySyC84$SK`n^1~y zV(5xR+Lww8VX_Ji6ro$aqq$HP$CP*k@+1oW#aX}zD@ZmOgX-R49jjnIM6JB&0YW?E zq#H|;SnD?zlo%F6zeh=(!oR!;cF>joC&HWEkzghPIJj;=WaJMf%Knz=oeQ-E=3)-s zCpxRhfZ7LfVsE0g`C@+NOKg=*_?Tuw(ZZWfte3rZ1}{CCKSq`_#n16+<2qK9yG@m% zC6jETfpB)t;SdSw4hJ?~qvJD0qJ3_!!mknlw>2W~_oH}p&3CJv(PS0b!{68`D0_9b zj9B&#kSEeXRwWq07IJy8?g7y7(;V2iyr9ehUZ428IJt7{L8W3Y=rRN@Ik$~6Q3^=Z^Dba{>ves5Lk{>55o)*kxg?U@s`)TzT z%v48D$y5mCyi9k^U5GtEgD zN_Vdfx8#4#RoQJoSA||*02^8P>086&p=&(=8&&?0t$i|iW*oi_tkW~$5Bnw*H~l^} zoMZ!$YQMl-MG^A6h!Wit5>zHpCn5AQm8k66tqUL4?`?+P?KwXdXq`P;Gi~El=*Hb& z?M{%ka}Y0|ECJ4ADqU1D)07&}@<5}5$4%THgS2oBIAzSUx!!9Bp~#yxOo81mFan0` zXb<`wR~O2Y931nl09dSVjb%!*dJ$lk+D!qo=HoRyM90y#TrR#Ct*OwCc)^H#UsEHi zr6Qu`U6{Y3t!gf5x7NF9?uEg4q*>CwTTrE;s{+G2BNAM%|2r`&n{VdYxv*7Zv?sEJ zImUarrBK=N(J|#b4mJV`^wC=ks^>r}f%i1LqdCQGL+q=2iUIdAy1PNTA=Ksr-6`RH zz-<5w!zUlp8r?#;0&*x3#qt_+NbB^W%j&OtmJS+7LcmTpv|v>4daj;}42qTTnCF~+ zPzG0h0>ZrrJCugPy&aM0%Pgj$1%a6oYNdw9>T{@Lid!4? z$6GtQ$6`oP57K2n+`I3mfup%D=3W$K#B$+H-tLoG@XfrLDF{sfsZ0ONGGDK1vZv9_ znSY`oYZ0!KYyV>FAF%$7sPf<8fB%!HqW72KX7Tp|@cbJKDWk6R-yi=8SmCi!!xC%Q zeW2RdaEemr_s@QP5AH^%>f93Y2X;@?$vk8dr$HB+GB*>|w`Kj^~k|Kl#W|^&l# zHC9{4rvvW8N1^=hKmmwHYvd zXtdxZEVNKvJqpd0#shq%=q?gbLIMx_yoV()R!xS*VR4qeAhiM*B&KVi0Gzl#$ohO7 z-1%S=>okshq|GpWcJ}#tfA_TivIkhI5;}c9NhFJ1jl4=&X|xvhn&r&j;)@~jsjIKA zhx0~#>KI7TGl6w+$WA^^G6m(}*x147;oJE-z4_Jy+$GLjX`))Xb2s~-4^nF4687WU z;`ML>VSMs^x$b5ge6foOy={eukCBUkgZp7^YE!HnUhCM<#!D@H zf}GCq5V`CZapL$&oUdxGvZ!e|&#IZW>PVTM=qR697r~cLD*L*|3mLt2dyxwf`xsn} zMCe1arJ>`Wh2oTzb%of1jg|d2h}3ucd9wd8{xE*g=i{N;%bKqk|26Vp2vd>H0Ili% z-M#J8LL9m&wn+vq)=FxSf#zIY(pWW-(Qseh=d6y@=vLN5a}+znXi}RnX{e;&IoL`st&yDBK{v;0a@`Vu1#4E zI{J|&By800jB}1hbmt2DwM@!bYQ8cfT|MDuqm<=o1&w#-ikl49fPidk&S*lw>Dr9M zEALkHWa<#+o~xxkhxSPp>IEGoO@IvH+e)YaI+^~-UpM?i!;Q)APbVKQUP7jcVs*-I zBsf`%qP|yj@T4fkd~=fx9p`k3XvR)~tvvS$+&kX){@f(+Jzhr&j2&Z?>Zy%yLznzn zz)_hhNfIzoN|kMuh49S@P^ieIh0vVu=~kLU?-*Xk#z2>?a?_mpKp3g!!Uak+3{fOr^sC2BE_&J(@7vFEv4P=o*s^M(|rH% zAK`wP0FRAVOjyZ2(YBR7Sa;}T&uV~GCSLo(W2fFFPOUEcb5u%@hAtmD>arb0HHaKO z=<3Y{+;NAWaZ8j464ye~G%(!-cAJo->DkOAvpVe%xD`a#mQW&WIH)`cpbz01Ind9c zQbA3OCN^9+5uM8I_nx*bNZPoIs;WB5wRk>mel8VGJwhia5dpeh zLo$YWrH@At{xD9myBrP4XO)V?gz+JF>*vCNAhlC}{1GuUMHML>h27%{p$9>K(-!ng zrqD3zXBl@G7=`5WsTcVMZwLcFng!D4_L0P;OGGJr;v6q^*1k<@#5&<>%{tdZzh31K zQLWeBYGHgE5(bq>e!iIk-E3s{-Fq#uJv#=7GiD?Ybd)k+hEJx`!$!E4V?;d$*Ua$KD{H(nfq3@K%4W@y~EV@r!& zxWGJ?G*N^JftN+E0En#l~`e??Xn(H?0+^eezb9J(95HXc^Dn!sFjDC55<_ajaA*!r>HlS@|y}8 zr07-z%FHaU^7*;>cTf^pq6>4PwhGUvb(`R6)gpbd2#3w%@ptQpl7f zyU=AoI1)>-F~MJ+9!qH47^It$m7&zu#7lb}^sg9+e~jM3 z0x3~U0vD|A=R7uok{Kbcfgn7*R4Fn6moRq9E|(P!ow~hsiTbbk);v`L%mLIx&@gQc zgK@Hegg>3zj}Q1D>Uc&|#7PK;!iTy5_s$OsDrb{!wtl znEDkZK2zAxC;Lj2uY3x~JKu8m<}dDe0Ux=fGsqL|%y-)6W$7ZWH}SBwQ_|Uv<>iG$ zeP&iz+~`+7?m*o~L;|AWPrsF0c2;5YS+11fx&Z26PyPh1Y$-ROo=Fyp6s(9bCS}j* zXW%=UTfchvz>z_9o72a9pk$2b!UhUEeqgJsS8y<5R@}U>_ezm>ptcV(i8!bgzxnbb zu2D<*HfN|D^VeX_8d9v7r$sH&Tda`mZ7Xi^dSoMdj1R9t7Jx0nra4C(6NK)t|1`>r z6mYULfSVxDk?$0zA70f>Pu=aM6Vq0fRI9X9m7rEqq#pIxs;0qDsV0PImoGlb8yy7Q2#KYtXV$`aSu+{Ce_ZmBa%{@RJ#*L%4hdVm@} z4*K%TO2HPxdcO{26~7`>j$abA;x94;r~Kh|g@W^E#wXH`+*YeAWyF}XR%MwoDTvo!?c0J>&bw+UiYXB}(Up!s zBfm*>v7uztG4Ib?j1C0loPJSvD?F#v*!AN*uh2Je_^yMk|Y;EH~bw@io zh-nN_kUbqB8jv-#g!K@UgOw9TS;FK=RX($$YN`&YBZ|_M*u}~II-d{`3bcB({&Ur> zZx&~Ynye9rZ!k&BNFTy6Sq_llct@jV`iY7o7Bk^d)1N<}&cchcihxgVw9Lb4XaP$F z2PyA{^joSX%uX$Eby5^-oRia5V=kW%ylDu7k-G+nn0W|oLIr5Kk8Yr=uB{YZ`96gnqO)P6a$aFiau|);BdF+$r!d~sd=lx%m(v&WpH09TZ zBs5XeHbAvew7f%6b3ca18D=9J&~;}ru!Qz*x7BT!>d#)Mr%@a*OAVDPBg*9V(1EfIxD=E{WY-M+8)p35}eHXR~IoI}Kj{PBB04 zNo)6cfjXZ2^`2wyJNA-*KF`h7Fs&y?98go6?|U6Qe5}+0lLNAQl_T656F|3awNG78XGI|) zTtnJ57M28KPa!{iWRcLfTJ~=G85D_x`J0@UeqQ+s`ozpCEhkHS*krNsDR3N`h0WV8 z6JujTvyO25JWPe*c#A~L$O~?JhBD&|8$7npFgDO^zh`7xmtht^!!#xmw00X^38G9+ zX6r;H?D@Q<+PwD0vE|Q`62xdD7I4b$9m+!DfK|$M`qIrB%7W%m17EC$-`?|_fo7Gv zb3m*(LHCBD>f7U%M+Uly^IaAAotZmvOm{s-3rWV|HiGHWs^YPJCsBti__d%RRGLdn zAcsO;TEY_77oa6M*$(T*?yMt4W{q|>`Ads;J^r0`3ud|J(TU#&+hYo*Pq(|j34^+;q`eBWYN?Nb~D|g@NIMfl8J6Js;_}EqxcPC2LPHy z|1cwrm+XysxU&ExtGNWk>GD4*! zCNbTS9&W~2U&VE*pZpeXn8~-=o03k{mbw-`r7lS7%VOX2>-{_texkEs-z|a`F~1+@MJv!qxjw#7!3q5=jwHPy?=27ni>% z#0H=VlLOZfXi80P2*Xp)4h*onJh6bIkRWbuJu&sW6rCWl#yf*A!oEIr$Noevvw7|f z?bo;o1fXiZmhiq+KWF*4wfG}JB93BL?kX4zPbt3Wd*Q!wfV>so(OTfVkQh(U zB2T&@NqDdLHTCyP-lZU9P&L0DqKfo-2%E-dKTEDEJlJ%-K_0%1!jqr{pa9bJlsgK_ z7;E|+Zxm^&Pu=SeBPW*OgkN@Ux^{TieXS1S*@7a;7FM}jbL1L9dlgi*1Scp)h+f{c)|xa<7Lm9@L}!pwvB~UsPX*^wmv5nf&A1a2!1Oj#(t}RhOT5}U&FjG=r8cCcx@7JCQVEAHzpu(dj!6w^Zr zk;jSL~;@-6OfBI;A`;rIBHdKu%rr*W*p&%Tw;t+N|W3 znf~auMZYC2E>nO#+D%KF;tC?-Xs3W8En_j*KCeL zSs))CJ|xYp+Dhxq@E8OvtWdovmbHDFn^ITRP2{sW40TwOi z+?L%i>%!7j{4Wj-!m_UXTU_dqPRsB&z^7{a9u`1ifzP9QH;3?YTUJBVD^(0pv;wes zvsjJsKUu1QCCDpfo~b^q8EE5+X20VxYUs0Q++;oSLkOPHb`oFgn$o&I{O%zcveV=X z0+&SvTEjTUVr9vVg}x5-6NZ($?g6^j5Mlv$Xm=&0I79toW>&*LDRw8pTiSLO`^cpW zkjFiRA41hfwFS26lN!u<;jq`dh5is9hF!&G0@bT!L03(qi|fM|@f5|S2_o$d?=u8@ z1M((p+s)IBF6HdjNAs)gFlpV>u-^c&;u4Qh*}qM zhM@c9E08+qK*SD0dXgJt_I|ecKfpf~W!}EDP+SR_t=^(_PKJN>Rdz!U0l9*84fh#v z0I0?r4S+c3{|?|e%?~hiGn4iQK-|VU(E|?Lj^ey)MwSh!asWt0MpOrX>mCl0Gu?l| zhT~0d|EUqTAMK3$f$E*jGAhGLldOxcQQU*;Htn^)`1+$oWbxLQ5u@-X(14qspM|&v-8gFIz1ddd@3ZQdkaAs?ui6&s-5yp%8i@UonLX4h2!b{0q5- zDsz`_Vk$Xs>?Q~qYq;3^cTPJ|v@PZ3LIp6-hQ}N0a|`8x+nsCzZwroSh}9}Fj< zSZ4Pp{Q}GnWR1(2`?V1mQd`u^F6(>Yupvn*b8ZQ~wfmN``d6Bh9ad9bG>LX=8g!rV z9q~ea5Pl>V6(0$|tx>;KqlNL_*^H}RiL&ostQ`5Pp| z`1{``$b|p9l<3Mpr*32YzfFyYlV#)%=@CM1-%xl_Ayo`Ho|_=zJl6}ZB}D|WNoSTA z*y~v^+_Y3bb{%*(ND0u2Kx|z~JaShbP{8j|kfEe3duF2^MyA}d3M{WwNR2fjc^o>zly{=;ZilK}wB(Pz^0$DCzkm-e8<~)4RAuS74%OZb?qc ziohh$o^oS!amP4`d7Y=L4$zXg15!oBVFNvNFQjKTAniW0b}imGRj_|nT2)nVU6g#7)L$Ix(#Xip);3gb_f&5?SJO)rqb-+3@zQfKvo-0bEXrN6a*7*E zU}xj>;tci&kl{mPV*m4J$;-zQzI zg$+#t7No=H{zlB#_sd}N%09_vAhfddh=cQ?M4tIQ!u>}OOa(k{WX)e8Sr+o&PM`7r zaQbeJ2KM%UrGvj!ApbWTM(sa8|L1-|wTe{iCO$&XshYH1cvHjDgC)F=b!E3Qm57hF z2IF%9B0oQ3tID?*19~rhd}5Vc_}hsW46tg@Hz`WMl8S;|`-X$=)h-&iOp>5auXcu z)GYdgV2Ey)k$TxSv>7rts%EllvkdSLDnK6dCQ_t6H%5{)0vw&9BQX#!pYP{43T__p z)}D{QROHeDsbdT#NU@Twyg=9SR3$VwH)JRRaw=6_ttKvKVImKd>~`V&O_RCgL(!zk z%(7$~8S3_q&4BDg}) zcuL0Ei#~D@dL9q;arF2nHl^U7!Qbr8Nkr3pzegUSx*sHDVr5JS@t}cs(Xt(LfRq-_ zzCt^f*>3J4D;~OUb&sRqp}_i-^W1pK*st9oB*#U8=W(Y`{K@Fd;IGXwk{mh=po9M5Rhq=YrW!5s?%^-oyCGC)k~X;*Rjl z5)Y4m#up}$_KU4|<_IyB+IE)If8u%#lN5N4?V6DI&D!QtP%nO#!#!m=il zdX@lrD*l@*fwX;hHlkL*Xy4rmDeX<78$eU?b2jJ1QG4@`J#DiREp5oM!3FM2E)QL+ zgi#BD7UZLLtLDYPAC|ijW;WXXnq$8!R22Xqv=exxZNF%f;1DNI&)L4jg%7K|=k@o0 zBDHPfWsscz_LjcC`sDw6ycgfU^cEv)11Bd7BRVDLze_4c|J7;!GkxlR9`Ln>meZo> ze+1*Qp8--eR|oNz1|x8$lhWq^CKAvV%S~zOa%mkUt5+WwL;ZAnC99%oDFWf(cEH!u zdfD#2&8#nz3ha|L4InhC*f+)`P)7t@iuH%&6Zca?5G9ombMI^tT@ssOe~Ye?<2%rM zc=;k71SO{7Zo2&yw^rtZ+q(FvhpQHgRFg5t;!)m&wCys@w&^T>l=zVAiPyOa3Ci~N z5{P66O49x9*h?ajCFy4EgVe%|5K4%;Mv~M>)zAH&0s7K5Y=`K0f{52w0}PAOz3FnW zC&BezB;V2VsniX8Cx(x?4_|pA7_TzXkgFZ?!whm5EW4BXKwTtEXv7oZQFlxpaK5vC zg`jm>KTx6CDcZX;QVu5Z**Q2x)(_|yx#dFT+Z}jk849|ZA9L}WC^p*>!HByk>kb?LHis_VQR6MgtFhM??gxt9ieW?us zw$YXiy}&F1OsN}wVdx#AIx&gq>N$p=1RzmLeE%XP;9q!^MXRa2yp25AX8us7T<)Dj ztb+M8X2zH;{PQPe>(XG2c>2hGIgKIq5CYm+Cdy5sMWx?9Lxiz_1hHQ;krZz=q0zSK z$@M_TA%~lbea)J+|HJ_w^Ra(^f4?vg-cDC9M9n>VB&Y;?9>I&~j@-c7zdeZhjyUthK7RAl1Svx{CJA6DJWgiL!k-I)3t8 zv5*oiZ{cwdB*ycZ+B2#}oCwRCtcyFQ-Z7z-u*F}}(b5C89`yAVEm)ahM zcg-*B*)*4a+T`u5tHul#=khI0JUNuCbFu_&(+7;f*Y6|8msM zFS83Q4wcUu7Q&|Q`~w3P1Zx|am$bm& z=Q{?=+pimNONZfjwB8#qM0+%8eiZGt#_;CZI~C8tb`zVW7C8-US=o>gRJY59M4fxhX#r zDkScr)-nCd4L^)$rr0RLHmtMVg)?2Gi<0h1h1fN$guUGRdQ{~9p0kTvgd{GYK5%FPa%gLR=}U1%bkCgX`pyeV}-#009OAd z5dHsjVf~+9B+Z(aN}J+{KQnp^e^fv{jIbcux2@f^>-Af-lY!x!KH9L85%1SlL{gd( zqV{bcdi7qqnCUPC`0@HO&cC0GI=nnbW(Los*b9lNOanVb66g|*?K_#&Q4Dex4G~BT zG)CrkMnt>D8Vd-2AngVPvS39|2Rp+~RI-Y_p10a451d^k1|eydib(caMH~U~=mrX` zC5|SX%14{R28qAzn2MOE{J)doTaJD$l^Q6U4EsQrXi|}w6Y1>`I|!%wjkiHnvfnEp zdaBJkDSyxB$)mV*J|a`N~GS%Sg6xPZNi?a6uC#k zPn#n@4-9igB-N1Q@`^67YoN|IkgTDNjS0;iE%b|?@dYzjq^Bs~o1ny0aVBhzN)Z7R z%}HKqauXP{ydYy*$&ik;56MaVWo|!YA+lgEFv%TtMxX8Pxv9I%tF!8i2AVzM#-Fi} zoaO8Hg}=!cxt3gml*PX`OJE!qA|~V11u}x)PURIXdvSl}U#d-bsU`G!a@f?ZSw}c{?qve8o@|W)#5uPU~6{XXEbHp}D-d^+U z$tvm4f)b*wv$r@UzdXWvpaC0MN<3#j4!FdPUmFS1Ukt3S3iYKg0PaGvD80^4xJJ8J zMaY)a@3M5^3!0E{ab|05m10#v0byt!o#NF@x^tC^Gho?_S>>t`c<1WnWd^+w?!a6c zS%+7;hAiB)NR-Vid#9&DZD9lSM?-+w0;Q~|(#*brz7AbjliRvA8w&(*9S>Ezz@vTo z0P@HQ@){0^e(at-$j`y0)`p?VBCnDGB!3Ga32IFUI{|NOcTDR(+w2C|gN~()3#3Ew z-n%*6u2l?b}cNR~>_Cwla z2#(%4^eX@-`Yr!tygG(kD$F%b44t}WgCX^$45&Dw zxlpU-t-O8~_h7FzJT?S*U(zSqx1BDBGfYD%+zw;&{`No0Fg#MsJZ*eV?R+$)N@obR zDefI*Rz!Gk%*8{N{PBK=;d!@XH!b(P{;+j_#K{EA^ftmfv(n@Surj*5UiK;G&m*~s zIB+29&(M1$fn_LBW5LoHg1GAP$JT5C=o8xe0KbeNPhIR-evtLtY-HUFsH+d0C5p+4 z4qpeKb>8Z~tGrMONob-+1eC<9mk8Edimk{q@mM?WnNF=O$(-lGGegvEB2G;)f;o5+ zbmr;YKOI^LTQIl5vSLUDEb?dZRvtF$a`sT5R$k+?HsM5@7B2pDuVyvz%Aq9Pl!m9Nem- zIic*run+@6IWP7bMYLRoOH+Mk%#+L#PAe`xE?wnzVWUJd`}6ti(I#o&B~&ItSj464dwL z7s)g0n9nUNF`f$Z_R-#Eq&McJ4=$5sk)J(RT3IhE!l*b?O2ySHo3A=qxsFTeZR0Mq z=F&XL=_m7nD_W!oEqM-;C=SaXr5U;C9TmChG6cKKWJXYD7pfra5Z^DcVNN$#3#u01 zYg?!aBqRz=leL3xZ9vp{&z@+{l^;%p@cGQ~H9=RJ=U%aNx^yfg#a zeqnz_nhf1AZ)|=S!lIi%)39vtU!A2-)8n%+{Q5%gQul!SG6mz-x{fH;hdEc%E>_ZI z+el3bIB1piS=N8_U=zw0U`zng;-LbMZ7g;yogz8=a?Wk&j6%#DVBOj-!DSlpb<8EY z?&s(~C%>j$Ng#m>sISqSPF~rsV$Yj(9P>zbiA@$Yo{VCZQ@B8!Mm(f23W!dZQ(ufJ zaUxvCbUby@(WAF`>dqKeos3S_H(Fqu*_>-5n2EmS>VmCGYwS5j2u+Da`L(MHbKop^ zJ5$>K@?;>6fJ5ULYWdPF^Au}x5^&wqI3Dw=Fi!YUPdfPZo642{y(%?<()?CCO}0