!hVz      !"#$%&'()*+,-./0123456789:;<=>?@ABCDE F G H IJKLMNO P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u vwxyz{|}~   BSD-style#Vincent Hanquez <vincent@snarc.org> experimentalunknownSafe memory.A simple Extended Word128 composed of 2 Word64 BSD-style#Vincent Hanquez <vincent@snarc.org>stableGoodNonememoryperform io for hashes that do allocation and ffi. unsafeDupablePerformIO is used when possible as the computation is pure and the output is directly linked to the input. we also do not modify anything after it has been returned to the user. BSD-style#Vincent Hanquez <vincent@snarc.org>stablegoodNoneMc memory(Class of types that can be byte-swapped.e.g. Word16, Word32, Word64memoryBig Endian valuememoryLittle Endian value memoryrepresent the CPU endiannessBig endian system stores bytes with the MSB as the first byte. Little endian system stores bytes with the LSB as the first byte.#middle endian is purposely avoided.memoryReturn the system endiannessmemory.Convert a value in cpu endianess to big endianmemory5Convert from a big endian value to the cpu endiannessmemory1Convert a value in cpu endianess to little endianmemory8Convert from a little endian value to the cpu endianness    BSD-style#Vincent Hanquez <vincent@snarc.org> experimentalgoodNone2#AmemorySiphash tag value memory SigHash Keymemory;produce a siphash with a key and a memory pointer + length.memorysame as U, except also specifies the number of sipround iterations for compression and digest.memory siphash Cmemory siphash Dmemorykey for the hashmemorymemory pointermemorylength of the data ! BSD-style#Vincent Hanquez <vincent@snarc.org> experimentalunknownNoneFSX."memory)Transform a raw memory to an hexadecimal user beware, no checks are made#memory'Transform a number of bytes pointed by.0src in the hexadecimal binary representation in dst\destination memory need to be of correct size, otherwise it will lead to really bad things.memoryConvert a value Word to two Word9s containing the hexadecimal representation of the Word#$memoryconvert a base16 src in dst.n need to even"memorya with1 type of function to hold reference to the objectmemorylength in bytes#memorydestination memorymemory source memorymemorynumber of bytes"#$"#$ BSD-style#Vincent Hanquez <vincent@snarc.org>stableCompatNoneF9$memory$byteswap Word# to or from Big Endian0on a big endian machine, this function is a nop.memory'byteswap Word# to or from Little Endian3on a little endian machine, this function is a nop.memoryVSimple compatibility for byteswap the lower 32 bits of a Word# at the primitive levelmemorypSimple wrapper to handle pre 7.8 and future, where most comparaison functions don't returns a boolean anymore.memory=Apply or or another function if 8 divides the number of bytesmemorynumber of bytesmemory?if it divided by 8, the argument is the number of 8 bytes wordsmemory'if it doesn't, just the number of bytes BSD-style&Nicolas DI PRIMA <nicolas@di-prima.fr> experimentalunknownNoneFSXD"%memory'Transform a number of bytes pointed by.+src in the base32 binary representation in dst\destination memory need to be of correct size, otherwise it will lead to really bad things.&memoryGGet the length needed for the destination buffer for a base32 decoding.9if the length is not a multiple of 8, Nothing is returned'memoryconvert from base32 in src to binary in (dst, using the number of bytes specifiedthe user should use unBase32Length to compute the correct length, or check that the length specification is proper. no check is done here.%memoryinputmemoryoutputmemory input len%&'%&' BSD-style#Vincent Hanquez <vincent@snarc.org>stableCompatNoneFEt BSD-style#Vincent Hanquez <vincent@snarc.org> experimentalunknownSafeG+ BSD-style#Vincent Hanquez <vincent@snarc.org> experimentalunknownSafeHr,      !"#$ BSD-style#Vincent Hanquez <vincent@snarc.org> experimentalgoodNoneFMO(memoryFNV1(a) hash (64 bit variants)*memoryFNV1(a) hash (32 bit variants)%memory6compute FNV1 (32 bit variant) of a raw piece of memory&memory7compute FNV1a (32 bit variant) of a raw piece of memory'memory6compute FNV1 (64 bit variant) of a raw piece of memory(memory7compute FNV1a (64 bit variant) of a raw piece of memory()*+%&'( BSD-style#Vincent Hanquez <vincent@snarc.org> experimentalunknownNoneFSXb,memory'Transform a number of bytes pointed by src$ to base64 binary representation in dst`The destination memory need to be of correct size, otherwise it will lead to really bad things.-memory'Transform a number of bytes pointed by src/ to, URL-safe base64 binary representation in dstJ. The result will be either padded or unpadded, depending on the boolean padded argument.`The destination memory need to be of correct size, otherwise it will lead to really bad things./memoryGGet the length needed for the destination buffer for a base64 decoding.9if the length is not a multiple of 4, Nothing is returned0memory9Get the length needed for the destination buffer for an  .http://tools.ietf.org/html/rfc4648#section-3.2unpadded base64 decoding.If the length of the encoded string is a multiple of 4, plus one, Nothing is returned. Any other value can be valid without padding.3memoryconvert from base64 in src to binary in dst%, using the number of bytes specifiedthe user should use unBase64Length to compute the correct length, or check that the length specification is proper. no check is done here.,-./0123,-./0321 BSD-style#Vincent Hanquez <vincent@snarc.org>stableCompatNoneFd")(c) Vincent Hanquez 2014 BSD-styleVincent Hanquez provisionalnon-portable (requires POSIX)None|*memoryMemory synchronization flags+memoryperform asynchronous write.,memoryperform synchronous write.-memoryinvalidate cache data..memoryAdvice to put on memory.only define the posix one./memory no specific advice, the default.0memoryBExpect page references in random order. No readahead should occur.1memoryRExpect page references in sequential order. Page should be readahead aggressively.2memoryIExpect access in the near future. Probably a good idea to readahead early3memory(Do not expect access in the near future.4memoryMemory protection5memory Mapping flag6memory)memory changes are shared between process7memory%memory changes are private to process8memoryMap pages of memory.vIf fd is present, this memory will represent the file associated. Otherwise, the memory will be an anonymous mapping.use mmap9memoryUnmap pages of memoryuse munmap:memory7give advice to the operating system about use of memorycall madvise;memory%lock a range of process address spacecall mlock<memory'unlock a range of process address spacecall munlock=memory set protection of memory mappingcall mprotect>memory4memorySync synchronize memory with physical storage.EOn an anonymous mapping this function doesn't have any effect. call msync?memory&Return the operating system page size.call sysconf8memory*The address to map to if MapFixed is used.memoryThe length of the mappingmemory1the memory protection associated with the mappingmemory*+,-./01234@ABC56789:;<=>? BSD-style#Vincent Hanquez <vincent@snarc.org> experimentalunknownSafeF' 4memoryCreate a new temporary buffer5memory1xor bytes from source1 and source2 to destination d = s1 xor s22s1, nor s2 are modified unless d point to s1 or s26memory:xor bytes from source with a specific value to destinationd = replicate (sizeof s) v D s7memory Copy a set number of bytes from src to dst8memorySet $n number of bytes to the same value v9memory#Reverse a set number of bytes from src to dst(. Memory locations should not overlap.:memory'Check if two piece of memory are equals;memory8Compare two piece of memory and returns how they compare<memory2A constant time equality test for 2 Memory bufferscompared to normal equality function, this function will go over all the bytes present before yielding a result even when knowing the overall result early in the processing. 456789:;< 456789:<; BSD-style#Vincent Hanquez <vincent@snarc.org>stableGoodNone HSUVX=memory0Class to allocate new ByteArray of specific size>memory allocate n& bytes and perform the given operation?memory7Class to Access size properties and data of a ByteArray@memory)Return the length in bytes of a bytearrayAmemoryAllow to use using a pointerBmemory%Copy the data of a bytearray to a ptr>memoryNnumber of bytes to allocate. i.e. might not match the size of the given type ba.=>?@AB BSD-style#Vincent Hanquez <vincent@snarc.org>stableGoodNoneCmemory*A simple abstraction to a piece of memory.fDo beware that garbage collection related to piece of memory could be triggered before this is used.XOnly use with the appropriate handler has been used (e.g. withForeignPtr on ForeignPtr)Ememory>Increase the memory view while reducing the size of the windowkthis is useful as an abtraction to represent the current offset in a buffer, and the remaining bytes left.CDE BSD-StyleNonefEmemorySimple ByteArray PackerFmemoryPacking result:=PackerMore: the next state of Packing with an arbitrary valuePackerFail: an error happenedFmemoryrun a sized actionGmemoryrun a sized actionEHIFGHFG BSD-style#Vincent Hanquez <vincent@snarc.org> experimentalgoodNoneImemory8Compute the SipHash tag of a byte array for a given key.I# is equivalent to 'sipHashWith 2 4'Jmemory8Compute the SipHash tag of a byte array for a given key.2The user can choose the C and D numbers of rounds.calling I# is equivalent to 'sipHashWith 2 4'Kmemory2Compute the FNV1 32 bit hash value of a byte arrayLmemory3Compute the FNV1a 32 bit hash value of a byte arrayMmemory2Compute the FNV1 64 bit hash value of a byte arrayNmemory3Compute the FNV1a 64 bit hash value of a byte arrayJmemoryc roundsmemoryd roundsmemorykeymemory data to hash !()*+IJKLMN !IJ*+()KLMN  BSD-style*Nicolas Di Prima <nicolas@primetype.co.uk>stableGoodNone.=>?@ACHMUVXkOmemoryBWrapper around any collection type with the size as type parameterQmemory/Type class to emulate exactly the behaviour of =) but with a known length at compile timeRmemory just like R$ but with the size at the type levelSmemory create a O from the given ?- if the size is the same as the target size.Tmemoryjust like the S9 function but throw an exception if the size is invalid.UmemoryQAllocate a new bytearray of specific size, and run the initializer on this memoryVmemoryQAllocate a new bytearray of specific size, and run the initializer on this memoryWmemory similar to allocN: but hide the allocation and initializer in a pure contextXmemory similar to createN: but hide the allocation and initializer in a pure contextZmemoryCreate an empty byte array[memory%Pack a list of bytes into a bytearray\memory(Un-pack a bytearray into a list of bytes]memory%prepend a single byte to a byte array^memory$append a single byte to a byte array_memory&Create a xor of bytes between a and b.9the returns byte array is the size of the smallest input.`memory@return a specific byte indexed by a number from 0 in a bytearray"unsafe, no bound checking are doneamemory7Split a bytearray at a specific length in two bytearraybmemoryTake the first n byte of a bytearraycmemorydrop the first n byte of a bytearraydmemory!append one bytearray to the otherememoryJDuplicate a bytearray into another bytearray, and run an initializer on itfmemory Similar to e> but also provide a way to return a value from the initializergmemory Similiar to e5 but expect the resulting bytearray in a pure contexthmemoryFCreate a bytearray of a specific size containing a repeated byte valueimemory6Create a bytearray of a specific size initialized to 0jmemory0Convert a bytearray to another type of bytearraykmemory6Convert a ByteArrayAccess to another type of bytearray;This function returns nothing if the size is not compatiblelmemory6Convert a ByteArrayAccess to another type of bytearrayOPQRSTUVWXYZ[\]^_`abcdefghijklQROPSTUVWXYZ[\]^_`abcdefghijkl BSD-style#Vincent Hanquez <vincent@snarc.org>StableGHCNone2Fnvmemory=ScrubbedBytes is a memory chunk which have the properties of:+Being scrubbed after its goes out of scope.6A Show instance that doesn't actually show any content#A Eq instance that is constant timev BSD-style#Vincent Hanquez <vincent@snarc.org>stableGoodNoneQwmemoryQAllocate a new bytearray of specific size, and run the initializer on this memoryxmemoryQAllocate a new bytearray of specific size, and run the initializer on this memoryymemory similar to w: but hide the allocation and initializer in a pure contextzmemory similar to x: but hide the allocation and initializer in a pure context{memoryCreate an empty byte array|memoryCheck if a byte array is empty}memory%Pack a list of bytes into a bytearray~memory(Un-pack a bytearray into a list of bytesmemoryPreturns the first byte, and the remaining bytearray if the bytearray is not nullmemory&Create a byte array from a single bytememory%prepend a single byte to a byte arraymemory$append a single byte to a byte arraymemory&Create a xor of bytes between a and b.9the returns byte array is the size of the smallest input.memory@return a specific byte indexed by a number from 0 in a bytearray"unsafe, no bound checking are donememory7Split a bytearray at a specific length in two bytearraymemoryTake the first n byte of a bytearraymemorydrop the first n byte of a bytearraymemory%Split a bytearray at the point where pred becomes invalidmemoryReverse a bytearraymemory-Concatenate bytearray into a larger bytearraymemory!append one bytearray to the othermemoryJDuplicate a bytearray into another bytearray, and run an initializer on itmemory Similar to > but also provide a way to return a value from the initializermemory Similiar to 5 but expect the resulting bytearray in a pure contextmemoryFCreate a bytearray of a specific size containing a repeated byte valuememory6Create a bytearray of a specific size initialized to 0memory!Check if two bytearray are equalsUThis is not constant time, as soon some byte differs the function will returns. use + in sensitive context where timing matters.memory;A constant time equality test for 2 ByteArrayAccess values._If values are of 2 different sizes, the function will abort early without comparing any bytes.compared to == , this function will go over all the bytes present before yielding a result even when knowing the overall result early in the processing.memory:Check if any element of a byte array satisfies a predicatememory9Check if all elements of a byte array satisfy a predicatememory0Convert a bytearray to another type of bytearraywxyz{|}~ BSD-style&Nicolas DI PRIMA <nicolas@di-prima.fr>stableGoodNonememorya view on a given bytesEquality test in constant timememory"create a view on a given bytearrayCThis function update the offset and the size in order to guarantee: offset >= 0 size >= 0offset < lengthsize =< length - offsetmemory&create a view from the given bytearraymemoryWcreate a view from the given byte array starting after having dropped the fist n bytesmemorythe byte array we put a view onmemory%the offset to start the byte array onmemorythe size of the viewmemory byte araymemorysize of the viewmemory byte arraymemory7the number of bytes do dropped before creating the view  BSD-style#Vincent Hanquez <vincent@snarc.org> experimentalportableNoneSXmemory"Simple ByteString parser structureJmemory?The continuation of the next buffer value, and the parsed valueKmemory<The continuation of the current buffer, and the error stringmemory3Simple parsing result, that represent respectively:failure: with the error message+continuation: that need for more input data9success: the remaining unparsed data and the parser valuememory&Run a parser on an @initial byteArray.|If the Parser need more data than available, the @feeder function is automatically called and fed to the More continuation.memory*Run a Parser on a ByteString and return a memory!Get the next byte from the parsermemory)Parse a specific byte at current positionQif the byte is different than the expected on, this parser will raise a failure.memory/Parse a sequence of bytes from current positiongif the following bytes don't match the expected bytestring completely, the parser will raise a failurememory7Take a storable from the current position in the streammemory5Take @n bytes from the current position in the streammemoryLTake bytes while the @predicate hold from the current position in the streammemory@Take the remaining bytes from the current position in the streammemory5Skip @n bytes from the current position in the streammemoryLSkip bytes while the @predicate hold from the current position in the streammemoryDSkip all the remaining bytes from the current position in the stream  BSD-style#Vincent Hanquez <vincent@snarc.org>stableGoodNone$WmemorySTransform a bytearray at a specific offset into a Word64 tagged as BE (Big Endian)no bounds checking. unsafememoryVTransform a bytearray at a specific offset into a Word64 tagged as LE (Little Endian)no bounds checking. unsafememory Serialize a Word64 to a  ByteArray in big endian formatmemorymap blocks of 128 bits of a bytearray, creating a new bytestring of equivalent size where each blocks has been mapped through f"no length checking is done. unsafememory~map blocks of 64 bits of a bytearray, creating a new bytestring of equivalent size where each blocks has been mapped through f"no length checking is done. unsafe  BSD-style#Vincent Hanquez <vincent@snarc.org> experimentalunknownNone<;memory%The different bases that can be used.See  "http://tools.ietf.org/html/rfc4648RFC46489 for details. In particular, Base64 can be standard or  ,http://tools.ietf.org/html/rfc4648#section-5URL-safeD. URL-safe encoding is often used in other specifications without  .http://tools.ietf.org/html/rfc4648#section-3.2padding characters.Examples(A quick example to show the differences:%let input = "Is 3 > 2?" :: ByteString=let convertedTo base = convertToBase base input :: ByteStringconvertedTo Base16"49732033203e20323f"convertedTo Base32"JFZSAMZAHYQDEPY="convertedTo Base64"SXMgMyA+IDI/"convertedTo Base64URLUnpadded"SXMgMyA-IDI_"convertedTo Base64OpenBSD"QVKeKw.8GBG9"memorysimilar to hexadecimalmemorystandard Base64memoryunpadded URL-safe Base64memory<Base64 as used in OpenBSD password encoding (such as bcrypt)memoryAEncode some bytes to the equivalent representation in a specific .Examples Convert a  ByteString to base-64:;convertToBase Base64 ("foobar" :: ByteString) :: ByteString "Zm9vYmFy"memoryJTry to decode some bytes from the equivalent representation in a specific .Examples'Successfully convert from base-64 to a  ByteString:MconvertFromBase Base64 ("Zm9vYmFy" :: ByteString) :: Either String ByteStringRight "foobar":Trying to decode invalid data will return an error string:HconvertFromBase Base64 ("!!!" :: ByteString) :: Either String ByteString$Left "base64: input: invalid length" BSD-style#Vincent Hanquez <vincent@snarc.org>stableGoodNone2F>#memorySimplest Byte Array BSD-style#Vincent Hanquez <vincent@snarc.org>stableGoodNoneF?R-=>?@ABCDvwxyz{|}~-?@AB=>vCDwyxz}~{|  BSD-Style#Vincent Hanquez <vincent@snarc.org> experimentalunknownNoneU memory>Fill a given sized buffer with the result of the Packer actionmemory/Pack the given packer into the given bytestringmemory6Put a storable from the current position in the streammemory8Put a Byte Array from the current position in the stream)If the ByteArray is null, then do nothingmemory7Skip some bytes from the current position in the streammemoryCSkip the size of a storable from the current position in the streammemory:Fill up from the current position in the stream to the endIt is equivalent to: #fillUpWith s == fillList (repeat s)memoryUWill put the given storable list from the current position in the stream to the end.jThis function will fail with not enough storage if the given storable can't be written (not enough space)Example: *> pack (fillList $ [1..] :: Word8) 9 "\1\2\3\4\5\6\7\8\9" > pack (fillList $ [1..] :: Word32) 4 "\1\0\0\0" > pack (fillList $ [1..] :: Word32) 64 .. <..succesful..> > pack (fillList $ [1..] :: Word32) 1 .. <.. not enough space ..> > pack (fillList $ [1..] :: Word32) 131 .. <.. not enough space ..>memory/put Word8 in the current position in the streammemoryHput Word16 in the current position in the stream /! use Host EndiannessmemoryHput Word32 in the current position in the stream /! use Host EndiannessEFGHEFGHL !""#$$%&'()*+,-./01234567899::;<=>?@AABBCDEFGHIJKLMNOPQRSTUVWXYZZ[\]^_`abcd e f g U h i j k l m n o p q r s t u v w x y z { | } ~  jklmopqrstuvwxyz{|}~  \    w        p       !"#"$%&'(o)*+,-./0123456789:;<=>?@ABCDEFGHIJtKLM[N O PQ$memory-0.15.0-BDpL7xANPQtKTtLLiFSTuVData.Memory.ExtendedWordsData.Memory.EndianData.ByteArray.HashData.Memory.Encoding.Base16Data.Memory.Encoding.Base32Data.Memory.Encoding.Base64Data.Memory.PtrMethodsData.ByteArrayData.ByteArray.PackData.ByteArray.SizedData.ByteArray.ParseData.ByteArray.MappingData.ByteArray.EncodingData.Memory.Internal.CompatData.Memory.Hash.SipHashData.Memory.Internal.CompatPrim!Data.Memory.Internal.CompatPrim64Data.Memory.Internal.DeepSeqData.Memory.Internal.ImportsData.Memory.Hash.FNVData.Memory.Internal.ScrubberData.Memory.MemMap.PosixData.ByteArray.TypesData.ByteArray.MemViewData.ByteArray.Pack.InternalData.ByteArray.ScrubbedBytesData.ByteArray.MethodsData.ByteArray.ViewData.ByteArray.BytesWord128 $fShowWord128 $fEqWord128ByteSwapBEunBELEunLE Endianness LittleEndian BigEndiangetSystemEndiannesstoBEfromBEtoLEfromLE$fByteSwapWord64$fByteSwapWord32$fByteSwapWord16$fShowEndianness$fEqEndianness$fShowLE$fEqLE $fStorableLE$fShowBE$fEqBE $fStorableBESipHashSipKeyshowHexadecimal toHexadecimalfromHexadecimaltoBase32unBase32Length fromBase32 FnvHash64 FnvHash32toBase64 toBase64URLtoBase64OpenBSDunBase64LengthunBase64LengthUnpaddedfromBase64OpenBSDfromBase64URLUnpadded fromBase64memCreateTemporarymemXor memXorWithmemCopymemSet memReversememEqual memCompare memConstEqual ByteArrayallocRetByteArrayAccesslength withByteArraycopyByteArrayToPtrMemViewPackerResult PackerMore PackerFailsipHash sipHashWithfnv1Hash fnv1aHash fnv1_64Hash fnv1a_64HashSizedByteArrayunSizedByteArray ByteArrayNsizedByteArrayunsafeSizedByteArrayalloccreateallocAndFreeze unsafeCreateinlineUnsafeCreateemptypackunpackconssnocxorindexsplitAttakedropappendcopycopyRet copyAndFreeze replicatezeroconvertfromByteArrayAccessunsafeFromByteArrayAccess$fByteArrayNnbytesBlockN$fByteArrayNnSizedByteArray$fByteArrayAccessSizedByteArray$fEqSizedByteArray$fShowSizedByteArray$fOrdSizedByteArray$fNormalFormSizedByteArray$fSemigroupSizedByteArray$fMonoidSizedByteArray ScrubbedBytesnulluncons singletonspanreverseconcateqconstEqanyallViewviewtakeViewdropViewParser ParseFail ParseMoreParseOK parseFeedparsehasMoreanyBytebytebytes takeStorable takeWhiletakeAllskip skipWhileskipAll $fShowResult$fAlternativeParser$fMonadPlusParser$fMonadFailParser $fMonadParser$fApplicativeParser$fFunctorParsertoW64BEtoW64LE fromW64BE mapAsWord128 mapAsWord64BaseBase16Base32Base64Base64URLUnpadded Base64OpenBSD convertToBaseconvertFromBase $fShowBase$fEqBaseBytesfill putStorableputBytes skipStorable fillUpWithfillListputWord8 putWord16 putWord32 unsafeDoIObaseGHC.Word byteSwap64 byteSwap32 byteSwap16 Data.Bits unsafeShiftR unsafeShiftLpopCounthashhashWithGHC.BaseString convertBytebe32Primle32Primbyteswap32Prim booleanPrimeitherDivideBy8#Int64#Word64# eqWord64# neWord64# ltWord64# leWord64# gtWord64# geWord64#eqInt64#neInt64#ltInt64#leInt64#gtInt64#geInt64# quotInt64# remInt64#and64#or64#xor64#not64#uncheckedShiftL64#uncheckedShiftRL64#int64ToWord64#word64ToInt64# intToInt64# int64ToInt# wordToWord64# word64ToWord# timesWord64#w64#deepseq-1.4.4.0Control.DeepSeqNFDatarnf<$ Applicativepure<*>*>liftA2<*ghc-prim GHC.TypesWordWord8Word16Word32Word64Data.TraversableforMControl.Applicativeoptional WrappedMonad WrapMonad unwrapMonad WrappedArrow WrapArrow unwrapArrowZipList getZipList Control.ArrowfirstsecondData.Functor.ConstConstgetConst Data.FoldableforM_ Data.Functorvoid<$>liftA3liftA<**> Alternative<|>somemanyfnv1fnv1afnv1_64fnv1a_64 getScrubberMemorySyncFlagMemorySyncAsyncMemorySyncSyncMemorySyncInvalidate MemoryAdviceMemoryAdviceNormalMemoryAdviceRandomMemoryAdviceSequentialMemoryAdviceWillNeedMemoryAdviceDontNeedMemoryProtection MemoryMapFlagMemoryMapSharedMemoryMapPrivate memoryMap memoryUnmap memoryAdvise memoryLock memoryUnlock memoryProtect memorySyncsysconfPageSizeMemoryProtectionNoneMemoryProtectionReadMemoryProtectionWriteMemoryProtectionExecute memViewPlus actionPackeractionPackerWithRemain runPacker_SuccessFailure