úÎA>4$      !"#NoneB$%&'()*+,-./0 $%&'()*+,-./0None OA representation of a hash that allows rolling hashes to be easily calculated. ¥Split up a ByteString into a complete block and a remainder. If no break point is found in the given string, the first element of the resulting pair will be empty. Same thing as  ‚, but actually calculates the hash of every window explicitly. This is really slow, and is only used to validate the results of  Determine the hash of every len! sequence of bytes in the given 1;. Because this uses BuzzHash, a rolling hash, this runs in O(n)" time dependent on the length of bs, and independent of len.This will generate (length bs - len + 1) 64-bit hashes.wThis function really doesn't serve any purpose anymore, and is just kept around as a sanity check for the much faster   function. Create a  instance using an entire 1?. This doesn't have any sort of length argument to do partial 1 s because 1' supports efficient slices on its own.22Calculate the actual hash of the given ByteString. Roll the  to the next byte over in the 1D being hashed. This doesn't do any sort of checking to ensure that old and new’ are actually correct, so this is probably easy to mess up when using it manually. The expected usage is that one would initialize a hash using  on the beginning of some 1„, and then to calculate the hash of each sequence of bytes one would manually track the first and last byte of each window on the 1.   does this for you...ŽUpgrade an 8-bit word to a 64-bit one that is very "different" from all the other possible 8-bit words. This library uses SipHash to do this.3*A pre-calculated array of hashes of bytes. 45 6How many bytes to use when generating the pattern hashlog2 of the desired block sizeThe ByteString to split (How many bytes to use for pattern searchlog2 of the desired block sizeThe ByteString to split $How many bytes to put into each hashThe 1 to calculate hashes of.23      45 23None!Parameters to the chop function. 0 is how many bytes wide the hashing window is. } is the target size of each generated block. Actual blocks will be larger or smaller, but on average, blocks will be about ! on reasonably high-entropy data.The result of the "t function, contains the list of optimal blocks that were found, and any remaining bytes that did not end optimally. Alias for 1K, used to indicate that this sequence of bytes ends in an optimal fashion.!This is an alias of chop'J that uses a window size of 128 bytes and a desired block size of 256KiB." Chop up a 18 into blocks of data that are likely to occur in other 1Ts. This uses roughly the same algorithm that rsync does: calculate a hash of every +-sized sequence of bytes within the given 1ÿ0, and then break it up where the hashes match a certain pattern. Specifically, this function uses BuzzHash (a rolling hash) to make the hash calculations fast, and the pattern it looks for is that the hash's binary form ends with the right number of "ones", where "right" is determined by the given @. The breaks are inserted after the matching windows are found.#ADetermine the bitmask that will probably give us blocks of size  desiredSzÿY. The idea behind this is that if, for example, we want 1MB blocks, then we need a bitmask that will match one window in (1024*1024). This is equivalent to saying that we want the hash's bottom 20 bits to be set (a 1 in 2**20 occurrance). This function's ugly, and uses logarithms and lots of type conversions, but it's only called once per chop'6 call, so it doesn't have much impact on performance. !"chopping parametersByteString to chop#6  !"# " !# !"#67       !"#$%&'()*+,-./01234567optimal-blocks-0.1.0Algorithm.OptimalBlocks.SipHash Algorithm.OptimalBlocks.BuzzHashAlgorithm.OptimalBlocksSipLE64 fromWord64 fullBlock lastBlockfinalizehashByteStringHash windowLength currentValsplit slowSplithashesinitrollh ChunkConfig windowSize blockSizechunkAlg AlgorithmNewOld ReferenceBlocks blocksOptimal blocksRemain OptimalBlock fromOptimal defaultConfigchop sizedBitmaskv0v1v2v3fromLE64 initStatesipRound runRoundspeekBytepeekLE64 $fShowLE64bytestring-0.10.4.0Data.ByteString.Internal ByteStringhash0hs BlockShift WindowSize$fNFDataBlocks