Caml1999I037  * .Stdlib__Digest!tA;@@@A&stringQ@@@@@@@*digest.mli]<<]<K@@@@@@A@'compareB@@@@@@@@#intA@@@@@@@@`zz`z@@-A@@%equalC@@@@@@@@$boolE@@@@@@@@4h5h@@FB@@&stringD@E@@@7@@@@@@Fl??Gl?W@@XC@@%bytesE@%bytesC@@@K@@@@@@Zo[o@@lD@@)substringF@k@@@@V@@@@\@@@i@@@@@@@@@@xsys @@E@@(subbytesG@2@@@@t@@@@z@@@@@@@@@@@@@w  w  @@F@@'channelH@&Stdlib*in_channel@@@@@@@@@@@@@@@| [ [| [ @@G@@$fileI@@@@@@@@@@D  D  @@H@@&outputJ@.+out_channel@@@@@@@$unitF@@@@@@@@G 5 5G 5 Z@@I@@%inputK@I*in_channel@@@@@@@@@J  J  @@J@@&to_hexL@@@@@@@@@@M  M  @@K@@&of_hexM@@@@@@@@@@R  R  @@(L@@(from_hexN@'@@@@@@@@@(Xee)Xe@@:M@@!SO!tT;@@@A@@@@@@@@>`?`@@@@PN@A@+hash_lengthU2@@@@Kc!#Lc!8@@]O@@'compareV@$@@@@@@@J@@@@@@@@cffhdff@@uP@@%equalW@@@@@@@@H@@@@@@@@zj{j@@Q@@&stringX@@@@3@@@@@@m')m'A@@R@@%bytesY@F@@@E@@@@@@puwpu@@S@@)substringZ@@@@@@@@@@@@c@@@@@@@@@@ss@@T@@(subbytes[@v@@@@@@@@@@@@@@@@@@@@@ww@@U@@'channel\@D*in_channel@@@@@@@@@@@@@@@{68{6\@@V@@$file]@@@@@@@@@@@@W@@&output^@o+out_channel@@@@@@@A@@@@@@@@575\@@0X@@%input_@*in_channel@@@@@@@@@12@@CY@@&to_hex`@@@@E@@@@@@CD@@UZ@@&of_hexa@T@@@@@@@@@UV@@g[@@@@Y^Z@k\@@Ӡ(BLAKE128P@6@de@v]@@@Ӡ(BLAKE256Q@ @no@^@@@Ӡ(BLAKE512R@@xy@_@@@Ӡ#MD5S@@iiiw@`@@@@l:..Stdlib__Digest0l!LHgErζ &Stdlib0Lku]8_٠8CamlinternalFormatBasics0%FU(Q/Tu@@@Caml1999T037i >8C.Stdlib__Digest*ocaml.text&_none_@@A Message digest. This module provides functions to compute 'digests', also known as 'hashes', of arbitrary-length strings or files. The supported hashing algorithms are BLAKE2 and MD5. *digest.mliP77T@@@@@@3@@@@@@#intA;@@#intA@@@@@;@A@$charB;@@$charA@@@@@A@A@&stringQ;@@&stringA@@@@@G@@@%bytesC;@@%bytesA@@@@@M@@@%floatD;@@%floatA@@@@@S@@@$boolE;@@%falsec@@]@$trued@@c@@@A@@@@@d@A@$unitF;@@"()e@@n@@@A@@@@@o@A@ #exnG;@@@A@@@@@s@@@#effH;@@O@A@A@@@@@@|@@@,continuationI;@@Q@@P@B,continuationA@nY@@@@@@@@@%arrayJ;@@R@A%arrayA@@@@@@@@@ $listK;@@S@A"[]f@@@"::g@@@T@@@ @@A@Y@@@@@@@@&optionL;@@V@A$Noneh@@@$Somei@@@@@A@Y@@@@@@@@)nativeintM;@@)nativeintA@@@@@@@@%int32N;@@%int32A@@@@@@@@%int64O;@@%int64A@@@@@@@@&lazy_tP;@@X@A&lazy_tA@Y@@@@@@@@ 5extension_constructorR;@@5extension_constructorA@@@@@@@@*floatarrayS;@@*floatarrayA@@@@@@@@&iarrayT;@@Y@A&iarrayA@Y@@@@@@@@ *atomic_locU;@@Z@A*atomic_locA@@@@@@ @@@ .Assert_failure`#@@@@@J@@@@@@@@[@@A!=ocaml.warn_on_literal_pattern%@&@0Division_by_zero]#@@@A+ . .@+End_of_file\#$@@@A366@'FailureY#,@'@@A<??@0Invalid_argumentX#5@0@@AE$H#H@-Match_failureV#>@@=@9@;@@a@@AV5Y4Y@)Not_foundZ#O@@@A^=a<a@-Out_of_memoryW#W@@@AfEiDi@.Stack_overflow^#_@@@AnMqLq@.Sys_blocked_io_#g@@@AvUyTy@)Sys_error[#o@j@@A^]@:Undefined_recursive_modulea#x@@w@s@u@@h@@Aon@:Continuation_already_takenb#@@@Awv@&Stdlib@A5 {1 Basic functions} VV@@@@@@  The functions in this section use the MD5 hash function to produce 128-bit digests (16 bytes). MD5 is not cryptographically secure. Hence, these functions should not be used for security-sensitive applications. The BLAKE2 functions below are cryptographically secure. X[:@@@@@@A+!tA]<A]<B@@;@@@A@@@@@@@]<<]<K@)ocaml.docڐ ' The type of digests: 16-byte strings. ^LL^Lx@@@@@@@@@@@@@Aг&string]<E@@ 3@+;@@@A3@@@@@@@@'$@@@A &@@(%$#@##@@@#@#@@32@'compare`z~`z@б@гP!t `z`z@@ @@@3@[U@A@@б@гa!t`z`z@@ @@@@@г#int+`z,`z@@ @@@@@@@@!@@@'@@$* @@@9`zz@q G The comparison function for 16-byte digests, with the same specification as {!Stdlib.compare} and the implementation shared with {!String.compare}. Along with the type [t], this function [compare] allows the module [Digest] to be passed as argument to the functors {!Set.Make} and {!Map.Make}. @since 4.00 FaGf@@@@@@@_A@@@Z@@@@@@C%equal]h^h@б@г!thhih@@ @@@3jiijjjjj@\q8@A@@б@г!tyhzh@@ @@@@@г;$boolhh@@ @@@@@@@@!@@@'@@$* @@@h@̐ 9 The equal function for 16-byte digests. @since 4.03 ij+=@@@@@@@B@@@@@@@@@C&stringl?Cl?I@б@г&stringl?Ll?R@@ @@@3@\q8@A@@г!tl?Vl?W@@ @@@@@@@@@@@l?? @ ( Return the digest of the given string. mXXmX@@@@@@@C@@@%@@@@@@1%bytesoo@б@г͠%bytes o o@@ @@@3  @J_8@A@@г^!too@@ @@@@@@@@@@@&o @^ ? Return the digest of the given byte sequence. @since 4.02 3p4q@@@@@@@LD@@@nG@@@@@@1)substringJsKs@б@г&stringUsVs@@ @@@3WVVWWWWW@J_8@A@@б@г9#intfsgs @@ @@@@@б@гH#intus vs @@ @@@ @@гŠ!ts s @@ @@@-@@@@@0@@@%@@3( @@@9@@6<@@@s@ː [Digest.substring s ofs len] returns the digest of the substring of [s] starting at index [ofs] and containing [len] characters. t  u S @@@@@@@E@@!@@@@@@@U(subbytesw  w  @б@г%bytesw  w  @@ @@@3@n8@A@@б@г#intw  w  @@ @@@@@б@г#intw  w  @@ @@@ @@г2!tw  w  @@ @@@-@@@@@0@@@%@@3( @@@9@@6<@@@w  @8 [Digest.subbytes s ofs len] returns the digest of the subsequence of [s] starting at index [ofs] and containing [len] bytes. @since 4.02  x  z G Y@@@@@@@&F@@!@H!@@@@@@U'channel$| [ _%| [ f@б@г*in_channel/| [ i0| [ s@@ @@@310011111@n8@A@@б@г#int@| [ wA| [ z@@ @@@@@г!tM| [ ~N| [ @@ @@@@@@@@!@@@'@@$* @@@[| [ [@ \ If [len] is nonnegative, [Digest.channel ic len] reads [len] characters from channel [ic] and returns their digest, or raises [End_of_file] if end-of-file is reached before [len] characters are read. If [len] is negative, [Digest.channel ic len] reads all characters from [ic] until end-of-file is reached and return their digest. h}  iB  @@@@@@@G@@@|@@@@@@C$fileD  D  @б@гQ&stringD  D  @@ @@@3@\q8@A@@гܠ!tD  D  @@ @@@@@@@@@@@D   @ܐ 4 Return the digest of the file whose name is given. E  E  3@@@@@@@H@@@Ő@@@@@@1&outputG 5 9G 5 ?@б@г@+out_channelG 5 BG 5 M@@ @@@3@J_8@A@@б@г'!tG 5 QG 5 R@@ @@@@@г$unitG 5 VG 5 Z@@ @@@@@@@@!@@@'@@$* @@@G 5 5@7 - Write a digest on the given output channel.  H [ [ H [ @@@@@@@%I@@@G @@@@@@C%input#J  $J  @б@г*in_channel.J  /J  @@ @@@30//00000@\q8@A@@г!t=J  >J  @@ @@@@@@@@@@@HJ   @ - Read a digest from the given input channel. UK  VK  @@@@@@@nJ@@@i@@@@@@1&to_hexlM  mM  @б@г!twM  xM  @@ @@@3yxxyyyyy@J_8@A@@гM&stringM  M  @@ @@@@@@@@@@@M   @ɐ Return the printable hexadecimal representation of the given digest. @raise Invalid_argument if the argument is not exactly 16 bytes. N  P  @@@@@@@K@@@@@@@@@1&of_hexR  R  @б@г&stringR  R  @@ @@@3@J_8@A@@г!tR  R  @@ @@@@@@@@@@@R   @ Convert a hexadecimal representation back into the corresponding digest. @raise Invalid_argument if the argument is not exactly 32 hexadecimal characters. @since 5.2 S  VRc@@@@@@@L@@@"@@@@@@1(from_hexXeiXeq@б@гР&string Xet Xez@@ @@@3        @J_8@A@@г[!tXe~Xe@@ @@@@@@@@@@@#Xee @[ 4 Same function as {!Digest.of_hex}. @since 4.00 0Y1Z@@@@@@@IM@@@kD@@@@@@1RQ7 {1 Generic interface} N\O\@@@@@@3MLLMMMMM@CX1@A!S.CZ^[^@s\@БA+!t Bj`k`@@;@@A<@@@@@@@s`t`@6 The type of digests. aa@@@@@@@@@N@@@Aг&string`@@3@=(;@@@A0@@@@@@@@%"@@@A $@@&$#@##@@@#@#@@3@S@A21@+hash_length!c!'c!2@г#intc!5c!8@@ @@@3@lWQ@A@@@c!# @ " The length of digests, in bytes. d9=d9d@@@@@@@O@@@ᐠ@@@@@@!'compare"fflffs@б@г!tffvffw@@ @@@3@:M8@A@@б@г!tff{ff|@@ @@@@@гࠐ#int ffff@@ @@@@@@@@!@@@'@@$* @@@ffh@S P Compare two digests, with the same specification as {!Stdlib.compare}. (g)h@@@@@@@AP@@@c<@@@@@@C%equal#?j@j@б@гࠐ!tJjKj@@ @@@3LKKLLLLL@\q8@A@@б@г!t[j\j@@ @@@@@г$boolhjij@@ @@@@@@@@!@@@'@@$* @@@vj@ Test two digests for equality. kk%@@@@@@@Q@@@@@@@@@C&string$m'-m'3@б@гl&stringm'6m'<@@ @@@3@\q8@A@@гJ!tm'@m'A@@ @@@@@@@@@@@m') @ ( Return the digest of the given string. nBFnBs@@@@@@@R@@@@@@@@@1%bytes%pu{pu@б@г%bytespupu@@ @@@3@J_8@A@@г!tpupu@@ @@@@@@@@@@@puw @@ / Return the digest of the given byte sequence. qq@@@@@@@.S@@@P)@@@@@@1)substring&,s-s@б@г&string7s8s@@ @@@398899999@J_8@A@@б@г#intHsIs@@ @@@@@б@г*#intWsXs@@ @@@ @@г!tdses@@ @@@-@@@@@0@@@%@@3( @@@9@@6<@@@us@ [substring s ofs len] returns the digest of the substring of [s] starting at index [ofs] and containing [len] characters. tu6@@@@@@@T@@!@@@@@@@U(subbytes'ww@б@гe%bytesww@@ @@@3@n8@A@@б@г#intww@@ @@@@@б@г#intww@@ @@@ @@гg!tww@@ @@@-@@@@@0@@@%@@3( @@@9@@6<@@@w@  [subbytes s ofs len] returns the digest of the subsequence of [s] starting at index [ofs] and containing [len] bytes. xy4@@@@@@@ U@@!@* @@@@@@U'channel( {6< {6C@б@г~*in_channel {6F {6P@@ @@@3        @n8@A@@б@г#int "{6T #{6W@@ @@@@@гŠ!t /{6[ 0{6\@@ @@@@@@@@!@@@'@@ $* @@@ ={68@u u Read characters from the channel and return their digest. See {!Digest.channel} for the full specification.  J|]a K}@@@@@@@ cV@@@ ^@@@@@@C$file) a b@б@г 3&string l m@@ @@@ 3 n m m n n n n n@\q8@A@@г!t { |@@ @@@ @@@@@ @@@  @ 4 Return the digest of the file whose name is given.   3@@@@@@@ W@@@ @@@@@@1&output* 5; 5A@б@г"+out_channel 5D 5O@@ @@@ 3        @J_8@A@@б@г\!t 5S 5T@@ @@@@@г w$unit 5X 5\@@ @@@@@@@@!@@@'@@$* @@@ 57@ - Write a digest on the given output channel.  ]a ]@@@@@@@ X@@@) @@@@@@C%input+  @б@г}*in_channel  @@ @@@3        @\q8@A@@г!t  @@ @@@@@@@@@@@ * @b - Read a digest from the given input channel.  7 8@@@@@@@ PY@@@r K@@@@@@1&to_hex, N O@б@г!t Y Z@@ @@@3 [ Z Z [ [ [ [ [@J_8@A@@г /&string h i@@ @@@@@@@@@@@ s @ Return the printable hexadecimal representation of the given digest. @raise Invalid_argument if the length of the argument is not [hash_length],    @@@@@@@ Z@@@ @@@@@@1&of_hex-  @б@г i&string  @@ @@@3        @J_8@A@@гG!t  @@ @@@@@@@@@@@  @ Convert a hexadecimal representation back into the corresponding digest. @raise Invalid_argument if the length of the argument is not [2 * hash_length], or if the arguments contains non-hexadecimal characters.   @@@@@@@ [@@@  ݐ@@@@@@1@tnA@3@@l@L%@@s@S@@h@H@@@a:@@3        @Nc<@A3        @@A ^ @@ 2 The signature for a hash function that produces digests of length [hash_length] from character strings, byte arrays, and files. @since 5.2   Ui@@@@@@@ ^@@  = {1 Specific hash functions}  kk k@@@@@@3        @A@~i@I@@p@P)@ @S@3@@Z@:@@@@ vCB@BB@@@B@B@?@A.(BLAKE128/D S T@ l]@@Р!S ] ^@B@@  q [BLAKE128] is the BLAKE2b hash function producing 128-bit (16-byte) digests. It is cryptographically secure. However, the small size of the digests enables brute-force attacks in [2{^64}] attempts. @since 5.2  n o@@@@@@@ q@T@(BLAKE2560E } ~@ ^@@Р-!S  @3        @m>@6 Ő,+@++@@@+@+@(C@A@@  [BLAKE256] is the BLAKE2b hash function producing 256-bit (32-byte) digests. It is cryptographically secure, and the digests are large enough to thwart brute-force attacks. @since 5.2   k~@@@@@@@ "@ #@(BLAKE5121F  @ _@@Рe!S  @3        @9L@D ,+@++@@@+@+@(Q@A@@  ᐠ [BLAKE512] is the BLAKE2b hash function producing 512-bit (64-byte) digests. It is cryptographically secure, and the digests are large enough to thwart brute-force attacks. @since 5.2   Tg@@@@@@@ "@ #@#MD52G ip is@ `@@Р!S iv iw@3        @9L@D 5,+@++@@@+@+@(Q@A@@ @  [MD5] is the MD5 hash function. It produces 128-bit (16-byte) digests and is not cryptographically secure at all. It should be used only for compatibility with earlier designs that mandate the use of MD5. @since 5.2  xz Xk@@@@@@@ ii"@ #@@ d ^A@ ! @  @ o H@ ( @@v+@ @@k2@@@]@=@E1@@@@@{@@@Fd@@^@N ~=<@<<@@@<@<@9b@@@3 N M M N N N N N@Xk@c=f@A@ H************************************************************************ YA@@ ZA@L@ H  _BMM `BM@ H OCaml  eC fC@ H  kD lD3@ H Xavier Leroy, projet Cristal, INRIA Rocquencourt  qE44 rE4@ H  wF xF@ H Copyright 1996 Institut National de Recherche en Informatique et  }G ~G@ H en Automatique.  H Hg@ H  Ihh Ih@ H All rights reserved. This file is distributed under the terms of  J J@ H the GNU Lesser General Public License version 2.1, with the  K KN@ H special exception on linking described in the file LICENSE.  LOO LO@ H  M M@ H************************************************************************ N N5@ * Message digest. This module provides functions to compute 'digests', also known as 'hashes', of arbitrary-length strings or files. The supported hashing algorithms are BLAKE2 and MD5.  6* {1 Basic functions}   * The functions in this section use the MD5 hash function to produce 128-bit digests (16 bytes). MD5 is not cryptographically secure. Hence, these functions should not be used for security-sensitive applications. The BLAKE2 functions below are cryptographically secure.   (* The type of digests: 16-byte strings.  ߠ H* The comparison function for 16-byte digests, with the same specification as {!Stdlib.compare} and the implementation shared with {!String.compare}. Along with the type [t], this function [compare] allows the module [Digest] to be passed as argument to the functors {!Set.Make} and {!Map.Make}. @since 4.00  s :* The equal function for 16-byte digests. @since 4.03   )* Return the digest of the given string.  ՠ @* Return the digest of the given byte sequence. @since 4.02  * [Digest.substring s ofs len] returns the digest of the substring of [s] starting at index [ofs] and containing [len] characters.  % * [Digest.subbytes s ofs len] returns the digest of the subsequence of [s] starting at index [ofs] and containing [len] bytes. @since 4.02  ]* If [len] is nonnegative, [Digest.channel ic len] reads [len] characters from channel [ic] and returns their digest, or raises [End_of_file] if end-of-file is reached before [len] characters are read. If [len] is negative, [Digest.channel ic len] reads all characters from [ic] until end-of-file is reached and return their digest. c 5* Return the digest of the file whose name is given.  .* Write a digest on the given output channel. Š .* Read a digest from the given input channel.  * Return the printable hexadecimal representation of the given digest. @raise Invalid_argument if the argument is not exactly 16 bytes. 9 * Convert a hexadecimal representation back into the corresponding digest. @raise Invalid_argument if the argument is not exactly 32 hexadecimal characters. @since 5.2  5* Same function as {!Digest.of_hex}. @since 4.00 8* {1 Generic interface} 7* The type of digests. b #* The length of digests, in bytes.  Q* Compare two digests, with the same specification as {!Stdlib.compare}.  !* Test two digests for equality. i )* Return the digest of the given string. # 0* Return the digest of the given byte sequence. ݠ * [substring s ofs len] returns the digest of the substring of [s] starting at index [ofs] and containing [len] characters. s * [subbytes s ofs len] returns the digest of the subsequence of [s] starting at index [ofs] and containing [len] bytes.  v* Read characters from the channel and return their digest. See {!Digest.channel} for the full specification.  5* Return the digest of the file whose name is given. k .* Write a digest on the given output channel.  .* Read a digest from the given input channel. ͠ * Return the printable hexadecimal representation of the given digest. @raise Invalid_argument if the length of the argument is not [hash_length],  * Convert a hexadecimal representation back into the corresponding digest. @raise Invalid_argument if the length of the argument is not [2 * hash_length], or if the arguments contains non-hexadecimal characters. A * The signature for a hash function that produces digests of length [hash_length] from character strings, byte arrays, and files. @since 5.2 >* {1 Specific hash functions}  * [BLAKE128] is the BLAKE2b hash function producing 128-bit (16-byte) digests. It is cryptographically secure. However, the small size of the digests enables brute-force attacks in [2{^64}] attempts. @since 5.2  * [BLAKE256] is the BLAKE2b hash function producing 256-bit (32-byte) digests. It is cryptographically secure, and the digests are large enough to thwart brute-force attacks. @since 5.2 p * [BLAKE512] is the BLAKE2b hash function producing 512-bit (64-byte) digests. It is cryptographically secure, and the digests are large enough to thwart brute-force attacks. @since 5.2 ; * [MD5] is the MD5 hash function. It produces 128-bit (16-byte) digests and is not cryptographically secure at all. It should be used only for compatibility with earlier designs that mandate the use of MD5. @since 5.2 @?)../ocamlc0-strict-sequence(-absname"-w5+a-4-9-41-42-44-45-48"-g+-warn-error"+A*-bin-annot)-nostdlib*-principal"-o2stdlib__Digest.cmi"-c ) * Z/home/teraram/ci/builds/workspace/parallel-build/flambda/true/label/ocaml-manycores/stdlib @@0'7`ٓ/3 . - - . . . . .@ ,@@8CamlinternalFormatBasics0%FU(Q/Tu&Stdlib0Lku]8_٠ T0l!LHgErζ @0l!LHgErζ Aaz@y@ : @.@@@͐+@@@@@![@I m   @ؐ$    e@@@s@.h@@@ 8 r@%q@İ  W@M@@ ؐ $@5@@ʖ@@l@@@P@@