📄 libgetrandom-5f49a8c90dd0a172.rmeta
/home/palash/git/iron_learn/target/release/deps/libgetrandom-5f49a8c90dd0a172.rmeta
Language: rmeta • Lines: 2108
rust
_�#rustc 1.92.0 (ded5c06cf 2025-12-08)��١�	�T�6a��D�
-5080178c80bf7a93�cfg_if��N���>J���s��-ebc73076c81e0e49��**�٭T��HО�9�-3e2e950d4bac10b5���	ⷄ�ۆ��p��-225863f279df55c4��uӰ]����d��!�-06039bcfba61f665��	�t�#3Ҵη��Ǣ-d25e598578fbf080�rustc_std_workspace_core������Nm��gmY���-327ea4f353b4eb8c���y.:i���gy"1�r-94fdfaf0af91a65d�miniz_oxide�M�^�yTLm�L�d=B-5312b588e5cfab93�adler2��;~�7�ɴ,P?���-1e0b0d62df36c85c�	hashbrown�L�ϫ	2݆y��q-2ed6a8f06fc51a9d�rustc_std_workspace_alloc�a���p��H����6Z�-05b02707a5b2a256�
std_detect�	c�LN����=1�ʶӐ-5978f0713dd5442d�rustc_demangle�X�Fq��UՃ�>7z
��-43b2ff22c18e1125�_֦<����ɐ¬�-6a40188dd7d989d2�	addr2line���,2�!xb�"6�!�	-11d54e777384a9e5�gimli��2��I.�ġ�����-35018e994bad7042�object��T �f��Y�
hQec-2dc10b344e05b569�memchr��xZT9�C��I�Mg�-09f2ab7e0d97e07a��~ݤ	����h���-932f22f820d1e5ec��	�v�5��cp��7�<�-f7f431e3db881029�8	inner_u32�L��L�android�L����L�linux�<�����,��18	inner_u64�L��T�KI�G�@><9;8�$� �L� �L� �� �L� �<� �� �� ,�� 1�_backends�error��	UNSUPPORTED�	ERRNO_NOT_POSITIVE�	
UNEXPECTED�	INTERNAL_START�	CUSTOM_START�	from_neg_error_code�	raw_os_error�	
new_custom�	new_internal�	
internal_desc���util�slice_assume_init_mut��uninit_slice_fill_zero�slice_as_uninit�!�slice_as_uninit_mut�#�ptr_from_mut�%��'���truncate�error_std_impls�,�,,,0�,fill�fill_uninit���use_file�88888888	util_libc�@@@
last_os_error�@sys_fill_exact�D0impl Fn(&mut [MaybeUninit<u8>]) -> libc::ssize_t�D	8	FILE_PATH�8	FD_UNINIT�8FD_ONGOING_INIT�8FD�8
fill_inner�K	8
open_readonly�8open_or_wait�8open_fd�8�PPPPPPPwait�Pwake�Pwait_until_rng_ready�linux_android_with_fallback�ZZZZZZZZZZ	Z
ZZZ
ZZZZGetRandomFn�Z
NOT_AVAILABLE�ZGETRANDOM_FN�Zinit�oNAME�Zuse_file_fallback�Z�r		sanitizer�ttunpoison�tunpoison_linux_getrandom_result�@@	get_errno�
RawOsError�NonZeroRawOsError��}
}�������88888888 8!8#8%8'84858D8D8K8M8q8r8v8w8�8�8�8�8�}}~����?��������������_��_�������
�"�f+�c����}�}�}�}�}}}0�2}�3������_�_��#����U�!g
	
t��4���������������������q�aX����D�l��
*C
��
����MaybeUninit���uninit�������B1}-�hn����<�		�.	�����|�l�
C
h	�q�4
��3��1��g	��g�0�	L����������Q��'���5�	�	�	��	��	yk���9t�,��~%*,	5�L�&)-)-,�&�&)-�D�
�����(7�
�S�����I��gi��g
���!������TryFromIntError����9�{�.	��g	��h��
����!-��
���!�@���
����!ŵ�

����������������������q�aXȩ1�FĿ�Xx��!DKq���4
|�!�
�s�,��+��m��g
#]��hu��hQ���["""��U��
���!�����18
ߵ��5��

���#���

���#�!
����br�

i�#
��&
�����
����&�
� ��n8h -�oh!	!$%%m�h$!���&h%$��.h 
�%#h%n$
�oh!��n>h ��nDh
���
�oh 
�oh#J#Q��'
��l '��-��l!
����'@'��(�)�"(���#
���#�()(s���,|���
�
4#;�'E��l 
������'��(�)�")���$*�$*
���#�)�$
���#�*�$*)(t�i�#�%+���&
����+4�		�ā["m�mh����$[#."��mh	$�&))
����������������;t������&�)l�')/����s-.-.,I���s���
��..�()-),u�M\02M�M\03m��l13	���l13!"	�)/��&�)]��.M��
��0	���s-.1/-�01 D%-.)���s-/,9���s,
���/���4s,!���s,��.),�03
�M\02�	)���\3434��y���\324"�	���\34Y03}�M\02w02
D4����������szHOX_
�����!Dg�n�T����g�ѥ����W�!�!�F���!��	u�������F���4�-���̴��X�!�����!�۵$����g�o����������t������!t���nh�g����l�h�f�������[����m(h���h�f�U���h��qh�����X����塹���$���m������l�P������l  Y�X���	T""P""�	�X����	�%%�&��}%������((��u�	(�	�,�(�����s)��(����os++�����s+����ʒs+���x-�����'s-,����s+��LA\��.�.~
����l0�Q�	0���l11����6\2��E��l16����<��D��-�����
�
���
������|�������i���G��^i؊�#�!V��������������������q�aX�!�`��������������������q�aX�!�!i�#�
�![������|�������i���G��^i؊�#����������������������q�aX�������������������;t����%
�#&	����.��!B
q�!,�!��!Q���#��!l
�����?
z
�!����/[�(�h�(�h���v ��"�<
"�#+
"��%�$�(F(�-�-�a.�i/�0�=��l1��3��buf��sys_fill��res���@��@��	��
�

���
�
��
err��	���\��'��������	���I���s������
�2����
�n�B�4
ō�Cf�C]�mh�
��l�0�	�0�	��
�����'�#1D{�.N�.U\�'����FU���4j�!�{T�����!
5B
����+G�F,��F��F�2b"/dev/urandom\0"��
�������"H�\�$-1��
�������(I�\�$-2���T����!�0�0�0
__variant1��0�0
__variant2���,����X��1

��
��H�+���dm�������_��M����H|��H�X����!_�	d���Y�Y\�Yp��X=nۼk�p�H��e�V
%����-�-
UnsafeCell��-��*��]����HV
�H�ޯ V]ޯV
�Y�H
������������������G����F�����,^����-��V�	���m��_%��_
���$_	�H
��_���_����������H
��_t����
q$� d���/	�H�!����
		
s���O	�	�����
Ds�O�O�O$��5������
��V
���U��
��1!�

	�!m�S_

4�$�
o	6
��T#_ŽT_E�L_�H��L_
��H6��T)_
���J
�T_���J�r���������d�����ۮ�V�Y�H��ӣ���-�H-�V��S�_��Hk��N���HM�S_��'C���He��������HM������

����[������4
��.����5����@�
���e�1�
��I�_��H���*���9��$�����[������4�ߚR_��H��}�_��HE��_��HE��_����$��H<��J�����������������;t����J�JY��O*�P�O�L�K�����J�!d�Q��H�Jdest��raw_ptr��fptr�$��J�getrandom_fn���l�m�J�Q��N�P}�LX
����%�>Fm�JQ_rL�J|�J���m�J	d��O��%��gM���HL���3H#��O-�qq��q�	�!�	��!���%
���%
l�DRDx
x
	x
s������Wg�o�d���>����H4����w��4��������8)ѥ����o���������B�JT���!�����bh	�f��	�
�f�u�h
���zw�f�qs

o
���v����	���P\���O�H��!��O��?���gq�!x�@T�W��Oret����CI�O?�C�_ref__getrandom_fn��	v�������@.
�qq��q������
�!,
���!�!��l���!�?��!	��
�nh
q{
{
�	
�(�
��
�
���%	<������
�%	`�DRDx	;
B
x	
x	wzmienѥb��o��^31�f����f�-������f�q�		�
	*v'%�������<�!��>v��q�!x�!~���?q�?{�(g	�@z�_~
bytes_written�written�%��C�(H�H��"'�3�=FPI��I���j$.	%�5	�4	�
�5-�5	�4	�
�5�J��HJ���5L�	��J�	�	�-�5�	�-�5o��ͱ5a�jh�jo�U�5��]�5��������
	��
�
0��5
�,�$_���

	��
�m�
�n
.��
<�,�
$_���
	���m��n
.��4�,�$_�<����O) �O9	��I�e*�q���+
�T��O��1_�<����O) �O9	��I�e*�q���)�T��O��1_�	4��4	��FFZ�F���.�&���;M�(����0�����0���
���'5��.'����	���������$�9	�.���$��[��F������Acode���&��������0��0�	��*���*'��*��*��*1��*&e�c��_"	����������������;t����_	��c�
�d��
�g���*8
}�*�*��(���)z��c��	�
e�c��^��	�!�9��$����,�)�n�)�$�*�����y}�=�cn�8�w<���
�����%�l"�*<�<:�98$�*I
Q��* 
�	�6t�*�
}��*����l�nk�j�"�n�����{��w�2>�	��-���,)��,
��-��-1��-&tr	�y�	,�*��(c��-8
}�-�-��+���,|&�	��!�	�<5�+��%�,�+�n�+�$�,�[�)�y���{5�w9�u
��|`��-�����
���$�-�
���- �}0�-�
}��-����Z�nY�X���n������{��w��
����'���3
��L�����������9%
��������������B1}-�hn���D�ʆ,����ʆ���
��
��
$��
3���L���#��
���
�%�y����
��,�
���������f��%��4���r�
�
<���||���������������B1}-�hn�O%��|	
U

�(��')�
�
��!��=.��h���
ԥ
��
r$�(���n�%��	U�����Cn�A
���F��
���"���$�$
���#��$
���#���$6=h�i�i�#()��A*
���O���Z$Z���!��F�� 
���0
�����

-4�"���#
���#��ov9��|������		���#|%���|%
%	����ManuallyDrop������2ҏ���Z�OM��&�O
��|%���%�(
��|%�	�� 
���O���N),�����������~��[b��|R|��O������|��Od�#��O�4���_Ef��O����7���n���9��9��$��
���
W��u�;����Gf��}�<��Լt�����=(���&������������5�o�
ܥ	X�n�T���X�����X�����
��;���!FD%����X����""""����|��Ol�a!%����O]��|%�����%��O5��|%�����'��OU�'��X�O��f�))
*��)��������������������q�aX�O���������(�������|�������i���G��^i؊�#��O��������������������q�aX�����#d��6�O����u��|	�?����R�-�������?���"��"�#�"��m%��m%�()�@
	dst���J|�
1��
����%�����CB
��O���#|
<��	���������������B1}-�hn�		
�!

�(~	
�
��!z	�j���
v		v	��t	�	��t	r		o	����	m	A
������
���"���$�$
���#��$
���#���$)0j�k�i�#()��A*
�����O$�
�
653!2��+* 
)h	
�����


$�"���#
���#��_f6ġ|�����		f	%b	%i	%	����ʐ�����2ҏ���ZU	&R	%O	(J	%�	�� 
�����!*,�����������~bi<CG	��D	�d�b$��4�?	���<	�n���9�(�7	�(
���(
�	��3	0	��,	)	��$	 	���		5�				X�n�	��X����X����/�
��M�	VT%����X���m""""	�l��)%���	%	%�	%�'��'��X����))
*��)��������������������q�aX������P�(����#P��%����U	�?i�$���
�R����l�?l���"��"�#�"ޤ�
%���
%�()�@�����J��
����I����CB
�D	�l�8��7.
�?P
B
B
|���#��@5�	�����	���		���
P
�����
[
ls����
���#����l���8	|����4���}�
	����	A
�����
M
^e�����
���#��
���#�����m�i�#(��A
����<���	�4�������#���9%�F��5���	��X�n����X����
�X������
�����%����X������X�����
�������$������l�#��?�?�������!B
�K����e�?e������#��(�V��
���F����CB	BBZiGz����������	��{zxw��po
n�
����������	�	
���#��
���#�	�	���Ri�#(	
��A

�����
��X_&5�����X�n����X�����X������		

��	��%��
�����$�������|�������i���G��^i؊�#�����#��s�!B�)���#��(	��S�?S�V��
a�\�����s�CB����
)�6��@ژ����P�� �� 
*� 7��@Ϫ����P��
}~#�.�5<J
}_~k�v�}�,4567�_4��\����,�}3�9��9,) [`Error::UNEXPECTED`]: Error::UNEXPECTED��f  [`fill_uninit`]: fill_uninit�����8�l��79https://www.rust-lang.org/logos/rust-logo-128x128-blk.png���;$�8����7%https://www.rust-lang.org/favicon.ico���'��������# getrandom: system\'s random number generator\n\n[![Build Status]][GitHub Actions]\n[![Crate]][crates.io]\n[![Documentation]][docs.rs]\n[![Dependency Status]][deps.rs]\n[![Downloads]][crates.io]\n[![License]][LICENSE-MIT]\n\n`getrandom` is a Rust library for retrieving random data from (operating) system sources.\n\nIt is assumed that the system always provides high-quality, cryptographically secure random\ndata, ideally backed by hardware entropy sources. This crate derives its name from\nthe Linux `getrandom` syscall but is cross-platform, roughly supporting the same set\nof platforms as Rust\'s `std` library.\n\nThis is a low-level API. Most users should prefer using a higher-level random-number\nlibrary like [`rand`].\n\n[`rand`]: https://crates.io/crates/rand\n\n## Usage\n\nAdd the `getrandom` dependency to your `Cargo.toml` file:\n\n```toml\n[dependencies]\ngetrandom = \"0.3\"\n```\n\nThen invoke the `fill` function on a byte buffer to fill it with random data:\n\n```rust\nfn get_random_u128() -> Result<u128, getrandom::Error> {\n    let mut buf = [0u8; 16];\n    getrandom::fill(&mut buf)?;\n    Ok(u128::from_ne_bytes(buf))\n}\n```\n\n## Supported targets\n\n| Target             | Target Triple      | Implementation\n| ------------------ | ------------------ | --------------\n| Linux, Android     | `*\u{2011}linux\u{2011}*`        | [`getrandom`][1] system call if available, otherwise [`/dev/urandom`][2] after successfully polling `/dev/random`\n| Windows 10+        | `*\u{2011}windows\u{2011}*`      | [`ProcessPrng`] on Rust 1.78+, [`RtlGenRandom`] otherwise\n| Windows 7, 8       | `*-win7\u{2011}windows\u{2011}*` | [`RtlGenRandom`]\n| macOS              | `*\u{2011}apple\u{2011}darwin`   | [`getentropy`][3]\n| iOS, tvOS, watchOS | `*\u{2011}apple\u{2011}{ios,tvos,watchos}` | [`CCRandomGenerateBytes`]\n| FreeBSD            | `*\u{2011}freebsd`        | [`getrandom`][5]\n| OpenBSD            | `*\u{2011}openbsd`        | [`getentropy`][7]\n| NetBSD             | `*\u{2011}netbsd`         | [`getrandom`][16] if available, otherwise [`kern.arandom`][8]\n| Dragonfly\u{a0}BSD      | `*\u{2011}dragonfly`      | [`getrandom`][9]\n| Solaris            | `*\u{2011}solaris`        | [`getrandom`][11] with `GRND_RANDOM`\n| illumos            | `*\u{2011}illumos`        | [`getrandom`][12]\n| Fuchsia\u{a0}OS         | `*\u{2011}fuchsia`        | [`cprng_draw`]\n| Redox              | `*\u{2011}redox`          | `/dev/urandom`\n| Haiku              | `*\u{2011}haiku`          | `/dev/urandom` (identical to `/dev/random`)\n| Hermit             | `*-hermit`         | [`sys_read_entropy`]\n| Hurd               | `*-hurd-*`         | [`getrandom`][17]\n| SGX                | `x86_64\u{2011}*\u{2011}sgx`     | [`RDRAND`]\n| VxWorks            | `*\u{2011}wrs\u{2011}vxworks\u{2011}*`  | `randABytes` after checking entropy pool initialization with `randSecure`\n| Emscripten         | `*\u{2011}emscripten`     | [`getentropy`][13]\n| WASI 0.1           | `wasm32\u{2011}wasip1`    | [`random_get`]\n| WASI 0.2           | `wasm32\u{2011}wasip2`    | [`get-random-u64`]\n| SOLID              | `*-kmc-solid_*`    | `SOLID_RNG_SampleRandomBytes`\n| Nintendo 3DS       | `*-nintendo-3ds`   | [`getrandom`][18]\n| ESP-IDF            | `*\u{2011}espidf`         | [`esp_fill_random`] WARNING: see \"Early Boot\" section below\n| PS Vita            | `*-vita-*`         | [`getentropy`][19]\n| QNX Neutrino       | `*\u{2011}nto-qnx*`       | [`/dev/urandom`][14] (identical to `/dev/random`)\n| AIX                | `*-ibm-aix`        | [`/dev/urandom`][15]\n| Cygwin             | `*-cygwin`         | [`getrandom`][20] (based on [`RtlGenRandom`])\n\nPull Requests that add support for new targets to `getrandom` are always welcome.\n\n### Opt-in backends\n\n`getrandom` also provides optional (opt-in) backends, which allow users to customize the source\nof randomness based on their specific needs:\n\n| Backend name      | Target               | Target Triple            | Implementation\n| ----------------- | -------------------- | ------------------------ | --------------\n| `linux_getrandom` | Linux, Android       | `*\u{2011}linux\u{2011}*`              | [`getrandom`][1] system call (without `/dev/urandom` fallback). Bumps minimum supported Linux kernel version to 3.17 and Android API level to 23 (Marshmallow).\n| `linux_raw`       | Linux, Android       | `*\u{2011}linux\u{2011}*`              | Same as `linux_getrandom`, but uses raw `asm!`-based syscalls instead of `libc`.\n| `rdrand`          | x86, x86-64          | `x86_64-*`, `i686-*`     | [`RDRAND`] instruction\n| `rndr`            | AArch64              | `aarch64-*`              | [`RNDR`] register\n| `wasm_js`         | Web Browser, Node.js | `wasm32\u{2011}unknown\u{2011}unknown`, `wasm32v1-none` | [`Crypto.getRandomValues`]. Enabled by the `wasm_js` feature ([see below](#webassembly-support)).\n| `efi_rng`         | UEFI                 | `*-unknown\u{2011}uefi`         | [`EFI_RNG_PROTOCOL`] with `EFI_RNG_ALGORITHM_RAW` (requires `std` and Nightly compiler)\n| `windows_legacy`  | Windows              | `*-windows-*`            | [`RtlGenRandom`]\n| `custom`          | All targets          | `*`                      | User-provided custom implementation (see [custom backend])\n| `unsupported`     | All targets          | `*`                      | Always returns `Err(Error::UNSUPPORTED)` (see [unsupported backend])\n\nOpt-in backends can be enabled using the `getrandom_backend` configuration flag.\nThe flag can be set either by specifying the `rustflags` field in [`.cargo/config.toml`]:\n```toml\n# It\'s recommended to set the flag on a per-target basis:\n[target.wasm32-unknown-unknown]\nrustflags = [\'--cfg\', \'getrandom_backend=\"wasm_js\"\']\n```\n\nOr by using the `RUSTFLAGS` environment variable:\n\n```sh\nRUSTFLAGS=\'--cfg getrandom_backend=\"linux_getrandom\"\' cargo build\n```\n\nEnabling an opt-in backend will replace the backend used by default. Doing this for\nan incorrect target (e.g. using `linux_getrandom` while compiling for a Windows target)\nwill result in a compilation error. Be extremely careful while using opt-in backends,\nas incorrect configuration may result in vulnerable applications or applications\nthat always panic.\n\nNote that using an opt-in backend in a library (e.g. for tests or benchmarks)\nWILL NOT have any effect on its downstream users.\n\n[`.cargo/config.toml`]: https://doc.rust-lang.org/cargo/reference/config.html\n\n### Raw Linux syscall support\n\nCurrently the `linux_raw` backend supports only targets with stabilized `asm!` macro,\ni.e. `arm`, `aarch64`, `loongarch64`, `riscv32`, `riscv64`, `s390x`, `x86`, and `x86_64`.\n\nNote that the raw syscall backend may be slower than backends based on `libc::getrandom`,\ne.g. it does not implement vDSO optimizations and on `x86` it uses the infamously slow\n`int 0x80` instruction to perform syscall.\n\n### WebAssembly support\n\nThis crate fully supports the [WASI] and [Emscripten] targets. However,\nthe `wasm32-unknown-unknown` target (i.e. the target used by `wasm-pack`)\nis not automatically supported since, from the target name alone, we cannot deduce\nwhich JavaScript interface should be used (or if JavaScript is available at all).\n\nWe do not include support for this target in the default configuration because\nour JS backend (supporting web browsers, web workers and Node.js v19 or later)\nrequires [`wasm-bindgen`], **bloating `Cargo.lock`** and\n**potentially breaking builds** on non-web WASM platforms.\n\nTo enable `getrandom`\'s functionality on `wasm32-unknown-unknown` using the Web\nCrypto methods [described above][opt-in] via [`wasm-bindgen`], enable the\n`wasm_js` feature flag. Setting `RUSTFLAGS=\'--cfg getrandom_backend=\"wasm_js\"\'`\nis allowed but is no longer required and does nothing (it was required in a\nprior version of this crate).\n\nWARNING: enabling the `wasm_js` feature will bloat `Cargo.lock` on all platforms\n(where [`wasm-bindgen`] is not an existing dependency) and is known to cause\nbuild issues on some non-web WASM platforms, even when a different backend is\nselected via `getrandom_backend`.\n\n### Custom backend\n\nIf this crate does not support your target out of the box or you have to use\na non-default entropy source, then you can provide a custom implementation.\nYou need to enable the custom backend as described in the\n[opt-in backends][opt-in] section.\n\nNext, you need to define an `extern` function with the following signature:\n\n```rust\nuse getrandom::Error;\n\n#[no_mangle]\nunsafe extern \"Rust\" fn __getrandom_v03_custom(\n    dest: *mut u8,\n    len: usize,\n) -> Result<(), Error> {\n    todo!()\n}\n```\n\nThis function should, ideally, be defined in the root crate of your project,\ne.g. in your `main.rs`. This function MUST be defined only once for your\nproject, i.e. upstream library crates SHOULD NOT define it outside of\ntests and benchmarks. Improper configuration of this backend may result\nin linking errors.\n\nThe function accepts a pointer to a buffer that should be filled with random\ndata and its length in bytes. Note that the buffer MAY be uninitialized.\nOn success, the function should return `Ok(())` and fully fill the input buffer;\notherwise, it should return an error value.\n\nWhile wrapping functions which work with byte slices you should fully initialize\nthe buffer before passing it to the function:\n```rust\nuse getrandom::Error;\n\nfn my_entropy_source(buf: &mut [u8]) -> Result<(), getrandom::Error> {\n    // ...\n    Ok(())\n}\n\n#[no_mangle]\nunsafe extern \"Rust\" fn __getrandom_v03_custom(\n    dest: *mut u8,\n    len: usize,\n) -> Result<(), Error> {\n    let buf = unsafe {\n        // fill the buffer with zeros\n        core::ptr::write_bytes(dest, 0, len);\n        // create mutable byte slice\n        core::slice::from_raw_parts_mut(dest, len)\n    };\n    my_entropy_source(buf)\n}\n```\n\n### Unsupported backend\n\nIn some rare scenarios, you might be compiling this crate for an unsupported\ntarget (e.g. `wasm32-unknown-unknown`), but this crate\'s functionality\nis not actually used by your code. If you are confident that `getrandom` is\nnot used in your project, but it gets pulled nevertheless by one of your\ndependencies, then you can enable the `unsupported` backend, which always\nreturns `Err(Error::UNSUPPORTED)`.\n\n### Platform Support\n\nThis crate generally supports the same operating system and platform versions\nthat the Rust standard library does. Additional targets may be supported using\nthe opt-in custom backend.\n\nThis means that as Rust drops support for old versions of operating systems\n(such as old Linux kernel versions, Android API levels, etc.) in stable releases,\n`getrandom` may create new patch releases that remove support for\noutdated platform versions.\n\n### `/dev/urandom` fallback on Linux and Android\n\nOn Linux targets, the `/dev/urandom` fallback is present only if either `target_env`\nis `musl`, or `target_arch` is one of the following: `aarch64`, `arm`, `powerpc`,\n`powerpc64`, `s390x`, `x86`, `x86_64`. Other supported targets [require][platform-support]\nkernel versions that support the `getrandom` system call, so the fallback is not needed.\n\nOn Android targets the fallback is present only for the following `target_arch`es:\n`aarch64`, `arm`, `x86`, `x86_64`. Other `target_arch`es (e.g. RISC-V) require\nsufficiently high API levels.\n\nThe fallback can be disabled by enabling the `linux_getrandom` opt-in backend.\nNote that doing so will bump minimum supported Linux kernel version to 3.17\nand Android API level to 23 (Marshmallow).\n\n### Early boot\n\nSometimes, early in the boot process, the OS has not collected enough\nentropy to securely seed its RNG. This is especially common on virtual\nmachines, where standard \"random\" events are hard to come by.\n\nSome operating system interfaces always block until the RNG is securely\nseeded. This can take anywhere from a few seconds to more than a minute.\nA few (Linux, NetBSD and Solaris) offer a choice between blocking and\ngetting an error; in these cases, we always choose to block.\n\nOn Linux (when the `getrandom` system call is not available), reading from\n`/dev/urandom` never blocks, even when the OS hasn\'t collected enough\nentropy yet. To avoid returning low-entropy bytes, we first poll\n`/dev/random` and only switch to `/dev/urandom` once this has succeeded.\n\nOn OpenBSD, this kind of entropy accounting isn\'t available, and on\nNetBSD, blocking on it is discouraged. On these platforms, nonblocking\ninterfaces are used, even when reliable entropy may not be available.\nOn the platforms where it is used, the reliability of entropy accounting\nitself isn\'t free from controversy. This library provides randomness\nsourced according to the platform\'s best practices, but each platform has\nits own limits on the grade of randomness it can promise in environments\nwith few sources of entropy.\n\nOn ESP-IDF, if `esp_fill_random` is used before enabling WiFi, BT, or the\nvoltage noise entropy source (SAR ADC), the Hardware RNG will only be seeded\nvia RC_FAST_CLK. This can occur during early boot unless\n`bootloader_random_enable()` is called. For more information see the\n[ESP-IDF RNG Docs][esp-idf-rng] or the\n[RNG section of the ESP32 Technical Reference Manual][esp-trng-docs].\n\n## Error handling\n\nWe always prioritize failure over returning known insecure \"random\" bytes.\nGenerally, on supported platforms, failure is highly unlikely, though not\nimpossible. If an error does occur, it is likely that it will occur\non every call to `getrandom`. Therefore, after the first successful call,\none can be reasonably confident that no errors will occur.\n\n## Panic handling\n\nWe strive to eliminate all potential panics from our backend implementations.\nIn other words, when compiled with optimizations enabled, the generated\nbinary code for `getrandom` functions should not contain any panic branches.\nEven if the platform misbehaves and returns an unexpected result,\nour code should correctly handle it and return an error, e.g.\n[`Error::UNEXPECTED`].\n\n## Sanitizer support\n\nIf your code uses [`fill_uninit`] and you enable\n[MemorySanitizer](https://doc.rust-lang.org/beta/unstable-book/compiler-flags/sanitizer.html#memorysanitizer)\n(i.e. `-Zsanitizer=memory`), we will automatically handle unpoisoning\nof the destination buffer filled by `fill_uninit`.\n\nYou can run sanitizer tests for your crate dependent on `getrandom` like this:\n```sh\nRUSTFLAGS=\"-Zsanitizer=memory\" cargo test -Zbuild-std --target=x86_64-unknown-linux-gnu\n```\n\n## Minimum Supported Rust Version\n\nThis crate requires Rust 1.63 or later.\n\n## License\n\nThe `getrandom` library is distributed under either of\n\n * [Apache License, Version 2.0][LICENSE-APACHE]\n * [MIT license][LICENSE-MIT]\n\nat your option.\n\n### Contribution\n\nUnless you explicitly state otherwise, any contribution intentionally submitted\nfor inclusion in the work by you, as defined in the Apache-2.0 license, shall be\ndual licensed as above, without any additional terms or conditions.\n\n[//]: # (badges)\n\n[GitHub Actions]: https://github.com/rust-random/getrandom/actions?query=branch:master\n[Build Status]: https://github.com/rust-random/getrandom/actions/workflows/tests.yml/badge.svg?branch=master\n[crates.io]: https://crates.io/crates/getrandom\n[Crate]: https://img.shields.io/crates/v/getrandom\n[docs.rs]: https://docs.rs/getrandom\n[Documentation]: https://docs.rs/getrandom/badge.svg\n[deps.rs]: https://deps.rs/repo/github/rust-random/getrandom\n[Dependency Status]: https://deps.rs/repo/github/rust-random/getrandom/status.svg\n[Downloads]: https://img.shields.io/crates/d/getrandom\n[License]: https://img.shields.io/crates/l/getrandom\n\n[//]: # (supported targets)\n\n[1]: https://manned.org/getrandom.2\n[2]: https://manned.org/urandom.4\n[3]: https://www.unix.com/man-page/mojave/2/getentropy/\n[4]: https://www.unix.com/man-page/mojave/4/urandom/\n[5]: https://www.freebsd.org/cgi/man.cgi?query=getrandom&manpath=FreeBSD+12.0-stable\n[7]: https://man.openbsd.org/getentropy.2\n[8]: https://man.netbsd.org/sysctl.7\n[9]: https://leaf.dragonflybsd.org/cgi/web-man?command=getrandom\n[11]: https://docs.oracle.com/cd/E88353_01/html/E37841/getrandom-2.html\n[12]: https://illumos.org/man/2/getrandom\n[13]: https://github.com/emscripten-core/emscripten/pull/12240\n[14]: https://www.qnx.com/developers/docs/7.1/index.html#com.qnx.doc.neutrino.utilities/topic/r/random.html\n[15]: https://www.ibm.com/docs/en/aix/7.3?topic=files-random-urandom-devices\n[16]: https://man.netbsd.org/getrandom.2\n[17]: https://www.gnu.org/software/libc/manual/html_mono/libc.html#index-getrandom\n[18]: https://github.com/rust3ds/shim-3ds/commit/b01d2568836dea2a65d05d662f8e5f805c64389d\n[19]: https://github.com/vitasdk/newlib/blob/2d869fe47aaf02b8e52d04e9a2b79d5b210fd016/newlib/libc/sys/vita/getentropy.c\n[20]: https://github.com/cygwin/cygwin/blob/main/winsup/cygwin/libc/getentropy.cc\n\n[`ProcessPrng`]: https://learn.microsoft.com/en-us/windows/win32/seccng/processprng\n[`RtlGenRandom`]: https://learn.microsoft.com/en-us/windows/win32/api/ntsecapi/nf-ntsecapi-rtlgenrandom\n[`Crypto.getRandomValues`]: https://www.w3.org/TR/WebCryptoAPI/#Crypto-method-getRandomValues\n[`RDRAND`]: https://software.intel.com/en-us/articles/intel-digital-random-number-generator-drng-software-implementation-guide\n[`RNDR`]: https://developer.arm.com/documentation/ddi0601/2024-06/AArch64-Registers/RNDR--Random-Number\n[`CCRandomGenerateBytes`]: https://opensource.apple.com/source/CommonCrypto/CommonCrypto-60074/include/CommonRandom.h.auto.html\n[`cprng_draw`]: https://fuchsia.dev/fuchsia-src/zircon/syscalls/cprng_draw\n[`esp_fill_random`]: https://docs.espressif.com/projects/esp-idf/en/stable/esp32/api-reference/system/random.html#functions\n[esp-idf-rng]: https://docs.espressif.com/projects/esp-idf/en/stable/esp32/api-reference/system/random.html\n[esp-trng-docs]: https://www.espressif.com/sites/default/files/documentation/esp32_technical_reference_manual_en.pdf#rng\n[`EFI_RNG_PROTOCOL`]: https://uefi.org/specs/UEFI/2.10/37_Secure_Technologies.html#efi-rng-protocol\n[`random_get`]: https://github.com/WebAssembly/WASI/blob/snapshot-01/phases/snapshot/docs.md#-random_getbuf-pointeru8-buf_len-size---errno\n[`get-random-u64`]: https://github.com/WebAssembly/WASI/blob/v0.2.1/wasip2/random/random.wit#L23-L28\n[configuration flags]: #configuration-flags\n[custom backend]: #custom-backend\n[unsupported backend]: #unsupported-backend\n[`wasm-bindgen`]: https://github.com/rustwasm/wasm-bindgen\n[`module`]: https://rustwasm.github.io/wasm-bindgen/reference/attributes/on-js-imports/module.html\n[`sys_read_entropy`]: https://github.com/hermit-os/kernel/blob/315f58ff5efc81d9bf0618af85a59963ff55f8b1/src/syscalls/entropy.rs#L47-L55\n[platform-support]: https://doc.rust-lang.org/stable/rustc/platform-support.html\n[WASI]: https://github.com/WebAssembly/WASI\n[Emscripten]: https://emscripten.org\n[opt-in]: #opt-in-backends\n\n[//]: # (licenses)\n\n[LICENSE-APACHE]: https://github.com/rust-random/getrandom/blob/master/LICENSE-APACHE\n[LICENSE-MIT]: https://github.com/rust-random/getrandom/blob/master/LICENSE-MIT\n\n[`Error::UNEXPECTED`]: https://docs.rs/getrandom/latest/getrandom/struct.Error.html#associatedconstant.UNEXPECTED\n[`fill_uninit`]: https://docs.rs/getrandom/latest/getrandom/fn.fill_uninit.html\n���# getrandom: system's random number generator

[![Build Status]][GitHub Actions]
[![Crate]][crates.io]
[![Documentation]][docs.rs]
[![Dependency Status]][deps.rs]
[![Downloads]][crates.io]
[![License]][LICENSE-MIT]

`getrandom` is a Rust library for retrieving random data from (operating) system sources.

It is assumed that the system always provides high-quality, cryptographically secure random
data, ideally backed by hardware entropy sources. This crate derives its name from
the Linux `getrandom` syscall but is cross-platform, roughly supporting the same set
of platforms as Rust's `std` library.

This is a low-level API. Most users should prefer using a higher-level random-number
library like [`rand`].

[`rand`]: https://crates.io/crates/rand

## Usage

Add the `getrandom` dependency to your `Cargo.toml` file:

```toml
[dependencies]
getrandom = "0.3"
```

Then invoke the `fill` function on a byte buffer to fill it with random data:

```rust
fn get_random_u128() -> Result<u128, getrandom::Error> {
    let mut buf = [0u8; 16];
    getrandom::fill(&mut buf)?;
    Ok(u128::from_ne_bytes(buf))
}
```

## Supported targets

| Target             | Target Triple      | Implementation
| ------------------ | ------------------ | --------------
| Linux, Android     | `*‑linux‑*`        | [`getrandom`][1] system call if available, otherwise [`/dev/urandom`][2] after successfully polling `/dev/random`
| Windows 10+        | `*‑windows‑*`      | [`ProcessPrng`] on Rust 1.78+, [`RtlGenRandom`] otherwise
| Windows 7, 8       | `*-win7‑windows‑*` | [`RtlGenRandom`]
| macOS              | `*‑apple‑darwin`   | [`getentropy`][3]
| iOS, tvOS, watchOS | `*‑apple‑{ios,tvos,watchos}` | [`CCRandomGenerateBytes`]
| FreeBSD            | `*‑freebsd`        | [`getrandom`][5]
| OpenBSD            | `*‑openbsd`        | [`getentropy`][7]
| NetBSD             | `*‑netbsd`         | [`getrandom`][16] if available, otherwise [`kern.arandom`][8]
| Dragonfly BSD      | `*‑dragonfly`      | [`getrandom`][9]
| Solaris            | `*‑solaris`        | [`getrandom`][11] with `GRND_RANDOM`
| illumos            | `*‑illumos`        | [`getrandom`][12]
| Fuchsia OS         | `*‑fuchsia`        | [`cprng_draw`]
| Redox              | `*‑redox`          | `/dev/urandom`
| Haiku              | `*‑haiku`          | `/dev/urandom` (identical to `/dev/random`)
| Hermit             | `*-hermit`         | [`sys_read_entropy`]
| Hurd               | `*-hurd-*`         | [`getrandom`][17]
| SGX                | `x86_64‑*‑sgx`     | [`RDRAND`]
| VxWorks            | `*‑wrs‑vxworks‑*`  | `randABytes` after checking entropy pool initialization with `randSecure`
| Emscripten         | `*‑emscripten`     | [`getentropy`][13]
| WASI 0.1           | `wasm32‑wasip1`    | [`random_get`]
| WASI 0.2           | `wasm32‑wasip2`    | [`get-random-u64`]
| SOLID              | `*-kmc-solid_*`    | `SOLID_RNG_SampleRandomBytes`
| Nintendo 3DS       | `*-nintendo-3ds`   | [`getrandom`][18]
| ESP-IDF            | `*‑espidf`         | [`esp_fill_random`] WARNING: see "Early Boot" section below
| PS Vita            | `*-vita-*`         | [`getentropy`][19]
| QNX Neutrino       | `*‑nto-qnx*`       | [`/dev/urandom`][14] (identical to `/dev/random`)
| AIX                | `*-ibm-aix`        | [`/dev/urandom`][15]
| Cygwin             | `*-cygwin`         | [`getrandom`][20] (based on [`RtlGenRandom`])

Pull Requests that add support for new targets to `getrandom` are always welcome.

### Opt-in backends

`getrandom` also provides optional (opt-in) backends, which allow users to customize the source
of randomness based on their specific needs:

| Backend name      | Target               | Target Triple            | Implementation
| ----------------- | -------------------- | ------------------------ | --------------
| `linux_getrandom` | Linux, Android       | `*‑linux‑*`              | [`getrandom`][1] system call (without `/dev/urandom` fallback). Bumps minimum supported Linux kernel version to 3.17 and Android API level to 23 (Marshmallow).
| `linux_raw`       | Linux, Android       | `*‑linux‑*`              | Same as `linux_getrandom`, but uses raw `asm!`-based syscalls instead of `libc`.
| `rdrand`          | x86, x86-64          | `x86_64-*`, `i686-*`     | [`RDRAND`] instruction
| `rndr`            | AArch64              | `aarch64-*`              | [`RNDR`] register
| `wasm_js`         | Web Browser, Node.js | `wasm32‑unknown‑unknown`, `wasm32v1-none` | [`Crypto.getRandomValues`]. Enabled by the `wasm_js` feature ([see below](#webassembly-support)).
| `efi_rng`         | UEFI                 | `*-unknown‑uefi`         | [`EFI_RNG_PROTOCOL`] with `EFI_RNG_ALGORITHM_RAW` (requires `std` and Nightly compiler)
| `windows_legacy`  | Windows              | `*-windows-*`            | [`RtlGenRandom`]
| `custom`          | All targets          | `*`                      | User-provided custom implementation (see [custom backend])
| `unsupported`     | All targets          | `*`                      | Always returns `Err(Error::UNSUPPORTED)` (see [unsupported backend])

Opt-in backends can be enabled using the `getrandom_backend` configuration flag.
The flag can be set either by specifying the `rustflags` field in [`.cargo/config.toml`]:
```toml
# It's recommended to set the flag on a per-target basis:
[target.wasm32-unknown-unknown]
rustflags = ['--cfg', 'getrandom_backend="wasm_js"']
```

Or by using the `RUSTFLAGS` environment variable:

```sh
RUSTFLAGS='--cfg getrandom_backend="linux_getrandom"' cargo build
```

Enabling an opt-in backend will replace the backend used by default. Doing this for
an incorrect target (e.g. using `linux_getrandom` while compiling for a Windows target)
will result in a compilation error. Be extremely careful while using opt-in backends,
as incorrect configuration may result in vulnerable applications or applications
that always panic.

Note that using an opt-in backend in a library (e.g. for tests or benchmarks)
WILL NOT have any effect on its downstream users.

[`.cargo/config.toml`]: https://doc.rust-lang.org/cargo/reference/config.html

### Raw Linux syscall support

Currently the `linux_raw` backend supports only targets with stabilized `asm!` macro,
i.e. `arm`, `aarch64`, `loongarch64`, `riscv32`, `riscv64`, `s390x`, `x86`, and `x86_64`.

Note that the raw syscall backend may be slower than backends based on `libc::getrandom`,
e.g. it does not implement vDSO optimizations and on `x86` it uses the infamously slow
`int 0x80` instruction to perform syscall.

### WebAssembly support

This crate fully supports the [WASI] and [Emscripten] targets. However,
the `wasm32-unknown-unknown` target (i.e. the target used by `wasm-pack`)
is not automatically supported since, from the target name alone, we cannot deduce
which JavaScript interface should be used (or if JavaScript is available at all).

We do not include support for this target in the default configuration because
our JS backend (supporting web browsers, web workers and Node.js v19 or later)
requires [`wasm-bindgen`], **bloating `Cargo.lock`** and
**potentially breaking builds** on non-web WASM platforms.

To enable `getrandom`'s functionality on `wasm32-unknown-unknown` using the Web
Crypto methods [described above][opt-in] via [`wasm-bindgen`], enable the
`wasm_js` feature flag. Setting `RUSTFLAGS='--cfg getrandom_backend="wasm_js"'`
is allowed but is no longer required and does nothing (it was required in a
prior version of this crate).

WARNING: enabling the `wasm_js` feature will bloat `Cargo.lock` on all platforms
(where [`wasm-bindgen`] is not an existing dependency) and is known to cause
build issues on some non-web WASM platforms, even when a different backend is
selected via `getrandom_backend`.

### Custom backend

If this crate does not support your target out of the box or you have to use
a non-default entropy source, then you can provide a custom implementation.
You need to enable the custom backend as described in the
[opt-in backends][opt-in] section.

Next, you need to define an `extern` function with the following signature:

```rust
use getrandom::Error;

#[no_mangle]
unsafe extern "Rust" fn __getrandom_v03_custom(
    dest: *mut u8,
    len: usize,
) -> Result<(), Error> {
    todo!()
}
```

This function should, ideally, be defined in the root crate of your project,
e.g. in your `main.rs`. This function MUST be defined only once for your
project, i.e. upstream library crates SHOULD NOT define it outside of
tests and benchmarks. Improper configuration of this backend may result
in linking errors.

The function accepts a pointer to a buffer that should be filled with random
data and its length in bytes. Note that the buffer MAY be uninitialized.
On success, the function should return `Ok(())` and fully fill the input buffer;
otherwise, it should return an error value.

While wrapping functions which work with byte slices you should fully initialize
the buffer before passing it to the function:
```rust
use getrandom::Error;

fn my_entropy_source(buf: &mut [u8]) -> Result<(), getrandom::Error> {
    // ...
    Ok(())
}

#[no_mangle]
unsafe extern "Rust" fn __getrandom_v03_custom(
    dest: *mut u8,
    len: usize,
) -> Result<(), Error> {
    let buf = unsafe {
        // fill the buffer with zeros
        core::ptr::write_bytes(dest, 0, len);
        // create mutable byte slice
        core::slice::from_raw_parts_mut(dest, len)
    };
    my_entropy_source(buf)
}
```

### Unsupported backend

In some rare scenarios, you might be compiling this crate for an unsupported
target (e.g. `wasm32-unknown-unknown`), but this crate's functionality
is not actually used by your code. If you are confident that `getrandom` is
not used in your project, but it gets pulled nevertheless by one of your
dependencies, then you can enable the `unsupported` backend, which always
returns `Err(Error::UNSUPPORTED)`.

### Platform Support

This crate generally supports the same operating system and platform versions
that the Rust standard library does. Additional targets may be supported using
the opt-in custom backend.

This means that as Rust drops support for old versions of operating systems
(such as old Linux kernel versions, Android API levels, etc.) in stable releases,
`getrandom` may create new patch releases that remove support for
outdated platform versions.

### `/dev/urandom` fallback on Linux and Android

On Linux targets, the `/dev/urandom` fallback is present only if either `target_env`
is `musl`, or `target_arch` is one of the following: `aarch64`, `arm`, `powerpc`,
`powerpc64`, `s390x`, `x86`, `x86_64`. Other supported targets [require][platform-support]
kernel versions that support the `getrandom` system call, so the fallback is not needed.

On Android targets the fallback is present only for the following `target_arch`es:
`aarch64`, `arm`, `x86`, `x86_64`. Other `target_arch`es (e.g. RISC-V) require
sufficiently high API levels.

The fallback can be disabled by enabling the `linux_getrandom` opt-in backend.
Note that doing so will bump minimum supported Linux kernel version to 3.17
and Android API level to 23 (Marshmallow).

### Early boot

Sometimes, early in the boot process, the OS has not collected enough
entropy to securely seed its RNG. This is especially common on virtual
machines, where standard "random" events are hard to come by.

Some operating system interfaces always block until the RNG is securely
seeded. This can take anywhere from a few seconds to more than a minute.
A few (Linux, NetBSD and Solaris) offer a choice between blocking and
getting an error; in these cases, we always choose to block.

On Linux (when the `getrandom` system call is not available), reading from
`/dev/urandom` never blocks, even when the OS hasn't collected enough
entropy yet. To avoid returning low-entropy bytes, we first poll
`/dev/random` and only switch to `/dev/urandom` once this has succeeded.

On OpenBSD, this kind of entropy accounting isn't available, and on
NetBSD, blocking on it is discouraged. On these platforms, nonblocking
interfaces are used, even when reliable entropy may not be available.
On the platforms where it is used, the reliability of entropy accounting
itself isn't free from controversy. This library provides randomness
sourced according to the platform's best practices, but each platform has
its own limits on the grade of randomness it can promise in environments
with few sources of entropy.

On ESP-IDF, if `esp_fill_random` is used before enabling WiFi, BT, or the
voltage noise entropy source (SAR ADC), the Hardware RNG will only be seeded
via RC_FAST_CLK. This can occur during early boot unless
`bootloader_random_enable()` is called. For more information see the
[ESP-IDF RNG Docs][esp-idf-rng] or the
[RNG section of the ESP32 Technical Reference Manual][esp-trng-docs].

## Error handling

We always prioritize failure over returning known insecure "random" bytes.
Generally, on supported platforms, failure is highly unlikely, though not
impossible. If an error does occur, it is likely that it will occur
on every call to `getrandom`. Therefore, after the first successful call,
one can be reasonably confident that no errors will occur.

## Panic handling

We strive to eliminate all potential panics from our backend implementations.
In other words, when compiled with optimizations enabled, the generated
binary code for `getrandom` functions should not contain any panic branches.
Even if the platform misbehaves and returns an unexpected result,
our code should correctly handle it and return an error, e.g.
[`Error::UNEXPECTED`].

## Sanitizer support

If your code uses [`fill_uninit`] and you enable
[MemorySanitizer](https://doc.rust-lang.org/beta/unstable-book/compiler-flags/sanitizer.html#memorysanitizer)
(i.e. `-Zsanitizer=memory`), we will automatically handle unpoisoning
of the destination buffer filled by `fill_uninit`.

You can run sanitizer tests for your crate dependent on `getrandom` like this:
```sh
RUSTFLAGS="-Zsanitizer=memory" cargo test -Zbuild-std --target=x86_64-unknown-linux-gnu
```

## Minimum Supported Rust Version

This crate requires Rust 1.63 or later.

## License

The `getrandom` library is distributed under either of

 * [Apache License, Version 2.0][LICENSE-APACHE]
 * [MIT license][LICENSE-MIT]

at your option.

### Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted
for inclusion in the work by you, as defined in the Apache-2.0 license, shall be
dual licensed as above, without any additional terms or conditions.

[//]: # (badges)

[GitHub Actions]: https://github.com/rust-random/getrandom/actions?query=branch:master
[Build Status]: https://github.com/rust-random/getrandom/actions/workflows/tests.yml/badge.svg?branch=master
[crates.io]: https://crates.io/crates/getrandom
[Crate]: https://img.shields.io/crates/v/getrandom
[docs.rs]: https://docs.rs/getrandom
[Documentation]: https://docs.rs/getrandom/badge.svg
[deps.rs]: https://deps.rs/repo/github/rust-random/getrandom
[Dependency Status]: https://deps.rs/repo/github/rust-random/getrandom/status.svg
[Downloads]: https://img.shields.io/crates/d/getrandom
[License]: https://img.shields.io/crates/l/getrandom

[//]: # (supported targets)

[1]: https://manned.org/getrandom.2
[2]: https://manned.org/urandom.4
[3]: https://www.unix.com/man-page/mojave/2/getentropy/
[4]: https://www.unix.com/man-page/mojave/4/urandom/
[5]: https://www.freebsd.org/cgi/man.cgi?query=getrandom&manpath=FreeBSD+12.0-stable
[7]: https://man.openbsd.org/getentropy.2
[8]: https://man.netbsd.org/sysctl.7
[9]: https://leaf.dragonflybsd.org/cgi/web-man?command=getrandom
[11]: https://docs.oracle.com/cd/E88353_01/html/E37841/getrandom-2.html
[12]: https://illumos.org/man/2/getrandom
[13]: https://github.com/emscripten-core/emscripten/pull/12240
[14]: https://www.qnx.com/developers/docs/7.1/index.html#com.qnx.doc.neutrino.utilities/topic/r/random.html
[15]: https://www.ibm.com/docs/en/aix/7.3?topic=files-random-urandom-devices
[16]: https://man.netbsd.org/getrandom.2
[17]: https://www.gnu.org/software/libc/manual/html_mono/libc.html#index-getrandom
[18]: https://github.com/rust3ds/shim-3ds/commit/b01d2568836dea2a65d05d662f8e5f805c64389d
[19]: https://github.com/vitasdk/newlib/blob/2d869fe47aaf02b8e52d04e9a2b79d5b210fd016/newlib/libc/sys/vita/getentropy.c
[20]: https://github.com/cygwin/cygwin/blob/main/winsup/cygwin/libc/getentropy.cc

[`ProcessPrng`]: https://learn.microsoft.com/en-us/windows/win32/seccng/processprng
[`RtlGenRandom`]: https://learn.microsoft.com/en-us/windows/win32/api/ntsecapi/nf-ntsecapi-rtlgenrandom
[`Crypto.getRandomValues`]: https://www.w3.org/TR/WebCryptoAPI/#Crypto-method-getRandomValues
[`RDRAND`]: https://software.intel.com/en-us/articles/intel-digital-random-number-generator-drng-software-implementation-guide
[`RNDR`]: https://developer.arm.com/documentation/ddi0601/2024-06/AArch64-Registers/RNDR--Random-Number
[`CCRandomGenerateBytes`]: https://opensource.apple.com/source/CommonCrypto/CommonCrypto-60074/include/CommonRandom.h.auto.html
[`cprng_draw`]: https://fuchsia.dev/fuchsia-src/zircon/syscalls/cprng_draw
[`esp_fill_random`]: https://docs.espressif.com/projects/esp-idf/en/stable/esp32/api-reference/system/random.html#functions
[esp-idf-rng]: https://docs.espressif.com/projects/esp-idf/en/stable/esp32/api-reference/system/random.html
[esp-trng-docs]: https://www.espressif.com/sites/default/files/documentation/esp32_technical_reference_manual_en.pdf#rng
[`EFI_RNG_PROTOCOL`]: https://uefi.org/specs/UEFI/2.10/37_Secure_Technologies.html#efi-rng-protocol
[`random_get`]: https://github.com/WebAssembly/WASI/blob/snapshot-01/phases/snapshot/docs.md#-random_getbuf-pointeru8-buf_len-size---errno
[`get-random-u64`]: https://github.com/WebAssembly/WASI/blob/v0.2.1/wasip2/random/random.wit#L23-L28
[configuration flags]: #configuration-flags
[custom backend]: #custom-backend
[unsupported backend]: #unsupported-backend
[`wasm-bindgen`]: https://github.com/rustwasm/wasm-bindgen
[`module`]: https://rustwasm.github.io/wasm-bindgen/reference/attributes/on-js-imports/module.html
[`sys_read_entropy`]: https://github.com/hermit-os/kernel/blob/315f58ff5efc81d9bf0618af85a59963ff55f8b1/src/syscalls/entropy.rs#L47-L55
[platform-support]: https://doc.rust-lang.org/stable/rustc/platform-support.html
[WASI]: https://github.com/WebAssembly/WASI
[Emscripten]: https://emscripten.org
[opt-in]: #opt-in-backends

[//]: # (licenses)

[LICENSE-APACHE]: https://github.com/rust-random/getrandom/blob/master/LICENSE-APACHE
[LICENSE-MIT]: https://github.com/rust-random/getrandom/blob/master/LICENSE-MIT

[`Error::UNEXPECTED`]: https://docs.rs/getrandom/latest/getrandom/struct.Error.html#associatedconstant.UNEXPECTED
[`fill_uninit`]: https://docs.rs/getrandom/latest/getrandom/fn.fill_uninit.html
������&,4567�Fa_Ua�ga���{a}3FaFaFa��Ua��gad�D�8Zt�L�)xj�L�*xk�T�rxL�,�}~{|�%�5�[�#L/T��

���96 This target/platform is not supported by `getrandom`.�\�		���
#��@= The platform-specific `errno` returned a non-positive value.���
		�ܧ��
LI Encountered an unexpected situation which should not happen in practice.�T�		��� t�		��d�		���;����		
�w$���/��B? Extract the raw OS error code (if this error came from the OS)�����MJ This method is identical to [`std::io::Error::raw_os_error()`][1], except���KH that it works in `no_std` contexts. On most targets this method returns���OL `Option<i32>`, but some platforms (e.g. UEFI) may use a different primitive���QN type like `usize`. Consult with the [`RawOsError`] docs for more information.�����MJ If this method returns `None`, the error value can still be formatted via���! the `Display` implementation.�����OL [1]: https://doc.rust-lang.org/std/io/struct.Error.html#method.raw_os_error���IF [`RawOsError`]: https://doc.rust-lang.org/std/io/type.RawOsError.html�d���.		
;;��((��(MJ Creates a new instance of an `Error` from a particular custom error code.�T�(�n�		
�{s=��+1d�+�n�		�m�{�@��-/l�-�������������������;t���	�.	
$�.��;��_��<8�<�������^�^��^��[�^�@�[����e�S����������������������q�aX�ÅÅą��:�����<
$�<��<��@��_��@8�@�������^�^��^��[�^�@�[����e�S�����@
$�@��@D�$� !#%')*+�, }3�\7���D��,I�adK�+$�2@/1!#��P����ʆ��������
��%C��I�������F�
 �,���;|�����ʆ�""����
!��,���
N��
����ʆ�$$�
���

#���C��/d������&&�����
%���wD��
-d�
�����((�
���

'����
��(L�ژ����(L�Ϫ����'D��O
+����|��
,-�,},.3io�.�,/�9d-<)�3�1�1�X$[��00
1�A`�� ���{a��1��SP Fill `dest` with random bytes from the system's preferred random number source.��	���	NK This function returns an error on any failure, including partial reads. We���	NK make no guarantees regarding the contents of `dest` on error. If `dest` is���
JG empty, `getrandom` immediately returns success, making no calls to the���  underlying operating system.�����OL Blocking is possible, at least during early boot; see module documentation.�����MJ In general, `getrandom` will be fast enough for interactive usage, though���JG significantly slower than a user-space CSPRNG; for the latter consider���
IF [`rand::thread_rng`](https://docs.rs/rand/*/rand/fn.thread_rng.html).��
�t�
 # Examples���<� ```���1. # fn main() -> Result<(), getrandom::Error> {��� let mut buf = [0u8; 32];��� getrandom::fill(&mut buf)?;�t� # Ok(()) }�<���$����F��
4�V9[��L��GD Fill potentially uninitialized buffer `dest` with random bytes from���DA the system's preferred random number source and return a mutable��� reference to those bytes.�����JG On successful completion this function is guaranteed to return a slice���FC which points to the same memory as `dest` and has the same length.���HE In other words, it's safe to assume that `dest` is initialized after���$! this function has returned `Ok`.�����JG No part of `dest` will ever be de-initialized at any point, regardless�Ļ of what is returned.���t�����l�
 ```ignore���>; # // We ignore this test since `uninit_array` is unstable.���*' #![feature(maybe_uninit_uninit_array)]���1����A> let mut buf = core::mem::MaybeUninit::uninit_array::<1024>();���;8 let buf: &mut [u8] = getrandom::fill_uninit(&mut buf)?;�t���<���\������������������������q�aX��F��
5�V�^��"��FC Get random `u32` from the system's preferred random number source.���t�����<�����1����%" let rng_seed = getrandom::u32()?;�t���<����ژ
6��"��FC Get random `u64` from the system's preferred random number source.���t�����<�����1����%" let rng_seed = getrandom::u64()?;�t���<����Ϫ
7d�"	D�"	@GHIJKMNOP�,B}893�4^�08;�\o��8<XL���8>�D���8?d;`�MY\YU�jH:<*,İL�CDz�,}@A3�\!��@Berrno_location�t��*@ydH�9��
&l������t�������EE������0�������+������l�
D��@��@�Y[�D<closure_kind>�F<closure_signature>�F<upvars>�FFD�4��L�8�F��L�8���"|�8����8����X��v��X���|&k��B������DT������
K�V$�,�K��L��LçLLKL�O�O���;l�8���F��������������������q�aX���
M�$���/d�8Ϋ
N��*<�8Ϋ
OD�&$�&8WXY�l�&MPR�l�&CPS�,�&}PT93��'JPU�|�'IPV��&Leg��&[KM79&(��)$�*8�
W��.$�.8�
X��<9��<8�
Y��"	��"	lmnoqr�LPtZ\�D[8Z]�,q}Z^3�4��0Z`�L��Zb�\���Zc�<��Zd\L��YZf�D���Zg�L�@Zh�^)j�Z*k�H����dj��|x\��
����d����qs��e��#������\�Z�O��$l�Z�J��&d�Z�K���$�Z�J�Q��$�Z�
����G��Z������N�V$���D���������V�*,�r��s��sçssr�Pl�#	L�#	vw�\��tu���3D������
v�@f0��V��������
w�@�3�_�3ܳ#	��p��
$L�
@�
z|�T��������`��.+ A small and `no_std` compatible error type�����PM The [`Error::raw_os_error()`] will indicate if the error is from the OS, and���LI if so, which error code the OS gave the application. If such an error is���?< encountered, please consult with your system documentation.�����=: *If this crate's `"std"` Cargo feature is enabled*, then:���,) - [`getrandom::Error`][Error] implements���QN   [`std::error::Error`](https://doc.rust-lang.org/std/error/trait.Error.html)���WT - [`std::io::Error`](https://doc.rust-lang.org/std/io/struct.Error.html) implements���	XU   [`From<getrandom::Error>`](https://doc.rust-lang.org/std/convert/trait.From.html).�,����?���~���`1��}}
~��}}� G�N�p4p4O����p4p4�����H��
�,��4�4P�����4��4�4�4�48��4�4�4�����I��
���5�5Q��5�5Q�����5�5�������J��
�L���5�����<��<�
��A��A�=���n���������
������B��P�	���F�����	�RNDR�Crypto.getRandomValues�@https://github.com/rust-random/getrandom/blob/master/LICENSE-MIT�
Emscripten�wasm-bindgen�$https://man.openbsd.org/getentropy.2�Apache License, Version 2.0�MIT license�rand::thread_rng�.https://docs.rs/rand/*/rand/fn.thread_rng.html�rhttps://software.intel.com/en-us/articles/intel-digital-random-number-generator-drng-software-implementation-guide���	Downloads�����dhttps://opensource.apple.com/source/CommonCrypto/CommonCrypto-60074/include/CommonRandom.h.auto.html�������<https://www.gnu.org/software/libc/manual/html_mono/libc.html���Fhttps://www.ibm.com/docs/en/aix/7.3?topic=files-random-urandom-devices�����WASI�����MemorySanitizer���������Dependency Status�����2https://www.unix.com/man-page/mojave/2/getentropy/�����sys_read_entropy���qhttps://github.com/vitasdk/newlib/blob/2d869fe47aaf02b8e52d04e9a2b79d5b210fd016/newlib/libc/sys/vita/getentropy.c�����.cargo/config.toml�����chttps://www.espressif.com/sites/default/files/documentation/esp32_technical_reference_manual_en.pdf�����)https://img.shields.io/crates/l/getrandom���
Documentation�����RtlGenRandom���
getentropy���
cprng_draw�����esp_fill_random�����custom backend�����ESP-IDF RNG Docs��������#https://docs.rs/getrandom/badge.svg�����rand�Crate���	getrandom���ProcessPrng�������Ahttps://docs.oracle.com/cd/E88353_01/html/E37841/getrandom-2.html����5��Hhttps://github.com/WebAssembly/WASI/blob/v0.2.1/wasip2/random/random.wit�������EFI_RNG_PROTOCOL�������opt-in backends�����)https://img.shields.io/crates/v/getrandom������Build Status�������/dev/urandom�������https://man.netbsd.org/sysctl.7�����Lhttps://github.com/WebAssembly/WASI/blob/snapshot-01/phases/snapshot/docs.md�����#https://www.w3.org/TR/WebCryptoAPI/�����(https://github.com/rustwasm/wasm-bindgen�����/https://www.unix.com/man-page/mojave/4/urandom/���������https://crates.io/crates/rand�����"https://man.netbsd.org/getrandom.2�����8https://github.com/emscripten-core/emscripten/pull/12240���]https://developer.arm.com/documentation/ddi0601/2024-06/AArch64-Registers/RNDR--Random-Number�����https://emscripten.org�����Chttps://github.com/rust-random/getrandom/blob/master/LICENSE-APACHE�������License�����Ohttps://www.freebsd.org/cgi/man.cgi?query=getrandom&manpath=FreeBSD+12.0-stable�����RDRAND���Khttps://github.com/cygwin/cygwin/blob/main/winsup/cygwin/libc/getentropy.cc�����#https://github.com/WebAssembly/WASI�����Jhttps://doc.rust-lang.org/beta/unstable-book/compiler-flags/sanitizer.html�������1https://deps.rs/repo/github/rust-random/getrandom�����CCRandomGenerateBytes�����ihttps://github.com/hermit-os/kernel/blob/315f58ff5efc81d9bf0618af85a59963ff55f8b1/src/syscalls/entropy.rs���2https://www.qnx.com/developers/docs/7.1/index.html�����5https://doc.rust-lang.org/cargo/reference/config.html�����Error::UNEXPECTED�������
Vhttps://rustwasm.github.io/wasm-bindgen/reference/attributes/on-js-imports/module.html���https://docs.rs/getrandom�����Uhttps://learn.microsoft.com/en-us/windows/win32/api/ntsecapi/nf-ntsecapi-rtlgenrandom�����:https://fuchsia.dev/fuchsia-src/zircon/syscalls/cprng_draw�����
\https://docs.espressif.com/projects/esp-idf/en/stable/esp32/api-reference/system/random.html�������unsupported backend�����3RNG section of the ESP32 Technical Reference Manual�����)https://img.shields.io/crates/d/getrandom���
����"https://crates.io/crates/getrandom�����Bhttps://learn.microsoft.com/en-us/windows/win32/seccng/processprng�����#https://illumos.org/man/2/getrandom�����Shttps://github.com/rust3ds/shim-3ds/commit/b01d2568836dea2a65d05d662f8e5f805c64389d�����<https://uefi.org/specs/UEFI/2.10/37_Secure_Technologies.html�����<https://doc.rust-lang.org/stable/rustc/platform-support.html�����<https://deps.rs/repo/github/rust-random/getrandom/status.svg�����Dhttps://github.com/rust-random/getrandom/actions?query=branch:master�����https://manned.org/urandom.4�����;https://leaf.dragonflybsd.org/cgi/web-man?command=getrandom�����get-random-u64�����	see below�����described above�����\https://github.com/rust-random/getrandom/actions/workflows/tests.yml/badge.svg?branch=master����������https://manned.org/getrandom.2�����kern.arandom�����
random_get�������������������������}��������������������6�
std::error��Error::raw_os_error�getrandom::Error�std::error::Error��4https://doc.rust-lang.org/std/error/trait.Error.html�std::io::Error���5https://doc.rust-lang.org/std/convert/trait.From.html�std::io��std::io::Error::raw_os_error()�5https://doc.rust-lang.org/std/io/type.RawOsError.html���2https://doc.rust-lang.org/std/io/struct.Error.html�From<getrandom::Error>�Error::raw_os_error()�From<getrandom��{���������������������������������}����������������������������������H����������������������I�I�I�H�J�������H����������������������I�I�I�H�J��������
/dev/urandom
n��
getrandom
���������������_n��pbc�N
��O������6�)�[�"���k����d�6>�Oљlo�o�I��e��gl��nB�g��Z
r���3C��	?�$�DI}���
h��$tI�
��&{��[�.���?�w�u۳�k���$@�]))��l)6�'Ys*�t6��辙��Z�r��2�	�3��@��E����h�U�[>8�<��y3w3�gmv��HE{�����w/୎C�=eـƀMnMr�+��+�-��͠�
��BQ�&R��wf|]��ߟ�&��A���Le��H�_�?yRb'�:���.31�D���)��.͓gU�s\)�a2
�ă�����Qd���8vyP<砞Fe�-�m�h%���bV!��"H�;n=�8_C>4�4,
����gҡ�fg�,�P��;w��9��%."�ͮ�r��;�Cd%&1����/��ڿ��Q�C��ΐ����bb_�o�+t_���V���9a=�v'$؏~�n��n����3��Rr�a[�E�&���w��I̊���*� �����QD��$��[E���U]����'�l�2>�Z����o��A�vQ�&;�}���A�Xk�/��4+�?�5$�d�����
��d7�9��`{E�(c�� �T/#�8X��s��z� Pi+gK��U�-�e;�Ϥ{zj�^�u�p 7�������)�gp�!�Cx��?7��5~@b0sz�
���RE��d1�A�.I��K��VWG�2N��Vd���.R3<�����g�bf��ȶdZuStP�#��2�b��F���J�:�•0���%0�͗�	��f@���	W_D�/к[Z�u����Ό��NP�]�ՠ_��
��"��-ֱ]��P�>�*��I��7��8�Q���X��$�;�����(�,@��AC���N�OF��̟�>�6������r����pqm֚X��P�3╳���g�[�� |�^I){�^8]�R?X��/������͸�l�g�����7���,�'��J����y�DGK�2���p�zg��x�9A,4�A��x<��4K,�)g�:��^��-����[�]A�dL�jΟ�!�.ҵ��#Z�mFt0?�%sР�L�s���RB	
<�t
ք�y���������k漧Y���1b��(��,M�'��N1beH����Y�0�@ת��=�����WL�Z����{<)G� w�o�@:2i�/�+
�	�y`˛��)5���N��>Q{�x5�moF��(�(���/�s�~A=~X�� ;�����vD�1+G�a�����@�����g�����������d��e�b�5�0��<����"�	�	�&��w��$��$�� ��
9o����9��8��#6v���0���3�����m	D�
.(A'
�p���5��!��



%2���������S�k�������l�������k�w�J�E��B��
{z�,����9�9�&��?s���N�M��'Ux�f��a~�����������
���<�����b�{�����������`z��a������P]�#0��+����8}����������
"y~��fs�� }�����������4 #'+04:<@DJLPTZ_ek���4~�
.3}���3?r���
-���9 ? E L S Y ` g m s y  � � � � � � � � � � � � � � � ����������������O�g������W������g�����Rb�%5�� 0���>������
�fe� (|���h��$�$��"�������
;%).8>BHNRXbho����9�18���#Bv�R�< B I P V ] d j p v | � � � � � � � � � � � � � � � � #�����\�u�������~���Ql��J.Z�	-���({���*��������p��A�	����.{���
r�p�/h�������! �����T�m�������v���Efx�>T��'p��"d���$���z����j��;������(u���h��f��)`z����� %�����`�y�����������Un��NA�����,�������P��	C�
���0}���t�r�1n������& ����m��������x�K�G����
|{���;���!�P�N��W�g�����m��������x�L�H����
|{���;���!�P�N��6W�g�����[��������f�9�4����
�ji��w(��(�������=��<��D�U�hr|�	<FP[\/�*�rK9�;>?ABfC;D�DN_V\�_I`�!�$u,90�0�`n4�45c6�6=7�7z8�=�@f""#u#�#�`�;�=�@dC9D�DN]V\�_G`�`�!d","0�0l4�`�45a6�6<7�7y8J9�;=?@BeC:D�DN^V\�_H`�`�!e"!#t#�#�$,80�0m47a�45b6����l�657�7r8C9
#l#�#�$�697�7v8G9#p#�#�$��������Y�RI�����0�����W����4�v�v��+ s�0������d�e<���& 9����, ������1J[p����������	
9@]sz�����������	#5<CRVZ^bfjn~�������
 ):>Resz~���������������				
					!	%	)	;	O	b	m	x	�	�	�	�	�	�	�	�	�	�	
%
,
0
7
;
?
G
K
S
W
[
c
i
o
u
{
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
.1�2�3�4�5�6�7�8�9�:�q���#�:a:a;a;a;a;a;a;a;a;a;a;a;a;a;a;a;a;a;a;a;a8a8a:a:a:a:a:a:a:a:a:a:a:a:a8a:a:a:a� v5>8�8;�v�����(��1nqoC����[�^�aOd�Y\_՘�bP�Z]�NcXQ�	���G����_n���b����������_n��3Û
>y���Ye�f\core_intrinsics�	derive_eq������_n��������N�YQ����_n���D��ي��fJ����_n��*��������_n��К1l�˂����_n���X��W��$crate::cfg_if���/���_n���j9U���~$�u�����derive_clone_copy����_n��5� ������_n��b��$�հ'�G����_n���Gpg������Z��O\������_n������>��&X����_n���K�[�
z^�����_n����C܏&�����_n��U���P�������Z���_n����8��(t]}�J��������_n���`Pk�����
%���Z���_n���8Ӟ����<Q����_n���h�^�U�RDX����_n��a�F1Af\�����uy�_n���/G�~4������u��_n��Rs:-������u��_n����K���b����u�_n��E�)��l�����uE�_n��Ñ!�3�����ux�_n���]ַܡ���
�u��_n��\����.������u��_n�����0]�l~��
��u�_n��K�4�*nv
���
�uD�_n����ňɢH����	�uw�_n��,���b<��
��u��_n���z���s
��	��u��_n�����,|�	����
��_n���fQ�h��W_���9	A�_n�������R�|�x�x�_,�~�~�~`~-~�}�}�}a}.}�|�|�x{x�x�x�x�x�xex�x�xnx�xwx�x�xx�x�x�x�x_xixrx�x�x�xz�{�?|c0�~�~�~d~1~�}�}�}e}2}�|�|Fz�z|Ny"{�x�zp|�yX{�|�y�{�y�{$y�z�x6z�{�`|�O�~�~�~P~~�}�}�}Q}}�|tz�z/|�yH{y{�|�yr{�|�y�{z�{>y�z�ODHT ���I��K��]�ă����*1�A�.\�D���)'l�2>�ZG{�����w�?�5$�dL$�;����r@:2i�/�͗�	��fg�+
�	�/୎C�=�ՠ_��l{E�(cO*� ����C����������)�W���bV.	?�$��DGK�2�.R3<���`�%."�ͮ5�Cd%&1�7�ߟ�&��"a=�v'$؏=�vQ�&;�}I�'Ys*�t4�4,
�1fg�,�P�3�.31&���/���8mFt0?�%�Y���1b͒���3C��
x��?7��5Y�d7�9��`Nb'�:��%��x�9A,����{<)G��~A=~X���$@�]�(�,@�s���RE��d[�moF��(�!��"H�;/��$tI�
�
��4K,��Ό��NP�]k�'��N1be����Q�C�9���RB	
�h�U�[>8Rr�a[�E@�wf|]�!� |�^I){{n=�8_C>0��Vd���_���gҡ�2����g�[�z���k漧�e�-�m�h%-��pqm֚Xx����o��AH����r��w~@b0sz�
Zj�^�u�p U�<��y3w3eـƀMnM��g�ba��P�3�y))��l)6�z� PiR�6�)�[�� w�o�����p�zg����N���� �T/#PDI}���
h��.͓gU(�g�����H�_�?yR$�Oљlo�OF��̟�u�O�������-�����7��8�Qp	�3��@�-��͠�
��QD��$�D�[E���UEj�!�����V���9<7���V>�6��v��J����y�o�I��e�pbc�N
�+gK��U�-S�/��4+K)g�:��^��u۳�k����?�w�f��ȶdZubH����Y��0�@ת��BQ�&R� D�/к[Z�i[�]A�dLى6��辙�A���Le�#�gmv��HE"���k���Z�r��2�gp�!�CX�AC���N�tb_�o�+t_;sР�L�s��WL�Z���E�����&{��[�.�s\)�a2
)�7���,�'��;w��9�4�gl��nBI̊���B�e;�Ϥ{zT�&���w��A�8X��s�QStP�#�c���A�XkJ���X��q�^8]�R?X|�ΐ����b:���͸�l~r�+��+��Qd���8+VWG�2N^]����'�F~�n��n�><�t
ք�y��(��,M���J�:��e�_n��u����jֱ]��P�>n
��"��-m4�A��x<����3��?�g��Z
r	vyP<砞F,�0���%0�f�r��;6�>Q{�x5���/���}.ҵ��#Z��(���/�s��2�b��F�d��d�6>��=����������
�M�*��I�o@���	W_hy`˛��)5�t};2`3x�����D�1qr�T+�h�M����W��u[G>�:�Pmf�q����0N#u��.���2�J���.2�E��������"=����H��xM��S�, ������������&��1J�4	���]��34*��Y�)x^�ux�(kVB*M���<KvR��x��:,Ughl�A"QI!v/9w�_Sp=NQG	d,16?<&avu9#\[r9{��������n��J/t};2`3x����j/home/palash/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/getrandom-0.3.4/src/backends/use_file.rs� k�l����lK�Q�R"�C�7)=-H=O1M6,^#)LIIIC)GHIEIH/2
G-23E#
*P0> 62
.:5
2+4%&'!-!
&79"<-<#(=/CC?$ (T/
8VWLIZ>?d=LK>U!JGONGMNPK<NPNNN N=MF6@3%"=><*'9D'/%$�@�h�G�{d&�����n/home/palash/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/getrandom-0.3.4/src/backends/../util_libc.rs� �-����4MLDw�s��Q
o-�6J.H-,-*5aS.
'*,
')
C)`->)
"52=%@! PD+D=%KN=0
���������A�W3b��^/home/palash/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/getrandom-0.3.4/src/error.rs� NU٫ŧ�c0����Ӫ~�E�5:$3D!:I
8/QM@>-RXYMB&%
>:EAQ9:0A.I$BR
F=)e
GRPTVR&TN6!MKD#
-
(
b[^W=j\k<#
R/\<AT8^>A6!MS9#('$[9^LB*_.@W.@E/O/I?/3+$Q:7-6
?3-D3:9
%����g��gSv�}/home/palash/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/getrandom-0.3.4/src/backends/linux_android_with_fallback.rs� �8L�,��:AW}1E_�gD"#)-cP eP[%-== 1?0[=EC5*BNhc\0N
2"]=3J
GONMOL8- 
fW7KB57��k@V��F,�_k/home/palash/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/getrandom-0.3.4/src/backends/sanitizer.rs� �� S4�4��`�;0KMLF,KMO>6$L-"E*
OR
N:M	,HN8Y6>E"
"8���g���{qQ��]/home/palash/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/getrandom-0.3.4/src/util.rs� �VF��b}���8�*��T*0M9SCP
LE,>EPDI09QCP;2;0B
+0<?BE%B
+0<?BE%;*Uf���OM�#m��룄\/home/palash/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/getrandom-0.3.4/src/lib.rs� `G{����]N��1� �9-!Q?';'?	& ! ! 0

TOOK!PNKJ2 
4C@>HEKGI%K?+2B<
O%DF5G2&
%G2&
%�(�e�L���:��@b/home/palash/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/getrandom-0.3.4/src/../README.md� ������j�=�
d�����." Z\SU&U(	:N9 !;;�jABT?@l@S@>=ZA>;|A=AJ>j?`AZR`-WW�_Z��Y��QZ: 52BTXVQN2NVZZW+HJSROO9;PJPLQMN"ML:#L
0MIFHMIQ,Q.G
0&.%3MGLIJ#NOLRB1UR[YSOOL+FG>HIF=KFAIDGFIEJIJM9E'FKJDJ;NHMB>1nF3OX"(71PQDWm03%5=R75$"85U*%AH*?lM)SZxRTh^h�K|lyd�e,",;c�Q,%VPr&�
�
�������
�
�
����������������������� � �#�#�$4���Z��`��灵�:h/home/palash/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/getrandom-0.3.4/src/error_std_impls.rs� ]4���AƝo�,����
!"#@?
��UV1�a<�>�a/home/palash/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/getrandom-0.3.4/src/backends.rs� ��m�d�G?�H�<�<�%?HI@F)
.>8536=#6-$(NAd
: B-
"
XK[\(R>
#)%%(TNH
!)%)+'%(KJD)55

)0!KK9
@.-. 
 H+$2$ U>
-.1=# Hd-$(XVV0d

 UW�qr�!���\T�}�nt���r���v�d����ѝx86_64-unknown-linux-gnu���2�?�:����Vc��-5f49a8c90dd0a172��_n�����	�������
~�u����u����������������������������F�������������nn������q���~~����~�����#��1��e�e��
�3rust-end-file